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_update.ycp < prev    next >
Text File  |  2006-11-29  |  8KB  |  255 lines

  1. /**
  2.  * Module:         inst_update.ycp
  3.  *
  4.  * Authors:        Stefan Schubert <schubi@suse.de>
  5.  *            Arvin Schnell <arvin@suse.de>
  6.  *
  7.  * Purpose:
  8.  * Displays software selection screen of previous installed software-groups.
  9.  * Show checkboxes for software categories. Let the user select his software.
  10.  * if he want to UPGRADE his system.
  11.  *
  12.  * $Id: inst_update.ycp 33392 2006-10-13 11:39:53Z locilka $
  13.  */
  14.  
  15. {
  16.     textdomain "update";
  17.  
  18.     import "Wizard";
  19.     import "Popup";
  20.     import "RootPart";
  21.     import "Update";
  22.     import "Packages";
  23.  
  24.  
  25.     // screen title for update options
  26.     string title = _("Update Options");
  27.  
  28.     // create box with base selections, check if current selection really is available
  29.     term baseconfsbox = `VBox ();
  30.  
  31.     // loop through available base selections, create radio button entry for every base selection
  32.     // preselect current selection
  33.  
  34.     list<string> base_configurations = [];
  35.  
  36.     if (Packages::using_patterns)
  37.     {
  38.     baseconfsbox = `PushButton (`id (`details), _("Select Patterns"));
  39.     }
  40.     else
  41.     {
  42.     // get available base selection sorted by reverse order (highest ordered base selection first)
  43.     list<string> available_base_selections = Update::GetBaseSelections ();
  44.     y2milestone ("available_base_selections %1, current_selection %2", available_base_selections, Update::selected_selection);
  45.     foreach (string selection, available_base_selections, {
  46.         map selection_data = Pkg::SelectionData (selection);
  47.         string selection_summary = selection_data["summary"]:"";
  48.         boolean preselect = (selection == Update::selected_selection);
  49.         baseconfsbox = add (baseconfsbox, `Left(`RadioButton(`id(selection),
  50.                                  `opt(`notify, `autoShortcut),
  51.                                  selection_summary,
  52.                                  preselect)));
  53.     });
  54.     baseconfsbox = `RadioButtonGroup(`id(`baseconf), baseconfsbox);
  55.     base_configurations = available_base_selections;
  56.     }
  57.  
  58.     // Checking: already selected addons or single selection?
  59.  
  60.     string wrn_msg = "";
  61.  
  62.     if (Pkg::RestoreState (true))        // check if state changed
  63.     {
  64.     // Display warning message
  65.     wrn_msg = _("\
  66. You have already chosen software from \"Detailed selection\".\n\
  67. You will lose that selection if you change the basic selection.");
  68.     }
  69.  
  70.     // Build and show dialog
  71.  
  72.     string from_version = RootPart::GetInfoOfSelected (`name);
  73.     string to_version = Update::updateVersion["nameandversion"]:_("Unknown");
  74.  
  75.     term contents = `HVSquash(
  76.     `VBox(
  77.           // label showing from what version to what version we are updating
  78.           `Left (`Label (sformat (_("Update from %1 to %2"), from_version, to_version))),
  79.           `VSpacing (1),
  80.           // frame title for update selection
  81.           `Frame( _("Update Mode"),
  82.               `VBox(
  83.                 `VSpacing(1),
  84.                 `RadioButtonGroup( `id(`bgoup), `opt(`notify),
  85.                            `VBox(
  86.                              `Left(`RadioButton(`id(`upgrade),`opt(`notify),
  87.                                     // radio button label for update including new packages
  88.                                     _("&Update with Installation of New Software and Features
  89. Based on the Selection:
  90. "), false)),
  91.                              `VSpacing(0.5),
  92.                              `HBox(
  93.                                `HSpacing(4),
  94.                                baseconfsbox
  95.                             ),
  96.                              `VSpacing(1.5),
  97.                              `Left(`RadioButton(`id(`notupgrade),`opt(`notify),
  98.                                     // radio button label for update of already installed packages only
  99.                                     _("Only U&pdate Installed Packages"), true)),
  100.                              `VSpacing(1.0)
  101.                              )
  102.                            )
  103.                 )
  104.               ),
  105.           `VSpacing (1),
  106.           `Left(`CheckBox(`id(`delete),
  107.                   // check box label
  108.                   // translator: add a & shortcut
  109.                   _("&Delete Unmaintained Packages"), true)),
  110.           `VSpacing(1),
  111.           `Label( `id(`wrn_label), wrn_msg )
  112.           )
  113.     );
  114.  
  115.  
  116.     // help text for dialog "update options" 1/4
  117.     string helptext = _("<p>The update option differs between two modes. In
  118. either case, it is recommended to make a backup of your personal data.</p>
  119. ");
  120.  
  121.     // help text for dialog "update options" 2/4
  122.     helptext = helptext + _("<p><b>With New Software:</b> This default setting
  123. updates the existing software and installs all new features and benefits of
  124. the new &product; version. The selection is based on the former predefined
  125. software selection.</p>
  126. ");
  127.  
  128.     // help text for dialog "update options" 3/4
  129.     helptext = helptext + _("<p><b>Only Installed Packages:</b> This selection
  130. only updates the packages already installed on your system. <i>Note:</i>
  131. New software in the predefined software selection, such as new YaST modules, is
  132. not available after the update. You might miss advertised features.</p>
  133. ");
  134.  
  135.     // help text for dialog "update options" 4/4
  136.     helptext = helptext + _("<p>After the update, some software might not
  137. function anymore. Activate <b>Delete Unmaintained Packages</b> to delete those
  138. packages during the update.</p>
  139. ");
  140.  
  141.  
  142.     Wizard::OpenAcceptDialog ();
  143.  
  144.     Wizard::SetContents (title, contents, helptext, (boolean) WFM::Args(0), (boolean) WFM::Args(1));
  145.  
  146.     // preset update/upgrade radio buttons properly
  147.  
  148.     UI::ChangeWidget(`id(`upgrade), `Value, !Update::onlyUpdateInstalled);
  149.     UI::ChangeWidget(`id(`notupgrade), `Value, Update::onlyUpdateInstalled);
  150.  
  151.     // grey out radio buttons if only already installed packages should be updated
  152.  
  153.     foreach (string sel, base_configurations, {
  154.     UI::ChangeWidget(`id(sel), `Enabled, !Update::onlyUpdateInstalled);
  155.     });
  156.  
  157.     UI::ChangeWidget(`id(`delete), `Value, Update::deleteOldPackages);
  158.  
  159.     any ret = nil;
  160.     boolean details_pressed = false;
  161.  
  162.     while (true)
  163.     {
  164.     ret = Wizard::UserInput ();
  165.  
  166.     if (ret == `abort && Popup::ConfirmAbort (`painless))
  167.         break;
  168.  
  169.     if (ret == `upgrade || ret == `notupgrade)
  170.     {
  171.         boolean tmp = (boolean) UI::QueryWidget (`id(`upgrade), `Value);
  172.         foreach (string sel, base_configurations, {
  173.         UI::ChangeWidget(`id(sel), `Enabled, tmp);
  174.         });
  175.  
  176.         continue;
  177.     }
  178.  
  179.     if (ret == `details)
  180.     {
  181.  
  182.             symbol result = `again;
  183.             while ( result == `again )
  184.             {
  185.                 result = (symbol) WFM::CallFunction ("inst_sw_select", [true, true]);
  186.             }
  187.         if (ret == `next)
  188.         details_pressed = true;
  189.         continue;
  190.     }
  191.  
  192.     if (ret == `next && Pkg::RestoreState (true))
  193.     {
  194.         boolean something_changed = false;
  195.  
  196.         if (UI::QueryWidget (`id(`notupgrade), `Value) != Update::onlyUpdateInstalled)
  197.         something_changed = true;
  198.  
  199.             if (Packages::using_patterns)
  200.         {
  201.         }
  202.         else
  203.         {
  204.         if ((boolean) UI::QueryWidget (`id(`upgrade), `Value) &&
  205.             Update::selected_selection != UI::QueryWidget(`id(`baseconf), `CurrentButton))
  206.             something_changed = true;
  207.         }
  208.  
  209.         if (UI::QueryWidget (`id(`delete), `Value ) != Update::deleteOldPackages)
  210.         something_changed = true;
  211.  
  212.         if (something_changed && Packages::base_selection_modified)
  213.         {
  214.         // yes/no question
  215.         if (!Popup::YesNo (_("Do you really want\nto reset your detailed selection?")))
  216.             continue;
  217.         }
  218.     }
  219.  
  220.     if (ret == `back || ret == `next)
  221.         break;
  222.     }
  223.  
  224.     if (ret == `next)
  225.     {
  226.     Update::did_init1 = false;
  227.  
  228.     boolean b1 = Update::onlyUpdateInstalled;
  229.     Update::onlyUpdateInstalled = (boolean) UI::QueryWidget (`id(`notupgrade), `Value);
  230.     Update::deleteOldPackages = (boolean) UI::QueryWidget (`id(`delete), `Value);
  231.  
  232.     if (Packages::using_patterns)
  233.     {
  234.         if (b1 != Update::onlyUpdateInstalled || details_pressed)
  235.         {
  236.         Update::manual_interaction = true;
  237.         }
  238.     }
  239.     else
  240.     {
  241.         string s1 = Update::selected_selection;
  242.         Update::selected_selection = (string) UI::QueryWidget(`id(`baseconf), `CurrentButton);
  243.  
  244.         if (b1 != Update::onlyUpdateInstalled || s1 != Update::selected_selection)
  245.         {
  246.         Update::manual_interaction = true;
  247.         }
  248.     }
  249.     }
  250.  
  251.     Wizard::CloseDialog ();
  252.  
  253.     return ret;
  254. }
  255.