gui/nbtab.h
author deba
Wed, 01 Mar 2006 10:17:25 +0000
changeset 1990 15fb7a4ea6be
parent 1849 a4d1362397fe
permissions -rw-r--r--
Some classes assumed that the GraphMaps should be inherited
from an ObserverBase. These classes parents replaced with
DefaultMap which cause that the graph maps should not be
inherited from the ObserverBase.
     1 // -*- C++ -*- //
     2 
     3 #ifndef NBTAB_H
     4 #define NBTAB_H
     5 
     6 class NoteBookTab;
     7 
     8 #include "mapstorage.h"
     9 #include "map_win.h"
    10 #include "graph_displayer_canvas.h"
    11 #include <libgnomecanvasmm.h>
    12 #include <libgnomecanvasmm/polygon.h>
    13 
    14 ///One tab in the Notebook that is placed in the main window (\ref MainWin).
    15 
    16 ///One graph and all of its accessories like maps are assigned to one tab in the notebook.
    17 ///\ref NoteBookTab is responsible for the user defined display of the graph: view can be
    18 ///set by visualized maps, therefore \ref NoteBookTab must provide an interface to set the
    19 ///view of graph. This is \ref Mapwin window.
    20 ///
    21 ///\ref NoteBookTab is also
    22 ///responsible for modify the graph if it is
    23 ///requested. Therefore it is responsible for translating user events to modifications to
    24 ///do on graph, like node/edge addition/deletion, map modification, addition and so on.
    25 ///
    26 ///To be able to solve these tasks the help of \ref MainWin is also needed, for example to
    27 ///know which editor-tool is active at the moment. Therefore \ref MainWin knows \ref NoteBookTab.
    28 ///
    29 ///Some information in the other direction is needed as well: for example when new map creation is requested for this tab
    30 ///\ref NoteBookTab must ask \ref MainWin to pop-up a \ref NewMapWin. Communication in this direction is realized by signals
    31 ///therefore \ref NoteBookTab does not know \ref MainWin at all, but in this way it is not necessary.
    32 class NoteBookTab : public Gtk::VBox
    33 {
    34 public:
    35   
    36   ///Constructor of \ref NoteBookTab
    37 
    38   ///It initiates the \re GraphDisplayerCanvas, on which the graph will be drawn
    39   ///Signals of \ref MapStorage will be bound to the appropriate callback functions here.
    40   NoteBookTab();
    41   
    42   ///Maps assigned to the graph displayed in this \ref NoteBookTab of notebook.
    43   MapStorage mapstorage;
    44     
    45   ///Title changement indicator.
    46 
    47   ///If graph is loaded from disk or saved to disk or changed its name somehow
    48   ///this signal will be emit to let
    49   ///\ref MainWin know that it has to modify the title of the main window.
    50   ///It contains the new title.
    51   sigc::signal<void, std::string> signal_title;
    52 
    53   ///Returns \ref signal_title to be the caller able to connect it to a callback function.
    54   sigc::signal<void, std::string> signal_title_ch();
    55 
    56   ///Indicates that new map window should be popped up.
    57 
    58   ///\ref NoteBookTab can ask \ref MainWin to pop up a \ref NweMapWin ny emitting this signal.
    59   ///The signal contains whether an edgemap or a nodemap should be popped up. \ref NewMapWin
    60   ///is not popped up by \ref NoteBookTab, because not only \ref NoteBookTab needs \ref NewMapWin,
    61   ///but for example \ref MainWin and \ref AlgoWin s as well.
    62   sigc::signal<void, NoteBookTab *, bool> signal_newmap;
    63 
    64   ///Returns \ref signal_newmap to be the caller able to connect it to a callback function.
    65   sigc::signal<void, NoteBookTab *, bool> signal_newmap_needed();
    66 
    67   ///Loads the given file.
    68 
    69   ///The given file will be load in the \ref MapStorage and afeter that
    70   ///\ref GraphDisplayerCanvas will be requested to display the graph.
    71   ///\ref GraphDisplayer will get datas from the recently set \ref MapStorage.
    72   void readFile(const std::string &);
    73     
    74   ///The graph will be drawn on this \ref GraphDisplayerCanvas
    75   GraphDisplayerCanvas * gd_canvas;
    76 
    77   ///Indicates whether the \ref MapWin is opened or not. See \ref mapwin.
    78   bool mapwinexists;
    79 
    80   ///Address of the only \ref MapWin that the \ref NoteBookTab can open.
    81 
    82   ///Only one of this window can be opened at the same time (\ref mapwinexists), 
    83   ///because there is no need for more, one per tab is enough.
    84   ///There won1t be benefit of more than one, but it would be
    85   ///more complicated to synchronize them.
    86   MapWin * mapwin;
    87     
    88 public:
    89   ///Callback for 'FileNew' action.
    90   virtual void newFile();
    91   ///Callback for 'FileOpen' action.
    92   virtual void openFile();
    93   ///Callback for 'FileSave' action.
    94   virtual void saveFile();
    95   ///Callback for 'FileSaveAs' action.
    96   virtual void saveFileAs();
    97   ///Callback for 'Close' action.
    98   virtual void close();
    99 
   100   ///Handles changement of view of graph.
   101 
   102   ///If the user changes the map to show by a property to a nother in \ref MapWin,
   103   ///\ref MapWin will call this function. This function will registrate in \ref MapStorage
   104   ///the new map to display by the changed property. After that \ref MapStorage will
   105   ///emits a signal that will be forwarded to \ref GraphDisplayerCanvas to update the
   106   ///appropriate parts of graph.
   107   ///\param itiesedge whether the changed property is edge property or node property
   108   ///\param prop id of property, see all_include.h
   109   ///\param mapname name of the recently selected map
   110   void propertyChange(bool itisedge, int prop, std::string mapname);
   111 
   112   ///Emits a signal that request \ref MainWin to pop up \ref NewMapWin
   113 
   114   ///This function is called by \ref MapWin.
   115   ///\param itisedge whether the new map should be an edgemap or a nodemap.
   116   void popupNewMapWin(bool itisedge);
   117 
   118   ///Returns the actually selected edgemap to visualize by the given property.
   119 
   120   ///\ref MapWin calls this function, beacuse it does not know \ref MapStorage.
   121   ///\param prop property to inquire.
   122   std::string getActiveEdgeMap(int prop);
   123 
   124   ///Returns the actually selected nodemap to visualize by the given property.
   125 
   126   ///\ref MapWin calls this function, beacuse it does not know \ref MapStorage.
   127   ///\param prop property to inquire.
   128   std::string getActiveNodeMap(int prop);
   129 
   130   ///Registers recently created edgemap in \ref MapWin.
   131 
   132   ///After creation of new map \ref MapStorage emits a signal.
   133   ///This signal is bound to this callback function, that will call
   134   ///a function with the same name and same parameterin \ref MapWin.
   135   ///This call-forwarder function is needed, because \ref Mapstorage does not know \ref MapWin
   136   ///\param mapname name of new map
   137   void registerNewEdgeMap(std::string mapname);
   138 
   139   ///Registers recently created nodemap in \ref MapWin.
   140 
   141   ///After creation of new map \ref MapStorage emits a signal.
   142   ///This signal is bound to this callback function, that will call
   143   ///a function with the same name and same parameter in \ref MapWin.
   144   ///This call-forwarder function is needed, because \ref Mapstorage does not know \ref MapWin
   145   ///\param mapname name of new map
   146   void registerNewNodeMap(std::string mapname);
   147 
   148   ///Pops up and registrates the \ref MapWin of \ref NoteBookTab.
   149   
   150   ///See also
   151   ///\ref mapwin.
   152   void createMapWin(std::string);
   153 
   154   ///Closes and deregistrates the \ref MapWin of \ref NoteBookTab.
   155   
   156   ///See also
   157   ///\ref mapwin.
   158   void closeMapWin();
   159 };
   160 
   161 #endif //NBTAB_H