diff --git a/ChangeLog b/ChangeLog index 2177ea8a..34fe7631 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-12-30 Bart Hakvoort + + * include/Win_GParted.h, + src/Win_GParted.cc: replaced deprecated OptionMenu with ComboBox. + also fixed some issues which arised when no devices were detected. + 2005-12-29 Bart Hakvoort * src/Makefile.am: removed -g from AM_C(XX)FLAGS diff --git a/include/Win_GParted.h b/include/Win_GParted.h index 45659cf3..e1d40d2b 100644 --- a/include/Win_GParted.h +++ b/include/Win_GParted.h @@ -40,6 +40,7 @@ #include #include #include +#include #include //should be included by gtkmm headers. but decided to include it anyway after getting some bugreports.. @@ -60,7 +61,7 @@ private: void init_operationslist( ) ; void init_hpaned_main( ) ; - void Refresh_OptionMenu( ) ; + void refresh_combo_devices() ; void Show_Pulsebar( ) ; //Fill txtview_device_info_buffer with some information about the selected device @@ -121,7 +122,7 @@ private: void open_operationslist( ) ; void close_operationslist( ) ; void clear_operationslist( ) ; - void optionmenu_devices_changed( ); + void combo_devices_changed( ); void menu_gparted_refresh_devices( ); void menu_gparted_filesystems( ); @@ -164,7 +165,7 @@ private: Gtk::HBox hbox_toolbar, hbox_operations, *hbox; Gtk::Toolbar toolbar_main; Gtk::MenuBar menubar_main; - Gtk::OptionMenu optionmenu_devices; + Gtk::ComboBox combo_devices ; Gtk::Menu menu_partition, menu_convert, *menu ; Gtk::ToolButton *toolbutton; Gtk::Statusbar statusbar; @@ -176,13 +177,31 @@ private: Gtk::Table *table ; Gtk::MenuItem *menu_item; Gtk::ProgressBar *pulsebar ; + Gtk::TreeRow treerow; VBox_VisualDisk vbox_visual_disk; TreeView_Detail treeview_detail; + + //device combo + Glib::RefPtr liststore_devices ; + + struct treeview_devices_Columns : public Gtk::TreeModelColumnRecord + { + Gtk::TreeModelColumn< Glib::RefPtr > icon ; + Gtk::TreeModelColumn device ; + Gtk::TreeModelColumn size ; + + treeview_devices_Columns() + { + add( icon ) ; + add( device ) ; + add( size ) ; + } + }; + treeview_devices_Columns treeview_devices_columns ; //operations list Gtk::TreeView treeview_operations; - Gtk::TreeRow treerow; Glib::RefPtr liststore_operations; struct treeview_operations_Columns : public Gtk::TreeModelColumnRecord @@ -201,7 +220,7 @@ private: treeview_operations_Columns treeview_operations_columns; //usefull variables which are used by many different functions... - bool any_logic,any_extended;//used in some checks (e.g. see optionmenu_devices_changed() + bool any_logic,any_extended;//used in some checks unsigned short primary_count ;//primary_count checks for max. of 4 pimary partitions unsigned short new_count;//new_count keeps track of the new created partitions Glib::ustring str_temp ; //mostly used for constructing dialogmessages @@ -209,7 +228,7 @@ private: GParted_Core gparted_core ; GParted::Device *temp_device ; - std::vector device_info ; + std::vector device_info ; //stuff for progress overview and pulsebar Dialog_Progress *dialog_progress; diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc index 3f75a4f2..fb01be7e 100644 --- a/src/Win_GParted.cc +++ b/src/Win_GParted.cc @@ -28,7 +28,7 @@ Win_GParted::Win_GParted( ) selected_partition .Reset( ) ; new_count = 1; current_device = 0 ; - pulse = false ; + pulse = false ; //==== GUI ========================= this ->set_title( _("GParted") ); @@ -170,10 +170,17 @@ void Win_GParted::init_toolbar( ) toolbutton ->signal_clicked().connect( sigc::mem_fun(*this, &Win_GParted::activate_apply) ); toolbar_main.append(*toolbutton); toolbutton ->set_sensitive( false ); toolbutton ->set_tooltip(tooltips, _("Apply all operations") ); - //initizialize and pack optionmenu_devices - optionmenu_devices .set_menu( * manage( new Gtk::Menu( ) ) ); - optionmenu_devices .signal_changed( ) .connect( sigc::mem_fun(*this, &Win_GParted::optionmenu_devices_changed) ); - hbox_toolbar .pack_start( optionmenu_devices, Gtk::PACK_SHRINK ); + //initialize and pack combo_devices + liststore_devices = Gtk::ListStore::create( treeview_devices_columns ) ; + combo_devices .set_model( liststore_devices ) ; + + combo_devices .pack_start( treeview_devices_columns .icon ) ; + combo_devices .pack_start( treeview_devices_columns .device ) ; + combo_devices .pack_start( treeview_devices_columns .size ) ; + + combo_devices .signal_changed() .connect( sigc::mem_fun(*this, &Win_GParted::combo_devices_changed) ); + + hbox_toolbar .pack_start( combo_devices, Gtk::PACK_SHRINK ) ; } void Win_GParted::init_partition_menu( ) @@ -356,29 +363,22 @@ void Win_GParted::init_hpaned_main( ) hpaned_main.pack2( *scrollwindow, true, true ); } -void Win_GParted::Refresh_OptionMenu( ) +void Win_GParted::refresh_combo_devices() { - optionmenu_devices .get_menu( ) ->items( ) .clear( ) ; + liststore_devices ->clear() ; - //fill optionmenu_devices + //fill combo_devices for ( unsigned int i = 0 ; i < devices .size( ) ; i++ ) { - hbox = manage( new Gtk::HBox( ) ); - - //the image... - image = manage( new Gtk::Image( Gtk::Stock::HARDDISK, Gtk::ICON_SIZE_LARGE_TOOLBAR) ); - hbox ->pack_start( *image, Gtk::PACK_SHRINK ); - - //the label... - hbox ->pack_start( *Utils::mk_label( " " + devices[ i ] .path + "\t(" + String::ucompose( _("%1 MB"), Utils::Sector_To_MB( devices[ i ] .length ) ) + ")" ), Gtk::PACK_SHRINK ); - - menu_item = manage( new Gtk::MenuItem( *hbox ) ) ; - optionmenu_devices .get_menu( ) ->items( ) .push_back( *menu_item ); + treerow = *( liststore_devices ->append() ) ; + treerow[ treeview_devices_columns .icon ] = + render_icon( Gtk::Stock::HARDDISK, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ; + treerow[ treeview_devices_columns .device ] = devices[ i ] .path ; + treerow[ treeview_devices_columns .size ] = + "(" + String::ucompose( _("%1 MB"), Utils::Sector_To_MB( devices[ i ] .length ) ) + ")" ; } - hbox_toolbar .show_all_children( ); - - optionmenu_devices .set_history( current_device ) ; + combo_devices .set_active( current_device ) ; } void Win_GParted::Show_Pulsebar( ) @@ -389,7 +389,7 @@ void Win_GParted::Show_Pulsebar( ) //disable all input stuff toolbar_main .set_sensitive( false ) ; menubar_main .set_sensitive( false ) ; - optionmenu_devices .set_sensitive( false ) ; + combo_devices .set_sensitive( false ) ; menu_partition .set_sensitive( false ) ; treeview_detail .set_sensitive( false ) ; vbox_visual_disk .set_sensitive( false ) ; @@ -413,7 +413,7 @@ void Win_GParted::Show_Pulsebar( ) //enable all disabled stuff toolbar_main .set_sensitive( true ) ; menubar_main .set_sensitive( true ) ; - optionmenu_devices .set_sensitive( true ) ; + combo_devices .set_sensitive( true ) ; menu_partition .set_sensitive( true ) ; treeview_detail .set_sensitive( true ) ; vbox_visual_disk .set_sensitive( true ) ; @@ -693,10 +693,10 @@ void Win_GParted::clear_operationslist( ) Refresh_Visual( ) ; } -void Win_GParted::optionmenu_devices_changed( ) +void Win_GParted::combo_devices_changed( ) { //set new current device - current_device = optionmenu_devices .get_history( ) ; + current_device = combo_devices .get_active_row_number() ; //refresh label_device_info Fill_Label_Device_Info( ); @@ -711,7 +711,8 @@ void Win_GParted::menu_gparted_refresh_devices( ) pulse = true ;//set to true before creating the thread to prevent _possible_ infinite loop in Show_Pulsebar( ) thread = Glib::Thread::create( SigC::slot_class( *this, &Win_GParted::find_devices_thread ), true ); - Show_Pulsebar() ; + Show_Pulsebar() ; + //check if current_device is still available (think about hotpluggable shit like usbdevices) if ( current_device >= devices .size() ) current_device = 0 ; @@ -753,22 +754,23 @@ void Win_GParted::menu_gparted_refresh_devices( ) //if no devices were detected we disable some stuff and show a message in the statusbar if ( devices .empty() ) { - optionmenu_devices .hide() ; + combo_devices .hide() ; 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 ) ; toolbar_main .set_sensitive( false ) ; - optionmenu_devices .set_sensitive( false ) ; - + vbox_visual_disk .set_sensitive( false ) ; + treeview_detail .set_sensitive( false ) ; + Fill_Label_Device_Info( true ) ; vbox_visual_disk .clear() ; treeview_detail .clear() ; //hmzz, this is really paranoid, but i think it's the right thing to do ;) - liststore_operations ->clear( ) ; + liststore_operations ->clear() ; close_operationslist() ; operations .clear() ; @@ -778,10 +780,18 @@ void Win_GParted::menu_gparted_refresh_devices( ) else //at least one device detected { - menubar_main .items( )[ 2 ] .set_sensitive( true ) ; - menubar_main .items( )[ 3 ] .set_sensitive( true ) ; + combo_devices .show() ; - Refresh_OptionMenu( ) ; + 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 ) ; + + toolbar_main .set_sensitive( true ) ; + vbox_visual_disk .set_sensitive( true ) ; + treeview_detail .set_sensitive( true ) ; + + refresh_combo_devices() ; } }