Author: kmachalkova
Date: Wed Oct 1 13:55:10 2008
New Revision: 51735
URL: http://svn.opensuse.org/viewcvs/yast?rev=51735&view=rev
Log:
Resizing the partitions, this time for real
Modified:
trunk/storage/storage/src/include/ep-dialogs.ycp
trunk/storage/storage/src/include/ep-hd-dialogs.ycp
trunk/storage/storage/src/include/ep-hd-lib.ycp
Modified: trunk/storage/storage/src/include/ep-dialogs.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/storage/src/include/ep-dialogs.ycp?rev=51735&r1=51734&r2=51735&view=diff
==============================================================================
--- trunk/storage/storage/src/include/ep-dialogs.ycp (original)
+++ trunk/storage/storage/src/include/ep-dialogs.ycp Wed Oct 1 13:55:10 2008
@@ -423,7 +423,7 @@
}
//data i.e. partition
- map DlgResize(map &data , map disk, symbol flavour)
+ boolean DlgResize(map &data , map disk, symbol flavour)
{
integer cyl_size = disk["cyl_size"]:1;
integer free_cyl_after = Storage::FreeCylAfter( disk, data);
@@ -442,10 +442,9 @@
integer used = 0;
integer free = 0;
integer total = 0;
- //leave this 5 for now, will be different for Windows
integer min_free = 5;
- // Unit for partition resizing - currently Megabytes
+ // Unit for partition resizing
string unit = _("MB");
integer factor = 1024*1024;
@@ -453,6 +452,23 @@
string field_label_free = "";
string field_label_vg_free = "";
+ //Depending on size of the partition,
+ //set correct division factor and units
+ void AdjustUnits ( map size_data )
+ {
+
+ //for partitions with free space less than ~10GB we'll
+ //keep using MBs to allow fine-grained
+ //size adjusting
+ if( size_data["df_free"]:0 > 10*1024*factor )
+ {
+ factor = factor * 1024;
+ unit = _("GB");
+ }
+
+ min_free = (factor==1024*1024) ? 5 : 1;
+ }
+
map AdjustSwapPartitionDf ( map size_data)
{
map ret = size_data;
@@ -462,6 +478,11 @@
return ret;
}
+ integer ToUI (integer i)
+ {
+ return i / factor;
+ }
+
list <string> BarGraphLabels()
{
string used = "";
@@ -500,20 +521,14 @@
heading = sformat(_("Resize Partition %1"), device);
map size_data = Storage::GetFreeSpace( device, 0, used_fs, true);
- y2internal("zirafa %1 %2", size_data["used"]:0, size_data["df_free"]:0);
-
- if( size_data["df_free"]:0 > 15*1024*factor )
- {
- factor = factor * 1024;
- unit = _("GB");
- }
+ AdjustUnits( size_data );
if ( Partitions::IsSwapPartition( fsid ) )
size_data = AdjustSwapPartitionDf( size_data );
- used = size_data["used"]:0 / factor;
- free = size_data["df_free"]:0 / factor;
- av_space = av_space / factor;
+ used = ToUI( size_data["used"]:0 );
+ free = ToUI( size_data["df_free"]:0 );
+ av_space =ToUI( av_space );
total = used + free + av_space;
// TODO: see texts in inst_custom_part.ycp
@@ -558,8 +573,8 @@
content,
`Left(`Label( `id(`free), sformat(_("Free Space Remaining: %1 MB"), free ))),
`VSpacing(1.0),
- `Left(`Label( sformat(_("Minimum Partition Size: %1 MB"), used + min_free ))),
- `Left(`Label( sformat(_("Maximum Partition Size: %1 MB"), total ))),
+ `Left(`Label( sformat(_("Minimum Partition Size: %1 %2"), used + min_free, unit ))),
+ `Left(`Label( sformat(_("Maximum Partition Size: %1 %2"), total, unit ))),
//`PartitionSplitter(lv_used, free, vg_free, vg_min_free, lv_min_free,
// bargraph_label_used, bargraph_label_free,
// bargraph_label_vg_free, field_label_free,
@@ -573,23 +588,47 @@
);
any widget = nil;
+ integer new_size = -1;
+ integer old_size = used + free;
+
do {
widget = UI::UserInput();
- if (widget == `new_size)
- {
- integer new_size = (integer) UI::QueryWidget(`id(`new_size), `Value);
- integer new_free = new_size - used ;
- UI::ChangeWidget(`id(`graph), `Values, [ used, new_free, total - (new_free + used) ]);
- UI::ChangeWidget(`id(`free), `Value, sformat(_("Free Space Remaining: %1 MB"), new_free));
+ switch ( (symbol) widget)
+ {
+ case `new_size:
+ {
+ new_size = (integer) UI::QueryWidget(`id(`new_size), `Value);
+ integer new_free = new_size - used ;
+ UI::ChangeWidget(`id(`graph), `Values, [ used, new_free, total - (new_free + used) ]);
+ UI::ChangeWidget(`id(`free), `Value, sformat(_("Free Space Remaining: %1 %2"), new_free, unit));
+ break;
+ }
+ case `ok:
+ {
+ if ( new_size != old_size )
+ {
+ //mark partition for resizing
+ data["resize"] = true;
+ //calculate the difference
+ list old_reg = data["region"]:[];
+ list new_reg = [ data["region",0]:0, PartedSizeToCly( (tofloat(new_size*factor)), cyl_size ) ];
+
+ integer diff = old_reg[1]:0 - new_reg[1]:0;
+ y2internal("snehulak %1", diff);
+ data["region"] = new_reg;
+ }
+ break;
+ }
+ case `cancel:
+ break;
}
} while ( widget != `cancel && widget != `ok);
UI::CloseDialog();
- return $[ `widget : widget,
- `size : 42 ];
+ return ( widget == `ok);
}
Modified: trunk/storage/storage/src/include/ep-hd-dialogs.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/storage/src/include/ep-hd-dialogs.ycp?rev=51735&r1=51734&r2=51735&view=diff
==============================================================================
--- trunk/storage/storage/src/include/ep-hd-dialogs.ycp (original)
+++ trunk/storage/storage/src/include/ep-hd-dialogs.ycp Wed Oct 1 13:55:10 2008
@@ -275,8 +275,8 @@
}
- void DlgResizePartition( map data, map disk )
+ boolean DlgResizePartition( map &data, map disk )
{
- DlgResize(data, disk, `part);
+ return DlgResize(data, disk, `part);
}
}
Modified: trunk/storage/storage/src/include/ep-hd-lib.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/storage/src/include/ep-hd-lib.ycp?rev=51735&r1=51734&r2=51735&view=diff
==============================================================================
--- trunk/storage/storage/src/include/ep-hd-lib.ycp (original)
+++ trunk/storage/storage/src/include/ep-hd-lib.ycp Wed Oct 1 13:55:10 2008
@@ -260,7 +260,11 @@
}
//Need to pass data on the whole disk, to determine free/available space
- DlgResizePartition(data, disk);
+ if ( DlgResizePartition(data, disk) )
+ {
+ target_map = Storage::SetPartition( target_map, data );
+ Storage::SetTargetMap( target_map );
+ }
}
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org