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 / keyboard / dialogs.ycp
Text File  |  2006-11-29  |  9KB  |  320 lines

  1. /**
  2.  * File:
  3.  *    keyboard/dialogs.ycp
  4.  *
  5.  * Authors:
  6.  *    Klaus   KΣmpf <kkaempf@suse.de>
  7.  *    Michael Hager <mike@suse.de>
  8.  *    Stefan  Hundhammer <sh@suse.de>
  9.  *
  10.  * Summary:
  11.  *    Dialogs for keyboard configuration
  12.  *
  13.  * $Id: dialogs.ycp 34165 2006-11-08 12:40:55Z jsuchome $
  14.  */
  15. {
  16.     textdomain "country";
  17.  
  18.   import "Keyboard";
  19.   import "Label";
  20.   import "Mode";
  21.   import "Popup";
  22.   import "Stage";
  23.   import "Wizard";
  24.  
  25.   /**
  26.    * Dialog with expert keyboard configuration
  27.    */
  28.   define symbol KeyboardExpertDialog() {
  29.  
  30.     symbol ret = `none;
  31.     // help text for keyboard expert screen
  32.     string help_text = _("<p>
  33. Here, fine tune various settings of the keyboard module.
  34. These settings are written into the file <tt>/etc/sysconfig/keyboard</tt>.
  35. If unsure, use the default values already selected.
  36. </p>")
  37.  
  38.     // help text for keyboard expert screen cont.
  39.     + _("<p>Settings made here apply only to the console keyboard.  Configure the keyboard for the graphical user interface with another tool, such as SaX.</p>
  40. ");
  41.  
  42.     // general help trailer
  43.     help_text = help_text + _("<p>
  44. For <b>Devices for Lock</b>, enter a space-separated list of devices to which to apply the Scroll Lock, Num Lock, and Caps Lock settings.
  45. </p>");
  46.  
  47.     // label text
  48.  
  49.     UI::OpenDialog (`opt(`decorated),
  50.     `HBox (
  51.         `HWeight(30, `RichText( help_text )),
  52.         `HStretch(),
  53.         `HSpacing(1),
  54.         `HWeight(70,
  55.         `VBox (
  56.             `HSpacing( 60 ),
  57.             // heading text
  58.             `Heading (_("Expert Keyboard Settings")),
  59.             `VSpacing(`opt(`vstretch), 1),
  60.             `Left (
  61.             // label text
  62.             `TextEntry( `id(`rate), _("Repeat &Rate"))
  63.             ),
  64.             `Left (
  65.             `TextEntry(`id(`delay),
  66.             // label text
  67.             _("De&lay before Repetition Starts"))
  68.             ),
  69.             `VSpacing (`opt(`vstretch), 1),
  70.             `Frame (
  71.             // frame label
  72.             _("Start-Up States"),
  73.             `VBox(
  74.                 `Left (`ComboBox(
  75.                 // combobox label
  76.                 `id(`numlock), _("&Num Lock On"),
  77.                 [
  78.                     // combobox item
  79.                     `item (`id("bios"), _("BIOS Settings")),
  80.                     // combobox item
  81.                     `item( `id("yes"), _("Yes")),
  82.                     // combobox item
  83.                     `item( `id("no"), _("No")),
  84.                     // combobox item
  85.                     `item( `id("untouched"), _("<Untouched>"))
  86.                 ]
  87.                 )),
  88.                 `VSpacing(`opt(`vstretch), 1),
  89.                 `Left (
  90.                 // checkbox label
  91.                 `CheckBox (`id(`capslock), _("Ca&ps Lock On"))
  92.                 ),
  93.                 `Left(
  94.                 // checkbox label
  95.                 `CheckBox( `id(`scrlock), _("&Scroll Lock On"))
  96.                 )
  97.             )
  98.             ),
  99.             `VSpacing(`opt(`vstretch), 1),
  100.             `Left (
  101.             // textentry label
  102.             `TextEntry (`id(`tty), _("&Devices for Lock"))
  103.             ),
  104.             `VSpacing(`opt(`vstretch), 1),
  105.             `Left (
  106.             // label text
  107.             `CheckBox (`id(`discaps), _("D&isable Caps Lock"))
  108.             ),
  109.             `VSpacing (1),
  110.             `VStretch(),
  111.             `HBox (
  112.             `PushButton (`id(`ok),`opt(`default),Label::OKButton()),
  113.             `PushButton (`id(`cancel), Label::CancelButton())
  114.             ),
  115.             `VSpacing (0.5)
  116.         )
  117.         )
  118.     )
  119.     );
  120.     map val = Keyboard::GetExpertValues();
  121.     map val_on_entry = val;
  122.     y2milestone( "map %1", val );
  123.     UI::ChangeWidget( `id(`rate), `Value, val["rate"]:"" );
  124.     UI::ChangeWidget( `id(`rate), `ValidChars, "0123456789." );
  125.     UI::ChangeWidget( `id(`delay), `Value, val["delay"]:"" );
  126.     UI::ChangeWidget( `id(`delay), `ValidChars, "0123456789" );
  127.     string tmp = val["numlock"]:"";
  128.     if( tmp == "" )
  129.     {
  130.     tmp = "untouched";
  131.     }
  132.     UI::ChangeWidget( `id(`numlock), `Value, tmp );
  133.     UI::ChangeWidget( `id(`capslock), `Value, val["capslock"]:false );
  134.     UI::ChangeWidget( `id(`scrlock), `Value, val["scrlock"]:false );
  135.     UI::ChangeWidget( `id(`tty), `Value, val["tty"]:"" );
  136.     UI::ChangeWidget( `id(`discaps), `Value, val["discaps"]:false );
  137.     repeat
  138.     {
  139.     ret = (symbol)UI::UserInput();
  140.     if( ret == `ok )
  141.     {
  142.         val = $[];
  143.         val["rate"] = UI::QueryWidget( `id(`rate), `Value );
  144.         val["delay"] = UI::QueryWidget( `id(`delay), `Value );
  145.         val["numlock"] = "";
  146.         tmp = (string)UI::QueryWidget( `id(`numlock), `Value );
  147.         y2milestone( "tmp %1", tmp );
  148.         if( contains( ["bios", "yes", "no"], tmp ) )
  149.         {
  150.         val["numlock"] = tmp;
  151.         }
  152.         val["capslock"] = UI::QueryWidget( `id(`capslock), `Value );
  153.         val["scrlock"] = UI::QueryWidget( `id(`scrlock), `Value );
  154.         val["tty"] = UI::QueryWidget( `id(`tty), `Value );
  155.         val["discaps"] = UI::QueryWidget( `id(`discaps), `Value );
  156.         y2milestone( "map ok %1", val );
  157.         Keyboard::SetExpertValues( val );
  158.     }
  159.     } until ( ret == `cancel || ret == `ok );
  160.     UI::CloseDialog();
  161.   };
  162.  
  163.   /**
  164.    * main dialog for choosing keyboard
  165.    * @param args: arguments forwarded from the initial client call
  166.    * (checking for "enable_back" and "enable_next" keys)
  167.    */
  168.   define symbol KeyboardDialog (map args) {
  169.  
  170.     term keyboardsel = `dummy();
  171.     string keyboard = "";
  172.  
  173.     // Create keyboard selection box with the default selection.
  174.     // First build a map sorted by translations.
  175.     //
  176.     list<term> keyboardlist_by_translation = maplist (
  177.     string code, string name, Keyboard::Selection(), ``(
  178.         `item (`id(code), name, Keyboard::current_kbd == code)
  179.     ));
  180.  
  181.     keyboardlist_by_translation = sort (
  182.     term a, term b, keyboardlist_by_translation, {
  183.         list lsorted    = lsort ([a[1]:"", b[1]:""]);
  184.         return (lsorted[0]:"" == a[1]:"" && a[1]:"" != b[1]:"");
  185.     });
  186.  
  187.     keyboardsel = `SelectionBox( `id( `keyboard ), `opt(`notify),
  188.         // title for selection box 'keyboard layout'
  189.         _("&Keyboard Layout"),
  190.         keyboardlist_by_translation);
  191.  
  192.     // title for input field to test the keyboard setting
  193.     // (no more than about 25 characters!)
  194.     term test = `TextEntry( _("&Test") );
  195.     if (Mode::config ())
  196.     test = `Empty();
  197.  
  198.     // Put test widget below selection list.
  199.     //
  200.     keyboardsel = `VBox(
  201.         keyboardsel,
  202.         test,
  203.         `VSpacing( 0.8 ),
  204.         // push button
  205.         `PushButton( `id(`expert), _("E&xpert Settings...") )
  206.          );
  207.  
  208.     /* ----------------------------------------------------------------------
  209.      * Build dialog
  210.      * ----------------------------------------------------------------------*/
  211.  
  212.     term contents =
  213.         `VBox(
  214.         `HBox(
  215.             `HWeight ( 20, `HStretch() ),
  216.             `HWeight ( 50, keyboardsel ),
  217.             `HWeight ( 20, `HStretch() )
  218.         ),
  219.         `VSpacing()
  220.         );
  221.  
  222.     // help text for keyboard screen (header)
  223.     string help_text = _("
  224. <p><big><b>Keyboard Configuration</b></big></p>") +
  225.  
  226.     // help text for keyboard screen
  227.     _("<p>
  228. Choose the <b>Keyboard Layout</b> to use for
  229. installation and in the installed system.  
  230. Test the layout in <b>Test</b>.
  231. For advanced options, such as repeat rate and delay, select <b>Expert Settings</b>.
  232. </p>
  233. ");
  234.  
  235.     // general help trailer
  236.     help_text = help_text + _("<p>
  237. If unsure, use the default values already selected.
  238. </p>");
  239.  
  240.     // Screen title for keyboard screen
  241.     Wizard::SetContents ( _("Keyboard Configuration"), contents, help_text,
  242.     args["enable_back"]:true, args["enable_next"]:true);
  243.  
  244.     Wizard::SetDesktopIcon("keyboard");
  245.     if (Stage::initial () || Stage::firstboot ())
  246.     Wizard::SetTitleIcon ("yast-keyboard");
  247.  
  248.     // Initially set the current keyboard to establish a consistent state.
  249.     //
  250.     Keyboard::Set (Keyboard::current_kbd);
  251.  
  252.     UI::SetFocus( `id(`keyboard ));
  253.  
  254.     any ret = nil;
  255.  
  256.     repeat {
  257.  
  258.     ret = Wizard::UserInput();
  259.  
  260.     if (ret == `abort && Popup::ConfirmAbort(`painless) && !Mode::config ())
  261.     {
  262.         return `abort;
  263.     }
  264.  
  265.     if( ret==`expert )
  266.         {
  267.         KeyboardExpertDialog();
  268.         }
  269.  
  270.     if( ret == `next || ret == `keyboard )
  271.     {
  272.         // Get the selected keyboard.
  273.         //
  274.         keyboard = (string)UI::QueryWidget( `id( `keyboard ), `CurrentItem );
  275.  
  276.         y2milestone ("on entry %1 current %2 ret %3",
  277.         Keyboard::keyboard_on_entry, Keyboard::current_kbd, keyboard);
  278.  
  279.         // Set it in Keyboard module.
  280.         if (Keyboard::current_kbd != keyboard)
  281.         {
  282.         Keyboard::Set( keyboard );
  283.         }
  284.  
  285.         if (ret == `next && !Mode::config ())
  286.         {
  287.         // User wants to keep his changes.
  288.         // Set user_decision flag in keyboard module.
  289.         //
  290.         Keyboard::user_decision = true;
  291.  
  292.         if (Keyboard::Modified ())
  293.         {
  294.             // User has chosen a different keyboard from the database.
  295.             // ==> clear unique_key in the keyboard module to achieve
  296.             // configured = no and needed = no in Keyboard::Save() for
  297.             // _ALL_ keyboards.
  298.             //
  299.             y2milestone("Clearing unique key <%1> due to manual selection",
  300.                 Keyboard::unique_key );
  301.  
  302.             Keyboard::unique_key = "";
  303.         }
  304.         }
  305.     }
  306.     } until ( ret == `next || ret == `back || ret == `cancel );
  307.  
  308.     if (ret == `back || ret == `cancel)
  309.     {
  310.     y2milestone("`back or `cancel restoring: <%1>", Keyboard::keyboard_on_entry);
  311.  
  312.     // Reset keyboard to initial state.
  313.     Keyboard::Set (Keyboard::keyboard_on_entry);
  314.     }
  315.  
  316.     return (symbol)ret;
  317.   }
  318.  
  319. }
  320.