Author: andreas
Date: 2005-06-07 19:29:52 +0100 (Tue, 07 Jun 2005)
New Revision: 4286

Modified:
   trunk/pgadmin3/CHANGELOG.txt
   trunk/pgadmin3/src/ctl/ctlComboBox.cpp
   trunk/pgadmin3/src/dlg/dlgAggregate.cpp
   trunk/pgadmin3/src/frm/frmStatus.cpp
   trunk/pgadmin3/src/include/ctl/ctlComboBox.h
   trunk/pgadmin3/src/include/dlgAggregate.h
   trunk/pgadmin3/src/include/pgAggregate.h
   trunk/pgadmin3/src/schema/pgAggregate.cpp
   trunk/pgadmin3/src/ui/dlgAggregate.xrc
Log:
Support for pgsql 8.1 aggregate sortop

Modified: trunk/pgadmin3/CHANGELOG.txt
===================================================================
--- trunk/pgadmin3/CHANGELOG.txt        2005-06-07 18:23:49 UTC (rev 4285)
+++ trunk/pgadmin3/CHANGELOG.txt        2005-06-07 18:29:52 UTC (rev 4286)
@@ -17,9 +17,10 @@
 </ul>
 <br>
 <ul>
+    <li>2005-06-03 AP        Support for pgsql 8.1 aggregate sortop
     <li>2005-06-03 AP        Support for pgsql 8.1 pg_stat_activity
     <li>2005-06-03 AP        Support for pgsql 8.1 instrumentation
-    <li>2005-06-01 AP        Support for Procedures aka functions with out 
parameters
+    <li>2005-06-01 AP        Support for Procedures aka functions "with 
out-parameters"
     <li>2005-06-01 AP        Support for EDB8.0
     <li>2005-05-31 DP  1.2.3 Fix domain RE SQL, per Ivan
     <li>2005-05-31 DP  1.2.3 Add missing ; to RE SQL, per Ivan

Modified: trunk/pgadmin3/src/ctl/ctlComboBox.cpp
===================================================================
--- trunk/pgadmin3/src/ctl/ctlComboBox.cpp      2005-06-07 18:23:49 UTC (rev 
4285)
+++ trunk/pgadmin3/src/ctl/ctlComboBox.cpp      2005-06-07 18:29:52 UTC (rev 
4286)
@@ -25,6 +25,26 @@
 };
 
 
+
+
+int wxComboBoxFix::Append(const wxString& item, const wxString &str)
+{
+    return wxComboBox::Append(item, new StringClientData(str));
+}
+
+
+int wxComboBoxFix::Append(const wxString& item, long l)
+{
+    return wxComboBox::Append(item, (void*)l);
+}
+
+
+int wxComboBoxFix::Append(const wxString& item, OID oid)
+{
+    return wxComboBox::Append(item, (void*)oid);
+}
+
+
 int wxComboBoxFix::FillLongKey(pgConnBase *conn, const wxChar *qry)
 {
     int cnt=0;
@@ -33,7 +53,7 @@
     {
         long l=set.GetLong(0);
         wxString txt=set.GetVal(1);
-        Append(txt, (void*)l);
+        Append(txt, l);
         cnt++;
     }
     return cnt;
@@ -48,7 +68,7 @@
     {
         OID oid=set.GetOid(0);
         wxString txt=set.GetVal(1);
-        Append(txt, (void*)oid);
+        Append(txt, oid);
         cnt++;
     }
     return cnt;
@@ -63,23 +83,30 @@
     {
         wxString str=set.GetVal(0);
         wxString txt=set.GetVal(1);
-        Append(txt, new StringClientData(txt));
+        Append(txt, str);
         cnt++;
     }
     return cnt;
 }
+
 long wxComboBoxFix::GetLongKey(int sel)
 {
+    if (sel < 0)
+        sel = GetSelection();
     return (long)GetClientData(sel);
 }
 
 OID wxComboBoxFix::GetOIDKey(int sel)
 {
+    if (sel < 0)
+        sel = GetSelection();
     return (OID)GetClientData(sel);
 }
 
 wxString wxComboBoxFix::GetStringKey(int sel)
 {
+    if (sel < 0)
+        sel = GetSelection();
     StringClientData *scd=(StringClientData*)GetClientObject(sel);
     if (scd)
         return scd->str;

Modified: trunk/pgadmin3/src/dlg/dlgAggregate.cpp
===================================================================
--- trunk/pgadmin3/src/dlg/dlgAggregate.cpp     2005-06-07 18:23:49 UTC (rev 
4285)
+++ trunk/pgadmin3/src/dlg/dlgAggregate.cpp     2005-06-07 18:29:52 UTC (rev 
4286)
@@ -31,16 +31,18 @@
 #define cbStateType         CTRL_COMBOBOX2("cbStateType")
 #define cbStateFunc         CTRL_COMBOBOX("cbStateFunc")
 #define cbFinalFunc         CTRL_COMBOBOX("cbFinalFunc")
+#define cbSortOp            CTRL_COMBOBOX("cbSortOp")
 #define txtInitial          CTRL_TEXT("txtInitial")
 
 
 
 BEGIN_EVENT_TABLE(dlgAggregate, dlgTypeProperty)
     EVT_TEXT(XRCID("cbBaseType"),                   
dlgAggregate::OnChangeTypeBase)
-    EVT_COMBOBOX(XRCID("cbBaseType"),               dlgProperty::OnChange)
+    EVT_COMBOBOX(XRCID("cbBaseType"),               dlgAggregate::OnChangeType)
     EVT_TEXT(XRCID("cbStateType"),                  
dlgAggregate::OnChangeTypeState)
-    EVT_COMBOBOX(XRCID("cbStateType"),              dlgProperty::OnChange)
+    EVT_COMBOBOX(XRCID("cbStateType"),              dlgAggregate::OnChangeType)
     EVT_COMBOBOX(XRCID("cbStateFunc"),              dlgProperty::OnChange)
+    EVT_COMBOBOX(XRCID("cbSortOp"),                 dlgProperty::OnChange)
     EVT_TEXT(XRCID("cbStateFunc"),                  dlgProperty::OnChange)
 END_EVENT_TABLE();
 
@@ -65,6 +67,9 @@
     if (!connection->BackendMinimumVersion(7, 5))
         cbOwner->Disable();
 
+    if (!connection->BackendMinimumVersion(8, 1))
+        cbSortOp->Disable();
+
     if (aggregate)
     {
         // edit mode
@@ -79,14 +84,17 @@
         cbFinalFunc->Append(aggregate->GetFinalFunction());
         cbFinalFunc->SetSelection(0);
 
+        cbSortOp->Append(aggregate->GetSortOp());
+        cbSortOp->SetSelection(0);
+
         txtInitial->SetValue(aggregate->GetInitialCondition());
 
         if (!connection->BackendMinimumVersion(7, 4))
             txtName->Disable();
         cbBaseType->Disable();
         cbStateType->Disable();
-        cbStateFunc->Disable();
         cbFinalFunc->Disable();
+        cbSortOp->Disable();
         txtInitial->Disable();
     }
     else
@@ -136,20 +144,20 @@
 void dlgAggregate::OnChangeTypeBase(wxCommandEvent &ev)
 {
     cbBaseType->GuessSelection(ev);
-    CheckChange();
+    OnChangeType(ev);
 }
 
 void dlgAggregate::OnChangeTypeState(wxCommandEvent &ev)
 {
     cbStateType->GuessSelection(ev);
-    CheckChange();
+    OnChangeType(ev);
 }
 
 void dlgAggregate::OnChangeType(wxCommandEvent &ev)
 {
-    procedures.Clear();
     cbStateFunc->Clear();
     cbFinalFunc->Clear();
+    cbSortOp->Clear();
 
     if (cbBaseType->GetGuessedSelection() >= 0 && 
cbStateType->GetGuessedSelection() >= 0)
     {
@@ -158,21 +166,21 @@
             wxT("  FROM pg_proc p\n")
             wxT("  JOIN pg_type t ON t.oid=p.prorettype\n")
             wxT("  JOIN pg_namespace n ON n.oid=pronamespace\n")
-            wxT(" WHERE proargtypes[2] = 0");
+            wxT(" WHERE COALESCE(proargtypes[2],0) = 0");
 
 
         pgSet *set=connection->ExecuteSet(qry +
             wxT("\n   AND prorettype = ") + 
GetTypeOid(cbStateType->GetGuessedSelection()+1) +
             wxT("\n   AND proargtypes[0] = ") + 
GetTypeOid(cbStateType->GetGuessedSelection()+1) +
-            wxT("\n   AND (proargtypes[1]= 0 OR proargtypes[1]= ") 
+            wxT("\n   AND (COALESCE(proargtypes[1],0) = 0 OR proargtypes[1]= 
") 
             + GetTypeOid(cbBaseType->GetGuessedSelection()) + wxT(")"));
 
         if (set)
         {
             while (!set->Eof())
             {
-                
procedures.Add(database->GetQuotedSchemaPrefix(set->GetVal(wxT("nspname"))) + 
qtIdent(set->GetVal(wxT("proname"))));
-                
cbStateFunc->Append(database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + 
set->GetVal(wxT("proname")));
+                
cbStateFunc->Append(database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + 
set->GetVal(wxT("proname")),
+                                    
database->GetQuotedSchemaPrefix(set->GetVal(wxT("nspname"))) + 
qtIdent(set->GetVal(wxT("proname"))));
 
                 set->MoveNext();
             }
@@ -180,25 +188,46 @@
         }
 
 
-        procedures.Add(wxEmptyString);
         cbFinalFunc->Append(wxT(" "));
 
         set=connection->ExecuteSet(qry +
             wxT("\n   AND proargtypes[0] = ") + 
GetTypeOid(cbStateType->GetGuessedSelection()+1) +
-            wxT("\n   AND proargtypes[1]= 0"));
+            wxT("\n   AND COALESCE(proargtypes[1],0)= 0"));
 
         if (set)
         {
             while (!set->Eof())
             {
-                
procedures.Add(database->GetQuotedSchemaPrefix(set->GetVal(wxT("nspname"))) + 
qtIdent(set->GetVal(wxT("proname"))));
-                
cbFinalFunc->Append(database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + 
set->GetVal(wxT("proname")));
+                
cbFinalFunc->Append(database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + 
set->GetVal(wxT("proname")),
+                                    
database->GetQuotedSchemaPrefix(set->GetVal(wxT("nspname"))) + 
qtIdent(set->GetVal(wxT("proname"))));
 
                 set->MoveNext();
             }
             delete set;
         }
+
+        cbSortOp->Append(wxT(" "), wxEmptyString);
+
+        set=connection->ExecuteSet(
+            wxT("SELECT oprname, nspname\n")
+            wxT("  FROM pg_operator op\n")
+            wxT("  JOIN pg_namespace nsp on nsp.oid=oprnamespace\n")
+            wxT(" WHERE oprleft = ") + 
GetTypeOid(cbBaseType->GetGuessedSelection()) + wxT("\n")
+            wxT("   AND oprright = ") + 
GetTypeOid(cbBaseType->GetGuessedSelection()) + wxT("\n"));
+
+        if (set)
+        {
+            while (!set->Eof())
+            {
+                wxString key = 
database->GetQuotedSchemaPrefix(set->GetVal(wxT("nspname"))) + 
qtIdent(set->GetVal(wxT("oprname")));
+                wxString txt = 
database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + 
set->GetVal(wxT("oprname"));
+                cbSortOp->Append(txt, key);
+                set->MoveNext();
+            }
+            delete set;
+        }
     }
+        
     CheckChange();
 }
 
@@ -221,18 +250,22 @@
         name=GetName();
         sql = wxT("CREATE AGGREGATE ") + schema->GetQuotedPrefix() + 
qtIdent(name)
             + wxT("(\n   BASETYPE=") + 
GetQuotedTypename(cbBaseType->GetGuessedSelection())
-            + wxT(",\n   SFUNC=") + 
procedures.Item(cbStateFunc->GetSelection())
+            + wxT(",\n   SFUNC=") + cbStateFunc->GetStringKey()
             + wxT(", STYPE=") + 
GetQuotedTypename(cbStateType->GetGuessedSelection() +1); // skip "any" type
 
         if (cbFinalFunc->GetSelection() > 0)
         {
             sql += wxT(",\n   FINALFUNC=") 
-                + procedures.Item(cbFinalFunc->GetSelection() + 
cbStateFunc->GetCount());
+                + cbFinalFunc->GetStringKey();
         }
         wxString initial=txtInitial->GetValue().Strip(wxString::both);
         if (!initial.IsEmpty())
             sql += wxT(",\n   INITCOND=") + qtString(initial);
-        
+
+        wxString opr=cbSortOp->GetStringKey();
+        if (!opr.IsEmpty())
+            sql += wxT(",\n   SORTOP=") + opr;
+
         sql += wxT(");\n");
 
         AppendOwnerNew(sql, wxT("AGGREGATE ") + schema->GetQuotedPrefix() + 
qtIdent(name)+ 

Modified: trunk/pgadmin3/src/frm/frmStatus.cpp
===================================================================
--- trunk/pgadmin3/src/frm/frmStatus.cpp        2005-06-07 18:23:49 UTC (rev 
4285)
+++ trunk/pgadmin3/src/frm/frmStatus.cpp        2005-06-07 18:29:52 UTC (rev 
4286)
@@ -712,7 +712,7 @@
             wxString fn= set->GetVal(wxT("filename"));
             wxDateTime ts=set->GetDateTime(wxT("filetime"));
 
-            cbLogfiles->Append(DateToAnsiStr(ts), new wxDateTime(ts));
+            cbLogfiles->Append(DateToAnsiStr(ts), (void*)new wxDateTime(ts));
 
             set->MoveNext();
         }

Modified: trunk/pgadmin3/src/include/ctl/ctlComboBox.h
===================================================================
--- trunk/pgadmin3/src/include/ctl/ctlComboBox.h        2005-06-07 18:23:49 UTC 
(rev 4285)
+++ trunk/pgadmin3/src/include/ctl/ctlComboBox.h        2005-06-07 18:29:52 UTC 
(rev 4286)
@@ -17,6 +17,8 @@
 #include <wx/wx.h>
 #include "base/base.h"
 
+
+
 class pgConnBase;
 class wxComboBoxFix : public wxComboBox
 {
@@ -25,13 +27,21 @@
     int FillLongKey(pgConnBase *conn, const wxChar *qry);
     int FillOidKey(pgConnBase *conn, const wxChar *qry);
     int FillStringKey(pgConnBase *conn, const wxChar *qry);
-    long GetLongKey(int sel);
-    OID GetOIDKey(int sel);
-    wxString GetStringKey(int sel);
+    long GetLongKey(int sel=-1);
+    OID GetOIDKey(int sel=-1);
+    wxString GetStringKey(int sel=-1);
     bool SetKey(long val);
     bool SetKey(OID val);
     bool SetKey(const wxString &val);
 
+    int Append(const wxString& item) { return wxComboBox::Append(item); }
+    int Append(const wxString& item, void *data) { return 
wxComboBox::Append(item, data); }
+    int Append(const wxString& item, const wxString &str);
+    int Append(const wxString& item, long l);
+    int Append(const wxString& item, OID oid);
+
+
+
 #ifdef __WXMSW__
     wxString GetValue() const { return wxGetWindowText(GetHwnd()); }
 #endif

Modified: trunk/pgadmin3/src/include/dlgAggregate.h
===================================================================
--- trunk/pgadmin3/src/include/dlgAggregate.h   2005-06-07 18:23:49 UTC (rev 
4285)
+++ trunk/pgadmin3/src/include/dlgAggregate.h   2005-06-07 18:29:52 UTC (rev 
4286)
@@ -36,8 +36,6 @@
     void OnChangeType(wxCommandEvent &ev);
     void OnChangeTypeBase(wxCommandEvent &ev);
     void OnChangeTypeState(wxCommandEvent &ev);
-    
-    wxArrayString procedures;
 
     DECLARE_EVENT_TABLE();
 };

Modified: trunk/pgadmin3/src/include/pgAggregate.h
===================================================================
--- trunk/pgadmin3/src/include/pgAggregate.h    2005-06-07 18:23:49 UTC (rev 
4285)
+++ trunk/pgadmin3/src/include/pgAggregate.h    2005-06-07 18:29:52 UTC (rev 
4286)
@@ -48,14 +48,19 @@
     void iSetFinalFunction(const wxString& s) { finalFunction=s; }
     wxString GetInitialCondition() { return initialCondition; }
     void iSetInitialCondition(const wxString& s) { initialCondition=s; }
+    wxString GetSortOp() { return sortOp; }
+    void iSetSortOp(const wxString &s) { sortOp=s; }
+    wxString GetQuotedSortOp() { return quotedSortOp; }
+    void iSetQuotedSortOp(const wxString &s) { quotedSortOp=s; }
 
+
     bool DropObject(wxFrame *frame, wxTreeCtrl *browser, bool cascaded);
     wxString GetSql(wxTreeCtrl *browser);
     pgObject *Refresh(wxTreeCtrl *browser, const wxTreeItemId item);
 
 private:
     pgSchema *schema;
-    wxString inputType, stateType, finalType,
+    wxString inputType, stateType, finalType, sortOp, quotedSortOp,
              stateFunction, finalFunction, initialCondition;
 };
 

Modified: trunk/pgadmin3/src/schema/pgAggregate.cpp
===================================================================
--- trunk/pgadmin3/src/schema/pgAggregate.cpp   2005-06-07 18:23:49 UTC (rev 
4285)
+++ trunk/pgadmin3/src/schema/pgAggregate.cpp   2005-06-07 18:29:52 UTC (rev 
4286)
@@ -50,6 +50,8 @@
         AppendIfFilled(sql, wxT(",\n  FINALFUNC="), 
qtIdent(GetFinalFunction()));
         if (GetInitialCondition().length() > 0)
           sql += wxT(",\n  INITCOND=") + qtString(GetInitialCondition());
+        AppendIfFilled(sql, wxT(",\n  SORTOP="), GetQuotedSortOp());
+
         sql += wxT("\n);\n")
             + GetOwnerSql(8, 0, wxT("AGGREGATE ") + GetQuotedFullIdentifier() 
                 + wxT("(") + qtIdent(GetInputType())
@@ -88,6 +90,8 @@
         properties->AppendItem(_("State function"), GetStateFunction());
         properties->AppendItem(_("Final type"), GetFinalType());
         properties->AppendItem(_("Final function"), GetFinalFunction());
+        if (GetConnection()->BackendMinimumVersion(8,1))
+            properties->AppendItem(_("Sort operator"), GetSortOp());
         properties->AppendItem(_("Initial condition"), GetInitialCondition());
         properties->AppendItem(_("System aggregate?"), GetSystemObject());
         properties->AppendItem(_("Comment"), GetComment());
@@ -113,7 +117,7 @@
 pgObject *pgAggregate::ReadObjects(pgCollection *collection, wxTreeCtrl 
*browser, const wxString &restriction)
 {
     pgAggregate *aggregate=0;
-    pgSet *aggregates= collection->GetDatabase()->ExecuteSet(
+    wxString sql=
         wxT("SELECT aggfnoid::oid, proname AS aggname, 
pg_get_userbyid(proowner) AS aggowner, aggtransfn,\n")
         wxT(        "aggfinalfn, proargtypes[0] AS aggbasetype, ")
         wxT(        "CASE WHEN (ti.typlen = -1 AND ti.typelem != 0) THEN 
(SELECT at.typname FROM pg_type at WHERE at.oid = ti.typelem) || '[]' ELSE 
ti.typname END as inputname, ")
@@ -121,8 +125,20 @@
         wxT(        "CASE WHEN (tt.typlen = -1 AND tt.typelem != 0) THEN 
(SELECT at.typname FROM pg_type at WHERE at.oid = tt.typelem) || '[]' ELSE 
tt.typname END as transname, ")
         wxT(        "prorettype AS aggfinaltype, ")
         wxT(        "CASE WHEN (tf.typlen = -1 AND tf.typelem != 0) THEN 
(SELECT at.typname FROM pg_type at WHERE at.oid = tf.typelem) || '[]' ELSE 
tf.typname END as finalname, ")
-        wxT(        "agginitval, description\n")
-        wxT("  FROM pg_aggregate ag\n")
+        wxT(        "agginitval, description");
+
+    if (collection->GetDatabase()->BackendMinimumVersion(8, 1))
+    {
+        sql += wxT(", oprname, opn.nspname as oprnsp\n")
+               wxT("  FROM pg_aggregate ag\n")
+               wxT("  LEFT OUTER JOIN pg_operator op ON op.oid=aggsortop\n")
+               wxT("  LEFT OUTER JOIN pg_namespace opn ON 
opn.oid=op.oprnamespace");
+    }
+    else
+        sql +=  wxT("\n  FROM pg_aggregate ag\n");
+
+
+    pgSet *aggregates= collection->GetDatabase()->ExecuteSet(sql +
         wxT("  JOIN pg_proc pr ON pr.oid = ag.aggfnoid\n")
         wxT("  JOIN pg_type ti on ti.oid=proargtypes[0]\n")
         wxT("  JOIN pg_type tt on tt.oid=aggtranstype\n")
@@ -143,15 +159,28 @@
             if (aggregates->GetVal(wxT("inputname")) == wxT("any"))
                 aggregate->iSetInputType(wxT("\"any\""));
             else
-            aggregate->iSetInputType(aggregates->GetVal(wxT("inputname")));
+                aggregate->iSetInputType(aggregates->GetVal(wxT("inputname")));
             aggregate->iSetStateType(aggregates->GetVal(wxT("transname")));
             
aggregate->iSetStateFunction(aggregates->GetVal(wxT("aggtransfn")));
             aggregate->iSetFinalType(aggregates->GetVal(wxT("finalname")));
-            
aggregate->iSetFinalFunction(aggregates->GetVal(wxT("aggfinalfn")));
+
+            wxString final=aggregates->GetVal(wxT("aggfinalfn"));
+            if (final != wxT("-"))
+                aggregate->iSetFinalFunction(final);
             
aggregate->iSetInitialCondition(aggregates->GetVal(wxT("agginitval")));
             aggregate->iSetComment(aggregates->GetVal(wxT("description")));
+            if (collection->GetDatabase()->BackendMinimumVersion(8, 1))
+            {
+                wxString oprname=aggregates->GetVal(wxT("oprname"));
+                if (!oprname.IsEmpty())
+                {
+                    wxString oprnsp=aggregates->GetVal(wxT("oprnsp"));
+                    
aggregate->iSetSortOp(collection->GetDatabase()->GetSchemaPrefix(oprnsp) + 
oprname);
+                    
aggregate->iSetQuotedSortOp(collection->GetDatabase()->GetQuotedSchemaPrefix(oprnsp)
+                        + qtIdent(oprname));
+                }
+            }
 
-
             if (browser)
             {
                 collection->AppendBrowserItem(browser, aggregate);

Modified: trunk/pgadmin3/src/ui/dlgAggregate.xrc
===================================================================
--- trunk/pgadmin3/src/ui/dlgAggregate.xrc      2005-06-07 18:23:49 UTC (rev 
4285)
+++ trunk/pgadmin3/src/ui/dlgAggregate.xrc      2005-06-07 18:29:52 UTC (rev 
4286)
@@ -1,4 +1,4 @@
-<?xml version="1.0" ?>
+<?xml version="1.0" encoding="ISO-8859-1"?>
 <resource>
   <object class="wxDialog" name="dlgAggregate">
     <title></title>
@@ -7,105 +7,170 @@
         <label>Properties</label>
         <object class="wxPanel" name="pnlProperties">
           <object class="wxStaticText" name="stName">
+            
             <label>Name</label>
+            
             <pos>5,7d</pos>
           </object>
           <object class="wxTextCtrl" name="txtName">
+            
             <pos>70,5d</pos>
+            
             <size>135,-1d</size>
           </object>
           <object class="wxStaticText" name="stOID">
+            
             <label>OID</label>
+            
             <pos>5,22d</pos>
           </object>
           <object class="wxTextCtrl" name="txtOID">
+            
             <pos>70,20d</pos>
+            
             <size>135,-1d</size>
           </object>
           <object class="wxStaticText" name="stOwner">
+            
             <label>Owner</label>
+            
             <pos>5,37d</pos>
           </object>
           <object class="ctlComboBox" name="cbOwner">
+            
             <pos>70,35d</pos>
+            
             <size>135,12d</size>
+            
             <content/>
+            
             <style>wxCB_DROPDOWN</style>
           </object>
           <object class="wxStaticText" name="stBaseType">
+            
             <label>Input type</label>
+            
             <pos>5,52d</pos>
           </object>
           <object class="ctlComboBox" name="cbBaseType">
+            
             <content/>
+            
             <pos>70,50d</pos>
+            
             <size>135,12d</size>
+            
             <style>wxCB_DROPDOWN</style>
           </object>
           <object class="wxStaticText" name="stStateType">
+            
             <label>State type</label>
+            
             <pos>5,67d</pos>
           </object>
           <object class="ctlComboBox" name="cbStateType">
+            
             <content/>
+            
             <pos>70,65d</pos>
+            
             <size>135,12d</size>
+            
             <style>wxCB_DROPDOWN</style>
           </object>
           <object class="wxStaticText" name="stStateFunc">
+            
             <label>State function</label>
+            
             <pos>5,82d</pos>
           </object>
           <object class="wxComboBox" name="cbStateFunc">
+            
             <content/>
+            
             <pos>70,80d</pos>
+            
             <size>135,12d</size>
+            
             <style>wxCB_READONLY|wxCB_DROPDOWN</style>
           </object>
           <object class="wxStaticText" name="stFinalFunc">
+            
             <label>Final function</label>
+            
             <pos>5,97d</pos>
           </object>
           <object class="wxComboBox" name="cbFinalFunc">
+            
             <content/>
+            
             <pos>70,95d</pos>
+            
             <size>135,12d</size>
+            
             <style>wxCB_READONLY|wxCB_DROPDOWN</style>
           </object>
+          <object class="wxStaticText" name="stSortOp">
+            <label>Sort Operator</label>
+            <pos>5,112d</pos>
+          </object>
+          <object class="wxComboBox" name="cbSortOp">
+            <content/>
+            <pos>70,110d</pos>
+            <size>135,12d</size>
+            <style>wxCB_READONLY|wxCB_DROPDOWN</style>
+          </object>
           <object class="wxStaticText" name="stInitial">
+            
             <label>Initial condition</label>
-            <pos>5,112d</pos>
+            
+            <pos>5,127d</pos>
           </object>
           <object class="wxTextCtrl" name="txtInitial">
-            <pos>70,110d</pos>
+            
+            <pos>70,125d</pos>
+            
             <size>135,-1d</size>
           </object>
           <object class="wxStaticText" name="stComment">
+            
             <label>Comment</label>
-            <pos>5,127d</pos>
+            
+            <pos>5,142d</pos>
           </object>
           <object class="wxTextCtrl" name="txtComment">
-            <pos>70,125d</pos>
-            <size>135,72d</size>
+            
+            <pos>70,140d</pos>
+            
+            <size>135,57d</size>
+            
             <style>wxTE_MULTILINE</style>
           </object>
         </object>
+        
         <selected>1</selected>
       </object>
       <pos>2,2d</pos>
       <size>214,215d</size>
     </object>
     <object class="wxButton" name="wxID_HELP">
+      
       <label>Help</label>
+      
       <pos>3,221d</pos>
     </object>
     <object class="wxButton" name="wxID_OK">
+      
       <label>OK</label>
+      
       <default>1</default>
+      
       <pos>113,221d</pos>
     </object>
     <object class="wxButton" name="wxID_CANCEL">
+      
       <label>Cancel</label>
+      
       <pos>166,221d</pos>
     </object>
     <size>218,240d</size>


---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to