// -*- C++ -*- //

#ifndef MAIN_WIN_H
#define MAIN_WIN_H

#include <all_include.h>
#include <mapstorage.h>
#include <map_win.h>
#include <edit_win.h>
#include <libgnomecanvasmm.h>
#include <libgnomecanvasmm/polygon.h>

///This class is the main window of GUI.
///It has menus, but the main part of it is the canvas.
class MainWin : public Gtk::Window
{
public:
  ///Constructor of the \ref MainWin. It creates the menu and the \ref GraphDisplayerCanvas on which the graph will be drawn.
  ///\param title is the title of the window
  ///\param graph is the graph that will be drawn here. It will be given further to the \ref GraphDisplayerCanvas
  ///\param cm stores the coordinates of the nodes of the graph
  ///\param ms is the \ref MapStorage in which the different visualizable maps are stored
  MainWin(const std::string& title, Graph &, CoordinatesMap &, MapStorage &);

protected:
  ///Window of map-showing setup. Its type is \ref MapWin
  MapWin mapwin;

  ///Window of editorial tools. Its type is \ref EditWin
  EditWin editwin;

  ///The graph will be drawn on this \ref GraphDisplayerCanvas
  GraphDisplayerCanvas gd_canvas;

  ///ActionGroup for menu
  Glib::RefPtr<Gtk::ActionGroup> ag;

  ///UIManager for menu
  Glib::RefPtr<Gtk::UIManager> uim;

  ///Container
  Gtk::VBox vbox;

  ///This function makes map-setup window popped up.
  virtual void showMaps();
  ///This function makes editorial window popped up.
  virtual void showEditorials();
  ///Callback for 'FileNew' action.
  virtual void newFile();
  ///Callback for 'FileOpen' action.
  virtual void openFile();
  ///Callback for 'FileSave' action.
  virtual void saveFile();
  ///Callback for 'FileSaveAs' action.
  virtual void saveFileAs();
  ///Callback for 'Quit' action.
  virtual void quit();
};

#endif //MAIN_WIN_H
