home *** CD-ROM | disk | FTP | other *** search
Text File | 2006-11-29 | 38.0 KB | 1,497 lines |
- /**
- * File: Wizard.ycp
- * Package: yast2
- * Summary: Wizard dialog
- * Authors: Stefan Hundhammer <sh@suse.de>
- *
- * $Id: Wizard.ycp 33164 2006-09-27 08:42:24Z jsrain $
- *
- * Provides the wizard dialog (common screen for all YaST2 installation
- * modules) and functions to set the contents, to replace and restore
- * special widgets.
- */
-
- {
-
- module "Wizard";
- textdomain "base";
-
- import "Label";
- import "Popup";
- import "Directory";
- import "SuSERelease";
-
- // keep trailing "/" !!
- string theme_path = Directory::themedir + "/current";
- string icon_path = theme_path + "/icons/22x22/apps";
-
- boolean have_fancy_ui_cache = nil;
-
- // this variable is set from Product:: constructor
- // to setup correct &product; macro in UI
- string product_name = "";
-
- boolean haveFancyUI()
- {
- if ( have_fancy_ui_cache == nil )
- {
- map ui_info = UI::GetDisplayInfo();
-
- have_fancy_ui_cache = UI::HasSpecialWidget(`Wizard ) == true
- && ui_info[ "Depth" ]:0 >= 15
- && ui_info[ "DefaultWidth" ]:0 >= 800
- && ui_info[ "DefaultHeight"]:0 >= 600;
-
- // have_fancy_ui_cache = false;
-
- UI::SetFunctionKeys( Label::DefaultFunctionKeyMap() );
- }
-
- return have_fancy_ui_cache;
- }
-
-
- /**
- * Returns a button box with buttons "Back", "Abort", "Next"
- * @return a widget tree
- **/
- global term BackAbortNextButtonBox() {
- return `HBox(
- `HWeight(1, `ReplacePoint(`id(`rep_back ), `PushButton(`id(`back ), `opt (`key_F8), Label::BackButton() ) ) ),
- `HStretch(),
- `ReplacePoint(`id(`rep_abort), `PushButton(`id(`abort), `opt (`key_F9), Label::AbortButton() ) ),
- `HStretch(),
- `HWeight(1, `ReplacePoint(`id(`rep_next ), `PushButton(`id(`next), `opt (`key_F10, `default), Label::NextButton() ) ) )
- );
- }
-
-
- /**
- * Returns a button box with buttons "Back", "Abort Installation", "Next"
- * @return a widget tree
- **/
- global term BackAbortInstallationNextButtonBox()
- {
- return `HBox(
- `HWeight(1, `ReplacePoint(`id(`rep_back ), `PushButton(`id(`back ), `opt (`key_F8), Label::BackButton() ) ) ),
- `HStretch(),
- `ReplacePoint(`id(`rep_abort), `PushButton(`id(`abort), `opt (`key_F9), Label::AbortInstallationButton() ) ),
- `HStretch(),
- `HWeight(1, `ReplacePoint(`id(`rep_next ), `PushButton(`id(`next), `opt (`key_F10, `default), Label::NextButton() ) ) )
- );
- }
-
-
- /**
- * Returns a button box with buttons "Back", "Next"
- * @return a widget tree
- **/
- global term BackNextButtonBox() {
- return `HBox(
- `HWeight(1, `ReplacePoint(`id(`rep_back ), `PushButton(`id(`back ), `opt (`key_F8), Label::BackButton() ) ) ),
- `HStretch(),
- `HWeight(1, `ReplacePoint(`id(`rep_next ), `PushButton(`id(`next ), `opt (`key_F10, `default), Label::NextButton() ) ) )
- );
- }
-
-
- /**
- * Returns a button box with buttons "Cancel", "Accept"
- * @return a widget tree
- **/
- global term CancelAcceptButtonBox() {
- return `HBox(
- `HWeight(1, `Empty() ), // Layout trick to make sure the center button is centered
- `HStretch(),
- `HWeight(1, `PushButton(`id(`cancel ), `opt (`key_F9), Label::CancelButton() ) ),
- `HStretch(),
- `HWeight(1, `PushButton(`id(`accept ), `opt (`key_F10, `default), Label::AcceptButton() ) )
- );
- }
-
-
- /**
- * Returns a button box with buttons "Abort", "Accept"
- * @return a widget tree
- **/
- global term AbortAcceptButtonBox() {
- return `HBox(
- `HWeight(1, `ReplacePoint (`id (`back_rep), `Empty())), // Layout trick to make sure the center button is centered
- `HStretch(),
- `PushButton(`id(`abort ), `opt (`key_F9), Label::AbortButton() ),
- `HStretch(),
- `HWeight(1, `PushButton(`id(`accept ), `opt (`key_F10, `default), Label::AcceptButton() ) )
- );
- }
-
-
- /**
- * Returns a button box with buttons "Abort Installation", "Accept"
- * @return a widget tree
- **/
- global term AbortInstallationAcceptButtonBox() {
- return `HBox(
- `HWeight(1, `Empty() ), // Layout trick to make sure the center button is centered
- `HStretch(),
- `PushButton(`id(`abort ), `opt (`key_F9), Label::AbortInstallationButton() ),
- `HStretch(),
- `HWeight(1, `PushButton(`id(`accept ), `opt (`key_F10, `default), Label::AcceptButton() ) )
- );
- }
-
-
- /**
- * Returns a button box with buttons "Abort", "Apply", "Finish"
- * @return a widget tree
- **/
- global term AbortApplyFinishButtonBox()
- {
- return `HBox(
- `PushButton(`id(`abort ), Label::AbortButton() ),
- `HStretch(),
- // button text
- `PushButton(`id(`apply), _("&Apply") ),
- `HStretch(),
- `PushButton(`id(`finish), Label::FinishButton() )
- );
- }
-
-
- /**
- * @short Create a Generic Dialog
- *
- * @descr Returns a term describing a generic wizard dialog with a configurable
- * button box.
- *
- * @stable
- *
- * @param button_box term that contains a `HBox() with buttons in it
- * @return term term describing the dialog.
- **/
- global term GenericDialog( term button_box ) {
- return `VBox( `id(`WizardDialog),
- `ReplacePoint( `id(`topmenu ), `Empty() ),
- `HBox(
- `HWeight( 30, `ReplacePoint( `id(`helpSpace), `RichText(`id(`HelpText), ""))),
- `HSpacing(1),
- `HWeight( 70, `VBox(
- `VSpacing(0.2),
- `HBox(
- // translators: dialog title to appear before any content is initialized
- `Heading(`id(`title), `opt (`hstretch), _("YaST2\nInitializing ...")),
- `HStretch()
- ),
- `VWeight( 1, // Layout trick: Lower layout priority with weight
- `HVCenter(`opt(`hvstretch),
- `ReplacePoint(`id(`contents), `Empty() )
- )
- ),
- `ReplacePoint(`id(`rep_button_box), button_box ),
- `VSpacing(0.2)
- )
- ),
- `HSpacing(1)
- )
- );
- }
-
-
-
- /**
- * Check if the topmost dialog is a wizard dialog
- * (i.e. has a widget with `id(`WizardDialog) )
- *
- * @return boolean True if topmost dialog is a wizard dialog, false otherwise
- **/
- global boolean IsWizardDialog() {
- return
- UI::WidgetExists(`id(`WizardDialog) ) == true ||
- UI::WidgetExists(`wizard) == true;
- }
-
-
- /**
- * Open a popup dialog that displays a help text (rich text format).
- *
- * @stable
- *
- * @param help_text the text to display
- **/
- global void ShowHelp( string help_text ) {
- Popup::LongText(
- // Heading for help popup window
- _("Help"),
- `RichText( help_text ),
- 50, 20 );
- }
-
-
- /**
- * Returns a standard wizard dialog with buttons "Next", "Back", "Abort".
- *
- * @stable
- *
- * @return term describing the dialog.
- **/
- global term NextBackDialog() {
- return GenericDialog( BackAbortNextButtonBox() );
- }
-
-
- /**
- * Returns a standard wizard dialog with buttons "Cancel", "Accept"
- *
- * @stable
- *
- * @return term describing the dialog.
- **/
- global term AcceptDialog() {
- return GenericDialog( CancelAcceptButtonBox() );
- }
-
-
- /**
- * Open any wizard dialog.
- *
- * @stable
- *
- * @param dialog a wizard dialog, e.g. Wizard::GenericDialog()
- **/
- global void OpenDialog( term dialog ) {
- UI::OpenDialog( `opt(`defaultsize), dialog );
- }
-
-
- /**
- * Open a dialog with buttons "Next", "Back", "Abort"
- * and set the keyboard focus to "Next".
- **/
- global void OpenNextBackDialog()
- {
- if ( haveFancyUI() )
- {
- UI::OpenDialog(`opt(`defaultsize ),
- `Wizard(`back, Label::BackButton(),
- `abort, Label::AbortButton(),
- `next, Label::NextButton() ) );
- }
- else
- {
- Wizard::OpenDialog( NextBackDialog() );
- UI::SetFocus(`id(`next) );
- }
- }
-
-
- /**
- * Open a dialog with "Accept", "Cancel"
- * and set the keyboard focus to "Accept".
- **/
- global void OpenAcceptDialog()
- {
- if ( haveFancyUI() )
- {
- UI::OpenDialog(`opt(`defaultsize ),
- `Wizard(`no_back_button, "",
- `cancel, Label::CancelButton(),
- `accept, Label::AcceptButton() ) );
-
- // Don't let sloppy calls to Wizard::SetContents() disable this button by accident
- UI::WizardCommand(`ProtectNextButton( true ) );
- }
- else
- {
- Wizard::OpenDialog( AcceptDialog() );
- UI::SetFocus(`id(`accept) );
- }
- }
-
-
- /**
- * Open a dialog with "Accept", "Cancel"
- * and set the keyboard focus to "Accept".
- **/
- global void OpenAbortApplyFinishDialog()
- {
- if ( haveFancyUI() )
- {
- UI::OpenDialog(`opt(`defaultsize ),
- `Wizard(`apply, _( "&Apply" ),
- `abort, Label::AbortButton(),
- `finish, Label::FinishButton() ) );
- }
- else
- {
- Wizard::OpenDialog( GenericDialog( AbortApplyFinishButtonBox() ) );
- UI::SetFocus(`id(`finish ) );
- }
- }
-
-
- /**
- * Open a dialog with "Accept", "Cancel" that will also accept workflow steps.
- **/
- global void OpenAcceptStepsDialog()
- {
- if ( haveFancyUI() )
- {
- UI::OpenDialog(`opt(`defaultsize ),
- `Wizard(`opt(`stepsEnabled),
- `no_back_button, "",
- `cancel, Label::CancelButton(),
- `accept, Label::AcceptButton() ) );
-
- // Don't let sloppy calls to Wizard::SetContents() disable this button by accident
- UI::WizardCommand(`ProtectNextButton( true ) );
- }
- else
- {
- OpenAcceptDialog();
- }
- }
-
-
-
- /**
- * Open a dialog with "Accept", "Cancel" that will also accept workflow steps.
- **/
- global void OpenAcceptAbortStepsDialog()
- {
- if ( haveFancyUI() )
- {
- UI::OpenDialog(`opt(`defaultsize ),
- `Wizard(`opt(`stepsEnabled),
- `no_back_button, "",
- `abort, Label::AbortButton(),
- `accept, Label::AcceptButton() ) );
-
- // Don't let sloppy calls to Wizard::SetContents() disable this button by accident
- UI::WizardCommand(`ProtectNextButton( true ) );
- }
- else
- {
- Wizard::OpenDialog( GenericDialog( AbortAcceptButtonBox() ) );
- }
- }
-
-
- /**
- * Open a dialog with "Back", "Next", "Abort" that will also accept workflow steps.
- **/
- global void OpenNextBackStepsDialog()
- {
- if ( haveFancyUI() )
- {
- UI::OpenDialog(`opt(`defaultsize ),
- `Wizard(`opt(`stepsEnabled),
- `back, Label::BackButton(),
- `abort, Label::AbortButton(),
- `next, Label::NextButton() ) );
- }
- else
- {
- OpenNextBackDialog();
- }
- }
-
-
- /**
- * Open a wizard dialog with simple layout
- *
- * no graphics, no steps,
- * only a help widget buttons (by default "Back", "Abort", "Next").
- *
- * This is the only type of wizard dialog which still allows replacing
- * the help space - either already upon opening it or later with
- * Wizard::ReplaceCustomHelp().
- *
- * If help_space_contents is 'nil', the normal help widget will remain.
- * If button_box is 'nil', Wizard::BackAbortNextButtonBox() is used.
- *
- * @see CloseDialog
- *
- * @param help_space_contents Help space contents
- * @param button_box Buttom Box
- * @return void
- **/
- global void OpenCustomDialog( term help_space_contents,
- term button_box )
- {
- if ( button_box == nil )
- button_box = BackAbortNextButtonBox();
-
- UI::OpenDialog(`opt(`defaultsize),
- GenericDialog( button_box ) );
-
- if ( help_space_contents != nil )
- UI::ReplaceWidget(`id(`helpSpace), help_space_contents );
- }
-
-
- /**
- * Replace the help widget for dialogs opened with Wizard::OpenCustomDialog().
- * @param contents Replace custom help with supplied contents
- **/
- global void ReplaceCustomHelp( term contents )
- {
- if ( UI::WidgetExists( `id(`helpSpace ) ) )
- {
- UI::ReplaceWidget(`id(`helpSpace), contents);
- }
- else
- {
- y2error( "Wizard::ReplaceHelpSpace() works only for dialogs opened with Wizard::OpenSimpleDialog() !" );
- }
- }
-
-
- /**
- * Close a wizard dialog.
- *
- * @stable
- **/
- global void CloseDialog() {
- if ( IsWizardDialog() )
- {
- UI::CloseDialog();
- }
- else
- {
- y2error( "Wizard::CloseDialog(): Topmost dialog is not a wizard dialog!" );
- }
- }
-
-
- /**
- * Substitute for UI::UserInput
- *
- * This function transparently handles different
- * variations of the wizard layout. Returns `next if `next or `accept were
- * clicked, `back if `back or `cancel were clicked. Simply replace
- * ret = UI::UserInput()
- * with
- * ret = Wizard::UserInput()
- *
- * @return (maybe normalized) widget ID
- **/
- global any UserInput() {
- any input = UI::UserInput();
-
- if ( input == `accept ) return `next;
- if ( input == `cancel ) return `back;
-
- return input;
- }
-
-
- /**
- * Create and open a typical installation wizard dialog.
- *
- * For backwards compatibility only - don't use this any more in new modules.
- **/
- global void CreateDialog()
- {
- // Set productname for help text
- if (product_name == "")
- product_name = SuSERelease::ReleaseName ();
- UI::SetProductName(product_name);
-
- Wizard::OpenNextBackDialog();
- }
-
-
- /**
- * Set the contents of a wizard dialog
- *
- * How the general framework for the installation wizard should
- * look like. This function creates and shows a dialog.
- *
- * @stable
- *
- * @param title Dialog Title
- * @param contents The Dialog contents
- * @param help_text Help text
- * @param has_back Is the Back button enabled?
- * @param has_next Is the Next button enabled?
- * @example_file ../examples/wizard1.ycp
- * @screenshot screenshots/wizard1.png
- **/
- global void SetContents(string title, term contents, string help_text,
- boolean has_back, boolean has_next) {
-
- if ( UI::WizardCommand(`SetDialogHeading( title ) ) == true )
- {
- UI::WizardCommand(`SetHelpText( help_text ) );
- UI::WizardCommand(`EnableNextButton( has_next ) );
- UI::WizardCommand(`EnableBackButton( has_back ) );
- UI::WizardCommand(`SetFocusToNextButton() );
- }
- else
- {
- if ( UI::WidgetExists(`id(`next ) ) )
- {
- UI::ChangeWidget(`id(`next), `Enabled, has_next);
- UI::SetFocus( `id(`next) );
- }
-
- if ( UI::WidgetExists(`id(`back ) ) ) UI::ChangeWidget(`id(`back), `Enabled, has_back);
- if ( UI::WidgetExists(`id(`accept ) ) ) UI::SetFocus( `id(`accept ) );
- if ( UI::WidgetExists(`id(`abort ) ) ) UI::ChangeWidget(`id(`abort),`Enabled, true);
- if ( UI::WidgetExists(`id(`HelpText ) ) ) UI::ChangeWidget(`id(`HelpText), `Value, help_text);
- if ( UI::WidgetExists(`id(`title ) ) ) UI::ChangeWidget(`id(`title), `Value, title);
- }
-
- UI::ReplaceWidget(`id(`contents), contents);
- }
-
-
- /**
- * Clear the wizard contents.
- *
- * This may sound silly, but it gives much faster feedback to the
- * user if used properly: Whenever the user clicks "Next" or
- * "Back", call ClearContents() prior to any lengthy
- * operation -> the user notices instant response, even though he
- * may in fact still have to wait.
- *
- * @stable
- **/
- global void ClearContents() {
- Wizard::SetContents("", `Empty(), "", false, false);
- }
-
-
- /**
- * Set contents and Buttons of wizard dialog
- *
- * Additionally set its title, help_text and buttons labels. Enables both back and next button.
- *
- * @params
- *
- * @param title title of window
- * @param contents contents of dialog
- * @param help_text help text
- * @param back_label label of back button
- * @param next_label label of next button
- **/
- global void SetContentsButtons (string title,
- term contents,
- string help_text,
- string back_label,
- string next_label)
- {
- UI::PostponeShortcutCheck ();
-
- if ( UI::WizardCommand(`SetBackButtonLabel( back_label ) ) == true )
- {
- UI::WizardCommand(`SetNextButtonLabel( next_label ) );
- Wizard::SetContents( title, contents, help_text, true, true );
- }
- else
- {
- // Set button labels first to avoid geometry problems: SetContents()
- // calls ReplaceWidget() wich triggers a re-layout.
-
- if ( UI::WidgetExists(`id(`back ) ) ) UI::ChangeWidget(`id (`back), `Label, back_label);
- if ( UI::WidgetExists(`id(`next ) ) ) UI::ChangeWidget(`id (`next), `Label, next_label);
- Wizard::SetContents( title, contents, help_text, true, true );
- }
-
- UI::CheckShortcuts ();
- }
-
-
-
- /**
- * Replace the wizard help subwindow with a custom widget.
- *
- * @deprecated
- * @param contents Replace Help with contents
- **/
- global void ReplaceHelp(term contents) {
- if ( UI::WidgetExists( `id(`helpSpace ) ) )
- {
- y2warning( "Wizard::ReplaceHelp() is deprecated!" );
- UI::ReplaceWidget(`id(`helpSpace), contents);
- }
- else
- {
- y2error( "Wizard::ReplaceHelp() is not supported by the new Qt wizard!" );
- }
- }
-
-
-
- /**
- * Set a new help text.
- * @param help_text Help text
- * @example Wizard::SetHelpText("This is a help Text");
- **/
- global void SetHelpText(string help_text)
- {
- if ( UI::WizardCommand(`SetHelpText( help_text ) ) == false )
- {
- if ( UI::WidgetExists( `id(`helpSpace ) ) )
- UI::ReplaceWidget(`id(`helpSpace), `RichText(`id(`HelpText), help_text ) );
- }
- }
-
-
- /**
- * Restore the wizard help subwindow.
- * @param help_text Help text
- **/
- global void RestoreHelp(string help_text)
- {
- Wizard::SetHelpText( help_text );
- }
-
-
- /**
- * Set the dialog's "Next" button with a new label and a new ID
- *
- * @stable
- *
- * @param id Button ID
- * @param label Button Label
- **/
- global void SetNextButton( any id, string label )
- {
- if ( UI::WizardCommand(`SetNextButtonLabel( label ) ) == true )
- {
- UI::WizardCommand(`SetNextButtonID( id ) );
- }
- else
- {
- if ( UI::WidgetExists(`id(`rep_next ) ) )
- {
- UI::ReplaceWidget(`id(`rep_next ),
- `PushButton( `id( id ), `opt (`key_F10, `default), label )
- );
- }
- }
-
- }
-
-
- /**
- * Set the dialog's "Back" button with a new label and a new ID
- *
- * @stable
- *
- * @param id Button ID
- * @param label Button Label
- **/
- global void SetBackButton( any id, string label )
- {
- if ( UI::WizardCommand(`SetBackButtonLabel( label ) ) == true )
- {
- UI::WizardCommand(`SetBackButtonID( id ) );
- }
- else
- {
- if ( UI::WidgetExists(`id(`rep_back ) ) )
- {
- UI::ReplaceWidget(`id(`rep_back),
- `PushButton( `id( id ), `opt (`key_F8), label )
- );
- }
- }
- }
-
-
- /**
- * Set the dialog's "Abort" button with a new label and a new ID
- *
- * @stable
- *
- * @param id Button ID
- * @param label Button Label
- **/
- global void SetAbortButton( any id, string label )
- {
- if ( UI::WizardCommand(`SetAbortButtonLabel( label ) ) == true )
- {
- UI::WizardCommand(`SetAbortButtonID( id ) );
- }
- else
- {
- if ( UI::WidgetExists(`id(`rep_abort ) ) )
- {
- UI::ReplaceWidget(`id(`rep_abort ),
- `PushButton( `id( id ), `opt (`key_F9), label )
- );
- }
- }
- }
- /**
- * Hide the Wizard's "Next" button.
- * Restore it later with RestoreNextButton():
- *
- * @see RestoreNextButton
- * @stable
- **/
- global void HideNextButton()
- {
- if ( UI::WizardCommand(`SetNextButtonLabel( "" ) ) == false )
- {
- if ( UI::WidgetExists(`id(`rep_next ) ) )
- UI::ReplaceWidget(`id(`rep_next ), `Empty() );
- }
- }
-
- /**
- * Hide the Wizard's "Back" button.
- * Restore it later with RestoreBackButton():
- *
- * @see RestoreBackButton
- * @stable
- **/
- global void HideBackButton()
- {
- if ( UI::WizardCommand(`SetBackButtonLabel( "" ) ) == false )
- {
- if ( UI::WidgetExists(`id(`rep_back ) ) )
- UI::ReplaceWidget(`id(`rep_back), `Empty() );
- }
- }
-
-
- /**
- * Hide the Wizard's "Abort" button.
- * Restore it later with RestoreAbortButton():
- *
- * @see RestoreAbortButton
- * @stable
- **/
- global void HideAbortButton()
- {
- if ( UI::WizardCommand(`SetAbortButtonLabel( "" ) ) == false )
- {
- if ( UI::WidgetExists(`id(`rep_abort ) ) )
- UI::ReplaceWidget(`id(`rep_abort ), `Empty() );
- }
- }
-
-
- /**
- * Restore the wizard 'back' button.
- *
- * @see HideBackButton
- * @stable
- **/
- global void RestoreBackButton()
- {
- Wizard::SetBackButton( `back, Label::BackButton() );
- }
-
-
- /**
- * Restore the wizard 'next' button.
- *
- * @see HideNextButton
- * @stable
- **/
- global void RestoreNextButton()
- {
- Wizard::SetNextButton( `next, Label::NextButton() );
- }
-
-
- /**
- * Restore the wizard 'abort' button.
- *
- * @see HideAbortButton
- * @stable
- **/
- global void RestoreAbortButton() {
- Wizard::SetAbortButton( `abort, Label::AbortButton() );
- }
-
-
-
- /**
- * Replace the wizard 'next' button with a custom widget.
- * THIS FUNCTION IS DEPRECATED!
- *
- * @deprecated
- * @see SetNextButton
- * @param contents a term describing the new contents
- **/
- global void ReplaceNextButton(term contents) {
- if ( UI::WidgetExists(`id(`rep_next ) ) )
- UI::ReplaceWidget(`id(`rep_next), contents);
-
- y2warning( "Wizard::ReplaceNextButton() is deprecated!" );
- }
-
- /**
- * Replace the wizard 'back' button with a custom widget.
- * THIS FUNCTION IS DEPRECATED!
- *
- * @deprecated
- * @see SetBackButton
- * @param contents a term describing the new contents
- **/
- global void ReplaceBackButton(term contents) {
- if ( UI::WidgetExists(`id(`rep_back ) ) )
- UI::ReplaceWidget(`id(`rep_back), contents);
-
- y2warning( "Wizard::ReplaceBackButton() is deprecated!" );
- }
-
-
- /**
- * Replace the wizard 'abort' button with a custom widget.
- * THIS FUNCTION IS DEPRECATED!
- *
- * @see SetAbortButton
- * @deprecated
- * @param contents a term describing the new contents
- **/
- global void ReplaceAbortButton(term contents) {
- if ( UI::WidgetExists(`id(`rep_abort ) ) )
- UI::ReplaceWidget(`id(`rep_abort), contents);
-
- y2warning( "Wizard::ReplaceAbortButton() is deprecated!" );
- }
-
-
-
- /**
- * Set the wizard 'title' icon
- *
- * Set the wizard 'title' icon to the specified icon from the standard icon
- * directory.
- *
- * @stable
- *
- * @param icon_name name (without path) of the new icon
- * @see ClearTitleIcon
- **/
- global void SetTitleIcon( string icon_name )
- {
- string icon = icon_name == "" ? "" : ( icon_path + "/" + icon_name + ".png" );
-
- // UI::WizardCommand(`SetVerboseCommands( true ) );
- UI::WizardCommand(`SetDialogIcon( icon ) );
- // UI::WizardCommand(`SetVerboseCommands( false ) );
- }
-
-
- /**
- * Clear the wizard 'title' icon, i.e. replace it with nothing
- *
- * @stable
- * @see SetTitleIcon
- **/
- global void ClearTitleIcon()
- {
- UI::WizardCommand(`SetDialogIcon( "" ) );
- }
-
-
- /**
- * Set Desktop Icon
- * @param file Icon name
- * @return boolean true on success
- */
- global boolean SetDesktopIcon( string file )
- {
- string filename = sformat("%1/%2.desktop", Directory::desktopdir, file);
- // Do not use .yast2.desktop.v.$filename, because ini-agent reads
- // all the desktop files anyway which is wasteful for setting one icon.
- // The config is adapted from .yast2.desktop.
- SCR::RegisterAgent (.yast2.desktop1, `ag_ini(
- `IniAgent( filename,
- $[
- "options" : [ "read_only" ], // rw works but not needed
- "comments" : [ "^[ \t]*[;#].*", ";.*", "\\{[^}]*\\}", "^[ \t]*$" ],
- "sections" : [
- $[ "begin" : [
- "^[ \t]*\\[[ \t]*(.*[^ \t])[ \t]*\\][ \t]*",
- "[%s]",
- ]],
- ],
- "params" : [
- $[ "match" : [
- "^[ \t]*([^=]*[^ \t=])[ \t]*=[ \t]*(.*[^ \t]|)[ \t]*$" ,
- "%s=%s",
- ]],
- ],
- ]
- )
- )
- );
- path filepath = .yast2.desktop1.v."Desktop Entry".Icon;
- string icon = (string) SCR::Read(filepath);
- y2debug("icon: %1 (%2)", icon, filepath);
-
- if (icon == nil)
- return false;
-
- SetTitleIcon(icon);
-
- SCR::UnmountAgent (.yast2.desktop1);
- return true;
- }
-
- /**
- * PRIVATE - Replace the entire Wizard button box with a new one.
- * @param button_box Button Box term
- * @return void
- **/
- void ReplaceButtonBox( term button_box )
- {
- UI::ReplaceWidget(`id(`rep_button_box ), button_box );
- }
-
-
-
- /**
- * Enable the wizard's "Abort" button.
- *
- * @see DisableAbortButton
- * @stable
- **/
- global void EnableAbortButton()
- {
- if ( UI::WizardCommand(`EnableAbortButton( true ) ) == false )
- UI::ChangeWidget(`id(`abort), `Enabled, true );
- }
-
-
- /**
- * Disable the wizard's "Abort" button.
- *
- * @see EnableAbortButton
- * @stable
- **/
- global void DisableAbortButton()
- {
- if ( UI::WizardCommand(`EnableAbortButton( false ) ) == false )
- UI::ChangeWidget(`id(`abort), `Enabled, false );
- }
-
-
- /**
- * Disable the wizard's "Next" (or "Accept") button.
- *
- * @see EnableNextButton
- * @stable
- **/
- global void DisableNextButton()
- {
- if ( UI::WizardCommand(`EnableNextButton( false ) ) == false )
- {
- if ( UI::WidgetExists(`id(`next ) ) )
- UI::ChangeWidget(`id(`next), `Enabled, false );
- else
- UI::ChangeWidget(`id(`accept), `Enabled, false );
- }
- }
-
-
- /**
- * Enable the wizard's "Next" (or "Accept") button.
- *
- * @see DisableNextButton
- * @stable
- **/
- global void EnableNextButton()
- {
- if ( UI::WizardCommand(`EnableNextButton( true ) ) == false )
- {
- if ( UI::WidgetExists(`id(`next ) ) )
- UI::ChangeWidget(`id(`next), `Enabled, true );
- else
- UI::ChangeWidget(`id(`accept), `Enabled, true );
- }
- }
-
-
- /**
- * Disable the wizard's "Back" button.
- *
- * @see EnableBackButton
- * @stable
- **/
- global void DisableBackButton()
- {
- if ( UI::WizardCommand(`EnableBackButton( false ) ) == false )
- UI::ChangeWidget(`id(`back ), `Enabled, false );
- }
-
- /**
- * Enable the wizard's "Back" button.
- *
- * @see DisableBackButton
- * @stable
- **/
- global void EnableBackButton()
- {
- if ( UI::WizardCommand(`EnableBackButton( true ) ) == false )
- UI::ChangeWidget(`id(`back ), `Enabled, true );
- }
-
-
- /**
- * Disable the wizard's "Cancel" button.
- *
- * @see EnableCancelButton
- * @stable
- **/
- global void DisableCancelButton()
- {
- if ( UI::WizardCommand(`EnableCancelButton( false ) ) == false )
- UI::ChangeWidget(`id(`cancel ), `Enabled, false );
- }
-
- /**
- * Enable the wizard's "Cancel" button.
- *
- * @see DisableCancelButton
- * @stable
- **/
- global void EnableCancelButton()
- {
- if ( UI::WizardCommand(`EnableCancelButton( true ) ) == false )
- UI::ChangeWidget(`id(`cancel ), `Enabled, true );
- }
-
- /**
- * Show a "Release Notes" button with the specified label and ID if there is a "steps" panel
- **/
- global void ShowReleaseNotesButton( string label, any id )
- {
- if ( UI::WizardCommand(`ShowReleaseNotesButton( label, id ) ) == false )
- {
- UI::ReplaceWidget (`id (`back_rep), `PushButton (`id (id), label));
- }
- }
-
-
- /**
- * Hide the "Release Notes" button, if there is any
- **/
- global void HideReleaseNotesButton()
- {
- if ( UI::WizardCommand(`HideReleaseNotesButton() ) == false )
- {
- UI::ReplaceWidget (`id (`back_rep), `Empty ());
- }
- }
-
-
- /**
- * Retranslate the wizard buttons.
- *
- * This will revert button labels and IDs
- * to the default that were used upon Wizard::CreateDialog(),
- * Wizard::OpenNextBackDialog(), or Wizard::OpenAcceptDialog().
- **/
- global void RetranslateButtons()
- {
- if ( UI::WidgetExists(`id(`WizardDialog ) ) == true )
- {
- ReplaceButtonBox( UI::WidgetExists(`id(`accept ) ) ?
- Wizard::AbortAcceptButtonBox() :
- Wizard::BackAbortNextButtonBox() );
- }
- else // Qt wizard
- {
- UI::WizardCommand(`RetranslateInternalButtons() );
-
- if ( UI::WidgetExists(`accept) )
- {
- UI::WizardCommand(`SetBackButtonLabel ( "" ) );
- UI::WizardCommand(`SetAbortButtonLabel( Label::AbortButton() ) );
- UI::WizardCommand(`SetNextButtonLabel ( Label::AcceptButton() ) );
- }
- else
- {
- UI::WizardCommand(`SetBackButtonLabel ( Label::BackButton() ) );
- UI::WizardCommand(`SetAbortButtonLabel( Label::AbortButton() ) );
- UI::WizardCommand(`SetNextButtonLabel ( Label::NextButton() ) );
- }
- }
- }
-
-
- /**
- * Set the keyboard focus to the wizard's "Next" (or "Accept") button.
- *
- * @stable
- **/
- global void SetFocusToNextButton()
- {
- if ( UI::WizardCommand(`SetFocusToNextButton() ) == false )
- {
- UI::SetFocus( UI::WidgetExists(`id(`next) ) ? `id(`next) : `id(`accept ) );
- }
- }
-
- /**
- * Set the keyboard focus to the wizard's "Back" (or "Cancel") button.
- *
- * @stable
- **/
- global void SetFocusToBackButton()
- {
- if ( UI::WizardCommand(`SetFocusToBackButton() ) == false )
- {
- UI::SetFocus( UI::WidgetExists(`id(`back) ) ? `id(`back) : `id(`cancel ) );
- }
- }
-
-
-
-
- /* ------------------------------------------------------------ */
- /*
- * screenshot functions
- */
-
- /**
- * Currently used screenshot name.
- * Initially, it must match the UI default, "yast2"
- */
- string screenshot_name = "yast2";
- /**
- * Screenshot names overriden by nested SetScreenShotName calls
- */
- list<string> screenshot_name_stack = [];
-
- /**
- * Declare a name for the current dialog
- *
- * Declare a name for the current dialog to ease making screenshots.
- * By convention, the name is
- * {rpm-name-without-yast2}-{sorting-prefix}-{description}
- * The calls may be nested.
- * @param s eg. "mail-1-conntype"
- * @see RestoreScreenShotName
- */
- global void SetScreenShotName (string s) {
- screenshot_name_stack = prepend (screenshot_name_stack, screenshot_name);
- screenshot_name = s;
- UI::SetModulename (screenshot_name);
- }
-
- /**
- * Restore the screenshot name.
- *
- * If it does not match a SetScreenShotName, "yast2" is used
- * and a y2error logged.
- */
- global void RestoreScreenShotName () {
- screenshot_name = screenshot_name_stack[0]:nil;
- if (screenshot_name == nil)
- {
- screenshot_name = "yast2";
- y2error (1, "No screenshot name to restore!");
- }
- else
- {
- screenshot_name_stack = remove (screenshot_name_stack, 0);
- }
- UI::SetModulename (screenshot_name);
- }
-
- /* ------------------------------------------------------------ */
- /*
- * Tree & Menu Wizard functions
- */
-
- /**
- * Open a Tree dialog with buttons "Next", "Back", "Abort"
- * and set the keyboard focus to "Next".
- **/
- global void OpenTreeNextBackDialog()
- {
- if ( haveFancyUI() )
- {
- UI::OpenDialog(`opt(`defaultsize ),
- `Wizard(`opt(`treeEnabled),
- `back, Label::BackButton(),
- `abort, Label::AbortButton(),
- `next, Label::NextButton()
- )
- );
- }
- else
- {
- Wizard::OpenDialog( NextBackDialog() );
- UI::SetFocus(`id(`next) );
- }
- }
-
- /**
- * Create and open a Tree wizard dialog.
- *
- * For backwards compatibility only - don't use this any more in new modules.
- **/
- global void CreateTreeDialog()
- {
- Wizard::OpenTreeNextBackDialog();
- return;
- }
-
- /**
- * Add Tree Item to tree enabled Wizard
- * @param Tree Tree Data
- * @param parent Parent of this item
- * @param title Item Title
- * @param id Item ID
- * @return list<map> Updated Tree Data
- **/
- global list<map> AddTreeItem(list<map> Tree, string parent , string title, string id) {
- if ( haveFancyUI() )
- {
- UI::WizardCommand(`AddTreeItem( parent, title , id ) );
- }
- else
- {
- Tree = add(Tree, $[ "parent": parent, "title":title, "id": id]);
- }
- return Tree;
- }
-
-
- /**
- * Create the Tree Items
- * @param Tree Tree data
- * @param parent Parent of current Item
- * @return list Tree Items
- **/
- list CreateTreeInternal(list<map> Tree, string parent) {
- list<map> m = filter(map c, Tree, ``((c["parent"]:"" == parent )));
- map ccbak = nil; // #38596, broken recursion for iterators
- list mm = maplist(map cc, m, ``{
- string TreeEntry = cc["id"]:"";
- ccbak = cc;
- list items = CreateTreeInternal(Tree, TreeEntry);
- cc = ccbak;
- if (size(items)>0)
- return(`item(`id(cc["id"]:""), cc["title"]:"", items));
- else
- return(`item(`id(cc["id"]:""), cc["title"]:""));
- });
- y2debug("items: %1", mm );
- return mm;
- }
-
-
- /**
- * Query Tree Item
- * @return Tree Item
- */
- global string QueryTreeItem() {
-
- if (haveFancyUI() )
- {
- return (string)UI::QueryWidget(`id(`wizard), `CurrentItem );
- }
- else
- {
- return (string)UI::QueryWidget(`id(`wizardTree), `CurrentItem );
- }
- }
-
- /**
- * Create the tree in the dialog, replaces helpspace with new tree widget
- * @param Tree Tree data
- * @param title Tree title
- **/
- global void CreateTree(list<map> Tree, string title) {
- if ( !haveFancyUI() )
- {
- list items = [];
- foreach(map i, Tree, ``{
- if (i["parent"]:"" == "")
- {
- items=add(items, `item(`id(i["id"]:""), i["title"]:"",
- CreateTreeInternal(Tree, i["id"]:"") ));
- }
- });
- y2debug("tree items: %1", items);
- Wizard::ReplaceCustomHelp(
- `VBox(
- `Tree(
- `id(`wizardTree),
- `opt(`notify, `vstretch),
- title,
- items
- ),
- `VSpacing(1))
- );
- }
- return;
-
- }
-
- /**
- * Select Tree item
- * @param tree_item tree item
- */
- global void SelectTreeItem(string tree_item) {
- if ( haveFancyUI() )
- {
- UI::WizardCommand(`SelectTreeItem( tree_item ) );
- }
- else
- {
- UI::ChangeWidget(`id(`wizardTree), `CurrentItem, tree_item);
- }
- }
- /**
- * Delete Tree items
- */
- global void DeleteTreeItems() {
- if ( haveFancyUI() )
- {
- UI::WizardCommand(`DeleteTreeItems() );
- }
- else
- {
- Wizard::ReplaceCustomHelp(`Empty());
- }
- }
-
- /**
- * Delete Menu items
- */
- global void DeleteMenus() {
- if ( haveFancyUI() )
- {
- UI::WizardCommand(`DeleteMenus() );
- }
- else
- {
- UI::ReplaceWidget(`id(`topmenu), `Empty());
- }
- }
- /**
- * Add Menu
- * @param Menu Menu data
- * @param title Menu Title
- * @param id Menu ID
- * @return list<map> Updated Menu Data
- **/
- global list<map> AddMenu(list<map> Menu, string title, string id) {
- if ( haveFancyUI() )
- {
- UI::WizardCommand(`AddMenu( title, id ) );
- }
- else
- {
- Menu = add(Menu, $["type":"Menu", "title":title, "id": id]);
- }
- return Menu;
- }
-
- /**
- * Add Sub Menu
- * @param Menu Menu data
- * @param parent_id Menu Parent
- * @param title Menu Title
- * @param id Menu ID
- * @return list<map> Updated Menu Data
- **/
- global list<map> AddSubMenu(list<map> Menu, string parent_id, string title, string id) {
- if ( haveFancyUI() )
- {
- UI::WizardCommand(`AddSubMenu( parent_id, title, id ) );
- }
- else
- {
- Menu = add(Menu, $["type":"SubMenu", "parent": parent_id, "title":title, "id": id]);
- }
- return Menu;
- }
-
- /**
- * Add Menu Entry
- * @param Menu Menu data
- * @param parent_id Menu Parent
- * @param title Menu Title
- * @param id Menu ID
- * @return list<map> Updated Menu Data
- **/
- global list<map> AddMenuEntry(list<map> Menu, string parent_id, string title, string id) {
- if ( haveFancyUI() )
- {
- UI::WizardCommand(`AddMenuEntry( parent_id, title, id ) );
- }
- else
- {
- Menu = add(Menu, $["type":"MenuEntry", "parent": parent_id, "title":title, "id": id]);
- }
- return Menu;
- }
-
- /**
- * Create the Menu Items
- * @param Menu Menu data
- * @param parent Menu Parent
- * @return list Menu Items
- **/
- list CreateMenuInternal(list<map> Menu, string parent) {
- list<map> m = filter(map c, Menu, ``((c["parent"]:"" == parent )));
-
- list mm = maplist(map cc, m, ``{
- if(cc["type"]:"" == "MenuEntry")
- {
- string MenuEntry = cc["id"]:"";
- return(`item(`id(MenuEntry), cc["title"]:""));
- }
- else if (cc["type"]:"" == "SubMenu")
- {
- string SubMenu = cc["id"]:"";
- return(`menu( cc["title"]:"", CreateMenuInternal(Menu,
- SubMenu)));
- }
- });
- y2debug("items: %1", mm );
- return mm;
- }
-
- /**
- * Create the menu in the dialog
- * @param Menu Menu data
- * @return void
- **/
- global void CreateMenu(list<map> Menu) {
- if (!haveFancyUI() )
- {
- term menu_term = `HBox();
- foreach(map m, Menu, ``{
- if (m["type"]:"" == "Menu")
- {
- list menu_items = CreateMenuInternal(Menu, m["id"]:"");
- y2debug("menu_items: %1", menu_items );
- menu_term=add(menu_term, `MenuButton( m["title"]:"",
- menu_items));
- }
- });
- y2milestone("menu: %1", menu_term );
- UI::ReplaceWidget(`id(`topmenu), `Left(menu_term));
- }
- return;
- }
-
-
- /**
- * Set the product name for UI
- * @param name the product name
- * @return void
- **/
- global void SetProductName (string name) {
- y2milestone ("Setting product name to '%1'", name);
- product_name = name;
- }
-
-
- /* EOF */
- }
-