Subversion Repositories programming

Rev

Rev 345 | Rev 348 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 345 Rev 347
Line 1... Line 1...
1
 
1
 
2
#include "elevator_window.h"
2
#include "elevator_window.h"
3
 
3
 
4
Elevator_Window::Elevator_Window ()
4
Elevator_Window::Elevator_Window (int numFloors, int numElevators)
-
 
5
    : numFloors (numFloors),
-
 
6
      numElevators (numElevators),
5
    : m_table  (11, 8, true)
7
      m_table (numFloors+1, numElevators+3, true)
6
{
8
{
7
    int i, j;
9
    int i, j;
8
    std::ostringstream strstrm;
10
    std::ostringstream strstrm;
9
    Gtk::ToggleButton *pToggleButton;
11
    Gtk::ToggleButton *pToggleButton;
10
    Gtk::Label *pLabel;
12
    Gtk::Label *pLabel;
11
    Gtk::Image *pImage;
13
    Gtk::Image *pImage;
12
    Button_Data bData;
14
    Button_Data bData;
13
 
15
 
14
    // Set up all of the buttons
16
    // Set up all of the buttons
15
    upbuttons.reserve (9);
17
    upbuttons.reserve (numFloors-1);
16
    downbuttons.reserve (9);
18
    downbuttons.reserve (numFloors-1);
17
 
19
 
18
    for (i=0; i<9; i++)
20
    for (i=0; i<numFloors-1; i++)
19
    {
21
    {
20
        // Create an "up" button
22
        // Create an "up" button
21
        strstrm.str ("");
23
        strstrm.str ("");
22
        strstrm << "Up"; // Button " << i;
24
        strstrm << "Up";
23
        pToggleButton = new Gtk::ToggleButton (strstrm.str());
25
        pToggleButton = new Gtk::ToggleButton (strstrm.str());
24
 
26
 
25
        bData.str = strstrm.str();
27
        bData.str = strstrm.str();
26
        bData.button_num = i;
28
        bData.button_num = i;
27
        bData.direction = MOVE_UP;
29
        bData.direction = MOVE_UP;
Line 30... Line 32...
30
        pToggleButton->signal_clicked ().connect (
32
        pToggleButton->signal_clicked ().connect (
31
                sigc::bind<Button_Data> (sigc::mem_fun (*this, &Elevator_Window::on_toggle_button_pressed), bData));
33
                sigc::bind<Button_Data> (sigc::mem_fun (*this, &Elevator_Window::on_toggle_button_pressed), bData));
32
        upbuttons.push_back (pToggleButton);
34
        upbuttons.push_back (pToggleButton);
33
 
35
 
34
        // Put it in the table
36
        // Put it in the table
35
        m_table.attach (*pToggleButton, 1, 2, 10-(i+1), 10-i); //i+1, i+2);
37
        m_table.attach (*pToggleButton, 1, 2, numFloors-(i+1), numFloors-i);
36
 
38
 
37
        // Create a "down" button
39
        // Create a "down" button
38
        strstrm.str ("");
40
        strstrm.str ("");
39
        strstrm << "Down"; // Button " << i;
41
        strstrm << "Down";
40
        pToggleButton = new Gtk::ToggleButton (strstrm.str());
42
        pToggleButton = new Gtk::ToggleButton (strstrm.str());
41
 
43
 
42
        bData.str = strstrm.str();
44
        bData.str = strstrm.str();
43
        bData.button_num = i;
45
        bData.button_num = i;
44
        bData.direction = MOVE_DOWN;
46
        bData.direction = MOVE_DOWN;
Line 47... Line 49...
47
        pToggleButton->signal_clicked ().connect (
49
        pToggleButton->signal_clicked ().connect (
48
                sigc::bind<Button_Data> (sigc::mem_fun (*this, &Elevator_Window::on_toggle_button_pressed), bData));
50
                sigc::bind<Button_Data> (sigc::mem_fun (*this, &Elevator_Window::on_toggle_button_pressed), bData));
49
        downbuttons.push_back (pToggleButton);
51
        downbuttons.push_back (pToggleButton);
50
 
52
 
51
        // Put it in the table
53
        // Put it in the table
52
        m_table.attach (*pToggleButton, 2, 3, 10-(i+2), 10-(i+1)); //i, i+1);
54
        m_table.attach (*pToggleButton, 2, 3, numFloors-(i+2), numFloors-(i+1));
53
    }
55
    }
54
 
56
 
55
    // Labels
57
    // Labels
56
    for (i=0; i<10; i++)
58
    for (i=0; i<numFloors; i++)
57
    {
59
    {
58
        strstrm.str ("");
60
        strstrm.str ("");
59
        strstrm << "Floor " << i;
61
        strstrm << "Floor " << i;
60
        pLabel = new Gtk::Label (strstrm.str ());
62
        pLabel = new Gtk::Label (strstrm.str ());
61
 
63
 
62
        m_table.attach (*pLabel, 0, 1, 10-(i+1), 10-i);
64
        m_table.attach (*pLabel, 0, 1, numFloors-(i+1), numFloors-i);
63
    }
65
    }
64
 
66
 
65
    images.reserve (10*5);
67
    images.reserve (numFloors*numElevators);
66
 
68
 
67
    // Images
69
    // Images
68
    for (i=0; i<10; i++)
70
    for (i=0; i<numFloors; i++)
69
    {
71
    {
70
        for (j=3; j<8; j++)
72
        for (j=3; j<numElevators+3; j++)
71
        {
73
        {
72
            pImage = new Gtk::Image ("eclose.png");
74
            pImage = new Gtk::Image ("eclose.png");
73
 
75
 
74
            images.push_back (pImage);
76
            images.push_back (pImage);
75
 
77
 
Line 77... Line 79...
77
        }
79
        }
78
    }
80
    }
79
 
81
 
80
    // Bottom Row of Labels
82
    // Bottom Row of Labels
81
    pLabel = new Gtk::Label ("Position:");
83
    pLabel = new Gtk::Label ("Position:");
82
    m_table.attach (*pLabel, 2, 3, 10, 11);
84
    m_table.attach (*pLabel, 2, 3, numFloors, numFloors+1);
83
 
85
 
84
    labels.reserve (5);
86
    labels.reserve (numElevators);
85
 
87
 
86
    for (i=3; i<8; i++)
88
    for (i=3; i<numElevators+3; i++)
87
    {
89
    {
88
        pLabel = new Gtk::Label ("0");
90
        pLabel = new Gtk::Label ("0");
89
        labels.push_back (pLabel);
91
        labels.push_back (pLabel);
90
        m_table.attach (*pLabel, i, i+1, 10, 11);
92
        m_table.attach (*pLabel, i, i+1, numFloors, numFloors+1);
91
    }
93
    }
92
 
94
 
93
    set_title ("GTK Elevator Simulator");
95
    set_title ("GTK Elevator Simulator");
94
 
96
 
95
    // Set the border width of the window
97
    // Set the border width of the window
Line 134... Line 136...
134
}
136
}
135
 
137
 
136
void Elevator_Window::open_elevator_at (int row, int col)
138
void Elevator_Window::open_elevator_at (int row, int col)
137
{
139
{
138
    assert (row >= 0);
140
    assert (row >= 0);
139
    assert (row < 10);
141
    assert (row < numFloors);
140
    assert (col >= 0);
142
    assert (col >= 0);
141
    assert (col < 5);
143
    assert (col < numElevators);
142
 
144
 
143
    const int numRows = 10; // FIXME
-
 
144
    const int numCols = 5;
-
 
145
 
-
 
146
    images.at (row*numCols+col)->set ("eopen2.png");
145
    images.at (row*numElevators+col)->set ("eopen2.png");
147
}
146
}
148
 
147
 
149
void Elevator_Window::close_elevator_at (int row, int col)
148
void Elevator_Window::close_elevator_at (int row, int col)
150
{
149
{
151
    assert (row >= 0);
150
    assert (row >= 0);
152
    assert (row < 10);
151
    assert (row < numFloors);
153
    assert (col >= 0);
152
    assert (col >= 0);
154
    assert (col < 5);
153
    assert (col < numElevators);
155
 
154
 
156
    const int numRows = 10; // FIXME
-
 
157
    const int numCols = 5;
-
 
158
    
-
 
159
    images.at (row*numCols+col)->clear ();
155
    images.at (row*numElevators+col)->clear ();
160
    images.at (row*numCols+col)->set ("eclose.png");
156
    images.at (row*numElevators+col)->set ("eclose.png");
161
}
157
}
162
 
158
 
163
void Elevator_Window::unset_up_button (int button_num)
159
void Elevator_Window::unset_up_button (int button_num)
164
{
160
{
165
    assert (button_num >= 0);
161
    assert (button_num >= 0);
166
    assert (button_num < 9);
162
    assert (button_num < numFloors);
167
 
163
 
168
    upbuttons.at (button_num)->set_active (false);
164
    upbuttons.at (button_num)->set_active (false);
169
}
165
}
170
 
166
 
171
void Elevator_Window::unset_down_button (int button_num)
167
void Elevator_Window::unset_down_button (int button_num)
172
{
168
{
173
    assert (button_num >= 0);
169
    assert (button_num >= 0);
174
    assert (button_num < 9);
170
    assert (button_num < numFloors);
175
 
171
 
176
    downbuttons.at (button_num)->set_active (false);
172
    downbuttons.at (button_num)->set_active (false);
177
}
173
}
178
 
174
 
179
void Elevator_Window::set_label (int label_num, std::string new_text)
175
void Elevator_Window::set_label (int label_num, std::string new_text)
180
{
176
{
181
    assert (label_num >= 0);
177
    assert (label_num >= 0);
182
    assert (label_num < 5);
178
    assert (label_num < numElevators);
183
 
179
 
184
    labels.at (label_num)->set_text (new_text);
180
    labels.at (label_num)->set_text (new_text);
185
}
181
}
186
 
182
 
187
void Elevator_Window::set_controller (Controller *controller)
183
void Elevator_Window::set_controller (Controller *controller)
Line 218... Line 214...
218
    // Parse the entry
214
    // Parse the entry
219
    std::string s = entry.get_text();
215
    std::string s = entry.get_text();
220
    std::vector<std::string> SplitVec;
216
    std::vector<std::string> SplitVec;
221
    boost::split (SplitVec, s, boost::is_any_of(" "));
217
    boost::split (SplitVec, s, boost::is_any_of(" "));
222
 
218
 
223
    const int num_floors = 10; // FIXME
-
 
224
 
-
 
225
    int i, val;
219
    int i, val;
226
    for (i=0; i<SplitVec.size(); i++)
220
    for (i=0; i<SplitVec.size(); i++)
227
    {
221
    {
228
        val = atoi (SplitVec[i].c_str());
222
        val = atoi (SplitVec[i].c_str());
229
 
223
 
230
        // Ignore values that are outside of range
224
        // Ignore values that are outside of range
231
        if (val >= 0 && val < num_floors)
225
        if (val >= 0 && val < numFloors)
232
        {
226
        {
233
            controller->push_button_in_elevator (elevator_num, val);
227
            controller->push_button_in_elevator (elevator_num, val);
234
            std::cout << "Pushing button: " << val << std::endl;
228
            std::cout << "Pushing button: " << val << std::endl;
235
        }
229
        }
236
    }
230
    }