00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
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;
00062 }
00063
00064 namespace MGUI {
00065
00066
00067
00068 class FORM_ODBC_SOURCE : public MGUI::FORM_COMPOSITE {
00069 public:
00070
00071 class DATASOURCEINFO {
00072 public:
00073 enum FILEUSAGE {
00074 FILEUSAGE_DBMS = 0,
00075 FILEUSAGE_FILE,
00076 FILEUSAGE_CATALOG
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
00111 FORM_ODBC_SOURCE (
00112 );
00113
00114
00115 virtual ~FORM_ODBC_SOURCE (
00116 );
00117
00118
00119 ERRVALUE Create (
00120 MGUI::LAYOUT_PANE_BASE& ParentPane,
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
00152
00153 };
00154
00155
00156
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
00165
00166 const MISTRING& GetConnectString (
00167 ) const { return (m_ConnectString); }
00168
00169
00170
00171 FORM_ODBC_SOURCE::DATASOURCEINFO::FILEUSAGE GetFileUsage (
00172 ) const { return (m_FileUsage); }
00173
00174
00175
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
00206 FORM_ODBC (
00207 );
00208
00209
00210 virtual ~FORM_ODBC (
00211 );
00212
00213
00214 ERRVALUE Create (
00215 MGUI::LAYOUT_PANE_BASE& ParentPane,
00216 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00217 );
00218
00219 void DisplayMessage (
00220 const MISTRING& Message
00221 );
00222
00223
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
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
00298
00299
00300 template <class _CT> class FORM_ODBC_T : public MGUI::FORM_ODBC {
00301 public:
00302
00303
00304 explicit FORM_ODBC_T (
00305 ): m_pContainer(0), m_pfOnTableSelected(0) { }
00306
00307
00308 void Create (
00309 MGUI::LAYOUT_PANE_BASE& ParentPane,
00310 _CT *pContainer,
00311 void (_CT::*pfOnTableSelected)(),
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
00333 FORM_ODBC_ORACLE_SPATIAL (
00334 );
00335
00336
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
00356 FORM_ODBC_PRIMARY (
00357 );
00358
00359
00360 ~FORM_ODBC_PRIMARY (
00361 );
00362
00363
00364 bool CanRandomAccess (
00365 const MISTRING& TableName,
00366 const MISTRING& SchemaName
00367 ) const { return (m_PrimaryODBC.CanRandomAccess(TableName, SchemaName)); }
00368
00369
00370 ERRVALUE Create (
00371 MGUI::LAYOUT_PANE_BASE& ParentPane,
00372 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00373 );
00374
00375
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 }
00413
00414 #endif // INC_MGUI_FORMODBC_H