2004-09-19 14:24:53 -06:00
/* Copyright (C) 2004 Bart
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Library General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*/
# include "../include/Win_GParted.h"
namespace GParted
{
Win_GParted : : Win_GParted ( )
{
copied_partition . partition = " NONE " ;
new_count = 1 ;
2004-11-17 06:00:25 -07:00
current_device = 0 ;
2004-09-19 14:24:53 -06:00
vbox_visual_disk = NULL ;
2004-10-11 04:23:24 -06:00
pulse = false ;
2004-10-06 09:32:40 -06:00
//store filesystems in vector and find out if their respective libs are installed
2004-11-17 06:00:25 -07:00
gparted_core . find_supported_filesystems ( ) ;
2004-09-19 14:24:53 -06:00
//locate all available devices and store them in devices vector
2004-10-16 09:42:08 -06:00
Find_Devices ( false ) ;
2004-10-11 04:23:24 -06:00
Refresh_OptionMenu ( ) ;
2004-09-19 14:24:53 -06:00
//==== GUI =========================
this - > set_title ( _ ( " GParted " ) ) ;
this - > set_default_size ( - 1 , 500 ) ;
//Pack the main box
this - > add ( vbox_main ) ;
//menubar....
init_menubar ( ) ;
vbox_main . pack_start ( menubar_main , Gtk : : PACK_SHRINK ) ;
//toolbar....
init_toolbar ( ) ;
vbox_main . pack_start ( hbox_toolbar , Gtk : : PACK_SHRINK ) ;
//hbox_visual... ( contains the visual represenation of the disks )
vbox_main . pack_start ( hbox_visual , Gtk : : PACK_SHRINK ) ;
//hpaned_main (NOTE: added to vpaned_main)
init_hpaned_main ( ) ;
vpaned_main . pack1 ( hpaned_main , true , true ) ;
//vpaned_main....
vbox_main . pack_start ( vpaned_main ) ;
//device info...
init_device_info ( ) ;
//operationslist...
2004-10-11 08:19:56 -06:00
init_operationslist ( ) ;
2004-09-19 14:24:53 -06:00
vpaned_main . pack2 ( hbox_operations , true , true ) ;
//statusbar...
2004-10-11 04:23:24 -06:00
pulsebar = manage ( new Gtk : : ProgressBar ( ) ) ;
pulsebar - > set_pulse_step ( 0.01 ) ;
statusbar . add ( * pulsebar ) ;
2004-10-11 08:19:56 -06:00
vbox_main . pack_start ( statusbar , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
//popupmenu...
init_popupmenu ( ) ;
//initizialize for the first time...
optionmenu_devices_changed ( ) ;
this - > show_all_children ( ) ;
2004-09-27 14:12:47 -06:00
2004-10-11 08:19:56 -06:00
//make sure harddisk information and operationlist are closed..
hpaned_main . get_child1 ( ) - > hide ( ) ;
close_operationslist ( ) ;
2004-10-16 09:42:08 -06:00
conn = dispatcher . connect ( sigc : : mem_fun ( * this , & Win_GParted : : menu_gparted_refresh_devices ) ) ;
2004-11-17 06:00:25 -07:00
dispatcher ( ) ;
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : init_menubar ( )
{
//fill menubar_main and connect callbacks
//gparted
menu = manage ( new Gtk : : Menu ( ) ) ;
image = manage ( new Gtk : : Image ( Gtk : : Stock : : REFRESH , Gtk : : ICON_SIZE_MENU ) ) ;
2004-09-27 14:12:47 -06:00
menu - > items ( ) . push_back ( Gtk : : Menu_Helpers : : ImageMenuElem ( _ ( " _Refresh devices " ) , Gtk : : AccelKey ( " <control>r " ) , * image , sigc : : mem_fun ( * this , & Win_GParted : : menu_gparted_refresh_devices ) ) ) ;
menu - > items ( ) . push_back ( Gtk : : Menu_Helpers : : SeparatorElem ( ) ) ;
2004-10-11 04:23:24 -06:00
menu - > items ( ) . push_back ( Gtk : : Menu_Helpers : : StockMenuElem ( Gtk : : Stock : : QUIT , sigc : : mem_fun ( * this , & Win_GParted : : menu_gparted_quit ) ) ) ;
2004-09-19 14:24:53 -06:00
menubar_main . items ( ) . push_back ( Gtk : : Menu_Helpers : : MenuElem ( _ ( " _GParted " ) , * menu ) ) ;
2004-09-27 14:12:47 -06:00
//view
menu = manage ( new Gtk : : Menu ( ) ) ;
menu - > items ( ) . push_back ( Gtk : : Menu_Helpers : : CheckMenuElem ( _ ( " Harddisk Information " ) , sigc : : mem_fun ( * this , & Win_GParted : : menu_view_harddisk_info ) ) ) ;
2004-10-11 08:19:56 -06:00
menu - > items ( ) . push_back ( Gtk : : Menu_Helpers : : CheckMenuElem ( _ ( " Operations " ) , sigc : : mem_fun ( * this , & Win_GParted : : menu_view_operations ) ) ) ;
2004-09-27 14:12:47 -06:00
menubar_main . items ( ) . push_back ( Gtk : : Menu_Helpers : : MenuElem ( _ ( " _View " ) , * menu ) ) ;
2004-09-19 14:24:53 -06:00
//help
menu = manage ( new Gtk : : Menu ( ) ) ;
2004-09-27 14:12:47 -06:00
menu - > items ( ) . push_back ( Gtk : : Menu_Helpers : : StockMenuElem ( Gtk : : Stock : : HELP , sigc : : mem_fun ( * this , & Win_GParted : : menu_help_contents ) ) ) ;
2004-09-19 14:24:53 -06:00
image = manage ( new Gtk : : Image ( " /usr/share/icons/hicolor/16x16/stock/generic/stock_about.png " ) ) ;
2004-09-27 14:12:47 -06:00
menu - > items ( ) . push_back ( Gtk : : Menu_Helpers : : ImageMenuElem ( _ ( " About " ) , * image , sigc : : mem_fun ( * this , & Win_GParted : : menu_help_about ) ) ) ;
2004-09-19 14:24:53 -06:00
menubar_main . items ( ) . push_back ( Gtk : : Menu_Helpers : : MenuElem ( _ ( " _Help " ) , * menu ) ) ;
}
void Win_GParted : : init_toolbar ( )
{
//initialize and pack toolbar_main
hbox_toolbar . pack_start ( toolbar_main ) ;
//NEW and DELETE
toolbutton = Gtk : : manage ( new Gtk : : ToolButton ( Gtk : : Stock : : NEW ) ) ;
2004-10-01 15:09:19 -06:00
toolbutton - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : activate_new ) ) ; toolbar_main . append ( * toolbutton ) ;
2004-09-19 14:24:53 -06:00
toolbutton - > set_tooltip ( tooltips , _ ( " Create a new partition in the selected unallocated space " ) ) ;
toolbutton = Gtk : : manage ( new Gtk : : ToolButton ( Gtk : : Stock : : DELETE ) ) ;
toolbutton - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : activate_delete ) ) ; toolbar_main . append ( * toolbutton ) ;
toolbutton - > set_tooltip ( tooltips , _ ( " Delete the selected partition " ) ) ;
toolbar_main . append ( * ( Gtk : : manage ( new Gtk : : SeparatorToolItem ) ) ) ;
//RESIZE/MOVE
image = manage ( new Gtk : : Image ( Gtk : : Stock : : GOTO_LAST , Gtk : : ICON_SIZE_BUTTON ) ) ;
toolbutton = Gtk : : manage ( new Gtk : : ToolButton ( * image , _ ( " Resize/Move " ) ) ) ;
toolbutton - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : activate_resize ) ) ; toolbar_main . append ( * toolbutton ) ;
toolbutton - > set_tooltip ( tooltips , _ ( " Resize/Move the selected partition " ) ) ;
toolbar_main . append ( * ( Gtk : : manage ( new Gtk : : SeparatorToolItem ) ) ) ;
//COPY and PASTE
toolbutton = Gtk : : manage ( new Gtk : : ToolButton ( Gtk : : Stock : : COPY ) ) ;
2004-10-01 15:09:19 -06:00
toolbutton - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : activate_copy ) ) ; toolbar_main . append ( * toolbutton ) ;
2004-09-19 14:24:53 -06:00
toolbutton - > set_tooltip ( tooltips , _ ( " Copy the selected partition to the clipboard " ) ) ;
toolbutton = Gtk : : manage ( new Gtk : : ToolButton ( Gtk : : Stock : : PASTE ) ) ;
2004-10-01 15:09:19 -06:00
toolbutton - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : activate_paste ) ) ; toolbar_main . append ( * toolbutton ) ;
2004-09-19 14:24:53 -06:00
toolbutton - > set_tooltip ( tooltips , _ ( " Paste the partition from the clipboard " ) ) ;
toolbar_main . append ( * ( Gtk : : manage ( new Gtk : : SeparatorToolItem ) ) ) ;
//UNDO and APPLY
toolbutton = Gtk : : manage ( new Gtk : : ToolButton ( Gtk : : Stock : : UNDO ) ) ;
2004-10-01 15:09:19 -06:00
toolbutton - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : activate_undo ) ) ; toolbar_main . append ( * toolbutton ) ; toolbutton - > set_sensitive ( false ) ;
2004-09-19 14:24:53 -06:00
toolbutton - > set_tooltip ( tooltips , _ ( " Undo last operation " ) ) ;
toolbutton = Gtk : : manage ( new Gtk : : ToolButton ( Gtk : : Stock : : APPLY ) ) ;
2004-10-01 15:09:19 -06:00
toolbutton - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : activate_apply ) ) ; toolbar_main . append ( * toolbutton ) ; toolbutton - > set_sensitive ( false ) ;
2004-09-19 14:24:53 -06:00
toolbutton - > set_tooltip ( tooltips , _ ( " Apply all operations " ) ) ;
//initizialize and pack optionmenu_devices
optionmenu_devices . set_menu ( menu_devices ) ;
optionmenu_devices . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : optionmenu_devices_changed ) ) ;
hbox_toolbar . pack_start ( optionmenu_devices , Gtk : : PACK_SHRINK ) ;
}
void Win_GParted : : init_popupmenu ( )
{
//fill menu_popup
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : StockMenuElem ( Gtk : : Stock : : NEW , sigc : : mem_fun ( * this , & Win_GParted : : activate_new ) ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : StockMenuElem ( Gtk : : Stock : : DELETE , Gtk : : AccelKey ( 0xFFFF , Gdk : : BUTTON1_MASK ) , sigc : : mem_fun ( * this , & Win_GParted : : activate_delete ) ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : SeparatorElem ( ) ) ;
image = manage ( new Gtk : : Image ( Gtk : : Stock : : GOTO_LAST , Gtk : : ICON_SIZE_MENU ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : ImageMenuElem ( _ ( " Resize/Move " ) , * image , sigc : : mem_fun ( * this , & Win_GParted : : activate_resize ) ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : SeparatorElem ( ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : StockMenuElem ( Gtk : : Stock : : COPY , sigc : : mem_fun ( * this , & Win_GParted : : activate_copy ) ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : StockMenuElem ( Gtk : : Stock : : PASTE , sigc : : mem_fun ( * this , & Win_GParted : : activate_paste ) ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : SeparatorElem ( ) ) ;
image = manage ( new Gtk : : Image ( Gtk : : Stock : : CONVERT , Gtk : : ICON_SIZE_MENU ) ) ;
2004-09-24 19:10:21 -06:00
/*TO TRANSLATORS: menuitem which holds a submenu with filesystems.. */
2004-09-19 14:24:53 -06:00
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : ImageMenuElem ( _ ( " _Convert to " ) , * image , menu_convert ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : SeparatorElem ( ) ) ;
2004-11-06 12:48:24 -07:00
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : MenuElem ( _ ( " Unmount " ) , sigc : : mem_fun ( * this , & Win_GParted : : activate_unmount ) ) ) ;
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : SeparatorElem ( ) ) ;
2004-09-19 14:24:53 -06:00
menu_popup . items ( ) . push_back ( Gtk : : Menu_Helpers : : StockMenuElem ( Gtk : : Stock : : DIALOG_INFO , sigc : : mem_fun ( * this , & Win_GParted : : activate_info ) ) ) ;
init_convert_menu ( ) ;
menu_popup . accelerate ( * this ) ;
}
void Win_GParted : : init_convert_menu ( )
{
2004-11-23 12:03:39 -07:00
for ( unsigned int t = 0 ; t < gparted_core . get_fs ( ) . size ( ) - 1 ; t + + )
2004-09-19 14:24:53 -06:00
{
2004-11-17 06:00:25 -07:00
color . set ( Get_Color ( gparted_core . get_fs ( ) [ t ] . filesystem ) ) ;
2004-11-23 12:03:39 -07:00
hbox = manage ( new Gtk : : HBox ( ) ) ;
2004-09-19 14:24:53 -06:00
2004-10-06 09:32:40 -06:00
//the colored square
2004-11-23 12:03:39 -07:00
entry = manage ( new Gtk : : Entry ( ) ) ;
2004-10-11 04:23:24 -06:00
entry - > set_sensitive ( false ) ;
entry - > set_size_request ( 12 , 12 ) ;
2004-11-23 12:03:39 -07:00
entry - > modify_base ( entry - > get_state ( ) , color ) ;
2004-10-06 09:32:40 -06:00
hbox - > pack_start ( * entry , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
2004-10-06 09:32:40 -06:00
//the label...
2004-11-17 06:00:25 -07:00
hbox - > pack_start ( * mk_label ( " " + gparted_core . get_fs ( ) [ t ] . filesystem ) , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
2004-10-06 09:32:40 -06:00
menu_item = manage ( new Gtk : : MenuItem ( * hbox ) ) ;
2004-11-23 12:03:39 -07:00
menu_convert . items ( ) . push_back ( * menu_item ) ;
menu_convert . items ( ) . back ( ) . signal_activate ( ) . connect ( sigc : : bind < Glib : : ustring > ( sigc : : mem_fun ( * this , & Win_GParted : : activate_convert ) , gparted_core . get_fs ( ) [ t ] . filesystem ) ) ;
2004-09-19 14:24:53 -06:00
}
menu_convert . show_all_children ( ) ;
}
void Win_GParted : : init_device_info ( )
{
2004-09-25 15:59:53 -06:00
vbox_info . set_spacing ( 5 ) ;
2004-09-29 06:33:40 -06:00
int top = 0 , bottom = 1 ;
2004-09-25 15:59:53 -06:00
//title
2004-10-06 13:06:43 -06:00
vbox_info . pack_start ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Harddisk Information " ) + " :</b> " ) , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
2004-09-29 06:33:40 -06:00
//GENERAL DEVICE INFO
2004-09-19 14:24:53 -06:00
table = manage ( new Gtk : : Table ( ) ) ;
2004-09-29 06:33:40 -06:00
table - > set_col_spacings ( 10 ) ;
2004-09-19 14:24:53 -06:00
2004-09-29 06:33:40 -06:00
//model
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Model: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
2004-09-19 14:24:53 -06:00
2004-09-29 06:33:40 -06:00
//size
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Size: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
//path
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Path: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
//only show realpath if it's different from the short path
2004-11-17 06:00:25 -07:00
if ( devices [ current_device ] . path ! = devices [ current_device ] . realpath )
2004-09-29 06:33:40 -06:00
{
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Real Path: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
}
2004-09-19 14:24:53 -06:00
2004-09-25 15:59:53 -06:00
vbox_info . pack_start ( * table , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
2004-09-29 06:33:40 -06:00
//DETAILED DEVICE INFO
top = 0 ; bottom = 1 ;
2004-09-19 14:24:53 -06:00
table = manage ( new Gtk : : Table ( ) ) ;
table - > set_col_spacings ( 10 ) ;
2004-09-29 06:33:40 -06:00
//one blank line
table - > attach ( * mk_label ( " " ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
//disktype
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " DiskType: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
//heads
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Heads: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
//sectors/track
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Sectors/Track: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
//cylinders
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Cylinders: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
//total sectors
table - > attach ( * mk_label ( " <b> " + ( Glib : : ustring ) _ ( " Total Sectors: " ) + " </b> " ) , 0 , 1 , top , bottom , Gtk : : FILL ) ;
device_info . push_back ( mk_label ( " " ) ) ;
table - > attach ( * device_info . back ( ) , 1 , 2 , top + + , bottom + + , Gtk : : FILL ) ;
2004-09-25 15:59:53 -06:00
vbox_info . pack_start ( * table , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : init_operationslist ( )
{
//create listview for pending operations
liststore_operations = Gtk : : ListStore : : create ( treeview_operations_columns ) ;
treeview_operations . set_model ( liststore_operations ) ;
treeview_operations . set_headers_visible ( false ) ;
treeview_operations . append_column ( " " , treeview_operations_columns . operation_number ) ;
treeview_operations . append_column ( " " , treeview_operations_columns . operation_description ) ;
treeview_operations . get_column ( 0 ) - > pack_start ( treeview_operations_columns . operation_icon , false ) ;
treeview_operations . get_selection ( ) - > set_mode ( Gtk : : SELECTION_NONE ) ;
//init scrollwindow_operations
scrollwindow = manage ( new Gtk : : ScrolledWindow ( ) ) ;
scrollwindow - > set_shadow_type ( Gtk : : SHADOW_ETCHED_IN ) ;
scrollwindow - > set_policy ( Gtk : : POLICY_AUTOMATIC , Gtk : : POLICY_AUTOMATIC ) ;
scrollwindow - > add ( treeview_operations ) ;
//set up the close and clear buttons and pack them in a vbox
vbox = manage ( new Gtk : : VBox ( ) ) ;
//CLOSE
button = manage ( new Gtk : : Button ( ) ) ;
image = manage ( new Gtk : : Image ( Gtk : : Stock : : CLOSE , Gtk : : ICON_SIZE_MENU ) ) ;
button - > add ( * image ) ;
button - > set_relief ( Gtk : : RELIEF_NONE ) ;
tooltips . set_tip ( * button , _ ( " Hide operationslist " ) ) ;
button - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : close_operationslist ) ) ;
vbox - > pack_start ( * button , Gtk : : PACK_SHRINK ) ;
//CLEAR
button = manage ( new Gtk : : Button ( ) ) ;
image = manage ( new Gtk : : Image ( Gtk : : Stock : : CLEAR , Gtk : : ICON_SIZE_MENU ) ) ;
button - > add ( * image ) ;
button - > set_relief ( Gtk : : RELIEF_NONE ) ;
tooltips . set_tip ( * button , _ ( " Clear operationslist " ) ) ;
button - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & Win_GParted : : clear_operationslist ) ) ;
vbox - > pack_start ( * button , Gtk : : PACK_SHRINK ) ;
//add vbox and scrollwindow_operations to hbox_operations
hbox_operations . pack_start ( * vbox , Gtk : : PACK_SHRINK ) ;
hbox_operations . pack_start ( * scrollwindow , Gtk : : PACK_EXPAND_WIDGET ) ;
}
void Win_GParted : : init_hpaned_main ( )
{
//left scrollwindow (holds device info)
scrollwindow = manage ( new Gtk : : ScrolledWindow ( ) ) ;
scrollwindow - > set_shadow_type ( Gtk : : SHADOW_ETCHED_IN ) ;
scrollwindow - > set_policy ( Gtk : : POLICY_AUTOMATIC , Gtk : : POLICY_AUTOMATIC ) ;
hpaned_main . pack1 ( * scrollwindow , true , true ) ;
scrollwindow - > add ( vbox_info ) ;
//right scrollwindow (holds treeview with partitions)
scrollwindow = manage ( new Gtk : : ScrolledWindow ( ) ) ;
scrollwindow - > set_shadow_type ( Gtk : : SHADOW_ETCHED_IN ) ;
scrollwindow - > set_policy ( Gtk : : POLICY_AUTOMATIC , Gtk : : POLICY_AUTOMATIC ) ;
//connect signal and add treeview_detail
treeview_detail . signal_mouse_click . connect ( sigc : : mem_fun ( this , & Win_GParted : : mouse_click ) ) ;
scrollwindow - > add ( treeview_detail ) ;
hpaned_main . pack2 ( * scrollwindow , true , true ) ;
}
2004-10-11 04:23:24 -06:00
void Win_GParted : : Find_Devices ( bool deep_scan )
2004-09-19 14:24:53 -06:00
{
2004-11-17 06:00:25 -07:00
gparted_core . get_devices ( devices , deep_scan ) ;
2004-09-19 14:24:53 -06:00
2004-12-03 03:53:01 -07:00
//paranoia check.. :)
2004-11-17 06:00:25 -07:00
if ( devices . empty ( ) )
{
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = _ ( " No devices were detected " ) ;
str_temp + = " </span> \n \n " ;
2004-12-03 03:53:01 -07:00
str_temp + = _ ( " You have probably encountered a bug. GParted will quit now. " ) ;
2004-11-17 06:00:25 -07:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_ERROR , Gtk : : BUTTONS_OK , true ) ;
2004-12-03 03:53:01 -07:00
dialog . run ( ) ; //<---NOT threadsave..
2004-10-11 04:23:24 -06:00
2004-11-17 06:00:25 -07:00
exit ( 0 ) ;
2004-09-19 14:24:53 -06:00
}
2004-10-11 04:23:24 -06:00
}
2004-09-19 14:24:53 -06:00
2004-10-11 04:23:24 -06:00
void Win_GParted : : Refresh_OptionMenu ( )
{
2004-09-19 14:24:53 -06:00
//fill optionmenu_devices
menu_devices . items ( ) . clear ( ) ;
for ( unsigned int i = 0 ; i < devices . size ( ) ; i + + )
{
hbox = manage ( new Gtk : : HBox ( ) ) ;
//the image...
image = manage ( new Gtk : : Image ( " /usr/share/icons/gnome/24x24/devices/gnome-dev-harddisk.png " ) ) ;
2004-10-06 09:32:40 -06:00
hbox - > pack_start ( * image , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
//the label...
2004-11-17 06:00:25 -07:00
hbox - > pack_start ( * mk_label ( " " + devices [ i ] . path + " \t ( " + String : : ucompose ( _ ( " %1 MB " ) , Sector_To_MB ( devices [ i ] . length ) ) + " ) " ) , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
menu_item = manage ( new Gtk : : MenuItem ( * hbox ) ) ;
menu_devices . items ( ) . push_back ( * menu_item ) ;
}
2004-09-27 14:12:47 -06:00
menu_devices . show_all_children ( ) ;
2004-12-03 03:53:01 -07:00
optionmenu_devices . set_history ( current_device ) ;
2004-10-11 04:23:24 -06:00
}
void Win_GParted : : Show_Pulsebar ( )
{
pulsebar - > show ( ) ;
statusbar . push ( _ ( " Scanning all devices... " ) ) ;
//disable all input stuff
toolbar_main . set_sensitive ( false ) ;
menubar_main . set_sensitive ( false ) ;
optionmenu_devices . set_sensitive ( false ) ;
menu_popup . set_sensitive ( false ) ;
//the actual 'pulsing'
pulse = true ;
while ( pulse )
{
pulsebar - > pulse ( ) ;
while ( Gtk : : Main : : events_pending ( ) ) Gtk : : Main : : iteration ( ) ;
usleep ( 10000 ) ;
}
2004-09-27 14:12:47 -06:00
2004-10-11 04:23:24 -06:00
thread - > join ( ) ;
2004-10-16 09:42:08 -06:00
conn . disconnect ( ) ;
2004-10-11 04:23:24 -06:00
pulsebar - > hide ( ) ;
statusbar . pop ( ) ;
//enable all disabled stuff
toolbar_main . set_sensitive ( true ) ;
menubar_main . set_sensitive ( true ) ;
optionmenu_devices . set_sensitive ( true ) ;
menu_popup . set_sensitive ( true ) ;
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : Fill_Label_Device_Info ( )
{
2004-09-29 06:33:40 -06:00
short t = 0 ;
2004-09-19 14:24:53 -06:00
//global info...
2004-11-17 06:00:25 -07:00
device_info [ t + + ] - > set_text ( devices [ current_device ] . model ) ;
device_info [ t + + ] - > set_text ( String : : ucompose ( _ ( " %1 MB " ) , Sector_To_MB ( devices [ current_device ] . length ) ) ) ;
device_info [ t + + ] - > set_text ( devices [ current_device ] . path ) ;
2004-09-19 14:24:53 -06:00
//only show realpath if it's diffent from the short path...
2004-11-17 06:00:25 -07:00
if ( devices [ current_device ] . path ! = devices [ current_device ] . realpath )
device_info [ t + + ] - > set_text ( devices [ current_device ] . realpath ) ;
2004-09-19 14:24:53 -06:00
//detailed info
2004-11-17 06:00:25 -07:00
device_info [ t + + ] - > set_text ( devices [ current_device ] . disktype ) ;
device_info [ t + + ] - > set_text ( num_to_str ( devices [ current_device ] . heads ) ) ;
device_info [ t + + ] - > set_text ( num_to_str ( devices [ current_device ] . sectors ) ) ;
device_info [ t + + ] - > set_text ( num_to_str ( devices [ current_device ] . cylinders ) ) ;
device_info [ t + + ] - > set_text ( num_to_str ( devices [ current_device ] . length ) ) ;
2004-09-19 14:24:53 -06:00
}
bool Win_GParted : : on_delete_event ( GdkEventAny * event )
{
return ! Quit_Check_Operations ( ) ;
}
void Win_GParted : : Add_Operation ( OperationType operationtype , const Partition & new_partition )
{
2004-11-17 06:00:25 -07:00
Operation operation ( devices [ current_device ] . path , devices [ current_device ] . length , selected_partition , new_partition , operationtype ) ;
2004-09-19 14:24:53 -06:00
operations . push_back ( operation ) ;
allow_undo ( true ) ;
allow_apply ( true ) ;
Refresh_Visual ( ) ;
if ( operations . size ( ) = = 1 ) //first operation, open operationslist
2004-10-11 08:19:56 -06:00
open_operationslist ( ) ;
2004-09-19 14:24:53 -06:00
//make scrollwindow focus on the last operation in the list
Gtk : : TreeIter iter = liststore_operations - > children ( ) . end ( ) ;
iter - - ;
treeview_operations . set_cursor ( ( Gtk : : TreePath ) ( Gtk : : TreeRow ) * iter ) ;
}
void Win_GParted : : Refresh_Visual ( )
{
2004-11-17 06:00:25 -07:00
std : : vector < Partition > partitions = devices [ current_device ] . device_partitions ;
2004-09-19 14:24:53 -06:00
liststore_operations - > clear ( ) ;
//make all operations visible
2004-11-06 04:55:03 -07:00
for ( unsigned int t = 0 ; t < operations . size ( ) ; t + + )
{
2004-11-17 06:00:25 -07:00
if ( operations [ t ] . device_path = = devices [ current_device ] . path )
2004-11-07 06:13:11 -07:00
operations [ t ] . Apply_Operation_To_Visual ( partitions ) ;
2004-11-06 04:55:03 -07:00
treerow = * ( liststore_operations - > append ( ) ) ;
treerow [ treeview_operations_columns . operation_number ] = t + 1 ;
treerow [ treeview_operations_columns . operation_description ] = operations [ t ] . str_operation ;
switch ( operations [ t ] . operationtype )
2004-09-19 14:24:53 -06:00
{
2004-10-01 15:12:46 -06:00
case GParted : : DELETE : treerow [ treeview_operations_columns . operation_icon ] = render_icon ( Gtk : : Stock : : DELETE , Gtk : : ICON_SIZE_MENU ) ;
break ;
case GParted : : CREATE : treerow [ treeview_operations_columns . operation_icon ] = render_icon ( Gtk : : Stock : : NEW , Gtk : : ICON_SIZE_MENU ) ;
break ;
case GParted : : RESIZE_MOVE : treerow [ treeview_operations_columns . operation_icon ] = render_icon ( Gtk : : Stock : : GOTO_LAST , Gtk : : ICON_SIZE_MENU ) ;
break ;
case GParted : : CONVERT : treerow [ treeview_operations_columns . operation_icon ] = render_icon ( Gtk : : Stock : : CONVERT , Gtk : : ICON_SIZE_MENU ) ;
break ;
case GParted : : COPY : treerow [ treeview_operations_columns . operation_icon ] = render_icon ( Gtk : : Stock : : COPY , Gtk : : ICON_SIZE_MENU ) ;
break ;
2004-09-19 14:24:53 -06:00
}
}
//set new statusbartext
2004-11-06 04:55:03 -07:00
statusbar . pop ( ) ;
if ( operations . size ( ) ! = 1 )
statusbar . push ( String : : ucompose ( _ ( " %1 operations pending " ) , operations . size ( ) ) . c_str ( ) ) ;
2004-09-24 19:10:21 -06:00
else
statusbar . push ( _ ( " 1 operation pending " ) ) ;
2004-11-06 04:55:03 -07:00
if ( ! operations . size ( ) )
2004-09-19 14:24:53 -06:00
{
allow_undo ( false ) ;
allow_apply ( false ) ;
}
//count primary's, check for extended and logic and see if any logical is busy
any_logic = any_extended = false ;
2004-11-06 04:55:03 -07:00
primary_count = 0 ;
for ( unsigned int t = 0 ; t < partitions . size ( ) ; t + + )
2004-09-19 14:24:53 -06:00
{
if ( partitions [ t ] . partition = = copied_partition . partition )
copied_partition = partitions [ t ] ;
2004-11-06 04:55:03 -07:00
switch ( partitions [ t ] . type )
2004-09-19 14:24:53 -06:00
{
2004-09-24 19:10:21 -06:00
case GParted : : PRIMARY : primary_count + + ;
2004-10-01 15:09:19 -06:00
break ;
case GParted : : EXTENDED : any_extended = true ;
primary_count + + ;
2004-11-06 04:55:03 -07:00
any_logic = partitions [ t ] . logicals . size ( ) - 1 ;
2004-10-01 15:09:19 -06:00
break ;
default : break ;
2004-09-19 14:24:53 -06:00
}
}
//vbox visual
if ( vbox_visual_disk ! = NULL )
{
2004-10-16 09:42:08 -06:00
hbox_visual . remove ( * vbox_visual_disk ) ;
2004-09-19 14:24:53 -06:00
delete ( vbox_visual_disk ) ;
}
2004-11-17 06:00:25 -07:00
vbox_visual_disk = new VBox_VisualDisk ( partitions , devices [ current_device ] . length ) ;
2004-10-16 09:42:08 -06:00
vbox_visual_disk - > signal_mouse_click . connect ( sigc : : mem_fun ( this , & Win_GParted : : mouse_click ) ) ;
hbox_visual . pack_start ( * vbox_visual_disk , Gtk : : PACK_EXPAND_PADDING ) ;
hbox_visual . show_all_children ( ) ;
2004-09-19 14:24:53 -06:00
//treeview details
treeview_detail . Load_Partitions ( partitions ) ;
2004-10-01 15:09:19 -06:00
allow_new ( false ) ; allow_delete ( false ) ; allow_resize ( false ) ; allow_copy ( false ) ; allow_paste ( false ) ;
2004-09-19 14:24:53 -06:00
}
bool Win_GParted : : Quit_Check_Operations ( )
{
2004-11-23 12:03:39 -07:00
if ( operations . size ( ) )
2004-09-19 14:24:53 -06:00
{
2004-10-02 03:39:16 -06:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " + ( Glib : : ustring ) _ ( " Quit GParted? " ) + " </span> \n \n " ;
2004-09-25 08:12:07 -06:00
2004-11-23 12:03:39 -07:00
if ( operations . size ( ) ! = 1 )
str_temp + = String : : ucompose ( _ ( " %1 operations are currently pending. " ) , operations . size ( ) ) ;
2004-09-24 19:10:21 -06:00
else
2004-10-02 03:39:16 -06:00
str_temp + = _ ( " 1 operation is currently pending. " ) ;
2004-09-19 14:24:53 -06:00
2004-10-02 03:39:16 -06:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_QUESTION , Gtk : : BUTTONS_NONE , true ) ;
2004-09-19 14:24:53 -06:00
dialog . add_button ( Gtk : : Stock : : QUIT , Gtk : : RESPONSE_CLOSE ) ;
dialog . add_button ( Gtk : : Stock : : CANCEL , Gtk : : RESPONSE_CANCEL ) ;
2004-11-23 12:03:39 -07:00
if ( dialog . run ( ) = = Gtk : : RESPONSE_CANCEL )
return false ; //don't close GParted
2004-09-19 14:24:53 -06:00
}
return true ; //close GParted
}
void Win_GParted : : Set_Valid_Operations ( )
{
2004-11-06 12:48:24 -07:00
allow_new ( false ) ; allow_delete ( false ) ; allow_resize ( false ) ; allow_copy ( false ) ;
allow_paste ( false ) ; allow_convert ( false ) ; allow_unmount ( false ) ;
2004-09-19 14:24:53 -06:00
2004-11-06 12:48:24 -07:00
//only unmount is allowed
2004-11-06 04:55:03 -07:00
if ( selected_partition . busy )
2004-11-06 12:48:24 -07:00
{
if ( selected_partition . filesystem ! = " linux-swap " & & selected_partition . type ! = GParted : : EXTENDED )
allow_unmount ( true ) ;
2004-09-19 14:24:53 -06:00
return ;
2004-11-06 12:48:24 -07:00
}
2004-09-19 14:24:53 -06:00
//UNALLOCATED
2004-11-06 04:55:03 -07:00
if ( selected_partition . type = = GParted : : UNALLOCATED )
2004-09-19 14:24:53 -06:00
{
allow_new ( true ) ;
//find out if there is a copied partition and if it fits inside this unallocated space
2004-11-29 06:20:05 -07:00
if ( copied_partition . partition ! = " NONE " & & ! devices [ current_device ] . readonly )
2004-11-25 12:21:42 -07:00
{
//calculate cylindersize
long cylinder_size = Sector_To_MB ( devices [ current_device ] . heads * devices [ current_device ] . sectors ) ;
if ( cylinder_size < 1 )
cylinder_size = 1 ;
if ( ( copied_partition . Get_Length_MB ( ) + cylinder_size ) < selected_partition . Get_Length_MB ( ) )
allow_paste ( true ) ;
}
2004-09-19 14:24:53 -06:00
return ;
}
//if there was an error reading the filesystem we allow delete and convert ( see also Device::Get_Used_Sectors() )
if ( selected_partition . error ! = " " )
{
allow_delete ( true ) ;
allow_convert ( true ) ;
return ;
}
//PRIMARY and LOGICAL
2004-11-06 04:55:03 -07:00
if ( selected_partition . type ! = GParted : : EXTENDED )
2004-09-19 14:24:53 -06:00
{
allow_delete ( true ) ;
allow_convert ( true ) ;
//find out if resizing/moving and copying is possible
2004-11-29 06:20:05 -07:00
if ( Get_FS ( selected_partition . filesystem , gparted_core . get_fs ( ) ) . resize & & ! devices [ current_device ] . readonly )
2004-09-19 14:24:53 -06:00
{
allow_resize ( true ) ;
//only allow copying of real partitions
2004-11-21 14:49:38 -07:00
if ( selected_partition . status ! = GParted : : STAT_NEW & &
selected_partition . status ! = GParted : : STAT_COPY & &
Get_FS ( selected_partition . filesystem , gparted_core . get_fs ( ) ) . copy )
2004-09-19 14:24:53 -06:00
allow_copy ( true ) ;
}
return ;
}
//EXTENDED
2004-11-06 04:55:03 -07:00
else if ( selected_partition . type = = GParted : : EXTENDED )
2004-09-19 14:24:53 -06:00
{
if ( ! any_logic ) //deletion is only allowed when there are nog logical partitions inside.
allow_delete ( true ) ;
2004-11-29 06:20:05 -07:00
if ( ! devices [ current_device ] . readonly )
allow_resize ( true ) ;
2004-09-19 14:24:53 -06:00
}
}
void Win_GParted : : Set_Valid_Convert_Filesystems ( )
{
//disable conversion to the same filesystem
2004-11-23 12:03:39 -07:00
for ( unsigned int t = 0 ; t < gparted_core . get_fs ( ) . size ( ) - 1 ; t + + )
2004-10-06 09:32:40 -06:00
{
2004-11-17 06:00:25 -07:00
if ( gparted_core . get_fs ( ) [ t ] . filesystem = = selected_partition . filesystem | | ! gparted_core . get_fs ( ) [ t ] . create )
2004-11-23 12:03:39 -07:00
menu_convert . items ( ) [ t ] . set_sensitive ( false ) ;
2004-10-06 09:32:40 -06:00
else
2004-11-23 12:03:39 -07:00
menu_convert . items ( ) [ t ] . set_sensitive ( true ) ;
2004-10-06 09:32:40 -06:00
}
2004-09-19 14:24:53 -06:00
}
2004-10-11 08:19:56 -06:00
void Win_GParted : : open_operationslist ( )
{
hbox_operations . show ( ) ;
int x , y ; this - > get_size ( x , y ) ;
y - = 300 ;
2004-11-23 12:03:39 -07:00
for ( int t = vpaned_main . get_position ( ) ; t > y ; t - = 5 )
2004-10-11 08:19:56 -06:00
{
2004-11-23 12:03:39 -07:00
vpaned_main . set_position ( t ) ;
while ( Gtk : : Main : : events_pending ( ) )
Gtk : : Main : : iteration ( ) ;
2004-10-11 08:19:56 -06:00
}
2004-11-23 12:03:39 -07:00
( ( Gtk : : CheckMenuItem * ) & menubar_main . items ( ) [ 1 ] . get_submenu ( ) - > items ( ) [ 1 ] ) - > set_active ( true ) ;
2004-10-11 08:19:56 -06:00
}
2004-09-19 14:24:53 -06:00
void Win_GParted : : close_operationslist ( )
{
2004-10-01 15:09:19 -06:00
int x , y ; this - > get_size ( x , y ) ;
2004-09-19 14:24:53 -06:00
y - = 210 ; //height of whole app - menubar - visualdisk - statusbar ....
2004-11-23 12:03:39 -07:00
for ( int t = vpaned_main . get_position ( ) ; t < y ; t + = 5 )
2004-09-19 14:24:53 -06:00
{
2004-11-23 12:03:39 -07:00
vpaned_main . set_position ( t ) ;
while ( Gtk : : Main : : events_pending ( ) )
Gtk : : Main : : iteration ( ) ;
2004-09-19 14:24:53 -06:00
}
2004-10-11 08:19:56 -06:00
hbox_operations . hide ( ) ;
2004-11-23 12:03:39 -07:00
( ( Gtk : : CheckMenuItem * ) & menubar_main . items ( ) [ 1 ] . get_submenu ( ) - > items ( ) [ 1 ] ) - > set_active ( false ) ;
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : clear_operationslist ( )
{
2004-11-23 12:03:39 -07:00
operations . clear ( ) ;
Refresh_Visual ( ) ;
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : optionmenu_devices_changed ( )
{
//set new current device
2004-11-23 12:03:39 -07:00
current_device = optionmenu_devices . get_history ( ) ;
2004-09-19 14:24:53 -06:00
//refresh label_device_info
Fill_Label_Device_Info ( ) ;
//rebuild visualdisk and treeview
Refresh_Visual ( ) ;
}
void Win_GParted : : menu_gparted_refresh_devices ( )
{
//find out if there was any change in available devices (think about flexible media like zipdisks/usbsticks/whatever ;-) )
2004-10-11 04:23:24 -06:00
thread = Glib : : Thread : : create ( SigC : : slot_class ( * this , & Win_GParted : : find_devices_thread ) , true ) ;
Show_Pulsebar ( ) ;
2004-09-19 14:24:53 -06:00
//check if current_device is still available (think about hotpluggable shit like usbdevices)
2004-11-27 16:31:19 -07:00
if ( current_device > = devices . size ( ) )
2004-12-03 03:53:01 -07:00
current_device = 0 ;
2004-11-27 16:31:19 -07:00
2004-12-03 03:53:01 -07:00
Refresh_OptionMenu ( ) ;
2004-11-29 06:20:05 -07:00
//show read-only warning if necessary
Glib : : ustring readonly_paths ;
for ( unsigned int t = 0 ; t < devices . size ( ) ; t + + )
if ( devices [ t ] . readonly )
readonly_paths + = " \n - " + devices [ t ] . path ;
if ( ! readonly_paths . empty ( ) )
{
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = _ ( " The kernel is unable to re-read the partitiontables on the following devices: " ) ;
str_temp + = readonly_paths ;
str_temp + = " </span> \n \n " ;
2004-11-29 08:27:33 -07:00
str_temp + = _ ( " Because of this you will only have limited access to these devices. " ) ;
2004-11-29 06:20:05 -07:00
str_temp + = " \n " ;
str_temp + = _ ( " Unmount all mounted partitions on a device to get full access. " ) ;
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_WARNING , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
}
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : menu_gparted_quit ( )
{
2004-11-23 12:03:39 -07:00
if ( Quit_Check_Operations ( ) )
this - > hide ( ) ;
2004-09-19 14:24:53 -06:00
}
2004-09-27 14:12:47 -06:00
void Win_GParted : : menu_view_harddisk_info ( )
{
2004-11-23 12:03:39 -07:00
if ( ( ( Gtk : : CheckMenuItem * ) & menubar_main . items ( ) [ 1 ] . get_submenu ( ) - > items ( ) [ 0 ] ) - > get_active ( ) )
2004-09-27 14:12:47 -06:00
{ //open harddisk information
2004-11-23 12:03:39 -07:00
hpaned_main . get_child1 ( ) - > show ( ) ;
for ( int t = hpaned_main . get_position ( ) ; t < 250 ; t + = 15 )
2004-09-27 14:12:47 -06:00
{
2004-11-23 12:03:39 -07:00
hpaned_main . set_position ( t ) ;
while ( Gtk : : Main : : events_pending ( ) )
Gtk : : Main : : iteration ( ) ;
2004-09-27 14:12:47 -06:00
}
}
else
{ //close harddisk information
2004-11-23 12:03:39 -07:00
for ( int t = hpaned_main . get_position ( ) ; t > 0 ; t - = 15 )
2004-09-27 14:12:47 -06:00
{
2004-11-23 12:03:39 -07:00
hpaned_main . set_position ( t ) ;
while ( Gtk : : Main : : events_pending ( ) )
Gtk : : Main : : iteration ( ) ;
2004-09-27 14:12:47 -06:00
}
2004-11-23 12:03:39 -07:00
hpaned_main . get_child1 ( ) - > hide ( ) ;
2004-09-27 14:12:47 -06:00
}
}
2004-10-11 08:19:56 -06:00
void Win_GParted : : menu_view_operations ( )
{
2004-11-23 12:03:39 -07:00
if ( ( ( Gtk : : CheckMenuItem * ) & menubar_main . items ( ) [ 1 ] . get_submenu ( ) - > items ( ) [ 1 ] ) - > get_active ( ) )
2004-10-11 08:19:56 -06:00
open_operationslist ( ) ;
else
close_operationslist ( ) ;
}
2004-09-19 14:24:53 -06:00
void Win_GParted : : menu_help_contents ( )
{
2004-10-02 03:39:16 -06:00
str_temp = _ ( " Sorry, not yet implemented. " ) ;
str_temp + = " \n " ;
str_temp + = _ ( " Please visit http://gparted.sf.net for more information and support. " ) ;
2004-11-23 12:03:39 -07:00
Gtk : : MessageDialog dialog ( * this , str_temp , false , Gtk : : MESSAGE_INFO , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : menu_help_about ( )
{
Dialog_About dialog ;
dialog . set_transient_for ( * this ) ;
2004-11-23 12:03:39 -07:00
dialog . run ( ) ;
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : mouse_click ( GdkEventButton * event , const Partition & partition )
{
selected_partition = partition ;
2004-11-23 12:03:39 -07:00
Set_Valid_Operations ( ) ;
2004-09-19 14:24:53 -06:00
treeview_detail . Set_Selected ( partition ) ;
vbox_visual_disk - > Set_Selected ( partition ) ;
2004-11-23 12:03:39 -07:00
if ( event - > type = = GDK_2BUTTON_PRESS & & ! pulse )
activate_info ( ) ;
else if ( event - > button = = 3 ) //right-click
2004-09-19 14:24:53 -06:00
{
//prepare convert menu
2004-11-23 12:03:39 -07:00
if ( selected_partition . type ! = GParted : : UNALLOCATED )
Set_Valid_Convert_Filesystems ( ) ;
2004-09-19 14:24:53 -06:00
2004-11-23 12:03:39 -07:00
menu_popup . popup ( event - > button , event - > time ) ;
2004-09-19 14:24:53 -06:00
}
}
2004-11-06 04:55:03 -07:00
bool Win_GParted : : max_amount_prim_reached ( )
{
//Display error if user tries to create more primary partitions than the partition table can hold.
2004-11-17 06:00:25 -07:00
if ( ! selected_partition . inside_extended & & primary_count > = devices [ current_device ] . max_prims )
2004-11-06 04:55:03 -07:00
{
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
2004-11-17 06:00:25 -07:00
str_temp + = String : : ucompose ( _ ( " It is not possible to create more than %1 primary partitions " ) , devices [ current_device ] . max_prims ) ;
2004-11-06 04:55:03 -07:00
str_temp + = " </span> \n \n " ;
str_temp + = _ ( " If you want more partitions you should first create an extended partition. Such a partition can contain other partitions. " ) ;
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_ERROR , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
return true ;
}
return false ;
}
2004-09-19 14:24:53 -06:00
void Win_GParted : : activate_resize ( )
{
//show warning when one tries to resize a fat16 filesystem
if ( selected_partition . filesystem = = " fat16 " )
{
2004-10-02 03:39:16 -06:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = _ ( " Are you sure you want to resize/move this partition? " ) ;
str_temp + = " </span> \n \n " ;
str_temp + = _ ( " Resizing a fat16 partition can be quite tricky! Especially growing such a partition is very error-prone. It is advisable to first convert the filesystem to fat32. " ) ;
str_temp + = " \n " ;
2004-09-19 14:24:53 -06:00
2004-10-02 03:39:16 -06:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_WARNING , Gtk : : BUTTONS_CANCEL , true ) ;
2004-09-19 14:24:53 -06:00
//pffff this whole mess only for this f*cked up filesystem :-(
Gtk : : Button button_resize_move ;
Gtk : : HBox hbox_resize_move ;
2004-10-06 13:06:43 -06:00
2004-09-19 14:24:53 -06:00
image = manage ( new Gtk : : Image ( Gtk : : Stock : : GOTO_LAST , Gtk : : ICON_SIZE_BUTTON ) ) ;
hbox_resize_move . pack_start ( * image , Gtk : : PACK_SHRINK ) ;
2004-10-06 13:06:43 -06:00
hbox_resize_move . pack_start ( * mk_label ( _ ( " Resize/Move " ) ) , Gtk : : PACK_SHRINK ) ;
2004-09-19 14:24:53 -06:00
button_resize_move . add ( hbox_resize_move ) ;
2004-11-06 04:55:03 -07:00
dialog . add_action_widget ( button_resize_move , Gtk : : RESPONSE_OK ) ;
dialog . show_all_children ( ) ;
2004-09-19 14:24:53 -06:00
2004-11-06 04:55:03 -07:00
if ( dialog . run ( ) = = Gtk : : RESPONSE_CANCEL )
2004-09-19 14:24:53 -06:00
return ;
}
2004-11-17 06:00:25 -07:00
std : : vector < Partition > partitions = devices [ current_device ] . device_partitions ;
2004-09-19 14:24:53 -06:00
2004-11-21 14:49:38 -07:00
if ( operations . size ( ) )
for ( unsigned int t = 0 ; t < operations . size ( ) ; t + + )
if ( operations [ t ] . device_path = = devices [ current_device ] . path )
2004-11-07 06:13:11 -07:00
operations [ t ] . Apply_Operation_To_Visual ( partitions ) ;
2004-09-19 14:24:53 -06:00
2004-11-25 12:21:42 -07:00
Dialog_Partition_Resize_Move dialog ( gparted_core . get_fs ( ) , devices [ current_device ] . heads * devices [ current_device ] . sectors ) ;
2004-11-06 04:55:03 -07:00
if ( selected_partition . type = = GParted : : LOGICAL )
{
unsigned int ext = 0 ;
while ( ext < partitions . size ( ) & & partitions [ ext ] . type ! = GParted : : EXTENDED ) ext + + ;
dialog . Set_Data ( selected_partition , partitions [ ext ] . logicals ) ;
}
else
dialog . Set_Data ( selected_partition , partitions ) ;
2004-09-19 14:24:53 -06:00
dialog . set_transient_for ( * this ) ;
if ( dialog . run ( ) = = Gtk : : RESPONSE_OK )
{
dialog . hide ( ) ; //i want to be sure the dialog is gone _before_ operationslist shows up (only matters if first operation)
//if selected_partition is NEW we simply remove the NEW operation from the list and add it again with the new size and position ( unless it's an EXTENDED )
2004-09-25 08:12:07 -06:00
if ( selected_partition . status = = GParted : : STAT_NEW & & selected_partition . type ! = GParted : : EXTENDED )
2004-09-19 14:24:53 -06:00
{
//remove operation which creates this partition
for ( unsigned int t = 0 ; t < operations . size ( ) ; t + + )
{
if ( operations [ t ] . partition_new . partition = = selected_partition . partition )
{
operations . erase ( operations . begin ( ) + t ) ;
//And add the new partition to the end of the operations list
Add_Operation ( GParted : : CREATE , dialog . Get_New_Partition ( ) ) ;
break ;
}
}
}
else //normal move/resize on existing partition
Add_Operation ( GParted : : RESIZE_MOVE , dialog . Get_New_Partition ( ) ) ;
}
}
void Win_GParted : : activate_copy ( )
{
copied_partition = selected_partition ;
}
void Win_GParted : : activate_paste ( )
{
2004-11-06 04:55:03 -07:00
if ( ! max_amount_prim_reached ( ) )
2004-09-19 14:24:53 -06:00
{
2004-12-09 15:56:33 -07:00
Dialog_Partition_Copy dialog ( gparted_core . get_fs ( ) ) ;
2004-11-06 04:55:03 -07:00
dialog . Set_Data ( selected_partition , copied_partition ) ;
dialog . set_transient_for ( * this ) ;
if ( dialog . run ( ) = = Gtk : : RESPONSE_OK )
{
dialog . hide ( ) ; //i want to be sure the dialog is gone _before_ operationslist shows up (only matters if first operation)
Add_Operation ( GParted : : COPY , dialog . Get_New_Partition ( ) ) ;
}
2004-09-19 14:24:53 -06:00
}
}
void Win_GParted : : activate_new ( )
{
2004-11-27 16:31:19 -07:00
//if max_prims == -1 the current device has an unrecognised disklabel (see also GParted_Core::get_devices)
if ( devices [ current_device ] . max_prims = = - 1 )
{
Dialog_Disklabel dialog ( devices [ current_device ] . path ) ;
dialog . set_transient_for ( * this ) ;
if ( dialog . run ( ) = = Gtk : : RESPONSE_OK )
{
if ( ! gparted_core . Set_Disklabel ( devices [ current_device ] . path , dialog . Get_Disklabel ( ) ) )
{
Gtk : : MessageDialog dialog ( * this , _ ( " Error while setting new disklabel " ) , true , Gtk : : MESSAGE_ERROR , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
}
menu_gparted_refresh_devices ( ) ;
}
}
else if ( ! max_amount_prim_reached ( ) )
2004-11-06 04:55:03 -07:00
{
Dialog_Partition_New dialog ;
2004-11-29 06:20:05 -07:00
dialog . Set_Data ( selected_partition , any_extended , new_count , gparted_core . get_fs ( ) , devices [ current_device ] . readonly ) ;
2004-11-06 04:55:03 -07:00
dialog . set_transient_for ( * this ) ;
2004-09-19 14:24:53 -06:00
2004-11-27 16:31:19 -07:00
if ( dialog . run ( ) = = Gtk : : RESPONSE_OK )
2004-11-06 04:55:03 -07:00
{
dialog . hide ( ) ; //make sure the dialog is gone _before_ operationslist shows up (only matters if first operation)
new_count + + ;
Add_Operation ( GParted : : CREATE , dialog . Get_New_Partition ( ) ) ;
}
}
2004-09-19 14:24:53 -06:00
}
void Win_GParted : : activate_delete ( )
{
//since logicals are *always* numbered from 5 to <last logical> there can be a shift in numbers after deletion.
//e.g. consider /dev/hda5 /dev/hda6 /dev/hda7. Now after removal of /dev/hda6, /dev/hda7 is renumbered to /dev/hda6
//the new situation is now /dev/hda5 /dev/hda6. If /dev/hda7 was mounted the OS cannot find /dev/hda7 anymore and the results aren't that pretty
//it seems best to check for this and prohibit deletion with some explanation to the user.
2004-11-06 04:55:03 -07:00
if ( selected_partition . type = = GParted : : LOGICAL & &
selected_partition . status ! = GParted : : STAT_NEW & &
2004-11-17 06:00:25 -07:00
selected_partition . partition_number < devices [ current_device ] . Get_Highest_Logical_Busy ( ) )
2004-09-19 14:24:53 -06:00
{
2004-10-02 03:39:16 -06:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = _ ( " Unable to delete partition! " ) ;
str_temp + = " </span> \n \n " ;
str_temp + = String : : ucompose ( _ ( " Please unmount any logical partitions having a number higher than %1 " ) , selected_partition . partition_number ) ;
2004-11-06 04:55:03 -07:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_ERROR , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
2004-09-24 19:10:21 -06:00
return ;
2004-09-19 14:24:53 -06:00
}
2004-10-02 03:39:16 -06:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
2004-11-06 04:55:03 -07:00
str_temp + = String : : ucompose ( _ ( " Are you sure you want to delete %1? " ) , selected_partition . partition ) + " </span> " ;
2004-09-19 14:24:53 -06:00
if ( selected_partition . partition = = copied_partition . partition )
2004-10-02 03:39:16 -06:00
{
str_temp + = " \n \n " ;
str_temp + = _ ( " After deletion this partition is no longer available for copying. " ) ;
}
2004-09-19 14:24:53 -06:00
2004-10-02 03:39:16 -06:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_QUESTION , Gtk : : BUTTONS_NONE , true ) ;
/*TO TRANSLATORS: dialogtitle, looks like Delete /dev/hda2 (ntfs, 2345 MB) */
2004-09-24 19:10:21 -06:00
dialog . set_title ( String : : ucompose ( _ ( " Delete %1 (%2, %3 MB) " ) , selected_partition . partition , selected_partition . filesystem , selected_partition . Get_Length_MB ( ) ) ) ;
2004-09-19 14:24:53 -06:00
dialog . add_button ( Gtk : : Stock : : CANCEL , Gtk : : RESPONSE_CANCEL ) ;
dialog . add_button ( Gtk : : Stock : : DELETE , Gtk : : RESPONSE_OK ) ;
dialog . show_all_children ( ) ;
if ( dialog . run ( ) = = Gtk : : RESPONSE_OK )
{
dialog . hide ( ) ; //i want to be sure the dialog is gone _before_ operationslist shows up (only matters if first operation)
//if deleted partition was on the clipboard we erase it...
if ( selected_partition . partition = = copied_partition . partition )
copied_partition . partition = " NONE " ;
2004-11-17 06:00:25 -07:00
2004-09-19 14:24:53 -06:00
//if deleted one is NEW, it doesn't make sense to add it to the operationslist, we erase its creation
//and possible modifications like resize etc.. from the operationslist. Calling Refresh_Visual will wipe every memory of its existence ;-)
2004-09-25 08:12:07 -06:00
if ( selected_partition . status = = GParted : : STAT_NEW )
2004-09-19 14:24:53 -06:00
{
//remove all operations done on this new partition (this includes creation)
for ( int t = 0 ; t < ( int ) operations . size ( ) ; t + + ) //i removed the unsigned 'cause t will be negative at times...
{
if ( operations [ t ] . partition_new . partition = = selected_partition . partition )
{
2004-11-06 04:55:03 -07:00
operations . erase ( operations . begin ( ) + t ) ;
2004-09-19 14:24:53 -06:00
t - - ;
}
}
2004-11-06 04:55:03 -07:00
2004-09-19 14:24:53 -06:00
//determine lowest possible new_count
new_count = 0 ;
for ( unsigned int t = 0 ; t < operations . size ( ) ; t + + )
2004-09-25 08:12:07 -06:00
if ( operations [ t ] . partition_new . status = = GParted : : STAT_NEW & & operations [ t ] . partition_new . partition_number > new_count )
2004-09-19 14:24:53 -06:00
new_count = operations [ t ] . partition_new . partition_number ;
new_count + = 1 ;
2004-11-06 04:55:03 -07:00
2004-09-19 14:24:53 -06:00
Refresh_Visual ( ) ;
if ( ! operations . size ( ) )
close_operationslist ( ) ;
}
else //deletion of a real partition...
Add_Operation ( GParted : : DELETE , selected_partition ) ; //in this case selected_partition is just a "dummy"
}
}
void Win_GParted : : activate_info ( )
{
Dialog_Partition_Info dialog ( selected_partition ) ;
dialog . set_transient_for ( * this ) ;
dialog . run ( ) ;
}
void Win_GParted : : activate_convert ( const Glib : : ustring & new_fs )
{
//standard warning..
2004-10-02 03:39:16 -06:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
2004-10-07 09:28:13 -06:00
str_temp + = String : : ucompose ( _ ( " Are you sure you want to convert this filesystem to %1? " ) , new_fs ) + " </span> \n \n " ;
2004-10-02 03:39:16 -06:00
str_temp + = String : : ucompose ( _ ( " This operation will destroy all data on %1 " ) , selected_partition . partition ) ;
2004-09-24 19:10:21 -06:00
2004-12-09 15:56:33 -07:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_QUESTION , Gtk : : BUTTONS_CANCEL , true ) ;
2004-09-24 19:10:21 -06:00
2004-09-19 14:24:53 -06:00
dialog . add_button ( Gtk : : Stock : : CONVERT , Gtk : : RESPONSE_OK ) ;
2004-12-09 15:56:33 -07:00
dialog . show_all_children ( ) ;
2004-09-19 14:24:53 -06:00
2004-12-09 15:56:33 -07:00
if ( dialog . run ( ) = = Gtk : : RESPONSE_CANCEL )
2004-09-19 14:24:53 -06:00
return ;
2004-12-09 15:56:33 -07:00
dialog . hide ( ) ; //i want to be sure the dialog is gone _before_ operationslist shows up (only matters if first operation)
2004-09-19 14:24:53 -06:00
2004-12-09 15:56:33 -07:00
//check for some limits...
FS fs = Get_FS ( new_fs , gparted_core . get_fs ( ) ) ;
if ( selected_partition . Get_Length_MB ( ) < fs . MIN | | ( fs . MAX & & selected_partition . Get_Length_MB ( ) > fs . MAX ) )
2004-09-19 14:24:53 -06:00
{
2004-12-09 15:56:33 -07:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = String : : ucompose ( _ ( " Can not convert this filesystem to %1. " ) , new_fs ) ;
str_temp + = " </span> \n \n " ;
2004-09-19 14:24:53 -06:00
2004-12-09 15:56:33 -07:00
if ( selected_partition . Get_Length_MB ( ) < fs . MIN )
str_temp + = String : : ucompose ( _ ( " A %1 filesystem requires a partition of at least %2 MB. " ) , new_fs , fs . MIN ) ;
else
str_temp + = String : : ucompose ( _ ( " A partition with a %1 filesystem has a maximum size of %2 MB. " ) , new_fs , fs . MAX ) ;
2004-09-19 14:24:53 -06:00
2004-12-09 15:56:33 -07:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_ERROR , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
return ;
2004-09-19 14:24:53 -06:00
}
//ok we made it :P lets create an fitting partition object
Partition part_temp ;
2004-10-11 04:23:24 -06:00
part_temp . Set ( selected_partition . partition , selected_partition . partition_number , selected_partition . type , new_fs , selected_partition . sector_start , selected_partition . sector_end , /*-1,*/ selected_partition . inside_extended , false ) ;
2004-09-19 14:24:53 -06:00
//if selected_partition is NEW we simply remove the NEW operation from the list and add it again with the new filesystem
2004-09-25 08:12:07 -06:00
if ( selected_partition . status = = GParted : : STAT_NEW )
2004-09-19 14:24:53 -06:00
{
//remove operation which creates this partition
for ( unsigned int t = 0 ; t < operations . size ( ) ; t + + )
{
if ( operations [ t ] . partition_new . partition = = selected_partition . partition )
{
2004-10-06 09:32:40 -06:00
operations . erase ( operations . begin ( ) + t ) ;
2004-09-19 14:24:53 -06:00
2004-09-26 12:41:43 -06:00
//And add the new partition to the end of the operations list (NOTE: in this case we set status to STAT_NEW)
part_temp . status = STAT_NEW ;
2004-09-19 14:24:53 -06:00
Add_Operation ( GParted : : CREATE , part_temp ) ;
break ;
}
}
}
else //normal converting of an existing partition
Add_Operation ( GParted : : CONVERT , part_temp ) ;
}
2004-11-06 12:48:24 -07:00
void Win_GParted : : activate_unmount ( )
{
char c_buf [ 512 ] ;
Glib : : ustring output ;
FILE * f = popen ( ( " umount " + selected_partition . partition + " 2>&1 " ) . c_str ( ) , " r " ) ;
while ( fgets ( c_buf , 512 , f ) )
output + = c_buf ;
pclose ( f ) ;
if ( ! output . empty ( ) )
{
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = String : : ucompose ( _ ( " Could not unmount %1 " ) , selected_partition . partition ) ;
str_temp + = " </span> \n \n " ;
Gtk : : MessageDialog dialog ( * this , str_temp + output , true , Gtk : : MESSAGE_ERROR , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
}
else
menu_gparted_refresh_devices ( ) ;
}
2004-09-19 14:24:53 -06:00
void Win_GParted : : activate_undo ( )
{
//when undoing an creation it's safe to decrease the newcount by one
if ( operations . back ( ) . operationtype = = GParted : : CREATE )
2004-10-06 09:32:40 -06:00
new_count - - ;
2004-09-19 14:24:53 -06:00
operations . erase ( operations . end ( ) ) ;
Refresh_Visual ( ) ;
if ( ! operations . size ( ) )
close_operationslist ( ) ;
}
void Win_GParted : : activate_apply ( )
{
2004-10-02 03:39:16 -06:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = _ ( " Are you sure you want to apply the pending operations? " ) ;
str_temp + = " </span> \n \n " ;
str_temp + = _ ( " It is recommended to backup valueable data before proceeding. " ) ;
2004-10-16 09:42:08 -06:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_WARNING , Gtk : : BUTTONS_NONE , true ) ;
2004-11-17 06:00:25 -07:00
dialog . set_title ( _ ( " Apply operations to harddisk " ) ) ;
2004-09-19 14:24:53 -06:00
2004-11-17 06:00:25 -07:00
dialog . add_button ( Gtk : : Stock : : CANCEL , Gtk : : RESPONSE_CANCEL ) ;
dialog . add_button ( Gtk : : Stock : : APPLY , Gtk : : RESPONSE_OK ) ;
2004-09-19 14:24:53 -06:00
2004-11-17 06:00:25 -07:00
dialog . show_all_children ( ) ;
if ( dialog . run ( ) = = Gtk : : RESPONSE_OK )
2004-09-19 14:24:53 -06:00
{
2004-11-17 06:00:25 -07:00
dialog . hide ( ) ; //hide confirmationdialog
2004-09-19 14:24:53 -06:00
apply = true ;
2004-11-17 06:00:25 -07:00
dialog_progress = new Dialog_Progress ( operations . size ( ) , gparted_core . get_textbuffer ( ) ) ;
2004-10-16 09:42:08 -06:00
2004-11-17 06:00:25 -07:00
conn = dispatcher . connect ( sigc : : mem_fun ( * dialog_progress , & Dialog_Progress : : Set_Operation ) ) ;
2004-10-11 04:23:24 -06:00
thread = Glib : : Thread : : create ( SigC : : slot_class ( * this , & Win_GParted : : apply_operations_thread ) , true ) ;
2004-09-19 14:24:53 -06:00
2004-10-16 09:42:08 -06:00
dialog_progress - > set_transient_for ( * this ) ;
while ( dialog_progress - > run ( ) ! = Gtk : : RESPONSE_OK )
apply = false ; //finish current operation . then stop applying operations
2004-09-19 14:24:53 -06:00
//after hiding the progressdialog
delete ( dialog_progress ) ;
2004-10-16 09:42:08 -06:00
thread - > join ( ) ;
conn . disconnect ( ) ;
2004-09-21 12:04:48 -06:00
2004-11-24 14:28:48 -07:00
//find out if any of the involved devices is busy
bool any_busy = false ;
for ( unsigned int t = 0 ; t < devices . size ( ) & & ! any_busy ; t + + )
2004-11-19 04:55:38 -07:00
if ( devices [ t ] . busy )
2004-11-24 14:28:48 -07:00
for ( unsigned int i = 0 ; i < operations . size ( ) & & ! any_busy ; i + + )
2004-11-17 06:00:25 -07:00
if ( operations [ i ] . device_path = = devices [ t ] . path )
2004-11-24 14:28:48 -07:00
any_busy = true ;
2004-11-17 06:00:25 -07:00
2004-09-21 12:04:48 -06:00
//show warning if necessary
2004-11-24 14:28:48 -07:00
if ( any_busy )
2004-09-21 12:04:48 -06:00
{
2004-11-24 14:28:48 -07:00
str_temp = " <span weight= \" bold \" size= \" larger \" > " ;
str_temp + = _ ( " At least one operation was applied to a busy device. " ) ;
2004-10-02 03:39:16 -06:00
str_temp + = " </span> \n \n " ;
2004-11-24 14:28:48 -07:00
str_temp + = _ ( " A busy device is a device with at least one mounted partition. " ) ;
str_temp + = " \n " ;
2004-11-25 12:21:42 -07:00
str_temp + = _ ( " Because making changes to a busy device may confuse the kernel, you are advised to reboot your computer. " ) ;
2004-11-24 14:28:48 -07:00
2004-11-17 06:00:25 -07:00
Gtk : : MessageDialog dialog ( * this , str_temp , true , Gtk : : MESSAGE_WARNING , Gtk : : BUTTONS_OK , true ) ;
dialog . run ( ) ;
2004-11-24 14:28:48 -07:00
}
2004-09-19 14:24:53 -06:00
//wipe operations...
2004-10-16 09:42:08 -06:00
operations . clear ( ) ;
liststore_operations - > clear ( ) ;
close_operationslist ( ) ;
2004-10-11 04:23:24 -06:00
//reset new_count to 1
2004-10-16 09:42:08 -06:00
new_count = 1 ;
2004-09-19 14:24:53 -06:00
//reread devices and their layouts...
2004-10-16 09:42:08 -06:00
menu_gparted_refresh_devices ( ) ;
2004-09-19 14:24:53 -06:00
}
}
2004-10-16 09:42:08 -06:00
void Win_GParted : : apply_operations_thread ( )
2004-09-19 14:24:53 -06:00
{
2004-11-17 06:00:25 -07:00
for ( unsigned int t = 0 ; t < operations . size ( ) & & apply ; t + + )
{
dialog_progress - > current_operation = operations [ t ] . str_operation ;
dialog_progress - > TIME_LEFT = gparted_core . get_estimated_time ( operations [ t ] ) ;
dispatcher ( ) ;
2004-09-19 14:24:53 -06:00
2004-11-17 06:00:25 -07:00
gparted_core . Apply_Operation_To_Disk ( operations [ t ] ) ;
2004-09-19 14:24:53 -06:00
}
2004-10-16 09:42:08 -06:00
dialog_progress - > response ( Gtk : : RESPONSE_OK ) ;
2004-09-19 14:24:53 -06:00
}
} // GParted