home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / include / partitioning / auto_part_ui.ycp < prev    next >
Text File  |  2006-11-29  |  9KB  |  293 lines

  1. /**
  2.  * Module:         auto_part_ui.ycp
  3.  *
  4.  * Authors:         Andreas Schwab (schwab@suse.de)
  5.  *            Klaus KΣmpf (kkaempf@suse.de)
  6.  *
  7.  * Purpose:         This module contains the user interface
  8.  *            definitions for the automatic partitioner
  9.  *
  10.  *
  11.  *
  12.  * $Id: auto_part_ui.ycp 33868 2006-10-30 15:35:53Z fehr $
  13.  *
  14.  * used globals:
  15.  *
  16.  * defined functions
  17.     global define display_error_box (string reason) ``{
  18.     global define warn_not_bootable () ``{
  19.     global define partition_text (integer nr, map pentry) ``{
  20.     global define ask_free_space ()
  21.     global define construct_partition_dialog ()
  22.     global define open_auto_dialog (string targetname, term targetbox) ``{
  23.     global define create_resize_dialog (list partitions) ``{
  24.  */
  25. {
  26.     textdomain "storage";
  27.  
  28.     import "Wizard";
  29.     import "Partitions";
  30.     import "Report";
  31.  
  32.     include "partitioning/partition_defines.ycp";
  33.     import "Popup";
  34.     import "Product";
  35.  
  36.     // --------------------------------------------------------------
  37.     // warning and pop-ups
  38.  
  39. define void display_error_box (string reason) ``{
  40.     // There is a consistency check for the selection. Next is the message, that
  41.     // is displayed. The reason is determined within this consistency check and
  42.     // then the message is passed through this interface transparently
  43.     string text = sformat(_("The current selection is invalid:\n%1"), reason);
  44.     Popup::Message(text);
  45.     };
  46.  
  47. define void warn_not_bootable () ``{
  48.       // This is a warning message that pops up when the selection does not
  49.       // include a bootable disk region (< 1024 cylinders).
  50.       Report::Warning(sformat(_("With the current partitioning, your %2 installation
  51. cannot be booted directly, because your /boot partition 
  52. is above cylinder %1.
  53. "), Partitions::BootCyl(), Product::name) );
  54.     };
  55.  
  56.  
  57.     // Return a text that describes a partition
  58.  
  59. define string partition_text (integer nr, map pentry, integer bps) 
  60.     ``{
  61.     string size_str = ByteToHumanString(size_of_region( pentry["region"]:[], bps));
  62.     if( pentry["type"]:`unknown == `free)
  63.         // list of partition checkboxes: show partition as unassigned
  64.     // e.g. "1:    2 GB, unassigned"
  65.         return sformat( _("&%1:    %2, unassigned"), nr, size_str );
  66.     else
  67.     // list of partition checkboxes: show partition as assigned
  68.     return sformat( "&%1:    %2, %3 (%4)", nr, size_str,
  69.             pentry["fstype"]:"", pentry["device"]:"" );
  70.     };
  71.  
  72. define boolean ask_free_space () ``{
  73.     // we found an unassigned partition which is large enough for a minimal installation
  74.     return Popup::YesNo(sformat(_("There is free space on the selected disk.
  75. Use this for %1?
  76. "),Product::name));
  77.     };
  78.  
  79. define map construct_partition_dialog( list<map> partitions, string ptype, 
  80.                        integer bps )
  81.     ``{
  82.     term vbox_contents = 
  83.     `VBox(  // Message between the full name of the hard disk to use
  84.             // and the "Use entire hard disk" button
  85.         // - please avoid excessively long lines - rather, include a newline
  86.         `Left( `Label (sformat(_("Disk Areas to Use
  87. to Install %1
  88. "),Product::name))),
  89.         `VSpacing(0.3)
  90.          );
  91.  
  92.     // Add option to select the entire disk at once
  93.     vbox_contents = 
  94.     add( vbox_contents,
  95.          // pushbutton to choose the entire disk, erasing all data on 
  96.          // the disk this is an easy way to select all partitions on 
  97.          // the target disk
  98.          `Left(`PushButton (`id (`full), _("Use &entire hard disk"))));
  99.  
  100.     vbox_contents = add (vbox_contents, `VSpacing(0.5) );
  101.  
  102.     integer i = 0;
  103.     integer ui_id = 0;
  104.     foreach( map pentry, partitions, 
  105.     ``{
  106.     symbol ptype = pentry["type"]:`unknown;
  107.     if (ptype != `extended) 
  108.         {
  109.         // skip #3 on AlphaBSD and SparcBSD
  110.         if( pentry["fsid"]:0 != Partitions::fsid_mac_hidden &&
  111.         ((ptype!=`bsd && ptype!=`sun) || pentry["nr"]:0 != 3) &&
  112.         !pentry["create"]:false) 
  113.         {
  114.         ui_id = pentry["ui_id"]:0;
  115.         i = i + 1;
  116.         boolean sel = pentry["delete"]:false || ptype==`free;
  117.         vbox_contents = add (vbox_contents,
  118.                  `Left(`CheckBox (`id (ui_id),
  119.                           partition_text(i, pentry, bps),
  120.                           sel)));
  121.         }
  122.         }
  123.     });
  124.     return $[ "term": vbox_contents, "high_id": ui_id ];
  125.     };
  126.  
  127. define term create_whole_disk_dialog () ``{
  128.     // There were no prior partitions on this disk.
  129.     // No partitions to choose from will be displayed.
  130.     return (`VBox(`Left(`Label( sformat(_("There are no partitions on this disk yet.
  131. The entire disk will be used for %1."),Product::name)))));
  132.     };
  133.  
  134. define term create_resize_dialog (list<map> partitions, integer bps) 
  135.     ``{
  136.     // popup text
  137.     string explanation = _("This disk appears to be used by Windows.
  138. There is not enough space to install Linux.");
  139.     
  140.     return (`VBox(
  141.            `RadioButtonGroup (
  142.           `HBox(
  143.             `HSpacing(1.5),
  144.             `VBox (
  145.                    `Left(`Label( explanation )),
  146.                    `VSpacing(0.5),
  147.                    `Left (`RadioButton (`id (`part_id),
  148.                             // Radio button for using an entire (Windows) partition for Linux
  149.                             _("&Delete Windows completely") ) ),
  150.                    `VSpacing(0.5),
  151.                    `Left (`RadioButton (`id (`resize),
  152.                             // Radio button for resizing a (Windows) partition
  153.                             _("&Shrink Windows partition"), true ) )
  154.                    )
  155.             )
  156.           )
  157.            )
  158.         );
  159.     };
  160.  
  161.     // --------------------------------------------------------------
  162.  
  163.  
  164.     // normal case
  165.     //
  166. define void open_auto_dialog (string targetname, term targetbox) ``{
  167.  
  168.     // helptext for semi-automatic partitioning
  169.     // part 1 of 4
  170.     string helptext = _("<p>
  171. Select where on your hard disk to install &product;.
  172. </p>
  173. ");
  174.     // helptext, part 2 of 4
  175.     helptext = helptext + _("<p>
  176. You can either use the <b>entire hard disk</b> or one or more of the
  177. partitions or free regions shown.
  178. </p>");
  179.     // helptext, part 3 of 4
  180.     helptext = helptext + _("<p>
  181. Notice: If you select a region that is not shown as <i>free</i>, you
  182. might loose existing data on your hard disk. This could also affect
  183. other operating systems.
  184. </p>");
  185.     // helptext, part 4 of 4
  186.     helptext = helptext + _("<p>
  187. <b><i>The marked regions will be deleted. All data there will be
  188. lost. </i></b> There will be no way to recover this data.
  189. </p>
  190. ");
  191.  
  192.     // Information what to do, background information
  193.     Wizard::SetContents( _("Preparing Hard Disk -- Step 2"),
  194.                `HCenter(
  195.                     `HSquash(
  196.                          `Frame(
  197.                             // Frame title for installation target hard disk / partition(s)
  198.                             _("Installing on:"),
  199.                             `HBox(
  200.                               `HSpacing(),
  201.                               `VBox(
  202.                                 `VSpacing(0.5),
  203.                                 `HBox(
  204.                                       `HSpacing(2),
  205.                                       `Left( `Label(`opt(`outputField), targetname) )
  206.                                       ),
  207.                                 `VSpacing(0.5),
  208.  
  209.                                 // All partitions are listed that are found on the target (hard disk).
  210.                                 `VSquash( targetbox ),
  211.                                 `VSpacing(0.5)
  212.                                 ),
  213.                               `HSpacing()
  214.                               )
  215.                             )
  216.                          )
  217.                     ), helptext, (boolean)WFM::Args (0), (boolean)WFM::Args (1));
  218.     };
  219.  
  220.  
  221.     // resize case
  222.     //
  223. define void open_auto_dialog_resize (string targetname, term targetbox) 
  224.     ``{
  225.     // helptext for semi-automatic partitioning
  226.     // part 1 of 2
  227.     string helptext = _("<p>
  228. The selected hard disk is probably used by Windows. There is not enough
  229. space for &product;. You can either <b>delete Windows completely</b> or
  230. <b>shrink</b> it to get enough free space.
  231. </p>");
  232.     // helptext, part 2 of 2
  233.     helptext = helptext + _("<p>
  234. If you delete Windows, all data on this partition will be <b>irreversibly
  235. lost</b> in the installation. When shrinking Windows, we <b>strongly
  236. recommend a data backup</b>, because the data must be reorganized.
  237. This may fail under rare circumstances.
  238. </p>
  239. ");
  240.  
  241.     // Information what to do, background information
  242.     Wizard::SetContents( _("Preparing Hard Disk -- Step 2"),
  243.                `HCenter(
  244.                      `Frame(
  245.                         // Frame title for installation target hard disk / partition(s)
  246.                         _("Installing on:"),
  247.                         `HBox(
  248.                               `HSpacing(),
  249.                               `VBox(
  250.                                 `VSpacing(0.5),
  251.                                 `HBox(
  252.                                   `HSpacing(2),
  253.                                   `Left( `Label(`opt(`outputField), targetname) )
  254.                                   ),
  255.                                 `VSpacing(0.5),
  256.  
  257.                                 // All partitions are listed that are found on the target (hard disk).
  258.                                 `VSquash(targetbox),
  259.                                 `VSpacing(0.5)
  260.                                 ),
  261.                               `HSpacing()
  262.                               )
  263.                         )
  264.                 ), helptext, (boolean)WFM::Args(0), (boolean)WFM::Args (1));
  265.     };
  266.  
  267. term add_common_widgets( term vbox )
  268.     {
  269.     map cfg = Storage::GetControlCfg();
  270.     term vb = `VBox();
  271.     vb = add (vb, 
  272.           `Left(`HBox(`HSpacing(3), `CheckBox( `id(`home),
  273.           // Label text
  274.           _("Propose Separate &Home Partition" ),
  275.           cfg["home"]:false ))));
  276.     vb = add (vb, `VSpacing(1) );
  277.     vb = add( vb,
  278.           `Left(`HBox(`HSpacing(3), `CheckBox(`id(`lvm), `opt(`notify),
  279.           // Label text
  280.           _("Create &LVM Based Proposal"), cfg["prop_lvm"]:false ))));
  281.     if( cfg["evms_config"]:false )
  282.     vb = add( vb,
  283.           `Left(`HBox(`HSpacing(3), `CheckBox(`id(`evms), `opt(`notify),
  284.               // Label text
  285.               _("Create &EVMS Based Proposal"), 
  286.               cfg["prop_evms"]:false ))));
  287.     vbox = add (vbox, `VSpacing(1.5) );
  288.     term frame = `HVCenter(`Frame( _( "Proposal type" ), `HVCenter(vb) ));
  289.     vbox = add (vbox, frame );
  290.     return( vbox );
  291.     }
  292. }
  293.