construct operations in the activate*() functions instead of in

* include/Win_GParted.h,
  src/Win_GParted.cc: construct operations in the activate*()
  functions instead of in Add_Operation(). This approach allows for
  more customization of operations.
This commit is contained in:
Bart Hakvoort 2006-08-01 20:19:17 +00:00
parent b0d6109ed0
commit b42982b884
3 changed files with 71 additions and 57 deletions

View File

@ -1,3 +1,10 @@
2006-08-01 Bart Hakvoort <hakvoort@cvs.gnome.org>
* include/Win_GParted.h,
src/Win_GParted.cc: construct operations in the activate*()
functions instead of in Add_Operation(). This approach allows for
more customization of operations.
2006-08-01 Bart Hakvoort <hakvoort@cvs.gnome.org>
* src/GParted_Core.cc: made set_partition_type() a bit more verbose

View File

@ -63,10 +63,7 @@ private:
//Fill txtview_device_info_buffer with some information about the selected device
void Fill_Label_Device_Info( bool clear = false );
void Add_Operation( OperationType operationtype,
const Partition & new_partition,
Sector block_size = -1,
int index = -1 ) ;
void Add_Operation( Operation * operation, int index = -1 ) ;
void Refresh_Visual();
bool Quit_Check_Operations();
void set_valid_operations() ;

View File

@ -575,49 +575,8 @@ bool Win_GParted::on_delete_event( GdkEventAny *event )
return ! Quit_Check_Operations();
}
//FIXME: i guess it's better if we just create the operations in the activate_* functions instead
//of doing it here. now we're adding more and more functionality (e.g. blocksize) to the operations
//the current approach doesn't suffice anymore.
void Win_GParted::Add_Operation( OperationType operationtype,
const Partition & new_partition,
Sector block_size,
int index )
void Win_GParted::Add_Operation( Operation * operation, int index )
{
Operation * operation ;
switch ( operationtype )
{
case OPERATION_DELETE :
operation = new OperationDelete( devices[ current_device ], selected_partition ) ;
operation ->icon = render_icon( Gtk::Stock::DELETE, Gtk::ICON_SIZE_MENU ) ;
break;
case OPERATION_CREATE :
operation = new OperationCreate( devices[ current_device ],
selected_partition,
new_partition ) ;
operation ->icon = render_icon( Gtk::Stock::NEW, Gtk::ICON_SIZE_MENU );
break;
case OPERATION_RESIZE_MOVE:
operation = new OperationResizeMove( devices[ current_device ],
selected_partition,
new_partition );
operation ->icon = render_icon( Gtk::Stock::GOTO_LAST, Gtk::ICON_SIZE_MENU );
break;
case OPERATION_FORMAT :
operation = new OperationFormat( devices[ current_device ],
selected_partition,
new_partition );
operation ->icon = render_icon( Gtk::Stock::CONVERT, Gtk::ICON_SIZE_MENU );
break;
case OPERATION_COPY :
operation = new OperationCopy( devices[ current_device ],
selected_partition,
new_partition,
copied_partition,
block_size ) ;
operation ->icon = render_icon( Gtk::Stock::COPY, Gtk::ICON_SIZE_MENU );
break;
}
if ( operation )
{
Glib::ustring error ;
@ -1264,14 +1223,27 @@ void Win_GParted::activate_resize()
selected_partition .sector_start,
selected_partition .sector_end,
selected_partition .inside_extended ) ;
Add_Operation( OPERATION_CREATE, dialog .Get_New_Partition() );
Operation * operation = new OperationCreate( devices[ current_device ],
selected_partition,
dialog .Get_New_Partition() ) ;
operation ->icon = render_icon( Gtk::Stock::NEW, Gtk::ICON_SIZE_MENU );
Add_Operation( operation ) ;
break;
}
}
}
else//normal move/resize on existing partition
Add_Operation( OPERATION_RESIZE_MOVE, dialog .Get_New_Partition() );
{
Operation * operation = new OperationResizeMove( devices[ current_device ],
selected_partition,
dialog .Get_New_Partition() );
operation ->icon = render_icon( Gtk::Stock::GOTO_LAST, Gtk::ICON_SIZE_MENU );
Add_Operation( operation ) ;
}
}
}
@ -1298,7 +1270,16 @@ void Win_GParted::activate_paste()
if ( dialog .run() == Gtk::RESPONSE_OK )
{
dialog .hide() ;
Add_Operation( OPERATION_COPY, dialog .Get_New_Partition(), dialog .get_block_size() );
Operation * operation = new OperationCopy( devices[ current_device ],
selected_partition,
dialog .Get_New_Partition(),
copied_partition,
dialog .get_block_size() ) ;
operation ->icon = render_icon( Gtk::Stock::COPY, Gtk::ICON_SIZE_MENU );
Add_Operation( operation ) ;
}
}
}
@ -1314,7 +1295,14 @@ void Win_GParted::activate_paste()
//i guess this means we have to present a window with the choice (maybe the copydialog, with everything
//except the blocksize disabled?
//bleh, this will be fixed as soon as the algorith to determine the optimal blocksize is in place
Add_Operation( OPERATION_COPY, partition_new, 32 ) ;
Operation * operation = new OperationCopy( devices[ current_device ],
selected_partition,
partition_new,
copied_partition,
32 ) ;
operation ->icon = render_icon( Gtk::Stock::COPY, Gtk::ICON_SIZE_MENU );
Add_Operation( operation ) ;
}
}
@ -1342,7 +1330,12 @@ void Win_GParted::activate_new()
dialog .hide() ;
new_count++ ;
Add_Operation( OPERATION_CREATE, dialog .Get_New_Partition() );
Operation *operation = new OperationCreate( devices[ current_device ],
selected_partition,
dialog .Get_New_Partition() ) ;
operation ->icon = render_icon( Gtk::Stock::NEW, Gtk::ICON_SIZE_MENU );
Add_Operation( operation );
}
}
}
@ -1430,8 +1423,13 @@ void Win_GParted::activate_delete()
if ( ! operations .size() )
close_operationslist() ;
}
else //deletion of a real partition...(now selected_partition is just a dummy)
Add_Operation( OPERATION_DELETE, selected_partition );
else //deletion of a real partition...
{
Operation * operation = new OperationDelete( devices[ current_device ], selected_partition ) ;
operation ->icon = render_icon( Gtk::Stock::DELETE, Gtk::ICON_SIZE_MENU ) ;
Add_Operation( operation ) ;
}
}
void Win_GParted::activate_info()
@ -1497,18 +1495,30 @@ void Win_GParted::activate_format( GParted::FILESYSTEM new_fs )
{
remove_operation( t ) ;
//And add the new partition to the end of the operations list
//And insert the new partition at the old position in the operations list
//(NOTE: in this case we set status to STAT_NEW)
part_temp .status = STAT_NEW ;
Add_Operation( OPERATION_CREATE, part_temp, -1, t );
Operation * operation = new OperationCreate( devices[ current_device ],
selected_partition,
part_temp ) ;
operation ->icon = render_icon( Gtk::Stock::NEW, Gtk::ICON_SIZE_MENU );
Add_Operation( operation, t ) ;
break;
}
}
}
else//normal formatting of an existing partition
Add_Operation( OPERATION_FORMAT, part_temp ) ;
{
Operation *operation = new OperationFormat( devices[ current_device ],
selected_partition,
part_temp );
operation ->icon = render_icon( Gtk::Stock::CONVERT, Gtk::ICON_SIZE_MENU );
Add_Operation( operation ) ;
}
}
void Win_GParted::thread_unmount_partition( bool * succes, Glib::ustring * error )