formodbc.h

Go to the documentation of this file.
00001 /**
00002  * \file mgui/formodbc.h
00003  * \brief MGUI::FORM_ODBC class definitions
00004  *
00005  * \if NODOC
00006  * $Id: formodbc.h_v 1.11 2003/10/03 19:58:19 linux32build!build Exp $
00007  *
00008  * $Log: formodbc.h_v $
00009  * Revision 1.11  2003/10/03 19:58:19  linux32build!build
00010  * Doxygen
00011  *
00012  * Revision 1.10  2003/09/29 17:48:00  scowan
00013  * Added another odbc derived user interface dialog class.
00014  *
00015  * Revision 1.9  2003/09/15 13:49:32  fileserver!dwilliss
00016  * Doxygen
00017  *
00018  * Revision 1.8  2003/06/05 19:10:51  scowan
00019  * Added oracle spatial specific form definition.
00020  *
00021  * Revision 1.7  2003/04/09 20:50:37  dwilliss
00022  * Don't use _T in templates.  Mac's ctype.h defines a global _T
00023  *
00024  * Revision 1.6  2003/01/17 22:46:34  scowan
00025  * Added a source only pane.
00026  *
00027  * Revision 1.5  2003/01/16 21:50:13  mju
00028  * Include listbox.h
00029  *
00030  * Revision 1.4  2003/01/15 23:30:08  scowan
00031  * Added more virtual methods.
00032  *
00033  * Revision 1.3  2002/12/10 19:02:51  scowan
00034  * Added schema use.
00035  *
00036  * Revision 1.2  2002/12/04 15:43:18  scowan
00037  * Fixed template errors.
00038  *
00039  * Revision 1.1  2002/12/03 17:07:10  scowan
00040  * Initial revision
00041  *
00042  * \endif
00043 **/
00044 
00045 #ifndef  INC_MGUI_FORMODBC_H
00046 #define  INC_MGUI_FORMODBC_H
00047 
00048 #ifndef  INC_MGUI_CTRL_H
00049 #include <mgui/ctrl.h>
00050 #endif
00051 
00052 #ifndef  INC_MGUI_LISTBOX_H
00053 #include <mgui/listbox.h>
00054 #endif
00055 
00056 #ifndef  INC_MGUI_LAYOUT_H
00057 #include <mgui/layout.h>
00058 #endif
00059 
00060 namespace RVC {
00061    class ODBCINTERFACE;    //!< Forward declaration
00062    }
00063 
00064 namespace MGUI {
00065    
00066 //===================================================================================================================
00067 //! Form containing ODBC Data Source selection
00068 class FORM_ODBC_SOURCE : public MGUI::FORM_COMPOSITE {
00069    public:
00070    
00071       class DATASOURCEINFO {
00072          public:
00073             enum FILEUSAGE {
00074                FILEUSAGE_DBMS = 0,     //!< No file associated with the source
00075                FILEUSAGE_FILE,         //!< One file associated with the source (the table is the file)
00076                FILEUSAGE_CATALOG       //!< Multiple tables associated with the source (the file is a catalog of tables)
00077                };
00078          
00079             DATASOURCEINFO (
00080                ) : m_IsValid(true) {}
00081             
00082             const MISTRING& GetDriver (
00083                ) const { return (m_Driver); } 
00084          
00085             const MISTRING& GetName (
00086                ) const { return (m_Name); } 
00087          
00088             MISTRING GetFileConnectTypeStr (
00089                ) const;
00090                   
00091             MISTRING GetFileExtns (
00092                ) const;
00093 
00094             FILEUSAGE GetFileUsage (
00095                ) const;
00096                
00097             bool IsValid (
00098                ) const { return (m_IsValid); }
00099             
00100          private:
00101             #ifndef GENERATING_DOXYGEN_OUTPUT
00102             MISTRING m_Name;
00103             MISTRING m_Driver;
00104             MISTRING m_Attrib;
00105             bool m_IsValid;
00106             friend class FORM_ODBC_SOURCE;
00107             #endif // GENERATING_DOXYGEN_OUTPUT
00108          };
00109    
00110       //! Constructor.
00111       FORM_ODBC_SOURCE (
00112          );
00113 
00114       //! Destructor.
00115       virtual ~FORM_ODBC_SOURCE (
00116          );
00117 
00118       //! Create
00119       ERRVALUE Create (
00120          MGUI::LAYOUT_PANE_BASE& ParentPane, //!< Parent pane
00121          MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedWidth
00122          );
00123          
00124       const DATASOURCEINFO& GetDataSource (
00125          ) const;
00126          
00127    protected:
00128    
00129       virtual bool v_DataSourceFilter (const MISTRING& Driver);
00130       virtual void v_OnDataSourceSelect (const DATASOURCEINFO& DataSource);
00131       virtual void v_OnNewSourceFile (const DATASOURCEINFO& DataSource);
00132    
00133       ERRVALUE FillDataSourceList ();
00134       
00135    private:
00136       #ifndef GENERATING_DOXYGEN_OUTPUT
00137       CTRL_GROUPBOX m_DataSourceBox;
00138       CTRL_LISTBOX_T<FORM_ODBC_SOURCE> m_DataSource;
00139       LAYOUT_PANE m_DSNButtons;
00140       CTRL_PUSHBUTTON_T<FORM_ODBC_SOURCE> m_CtrlPanel;
00141       CTRL_PUSHBUTTON_T<FORM_ODBC_SOURCE> m_NewFileBtn;
00142       MILIST<DATASOURCEINFO> m_DataSourceList;
00143       MILIST<DATASOURCEINFO>::ITERATOR m_CurDataSource;
00144    
00145       void OnCtrlPanelPressed ();
00146       void OnDataSourceChange ();
00147       void OnNewSourceFile ();
00148       
00149       FORM_ODBC_SOURCE (const FORM_ODBC_SOURCE&);
00150       FORM_ODBC_SOURCE& operator= (const FORM_ODBC_SOURCE&);
00151       #endif // GENERATING_DOXYGEN_OUTPUT
00152    
00153    };
00154    
00155 //===================================================================================================================
00156 //! Form containing ODBC Data Source and table selection
00157 class FORM_ODBC : public MGUI::FORM_COMPOSITE {
00158    public:
00159    
00160       class CONNECTION_ITEM {
00161          public:
00162             CONNECTION_ITEM () : m_FileUsage(FORM_ODBC_SOURCE::DATASOURCEINFO::FILEUSAGE_DBMS) {}
00163          
00164             //! Get the Connection string of the selected data source
00165             //! @return Connection string or an empty string if none selected
00166             const MISTRING& GetConnectString (
00167                ) const { return (m_ConnectString); }
00168 
00169             //! Get the file usage for the connection
00170             //! @return FILEUSAGE               
00171             FORM_ODBC_SOURCE::DATASOURCEINFO::FILEUSAGE GetFileUsage (
00172                ) const { return (m_FileUsage); }
00173                
00174             //! Get the Data Source Name (DSN) of the selected data source
00175             //! @return Selected DSN or an empty string if none selected
00176             const MISTRING& GetDataSourceName (
00177                ) const { return (m_DataSourceName); }
00178                
00179             const MISTRINGLIST& GetTableNameList (
00180                ) const { return (m_SelTableNameList); }
00181                
00182             const MISTRINGLIST& GetTableDescList (
00183                ) const { return (m_SelTableDescList); }
00184                
00185             const MISTRINGLIST& GetTableSchemaList (
00186                ) const { return (m_SelTableSchemaList); }
00187                
00188             bool IsTableSelected (
00189                ) const { return (!m_SelTableNameList.IsEmpty()); }
00190          
00191          private:
00192             #ifndef GENERATING_DOXYGEN_OUTPUT
00193             MISTRING m_DataSourceName;
00194             MISTRING m_ConnectString;
00195             MISTRINGLIST m_SelTableNameList;
00196             MISTRINGLIST m_SelTableDescList;
00197             MISTRINGLIST m_SelTableSchemaList;
00198             FORM_ODBC_SOURCE::DATASOURCEINFO::FILEUSAGE m_FileUsage;
00199             
00200             friend class FORM_ODBC;
00201             #endif // GENERATING_DOXYGEN_OUTPUT
00202          };
00203    
00204 
00205       //! Constructor.
00206       FORM_ODBC (
00207          );
00208 
00209       //! Destructor.
00210       virtual ~FORM_ODBC (
00211          );
00212 
00213       //! Create
00214       ERRVALUE Create (
00215          MGUI::LAYOUT_PANE_BASE& ParentPane, //!< Parent pane
00216          MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00217          );
00218          
00219       void DisplayMessage (
00220          const MISTRING& Message
00221          );
00222 
00223       //! Get the list of selected sources and tables from the FORM        
00224       const MILIST<CONNECTION_ITEM>& GetConnectionList (
00225          ) const { return (m_SelectedList); } 
00226          
00227    protected:
00228    
00229       virtual bool DataSourceFilter (const MISTRING& Driver);
00230       virtual ERRVALUE OnDataSourceSelected (const RVC::ODBCINTERFACE& ODBCInt);
00231       virtual void OnTableSelected ();
00232       virtual bool TableFilter (const RVC::ODBCINTERFACE& ODBCInt, const MISTRING& TableName, const MISTRING& SchemaName);
00233       
00234       void RefreshTableList ();
00235 
00236    private:
00237       #ifndef GENERATING_DOXYGEN_OUTPUT
00238       class ODBC_SOURCE : public FORM_ODBC_SOURCE {
00239          public:
00240             ODBC_SOURCE (
00241                FORM_ODBC& OdbcForm
00242                ) : FORM_ODBC_SOURCE(), m_OdbcForm(OdbcForm) {}
00243                
00244             void FillDataSourceList (
00245                );
00246          
00247          private:
00248             FORM_ODBC& m_OdbcForm;
00249          
00250             virtual bool v_DataSourceFilter (const MISTRING& Driver);
00251             virtual void v_OnDataSourceSelect (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00252             virtual void v_OnNewSourceFile (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00253          
00254          };
00255       friend class ODBC_SOURCE;
00256    
00257       LAYOUT_PANE m_ListForm;
00258       RVC::ODBCINTERFACE* m_ODBCInterface;
00259       ODBC_SOURCE m_ODBCSource;
00260 
00261       //! Data source selection list data    
00262       MILIST<CONNECTION_ITEM> m_SelectedList;
00263       MILIST<CONNECTION_ITEM>::ITERATOR m_CurSourceItem;
00264       
00265       CTRL_GROUPBOX m_TableListBox;
00266       CTRL_LISTBOX_T<FORM_ODBC> m_TableList;
00267       MISTRINGLIST m_TableNameList;
00268       MISTRINGLIST m_TableDescList;
00269       MISTRINGLIST m_TableSchemaList;
00270       
00271       LAYOUT_PANE m_AddRemoveForm;
00272       CTRL_PUSHBUTTON_T<FORM_ODBC> m_AddTable;
00273       CTRL_PUSHBUTTON_T<FORM_ODBC> m_RemoveTable;
00274       
00275       CTRL_GROUPBOX m_SelectedTableBox;
00276       CTRL_LISTBOX_T<FORM_ODBC> m_SelectedTables;
00277       MISTRINGLIST m_SelConList;
00278       CTRL_TEXT m_DescText;
00279 
00280       void OnAddTable ();
00281       void OnDataSourceChange (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00282       void OnNewSourceFile (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00283       void OnRemoveTable ();
00284       void OnSelectedTableChange ();
00285       void OnTableListChange ();
00286       
00287       ERRVALUE EstablishNewConnection ();
00288    
00289       FORM_ODBC (const FORM_ODBC&);
00290       FORM_ODBC& operator= (const FORM_ODBC&);
00291       #endif // GENERATING_DOXYGEN_OUTPUT
00292    
00293    };
00294    
00295 
00296 //-------------------------------------------------------------------------------------------------------------------
00297 //! Convenience template for ODBC form to allow method in container class to be called.
00298 //! This template allows a method in a 'container' class to be called when the button is pressed,
00299 //! rather than requiring that a subclass be defined with the OnPressed() virtual method overridden.
00300 template <class _CT> class FORM_ODBC_T : public MGUI::FORM_ODBC {
00301    public:
00302 
00303       //! Constructor.
00304       explicit FORM_ODBC_T (
00305          ): m_pContainer(0), m_pfOnTableSelected(0) { }
00306 
00307       //! Create control with label from resource lookup.
00308       void Create (
00309          MGUI::LAYOUT_PANE_BASE& ParentPane,    //!< Parent pane
00310          _CT *pContainer,                       //!< Pointer to callback container class
00311          void (_CT::*pfOnTableSelected)(),         //! Callback function pointer
00312          MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00313          ) {
00314          m_pContainer = pContainer;
00315          m_pfOnTableSelected = pfOnTableSelected;
00316          FORM_ODBC::Create(ParentPane, sizealign);
00317          }
00318 
00319    private:
00320       #ifndef GENERATING_DOXYGEN_OUTPUT
00321       _CT *m_pContainer;
00322       void (_CT::*m_pfOnTableSelected)();
00323 
00324       virtual void OnTableSelected (
00325          ) { (m_pContainer->*m_pfOnTableSelected)(); }
00326       #endif // GENERATING_DOXYGEN_OUTPUT
00327    };
00328    
00329    
00330 class FORM_ODBC_ORACLE_SPATIAL : public MGUI::FORM_ODBC {
00331    public:
00332       //! Constructor   
00333       FORM_ODBC_ORACLE_SPATIAL (
00334          );
00335          
00336       //! Destructor
00337       ~FORM_ODBC_ORACLE_SPATIAL (
00338          );
00339       
00340    private:
00341       #ifndef GENERATING_DOXYGEN_OUTPUT
00342       virtual ERRVALUE OnDataSourceSelected (const RVC::ODBCINTERFACE& ODBCInt);
00343       virtual bool DataSourceFilter (const MISTRING& dsn);
00344       virtual bool TableFilter (const RVC::ODBCINTERFACE& ODBCInt, const MISTRING& TableName, const MISTRING& SchemaName);
00345             
00346       MISTRING m_TestName;
00347       MISTRINGLIST m_ValidSchemaList;
00348       MISTRINGLIST m_ValidTableList;
00349       #endif // GENERATING_DOXYGEN_OUTPUT
00350    };
00351 
00352    
00353 class FORM_ODBC_PRIMARY : public MGUI::FORM_COMPOSITE {
00354    public:
00355       //! Constructor   
00356       FORM_ODBC_PRIMARY (
00357          );
00358          
00359       //! Destructor
00360       ~FORM_ODBC_PRIMARY (
00361          );
00362          
00363       //! Check if the table selected can be random accessed
00364       bool CanRandomAccess (
00365          const MISTRING& TableName,
00366          const MISTRING& SchemaName
00367          ) const { return (m_PrimaryODBC.CanRandomAccess(TableName, SchemaName)); }
00368          
00369       //! Create
00370       ERRVALUE Create (
00371          MGUI::LAYOUT_PANE_BASE& ParentPane, //!< Parent pane
00372          MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00373          );
00374          
00375       //! Get the list of selected sources and tables from the FORM        
00376       const MILIST<FORM_ODBC::CONNECTION_ITEM>& GetConnectionList (
00377          ) const { return (m_PrimaryODBC.GetConnectionList()); } 
00378          
00379    private:
00380       #ifndef GENERATING_DOXYGEN_OUTPUT
00381       class PRIMARY_ODBC : public FORM_ODBC {
00382          public:
00383             PRIMARY_ODBC () : FORM_ODBC(), m_PrimaryOnly(true) {}
00384             ~PRIMARY_ODBC () {}
00385             
00386             bool CanRandomAccess (
00387                const MISTRING& TableName,
00388                const MISTRING& SchemaName
00389                ) const;
00390          
00391             void SetPrimaryFlag (
00392                bool value
00393                );
00394       
00395          private:
00396             MISTRINGLIST m_ValidSchemaList;
00397             MISTRINGLIST m_ValidTableList;
00398             bool m_PrimaryOnly;
00399             
00400             virtual ERRVALUE OnDataSourceSelected (const RVC::ODBCINTERFACE& ODBCInt);
00401             virtual bool TableFilter (const RVC::ODBCINTERFACE& ODBCInt, const MISTRING& TableName, const MISTRING& SchemaName);
00402          };
00403       
00404       PRIMARY_ODBC m_PrimaryODBC;
00405       CTRL_TOGGLEBUTTON_T<FORM_ODBC_PRIMARY> m_PrimaryOnly;
00406       
00407       void OnPrimaryOnly ();
00408       
00409       #endif // GENERATING_DOXYGEN_OUTPUT
00410    };
00411 
00412 }     // End of MGUI namespace
00413 
00414 #endif   // INC_MGUI_FORMODBC_H

Generated on Wed May 31 15:26:45 2006 for TNTsdk by  doxygen 1.3.8-20040913