00001
00030 #ifndef INC_MGUI_FORMODBC_H
00031 #define INC_MGUI_FORMODBC_H
00032
00033 #ifndef INC_MGUI_EDIT_H
00034 #include <mgui/edit.h>
00035 #endif
00036
00037 #ifndef INC_MGUI_LISTBOX_H
00038 #include <mgui/listbox.h>
00039 #endif
00040
00041 #ifndef INC_MI32_MISTRINGLIST_H
00042 #include <mi32/mistringlist.h>
00043 #endif
00044
00045
00046 #ifndef GENERATING_DOXYGEN_OUTPUT
00047 namespace RVC {
00048 class ODBCINTERFACE;
00049 }
00050 #endif
00051
00052
00053 namespace MGUI {
00054
00055
00057 class FORM_ODBC_SOURCE : public MGUI::FORM_COMPOSITE {
00058 public:
00059
00060 class DATASOURCEINFO {
00061 public:
00062 enum FILEUSAGE {
00063 FILEUSAGE_DBMS = 0,
00064 FILEUSAGE_FILE,
00065 FILEUSAGE_CATALOG
00066 };
00067
00068 DATASOURCEINFO (
00069 ) : m_IsValid(true) {}
00070
00071 const MISTRING& GetDriver (
00072 ) const { return (m_Driver); }
00073
00074 const MISTRING& GetName (
00075 ) const { return (m_Name); }
00076
00077 MISTRING GetFileConnectTypeStr (
00078 ) const;
00079
00080 MISTRING GetFileExtns (
00081 ) const;
00082
00083 FILEUSAGE GetFileUsage (
00084 ) const;
00085
00086 bool IsValid (
00087 ) const { return (m_IsValid); }
00088
00089 private:
00090 #ifndef GENERATING_DOXYGEN_OUTPUT
00091 MISTRING m_Name;
00092 MISTRING m_Driver;
00093 MISTRING m_Attrib;
00094 bool m_IsValid;
00095 friend class FORM_ODBC_SOURCE;
00096 #endif // GENERATING_DOXYGEN_OUTPUT
00097 };
00098
00100 FORM_ODBC_SOURCE (
00101 );
00102
00104 virtual ~FORM_ODBC_SOURCE (
00105 );
00106
00108 ERRVALUE Create (
00109 MGUI::LAYOUT_PANE_BASE& ParentPane,
00110 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedWidth
00111 );
00112
00113 const DATASOURCEINFO& GetDataSource (
00114 ) const;
00115
00116 protected:
00117
00118 virtual bool v_DataSourceFilter (const MISTRING& Driver);
00119 virtual void v_OnDataSourceSelect (const DATASOURCEINFO& DataSource);
00120 virtual void v_OnNewSourceFile (const DATASOURCEINFO& DataSource);
00121
00122 ERRVALUE FillDataSourceList ();
00123
00124 private:
00125 #ifndef GENERATING_DOXYGEN_OUTPUT
00126 CTRL_GROUPBOX m_DataSourceBox;
00127 CTRL_LISTBOX m_DataSource;
00128 LAYOUT_PANE m_DSNButtons;
00129 CTRL_PUSHBUTTON m_CtrlPanel;
00130 CTRL_PUSHBUTTON m_NewFileBtn;
00131 MILIST<DATASOURCEINFO> m_DataSourceList;
00132 MILIST<DATASOURCEINFO>::ITERATOR m_CurDataSource;
00133
00134 void OnCtrlPanelPressed ();
00135 void OnDataSourceChange ();
00136 void OnNewSourceFile ();
00137
00138 FORM_ODBC_SOURCE (const FORM_ODBC_SOURCE&);
00139 FORM_ODBC_SOURCE& operator= (const FORM_ODBC_SOURCE&);
00140 #endif // GENERATING_DOXYGEN_OUTPUT
00141
00142 };
00143
00144
00146 class FORM_ODBC : public MGUI::FORM_COMPOSITE {
00147 public:
00148
00149 class CONNECTION_ITEM {
00150 public:
00151 CONNECTION_ITEM () : m_FileUsage(FORM_ODBC_SOURCE::DATASOURCEINFO::FILEUSAGE_DBMS) {}
00152
00155 const MISTRING& GetConnectString (
00156 ) const { return (m_ConnectString); }
00157
00160 FORM_ODBC_SOURCE::DATASOURCEINFO::FILEUSAGE GetFileUsage (
00161 ) const { return (m_FileUsage); }
00162
00165 const MISTRING& GetDataSourceName (
00166 ) const { return (m_DataSourceName); }
00167
00168 const MISTRINGLIST& GetTableNameList (
00169 ) const { return (m_SelTableNameList); }
00170
00171 const MISTRINGLIST& GetTableDescList (
00172 ) const { return (m_SelTableDescList); }
00173
00174 const MISTRINGLIST& GetTableSchemaList (
00175 ) const { return (m_SelTableSchemaList); }
00176
00177 bool IsTableSelected (
00178 ) const { return (!m_SelTableNameList.IsEmpty()); }
00179
00180 private:
00181 #ifndef GENERATING_DOXYGEN_OUTPUT
00182 MISTRING m_DataSourceName;
00183 MISTRING m_ConnectString;
00184 MISTRINGLIST m_SelTableNameList;
00185 MISTRINGLIST m_SelTableDescList;
00186 MISTRINGLIST m_SelTableSchemaList;
00187 FORM_ODBC_SOURCE::DATASOURCEINFO::FILEUSAGE m_FileUsage;
00188
00189 friend class FORM_ODBC;
00190 #endif // GENERATING_DOXYGEN_OUTPUT
00191 };
00192
00193
00195 FORM_ODBC (
00196 );
00197
00199 virtual ~FORM_ODBC (
00200 );
00201
00203 ERRVALUE Create (
00204 MGUI::LAYOUT_PANE_BASE& ParentPane,
00205 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00206 );
00207
00208 void DisplayMessage (
00209 const MISTRING& Message
00210 );
00211
00213 const MILIST<CONNECTION_ITEM>& GetConnectionList (
00214 ) const { return (m_SelectedList); }
00215
00216 protected:
00217
00218 virtual bool DataSourceFilter (const MISTRING& Driver);
00219 virtual ERRVALUE OnDataSourceSelected (const RVC::ODBCINTERFACE& ODBCInt);
00220 virtual void OnTableSelected ();
00221 virtual bool TableFilter (const RVC::ODBCINTERFACE& ODBCInt, const MISTRING& TableName, const MISTRING& SchemaName);
00222
00223 void RefreshTableList ();
00224
00225 private:
00226 #ifndef GENERATING_DOXYGEN_OUTPUT
00227 class ODBC_SOURCE : public FORM_ODBC_SOURCE {
00228 public:
00229 ODBC_SOURCE (
00230 FORM_ODBC& OdbcForm
00231 ) : FORM_ODBC_SOURCE(), m_OdbcForm(OdbcForm) {}
00232
00233 void FillDataSourceList (
00234 );
00235
00236 private:
00237 FORM_ODBC& m_OdbcForm;
00238
00239 virtual bool v_DataSourceFilter (const MISTRING& Driver);
00240 virtual void v_OnDataSourceSelect (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00241 virtual void v_OnNewSourceFile (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00242
00243 };
00244 friend class ODBC_SOURCE;
00245
00246 LAYOUT_PANE m_ListForm;
00247 RVC::ODBCINTERFACE* m_ODBCInterface;
00248 ODBC_SOURCE m_ODBCSource;
00249
00251 MILIST<CONNECTION_ITEM> m_SelectedList;
00252 MILIST<CONNECTION_ITEM>::ITERATOR m_CurSourceItem;
00253
00254 CTRL_GROUPBOX m_TableListBox;
00255 CTRL_LISTBOX m_TableList;
00256 MISTRINGLIST m_TableNameList;
00257 MISTRINGLIST m_TableDescList;
00258 MISTRINGLIST m_TableSchemaList;
00259
00260 LAYOUT_PANE m_AddRemoveForm;
00261 CTRL_PUSHBUTTON m_AddTable;
00262 CTRL_PUSHBUTTON m_RemoveTable;
00263
00264 CTRL_GROUPBOX m_SelectedTableBox;
00265 CTRL_LISTBOX m_SelectedTables;
00266 MISTRINGLIST m_SelConList;
00267 CTRL_TEXT m_DescText;
00268
00269 void OnAddTable ();
00270 void OnDataSourceChange (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00271 void OnNewSourceFile (const FORM_ODBC_SOURCE::DATASOURCEINFO& DataSource);
00272 void OnRemoveTable ();
00273 void OnSelectedTableChange ();
00274 void OnTableListChange ();
00275
00276 ERRVALUE EstablishNewConnection ();
00277
00278 FORM_ODBC (const FORM_ODBC&);
00279 FORM_ODBC& operator= (const FORM_ODBC&);
00280 #endif // GENERATING_DOXYGEN_OUTPUT
00281
00282 };
00283
00284
00285
00286
00287 class FORM_ODBC_ORACLE_SPATIAL : public MGUI::FORM_ODBC {
00288 public:
00290 FORM_ODBC_ORACLE_SPATIAL (
00291 );
00292
00294 ~FORM_ODBC_ORACLE_SPATIAL (
00295 );
00296
00297 private:
00298 #ifndef GENERATING_DOXYGEN_OUTPUT
00299 virtual ERRVALUE OnDataSourceSelected (const RVC::ODBCINTERFACE& ODBCInt);
00300 virtual bool DataSourceFilter (const MISTRING& dsn);
00301 virtual bool TableFilter (const RVC::ODBCINTERFACE& ODBCInt, const MISTRING& TableName, const MISTRING& SchemaName);
00302
00303 MISTRING m_TestName;
00304 MISTRINGLIST m_ValidSchemaList;
00305 MISTRINGLIST m_ValidTableList;
00306 #endif // GENERATING_DOXYGEN_OUTPUT
00307 };
00308
00309
00310 class FORM_ODBC_PRIMARY : public MGUI::FORM_COMPOSITE {
00311 public:
00313 FORM_ODBC_PRIMARY (
00314 );
00315
00317 ~FORM_ODBC_PRIMARY (
00318 );
00319
00321 bool CanRandomAccess (
00322 const MISTRING& TableName,
00323 const MISTRING& SchemaName
00324 ) const { return (m_PrimaryODBC.CanRandomAccess(TableName, SchemaName)); }
00325
00327 ERRVALUE Create (
00328 MGUI::LAYOUT_PANE_BASE& ParentPane,
00329 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00330 );
00331
00333 const MILIST<FORM_ODBC::CONNECTION_ITEM>& GetConnectionList (
00334 ) const { return (m_PrimaryODBC.GetConnectionList()); }
00335
00336 private:
00337 #ifndef GENERATING_DOXYGEN_OUTPUT
00338 class PRIMARY_ODBC : public FORM_ODBC {
00339 public:
00340 PRIMARY_ODBC () : FORM_ODBC(), m_PrimaryOnly(true) {}
00341 ~PRIMARY_ODBC () {}
00342
00343 bool CanRandomAccess (
00344 const MISTRING& TableName,
00345 const MISTRING& SchemaName
00346 ) const;
00347
00348 void SetPrimaryFlag (
00349 bool value
00350 );
00351
00352 private:
00353 MISTRINGLIST m_ValidSchemaList;
00354 MISTRINGLIST m_ValidTableList;
00355 bool m_PrimaryOnly;
00356
00357 virtual ERRVALUE OnDataSourceSelected (const RVC::ODBCINTERFACE& ODBCInt);
00358 virtual bool TableFilter (const RVC::ODBCINTERFACE& ODBCInt, const MISTRING& TableName, const MISTRING& SchemaName);
00359 };
00360
00361 PRIMARY_ODBC m_PrimaryODBC;
00362 CTRL_TOGGLEBUTTON m_PrimaryOnly;
00363
00364 void OnPrimaryOnly ();
00365
00366 #endif // GENERATING_DOXYGEN_OUTPUT
00367 };
00368
00369 }
00370
00371 #endif // INC_MGUI_FORMODBC_H