Author: aschnell Date: Mon Jun 8 18:39:28 2009 New Revision: 57506 URL: http://svn.opensuse.org/viewcvs/yast?rev=57506&view=rev Log: - work on password query callback (unfinished) Modified: trunk/storage/bindings/src/StorageCallbacks.cc trunk/storage/bindings/src/StorageCallbacks.h trunk/storage/storage/src/modules/StorageClients.ycp trunk/storage/yast2-storage.spec.in Modified: trunk/storage/bindings/src/StorageCallbacks.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/bindings/src/StorageCallbacks.cc?rev=57506&r1=57505&r2=57506&view=diff ============================================================================== --- trunk/storage/bindings/src/StorageCallbacks.cc (original) +++ trunk/storage/bindings/src/StorageCallbacks.cc Mon Jun 8 18:39:28 2009 @@ -47,6 +47,7 @@ extern CallbackShowInstallInfo install_info_cb_ycp; extern CallbackInfoPopup info_popup_cb_ycp; extern CallbackYesNoPopup yesno_popup_cb_ycp; + extern CallbackPasswordPopup password_popup_cb_ycp; } @@ -98,6 +99,7 @@ return true; } + constTypePtr Y2StorageCallbackFunction::wantedParameterType () const { y2internal ("wantedParameterType not implemented"); @@ -210,6 +212,7 @@ static Y2Function* show_install_info = NULL; static Y2Function* info_popup = NULL; static Y2Function* yesno_popup = NULL; +static Y2Function* password_popup = NULL; void progress_bar_callback( const string& id, unsigned cur, unsigned max ) { @@ -265,6 +268,27 @@ } +bool password_popup_callback(const string& device, int attempts, string& password) +{ + bool ret = false; + + if (password_popup) + { + password_popup->reset(); + password_popup->appendParameter(YCPString(device)); + password_popup->appendParameter(YCPInteger(attempts)); + password_popup->appendParameter(YCPString(password)); + password_popup->finishParameters(); + + YCPValue tmp = password_popup->evaluateCall(); + if (tmp->isBoolean()) + ret = tmp->asBoolean()->value(); + } + + return ret; +} + + YCPValue StorageCallbacks::ProgressBar (const YCPString & callback) { @@ -448,3 +472,50 @@ return YCPVoid (); } + + +YCPValue +StorageCallbacks::PasswordPopup (const YCPString & callback) +{ + string name_r = callback->value (); + + y2debug ("Registering callback %s", name_r.c_str ()); + string::size_type colonpos = name_r.find("::"); + + if ( colonpos == string::npos ) + { + ycp2error ("Specify namespace and the fuction name for a callback"); + return YCPVoid (); + } + + string module = name_r.substr ( 0, colonpos ); + string name = name_r.substr ( colonpos + 2 ); + + Y2Component *c = Y2ComponentBroker::getNamespaceComponent (module.c_str ()); + if (c == NULL) + { + ycp2error ("No component can provide namespace %s for a callback of %s", + module.c_str (), name.c_str ()); + return YCPVoid (); + } + + Y2Namespace *ns = c->import (module.c_str ()); + if (ns == NULL) + { + y2error ("No namespace %s for a callback of %s", module.c_str (), + name.c_str ()); + return YCPVoid (); + } + + password_popup = ns->createFunctionCall (name, Type::Unspec); + if (password_popup == NULL) + { + ycp2error ("Cannot find function %s in module %s as a callback", + name.c_str(), module.c_str () ); + return YCPVoid (); + } + + storage::password_popup_cb_ycp = password_popup_callback; + + return YCPVoid (); +} Modified: trunk/storage/bindings/src/StorageCallbacks.h URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/bindings/src/StorageCallbacks.h?rev=57506&r1=57505&r2=57506&view=diff ============================================================================== --- trunk/storage/bindings/src/StorageCallbacks.h (original) +++ trunk/storage/bindings/src/StorageCallbacks.h Mon Jun 8 18:39:28 2009 @@ -57,6 +57,8 @@ YCPValue InfoPopup (const YCPString& func); /* TYPEINFO: void(string) */ YCPValue YesNoPopup (const YCPString& func); + /* TYPEINFO: void(string) */ + YCPValue PasswordPopup (const YCPString& func); /** * Constructor. Modified: trunk/storage/storage/src/modules/StorageClients.ycp URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/storage/src/modules/StorageClients.ycp?rev=57506&r1=57505&r2=57506&view=diff ============================================================================== --- trunk/storage/storage/src/modules/StorageClients.ycp (original) +++ trunk/storage/storage/src/modules/StorageClients.ycp Mon Jun 8 18:39:28 2009 @@ -50,9 +50,9 @@ { SlideShow::SubProgressStart( text ); SlideShow::AppendMessageToInstLog(text); - + current_action = current_action + 1; - + // hack: assume every text change means another action y2milestone( "Current action: %1, total stage progress: %2", current_action, current_action * 100 / total_actions ); SlideShow::StageProgress( current_action * 100 / total_actions, nil ); @@ -71,18 +71,51 @@ global boolean YesNoPopup (string text) { y2milestone( "YesNoPopup txt:%1", text ); - return Report::AnyQuestion( Popup::NoHeadline(), text, + return Report::AnyQuestion( Popup::NoHeadline(), text, Label::YesButton(), Label::NoButton(), `yes ); } + + global boolean PasswordPopup(string device, integer attempts, string& password) + { + y2milestone("PasswordPopup device:%1 attempts:%2", device, attempts); + + UI::OpenDialog( + `opt(`decorated), + `VBox( + `Password(`id("pw1"), + // Label: get password for device + // Please use newline if label is longer than 40 characters + sformat(_("&Enter password for device %1:"), device), ""), + `ButtonBox( + // Ok button + `PushButton(`id(`continue), `opt(`default), Label::ContinueButton()), + // Cancel button + `PushButton(`id(`cancel), Label::CancelButton()) + ) + ) + ); + + symbol ret = (symbol) UI::UserInput(); + + if (ret == `continue) + password = (string) UI::QueryWidget(`id(`password), `Value); + + UI::CloseDialog(); + + return ret == `continue; + } + + global void InstallCallbacks(any sint) { y2milestone( "InstallCallbacks" ); - StorageCallbacks::ProgressBar ("StorageClients::ProgressBar"); - StorageCallbacks::ShowInstallInfo ("StorageClients::ShowInstallInfo"); - StorageCallbacks::InfoPopup ("StorageClients::InfoPopup"); - StorageCallbacks::YesNoPopup ("StorageClients::YesNoPopup"); + StorageCallbacks::ProgressBar("StorageClients::ProgressBar"); + StorageCallbacks::ShowInstallInfo("StorageClients::ShowInstallInfo"); + StorageCallbacks::InfoPopup("StorageClients::InfoPopup"); + StorageCallbacks::YesNoPopup("StorageClients::YesNoPopup"); + StorageCallbacks::PasswordPopup("StorageClients::PasswordPopup"); } } Modified: trunk/storage/yast2-storage.spec.in URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/yast2-storage.spec.in?rev=57506&r1=57505&r2=57506&view=diff ============================================================================== --- trunk/storage/yast2-storage.spec.in (original) +++ trunk/storage/yast2-storage.spec.in Mon Jun 8 18:39:28 2009 @@ -3,7 +3,7 @@ @HEADER@ BuildRequires: blocxx-devel boost-devel gcc-c++ libxcrypt-devel openssl-devel sablot swig BuildRequires: docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer sgml-skel update-desktop-files -BuildRequires: libstorage-devel >= 2.18.14 yast2 >= 2.18.16 yast2-core-devel >= 2.18.1 yast2-devtools +BuildRequires: libstorage-devel >= 2.18.16 yast2 >= 2.18.16 yast2-core-devel >= 2.18.1 yast2-devtools BuildRequires: yast2-testsuite yast2-perl-bindings Requires: libstorage = %(echo `rpm -q --queryformat '%{VERSION}' libstorage`) Requires: yast2-perl-bindings yast2-core >= 2.18.3 yast2 >= 2.18.16 yast2-libyui >= 2.18.7 -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org