Re: A new feature patch and a bug fix - Mailing list pgadmin-hackers
From | Guillaume Lelarge |
---|---|
Subject | Re: A new feature patch and a bug fix |
Date | |
Msg-id | 476CC7AA.5040507@lelarge.info Whole thread Raw |
In response to | Re: A new feature patch and a bug fix (Dave Page <dpage@postgresql.org>) |
Responses |
Re: A new feature patch and a bug fix
|
List | pgadmin-hackers |
Dave Page wrote: > Guillaume Lelarge wrote: > [...] >>>> I'll take a look at the query tool to see how to do this ("present a >>>> list of databases on the server"). Another call to wxSingleChoiceDialod >>>> seems a bad way to me... I'll need to add a new dialog, don't you think ? >>> Yes, I don't think it should be two dialogues. >>> >> I'm working on it now. > > 'K. > I've finally done it. It's the first time I create a new dialog, so it probably need some tweaks. I attached the patch and a tar.gz file for the new files. Regards. -- Guillaume. http://www.postgresqlfr.org http://dalibo.com Index: pgadmin/include/schema/pgRole.h =================================================================== --- pgadmin/include/schema/pgRole.h (révision 6919) +++ pgadmin/include/schema/pgRole.h (copie de travail) @@ -75,6 +75,8 @@ void iSetUpdateCatalog(const bool b) { updateCatalog=b; } wxArrayString& GetRolesIn() { return rolesIn; } wxArrayString& GetConfigList() { return configList; } + + void ReassignDropOwnedTo(frmMain *form); // Tree object creation @@ -112,6 +114,13 @@ pgGroupRole(const wxString& newName = wxT("")); }; +class reassignDropOwnedFactory : public contextActionFactory +{ +public: + reassignDropOwnedFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar); + wxWindow *StartDialog(frmMain *form, pgObject *obj); + bool CheckEnable(pgObject *obj); +}; #endif Index: pgadmin/frm/frmMain.cpp =================================================================== --- pgadmin/frm/frmMain.cpp (révision 6919) +++ pgadmin/frm/frmMain.cpp (copie de travail) @@ -67,6 +67,7 @@ #include "schema/pgTable.h" #include "schema/pgIndex.h" #include "schema/pgTrigger.h" +#include "schema/pgRole.h" #include "schema/pgRule.h" #include "schema/pgServer.h" #include "slony/slCluster.h" @@ -326,6 +327,7 @@ new dropCascadedFactory(menuFactories, editMenu, 0); new truncateFactory(menuFactories, editMenu, 0); new truncateCascadedFactory(menuFactories, editMenu, 0); + new reassignDropOwnedFactory(menuFactories, editMenu, 0); editMenu->AppendSeparator(); new separatorFactory(menuFactories); Index: pgadmin/schema/pgRole.cpp =================================================================== --- pgadmin/schema/pgRole.cpp (révision 6919) +++ pgadmin/schema/pgRole.cpp (copie de travail) @@ -11,12 +11,15 @@ // wxWindows headers #include <wx/wx.h> +#include <wx/choicdlg.h> // App headers #include "pgAdmin3.h" #include "utils/misc.h" #include "schema/pgRole.h" #include "frm/frmMain.h" +#include "dlg/dlgReassignDropOwned.h" +#include "dlg/dlgSelectConnection.h" #include "utils/pgDefs.h" #include "schema/pgDatabase.h" #include "schema/pgTablespace.h" @@ -51,7 +54,7 @@ bool pgRole::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { - if (GetUpdateCatalog()) + if (GetUpdateCatalog()) { wxMessageDialog dlg(frame, _("Deleting a superuser might result in unwanted behaviour (e.g. when restoring the database).\nAre you sure?"), @@ -276,8 +279,43 @@ } } +void pgRole::ReassignDropOwnedTo(frmMain *form) +{ + wxString query; + + dlgReassignDropOwned rdo(form, GetConnection(), this); + if (rdo.ShowModal() != wxID_CANCEL) + { + pgConn *conn; + conn = new pgConn(GetConnection()->GetHost(), + rdo.GetDatabase(), + GetConnection()->GetUser(), + GetConnection()->GetPassword(), + GetConnection()->GetPort(), + GetConnection()->GetSslMode()); + + if (conn->GetStatus() == PGCONN_OK) + { + if (rdo.IsReassign()) + { + if (wxMessageBox(_("Are you sure you wish to reassign all objets owned by the selected role?"), _("Reassignobjects"), wxYES_NO) == wxNO) + return; + query = wxT("REASSIGN OWNED BY ") + GetQuotedFullIdentifier() + wxT(" TO ") + rdo.GetRole(); + } + else + { + if (wxMessageBox(_("Are you sure you wish to drop all objets owned by the selected role?"), _("Drop objects"),wxYES_NO) == wxNO) + return; + query = wxT("DROP OWNED BY ") + GetQuotedFullIdentifier(); + } + conn->ExecuteVoid(query); + } + } +} + + pgObject *pgRole::Refresh(ctlTree *browser, const wxTreeItemId item) { pgObject *role=0; @@ -394,3 +432,22 @@ pgGroupRoleFactory groupRoleFactory; static pgaCollectionFactory gcf(&groupRoleFactory, __("Group Roles"), roles_xpm); + + +reassignDropOwnedFactory::reassignDropOwnedFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar) : contextActionFactory(list) +{ + mnu->Append(id, _("Reassign/Drop Owned..."), _("Reassigned or drop objects owned by the selected role.")); +} + + +wxWindow *reassignDropOwnedFactory::StartDialog(frmMain *form, pgObject *obj) +{ + ((pgRole*)obj)->ReassignDropOwnedTo(form); + + return 0; +} + +bool reassignDropOwnedFactory::CheckEnable(pgObject *obj) +{ + return obj && obj->IsCreatedBy(loginRoleFactory) && ((pgRole*)obj)->GetConnection()->BackendMinimumVersion(8, 2); +} Index: pgadmin/dlg/module.mk =================================================================== --- pgadmin/dlg/module.mk (révision 6919) +++ pgadmin/dlg/module.mk (copie de travail) @@ -35,6 +35,7 @@ $(srcdir)/dlg/dlgPackage.cpp \ $(srcdir)/dlg/dlgPgpassConfig.cpp \ $(srcdir)/dlg/dlgProperty.cpp \ + $(srcdir)/dlg/dlgReassignDropOwned.cpp \ $(srcdir)/dlg/dlgRole.cpp \ $(srcdir)/dlg/dlgRule.cpp \ $(srcdir)/dlg/dlgSchema.cpp \ Index: pgadmin/ui/module.mk =================================================================== --- pgadmin/ui/module.mk (révision 6919) +++ pgadmin/ui/module.mk (copie de travail) @@ -39,6 +39,7 @@ $(srcdir)/ui/dlgOperator.xrc \ $(srcdir)/ui/dlgPackage.xrc \ $(srcdir)/ui/dlgPgpassConfig.xrc \ + $(srcdir)/ui/dlgReassignDropOwned.xrc \ $(srcdir)/ui/dlgRepCluster.xrc \ $(srcdir)/ui/dlgRepClusterUpgrade.xrc \ $(srcdir)/ui/dlgRepListen.xrc \
Attachment
pgadmin-hackers by date: