LibreWeb-Browser/src/menu.cc

171 lines
8.1 KiB
C++

#include "menu.h"
Menu::Menu(const Glib::RefPtr<Gtk::AccelGroup>& accelgroup)
: m_file("_File", true),
m_edit("_Edit", true),
m_view("_View", true),
m_help("_Help", true)
{
// File sub-menu
auto newDocumentMenuItem = createMenuItem("_New Document");
newDocumentMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_N, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
newDocumentMenuItem->signal_activate().connect(new_doc);
auto openMenuItem = createMenuItem("_Open...");
openMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_O, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
openMenuItem->signal_activate().connect(open);
auto openEditMenuItem = createMenuItem("Open & _Edit...");
openEditMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_E, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
openEditMenuItem->signal_activate().connect(open_edit);
editMenuItem = createMenuItem("Edit");
editMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_D, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
editMenuItem->signal_activate().connect(edit);
auto saveMenuitem = createMenuItem("_Save");
saveMenuitem->add_accelerator("activate", accelgroup, GDK_KEY_S, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
saveMenuitem->signal_activate().connect(save);
auto saveAsMenuItem = createMenuItem("Save _As...");
saveAsMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_S, Gdk::ModifierType::CONTROL_MASK | Gdk::ModifierType::SHIFT_MASK,
Gtk::AccelFlags::ACCEL_VISIBLE);
saveAsMenuItem->signal_activate().connect(save_as);
publishMenuItem = createMenuItem("_Publish...");
publishMenuItem->set_sensitive(false); // disable
publishMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_P, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
publishMenuItem->signal_activate().connect(publish);
auto quitMenuItem = createMenuItem("_Quit");
quitMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_Q, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
quitMenuItem->signal_activate().connect(quit);
// Edit sub-menu
auto undoMenuItem = createMenuItem("_Undo");
undoMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_Z, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
undoMenuItem->signal_activate().connect(undo);
auto redoMenuItem = createMenuItem("_Redo");
redoMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_Y, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
redoMenuItem->signal_activate().connect(redo);
auto cutMenuItem = createMenuItem("Cu_t");
cutMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_X, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
cutMenuItem->signal_activate().connect(cut);
auto copyMenuItem = createMenuItem("_Copy");
copyMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_C, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
copyMenuItem->signal_activate().connect(copy);
auto pasteMenuItem = createMenuItem("_Paste");
pasteMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_V, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
pasteMenuItem->signal_activate().connect(paste);
auto deleteMenuItem = createMenuItem("_Delete");
deleteMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_Delete, (Gdk::ModifierType)0, Gtk::AccelFlags::ACCEL_VISIBLE);
deleteMenuItem->signal_activate().connect(del);
auto selectAllMenuItem = createMenuItem("Select _All");
selectAllMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_A, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
selectAllMenuItem->signal_activate().connect(select_all);
auto findMenuItem = createMenuItem("_Find");
findMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_F, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
findMenuItem->signal_activate().connect(find);
auto replaceMenuItem = createMenuItem("_Replace");
replaceMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_H, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
replaceMenuItem->signal_activate().connect(replace);
// View sub-menu
backMenuItem = createMenuItem("_Previous Page");
backMenuItem->set_sensitive(false);
backMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_Left, Gdk::ModifierType::MOD1_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
backMenuItem->signal_activate().connect(back);
forwardMenuItem = createMenuItem("_Next page");
forwardMenuItem->set_sensitive(false);
forwardMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_Right, Gdk::ModifierType::MOD1_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
forwardMenuItem->signal_activate().connect(forward);
auto reloadMenuItem = createMenuItem("_Reload Page");
reloadMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_R, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
reloadMenuItem->signal_activate().connect(reload);
auto homePageMenuItem = createMenuItem("_Homepage");
homePageMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_Home, Gdk::ModifierType::MOD1_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
homePageMenuItem->signal_activate().connect(home);
auto tocMenuItem = createMenuItem("_Table of Contents");
tocMenuItem->add_accelerator("activate", accelgroup, GDK_KEY_T, Gdk::ModifierType::CONTROL_MASK | Gdk::ModifierType::SHIFT_MASK,
Gtk::AccelFlags::ACCEL_VISIBLE);
tocMenuItem->signal_activate().connect(toc);
auto sourceCodeMenuItem = createMenuItem("View _Source");
sourceCodeMenuItem->signal_activate().connect(source_code);
// Help subm-enu
auto aboutMenuItem = createMenuItem("_About");
aboutMenuItem->signal_activate().connect(about);
// Add items to sub-menus
m_fileSubmenu.append(*newDocumentMenuItem);
m_fileSubmenu.append(*openMenuItem);
m_fileSubmenu.append(*openEditMenuItem);
m_fileSubmenu.append(*editMenuItem);
m_fileSubmenu.append(m_separator1);
m_fileSubmenu.append(*saveMenuitem);
m_fileSubmenu.append(*saveAsMenuItem);
m_fileSubmenu.append(m_separator2);
m_fileSubmenu.append(*publishMenuItem);
m_fileSubmenu.append(m_separator3);
m_fileSubmenu.append(*quitMenuItem);
m_editSubmenu.append(*undoMenuItem);
m_editSubmenu.append(*redoMenuItem);
m_editSubmenu.append(m_separator4);
m_editSubmenu.append(*cutMenuItem);
m_editSubmenu.append(*copyMenuItem);
m_editSubmenu.append(*pasteMenuItem);
m_editSubmenu.append(*deleteMenuItem);
m_editSubmenu.append(m_separator5);
m_editSubmenu.append(*selectAllMenuItem);
m_editSubmenu.append(m_separator6);
m_editSubmenu.append(*findMenuItem);
m_editSubmenu.append(*replaceMenuItem);
m_viewSubmenu.append(*backMenuItem);
m_viewSubmenu.append(*forwardMenuItem);
m_viewSubmenu.append(*reloadMenuItem);
m_viewSubmenu.append(*homePageMenuItem);
m_viewSubmenu.append(m_separator7);
m_viewSubmenu.append(*tocMenuItem);
m_viewSubmenu.append(m_separator8);
m_viewSubmenu.append(*sourceCodeMenuItem);
m_helpSubmenu.append(*aboutMenuItem);
// Add sub-menus to menus
m_file.set_submenu(m_fileSubmenu);
m_edit.set_submenu(m_editSubmenu);
m_view.set_submenu(m_viewSubmenu);
m_help.set_submenu(m_helpSubmenu);
// Add menus to menu bar
append(m_file);
append(m_edit);
append(m_view);
append(m_help);
}
Menu::~Menu()
{
}
void Menu::setBackMenuSensitive(bool sensitive)
{
backMenuItem->set_sensitive(sensitive);
}
void Menu::setForwardMenuSensitive(bool sensitive)
{
forwardMenuItem->set_sensitive(sensitive);
}
void Menu::setPublishMenuSensitive(bool sensitive)
{
publishMenuItem->set_sensitive(sensitive);
}
void Menu::setEditMenuSensitive(bool sensitive)
{
editMenuItem->set_sensitive(sensitive);
}
/**
* \brief Helper method for creating a menu with an image
* \return GTKWidget menu item pointer
*/
Gtk::MenuItem* Menu::createMenuItem(const Glib::ustring& label_text)
{
Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem(label_text, true));
return item;
}