diff -r -u pgadmin3-original/pgadmin/frm/frmMain.cpp pgadmin3/pgadmin/frm/frmMain.cpp --- pgadmin3-original/pgadmin/frm/frmMain.cpp 2011-03-16 16:43:41.000000000 +0100 +++ pgadmin3/pgadmin/frm/frmMain.cpp 2011-03-22 14:39:34.000000000 +0100 @@ -77,6 +77,7 @@ #include "slony/slCluster.h" #include "slony/slSet.h" #include "schema/pgForeignKey.h" +#include "frm/frmPasteObject.h" #if wxDIALOG_UNIT_COMPATIBILITY @@ -357,6 +358,10 @@ new reassignDropOwnedFactory(menuFactories, editMenu, 0); editMenu->AppendSeparator(); + new copyObjectFactory(menuFactories, editMenu, 0); + new pasteObjectFactory(menuFactories, editMenu, 0); + editMenu->AppendSeparator(); + new separatorFactory(menuFactories); toolBar->AddSeparator(); @@ -1369,3 +1374,62 @@ DisplayHelp(wxT("bugreport"), HELP_PGADMIN); return 0; } + +copyObjectFactory::copyObjectFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar) : contextActionFactory(list) +{ + mnu->Append(id, _("&Copy object..."), _("Store object reference for later paste")); +} + + +wxWindow *copyObjectFactory::StartDialog(frmMain *form, pgObject *obj) +{ + form->SetCopytObject(obj); + return 0; +} + + +bool copyObjectFactory::CheckEnable(pgObject *obj) +{ + if (!obj) + return false; + + if (obj->GetConnection()) { + pgTable *table = dynamic_cast(obj); + if (table) + return true; + pgSchema *schema = dynamic_cast(obj); + if (schema) + return true; + } + return false; +} + +pasteObjectFactory::pasteObjectFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar) : contextActionFactory(list) +{ + mnu->Append(id, _("&Paste object..."), _("Paste object")); +} + + +wxWindow *pasteObjectFactory::StartDialog(frmMain *form, pgObject *obj) +{ + pgObject *copyobj = form->GetCopytObject(); + if (copyobj) { + frmPasteObject *frm = new frmPasteObject(form, copyobj, obj); + frm->process(); + } + return 0; +} + + +bool pasteObjectFactory::CheckEnable(pgObject *obj) +{ + if (!obj) + return false; + + if (obj->GetConnection()) { + pgSchema *schema = dynamic_cast(obj); + if (schema) + return true; + } + return false; +} diff -r -u pgadmin3-original/pgadmin/frm/module.mk pgadmin3/pgadmin/frm/module.mk --- pgadmin3-original/pgadmin/frm/module.mk 2011-03-12 15:54:17.000000000 +0100 +++ pgadmin3/pgadmin/frm/module.mk 2011-03-22 14:48:51.000000000 +0100 @@ -32,7 +32,8 @@ $(srcdir)/frm/frmRestore.cpp \ $(srcdir)/frm/frmSplash.cpp \ $(srcdir)/frm/frmStatus.cpp \ - $(srcdir)/frm/plugins.cpp + $(srcdir)/frm/plugins.cpp \ + $(srcdir)/frm/frmPasteObject.cpp EXTRA_DIST += \ $(srcdir)/frm/module.mk diff -r -u pgadmin3-original/pgadmin/include/frm/frmMain.h pgadmin3/pgadmin/include/frm/frmMain.h --- pgadmin3-original/pgadmin/include/frm/frmMain.h 2011-03-12 15:54:18.000000000 +0100 +++ pgadmin3/pgadmin/include/frm/frmMain.h 2011-03-22 09:56:50.000000000 +0100 @@ -146,6 +146,14 @@ return pluginsMenu; } + pgObject *GetCopytObject() { + return copytObject; + } + + void SetCopytObject(pgObject *obj) { + copytObject = obj; + } + wxString GetCurrentNodePath(); bool SetCurrentNode(wxTreeItemId node, const wxString &path); @@ -185,6 +193,8 @@ pgObject *currentObject; wxControl *currentControl; + pgObject *copytObject; + void OnChildFocus(wxChildFocusEvent &event); void OnEraseBackground(wxEraseEvent &event); void OnSize(wxSizeEvent &event); @@ -335,4 +345,20 @@ bool enableButton; }; +class copyObjectFactory : public contextActionFactory +{ +public: + copyObjectFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar); + wxWindow *StartDialog(frmMain *form, pgObject *obj); + bool CheckEnable(pgObject *obj); +}; + +class pasteObjectFactory : public contextActionFactory +{ +public: + pasteObjectFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar); + wxWindow *StartDialog(frmMain *form, pgObject *obj); + bool CheckEnable(pgObject *obj); +}; + #endif