CEBL  2.1
ToolbarMenu.cpp
Go to the documentation of this file.
1 
8 #include "CEBLViewGTK.hpp"
9 #include "ToolbarMenu.hpp"
10 #include "WidgetUtils.hpp"
11 #include "StatusBar.hpp"
12 #include <cstdlib>
13 
14 
15 static CEBLModel * model;
16 static CEBLViewGTK * view;
17 
18 static const char *MenuUIXml =
19 "<ui>"
20 " <menubar name='MainMenu'>"
21 " <menu action='FileMenu'>"
22 " <menuitem action='Save Session'/>"
23 " <menuitem action='Save Session As'/>"
24 " <menuitem action='Load Session'/>"
25 " <menuitem action='Exit'/>"
26 " </menu>"
27 " <menu action='ToolsMenu'>"
28 " <menuitem action='Preferences'/>"
29 " "
30 " </menu>"
31 " </menubar>"
32 "</ui>";
33 
34 
35 //--------------------------------------------------
36 // Callback Stubs to attach to controller
37 
39 static void CB_saveSessionAs()
40 {
41  view->updateModel();
42  string filename = WidgetUtils::selectSaveFile("cbls");
43  if(filename == "")
44  return;
45  try
46  {
47  model->sessionSaveAs(filename);
48  view->getStatusBar()->pushTimed(view->getString("SessionStr1"));
49  }
50  catch(exception &e)
51  {
52  WidgetUtils::AlertError(view->getString("SessionStr2"),view->getString("SessionStr3")
53  + string(e.what()));
54  view->getStatusBar()->pushTimed(view->getString("SessionStr4"));
55  }
56 }
57 
59 static void CB_saveSession()
60 {
61  view->updateModel();
62  if(model->sessionShouldSaveAs())
63  {
64  CB_saveSessionAs();
65  }
66  else
67  {
68  try
69  {
70  model->sessionSave();
71  view->getStatusBar()->pushTimed(view->getString("SessionStr1"));
72  }
73  catch(exception &e)
74  {
75  WidgetUtils::AlertError(view->getString("SessionStr2"),view->getString("SessionStr5")
76  + string(e.what()));
77  view->getStatusBar()->pushTimed(view->getString("SessionStr4"));
78  }
79  }
80 }
81 
83 static void CB_loadSession()
84 {
85  string filename = WidgetUtils::selectLoadFile();
86  if(filename == "")
87  return;
88  try
89  {
90  model->sessionLoad(filename);
91  view->getStatusBar()->pushTimed(view->getString("SessionStr6"));
92  }
93  catch(exception &e)
94  {
95  string msg = e.what();
96  WidgetUtils::AlertError(view->getString("SessionStr7"),view->getString("SessionStr8")+msg);
97  view->getStatusBar()->pushTimed(view->getString("SessionStr9"));
98  }
99  view->updateView();
100 }
101 
103 static void CB_exit()
104 {
105  gtk_main_quit();
106 }
107 
109 static void CB_openPreferences()
110 {
111 
112 }
113 
114 static GtkActionEntry entries[] = {
115  { "FileMenu", NULL, "_File" },
116  { "ToolsMenu", NULL, "_Tools" },
117  { "Save Session", GTK_STOCK_SAVE, "Save Session", NULL, "Save Session", CB_saveSession},
118  { "Save Session As", NULL, "Save Session As", NULL, "Save Session As", CB_saveSessionAs},
119  { "Load Session", GTK_STOCK_OPEN, "L_oad Session", NULL, "Load Session", CB_loadSession},
120  { "Exit", GTK_STOCK_QUIT, "E_xit", "<control>Q", "Exit the program", CB_exit },
121  { "Preferences", GTK_STOCK_PREFERENCES, "_Preferences", "<control>P", "CEBL Preferences", CB_openPreferences}
122 
123 };
124 
125 
127 {
128  view = v;
129  model = v->getModel();
130 }
131 
132 
133 void ToolbarMenu::attachMenu(GtkWidget *window, GtkWidget *container)
134 {
135  GtkWidget *menubar;
136  GtkActionGroup *action_group;
137  GtkUIManager *ui;
138  GtkAccelGroup *accel_group;
139  GError *error;
140 
141  //create action group
142  action_group = gtk_action_group_new ("MenuActions");
143  gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), window);
144  /*
145  Create Menu
146  */
147  ui = gtk_ui_manager_new();
148  gtk_ui_manager_insert_action_group(ui, action_group, 0);
149  accel_group = gtk_ui_manager_get_accel_group (ui);
150  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
151 
152  //Load the xml file
153  error = NULL;
154  //gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, &error)
155  if(!gtk_ui_manager_add_ui_from_string(ui, MenuUIXml,-1, &error))
156  {
157  g_message("Creating Menu Failed: %s", error->message);
158  g_error_free (error);
159  exit(1);
160  }
161  //extract menu bar
162  menubar = gtk_ui_manager_get_widget (ui, "/MainMenu");
163  gtk_box_pack_start (GTK_BOX (container), menubar, FALSE, FALSE, 0);
164  gtk_widget_show(menubar);
165  //pack the items into a container
166  gtk_widget_show_all(container);
167  gtk_widget_show_all(window);
168 }
169 
170 
171