Hi,

I finally finished this patch:
 * new restore options;
 * better UI;
 * support for restoring all selected objets.

Comments?


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com
diff --git a/pgadmin/frm/frmRestore.cpp b/pgadmin/frm/frmRestore.cpp
index df645c4..e272294 100644
--- a/pgadmin/frm/frmRestore.cpp
+++ b/pgadmin/frm/frmRestore.cpp
@@ -12,6 +12,10 @@
 // wxWindows headers
 #include <wx/wx.h>
 #include <wx/settings.h>
+#include <wx/process.h>
+#include <wx/textbuf.h>
+#include <wx/file.h>
+#include <wx/filename.h>
 
 
 // App headers
@@ -20,44 +24,47 @@
 #include "frm/frmMain.h"
 #include "utils/sysLogger.h"
 #include "schema/pgTable.h"
-#include <wx/process.h>
-#include <wx/textbuf.h>
-#include <wx/file.h>
 #include "schema/pgLanguage.h"
 #include "schema/pgConstraints.h"
 #include "schema/pgForeignKey.h"
+#include "ctl/ctlCheckTreeView.h"
 
 // Icons
 #include "images/restore.xpm"
 
 
-#define nbNotebook              CTRL_NOTEBOOK("nbNotebook")
-#define txtFilename             CTRL_TEXT("txtFilename")
-#define btnFilename             CTRL_BUTTON("btnFilename")
-#define chkOnlyData             CTRL_CHECKBOX("chkOnlyData")
-#define chkOnlySchema           CTRL_CHECKBOX("chkOnlySchema")
-#define chkSingleObject         CTRL_CHECKBOX("chkSingleObject")
-#define chkNoOwner              CTRL_CHECKBOX("chkNoOwner")
-#define chkDisableTrigger       CTRL_CHECKBOX("chkDisableTrigger")
-#define chkClean		        CTRL_CHECKBOX("chkClean")
-#define chkVerbose              CTRL_CHECKBOX("chkVerbose")
-#define stSingleObject          CTRL_STATIC("stSingleObject")
-
-#define lstContents             CTRL_LISTVIEW("lstContents")
+#define nbNotebook               CTRL_NOTEBOOK("nbNotebook")
+#define txtFilename              CTRL_TEXT("txtFilename")
+#define btnFilename              CTRL_BUTTON("btnFilename")
+#define chkOnlyData              CTRL_CHECKBOX("chkOnlyData")
+#define chkOnlySchema            CTRL_CHECKBOX("chkOnlySchema")
+#define chkNoOwner               CTRL_CHECKBOX("chkNoOwner")
+#define chkNoPrivileges          CTRL_CHECKBOX("chkNoPrivileges")
+#define chkNoTablespaces         CTRL_CHECKBOX("chkNoTablespaces")
+#define chkCreateDb		         CTRL_CHECKBOX("chkCreateDb")
+#define chkClean		         CTRL_CHECKBOX("chkClean")
+#define chkSingleXact		     CTRL_CHECKBOX("chkSingleXact")
+#define chkDisableTrigger        CTRL_CHECKBOX("chkDisableTrigger")
+#define chkNoDataForFailedTables CTRL_CHECKBOX("chkNoDataForFailedTables")
+#define chkUseSetSession         CTRL_CHECKBOX("chkUseSetSession")
+#define chkExitOnError           CTRL_CHECKBOX("chkExitOnError")
+#define txtNumberOfJobs          CTRL_TEXT("txtNumberOfJobs")
+#define chkVerbose               CTRL_CHECKBOX("chkVerbose")
+#define stSingleObject           CTRL_STATIC("stSingleObject")
+
+#define ctvObjects              CTRL_CHECKTREEVIEW("ctvObjects")
 #define btnView                 CTRL_BUTTON("btnView")
 
 
 BEGIN_EVENT_TABLE(frmRestore, ExternProcessDialog)
-    EVT_TEXT(XRCID("txtFilename"),          frmRestore::OnChangeName)
-    EVT_CHECKBOX(XRCID("chkOnlyData"),      frmRestore::OnChangeData)
-    EVT_CHECKBOX(XRCID("chkOnlySchema"),    frmRestore::OnChangeSchema)
-    EVT_CHECKBOX(XRCID("chkSingleObject"),  frmRestore::OnChange)
-    EVT_BUTTON(XRCID("btnFilename"),        frmRestore::OnSelectFilename)
-    EVT_BUTTON(wxID_OK,                     frmRestore::OnOK)
-    EVT_BUTTON(XRCID("btnView"),            frmRestore::OnView)
-    EVT_END_PROCESS(-1,                     frmRestore::OnEndProcess)
-    EVT_LIST_ITEM_SELECTED(XRCID("lstContents"), frmRestore::OnChangeList)
-    EVT_CLOSE(                              ExternProcessDialog::OnClose)
+    EVT_TEXT(XRCID("txtFilename"),               frmRestore::OnChangeName)
+    EVT_CHECKBOX(XRCID("chkOnlyData"),           frmRestore::OnChangeData)
+    EVT_CHECKBOX(XRCID("chkOnlySchema"),         frmRestore::OnChangeSchema)
+    EVT_BUTTON(XRCID("btnFilename"),             frmRestore::OnSelectFilename)
+    EVT_BUTTON(wxID_OK,                          frmRestore::OnOK)
+    EVT_BUTTON(XRCID("btnView"),                 frmRestore::OnView)
+    EVT_END_PROCESS(-1,                          frmRestore::OnEndProcess)
+    EVT_CLOSE(                                   ExternProcessDialog::OnClose)
 END_EVENT_TABLE()
 
 
@@ -79,23 +86,25 @@ frmRestore::frmRestore(frmMain *_form, pgObject *obj) : ExternProcessDialog(form
 
     SetTitle(wxString::Format(_("Restore %s %s"), object->GetTranslatedTypeName().c_str(), object->GetFullIdentifier().c_str()));
 
+    if (object->GetConnection()->EdbMinimumVersion(8,0))
+        restoreExecutable=edbRestoreExecutable;
+    else if (object->GetConnection()->GetIsGreenplum())
+        restoreExecutable=gpRestoreExecutable;
+    else
+        restoreExecutable=pgRestoreExecutable;
 
     if (object->GetMetaType() != PGM_DATABASE)
     {
-        if (object->GetMetaType() == PGM_TABLE || object->GetMetaType() == GP_PARTITION)
-        {
-            chkOnlySchema->SetValue(false);
-            chkOnlyData->SetValue(true);
-        }
-        else
-        {
-            chkOnlySchema->SetValue(true);
-            chkOnlyData->SetValue(false);
-        }
-        chkSingleObject->SetValue(true);
+        chkOnlySchema->SetValue(object->GetMetaType() == PGM_FUNCTION
+                             || object->GetMetaType() == PGM_INDEX
+                             || object->GetMetaType() == PGM_SCHEMA
+                             || object->GetMetaType() == PGM_TRIGGER);
+        chkOnlyData->SetValue(object->GetMetaType() == PGM_TABLE
+                             || object->GetMetaType() == GP_PARTITION
+                             || object->GetMetaType() == PGM_SCHEMA);
         chkOnlyData->Disable();
         chkOnlySchema->Disable();
-        chkSingleObject->Disable();
+        btnView->Disable();
     }
 
     wxString val;
@@ -116,6 +125,21 @@ frmRestore::frmRestore(frmMain *_form, pgObject *obj) : ExternProcessDialog(form
 	// Pass the SSL mode via the environment
 	environment.Add(wxT("PGSSLMODE=") + server->GetConnection()->GetSslModeName());
 
+    if (!pgAppMinimumVersion(restoreExecutable, 8, 4))
+    {
+        chkNoTablespaces->Disable();
+        chkSingleXact->Disable();
+        txtNumberOfJobs->Disable();
+    }
+    if (!pgAppMinimumVersion(restoreExecutable, 8, 2))
+    {
+        chkNoDataForFailedTables->Disable();
+    }
+    if (!pgAppMinimumVersion(restoreExecutable, 8, 0))
+    {
+        chkExitOnError->Disable();
+    }
+
     wxCommandEvent ev;
     OnChangeName(ev);
 }
@@ -217,51 +241,9 @@ void frmRestore::OnChangeName(wxCommandEvent &ev)
 }
 
 
-void frmRestore::OnChangeList(wxListEvent &ev)
-{
-    OnChange(ev);
-}
-
-
 void frmRestore::OnChange(wxCommandEvent &ev)
 {
-    bool singleValid = !chkSingleObject->GetValue();
-
-	stSingleObject->SetLabel(wxEmptyString);
-
-    if (!singleValid)
-    {
-        switch(object->GetMetaType())
-        {
-            case PGM_DATABASE:
-            {
-                int sel=lstContents->GetSelection();
-                if (sel >= 0)
-                {
-                    wxString type=lstContents->GetText(sel, 0);
-
-                    if ((type.Lower() == wxString(_("Function")).Lower() && !chkOnlyData->GetValue()) || 
-						(type.Lower() == wxString(_("Table")).Lower() && !chkOnlySchema->GetValue()))
-                    {
-						singleValid = true;
-						stSingleObject->SetLabel(type + wxT(" ") + lstContents->GetText(sel, 1));
-					}
-                }
-                break;
-            }
-            case PGM_TABLE:
-            case PGM_FUNCTION:
-            {
-                singleValid=true;
-                stSingleObject->SetLabel(object->GetTranslatedTypeName() + wxT(" ") + object->GetName());
-
-                break;
-            }
-            default:
-                break;
-        }
-    }
-    btnOK->Enable(filenameValid && singleValid);
+    btnOK->Enable(filenameValid);
     btnView->Enable(filenameValid);
 }
 
@@ -286,12 +268,7 @@ wxString frmRestore::getCmdPart1()
 {
     wxString cmd;
 
-    if (object->GetConnection()->EdbMinimumVersion(8,0))
-        cmd=edbRestoreExecutable;
-    else if (object->GetConnection()->GetIsGreenplum())
-        cmd=gpRestoreExecutable;
-    else
-        cmd=pgRestoreExecutable;
+    cmd = restoreExecutable;
 
     if (!server->GetName().IsEmpty())
         cmd += wxT(" --host ") + server->GetName();
@@ -321,6 +298,10 @@ wxString frmRestore::getCmdPart2(int step)
         {
             if (chkNoOwner->GetValue())
                 cmd.Append(wxT(" --no-owner"));
+            if (chkNoPrivileges->GetValue())
+                cmd.Append(wxT(" --no-priviledges"));
+            if (chkNoTablespaces->GetValue())
+                cmd.Append(wxT(" --no-tablespaces"));
         }
 
         if (chkOnlySchema->GetValue())
@@ -330,32 +311,112 @@ wxString frmRestore::getCmdPart2(int step)
         else
         {
             if (chkDisableTrigger->GetValue())
-            cmd.Append(wxT(" --disable-triggers"));
+                cmd.Append(wxT(" --disable-triggers"));
         }
+        if (chkCreateDb->GetValue())
+            cmd.Append(wxT(" --create"));
         if (chkClean->GetValue())
             cmd.Append(wxT(" --clean"));
-
-        if (chkSingleObject->GetValue())
+        if (chkSingleXact->GetValue())
+            cmd.Append(wxT(" --single-transaction"));
+        if (chkNoDataForFailedTables->GetValue())
+            cmd.Append(wxT(" --no-data-for-failed-tables"));
+        if (chkUseSetSession->GetValue())
+            cmd.Append(wxT(" --use-set-session-authorization"));
+        if (chkExitOnError->GetValue())
+            cmd.Append(wxT(" --exit-on-error"));
+
+        if (!txtNumberOfJobs->GetValue().IsEmpty())
+            cmd.Append(wxT(" --jobs ") + txtNumberOfJobs->GetValue());
+
+        // Process selected items
+        wxTreeItemId root, firstLevelObject, secondLevelObject;
+        wxTreeItemIdValue firstLevelObjectData, secondLevelObjectData;
+        bool partialDump = false;
+
+        // Delete old tree
+        ctvObjects->DeleteAllItems();
+
+        // Get root object
+        root = ctvObjects->GetRootItem();
+
+        if (root)
         {
-            switch (object->GetMetaType())
+            // Prepare the array
+            wxArrayString restoreStrings;
+            restoreStrings.Add(wxEmptyString, numberOfTOCItems);
+            restoreTreeItemData *data;
+
+            // Loop through first level objects
+            firstLevelObject = ctvObjects->GetFirstChild(root, firstLevelObjectData);
+            while (firstLevelObject.IsOk())
             {
-                case PGM_DATABASE:
+                if (ctvObjects->IsChecked(firstLevelObject))
                 {
-                    int sel=lstContents->GetSelection();
-                    if (lstContents->GetText(sel, 0).Lower() == wxString(_("Function")).Lower())
-                        cmd.Append(wxT(" --function ") + qtIdent(lstContents->GetText(sel, 1).BeforeLast('(')));
-                    else if (lstContents->GetText(sel, 0).Lower() == wxString(_("Table")).Lower())
-                        cmd.Append(wxT(" --table ") + qtIdent(lstContents->GetText(sel, 1)));
-                    else
-                        return wxT("restore: internal pgadmin error.");   // shouldn't happen!
+                    // Write the file
+                    //wxLogError(((restoreTreeItemData*)ctvObjects->GetItemData(firstLevelObject))->GetDesc());
+                    data = (restoreTreeItemData*)ctvObjects->GetItemData(firstLevelObject);
+                    restoreStrings[data->GetId()] = data->GetDesc();
+
+                    // Loop through second level objects
+                    secondLevelObject = ctvObjects->GetFirstChild(firstLevelObject, secondLevelObjectData);
+                    while (secondLevelObject.IsOk())
+                    {
+                        if (ctvObjects->IsChecked(secondLevelObject))
+                        {
+                            // Write the file
+                            //wxLogError(((restoreTreeItemData*)ctvObjects->GetItemData(secondLevelObject))->GetDesc());
+                            data = (restoreTreeItemData*)ctvObjects->GetItemData(secondLevelObject);
+                            restoreStrings[data->GetId()] = data->GetDesc();
+                        }
+                        else
+                            partialDump = true;
+                        secondLevelObject = ctvObjects->GetNextChild(firstLevelObject, secondLevelObjectData);
+                    }
+                }
+                else
+                    partialDump = true;
+                firstLevelObject = ctvObjects->GetNextChild(root, firstLevelObjectData);
+            }
 
-                    break;
+            // Open a temporary file to store the TOC
+            restoreTOCFilename = wxFileName::CreateTempFileName(wxT("restore"));
+            wxFile tocFile;
+            tocFile.Open(restoreTOCFilename.c_str(), wxFile::write);
+
+            // Write all selected items in it
+            for (int i=0; i<numberOfTOCItems; i++)
+            {
+                if (restoreStrings[i] != wxEmptyString)
+                {
+                    if (!tocFile.Write(restoreStrings[i] + wxT("\n")))
+                        wxLogError(wxT("Error writing to the temporary file ") + restoreTOCFilename);
                 }
+            }
+
+            // If some items were not checked and if the file still contains something, we have to use the list
+            if (partialDump && tocFile.Length() > 0)
+                cmd.Append(wxT(" --use-list \"") + restoreTOCFilename + wxT("\""));
+            tocFile.Close();
+        }
+        else if (object->GetMetaType() != PGM_DATABASE)
+        {
+            switch (object->GetMetaType())
+            {
+                case PGM_FUNCTION:
+                    cmd.Append(wxT(" --function ") + object->GetFullName());
+                    break;
+                case PGM_INDEX:
+                    cmd.Append(wxT(" --index ") + object->GetQuotedIdentifier());
+                    break;
+                case PGM_SCHEMA:
+                    cmd.Append(wxT(" --schema ") + object->GetQuotedIdentifier());
+                    break;
                 case PGM_TABLE:
                     cmd.Append(wxT(" --table ") + object->GetQuotedIdentifier());
                     break;
-                case PGM_FUNCTION:
-                    cmd.Append(wxT(" --function ") + object->GetQuotedIdentifier());
+                case PGM_TRIGGER:
+                    cmd.Append(wxT(" --trigger ") + object->GetQuotedIdentifier());
                     break;
                 default:
                     break;
@@ -380,7 +441,6 @@ void frmRestore::OnView(wxCommandEvent &ev)
     btnView->Disable();
     btnOK->Disable();
     viewRunning = true;
-    lstContents->DeleteAllItems();
     Execute(1, false);
     btnOK->SetLabel(_("OK"));
     done=0;
@@ -417,66 +477,162 @@ void frmRestore::OnEndProcess(wxProcessEvent& ev)
     {
         done = false;
 
-        lstContents->CreateColumns(0, _("Type"), _("Name"));
-
         wxString str=wxTextBuffer::Translate(txtMessages->GetValue(), wxTextFileType_Unix);
 
         wxStringTokenizer line(str, wxT("\n"));
         line.GetNextToken();
         
-        lstContents->Freeze();
         wxBeginBusyCursor();
 
+        wxTreeItemId root = ctvObjects->AddRoot(wxT("Backup ") + txtFilename->GetValue());
+        wxString currentSchema = wxT("");
+        wxTreeItemId currentSchemaNode;
+        wxTreeItemId schemaNode, lastItem;
+        wxTreeItemIdValue schemaNodeData;
+        numberOfTOCItems = 0;
+
         while (line.HasMoreTokens())
         {
+            // Read the next line
             str=line.GetNextToken();
-            if (str.Left(2) == wxT(";"))
+
+            // Skip the few lines of comments
+            if (str.Left(1) == wxT(";") || str.Left(1) == wxT("P"))
                 continue;
 
+            // Split the line according to spaces
             wxStringTokenizer col(str, wxT(" "));
+
+            // Column 1 (dumpId)
             col.GetNextToken();
-            if (!StrToLong(col.GetNextToken().c_str()))
-                continue;
+
+            // Column 2 (tableOid)
             col.GetNextToken();
-            wxString type=col.GetNextToken();
 
-            int icon = -1;
-            wxString typname;
-            pgaFactory *factory=0;
+            // Column 3 (oid)
+            col.GetNextToken();
+
+            // Column 4 (desc)
+            // First interesting information: object's type
+            wxString type=col.GetNextToken();
 
             if (type == wxT("PROCEDURAL"))
             {
-                factory=&languageFactory;
+                // type for a PL is PROCEDURAL LANGUAGE
+                // we'll keep the next column for the object's type
                 type = col.GetNextToken();
             }
+            else if (type == wxT("SHELL"))
+            {
+                // type for a SHELL is SHELL TYPE
+                // we'll keep both columns for the object's type
+                type += col.GetNextToken();
+            }
+            else if (type == wxT("OPERATOR"))
+            {
+                // type for an operator class is OPERATOR CLASS
+                // we'll keep the two columns for the object's type
+                wxString tmp = str.Mid(str.Find(type)+type.Length()+1, 5);
+                if (tmp == wxT("CLASS"))
+                    type += wxT(" ") + col.GetNextToken();
+            }
+            else if (type == wxT("SEQUENCE"))
+            {
+                // type for a sequence can be SEQUENCE, SEQUENCE OWNED BY or SEQUENCE SET
+                // we'll keep all these columns for the object's type
+                wxString tmp = str.Mid(str.Find(type)+type.Length()+1, 3);
+                if (tmp == wxT("OWN") || tmp == wxT("SET"))
+                {
+                    type += wxT(" ") + col.GetNextToken();
+                    if (type == wxT("SEQUENCE OWNED"))
+                        type += wxT(" ") + col.GetNextToken();
+                }
+            }
             else if (type == wxT("FK"))
             {
-                factory=&foreignKeyFactory;
+                // type for a FK is FK CONSTRAINT
+                // we'll keep the next column for the object's type
                 type = col.GetNextToken();
             }
-            else if (type == wxT("CONSTRAINT"))
+            else if (type == wxT("TABLE"))
             {
-                factory=constraintFactory.GetCollectionFactory();
-                // ??? type = col.GetNextToken();
+                if (col.CountTokens() == 4)
+                {
+                    // TABLE DATA detected
+                    type += wxT(" ") + col.GetNextToken();
+                }
             }
-            else
-                factory = pgaFactory::GetFactory(type);
 
-            wxString name = str.Mid(str.Find(type)+type.Length()+1).BeforeLast(' ');
-            if (factory)
+            // Column 5 (namespace)
+            // Second interesting information: object's schema
+            wxString schema=col.GetNextToken();
+
+            // Column 6 (tag)
+            // Third interesting information: object's qualified name
+            //wxString name=col.GetNextToken();
+            wxString name = str.Mid(str.Find(schema)+schema.Length()+1).BeforeLast(' ');
+
+            // Column 7 (owner)
+            // Fourth interesting information: object's owner
+            wxString owner = str.Mid(str.Find(name)+name.Length()+1);
+
+            // New method
+            if (type == wxT("LANGUAGE"))
             {
-                typname=factory->GetTypeName();
-                icon = factory->GetIconId();
+                lastItem = ctvObjects->AppendItem(root, wxT("Language ")+name+wxT(" [owner: ")+owner+wxT("]"), 1);
             }
-            else if (typname.IsEmpty())
-                typname = type;
-
-            lstContents->AppendItem(icon, typname, name);
+            else if (type == wxT("ACL") && schema == wxT("-"))
+            {
+                lastItem = ctvObjects->AppendItem(root, type+wxT(" ")+name, 1);
+            }
+            else if (type == wxT("CAST"))
+            {
+                lastItem = ctvObjects->AppendItem(root, name, 1);
+            }
+            else if (type == wxT("SCHEMA"))
+            {
+                currentSchema = name;
+                lastItem = currentSchemaNode = ctvObjects->AppendItem(root, wxT("Schema ")+name //+wxT(" [owner: ")+owner+wxT("]")
+                                    , 1);
+            }
+            else
+            {
+                if (schema != currentSchema)
+                {
+                    // Loop through the nodes to find the schema
+                    schemaNode = ctvObjects->GetFirstChild(root, schemaNodeData);
+                    bool found = false;
+                    while (schemaNode.IsOk() && !found)
+                    {
+                        if (ctvObjects->GetItemText(schemaNode) == wxT("Schema ")+schema)
+                            found=true;
+                        else
+                            schemaNode = ctvObjects->GetNextChild(root, schemaNodeData);
+                    }
+
+                    // Found it?
+                    if (schemaNode.IsOk())
+                    {
+                        currentSchema = schema;
+                        currentSchemaNode = schemaNode;
+                    }
+                    // if we are treating a comment, we use the schema of its
+                    // object (ie, the previous line)
+                    else if (type != wxT("COMMENT"))
+                        wxLogError(wxT("Schema node not found for object ") + type+wxT(" ")+name+wxT(" [owner: ")+owner+wxT("]"));
+                }
+                lastItem = ctvObjects->AppendItem(currentSchemaNode, type+wxT(" ")+name+wxT(" [owner: ")+owner+wxT("]"), 1);
+            }
+            ctvObjects->SetItemData(lastItem, new restoreTreeItemData(numberOfTOCItems,str));
+            numberOfTOCItems++;
         }
 
-        lstContents->Thaw();
         wxEndBusyCursor();
-        nbNotebook->SetSelection(1);
+        nbNotebook->SetSelection(3);
+    }
+    else
+    {
+        wxRemoveFile(restoreTOCFilename);
     }
 }
 
@@ -515,3 +671,10 @@ bool restoreFactory::CheckEnable(pgObject *obj)
     else
         return obj->CanCreate() && obj->CanRestore() && !pgRestoreExecutable.IsEmpty();
 }
+
+
+restoreTreeItemData::restoreTreeItemData(int id, const wxString& desc)
+{
+    restoreId = id;
+    restoreDesc = desc;
+}
diff --git a/pgadmin/include/frm/frmRestore.h b/pgadmin/include/frm/frmRestore.h
index 6557c97..f49ac9d 100644
--- a/pgadmin/include/frm/frmRestore.h
+++ b/pgadmin/include/frm/frmRestore.h
@@ -47,6 +47,9 @@ private:
     pgServer *server;
     bool viewRunning, filenameValid;
     wxString processedFile;
+    wxString restoreExecutable;
+    wxString restoreTOCFilename;
+    int numberOfTOCItems;
 
     DECLARE_EVENT_TABLE()
 };
@@ -61,4 +64,19 @@ public:
 };
 
 
+class restoreTreeItemData : public wxTreeItemData
+{
+public:
+    restoreTreeItemData(int id, const wxString& desc);
+
+    int GetId() { return restoreId; }
+    wxString GetDesc() { return restoreDesc; }
+
+private:
+   int restoreId;
+   wxString restoreDesc;
+};
+
+
+
 #endif
diff --git a/pgadmin/include/schema/pgSchema.h b/pgadmin/include/schema/pgSchema.h
index afffdfa..e1eae36 100644
--- a/pgadmin/include/schema/pgSchema.h
+++ b/pgadmin/include/schema/pgSchema.h
@@ -72,6 +72,7 @@ public:
 
     bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
     wxMenu *GetNewMenu();
+    bool CanRestore() { return GetConnection()->BackendMinimumVersion(8, 1); }
     wxString GetSql(ctlTree *browser);
     pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
 
diff --git a/pgadmin/include/schema/pgTrigger.h b/pgadmin/include/schema/pgTrigger.h
index 92a48c0..6c137a4 100644
--- a/pgadmin/include/schema/pgTrigger.h
+++ b/pgadmin/include/schema/pgTrigger.h
@@ -68,6 +68,7 @@ public:
 
     bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
     wxString GetSql(ctlTree *browser);
+    bool CanRestore() { return true; }
     pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
 
     bool HasStats() { return false; }
diff --git a/pgadmin/ui/frmRestore.xrc b/pgadmin/ui/frmRestore.xrc
index e718a90..fab8963 100644
--- a/pgadmin/ui/frmRestore.xrc
+++ b/pgadmin/ui/frmRestore.xrc
@@ -2,76 +2,259 @@
 <resource>
   <object class="wxDialog" name="frmRestore">
     <title>Restore</title>
-    <size>200,153d</size>
+    <size>300,193d</size>
     <style>wxDEFAULT_DIALOG_STYLE|wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxTHICK_FRAME</style>
     <object class="wxFlexGridSizer">
       <cols>1</cols>
       <rows>2</rows>
+      <growablecols>0</growablecols>
+      <growablerows>0</growablerows>
       <object class="sizeritem">
         <object class="wxNotebook" name="nbNotebook">
+          <pos>2,2d</pos>
+          <size>285,184d</size>
+          <style>wxNB_BOTTOM</style>
           <object class="notebookpage">
-            <label>Options</label>
-            <object class="wxPanel" name="pnlOptions">
-              <object class="wxStaticText" name="stFilename">
-                <label>Filename</label>
-                <pos>8,7d</pos>
-              </object>
-              <object class="wxTextCtrl" name="txtFilename">
-                <pos>65,5d</pos>
-                <size>100,-1d</size>
-              </object>
-              <object class="wxButton" name="btnFilename">
-                <label>...</label>
-                <pos>170,5d</pos>
-                <size>15,-1d</size>
-              </object>
-              <object class="wxCheckBox" name="chkOnlyData">
-                <label>Only data</label>
-                <pos>65,30d</pos>
-              </object>
-              <object class="wxCheckBox" name="chkOnlySchema">
-                <label>Only schema</label>
-                <pos>65,42d</pos>
-              </object>
-              <object class="wxCheckBox" name="chkSingleObject">
-                <label>Single object</label>
-                <pos>65,54d</pos>
-              </object>
-              <object class="wxStaticText" name="stSingleObject">
-                <label></label>
-                <pos>65,66d</pos>
-              </object>
-
-              <object class="wxCheckBox" name="chkNoOwner">
-                <label>No owner</label>
-                <pos>65,82d</pos>
+            <label>File Options</label>
+            <object class="wxPanel" name="pnlFileOptions">
+              <object class="wxFlexGridSizer">
+                <cols>2</cols>
+                <rows>2</rows>
+                <vgap>5</vgap>
+                <hgap>5</hgap>
+                <growablecols>1</growablecols>
+                <object class="sizeritem">
+                  <object class="wxStaticText" name="stFilename">
+                    <label>Filename</label>
+                  </object>
+                  <flag>wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxFlexGridSizer">
+                    <cols>2</cols>
+                    <rows>1</rows>
+                    <vgap>5</vgap>
+                    <hgap>5</hgap>
+                    <growablecols>0</growablecols>
+                    <object class="sizeritem">
+                      <object class="wxTextCtrl" name="txtFilename"/>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxButton" name="btnFilename">
+                        <label>...</label>
+                      </object>
+                      <flag>wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                    <border>4</border>
+                  </object>
+                  <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxStaticText" name="stNumberOfJobs">
+                    <label>Number Of Jobs</label>
+                  </object>
+                  <flag>wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxTextCtrl" name="txtNumberOfJobs"/>
+                  <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
               </object>
-              <style></style>
-              <object class="wxCheckBox" name="chkDisableTrigger">
-                <label>Disable Trigger</label>
-                <pos>65,94d</pos>
-              </object>
-              <object class="wxCheckBox" name="chkClean">
-                <label>Clean before restore</label>
-                <pos>65,106d</pos>
+            </object>
+          </object>
+          <object class="notebookpage">
+            <label>Restore Options #1</label>
+            <object class="wxPanel" name="pnlDumpOptions">
+              <object class="wxFlexGridSizer">
+                <cols>1</cols>
+                <rows>3</rows>
+                <vgap>5</vgap>
+                <hgap>5</hgap>
+                <growablecols>0</growablecols>
+                <object class="sizeritem">
+                  <object class="wxStaticBoxSizer">
+                    <label>Type Of Objects</label>
+                    <cols>1</cols>
+                    <rows>3</rows>
+                    <vgap>5</vgap>
+                    <hgap>5</hgap>
+                    <growablecols>0</growablecols>
+                    <orient>wxVERTICAL</orient>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkOnlyData">
+                        <label>Only data</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkOnlySchema">
+                        <label>Only schema</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                  </object>
+                  <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxStaticBoxSizer">
+                    <label>Don't save</label>
+                    <cols>1</cols>
+                    <rows>3</rows>
+                    <vgap>5</vgap>
+                    <hgap>5</hgap>
+                    <growablecols>0</growablecols>
+                    <orient>wxVERTICAL</orient>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkNoOwner">
+                        <label>Owner</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkNoPrivileges">
+                        <label>Privilege</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkNoTablespaces">
+                        <label>Tablespace</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                  </object>
+                  <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxStaticBoxSizer">
+                    <label>Queries</label>
+                    <cols>1</cols>
+                    <rows>3</rows>
+                    <vgap>5</vgap>
+                    <hgap>5</hgap>
+                    <growablecols>0</growablecols>
+                    <orient>wxVERTICAL</orient>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkCreateDb">
+                        <label>Include CREATE DATABASE statement</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkClean">
+                        <label>Clean before restore</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkSingleXact">
+                        <label>Single transaction</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                  </object>
+                  <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
               </object>
-
-              <object class="wxCheckBox" name="chkVerbose">
-                <label>Verbose messages</label>
-                <checked>1</checked>
-                <pos>65,118d</pos>
-                <size>80,27d</size>
+            </object>
+          </object>
+          <object class="notebookpage">
+            <label>Restore Options #2</label>
+            <object class="wxPanel" name="pnlDumpOptions">
+              <object class="wxFlexGridSizer">
+                <cols>1</cols>
+                <rows>2</rows>
+                <vgap>5</vgap>
+                <hgap>5</hgap>
+                <growablecols>0</growablecols>
+                <object class="sizeritem">
+                  <object class="wxStaticBoxSizer">
+                    <label>Disable</label>
+                    <cols>1</cols>
+                    <rows>2</rows>
+                    <vgap>5</vgap>
+                    <hgap>5</hgap>
+                    <growablecols>0</growablecols>
+                    <orient>wxVERTICAL</orient>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkDisableTrigger">
+                        <label>Trigger</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkNoDataForFailedTables">
+                        <label>No Data for Failed Tables</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                  </object>
+                  <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxStaticBoxSizer">
+                    <label>Miscellanous / Behavior</label>
+                    <cols>1</cols>
+                    <rows>3</rows>
+                    <vgap>5</vgap>
+                    <hgap>5</hgap>
+                    <growablecols>0</growablecols>
+                    <orient>wxVERTICAL</orient>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkUseSetSession">
+                        <label>Use SET SESSION AUTHORIZATION</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkExitOnError">
+                        <label>Exit On Error</label>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                    <object class="sizeritem">
+                      <object class="wxCheckBox" name="chkVerbose">
+                        <label>Verbose messages</label>
+                        <checked>1</checked>
+                      </object>
+                      <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                      <border>4</border>
+                    </object>
+                  </object>
+                  <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
+                  <border>4</border>
+                </object>
               </object>
             </object>
-            <selected>1</selected>
           </object>
-          <pos>2,2d</pos>
-          <size>195,159d</size>
-          <style>wxNB_BOTTOM</style>
           <object class="notebookpage">
-            <label>Contents</label>
-            <object class="wxListCtrl" name="lstContents">
-              <style>wxLC_REPORT|wxSUNKEN_BORDER</style>
+            <label>Objects</label>
+            <object class="ctlCheckTreeView" name="ctvObjects">
+              <style>wxTR_HAS_BUTTONS|wxSIMPLE_BORDER</style>
             </object>
           </object>
           <object class="notebookpage">
@@ -90,10 +273,9 @@
           <object class="sizeritem">
             <object class="wxButton" name="wxID_HELP">
               <label>&amp;Help</label>
-              <pos>2,135d</pos>
             </object>
-            <flag>wxTOP|wxBOTTOM|wxLEFT|wxRIGHT</flag>
-            <border>5</border>
+            <flag>wxEXPAND|wxALL</flag>
+            <border>3</border>
           </object>
           <object class="spacer">
             <size>0,0</size>
@@ -102,34 +284,29 @@
             <object class="wxButton" name="btnView">
               <label>&amp;View</label>
               <default>1</default>
-              <pos>93,135d</pos>
             </object>
-            <flag>wxTOP|wxBOTTOM|wxLEFT|wxRIGHT</flag>
-            <border>5</border>
+            <flag>wxEXPAND|wxALL</flag>
+            <border>3</border>
           </object>
           <object class="sizeritem">
             <object class="wxButton" name="wxID_OK">
               <label>&amp;OK</label>
               <default>1</default>
-              <pos>93,135d</pos>
             </object>
-            <flag>wxTOP|wxBOTTOM|wxLEFT|wxRIGHT</flag>
-            <border>5</border>
+            <flag>wxEXPAND|wxALL</flag>
+            <border>3</border>
           </object>
           <object class="sizeritem">
             <object class="wxButton" name="wxID_CANCEL">
               <label>&amp;Cancel</label>
-              <pos>146,135d</pos>
             </object>
-            <flag>wxTOP|wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxGROW|wxALIGN_RIGHT</flag>
-            <border>5</border>
+            <flag>wxEXPAND|wxALL</flag>
+            <border>3</border>
           </object>
           <growablecols>1</growablecols>
         </object>
         <flag>wxEXPAND|wxGROW</flag>
       </object>
-      <growablecols>0</growablecols>
-      <growablerows>0</growablerows>
     </object>
   </object>
-</resource>
\ No newline at end of file
+</resource>
-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to