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 / clients / inst_part_proposal.ycp < prev    next >
Text File  |  2006-11-29  |  9KB  |  304 lines

  1. /*
  2.  *************************************************************
  3.  *
  4.  *     YaST2      SuSE Labs                        -o)
  5.  *     --------------------                        /\\
  6.  *                                                _\_v
  7.  *           www.suse.de / www.suse.com
  8.  * ----------------------------------------------------------
  9.  *
  10.  * Author:        Michael Hager <mike@suse.de>
  11.  *
  12.  * Description:   Create a proposal for partitioning
  13.  *
  14.  *
  15.  *
  16.  *
  17.  *
  18.  *************************************************************
  19.  
  20.  $Id: inst_part_proposal.ycp 32967 2006-09-19 11:13:25Z fehr $
  21.  
  22. */
  23.  
  24. {
  25.   textdomain "storage";
  26.   import "Arch";
  27.   import "Wizard";
  28.   import "Mode";
  29.   import "Popup";
  30.   import "Storage";
  31.  
  32.   include "partitioning/custom_part_check_generated.ycp";
  33.   include "partitioning/do_proposal_flexible.ycp";
  34.  
  35.   boolean test_mode               = Mode::test ();
  36.   boolean demo_mode               = Mode::test ();
  37.   string  part_proposal_mode      = Storage::GetPartProposalMode();
  38.  
  39.   map<string,map>     targetMap               = Storage::GetTargetMap();
  40.   boolean run_in_testsuite        = Storage::GetTestsuite();
  41.  
  42.   boolean proposal_firsttime      = Storage::GetPartProposalFirst();
  43.   boolean orig_proposal_firsttime = proposal_firsttime;
  44.   boolean no_suggestion_possible = true;
  45.  
  46.   if ( test_mode && (size(targetMap) == 0) )
  47.   {
  48.       if ( demo_mode ) {
  49.       y2warning("***** Demo mode active - using fake demo values *****");
  50.       targetMap = (map<string,map>)SCR::Read(.target.yast2, "demo_target_map.ycp");
  51.       }
  52.       else {// ! demo_mode
  53.       y2warning("***** Test mode active - using fake values *****");
  54.       targetMap = (map<string,map>)SCR::Read(.target.yast2, "test_target_map.ycp");
  55.       }
  56.       Storage::SetTargetMap( targetMap );
  57.   }
  58.  
  59.  
  60.   //////////////////////////////////////////////////////
  61.   // This module is only for i386 fdisk-label
  62.  
  63.   if ( Arch::s390 () )
  64.       {
  65.       return Storage::GetExitKey();
  66.       }
  67.  
  68.  
  69.  
  70.  
  71.   // ///////////// DELETE THIS LINE FOR PRODUCTIOIN VERSION
  72.   //
  73.   // proposal_firsttime  = true;
  74.   // orig_proposal_firsttime  = true;
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.   string title        = "";
  82.   string accept_str   = "";
  83.   string modify_str   = "";
  84.   string detailed_str = "";
  85.   string lvm_str      = "";
  86.   string evms_str     = "";
  87.  
  88.   // Title for dialogue
  89.   title = _("Suggested Partitioning");
  90.   // Radiobutton for partition dialog
  91.   accept_str   = _("&Accept Proposal");
  92.   // Radiobutton for partition dialog
  93.   modify_str   = _("Ba&se Partition Setup on This Proposal");
  94.   // Radiobutton for partition dialog
  95.   detailed_str = _("&Create Custom Partition Setup");
  96.   // Radiobutton for partition dialog
  97.   lvm_str = _("Create &LVM Based Proposal");
  98.   // Radiobutton for partition dialog
  99.   evms_str = _("Create &EVMS Based Proposal");
  100.  
  101.   string changes = Storage::ChangeText();
  102.   y2milestone( "current proposal: %1", changes );
  103.   if( size(changes) == 0 )
  104.       {
  105.       changes = "<p></p>" +
  106.         // popup text, richtext format
  107.            _("<p>You rejected the proposal.  Use one of the options to continue partitioning.</p>");
  108.       }
  109.  
  110.   map cfg = Storage::GetControlCfg();
  111.  
  112.   term bframe = 
  113.       `VBox(
  114.       `VSpacing (0.2),
  115.       `Left( `RadioButton (`id ("accept"), accept_str, part_proposal_mode=="accept")),
  116.       `VSpacing (0.2),
  117.       `Left( `RadioButton (`id ("modify"), modify_str, part_proposal_mode=="modify")),
  118.       `VSpacing (0.2),
  119.       `Left( `RadioButton (`id ("detailed"), detailed_str, part_proposal_mode=="detailed")),
  120.       `VSpacing (0.2),
  121.       `Left( `RadioButton (`id ("lvm"), lvm_str, false ))
  122.       );
  123.  
  124.   if( cfg["evms_config"]:false )
  125.       {
  126.       bframe = add( bframe, `VSpacing (0.2) );
  127.       bframe = add( bframe, 
  128.             `Left( `RadioButton (`id ("evms"), evms_str, false )) );
  129.       }
  130.  
  131.   // Frame description in suggested partition for mode accept modify ..
  132.   bframe = `HCenter( `Frame( _("Partitioning"), `HVSquash( bframe ) ));
  133.  
  134.   term contents =
  135.      `VBox (
  136.     `VSpacing (0.5),
  137.     `HBox (
  138.         `HSpacing (2),
  139.         `RadioButtonGroup (`id ("part_option"),
  140.              `VBox (
  141.               `MinHeight( 7, `RichText (`id ("richtext"), changes)),
  142.               `VSpacing(1),
  143.               bframe,
  144.               `VStretch()
  145.               )),
  146.         `HSpacing (2)
  147.         ),
  148.     `VSpacing(2) );
  149.  
  150.  
  151.   // help on suggested partitioning
  152.   string help_text =  _("<p>
  153. Your hard disks have been checked. The partition setup
  154. displayed is proposed for your hard drive.</p>");
  155.  
  156.   // help text continued
  157.   // %1 is replaced by button text
  158.   help_text =  help_text + sformat(_("<p>
  159. To accept these suggestions and continue, select
  160. <b>%1</b>.</p>
  161. "), deletechars(accept_str,"&"));
  162.  
  163.   // help text continued
  164.   // %1 is replaced by button text
  165.   help_text =  help_text + sformat(_("<p>
  166. If you want to do only small adjustments to the proposed
  167. setup (like e.g. changing filesystem types) choose
  168. <b>%1</b> and do these modification in expert
  169. partioner dialog.</p>
  170. "), deletechars(modify_str,"&"));
  171.  
  172.   // help text continued
  173.   help_text =  help_text + sformat(_("<p>
  174. If the suggestion does not fit your needs, create
  175. your own partition setup starting with the partitions as
  176. currently present on the disks.  For this, select
  177. <b>%1</b>.
  178. This is also the option to choose for
  179. advanced options like RAID and encryption.</p>
  180. "), deletechars(detailed_str,"&"));
  181.  
  182.   if( cfg["evms_config"]:false )
  183.       // help text continued
  184.       // %1 is replaced by button text
  185.       help_text =  help_text + _("<p>
  186. To create a LVM or EVMS based proposal choose the corresponding button.</p>");
  187.   else
  188.       // help text continued
  189.       // %1 is replaced by button text
  190.       help_text =  help_text + _("<p>
  191. To create a LVM based proposal choose the corresponding button.</p>");
  192.  
  193.   if( proposal_firsttime )
  194.       {
  195.       map prop = get_inst_prop( Storage::GetTargetMap() );
  196.       proposal_firsttime = false;
  197.       no_suggestion_possible = !prop["ok"]:false;
  198.       if( !no_suggestion_possible )
  199.       {
  200.       targetMap = prop["target"]:$[];
  201.       }
  202.       }
  203.  
  204.  
  205.   symbol ret = nil;
  206.  
  207.   if( !run_in_testsuite )
  208.       {
  209.       /////////////////////////////////////////////////////////////////////
  210.       // next step to visualize the hit the new target map from hit
  211.  
  212.       if( no_suggestion_possible && orig_proposal_firsttime )
  213.       {
  214.       y2milestone( "Could not create a proposal %1 %2 ",
  215.                no_suggestion_possible, orig_proposal_firsttime );
  216.  
  217.       return( Storage::GetExitKey() );
  218.       }
  219.       else
  220.       {
  221.       Wizard::SetContents( title, contents, help_text,
  222.                            (boolean)WFM::Args(0), (boolean)WFM::Args(1) );
  223.       if ( Stage::initial () )
  224.           Wizard::SetTitleIcon( "yast-partitioning" );
  225.       }
  226.  
  227.       repeat
  228.           {
  229.           Wizard::SetFocusToNextButton();
  230.           ret = (symbol)Wizard::UserInput();
  231.       y2milestone( "USERINPUT %1", ret );
  232.  
  233.           string part_proposal_mode =
  234.           (string) UI::QueryWidget(`id("part_option"), `CurrentButton);
  235.  
  236.       if( ret == `abort && Popup::ReallyAbort(true) )
  237.           return `abort;
  238.  
  239.       if( ret != `back )
  240.               {
  241.           Storage::SetPartProposalFirst( false );
  242.  
  243.           string target_is = "";
  244.  
  245.           Storage::SetPartProposalMode( part_proposal_mode );
  246.  
  247.           if( part_proposal_mode == "accept" )
  248.           {
  249.           target_is = "SUGGESTION";
  250.           }
  251.           else if( part_proposal_mode == "lvm" || 
  252.                    part_proposal_mode == "evms" )
  253.           {
  254.           target_is = "SUGGESTION";
  255.           if( part_proposal_mode=="lvm" )
  256.               Storage::SetProposalLvm(true);
  257.           else
  258.               Storage::SetProposalEvms(true);
  259.           Storage::ResetOndiskTarget();
  260.           Storage::AddMountPointsForWin(Storage::GetTargetMap());
  261.           map prop = get_inst_prop( Storage::GetTargetMap());
  262.           if( !prop["ok"]:false )
  263.               {
  264.               Popup::Error( _("Impossible to create the reuquested proposal.") );
  265.               ret = `doagain;
  266.               }
  267.           else
  268.               {
  269.               targetMap = prop["target"]:$[];
  270.               Storage::SetPartProposalMode( "accept" );
  271.               Storage::SetPartProposalActive( true );
  272.               }
  273.           Storage::SetProposalDefault();
  274.           }
  275.           else if( part_proposal_mode == "modify" )
  276.           {
  277.           target_is = "PROP_MODIFY";
  278.           }
  279.           else if( part_proposal_mode == "detailed" )
  280.           {
  281.           if( Storage::GetPartMode()!="CUSTOM" )
  282.               {
  283.               target_is = "NORMAL";
  284.               }
  285.           else
  286.               {
  287.               target_is = "CUSTOM";
  288.               }
  289.           Storage::SetPartDisk( "" );
  290.           }
  291.           y2milestone( "target_is %1", target_is );
  292.           if( ret != `doagain )
  293.           {
  294.           Storage::SetPartMode( target_is );
  295.           Storage::SetTargetMap( targetMap );
  296.           }
  297.           }
  298.       } until ( ret == `next || ret == `back || ret == `cancel );
  299.       }
  300.   Storage::SaveExitKey( ret );
  301.  
  302.   return ret;
  303. }
  304.