Get the Play/Pause and Quit buttons working nicely
[cs356-p1-elevator.git] / elevatorgui.cpp
index 51c14cb..8e7ae2a 100644 (file)
@@ -4,7 +4,7 @@ ElevatorGUI::ElevatorGUI (int floors, int elevators)
        : Gtk::Window()
        , number_of_floors_(floors)
        , number_of_elevators_(elevators)
-       , simulation_status_(STOPPED)
+       , simulation_status_(PAUSED)
 
        /* The ElevatorController */
        , ec_(floors, elevators)
@@ -15,7 +15,6 @@ ElevatorGUI::ElevatorGUI (int floors, int elevators)
        /* GUI Elements */
        , table_(floors+3, elevators+1)
        , button_playpause_(Gtk::Stock::MEDIA_PLAY)
-       , button_stop_(Gtk::Stock::STOP)
        , button_quit_(Gtk::Stock::QUIT)
 
        /* Storage for GUI elements for later lookup */
@@ -149,15 +148,16 @@ ElevatorGUI::ElevatorGUI (int floors, int elevators)
        /* Fill in the control buttons */
        Gtk::HBox *box = new Gtk::HBox ();
 
+       /* Tell the Play/Pause button to use the StockID so we can change it's image */
+       button_playpause_.set_use_stock (true);
+
+       /* Signals for control buttons */
        button_quit_.signal_clicked().connect (
                        sigc::mem_fun (*this, &ElevatorGUI::on_quit_button_clicked));
-       button_stop_.signal_clicked().connect (
-                       sigc::mem_fun (*this, &ElevatorGUI::on_stop_button_clicked));
        button_playpause_.signal_clicked().connect (
                        sigc::mem_fun (*this, &ElevatorGUI::on_playpause_button_clicked));
 
        box->pack_start (button_playpause_);
-       box->pack_start (button_stop_);
        box->pack_start (button_quit_);
 
        /* Attach the box to the bottom of the GUI */
@@ -178,26 +178,20 @@ void ElevatorGUI::on_quit_button_clicked ()
 
 void ElevatorGUI::on_playpause_button_clicked ()
 {
-       std::string names[] = { "STOPPED", "RUNNING", "PAUSED" };
+       std::string names[] = { "RUNNING", "PAUSED" };
        std::cout << "Play/Pause pressed with status=" << names[simulation_status_] << std::endl;
 
        switch (simulation_status_)
        {
-               case STOPPED:
-                       simulation_status_ = RUNNING;
-
-                       // add and start timer
-                       timer_ = Glib::signal_timeout().connect (
-                                               sigc::mem_fun (*this, &ElevatorGUI::on_timer_tick),
-                                               timer_tick_ms_);
-
-                       break;
                case RUNNING:
                        simulation_status_= PAUSED;
 
                        // stop and remove timer
                        timer_.disconnect ();
 
+                       // Set the StockID of the button
+                       button_playpause_.set_label ("gtk-media-play");
+
                        break;
                case PAUSED:
                        simulation_status_ = RUNNING;
@@ -207,6 +201,9 @@ void ElevatorGUI::on_playpause_button_clicked ()
                                                sigc::mem_fun (*this, &ElevatorGUI::on_timer_tick),
                                                timer_tick_ms_);
 
+                       // Set the StockID of the button
+                       button_playpause_.set_label ("gtk-media-pause");
+
                        break;
                default:
                        std::cout << "Bad Simulation Status in Play/Pause" << std::endl;
@@ -214,14 +211,6 @@ void ElevatorGUI::on_playpause_button_clicked ()
        }
 }
 
-void ElevatorGUI::on_stop_button_clicked ()
-{
-       // FIXME: implement this
-       std::cout << "STOP Button Clicked" << std::endl;
-
-       simulation_status_ = STOPPED;
-}
-
 void ElevatorGUI::on_request_button_toggled (RequestButton *button)
 {
        // Only send an elevator if we are toggled to on