: Gtk::Window()
, number_of_floors_(floors)
, number_of_elevators_(elevators)
- , simulation_status_(STOPPED)
+ , simulation_status_(PAUSED)
/* The ElevatorController */
, ec_(floors, elevators)
, timer_()
/* GUI Elements */
- , table_(floors+1, elevators+3)
+ , 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 */
int i, j, e, f, e_num, f_num, f_attach;
std::ostringstream str;
+ /* Set Table Spacing / Window Border Size */
+ table_.set_col_spacings (8);
+ table_.set_row_spacings (8);
+ set_border_width (10);
+
/* Fill in all of the ElevatorDoors and CallButtons */
for (f_attach=0, f=floors-1; f>=0; --f, ++f_attach)
{
call_buttons_.push_back (callbutton);
box->pack_start (*callbutton);
}
+ else // we are on the top floor, create a dummy label
+ {
+ Gtk::Label *label = new Gtk::Label ("");
+ box->pack_start (*label);
+ }
/* Only create the DOWN CallButton if we are not on the bottom floor */
if (f != 0)
call_buttons_.push_back (callbutton);
box->pack_end (*callbutton);
}
+ else // we are on the bottom floor, create a dummy label
+ {
+ Gtk::Label *label = new Gtk::Label ("");
+ box->pack_end (*label);
+ }
for (e=0; e<elevators; ++e) // run left-to-right
{
+ /* Fill in all of the PositionLabels */
+ for (e=0; e<elevators; ++e)
+ {
+ PositionLabel *label = new PositionLabel (e);
+ position_labels_.push_back (label);
+ table_.attach (*label, e+1, e+2, floors, floors+1);
+ }
+
+
+
/* Fill in all of the Elevator Request Panels */
for (e=0; e<elevators; ++e)
{
}
// Attach the Panel
- table_.attach (*panel, e+1, e+2, floors, floors+1);
- }
-
-
-
- /* Fill in all of the PositionLabels */
- for (e=0; e<elevators; ++e)
- {
- PositionLabel *label = new PositionLabel (e);
- position_labels_.push_back (label);
- table_.attach (*label, e+1, e+2, floors+1, floors+2);
+ table_.attach (*panel, e+1, e+2, floors+1, floors+2);
}
/* 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 */
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;
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;
}
}
-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