Shape feature of EPS can be used.
3 * This file is a part of LEMON, a generic C++ optimization library
5 * Copyright (C) 2003-2006
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
20 #include <mapstorage.h>
23 #include <design_win.h>
24 #include <graph_displayer_canvas.h>
28 NoteBookTab::NoteBookTab():mapwinexists(false), designwinexists(false), epswinexists(false)
30 mapstorage=new MapStorage();
32 Gtk::ScrolledWindow *pScrolledWindow = manage(new Gtk::ScrolledWindow);
33 gd_canvas=new GraphDisplayerCanvas(*this);
34 pScrolledWindow->add(*gd_canvas);
35 add(*pScrolledWindow);
37 //connecting signals - controller character
38 mapstorage->signal_prop_ch().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::propertyChange));
39 mapstorage->signal_node_map_ch().connect(sigc::mem_fun(*this, &NoteBookTab::registerNewNodeMap));
40 mapstorage->signal_edge_map_ch().connect(sigc::mem_fun(*this, &NoteBookTab::registerNewEdgeMap));
41 mapstorage->signal_background_ch().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::setBackground));
46 void NoteBookTab::readFile(const std::string &file)
48 mapstorage->readFromFile(file);
49 mapstorage->file_name = file;
50 mapstorage->modified = false;
51 gd_canvas->drawGraph();
54 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList());
56 title_changed(Glib::filename_display_basename(file));
59 void NoteBookTab::newFile()
61 if (mapstorage->modified)
63 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
64 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
65 mdialog.add_button("Close file _without Saving", Gtk::RESPONSE_REJECT);
66 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
67 mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
68 switch (mdialog.run())
70 case Gtk::RESPONSE_CANCEL:
72 case Gtk::RESPONSE_REJECT:
74 case Gtk::RESPONSE_ACCEPT:
83 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList());
85 title_changed("unsaved file");
88 void NoteBookTab::openFile()
90 if (mapstorage->modified)
92 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
93 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
94 mdialog.add_button("Close file _without Saving", Gtk::RESPONSE_REJECT);
95 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
96 mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
97 switch (mdialog.run())
99 case Gtk::RESPONSE_CANCEL:
101 case Gtk::RESPONSE_REJECT:
103 case Gtk::RESPONSE_ACCEPT:
108 Gtk::FileChooserDialog fcdialog("Open File");
109 fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
110 fcdialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT);
111 if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
115 Glib::ustring filename = fcdialog.get_filename();
116 if (!mapstorage->readFromFile(filename))
118 mapstorage->file_name = filename;
119 mapstorage->modified = false;
120 gd_canvas->drawGraph();
123 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList());
125 title_changed(Glib::filename_display_basename(filename));
130 void NoteBookTab::saveFile()
132 if (mapstorage->file_name == "") {
137 mapstorage->writeToFile(mapstorage->file_name);
138 mapstorage->modified = false;
139 title_changed(Glib::filename_display_basename(mapstorage->file_name));
143 void NoteBookTab::saveFileAs()
145 Gtk::FileChooserDialog fcdialog("Save File", Gtk::FILE_CHOOSER_ACTION_SAVE);
146 fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
147 fcdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
148 if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
150 Glib::ustring filename = fcdialog.get_filename();
151 mapstorage->file_name = filename;
152 mapstorage->writeToFile(filename);
153 mapstorage->modified = false;
154 title_changed(Glib::filename_display_basename(filename));
158 void NoteBookTab::close()
160 if (mapstorage->modified)
162 Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
163 Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
164 mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
165 mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
166 mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
167 switch (mdialog.run())
169 case Gtk::RESPONSE_CANCEL:
171 case Gtk::RESPONSE_REJECT:
173 case Gtk::RESPONSE_ACCEPT:
182 mapwin->update(mapstorage->getEdgeMapList(), mapstorage->getNodeMapList());
184 title_changed("unsaved file");
187 void NoteBookTab::propertyChange(bool itisedge, int prop, std::string mapname)
189 mapstorage->changeActiveMap(itisedge, prop, mapname);
192 sigc::signal<void, NoteBookTab *, bool> NoteBookTab::signal_newmap_needed()
194 return signal_newmap;
197 void NoteBookTab::popupNewMapWin(bool itisedge)
199 signal_newmap.emit(this, itisedge);
202 std::string NoteBookTab::getActiveEdgeMap(int prop)
204 return mapstorage->getActiveEdgeMap(prop);
207 std::string NoteBookTab::getActiveNodeMap(int prop)
209 return mapstorage->getActiveNodeMap(prop);
212 void NoteBookTab::registerNewEdgeMap(std::string mapname)
216 mapwin->registerNewEdgeMap(mapname);
220 void NoteBookTab::registerNewNodeMap(std::string mapname)
224 mapwin->registerNewNodeMap(mapname);
228 epswin->registerNewNodeMap(mapname);
232 void NoteBookTab::createMapWin(std::string name)
236 mapwin=new MapWin("Map Setup - "+name, mapstorage->getEdgeMapList(), mapstorage->getNodeMapList(), *this);
237 mapst2mapwin=mapstorage->signal_map_win_ch().connect(sigc::mem_fun(*mapwin, &MapWin::changeEntry));
243 void NoteBookTab::createExportToEPSWin(std::string name)
247 epswin=new EpsWin("Export to EPS - "+name, mapstorage->getNodeMapList());
250 epswin->signal_eps_details_ch().connect(sigc::mem_fun(*this, &NoteBookTab::exportGraphToEPS));
251 epswin->signal_eps_close_ch().connect(sigc::mem_fun(*this, &NoteBookTab::closeEpsWin));
252 epswin->signal_new_map_ch().connect(sigc::mem_fun(*this, &NoteBookTab::popupNewMapWin));
257 void NoteBookTab::createDesignWin(std::string name)
261 double attraction, propulsation;
263 mapstorage->get_design_data(attraction, propulsation, iterations);
264 designwin=new DesignWin("Design Setup - "+name, attraction, propulsation, iterations);
266 designwin->signal_attraction().connect(sigc::mem_fun(mapstorage, &MapStorage::set_attraction));
267 designwin->signal_propulsation().connect(sigc::mem_fun(mapstorage, &MapStorage::set_propulsation));
268 designwin->signal_iteration().connect(sigc::mem_fun(mapstorage, &MapStorage::set_iteration));
269 designwin->close_run().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::reDesignGraph));
271 designwin->signal_delete_event().connect(sigc::mem_fun(*this, &NoteBookTab::closeDesignWin));
273 mapst2designwin=mapstorage->signal_design_win_ch().connect(sigc::mem_fun(*designwin, &DesignWin::set_data));
276 designwinexists=true;
280 void NoteBookTab::closeMapWin()
282 mapst2mapwin.disconnect();
287 void NoteBookTab::closeEpsWin()
293 bool NoteBookTab::closeDesignWin(GdkEventAny * e)
295 if(e->type==GDK_DELETE)
297 designwinexists=false;
298 mapst2designwin.disconnect();
303 sigc::signal<void, std::string> NoteBookTab::signal_title_ch()
308 void NoteBookTab::setView(bool autoscale, bool zoomtrack, double width, double radius)
310 gd_canvas->setView(autoscale, zoomtrack, width, radius);
313 void NoteBookTab::getView(bool & autoscale, bool & zoomtrack, double& width, double& radius)
315 gd_canvas->getView(autoscale, zoomtrack, width, radius);
318 void NoteBookTab::reDesignGraph()
320 gd_canvas->reDesignGraph();
323 void NoteBookTab::active_maps_needed()
325 mapstorage->broadcastActiveMaps();
328 void NoteBookTab::exportGraphToEPS(std::vector<bool> options, std::string filename, std::string shapemap)
330 mapstorage->exportGraphToEPS(options, filename, shapemap);
333 void NoteBookTab::title_changed(std::string newtitle)
335 signal_title.emit(newtitle);
338 epswin->set_title(newtitle);
342 designwin->set_title(newtitle);