15 * purpose. |
15 * purpose. |
16 * |
16 * |
17 */ |
17 */ |
18 |
18 |
19 #include <nbtab.h> |
19 #include <nbtab.h> |
|
20 #include <mapstorage.h> |
20 #include <eps_win.h> |
21 #include <eps_win.h> |
21 |
22 #include <map_win.h> |
22 NoteBookTab::NoteBookTab():mapwinexists(false), designwinexists(false), mapstorage(*this) |
23 #include <design_win.h> |
23 { |
24 #include <graph_displayer_canvas.h> |
|
25 |
|
26 |
|
27 |
|
28 NoteBookTab::NoteBookTab():mapwinexists(false), designwinexists(false) |
|
29 { |
|
30 mapstorage=new MapStorage(*this); |
|
31 |
24 Gtk::ScrolledWindow *pScrolledWindow = manage(new Gtk::ScrolledWindow); |
32 Gtk::ScrolledWindow *pScrolledWindow = manage(new Gtk::ScrolledWindow); |
25 gd_canvas=new GraphDisplayerCanvas(*this); |
33 gd_canvas=new GraphDisplayerCanvas(*this); |
26 pScrolledWindow->add(*gd_canvas); |
34 pScrolledWindow->add(*gd_canvas); |
27 add(*pScrolledWindow); |
35 add(*pScrolledWindow); |
28 |
36 |
29 //connecting signals - controller character |
37 //connecting signals - controller character |
30 mapstorage.signal_prop_ch().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::propertyChange)); |
38 mapstorage->signal_prop_ch().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::propertyChange)); |
31 mapstorage.signal_node_map_ch().connect(sigc::mem_fun(*this, &NoteBookTab::registerNewNodeMap)); |
39 mapstorage->signal_node_map_ch().connect(sigc::mem_fun(*this, &NoteBookTab::registerNewNodeMap)); |
32 mapstorage.signal_edge_map_ch().connect(sigc::mem_fun(*this, &NoteBookTab::registerNewEdgeMap)); |
40 mapstorage->signal_edge_map_ch().connect(sigc::mem_fun(*this, &NoteBookTab::registerNewEdgeMap)); |
33 show_all_children(); |
41 show_all_children(); |
34 show(); |
42 show(); |
35 } |
43 } |
36 |
44 |
37 void NoteBookTab::readFile(const std::string &file) |
45 void NoteBookTab::readFile(const std::string &file) |
38 { |
46 { |
39 mapstorage.readFromFile(file); |
47 mapstorage->readFromFile(file); |
40 mapstorage.file_name = file; |
48 mapstorage->file_name = file; |
41 mapstorage.modified = false; |
49 mapstorage->modified = false; |
42 gd_canvas->drawGraph(); |
50 gd_canvas->drawGraph(); |
43 if(mapwinexists) |
51 if(mapwinexists) |
44 { |
52 { |
45 mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList()); |
53 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList()); |
46 } |
54 } |
47 signal_title.emit(Glib::filename_display_basename(file)); |
55 signal_title.emit(Glib::filename_display_basename(file)); |
48 } |
56 } |
49 |
57 |
50 void NoteBookTab::newFile() |
58 void NoteBookTab::newFile() |
51 { |
59 { |
52 if (mapstorage.modified) |
60 if (mapstorage->modified) |
53 { |
61 { |
54 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true, |
62 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true, |
55 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); |
63 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); |
56 mdialog.add_button("Close file _without Saving", Gtk::RESPONSE_REJECT); |
64 mdialog.add_button("Close file _without Saving", Gtk::RESPONSE_REJECT); |
57 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
65 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
66 saveFile(); |
74 saveFile(); |
67 break; |
75 break; |
68 } |
76 } |
69 } |
77 } |
70 gd_canvas->clear(); |
78 gd_canvas->clear(); |
71 mapstorage.clear(); |
79 mapstorage->clear(); |
72 if(mapwinexists) |
80 if(mapwinexists) |
73 { |
81 { |
74 mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList()); |
82 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList()); |
75 } |
83 } |
76 signal_title.emit("unsaved file"); |
84 signal_title.emit("unsaved file"); |
77 } |
85 } |
78 |
86 |
79 void NoteBookTab::openFile() |
87 void NoteBookTab::openFile() |
80 { |
88 { |
81 if (mapstorage.modified) |
89 if (mapstorage->modified) |
82 { |
90 { |
83 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true, |
91 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true, |
84 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); |
92 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); |
85 mdialog.add_button("Close file _without Saving", Gtk::RESPONSE_REJECT); |
93 mdialog.add_button("Close file _without Saving", Gtk::RESPONSE_REJECT); |
86 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
94 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
100 fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
108 fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
101 fcdialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); |
109 fcdialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); |
102 if (fcdialog.run() == Gtk::RESPONSE_ACCEPT) |
110 if (fcdialog.run() == Gtk::RESPONSE_ACCEPT) |
103 { |
111 { |
104 gd_canvas->clear(); |
112 gd_canvas->clear(); |
105 mapstorage.clear(); |
113 mapstorage->clear(); |
106 Glib::ustring filename = fcdialog.get_filename(); |
114 Glib::ustring filename = fcdialog.get_filename(); |
107 if (!mapstorage.readFromFile(filename)) |
115 if (!mapstorage->readFromFile(filename)) |
108 { |
116 { |
109 mapstorage.file_name = filename; |
117 mapstorage->file_name = filename; |
110 mapstorage.modified = false; |
118 mapstorage->modified = false; |
111 gd_canvas->drawGraph(); |
119 gd_canvas->drawGraph(); |
112 if(mapwinexists) |
120 if(mapwinexists) |
113 { |
121 { |
114 mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList()); |
122 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList()); |
115 } |
123 } |
116 signal_title.emit(Glib::filename_display_basename(filename)); |
124 signal_title.emit(Glib::filename_display_basename(filename)); |
117 } |
125 } |
118 } |
126 } |
119 } |
127 } |
120 |
128 |
121 void NoteBookTab::saveFile() |
129 void NoteBookTab::saveFile() |
122 { |
130 { |
123 if (mapstorage.file_name == "") { |
131 if (mapstorage->file_name == "") { |
124 saveFileAs(); |
132 saveFileAs(); |
125 } |
133 } |
126 else |
134 else |
127 { |
135 { |
128 mapstorage.writeToFile(mapstorage.file_name); |
136 mapstorage->writeToFile(mapstorage->file_name); |
129 mapstorage.modified = false; |
137 mapstorage->modified = false; |
130 signal_title.emit(Glib::filename_display_basename(mapstorage.file_name)); |
138 signal_title.emit(Glib::filename_display_basename(mapstorage->file_name)); |
131 } |
139 } |
132 } |
140 } |
133 |
141 |
134 void NoteBookTab::saveFileAs() |
142 void NoteBookTab::saveFileAs() |
135 { |
143 { |
137 fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
145 fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
138 fcdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); |
146 fcdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); |
139 if (fcdialog.run() == Gtk::RESPONSE_ACCEPT) |
147 if (fcdialog.run() == Gtk::RESPONSE_ACCEPT) |
140 { |
148 { |
141 Glib::ustring filename = fcdialog.get_filename(); |
149 Glib::ustring filename = fcdialog.get_filename(); |
142 mapstorage.file_name = filename; |
150 mapstorage->file_name = filename; |
143 mapstorage.writeToFile(filename); |
151 mapstorage->writeToFile(filename); |
144 mapstorage.modified = false; |
152 mapstorage->modified = false; |
145 signal_title.emit(Glib::filename_display_basename(filename)); |
153 signal_title.emit(Glib::filename_display_basename(filename)); |
146 } |
154 } |
147 } |
155 } |
148 |
156 |
149 void NoteBookTab::close() |
157 void NoteBookTab::close() |
150 { |
158 { |
151 if (mapstorage.modified) |
159 if (mapstorage->modified) |
152 { |
160 { |
153 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true, |
161 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true, |
154 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); |
162 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); |
155 mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT); |
163 mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT); |
156 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
164 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); |
165 saveFile(); |
173 saveFile(); |
166 break; |
174 break; |
167 } |
175 } |
168 } |
176 } |
169 gd_canvas->clear(); |
177 gd_canvas->clear(); |
170 mapstorage.clear(); |
178 mapstorage->clear(); |
171 if(mapwinexists) |
179 if(mapwinexists) |
172 { |
180 { |
173 mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList()); |
181 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList()); |
174 } |
182 } |
175 signal_title.emit("unsaved file"); |
183 signal_title.emit("unsaved file"); |
176 } |
184 } |
177 |
185 |
178 void NoteBookTab::propertyChange(bool itisedge, int prop, std::string mapname) |
186 void NoteBookTab::propertyChange(bool itisedge, int prop, std::string mapname) |
179 { |
187 { |
180 mapstorage.changeActiveMap(itisedge, prop, mapname); |
188 mapstorage->changeActiveMap(itisedge, prop, mapname); |
181 } |
189 } |
182 |
190 |
183 sigc::signal<void, NoteBookTab *, bool> NoteBookTab::signal_newmap_needed() |
191 sigc::signal<void, NoteBookTab *, bool> NoteBookTab::signal_newmap_needed() |
184 { |
192 { |
185 return signal_newmap; |
193 return signal_newmap; |
190 signal_newmap.emit(this, itisedge); |
198 signal_newmap.emit(this, itisedge); |
191 } |
199 } |
192 |
200 |
193 std::string NoteBookTab::getActiveEdgeMap(int prop) |
201 std::string NoteBookTab::getActiveEdgeMap(int prop) |
194 { |
202 { |
195 return mapstorage.getActiveEdgeMap(prop); |
203 return mapstorage->getActiveEdgeMap(prop); |
196 } |
204 } |
197 |
205 |
198 std::string NoteBookTab::getActiveNodeMap(int prop) |
206 std::string NoteBookTab::getActiveNodeMap(int prop) |
199 { |
207 { |
200 return mapstorage.getActiveNodeMap(prop); |
208 return mapstorage->getActiveNodeMap(prop); |
201 } |
209 } |
202 |
210 |
203 void NoteBookTab::registerNewEdgeMap(std::string mapname) |
211 void NoteBookTab::registerNewEdgeMap(std::string mapname) |
204 { |
212 { |
205 if(mapwinexists) |
213 if(mapwinexists) |
242 { |
250 { |
243 if(!designwinexists) |
251 if(!designwinexists) |
244 { |
252 { |
245 double attraction, propulsation; |
253 double attraction, propulsation; |
246 int iterations; |
254 int iterations; |
247 mapstorage.get_design_data(attraction, propulsation, iterations); |
255 mapstorage->get_design_data(attraction, propulsation, iterations); |
248 designwin=new DesignWin("Design Setup - "+name, attraction, propulsation, iterations, *this); |
256 designwin=new DesignWin("Design Setup - "+name, attraction, propulsation, iterations, *this); |
249 |
257 |
250 designwin->signal_attraction().connect(sigc::mem_fun(mapstorage, &MapStorage::set_attraction)); |
258 designwin->signal_attraction().connect(sigc::mem_fun(mapstorage, &MapStorage::set_attraction)); |
251 designwin->signal_propulsation().connect(sigc::mem_fun(mapstorage, &MapStorage::set_propulsation)); |
259 designwin->signal_propulsation().connect(sigc::mem_fun(mapstorage, &MapStorage::set_propulsation)); |
252 designwin->signal_iteration().connect(sigc::mem_fun(mapstorage, &MapStorage::set_iteration)); |
260 designwin->signal_iteration().connect(sigc::mem_fun(mapstorage, &MapStorage::set_iteration)); |
253 designwin->close_run().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::reDesignGraph)); |
261 designwin->close_run().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::reDesignGraph)); |
254 |
262 |
255 designwin->signal_delete_event().connect(sigc::mem_fun(*this, &NoteBookTab::closeDesignWin)); |
263 designwin->signal_delete_event().connect(sigc::mem_fun(*this, &NoteBookTab::closeDesignWin)); |
256 |
264 |
257 mapst2designwin=mapstorage.signal_design_win_ch().connect(sigc::mem_fun(*designwin, &DesignWin::set_data)); |
265 mapst2designwin=mapstorage->signal_design_win_ch().connect(sigc::mem_fun(*designwin, &DesignWin::set_data)); |
258 |
266 |
259 designwin->show(); |
267 designwin->show(); |
260 designwinexists=true; |
268 designwinexists=true; |
261 } |
269 } |
262 } |
270 } |