main_win.cc
branchgui
changeset 53 e73d7540bd24
parent 50 eedecee61922
child 55 e4ee805ca5fc
     1.1 --- a/main_win.cc	Thu Jul 28 19:09:39 2005 +0000
     1.2 +++ b/main_win.cc	Fri Jul 29 12:01:37 2005 +0000
     1.3 @@ -1,7 +1,8 @@
     1.4 -#include <main_win.h>
     1.5 +#include "main_win.h"
     1.6  
     1.7 -MainWin::MainWin(const std::string& title, Graph & graph, CoordinatesMap & cm,
     1.8 -    MapStorage & ms):mapwin("Map Setup", ms, gd_canvas),newmapwin("Creating new map",gd_canvas),gd_canvas(graph, cm, ms, &mapwin)
     1.9 +MainWin::MainWin(const std::string& title) :
    1.10 +  mapwin("Map Setup", mapstorage, gd_canvas),
    1.11 +  newmapwin("Creating new map", gd_canvas), gd_canvas(mapstorage, mapwin)
    1.12  {
    1.13  
    1.14    set_title (title);
    1.15 @@ -19,7 +20,9 @@
    1.16        sigc::mem_fun(*this, &MainWin::saveFile));
    1.17    ag->add( Gtk::Action::create("FileSaveAs", Gtk::Stock::SAVE_AS),
    1.18        sigc::mem_fun(*this, &MainWin::saveFileAs));
    1.19 -  ag->add( Gtk::Action::create("FileQuit", Gtk::Stock::QUIT),
    1.20 +  ag->add( Gtk::Action::create("Close", Gtk::Stock::CLOSE),
    1.21 +      sigc::mem_fun(*this, &MainWin::close));
    1.22 +  ag->add( Gtk::Action::create("Quit", Gtk::Stock::QUIT),
    1.23        sigc::mem_fun(*this, &MainWin::hide));
    1.24  
    1.25    ag->add( Gtk::Action::create("ViewMenu", "_View") );
    1.26 @@ -36,14 +39,15 @@
    1.27    ag->add( Gtk::Action::create("ShowMaps", "_Maps"),
    1.28        sigc::mem_fun(this->mapwin, &MapWin::show));
    1.29  
    1.30 -  ag->add( Gtk::Action::create("CreateNode", Gtk::Stock::NO),
    1.31 +  Gtk::RadioAction::Group tool_group;
    1.32 +  ag->add( Gtk::RadioAction::create(tool_group, "MoveItem", Gtk::Stock::CONVERT, "Move"),
    1.33 +      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 0) );
    1.34 +  ag->add( Gtk::RadioAction::create(tool_group, "CreateNode", Gtk::Stock::NO, "Create node"),
    1.35        sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 1) );
    1.36 -  ag->add( Gtk::Action::create("CreateEdge", Gtk::Stock::REMOVE),
    1.37 +  ag->add( Gtk::RadioAction::create(tool_group, "CreateEdge", Gtk::Stock::REMOVE, "Create edge"),
    1.38        sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 2) );
    1.39 -  ag->add( Gtk::Action::create("EraseItem", Gtk::Stock::DELETE),
    1.40 +  ag->add( Gtk::RadioAction::create(tool_group, "EraseItem", Gtk::Stock::DELETE, "Delete"),
    1.41        sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 3) );
    1.42 -  ag->add( Gtk::Action::create("MoveItem", Gtk::Stock::CONVERT),
    1.43 -      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 0) );
    1.44    ag->add( Gtk::Action::create("EditEdgeMap", Gtk::Stock::PROPERTIES),
    1.45        sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 4) );
    1.46    ag->add( Gtk::Action::create("EditNodeMap", Gtk::Stock::PREFERENCES),
    1.47 @@ -66,7 +70,8 @@
    1.48        "      <menuitem action='FileOpen'/>"
    1.49        "      <menuitem action='FileSave'/>"
    1.50        "      <menuitem action='FileSaveAs'/>"
    1.51 -      "      <menuitem action='FileQuit'/>"
    1.52 +      "      <menuitem action='Close'/>"
    1.53 +      "      <menuitem action='Quit'/>"
    1.54        "    </menu>"
    1.55        "    <menu action='ViewMenu'>"
    1.56        "      <menuitem action='ViewZoomIn' />"
    1.57 @@ -82,16 +87,17 @@
    1.58        "    <toolitem action='FileNew' />"
    1.59        "    <toolitem action='FileOpen' />"
    1.60        "    <toolitem action='FileSave' />"
    1.61 +      "    <toolitem action='Close' />"
    1.62        "    <separator />"
    1.63        "    <toolitem action='ViewZoomIn' />"
    1.64        "    <toolitem action='ViewZoomOut' />"
    1.65        "    <toolitem action='ViewZoomFit' />"
    1.66        "    <toolitem action='ViewZoom100' />"
    1.67        "    <separator />"
    1.68 +      "    <toolitem action='MoveItem' />"
    1.69        "    <toolitem action='CreateNode' />"
    1.70        "    <toolitem action='CreateEdge' />"
    1.71        "    <toolitem action='EraseItem' />"
    1.72 -      "    <toolitem action='MoveItem' />"
    1.73        "    <toolitem action='EditEdgeMap' />"
    1.74        "    <toolitem action='EditNodeMap' />"
    1.75        "    <toolitem action='AddMap' />"
    1.76 @@ -130,20 +136,115 @@
    1.77  
    1.78  void MainWin::newFile()
    1.79  {
    1.80 -  std::cerr << "MainWin::newFile(): not yet implemented" << std::endl;
    1.81 +  if (mapstorage.modified)
    1.82 +  {
    1.83 +    Gtk::MessageDialog mdialog("", false, Gtk::MESSAGE_WARNING,
    1.84 +        Gtk::BUTTONS_NONE);
    1.85 +    mdialog.set_message("<b>Save changes before closing?</b>", true);
    1.86 +    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
    1.87 +    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
    1.88 +    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
    1.89 +    switch (mdialog.run())
    1.90 +    {
    1.91 +      case Gtk::RESPONSE_CANCEL:
    1.92 +        return;
    1.93 +      case Gtk::RESPONSE_REJECT:
    1.94 +        break;
    1.95 +      case Gtk::RESPONSE_ACCEPT:
    1.96 +        saveFile();
    1.97 +        break;
    1.98 +    }
    1.99 +  }
   1.100 +  gd_canvas.clear();
   1.101 +  mapstorage.clear();
   1.102 +  mapwin.update();
   1.103  }
   1.104  
   1.105  void MainWin::openFile()
   1.106  {
   1.107 -  std::cerr << "MainWin::openFile(): not yet implemented" << std::endl;
   1.108 +  if (mapstorage.modified)
   1.109 +  {
   1.110 +    Gtk::MessageDialog mdialog("", false, Gtk::MESSAGE_WARNING,
   1.111 +        Gtk::BUTTONS_NONE);
   1.112 +    mdialog.set_message("<b>Save changes before closing?</b>", true);
   1.113 +    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
   1.114 +    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.115 +    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
   1.116 +    switch (mdialog.run())
   1.117 +    {
   1.118 +      case Gtk::RESPONSE_CANCEL:
   1.119 +        return;
   1.120 +      case Gtk::RESPONSE_REJECT:
   1.121 +        break;
   1.122 +      case Gtk::RESPONSE_ACCEPT:
   1.123 +        saveFile();
   1.124 +        break;
   1.125 +    }
   1.126 +  }
   1.127 +  gd_canvas.clear();
   1.128 +  mapstorage.clear();
   1.129 +  Gtk::FileChooserDialog fcdialog("Open File");
   1.130 +  fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.131 +  fcdialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT);
   1.132 +  if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
   1.133 +  {
   1.134 +    Glib::ustring filename = fcdialog.get_filename();
   1.135 +    mapstorage.readFromFile(filename);
   1.136 +    mapstorage.file_name = filename;
   1.137 +    mapstorage.modified = false;
   1.138 +    gd_canvas.drawGraph();
   1.139 +    mapwin.update();
   1.140 +  }
   1.141  }
   1.142  
   1.143  void MainWin::saveFile()
   1.144  {
   1.145 -  std::cerr << "MainWin::saveFile(): not yet implemented" << std::endl;
   1.146 +  if (mapstorage.file_name == "") {
   1.147 +    saveFileAs();
   1.148 +  }
   1.149 +  else
   1.150 +  {
   1.151 +    mapstorage.writeToFile(mapstorage.file_name);
   1.152 +    mapstorage.modified = false;
   1.153 +  }
   1.154  }
   1.155  
   1.156  void MainWin::saveFileAs()
   1.157  {
   1.158 -  std::cerr << "MainWin::saveFileAs(): not yet implemented" << std::endl;
   1.159 +  Gtk::FileChooserDialog fcdialog("Save File", Gtk::FILE_CHOOSER_ACTION_SAVE);
   1.160 +  fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.161 +  fcdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
   1.162 +  if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
   1.163 +  {
   1.164 +    Glib::ustring filename = fcdialog.get_filename();
   1.165 +    mapstorage.file_name = filename;
   1.166 +    mapstorage.writeToFile(filename);
   1.167 +    mapstorage.modified = false;
   1.168 +  }
   1.169  }
   1.170 +
   1.171 +void MainWin::close()
   1.172 +{
   1.173 +  if (mapstorage.modified)
   1.174 +  {
   1.175 +    Gtk::MessageDialog mdialog("", false, Gtk::MESSAGE_WARNING,
   1.176 +        Gtk::BUTTONS_NONE);
   1.177 +    mdialog.set_message("<b>Save changes before closing?</b>", true);
   1.178 +    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
   1.179 +    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.180 +    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
   1.181 +    switch (mdialog.run())
   1.182 +    {
   1.183 +      case Gtk::RESPONSE_CANCEL:
   1.184 +        return;
   1.185 +      case Gtk::RESPONSE_REJECT:
   1.186 +        break;
   1.187 +      case Gtk::RESPONSE_ACCEPT:
   1.188 +        saveFile();
   1.189 +        break;
   1.190 +    }
   1.191 +  }
   1.192 +  gd_canvas.clear();
   1.193 +  mapstorage.clear();
   1.194 +  mapwin.update();
   1.195 +}