diff options
author | Heiko Tietze <tietze.heiko@gmail.com> | 2022-08-03 16:56:18 +0200 |
---|---|---|
committer | Heiko Tietze <heiko.tietze@documentfoundation.org> | 2022-08-03 19:54:05 +0200 |
commit | 947ad25207a52d8d245a977430244cce38734b65 (patch) | |
tree | 215b5bd77144ba053e3e6467640edee2c777dfec /dbaccess | |
parent | 4f3d989a40a7083ce25a0ccddd711f7a045844b6 (diff) |
Resolves tdf#149944 - UI issues with Base's User Administration dialog
Buttons for add, delete user and change password moved into a menu
Change-Id: Ibddda5269f0a8a9219538833b1f871b041dd5341
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137754
Tested-by: Jenkins
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
Diffstat (limited to 'dbaccess')
-rw-r--r-- | dbaccess/inc/strings.hrc | 3 | ||||
-rw-r--r-- | dbaccess/source/ui/dlg/UserAdmin.cxx | 160 | ||||
-rw-r--r-- | dbaccess/source/ui/dlg/UserAdmin.hxx | 6 | ||||
-rw-r--r-- | dbaccess/uiconfig/ui/useradminpage.ui | 112 |
4 files changed, 128 insertions, 153 deletions
diff --git a/dbaccess/inc/strings.hrc b/dbaccess/inc/strings.hrc index ea57f4ebd240..f8370a1832b0 100644 --- a/dbaccess/inc/strings.hrc +++ b/dbaccess/inc/strings.hrc @@ -420,6 +420,9 @@ #define STR_EXCEPTION_INFO NC_("STR_EXCEPTION_INFO", "Information") #define STR_EXCEPTION_DETAILS NC_("STR_EXCEPTION_DETAILS", "Details") +#define STR_ADD_USER NC_("STR_ADD_USER", "Add User") +#define STR_DELETE_USER NC_("STR_DELETE_USER", "Delete User") +#define STR_CHANGE_PASSWORD NC_("STR_CHANGE_PASSWORD", "Change Password") #define STR_QUERY_USERADMIN_DELETE_USER NC_("STR_QUERY_USERADMIN_DELETE_USER", "Do you really want to delete the user?") #define STR_USERADMIN_NOT_AVAILABLE NC_("STR_USERADMIN_NOT_AVAILABLE", "The database does not support user administration." ) #define STR_ERROR_PASSWORDS_NOT_IDENTICAL NC_("STR_ERROR_PASSWORDS_NOT_IDENTICAL", "The passwords do not match. Please enter the password again.") diff --git a/dbaccess/source/ui/dlg/UserAdmin.cxx b/dbaccess/source/ui/dlg/UserAdmin.cxx index b601c49391fc..d7396dc4970f 100644 --- a/dbaccess/source/ui/dlg/UserAdmin.cxx +++ b/dbaccess/source/ui/dlg/UserAdmin.cxx @@ -49,6 +49,10 @@ using namespace comphelper; namespace { +#define MNI_ACTION_ADD_USER "add" +#define MNI_ACTION_DEL_USER "delete" +#define MNI_ACTION_CHANGE_PASSWORD "password" + class OPasswordDialog : public weld::GenericDialogController { std::unique_ptr<weld::Frame> m_xUser; @@ -111,20 +115,87 @@ IMPL_LINK(OPasswordDialog, ModifiedHdl, weld::Entry&, rEdit, void) // OUserAdmin OUserAdmin::OUserAdmin(weld::Container* pPage, weld::DialogController* pController,const SfxItemSet& _rAttrSet) : OGenericAdministrationPage(pPage, pController, "dbaccess/ui/useradminpage.ui", "UserAdminPage", _rAttrSet) + , mxActionBar(m_xBuilder->weld_menu_button("action_menu")) , m_xUSER(m_xBuilder->weld_combo_box("user")) - , m_xNEWUSER(m_xBuilder->weld_button("add")) - , m_xCHANGEPWD(m_xBuilder->weld_button("changepass")) - , m_xDELETEUSER(m_xBuilder->weld_button("delete")) , m_xTable(m_xBuilder->weld_container("table")) , m_xTableCtrlParent(m_xTable->CreateChildFrame()) , m_xTableCtrl(VclPtr<OTableGrantControl>::Create(m_xTableCtrlParent)) { + mxActionBar->append_item(MNI_ACTION_ADD_USER, DBA_RES(STR_ADD_USER)); + mxActionBar->append_item(MNI_ACTION_DEL_USER, DBA_RES(STR_DELETE_USER)); + mxActionBar->append_item(MNI_ACTION_CHANGE_PASSWORD, DBA_RES(STR_CHANGE_PASSWORD)); + mxActionBar->connect_selected(LINK(this,OUserAdmin,MenuSelectHdl)); + m_xTableCtrl->Show(); m_xUSER->connect_changed(LINK(this, OUserAdmin, ListDblClickHdl)); - m_xNEWUSER->connect_clicked(LINK(this, OUserAdmin, UserHdl)); - m_xCHANGEPWD->connect_clicked(LINK(this, OUserAdmin, UserHdl)); - m_xDELETEUSER->connect_clicked(LINK(this, OUserAdmin, UserHdl)); +} + +IMPL_LINK(OUserAdmin, MenuSelectHdl, const OString&, rIdent, void) +{ + try + { + if (rIdent == MNI_ACTION_ADD_USER) { + SfxPasswordDialog aPwdDlg(GetFrameWeld()); + aPwdDlg.ShowExtras(SfxShowExtras::ALL); + if (aPwdDlg.run()) + { + Reference<XDataDescriptorFactory> xUserFactory(m_xUsers,UNO_QUERY); + Reference<XPropertySet> xNewUser = xUserFactory->createDataDescriptor(); + if(xNewUser.is()) + { + xNewUser->setPropertyValue(PROPERTY_NAME,Any(aPwdDlg.GetUser())); + xNewUser->setPropertyValue(PROPERTY_PASSWORD,Any(aPwdDlg.GetPassword())); + Reference<XAppend> xAppend(m_xUsers,UNO_QUERY); + if(xAppend.is()) + xAppend->appendByDescriptor(xNewUser); + } + } + } + else if (rIdent == MNI_ACTION_DEL_USER) { + if (m_xUsers.is() && m_xUsers->hasByName(GetUser())) + { + Reference<XDrop> xDrop(m_xUsers,UNO_QUERY); + if(xDrop.is()) + { + std::unique_ptr<weld::MessageDialog> xQry(Application::CreateMessageDialog(GetFrameWeld(), + VclMessageType::Question, VclButtonsType::YesNo, + DBA_RES(STR_QUERY_USERADMIN_DELETE_USER))); + if (xQry->run() == RET_YES) + xDrop->dropByName(GetUser()); + } + } + } + else if (rIdent == MNI_ACTION_CHANGE_PASSWORD) { + OUString sName = GetUser(); + if(m_xUsers->hasByName(sName)) + { + Reference<XUser> xUser; + m_xUsers->getByName(sName) >>= xUser; + if(xUser.is()) + { + OPasswordDialog aDlg(GetFrameWeld(), sName); + if (aDlg.run() == RET_OK) + { + OUString sNewPassword,sOldPassword; + sNewPassword = aDlg.GetNewPassword(); + sOldPassword = aDlg.GetOldPassword(); + + if(!sNewPassword.isEmpty()) + xUser->changePassword(sOldPassword,sNewPassword); + } + } + } + } + FillUserNames(); + } + catch(const SQLException& e) + { + ::dbtools::showError(::dbtools::SQLExceptionInfo(e), GetDialogController()->getDialog()->GetXWindow(), m_xORB); + } + catch(Exception& ) + { + } } OUserAdmin::~OUserAdmin() @@ -173,11 +244,11 @@ void OUserAdmin::FillUserNames() } Reference<XAppend> xAppend(m_xUsers,UNO_QUERY); - m_xNEWUSER->set_sensitive(xAppend.is()); + mxActionBar->set_item_sensitive(MNI_ACTION_ADD_USER, xAppend.is()); Reference<XDrop> xDrop(m_xUsers,UNO_QUERY); - m_xDELETEUSER->set_sensitive(xDrop.is()); + mxActionBar->set_item_sensitive(MNI_ACTION_DEL_USER, xDrop.is()); + mxActionBar->set_item_sensitive(MNI_ACTION_CHANGE_PASSWORD, m_xUsers.is()); - m_xCHANGEPWD->set_sensitive(m_xUsers.is()); m_xTableCtrl->Enable(m_xUsers.is()); } @@ -186,77 +257,6 @@ std::unique_ptr<SfxTabPage> OUserAdmin::Create( weld::Container* pPage, weld::Di return std::make_unique<OUserAdmin>( pPage, pController, *_rAttrSet ); } -IMPL_LINK(OUserAdmin, UserHdl, weld::Button&, rButton, void) -{ - try - { - if (&rButton == m_xNEWUSER.get()) - { - SfxPasswordDialog aPwdDlg(GetFrameWeld()); - aPwdDlg.ShowExtras(SfxShowExtras::ALL); - if (aPwdDlg.run()) - { - Reference<XDataDescriptorFactory> xUserFactory(m_xUsers,UNO_QUERY); - Reference<XPropertySet> xNewUser = xUserFactory->createDataDescriptor(); - if(xNewUser.is()) - { - xNewUser->setPropertyValue(PROPERTY_NAME,Any(aPwdDlg.GetUser())); - xNewUser->setPropertyValue(PROPERTY_PASSWORD,Any(aPwdDlg.GetPassword())); - Reference<XAppend> xAppend(m_xUsers,UNO_QUERY); - if(xAppend.is()) - xAppend->appendByDescriptor(xNewUser); - } - } - } - else if (&rButton == m_xCHANGEPWD.get()) - { - OUString sName = GetUser(); - - if(m_xUsers->hasByName(sName)) - { - Reference<XUser> xUser; - m_xUsers->getByName(sName) >>= xUser; - if(xUser.is()) - { - OPasswordDialog aDlg(GetFrameWeld(), sName); - if (aDlg.run() == RET_OK) - { - OUString sNewPassword,sOldPassword; - sNewPassword = aDlg.GetNewPassword(); - sOldPassword = aDlg.GetOldPassword(); - - if(!sNewPassword.isEmpty()) - xUser->changePassword(sOldPassword,sNewPassword); - } - } - } - } - else - {// delete user - if(m_xUsers.is() && m_xUsers->hasByName(GetUser())) - { - Reference<XDrop> xDrop(m_xUsers,UNO_QUERY); - if(xDrop.is()) - { - std::unique_ptr<weld::MessageDialog> xQry(Application::CreateMessageDialog(GetFrameWeld(), - VclMessageType::Question, VclButtonsType::YesNo, - DBA_RES(STR_QUERY_USERADMIN_DELETE_USER))); - if (xQry->run() == RET_YES) - xDrop->dropByName(GetUser()); - } - } - } - FillUserNames(); - } - catch(const SQLException& e) - { - ::dbtools::showError(::dbtools::SQLExceptionInfo(e), GetDialogController()->getDialog()->GetXWindow(), m_xORB); - } - catch(Exception& ) - { - } -} - IMPL_LINK_NOARG(OUserAdmin, ListDblClickHdl, weld::ComboBox&, void) { m_xTableCtrl->setUserName(GetUser()); diff --git a/dbaccess/source/ui/dlg/UserAdmin.hxx b/dbaccess/source/ui/dlg/UserAdmin.hxx index e9c2a13e7876..045d8c39806f 100644 --- a/dbaccess/source/ui/dlg/UserAdmin.hxx +++ b/dbaccess/source/ui/dlg/UserAdmin.hxx @@ -32,10 +32,8 @@ namespace dbaui class OUserAdmin final : public OGenericAdministrationPage { + std::unique_ptr<weld::MenuButton> mxActionBar; std::unique_ptr<weld::ComboBox> m_xUSER; - std::unique_ptr<weld::Button> m_xNEWUSER; - std::unique_ptr<weld::Button> m_xCHANGEPWD; - std::unique_ptr<weld::Button> m_xDELETEUSER; std::unique_ptr<weld::Container> m_xTable; css::uno::Reference<css::awt::XWindow> m_xTableCtrlParent; VclPtr<OTableGrantControl> m_xTableCtrl; // show the grant rights of one user @@ -48,7 +46,7 @@ class OUserAdmin final : public OGenericAdministrationPage // methods DECL_LINK(ListDblClickHdl, weld::ComboBox&, void); - DECL_LINK(UserHdl, weld::Button&, void); + DECL_LINK(MenuSelectHdl, const OString&, void); void FillUserNames(); diff --git a/dbaccess/uiconfig/ui/useradminpage.ui b/dbaccess/uiconfig/ui/useradminpage.ui index 4d649ea90af9..e76349a49b90 100644 --- a/dbaccess/uiconfig/ui/useradminpage.ui +++ b/dbaccess/uiconfig/ui/useradminpage.ui @@ -1,44 +1,50 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.1 --> +<!-- Generated with glade 3.38.2 --> <interface domain="dba"> <requires lib="gtk+" version="3.20"/> + <object class="GtkMenu" id="menu"> + <property name="visible">True</property> + <property name="can-focus">False</property> + </object> <object class="GtkBox" id="UserAdminPage"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="border_width">6</property> + <property name="border-width">6</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <child> <object class="GtkFrame" id="frame1"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="margin-end">6</property> + <property name="margin-top">6</property> <property name="hexpand">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> <child> <object class="GtkBox" id="box1"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> + <property name="margin-top">6</property> <property name="hexpand">True</property> <property name="orientation">vertical</property> <property name="spacing">6</property> - <property name="margin-top">6</property> <child> <object class="GtkBox" id="box2"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="hexpand">True</property> <property name="spacing">12</property> <child> <object class="GtkLabel" id="label3"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">start</property> - <property name="hexpand">True</property> <property name="label" translatable="yes" context="useradminpage|label3">Us_er:</property> - <property name="use_underline">True</property> + <property name="use-underline">True</property> <property name="xalign">0</property> </object> <packing> @@ -50,7 +56,7 @@ <child> <object class="GtkComboBoxText" id="user"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="hexpand">True</property> </object> <packing> @@ -59,54 +65,19 @@ <property name="position">1</property> </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkButton" id="add"> - <property name="label" translatable="yes" context="useradminpage|add">_Add User...</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="changepass"> - <property name="label" translatable="yes" context="useradminpage|changepass">Change _Password...</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> <child> - <object class="GtkButton" id="delete"> - <property name="label" translatable="yes" context="useradminpage|delete">_Delete User...</property> + <object class="GtkMenuButton" id="action_menu"> + <property name="label" translatable="yes" context="templatedlg|action_menu|label">_Manage</property> + <property name="use-underline">True</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> + <property name="can-focus">True</property> + <property name="focus-on-click">False</property> + <property name="receives-default">True</property> + <property name="halign">end</property> + <property name="popup">menu</property> + <child> + <placeholder/> + </child> </object> <packing> <property name="expand">False</property> @@ -118,7 +89,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> </object> @@ -126,7 +97,7 @@ <child type="label"> <object class="GtkLabel" id="label1"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="label" translatable="yes" context="useradminpage|label1">User Selection</property> <attributes> <attribute name="weight" value="bold"/> @@ -143,20 +114,23 @@ <child> <object class="GtkFrame" id="frame2"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="margin-end">6</property> + <property name="margin-bottom">6</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> <child> <object class="GtkBox" id="table"> + <property name="height-request">150</property> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-top">6</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="visible">True</property> - <property name="height_request">150</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> - <property name="margin-top">6</property> <child> <placeholder/> </child> @@ -165,7 +139,7 @@ <child type="label"> <object class="GtkLabel" id="label2"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="label" translatable="yes" context="useradminpage|label2">Access Rights for Selected User</property> <attributes> <attribute name="weight" value="bold"/> |