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 / sections_widget.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  247 lines

  1. /**
  2.  * File:
  3.  *      include/bootloader/generic/sections_widget.ycp
  4.  *
  5.  * Module:
  6.  *      Bootloader installation and configuration
  7.  *
  8.  * Summary:
  9.  *      Common widgets for being used by several bootloaders
  10.  *
  11.  * Authors:
  12.  *      Jiri Srain <jsrain@suse.cz>
  13.  *    alterered by jplack@suse.de 
  14.  *
  15.  * $Id: sections_widget.ycp 33332 2006-10-12 07:37:32Z jplack $
  16.  *
  17.  */
  18.  
  19.  
  20. {
  21.  
  22. textdomain "bootloader";
  23.  
  24. include "bootloader/routines/popups.ycp";
  25.  
  26.  
  27. // sections list widget
  28.  
  29. /**
  30.  * Refresh and redraw widget wits sections
  31.  * @param sects list of current sections
  32.  */
  33. void _RedrawSectionsTable (list<map<string,any> > sects) {
  34.  
  35. /*
  36.     boolean elilo = Bootloader::getLoaderType () == "elilo";
  37.     list sec = maplist (map<string,any> s, sects, {
  38.     string image = s["kernel"]:"";
  39.     string root = s["root"]:"";
  40.         return `item (`id (s["name"]:""),
  41.         tolower (BootCommon::globals["default"]:"")
  42.             == tolower (s["name"]:"")
  43.         ? UI::Glyph (`CheckMark) : "",
  44.         s["name"]:"",
  45.         (image == nil || image == "")
  46.         // table header
  47.         ? _("Other")
  48.         // table header
  49.         : _("Image"),
  50.         (image != "" && image != nil)
  51.         ? sformat ("%1   (%2%3)",
  52.             image,
  53.             elilo
  54.             ? ""
  55.             : BootCommon::splitPath (image)[0]:"",
  56.             root == "" ? ""
  57.             : ((elilo ? "" : ", ")
  58.             + sformat ("root=%1", root)))
  59.         : s["chainloader"]:""
  60.         );
  61.     });
  62. */
  63.  
  64.  
  65.  
  66.     list sec = maplist (map<string,any> s, sects, {
  67.         string name = s["name"]:"";
  68.         string type = s["type"]:"";
  69.         string summary = mergestring(
  70.         maplist(
  71.         string k, any v,
  72.         filter(string k, any v, s,
  73.             ``( k!="name" && k!="type" && k!="lines_cache_id" &&
  74.                 substring(k,0,2) != "__" && k!="initial" && k!="original_name" &&
  75.             v != "false"
  76.             )
  77.         ),
  78.         {
  79.             return (v=="true") ? k : k + "=" + tostring(v);
  80.             }
  81.         ),
  82.         ", "
  83.     );
  84.     // Upcase word 'type'
  85.     type = toupper(substring(type,0,1)) + substring(type,1);
  86.  
  87.         return `item (`id (name),
  88.         BootCommon::globals["default"]:"" == name ? UI::Glyph (`CheckMark) : "",
  89.         name,
  90.         type,
  91.         summary
  92.         );
  93.     });
  94.  
  95.     UI::ChangeWidget (`id (`sects), `Items, sec);
  96. }
  97.  
  98.  
  99. /**
  100.  * Init function of widget
  101.  * @param widget string id of the widget
  102.  */
  103. void _SectionsInit (string widget) {
  104.     _RedrawSectionsTable (BootCommon::sections);
  105.     UI::SetFocus (`id (`sects));
  106. }
  107.  
  108.  
  109. /**
  110.  * Handle function of a widget
  111.  * @param widget string widget key
  112.  * @param event map event description of event that occured
  113.  * @return symbol to return to wizard sequencer, or nil
  114.  */
  115. symbol _SectionsHandle (string widget, map event) {
  116.     any op = event["ID"]:nil;
  117.     if (event["ID"]:nil == `sects
  118.     && event["EventReason"]:"" == "Activated"
  119.     && event["EventType"]:"" == "WidgetEvent")
  120.     {
  121.     op = `edit;
  122.     }
  123.     y2milestone ("Handling sections widget, event %1", op);
  124.     string current = (string)UI::QueryWidget (`id (`sects), `CurrentItem);
  125.     integer counter = 0;
  126.     integer index = 0;
  127.     foreach (map<string,any> s, BootCommon::sections, {
  128.     if (s["name"]:"" == current)
  129.         index = counter;
  130.     counter = counter + 1;
  131.     });
  132.     list<map<string,any> > sects = BootCommon::sections;
  133.     if (op == `up)
  134.     {
  135.     if (index > 0)
  136.     {
  137.         sects = (list<map<string,any > >)
  138.         BootCommon::swapItems(sects, index, index - 1);
  139.         index = index - 1;
  140.         BootCommon::sections = sects;
  141.         _RedrawSectionsTable (sects);
  142.         UI::ChangeWidget (`id (`sects), `CurrentItem,
  143.         sects[index, "name"]:"");
  144.         BootCommon::changed = true;
  145.     }
  146.     }
  147.     else if (op == `down)
  148.     {
  149.     if (index < (size(sects) - 1))
  150.     {
  151.         sects = (list<map<string,any> >)
  152.         BootCommon::swapItems(sects, index, index + 1);
  153.         index = index + 1;
  154.         BootCommon::sections = sects;
  155.         _RedrawSectionsTable (sects);
  156.         UI::ChangeWidget (`id (`sects), `CurrentItem,
  157.         sects[index, "name"]:"");
  158.         BootCommon::changed = true;
  159.     }
  160.     }
  161.     else if (op == `default)
  162.     {
  163.     BootCommon::globals["default"] = current;
  164.     _RedrawSectionsTable (sects);
  165.     UI::ChangeWidget (`id (`sects), `CurrentItem, current);
  166.     BootCommon::changed = true;
  167.     }
  168.     else if (op == `add || op == `edit)
  169.     {
  170.     map<string,any> selected = sects[index]:$[];
  171.     string name = selected["name"]:"";
  172.     BootCommon::current_section = selected;
  173.     BootCommon::current_section_index = op == `add ? -1 : index;
  174.     BootCommon::current_section_name = name;
  175.     y2internal ("Selected section: %1", BootCommon::current_section);
  176.     return (symbol)op;
  177.     }
  178.     else if (op == `delete && confirmSectionDeletePopup (current))
  179.     {
  180.     BootCommon::removed_sections = add (BootCommon::removed_sections,
  181.         sects[index, "original_name"]:"");
  182.     sects = remove (sects, index);
  183.     if (current == BootCommon::globals["default"]:"")
  184.     {
  185.         BootCommon::globals["default"] = BootCommon::sections[0, "name"]:"";
  186.     }
  187.     BootCommon::sections = sects;
  188.     _RedrawSectionsTable (sects);
  189.     BootCommon::changed = true;
  190.     }
  191.     UI::SetFocus (`id (`sects));
  192.     return nil;
  193. }
  194.  
  195.  
  196. /**
  197.  * Get map of widget
  198.  * @return a map of widget
  199.  */
  200. map<string,any> genericSectionsListWidget () {
  201.     return $[
  202.     "widget" : `custom,
  203.     "custom_widget" : `VBox (
  204.         `HBox (
  205.         `Table (`id (`sects),
  206.             `opt (`keepSorting, `notify),
  207.             `header (
  208.             // table header, Def stands for default
  209.             _("Def."),
  210.             // table header
  211.             _("Label"),
  212.             // table header
  213.             _("Type"),
  214.             // table header; header for section details, either
  215.             // the specification of the kernel image to load,
  216.             // or the specification of device to boot from
  217.             _("Section Summary")
  218.             ), []),
  219.         `HSpacing (1),
  220.         `VBox (
  221.             `VStretch (),
  222.             // pushbutton
  223.             `PushButton (`id (`up), _("&Up")),
  224.             // pushbutton
  225.             `PushButton (`id (`down), _("&Down")),
  226.             `VStretch ()
  227.         )
  228.         ),
  229.         `HBox (
  230.         `PushButton (`id (`add), `opt (`key_F3), Label::AddButton ()),
  231.         `PushButton (`id (`edit), `opt (`key_F4), Label::EditButton ()),
  232.         `PushButton (`id (`delete), `opt (`key_F5),
  233.             Label::DeleteButton ()),
  234.         `HStretch (),
  235.         // pushbutton
  236.         `PushButton (`id (`default), _("Set as De&fault"))
  237.         )
  238.     ),
  239.     "init" : _SectionsInit,
  240.     "handle" : _SectionsHandle,
  241.     "help" : generic_Help("section-list"),
  242.     ];
  243. }
  244.  
  245.  
  246. } // include end
  247.