OSDN Git Service

Change idx sub dir's time stamp when saving idx.
[fukui-no-namari/dialektos.git] / src / application_framework.cxx
1 /*
2  * Copyright (C) 2009 by Aiwota Programmer
3  * aiwotaprog@tetteke.tk
4  *
5  * This file is part of Dialektos.
6  *
7  * Dialektos is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * Dialektos is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Dialektos.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include "application_framework.hxx"
22
23 #include <glibmm/error.h>
24 #include <glibmm/ustring.h>
25 #include <gtkmm/widget.h>
26 #include <gtkmm/main.h>
27 #include <gtkmm/stock.h>
28 #include <gtkmm/menu.h>
29 #include <gtkmm/uimanager.h>
30 #include <gtkmm/actiongroup.h>
31 #include <boost/foreach.hpp>
32 #include <iostream>
33 #include "bookmark_window.hxx"
34
35
36 namespace dialektos {
37
38
39 ApplicationFrameWork::ApplicationFrameWork() :
40   ApplicationWindow(),
41   vbox_(),
42   statusbar_(),
43   ui_manager_(Gtk::UIManager::create()),
44   action_group_(Gtk::ActionGroup::create()),
45   menubar_(),
46   toolbar_(),
47   popupmenu_() {
48
49   ApplicationWindow::add(vbox_);
50   build_menubar();
51   statusbar_.set_no_show_all(true);
52 }
53
54 ApplicationFrameWork::~ApplicationFrameWork() {}
55
56 void ApplicationFrameWork::add(Gtk::Widget& child) {
57   vbox_.pack_start(*menubar_, Gtk::PACK_SHRINK);
58   vbox_.pack_start(*toolbar_, Gtk::PACK_SHRINK);
59   vbox_.pack_start(child, true, true);
60   vbox_.pack_start(statusbar_, Gtk::PACK_SHRINK);
61 }
62 void ApplicationFrameWork::build_menubar() {
63   // File menu
64   action_group_->add(Gtk::Action::create("MenuFile", "_File"));
65   action_group_->add(Gtk::Action::create("FileQuit", Gtk::Stock::QUIT),
66       sigc::mem_fun(*this, &ApplicationFrameWork::on_action_file_quit));
67
68   // View menu
69   action_group_->add(Gtk::Action::create("MenuView", "_View"));
70   action_group_->add(Gtk::Action::create("ViewRefresh", Gtk::Stock::REFRESH),
71       sigc::mem_fun(*this, &ApplicationFrameWork::on_action_view_refresh));
72   action_group_->add(Gtk::Action::create("ViewStop", Gtk::Stock::STOP),
73       sigc::mem_fun(*this, &ApplicationFrameWork::on_action_view_stop));
74   action_group_->add(Gtk::Action::create("ViewMenubar", "Toggle _Menubar"),
75       sigc::mem_fun(*this, &ApplicationFrameWork::on_action_view_menubar));
76   action_group_->add(Gtk::Action::create("ViewToolbar", "Toggle _Toolbar"),
77       sigc::mem_fun(*this, &ApplicationFrameWork::on_action_view_toolbar));
78   action_group_->add(Gtk::Action::create("ViewStatusbar", "Toggle _Statusbar"),
79       sigc::mem_fun(*this, &ApplicationFrameWork::on_action_view_statusbar));
80
81   // Bookmark menu
82   action_group_->add(Gtk::Action::create("MenuBookmark", "_Bookmark"));
83   action_group_->add(Gtk::Action::create("BookmarkShow", "_Show Bookmarks"),
84       sigc::mem_fun(*this, &ApplicationFrameWork::on_action_bookmark_show));
85
86   ui_manager_->insert_action_group(action_group_);
87   add_accel_group(ui_manager_->get_accel_group());
88
89   Glib::ustring ui_info =
90     "<ui>"
91     "  <menubar name='MenuBar'>"
92     "    <menu action='MenuFile'>"
93     "      <menuitem action='FileQuit'/>"
94     "    </menu>"
95     "    <menu action='MenuView'>"
96     "      <menuitem action='ViewRefresh'/>"
97     "      <menuitem action='ViewStop'/>"
98     "      <separator/>"
99     "      <menuitem action='ViewMenubar'/>"
100     "      <menuitem action='ViewToolbar'/>"
101     "      <menuitem action='ViewStatusbar'/>"
102     "    </menu>"
103     "    <menu action='MenuBookmark'>"
104     "      <menuitem action='BookmarkShow'/>"
105     "    </menu>"
106     "  </menubar>"
107     "  <toolbar name='ToolBar'>"
108     "    <toolitem action='ViewRefresh'/>"
109     "    <toolitem action='ViewStop'/>"
110     "  </toolbar>"
111     "  <popup name='MenuPopup'>"
112     "    <menuitem action='ViewRefresh'/>"
113     "    <menuitem action='ViewStop'/>"
114     "    <separator/>"
115     "    <menuitem action='ViewMenubar'/>"
116     "  </popup>"
117     "</ui>";
118
119   ui_manager_->add_ui_from_string(ui_info);
120
121   menubar_ = ui_manager_->get_widget("/MenuBar");
122   menubar_->set_no_show_all(true);
123   menubar_->hide();
124   toolbar_ = ui_manager_->get_widget("/ToolBar");
125   toolbar_->set_no_show_all(true);
126   toolbar_->hide();
127   popupmenu_ =
128     dynamic_cast<Gtk::Menu*>(ui_manager_->get_widget("/MenuPopup"));
129
130 }
131
132 void ApplicationFrameWork::on_action_file_quit() {
133   save();
134   BOOST_FOREACH(const ApplicationWindow& window, windows)
135     window.save_state();
136   windows.clear();
137   Gtk::Main::quit();
138 }
139
140 void ApplicationFrameWork::on_action_view_refresh() {
141   std::cout << "view refresh activated" << std::endl;
142 }
143
144 void ApplicationFrameWork::on_action_view_stop() {
145   std::cout << "view refresh stop" << std::endl;
146 }
147
148 void ApplicationFrameWork::on_action_view_menubar() {
149   if (menubar_->is_visible()) menubar_->hide(); else menubar_->show();
150 }
151
152 void ApplicationFrameWork::on_action_view_toolbar() {
153   if (toolbar_->is_visible()) toolbar_->hide(); else toolbar_->show();
154 }
155
156 void ApplicationFrameWork::on_action_view_statusbar() {
157   if (statusbar_.is_visible()) statusbar_.hide(); else statusbar_.show();
158 }
159
160 void ApplicationFrameWork::on_action_bookmark_show() {
161   BookmarkWindow::create();
162 }
163
164 void ApplicationFrameWork::on_child_button_press(GdkEventButton* event) {
165   if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
166     popupmenu_->popup(event->button, event->time);
167   }
168 }
169
170
171 } // namespace dialektos