fixed a few issues with selecting/activating partitions. improved support

* include/DrawingAreaVisualDisk.h,
  src/DrawingAreaVisualDisk.cc: fixed a few issues with
  selecting/activating partitions.
* include/Utils.h,
  src/Utils.cc,
  src/Dialog_Disklabel.cc,
  src/Dialog_Partition_Info.cc (mk_label): improved support for
  aligment.
* src/Win_GParted.cc: fixed a small alignmentissue in the devices
  submenu.
This commit is contained in:
Bart Hakvoort 2006-03-20 10:12:55 +00:00
parent ad9f2126e7
commit c3c5f189ed
8 changed files with 75 additions and 68 deletions

View File

@ -1,3 +1,16 @@
2006-03-20 Bart Hakvoort <hakvoort@cvs.gnome.org>
* include/DrawingAreaVisualDisk.h,
src/DrawingAreaVisualDisk.cc: fixed a few issues with
selecting/activating partitions.
* include/Utils.h,
src/Utils.cc,
src/Dialog_Disklabel.cc,
src/Dialog_Partition_Info.cc (mk_label): improved support for
aligment.
* src/Win_GParted.cc: fixed a small alignmentissue in the devices
submenu.
2006-03-19 Bart Hakvoort <hakvoort@cvs.gnome.org>
* include/GParted_Core.h,

View File

@ -57,8 +57,8 @@ private:
void draw_partition( const visual_partition & vp ) ;
void draw_partitions( const std::vector<visual_partition> & visual_partitions ) ;
bool set_selected( std::vector<visual_partition> & visual_partitions, int x, int y ) ;
void set_selected( std::vector<visual_partition> & visual_partitions, const Partition & partition ) ;
void set_selected( const std::vector<visual_partition> & visual_partitions, int x, int y ) ;
void set_selected( const std::vector<visual_partition> & visual_partitions, const Partition & partition ) ;
int spreadout_leftover_px( std::vector<visual_partition> & visual_partitions, int pixels ) ;
void free_colors( std::vector<visual_partition> & visual_partitions ) ;
@ -82,8 +82,6 @@ private:
int y_used_unused_start, used_unused_height ;
int x_text, y_text ;
bool selected ;
Gdk::Color color ;
Glib::RefPtr<Pango::Layout> pango_layout;
@ -102,8 +100,6 @@ private:
y_used_unused_start = used_unused_height =
x_text = y_text = 0 ;
selected = false ;
pango_layout .clear() ;
logicals .clear() ;
}
@ -116,7 +112,7 @@ private:
};
std::vector<visual_partition> visual_partitions ;
visual_partition selected_vp ;
const visual_partition * selected_vp ;
int TOT_SEP, MIN_SIZE ;
Glib::RefPtr<Gdk::GC> gc;

View File

@ -114,7 +114,7 @@ public:
static Sector Round( double double_value ) ;
static Gtk::Label * mk_label( const Glib::ustring & text,
bool use_markup = true,
bool align_left = true,
Gtk::AlignmentEnum alignment = Gtk::ALIGN_LEFT,
bool wrap = false,
const Glib::ustring & text_color = "black" ) ;
static Glib::ustring num_to_str( Sector number, bool use_C_locale = false ) ;

View File

@ -51,7 +51,7 @@ Dialog_Disklabel::Dialog_Disklabel( const Glib::ustring & device_path, const std
str_temp += "\n\n" ;
str_temp += _("By default GParted creates an msdos disklabel.") ;
str_temp += "\n" ;
vbox ->pack_start( * Utils::mk_label( str_temp, true, true, true ), Gtk::PACK_SHRINK );
vbox ->pack_start( * Utils::mk_label( str_temp, true, Gtk::ALIGN_LEFT, true ), Gtk::PACK_SHRINK );
//advanced
str_temp = "<b>" ;

View File

@ -49,7 +49,7 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
Gtk::PACK_SHRINK ) ;
frame ->set_label_widget( *hbox ) ;
frame ->add( * Utils::mk_label( "<i>" + partition.error + "</i>", true, true, true ) ) ;
frame ->add( * Utils::mk_label( "<i>" + partition.error + "</i>", true, Gtk::ALIGN_LEFT, true ) ) ;
this ->get_vbox() ->pack_start( *frame, Gtk::PACK_SHRINK ) ;
}

View File

@ -54,6 +54,7 @@ void DrawingAreaVisualDisk::load_partitions( const std::vector<Partition> & part
void DrawingAreaVisualDisk::set_selected( const Partition & partition )
{
selected_vp = NULL ;
set_selected( visual_partitions, partition ) ;
queue_draw() ;
@ -63,6 +64,7 @@ void DrawingAreaVisualDisk::clear()
{
free_colors( visual_partitions ) ;
visual_partitions .clear() ;
selected_vp = NULL ;
queue_resize() ;
}
@ -210,7 +212,7 @@ void DrawingAreaVisualDisk::draw_partition( const visual_partition & vp )
get_window() ->draw_rectangle( gc,
true,
vp .x_start,
vp .y_start,
vp .y_start,
vp .length,
vp .height );
@ -247,18 +249,6 @@ void DrawingAreaVisualDisk::draw_partition( const visual_partition & vp )
vp .y_text,
vp .pango_layout ) ;
}
//selection
if ( vp .selected )
{
gc ->set_foreground( color_used ) ;
get_window() ->draw_rectangle( gc,
false,
vp .x_start + BORDER/2 ,
vp .y_start + BORDER/2 ,
vp .length - BORDER,
vp .height - BORDER ) ;
}
}
void DrawingAreaVisualDisk::draw_partitions( const std::vector<visual_partition> & visual_partitions )
@ -272,45 +262,34 @@ void DrawingAreaVisualDisk::draw_partitions( const std::vector<visual_partition>
}
}
bool DrawingAreaVisualDisk::set_selected( std::vector<visual_partition> & visual_partitions, int x, int y )
void DrawingAreaVisualDisk::set_selected( const std::vector<visual_partition> & visual_partitions, int x, int y )
{
bool found = false ;
for ( unsigned int t = 0 ; t < visual_partitions .size() ; t++ )
for ( unsigned int t = 0 ; t < visual_partitions .size() && ! selected_vp ; t++ )
{
if ( visual_partitions[ t ] .x_start <= x &&
if ( visual_partitions[ t ] .logicals .size() > 0 )
set_selected( visual_partitions[ t ] .logicals, x, y ) ;
if ( ! selected_vp &&
visual_partitions[ t ] .x_start <= x &&
x < visual_partitions[ t ] .x_start + visual_partitions[ t ] .length &&
visual_partitions[ t ] .y_start <= y &&
y < visual_partitions[ t ] .y_start + visual_partitions[ t ] .height )
{
visual_partitions[ t ] .selected = true ;
selected_vp = visual_partitions[ t ] ;
found = true ;
selected_vp = & visual_partitions[ t ] ;
}
else
visual_partitions[ t ] .selected = false ;
if ( visual_partitions[ t ] .logicals .size() > 0 )
visual_partitions[ t ] .selected &= ! set_selected( visual_partitions[ t ] .logicals, x, y ) ;
}
return found ;
}
void DrawingAreaVisualDisk::set_selected( std::vector<visual_partition> & visual_partitions, const Partition & partition )
void DrawingAreaVisualDisk::set_selected( const std::vector<visual_partition> & visual_partitions,
const Partition & partition )
{
for ( unsigned int t = 0 ; t < visual_partitions .size() ; t++ )
for ( unsigned int t = 0 ; t < visual_partitions .size() && ! selected_vp ; t++ )
{
if ( visual_partitions[ t ] .partition == partition )
{
visual_partitions[ t ] .selected = true ;
selected_vp = visual_partitions[ t ] ;
}
else
visual_partitions[ t ] .selected = false ;
if ( visual_partitions[ t ] .logicals .size() > 0 )
set_selected( visual_partitions[ t ] .logicals, partition ) ;
if ( ! selected_vp && visual_partitions[ t ] .partition == partition )
selected_vp = & visual_partitions[ t ] ;
}
}
@ -330,6 +309,18 @@ bool DrawingAreaVisualDisk::on_expose_event( GdkEventExpose * event )
bool ret_val = Gtk::DrawingArea::on_expose_event( event ) ;
draw_partitions( visual_partitions ) ;
//selection
if ( selected_vp )
{
gc ->set_foreground( color_used ) ;
get_window() ->draw_rectangle( gc,
false,
selected_vp ->x_start + BORDER/2 ,
selected_vp ->y_start + BORDER/2 ,
selected_vp ->length - BORDER,
selected_vp ->height - BORDER ) ;
}
return ret_val ;
}
@ -338,17 +329,20 @@ bool DrawingAreaVisualDisk::on_button_press_event( GdkEventButton * event )
{
bool ret_val = Gtk::DrawingArea::on_button_press_event( event ) ;
selected_vp = NULL ;
set_selected( visual_partitions, static_cast<int>( event ->x ), static_cast<int>( event ->y ) ) ;
queue_draw() ;
signal_partition_selected .emit( selected_vp .partition, false ) ;
if ( event ->type == GDK_2BUTTON_PRESS ) //FIXME: only emit the signal if a partition was selected
//right now it's possible to 'activate' a seperator.
signal_partition_activated .emit() ;
else if ( event ->button == 3 )
signal_popup_menu .emit( event ->button, event ->time ) ;
if ( selected_vp )
{
signal_partition_selected .emit( selected_vp ->partition, false ) ;
if ( event ->type == GDK_2BUTTON_PRESS )
signal_partition_activated .emit() ;
else if ( event ->button == 3 )
signal_popup_menu .emit( event ->button, event ->time ) ;
}
return ret_val ;
}

View File

@ -30,13 +30,11 @@ Sector Utils::Round( double double_value )
Gtk::Label * Utils::mk_label( const Glib::ustring & text,
bool use_markup,
bool align_left,
Gtk::AlignmentEnum alignment,
bool wrap,
const Glib::ustring & text_color )
{
Gtk::Label * label = manage( new Gtk::Label( text,
align_left ? Gtk::ALIGN_LEFT : Gtk::ALIGN_CENTER,
Gtk::ALIGN_TOP ) ) ;
Gtk::Label * label = manage( new Gtk::Label( text, alignment, Gtk::ALIGN_TOP ) ) ;
label ->set_use_markup( use_markup ) ;
label ->set_line_wrap( wrap ) ;
@ -44,7 +42,7 @@ Gtk::Label * Utils::mk_label( const Glib::ustring & text,
if ( text_color != "black" )
{
Gdk::Color color( text_color ) ;
label ->modify_fg( label ->get_state( ), color ) ;
label ->modify_fg( label ->get_state(), color ) ;
}
return label ;
@ -55,7 +53,7 @@ Glib::ustring Utils::num_to_str( Sector number, bool use_C_locale )
std::stringstream ss ;
//ss.imbue( std::locale( use_C_locale ? "C" : "" ) ) ; see #157871
ss << number ;
return ss .str( ) ;
return ss .str() ;
}
//use http://developer.gnome.org/projects/gup/hig/2.0/design.html#Palette as a starting point..

View File

@ -444,20 +444,26 @@ void Win_GParted::refresh_combo_devices()
treerow[ treeview_devices_columns .size ] = "(" + Utils::format_size( devices[ i ] .length ) + ")" ;
//devices submenu....
menu ->items() .push_back( Gtk::Menu_Helpers::RadioMenuElem(
radio_group,
devices[ i ] .get_path() + "\t(" + Utils::format_size( devices[ i ] .length ) + ")",
sigc::bind<unsigned int>( sigc::mem_fun(*this, &Win_GParted::radio_devices_changed), i ) ) ) ;
hbox = manage( new Gtk::HBox() ) ;
hbox ->pack_start( * Utils::mk_label( devices[ i ] .get_path() ), Gtk::PACK_SHRINK ) ;
hbox ->pack_start( * Utils::mk_label( " (" + Utils::format_size( devices[ i ] .length ) + ")",
true,
Gtk::ALIGN_RIGHT ),
Gtk::PACK_EXPAND_WIDGET ) ;
//FIXME: the (size) needs the be rightaligned while the path should remain left-aligned
//i guess this takes 2 labels to achieve..
menu ->items() .push_back( * manage( new Gtk::RadioMenuItem( radio_group ) ) ) ;
menu ->items() .back() .add( *hbox ) ;
menu ->items() .back() .signal_activate() .connect(
sigc::bind<unsigned int>( sigc::mem_fun(*this, &Win_GParted::radio_devices_changed), i ) ) ;
}
menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .remove_submenu() ;
if ( menu ->items() .size() )
{
menu ->show_all() ;
menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .set_submenu( *menu ) ;
}
combo_devices .set_active( current_device ) ;
}