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 / popups.ycp < prev    next >
Text File  |  2006-11-29  |  10KB  |  401 lines

  1. /**
  2.  * File:
  3.  *      include/bootloader/routines/popups.ycp
  4.  *
  5.  * Module:
  6.  *      Bootloader installation and configuration
  7.  *
  8.  * Summary:
  9.  *      Popups for being used inside bootloader configurator
  10.  *
  11.  * Authors:
  12.  *      Jiri Srain <jsrain@suse.cz>
  13.  *
  14.  * $Id: popups.ycp 29127 2006-03-17 22:35:22Z odabrunz $
  15.  *
  16.  */
  17.  
  18.  
  19. {
  20.  
  21.     textdomain "bootloader";
  22.  
  23.     import "Encoding";
  24.     import "Label";
  25.     import "Misc";
  26.     import "Mode";
  27.     import "Popup";
  28.     import "Report";
  29.     import "String";
  30.  
  31. /**
  32.  * Inform about not available functionality when no loader selected
  33.  */
  34. void NoLoaderAvailable () {
  35.     // popup message
  36.     Popup::Message (_("This function is not available if the boot
  37. loader is not specified."));
  38. }
  39.  
  40.     /**
  41.       * Display question
  42.       * @param name string name of currently selected section (to clone)
  43.       * @return boolean true if answered yes
  44.       */
  45.      boolean askClone (string name) ``{
  46.     // yes-no popup
  47.     return Popup::YesNo (sformat (_("Clone the selected section '%1' instead
  48. of creating a new empty section?
  49. "), name));
  50.     }
  51.     /**
  52.       * Display question
  53.       * @return boolean true if answered yes
  54.       */
  55.      boolean confirmAbortPopup () ``{
  56.     // yes-no popup question
  57.     return Popup::YesNo (_("Really leave the boot loader configuration without saving?
  58. All changes will be lost.
  59. "));
  60.     }
  61.  
  62.     /**
  63.       * Display question
  64.       * @return boolean true if answered yes
  65.       */
  66.      boolean resetSectsPopup () ``{
  67.     // yes-no popup question
  68.     return Popup::YesNo (_("Really reset your settings for sections?
  69. All your changes made in section management will be lost.
  70. "));
  71.     }
  72.  
  73.     /**
  74.       * Display question
  75.       * @param title string section title
  76.       * @return boolean true if answered yes
  77.       */
  78.      boolean confirmSectionDeletePopup (string title) ``{
  79.     // yes-no popup question
  80.     return Popup::YesNo (sformat(_("Really delete section %1?"), title));
  81.     }
  82.  
  83.     /**
  84.       * Display question
  85.       * @return boolean true if answered yes
  86.       */
  87.      boolean resetAllPopup () ``{
  88.     // yes-no popup question
  89.     return Popup::YesNo (_("Really reset all
  90. your settings? All your changes will be lost.
  91. "));
  92.     }
  93.  
  94.     /**
  95.       * Display error
  96.       */
  97.      void setLocationErrorPopup () ``{
  98.     // error popup
  99.     Report::Error (_("Set the boot loader location."));
  100.     }
  101.  
  102.     /**
  103.       * Display error
  104.       */
  105.      void emptyPasswdErrorPopup () ``{
  106.     // error popup
  107.     Report::Error (_("The password must not be empty."));
  108.     }
  109.  
  110.     /**
  111.       * Display error
  112.       */
  113.      void passwdMissmatchPopup () ``{
  114.     // error popup
  115.     Report::Error (_("'Password' and 'Retype password'
  116. do not match. Retype the password."));
  117.     }
  118.  
  119.     /**
  120.       * Display popup about change of section
  121.       * @param sect_name string section name
  122.       */
  123.      void displayDiskChangePopup (string sect_name) ``{
  124.     // message popup, %1 is sectino label
  125.     Popup::Message (sformat (_("The disk settings have changed.
  126. Check section %1 settings.
  127. "), sect_name));
  128.     }
  129.  
  130.     /**
  131.       * Display popup
  132.       */
  133.      void displayFilesEditedPopup () ``{
  134.     // message popup
  135.     Popup::Message (_("The disk settings have changed and you edited boot loader
  136. configuration files manually. Check the boot loader settings.
  137. "));
  138.     }
  139.  
  140.     /**
  141.       * Ask for change of bootloader location because of device unavailability
  142.       * @param device string currently confiogured device
  143.       * @return boolean yes if shall be reset
  144.       */
  145.      boolean askLocationResetPopup (string device) ``{
  146.     // yes-no popup
  147.     return Popup::YesNo(sformat(_("Partition '%1' is not available.
  148. Set default boot loader location?
  149. "), device));
  150.     }
  151.  
  152.     /**
  153.       * Show the popup before saving to floppy, handle actions
  154.       * @return true on success
  155.       */
  156.      boolean saveToFLoppyPopup () ``{
  157.     boolean retval = true;
  158.     boolean format = false;
  159.     symbol fs = `no;
  160.     list items = [
  161.         // combobox item
  162.         `item (`id (`no), _("Do Not Create a File System")),
  163.         // combobox item
  164.         `item (`id (`ext2), _("Create an ext2 File System")),
  165.     ];
  166.     if (SCR::Read (.target.size, "/sbin/mkfs.msdos") != -1)
  167.         // combobox item
  168.        items = add (items, `item (`id (`fat), _("Create a FAT File System")));
  169.     term contents = `VBox (
  170.         // label
  171.         `Label (_("The boot loader boot sector will be written
  172. to a floppy disk. Insert a floppy disk
  173. and confirm with OK.
  174. ")),
  175.         `VSpacing (1),
  176.         // checkbox
  177.         `Left (`CheckBox (`id (`format), _("&Low Level Format"), false)),
  178.         `VSpacing (1),
  179.         // combobox
  180.         `Left (`ComboBox (`id (`fs), _("&Create File System"), items)),
  181.         `VSpacing (1),
  182.         `PushButton (`id (`ok), Label::OKButton ())
  183.     );
  184.     UI::OpenDialog (contents);
  185.     any ret = nil;
  186.     while (ret != `ok)
  187.     {
  188.         ret = UI::UserInput ();
  189.     }
  190.     if (ret == `ok)
  191.     {
  192.         format = (boolean)UI::QueryWidget (`id (`format), `Value);
  193.         fs = (symbol)UI::QueryWidget (`id (`fs), `Value);
  194.     }
  195.     UI::CloseDialog ();
  196.     string dev = BootCommon::loader_device;
  197.     if (format)
  198.     {
  199.         boolean tmpretval = true;
  200.         y2milestone ("Low level formating floppy");
  201.         while (true)
  202.         {
  203.         tmpretval = 0 == SCR::Execute
  204.             (.target.bash, sformat ("/usr/bin/fdformat %1", dev));
  205.         if (tmpretval)
  206.             break;
  207.         // yes-no popup
  208.         if (! Popup::YesNo (_("Low level format failed. Try again?")))
  209.             break;
  210.         }
  211.         retval = retval && tmpretval;
  212.     }
  213.     if (fs == `ext2)
  214.     {
  215.         y2milestone ("Creating ext2 on floppy");
  216.             boolean tmpretval = 0 == SCR::Execute
  217.         (.target.bash, sformat ("/sbin/mkfs.ext2 %1", dev));
  218.         if (! tmpretval)
  219.         // error report
  220.         Report::Error (_("Creating file system failed."));
  221.             retval = retval && tmpretval;
  222.         }
  223.     else if (fs == `fat)
  224.     {
  225.         y2milestone ("Creating msdosfs on floppy");
  226.         boolean tmpretval = 0 == SCR::Execute
  227.         (.target.bash, sformat ("/sbin/mkfs.msdos %1", dev));
  228.         if (! tmpretval)
  229.         // error report
  230.         Report::Error (_("Creating file system failed."));
  231.         retval = retval && tmpretval;
  232.     }
  233.     return retval;
  234.     }
  235.  
  236.     /**
  237.       * Display error
  238.       */
  239.      void usedNameErrorPopup () ``{
  240.         // error popup
  241.         Report::Error (_("The name selected is already used.
  242. Use a different one.
  243. "));
  244.     }
  245.  
  246.     /**
  247.       * Display error
  248.       * @return true if shall retry
  249.       */
  250.      boolean writeErrorPopup () ``{
  251.         // yes-no popup
  252.     return Popup::YesNo (_("An error occurred during boot loader
  253. installation. Retry boot loader configuration?
  254. "));
  255.     }
  256.  
  257.     /**
  258.       * Display popup
  259.       */
  260.      void displayGfxMenuChangePopup () ``{
  261.     // message popup, gfxmenu is option name, leave as is
  262.     Popup::Message (_("The disk settings have changed.
  263. Check the gfxmenu settings.
  264. "));
  265.     }
  266.  
  267.     /**
  268.       * Display yes-no popup
  269.       * @return true if confirmed
  270.       */
  271.      boolean confirmOptionDeletePopup () ``{
  272.     // yes-no popup
  273.     return Popup::YesNo (_("Really delete the selected option?"));
  274.     }
  275.  
  276.     /**
  277.       * Display error popup with log
  278.       * @param header string error header
  279.       * @param log string logfile contents
  280.       */
  281.      void errorWithLogPopup (string header, string log) ``{
  282.     if (log == nil)
  283.         // FIXME too generic, but was already translated
  284.         log = _("Unable to install the boot loader.");
  285.     term text = `RichText( `opt(`plainText), log );
  286.     UI::OpenDialog(`opt ( `decorated ),
  287.         `VBox (`HSpacing(75),
  288.         `Heading(header),
  289.         // heading
  290.         `HBox(
  291.             `VSpacing(14),
  292.             text      // e.g. `Richtext()
  293.         ),
  294.         `PushButton( `id(`ok_help), `opt(`default), Label::OKButton() )
  295.         )
  296.     );
  297.  
  298.     UI::SetFocus(`id(`ok_help) );
  299.     any r = UI::UserInput();
  300.     UI::CloseDialog();
  301.     }
  302.  
  303.     /**
  304.       * Display popup
  305.       */
  306.      void displayNoSupportPopup () ``{
  307.     // message popup
  308.     Popup::Message (_("Sorry, there are currently
  309. no options to set here."));
  310.     }
  311.  
  312.     /**
  313.       * Display popup
  314.       */
  315.      void noBootloaderPopup () ``{
  316.     // error report
  317.     Report::Error (_("Unable to install the boot loader."));
  318.     }
  319.  
  320.     /**
  321.       * Display popup
  322.       * @param bootloader string printable name of used bootloader
  323.       */
  324.      void floppyWrittenPopup (string bootloader) ``{
  325.     string confirm_boot_msg = Misc::boot_msg;
  326.     // data saved to floppy disk
  327.     // popup, %1 is bootloader name
  328.     string msg = sformat (_("The %1 boot sector has been written to the floppy disk."),
  329.         bootloader);
  330.     msg = msg + "\n"
  331.         // popup - continuing - alternative 1 ...
  332.         + _("Leave the floppy disk in the drive. The system will now be rebooted.");
  333.  
  334.     if ( size (confirm_boot_msg) > 0 )
  335.     {
  336.         msg = msg + "\n\n" + confirm_boot_msg;
  337.     }
  338.     Misc::boot_msg = "";
  339.         // empty that  Misc::boot_msg indicate the message has been displayed
  340.     Report::Message(msg);
  341.     }
  342.  
  343.     /**
  344.       * Display popup - confirmation befopre restoring MBR
  345.       * @param device string device to restore to
  346.       * @return boolean true of MBR restore confirmed
  347.       */
  348.      boolean restoreMBRPopup (string device) ``{
  349.     map stat = (map)SCR::Read (.target.stat, "/boot/backup_mbr");
  350.     integer ctime = stat["ctime"]:0;
  351.     string command = sformat (
  352.         "date --date='1970-01-01 00:00:00 %1 seconds'",
  353.         ctime);
  354.     map out = (map)SCR::Execute (.target.bash_output, command);
  355.     string c_time = out["stdout"]:"";
  356.     c_time = String::FirstChunk (c_time, "\n");
  357.     c_time = (string)UI::Recode (Encoding::console, "UTF-8", c_time);
  358.  
  359.     // warning popup. %1 is device name, %2 is date/time in form of
  360.     // 'date' command output
  361.     string msg = sformat (_("Warning!
  362.  
  363. Current MBR of %1 will now be rewritten with MBR
  364. saved at %2.
  365.  
  366. Only the booting code in the MBR will be rewritten.
  367. The partition table remains unchanged.
  368.  
  369. Continue?
  370. "), device, c_time);
  371.  
  372.     term dialog = `HBox (
  373.         `HSpacing (1),
  374.         `VBox (
  375.         `VSpacing (0.2),
  376.         `Label (msg),
  377.         `HBox(
  378.             // PushButton
  379.            `PushButton (`id (`yes), _("&Yes, Rewrite")),
  380.            `HStretch (),
  381.            `PushButton (`id (`no), `opt (`default), Label::NoButton ())
  382.         ),
  383.         `VSpacing (0.2)
  384.         ),
  385.         `HSpacing(1)
  386.     );
  387.  
  388.     UI::OpenDialog (`opt (`decorated, `warncolor), dialog);
  389.  
  390.     symbol  button = nil;
  391.     repeat
  392.     {
  393.         button = (symbol)UI::UserInput ();
  394.     } until (button == `yes || button == `no);
  395.  
  396.     UI::CloseDialog();
  397.  
  398.     return (button == `yes);
  399.     }
  400. }
  401.