2020-11-30 15:43:52 -08:00
|
|
|
#include "menu.h"
|
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
Menu::Menu(const Glib::RefPtr<Gtk::AccelGroup>& accel_group)
|
|
|
|
: file_menu_item("_File", true),
|
|
|
|
edit_menu_item("_Edit", true),
|
|
|
|
view_menu_item("_View", true),
|
|
|
|
help_menu_item("_Help", true)
|
2020-11-30 15:43:52 -08:00
|
|
|
{
|
2022-05-25 14:22:16 -07:00
|
|
|
// File dropdown menu
|
|
|
|
auto new_document_menu_item = create_menu_item("_New Document");
|
|
|
|
new_document_menu_item->add_accelerator("activate", accel_group, GDK_KEY_N, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
new_document_menu_item->signal_activate().connect(new_doc);
|
|
|
|
auto open_menu_item = create_menu_item("_Open...");
|
|
|
|
open_menu_item->add_accelerator("activate", accel_group, GDK_KEY_O, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
open_menu_item->signal_activate().connect(open);
|
|
|
|
auto open_edit_menu_item = create_menu_item("Open & _Edit...");
|
|
|
|
open_edit_menu_item->add_accelerator("activate", accel_group, GDK_KEY_E, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
open_edit_menu_item->signal_activate().connect(open_edit);
|
|
|
|
edit_menu_item_ = create_menu_item("Edit");
|
|
|
|
edit_menu_item_->add_accelerator("activate", accel_group, GDK_KEY_D, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
edit_menu_item_->signal_activate().connect(edit);
|
|
|
|
auto save_menuitem = create_menu_item("_Save");
|
|
|
|
save_menuitem->add_accelerator("activate", accel_group, GDK_KEY_S, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
save_menuitem->signal_activate().connect(save);
|
|
|
|
auto save_as_menu_item = create_menu_item("Save _As...");
|
|
|
|
save_as_menu_item->add_accelerator("activate", accel_group, GDK_KEY_S, Gdk::ModifierType::CONTROL_MASK | Gdk::ModifierType::SHIFT_MASK,
|
|
|
|
Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
save_as_menu_item->signal_activate().connect(save_as);
|
|
|
|
publish_menu_item_ = create_menu_item("_Publish...");
|
|
|
|
publish_menu_item_->set_sensitive(false); // disable
|
|
|
|
publish_menu_item_->add_accelerator("activate", accel_group, GDK_KEY_P, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
publish_menu_item_->signal_activate().connect(publish);
|
|
|
|
auto quit_menu_item = create_menu_item("_Quit");
|
|
|
|
quit_menu_item->add_accelerator("activate", accel_group, GDK_KEY_Q, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
quit_menu_item->signal_activate().connect(quit);
|
2020-11-30 15:43:52 -08:00
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
// Edit dropdown menu
|
|
|
|
auto undo_menu_item = create_menu_item("_Undo");
|
|
|
|
undo_menu_item->add_accelerator("activate", accel_group, GDK_KEY_Z, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
undo_menu_item->signal_activate().connect(undo);
|
|
|
|
auto redo_menu_item = create_menu_item("_Redo");
|
|
|
|
redo_menu_item->add_accelerator("activate", accel_group, GDK_KEY_Y, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
redo_menu_item->signal_activate().connect(redo);
|
|
|
|
auto cut_menu_item = create_menu_item("Cu_t");
|
|
|
|
cut_menu_item->add_accelerator("activate", accel_group, GDK_KEY_X, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
cut_menu_item->signal_activate().connect(cut);
|
|
|
|
auto copy_menu_item = create_menu_item("_Copy");
|
|
|
|
copy_menu_item->add_accelerator("activate", accel_group, GDK_KEY_C, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
copy_menu_item->signal_activate().connect(copy);
|
|
|
|
auto paste_menu_item = create_menu_item("_Paste");
|
|
|
|
paste_menu_item->add_accelerator("activate", accel_group, GDK_KEY_V, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
paste_menu_item->signal_activate().connect(paste);
|
|
|
|
auto delete_menu_item = create_menu_item("_Delete");
|
|
|
|
delete_menu_item->add_accelerator("activate", accel_group, GDK_KEY_Delete, (Gdk::ModifierType)0, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
delete_menu_item->signal_activate().connect(del);
|
|
|
|
auto select_all_menu_item = create_menu_item("Select _All");
|
|
|
|
select_all_menu_item->add_accelerator("activate", accel_group, GDK_KEY_A, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
select_all_menu_item->signal_activate().connect(select_all);
|
|
|
|
auto find_menu_item = create_menu_item("_Find");
|
|
|
|
find_menu_item->add_accelerator("activate", accel_group, GDK_KEY_F, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
find_menu_item->signal_activate().connect(find);
|
|
|
|
auto replace_menu_item = create_menu_item("_Replace");
|
|
|
|
replace_menu_item->add_accelerator("activate", accel_group, GDK_KEY_H, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
replace_menu_item->signal_activate().connect(replace);
|
2021-03-07 16:25:08 -08:00
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
// View dropdown menu
|
|
|
|
back_menu_item_ = create_menu_item("_Previous Page");
|
|
|
|
back_menu_item_->set_sensitive(false);
|
|
|
|
back_menu_item_->add_accelerator("activate", accel_group, GDK_KEY_Left, Gdk::ModifierType::MOD1_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
back_menu_item_->signal_activate().connect(back);
|
|
|
|
forward_menu_item_ = create_menu_item("_Next page");
|
|
|
|
forward_menu_item_->set_sensitive(false);
|
|
|
|
forward_menu_item_->add_accelerator("activate", accel_group, GDK_KEY_Right, Gdk::ModifierType::MOD1_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
forward_menu_item_->signal_activate().connect(forward);
|
|
|
|
auto reload_menu_item = create_menu_item("_Reload Page");
|
|
|
|
reload_menu_item->add_accelerator("activate", accel_group, GDK_KEY_R, Gdk::ModifierType::CONTROL_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
reload_menu_item->signal_activate().connect(reload);
|
|
|
|
auto home_page_menu_item = create_menu_item("_Homepage");
|
|
|
|
home_page_menu_item->add_accelerator("activate", accel_group, GDK_KEY_Home, Gdk::ModifierType::MOD1_MASK, Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
home_page_menu_item->signal_activate().connect(home);
|
|
|
|
auto toc_menu_item = create_menu_item("_Table of Contents");
|
|
|
|
toc_menu_item->add_accelerator("activate", accel_group, GDK_KEY_T, Gdk::ModifierType::CONTROL_MASK | Gdk::ModifierType::SHIFT_MASK,
|
|
|
|
Gtk::AccelFlags::ACCEL_VISIBLE);
|
|
|
|
toc_menu_item->signal_activate().connect(toc);
|
|
|
|
auto source_code_menu_item = create_menu_item("View _Source");
|
|
|
|
source_code_menu_item->signal_activate().connect(source_code);
|
2020-11-30 15:43:52 -08:00
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
// Help dropdown menu
|
|
|
|
auto about_menu_item = create_menu_item("_About");
|
|
|
|
about_menu_item->signal_activate().connect(about);
|
2020-11-30 15:43:52 -08:00
|
|
|
|
2022-01-21 15:39:53 -08:00
|
|
|
// Add items to sub-menus
|
2022-05-25 14:22:16 -07:00
|
|
|
file_menu.append(*new_document_menu_item);
|
|
|
|
file_menu.append(*open_menu_item);
|
|
|
|
file_menu.append(*open_edit_menu_item);
|
|
|
|
file_menu.append(*edit_menu_item_);
|
|
|
|
file_menu.append(separator1);
|
|
|
|
file_menu.append(*save_menuitem);
|
|
|
|
file_menu.append(*save_as_menu_item);
|
|
|
|
file_menu.append(separator2);
|
|
|
|
file_menu.append(*publish_menu_item_);
|
|
|
|
file_menu.append(separator3);
|
|
|
|
file_menu.append(*quit_menu_item);
|
|
|
|
edit_menu.append(*undo_menu_item);
|
|
|
|
edit_menu.append(*redo_menu_item);
|
|
|
|
edit_menu.append(separator4);
|
|
|
|
edit_menu.append(*cut_menu_item);
|
|
|
|
edit_menu.append(*copy_menu_item);
|
|
|
|
edit_menu.append(*paste_menu_item);
|
|
|
|
edit_menu.append(*delete_menu_item);
|
|
|
|
edit_menu.append(separator5);
|
|
|
|
edit_menu.append(*select_all_menu_item);
|
|
|
|
edit_menu.append(separator6);
|
|
|
|
edit_menu.append(*find_menu_item);
|
|
|
|
edit_menu.append(*replace_menu_item);
|
|
|
|
view_menu.append(*back_menu_item_);
|
|
|
|
view_menu.append(*forward_menu_item_);
|
|
|
|
view_menu.append(*reload_menu_item);
|
|
|
|
view_menu.append(*home_page_menu_item);
|
|
|
|
view_menu.append(separator7);
|
|
|
|
view_menu.append(*toc_menu_item);
|
|
|
|
view_menu.append(separator8);
|
|
|
|
view_menu.append(*source_code_menu_item);
|
|
|
|
help_menu.append(*about_menu_item);
|
2020-11-30 15:43:52 -08:00
|
|
|
|
2022-01-21 15:39:53 -08:00
|
|
|
// Add sub-menus to menus
|
2022-05-25 14:22:16 -07:00
|
|
|
file_menu_item.set_submenu(file_menu);
|
|
|
|
edit_menu_item.set_submenu(edit_menu);
|
|
|
|
view_menu_item.set_submenu(view_menu);
|
|
|
|
help_menu_item.set_submenu(help_menu);
|
2022-01-21 15:39:53 -08:00
|
|
|
// Add menus to menu bar
|
2022-05-25 14:22:16 -07:00
|
|
|
append(file_menu_item);
|
|
|
|
append(edit_menu_item);
|
|
|
|
append(view_menu_item);
|
|
|
|
append(help_menu_item);
|
2020-11-30 15:43:52 -08:00
|
|
|
}
|
|
|
|
|
2021-02-12 12:46:41 -08:00
|
|
|
Menu::~Menu()
|
|
|
|
{
|
2020-11-30 15:43:52 -08:00
|
|
|
}
|
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
void Menu::set_back_menu_sensitive(bool sensitive)
|
2021-02-15 13:54:56 -08:00
|
|
|
{
|
2022-05-25 14:22:16 -07:00
|
|
|
back_menu_item_->set_sensitive(sensitive);
|
2021-02-15 13:54:56 -08:00
|
|
|
}
|
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
void Menu::set_forward_menu_sensitive(bool sensitive)
|
2021-02-15 13:54:56 -08:00
|
|
|
{
|
2022-05-25 14:22:16 -07:00
|
|
|
forward_menu_item_->set_sensitive(sensitive);
|
2021-02-15 13:54:56 -08:00
|
|
|
}
|
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
void Menu::set_publish_menu_sensitive(bool sensitive)
|
2021-03-29 13:03:14 -07:00
|
|
|
{
|
2022-05-25 14:22:16 -07:00
|
|
|
publish_menu_item_->set_sensitive(sensitive);
|
2021-03-29 13:03:14 -07:00
|
|
|
}
|
|
|
|
|
2022-05-25 14:22:16 -07:00
|
|
|
void Menu::set_edit_menu_sensitive(bool sensitive)
|
2021-03-30 15:16:56 -07:00
|
|
|
{
|
2022-05-25 14:22:16 -07:00
|
|
|
edit_menu_item_->set_sensitive(sensitive);
|
2021-03-30 15:16:56 -07:00
|
|
|
}
|
|
|
|
|
2020-11-30 15:43:52 -08:00
|
|
|
/**
|
|
|
|
* \brief Helper method for creating a menu with an image
|
|
|
|
* \return GTKWidget menu item pointer
|
|
|
|
*/
|
2022-05-25 14:22:16 -07:00
|
|
|
Gtk::MenuItem* Menu::create_menu_item(const Glib::ustring& label_text)
|
2021-02-12 12:46:41 -08:00
|
|
|
{
|
2022-01-21 15:39:53 -08:00
|
|
|
Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem(label_text, true));
|
|
|
|
return item;
|
2020-11-30 15:43:52 -08:00
|
|
|
}
|