gparted/src/Dialog_Partition_Copy.cc

97 lines
3.5 KiB
C++
Raw Normal View History

2004-09-19 14:24:53 -06:00
/* 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/Dialog_Partition_Copy.h"
namespace GParted
{
Dialog_Partition_Copy::Dialog_Partition_Copy( const FS & fs, long cylinder_size )
2004-09-19 14:24:53 -06:00
{
this ->fs = fs ;
BUF = cylinder_size ;
2004-09-19 14:24:53 -06:00
Set_Resizer( false ) ;
Set_Confirm_Button( PASTE ) ;
}
void Dialog_Partition_Copy::Set_Data( const Partition & selected_partition, const Partition & copied_partition )
2004-09-19 14:24:53 -06:00
{
this ->set_title( String::ucompose( _("Paste %1"), copied_partition .partition ) ) ;
2004-09-19 14:24:53 -06:00
//set partition color
frame_resizer_base ->set_rgb_partition_color( copied_partition .color ) ;
//set some widely used values...
START = selected_partition .sector_start ;
total_length = selected_partition .sector_end - selected_partition .sector_start ;
TOTAL_MB = selected_partition .Get_Length_MB( ) ;
MB_PER_PIXEL = (double) TOTAL_MB / 500 ;
long COPIED_LENGTH_MB = copied_partition .Get_Length_MB( ) ;
2004-09-19 14:24:53 -06:00
//now calculate proportional length of partition
frame_resizer_base ->set_x_start( 0 ) ;
int x_end = Round( COPIED_LENGTH_MB / ( (double)TOTAL_MB/500 ) ) ; //> 500 px only possible with xfs...
frame_resizer_base ->set_x_end( x_end > 500 ? 500 : x_end ) ;
frame_resizer_base ->set_used( Round( copied_partition .Get_Used_MB( ) / ( (double)TOTAL_MB/500) ) ) ;
fs .MAX = ( ! fs .MAX || fs .MAX > TOTAL_MB ) ? TOTAL_MB : fs .MAX -= BUF ;
if ( fs .filesystem == "xfs" ) //bit hackisch, but most effective, since it's a unique situation
fs .MIN = copied_partition .Get_Used_MB( ) + (BUF * 2) ;
else
fs .MIN = COPIED_LENGTH_MB +1 ;
GRIP = true ;
2004-09-19 14:24:53 -06:00
//set values of spinbutton_before
spinbutton_before .set_range( 0, TOTAL_MB - fs .MIN ) ;
2004-09-19 14:24:53 -06:00
spinbutton_before .set_value( 0 ) ;
//set values of spinbutton_size
spinbutton_size .set_range( fs .MIN, fs .MAX ) ;
spinbutton_size .set_value( COPIED_LENGTH_MB ) ;
2004-09-19 14:24:53 -06:00
//set values of spinbutton_after
spinbutton_after .set_range( 0, TOTAL_MB - fs .MIN ) ;
spinbutton_after .set_value( TOTAL_MB - COPIED_LENGTH_MB ) ;
GRIP = false ;
2004-09-19 14:24:53 -06:00
frame_resizer_base ->set_size_limits( (int) ( fs .MIN / MB_PER_PIXEL), (int) (fs .MAX / MB_PER_PIXEL) +1 ) ;
2004-09-19 14:24:53 -06:00
//set contents of label_minmax
Set_MinMax_Text( fs .MIN, fs .MAX ) ;
2004-09-19 14:24:53 -06:00
//set global selected_partition (see Dialog_Base_Partition::Get_New_Partition )
this ->selected_partition = copied_partition ;
this ->selected_partition .inside_extended = selected_partition .inside_extended ;
2004-09-19 14:24:53 -06:00
selected_partition .inside_extended ? this ->selected_partition .type = GParted::LOGICAL : this ->selected_partition .type = GParted::PRIMARY ;
}
2004-09-25 08:12:07 -06:00
Partition Dialog_Partition_Copy::Get_New_Partition()
{
//first call baseclass to get the correct new partition
selected_partition = Dialog_Base_Partition::Get_New_Partition() ;
//set proper name and status for partition
selected_partition.status = GParted::STAT_COPY ;
return selected_partition ;
}
2004-09-19 14:24:53 -06:00
} //GParted