COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/main_win.h @ 1889:edcb68a93a95

Last change on this file since 1889:edcb68a93a95 was 1889:edcb68a93a95, checked in by Hegyi Péter, 18 years ago

Documentation of MainWin?.

File size: 8.0 KB
RevLine 
[1442]1// -*- C++ -*- //
2
3#ifndef MAIN_WIN_H
4#define MAIN_WIN_H
5
[1606]6#include "all_include.h"
[1871]7#include "algowin.h"
[1606]8#include "map_win.h"
9#include "new_map_win.h"
[1849]10#include "nbtab.h"
[1442]11#include <libgnomecanvasmm.h>
12#include <libgnomecanvasmm/polygon.h>
13
[1849]14
[1442]15///This class is the main window of GUI.
[1889]16
17///It has menus, and a notebook. Notebook has different pages,
18///the so called tabs (\ref NoteBookTab). Each \ref NoteBookTab contains a canvas on which graphs can be drawn.
19///To manage creation and close of tabs and tabswitching is the task of MainWin.
[1442]20class MainWin : public Gtk::Window
21{
[1889]22  ///Container in which the menus and the notebook is.
[1849]23  Gtk::VBox vbox;
24
[1889]25  ///The notebook that has tabs (\ref NoteBookTab) with different graphs.
[1849]26  Gtk::Notebook notebook;
27
[1889]28  ///The tool selected to manipulate graph.
29
30  ///It has to be stored, because in case of tabswitching
31  ///the correct tool has to be set for the actual graph.
[1849]32  int active_tool;
33
[1889]34  ///The number of active tab in the notebook.
[1849]35  int active_tab;
[1889]36
37  ///Vector of existing tabs in the notebook.
[1849]38  std::vector<NoteBookTab *> tabs;
[1889]39
40  ///Vector of the name of tabs.
41
42  ///All \ref NoteBookTab has a name that is stored here. The index of the name
43  ///is the same as the index of the \ref NoteBookTab in \ref tabs.
[1849]44  std::vector<std::string> tabnames;
45
[1889]46  ///Counter of occurence of the same file names.
47
48  ///If a file is opened more than once we have to score
49  ///the occurences to let the titles on tabs different.
50  ///If more than one occurence is present, from the second
51  ///one near the filename the number of the occurence appear.
[1872]52  std::map<std::string, int> strinst;
53
[1889]54  ///Set of opened \ref AlgoWin s.
55
56  ///More than one \refAlgoWin can be opened. We have to
57  ///communicate with them in case of new \ref NoteBookTab creation,
58  ///\ref NoteBookTab close, or map change. Therefore we have to score
59  ///their occurences.
[1871]60  std::set< AlgoWin* > aws;
61
[1442]62public:
[1849]63 
[1889]64  ///Constructor of the \ref MainWin.
65
66  ///It creates the menus, the toolbar and the notebook in which
67  ///\ref NoteBookTab s take place. \ref NoteBookTab s are the
68  ///holder of the canvases on which the graphs are drawn.
[1650]69  MainWin();
[1606]70
[1889]71  ///Sets title of tabs.
72
73  ///It alse registrates it in \ref tabnames. If more than one
74  ///occurence is in the notebook of the same file it has to
75  ///extend tabname with the number of occurence.
[1849]76  void set_tabtitle(std::string);
[1442]77
78  ///ActionGroup for menu
79  Glib::RefPtr<Gtk::ActionGroup> ag;
80
81  ///UIManager for menu
82  Glib::RefPtr<Gtk::UIManager> uim;
83
[1889]84  ///Creates a new \ref NoteBookTab and opens the given file.
85
86  ///It is called only with command line parameters at stratup.
[1849]87  void readFile(const std::string &);
[1442]88
[1601]89  ///Tooltips
90  Gtk::Tooltips tooltips;
91
[1849]92  //Call-backs of buttons
93
[1442]94  ///Callback for 'FileNew' action.
95  virtual void newFile();
96  ///Callback for 'FileOpen' action.
97  virtual void openFile();
98  ///Callback for 'FileSave' action.
99  virtual void saveFile();
100  ///Callback for 'FileSaveAs' action.
101  virtual void saveFileAs();
[1606]102  ///Callback for 'Close' action.
103  virtual void close();
[1837]104
[1849]105  //Toolbar
[1889]106
107  ///Callback for 'zoomIn' action.
108
109  ///It calls the appropriate function in
110  ///\ref GraphDisplayerCanvas
[1849]111  virtual void zoomIn();
[1889]112  ///Callback for 'zoomOut' action.
113
114  ///It calls the appropriate function in
115  ///\ref GraphDisplayerCanvas
[1849]116  virtual void zoomOut();
[1889]117  ///Callback for 'zoomFit' action.
118
119  ///It calls the appropriate function in
120  ///\ref GraphDisplayerCanvas
[1849]121  virtual void zoomFit();
[1889]122  ///Callback for 'zoom100' action.
123
124  ///It calls the appropriate function in
125  ///\ref GraphDisplayerCanvas
[1849]126  virtual void zoom100();
[1837]127
[1889]128  ///Callback for Show Maps menupoint.
129
130  ///It calls the appropriate function in
131  ///\ref NoteBookTab
[1849]132  virtual void createMapWin();
[1837]133
[1889]134  ///Pops up an Algorithm window.
135
136  ///It not only creates but registrates the newly created \ref AlgoWin.
137  ///It is necessary, because in case of changement between tabs or maps
138  ///we have to communicate with it. Signals are also have to be connected
139  ///to it, because \ref AlgoWin emits signals if it needs anything (maplist, deregistration).
140  ///\param algo type of the algorithm to run.
141  virtual void createAlgoWin(int algo);
142
143  ///Deregisters AlgoWin
144
145  ///This is the function connected to the closing signal of \ref AlgoWin.
146  ///It only deletes the sender \ref AlgoWin from \ref aws. This function
147  ///is called only by the closing \ref AlgoWin itself.
148  ///\param aw the \ref AlgoWin to delete.
149  virtual void deRegisterAlgoWin(AlgoWin * aw);
150
151  ///Updates list of tabs in all of the \ref AlgoWin
152
153  ///When \ref NoteBookTab inserted somewhere or closed one tablist in all \ref AlgoWin
154  ///have to be updated. That is why we score all the opened \ref AlgoWin.
155  ///During update \ref tabnames will be passed to each \ref AlgoWin.
[1876]156  virtual void updateAlgoWinTabs();
[1871]157
[1889]158  ///Refresh list of maps in the AlgoWin that requested it.
[1837]159
[1889]160  ///In an \ref AlgoWin there is a ComboBoxText, in which
161  ///a \ref NoteBookTab can be chosen that contains the graph and the maps,
162  ///on which we would like to run algorithms. If we change the
163  ///tab the available maps also have to be updated, because
164  ///in the different tabs different maps are available. Therefore
165  ///on tab change the \ref AlgoWin emits a signal that contains itself
166  ///so that the appropriate maps can be sent to it. For the sake of simplicity
167  ///the program answers this call with the mapstorage of the newly selected tab.
168  ///\param aw the caller \ref AlgoWin
169  ///\param tabname the newly selected tab in the \ref AlgoWin
170  virtual void updateAlgoWinMaps(AlgoWin * aw, std::string tabname);
171
172  ///Registrates the new graph-editor tool in hand.
173
174  ///The editor-tool in hand is global, it is the same for all tab
175  ///at the same time. Therefore the active tool has to be scored here (\ref active_tool).
176  ///This function is the callback function of the editor-tool buttons. It sets \ref active_tool
177  ///to the correct value.
178  ///\param tool the newly selected graph-editor tool (See all_include.h)
179  virtual void changeEditorialTool(int tool);
180
181  ///Pops up a \ref NewMapWin dialog after requested by a \ref MapWin
182
183  ///Each tab can pop-up a \ref MapWin. In \ref MapWin new tab can be created.
184  ///In this case \ref NoteBookTab emits a signal. This function is connected to that signal.
185  ///It sends the caller \ref NoteBookTab and whether an edgemap or a nodemap should be created.
186  ///Caller \ref NoteBookTab is necessary for the window to be able to place the new map in its
187  ///correct place.
188  ///\param nbt the caller tab
189  ///\param itisedge true if edgemap has to be created, false if nodemap
190  virtual void createNewMapWinAfterSignal(NoteBookTab * nbt, bool itisedge);
191
192  ///Pops up a \ref NewMapWin dialog after requested by an \ref AlgoWin
193
194  ///\ref AlgoWin can also can request a \ref NewMapWin to pop-up.
195  ///It emits a signal in this case. This function is bound to that signal.
196  ///The signal contains the name of \ref NoteBookTab in which the new map has to be
197  ///placed and whether the new map is an edgemap or a nodemap.
198  ///\ref tabname the tab in which the new map has to be placed
199  ///\ref itisedge true if the new map will be edge map, false if it will be nodemap
200  virtual void createNewMapWinTabString(std::string tabname, bool itisedge);
201
202  ///Pops up a \ref NewMapWin dialog if button on \ref MainWin has been pressed.
203
204  ///In this case a general \ref NewMapWin will be popped up. This means that
205  ///both edge and nodemap can be created by it. The new map will be placed in
206  ///\MapStorage of the actual selected \ref NoteBookTab.
[1849]207  virtual void createNewMapWin();
208
209  //Notebook handlers
210  ///Callback for 'FileNewTab' action.
211  virtual void newTab();
[1889]212
213  ///Callback for 'FileCloseTab' action.
214
215  ///It closes the actual \ref NoteBookTab and registrates this event:
216  ///data is shifted to the correct places in vectors.
[1856]217  virtual void closeTab();
[1889]218
219  ///Tabswitching handler
220
221  ///Sets the variables that have to store the actual state, and it
222  ///updates the title of window to the actually selected \ref NoteBookTab.
[1849]223  virtual void onChangeTab(GtkNotebookPage*, guint);
[1442]224};
225
226#endif //MAIN_WIN_H
Note: See TracBrowser for help on using the repository browser.