This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
neofx-zoomedit/ui.cpp

104 lines
3 KiB
C++
Raw Normal View History

2007-06-21 19:52:03 +00:00
#include "ui.h"
#include "draw.h"
#include "window.h"
#include <gtk/gtk.h>
#include <string.h>
static const gchar *uiData =
"<ui>"
"<menubar>"
"<menu action=\"fileMenu\">"
"<menuitem action=\"new\"/>"
"<menuitem action=\"open\"/>"
"<menuitem action=\"save\"/>"
"<menuitem action=\"saveAs\"/>"
"<separator/>"
"<menuitem action=\"quit\"/>"
"</menu>"
"</menubar>"
"<toolbar action=\"toolbar1\">"
"<separator/>"
"<toolitem action=\"zoomIn\"/>"
"<toolitem action=\"zoomOut\"/>"
"<separator/>"
"</toolbar>"
"</ui>";
static void handleAction(GtkAction *action, gpointer user_data) {
const gchar* name = gtk_action_get_name(action);
if(!strcmp(name, "zoomIn"))
zoomInCentered(1.2f);
else if(!strcmp(name, "zoomOut"))
zoomOutCentered(1.2f);
}
2007-06-21 19:52:03 +00:00
static GtkActionGroup *createActions() {
GtkActionGroup *actionGroup = gtk_action_group_new("actions");
GtkAction *action;
action = gtk_action_new("fileMenu", "_File", NULL, NULL);
gtk_action_group_add_action(actionGroup, action);
action = gtk_action_new("toolbar1", "Toolbar", NULL, NULL);
gtk_action_group_add_action(actionGroup, action);
action = gtk_action_new("new", "_New", NULL, GTK_STOCK_NEW);
gtk_action_group_add_action_with_accel(actionGroup, action, NULL);
action = gtk_action_new("open", "_Open", NULL, GTK_STOCK_OPEN);
gtk_action_group_add_action_with_accel(actionGroup, action, NULL);
action = gtk_action_new("save", "_Save", NULL, GTK_STOCK_SAVE);
gtk_action_group_add_action_with_accel(actionGroup, action, NULL);
action = gtk_action_new("saveAs", "Save _As", NULL, NULL);
gtk_action_group_add_action(actionGroup, action);
action = gtk_action_new("zoomIn", "Zoom _in", NULL, GTK_STOCK_ZOOM_IN);
g_signal_connect(G_OBJECT(action), "activate", G_CALLBACK(handleAction), NULL);
2007-06-21 19:52:03 +00:00
gtk_action_group_add_action_with_accel(actionGroup, action, NULL);
action = gtk_action_new("zoomOut", "Zoom _out", NULL, GTK_STOCK_ZOOM_OUT);
g_signal_connect(G_OBJECT(action), "activate", G_CALLBACK(handleAction), NULL);
2007-06-21 19:52:03 +00:00
gtk_action_group_add_action_with_accel(actionGroup, action, NULL);
action = gtk_action_new("quit", "_Quit", NULL, GTK_STOCK_QUIT);
g_signal_connect(G_OBJECT(action), "activate", G_CALLBACK(gtk_main_quit), NULL);
gtk_action_group_add_action_with_accel(actionGroup, action, NULL);
return actionGroup;
}
static GtkUIManager* getUIManager() {
static GtkUIManager *uiManager = NULL;
if(!uiManager) {
uiManager = gtk_ui_manager_new();
gtk_ui_manager_add_ui_from_string(uiManager, uiData, -1, NULL);
gtk_ui_manager_insert_action_group(uiManager, createActions(), 0);
gtk_ui_manager_ensure_update(uiManager);
}
return uiManager;
}
GtkWidget* getMenu() {
return gtk_ui_manager_get_widget(getUIManager(), "/ui/menubar");
}
GtkWidget* getToolbar() {
return gtk_ui_manager_get_widget(getUIManager(), "/ui/toolbar1");
}
GtkAccelGroup *getAccels() {
return gtk_ui_manager_get_accel_group(getUIManager());
}