#include "elevator.hpp"
+#include "main.hpp"
Elevator::Elevator (int elevator_number)
: state_(STATE_IDLE)
if (*it == current)
return true;
+ /* Check if we are IDLE. If so, only the position needs to match */
+ if (direction_ == IDLE)
+ {
+ for (it = stops_.begin (); it != stops_.end (); it++)
+ if (it->getPosition() == position_)
+ return true;
+ }
+
/* No match */
return false;
}
position_ += ELEVATOR_STEP;
// TODO: Call into the GUI to update the position
+ gui_update_position_label (number_, (float)position_);
std::cout << "Updating the GUI with our position: " << position_ << std::endl;
}
position_ -= ELEVATOR_STEP;
// TODO: Call into the GUI to update the position
+ gui_update_position_label (number_, (float)position_);
std::cout << "Updating the GUI with our position: " << position_ << std::endl;
}
*
* Otherwise, just clear this stop */
if (direction_ == UP && stops_above == 0)
+ {
stops_.remove (Stop(position_, ALL));
+ gui_unpress_request_button (number_, (int)position_);
+ gui_unpress_call_button ((int)position_, UP);
+ gui_unpress_call_button ((int)position_, DOWN);
+ }
else if (direction_ == DOWN && stops_below == 0)
+ {
+ stops_.remove (Stop(position_, ALL));
+ gui_unpress_request_button (number_, (int)position_);
+ gui_unpress_call_button ((int)position_, UP);
+ gui_unpress_call_button ((int)position_, DOWN);
+ }
+ else if (direction_ == IDLE)
+ {
stops_.remove (Stop(position_, ALL));
+ gui_unpress_request_button (number_, (int)position_);
+ gui_unpress_call_button ((int)position_, UP);
+ gui_unpress_call_button ((int)position_, DOWN);
+ }
else
+ {
stops_.remove (Stop(position_, direction_));
+ gui_unpress_call_button ((int)position_, direction_);
+ }
// TODO: Call into the GUI to open the door
+ gui_open_door (number_, (int)position_);
std::cout << "Opening Door" << std::endl;
}
void Elevator::transition_close_door ()
{
// TODO: Call into the GUI to close the door
+ gui_close_door (number_, (int)position_);
std::cout << "Closing Door" << std::endl;
}
#include "main.hpp"
+#include "elevatorgui.hpp"
-ElevatorGUI *thegui = NULL;
+static ElevatorGUI *thegui = NULL;
int main (int argc, char *argv[])
{
return 0;
}
+
+void gui_update_position_label (int elevator, float new_position)
+{
+ thegui->gui_update_position_label (elevator, new_position);
+}
+
+void gui_unpress_call_button (int floor, Direction direction)
+{
+ thegui->gui_unpress_call_button (floor, direction);
+}
+
+void gui_unpress_request_button (int elevator, int floor)
+{
+ thegui->gui_unpress_request_button (elevator, floor);
+}
+
+void gui_open_door (int elevator, int floor)
+{
+ thegui->gui_open_door (elevator, floor);
+}
+
+void gui_close_door (int elevator, int floor)
+{
+ thegui->gui_close_door (elevator, floor);
+}
+
/* vim: set ts=4 sts=4 sw=4 noet tw=112: */
#ifndef MAIN_HPP
#define MAIN_HPP
-#include "elevatorgui.hpp"
+#include "direction.hpp"
+
#include <iostream>
#include <gtkmm/main.h>
-extern ElevatorGUI *thegui;
+void gui_update_position_label (int elevator, float new_position);
+void gui_unpress_call_button (int floor, Direction direction);
+void gui_unpress_request_button (int elevator, int floor);
+void gui_open_door (int elevator, int floor);
+void gui_close_door (int elevator, int floor);
+
#endif /* MAIN_HPP */