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
/
modules
/
CWMServiceStart.ycp
< prev
next >
Wrap
Text File
|
2006-11-29
|
18KB
|
631 lines
/**
* File: modules/CWMServiceStart.ycp
* Package: Common widget manipulation, service start widget
* Summary: Routines for service start widget handling
* Authors: Jiri Srain <jsrain@suse.cz>
*
* $Id: CWMServiceStart.ycp 23465 2005-05-18 13:59:02Z jsrain $
*
*/
{
module "CWMServiceStart";
textdomain "base";
import "CWM";
import "Mode";
import "ProductFeatures";
import "Service";
// private variables
/**
* Label saying that service is running
*/
string service_is_running = "";
/**
* Label saying that service is stopped
*/
string service_is_stopped = "";
/**
* Last status of the service
*/
boolean last_status = nil;
// private functions
/**
* Update the displayed status of the service
* @param widget a map describing the widget
*/
void UpdateServiceStatusWidget (map<string,any> widget) {
if (! UI::WidgetExists (`id ("_cwm_service_status_rp")))
return;
if (Mode::config ())
{
UI::ChangeWidget (`id ("_cwm_start_service_now"), `Enabled, false);
UI::ChangeWidget (`id ("_cwm_stop_service_now"), `Enabled, false);
// service status - label
UI::ReplaceWidget (`id ("_cwm_service_status_rp"), `Label (_("Unavailable")));
}
else
{
boolean status = 0 == Service::Status (widget["service_id"]:"");
if (status != last_status)
{
UI::ChangeWidget (`id ("_cwm_start_service_now"),
`Enabled,
! status);
UI::ChangeWidget (`id ("_cwm_stop_service_now"),
`Enabled,
status);
UI::ReplaceWidget (`id ("_cwm_service_status_rp"),
`Label (status
? service_is_running
: service_is_stopped
)
);
last_status = status;
}
}
}
/**
* Update the widget displaying if LDAP support is active
* @param widget a map describing the widget
*/
define void UpdateLdapWidget (map<string,any> widget) {
if (! UI::WidgetExists (`id ("_cwm_use_ldap")))
return;
boolean() get_use_ldap = (boolean())
widget["get_use_ldap"]:nil;
boolean use_ldap = get_use_ldap ();
UI::ChangeWidget (`id ("_cwm_use_ldap"), `Value, use_ldap);
}
/**
* Handle the "Use LDAP" check box
* @param widget a map describing the widget
* param event_id any the ID of the occurred event
*/
define void HandleLdap (map<string,any> widget, any event_id) {
if (event_id == "_cwm_use_ldap")
{
void(boolean) set_use_ldap = (void(boolean))
widget["set_use_ldap"]:nil;
boolean use_ldap = (boolean)UI::QueryWidget (`id ("_cwm_use_ldap"), `Value);
set_use_ldap (use_ldap);
UpdateLdapWidget (widget);
}
}
// public functions
// automatic service start-up related functions
/**
* Init function of the widget
* @param map widget a widget description map
* @param key strnig the widget key
*/
global void AutoStartInit (map<string,any> widget, string key) {
if (! UI::WidgetExists (`id ("_cwm_service_startup")))
{
y2error ("Widget _cwm_service_startup does not exist");
return;
}
boolean() get_auto_start = (boolean())widget["get_service_auto_start"]:nil;
boolean auto_start = get_auto_start ();
UI::ChangeWidget (`id ("_cwm_service_startup"), `CurrentButton,
auto_start
? "_cwm_startup_auto"
: "_cwm_startup_manual");
}
/**
* Store function of the widget
* @param map widget a widget description map
* @param key strnig the widget key
* @param event map that caused widget data storing
*/
global void AutoStartStore (map<string,any> widget, string key, map event) {
if (! UI::WidgetExists (`id ("_cwm_service_startup")))
{
y2error ("Widget _cwm_service_startup does not exist");
return;
}
boolean auto_start
= UI::QueryWidget (`id ("_cwm_service_startup"), `CurrentButton)
== "_cwm_startup_auto";
void(boolean) set_auto_start
= (void(boolean))widget["set_service_auto_start"]:nil;
set_auto_start(auto_start);
}
/**
* Init function of the widget
* @param key strnig the widget key
*/
global void AutoStartInitWrapper (string key) {
AutoStartInit (CWM::GetProcessedWidget (), key);
}
/**
* Store function of the widget
* @param key strnig the widget key
* @param event map that caused widget data storing
*/
global void AutoStartStoreWrapper (string key, map event) {
AutoStartStore (CWM::GetProcessedWidget (), key, event);
}
/**
* Get the template for the help text to the auto start widget
* @return string help text template with %1 and %2 placeholders
*/
global string AutoStartHelpTemplate () {
// help text for service auto start widget
// %1 and %2 are button labels
// %1 is eg. "On -- Start Service when Booting"
// %2 is eg. "Off -- Start Service Manually"
// (both without quotes)
return _("<p><b><big>Service Start</big></b><br>
To start the service every time your computer is booted, set
<b>%1</b>. Otherwise set <b>%2</b>.</p>");
}
/**
* Get the help text to the auto start widget
* @return string help text
*/
global string AutoStartHelp () {
return sformat (AutoStartHelpTemplate (),
// part of help text - radio button label, NO SHORTCUT!!!
_("During Boot"),
// part of help text - radio button label, NO SHORTCUT!!!
_("Manually"));
}
/**
* Get the widget description map of the widget for service auto starting
* settings
* @param settings a map of all parameters needed to create the widget properly
* <pre>
*
* - "get_service_auto_start" : boolean () -- function that returns if the
* service is set for automatical start-up
* - "set_service_auto_start" : void (boolean) -- function that takes as
* an argument boolean value saying if the service is started
* automatically during booting
* - "start_auto_button" : string -- label of the radio button to start
* the service automatically when booting
* - "start_manual_button" : string -- label of the radio button to start
* the service only manually
* - "help" : string -- custom help for the widget. If not specified, generic
* help is used
*
* </pre>
* Additional settings:
* - "help" : string -- help to the whole widget. If not specified, generic help
* is used (button labels are patched correctly)
* </pre>
* @return map the widget description map
*/
global map<string,any> CreateAutoStartWidget (map<string,any> settings) {
string help = "";
string start_auto_button
// radio button
= settings["start_auto_button"]:_("During Boot");
string start_manual_button
// radio button
= settings["start_manual_button"]:_("Manually");
if (haskey (settings, "help"))
{
help = settings["help"]:"";
}
else
{
help = AutoStartHelp ();
}
// Frame label (service starting)
term booting = `VBox (
// frame
`Frame (_("Service Start"),
`Left (`RadioButtonGroup (`id ("_cwm_service_startup"), `VBox (
`VSpacing (0.4),
`Left (`RadioButton (`id ("_cwm_startup_auto"),
`opt (`notify),
start_auto_button)),
`Left (`RadioButton (`id ("_cwm_startup_manual"),
`opt (`notify),
start_manual_button)),
`VSpacing (0.4)
)))
)
);
if (! (haskey (settings, "set_service_auto_start")
&& haskey (settings, "get_service_auto_start")))
{
booting = `VBox ();
help = "";
}
map<string,any> ret = (map<string,any>)union (settings, $[
"widget" : `custom,
"custom_widget" : booting,
"help" : help,
"init" : AutoStartInitWrapper,
"store" : AutoStartStoreWrapper,
]);
return ret;
}
// service status and immediate actions related functions
/**
* Handle the immediate start and stop of the service
* @param widget a map describing the widget
* @param key strnig the widget key
* @param event_id any the ID of the occurred event
* @return always nil
*/
global symbol StartStopHandle (map<string,any> widget, string key, map event) {
any event_id = event["ID"]:nil;
if (event_id == "_cwm_start_service_now")
{
if (haskey (widget, "start_now_action"))
{
void () start_now_func = (void())widget["start_now_action"]:nil;
start_now_func ();
}
else
{
Service::Restart (widget["service_id"]:"");
}
sleep (500);
}
else if (event_id == "_cwm_stop_service_now")
{
if (haskey (widget, "stop_now_action"))
{
void () stop_now_func = (void())widget["stop_now_action"]:nil;
stop_now_func ();
}
else
{
Service::Stop (widget["service_id"]:"");
}
sleep (500);
}
else if (event_id == "_cwm_save_settings_now")
{
void() func = (void())widget["save_now_action"]:nil;
func ();
sleep (500);
}
UpdateServiceStatusWidget (widget);
return nil;
}
/**
* Init function of the widget
* @param map widget a widget description map
* @param key strnig the widget key
*/
global void StartStopInit (map<string,any> widget, string key) {
last_status = nil;
service_is_running
// service status - label
= widget["service_running_label"]:_("Service is running");
service_is_stopped
// service status - label
= widget["service_not_running_label"]:_("Service is not running");
UpdateServiceStatusWidget (widget);
}
/**
* Handle the immediate start and stop of the service
* @param key strnig the widget key
* @param event_id any the ID of the occurred event
* @return always nil
*/
global symbol StartStopHandleWrapper (string key, map event) {
return StartStopHandle (CWM::GetProcessedWidget (), key, event);
}
/**
* Init function of the widget
* @param key strnig the widget key
*/
global void StartStopInitWrapper (string key) {
StartStopInit (CWM::GetProcessedWidget (), key);
}
/**
* Get the template for the help text to the start/stop widget
* @param restart_displayed shold be true if "Save and restart" is displayed
* @return string help text template with %1 and %2 placeholders
*/
global string StartStopHelpTemplate (boolean restart_displayed) {
// help text for service status displaying and switching widget 1/2
// %1 and %2 are push button labels
// %1 is eg. "Start the Service Now"
// %2 is eg. "Stop the Service Now"
// (both without quotes)
string help = _("<p><b><big>Switch On or Off</big></b><br>
To start or stop the service immediately, use
<b>%1</b> or <b>%2</b>.</p>");
if (restart_displayed)
{
// help text for service start widget 2/2, optional
// %3 is push button label, eg. "Save Changes and Restart Service Now"
// (without quotes)
// note: %3 is correct, do not replace with %1!!!
help = help + _("<p>To save all changes and restart the
service immediately, use <b>%3</b>.</p>
");
}
return help;
}
/**
* Get the help text to the start/stop widget
* @param restart_displayed shold be true if "Save and restart" is displayed
* @return string help text
*/
global string StartStopHelp (boolean restart_displayed) {
return sformat (StartStopHelpTemplate (restart_displayed),
// part of help text - push button label, NO SHORTCUT!!!
_("Start the Service Now"),
// part of help text - push button label, NO SHORTCUT!!!
_("Stop the Service Now"),
// part of help text - push button label, NO SHORTCUT!!!
_("Save Changes and Restart Service Now"));
}
/**
* Get the widget description map for immediate service start/stop
* and appropriate actions
* @param settings a map of all parameters needed to create the widget properly
* <pre>
*
* - "service_id" : string -- service identifier for Service:: functions.
* If not specified, immediate actions buttons are not displayed.
* - "save_now_action" : void () -- function that causes saving of all settings
* and restarting the service. If key is missing, the button
* is not displayed
* - "start_now_action" : void () -- function that causes starting the service
* If not specified, generic function using "service_id" is used
* instead
* - "stop_now_action" : void () -- function that causes stopping the service
* If not specified, generic function using "service_id" is used
* instead
* - "service_running_label" : string -- label to be displayed if the service
* is running.
* - "service_not_running_label" : string -- label to be displayed if the
* service is stopped.
* - "start_now_button" : string -- label for the push button for immediate
* service start
* - "stop_now_button" : string -- label for the push button for immediate
* service stop
* - "save_now_button" : string -- label for the push button for immediate
* settings saving and service restarting
* - "help" : string -- help to the widget. If not specified, generic help
* is used (button labels are patched correctly)
* </pre>
* @return map the widget description map
*/
global define map<string,any> CreateStartStopWidget (map<string,any> settings) {
string help = "";
string start_now_button
// push button for immediate service starting
= settings["start_now_button"]:_("&Start the Service Now");
string stop_now_button
// push button for immediate service stopping
= settings["stop_now_button"]:_("S&top the Service Now");
string save_now_button
= settings["save_now_button"]:
// push button for immediate saving of the settings and service starting
_("S&ave Changes and Restart Service Now");
boolean display_save_now = haskey (settings, "save_now_action");
if (haskey (settings, "help"))
{
help = settings["help"]:"";
}
else
{
help = StartStopHelp (display_save_now);
}
term save_now_button_term =
display_save_now
? `PushButton (`id ("_cwm_save_settings_now"),
`opt (`hstretch),
save_now_button)
: `VBox ();
term immediate_actions = `VBox (
// Frame label (stoping starting service)
`Frame ( _("Switch On and Off"),
`Left (`HSquash (`VBox (
`HBox (
// Current status
`Label (_("Current Status: ")),
`ReplacePoint (`id ("_cwm_service_status_rp"), `Label ("")),
`HStretch ()
),
`PushButton (`id ("_cwm_start_service_now"),
`opt (`hstretch),
start_now_button),
`PushButton (`id ("_cwm_stop_service_now"),
`opt (`hstretch),
stop_now_button),
save_now_button_term
)))
)
);
if (! haskey (settings, "service_id"))
{
immediate_actions = `VBox ();
help = "";
}
map<string,any> ret = (map<string,any>)union (settings, $[
"widget" : `custom,
"custom_widget" : immediate_actions,
"help" : help,
"init" : StartStopInitWrapper,
"handle" : StartStopHandleWrapper,
"handle_events" : [ `timeout, "_cwm_start_service_now",
"_cwm_stop_service_now", "_cwm_save_settings_now" ],
]);
if (haskey (settings, "service_id"))
ret["ui_timeout"] = 5000;
return ret;
}
// ldap enablement widget
/**
* Init function of the widget
* @param map widget a widget description map
* @param key strnig the widget key
*/
global define void LdapInit (map<string,any> widget, string key) {
UpdateLdapWidget (widget);
}
/**
* Handle function of the widget
* @param map widget a widget description map
* @param key strnig the widget key
* @param event map event to be handled
* @return symbol for wizard sequencer or nil
*/
global symbol LdapHandle (map<string,any> widget, string key, map event) {
any ret = event["ID"]:nil;
if (ret == "_cwm_use_ldap")
{
HandleLdap (widget, ret);
return nil;
}
return nil;
}
/**
* Init function of the widget
* @param key strnig the widget key
*/
global define void LdapInitWrapper (string key) {
LdapInit (CWM::GetProcessedWidget (), key);
}
/**
* Handle function of the widget
* @param map widget a widget description map
* @param key strnig the widget key
* @param event map event to be handled
* @return symbol for wizard sequencer or nil
*/
global define symbol LdapHandleWrapper (string key, map event) {
return LdapHandle (CWM::GetProcessedWidget (), key, event);
}
/**
* Get the template for the help text to the LDAP enablement widget
* @return string help text template with %1 and %2 placeholders
*/
global string EnableLdapHelpTemplate () {
// help text for LDAP enablement widget
// %1 is button label, eg. "LDAP Support Active" (without quotes)
return _("<p><b><big>LDAP Support</big></b><br>
To store the settings in LDAP instead of native configuration files,
set <b>%1</b>.</p>");
}
/**
* Get the help text to the LDAP enablement widget
* @return string help text
*/
global string EnableLdapHelp () {
return sformat (EnableLdapHelpTemplate (),
// part of help text - check box label, NO SHORTCUT!!!
_("LDAP Support Active"));
}
/**
* Get the widget description map of the LDAP enablement widget
* TODO: Find a file to move to
* @param settings a map of all parameters needed to create the widget properly
* <pre>
*
* LDAP support:
* - "get_use_ldap" : boolean () -- function to return current status
* of the LDAP support. If not set, LDAP check-box is not shown.
* - "set_use_ldap" : void (boolean) -- function to set the LDAP usage
* and report errors in case of fails. Status will be rechecked
* via "get_use_ldap". If not set, LDAP check-box is not shown.
* - "use_ldap_checkbox" : string -- label of the chcek box to set if LDAP
* support is active.
* - "help" : string -- help to the widget. If not specified, generic help
* is used (button labels are patched correctly)
* </pre>
* @return map the widget description map
*/
global map<string,any> CreateLdapWidget (map<string,any> settings) {
string help = "";
string use_ldap_checkbox
// check box
= settings["use_ldap_checkbox"]:_("&LDAP Support Active");
if (haskey (settings, "help"))
{
help = settings["help"]:"";
}
else
{
help = EnableLdapHelp ();
}
// check box
term ldap_settings = `VBox (
`VSpacing (1),
`Left (`CheckBox (`id ("_cwm_use_ldap"),
`opt (`notify),
use_ldap_checkbox))
);
if (! (haskey (settings, "get_use_ldap")
&& haskey (settings, "set_use_ldap")
&& ProductFeatures::GetFeature ("globals", "ui_mode") != "simple"))
{
ldap_settings = `VBox ();
help = "";
}
map<string,any> ret = (map<string,any>)union (settings, $[
"widget" : `custom,
"custom_widget" : ldap_settings,
"help" : help,
"init" : LdapInitWrapper,
"handle" : LdapHandleWrapper,
"handle_events" : [ "_cwm_use_ldap" ],
]);
return ret;
}
// EOF
}