add 'flag management' (#330453)
* include/DialogManageFlags.h, include/GParted_Core.h, include/Makefile.am, include/Utils.h, include/Win_GParted.h, src/DialogManageFlags.cc, src/GParted_Core.cc, src/Makefile.am, src/Win_GParted.cc: add 'flag management' (#330453)
This commit is contained in:
parent
70bfe578d4
commit
f5ea37e310
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2006-03-31 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||
|
||||
* include/DialogManageFlags.h,
|
||||
include/GParted_Core.h,
|
||||
include/Makefile.am,
|
||||
include/Utils.h,
|
||||
include/Win_GParted.h,
|
||||
src/DialogManageFlags.cc,
|
||||
src/GParted_Core.cc,
|
||||
src/Makefile.am,
|
||||
src/Win_GParted.cc: add 'flag management' (#330453)
|
||||
|
||||
2006-03-29 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||
|
||||
* include/Partition.h,
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
/* 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.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef DIALOG_MANAGE_FLAGS
|
||||
#define DIALOG_MANAGE_FLAGS
|
||||
|
||||
#include "../include/Partition.h"
|
||||
|
||||
#include <gtkmm/dialog.h>
|
||||
#include <gtkmm/treeview.h>
|
||||
#include <gtkmm/liststore.h>
|
||||
|
||||
namespace GParted
|
||||
{
|
||||
|
||||
class DialogManageFlags : public Gtk::Dialog
|
||||
{
|
||||
public:
|
||||
DialogManageFlags( const Partition & partition ) ;
|
||||
|
||||
sigc::signal< std::map<Glib::ustring, bool>, const Partition & > signal_get_flags ;
|
||||
sigc::signal< bool, const Partition &, const Glib::ustring &, bool > signal_toggle_flag ;
|
||||
|
||||
bool any_change ;
|
||||
|
||||
private:
|
||||
void on_show() ;
|
||||
|
||||
void load_flags() ;
|
||||
void on_flag_toggled( const Glib::ustring & path ) ;
|
||||
|
||||
|
||||
Gtk::TreeView treeview_flags ;
|
||||
Gtk::TreeRow row ;
|
||||
|
||||
Glib::RefPtr<Gtk::ListStore> liststore_flags ;
|
||||
|
||||
struct treeview_flags_Columns : public Gtk::TreeModelColumnRecord
|
||||
{
|
||||
Gtk::TreeModelColumn<Glib::ustring> flag ;
|
||||
Gtk::TreeModelColumn<bool> status ;
|
||||
|
||||
treeview_flags_Columns()
|
||||
{
|
||||
add( flag ) ;
|
||||
add( status ) ;
|
||||
}
|
||||
} ;
|
||||
treeview_flags_Columns treeview_flags_columns ;
|
||||
|
||||
Partition partition ;
|
||||
};
|
||||
|
||||
} //GParted
|
||||
|
||||
|
||||
#endif //DIALOG_MANAGE_FLAGS
|
|
@ -70,6 +70,8 @@ public:
|
|||
const FS & get_fs( GParted::FILESYSTEM filesystem ) const ;
|
||||
std::vector<Glib::ustring> get_disklabeltypes() ;
|
||||
std::vector<Glib::ustring> get_all_mountpoints() ;
|
||||
std::map<Glib::ustring, bool> get_available_flags( const Partition & partition ) ;
|
||||
bool toggle_flag( const Partition & partition, const Glib::ustring & flag, bool state ) ;
|
||||
|
||||
private:
|
||||
GParted::FILESYSTEM get_filesystem() ;
|
||||
|
|
|
@ -10,6 +10,7 @@ EXTRA_DIST = \
|
|||
Dialog_Partition_New.h \
|
||||
Dialog_Partition_Resize_Move.h \
|
||||
Dialog_Progress.h \
|
||||
DialogManageFlags.h \
|
||||
DrawingAreaVisualDisk.h \
|
||||
FileSystem.h \
|
||||
Frame_Resizer_Base.h \
|
||||
|
|
|
@ -65,7 +65,7 @@ enum FILESYSTEM
|
|||
|
||||
FS_USED = 17,
|
||||
FS_UNUSED = 18
|
||||
};
|
||||
} ;
|
||||
|
||||
enum SIZE_UNIT
|
||||
{
|
||||
|
@ -75,8 +75,8 @@ enum SIZE_UNIT
|
|||
UNIT_KIB = 2,
|
||||
UNIT_MIB = 3,
|
||||
UNIT_GIB = 4,
|
||||
UNIT_TIB = 5,
|
||||
};
|
||||
UNIT_TIB = 5
|
||||
} ;
|
||||
|
||||
//struct to store filesysteminformation
|
||||
struct FS
|
||||
|
@ -105,7 +105,7 @@ struct FS
|
|||
read = create = grow = shrink = move = check = copy = NONE;
|
||||
MIN = MAX = 0 ;
|
||||
}
|
||||
};
|
||||
} ;
|
||||
|
||||
|
||||
class Utils
|
||||
|
|
|
@ -95,9 +95,12 @@ private:
|
|||
|
||||
void allow_toggle_swap_mount_state( bool b ) {
|
||||
menu_partition .items()[ 10 ] .set_sensitive( b ); }
|
||||
|
||||
void allow_manage_flags( bool b ) {
|
||||
menu_partition .items()[ 13 ] .set_sensitive( b ) ; }
|
||||
|
||||
void allow_info( bool b ) {
|
||||
menu_partition .items()[ 13 ] .set_sensitive( b ); }
|
||||
menu_partition .items()[ 15 ] .set_sensitive( b ); }
|
||||
|
||||
void allow_undo( bool b ) {
|
||||
toolbar_main .get_nth_item( 8 ) ->set_sensitive( b );
|
||||
|
@ -148,6 +151,7 @@ private:
|
|||
void toggle_swap_mount_state() ;
|
||||
void activate_mount_partition( unsigned int index ) ;
|
||||
void activate_disklabel() ;
|
||||
void activate_manage_flags() ;
|
||||
|
||||
void activate_undo();
|
||||
void remove_operation( int index = -1, bool remove_all = false ) ;
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
/* 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/DialogManageFlags.h"
|
||||
|
||||
#include <gtkmm/main.h>
|
||||
#include <gtkmm/stock.h>
|
||||
|
||||
namespace GParted
|
||||
{
|
||||
|
||||
DialogManageFlags::DialogManageFlags( const Partition & partition )
|
||||
{
|
||||
any_change = false ;
|
||||
|
||||
set_title( String::ucompose( _("Manage flags on %1"), partition .get_path() ) );
|
||||
set_has_separator( false ) ;
|
||||
set_size_request( 300, -1 ) ;
|
||||
set_resizable( false );
|
||||
|
||||
Glib::ustring str_temp = "<span weight=\"bold\" size=\"larger\">" ;
|
||||
str_temp += String::ucompose( _("Manage flags on %1"), partition .get_path() ) ;
|
||||
str_temp += "</span>\n" ;
|
||||
get_vbox() ->pack_start( * Utils::mk_label( str_temp ), Gtk::PACK_SHRINK );
|
||||
|
||||
//setup treeview
|
||||
liststore_flags = Gtk::ListStore::create( treeview_flags_columns ) ;
|
||||
treeview_flags .set_model( liststore_flags ) ;
|
||||
treeview_flags .set_headers_visible( false ) ;
|
||||
|
||||
treeview_flags .append_column( "", treeview_flags_columns .status ) ;
|
||||
treeview_flags .append_column( "", treeview_flags_columns .flag ) ;
|
||||
static_cast<Gtk::CellRendererToggle *>( treeview_flags .get_column_cell_renderer( 0 ) )
|
||||
->property_activatable() = true ;
|
||||
static_cast<Gtk::CellRendererToggle *>( treeview_flags .get_column_cell_renderer( 0 ) )
|
||||
->signal_toggled() .connect( sigc::mem_fun( *this, &DialogManageFlags::on_flag_toggled ) ) ;
|
||||
|
||||
get_vbox() ->pack_start( treeview_flags, Gtk::PACK_SHRINK ) ;
|
||||
|
||||
this ->partition = partition ;
|
||||
|
||||
add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_OK ) ->grab_focus() ;
|
||||
|
||||
show_all_children() ;
|
||||
}
|
||||
|
||||
void DialogManageFlags::on_show()
|
||||
{
|
||||
Dialog::on_show() ;
|
||||
|
||||
while ( Gtk::Main::events_pending() )
|
||||
Gtk::Main::iteration() ;
|
||||
|
||||
load_flags() ;
|
||||
}
|
||||
|
||||
void DialogManageFlags::load_flags()
|
||||
{
|
||||
liststore_flags ->clear() ;
|
||||
|
||||
std::map<Glib::ustring, bool> flag_info = signal_get_flags .emit( partition ) ;
|
||||
|
||||
for ( std::map<Glib::ustring, bool>::iterator iter = flag_info .begin() ; iter != flag_info .end() ; ++iter )
|
||||
{
|
||||
row = *( liststore_flags ->append() ) ;
|
||||
row[ treeview_flags_columns .flag ] = iter ->first ;
|
||||
row[ treeview_flags_columns .status ] = iter ->second ;
|
||||
}
|
||||
}
|
||||
|
||||
void DialogManageFlags::on_flag_toggled( const Glib::ustring & path )
|
||||
{
|
||||
any_change = true ;
|
||||
|
||||
row = *( liststore_flags ->get_iter( path ) ) ;
|
||||
row[ treeview_flags_columns .status ] = ! row[ treeview_flags_columns .status ] ;
|
||||
|
||||
signal_toggle_flag .emit( partition, row[ treeview_flags_columns .flag ], row[ treeview_flags_columns .status ] ) ;
|
||||
|
||||
load_flags() ;
|
||||
}
|
||||
|
||||
}//GParted
|
|
@ -44,7 +44,7 @@ GParted_Core::GParted_Core()
|
|||
for ( PedPartitionFlag flag = ped_partition_flag_next( static_cast<PedPartitionFlag>( NULL ) ) ;
|
||||
flag ;
|
||||
flag = ped_partition_flag_next( flag ) )
|
||||
flags .push_back( flag ) ;
|
||||
flags .push_back( flag ) ;
|
||||
|
||||
//throw libpartedversion to the stdout to see which version is actually used.
|
||||
std::cout << "======================" << std::endl ;
|
||||
|
@ -769,14 +769,14 @@ const std::vector<FS> & GParted_Core::get_filesystems() const
|
|||
|
||||
const FS & GParted_Core::get_fs( GParted::FILESYSTEM filesystem ) const
|
||||
{
|
||||
for ( unsigned int t = 0 ; t < FILESYSTEMS .size( ) ; t++ )
|
||||
for ( unsigned int t = 0 ; t < FILESYSTEMS .size() ; t++ )
|
||||
if ( FILESYSTEMS[ t ] .filesystem == filesystem )
|
||||
return FILESYSTEMS[ t ] ;
|
||||
|
||||
return FILESYSTEMS .back( ) ;
|
||||
return FILESYSTEMS .back() ;
|
||||
}
|
||||
|
||||
std::vector<Glib::ustring> GParted_Core::get_disklabeltypes( )
|
||||
std::vector<Glib::ustring> GParted_Core::get_disklabeltypes()
|
||||
{
|
||||
std::vector<Glib::ustring> disklabeltypes ;
|
||||
|
||||
|
@ -800,7 +800,63 @@ std::vector<Glib::ustring> GParted_Core::get_all_mountpoints()
|
|||
|
||||
return mountpoints ;
|
||||
}
|
||||
|
||||
std::map<Glib::ustring, bool> GParted_Core::get_available_flags( const Partition & partition )
|
||||
{
|
||||
std::map<Glib::ustring, bool> flag_info ;
|
||||
|
||||
if ( open_device_and_disk( partition .device_path ) )
|
||||
{
|
||||
lp_partition = NULL ;
|
||||
if ( partition .type == GParted::TYPE_EXTENDED )
|
||||
lp_partition = ped_disk_extended_partition( lp_disk ) ;
|
||||
else
|
||||
lp_partition = ped_disk_get_partition_by_sector(
|
||||
lp_disk,
|
||||
(partition .sector_end + partition .sector_start) / 2 ) ;
|
||||
|
||||
if ( lp_partition )
|
||||
{
|
||||
for ( unsigned int t = 0 ; t < flags .size() ; t++ )
|
||||
if ( ped_partition_is_flag_available( lp_partition, flags[ t ] ) )
|
||||
flag_info[ ped_partition_flag_get_name( flags[ t ] ) ] =
|
||||
ped_partition_get_flag( lp_partition, flags[ t ] ) ;
|
||||
}
|
||||
|
||||
close_device_and_disk() ;
|
||||
}
|
||||
|
||||
return flag_info ;
|
||||
}
|
||||
|
||||
bool GParted_Core::toggle_flag( const Partition & partition, const Glib::ustring & flag, bool state )
|
||||
{
|
||||
bool succes = false ;
|
||||
|
||||
if ( open_device_and_disk( partition .device_path ) )
|
||||
{
|
||||
lp_partition = NULL ;
|
||||
if ( partition .type == GParted::TYPE_EXTENDED )
|
||||
lp_partition = ped_disk_extended_partition( lp_disk ) ;
|
||||
else
|
||||
lp_partition = ped_disk_get_partition_by_sector(
|
||||
lp_disk,
|
||||
(partition .sector_end + partition .sector_start) / 2 ) ;
|
||||
|
||||
if ( lp_partition )
|
||||
{
|
||||
PedPartitionFlag lp_flag = ped_partition_flag_get_by_name( flag .c_str() ) ;
|
||||
|
||||
if ( lp_flag > 0 && ped_partition_set_flag( lp_partition, lp_flag, state ) )
|
||||
succes = commit() ;
|
||||
}
|
||||
|
||||
close_device_and_disk() ;
|
||||
}
|
||||
|
||||
return succes ;
|
||||
}
|
||||
|
||||
void GParted_Core::LP_Set_Used_Sectors( Partition & partition )
|
||||
{
|
||||
PedFileSystem *fs = NULL;
|
||||
|
@ -1104,7 +1160,8 @@ bool GParted_Core::resize_normal_using_libparted( const Partition & partition_ol
|
|||
void GParted_Core::set_flags( Partition & partition )
|
||||
{
|
||||
for ( unsigned int t = 0 ; t < flags .size() ; t++ )
|
||||
if ( ped_partition_get_flag( lp_partition, flags[ t ] ) )
|
||||
if ( ped_partition_is_flag_available( lp_partition, flags[ t ] ) &&
|
||||
ped_partition_get_flag( lp_partition, flags[ t ] ) )
|
||||
partition .flags .push_back( ped_partition_flag_get_name( flags[ t ] ) ) ;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ gparted_SOURCES = \
|
|||
Dialog_Partition_New.cc \
|
||||
Dialog_Partition_Resize_Move.cc \
|
||||
Dialog_Progress.cc \
|
||||
DialogManageFlags.cc \
|
||||
DrawingAreaVisualDisk.cc \
|
||||
FileSystem.cc \
|
||||
Frame_Resizer_Base.cc \
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "../include/Dialog_Partition_Copy.h"
|
||||
#include "../include/Dialog_Partition_New.h"
|
||||
#include "../include/Dialog_Partition_Info.h"
|
||||
#include "../include/DialogManageFlags.h"
|
||||
#include "../include/OperationCopy.h"
|
||||
#include "../include/OperationCreate.h"
|
||||
#include "../include/OperationDelete.h"
|
||||
|
@ -262,7 +263,13 @@ void Win_GParted::init_partition_menu()
|
|||
menu_partition .items() .push_back(
|
||||
Gtk::Menu_Helpers::MenuElem( _("mount on"), * manage( new Gtk::Menu() ) ) ) ;
|
||||
|
||||
menu_partition .items() .push_back( Gtk::Menu_Helpers::SeparatorElem() );
|
||||
menu_partition .items() .push_back( Gtk::Menu_Helpers::SeparatorElem() ) ;
|
||||
|
||||
menu_partition .items() .push_back(
|
||||
Gtk::Menu_Helpers::MenuElem( _("manage flags"),
|
||||
sigc::mem_fun( *this, &Win_GParted::activate_manage_flags ) ) );
|
||||
|
||||
menu_partition .items() .push_back( Gtk::Menu_Helpers::SeparatorElem() ) ;
|
||||
|
||||
menu_partition .items() .push_back(
|
||||
Gtk::Menu_Helpers::StockMenuElem( Gtk::Stock::DIALOG_INFO,
|
||||
|
@ -724,7 +731,7 @@ void Win_GParted::set_valid_operations()
|
|||
{
|
||||
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_info( false ) ;
|
||||
allow_manage_flags( false ) ; allow_info( false ) ;
|
||||
|
||||
dynamic_cast<Gtk::Label*>(menu_partition .items()[ 10 ] .get_child() ) ->set_label( _("unmount") ) ;
|
||||
menu_partition .items()[ 10 ] .show() ;
|
||||
|
@ -736,6 +743,10 @@ void Win_GParted::set_valid_operations()
|
|||
|
||||
//if there's something, there's some info ;)
|
||||
allow_info( true ) ;
|
||||
|
||||
//flag managing..
|
||||
if ( selected_partition .type != GParted::TYPE_UNALLOCATED && selected_partition .status == GParted::STAT_REAL )
|
||||
allow_manage_flags( true ) ;
|
||||
|
||||
//deal with swap...
|
||||
if ( selected_partition .filesystem == GParted::FS_LINUX_SWAP )
|
||||
|
@ -754,7 +765,7 @@ void Win_GParted::set_valid_operations()
|
|||
dynamic_cast<Gtk::Label*>(menu_partition .items()[ 10 ] .get_child() )
|
||||
->set_label( _("swapon") ) ;
|
||||
}
|
||||
|
||||
|
||||
//only unmount is allowed (if ! extended)
|
||||
if ( selected_partition .busy )
|
||||
{
|
||||
|
@ -794,8 +805,8 @@ void Win_GParted::set_valid_operations()
|
|||
allow_delete( true ) ;
|
||||
|
||||
if ( ! devices[ current_device ] .readonly )
|
||||
allow_resize( true );
|
||||
|
||||
allow_resize( true ) ;
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
@ -1658,6 +1669,23 @@ void Win_GParted::activate_disklabel()
|
|||
menu_gparted_refresh_devices() ;
|
||||
}
|
||||
}
|
||||
|
||||
void Win_GParted::activate_manage_flags()
|
||||
{
|
||||
DialogManageFlags dialog( selected_partition ) ;
|
||||
dialog .set_transient_for( *this ) ;
|
||||
|
||||
dialog .signal_get_flags .connect(
|
||||
sigc::mem_fun( &gparted_core, &GParted_Core::get_available_flags ) ) ;
|
||||
dialog .signal_toggle_flag .connect(
|
||||
sigc::mem_fun( &gparted_core, &GParted_Core::toggle_flag ) ) ;
|
||||
|
||||
dialog .run() ;
|
||||
dialog .hide() ;
|
||||
|
||||
if ( dialog .any_change )
|
||||
menu_gparted_refresh_devices() ;
|
||||
}
|
||||
|
||||
void Win_GParted::activate_undo()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue