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 / bootloader / routines / dialogs_i386.ycp < prev    next >
Text File  |  2006-11-29  |  7KB  |  259 lines

  1. /**
  2.  * File:
  3.  *      include/bootloader/routines/dialogs.ycp
  4.  *
  5.  * Module:
  6.  *      Bootloader installation and configuration
  7.  *
  8.  * Summary:
  9.  *      Dialogs for configuraion i386-specific functions
  10.  *
  11.  * Authors:
  12.  *      Jiri Srain <jsrain@suse.cz>
  13.  *
  14.  * $Id: dialogs_i386.ycp 32382 2006-08-16 13:12:24Z jplack $
  15.  *
  16.  */
  17.  
  18.  
  19. {
  20. textdomain "bootloader";
  21.  
  22. import "Label";
  23. import "Wizard";
  24. import "CWM";
  25. import "BootCommon";
  26. import "Stage";
  27.  
  28. include "bootloader/routines/helps_i386.ycp";
  29. include "bootloader/routines/widgets_i386.ycp";
  30.  
  31. /**
  32.  * Run dialog to adjust installation on i386 and AMD64
  33.  * @return symbol for wizard sequencer
  34.  */
  35. symbol i386InstallDetailsDialog () {
  36.     term contents = `HBox (`HStretch (), `VBox (
  37.     `VStretch (),
  38.     // frame
  39.     `Frame (_("Disk Order"),
  40.         `HBox (`HSpacing (2), `VBox (
  41.             `VSpacing (1),
  42.             `SelectionBox (`id (`disks),
  43.             `opt (`notify, `immediate),
  44.             // selectionn box label
  45.             _("D&isks"), []),
  46.             Mode::config ()
  47.             ? `HBox (
  48.                 `HStretch (),
  49.                 `PushButton (`id (`add), `opt (`key_F3), Label::AddButton ()),
  50.                 `PushButton (`id (`delete), `opt(`key_F5), Label::DeleteButton ()),
  51.                 `HStretch ()
  52.             )
  53.             : `HBox (),
  54.             `VSpacing (1)
  55.         ),
  56.         `HSquash (
  57.             `VBox (
  58.             `VStretch (),
  59.             `PushButton (`id (`up), `opt (`hstretch), _("&Up")),
  60.             `PushButton (`id (`down), `opt (`hstretch), _("&Down")),
  61.             `VStretch ()
  62.             )
  63.         ),
  64.             `HSpacing (2)
  65.         )
  66.     ),
  67.     `VStretch (),
  68.     // frame
  69.     `Frame (_("Disk System Area Update"), `HBox (`HSpacing (2), `VBox (
  70.         `VSpacing (1),
  71.         `Left (`CheckBox (`id (`repl_mbr),
  72.         // check box
  73.         _("R&eplace MBR with Generic Code"))),
  74.         `Left (`CheckBox (`id (`activate),
  75.         // check box
  76.         _("&Activate Boot Loader Partition"))),
  77.         BootCommon::getLoaderType (false) == "grub"
  78.             && BootCommon::allowEmbed15 ()
  79.         ? `Left (`CheckBox (`id (`embed),
  80.             // check box
  81.             _("U&se Dedicated Boot Loader Area")))
  82.         : `VBox (),
  83.         `VSpacing (1)
  84.     ), `HSpacing (2))),
  85.     `VStretch ()
  86.     ), `HStretch ());
  87.  
  88.     Wizard::SetContentsButtons (
  89.     // dialog caption
  90.     _("Boot Loader Installation Details"),
  91.     contents,
  92.     i386InstallDetailsHelp (),
  93.     Label::BackButton (),
  94.     Label::OKButton ());
  95.  
  96.     list<string> disks_order = BootCommon::DisksOrder ();
  97.  
  98.     UI::ChangeWidget (`id (`disks), `Items, disks_order);
  99.     UI::ChangeWidget (`id (`disks), `CurrentItem, disks_order[0]:"");
  100.     UI::ChangeWidget (`id (`repl_mbr), `Value, BootCommon::repl_mbr);
  101.     UI::ChangeWidget (`id (`activate), `Value, BootCommon::activate);
  102.     if (UI::WidgetExists (`id (`embed)))
  103.     UI::ChangeWidget (`id (`embed), `Value, BootCommon::embed_stage15);
  104.     boolean save_embed = BootCommon::embed_stage15;
  105.  
  106.     any ret = nil;
  107.     while (ret == nil)
  108.     {
  109.     string current = (string)UI::QueryWidget (`id (`disks), `CurrentItem);
  110.     integer pos = 0;
  111.     while (pos < size (disks_order) && disks_order[pos]:"" != current)
  112.         pos = pos + 1;
  113.     UI::ChangeWidget (`id (`up), `Enabled,
  114.         pos > 0 && pos < size (disks_order));
  115.     UI::ChangeWidget (`id (`down), `Enabled, pos < size (disks_order) - 1);
  116.  
  117.     ret = UI::UserInput ();
  118.     boolean order_changed = false;
  119.  
  120.     if (ret == `add)
  121.     {
  122.         term popup = `VBox (`VSpacing (1),
  123.         // textentry header
  124.         `TextEntry (`id (`devname), _("&Device")),
  125.         `VSpacing (1),
  126.         `HBox (`HStretch (),
  127.             `PushButton (`id (`ok), `opt (`key_F10, `default),
  128.             Label::OKButton ()),
  129.             `HStretch (),
  130.             `PushButton (`id (`cancel), `opt (`key_F8),
  131.             Label::CancelButton ()),
  132.             `HStretch ()
  133.         ),
  134.         `VSpacing (1)
  135.         );
  136.         UI::OpenDialog (popup);
  137.         symbol pushed = (symbol)UI::UserInput ();
  138.         string new_dev = (string)
  139.         UI::QueryWidget (`id (`devname), `Value);
  140.         UI::CloseDialog ();
  141.         if (pushed == `ok)
  142.         {
  143.         disks_order = add (disks_order, new_dev);
  144.         order_changed = true;
  145.         current = new_dev;
  146.         }
  147.     }
  148.     else if (ret == `delete)
  149.     {
  150.         disks_order = filter (string d, disks_order, {
  151.         return d != current;
  152.         });
  153.         order_changed = true;
  154.         current = disks_order[0]:nil;
  155.     }
  156.     else if (ret == `up)
  157.     {
  158.         disks_order = (list<string>)
  159.         BootCommon::swapItems (disks_order, pos, pos - 1);
  160.         order_changed = true;
  161.     }
  162.     else if (ret == `down)
  163.     {
  164.         disks_order = (list<string>)
  165.         BootCommon::swapItems (disks_order, pos, pos + 1);
  166.         order_changed = true;
  167.     }
  168.  
  169.     if (ret == `cancel)
  170.         ret = `abort;
  171.     if (ret != `next && ret != `abort && ret != `back)
  172.     {
  173.         if (order_changed)
  174.         {
  175.         UI::ChangeWidget (`id (`disks), `Items, disks_order);
  176.         UI::ChangeWidget (`id (`disks), `CurrentItem, current);
  177.         }
  178.         ret = nil;
  179.     }
  180.     }
  181.     if (ret == `next)
  182.     {
  183.     integer index = 0;
  184.     BootCommon::device_mapping = filter (string k, string v,
  185.         BootCommon::device_mapping,
  186.     {
  187.         return substring (v, 0, 2) != "hd";
  188.     });
  189.     BootCommon::mbrDisk = disks_order[0]:"";
  190.     BootCommon::device_mapping = (map<string,string>)union (
  191.         BootCommon::device_mapping,
  192.         listmap (string d, disks_order, {
  193.         string hex_index = substring (tohexstring (index), 2);
  194.         index = index + 1;
  195.         return $[ d : sformat ("hd%1", hex_index) ];
  196.         })
  197.     );
  198.     BootCommon::repl_mbr = (boolean)
  199.         UI::QueryWidget (`id (`repl_mbr), `Value);
  200.     if (BootCommon::activate != (boolean)
  201.         UI::QueryWidget (`id (`activate), `Value))
  202.     {
  203.         BootCommon::activate_changed = true;
  204.     }
  205.     BootCommon::activate = (boolean)
  206.         UI::QueryWidget (`id (`activate), `Value);
  207.     if (UI::WidgetExists (`id (`embed)))
  208.     {
  209.         BootCommon::embed_stage15 = (boolean)
  210.         UI::QueryWidget (`id (`embed), `Value);
  211.     }
  212.     if (BootCommon::repl_mbr)
  213.     {
  214.         if (Stage::initial ())
  215.         Pkg::PkgInstall ("master-boot-code");
  216.         BootCommon::location_changed = true;
  217.     }
  218.     if (BootCommon::activate || BootCommon::embed_stage15 != save_embed)
  219.     {
  220.         BootCommon::location_changed = true;
  221.     }
  222.     }
  223.     return (symbol)ret;
  224. }
  225.  
  226. /**
  227.  * Run dialog for loader installation details on i386
  228.  * @return symbol for wizard sequencer
  229.  */
  230. symbol i386LoaderDetailsDialog () {
  231.     y2milestone ("Running i386 loader details dialog");
  232.  
  233.     term contents = `HBox (`HSpacing (2), `VBox (
  234.         `VStretch (),
  235.     "boot_menu",
  236.     `VStretch (),
  237.     "password",
  238.     `VStretch ()
  239.     ), `HSpacing (2));
  240.  
  241.     list<string> widget_names = ["boot_menu", "password"];
  242.     map<string,map<string,any> > widget_descr = (map<string,map<string,any> >)
  243.     i386Widgets ();
  244.    // dialog caption
  245.     string caption = _("Boot Loader Options");
  246.     return CWM::ShowAndRun ($[
  247.     "widget_descr" : widget_descr,
  248.     "widget_names" : widget_names,
  249.     "contents" : contents,
  250.     "caption" : caption,
  251.     "back_button" : Label::BackButton (),
  252.     "abort_button" : Label::AbortButton (),
  253.     "next_button" : Label::OKButton (),
  254. //    "fallback_functions" : section_handlers,
  255.     ]);
  256. }
  257.  
  258. } // EOF
  259.