/**
 * File:	include/sysconfig/dialogs.ycp
 * Package:	Configuration of sysconfig
 * Summary:	Dialogs definitions
 * Authors:	Ladislav Slezak <lslezak@suse.cz>
 *
 * $Id: dialogs.ycp,v 1.17 2004/10/18 16:35:59 lslezak Exp $
 */

{

textdomain "sysconfig";

import "Sysconfig";

import "Popup";
import "Label";

include "sysconfig/helps.ycp";
include "sysconfig/routines.ycp";

/**
 * Display search dialog
 * @return map Search option values selected in the dialog
 */
 define map display_search_dialog()
``{
    UI::OpenDialog( `opt(`decorated ),
		`VBox(`HSpacing(60),
		    // search popup window header
		      `Heading(_("Search for a Configuration Variable")),
		      `VSpacing(0.5),
		      `HBox(`VSpacing(10),
			    `HSpacing(2),
			    `VBox(
				`VSpacing(1),
				// text entry label
				`TextEntry(`id(`search_entry), _("&Search for:")),
				`VSpacing(1),
				// check box label
				`Left(`CheckBox(`id(`ignore), _("&Case Sensitive Search"), false)),
				// check box label
				`Left(`CheckBox(`id(`nkey), _("Search &Variable Name"), true)),
				// check box label
				`Left(`CheckBox(`id(`ndescr), _("Search &description"), true)),
				// check box label
				`Left(`CheckBox(`id(`nvalue), _("Search &value"), false)),
				`VSpacing(1)
				),
			    `HSpacing(2)
			  ),
		      `VSpacing(0.5),
		      `HBox(
			  // push button label
			  `PushButton(`id(`ok), `opt(`default, `key_F10), Label::OKButton()),
			  // push button label
			  `PushButton(`id(`cancel), `opt(`key_F9), Label::CancelButton())
			  )
		    )
	);

    UI::SetFocus(`id(`search_entry));

    symbol ui = (symbol)UI::UserInput();

    while (ui != `ok && ui != `cancel)
    {
	ui = (symbol)UI::UserInput();
    }

    map ret = $[];

    if (ui == `ok)
    {
	ret = add(ret, "search", (string)UI::QueryWidget(`id(`search_entry), `Value));
	ret = add(ret, "insensitive", !((boolean)UI::QueryWidget(`id(`ignore), `Value)));
	ret = add(ret, "varname", (boolean)UI::QueryWidget(`id(`nkey), `Value));
	ret = add(ret, "value", (boolean)UI::QueryWidget(`id(`nvalue), `Value));
	ret = add(ret, "description", (boolean)UI::QueryWidget(`id(`ndescr), `Value));
    }

    UI::CloseDialog();
    return ret;
}

/**
 * Display dialog with selected variables
 * @param header Heading in the dialog
 * @param label Label in the dialog
 * @param table_content Table content list
 * @param ok_label OK button label
 * @param cancel_label Cancel button label
 * @param checkboxlabel Optional check box widget is displayed when size of checkboxlabel is greater than zero
 * @param checkboxvalue Check box value
 * @return map Selected variable, checkbox value (nil if it wasn't used), user input values
 */
 define map<string, any> display_variables_dialog(string header, string label, list table_content, string ok_label, string cancel_label, string checkboxlabel, boolean checkboxvalue) ``{

    UI::OpenDialog(`opt(`decorated),
	`HBox(
	    `VSpacing(17),
	    `VBox(`HSpacing(70),
		//heading of popup
		`Heading(header),
		`Label(label),
		`VSpacing(0.5),

		// table column header
		`Table(`id(`table),`header(_("Name"), _("NEW VALUE"), _("Old Value"), _("File"), _("Description")), table_content),
		(size(checkboxlabel) > 0) ? `CheckBox(`id(`chbox), checkboxlabel, checkboxvalue) : `Empty(),
		`VSpacing(0.5),
		`HBox(
		    // push button label
		    `PushButton(`id(`action), `opt(`default, `key_F10), ok_label),
		    // push button label
		    `PushButton(`id(`cancel), `opt(`key_F9), cancel_label)
		)
	    )
        )
    );

    symbol ret = (symbol)UI::UserInput();
    string selected = (string)UI::QueryWidget(`id(`table), `CurrentItem);
    boolean box = nil;

    if (size(checkboxlabel) > 0)
    {
	box = (boolean)(UI::QueryWidget(`id(`chbox), `Value));
    }

    UI::CloseDialog();

    return $[ "ui" : ret, "selected" : selected, "checkbox" : box ];
}

/**
 * Display dialog - ask user to install powertweak packages
 * @return map User input and powertweak-extra package selection value
 */
 define map powertweak_install_dialog() ``{

    // question displayed in popup dialog
    string helptext = _("This module requires the package \"powertweak\". Install it?

Click \"Install\" to install the packages and start the module or click \"Cancel\" to quit without any change.
The package \"powertweak-extra\" extends configuration options of powertweak.
");

    UI::OpenDialog(`opt(`decorated),
	`VBox(
	    // popup dialog header
	    `Heading(_("Install powertweak Package?")),
	    `VSpacing(1),
	    `Label(helptext),
	    `VSpacing(1),
	    // check box label text
	    `Left(`CheckBox(`id(`extra), _("Install powertweak-&extra Package"), true)),
	    `VSpacing(1),
	    `HBox(
		`PushButton(`id(`ok), `opt(`key_F10), Label::InstallButton()),
		`PushButton(`id(`cancel), `opt(`key_F9), Label::CancelButton())
	    )
	)
    );

    symbol ui = (symbol)UI::UserInput();
    boolean extra = (boolean)UI::QueryWidget(`id(`extra), `Value);

    UI::CloseDialog();

    return $[ "ui" : ui, "extra" : extra ];
}

/**
 * Display dialog for new variable. This dialog is used at autoinstalation config mode
 * only - some packages may not be available at configure time, but they will be present
 * at installation, so it is possible to change them even if they are not displayed.
 * @return map Map with keys "ui" (`ok or `cancel - user input), "name" (name of
 * the new variable), "file" (location of variable) and "value" (value to write)
 */
 define map add_new_variable()
``{
    UI::OpenDialog(`opt(`decorated),
	`VBox(
	    `HBox(
		// text entry label
		`TextEntry(`id(`name), _("&Variable Name"), ""),
		// text entry label
		`TextEntry(`id(`value), _("V&alue"), "")
	    ),
	    `VSpacing(1),
	    `HBox(
		// text entry label
		`TextEntry(`id(`file), _("&File Name"), "")
	    ),
	    `VSpacing(1),
	    `HBox(
		`PushButton(`id(`ok), `opt(`key_F10), Label::OKButton()),
		`PushButton(`id(`cancel), `opt(`key_F9), Label::CancelButton())
	    )
	)
    );

    symbol ui = nil;

    string name = "";
    string file = "";

    while(ui != `ok && ui != `cancel)
    {
	ui = (symbol)UI::UserInput();

	name = (string)UI::QueryWidget(`id(`name), `Value);
	file = (string)UI::QueryWidget(`id(`file), `Value);

	if (ui == `ok)
	{
	    if (name == "")
	    {
		// warning popup message - variable name is empty
		Popup::Warning(_("Missing variable name value."));
		ui = nil;
	    }
	    else if (size(file) <= 1)
	    {
		// warning popup message - file name is empty
		Popup::Warning(_("Missing file name value."));
		ui = nil;
	    }
	    else if (substring(file, 0, 1) != "/")
	    {
		// warning popup message - file name is required with absolute path
		Popup::Warning(_("Missing absolute path in file name."));
		ui = nil;
	    }
	}
    }

    string value = (string)UI::QueryWidget(`id(`value), `Value);

    UI::CloseDialog();

    return $[ "ui" : ui, "name" : name, "value" : value, "file" : file ];
}

/* EOF */
}
