COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/nbtab.cc @ 1862:d47ebd34e581

Last change on this file since 1862:d47ebd34e581 was 1849:a4d1362397fe, checked in by Hegyi Péter, 14 years ago

Notebook style is provided. Without opportunity to close tabs. :-) But with all other necessary things (I think).

File size: 5.4 KB
Line 
1#include <nbtab.h>
2
3NoteBookTab::NoteBookTab():mapwinexists(false)
4{
5  gd_canvas=new GraphDisplayerCanvas(*this);
6  add(*gd_canvas);
7
8  //connecting signals - controller character
9  mapstorage.signal_prop_ch().connect(sigc::mem_fun(*gd_canvas, &GraphDisplayerCanvas::propertyChange));
10  show_all_children();
11  show();
12}
13
14void NoteBookTab::readFile(const std::string &file)
15{
16  mapstorage.readFromFile(file);
17  mapstorage.file_name = file;
18  mapstorage.modified = false;
19  gd_canvas->drawGraph();
20  if(mapwinexists)
21    {
22      mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList());
23    }
24  signal_title.emit(Glib::filename_display_basename(file));
25}
26
27void NoteBookTab::newFile()
28{
29  if (mapstorage.modified)
30  {
31    Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
32        Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
33    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
34    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
35    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
36    switch (mdialog.run())
37    {
38      case Gtk::RESPONSE_CANCEL:
39        return;
40      case Gtk::RESPONSE_REJECT:
41        break;
42      case Gtk::RESPONSE_ACCEPT:
43        saveFile();
44        break;
45    }
46  }
47  gd_canvas->clear();
48  mapstorage.clear();
49  if(mapwinexists)
50    {
51      mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList());
52    }
53  signal_title.emit("unsaved file");
54}
55
56void NoteBookTab::openFile()
57{
58  if (mapstorage.modified)
59  {
60    Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
61        Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
62    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
63    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
64    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
65    switch (mdialog.run())
66    {
67      case Gtk::RESPONSE_CANCEL:
68        return;
69      case Gtk::RESPONSE_REJECT:
70        break;
71      case Gtk::RESPONSE_ACCEPT:
72        saveFile();
73        break;
74    }
75  }
76  Gtk::FileChooserDialog fcdialog("Open File");
77  fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
78  fcdialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT);
79  if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
80  {
81    gd_canvas->clear();
82    mapstorage.clear();
83    Glib::ustring filename = fcdialog.get_filename();
84    if (!mapstorage.readFromFile(filename))
85    {
86      mapstorage.file_name = filename;
87      mapstorage.modified = false;
88      gd_canvas->drawGraph();
89      if(mapwinexists)
90        {
91          mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList());
92        }
93      signal_title.emit(Glib::filename_display_basename(filename));
94    }
95  }
96}
97
98void NoteBookTab::saveFile()
99{
100  if (mapstorage.file_name == "") {
101    saveFileAs();
102  }
103  else
104  {
105    mapstorage.writeToFile(mapstorage.file_name);
106    mapstorage.modified = false;
107    signal_title.emit(Glib::filename_display_basename(mapstorage.file_name));
108  }
109}
110
111void NoteBookTab::saveFileAs()
112{
113  Gtk::FileChooserDialog fcdialog("Save File", Gtk::FILE_CHOOSER_ACTION_SAVE);
114  fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
115  fcdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
116  if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
117  {
118    Glib::ustring filename = fcdialog.get_filename();
119    mapstorage.file_name = filename;
120    mapstorage.writeToFile(filename);
121    mapstorage.modified = false;
122    signal_title.emit(Glib::filename_display_basename(filename));
123  }
124}
125
126void NoteBookTab::close()
127{
128  if (mapstorage.modified)
129  {
130    Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
131        Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
132    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
133    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
134    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
135    switch (mdialog.run())
136    {
137      case Gtk::RESPONSE_CANCEL:
138        return;
139      case Gtk::RESPONSE_REJECT:
140        break;
141      case Gtk::RESPONSE_ACCEPT:
142        saveFile();
143        break;
144    }
145  }
146  gd_canvas->clear();
147  mapstorage.clear();
148  if(mapwinexists)
149    {
150      mapwin->update(mapstorage.getEdgeMapList(), mapstorage.getNodeMapList());
151    }
152  signal_title.emit("unsaved file");
153}
154
155void NoteBookTab::propertyChange(bool itisedge, int prop, std::string mapname)
156{
157  mapstorage.changeActiveMap(itisedge, prop, mapname);
158}
159
160sigc::signal<void, NoteBookTab *, bool> NoteBookTab::signal_newmap_needed()
161{
162  return signal_newmap;
163}
164
165void NoteBookTab::popupNewMapWin(bool itisedge, int prop)
166{
167  prop=prop;
168  signal_newmap.emit(this, itisedge);
169}
170
171std::string NoteBookTab::getActiveEdgeMap(int prop)
172{
173  return mapstorage.getActiveEdgeMap(prop);
174}
175
176std::string NoteBookTab::getActiveNodeMap(int prop)
177{
178  return mapstorage.getActiveNodeMap(prop);
179}
180
181void NoteBookTab::registerNewEdgeMap(std::string mapname)
182{
183  if(mapwinexists)
184    {
185      mapwin->registerNewEdgeMap(mapname);
186    }
187}
188
189void NoteBookTab::registerNewNodeMap(std::string mapname)
190{
191  if(mapwinexists)
192    {
193      mapwin->registerNewNodeMap(mapname);
194    }
195}
196
197void NoteBookTab::createMapWin(std::string name)
198{
199  if(!mapwinexists)
200    {
201      mapwin=new MapWin("Map Setup - "+name, mapstorage.getEdgeMapList(), mapstorage.getNodeMapList(), *this);
202      mapwin->show();
203      mapwinexists=true;
204    }
205}
206
207void NoteBookTab::closeMapWin()
208{
209  mapwinexists=false;
210  delete mapwin;
211}
212
213sigc::signal<void, std::string> NoteBookTab::signal_title_ch()
214{
215  return signal_title;
216}
217
Note: See TracBrowser for help on using the repository browser.