From 0d73ff83d93f7880215faebfe8e1df79b6e46c6d Mon Sep 17 00:00:00 2001 From: Luca Bacci <luca.bacci982@gmail.com> Date: Thu, 2 Aug 2018 09:24:41 +0200 Subject: [PATCH 04/26] prepare-for-gtk3: Prepare for removal of Gtk::Menu_Helpers::MenuList (#7) GParted uses Gtk::Menu_Helpers::MenuList helper class to access individual menu items. This helper class made it easy to navigate menu items by index. Gtk::Menu_Helpers::MenuList was removed in the switch from Gtkmm2 to Gtkmm3 [1]. Instead, use a separate std::map<Gtk::MenuItem*> to keep track of individual Gtk::MenuItem objects. Reference: [1] Gtkmm 3 commit "MenuShell: Remove items()." removed the code https://gitlab.gnome.org/GNOME/gtkmm/commit/c8e47b0db5505db0e10e74ce1d7286c2230958b5 Closes #7 - Port to Gtk3 --- include/HBoxOperations.h | 3 +- include/Win_GParted.h | 73 +++++--- src/HBoxOperations.cc | 25 ++- src/Win_GParted.cc | 391 ++++++++++++++++++++++----------------- 4 files changed, 292 insertions(+), 200 deletions(-) diff --git a/include/HBoxOperations.h b/include/HBoxOperations.h index 28600928..24b7da79 100644 --- a/include/HBoxOperations.h +++ b/include/HBoxOperations.h @@ -53,7 +53,8 @@ private: Gtk::ScrolledWindow scrollwindow ; Gtk::TreeView treeview_operations ; Glib::RefPtr<Gtk::ListStore> liststore_operations ; - + std::map<int, Gtk::MenuItem*> menu_popup_items; + struct treeview_operations_Columns : public Gtk::TreeModelColumnRecord { Gtk::TreeModelColumn<Glib::ustring> operation_description; diff --git a/include/Win_GParted.h b/include/Win_GParted.h index d5a4a146..9f272b47 100644 --- a/include/Win_GParted.h +++ b/include/Win_GParted.h @@ -82,8 +82,8 @@ private: //convenience functions void toggle_item( bool state, int menu_item, int toolbar_item = -1 ) { - if ( menu_item >= 0 && menu_item < static_cast<int>( menu_partition .items() .size() ) ) - menu_partition .items()[ menu_item ] .set_sensitive( state ) ; + if (menu_item >= 0 && partitionmenu_items.count(menu_item)) + partitionmenu_items[menu_item]->set_sensitive(state); if ( toolbar_item >= 0 && toolbar_item < toolbar_main .get_n_items() ) toolbar_main .get_nth_item( toolbar_item ) ->set_sensitive( state ) ; @@ -134,14 +134,14 @@ private: void allow_undo_clear_apply( bool state ) { toggle_item( state, -1, TOOLBAR_UNDO ) ; - static_cast<Gtk::CheckMenuItem *>( & menubar_main .items()[ 1 ] .get_submenu() ->items()[ 0 ] ) + static_cast<Gtk::CheckMenuItem *>(mainmenu_items[MENU_UNDO_OPERATION]) ->set_sensitive( state ) ; - static_cast<Gtk::CheckMenuItem *>( & menubar_main .items()[ 1 ] .get_submenu() ->items()[ 1 ] ) + static_cast<Gtk::CheckMenuItem *>(mainmenu_items[MENU_CLEAR_OPERATIONS]) ->set_sensitive( state ) ; toggle_item( state, -1, TOOLBAR_APPLY ) ; - static_cast<Gtk::CheckMenuItem *>( & menubar_main .items()[ 1 ] .get_submenu() ->items()[ 2 ] ) + static_cast<Gtk::CheckMenuItem *>(mainmenu_items[MENU_APPLY_OPERATIONS]) ->set_sensitive( state ) ; } @@ -253,25 +253,50 @@ private: }; treeview_devices_Columns treeview_devices_columns ; - //indices for partitionmenu and toolbar - int - MENU_NEW, TOOLBAR_NEW, - MENU_DEL, TOOLBAR_DEL, - MENU_RESIZE_MOVE, TOOLBAR_RESIZE_MOVE, - MENU_COPY, TOOLBAR_COPY, - MENU_PASTE, TOOLBAR_PASTE, - MENU_FORMAT, - MENU_TOGGLE_CRYPT_BUSY, - MENU_TOGGLE_FS_BUSY, - MENU_MOUNT, - MENU_NAME_PARTITION, - MENU_FLAGS, - MENU_CHECK, - MENU_LABEL_PARTITION, - MENU_CHANGE_UUID, - MENU_INFO, - TOOLBAR_UNDO, - TOOLBAR_APPLY ; + // Indices for toolbar + int + TOOLBAR_NEW, + TOOLBAR_DEL, + TOOLBAR_RESIZE_MOVE, + TOOLBAR_COPY, + TOOLBAR_PASTE, + TOOLBAR_UNDO, + TOOLBAR_APPLY; + + enum MainMenu_Items + { + MENU_DEVICES = 0, + MENU_EDIT, + MENU_UNDO_OPERATION, + MENU_CLEAR_OPERATIONS, + MENU_APPLY_OPERATIONS, + MENU_VIEW, + MENU_DEVICE_INFORMATION, + MENU_PENDING_OPERATIONS, + MENU_DEVICE, + MENU_PARTITION + }; + + enum PartitionMenu_Items + { + MENU_NEW = 0, + MENU_DEL, + MENU_RESIZE_MOVE, + MENU_COPY, + MENU_PASTE, + MENU_FORMAT, + MENU_TOGGLE_CRYPT_BUSY, + MENU_TOGGLE_FS_BUSY, + MENU_MOUNT, + MENU_NAME_PARTITION, + MENU_FLAGS, + MENU_CHECK, + MENU_LABEL_PARTITION, + MENU_CHANGE_UUID, + MENU_INFO + }; + std::map<int, Gtk::MenuItem*> mainmenu_items; + std::map<int, Gtk::MenuItem*> partitionmenu_items; //usefull variables which are used by many different functions... unsigned short new_count;//new_count keeps track of the new created partitions diff --git a/src/HBoxOperations.cc b/src/HBoxOperations.cc index 30e1fa55..37f37b84 100644 --- a/src/HBoxOperations.cc +++ b/src/HBoxOperations.cc @@ -41,20 +41,27 @@ HBoxOperations::HBoxOperations() pack_start( scrollwindow, Gtk::PACK_EXPAND_WIDGET ); //create popupmenu - menu_popup.append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + Gtk::MenuItem *item; + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Undo Last Operation"), * manage( new Gtk::Image( Gtk::Stock::UNDO, Gtk::ICON_SIZE_MENU ) ), - sigc::mem_fun(*this, &HBoxOperations::on_undo)))); + sigc::mem_fun(*this, &HBoxOperations::on_undo))); + menu_popup.append(*item); + menu_popup_items[0] = item; - menu_popup.append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Clear All Operations"), * manage( new Gtk::Image( Gtk::Stock::CLEAR, Gtk::ICON_SIZE_MENU ) ), - sigc::mem_fun(*this, &HBoxOperations::on_clear)))); + sigc::mem_fun(*this, &HBoxOperations::on_clear))); + menu_popup.append(*item); + menu_popup_items[1] = item; - menu_popup.append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Apply All Operations"), * manage( new Gtk::Image( Gtk::Stock::APPLY, Gtk::ICON_SIZE_MENU ) ), - sigc::mem_fun(*this, &HBoxOperations::on_apply)))); + sigc::mem_fun(*this, &HBoxOperations::on_apply))); + menu_popup.append(*item); + menu_popup_items[2] = item; menu_popup.append(*manage(new GParted::Menu_Helpers::SeparatorElem())); menu_popup.append(*manage(new GParted::Menu_Helpers::StockMenuElem( @@ -89,9 +96,9 @@ bool HBoxOperations::on_signal_button_press_event( GdkEventButton * event ) //right-click if ( event ->button == 3 ) { - menu_popup .items()[0] .set_sensitive( liststore_operations ->children() .size() > 0 ) ; - menu_popup .items()[1] .set_sensitive( liststore_operations ->children() .size() > 0 ) ; - menu_popup .items()[2] .set_sensitive( liststore_operations ->children() .size() > 0 ) ; + menu_popup_items[0]->set_sensitive(liststore_operations->children().size() > 0); + menu_popup_items[1]->set_sensitive(liststore_operations->children().size() > 0); + menu_popup_items[2]->set_sensitive(liststore_operations->children().size() > 0); menu_popup .popup( event ->button, event ->time ) ; } diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc index 2a744da8..4ed8cb47 100644 --- a/src/Win_GParted.cc +++ b/src/Win_GParted.cc @@ -67,22 +67,13 @@ Win_GParted::Win_GParted( const std::vector<Glib::ustring> & user_devices ) OPERATIONSLIST_OPEN = true ; gparted_core .set_user_devices( user_devices ) ; - MENU_NEW = TOOLBAR_NEW = - MENU_DEL = TOOLBAR_DEL = - MENU_RESIZE_MOVE = TOOLBAR_RESIZE_MOVE = - MENU_COPY = TOOLBAR_COPY = - MENU_PASTE = TOOLBAR_PASTE = - MENU_FORMAT = - MENU_TOGGLE_CRYPT_BUSY = - MENU_TOGGLE_FS_BUSY = - MENU_MOUNT = - MENU_NAME_PARTITION = - MENU_FLAGS = - MENU_INFO = - MENU_LABEL_PARTITION = - MENU_CHANGE_UUID = - TOOLBAR_UNDO = - TOOLBAR_APPLY = -1 ; + TOOLBAR_NEW = + TOOLBAR_DEL = + TOOLBAR_RESIZE_MOVE = + TOOLBAR_COPY = + TOOLBAR_PASTE = + TOOLBAR_UNDO = + TOOLBAR_APPLY = -1; //==== GUI ========================= this ->set_title( _("GParted") ); @@ -153,91 +144,137 @@ Win_GParted::~Win_GParted() void Win_GParted::init_menubar() { + Gtk::MenuItem *item; + //fill menubar_main and connect callbacks //gparted menu = manage( new Gtk::Menu() ) ; image = manage( new Gtk::Image( Gtk::Stock::REFRESH, Gtk::ICON_SIZE_MENU ) ); - menu->append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Refresh Devices"), Gtk::AccelKey("<control>r"), *image, - sigc::mem_fun(*this, &Win_GParted::menu_gparted_refresh_devices)))); + sigc::mem_fun(*this, &Win_GParted::menu_gparted_refresh_devices))); + menu->append(*item); image = manage( new Gtk::Image( Gtk::Stock::HARDDISK, Gtk::ICON_SIZE_MENU ) ); - menu->append(*manage(new GParted::Menu_Helpers::ImageMenuElem( - _("_Devices"), *image))); + item = manage(new GParted::Menu_Helpers::ImageMenuElem( + _("_Devices"), *image)); + menu->append(*item); + mainmenu_items[MENU_DEVICES] = item; - menu->append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - menu->append(*manage(new GParted::Menu_Helpers::StockMenuElem( - Gtk::Stock::QUIT, sigc::mem_fun(*this, &Win_GParted::menu_gparted_quit)))); - menubar_main.append(*manage(new GParted::Menu_Helpers::MenuElem( - _("_GParted"), *menu))); + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu->append(*item); + + item = manage(new GParted::Menu_Helpers::StockMenuElem( + Gtk::Stock::QUIT, sigc::mem_fun(*this, &Win_GParted::menu_gparted_quit))); + menu->append(*item); + + item = manage(new GParted::Menu_Helpers::MenuElem( + _("_GParted"), *menu)); + menubar_main.append(*item); //edit menu = manage( new Gtk::Menu() ) ; - menu->append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Undo Last Operation"), Gtk::AccelKey("<control>z"), * manage( new Gtk::Image( Gtk::Stock::UNDO, Gtk::ICON_SIZE_MENU ) ), - sigc::mem_fun(*this, &Win_GParted::activate_undo)))); + sigc::mem_fun(*this, &Win_GParted::activate_undo))); + menu->append(*item); + mainmenu_items[MENU_UNDO_OPERATION] = item; - menu->append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Clear All Operations"), * manage( new Gtk::Image( Gtk::Stock::CLEAR, Gtk::ICON_SIZE_MENU ) ), - sigc::mem_fun(*this, &Win_GParted::clear_operationslist)))); + sigc::mem_fun(*this, &Win_GParted::clear_operationslist))); + menu->append(*item); + mainmenu_items[MENU_CLEAR_OPERATIONS] = item; - menu->append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Apply All Operations"), Gtk::AccelKey(GDK_KEY_Return, Gdk::CONTROL_MASK), * manage( new Gtk::Image( Gtk::Stock::APPLY, Gtk::ICON_SIZE_MENU ) ), - sigc::mem_fun(*this, &Win_GParted::activate_apply)))); - menubar_main.append(*manage(new GParted::Menu_Helpers::MenuElem( - _("_Edit"), *menu))); + sigc::mem_fun(*this, &Win_GParted::activate_apply))); + menu->append(*item); + mainmenu_items[MENU_APPLY_OPERATIONS] = item; + + item = manage(new GParted::Menu_Helpers::MenuElem( + _("_Edit"), *menu)); + menubar_main.append(*item); + mainmenu_items[MENU_EDIT] = item; //view menu = manage( new Gtk::Menu() ) ; - menu->append(*manage(new GParted::Menu_Helpers::CheckMenuElem( - _("Device _Information"), sigc::mem_fun(*this, &Win_GParted::menu_view_harddisk_info)))); - menu->append(*manage(new GParted::Menu_Helpers::CheckMenuElem( - _("Pending _Operations"), sigc::mem_fun(*this, &Win_GParted::menu_view_operations)))); - menubar_main.append(*manage(new GParted::Menu_Helpers::MenuElem( - _("_View"), *menu))); - menu->append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - menu->append(*manage(new GParted::Menu_Helpers::MenuElem( - _("_File System Support"), sigc::mem_fun(*this, &Win_GParted::menu_gparted_features)))); + item = manage(new GParted::Menu_Helpers::CheckMenuElem( + _("Device _Information"), sigc::mem_fun(*this, &Win_GParted::menu_view_harddisk_info))); + menu->append(*item); + mainmenu_items[MENU_DEVICE_INFORMATION] = item; + + item = manage(new GParted::Menu_Helpers::CheckMenuElem( + _("Pending _Operations"), sigc::mem_fun(*this, &Win_GParted::menu_view_operations))); + menu->append(*item); + mainmenu_items[MENU_PENDING_OPERATIONS] = item; + + item = manage(new GParted::Menu_Helpers::MenuElem( + _("_View"), *menu)); + menubar_main.append(*item); + + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu->append(*item); + + item = manage( new GParted::Menu_Helpers::MenuElem( + _("_File System Support"), sigc::mem_fun(*this, &Win_GParted::menu_gparted_features))); + menu->append(*item); + mainmenu_items[MENU_VIEW] = item; //device menu = manage( new Gtk::Menu() ) ; - menu->append(*manage(new GParted::Menu_Helpers::MenuElem( + + item = manage(new GParted::Menu_Helpers::MenuElem( Glib::ustring(_("_Create Partition Table") ) + "...", - sigc::mem_fun(*this, &Win_GParted::activate_disklabel)))); + sigc::mem_fun(*this, &Win_GParted::activate_disklabel))); + menu->append(*item); - menu->append(*manage(new GParted::Menu_Helpers::MenuElem( + item = manage(new GParted::Menu_Helpers::MenuElem( Glib::ustring(_("_Attempt Data Rescue") ) + "...", - sigc::mem_fun(*this, &Win_GParted::activate_attempt_rescue_data)))); + sigc::mem_fun(*this, &Win_GParted::activate_attempt_rescue_data))); + menu->append(*item); - menubar_main.append(*manage(new GParted::Menu_Helpers::MenuElem( - _("_Device"), *menu))); + item = manage(new GParted::Menu_Helpers::MenuElem( + _("_Device"), *menu)); + menubar_main.append(*item); + mainmenu_items[MENU_DEVICE] = item; //partition init_partition_menu() ; - menubar_main.append(*manage(new GParted::Menu_Helpers::MenuElem( - _("_Partition"), menu_partition))); + + item = manage(new GParted::Menu_Helpers::MenuElem( + _("_Partition"), menu_partition)); + menubar_main.append(*item); + mainmenu_items[MENU_PARTITION] = item; //help menu = manage( new Gtk::Menu() ) ; - menu->append(*manage(new GParted::Menu_Helpers::ImageMenuElem( + + item = manage(new GParted::Menu_Helpers::ImageMenuElem( _("_Contents"), Gtk::AccelKey("F1"), * manage( new Gtk::Image( Gtk::Stock::HELP, Gtk::ICON_SIZE_MENU ) ), - sigc::mem_fun(*this, &Win_GParted::menu_help_contents)))); - menu->append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - menu->append(*manage(new GParted::Menu_Helpers::StockMenuElem( - Gtk::Stock::ABOUT, sigc::mem_fun(*this, &Win_GParted::menu_help_about)))); + sigc::mem_fun(*this, &Win_GParted::menu_help_contents))); + menu->append(*item); - menubar_main.append(*manage(new GParted::Menu_Helpers::MenuElem( - _("_Help"), *menu))); + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu->append(*item); + + item = manage( new GParted::Menu_Helpers::StockMenuElem( + Gtk::Stock::ABOUT, sigc::mem_fun(*this, &Win_GParted::menu_help_about))); + menu->append(*item); + + item = manage(new GParted::Menu_Helpers::MenuElem( + _("_Help"), *menu)); + menubar_main.append(*item); } void Win_GParted::init_toolbar() @@ -333,113 +370,128 @@ void Win_GParted::init_toolbar() void Win_GParted::init_partition_menu() { - int index = 0 ; + Gtk::MenuItem *item; //fill menu_partition image = manage( new Gtk::Image( Gtk::Stock::NEW, Gtk::ICON_SIZE_MENU ) ); - menu_partition.append(*manage(new + item = manage(new /*TO TRANSLATORS: "_New" is a sub menu item for the partition menu. */ GParted::Menu_Helpers::ImageMenuElem(_("_New"), Gtk::AccelKey(GDK_KEY_Insert, Gdk::BUTTON1_MASK), *image, - sigc::mem_fun(*this, &Win_GParted::activate_new)))); - MENU_NEW = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_new))); + menu_partition.append(*item); + partitionmenu_items[MENU_NEW] = item; - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::StockMenuElem(Gtk::Stock::DELETE, Gtk::AccelKey(GDK_KEY_Delete, Gdk::BUTTON1_MASK), - sigc::mem_fun(*this, &Win_GParted::activate_delete)))); - MENU_DEL = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_delete))); + menu_partition.append(*item); + partitionmenu_items[MENU_DEL] = item; - menu_partition.append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - index++ ; + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu_partition.append(*item); image = manage( new Gtk::Image( Gtk::Stock::GOTO_LAST, Gtk::ICON_SIZE_MENU ) ); - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::ImageMenuElem(_("_Resize/Move"), *image, - sigc::mem_fun(*this, &Win_GParted::activate_resize)))); - MENU_RESIZE_MOVE = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_resize))); + menu_partition.append(*item); + partitionmenu_items[MENU_RESIZE_MOVE] = item; - menu_partition.append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - index++ ; + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu_partition.append(*item); - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::StockMenuElem(Gtk::Stock::COPY, - sigc::mem_fun(*this, &Win_GParted::activate_copy)))); - MENU_COPY = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_copy))); + menu_partition.append(*item); + partitionmenu_items[MENU_COPY] = item; - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::StockMenuElem(Gtk::Stock::PASTE, - sigc::mem_fun(*this, &Win_GParted::activate_paste)))); - MENU_PASTE = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_paste))); + menu_partition.append(*item); + partitionmenu_items[MENU_PASTE] = item; - menu_partition.append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - index++ ; + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu_partition.append(*item); image = manage( new Gtk::Image( Gtk::Stock::CONVERT, Gtk::ICON_SIZE_MENU ) ); - menu_partition.append(*manage(new + item = manage(new /*TO TRANSLATORS: menuitem which holds a submenu with file systems.. */ GParted::Menu_Helpers::ImageMenuElem(_("_Format to"), *image, - *create_format_menu()))); - MENU_FORMAT = index++ ; + *create_format_menu())); + menu_partition.append(*item); + partitionmenu_items[MENU_FORMAT] = item; - menu_partition.append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - index++ ; + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu_partition.append(*item); - menu_partition.append(*manage(new + item = manage(new // Placeholder text, replaced in set_valid_operations() before the menu is shown GParted::Menu_Helpers::MenuElem("--toggle crypt busy--", - sigc::mem_fun(*this, &Win_GParted::toggle_crypt_busy_state)))); - MENU_TOGGLE_CRYPT_BUSY = index++; + sigc::mem_fun(*this, &Win_GParted::toggle_crypt_busy_state))); + menu_partition.append(*item); + partitionmenu_items[MENU_TOGGLE_CRYPT_BUSY] = item; - menu_partition.append(*manage(new + item = manage(new // Placeholder text, replaced in set_valid_operations() before the menu is shown GParted::Menu_Helpers::MenuElem("--toggle fs busy--", - sigc::mem_fun(*this, &Win_GParted::toggle_fs_busy_state)))); - MENU_TOGGLE_FS_BUSY = index++; + sigc::mem_fun(*this, &Win_GParted::toggle_fs_busy_state))); + menu_partition.append(*item); + partitionmenu_items[MENU_TOGGLE_FS_BUSY] = item; - menu_partition.append(*manage(new + item = manage(new /*TO TRANSLATORS: menuitem which holds a submenu with mount points.. */ - GParted::Menu_Helpers::MenuElem(_("_Mount on"), *manage(new Gtk::Menu())))); - MENU_MOUNT = index++ ; + GParted::Menu_Helpers::MenuElem(_("_Mount on"), *manage(new Gtk::Menu()))); + menu_partition.append(*item); + partitionmenu_items[MENU_MOUNT] = item; - menu_partition.append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - index++ ; + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu_partition.append(*item); - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::MenuElem(_("_Name Partition"), - sigc::mem_fun(*this, &Win_GParted::activate_name_partition)))); - MENU_NAME_PARTITION = index++; + sigc::mem_fun(*this, &Win_GParted::activate_name_partition))); + menu_partition.append(*item); + partitionmenu_items[MENU_NAME_PARTITION] = item; - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::MenuElem(_("M_anage Flags"), - sigc::mem_fun(*this, &Win_GParted::activate_manage_flags)))); - MENU_FLAGS = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_manage_flags))); + menu_partition.append(*item); + partitionmenu_items[MENU_FLAGS] = item; - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::MenuElem(_("C_heck"), - sigc::mem_fun(*this, &Win_GParted::activate_check)))); - MENU_CHECK = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_check))); + menu_partition.append(*item); + partitionmenu_items[MENU_CHECK] = item; - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::MenuElem(_("_Label File System"), - sigc::mem_fun(*this, &Win_GParted::activate_label_filesystem)))); - MENU_LABEL_PARTITION = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_label_filesystem))); + menu_partition.append(*item); + partitionmenu_items[MENU_LABEL_PARTITION] = item; - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::MenuElem(_("New UU_ID"), - sigc::mem_fun(*this, &Win_GParted::activate_change_uuid)))); - MENU_CHANGE_UUID = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_change_uuid))); + menu_partition.append(*item); + partitionmenu_items[MENU_CHANGE_UUID] = item; - menu_partition.append(*manage(new GParted::Menu_Helpers::SeparatorElem())); - index++ ; - - menu_partition.append(*manage(new + item = manage(new GParted::Menu_Helpers::SeparatorElem()); + menu_partition.append(*item); + + item = manage(new GParted::Menu_Helpers::StockMenuElem(Gtk::Stock::DIALOG_INFO, - sigc::mem_fun(*this, &Win_GParted::activate_info)))); - MENU_INFO = index++ ; + sigc::mem_fun(*this, &Win_GParted::activate_info))); + menu_partition.append(*item); + partitionmenu_items[MENU_INFO] = item; menu_partition .accelerate( *this ) ; } @@ -473,12 +525,13 @@ void Win_GParted::create_format_menu_add_item( FSType filesystem, bool activate hbox ->pack_start( * Utils::mk_label( " " + Utils::get_filesystem_string( filesystem ) ), Gtk::PACK_SHRINK ) ; - menu ->items() .push_back( * manage( new Gtk::MenuItem( *hbox ) ) ) ; + Gtk::MenuItem *item = manage(new Gtk::MenuItem(*hbox)); + menu->append(*item); if ( activate ) - menu ->items() .back() .signal_activate() .connect( + item->signal_activate().connect( sigc::bind<FSType>( sigc::mem_fun( *this, &Win_GParted::activate_format ), filesystem ) ); else - menu ->items() .back() .set_sensitive( false ) ; + item->set_sensitive(false); } void Win_GParted::init_device_info() @@ -635,18 +688,19 @@ void Win_GParted::refresh_combo_devices() hbox ->pack_start( * Utils::mk_label( " (" + Utils::format_size( devices[ i ] .length, devices[ i ] .sector_size ) + ")" ), Gtk::PACK_SHRINK ) ; - menu ->items() .push_back( * manage( new Gtk::RadioMenuItem( radio_group ) ) ) ; - menu ->items() .back() .add( *hbox ) ; - menu ->items() .back() .signal_activate() .connect( + Gtk::RadioMenuItem *item = manage(new Gtk::RadioMenuItem(radio_group)); + menu->append(*item); + item->add(*hbox); + item->signal_activate().connect( sigc::bind<unsigned int>( sigc::mem_fun(*this, &Win_GParted::radio_devices_changed), i ) ) ; } - menubar_main.items()[0].get_submenu()->items()[1].unset_submenu(); + mainmenu_items[MENU_DEVICES]->unset_submenu(); - if ( menu ->items() .size() ) + if (menu->get_children().size()) { menu ->show_all() ; - menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .set_submenu( *menu ) ; + mainmenu_items[MENU_DEVICES]->set_submenu(*menu); } combo_devices_changed_connection .unblock(); @@ -1078,14 +1132,14 @@ void Win_GParted::set_valid_operations() // Set default name for the open/close crypt menu item. const FileSystem * luks_filesystem_object = gparted_core.get_filesystem_object( FS_LUKS ); g_assert( luks_filesystem_object != NULL ); // Bug: LUKS FileSystem object not found - dynamic_cast<Gtk::Label*>( menu_partition.items()[MENU_TOGGLE_CRYPT_BUSY].get_child() ) + dynamic_cast<Gtk::Label *>(partitionmenu_items[MENU_TOGGLE_CRYPT_BUSY]->get_child()) ->set_label( luks_filesystem_object->get_custom_text( CTEXT_ACTIVATE_FILESYSTEM ) ); // Set default name for the file system active/deactivate menu item. - dynamic_cast<Gtk::Label*>( menu_partition.items()[MENU_TOGGLE_FS_BUSY].get_child() ) + dynamic_cast<Gtk::Label *>(partitionmenu_items[MENU_TOGGLE_FS_BUSY]->get_child()) ->set_label( FileSystem::get_generic_text( CTEXT_ACTIVATE_FILESYSTEM ) ); - menu_partition.items()[MENU_TOGGLE_FS_BUSY].show(); - menu_partition .items()[ MENU_MOUNT ] .hide() ; + partitionmenu_items[MENU_TOGGLE_FS_BUSY]->show(); + partitionmenu_items[MENU_MOUNT]->hide(); // No partition selected ... if ( ! selected_partition_ptr ) @@ -1105,7 +1159,7 @@ void Win_GParted::set_valid_operations() // Set appropriate name for the open/close crypt menu item. if ( selected_partition_ptr->filesystem == FS_LUKS ) { - dynamic_cast<Gtk::Label*>( menu_partition.items()[MENU_TOGGLE_CRYPT_BUSY].get_child() ) + dynamic_cast<Gtk::Label *>(partitionmenu_items[MENU_TOGGLE_CRYPT_BUSY]->get_child()) ->set_label( luks_filesystem_object->get_custom_text( selected_partition_ptr->busy ? CTEXT_DEACTIVATE_FILESYSTEM : CTEXT_ACTIVATE_FILESYSTEM ) ); @@ -1116,14 +1170,14 @@ void Win_GParted::set_valid_operations() const FileSystem * filesystem_object = gparted_core.get_filesystem_object( selected_filesystem.filesystem ); if ( filesystem_object ) { - dynamic_cast<Gtk::Label*>( menu_partition.items()[MENU_TOGGLE_FS_BUSY].get_child() ) + dynamic_cast<Gtk::Label *>(partitionmenu_items[MENU_TOGGLE_FS_BUSY]->get_child()) ->set_label( filesystem_object->get_custom_text( selected_filesystem.busy ? CTEXT_DEACTIVATE_FILESYSTEM : CTEXT_ACTIVATE_FILESYSTEM ) ); } else { - dynamic_cast<Gtk::Label*>( menu_partition.items()[MENU_TOGGLE_FS_BUSY].get_child() ) + dynamic_cast<Gtk::Label *>(partitionmenu_items[MENU_TOGGLE_FS_BUSY]->get_child()) ->set_label( FileSystem::get_generic_text ( selected_filesystem.busy ? CTEXT_DEACTIVATE_FILESYSTEM : CTEXT_ACTIVATE_FILESYSTEM ) ); @@ -1337,21 +1391,26 @@ void Win_GParted::set_valid_operations() selected_filesystem.filesystem != FS_LUKS && selected_filesystem.get_mountpoints().size() ) { - menu = menu_partition .items()[ MENU_MOUNT ] .get_submenu() ; - menu ->items() .clear() ; + partitionmenu_items[MENU_MOUNT]->unset_submenu(); + + Gtk::Menu *menu = manage(new Gtk::Menu()); std::vector<Glib::ustring> temp_mountpoints = selected_filesystem.get_mountpoints(); for ( unsigned int t = 0 ; t < temp_mountpoints.size() ; t++ ) { - menu->append(*manage(new + Gtk::MenuItem *item; + + item = manage(new GParted::Menu_Helpers::MenuElem( temp_mountpoints[t], - sigc::bind<unsigned int>(sigc::mem_fun(*this, &Win_GParted::activate_mount_partition), t)))); + sigc::bind<unsigned int>(sigc::mem_fun(*this, &Win_GParted::activate_mount_partition), t))); + menu->append(*item); - dynamic_cast<Gtk::Label*>( menu ->items() .back() .get_child() ) ->set_use_underline( false ) ; + dynamic_cast<Gtk::Label *>(item->get_child())->set_use_underline(false); } + partitionmenu_items[MENU_MOUNT]->set_submenu(*menu); - menu_partition.items()[MENU_TOGGLE_FS_BUSY].hide(); - menu_partition .items()[ MENU_MOUNT ] .show() ; + partitionmenu_items[MENU_TOGGLE_FS_BUSY]->hide(); + partitionmenu_items[MENU_MOUNT]->show(); } // See if there is a partition to be copied and it fits inside this selected partition @@ -1404,7 +1463,7 @@ void Win_GParted::open_operationslist() Gtk::Main::iteration() ; } - static_cast<Gtk::CheckMenuItem *>( & menubar_main .items()[ 2 ] .get_submenu() ->items()[ 1 ] ) + static_cast<Gtk::CheckMenuItem *>(mainmenu_items[MENU_PENDING_OPERATIONS]) ->set_active( true ) ; } } @@ -1425,7 +1484,7 @@ void Win_GParted::close_operationslist() hbox_operations .hide() ; - static_cast<Gtk::CheckMenuItem *>( & menubar_main .items()[ 2 ] .get_submenu() ->items()[ 1 ] ) + static_cast<Gtk::CheckMenuItem *>(mainmenu_items[MENU_PENDING_OPERATIONS]) ->set_active( false ) ; } } @@ -1455,21 +1514,21 @@ void Win_GParted::combo_devices_changed() //rebuild visualdisk and treeview Refresh_Visual(); - //uodate radiobuttons.. - if ( menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .get_submenu() ) - static_cast<Gtk::RadioMenuItem *>( - & menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .get_submenu() -> - items()[ current_device ] ) ->set_active( true ) ; + // Update radio buttons.. + if (mainmenu_items[MENU_DEVICES]->has_submenu()) { + std::vector<Gtk::Widget *> child_items; + child_items = mainmenu_items[MENU_DEVICES]->get_submenu()->get_children(); + static_cast<Gtk::RadioMenuItem *>(child_items[current_device]) + ->set_active(true); + } } void Win_GParted::radio_devices_changed( unsigned int item ) { - if ( static_cast<Gtk::RadioMenuItem *>( - & menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .get_submenu() -> - items()[ item ] ) ->get_active() ) - { + std::vector<Gtk::Widget *> child_items; + child_items = mainmenu_items[MENU_DEVICES]->get_submenu()->get_children(); + if (static_cast<Gtk::RadioMenuItem *>(child_items[item])->get_active()) combo_devices .set_active( item ) ; - } } void Win_GParted::on_show() @@ -1524,11 +1583,11 @@ void Win_GParted::menu_gparted_refresh_devices() this ->set_title( _("GParted") ); combo_devices .hide() ; - menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .set_sensitive( false ) ; - menubar_main .items()[ 1 ] .set_sensitive( false ) ; - menubar_main .items()[ 2 ] .set_sensitive( false ) ; - menubar_main .items()[ 3 ] .set_sensitive( false ) ; - menubar_main .items()[ 4 ] .set_sensitive( false ) ; + mainmenu_items[MENU_DEVICES]->set_sensitive(false); + mainmenu_items[MENU_EDIT]->set_sensitive(false); + mainmenu_items[MENU_VIEW]->set_sensitive(false); + mainmenu_items[MENU_DEVICE]->set_sensitive(false); + mainmenu_items[MENU_PARTITION]->set_sensitive(false); toolbar_main .set_sensitive( false ) ; drawingarea_visualdisk .set_sensitive( false ) ; treeview_detail .set_sensitive( false ) ; @@ -1550,11 +1609,11 @@ void Win_GParted::menu_gparted_refresh_devices() { combo_devices .show() ; - menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .set_sensitive( true ) ; - menubar_main .items()[ 1 ] .set_sensitive( true ) ; - menubar_main .items()[ 2 ] .set_sensitive( true ) ; - menubar_main .items()[ 3 ] .set_sensitive( true ) ; - menubar_main .items()[ 4 ] .set_sensitive( true ) ; + mainmenu_items[MENU_DEVICES]->set_sensitive(true); + mainmenu_items[MENU_EDIT]->set_sensitive(true); + mainmenu_items[MENU_VIEW]->set_sensitive(true); + mainmenu_items[MENU_DEVICE]->set_sensitive(true); + mainmenu_items[MENU_PARTITION]->set_sensitive(true); toolbar_main .set_sensitive( true ) ; drawingarea_visualdisk .set_sensitive( true ) ; @@ -1592,9 +1651,9 @@ void Win_GParted::menu_gparted_features() dialog.load_filesystems( show_fs_actions ); //recreate format menu... - menu_partition.items()[MENU_FORMAT].unset_submenu(); - menu_partition .items()[ MENU_FORMAT ] .set_submenu( * create_format_menu() ) ; - menu_partition .items()[ MENU_FORMAT ] .get_submenu() ->show_all_children() ; + partitionmenu_items[MENU_FORMAT]->unset_submenu(); + partitionmenu_items[MENU_FORMAT]->set_submenu(*create_format_menu()); + partitionmenu_items[MENU_FORMAT]->get_submenu()->show_all_children(); } } @@ -1606,7 +1665,7 @@ void Win_GParted::menu_gparted_quit() void Win_GParted::menu_view_harddisk_info() { - if ( static_cast<Gtk::CheckMenuItem *>( & menubar_main .items()[ 2 ] .get_submenu() ->items()[ 0 ] ) ->get_active() ) + if (static_cast<Gtk::CheckMenuItem *>(mainmenu_items[MENU_DEVICE_INFORMATION])->get_active()) { //open harddisk information hpaned_main .get_child1() ->show() ; for ( int t = hpaned_main .get_position() ; t < 250 ; t += 15 ) @@ -1630,7 +1689,7 @@ void Win_GParted::menu_view_harddisk_info() void Win_GParted::menu_view_operations() { - if ( static_cast<Gtk::CheckMenuItem *>( & menubar_main .items()[ 2 ] .get_submenu() ->items()[ 1 ] ) ->get_active() ) + if (static_cast<Gtk::CheckMenuItem *>(mainmenu_items[MENU_PENDING_OPERATIONS])->get_active()) open_operationslist() ; else close_operationslist() ; -- 2.21.0