home *** CD-ROM | disk | FTP | other *** search
Wrap
/** * File: * keyboard/dialogs.ycp * * Authors: * Klaus KΣmpf <kkaempf@suse.de> * Michael Hager <mike@suse.de> * Stefan Hundhammer <sh@suse.de> * * Summary: * Dialogs for keyboard configuration * * $Id: dialogs.ycp 34165 2006-11-08 12:40:55Z jsuchome $ */ { textdomain "country"; import "Keyboard"; import "Label"; import "Mode"; import "Popup"; import "Stage"; import "Wizard"; /** * Dialog with expert keyboard configuration */ define symbol KeyboardExpertDialog() { symbol ret = `none; // help text for keyboard expert screen string help_text = _("<p> Here, fine tune various settings of the keyboard module. These settings are written into the file <tt>/etc/sysconfig/keyboard</tt>. If unsure, use the default values already selected. </p>") // help text for keyboard expert screen cont. + _("<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> "); // general help trailer help_text = help_text + _("<p> 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. </p>"); // label text UI::OpenDialog (`opt(`decorated), `HBox ( `HWeight(30, `RichText( help_text )), `HStretch(), `HSpacing(1), `HWeight(70, `VBox ( `HSpacing( 60 ), // heading text `Heading (_("Expert Keyboard Settings")), `VSpacing(`opt(`vstretch), 1), `Left ( // label text `TextEntry( `id(`rate), _("Repeat &Rate")) ), `Left ( `TextEntry(`id(`delay), // label text _("De&lay before Repetition Starts")) ), `VSpacing (`opt(`vstretch), 1), `Frame ( // frame label _("Start-Up States"), `VBox( `Left (`ComboBox( // combobox label `id(`numlock), _("&Num Lock On"), [ // combobox item `item (`id("bios"), _("BIOS Settings")), // combobox item `item( `id("yes"), _("Yes")), // combobox item `item( `id("no"), _("No")), // combobox item `item( `id("untouched"), _("<Untouched>")) ] )), `VSpacing(`opt(`vstretch), 1), `Left ( // checkbox label `CheckBox (`id(`capslock), _("Ca&ps Lock On")) ), `Left( // checkbox label `CheckBox( `id(`scrlock), _("&Scroll Lock On")) ) ) ), `VSpacing(`opt(`vstretch), 1), `Left ( // textentry label `TextEntry (`id(`tty), _("&Devices for Lock")) ), `VSpacing(`opt(`vstretch), 1), `Left ( // label text `CheckBox (`id(`discaps), _("D&isable Caps Lock")) ), `VSpacing (1), `VStretch(), `HBox ( `PushButton (`id(`ok),`opt(`default),Label::OKButton()), `PushButton (`id(`cancel), Label::CancelButton()) ), `VSpacing (0.5) ) ) ) ); map val = Keyboard::GetExpertValues(); map val_on_entry = val; y2milestone( "map %1", val ); UI::ChangeWidget( `id(`rate), `Value, val["rate"]:"" ); UI::ChangeWidget( `id(`rate), `ValidChars, "0123456789." ); UI::ChangeWidget( `id(`delay), `Value, val["delay"]:"" ); UI::ChangeWidget( `id(`delay), `ValidChars, "0123456789" ); string tmp = val["numlock"]:""; if( tmp == "" ) { tmp = "untouched"; } UI::ChangeWidget( `id(`numlock), `Value, tmp ); UI::ChangeWidget( `id(`capslock), `Value, val["capslock"]:false ); UI::ChangeWidget( `id(`scrlock), `Value, val["scrlock"]:false ); UI::ChangeWidget( `id(`tty), `Value, val["tty"]:"" ); UI::ChangeWidget( `id(`discaps), `Value, val["discaps"]:false ); repeat { ret = (symbol)UI::UserInput(); if( ret == `ok ) { val = $[]; val["rate"] = UI::QueryWidget( `id(`rate), `Value ); val["delay"] = UI::QueryWidget( `id(`delay), `Value ); val["numlock"] = ""; tmp = (string)UI::QueryWidget( `id(`numlock), `Value ); y2milestone( "tmp %1", tmp ); if( contains( ["bios", "yes", "no"], tmp ) ) { val["numlock"] = tmp; } val["capslock"] = UI::QueryWidget( `id(`capslock), `Value ); val["scrlock"] = UI::QueryWidget( `id(`scrlock), `Value ); val["tty"] = UI::QueryWidget( `id(`tty), `Value ); val["discaps"] = UI::QueryWidget( `id(`discaps), `Value ); y2milestone( "map ok %1", val ); Keyboard::SetExpertValues( val ); } } until ( ret == `cancel || ret == `ok ); UI::CloseDialog(); }; /** * main dialog for choosing keyboard * @param args: arguments forwarded from the initial client call * (checking for "enable_back" and "enable_next" keys) */ define symbol KeyboardDialog (map args) { term keyboardsel = `dummy(); string keyboard = ""; // Create keyboard selection box with the default selection. // First build a map sorted by translations. // list<term> keyboardlist_by_translation = maplist ( string code, string name, Keyboard::Selection(), ``( `item (`id(code), name, Keyboard::current_kbd == code) )); keyboardlist_by_translation = sort ( term a, term b, keyboardlist_by_translation, { list lsorted = lsort ([a[1]:"", b[1]:""]); return (lsorted[0]:"" == a[1]:"" && a[1]:"" != b[1]:""); }); keyboardsel = `SelectionBox( `id( `keyboard ), `opt(`notify), // title for selection box 'keyboard layout' _("&Keyboard Layout"), keyboardlist_by_translation); // title for input field to test the keyboard setting // (no more than about 25 characters!) term test = `TextEntry( _("&Test") ); if (Mode::config ()) test = `Empty(); // Put test widget below selection list. // keyboardsel = `VBox( keyboardsel, test, `VSpacing( 0.8 ), // push button `PushButton( `id(`expert), _("E&xpert Settings...") ) ); /* ---------------------------------------------------------------------- * Build dialog * ----------------------------------------------------------------------*/ term contents = `VBox( `HBox( `HWeight ( 20, `HStretch() ), `HWeight ( 50, keyboardsel ), `HWeight ( 20, `HStretch() ) ), `VSpacing() ); // help text for keyboard screen (header) string help_text = _(" <p><big><b>Keyboard Configuration</b></big></p>") + // help text for keyboard screen _("<p> Choose the <b>Keyboard Layout</b> to use for installation and in the installed system. Test the layout in <b>Test</b>. For advanced options, such as repeat rate and delay, select <b>Expert Settings</b>. </p> "); // general help trailer help_text = help_text + _("<p> If unsure, use the default values already selected. </p>"); // Screen title for keyboard screen Wizard::SetContents ( _("Keyboard Configuration"), contents, help_text, args["enable_back"]:true, args["enable_next"]:true); Wizard::SetDesktopIcon("keyboard"); if (Stage::initial () || Stage::firstboot ()) Wizard::SetTitleIcon ("yast-keyboard"); // Initially set the current keyboard to establish a consistent state. // Keyboard::Set (Keyboard::current_kbd); UI::SetFocus( `id(`keyboard )); any ret = nil; repeat { ret = Wizard::UserInput(); if (ret == `abort && Popup::ConfirmAbort(`painless) && !Mode::config ()) { return `abort; } if( ret==`expert ) { KeyboardExpertDialog(); } if( ret == `next || ret == `keyboard ) { // Get the selected keyboard. // keyboard = (string)UI::QueryWidget( `id( `keyboard ), `CurrentItem ); y2milestone ("on entry %1 current %2 ret %3", Keyboard::keyboard_on_entry, Keyboard::current_kbd, keyboard); // Set it in Keyboard module. if (Keyboard::current_kbd != keyboard) { Keyboard::Set( keyboard ); } if (ret == `next && !Mode::config ()) { // User wants to keep his changes. // Set user_decision flag in keyboard module. // Keyboard::user_decision = true; if (Keyboard::Modified ()) { // User has chosen a different keyboard from the database. // ==> clear unique_key in the keyboard module to achieve // configured = no and needed = no in Keyboard::Save() for // _ALL_ keyboards. // y2milestone("Clearing unique key <%1> due to manual selection", Keyboard::unique_key ); Keyboard::unique_key = ""; } } } } until ( ret == `next || ret == `back || ret == `cancel ); if (ret == `back || ret == `cancel) { y2milestone("`back or `cancel restoring: <%1>", Keyboard::keyboard_on_entry); // Reset keyboard to initial state. Keyboard::Set (Keyboard::keyboard_on_entry); } return (symbol)ret; } }