From 7a701939aeed1d48e00c4d557a81835b0c4a0de7 Mon Sep 17 00:00:00 2001 From: "Ira W. Snyder" Date: Sat, 6 Oct 2007 23:18:02 -0700 Subject: [PATCH] Use the GUI Signed-off-by: Ira W. Snyder --- elevator.cpp | 33 +++++++++++++++++++++++++++++++++ main.cpp | 29 ++++++++++++++++++++++++++++- main.hpp | 10 ++++++++-- position.cpp | 5 +++++ position.hpp | 1 + 5 files changed, 75 insertions(+), 3 deletions(-) diff --git a/elevator.cpp b/elevator.cpp index 4a5eb37..b8cdb50 100644 --- a/elevator.cpp +++ b/elevator.cpp @@ -1,4 +1,5 @@ #include "elevator.hpp" +#include "main.hpp" Elevator::Elevator (int elevator_number) : state_(STATE_IDLE) @@ -61,6 +62,14 @@ bool Elevator::currently_at_stop () const 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; } @@ -117,6 +126,7 @@ void Elevator::transition_move_up () 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; } @@ -126,6 +136,7 @@ void Elevator::transition_move_down () 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; } @@ -158,19 +169,41 @@ void Elevator::transition_open_door () * * 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; } diff --git a/main.cpp b/main.cpp index 9b2d2e0..f49b107 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,7 @@ #include "main.hpp" +#include "elevatorgui.hpp" -ElevatorGUI *thegui = NULL; +static ElevatorGUI *thegui = NULL; int main (int argc, char *argv[]) { @@ -62,4 +63,30 @@ 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: */ diff --git a/main.hpp b/main.hpp index 570ca17..124c63e 100644 --- a/main.hpp +++ b/main.hpp @@ -1,11 +1,17 @@ #ifndef MAIN_HPP #define MAIN_HPP -#include "elevatorgui.hpp" +#include "direction.hpp" + #include #include -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 */ diff --git a/position.cpp b/position.cpp index e0da0f4..1d4a293 100644 --- a/position.cpp +++ b/position.cpp @@ -114,6 +114,11 @@ Position::operator float() const return temp; } +Position::operator int() const +{ + return major_; +} + std::ostream& operator<< (std::ostream& os, const Position& rhs) { os << "Position(" << rhs.major_ << "." << rhs.minor_ << ")"; diff --git a/position.hpp b/position.hpp index 0585b69..029966d 100644 --- a/position.hpp +++ b/position.hpp @@ -26,6 +26,7 @@ class Position bool operator> (const Position& rhs) const; Position operator- (const Position& rhs) const; operator float() const; + operator int() const; private: -- 2.25.1