added 'check' operation. The functionality was already there, but it was

* include/Makefile.am,
  include/Operation.h,
  include/Win_GParted.h,
  src/GParted_Core.cc,
  src/Makefile.am,
  src/Win_GParted.cc,
  include/OperationCheck.h (new),
  src/OperationCheck.cc (new): added 'check' operation. The
  functionality was already there, but it was not possible yet to
  activate it from the gui.
This commit is contained in:
Bart Hakvoort 2006-11-26 14:27:16 +00:00
parent 61c91a1869
commit ef09ce0b97
9 changed files with 139 additions and 10 deletions

View File

@ -1,3 +1,16 @@
2006-11-26 Bart Hakvoort <hakvoort@cvs.gnome.org>
* include/Makefile.am,
include/Operation.h,
include/Win_GParted.h,
src/GParted_Core.cc,
src/Makefile.am,
src/Win_GParted.cc,
include/OperationCheck.h (new),
src/OperationCheck.cc (new): added 'check' operation. The
functionality was already there, but it was not possible yet to
activate it from the gui.
2006-11-25 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw> 2006-11-25 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
* configure.in: Add "zh_HK" to ALL_LINGUAS. * configure.in: Add "zh_HK" to ALL_LINGUAS.

View File

@ -19,6 +19,7 @@ EXTRA_DIST = \
HBoxOperations.h \ HBoxOperations.h \
Operation.h \ Operation.h \
OperationCopy.h \ OperationCopy.h \
OperationCheck.h \
OperationCreate.h \ OperationCreate.h \
OperationDelete.h \ OperationDelete.h \
OperationDetail.h \ OperationDetail.h \

View File

@ -26,10 +26,11 @@ namespace GParted
//FIXME: stop using GParted:: in front of our own enums.. it's not necessary and clutters the code //FIXME: stop using GParted:: in front of our own enums.. it's not necessary and clutters the code
enum OperationType { enum OperationType {
OPERATION_DELETE = 0, OPERATION_DELETE = 0,
OPERATION_CREATE = 1, OPERATION_CHECK = 1,
OPERATION_RESIZE_MOVE = 2, OPERATION_CREATE = 2,
OPERATION_FORMAT = 3, OPERATION_RESIZE_MOVE = 3,
OPERATION_COPY = 4 OPERATION_FORMAT = 4,
OPERATION_COPY = 5
}; };
class Operation class Operation

39
include/OperationCheck.h Normal file
View File

@ -0,0 +1,39 @@
/* Copyright (C) 2004 Bart 'plors' Hakvoort
*
* 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.
*/
#ifndef OPERATIONCHECK
#define OPERATIONCHECK
#include "../include/Operation.h"
namespace GParted
{
class OperationCheck : public Operation
{
public:
OperationCheck( const Device & device, const Partition & partition ) ;
void apply_to_visual( std::vector<Partition> & partitions ) ;
private:
void create_description() ;
} ;
} //GParted
#endif //OPERATIONCHECK

View File

@ -97,6 +97,9 @@ private:
void allow_manage_flags( bool state ) { void allow_manage_flags( bool state ) {
toggle_item( state, MENU_FLAGS ) ; } toggle_item( state, MENU_FLAGS ) ; }
void allow_check( bool state ) {
toggle_item( state, MENU_CHECK ) ; }
void allow_info( bool state ) { void allow_info( bool state ) {
toggle_item( state, MENU_INFO ) ; } toggle_item( state, MENU_INFO ) ; }
@ -154,6 +157,7 @@ private:
void activate_mount_partition( unsigned int index ) ; void activate_mount_partition( unsigned int index ) ;
void activate_disklabel() ; void activate_disklabel() ;
void activate_manage_flags() ; void activate_manage_flags() ;
void activate_check() ;
void activate_undo(); void activate_undo();
void remove_operation( int index = -1, bool remove_all = false ) ; void remove_operation( int index = -1, bool remove_all = false ) ;
@ -218,6 +222,7 @@ private:
MENU_TOGGLE_MOUNT_SWAP, MENU_TOGGLE_MOUNT_SWAP,
MENU_MOUNT, MENU_MOUNT,
MENU_FLAGS, MENU_FLAGS,
MENU_CHECK,
MENU_INFO, MENU_INFO,
TOOLBAR_UNDO, TOOLBAR_UNDO,
TOOLBAR_APPLY ; TOOLBAR_APPLY ;

View File

@ -289,6 +289,10 @@ bool GParted_Core::apply_operation_to_disk( Operation * operation )
case OPERATION_DELETE: case OPERATION_DELETE:
succes = Delete( operation ->partition_original, operation ->operation_detail ) ; succes = Delete( operation ->partition_original, operation ->operation_detail ) ;
break ; break ;
case OPERATION_CHECK:
succes = check_repair_filesystem( operation ->partition_original, operation ->operation_detail ) &&
maximize_filesystem( operation ->partition_original, operation ->operation_detail ) ;
break ;
case OPERATION_CREATE: case OPERATION_CREATE:
succes = create( operation ->device, succes = create( operation ->device,
operation ->partition_new, operation ->partition_new,
@ -1569,10 +1573,10 @@ bool GParted_Core::copy( const Partition & partition_src,
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ; operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
return ( succes && return succes &&
update_bootsector( partition_dst, operationdetail ) && update_bootsector( partition_dst, operationdetail ) &&
check_repair_filesystem( partition_dst, operationdetail ) && check_repair_filesystem( partition_dst, operationdetail ) &&
maximize_filesystem( partition_dst, operationdetail ) ) ; maximize_filesystem( partition_dst, operationdetail ) ;
} }
} }

View File

@ -28,6 +28,7 @@ gparted_SOURCES = \
HBoxOperations.cc \ HBoxOperations.cc \
Operation.cc \ Operation.cc \
OperationCopy.cc \ OperationCopy.cc \
OperationCheck.cc \
OperationCreate.cc \ OperationCreate.cc \
OperationDelete.cc \ OperationDelete.cc \
OperationDetail.cc \ OperationDetail.cc \

44
src/OperationCheck.cc Normal file
View File

@ -0,0 +1,44 @@
/* Copyright (C) 2004 Bart 'plors' Hakvoort
*
* 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/OperationCheck.h"
namespace GParted
{
OperationCheck::OperationCheck( const Device & device, const Partition & partition )
{
type = OPERATION_CHECK ;
this ->device = device ;
partition_original = partition ;
}
void OperationCheck::apply_to_visual( std::vector<Partition> & partitions )
{
}
void OperationCheck::create_description()
{
/*TO TRANSLATORS: looks like Check and repair filesystem (ext3) on /dev/hda4 */
description = String::ucompose( _("Check and repair filesystem (%1) on %2"),
Utils::get_filesystem_string( partition_original .filesystem ),
partition_original .get_path() ) ;
}
} //GParted

View File

@ -25,6 +25,7 @@
#include "../include/Dialog_Partition_Info.h" #include "../include/Dialog_Partition_Info.h"
#include "../include/DialogManageFlags.h" #include "../include/DialogManageFlags.h"
#include "../include/OperationCopy.h" #include "../include/OperationCopy.h"
#include "../include/OperationCheck.h"
#include "../include/OperationCreate.h" #include "../include/OperationCreate.h"
#include "../include/OperationDelete.h" #include "../include/OperationDelete.h"
#include "../include/OperationFormat.h" #include "../include/OperationFormat.h"
@ -334,6 +335,11 @@ void Win_GParted::init_partition_menu()
sigc::mem_fun( *this, &Win_GParted::activate_manage_flags ) ) ); sigc::mem_fun( *this, &Win_GParted::activate_manage_flags ) ) );
MENU_FLAGS = index++ ; MENU_FLAGS = index++ ;
menu_partition .items() .push_back(
Gtk::Menu_Helpers::MenuElem( _("C_heck"),
sigc::mem_fun( *this, &Win_GParted::activate_check ) ) );
MENU_CHECK = index++ ;
menu_partition .items() .push_back( Gtk::Menu_Helpers::SeparatorElem() ) ; menu_partition .items() .push_back( Gtk::Menu_Helpers::SeparatorElem() ) ;
index++ ; index++ ;
@ -606,8 +612,10 @@ void Win_GParted::Add_Operation( Operation * operation, int index )
if ( operation ) if ( operation )
{ {
Glib::ustring error ; Glib::ustring error ;
//FIXME: this is becoming a mess.. maybe it's better to check if partition_new > 0
if ( operation ->type == OPERATION_DELETE || if ( operation ->type == OPERATION_DELETE ||
operation ->type == OPERATION_FORMAT || operation ->type == OPERATION_FORMAT ||
operation ->type == OPERATION_CHECK ||
gparted_core .snap_to_cylinder( operation ->device, operation ->partition_new, error ) ) gparted_core .snap_to_cylinder( operation ->device, operation ->partition_new, error ) )
{ {
operation ->create_description() ; operation ->create_description() ;
@ -728,7 +736,7 @@ void Win_GParted::set_valid_operations()
{ {
allow_new( false ); allow_delete( false ); allow_resize( false ); allow_copy( false ); allow_new( false ); allow_delete( false ); allow_resize( false ); allow_copy( false );
allow_paste( false ); allow_format( false ); allow_toggle_swap_mount_state( false ) ; allow_paste( false ); allow_format( false ); allow_toggle_swap_mount_state( false ) ;
allow_manage_flags( false ) ; allow_info( false ) ; allow_manage_flags( false ) ; allow_check( false ) ; allow_info( false ) ;
dynamic_cast<Gtk::Label*>( menu_partition .items()[ MENU_TOGGLE_MOUNT_SWAP ] .get_child() ) dynamic_cast<Gtk::Label*>( menu_partition .items()[ MENU_TOGGLE_MOUNT_SWAP ] .get_child() )
->set_label( _("_Unmount") ) ; ->set_label( _("_Unmount") ) ;
@ -851,6 +859,10 @@ void Win_GParted::set_valid_operations()
selected_partition .status == GParted::STAT_REAL && selected_partition .status == GParted::STAT_REAL &&
copied_partition != selected_partition ) copied_partition != selected_partition )
allow_paste( true ) ; allow_paste( true ) ;
//see if we can somehow check/repair this filesystem....
if ( fs .check && selected_partition .status == GParted::STAT_REAL )
allow_check( true ) ;
} }
} }
@ -1748,10 +1760,19 @@ void Win_GParted::activate_manage_flags()
if ( dialog .any_change ) if ( dialog .any_change )
menu_gparted_refresh_devices() ; menu_gparted_refresh_devices() ;
} }
void Win_GParted::activate_check()
{
Operation *operation = new OperationCheck( devices[ current_device ], selected_partition ) ;
operation ->icon = render_icon( Gtk::Stock::EXECUTE, Gtk::ICON_SIZE_MENU );
Add_Operation( operation ) ;
}
void Win_GParted::activate_undo() void Win_GParted::activate_undo()
{ {
//when undoing an creation it's safe to decrease the newcount by one //when undoing a creation it's safe to decrease the newcount by one
if ( operations .back() ->type == OPERATION_CREATE ) if ( operations .back() ->type == OPERATION_CREATE )
new_count-- ; new_count-- ;