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 / generic / wizards.ycp < prev   
Text File  |  2006-11-29  |  5KB  |  243 lines

  1. /**
  2.  * File:
  3.  *      include/bootloader/generic/wizards.ycp
  4.  *
  5.  * Module:
  6.  *      Bootloader installation and configuration
  7.  *
  8.  * Summary:
  9.  *      Generic wizard sequences for bootloader installation/configuration
  10.  *
  11.  * Authors:
  12.  *      Joachim Plack <jplack@suse.de>
  13.  *
  14.  * $Id: wizards.ycp 27748 2006-02-08 15:15:11Z jplack $
  15.  *
  16.  */
  17.  
  18.  
  19. {
  20. textdomain "bootloader";
  21.  
  22. import "Sequencer";
  23. import "Report";
  24. import "Bootloader";
  25. import "CWMTab";
  26.  
  27.  
  28. // calculate the list of available section types
  29. list<string> section_types () {
  30.     list<string> st_list = [];
  31.  
  32.     map functions = Bootloader::getFunctions (BootCommon::getLoaderType (false));
  33.     list<string>() toEval = (list<string>())functions["section_types"]:nil;
  34.  
  35.     if (toEval != nil)
  36.     st_list = toEval ();
  37.  
  38.     return st_list;
  39. }
  40.  
  41.  
  42. /**
  43.  * Run dialog for generic section editation
  44.  * @return symbol for wizard sequencer
  45.  */
  46. symbol SectionEditDialog () {
  47.     string type = BootCommon::current_section["type"]:"";
  48.     list<string> st = section_types ();
  49.  
  50.     if (!contains(st, type)) {
  51.         y2error("Found unknown section type %1", type);
  52.     type = st[0]:nil;
  53.     BootCommon::current_section["type"] = type;
  54.     }
  55.     string se_type = "section_edit_" + type;
  56.     map<string,map<string,any> > widget_descr = (map<string,map<string,any> >)
  57.     union (CommonSectionWidgets (), Bootloader::blWidgetMaps ());
  58.  
  59.     if (! haskey(widget_descr, se_type) ) {
  60.     y2error("Could not find a dialog %1", se_type);
  61.     return nil;
  62.     }
  63.  
  64.     term contents = `HBox (
  65.     `HSpacing (2),
  66.     `VBox (
  67.             `VStretch (),
  68.         // heading
  69.             `Left (`Heading (_("Section Editor"))),
  70.         `VSpacing (1),
  71.         "name",
  72.             `VStretch (),
  73.         // frame
  74.             `Frame (_("Section Settings"),
  75.             `HBox (
  76.                 `HSpacing (2),
  77.                 se_type,
  78.                 `HSpacing (2)
  79.             )
  80.         ),
  81.         `VStretch ()
  82.     ),
  83.     `HSpacing (2)
  84.     );
  85.  
  86.     return CWM::ShowAndRun ($[
  87.     "widget_descr" : widget_descr,
  88.     "widget_names" : ["name", se_type],
  89.     "contents" : contents,
  90.     "caption" :  _("Boot Loader Settings: Section Management"),
  91.     "back_button" : Label::BackButton (),
  92.     "abort_button" : Label::AbortButton (),
  93.     "next_button" : Label::OKButton (),
  94.     "fallback_functions" : section_handlers,
  95.     ]);
  96. }
  97.  
  98.  
  99. /**
  100.  * Store the modified section
  101.  * @return symbol always `next
  102.  */
  103. symbol GenericStoreSection () {
  104.     BootCommon::current_section["__changed"] = true;
  105.  
  106.     y2debug ("Storing section: index:  %1, contents: %2",
  107.     BootCommon::current_section_index,
  108.     BootCommon::current_section);
  109.     if (BootCommon::current_section_index == -1)
  110.     {
  111.     BootCommon::sections
  112.         = add (BootCommon::sections, BootCommon::current_section);
  113.     }
  114.     else
  115.     {
  116.     BootCommon::sections[BootCommon::current_section_index]
  117.         = BootCommon::current_section;
  118.     }
  119.     return `next;
  120. }
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128. /*
  129.  *   Imported from routines/dialogs.ycp ... temporarily
  130.  */
  131.  
  132.  
  133. /**
  134.  * Run dialog with detailed settings
  135.  * @param type string specification of the type of detail settings
  136.  * @return symbol for wizard sequencer
  137.  */
  138. symbol _DetailsDialog (string type) {
  139.     map<string,symbol()> dialogs = Bootloader::blDialogs ();
  140.     if (! haskey (dialogs, type))
  141.     {
  142.     Report::Message (
  143.         // message
  144.         _("There are no options to set for the current boot loader."));
  145.     return `back;
  146.     }
  147.     symbol () dialog = (symbol())dialogs[type]:nil;
  148.     return dialog ();
  149. }
  150.  
  151.  
  152.  
  153. /*
  154.  *   End of imported stuff from routines/dialogs.ycp ... 
  155.  */ 
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163. /**
  164.  * Run wizard sequencer
  165.  * @return `next, `back or `abort
  166.  */
  167. symbol GenericMainSequence () {
  168.     // run a generic sequence
  169.     map aliases = $[
  170.     "main"            : ``(MainDialog ()),
  171.     "installation_details"    : ``(DetailsDialog ("installation")),
  172.     "loader_details"    : ``(DetailsDialog ("loader")),
  173.     "add_new_section"    : ``(AddNewSectionDialog ()),
  174.     "store_section"        : [``(GenericStoreSection ()), true],
  175.     "manual_edit"        : ``(runEditFilesDialog ()),
  176.     "section_edit"        : ``( SectionEditDialog()),
  177.     ];
  178.  
  179.     return_tab = Bootloader::getLoaderType () != "none"
  180.     ? "sections"
  181.     : "installation";
  182.  
  183.     map sequence = $[
  184.     "ws_start" : "main",
  185.     "main" : $[
  186.         `next : `next,
  187.         `abort : `abort,
  188.         `add : "add_new_section",
  189.         `edit : "section_edit",
  190.         `inst_details : "installation_details",
  191.         `loader_details : "loader_details",
  192.         `manual : "manual_edit",
  193.         `redraw : "main",
  194.     ],
  195.     "manual_edit" : $[
  196.         `abort : `abort,
  197.         `next : "main",
  198.     ],
  199.     "installation_details" : $[
  200.         `next : "main",
  201.         `abort : `abort,
  202.     ],
  203.     "loader_details" : $[
  204.         `next : "main",
  205.         `abort : `abort,
  206.     ],
  207.     "add_new_section" : $[
  208.         `next : "section_edit",
  209.         `abort : `abort,
  210.     ],
  211.     "store_section" : $[
  212.         `next : "main",
  213.     ],
  214.     "section_edit" : $[
  215.         `next : "store_section",
  216.         `abort : `abort,
  217.     ],
  218.     ];
  219.  
  220.  
  221.  
  222.     // FIXME DetailDialog is not yet replaced by a generic function
  223.  
  224.  
  225.     foreach (string st, section_types(), {
  226.     string section = st + "_section";
  227.     string details = st + "_details";
  228.  
  229.     aliases = add(aliases, details, ``( DetailsDialog (section)));
  230.  
  231.     sequence = add(sequence, details, $[
  232.         `next : "section_edit",
  233.         `abort : `abort,
  234.     ]);
  235.  
  236.     });
  237.  
  238.     return Sequencer::Run (aliases, sequence);
  239. }
  240.  
  241.  
  242. } // EOF
  243.