Hi all,

Here is my first patch to support enable/disable trigger. This
functionnality is available since release 8.1 of PostgreSQL. Im' not
really happy with my code. I have some code to enable a trigger and some
code to disable it. I think it would be better to merge them since they
are pretty close. For example, I use two menus (Enable trigger and
Disable trigger). It would be better to use just one but I don't know
what to do :
 * rename the menu's title
 * use a checked menu.

Or perhaps two menus are just fine. Any advice on this ?

Also, I would like to add enable/disable all triggers but I don't know
where I should put the menu item : on the table name's contextual menu ?
on the "Triggers" contextual menu ?

Thanks for any tips on this matter.

Regards.


-- 
Guillaume.
<!-- http://abs.traduc.org/
     http://lfs.traduc.org/
     http://docs.postgresqlfr.org/ -->
Index: pgadmin/include/schema/pgTrigger.h
===================================================================
--- pgadmin/include/schema/pgTrigger.h  (révision 5866)
+++ pgadmin/include/schema/pgTrigger.h  (copie de travail)
@@ -57,6 +57,8 @@
     bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
     wxString GetSql(ctlTree *browser);
     pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
+    bool EnableTrigger();
+    bool DisableTrigger();
 
     bool HasStats() { return false; }
     bool HasDepends() { return true; }
Index: pgadmin/include/dlg/dlgTrigger.h
===================================================================
--- pgadmin/include/dlg/dlgTrigger.h    (révision 5866)
+++ pgadmin/include/dlg/dlgTrigger.h    (copie de travail)
@@ -39,4 +39,21 @@
 };
 
 
+class enableTriggerFactory : public contextActionFactory
+{
+public:
+    enableTriggerFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar 
*toolbar);
+    wxWindow *StartDialog(frmMain *form, pgObject *obj);
+    bool CheckEnable(pgObject *obj);
+};
+
+
+class disableTriggerFactory : public contextActionFactory
+{
+public:
+    disableTriggerFactory(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 5866)
+++ pgadmin/frm/frmMain.cpp     (copie de travail)
@@ -63,6 +63,7 @@
 #include "dlg/dlgServer.h"
 #include "dlg/dlgDatabase.h"
 #include "dlg/dlgTable.h"
+#include "dlg/dlgTrigger.h"
 #include "dlg/dlgServer.h"
 #include "slony/dlgRepCluster.h"
 #include "slony/dlgRepSet.h"
@@ -258,6 +259,8 @@
     actionFactory *refFact=new refreshFactory(menuFactories, viewMenu, 
toolBar);
     new countRowsFactory(menuFactories, viewMenu, 0);
     new executePgstattupleFactory(menuFactories, viewMenu, 0);
+    new enableTriggerFactory(menuFactories, viewMenu, 0);
+    new disableTriggerFactory(menuFactories, viewMenu, 0);
 
    
        //--------------------------
Index: pgadmin/schema/pgTrigger.cpp
===================================================================
--- pgadmin/schema/pgTrigger.cpp        (révision 5866)
+++ pgadmin/schema/pgTrigger.cpp        (copie de travail)
@@ -48,6 +48,20 @@
 }
 
 
+bool pgTrigger::EnableTrigger()
+{
+    wxString sql = wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" ENABLE 
TRIGGER ") + GetQuotedIdentifier();
+    return GetDatabase()->ExecuteVoid(sql);
+}
+
+
+bool pgTrigger::DisableTrigger()
+{
+    wxString sql = wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" DISABLE 
TRIGGER ") + GetQuotedIdentifier();
+    return GetDatabase()->ExecuteVoid(sql);
+}
+
+
 void pgTrigger::SetDirty()
 {
     if (expandedKids)
Index: pgadmin/dlg/dlgTrigger.cpp
===================================================================
--- pgadmin/dlg/dlgTrigger.cpp  (révision 5866)
+++ pgadmin/dlg/dlgTrigger.cpp  (copie de travail)
@@ -15,6 +15,7 @@
 // App headers
 #include "pgAdmin3.h"
 #include "utils/misc.h"
+#include "frm/frmMain.h"
 #include "utils/pgDefs.h"
 
 #include "dlg/dlgTrigger.h"
@@ -208,3 +209,58 @@
         EnableOK(enable);
     }
 }
+
+enableTriggerFactory::enableTriggerFactory(menuFactoryList *list, wxMenu *mnu, 
wxToolBar *toolbar) : contextActionFactory(list)
+{
+    mnu->Append(id, _("&Enable trigger"), _("Enable trigger."));
+}
+
+
+wxWindow *enableTriggerFactory::StartDialog(frmMain *form, pgObject *obj)
+{
+    if (((pgTrigger*)obj)->EnableTrigger())
+        ((pgTrigger*)obj)->iSetEnabled(true);
+
+    wxTreeItemId item=form->GetBrowser()->GetSelection();
+    {
+        obj->ShowTreeDetail(form->GetBrowser(), 0, form->GetProperties());
+        form->GetMenuFactories()->CheckMenu(obj, form->GetMenuBar(), 
form->GetToolBar());
+    }
+
+    return 0;
+}
+
+
+bool enableTriggerFactory::CheckEnable(pgObject *obj)
+{
+    return obj && obj->IsCreatedBy(triggerFactory) && ! 
((pgTrigger*)obj)->GetEnabled()
+               && ((pgTrigger*)obj)->GetConnection()->BackendMinimumVersion(8, 
1);
+}
+
+disableTriggerFactory::disableTriggerFactory(menuFactoryList *list, wxMenu 
*mnu, wxToolBar *toolbar) : contextActionFactory(list)
+{
+    mnu->Append(id, _("&Disable trigger"), _("Disable trigger."));
+}
+
+
+wxWindow *disableTriggerFactory::StartDialog(frmMain *form, pgObject *obj)
+{
+    if (((pgTrigger*)obj)->DisableTrigger())
+        ((pgTrigger*)obj)->iSetEnabled(false);
+
+    wxTreeItemId item=form->GetBrowser()->GetSelection();
+    if (obj == form->GetBrowser()->GetObject(item))
+    {
+        obj->ShowTreeDetail(form->GetBrowser(), 0, form->GetProperties());
+        form->GetMenuFactories()->CheckMenu(obj, form->GetMenuBar(), 
form->GetToolBar());
+    }
+
+    return 0;
+}
+
+
+bool disableTriggerFactory::CheckEnable(pgObject *obj)
+{
+    return obj && obj->IsCreatedBy(triggerFactory) && 
((pgTrigger*)obj)->GetEnabled()
+               && ((pgTrigger*)obj)->GetConnection()->BackendMinimumVersion(8, 
1);
+}
---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [EMAIL PROTECTED] so that your
       message can get through to the mailing list cleanly

Reply via email to