From: George Tasker Date: Fri, 28 Jan 2000 15:25:32 +0000 (+0000) Subject: First version of the DbBrowser demo program X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b5ffecfc985136771bb521074c0f46a07894e62e First version of the DbBrowser demo program git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5715 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/demos/dbbrowse/bitmaps/col.ico b/demos/dbbrowse/bitmaps/col.ico new file mode 100644 index 0000000000..954d8cd232 Binary files /dev/null and b/demos/dbbrowse/bitmaps/col.ico differ diff --git a/demos/dbbrowse/bitmaps/col.xpm b/demos/dbbrowse/bitmaps/col.xpm new file mode 100644 index 0000000000..81cc251bed --- /dev/null +++ b/demos/dbbrowse/bitmaps/col.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char* COL_xpm[] = { +"16 16 4 1", +" c #000000", +"! c #000080", +"# c #C0C0C0", +"$ c #808080", +"$$$$$$$ $$$$", +"$######!!!!!### ", +"$######!!!!!### ", +"$######!!!!!### ", +"$######!###!### ", +"$# #!$$$!# # ", +"$# ####! !### ", +"$# #! ! !# # ", +"$# ####! !### ", +"$# #! ! !# # ", +"$# ####! !### ", +"$# #! ! !# # ", +"$$$$$$#! !### ", +" #! !# ", +" #!!!!!# ", +" "}; diff --git a/demos/dbbrowse/bitmaps/d_closed.ico b/demos/dbbrowse/bitmaps/d_closed.ico new file mode 100644 index 0000000000..b7c633c27c Binary files /dev/null and b/demos/dbbrowse/bitmaps/d_closed.ico differ diff --git a/demos/dbbrowse/bitmaps/d_closed.xpm b/demos/dbbrowse/bitmaps/d_closed.xpm new file mode 100644 index 0000000000..a32bbd2138 --- /dev/null +++ b/demos/dbbrowse/bitmaps/d_closed.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * DocClosed_xpm[] = { +/* width height ncolors chars_per_pixel */ +"16 16 4 1", +/* colors */ +" s None c None", +". c #000000", +"& c #ff0000", +"+ c #ffffff", +/* pixels */ +" ", +"........ ", +".++++++.. ", +".+.+.++.+. ", +".++++++.... ", +".+.+.+++++.. ", +".+++++++++.&. ", +".+.+.+.+.+.&&. ", +".+++++++++.&&&. ", +".+.+.+.+.+.&&&. ", +".+++++++++.&&. ", +".+.+.+.+.+.&. ", +".+++++++++.. ", +"........... ", +" ", +" "}; diff --git a/demos/dbbrowse/bitmaps/d_open.ico b/demos/dbbrowse/bitmaps/d_open.ico new file mode 100644 index 0000000000..449ccd3c1d Binary files /dev/null and b/demos/dbbrowse/bitmaps/d_open.ico differ diff --git a/demos/dbbrowse/bitmaps/d_open.xpm b/demos/dbbrowse/bitmaps/d_open.xpm new file mode 100644 index 0000000000..72eb00fad7 --- /dev/null +++ b/demos/dbbrowse/bitmaps/d_open.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * DocOpen_xpm[] = { +/* width height ncolors chars_per_pixel */ +"16 16 4 1", +/* colors */ +" s None c None", +". c #000000", +"& c #00ff00", +"+ c #ffffff", +/* pixels */ +" ", +"........ ", +".++++++.. ", +".+.+.++.+. ", +".++++++.... ", +".+.+.+++++.. ", +".+++++++++.&. ", +".+.+.+.+.+.&&. ", +".+++++++++.&&&. ", +".+.+.+.+.+.&&&. ", +".+++++++++.&&. ", +".+.+.+.+.+.&. ", +".+++++++++.. ", +"........... ", +" ", +" "}; diff --git a/demos/dbbrowse/bitmaps/dsn.ico b/demos/dbbrowse/bitmaps/dsn.ico new file mode 100644 index 0000000000..4881d8a548 Binary files /dev/null and b/demos/dbbrowse/bitmaps/dsn.ico differ diff --git a/demos/dbbrowse/bitmaps/dsn.xpm b/demos/dbbrowse/bitmaps/dsn.xpm new file mode 100644 index 0000000000..4647696344 --- /dev/null +++ b/demos/dbbrowse/bitmaps/dsn.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char* DSN_xpm[] = { +"16 16 4 1", +" c #000000", +"! c #C0C0C0", +"# c #808080", +"$ c #FFFF00", +" # ####### ", +" ###!#!!!!## ", +" #!#!!!!!!!!# ", +"$## !!###!!!!# ", +" # #!!!!!!!!# ", +" #!#!#!!!### ", +" $#!#!### ## ", +" # $!!#### # ", +" # !### ## ", +" # !!!#### # ", +" # !### ## ", +" # !!!#### # ", +" # !### ## ", +" # !!!#### # ", +" ## !### ## ", +" ######## "}; diff --git a/demos/dbbrowse/bitmaps/dsnclose.ico b/demos/dbbrowse/bitmaps/dsnclose.ico new file mode 100644 index 0000000000..45dbb73119 Binary files /dev/null and b/demos/dbbrowse/bitmaps/dsnclose.ico differ diff --git a/demos/dbbrowse/bitmaps/dsnclose.xpm b/demos/dbbrowse/bitmaps/dsnclose.xpm new file mode 100644 index 0000000000..abc9cc8da5 --- /dev/null +++ b/demos/dbbrowse/bitmaps/dsnclose.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char* DsnClosed_xpm[] = { +"16 16 4 1", +" c #000000", +"! c #C0C0C0", +"# c #808080", +"$ c #FF0000", +" $ $##$### ", +" $#$!$!!!!## ", +" #!$!!!!!!!!# ", +"$$$ !!$$$!!!!# ", +" # $!!!!!!!!# ", +" $!$!$!!!### ", +" $!!$!#!$ ## ", +" # $!!#### # ", +" # !### ## ", +" # !!!#### # ", +" # !### ## ", +" # !!!#### # ", +" # !### ## ", +" # !!!#### # ", +" ## !### ## ", +" ######## "}; diff --git a/demos/dbbrowse/bitmaps/dsnopen.ico b/demos/dbbrowse/bitmaps/dsnopen.ico new file mode 100644 index 0000000000..989fdc8d63 Binary files /dev/null and b/demos/dbbrowse/bitmaps/dsnopen.ico differ diff --git a/demos/dbbrowse/bitmaps/dsnopen.xpm b/demos/dbbrowse/bitmaps/dsnopen.xpm new file mode 100644 index 0000000000..a492926806 --- /dev/null +++ b/demos/dbbrowse/bitmaps/dsnopen.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char* DsnOpen_xpm[] = { +"16 16 4 1", +" c #000000", +"! c #C0C0C0", +"# c #808080", +"$ c #00FF00", +" $ $##$### ", +" $#$!$!!!!## ", +" #!$!!!!!!!!# ", +"$$$ !!$$$!!!!# ", +" # $!!!!!!!!# ", +" $!$!$!!!### ", +" $!!$!#!$ ## ", +" # $!!#### # ", +" # !### ## ", +" # !!!#### # ", +" # !### ## ", +" # !!!#### # ", +" # !### ## ", +" # !!!#### # ", +" ## !### ## ", +" ######## "}; diff --git a/demos/dbbrowse/bitmaps/f_closed.ico b/demos/dbbrowse/bitmaps/f_closed.ico new file mode 100644 index 0000000000..387080ef43 Binary files /dev/null and b/demos/dbbrowse/bitmaps/f_closed.ico differ diff --git a/demos/dbbrowse/bitmaps/f_closed.xpm b/demos/dbbrowse/bitmaps/f_closed.xpm new file mode 100644 index 0000000000..1336999d73 --- /dev/null +++ b/demos/dbbrowse/bitmaps/f_closed.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static char * FolderClosed_xpm[] = { +/* width height ncolors chars_per_pixel */ +"16 16 6 1", +/* colors */ +" s None c None", +". c #000000", +"+ c #c0c0c0", +"@ c #808080", +"# c #ffff00", +"$ c #ffffff", +/* pixels */ +" ", +" @@@@@ ", +" @#+#+#@ ", +" @#+#+#+#@@@@@@ ", +" @$$$$$$$$$$$$@.", +" @$#+#+#+#+#+#@.", +" @$+#+#+#+#+#+@.", +" @$#+#+#+#+#+#@.", +" @$+#+#+#+#+#+@.", +" @$#+#+#+#+#+#@.", +" @$+#+#+#+#+#+@.", +" @$#+#+#+#+#+#@.", +" @@@@@@@@@@@@@@.", +" ..............", +" ", +" "}; diff --git a/demos/dbbrowse/bitmaps/f_open.ico b/demos/dbbrowse/bitmaps/f_open.ico new file mode 100644 index 0000000000..84c781f3b9 Binary files /dev/null and b/demos/dbbrowse/bitmaps/f_open.ico differ diff --git a/demos/dbbrowse/bitmaps/f_open.xpm b/demos/dbbrowse/bitmaps/f_open.xpm new file mode 100644 index 0000000000..08eac38121 --- /dev/null +++ b/demos/dbbrowse/bitmaps/f_open.xpm @@ -0,0 +1,28 @@ +/* XPM */ +static char * FolderOpen_xpm[] = { +/* width height ncolors chars_per_pixel */ +"16 16 6 1", +/* colors */ +" s None c None", +". c #000000", +"+ c #c0c0c0", +"@ c #808080", +"# c #ffff00", +"$ c #ffffff", +/* pixels */ +" ", +" @@@@@ ", +" @$$$$$@ ", +" @$#+#+#$@@@@@@ ", +" @$+#+#+$$$$$$@.", +" @$#+#+#+#+#+#@.", +"@@@@@@@@@@@@@#@.", +"@$$$$$$$$$$@@+@.", +"@$#+#+#+#+##.@@.", +" @$#+#+#+#+#+.@.", +" @$+#+#+#+#+#.@.", +" @$+#+#+#+##@..", +" @@@@@@@@@@@@@.", +" .............", +" ", +" "}; diff --git a/demos/dbbrowse/bitmaps/key.ico b/demos/dbbrowse/bitmaps/key.ico new file mode 100644 index 0000000000..31a188fa36 Binary files /dev/null and b/demos/dbbrowse/bitmaps/key.ico differ diff --git a/demos/dbbrowse/bitmaps/key.xpm b/demos/dbbrowse/bitmaps/key.xpm new file mode 100644 index 0000000000..12f98d57ee --- /dev/null +++ b/demos/dbbrowse/bitmaps/key.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char* XpmKEY_xpm[] = { +"16 16 7 1", +" c #000000", +"! c #008000", +"# c #808000", +"$ c #000080", +"% c #C0C0C0", +"& c #808080", +"' c #FFFF00", +" && ", +" ## #&% ", +" #'& $'#& ", +"#''& $'#% ", +"#''& %'#& ", +" #'''''%#% ", +" ##%%%'#% ", +" #%'# ", +" #'#& !!!!! ", +" %#'## !!!!! ", +" ###& !! !! ", +" #'## !!!!! ", +" ###& !!!! ", +" #'#& !! ", +" #%#& !!!! ", +" &% "}; \ No newline at end of file diff --git a/demos/dbbrowse/bitmaps/keyf.ico b/demos/dbbrowse/bitmaps/keyf.ico new file mode 100644 index 0000000000..0b68df426e Binary files /dev/null and b/demos/dbbrowse/bitmaps/keyf.ico differ diff --git a/demos/dbbrowse/bitmaps/keyf.xpm b/demos/dbbrowse/bitmaps/keyf.xpm new file mode 100644 index 0000000000..6165e25e1d --- /dev/null +++ b/demos/dbbrowse/bitmaps/keyf.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char* XpmKEYF_xpm[] = { +"16 16 7 1", +" c #000000", +"! c #808000", +"# c #000080", +"$ c #C0C0C0", +"% c #808080", +"& c #FFFF00", +"' c #0000FF", +" %% ", +" !! !%$ ", +" !&% #&!% ", +"!&&% #&!$ ", +"!&&% $&!% ", +" !&&&&&$!$ ", +" !!$$$&!$ ", +" !$&!$ ", +" !&!% '''''' ", +" $!&!! '' ' ", +" !!!% '' ", +" !&!! ''' ", +" !!!% '' ", +" !&!% '' ", +" !$!% '''' ", +" %$ "}; \ No newline at end of file diff --git a/demos/dbbrowse/bitmaps/logo.ico b/demos/dbbrowse/bitmaps/logo.ico new file mode 100644 index 0000000000..a7f64e2a63 Binary files /dev/null and b/demos/dbbrowse/bitmaps/logo.ico differ diff --git a/demos/dbbrowse/bitmaps/logo.xpm b/demos/dbbrowse/bitmaps/logo.xpm new file mode 100644 index 0000000000..c7aaa6599c --- /dev/null +++ b/demos/dbbrowse/bitmaps/logo.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char* Logo_xpm[] = { +"16 16 4 1", +" c #000000", +"! c #C0C0C0", +"# c #808080", +"$ c #FF0000", +" ###### ", +" ##!!! ## ", +" #!!! !!! # ", +" #!!! ! !! # ", +" #!! ! !!!! ", +" #!! ! !!!!! ", +" #!! !!!!! ", +" # !! # ", +" # !! ### $ ", +" #!!!!# !$$ ", +" # !!### ##!$$ ", +" #!!!!#### #!$$ ", +" # !!### ## #!$$", +" #!!!!#### # #$#", +" ##!!### ## # ", +" ######## "}; diff --git a/demos/dbbrowse/bitmaps/pgmctrl.bmp b/demos/dbbrowse/bitmaps/pgmctrl.bmp new file mode 100644 index 0000000000..2acad38f7b Binary files /dev/null and b/demos/dbbrowse/bitmaps/pgmctrl.bmp differ diff --git a/demos/dbbrowse/bitmaps/pgmctrl.ico b/demos/dbbrowse/bitmaps/pgmctrl.ico new file mode 100644 index 0000000000..2d650d58c9 Binary files /dev/null and b/demos/dbbrowse/bitmaps/pgmctrl.ico differ diff --git a/demos/dbbrowse/bitmaps/pgmctrl.xpm b/demos/dbbrowse/bitmaps/pgmctrl.xpm new file mode 100644 index 0000000000..5edc5b47d3 --- /dev/null +++ b/demos/dbbrowse/bitmaps/pgmctrl.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static char * PgmCtrl_xpm[] = { +/* width height ncolors chars_per_pixel */ +"16 16 5 1", +/* colors */ +" s None c None", +". c #000000", +"+ c #ff0000", +"@ c #0000ff", +"# c #ffffff", +/* pixels */ +" ", +" ", +" ########## ", +" #........# ", +" #........# ", +" #........# ", +" #..########### ", +" #..#+++++++++# ", +" ####++#####++# ", +" #+#@@@@@#+# ", +" #+#@@@@@#+# ", +" #+#@@@@@#+# ", +" #++#####++# ", +" #+++++++++# ", +" ########### ", +" "}; diff --git a/demos/dbbrowse/bitmaps/tab.ico b/demos/dbbrowse/bitmaps/tab.ico new file mode 100644 index 0000000000..a6f34b2d09 Binary files /dev/null and b/demos/dbbrowse/bitmaps/tab.ico differ diff --git a/demos/dbbrowse/bitmaps/tab.xpm b/demos/dbbrowse/bitmaps/tab.xpm new file mode 100644 index 0000000000..198540a86d --- /dev/null +++ b/demos/dbbrowse/bitmaps/tab.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char* TAB[] = { +"16 16 7 1", +" c #000000", +"! c #800080", +"# c #008080", +"$ c #C0C0C0", +"% c #808080", +"& c #0000FF", +"' c #00FFFF", +" ", +" ", +"!!!!!!!!!!!!!!!!", +"!&&&&&&&&&&&&&&!", +"!!!!!!!!!!!!!!!!", +"!'$'#$'$$$#$$$$!", +"!$'$#'$$$$#$$$$!", +"!##############!", +"!$'$#$$$$$#$$%$!", +"!'$$#$$$$$#$%$%!", +"!##############!", +"!$$$#$$%$$#%%%%!", +"!$$%#$%$%%#%%%%!", +"!!!!!!!!!!!!!!!!", +" ", +" "}; diff --git a/demos/dbbrowse/browsedb.cpp b/demos/dbbrowse/browsedb.cpp new file mode 100644 index 0000000000..3ee7463cfc --- /dev/null +++ b/demos/dbbrowse/browsedb.cpp @@ -0,0 +1,549 @@ +//--------------------------------------------------------------------------- +// Name: BrowserDB.h,cpp +// Purpose: a wxDB; +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: +// Created: 19991127.mj10777 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +//-- 1) +//--------------------------------------------------------------------------- +//-- all #ifdefs that the whole Project needs. ------------------------------ +//--------------------------------------------------------------------------- +#ifdef __GNUG__ + #pragma implementation + #pragma interface +#endif +//--------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +//--------------------------------------------------------------------------- +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +//--------------------------------------------------------------------------- +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif +//--------------------------------------------------------------------------- +#include +#include "std.h" +//--------------------------------------------------------------------------- +// Global structure for holding ODBC connection information +// - darf nur einmal im Projekte definiert werden ?? Extra Databasse Klasse ? +struct DbStuff ConnectInf; // Für DBase +//--------------------------------------------------------------------------- +extern DbList* WXDLLEXPORT PtrBegDbList; /* from db.cpp, used in getting back error results from db connections */ +//--------------------------------------------------------------------------- +char *GetExtendedDBErrorMsg(char *ErrFile, int ErrLine) +{ + static wxString msg; + wxString tStr; + if (ErrFile || ErrLine) + { + msg += "File: "; + msg += ErrFile; + msg += " Line: "; + tStr.Printf("%d",ErrLine); + msg += tStr.GetData(); + // msg += "\n"; + } + msg.Append ("\nODBC errors:\n"); + // msg += "\n"; + /* Scan through each database connection displaying + * any ODBC errors that have occured. */ + for (DbList *pDbList = PtrBegDbList; pDbList; pDbList = pDbList->PtrNext) + { + // Skip over any free connections + if (pDbList->Free) + continue; + // Display errors for this connection + for (int i = 0; i < DB_MAX_ERROR_HISTORY; i++) + { + if (pDbList->PtrDb->errorList[i]) + { + msg.Append(pDbList->PtrDb->errorList[i]); + if (strcmp(pDbList->PtrDb->errorList[i],"") != 0) + msg.Append("\n"); + } + } + } + msg += "\n"; + return (char*) (const char*) msg; +} // GetExtendedDBErrorMsg +////////////////////////////////////////////////////////////////////////////////// +// BJO 20000115 : New stuff : dialog to ask for username and password +////////////////////////////////////////////////////////////////////////////////// +class UserDialog : public wxDialog +{ + public: + UserDialog(wxWindow* parent); + virtual ~UserDialog(); + void OnOK(wxCommandEvent& event); + wxString s_UserName, s_Password; + + private: + wxButton *m_OK; + wxStaticText *m_Label1, *m_Label2; + wxTextCtrl *m_UserName, *m_Password; + + + DECLARE_EVENT_TABLE() +}; +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(UserDialog, wxDialog) + EVT_BUTTON(wxID_OK, UserDialog::OnOK) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +UserDialog::UserDialog(wxWindow *parent): + wxDialog(parent, -1, _("ODBC user"),wxDefaultPosition, wxSize(310, 300),wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE) +{ + wxLayoutConstraints* layout; + SetAutoLayout(TRUE); + //----------------------------------------------- + m_OK = new wxButton(this, wxID_OK, _("Ok")); + layout = new wxLayoutConstraints; + layout->left.SameAs(this, wxLeft, 10); + layout->top.SameAs(this, wxTop,10); + layout->height.AsIs(); + layout->width.Absolute(75); + m_OK->SetConstraints(layout); + + m_Label1 = new wxStaticText(this, -1, _("User name:")); + layout = new wxLayoutConstraints; + layout->left.SameAs(m_OK, wxLeft); + layout->top.SameAs(m_OK, wxBottom, 10); + layout->height.AsIs(); + layout->width.AsIs(); + m_Label1->SetConstraints(layout); + + m_UserName = new wxTextCtrl(this, -1, ""); + layout = new wxLayoutConstraints; + layout->left.SameAs(m_OK, wxLeft); + layout->top.SameAs(m_Label1, wxBottom, 3); + layout->width.AsIs(); + layout->height.AsIs(); + m_UserName->SetConstraints(layout); + + m_Label2 = new wxStaticText(this, -1, _("Password:")); + layout = new wxLayoutConstraints; + layout->left.SameAs(m_OK, wxLeft); + layout->top.SameAs(m_UserName, wxBottom, 10); + layout->height.AsIs(); + layout->width.AsIs(); + m_Label2->SetConstraints(layout); + + m_Password = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD); + layout = new wxLayoutConstraints; + layout->left.SameAs(m_OK, wxLeft); + layout->width.AsIs(); + layout->top.SameAs(m_Label2, wxBottom, 3); + layout->height.AsIs(); + m_Password->SetConstraints(layout); + + s_UserName = ""; + s_Password = ""; + + Layout(); +} +//--------------------------------------------------------------------------- +UserDialog::~UserDialog() +{ +} +//--------------------------------------------------------------------------- +void UserDialog::OnOK(wxCommandEvent& WXUNUSED(event)) +{ + strcpy(ConnectInf.Uid, m_UserName->GetValue()); + strcpy(ConnectInf.AuthStr, m_Password->GetValue()); + EndModal(1); +} +////////////////////////////////////////////////////////////////////////////////// +// BJO 20000115 : end of new stuff +////////////////////////////////////////////////////////////////////////////////// +//--------------------------------------------------------------------------- +BrowserDB::BrowserDB() +{ + Zeiger_auf_NULL(0); + ODBCSource = ""; // ODBC data source name (created with ODBC Administrator under Win95/NT) + UserName = ""; // database username - must already exist in the data source + Password = ""; // password database username + OnFillSqlTyp(); + OnFilldbTyp(); +} // BrowserDB Constructor +//--------------------------------------------------------------------------- +BrowserDB::~BrowserDB() +{ + Zeiger_auf_NULL(1); // Clean up Tables and Databases (Commit, Close und delete) +} // BrowserDB destructor +//-------------------------------------------------------------------------------------------- +bool BrowserDB::Initialize(int Quite) +{ + if (!OnStartDB(Quite)) + { + wxLogMessage(_("\n\n-E-> BrowserDB::OnStartDB(%s) : Failed ! "),ODBCSource.c_str()); + return FALSE; + } + return TRUE; +} // BrowserDB:Initialize +//-------------------------------------------------------------------------------------------- +bool BrowserDB::OnStartDB(int Quite) +{ + if (!Quite) + wxLogMessage(_("\n-I-> BrowserDB::OnStartDB(%s) : Begin "),ODBCSource.c_str()); + if (db_BrowserDB != NULL) + { + if (!Quite) + wxLogMessage(_("\n-I-> BrowserDB::OnStartDB() : DB is allready open.")); + return TRUE; + } + // Initialize the ODBC Environment for Database Operations + if (SQLAllocEnv(&ConnectInf.Henv) != SQL_SUCCESS) + { + if (!Quite) + wxLogMessage(_("\n-E-> BrowserDB::OnStartDB() : DB CONNECTION ERROR : A problem occured while trying to get a connection to the data source")); + return FALSE; + } + //--------------------------------------------------------------------------- + // Connect to datasource + //--------------------------- + DlgUser p_Dlg(pDoc->p_MainFrame, "Username and Password", wxPoint(100, 100), wxSize(340, 170)); + p_Dlg.s_DSN = ODBCSource; + p_Dlg.s_User = UserName; + p_Dlg.s_Password = Password; + p_Dlg.OnInit(); + if (p_Dlg.ShowModal() == wxID_OK) + { + (pDoc->p_DSN+i_Which)->Usr = p_Dlg.s_User; + (pDoc->p_DSN+i_Which)->Pas = p_Dlg.s_Password; + UserName = p_Dlg.s_User; + Password = p_Dlg.s_Password; + } + p_Dlg.Destroy(); + //--------------------------- + strcpy(ConnectInf.Dsn, ODBCSource); // ODBC data source name (created with ODBC Administrator under Win95/NT) + strcpy(ConnectInf.Uid, UserName); // database username - must already exist in the data source + strcpy(ConnectInf.AuthStr, Password); // password database username + db_BrowserDB = GetDbConnection(&ConnectInf); + // wxLogMessage(">>>%s<<<>>>%s<<<",UserName.c_str(),Password.c_str()); + if (db_BrowserDB == NULL) + { + strcpy(ConnectInf.Dsn, ""); + strcpy(ConnectInf.Uid, ""); + strcpy(ConnectInf.AuthStr, ""); + if (!Quite) + { + wxLogMessage(_("\n-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n\nCheck the name of your data source to verify it has been correctly entered/spelled.\n\nWith some databases, the user name and password must\nbe created with full rights to the table prior to making a connection\n(using tools provided by the database manufacturer)")); + wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End "),ODBCSource.c_str()); + } + return FALSE; + } + //-------------------------------------------------------------------------- + if (!Quite) + { + Temp1 = db_BrowserDB->GetDatabaseName(); + Temp2 = db_BrowserDB->GetDataSource(); + wxLogMessage(_("-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)"),Temp1.c_str(),Temp2.c_str()); + wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End "),ODBCSource.c_str()); + } + return TRUE; +} +//-------------------------------------------------------------------------------------------- +bool BrowserDB::OnCloseDB(int Quite) +{ + if (!Quite) + wxLogMessage(_("-I-> BrowserDB::OnCloseDB() : Begin ")); + if (db_BrowserDB) + { + db_BrowserDB->Close(); + FreeDbConnection(db_BrowserDB); + + // Free Environment Handle that ODBC uses + if (SQLFreeEnv(&ConnectInf.Henv) != SQL_SUCCESS) + { + // Error freeing environment handle + } + db_BrowserDB = NULL; + } + if (!Quite) + wxLogMessage(_("\n-I-> BrowserDB::OnCloseDB() : End ")); + return TRUE; +} +//---------------------------------------------------------------------------------------- +bool BrowserDB::OnGetNext(int Cols,int Quite) +{ + SDWORD cb; + int i_dbDataType; + int i=0; + char s_temp[1024+1]; + long l_temp; + double f_temp; + int AnzError=0; + TIMESTAMP_STRUCT t_temp; + wxString Temp0; + //----------------------------- + if (!db_BrowserDB->GetNext()) + { + return FALSE; + Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext \n-E-> ")); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + wxLogMessage(Temp0); + wxMessageBox(Temp0); + } + else + { + for (i=0;itableName,"-E->"); + i_dbDataType = (cl_BrowserDB->pColFor+i)->i_dbDataType; + if (i_dbDataType == 0) // Filter unsupported dbDataTypes + { + if (((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_VARCHAR) || ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_LONGVARCHAR)) + i_dbDataType = DB_DATA_TYPE_VARCHAR; + if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DATE) + i_dbDataType = DB_DATA_TYPE_DATE; + if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_BIT) + i_dbDataType = DB_DATA_TYPE_INTEGER; + if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_NUMERIC) + i_dbDataType = DB_DATA_TYPE_VARCHAR; + if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_REAL) + i_dbDataType = DB_DATA_TYPE_FLOAT; + } + if ((i_dbDataType == DB_DATA_TYPE_INTEGER) && ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DOUBLE)) + { // DBASE Numeric + i_dbDataType = DB_DATA_TYPE_FLOAT; + } + switch(i_dbDataType) + { + case DB_DATA_TYPE_VARCHAR: + strcpy(s_temp,""); + if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_dbDataType,&s_temp,sizeof(s_temp), &cb)) + { + Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext of >%s<.\n-E-> "),(cl_BrowserDB+i)->tableName); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + wxLogMessage(Temp0); + } + Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,s_temp); + strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); + break; + case DB_DATA_TYPE_INTEGER: + l_temp = 0; + if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&l_temp,sizeof(l_temp), &cb)) + { + Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + } + else + { + Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,l_temp); + strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); + } + break; + case DB_DATA_TYPE_FLOAT: + f_temp = 0; + if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&f_temp,sizeof(f_temp), &cb)) + { + Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + wxMessageBox(Temp0); + } + else + { + Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,f_temp); + strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); + } + break; + case DB_DATA_TYPE_DATE: + t_temp.day = t_temp.month = t_temp.year = t_temp.hour = t_temp.minute = t_temp.second = t_temp.fraction = 0; + if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&t_temp,sizeof(t_temp), &cb)) + { + Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + } + else + { + // i_Nation = 0 = timestamp , 1=EU, 2=UK, 3=International, 4=US + if (((cl_BrowserDB->pColFor+i)->i_Nation == 0) || // TS YYYY-MM-DD + ((cl_BrowserDB->pColFor+i)->i_Nation == 3)) // IT YYYY-MM-DD + { + Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.year,t_temp.month,t_temp.day, + t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); + strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); + } + if ( ((cl_BrowserDB->pColFor+i)->i_Nation == 1) || // EU DD.MM.YYYY + ((cl_BrowserDB->pColFor+i)->i_Nation == 2)) // UK DD/MM/YYYY + { + Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.day,t_temp.month,t_temp.year, + t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); + strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); + } + if ((cl_BrowserDB->pColFor+i)->i_Nation == 3) // US MM/DD/YYYY + { + Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.month,t_temp.day,t_temp.year, + t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); + strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); + } + } + break; + default: + AnzError++; + if (AnzError <= 100) + { + Temp0 = (cl_BrowserDB+i)->colName; + wxLogMessage(_("-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Col(%s)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,Temp0.c_str()); + } + else + return TRUE; + Temp0.Printf(_("-E-> unknown Format(%d) - sql(%d)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,(cl_BrowserDB->pColFor+i)->i_sqlDataType); + strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); + break; + }; + } + } + // wxLogMessage("-E-> BrowserDB::OnGetNext - End"); + return TRUE; +} +//---------------------------------------------------------------------------------------- +bool BrowserDB::OnSelect(wxString tb_Name, int Quite) +{ + wxString SQLStmt; + i_Records = 0; + //-------------------------------------------------------------------------- + SQLStmt.sprintf("SELECT * FROM %s",tb_Name.c_str()); + if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData()))) + { + Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str()); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + wxLogMessage(Temp0); + wxMessageBox("-E-> BrowserDB::OnSelect - GetData()"); + return FALSE; + } + //-------------------------------------------------------------------------- + while (db_BrowserDB->GetNext()) + { + i_Records++; + } + //-------------------------------------------------------------------------- + if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData()))) + { + Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str()); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + wxLogMessage(Temp0); + return FALSE; + } + //-------------------------------------------------------------------------- + // SetColDefs ( 0,"NAME", DB_DATA_TYPE_VARCHAR, Name, SQL_C_CHAR, sizeof(Name), TRUE, TRUE); // Primary index + //-------------------------------------------------------------------------- + if (!Quite) + { + wxLogMessage(_("\n-I-> BrowserDB::OnSelect(%s) Records(%d): End "),tb_Name.c_str(),i_Records); + } + return TRUE; +} +//---------------------------------------------------------------------------------------- +bool BrowserDB::OnExecSql(wxString SQLStmt, int Quite) +{ + //-------------------------------------------------------------------------- + if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData()))) + { + Temp0.Printf(_("\n-E-> BrowserDB::OnExecSQL - ODBC-Error with ExecSql of >%s<.\n-E-> "),SQLStmt.c_str()); + Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); + if (!Quite) + wxLogMessage(Temp0); + else + wxMessageBox("-E-> BrowserDB::OnExecSql - ExecSql()"); + return FALSE; + } + if (!Quite) + { + // wxLogMessage(_("\n-I-> BrowserDB::OnExecSql(%s) - End "),SQLStmt.c_str()); + } + return TRUE; +} +//---------------------------------------------------------------------------------------- +wxDbInf* BrowserDB::OnGetCatalog(int Quite) +{ + char UName[255]; + strcpy(UName,UserName); + ct_BrowserDB = db_BrowserDB->GetCatalog(UName); + return ct_BrowserDB; +} +//---------------------------------------------------------------------------------------- +wxColInf* BrowserDB::OnGetColumns(char *tableName, int numCols,int Quite) +{ + char UName[255]; + int i; + strcpy(UName,UserName); + cl_BrowserDB = db_BrowserDB->GetColumns(tableName,&numCols,UName); + cl_BrowserDB->pColFor = new wxColFor[numCols]; + for (i=0;ipColFor+i)->Format(1,(cl_BrowserDB+i)->dbDataType,(cl_BrowserDB+i)->sqlDataType, + (cl_BrowserDB+i)->columnSize, (cl_BrowserDB+i)->decimalDigits); + } + return cl_BrowserDB; +} +//---------------------------------------------------------------------------------------- +void BrowserDB::Zeiger_auf_NULL(int Art) +{ + if (Art == 1) // Löschen + { + if (cl_BrowserDB != NULL) + { // Destroy the memory + delete [] cl_BrowserDB; + } + if (ct_BrowserDB != NULL) + { // Destroy the memory + delete [] ct_BrowserDB; + } + if (db_BrowserDB != NULL) + { + db_BrowserDB->CommitTrans(); + db_BrowserDB->Close(); + CloseDbConnections(); + delete db_BrowserDB; + } + } + cl_BrowserDB = NULL; + ct_BrowserDB = NULL; + db_BrowserDB = NULL; + p_LogWindow = NULL; +} +//---------------------------------------------------------------------------------------- +void BrowserDB::OnFillSqlTyp() +{ + i_SqlTyp[1] = SQL_C_BINARY; s_SqlTyp[1] = "SQL_C_BINARY"; + i_SqlTyp[2] = SQL_C_BIT; s_SqlTyp[2] = "SQL_C_BIT"; + i_SqlTyp[3] = SQL_C_BOOKMARK; s_SqlTyp[3] = "SQL_C_BOOKMARK"; + i_SqlTyp[4] = SQL_C_CHAR; s_SqlTyp[4] = "SQL_C_CHAR"; + i_SqlTyp[5] = SQL_C_DATE; s_SqlTyp[5] = "SQL_C_DATE"; + i_SqlTyp[6] = SQL_C_DEFAULT; s_SqlTyp[6] = "SQL_C_DEFAULT"; + i_SqlTyp[7] = SQL_C_DOUBLE; s_SqlTyp[7] = "SQL_C_DOUBLE"; + i_SqlTyp[8] = SQL_C_FLOAT; s_SqlTyp[8] = "SQL_C_FLOAT"; + i_SqlTyp[9] = SQL_C_LONG; s_SqlTyp[9] = "SQL_C_LONG"; + i_SqlTyp[10] = SQL_C_SHORT; s_SqlTyp[10] = "SQL_C_SHORT"; + i_SqlTyp[11] = SQL_C_SLONG; s_SqlTyp[11] = "SQL_C_SLONG"; + i_SqlTyp[12] = SQL_C_SSHORT; s_SqlTyp[12] = "SQL_C_SSHORT"; + i_SqlTyp[13] = SQL_C_STINYINT; s_SqlTyp[13] = "SQL_C_STINYINT"; + i_SqlTyp[14] = SQL_C_TIME; s_SqlTyp[14] = "SQL_C_TIME"; + i_SqlTyp[15] = SQL_C_TIMESTAMP; s_SqlTyp[15] = "SQL_C_TIMESTAMP"; + i_SqlTyp[16] = SQL_C_TINYINT; s_SqlTyp[16] = "SQL_C_TINYINT"; + i_SqlTyp[17] = SQL_C_ULONG; s_SqlTyp[17] = "SQL_C_ULONG"; + i_SqlTyp[18] = SQL_C_USHORT; s_SqlTyp[18] = "SQL_C_USHORT"; + i_SqlTyp[19] = SQL_C_UTINYINT; s_SqlTyp[19] = "SQL_C_UTINYINT"; + i_SqlTyp[20] = SQL_VARCHAR; s_SqlTyp[20] = "SQL_VARCHAR"; + i_SqlTyp[21] = SQL_NUMERIC; s_SqlTyp[21] = "SQL_NUMERIC"; + i_SqlTyp[22] = SQL_LONGVARCHAR; s_SqlTyp[22] = "SQL_LONGVARCHAR"; + i_SqlTyp[23] = SQL_REAL; s_SqlTyp[23] = "SQL_REAL"; + i_SqlTyp[0] = 23; s_SqlTyp[0] = ""; +} +//---------------------------------------------------------------------------------------- +void BrowserDB::OnFilldbTyp() +{ + i_dbTyp[1] = DB_DATA_TYPE_VARCHAR; s_dbTyp[1] = "DB_DATA_TYPE_VARCHAR"; + i_dbTyp[2] = DB_DATA_TYPE_INTEGER; s_dbTyp[2] = "DB_DATA_TYPE_INTEGER"; + i_dbTyp[3] = DB_DATA_TYPE_FLOAT; s_dbTyp[3] = "DB_DATA_TYPE_FLOAT"; + i_dbTyp[4] = DB_DATA_TYPE_DATE; s_dbTyp[4] = "DB_DATA_TYPE_DATE"; + i_dbTyp[0] = 4; s_dbTyp[0] = ""; +} +//---------------------------------------------------------------------------------------- diff --git a/demos/dbbrowse/browsedb.h b/demos/dbbrowse/browsedb.h new file mode 100644 index 0000000000..dd273a8d6b --- /dev/null +++ b/demos/dbbrowse/browsedb.h @@ -0,0 +1,76 @@ +//--------------------------------------------------------------------------- +// Name: browsedb.h +// Purpose: a wxDB ; +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: +// Created: 19991127.mj10777 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +//-- Zu tun in browsedb.h +//--------------------------------------------------------------------------- +//-- 1) +//--------------------------------------------------------------------------- +// Global structure for holding ODBC connection information +//--------------------------------------------------------------------------- +extern struct DbStuff DbConnectInf; +class mjDoc; +//--------------------------------------------------------------------------- +class BrowserDB +{ + public: + //--------------------------------------------------------------------------- + // Pointer to the main database connection used in the program. This + // pointer would normally be used for doing things as database lookups + // for user login names and passwords, getting workstation settings, etc. + // ---> IMPORTANT <--- + // + // For each database object created which uses this wxDB pointer + // connection to the database, when a CommitTrans() or RollBackTrans() + // will commit or rollback EVERY object which uses this wxDB pointer. + // + // To allow each table object (those derived from wxTable) to be + // individually committed or rolled back, you MUST use a different + // instance of wxDB in the constructor of the table. Doing so creates + // more overhead, and will use more database connections (some DBs have + // connection limits...), so use connections sparringly. + // + // It is recommended that one "main" database connection be created for + // the entire program to use for READ-ONLY database accesses, but for each + // table object which will do a CommitTrans() or RollbackTrans() that a + // new wxDB object be created and used for it. + //--------------------------------------------------------------------------- + wxDB* db_BrowserDB; + wxDbInf* ct_BrowserDB; + wxColInf* cl_BrowserDB; + wxString ODBCSource, UserName, Password; + mjDoc *pDoc; + //--------------------------------------------------------------------------- + wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; + wxString ODBCText; + wxTextCtrl* p_LogWindow; + wxString s_SqlTyp[25]; + int i_SqlTyp[25]; + wxString s_dbTyp[5]; + int i_dbTyp[5]; + int i_Which; + int i_Records; + int i_Cols; + //--------------------------------------------------------------------------- + BrowserDB(); + ~BrowserDB(); + void Zeiger_auf_NULL(int Art); + bool Initialize(int Quite); + //--------------------------------------------------------------------------- + bool OnStartDB(int Quite); + bool OnCloseDB(int Quite); + bool OnSelect(wxString tb_Name,int Quite); + bool OnExecSql(wxString SQLStmt,int Quite); + bool OnGetNext(int Cols,int Quite); + wxDbInf* OnGetCatalog(int Quite); + wxColInf* OnGetColumns(char *tableName, int numCols,int Quite); + void OnFillSqlTyp(); + void OnFilldbTyp(); + //--------------------------------------------------------------------------- +}; // BrowserDB class definition +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/dbbrowse.cpp b/demos/dbbrowse/dbbrowse.cpp new file mode 100644 index 0000000000..a903ac029f --- /dev/null +++ b/demos/dbbrowse/dbbrowse.cpp @@ -0,0 +1,351 @@ +//------------------------------------------------------------------------------ +// Name: dbbrowse.cpp +// Purpose: Through ODBC - Databases Browsen +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: +// BJO : Bart A.M. JOURQUIN +// Created: 19991127 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//------------------------------------------------------------------------------ +//-- all #ifdefs that the whole Project needs. ------------------------------ +//--------------------------------------------------------------------------- +#ifdef __GNUG__ + #pragma implementation + #pragma interface +#endif +//--------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +//--------------------------------------------------------------------------- +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +//--------------------------------------------------------------------------- +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif +//--------------------------------------------------------------------------- +#ifndef __WXMSW__ +#endif + #include "bitmaps/logo.xpm" +//--------------------------------------------------------------------------- +//-- all #includes that every .cpp needs --- 19990807.mj10777 --- +//--------------------------------------------------------------------------- +#include "std.h" // sorgsam Pflegen ! +#include +//--------------------------------------------------------------------------- +//-- Some Global Vars for this file ---------------------------------------- +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +MainFrame *frame = NULL; // The one and only MainFrame +// wxLogNull logNo; // No Log messages +//--------------------------------------------------------------------------- +// verify that the item is ok and insult the user if it is not +#define CHECK_ITEM(item) \ + if (!item.IsOk()) \ + { \ + wxMessageBox(_("Please select some item first!"),_("Tree sample error"), \ + wxOK | wxICON_EXCLAMATION,this); \ + return; \ + } \ +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(MainFrame, wxFrame) + EVT_MENU(QUIT, MainFrame::OnQuit) + EVT_MENU(ABOUT, MainFrame::OnAbout) + EVT_MENU(HELP, MainFrame::OnHelp) + EVT_SIZE(MainFrame::OnSize) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +IMPLEMENT_APP(MyApp) +//--------------------------------------------------------------------------- +// `Main program' equivalent, creating windows and returning main app frame +//--------------------------------------------------------------------------- +bool MyApp::OnInit(void) +{ + //--------------------------------------------------------------------------------------- + // set the language to use + const char *langhelp = NULL; + const char *language = NULL; + const char *langid = NULL; + //--------------------------------------------------------------------------------------- +#if wxUSE_LIBPNG + wxImage::AddHandler( new wxPNGHandler ); // use only when needed, otherwise big .exe's +#endif +/* +#if wxUSE_LIBJPEG + wxImage::AddHandler(new wxJPEGHandler ); // use only when needed, otherwise big .exe's +#endif + wxImage::AddHandler( new wxGIFHandler ); // use only when needed, otherwise big .exe's + wxImage::AddHandler( new wxPCXHandler ); // use only when needed, otherwise big .exe's + wxImage::AddHandler( new wxPNMHandler ); // use only when needed, otherwise big .exe's +*/ +#ifdef __WXMSW__ + // wxBitmap::AddHandler( new wxXPMFileHandler ); // use only when needed, otherwise big .exe's + // wxBitmap::AddHandler( new wxXPMDataHandler ); // use only when needed, otherwise big .exe's +#endif + //--------------------------------------------------------------------------------------- + langid = "std"; // BJO20000125 instead of "" + switch ( argc ) + { + default: + // ignore the other args, fall through + case 3: + language = argv[2]; + langid = argv[1]; + break; + case 2: + langid = argv[1]; + break; + case 1: + break; + }; + //--------------------------------------------------------------------------------------- + // we're using wxConfig's "create-on-demand" feature: it will create the + // config object when it's used for the first time. It has a number of + // advantages compared with explicitly creating our wxConfig: + // 1) we don't pay for it if we don't use it + // 2) there is no danger to create it twice + + // application and vendor name are used by wxConfig to construct the name + // of the config file/registry key and must be set before the first call + // to Get() if you want to override the default values (the application + // name is the name of the executable and the vendor name is the same) + //--------------------------------------------------------------------------------------- + SetVendorName("mj10777"); + SetAppName("DBBrowser"); // not needed, it's the default value + p_ProgramCfg = wxConfigBase::Get(); + // p_ProgramCfg->DeleteAll(); + p_ProgramCfg->SetPath("/"); + wxString Temp0, Temp1; + Temp0.Empty(); + + //--------------------------------------------------------------------------------------- + //-- Set the Language and remember it for the next time. -------------------------------- + //--------------------------------------------------------------------------------------- + langhelp = "help.std/dbbrowse.hhp"; + if (langid == "std") + { + p_ProgramCfg->Read("/Local/langid",&Temp0); // >const char *langid< can't be used here + if (Temp0 == "") + langid = "std"; + else + langid = Temp0; + } + Temp0 = langid; + p_ProgramCfg->Write("/Local/langid",Temp0); // >const char *langid< can't be used here + //--------------------------------------------------------------------------------------- + // Support the following languages + if (Temp0 != "std") + { + if (Temp0 == "cz") + { + language = "czech"; // csy or czech + langhelp = "help.cz/dbbrowse.hhp"; + } + if ((Temp0 == "de") || (Temp0 == "a")) + { + language = "german"; // deu or german + langhelp = "help.de/dbbrowse.hhp"; + } + if (Temp0 == "fr") + { + language = "french"; // fra or french + langhelp = "help.fr/dbbrowse.hhp"; + } + if (Temp0 == "pl") + { + language = "polish"; // plk or polish + langhelp = "help.pl/dbbrowse.hhp"; + } + if (!m_locale.Init(language, langid, language)) // setlocale(LC_ALL,""); does not work + wxMessageBox("SetLocale error"); + m_locale.AddCatalog("PgmText"); + m_locale.AddCatalog("Help"); + Temp0 = language; + p_ProgramCfg->Write("/Local/language",Temp0); + } + else + { + Temp0 = "english"; + p_ProgramCfg->Write("/Local/language",Temp0); + Temp0 = "std"; // allways english if not german or french (at the moment austrian) + } + + Temp0 = "NONE"; + p_ProgramCfg->Write("/NONE",Temp0); + p_ProgramCfg->Write("/Paths/NONE",Temp0); + p_ProgramCfg->Write("/MainFrame/NONE",Temp0); + //----------------------------------------------------------------------------- + p_ProgramCfg->Write("/Paths/Work",wxGetCwd()); + p_ProgramCfg->SetPath("/"); + //----------------------------------------------------------------------------- + // or you could also write something like this: + // wxFileConfig *p_ProgramCfg = new wxFileConfig("conftest"); + // wxConfigBase::Set(p_ProgramCfg); + // where you can also specify the file names explicitly if you wish. + // Of course, calling Set() is optional and you only must do it if + // you want to later retrieve this pointer with Get(). + //---------------------------------------------------------------------------- + // SetPath() understands ".." + // restore frame position and size + int x = p_ProgramCfg->Read("/MainFrame/x", 1), y = p_ProgramCfg->Read("/MainFrame/y", 1), + w = p_ProgramCfg->Read("/MainFrame/w", 600), h = p_ProgramCfg->Read("/MainFrame/h", 450); + //--------------------------------------------------------------------------------------- + // Create the main frame window + frame = new MainFrame((wxFrame *) NULL, (char *) _("DBBrowser - mj10777"),x,y,w,h); + //--------------------------------------------------------------------------------------- + // This reduces flicker effects - even better would be to define OnEraseBackground + // to do Temp0. When the list control's scrollbars are show or hidden, the + // frame is sent a background erase event. + //--------------------------------------------------------------------------------------- + frame->SetBackgroundColour( *wxWHITE ); + // frame->SetBackgroundColour(wxColour(255, 255, 255)); + + //--------------------------------------------------------------------------------------- + // Make a menubar + wxMenu *file_menu = new wxMenu; + wxMenu *help_menu = new wxMenu; + + help_menu->Append(HELP, _("&Help")); + help_menu->AppendSeparator(); + help_menu->Append(ABOUT, _("&About")); + file_menu->Append(QUIT, _("E&xit")); + + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, _("&File")); + menu_bar->Append(help_menu, _("&Help")); + frame->SetMenuBar(menu_bar); + frame->CreateStatusBar(1); + Temp0.Printf(_("%s has started !"),p_ProgramCfg->GetAppName().c_str()); + frame->SetStatusText(Temp0, 0); + //--------------------------------------------------------------------------------------- + int width, height; + frame->GetClientSize(&width, &height); + + frame->p_Splitter = new DocSplitterWindow(frame, SPLITTER_WINDOW); + + // p_Splitter->SetCursor(wxCursor(wxCURSOR_PENCIL)); + frame->pDoc = new mjDoc(); + frame->pDoc->p_MainFrame = frame; + frame->pDoc->p_Splitter = frame->p_Splitter; + frame->pDoc->p_Splitter->pDoc = frame->pDoc; // ControlBase: saving the Sash + if (!frame->pDoc->OnNewDocument()) + frame->Close(TRUE); + // frame->Maximize(); + // frame->SetSize(-1,-1); // the wxSplitter does not show correctly without this ! + frame->SetClientSize(width, height); // the wxSplitter does not show correctly without this ! + //--------------------------------------------------------------------------------------- + //-- Problem : GetClientSize(Width,Hight) are not the same as the values given in the --- + //-- construction of the Frame. --- + //-- Solved : GetClientSize is called here and the difference is noted. When the --- + //-- Window is closed the diff. is added to the result of GetClientSize. --- + //--------------------------------------------------------------------------------------- + frame->GetClientSize(&frame->DiffW, &frame->DiffH); frame->DiffW-=w; frame->DiffH-=h; + //---------------------------------------------------------------------------- + //-- Help : --- + //---------------------------------------------------------------------------- + + frame->help.UseConfig(p_ProgramCfg); + frame->help.AddBook(langhelp); + /* + if (!frame->help.AddBook("helpfiles/dbbrowse.hhp")) + wxMessageBox("Failed adding book helpfiles/dbbrowse.hhp"); + if (!frame->help.AddBook("helpfiles/testing.hhp")) + wxMessageBox("Failed adding book helpfiles/testing.hhp"); + if (!frame->help.AddBook("helpfiles/another.hhp")) + wxMessageBox("Failed adding book helpfiles/another.hhp"); + */ + + + //--------------------------------------------------------------------------------------- + p_ProgramCfg->Flush(TRUE); // sicher Objekt + + //--------------------------------------------------------------------------------------- + // Show the frame + frame->Show(TRUE); + SetTopWindow(frame); + + + + return TRUE; +} +//--------------------------------------------------------------------------- +// My frame constructor +//--------------------------------------------------------------------------- +MainFrame::MainFrame(wxFrame *frame, char *title, int x, int y, int w, int h): + wxFrame(frame, SPLITTER_FRAME, title, wxPoint(x, y), wxSize(w, h)) +{ + InitializeMenu(); + // This reduces flicker effects - even better would be to define OnEraseBackground + // to do Temp0. When the list control's scrollbars are show or hidden, the + // frame is sent a background erase event. + SetBackgroundColour( *wxWHITE ); + // frame->SetBackgroundColour(wxColour(255, 255, 255)); + //--------------------------------------------------------------------------------------- + // Give it an icon + SetIcon( wxICON(Logo) ); + //--------------------------------------------------------------------------------------- +} +//--------------------------------------------------------------------------- +MainFrame::~MainFrame(void) +{ + // save the control's values to the config + if ( p_ProgramCfg == NULL ) + return; + // save the frame position + int x, y, w, h; + GetPosition(&x, &y); + GetClientSize(&w, &h); w -= DiffW; h -= DiffH; + p_ProgramCfg->Write("/MainFrame/x", (long) x); + p_ProgramCfg->Write("/MainFrame/y", (long) y); + p_ProgramCfg->Write("/MainFrame/w", (long) w); + p_ProgramCfg->Write("/MainFrame/h", (long) h); + p_ProgramCfg->Write("/MainFrame/Sash", (long) pDoc->Sash); + // clean up: Set() returns the active config object as Get() does, but unlike + // Get() it doesn't try to create one if there is none (definitely not what + // we want here!) + // delete wxConfigBase::Set((wxConfigBase *) NULL); + p_ProgramCfg->Flush(TRUE); // sichert Objekt + delete frame->pDoc; +} +//-------------------------------------------------------------------------------------- +void MainFrame::InitializeMenu() +{ + //--------------------------------------------------------------------------------------- + // Make a menubar + //--------------------------------------------------------------------------------------- + wxMenu *file_menu = new wxMenu; + + file_menu->Append(ABOUT, _("&About")); + file_menu->AppendSeparator(); + file_menu->Append(QUIT, _("E&xit")); + + + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, _("&File")); + SetMenuBar(menu_bar); +} +//--------------------------------------------------------------------------- +void MainFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + // Close the help frame; this will cause the config data to + // get written. + if (help.GetFrame()) // returns NULL if no help frame active + help.GetFrame()->Close(TRUE); + Close(TRUE); +} +//--------------------------------------------------------------------------- +void MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) +{ + wxMessageDialog dialog(this, _("DBBrowser\nMark Johnson\nBerlin, Germany\nmj10777@gmx.net\n (c) 1999"), + _("About DBBrowser"), wxOK|wxCANCEL); + + dialog.ShowModal(); +} +//--------------------------------------------------------------------------- +void MainFrame::OnHelp(wxCommandEvent& WXUNUSED(event)) +{ + help.Display("Main page"); +} +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/dbbrowse.h b/demos/dbbrowse/dbbrowse.h new file mode 100644 index 0000000000..1dd70460cc --- /dev/null +++ b/demos/dbbrowse/dbbrowse.h @@ -0,0 +1,54 @@ +//------------------------------------------------------------------------------ +// Name: dbbrowse.h +// Purpose: Through ODBC - Databases Browsen +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: +// Created: 19991127 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +// Define a new application type +//------------------------------------------------------------------------------ +class MyApp: public wxApp +{ + public: + bool OnInit(void); + wxLocale m_locale; // locale we'll be using +}; +//------------------------------------------------------------------------------ +// Define a new frame type +//------------------------------------------------------------------------------ +class MainFrame: public wxFrame +{ + public: + MainFrame(wxFrame *frame, char *title, int x, int y, int w, int h); + ~MainFrame(void); + + public: + // menu callbacks + void InitializeMenu(); + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + void OnHelp(wxCommandEvent& event); + //-------------------------------------------------------- + wxHtmlHelpController help; + //-------------------------------------------------------- + int DiffW, DiffH; + mjDoc *pDoc; + DocSplitterWindow *p_Splitter; + //-------------------------------------------------------- + DECLARE_EVENT_TABLE() +}; +//------------------------------------------------------------------------------ +// ID for the menu quit command +//------------------------------------------------------------------------------ +#define QUIT 1 +#define ABOUT 2 +#define HELP 3 +#define SPLITTER_FRAME 100 +#define SPLITTER_WINDOW 101 +#define TREE_CTRL_PGM 102 +#define GRID_CTRL 103 +#define TREE_CTRL_DB 104 +#define GRID_CTRL_DB 105 +//------------------------------------------------------------------------------ diff --git a/demos/dbbrowse/dbbrowse.rc b/demos/dbbrowse/dbbrowse.rc new file mode 100644 index 0000000000..a1f52e29ef --- /dev/null +++ b/demos/dbbrowse/dbbrowse.rc @@ -0,0 +1,15 @@ +Logo ICON "bitmaps\\logo.ico" +Col ICON "bitmaps\\col.ico" +DSNClosed ICON "bitmaps\\dsnclose.ico" +DSNOpen ICON "bitmaps\\dsnopen.ico" +KEY ICON "bitmaps\\key.ico" +KEYF ICON "bitmaps\\keyf.ico" +TAB ICON "bitmaps\\tab.ico" +DocClosed ICON "bitmaps\\d_closed.ico" +DocOpen ICON "bitmaps\\d_open.ico" +FolderClosed ICON "bitmaps\\f_closed.ico" +FolderOpen ICON "bitmaps\\f_open.ico" +PgmCtrl BITMAP "bitmaps\\pgmctrl.bmp" + +#include "wx/msw/wx.rc" +#include "wx/html/msw/wxhtml.rc" diff --git a/demos/dbbrowse/dbgrid.cpp b/demos/dbbrowse/dbgrid.cpp new file mode 100644 index 0000000000..9cbb930891 --- /dev/null +++ b/demos/dbbrowse/dbgrid.cpp @@ -0,0 +1,371 @@ +//--------------------------------------------------------------------------- +// Name: DBGrid.cpp +// Purpose: wxGrid sample +// Author: Mark Johnson +// Modified by: 19990929.mj10777 a reuseable DBGrid +// Created: 19990929 +// RCS-ID: +// Copyright: (c) +// Licence: wxWindows license +//--------------------------------------------------------------------------- +//-- all #ifdefs that the whole Project needs. ------------------------------ +//--------------------------------------------------------------------------- +#ifdef __GNUG__ +#pragma implementation +#pragma interface +#endif +//--------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +//--------------------------------------------------------------------------- +#ifdef __BORLANDC__ +#pragma hdrstop +#endif +//--------------------------------------------------------------------------- +#ifndef WX_PRECOMP +#include "wx/wx.h" +#endif +//--------------------------------------------------------------------------- +//-- all #includes that every .cpp needs --- 19990807.mj10777 --- +//--------------------------------------------------------------------------- +#include "std.h" // sorgsam Pflegen ! +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(DBGrid, wxGrid) + EVT_MOTION (DBGrid::OnMouseMove) + // DBGrid + EVT_GRID_LABEL_LEFT_CLICK( DBGrid::OnLabelLeftClick ) + EVT_GRID_LABEL_RIGHT_CLICK( DBGrid::OnLabelRightClick ) + EVT_GRID_LABEL_LEFT_DCLICK( DBGrid::OnLabelLeftDClick ) + EVT_GRID_LABEL_RIGHT_DCLICK( DBGrid::OnLabelRightDClick ) + EVT_GRID_CELL_LEFT_CLICK( DBGrid::OnCellLeftClick ) + EVT_GRID_CELL_RIGHT_CLICK( DBGrid::OnCellRightClick ) + EVT_GRID_CELL_LEFT_DCLICK( DBGrid::OnCellLeftDClick ) + EVT_GRID_CELL_RIGHT_DCLICK( DBGrid::OnCellRightDClick ) + EVT_GRID_ROW_SIZE( DBGrid::OnRowSize ) + // EVT_GRID_COL_SIZE( DBGrid::OnColSize ) + EVT_GRID_RANGE_SELECT( DBGrid::OnRangeSelected ) + EVT_GRID_CELL_CHANGE( DBGrid::OnCellChange ) + EVT_MENU(GRID_EDIT,DBGrid::OnModusEdit) + EVT_MENU(GRID_BROWSE,DBGrid::OnModusBrowse) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +// wxListCtrl(parent, id, pos, size, style) +// wxGrid(parent,-1,wxPoint( 0, 0 ), wxSize( 400, 300 ) ); +//--------------------------------------------------------------------------- +// DBGrid +//--------------------------------------------------------------------------- + // DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size): + // wxGrid(parent, id, pos, size) +DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style): + wxGrid(parent, id, pos, size, style) +{ + f_Temp = new wxFont(10,wxSWISS,wxNORMAL,wxBOLD,FALSE,"Comic Sans MS"); + wxPanel::SetFont(* f_Temp); + b_EditModus = TRUE; + //---------------------------------------------------------------------------------------------------------------------------- + popupMenu1 = new wxMenu(""); + popupMenu1->Append(GRID_EDIT, _("Edit Modus")); + popupMenu2 = new wxMenu(""); + popupMenu2->Append(GRID_BROWSE, _("Browse Modus")); +} +//--------------------------------------------------------------------------- +DBGrid::~DBGrid() +{ +} +//--------------------------------------------------------------------------- +int DBGrid::OnTableView(wxString Table) +{ + //--------------------------------------------------------------------------- + int i=0,x,y,z, ValidTable=0; + wxString Temp0; + SetLabelFont(* f_Temp); + //--------------------------------------------------------------------------- + ct_BrowserDB = (db_Br+i_Which)->ct_BrowserDB; // Get the DSN Pointer + //---------------------------------------------------------------------------- + if (ct_BrowserDB) // Valid pointer (!= NULL) ? + { // Pointer is Valid, use the wxDatabase Information + for (x=0;xnumTables;x++) // go through the Tables + { + if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableName,Table)) // is this our Table ? + { // Yes, the Data of this Table shall be put into the Grid + ValidTable = x; // Save the Tablenumber + (db_Br+i_Which)->OnSelect(Table,FALSE); // Select * from "table" + // Set the local Pointer to the Column Information we are going to use + (db_Br+i_Which)->cl_BrowserDB = (ct_BrowserDB->pTableInf+x)->pColInf; + if ((ct_BrowserDB->pTableInf+x)->pColInf) // Valid pointer (!= NULL) ? + { // Pointer is Valid, Column Informationen sind Vorhanden + i = (db_Br+i_Which)->i_Records; // How many Records are there + (db_Br+i_Which)->i_Which = ValidTable; // Still used ???? mj10777 + if (i == 0) // If the Table is empty, then show one empty row + i++; + CreateGrid(i,(ct_BrowserDB->pTableInf+x)->numCols); // Records , Columns + for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) // Loop through the Fields + { // The Field / Column name is used here as Row Titel + SetColLabelValue(y,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName); + SetColSize(y,95); + } // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) + SetColSize(((ct_BrowserDB->pTableInf+x)->numCols-1),120); // Make the last Column Wider + // The Grid has been created, now fill it + for (z=0;z<(db_Br+i_Which)->i_Records;z++) // Loop through the Records + { + Temp0.Printf("%06d",z+1); SetRowLabelValue(z,Temp0); // Set Row Lable Value + (db_Br+i_Which)->OnGetNext((ct_BrowserDB->pTableInf+ValidTable)->numCols,FALSE); + for (y=0;y<(ct_BrowserDB->pTableInf+ValidTable)->numCols;y++) // Loop through the Fields + { // BrowserDB::OnGetNext Formats the field Value into tablename + SetCellValue(z, y,((db_Br+i_Which)->cl_BrowserDB+y)->tableName); + } + if (z % 50 == 0) + { + Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - Record %6d has been read."),Table.c_str(),z); + pDoc->p_MainFrame->SetStatusText(Temp0, 0); + } + } // for (z=0;z<(db_Br+i_Which)->i_Records;z++) + Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - %6d Records have been read."),Table.c_str(),z); + pDoc->p_MainFrame->SetStatusText(Temp0, 0); + // The Grid has been filled, now leave + goto Weiter; + } // if ((ct_BrowserDB->pTableInf+x)->pColInf) + else + wxLogMessage(_("\n-E-> DBGrid::OnTableView():: Invalid Column Pointer : Failed")); + } // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE") + } // for (x=0;xnumTables;x++) + } // if (ct_BrowserDB) + else + wxLogMessage(_("\n-E-> DBGrid::OnTableView():: Invalid DSN Pointer : Failed")); + //--------------------------------------------------------------------------- + Weiter: + SetEditInPlace(b_EditModus); // Activate in-place Editing (FALSE) + //--------------------------------------------------------------------------- + wxLogMessage(_("-I-> DBGrid::OnTableView() - End")); + return 0; +} +//--------------------------------------------------------------------------- +void DBGrid::OnModusEdit(wxMenu& menu, wxCommandEvent& event) +{ + b_EditModus = TRUE; // Needed by PopupMenu + SetEditable(FALSE); // Do not Edit with Text Edit Control + SetEditInPlace(b_EditModus); // Deactivate in-place Editing + UpdateDimensions(); // Redraw the Grid +} +//--------------------------------------------------------------------------- +void DBGrid::OnModusBrowse(wxMenu& menu, wxCommandEvent& event) +{ + b_EditModus = FALSE; // Needed by PopupMenu + SetEditInPlace(b_EditModus); // Deactivate in-place Editing + UpdateDimensions(); // Redraw the Grid +} +//------------------------------------------------------------------------------ +void DBGrid::OnMouseMove(wxMouseEvent &event) +{ + MousePos = event.GetPosition(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnLabelLeftClick( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnLabelLeftClick : "; + if ( ev.GetRow() != -1 ) + { + logBuf << "row label " << ev.GetRow(); + } + else if ( ev.GetCol() != -1 ) + { + logBuf << "col label " << ev.GetCol(); + } + else + { + logBuf << "corner label"; + } + if ( ev.ShiftDown() ) + logBuf << " (shift down)"; + // wxLogMessage( "%s", logBuf.c_str() ); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnLabelRightClick( wxGridEvent& ev ) +{ + //------------------- + if (b_EditModus) + PopupMenu(popupMenu2,MousePos.x,MousePos.y); + else + PopupMenu(popupMenu1,MousePos.x,MousePos.y); + //------------------- + logBuf = "DBGrid::OnLabelRightClick : "; + if ( ev.GetRow() != -1 ) + { + logBuf << "row label " << ev.GetRow(); + } + else if ( ev.GetCol() != -1 ) + { + logBuf << "col label " << ev.GetCol(); + } + else + { + logBuf << "corner label"; + } + if ( ev.ShiftDown() ) + logBuf << " (shift down)"; + // wxLogMessage( "%s", logBuf.c_str() ); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnLabelLeftDClick( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnLabelLeftDClick : "; + if ( ev.GetRow() != -1 ) + { + logBuf << "row label " << ev.GetRow(); + } + else if ( ev.GetCol() != -1 ) + { + logBuf << "col label " << ev.GetCol(); + } + else + { + logBuf << "corner label"; + } + if ( ev.ShiftDown() ) + logBuf << " (shift down)"; + // wxLogMessage( "%s", logBuf.c_str() ); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnLabelRightDClick( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnLabelRightDClick : "; + if ( ev.GetRow() != -1 ) + { + logBuf << "row label " << ev.GetRow(); + } + else if ( ev.GetCol() != -1 ) + { + logBuf << "col label " << ev.GetCol(); + } + else + { + logBuf << "corner label"; + } + if ( ev.ShiftDown() ) + logBuf << " (shift down)"; + // wxLogMessage( "%s", logBuf.c_str() ); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnCellLeftClick( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnCellLeftClick : "; + logBuf << "Cell at row " << ev.GetRow() + << " col " << ev.GetCol(); + // wxLogMessage( "%s", logBuf.c_str() ); + // wxMessageBox(logBuf); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + // you must call event skip if you want default grid processing + // (cell highlighting etc.) + // + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnCellRightClick( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnCellRightClick : "; + logBuf << "Cell at row " << ev.GetRow() + << " col " << ev.GetCol(); + // wxLogMessage( "%s", logBuf.c_str() ); + // wxMessageBox(logBuf); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + // you must call event skip if you want default grid processing + // (cell highlighting etc.) + // + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnCellLeftDClick( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnCellLeftDClick : "; + logBuf << "Cell at row " << ev.GetRow() + << " col " << ev.GetCol(); + // wxLogMessage( "%s", logBuf.c_str() ); + // wxMessageBox(logBuf); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + // you must call event skip if you want default grid processing + // (cell highlighting etc.) + // + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnCellRightDClick( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnCellRightDClick : "; + logBuf << "Cell at row " << ev.GetRow() + << " col " << ev.GetCol(); + // wxLogMessage( "%s", logBuf.c_str() ); + // wxMessageBox(logBuf); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + // you must call event skip if you want default grid processing + // (cell highlighting etc.) + // + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnCellChange( wxGridEvent& ev ) +{ + logBuf = "DBGrid::OnCellChange : "; + logBuf << "Cell at row " << ev.GetRow() + << " col " << ev.GetCol(); + // wxLogMessage( "%s", logBuf.c_str() ); + // wxMessageBox(logBuf); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + // you must call event skip if you want default grid processing + // (cell highlighting etc.) + // + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnRowSize( wxGridSizeEvent& ev ) +{ + logBuf = "DBGrid::OnRowSize : "; + logBuf << "Resized row " << ev.GetRowOrCol(); + // wxLogMessage( "%s", logBuf.c_str() ); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnColSize( wxGridSizeEvent& ev ) +{ + logBuf = "DBGrid::OnColSize : "; + logBuf << "Resized col " << ev.GetRowOrCol(); + // wxLogMessage( "%s", logBuf.c_str() ); + logBuf += "\n"; + wxLogMessage(logBuf.c_str()); + + ev.Skip(); +} +//--------------------------------------------------------------------------- +void DBGrid::OnRangeSelected( wxGridRangeSelectEvent& ev ) +{ + logBuf = "DBGrid::OnRangeSelected : "; + logBuf << "Selected cells from row " << ev.GetTopRow() + << " col " << ev.GetLeftCol() + << " to row " << ev.GetBottomRow() + << " col " << ev.GetRightCol(); + + logBuf += "\n"; + // wxLogMessage( "%s", logBuf.c_str() ); + wxLogMessage(logBuf.c_str()); + + ev.Skip(); +} +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/dbgrid.h b/demos/dbbrowse/dbgrid.h new file mode 100644 index 0000000000..85094de5f6 --- /dev/null +++ b/demos/dbbrowse/dbgrid.h @@ -0,0 +1,58 @@ +//--------------------------------------------------------------------------- +// Name: DBGrid.h +// Purpose: DBGrid +// Author: Mark Johnson +// Modified by: 20000126.mj10777 +// Created: +// RCS-ID: +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +class mjDoc; +//--------------------------------------------------------------------------- +class DBGrid: public wxGrid +{ + public: + DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style); + virtual ~DBGrid(); + //------------------------------------------- + int i_TabArt; // Tab = 0 ; Page = 1; + int i_ViewNr; // View Nummer in Tab / Page + int i_Which; // Which View, Database is this/using + //------------------------------------------- + wxFont* f_Temp; + mjDoc* pDoc; + wxDbInf* ct_BrowserDB; + BrowserDB* db_Br; + wxMenu *popupMenu1; // OnDBClass + wxMenu *popupMenu2; // OnDBGrid & OnTableclass + bool b_EditModus; + //------------------------------------------- + wxString logBuf,Temp0; + wxPoint MousePos; + //------------------------------------------- + void OnModusEdit(wxMenu& menu, wxCommandEvent& event); + void OnModusBrowse(wxMenu& menu, wxCommandEvent& event); + void OnMouseMove(wxMouseEvent& event); + int OnTableView(wxString Table); + void OnLabelLeftClick( wxGridEvent& ); + void OnLabelRightClick( wxGridEvent& ); + void OnLabelLeftDClick( wxGridEvent& ); + void OnLabelRightDClick( wxGridEvent& ); + void OnCellLeftClick( wxGridEvent& ); + void OnCellRightClick( wxGridEvent& ); + void OnCellLeftDClick( wxGridEvent& ); + void OnCellRightDClick( wxGridEvent& ); + void OnRowSize( wxGridSizeEvent& ); + void OnColSize( wxGridSizeEvent& ); + void OnRangeSelected( wxGridRangeSelectEvent& ); + void OnCellChange( wxGridEvent& ); + //------------------------------------------- + DECLARE_EVENT_TABLE() +}; +//--------------------------------------------------------------------------- +#define GRID_01_BEGIN 1200 +#define GRID_BROWSE 1201 +#define GRID_EDIT 1202 +#define GRID_01_END 1203 +//------------------------------------------------------------------------------ diff --git a/demos/dbbrowse/dbtree.cpp b/demos/dbbrowse/dbtree.cpp new file mode 100644 index 0000000000..d262e2fae2 --- /dev/null +++ b/demos/dbbrowse/dbtree.cpp @@ -0,0 +1,377 @@ +//--------------------------------------------------------------------------- +// Name: DBTree.h +// Purpose: Programm Control with a Tree +// Author: Mark Johnson +// Modified by: +// Created: 19991129 +// RCS-ID: +// Copyright: (c) Mark Johnson, Berlin Germany, mj10777@gmx.net +// Licence: wxWindows license +//--------------------------------------------------------------------------- +//-- all #ifdefs that the whole Project needs. ------------------------------ +//--------------------------------------------------------------------------- +#ifdef __GNUG__ + #pragma implementation + #pragma interface +#endif +//--------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +//--------------------------------------------------------------------------- +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +//--------------------------------------------------------------------------- +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif +//--------------------------------------------------------------------------- +#ifndef __WXMSW__ +#endif +//--------------------------------------------------------------------------- +//-- all #includes that every .cpp needs --- 19990807.mj10777 --- +//--------------------------------------------------------------------------- +#include "std.h" // sorgsam Pflegen ! +//--------------------------------------------------------------------------- +//-- Global functions ------------------------------------------------------- +//--------------------------------------------------------------------------- +static inline const char *bool2String(bool b) +{ + return b ? "" : "not "; +} +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(DBTree, wxTreeCtrl) + EVT_MOTION (DBTree::OnMouseMove) + EVT_TREE_SEL_CHANGED(TREE_CTRL_DB, DBTree::OnSelChanged) + EVT_TREE_ITEM_RIGHT_CLICK(TREE_CTRL_DB,DBTree::OnRightSelect) + EVT_MENU(DATA_SHOW,DBTree::OnDBGrid) + EVT_MENU(DATA_DB,DBTree::OnDBClass) + EVT_MENU(DATA_TABLE,DBTree::OnTableClass) + EVT_MENU(DATA_TABLE_ALL,DBTree::OnTableClassAll) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +// DBTree implementation +//--------------------------------------------------------------------------- +IMPLEMENT_DYNAMIC_CLASS(DBTree, wxTreeCtrl) +//--------------------------------------------------------------------------- +DBTree::DBTree(wxWindow *parent) : wxTreeCtrl(parent) +{ +} +DBTree::DBTree(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size, long style) + : wxTreeCtrl(parent, id, pos, size, style) +{ + wxFont* ft_Temp = new wxFont(10,wxSWISS,wxNORMAL,wxBOLD,FALSE,"Comic Sans MS"); + SetFont(* ft_Temp); + + // Make an image list containing small icons + p_imageListNormal = new wxImageList(16, 16, TRUE); + + // should correspond to TreeIc_xxx enum +#if defined(__WXMSW__) + p_imageListNormal->Add(wxICON(Logo)); + p_imageListNormal->Add(wxICON(DsnClosed)); + p_imageListNormal->Add(wxICON(DsnOpen)); + p_imageListNormal->Add(wxICON(TAB)); + p_imageListNormal->Add(wxICON(COL)); + p_imageListNormal->Add(wxICON(KEY)); + p_imageListNormal->Add(wxICON(KEYF)); + p_imageListNormal->Add(wxICON(DocOpen)); + p_imageListNormal->Add(wxICON(DocOpen)); +#else + #include "bitmaps/logo.xpm" + #include "bitmaps/dsnclose.xpm" + #include "bitmaps/dsnopen.xpm" + #include "bitmaps/tab.xpm" + #include "bitmaps/key.xpm" + #include "bitmaps/keyf.xpm" + #include "bitmaps/d_open.xpm" + #include "bitmaps/d_closed.xpm" +#endif + + SetImageList(p_imageListNormal); + ct_BrowserDB = NULL; +} +//--------------------------------------------------------------------------- +DBTree::~DBTree() +{ + // wxLogMessage("DBTree::~DBTree() - Vor OnCloseDB()"); + (pDoc->db_Br+i_Which)->OnCloseDB(FALSE); + // wxLogMessage("DBTree::~DBTree() - Nach OnCloseDB()"); + (pDoc->db_Br+i_Which)->db_BrowserDB = NULL; + (pDoc->db_Br+i_Which)->ct_BrowserDB = NULL; + (pDoc->db_Br+i_Which)->cl_BrowserDB = NULL; + delete ct_BrowserDB; + delete p_imageListNormal; +} +//--------------------------------------------------------------------------- +#undef TREE_EVENT_HANDLER +//--------------------------------------------------------------------------- +int DBTree::OnPopulate() +{ + wxTreeItemId Root, Folder, Docu, Funkt; + int i,x,y; + wxString SQL_TYPE, DB_TYPE; + //---------------------------------------------------------------------------------------------------------------------------- + if((pDoc->db_Br+i_Which)->Initialize(FALSE)) + { + ct_BrowserDB = (pDoc->db_Br+i_Which)->OnGetCatalog(FALSE); + if (ct_BrowserDB) + { // Use the wxDatabase Information + Temp0.Printf("%s - (%s) (%s)", s_DSN.c_str(),ct_BrowserDB->catalog, ct_BrowserDB->schema); + Root = AddRoot(Temp0,TreeIc_DsnOpen,TreeIc_DsnOpen,new DBTreeData("Root")); + for (x=0;xnumTables;x++) + { + if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableType,"TABLE")) // only TABLES + { + Temp0.Printf(_("Tablename(%s) with (%d)Columns ; Remarks(%s)"), (ct_BrowserDB->pTableInf+x)->tableName, + (ct_BrowserDB->pTableInf+x)->numCols, + (ct_BrowserDB->pTableInf+x)->tableRemarks); + Temp1.Printf("TN(%s",(ct_BrowserDB->pTableInf+x)->tableName); + //---- + (ct_BrowserDB->pTableInf+x)->pColInf = (pDoc->db_Br+i_Which)->OnGetColumns((ct_BrowserDB->pTableInf+x)->tableName,(ct_BrowserDB->pTableInf+x)->numCols,FALSE); + //---- + if ((ct_BrowserDB->pTableInf+x)->pColInf) + { + Temp0.Printf(_("Tablename(%s) with (%d)Columns ; Remarks(%s)"), (ct_BrowserDB->pTableInf+x)->tableName, + (ct_BrowserDB->pTableInf+x)->numCols, + (ct_BrowserDB->pTableInf+x)->tableRemarks); + Folder = AppendItem(Root,Temp0,TreeIc_TAB,TreeIc_TAB, new DBTreeData(Temp1)); + for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) + { + Temp1.Printf("FN(%s",((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName); + // Here is where we find out if the Column is a Primary / Foreign Key + if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkCol != 0) // Primary Key + { + Docu = AppendItem(Folder,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName,TreeIc_KEY,TreeIc_KEY,new DBTreeData(Temp1)); + Temp2.Printf(_("This Key is used in the following Tables : %s"),((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkTableName); + Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEY")); + } + else + if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkCol != 0) // Foreign Key + { + Docu = AppendItem(Folder,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName,TreeIc_KEYF,TreeIc_KEYF,new DBTreeData(Temp1)); + Temp2.Printf(_("This Foreign Key comes from the following Table : %s"),((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkTableName); + Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEYF")); + } + else + Docu = AppendItem(Folder,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName,TreeIc_COL,TreeIc_COL,new DBTreeData(Temp1)); + SQL_TYPE.Printf(_("SQL_C_???? (%d)"),((ct_BrowserDB->pTableInf+x)->pColInf+y)->sqlDataType); + DB_TYPE.Printf(_("DB_DATA_TYPE_???? (%d)"),((ct_BrowserDB->pTableInf+x)->pColInf+y)->dbDataType); + for (i=1;i<=(pDoc->db_Br+i_Which)->i_SqlTyp[0];i++) + { + if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->sqlDataType == (pDoc->db_Br+i_Which)->i_SqlTyp[i]) + { + SQL_TYPE.Printf("%s(%d) ; ",(pDoc->db_Br+i_Which)->s_SqlTyp[i].c_str(),(pDoc->db_Br+i_Which)->i_SqlTyp[i]); + } + } // for (i=1;i<=i_SqlTyp[0];i++) + for (i=1;i<=(pDoc->db_Br+i_Which)->i_dbTyp[0];i++) + { + if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->dbDataType == (pDoc->db_Br+i_Which)->i_dbTyp[i]) + { + DB_TYPE.Printf("%s(%d)",(pDoc->db_Br+i_Which)->s_dbTyp[i].c_str(),(pDoc->db_Br+i_Which)->i_dbTyp[i]); + } + } // for (i=1;i<=i_dbTyp[0];i++) + SQL_TYPE += DB_TYPE; + Funkt = AppendItem(Docu,SQL_TYPE,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData(SQL_TYPE)); + SQL_TYPE.Printf("%10s %d,%d",((ct_BrowserDB->pTableInf+x)->pColInf+y)->typeName, + ((ct_BrowserDB->pTableInf+x)->pColInf+y)->columnSize, + ((ct_BrowserDB->pTableInf+x)->pColInf+y)->decimalDigits); + Funkt = AppendItem(Docu,SQL_TYPE,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData(SQL_TYPE)); + } // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) + } // if ((ct_BrowserDB->pTableInf+x)->pColInf) + else + Folder = AppendItem(Root,Temp0,TreeIc_FolderClosed,TreeIc_FolderOpen, new DBTreeData(Temp1)); + } // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE") + } // for (x=0;xnumTables;x++) + } // if (ct_BrowserDB) + else + wxLogMessage(_("\n-E-> DBTree::OnPopulate() : Invalid Catalog Pointer : Failed")); + } // if((pDoc->db_Br+i_Which)->Initialize(FALSE)) + else + { + wxLogMessage(_("\n-E-> DBTree::OnPopulate() : A valid Pointer could not be created : Failed")); + } + //---------------------------------------------------------------------------------------------------------------------------- + Expand(Root); + //---------------------------------------------------------------------------------------------------------------------------- + popupMenu1 = NULL; + popupMenu1 = new wxMenu(""); + popupMenu1->Append(DATA_DB, _("Make wxDB.cpp/h ")); + popupMenu1->AppendSeparator(); + popupMenu1->Append(DATA_TABLE_ALL, _("Make all wxTable.cpp/h classes")); + popupMenu2 = NULL; + popupMenu2 = new wxMenu(""); + popupMenu2->Append(DATA_SHOW, _("Show Data")); + popupMenu2->AppendSeparator(); + popupMenu2->Append(DATA_TABLE, _("Make wxTable.cpp/h ")); + //---------------------------------------------------------------------------------------------------------------------------- + return 0; +} +//--------------------------------------------------------------------------- +void DBTree::OnSelChanged(wxTreeEvent& WXUNUSED(event)) +{ + int i; + Temp0.Empty(); + pDoc->p_MainFrame->SetStatusText(Temp0,0); + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + DBTreeData *item = (DBTreeData *)GetItemData(itemId); + if ( item != NULL ) + { + int Treffer = 0; + Temp1.Printf("%s",item->m_desc.c_str()); + //----------------------------------------------------------------------------------------- + if (Temp1.Contains("ODBC-")) + { + Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN); + for (i=0;ii_DSN;i++) + { + if (Temp1 == (pDoc->p_DSN+i)->Dsn) + { + // pDoc->OnChosenDSN(i); + } + } + Treffer++; + } + //----------------------------------------------------------------------------------------- + if (Treffer == 0) + { + //--------------------------------------------------- + /* + Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold," + "%u children (%u immediately under this item)."), + item->m_desc.c_str(), + bool2String(IsSelected(itemId)), + bool2String(IsExpanded(itemId)), + bool2String(IsBold(itemId)), + GetChildrenCount(itemId), + GetChildrenCount(itemId)); + LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str()); + wxLogMessage( "%s", LogBuf.c_str() ); + */ + //--------------------------------------------------- + } + } +} +//--------------------------------------------------------------------------- +void DBTree::OnRightSelect(wxTreeEvent& WXUNUSED(event)) +{ + int i; + Temp0.Empty(); + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + DBTreeData *item = (DBTreeData *)GetItemData(itemId); + if ( item != NULL ) + { + int Treffer = 0; + Temp1.Printf("%s",item->m_desc.c_str()); + //----------------------------------------------------------------------------------------- + if (!wxStrcmp("Root",Temp1)) + { + PopupMenu(popupMenu1,TreePos.x,TreePos.y); + Treffer++; + } + for (i=0;inumTables;i++) + { + Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName); + if (!wxStrcmp(Temp2,Temp1)) + { + PopupMenu(popupMenu2,TreePos.x,TreePos.y); + Treffer++; + } + } + //----------------------------------------------------------------------------------------- + if (Treffer == 0) + { + //--------------------------------------------------- + /* + Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold," + "%u children (%u immediately under this item)."), + item->m_desc.c_str(), + bool2String(IsSelected(itemId)), + bool2String(IsExpanded(itemId)), + bool2String(IsBold(itemId)), + GetChildrenCount(itemId), + GetChildrenCount(itemId)); + LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str()); + wxLogMessage( "%s", LogBuf.c_str() ); + */ + //--------------------------------------------------- + } + } +} +//--------------------------------------------------------------------------- +void DBTree::OnDBGrid(wxMenu& , wxCommandEvent& event) +{ + int i; + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + DBTreeData *item = (DBTreeData *)GetItemData(itemId); + if ( item != NULL ) + { + Temp1.Printf("%s",item->m_desc.c_str()); + for (i=0;inumTables;i++) + { + Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName); + if (!wxStrcmp(Temp2,Temp1)) + { + // Temp0.Printf("(%d) Here is where a GridCtrl for >%s< will be called! ",i,(ct_BrowserDB->pTableInf+i)->tableName); + pDoc->OnChosenTbl(1,(ct_BrowserDB->pTableInf+i)->tableName); + // wxMessageBox(Temp0); + } + } + } +} +//--------------------------------------------------------------------------- +void DBTree::OnDBClass(wxMenu& , wxCommandEvent& event) +{ + // int i; + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + DBTreeData *item = (DBTreeData *)GetItemData(itemId); + if ( item != NULL ) + { + Temp0.Printf(_("Here is where a wxDB Class for >%s< will be made! "),s_DSN.c_str()); + wxMessageBox(Temp0); + } +} +//--------------------------------------------------------------------------- +void DBTree::OnTableClass(wxMenu& , wxCommandEvent& event) +{ + int i; + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + DBTreeData *item = (DBTreeData *)GetItemData(itemId); + if ( item != NULL ) + { + Temp1.Printf("%s",item->m_desc.c_str()); + for (i=0;inumTables;i++) + { + Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName); + if (!wxStrcmp(Temp2,Temp1)) + { + Temp0.Printf(_("(%d) Here is where a wxTable Class for >%s< will be made! "),i,(ct_BrowserDB->pTableInf+i)->tableName); + wxMessageBox(Temp0); + } + } + } +} +//--------------------------------------------------------------------------- +void DBTree::OnTableClassAll(wxMenu& , wxCommandEvent& event) +{ + // int i; + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + DBTreeData *item = (DBTreeData *)GetItemData(itemId); + if ( item != NULL ) + { + Temp0.Printf(_("Here is where all wxTable Classes in >%s< will be made! "),s_DSN.c_str()); + wxMessageBox(Temp0); + } +} +//------------------------------------------------------------------------------ +void DBTree::OnMouseMove(wxMouseEvent &event) +{ + TreePos = event.GetPosition(); +} +//------------------------------------------------------------------------------ diff --git a/demos/dbbrowse/dbtree.h b/demos/dbbrowse/dbtree.h new file mode 100644 index 0000000000..7edfbb473d --- /dev/null +++ b/demos/dbbrowse/dbtree.h @@ -0,0 +1,84 @@ +//--------------------------------------------------------------------------- +// Name: DBTree.h +// Purpose: Shows ODBC Catalog entries for Databases +// Author: Mark Johnson +// Modified by: 19991129.mj10777 +// Created: 19991129 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +class mjDoc; // Declared in Doc.h file +//--------------------------------------------------------------------------- +class DBTreeData : public wxTreeItemData +{ +public: + DBTreeData(const wxString& desc) : m_desc(desc) { } + + void ShowInfo(wxTreeCtrl *tree); + + wxString m_desc; +}; +//--------------------------------------------------------------------------- +class DBTree : public wxTreeCtrl +{ + public: + enum + { // The order here must be the same as in m_imageListNormal ! + TreeIc_Logo, // logo.ico + TreeIc_DsnClosed, // dsnclose.ico + TreeIc_DsnOpen, // dsnopen.ico + TreeIc_TAB, // tab.ico + TreeIc_COL, // col.ico + TreeIc_KEY, // key.ico + TreeIc_KEYF, // keyf.ico + TreeIc_DocClosed, // d_closed.ico + TreeIc_DocOpen, // d_open.ico + TreeIc_FolderClosed, // f_closed.ico + TreeIc_FolderOpen // f_open.ico + }; + wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; +//--------------------------------------------------------------------------- + DBTree() { } + DBTree(wxWindow *parent); + DBTree(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size,long style); + virtual ~DBTree(); + mjDoc *pDoc; + wxDbInf *ct_BrowserDB; +//--------------------------------------------------------------------------- + int i_TabArt; // Tab = 0 ; Page = 1; + int i_ViewNr; // View Nummer in Tab / Page + int i_Which; // Which View, Database is this/using + wxString s_DSN; // Name of the Dataset + wxMenu *popupMenu1; // OnDBClass + wxMenu *popupMenu2; // OnDBGrid & OnTableclass + wxPoint TreePos; +//--------------------------------------------------------------------------- + wxImageList *p_imageListNormal; +//--------------------------------------------------------------------------- + public: + int OnPopulate(); + void OnSelChanged(wxTreeEvent& event); + void OnRightSelect(wxTreeEvent& event); + void OnDBGrid(wxMenu& menu, wxCommandEvent& event); + void OnDBClass(wxMenu& menu, wxCommandEvent& event); + void OnTableClass(wxMenu& menu, wxCommandEvent& event); + void OnTableClassAll(wxMenu& menu, wxCommandEvent& event); + void OnMouseEvent(wxMouseEvent& event); + void OnMouseMove(wxMouseEvent& event); + public: +//--------------------------------------------------------------------------- + // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() + // if you want your overloaded OnCompareItems() to be called. + // OTOH, if you don't want it you may omit the next line - this will + // make default (alphabetical) sorting much faster under wxMSW. + DECLARE_DYNAMIC_CLASS(DBTree) + DECLARE_EVENT_TABLE() +}; +//------------------------------------------------------------------------------ +#define POPUP_01_BEGIN 1100 +#define DATA_SHOW 1101 +#define DATA_DB 1102 +#define DATA_TABLE 1103 +#define DATA_TABLE_ALL 1104 +#define POPUP_01_END 1117 +//------------------------------------------------------------------------------ diff --git a/demos/dbbrowse/de/de.po b/demos/dbbrowse/de/de.po new file mode 100644 index 0000000000..c8847bb547 --- /dev/null +++ b/demos/dbbrowse/de/de.po @@ -0,0 +1,1643 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 1999-05-10 18:29+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" + +#: ../src/generic/dirdlgg.cpp:461 ../src/generic/dirdlgg.cpp:489 +#: src/generic/dirdlgg.cpp:461 src/generic/dirdlgg.cpp:489 +msgid "" +"\n" +"(Do you have the required permissions?)" +msgstr "" +"\n" +"(Haben Sie die nötigen Zugriffsrechte?)" + +#: ../src/generic/dirdlgg.cpp:449 src/generic/dirdlgg.cpp:449 +msgid "" +"\n" +"does not exist\n" +"Create it now?" +msgstr "" +"\n" +"existiert nicht\n" +"Jetzt anlegen?" + +#: ../src/common/log.cpp:223 src/common/log.cpp:209 +#, c-format +msgid " (error %ld: %s)" +msgstr " (Fehler %ld: %s)" + +#: ../src/common/date.cpp:385 ../src/common/date.cpp:400 +#: src/common/date.cpp:384 src/common/date.cpp:399 +msgid " B.C." +msgstr " B.C." + +#: ../src/common/resourc2.cpp:265 ../src/common/resourc2.cpp:1334 +#: ../src/common/resource.cpp:1630 ../src/common/resource.cpp:2704 +#: src/common/resourc2.cpp:265 src/common/resourc2.cpp:1334 +#: src/common/resource.cpp:1613 src/common/resource.cpp:2682 +#, c-format +msgid "#define %s must be an integer." +msgstr "#define %s muß eine ganze Zahl sein" + +#: src/common/valtext.cpp:143 src/common/valtext.cpp:154 +#, c-format +msgid "%s is invalid." +msgstr "%s ist ungültig" + +#: ../src/common/resourc2.cpp:709 ../src/common/resource.cpp:2075 +#: src/common/resourc2.cpp:709 src/common/resource.cpp:2057 +#, c-format +msgid "%s not a bitmap resource specification." +msgstr "%s ist keine Bitmap-Resourcenangabe" + +#: ../src/common/resourc2.cpp:864 ../src/common/resource.cpp:2230 +#: src/common/resourc2.cpp:864 src/common/resource.cpp:2212 +#, c-format +msgid "%s not an icon resource specification." +msgstr "%s ist keine Icon-Resourcenangabe" + +#: src/common/valtext.cpp:188 +#, c-format +msgid "%s should be numeric." +msgstr "%s sollte numerisch sein" + +#: src/common/valtext.cpp:163 +#, c-format +msgid "%s should only contain ASCII characters." +msgstr "%s sollte nur ASCII Zeichen enthalten" + +#: src/common/valtext.cpp:171 +#, c-format +msgid "%s should only contain alphabetic characters." +msgstr "%s sollte nur Buchstaben enthalten" + +#: src/common/valtext.cpp:179 +#, c-format +msgid "%s should only contain alphabetic or numeric characters." +msgstr "%s sollte nur Buchstaben oder Ziffern enthalten" + +#: ../src/common/resourc2.cpp:357 ../src/common/resourc2.cpp:1430 +#: ../src/common/resource.cpp:1723 ../src/common/resource.cpp:2801 +#: src/common/resourc2.cpp:357 src/common/resourc2.cpp:1430 +#: src/common/resource.cpp:1705 src/common/resource.cpp:2778 +#, c-format +msgid "%s: ill-formed resource file syntax." +msgstr "%s: falsch formatierte Resourcendatei-Syntax" + +#: ../src/common/log.cpp:638 src/common/log.cpp:633 +msgid "&Close" +msgstr "&Schließen" + +#: ../src/common/log.cpp:639 src/common/log.cpp:634 +msgid "&Log" +msgstr "&Log" + +#: ../src/common/docview.cpp:1725 ../src/common/docview.cpp:1736 +#: src/common/docview.cpp:1687 src/common/docview.cpp:1698 +msgid "&Redo" +msgstr "&Wieder-Ausführen" + +#: ../src/common/docview.cpp:1719 ../src/common/docview.cpp:1746 +#: src/common/docview.cpp:1681 src/common/docview.cpp:1708 +msgid "&Redo " +msgstr "&Wieder-Ausführen " + +#: ../src/common/log.cpp:635 src/common/log.cpp:630 +msgid "&Save..." +msgstr "&Sichern..." + +#: ../src/common/docview.cpp:1731 src/common/docview.cpp:1693 +msgid "&Undo" +msgstr "&Rückgängig" + +#: ../src/common/docview.cpp:1706 src/common/docview.cpp:1668 +msgid "&Undo " +msgstr "&Rückgängig " + +#: ../src/common/config.cpp:382 src/common/config.cpp:393 +#, c-format +msgid "'%s' has extra '..', ignored." +msgstr "'%s' hat extra '..', ingoriert." + +#: ../src/common/intl.cpp:339 src/common/intl.cpp:338 +#, c-format +msgid "'%s' is not a valid message catalog." +msgstr "'%s' ist kein gültiger Nachrichtenkatalog." + +#: ../src/common/textfile.cpp:133 src/common/textfile.cpp:132 +#, c-format +msgid "'%s' is probably a binary file." +msgstr "'%s' ist vermutlich eine Binärdatei." + +#: ../src/common/resourc2.cpp:297 ../src/common/resourc2.cpp:1370 +#: ../src/common/resource.cpp:1662 ../src/common/resource.cpp:2740 +#: src/common/resourc2.cpp:297 src/common/resourc2.cpp:1370 +#: src/common/resource.cpp:1645 src/common/resource.cpp:2718 +msgid "" +", expected static, #include or #define\n" +"whilst parsing resource." +msgstr "" +", erwartete static, #include oder #define\n" +"beim Lesen der Resource." + +#: src/generic/dcpsg.cpp:2389 +msgid "A3 297 x 420 mm" +msgstr "" + +#: src/generic/dcpsg.cpp:1210 src/generic/dcpsg.cpp:1214 +#: src/generic/dcpsg.cpp:1800 src/generic/dcpsg.cpp:1804 +#: src/generic/dcpsg.cpp:2313 src/generic/dcpsg.cpp:2388 +#: src/generic/printps.cpp:239 src/generic/printps.cpp:243 +msgid "A4 210 x 297 mm" +msgstr "" + +#: ../src/generic/fontdlgg.cpp:329 src/generic/fontdlgg.cpp:329 +msgid "ABCDEFGabcdefg12345" +msgstr "" + +#: ../src/generic/colrdlgg.cpp:236 src/generic/colrdlgg.cpp:236 +msgid "Add to custom colours" +msgstr "Zu Benutzerfarben hinzufügen" + +#: ../src/generic/prntdlgg.cpp:140 src/generic/prntdlgg.cpp:83 +msgid "All" +msgstr "Alle" + +#: ../src/common/log.cpp:675 src/common/log.cpp:670 +#, c-format +msgid "Append log to file '%s' (choosing [No] will overwrite it)?" +msgstr "An Logdatei '%s' anhängen ([Nein] wird sie ersetzen)?" + +#: src/gtk/window.cpp:2716 +msgid "Application Error" +msgstr "Programmfehler" + +#: ../src/common/resourc2.cpp:844 ../src/common/resource.cpp:2210 +#: src/common/resourc2.cpp:844 src/common/resource.cpp:2192 +#, c-format +msgid "Bitmap resource specification %s not found." +msgstr "Bitmapresourceangabe %s nicht gefunden." + +#: ../src/generic/fontdlgg.cpp:221 src/generic/fontdlgg.cpp:221 +msgid "Bold" +msgstr "Fett" + +#: ../src/generic/prntdlgg.cpp:643 src/generic/prntdlgg.cpp:536 +msgid "Bottom margin (mm):" +msgstr "Unterer Rand (mm)" + +#: ../src/common/log.cpp:636 src/common/log.cpp:631 +msgid "C&lear" +msgstr "L&öschen" + +#: ../src/msw/thread.cpp:183 src/msw/thread.cpp:183 +msgid "Can not create event object." +msgstr "Kann Eventobjekt nicht erzeugen." + +#: ../src/msw/thread.cpp:99 src/msw/thread.cpp:99 +msgid "Can not create mutex." +msgstr "Kann Mutex nicht anlegen." + +#: ../src/msw/tooltip.cpp:199 src/msw/tooltip.cpp:199 +msgid "Can not create tooltip control" +msgstr "Kann Tooltip nicht erzeugen." + +#: ../src/common/filefn.cpp:1179 src/common/filefn.cpp:1168 +#: src/common/filefn.cpp:1282 +#, c-format +msgid "Can not enumerate files in directory '%s'" +msgstr "Kann Dateien in Verzeichnis '%s' nicht listen" + +#: ../src/msw/clipbrd.cpp:549 src/msw/clipbrd.cpp:549 +#, c-format +msgid "Can not get data in format '%s' from clipboard." +msgstr "Kann keine Daten im Format '%s' von der Zwischenablage bekommen." + +#: src/gtk/threadpsx.cpp:450 +#, c-format +msgid "Can not get priority range for scheduling policy %d." +msgstr "Kann Prioritätsbereich für Schedulingregeln %d nicht bekommen." + +#: ../src/msw/clipbrd.cpp:474 src/msw/clipbrd.cpp:474 +#, c-format +msgid "Can not put data in format '%s' on clipboard." +msgstr "Kann keine Daten im Fromat '%s' in die Zwischenablage kopieren." + +#: ../src/msw/thread.cpp:410 src/msw/thread.cpp:410 +#, c-format +msgid "Can not resume thread %x" +msgstr "Kann Thread %x nicht forsetzen." + +#: src/gtk/threadpsx.cpp:442 +msgid "Can not retrieve thread scheduling policy." +msgstr "Kann Schedulingregeln nicht bekommen." + +#: ../src/msw/thread.cpp:330 src/gtk/threadpsx.cpp:270 src/msw/thread.cpp:330 +msgid "Can not start thread: error writing TLS." +msgstr "Kann Thread nicht starten: Fehler beim Schreiben der TLS." + +#: ../src/msw/thread.cpp:395 src/msw/thread.cpp:395 +#, c-format +msgid "Can not suspend thread %x" +msgstr "Kann Thread %x nicht anhalten." + +#: ../src/msw/thread.cpp:547 src/msw/thread.cpp:543 +msgid "Can not wait for thread termination" +msgstr "Kann nicht auf Threadende warten" + +#: ../src/common/docview.cpp:1708 src/common/docview.cpp:1670 +msgid "Can't &Undo " +msgstr "Kann nicht rückgängig machen " + +#: ../src/msw/thread.cpp:359 src/msw/thread.cpp:359 +msgid "Can't create thread" +msgstr "Kann Thread nicht erzeugen" + +#: ../src/msw/iniconf.cpp:453 src/msw/iniconf.cpp:464 +#, c-format +msgid "Can't delete the INI file '%s'" +msgstr "Kann INI-Datei '%s' nicht löschen" + +#: ../src/unix/utilsunx.cpp:316 src/gtk/utilsgtk.cpp:360 +#, c-format +msgid "Can't execute '%s'\n" +msgstr "Kann '%s' nicht ausführen\n" + +#: ../src/msw/utilsexc.cpp:208 src/msw/utilsexc.cpp:208 +#, c-format +msgid "Can't execute command '%s'" +msgstr "Kann Befehl '%s' nicht ausführen" + +#: ../src/common/object.cpp:302 ../src/common/object.cpp:323 +#: src/common/object.cpp:290 src/common/object.cpp:311 +#, c-format +msgid "Can't find the serialization object '%s' for the object '%s'." +msgstr "Kann Serialisierungsobjekt '%s' für Object '%s' nicht finden." + +#: ../src/common/object.cpp:295 src/common/object.cpp:283 +msgid "Can't load wxSerial dynamic library." +msgstr "Kann wxSerial DLL nicht laden." + +#: ../src/common/log.cpp:722 src/common/log.cpp:717 +msgid "Can't save log contents to file." +msgstr "Kann Logtexte nicht in Datei sichern." + +#: ../src/msw/thread.cpp:384 src/msw/thread.cpp:384 +msgid "Can't set thread priority" +msgstr "Kann Thread-Priorität nicht setzen" + +#: ../src/common/prntbase.cpp:114 ../src/generic/choicdgg.cpp:306 +#: ../src/generic/colrdlgg.cpp:235 ../src/generic/dcpsg.cpp:1918 +#: ../src/generic/dirdlgg.cpp:341 ../src/generic/fontdlgg.cpp:261 +#: ../src/generic/msgdlgg.cpp:123 ../src/generic/prntdlgg.cpp:172 +#: ../src/generic/prntdlgg.cpp:430 ../src/generic/prntdlgg.cpp:580 +#: ../src/generic/progdlgg.cpp:94 ../src/generic/textdlgg.cpp:141 +#: ../src/gtk/filedlg.cpp:154 src/common/prntbase.cpp:113 +#: src/generic/choicdgg.cpp:306 src/generic/colrdlgg.cpp:235 +#: src/generic/dcpsg.cpp:1875 src/generic/dirdlgg.cpp:341 +#: src/generic/fontdlgg.cpp:261 src/generic/msgdlgg.cpp:143 +#: src/generic/prntdlgg.cpp:111 src/generic/prntdlgg.cpp:317 +#: src/generic/prntdlgg.cpp:473 src/generic/textdlgg.cpp:141 +#: src/gtk/filedlg.cpp:131 +msgid "Cancel" +msgstr "Abbruch" + +#: ../src/msw/app.cpp:223 src/msw/app.cpp:192 +msgid "Cannot initialize OLE" +msgstr "Kann OLE nicht initialisiern" + +#: ../src/generic/dcpsg.cpp:1296 src/generic/dcpsg.cpp:1247 +msgid "Cannot open file!" +msgstr "Kann Datei nicht öffnen!" + +#: src/common/CVS/Base/fileconf.cpp:614 src/common/fileconf.cpp:614 +#, c-format +msgid "Character '%c' is invalid in a config entry name." +msgstr "Zeichen '%c' ist in einem Konfigurationseintragsnamen nicht erlaubt." + +#: ../src/common/log.cpp:636 src/common/log.cpp:631 +msgid "Clear the log contents" +msgstr "Logtexte löschen" + +#: ../src/common/prntbase.cpp:343 src/common/prntbase.cpp:342 +msgid "Close" +msgstr "Schließen" + +#: ../src/common/log.cpp:638 src/common/log.cpp:633 +msgid "Close this window" +msgstr "Fenster schließen" + +#: ../src/gtk/filedlg.cpp:71 src/gtk/filedlg.cpp:60 +msgid "Confirm" +msgstr "Bestätigen" + +#: ../src/generic/helpxlp.cpp:242 src/generic/helpxlp.cpp:242 +#, c-format +msgid "Connection to wxHelp timed out in %d seconds" +msgstr "Verbindung mit wxHelp nach %d Sekunden abgebrochen" + +#: ../src/generic/helpxlp.cpp:242 src/generic/helpxlp.cpp:242 +#, c-format +msgid "Help: %s" +msgstr "Hilfe: %s" + +#: ../src/generic/prntdlgg.cpp:167 src/generic/prntdlgg.cpp:106 +msgid "Copies:" +msgstr "Kopien:" + +#: ../src/common/resourc2.cpp:287 ../src/common/resource.cpp:1652 +#: src/common/resourc2.cpp:287 src/common/resource.cpp:1635 +#, c-format +msgid "Could not find resource include file %s." +msgstr "Konnte Resourcedatei %s nicht finden." + +#: ../src/generic/tabg.cpp:1038 src/generic/tabg.cpp:1038 +msgid "Could not find tab for id" +msgstr "Konnte Seite für Id nicht finden" + +#: ../src/common/resource.cpp:753 src/common/resource.cpp:753 +#, c-format +msgid "" +"Could not resolve control class or id '%s'. Use (non-zero) integer instead\n" +" or provide #define (see manual for caveats)" +msgstr "" +"Kann keine Kontrollklasse oder Id '%s' finden. Verwenden Sie eine ganze Zahl\n" +" oder ein #define." + +#: ../src/common/resource.cpp:1203 src/common/resource.cpp:1199 +#, c-format +msgid "" +"Could not resolve menu id '%s'. Use (non-zero) integer instead\n" +"or provide #define (see manual for caveats)" +msgstr "" +"Kann keine Kontrollklasse oder Id '%s' finden. Verwenden Sie eine ganze Zahl\n" +" oder ein #define." + +#: ../src/common/prntbase.cpp:675 src/common/prntbase.cpp:673 +msgid "Could not start document preview." +msgstr "Kann Druckvoransicht nicht starten." + +#: ../src/generic/printps.cpp:189 ../src/msw/printwin.cpp:228 +#: src/generic/printps.cpp:165 +msgid "Could not start printing." +msgstr "Kann Ausdruck nicht beginnen." + +#: ../src/common/wincmn.cpp:598 src/gtk/window.cpp:2716 +#: src/msw/window.cpp:3756 +msgid "Could not transfer data to window" +msgstr "Kann Daten nicht ins Fenster übertragen." + +#: ../src/msw/thread.cpp:127 src/msw/thread.cpp:127 +msgid "Couldn't acquire a mutex lock" +msgstr "Kann Mutex-Lock nicht bekommen" + +#: ../src/msw/dragimag.cpp:88 ../src/msw/dragimag.cpp:116 +#: ../src/msw/imaglist.cpp:96 src/msw/imaglist.cpp:96 +msgid "Couldn't add an image to the image list." +msgstr "Kann Bild nicht zur Liste hinzufügen." + +#: ../src/msw/thread.cpp:231 src/msw/thread.cpp:231 +msgid "Couldn't change the state of event object." +msgstr "Kann Zustand des Eventobjektes nicht ändern." + +#: ../src/msw/timer.cpp:109 src/msw/timer.cpp:109 +msgid "Couldn't create a timer" +msgstr "Kann keinen Wecker anlegen." + +#: ../src/msw/thread.cpp:430 src/msw/thread.cpp:430 +msgid "Couldn't get the current thread pointer" +msgstr "Kann den aktuellen Threadzeiger nicht bekommen." + +#: ../src/common/imagpng.cpp:218 src/common/image.cpp:662 +msgid "Couldn't load a PNG image - probably file is corrupted." +msgstr "" + +#: ../src/msw/thread.cpp:159 src/msw/thread.cpp:159 +msgid "Couldn't release a mutex" +msgstr "Kann Mutex nicht freigeben." + +#: ../src/msw/listctrl.cpp:526 src/msw/listctrl.cpp:500 +#, c-format +msgid "Couldn't retrieve information about list control item %d." +msgstr "Kann keine Informationen über ListControl %d bekommen." + +#: ../src/msw/thread.cpp:612 src/msw/thread.cpp:608 +msgid "Couldn't terminate thread" +msgstr "Kann Thread nicht beenden" + +#: ../src/generic/dirdlgg.cpp:478 src/generic/dirdlgg.cpp:478 +msgid "Create New Directory" +msgstr "Neues Verzeichnis anlegen" + +#: ../src/common/log.cpp:1041 src/common/log.cpp:1022 +msgid "Debug" +msgstr "" + +#: ../src/generic/fontdlgg.cpp:211 src/generic/fontdlgg.cpp:211 +msgid "Decorative" +msgstr "Dekorativ" + +#: ../src/generic/dirdlgg.cpp:450 src/generic/dirdlgg.cpp:450 +msgid "Directory does not exist" +msgstr "Verzeichnis existiert nicht" + +#: ../src/common/docview.cpp:404 src/common/docview.cpp:371 +#, c-format +msgid "Do you want to save changes to document %s?" +msgstr "Möchten Sie die Änderungen in Dokument %s sichern?" + +#: src/common/log.cpp:368 +msgid "DoLogString must be overrided if it's called." +msgstr "" + +#: ../src/generic/dirdlgg.cpp:477 src/generic/dirdlgg.cpp:477 +msgid "Enter the name of the directory to create" +msgstr "Geben Sie einen Namen für das neue Verzeichnis ein" + +#: ../src/generic/helphtml.cpp:260 src/generic/helphtml.cpp:260 +msgid "Entries found" +msgstr "Einträge gefunden" + +#: src/common/CVS/Base/fileconf.cpp:607 src/common/fileconf.cpp:607 +#, c-format +msgid "Entry name can't start with '%c'." +msgstr "Eintragsname kann nicht mit '%c' beginnen." + +#: ../src/common/config.cpp:334 src/common/config.cpp:345 +#, c-format +msgid "" +"Environment variables expansion failed: missing '%c' at position %d in '%s'." +msgstr "" +"Umgebungsvariablenexpansion schlug fehl: fehlendes '%c' an Position %d in '%s'." + +#: ../src/common/log.cpp:474 ../src/generic/dcpsg.cpp:1296 +#: ../src/generic/helpxlp.cpp:243 ../src/gtk/filedlg.cpp:79 +#: src/common/log.cpp:474 src/generic/dcpsg.cpp:1247 +#: src/generic/helpxlp.cpp:243 +msgid "Error" +msgstr "Fehler" + +#: ../src/generic/dirdlgg.cpp:462 ../src/generic/dirdlgg.cpp:490 +#: src/generic/dirdlgg.cpp:462 src/generic/dirdlgg.cpp:490 +msgid "Error creating directory" +msgstr "Fehler beim Anlegen des Verzeichnisses" + +#: ../src/common/log.cpp:325 src/common/log.cpp:332 +msgid "Error: " +msgstr "Fehler: " + +#: ../src/generic/dirdlgg.cpp:230 src/generic/dirdlgg.cpp:230 +msgid "Etcetera" +msgstr "/etc" + +#: ../src/msw/utilsexc.cpp:237 src/msw/utilsexc.cpp:237 +#, c-format +msgid "Execution of command '%s' failed" +msgstr "Befehlsausführung '%s' schlug fehl" + +#: ../src/common/resourc2.cpp:326 ../src/common/resourc2.cpp:1399 +#: ../src/common/resource.cpp:1691 ../src/common/resource.cpp:2769 +#: src/common/resourc2.cpp:326 src/common/resourc2.cpp:1399 +#: src/common/resource.cpp:1674 src/common/resource.cpp:2747 +msgid "Expected '*' whilst parsing resource." +msgstr "Erwartete '*' beim Lesen der Resource." + +#: ../src/common/resourc2.cpp:342 ../src/common/resourc2.cpp:1415 +#: ../src/common/resource.cpp:1708 ../src/common/resource.cpp:2786 +#: src/common/resourc2.cpp:342 src/common/resourc2.cpp:1415 +#: src/common/resource.cpp:1690 src/common/resource.cpp:2763 +msgid "Expected '=' whilst parsing resource." +msgstr "" + +#: ../src/common/resourc2.cpp:312 ../src/common/resourc2.cpp:1385 +#: ../src/common/resource.cpp:1677 ../src/common/resource.cpp:2755 +#: src/common/resourc2.cpp:312 src/common/resourc2.cpp:1385 +#: src/common/resource.cpp:1660 src/common/resource.cpp:2733 +msgid "Expected 'char' whilst parsing resource." +msgstr "" + +#: ../src/msw/clipbrd.cpp:106 src/msw/clipbrd.cpp:106 +msgid "Failed to close the clipboard." +msgstr "Konnte Zwischenablage nicht schließen." + +#: ../src/generic/dirdlgg.cpp:460 ../src/generic/dirdlgg.cpp:488 +#: src/generic/dirdlgg.cpp:460 src/generic/dirdlgg.cpp:488 +msgid "Failed to create directory " +msgstr "Konnte Verzeichnis nicht anlegen " + +#: ../src/msw/tooltip.cpp:260 src/msw/tooltip.cpp:260 +#, c-format +msgid "Failed to create the tooltip '%s'" +msgstr "" + +#: src/msw/dialog.cpp:143 +msgid "Failed to created dialog." +msgstr "" + +#: ../src/msw/clipbrd.cpp:118 src/msw/clipbrd.cpp:118 +msgid "Failed to empty the clipboard." +msgstr "Konnte Zwischenablage nicht leeren." + +#: ../src/common/resourc2.cpp:808 ../src/common/resource.cpp:2174 +#: src/common/resourc2.cpp:808 src/common/resource.cpp:2156 +#, c-format +msgid "" +"Failed to find XBM resource %s.\n" +"Forgot to use wxResourceLoadBitmapData?" +msgstr "" + +#: ../src/common/resourc2.cpp:963 ../src/common/resource.cpp:2329 +#: src/common/resourc2.cpp:963 src/common/resource.cpp:2311 +#, c-format +msgid "" +"Failed to find XBM resource %s.\n" +"Forgot to use wxResourceLoadIconData?" +msgstr "" + +#: ../src/common/resourc2.cpp:824 ../src/common/resource.cpp:2190 +#: src/common/resourc2.cpp:824 src/common/resource.cpp:2172 +#, c-format +msgid "" +"Failed to find XPM resource %s.\n" +"Forgot to use wxResourceLoadBitmapData?" +msgstr "" + +#: ../src/msw/clipbrd.cpp:86 src/msw/clipbrd.cpp:86 +msgid "Failed to open the clipboard." +msgstr "Konnte Zwischenablage nicht öffnen." + +#: ../src/msw/clipbrd.cpp:375 src/msw/clipbrd.cpp:375 +msgid "Failed to retrieve data from the clipboard." +msgstr "Konnte Daten von der Zwischenablage nicht bekommen." + +#: ../src/msw/clipbrd.cpp:262 src/msw/clipbrd.cpp:262 +msgid "Failed to set clipboard data." +msgstr "Konnte Datein nicht in Zwischenablage kopieren." + +#: ../src/unix/threadpsx.cpp:551 src/gtk/threadpsx.cpp:508 +#, c-format +msgid "Failed to set thread priority %d." +msgstr "" + +#: ../src/unix/threadpsx.cpp:662 src/gtk/threadpsx.cpp:611 +msgid "Failed to terminate a thread." +msgstr "" + +#: ../src/common/log.cpp:545 src/common/log.cpp:543 +msgid "Fatal error" +msgstr "Nicht-behebbarer Fehler" + +#: ../src/common/log.cpp:318 src/common/log.cpp:325 +msgid "Fatal error: " +msgstr "Nicht-behebbarer Fehler" + +#: ../src/gtk/filedlg.cpp:68 src/gtk/filedlg.cpp:57 +#, c-format +msgid "File '%s' already exists, do you really want to overwrite it?" +msgstr "Datei '%s' existiert bereits, möchten Sie sie wirklich überschreiben?" + +#: ../src/common/docview.cpp:280 ../src/common/docview.cpp:311 +#: src/common/docview.cpp:247 src/common/docview.cpp:278 +msgid "File error" +msgstr "Dateifehler" + +#: ../src/msw/filedlg.cpp:259 src/msw/filedlg.cpp:252 +#, c-format +msgid "Files (%s)|%s" +msgstr "Dateien (%s)|%s" + +#: ../src/generic/fontdlgg.cpp:126 src/generic/fontdlgg.cpp:126 +msgid "Font" +msgstr "Zeichensatz" + +#: ../src/unix/utilsunx.cpp:276 src/gtk/utilsgtk.cpp:327 +msgid "Fork failed" +msgstr "" + +#: ../src/common/resourc2.cpp:295 ../src/common/resourc2.cpp:1368 +#: ../src/common/resource.cpp:1660 ../src/common/resource.cpp:2738 +#: src/common/resourc2.cpp:295 src/common/resourc2.cpp:1368 +#: src/common/resource.cpp:1643 src/common/resource.cpp:2716 +msgid "Found " +msgstr "Gefunden " + +#: ../src/generic/prntdlgg.cpp:158 src/generic/prntdlgg.cpp:97 +msgid "From:" +msgstr "Von:" + +#: ../src/generic/helphtml.cpp:259 ../src/generic/helphtml.cpp:260 +#: src/generic/helphtml.cpp:259 src/generic/helphtml.cpp:260 +msgid "Help Index" +msgstr "Hilfeindex" + +#: ../src/common/resourc2.cpp:997 ../src/common/resourc2.cpp:1008 +#: ../src/common/resource.cpp:2363 ../src/common/resource.cpp:2374 +#: src/common/resourc2.cpp:997 src/common/resourc2.cpp:1008 +#: src/common/resource.cpp:2345 src/common/resource.cpp:2356 +#, c-format +msgid "Icon resource specification %s not found." +msgstr "" + +#: ../src/common/resource.cpp:234 src/common/resource.cpp:234 +msgid "Ill-formed resource file syntax." +msgstr "" + +#: ../src/common/log.cpp:482 src/common/log.cpp:477 +msgid "Information" +msgstr "Information" + +#: ../src/generic/fontdlgg.cpp:217 src/generic/fontdlgg.cpp:217 +msgid "Italic" +msgstr "Kursiv" + +#: ../src/generic/dcpsg.cpp:1909 ../src/generic/prntdlgg.cpp:403 +#: ../src/generic/prntdlgg.cpp:606 src/generic/dcpsg.cpp:1866 +#: src/generic/prntdlgg.cpp:289 src/generic/prntdlgg.cpp:499 +msgid "Landscape" +msgstr "Querformat" + +#: ../src/generic/prntdlgg.cpp:622 src/generic/prntdlgg.cpp:515 +msgid "Left margin (mm):" +msgstr "Linker Rand (mm):" + +#: src/generic/dcpsg.cpp:2391 +msgid "Legal 8 1/2 x 14 in" +msgstr "" + +#: src/generic/dcpsg.cpp:2390 +msgid "Letter 8 1/2 x 11 in" +msgstr "" + +#: ../src/generic/fontdlgg.cpp:220 src/generic/fontdlgg.cpp:220 +msgid "Light" +msgstr "Dünn" + +#: ../src/gtk/filedlg.cpp:212 ../src/msw/filedlg.cpp:359 +#: src/gtk/filedlg.cpp:177 src/msw/filedlg.cpp:352 +#, c-format +msgid "Load %s file" +msgstr "%s-Datei laden" + +#: ../src/common/log.cpp:725 src/common/log.cpp:720 +#, c-format +msgid "Log saved to the file '%s'." +msgstr "Logtext in Datei '%s' gesichert." + +#: ../src/gtk/mdi.cpp:347 src/gtk/mdi.cpp:321 +msgid "MDI child" +msgstr "" + +#: ../src/common/mimetype.cpp:1265 src/common/mimetype.cpp:1203 +#, c-format +msgid "Mailcap file %s, line %d: incomplete entry ignored." +msgstr "Mailcap-Datei %s, Zeile %d: unvollständiger Eintrag ignoriert." + +#: src/common/mimetype.cpp:968 +#, c-format +msgid "" +"Mime.types file %s, line %d: extra characters after the field value ignored." +msgstr "" +"Mime.types-Datei %s, Zeile %d: extra Zeichen nach dem Wert ignoriert." + +#: ../src/common/mimetype.cpp:979 src/common/mimetype.cpp:941 +#, c-format +msgid "Mime.types file %s, line %d: unterminated quoted string." +msgstr "Mime.types-Datei %s, Zeile %d: unterminierter Text" + +#: ../src/generic/fontdlgg.cpp:212 src/generic/fontdlgg.cpp:212 +msgid "Modern" +msgstr "" + +#: ../src/generic/dirdlgg.cpp:226 src/generic/dirdlgg.cpp:226 +msgid "Mounted Devices" +msgstr "Dateisysteme" + +#: ../src/generic/dirdlgg.cpp:225 src/generic/dirdlgg.cpp:225 +msgid "My Home" +msgstr "Mein Verzeichnis" + +#: ../src/generic/dirdlgg.cpp:342 src/generic/dirdlgg.cpp:342 +msgid "New..." +msgstr "Neu..." + +#: ../src/generic/msgdlgg.cpp:111 src/generic/msgdlgg.cpp:131 +msgid "No" +msgstr "Nein" + +#: ../src/common/resourc2.cpp:814 ../src/common/resourc2.cpp:969 +#: ../src/common/resource.cpp:2180 ../src/common/resource.cpp:2335 +#: src/common/resourc2.cpp:814 src/common/resourc2.cpp:969 +#: src/common/resource.cpp:2162 src/common/resource.cpp:2317 +msgid "No XBM facility available!" +msgstr "" + +#: ../src/common/resourc2.cpp:830 ../src/common/resource.cpp:2196 +#: src/common/resourc2.cpp:830 src/common/resource.cpp:2178 +msgid "No XPM facility available!" +msgstr "" + +#: ../src/common/resourc2.cpp:991 ../src/common/resource.cpp:2357 +#: src/common/resourc2.cpp:991 src/common/resource.cpp:2339 +msgid "No XPM icon facility available!" +msgstr "" + +#: ../src/generic/helphtml.cpp:254 src/generic/helphtml.cpp:254 +msgid "No entries found." +msgstr "Keine Einträge gefunden." + +#: ../src/generic/fontdlgg.cpp:216 ../src/generic/fontdlgg.cpp:219 +#: src/generic/fontdlgg.cpp:216 src/generic/fontdlgg.cpp:219 +msgid "Normal" +msgstr "" + +#: ../src/generic/choicdgg.cpp:301 ../src/generic/colrdlgg.cpp:231 +#: ../src/generic/dcpsg.cpp:1917 ../src/generic/dirdlgg.cpp:340 +#: ../src/generic/fontdlgg.cpp:260 ../src/generic/msgdlgg.cpp:117 +#: ../src/generic/prntdlgg.cpp:171 ../src/generic/prntdlgg.cpp:429 +#: ../src/generic/prntdlgg.cpp:579 ../src/generic/textdlgg.cpp:136 +#: ../src/gtk/filedlg.cpp:148 src/generic/choicdgg.cpp:301 +#: src/generic/colrdlgg.cpp:231 src/generic/dcpsg.cpp:1874 +#: src/generic/dirdlgg.cpp:340 src/generic/fontdlgg.cpp:260 +#: src/generic/msgdlgg.cpp:138 src/generic/prntdlgg.cpp:110 +#: src/generic/prntdlgg.cpp:316 src/generic/prntdlgg.cpp:472 +#: src/generic/textdlgg.cpp:136 src/gtk/filedlg.cpp:125 +msgid "OK" +msgstr "" + +#: ../src/generic/prntdlgg.cpp:409 src/generic/prntdlgg.cpp:295 +msgid "Options" +msgstr "Optionen" + +#: ../src/generic/prntdlgg.cpp:405 ../src/generic/prntdlgg.cpp:607 +#: src/generic/prntdlgg.cpp:291 src/generic/prntdlgg.cpp:500 +msgid "Orientation" +msgstr "Orientierung" + +#: ../src/common/prntbase.cpp:695 src/common/prntbase.cpp:693 +#, c-format +msgid "Page %d" +msgstr "Seite %d" + +#: ../src/common/prntbase.cpp:693 src/common/prntbase.cpp:691 +#, c-format +msgid "Page %d of %d" +msgstr "Seite %d aus %d" + +#: ../src/generic/prntdlgg.cpp:564 src/generic/prntdlgg.cpp:457 +msgid "Page Setup" +msgstr "Seiteneinstellungen" + +#: ../src/generic/prntdlgg.cpp:141 src/generic/prntdlgg.cpp:84 +msgid "Pages" +msgstr "Seiten" + +#: ../src/generic/prntdlgg.cpp:395 ../src/generic/prntdlgg.cpp:756 +#: src/generic/prntdlgg.cpp:281 src/generic/prntdlgg.cpp:629 +msgid "Paper size" +msgstr "Papierformat" + +#: ../src/unix/utilsunx.cpp:259 src/gtk/utilsgtk.cpp:315 +msgid "Pipe creation failed" +msgstr "Konnte keine Pipe anlegen" + +#: ../src/common/prntbase.cpp:112 src/common/prntbase.cpp:111 +msgid "Please wait..." +msgstr "Bitte warten..." + +#: ../src/generic/dcpsg.cpp:1908 ../src/generic/prntdlgg.cpp:402 +#: ../src/generic/prntdlgg.cpp:605 src/generic/dcpsg.cpp:1865 +#: src/generic/prntdlgg.cpp:288 src/generic/prntdlgg.cpp:498 +msgid "Portrait" +msgstr "Hochformat" + +#: ../src/generic/dcpsg.cpp:366 src/generic/dcpsg.cpp:338 +msgid "PostScript" +msgstr "" + +#: ../src/generic/prntdlgg.cpp:234 src/generic/prntdlgg.cpp:159 +msgid "PostScript file" +msgstr "PostScript-Datei" + +#: ../src/generic/dcpsg.cpp:1950 src/generic/dcpsg.cpp:1907 +msgid "PostScript:" +msgstr "" + +#: ../src/generic/dcpsg.cpp:1913 src/generic/dcpsg.cpp:1870 +msgid "Preview Only" +msgstr "Nur Voransicht" + +#: ../src/generic/prntdlgg.cpp:102 ../src/generic/prntdlgg.cpp:116 +#: src/generic/prntdlgg.cpp:71 +msgid "Print" +msgstr "Drucken" + +#: ../src/generic/printps.cpp:189 src/generic/printps.cpp:165 +msgid "Print Error" +msgstr "Fehler beim Drucken" + +#: ../src/common/docview.cpp:831 src/common/docview.cpp:785 +msgid "Print Preview" +msgstr "Druckvoransicht" + +#: ../src/common/prntbase.cpp:636 ../src/common/prntbase.cpp:658 +#: ../src/common/prntbase.cpp:675 src/common/prntbase.cpp:633 +#: src/common/prntbase.cpp:655 src/common/prntbase.cpp:673 +msgid "Print Preview Failure" +msgstr "Fehler bei Druckvoransicht" + +#: ../src/generic/prntdlgg.cpp:149 src/generic/prntdlgg.cpp:90 +msgid "Print Range" +msgstr "Seitenbereich" + +#: ../src/generic/prntdlgg.cpp:370 ../src/generic/prntdlgg.cpp:377 +#: src/generic/prntdlgg.cpp:276 +msgid "Print Setup" +msgstr "Druckereinstellungen" + +#: ../src/generic/prntdlgg.cpp:417 src/generic/prntdlgg.cpp:303 +msgid "Print in colour" +msgstr "In Farbe drucken" + +#: ../src/generic/prntdlgg.cpp:419 src/generic/prntdlgg.cpp:306 +msgid "Print spooling" +msgstr "Druckersteuerung" + +#: ../src/generic/dcpsg.cpp:1912 ../src/generic/prntdlgg.cpp:135 +#: src/generic/dcpsg.cpp:1869 src/generic/prntdlgg.cpp:78 +msgid "Print to File" +msgstr "In Datei drucken" + +#: ../src/common/prntbase.cpp:350 src/common/prntbase.cpp:349 +msgid "Print..." +msgstr "Drucken..." + +#: ../src/generic/dcpsg.cpp:1923 src/generic/dcpsg.cpp:1880 +msgid "Printer Command: " +msgstr "Druck-Befehl " + +#: ../src/generic/dcpsg.cpp:1928 src/generic/dcpsg.cpp:1885 +msgid "Printer Options: " +msgstr "Befehlsoptionen: " + +#: ../src/generic/dcpsg.cpp:335 src/generic/dcpsg.cpp:306 +msgid "Printer Settings" +msgstr "Druckereinstellungen" + +#: ../src/generic/prntdlgg.cpp:421 src/generic/prntdlgg.cpp:308 +msgid "Printer command:" +msgstr "Druck-Befehl:" + +#: ../src/generic/prntdlgg.cpp:133 src/generic/prntdlgg.cpp:76 +msgid "Printer options" +msgstr "Druckereinstellungen" + +#: ../src/generic/prntdlgg.cpp:425 src/generic/prntdlgg.cpp:312 +msgid "Printer options:" +msgstr "Druckereinstellungen:" + +#: ../src/generic/prntdlgg.cpp:582 src/generic/prntdlgg.cpp:475 +msgid "Printer..." +msgstr "Drucker..." + +#: ../src/common/prntbase.cpp:111 ../src/common/prntbase.cpp:153 +#: src/common/prntbase.cpp:110 src/common/prntbase.cpp:152 +msgid "Printing" +msgstr "Drucke" + +#: ../src/common/prntbase.cpp:125 src/common/prntbase.cpp:124 +msgid "Printing Error" +msgstr "Fehler beim Drucken" + +#: ../src/common/log.cpp:319 src/common/log.cpp:326 +msgid "Program aborted." +msgstr "Programm abgebrochen." + +#: ../src/common/log.cpp:677 src/common/log.cpp:672 +msgid "Question" +msgstr "Frage" + +#: ../src/msw/registry.cpp:435 src/msw/registry.cpp:435 +#, c-format +msgid "" +"Registry key '%s' is needed for normal system operation,\n" +"deleting it will leave your system in unusable state:\n" +"operation aborted." +msgstr "" + +#: ../src/generic/helphtml.cpp:259 src/generic/helphtml.cpp:259 +msgid "Relevant entries:" +msgstr "Relevante Einträge:" + +#: ../src/msw/filedlg.cpp:336 src/msw/filedlg.cpp:329 +#, c-format +msgid "Replace file '%s'?" +msgstr "Datei '%s' ersetzen?" + +#: ../src/generic/prntdlgg.cpp:628 src/generic/prntdlgg.cpp:521 +msgid "Right margin (mm):" +msgstr "Rechter Rand (mm):" + +#: ../src/generic/fontdlgg.cpp:210 src/generic/fontdlgg.cpp:210 +msgid "Roman" +msgstr "Römisch" + +#: ../src/gtk/filedlg.cpp:228 ../src/msw/filedlg.cpp:359 +#: src/gtk/filedlg.cpp:193 src/msw/filedlg.cpp:352 +#, c-format +msgid "Save %s file" +msgstr "Datei %s sichern" + +#: ../src/common/docview.cpp:231 src/common/docview.cpp:198 +msgid "Save as" +msgstr "Sichern als" + +#: ../src/common/log.cpp:635 src/common/log.cpp:630 +msgid "Save log contents to file" +msgstr "Logtexte in Datei sichern" + +#: ../src/generic/fontdlgg.cpp:213 src/generic/fontdlgg.cpp:213 +msgid "Script" +msgstr "" + +#: ../src/common/docview.cpp:1268 src/common/docview.cpp:1243 +msgid "Select a document template" +msgstr "" + +#: ../src/common/docview.cpp:1291 src/common/docview.cpp:1266 +msgid "Select a document view" +msgstr "" + +#: ../src/common/docview.cpp:1185 ../src/common/docview.cpp:1223 +#: src/common/docview.cpp:1168 src/common/docview.cpp:1198 +msgid "Select a file" +msgstr "" + +#: ../src/generic/dcpsg.cpp:1911 src/generic/dcpsg.cpp:1868 +msgid "Send to Printer" +msgstr "Zum Drucker schicken" + +#: ../src/generic/prntdlgg.cpp:137 src/generic/prntdlgg.cpp:80 +msgid "Setup..." +msgstr "Einstellungen..." + +#: ../src/common/layout.cpp:1366 src/common/layout.cpp:1326 +msgid "Sizer error" +msgstr "" + +#: ../src/generic/fontdlgg.cpp:218 src/generic/fontdlgg.cpp:218 +msgid "Slant" +msgstr "Geneigt" + +#: ../src/common/docview.cpp:285 src/common/docview.cpp:252 +msgid "Sorry, could not open this file for saving." +msgstr "" + +#: ../src/common/docview.cpp:316 ../src/common/docview.cpp:322 +#: src/common/docview.cpp:283 src/common/docview.cpp:289 +msgid "Sorry, could not open this file." +msgstr "" + +#: ../src/common/docview.cpp:292 src/common/docview.cpp:259 +msgid "Sorry, could not save this file." +msgstr "" + +#: ../src/common/prntbase.cpp:658 src/common/prntbase.cpp:655 +msgid "Sorry, not enough memory to create a preview." +msgstr "Nicht genug Speicher für Voransicht." + +#: ../src/common/log.cpp:787 src/common/log.cpp:781 +msgid "Status: " +msgstr "" + +#: ../src/generic/fontdlgg.cpp:214 src/generic/fontdlgg.cpp:214 +msgid "Swiss" +msgstr "Schweizer" + +#: ../src/generic/fontdlgg.cpp:215 src/generic/fontdlgg.cpp:215 +msgid "Teletype" +msgstr "Schreibmaschine" + +#: ../src/common/docview.cpp:1268 src/common/docview.cpp:1243 +msgid "Templates" +msgstr "" + +#: ../src/generic/dirdlgg.cpp:231 src/generic/dirdlgg.cpp:231 +msgid "Temporary" +msgstr "" + +#: ../src/generic/dirdlgg.cpp:223 src/generic/dirdlgg.cpp:223 +msgid "The Computer" +msgstr "Der Computer" + +#: ../src/generic/dirdlgg.cpp:447 src/generic/dirdlgg.cpp:447 +msgid "The directory " +msgstr "Das Verzeichnis" + +#: ../src/msw/thread.cpp:730 src/msw/thread.cpp:719 +msgid "" +"Thread module initialization failed: can not store value in thread local " +"storage" +msgstr "" + +#: src/gtk/threadpsx.cpp:708 +msgid "Thread module initialization failed: failed to create pthread key." +msgstr "" + +#: ../src/msw/thread.cpp:716 src/msw/thread.cpp:705 +msgid "" +"Thread module initialization failed: impossible to allocate index in thread " +"local storage" +msgstr "" + +#: ../src/generic/prntdlgg.cpp:162 src/generic/prntdlgg.cpp:101 +msgid "To:" +msgstr "Bis:" + +#: ../src/generic/prntdlgg.cpp:637 src/generic/prntdlgg.cpp:530 +msgid "Top margin (mm):" +msgstr "Oberer Rand (mm):" + +#: ../src/generic/fontdlgg.cpp:246 src/generic/fontdlgg.cpp:246 +msgid "Underline" +msgstr "Unterstreichen" + +#: ../src/common/resourc2.cpp:305 ../src/common/resourc2.cpp:319 +#: ../src/common/resourc2.cpp:335 ../src/common/resourc2.cpp:349 +#: ../src/common/resourc2.cpp:1378 ../src/common/resourc2.cpp:1392 +#: ../src/common/resourc2.cpp:1408 ../src/common/resourc2.cpp:1422 +#: ../src/common/resource.cpp:1670 ../src/common/resource.cpp:1684 +#: ../src/common/resource.cpp:1701 ../src/common/resource.cpp:1715 +#: ../src/common/resource.cpp:2748 ../src/common/resource.cpp:2762 +#: ../src/common/resource.cpp:2779 ../src/common/resource.cpp:2793 +#: src/common/resourc2.cpp:305 src/common/resourc2.cpp:319 +#: src/common/resourc2.cpp:335 src/common/resourc2.cpp:349 +#: src/common/resourc2.cpp:1378 src/common/resourc2.cpp:1392 +#: src/common/resourc2.cpp:1408 src/common/resourc2.cpp:1422 +#: src/common/resource.cpp:1653 src/common/resource.cpp:1667 +#: src/common/resource.cpp:1683 src/common/resource.cpp:1697 +#: src/common/resource.cpp:2726 src/common/resource.cpp:2740 +#: src/common/resource.cpp:2756 src/common/resource.cpp:2770 +msgid "Unexpected end of file whilst parsing resource." +msgstr "" + +#: ../src/common/mimetype.cpp:1021 src/common/mimetype.cpp:985 +#, c-format +msgid "Unknown field in file %s, line %d: '%s'." +msgstr "Unbekanntest Feld '%s' in Datei %s, Zeile %d." + +#: ../src/common/mimetype.cpp:381 src/common/mimetype.cpp:363 +#, c-format +msgid "Unmatched '{' in an entry for mime type %s." +msgstr "Fehlendes '}' in Eintrag für MIME-Typ %s." + +#: ../src/common/docview.cpp:1703 ../src/common/docview.cpp:1718 +#: ../src/common/docview.cpp:1745 src/common/docview.cpp:1665 +#: src/common/docview.cpp:1680 src/common/docview.cpp:1707 +msgid "Unnamed command" +msgstr "" + +#: ../src/common/resourc2.cpp:687 ../src/common/resource.cpp:2053 +#: src/common/resourc2.cpp:687 src/common/resource.cpp:2035 +#, c-format +msgid "Unrecognized style %s whilst parsing resource." +msgstr "" + +#: ../src/msw/clipbrd.cpp:220 ../src/msw/clipbrd.cpp:330 +#: src/msw/clipbrd.cpp:220 src/msw/clipbrd.cpp:330 +msgid "Unsupported clipboard format." +msgstr "Nicht unterstütztes Format in Zwischenablage." + +#: ../src/generic/dirdlgg.cpp:227 src/generic/dirdlgg.cpp:227 +msgid "User" +msgstr "Benutzer" + +#: ../src/generic/dirdlgg.cpp:228 src/generic/dirdlgg.cpp:228 +msgid "User Local" +msgstr "Lokaler Benutzer" + +#: ../src/common/valtext.cpp:188 src/common/valtext.cpp:144 +#: src/common/valtext.cpp:155 src/common/valtext.cpp:164 +#: src/common/valtext.cpp:172 src/common/valtext.cpp:180 +#: src/common/valtext.cpp:189 +msgid "Validation conflict" +msgstr "" + +#: ../src/generic/dirdlgg.cpp:229 src/generic/dirdlgg.cpp:229 +msgid "Variables" +msgstr "Variablen" + +#: ../src/common/docview.cpp:1291 src/common/docview.cpp:1266 +msgid "Views" +msgstr "Ansichten" + +#: ../src/common/docview.cpp:401 ../src/common/log.cpp:478 +#: ../src/common/resource.cpp:121 src/common/docview.cpp:368 +#: src/common/resource.cpp:121 +msgid "Warning" +msgstr "Warnung" + +#: ../src/common/log.cpp:329 src/common/log.cpp:336 +msgid "Warning: " +msgstr "Warning: " + +#: ../src/generic/dcpsg.cpp:1968 src/generic/dcpsg.cpp:1925 +msgid "X Scaling" +msgstr "X Skalierung" + +#: ../src/generic/dcpsg.cpp:1977 src/generic/dcpsg.cpp:1934 +msgid "X Translation" +msgstr "X Verschiebung" + +#: ../src/generic/dcpsg.cpp:1972 src/generic/dcpsg.cpp:1929 +msgid "Y Scaling" +msgstr "Y Skalierung" + +#: ../src/generic/dcpsg.cpp:1981 src/generic/dcpsg.cpp:1938 +msgid "Y Translation" +msgstr "Y Verschiebung" + +#: ../src/generic/msgdlgg.cpp:109 src/generic/msgdlgg.cpp:130 +msgid "Yes" +msgstr "Ja" + +#: ../src/common/docview.cpp:1814 src/common/docview.cpp:1777 +msgid "[EMPTY]" +msgstr "[leer]" + +#: ../src/common/time.cpp:358 src/common/time.cpp:358 +msgid "am" +msgstr "am" + +#: ../src/common/fileconf.cpp:1266 src/common/CVS/Base/fileconf.cpp:1269 +#: src/common/fileconf.cpp:1269 +#, c-format +msgid "attempt to change immutable key '%s' ignored." +msgstr "Versuch, Eintrag '%s' zu ändern, verweigert. Ist nicht schreibbar." + +#: ../src/common/string.cpp:1703 src/common/string.cpp:1430 +msgid "bad index in wxArrayString::Remove" +msgstr "" + +#: ../src/common/file.cpp:273 src/common/file.cpp:268 +#, c-format +msgid "can't close file descriptor %d" +msgstr "" + +#: ../src/msw/registry.cpp:403 src/msw/registry.cpp:403 +#, c-format +msgid "can't close registry key '%s'" +msgstr "" + +#: ../src/common/file.cpp:563 src/common/file.cpp:520 +#, c-format +msgid "can't commit changes to file '%s'" +msgstr "Kann Änderungen in Datei '%s' nicht sichern." + +#: ../src/common/file.cpp:224 src/common/file.cpp:215 +#, c-format +msgid "can't create file '%s'" +msgstr "Kann Datei '%s' nicht anlegen." + +#: ../src/msw/registry.cpp:386 src/msw/registry.cpp:386 +#, c-format +msgid "can't create registry key '%s'" +msgstr "" + +#: ../src/msw/registry.cpp:467 src/msw/registry.cpp:467 +#, c-format +msgid "can't delete key '%s'" +msgstr "" + +#: ../src/common/fileconf.cpp:736 src/common/CVS/Base/fileconf.cpp:742 +#: src/common/fileconf.cpp:742 +#, c-format +msgid "can't delete user configuration file '%s'" +msgstr "Kann Konfigurationsdatei '%s' nicht löschen." + +#: ../src/msw/registry.cpp:492 src/msw/registry.cpp:492 +#, c-format +msgid "can't delete value '%s' from key '%s'" +msgstr "Kann Wert '%s' von Eintrag '%s' nicht löschen." + +#: ../src/msw/registry.cpp:503 src/msw/registry.cpp:503 +#, c-format +msgid "can't delete value of key '%s'" +msgstr "Kann Wert von Eintrag '%s' nicht löschen" + +#: src/common/file.cpp:447 +#, c-format +msgid "can't determine if the end of file is reached on descriptor %d" +msgstr "" + +#: ../src/msw/registry.cpp:780 src/msw/registry.cpp:780 +#, c-format +msgid "can't enumerate subkeys of key '%s'" +msgstr "Kann Untereinträge von '%s' nicht auflisten" + +#: ../src/msw/registry.cpp:735 src/msw/registry.cpp:735 +#, c-format +msgid "can't enumerate values of key '%s'" +msgstr "Kann Werte von Eintrag '%s' nicht auflisten" + +#: ../src/common/file.cpp:418 src/common/file.cpp:413 +#, c-format +msgid "can't find length of file on file descriptor %d" +msgstr "" + +#: ../src/msw/utils.cpp:584 src/msw/utils.cpp:561 +msgid "can't find user's HOME, using current directory." +msgstr "Kann Benutzerverzeichnis nicht finden, verwende aktuelles Verzeichnis." + +#: ../src/common/file.cpp:332 src/common/file.cpp:327 +#, c-format +msgid "can't flush file descriptor %d" +msgstr "" + +#: ../src/msw/registry.cpp:335 src/msw/registry.cpp:335 +#, c-format +msgid "can't get info about registry key '%s'" +msgstr "" + +#: ../src/common/file.cpp:386 src/common/file.cpp:381 +#, c-format +msgid "can't get seek position on file descriptor %d" +msgstr "" + +#: ../src/common/file.cpp:259 src/common/file.cpp:254 +#, c-format +msgid "can't open file '%s'" +msgstr "Kann Datei '%s' nicht öffnen" + +#: ../src/common/fileconf.cpp:183 src/common/CVS/Base/fileconf.cpp:186 +#: src/common/fileconf.cpp:186 +#, c-format +msgid "can't open global configuration file '%s'." +msgstr "Kann globale Konfigurationsdatei '%s' nicht öffnen." + +#: ../src/msw/registry.cpp:361 src/msw/registry.cpp:361 +#, c-format +msgid "can't open registry key '%s'" +msgstr "" + +#: ../src/common/fileconf.cpp:195 src/common/CVS/Base/fileconf.cpp:198 +#: src/common/fileconf.cpp:198 +#, c-format +msgid "can't open user configuration file '%s'." +msgstr "Kann Konfigurationsdatei '%s' nicht öffnen." + +#: ../src/common/fileconf.cpp:642 src/common/CVS/Base/fileconf.cpp:646 +#: src/common/fileconf.cpp:646 +msgid "can't open user configuration file." +msgstr "Kann Benutzer-Konfigurationsdatei nicht öffnen." + +#: ../src/common/file.cpp:299 src/common/file.cpp:294 +#, c-format +msgid "can't read from file descriptor %d" +msgstr "" + +#: ../src/msw/registry.cpp:658 src/msw/registry.cpp:658 +#, c-format +msgid "can't read value of '%s'" +msgstr "" + +#: ../src/msw/registry.cpp:569 ../src/msw/registry.cpp:608 +#: src/msw/registry.cpp:569 src/msw/registry.cpp:608 +#, c-format +msgid "can't read value of key '%s'" +msgstr "" + +#: ../src/common/file.cpp:558 src/common/file.cpp:515 +#, c-format +msgid "can't remove file '%s'" +msgstr "Kann Datei '%s' nicht löschen." + +#: ../src/common/file.cpp:574 src/common/file.cpp:531 +#, c-format +msgid "can't remove temporary file '%s'" +msgstr "Kann Temporärdatei '%s' nicht löschen" + +#: ../src/common/file.cpp:372 src/common/file.cpp:367 +#, c-format +msgid "can't seek on file descriptor %d" +msgstr "" + +#: ../src/msw/registry.cpp:594 ../src/msw/registry.cpp:682 +#: src/msw/registry.cpp:594 src/msw/registry.cpp:682 +#, c-format +msgid "can't set value of '%s'" +msgstr "" + +#: src/common/CVS/Base/fileconf.cpp:594 src/common/fileconf.cpp:594 +msgid "can't set value of a group!" +msgstr "" + +#: ../src/common/textfile.cpp:237 src/common/textfile.cpp:229 +#, c-format +msgid "can't write file '%s' to disk." +msgstr "Kann Datei '%s' nicht schreiben." + +#: ../src/common/file.cpp:317 src/common/file.cpp:312 +#, c-format +msgid "can't write to file descriptor %d" +msgstr "" + +#: ../src/common/fileconf.cpp:649 src/common/CVS/Base/fileconf.cpp:653 +#: src/common/fileconf.cpp:653 +msgid "can't write user configuration file." +msgstr "Kann Benutzers Konfigurationsdatei nicht schreiben." + +#: ../src/common/intl.cpp:301 src/common/intl.cpp:300 +#, c-format +msgid "catalog file for domain '%s' not found." +msgstr "Nachrichtenkatalog für Sprachbereich '%s' nicht gefunden." + +#: ../src/common/filefn.cpp:1527 src/common/filefn.cpp:1497 +msgid "empty file name in wxFindFileInPath" +msgstr "" + +#: ../src/common/fileconf.cpp:1253 src/common/CVS/Base/fileconf.cpp:1256 +#: src/common/fileconf.cpp:1256 +#, c-format +msgid "entry '%s' appears more than once in group '%s'" +msgstr "Eintrag '%s' erscheint in Gruppe '%s' mehrfach" + +#: ../src/common/fileconf.cpp:335 src/common/CVS/Base/fileconf.cpp:338 +#: src/common/fileconf.cpp:338 +#, c-format +msgid "file '%s', line %d: '%s' ignored after group header." +msgstr "Datei '%s', Zeile %d: '%s' hinter Gruppenkopf ignoriert." + +#: ../src/common/fileconf.cpp:361 src/common/CVS/Base/fileconf.cpp:357 +#: src/common/fileconf.cpp:357 +#, c-format +msgid "file '%s', line %d: '=' expected." +msgstr "Datei '%s', Zeile %d: '=' erwartet." + +#: ../src/common/fileconf.cpp:388 src/common/CVS/Base/fileconf.cpp:384 +#: src/common/fileconf.cpp:384 +#, c-format +msgid "file '%s', line %d: key '%s' was first found at line %d." +msgstr "Datei '%s', Zeile %d: Eintrag '%s' taucht erstmals in Zeile %d auf." + +#: ../src/common/fileconf.cpp:377 src/common/CVS/Base/fileconf.cpp:373 +#: src/common/fileconf.cpp:373 +#, c-format +msgid "file '%s', line %d: value for immutable key '%s' ignored." +msgstr "Datei '%s', Zeile %d: Eintrag für nicht-änderbaren Eintrag '%s' ignoriert." + +#: ../src/common/fileconf.cpp:303 src/common/CVS/Base/fileconf.cpp:307 +#: src/common/fileconf.cpp:307 +#, c-format +msgid "file '%s': unexpected character %c at line %d." +msgstr "Datei '%s': unerwartetes Zeichen %c in Zeile %d." + +#: ../src/common/date.cpp:374 ../src/common/date.cpp:392 +#: ../src/common/date.cpp:406 src/common/date.cpp:373 src/common/date.cpp:391 +#: src/common/date.cpp:405 +msgid "invalid date" +msgstr "ungültiges Datum" + +#: ../src/common/date.cpp:356 src/common/date.cpp:355 +msgid "invalid day" +msgstr "ungültiger Tag" + +#: ../src/common/file.cpp:457 src/common/file.cpp:452 +msgid "invalid eof() return value." +msgstr "" + +#: ../src/common/log.cpp:690 src/common/log.cpp:685 +msgid "invalid message box return value" +msgstr "" + +#: ../src/common/date.cpp:364 src/common/date.cpp:363 +msgid "invalid month" +msgstr "ungültiger Monat" + +#: ../src/common/intl.cpp:432 src/common/intl.cpp:431 +#, c-format +msgid "locale '%s' can not be set." +msgstr "Lokale Umgebung '%s' kann nicht gesetzt werden." + +#: ../src/common/intl.cpp:296 src/common/intl.cpp:295 +#, c-format +msgid "looking for catalog '%s' in path '%s'." +msgstr "Suche Nachrichtenkatalog '%s' in Pfad '%s'." + +#: ../src/common/time.cpp:360 src/common/time.cpp:360 +msgid "pm" +msgstr "pm" + +#: ../src/common/string.cpp:1719 src/common/string.cpp:1446 +msgid "removing inexistent element in wxArrayString::Remove" +msgstr "" + +#: ../src/common/intl.cpp:521 src/common/intl.cpp:519 +#, c-format +msgid "string '%s' not found in domain '%s' for locale '%s'." +msgstr "Text '%s' in Bereich '%s' für Umgebung '%s' nicht gefunden." + +#: ../src/common/intl.cpp:526 src/common/intl.cpp:524 +#, c-format +msgid "string '%s' not found in locale '%s'." +msgstr "Text '%s' in Umgebung '%s' nicht gefunden." + +#: ../src/common/fileconf.cpp:1373 src/common/CVS/Base/fileconf.cpp:1376 +#: src/common/fileconf.cpp:1376 +#, c-format +msgid "unexpected \" at position %d in '%s'." +msgstr "" + +#: src/common/log.cpp:362 +msgid "unknown log level in wxLog::DoLog" +msgstr "" + +#: src/common/log.cpp:559 +msgid "unknown log level in wxLogGui::DoLog" +msgstr "" + +#: ../src/common/file.cpp:367 src/common/file.cpp:362 +msgid "unknown seek origin" +msgstr "" + +#: ../src/common/docview.cpp:370 src/common/docview.cpp:337 +msgid "unnamed" +msgstr "Unbenannt" + +#: ../src/common/docview.cpp:1055 src/common/docview.cpp:1009 +#, c-format +msgid "unnamed%d" +msgstr "Unbenannt" + +#: ../src/common/intl.cpp:306 src/common/intl.cpp:305 +#, c-format +msgid "using catalog '%s' from '%s'." +msgstr "Verwende Nachrichtenkatalog '%s' von '%s'." + +#: ../src/common/layout.cpp:1366 src/common/layout.cpp:1326 +msgid "wxExpandSizer has no parent!" +msgstr "" + +#: ../src/common/prntbase.cpp:635 src/common/prntbase.cpp:632 +msgid "" +"wxPrintPreviewBase::RenderPage: must use wxPrintPreviewBase::SetCanvas to " +"let me know about the canvas!" +msgstr "" + +#: ../src/common/filefn.cpp:1134 src/common/filefn.cpp:1123 +msgid "wxWindows: error finding temporary file name.\n" +msgstr "" + +#: ../src/gtk/filedlg.cpp:79 +msgid "Please choose an existing file." +msgstr "Bitte wählen Sie eine bestehende Datei." + +#: ../src/generic/printps.cpp:173 +msgid "Printing..." +msgstr "Drucke..." + +#: ../src/generic/printps.cpp:207 +#, c-format +msgid "Printing page %d..." +msgstr "Drucke Seite %d..." + +#: ../src/generic/dcpsg.cpp:2189 +msgid "A4 sheet, 210 x 297 mm" +msgstr "" + +#: ../src/common/dynlib.cpp:187 +#, c-format +msgid "Couldn't find symbol '%s' in a dynamic library" +msgstr "" + +#: ../src/common/dynlib.cpp:274 +#, c-format +msgid "Failed to load shared library '%s'" +msgstr "" + +#: ../src/common/file.cpp:452 +#, c-format +msgid "" +"can't determine if the end of file is reached on descriptor " +"%d" +msgstr "" + +#: ../src/common/fileconf.cpp:611 +#, c-format +msgid "Config entry name cannot start with '%c'." +msgstr "" + +#: ../src/common/filefn.cpp:1003 +#, c-format +msgid "Directory '%s' couldn't be created" +msgstr "Verzeichnis '%s' konnte nicht angelegt werden." + +#: ../src/common/string.cpp:1687 +msgid "bad index in wxArrayString::Insert" +msgstr "" + +#: ../src/common/valtext.cpp:140 +#, c-format +msgid "'%s' is invalid" +msgstr "" + +#: ../src/common/valtext.cpp:160 +#, c-format +msgid "'%s' should only contain ASCII characters." +msgstr "" + +#: ../src/common/valtext.cpp:166 +#, c-format +msgid "'%s' should only contain alphabetic characters." +msgstr "" + +#: ../src/common/valtext.cpp:172 +#, c-format +msgid "'%s' should only contain alphabetic or numeric characters." +msgstr "" + +#: ../src/common/valtext.cpp:178 +#, c-format +msgid "'%s' should be numeric." +msgstr "" + +#: ../src/common/imagjpeg.cpp:174 +msgid "Couldn't load a JPEG image - probably file is corrupted." +msgstr "" + +#: ../src/common/imagjpeg.cpp:287 +msgid "Couldn't save a JPEG image - probably file is corrupted." +msgstr "" + +#: ../src/motif/app.cpp:559 +#, c-format +msgid "wxWindows could not open display for '%s': exiting." +msgstr "" + +#: ../src/msw/app.cpp:198 +msgid "Could not initialise Rich Edit DLL" +msgstr "" + +#: ../src/msw/app.cpp:698 +msgid "Unrecoverable program error detected: the application will terminate." +msgstr "" + +#: ../src/msw/app.cpp:700 +msgid "Fatal Error" +msgstr "" + +#: ../src/msw/app.cpp:1165 +msgid "Fatal error: exiting" +msgstr "" + +#: ../src/msw/dialog.cpp:145 +msgid "Failed to create dialog." +msgstr "" + +#: ../src/unix/threadpsx.cpp:296 +msgid "Cannot start thread: error writing TLS" +msgstr "" + +#: ../src/unix/threadpsx.cpp:477 +msgid "Cannot retrieve thread scheduling policy." +msgstr "" + +#: ../src/unix/threadpsx.cpp:485 +#, c-format +msgid "Cannot get priority range for scheduling policy %d." +msgstr "" + +#: ../src/unix/threadpsx.cpp:768 +msgid "Thread module initialization failed: failed to create thread key" +msgstr "" + +#: ../src/unix/utilsunx.cpp:211 +msgid "Waiting for subprocess termination failed" +msgstr "" + +#: ../src/unix/utilsunx.cpp:449 +msgid "Cannot get the hostname" +msgstr "" + +#: ../src/unix/utilsunx.cpp:485 +msgid "Cannot get the official hostname" +msgstr "" + +#: ../src/unix/utilsunx.cpp:547 ../src/unix/utilsunx.cpp:555 +msgid "Error " +msgstr "" + +#: ../src/unix/utilsunx.cpp:547 ../src/unix/utilsunx.cpp:555 +msgid "noname" +msgstr "ohnename" diff --git a/demos/dbbrowse/de/help.mo b/demos/dbbrowse/de/help.mo new file mode 100644 index 0000000000..51f289fdd0 Binary files /dev/null and b/demos/dbbrowse/de/help.mo differ diff --git a/demos/dbbrowse/de/help.po b/demos/dbbrowse/de/help.po new file mode 100644 index 0000000000..83fe6fe7f6 --- /dev/null +++ b/demos/dbbrowse/de/help.po @@ -0,0 +1,133 @@ +# for wxHelp +# Copyright (C) 2000 Free Software Foundation, Inc. +# Mark Johnson , 2000. +# +#----------------------------------------------------------- +#: ../Help +msgid "Help" +msgstr "Hilfe" + +#: ../Help +msgid "Help: %s" +msgstr "Hilfe: %s" + +#: ../Help +msgid "(Help)" +msgstr "(Hilfe)" + +#: ../Help +msgid "Search" +msgstr "Suchen" + +#: ../Help +msgid "" +msgstr "" + +#: ../Help +msgid "Contents" +msgstr "Inhalt" + +#: ../Help +msgid "Find" +msgstr "Suchen" + +#: ../Help +msgid "Show all" +msgstr "Alles zeigen" + +#: ../Help +msgid "%i of %i" +msgstr "%i von %i" + +#: ../Help +msgid "Show/hide navigation panel" +msgstr "Suchbaum Ein-/Ausschalten" + +#: ../Help +msgid "Go back to the previous HTML page" +msgstr "Vorherige HTLM Seite zeigen" + +#: ../Help +msgid "Go forward to the next HTML page" +msgstr "Nächste HTLM Seite zeigen" + +#: ../Help +msgid "Add current page to bookmarks" +msgstr "Aktuelle HTLM Seite als Lesezeichen hinzufügen" + +#: ../Help +msgid "Remove current page from bookmarks" +msgstr "Aktuelle HTLM Seite als Lesezeichen entfernen" + +#: ../Help +msgid "Display options dialog" +msgstr "Anzeige Options Dialog" + +#: ../Help +msgid "Help Browser Options" +msgstr "Hilfe Browser Optionen" + +#: ../Help +msgid "Font size:" +msgstr "Font Größe:" + +#: ../Help +msgid "small" +msgstr "Klein" + +#: ../Help +msgid "medium" +msgstr "Mittel" + +#: ../Help +msgid "large" +msgstr "Groß" + +#: ../Help +msgid "Preview:" +msgstr "Vorschau:" + +#: ../Help +msgid "Show all items in index" +msgstr "Alle Themen im Index anzeigen" + +#: ../Help +msgid "Display all index items that contain given substring. Search is case insensitive." +msgstr "Alle Themen im Index nach Suchbegriff durchsuchen. Groß-/Kleinschreibung wird nicht beachtet" + +#: ../Help +msgid "Search contents of help book(s) for all occurences of the text you typed above" +msgstr "Alle Hilfebücher nach Suchbegriff durchsuchen." + +#: ../Help +msgid "all books" +msgstr "alle Bücher" + +#: ../Help +msgid "Case sensitive" +msgstr "Groß-/Kleinschreibung" + +#: ../Help +msgid "Whole words only" +msgstr "Als Wort" + +#: ../Help +msgid "Searching..." +msgstr "Suchen..." + +#: ../Help +msgid "No matching page found yet" +msgstr "Passende Seite noch nicht gefunden" + +#: ../Help +msgid "Found %i matches" +msgstr "Suchbegriff %i mal gefunden" + +#----------------------------------------------------------- +#: ../Help +msgid "Done" +msgstr ":-) Ich habe Fertig" +#----------------------------------------------------------- +#: ../Help +msgid "" +msgstr "" diff --git a/demos/dbbrowse/de/mo.cmd b/demos/dbbrowse/de/mo.cmd new file mode 100755 index 0000000000..b9b8808e53 --- /dev/null +++ b/demos/dbbrowse/de/mo.cmd @@ -0,0 +1,2 @@ +msgfmt -o PgmText.mo PgmText.po +msgfmt -o Help.mo Help.po diff --git a/demos/dbbrowse/de/mo_de.cmd b/demos/dbbrowse/de/mo_de.cmd new file mode 100755 index 0000000000..722caf2c11 --- /dev/null +++ b/demos/dbbrowse/de/mo_de.cmd @@ -0,0 +1 @@ +msgfmt -o wxStd.mo de.po diff --git a/demos/dbbrowse/de/pgmtext.mo b/demos/dbbrowse/de/pgmtext.mo new file mode 100644 index 0000000000..f83f41d2e5 Binary files /dev/null and b/demos/dbbrowse/de/pgmtext.mo differ diff --git a/demos/dbbrowse/de/pgmtext.po b/demos/dbbrowse/de/pgmtext.po new file mode 100644 index 0000000000..d0fac30a6d --- /dev/null +++ b/demos/dbbrowse/de/pgmtext.po @@ -0,0 +1,889 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +#----------------------------------------------------------- +#: ../BrowserDB.cpp:68 ../BrowserDB.cpp:72 ../DBGrid.cpp:151 ../DBGrid.cpp:174 ../DBGrid.cpp:197 ../DBGrid.cpp:220 ../DBGrid.cpp:232 ../DBGrid.cpp:247 ../DBGrid.cpp:262 ../DBGrid.cpp:277 ../DBGrid.cpp:292 ../DBGrid.cpp:305 ../DBGrid.cpp:315 ../DBGrid.cpp:329 +msgid "\n" +msgstr "" + +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +#: ../BrowserDB.cpp:67 ../BrowserDB.cpp:79 ../BrowserDB.cpp:80 ../BrowserDB.cpp:81 ../BrowserDB.cpp:95 ../BrowserDB.cpp:127 ../BrowserDB.cpp:128 ../BrowserDB.cpp:129 ../BrowserDB.cpp:208 ../BrowserDB.cpp:358 ../BrowserDB.cpp:385 ../DBBrowser.cpp:87 ../DBBrowser.cpp:124 ../DBBrowser.cpp:127 ../DBTree.cpp:40 ../DBTree.cpp:200 ../Doc.cpp:100 ../Doc.cpp:121 ../Doc.cpp:149 ../Doc.cpp:150 ../Doc.cpp:189 ../Doc.cpp:238 ../Doc.cpp:251 ../PgmCtrl.cpp:45 +#, fuzzy, c-format +msgid "\n" + "\n" + "-E-> BrowserDB::OnStartDB(%s) : Failed ! " +msgstr "\n" + "\n" + "-E-> BrowserDB::OnStartDB(%s) : Gescheitert ! " + +#: ../BrowserDB.cpp:131 +msgid "\n" + "-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n" +msgstr "\n" + "-E-> BrowserDB::OnConnectDataSource() DB VERBINDUNGSFEHLER : Verbindungsaufbau zur Datenquelle nicht möglich.\n" + +#: ../BrowserDB.cpp:131 +msgid "\n" + "-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n" + "\n" + "Check the name of your data source to verify it has been correctly entered/spelled.\n" + "\n" + "With some databases, the user name and password must\n" + "be created with full rights to the table prior to making a connection\n" + "(using tools provided by the database manufacturer)" +msgstr "" + +#: ../BrowserDB.cpp:341 +#, c-format +msgid "\n" + "-E-> BrowserDB::OnExecSQL - ODBC-Error with ExecSql of >%s<.\n" + "-E-> " +msgstr "" + +#: ../BrowserDB.cpp:225 ../BrowserDB.cpp:235 ../BrowserDB.cpp:238 ../BrowserDB.cpp:249 ../BrowserDB.cpp:252 +msgid "\n" + "-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n" + "-E-> " +msgstr "\n" + "-E-> BrowserDB::OnGetData - ODBC-Fehler mit GetNext \n" + "-E-> " + +#: ../BrowserDB.cpp:180 +msgid "\n" + "-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext \n" + "-E-> " +msgstr "" + +#: ../BrowserDB.cpp:214 +#, c-format +msgid "\n" + "-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext of >%s<.\n" + "-E-> " +msgstr "" + +#: ../BrowserDB.cpp:279 ../BrowserDB.cpp:293 ../BrowserDB.cpp:307 ../BrowserDB.cpp:321 +#, c-format +msgid "\n" + "-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n" + "-E-> " +msgstr "\n" + "-E-> BrowserDB::OnSelect - ODBC-Fehler mit ExecSql >%s<.\n" + "-E-> " + +#: ../BrowserDB.cpp:115 +msgid "\n" + "-E-> BrowserDB::OnStartDB() : DB CONNECTION ERROR : A problem occured while trying to get a connection to the data source" +msgstr "\n" + "-E-> BrowserDB::OnStartDB() DB VERBINDUNGSFEHLER : Verbindungsaufbau zur Datenquelle nicht möglich" + +#: ../DBGrid.cpp:113 ../DBGrid.cpp:120 +msgid "\n" + "-E-> DBGrid::OnTableView():: Invalid Column Pointer : Failed" +msgstr "\n" + "-E-> DBGrid::OnTableView():: Ungültige Spalten-Zeiger : Gescheiter" + +#: ../DBGrid.cpp:118 ../DBGrid.cpp:125 +msgid "\n" + "-E-> DBGrid::OnTableView():: Invalid DSN Pointer : Failed" +msgstr "\n" + "-E-> DBGrid::OnTableView():: Ungültige DSN Zeiger : Gescheitert" + +#: ../DBTree.cpp:190 ../DBTree.cpp:191 +msgid "\n" + "-E-> DBTree::OnPopulate() : A valid Pointer could not be created : Failed" +msgstr "\n" + "-E-> DBTree::OnPopulate() : Eine gültiger Zeiger konnte nicht erstellt werden : Gescheitert" + +#: ../DBTree.cpp:186 ../DBTree.cpp:187 +msgid "\n" + "-E-> DBTree::OnPopulate() : Invalid Catalog Pointer : Failed" +msgstr "\n" + "-E-> DBTree::OnPopulate() : Ungüliter Zeiger auf Katalog : Gescheitert" + +#: ../BrowserDB.cpp:148 +msgid "\n" + "-I-> BrowserDB::OnCloseDB() : Begin " +msgstr "" + +#: ../BrowserDB.cpp:161 +msgid "\n" + "-I-> BrowserDB::OnCloseDB() : Ende " +msgstr "" + +#: ../BrowserDB.cpp:139 +#, c-format +msgid "\n" + "-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)" +msgstr "\n" + "-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; Datenquelle(%s)" + +#: ../BrowserDB.cpp:303 ../BrowserDB.cpp:331 +#, c-format +msgid "\n" + "-I-> BrowserDB::OnSelect(%s) Records(%d): End " +msgstr "\n" + "-I-> BrowserDB::OnSelect(%s) Sätze(%d): Ende " + +#: ../BrowserDB.cpp:104 +#, c-format +msgid "\n" + "-I-> BrowserDB::OnStartDB(%s) : Begin " +msgstr "\n" + "-I-> BrowserDB::OnStartDB(%s) : Begin " + +#: ../BrowserDB.cpp:140 +#, c-format +msgid "\n" + "-I-> BrowserDB::OnStartDB(%s) : End " +msgstr "\n" + "-I-> BrowserDB::OnStartDB(%s) : Ende " + +#: ../BrowserDB.cpp:108 +msgid "\n" + "-I-> BrowserDB::OnStartDB() : DB is allready open." +msgstr "\n" + "-I-> BrowserDB::OnStartDB() : DB ist bereits geöffnet." + +#: ../BrowserDB.cpp:52 +msgid "\n" + "ODBC errors:\n" +msgstr "\n" + "ODBC fehlern:\n" + +#: ../Doc.cpp:268 ../Doc.cpp:281 +#, c-format +msgid "\n" + "mjDoc::OnLeer(%s) : even this function will one day be available !" +msgstr "\n" + "mjDoc::OnLeer(%s) : eines Tages steht auch diese Funktion zur Verfügung !" + +#: ../BrowserDB.cpp:47 +msgid " Line: " +msgstr " Zeile: " + +#: ../DBGrid.cpp:142 ../DBGrid.cpp:149 ../DBGrid.cpp:165 ../DBGrid.cpp:172 ../DBGrid.cpp:188 ../DBGrid.cpp:195 ../DBGrid.cpp:211 ../DBGrid.cpp:218 +msgid " (shift down)" +msgstr " (shift down)" + +#: ../Doc.cpp:208 +msgid " ? " +msgstr " ?" + +#: ../DBGrid.cpp:229 ../DBGrid.cpp:244 ../DBGrid.cpp:259 ../DBGrid.cpp:274 ../DBGrid.cpp:289 ../DBGrid.cpp:325 ../DBGrid.cpp:327 +msgid " col " +msgstr " Spalte" + +#: ../DBGrid.cpp:326 +msgid " to row " +msgstr "Teile" + +#: ../DBGrid.cpp:102 +#, c-format +msgid "%06d" +msgstr "%06d" + +#: ../DBTree.cpp:174 +#, c-format +msgid "%10s %d,%d" +msgstr "%10s %d,%d" + +#: ../BrowserDB.cpp:48 +#, c-format +msgid "%d" +msgstr "%d" + +#: ../DBTree.cpp:215 ../DBTree.cpp:260 ../DBTree.cpp:300 ../DBTree.cpp:322 ../PgmCtrl.cpp:143 ../PgmCtrl.cpp:195 +#, c-format +msgid "%s" +msgstr "%s" + +#: ../DBTree.cpp:118 +#, c-format +msgid "%s - (%s) (%s)" +msgstr "%s - (%s) (%s)" + +#: ../PgmCtrl.cpp:104 ../PgmCtrl.cpp:107 +#, c-format +msgid "%s Functions" +msgstr "%s Funktionen" + +#: ../DBBrowser.cpp:201 ../DBBrowser.cpp:211 +#, c-format +msgid "%s has started !" +msgstr "%s wurde gestartet !" + +#: ../DBTree.cpp:169 +#, c-format +msgid "%s(%d)" +msgstr "%s(%d)" + +#: ../DBTree.cpp:162 +#, c-format +msgid "%s(%d) ; " +msgstr "%s(%d) ;" + +#: ../DBBrowser.cpp:193 ../DBBrowser.cpp:203 ../DBBrowser.cpp:289 ../DBBrowser.cpp:305 +msgid "&About" +msgstr "&Info" + +#: ../DBBrowser.cpp:197 ../DBBrowser.cpp:207 ../DBBrowser.cpp:295 ../DBBrowser.cpp:311 +msgid "&File" +msgstr "&Datei" + +#: ../DBBrowser.cpp:191 ../DBBrowser.cpp:198 ../DBBrowser.cpp:201 ../DBBrowser.cpp:208 +msgid "&Help" +msgstr "&Hilfe" + +#: ../DBTree.cpp:328 ../DBTree.cpp:332 +#, c-format +msgid "(%d) Here is where a wxTable Class for >%s< will be made! " +msgstr "(%d) Hier ist wo eine wxTable Klasse für >%s< erstellt wird!" + +#: ../DBTree.cpp:328 ../DBTree.cpp:332 +#, c-format +msgid "Here is where all wxTable Classes in >%s< will be made!" +msgstr "Hier ist wo alle wxTable Klassen für >%s< erstellt wird!" + +#: ../DBTree.cpp:328 ../DBTree.cpp:332 +#, c-format +msgid "Here is where a wxDB Class for >%s< will be made!" +msgstr "Hier ist wo eine wxDB Klasse für >%s< erstellt wird!" + +#: ../BrowserDB.cpp:189 +msgid "-E->" +msgstr "-E->" + +#: ../BrowserDB.cpp:346 +msgid "-E-> BrowserDB::OnExecSql - ExecSql()" +msgstr "-E-> BrowserDB::OnExecSql - ExecSql()" + +#: ../BrowserDB.cpp:285 +#, c-format +msgid "-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Col(%s)" +msgstr "-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Spalte(%s)" + +#: ../BrowserDB.cpp:310 +msgid "-E-> BrowserDB::OnSelect - GetData()" +msgstr "-E-> BrowserDB::OnSelect - GetData()" + +#: ../Doc.cpp:173 ../Doc.cpp:186 +msgid "-E-> Fatal situation" +msgstr "-E-> Tötliche Situation" + +#: ../BrowserDB.cpp:261 ../BrowserDB.cpp:289 +#, c-format +msgid "-E-> unknown Format(%d) - sql(%d)" +msgstr "-E-> unbekannte Format(%d) - sql(%d)" + +#: ../PgmCtrl.cpp:162 ../PgmCtrl.cpp:165 +msgid "-E-> wxConfigBase.p_ProgramCfg->DeleteAll() was not succesfull !" +msgstr "-E-> wxConfigBase.p_ProgramCfg->DeleteAll() war nicht Erfolgreich !" + +#: ../PgmCtrl.cpp:146 ../PgmCtrl.cpp:149 +msgid "-I-> After a programm restart, the language will be changed to English." +msgstr "-I-> Nach ein Programm neustart, wird die Sprache ins Englische geändert." + +#: ../PgmCtrl.cpp:153 ../PgmCtrl.cpp:156 +msgid "-I-> After a programm restart, the language will be changed to German." +msgstr "-I-> Nach ein Programm neustart, wird die Sprache ins Deutsche geändert." + +#: ../BrowserDB.cpp:148 +msgid "-I-> BrowserDB::OnCloseDB() : Begin " +msgstr "-I-> BrowserDB::OnCloseDB() : Begin" + +#: ../BrowserDB.cpp:139 +#, c-format +msgid "-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)" +msgstr "-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)" + +#: ../BrowserDB.cpp:140 +#, c-format +msgid "-I-> BrowserDB::OnStartDB(%s) : End " +msgstr "-I-> BrowserDB::OnStartDB(%s) : Ende" + +#: ../DBGrid.cpp:114 +#, c-format +msgid "-I-> DBGrid::OnTableView(%s) - %6d Records have been read." +msgstr "-I-> DBGrid::OnTableView(%s) - %6d Sätze wurde insgesamt gelesen." + +#: ../DBGrid.cpp:110 +#, c-format +msgid "-I-> DBGrid::OnTableView(%s) - Record %6d has been read." +msgstr "-I-> DBGrid::OnTableView(%s) - Satz %6d wurde gelesen." + +#: ../DBGrid.cpp:129 +msgid "-I-> DBGrid::OnTableView() - End" +msgstr "-I-> DBGrid::OnTableView() - Ende" + +#: ../PgmCtrl.cpp:194 +#, c-format +msgid "-I-> PgmCtrl::OnSelChanged - %s" +msgstr "-I-> PgmCtrl::OnSelChanged - %s" + +#: ../Doc.cpp:126 +#, c-format +msgid "-I-> mjDoc::OnInitView() - End - %d DSN's found" +msgstr "-I-> mjDoc::OnInitView() - Ende - %d DSN's found" + +#: ../PgmCtrl.cpp:160 ../PgmCtrl.cpp:163 +msgid "-I-> wxConfigBase.p_ProgramCfg->DeleteAll() was succesfull." +msgstr "-I-> wxConfigBase.p_ProgramCfg->DeleteAll() war erfolgreich." + +#: ../DBBrowser.cpp:116 ../DBBrowser.cpp:170 +msgid "/" +msgstr "/" + +#: ../DBBrowser.cpp:124 ../DBBrowser.cpp:131 ../PgmCtrl.cpp:111 ../PgmCtrl.cpp:148 ../PgmCtrl.cpp:155 +msgid "/Local/langid" +msgstr "" + +#: ../DBBrowser.cpp:156 ../DBBrowser.cpp:161 ../PgmCtrl.cpp:111 +msgid "/Local/language" +msgstr "" + +#: ../DBBrowser.cpp:167 +msgid "/MainFrame/NONE" +msgstr "" + +#: ../DBBrowser.cpp:289 ../Doc.cpp:81 +msgid "/MainFrame/Sash" +msgstr "" + +#: ../DBBrowser.cpp:182 ../DBBrowser.cpp:288 +msgid "/MainFrame/h" +msgstr "" + +#: ../DBBrowser.cpp:182 ../DBBrowser.cpp:287 +msgid "/MainFrame/w" +msgstr "" + +#: ../DBBrowser.cpp:181 ../DBBrowser.cpp:285 +msgid "/MainFrame/x" +msgstr "" + +#: ../DBBrowser.cpp:181 ../DBBrowser.cpp:286 +msgid "/MainFrame/y" +msgstr "" + +#: ../DBBrowser.cpp:165 +msgid "/NONE" +msgstr "" + +#: ../DBBrowser.cpp:166 +msgid "/Paths/NONE" +msgstr "" + +#: ../DBBrowser.cpp:169 ../PgmCtrl.cpp:114 +msgid "/Paths/Work" +msgstr "" + +#: ../DBBrowser.cpp:311 ../DBBrowser.cpp:327 +msgid "About DBBrowser" +msgstr "Info über DBBrowser" + +#: ../Doc.cpp:164 +msgid "Adaptive S" +msgstr "" + +#: ../DBGrid.cpp:228 ../DBGrid.cpp:243 ../DBGrid.cpp:258 ../DBGrid.cpp:273 ../DBGrid.cpp:288 +msgid "Cell at row " +msgstr "" + +#: ../PgmCtrl.cpp:113 ../PgmCtrl.cpp:116 +msgid "Change the language to English" +msgstr "Sprache ins Englische ändern" + +#: ../PgmCtrl.cpp:114 ../PgmCtrl.cpp:117 +msgid "Change the language to German" +msgstr "Sprache ins deutsch ändern" + +#: ../DBGrid.cpp:59 ../DBTree.cpp:61 ../Doc.cpp:105 ../PgmCtrl.cpp:63 +msgid "Comic Sans MS" +msgstr "" + +#: ../DBBrowser.cpp:113 +msgid "DBBrowser" +msgstr "" + +#: ../DBBrowser.cpp:326 +msgid "DBBrowser\n" + "Mark Johnson\n" + "Berlin, Germany\n" + "mj10777@gmx.net\n" + " (c) 1999" +msgstr "DBBrowser\n" + "Mark Johnson\n" + "Berlin, Germany\n" + "mj10777@gmx.net\n" + " (c) 1999" + +#: ../DBBrowser.cpp:185 +msgid "DBBrowser - mj10777" +msgstr "DBBrowser - mj10777" + +#: ../DBBrowser.cpp:185 +msgid "Help: %s" +msgstr "Hilfe: %s" + +#: ../DBBrowser.cpp:185 +msgid "noname" +msgstr "ohnename" + +#: ../DBGrid.cpp:287 +msgid "DBGrid::OnCellChange : " +msgstr "DBGrid::OnCellChange :" + +#: ../DBGrid.cpp:227 +msgid "DBGrid::OnCellLeftClick : " +msgstr "DBGrid::OnCellLeftClick :" + +#: ../DBGrid.cpp:257 +msgid "DBGrid::OnCellLeftDClick : " +msgstr "DBGrid::OnCellLeftDClick :" + +#: ../DBGrid.cpp:242 +msgid "DBGrid::OnCellRightClick : " +msgstr "DBGrid::OnCellRightClick :" + +#: ../DBGrid.cpp:272 +msgid "DBGrid::OnCellRightDClick : " +msgstr "DBGrid::OnCellRightDClick :" + +#: ../DBGrid.cpp:312 +msgid "DBGrid::OnColSize : " +msgstr "DBGrid::OnColSize :" + +#: ../DBGrid.cpp:135 +msgid "DBGrid::OnLabelLeftClick : " +msgstr "DBGrid::OnLabelLeftClick :" + +#: ../DBGrid.cpp:181 +msgid "DBGrid::OnLabelLeftDClick : " +msgstr "DBGrid::OnLabelLeftDClick :" + +#: ../DBGrid.cpp:158 +msgid "DBGrid::OnLabelRightClick : " +msgstr "DBGrid::OnLabelRightClick :" + +#: ../DBGrid.cpp:204 +msgid "DBGrid::OnLabelRightDClick : " +msgstr "DBGrid::OnLabelRightDClick :" + +#: ../DBGrid.cpp:323 +msgid "DBGrid::OnRangeSelected : " +msgstr "DBGrid::OnRangeSelected :" + +#: ../DBGrid.cpp:302 +msgid "DBGrid::OnRowSize : " +msgstr "DBGrid::OnRowSize :" + +#: ../DBTree.cpp:157 +#, c-format +msgid "DB_DATA_TYPE_???? (%d)" +msgstr "DB_DATA_TYPE_???? (%d)" + +#: ../BrowserDB.cpp:438 +msgid "DB_DATA_TYPE_DATE" +msgstr "DB_DATA_TYPE_DATE" + +#: ../BrowserDB.cpp:437 +msgid "DB_DATA_TYPE_FLOAT" +msgstr "DB_DATA_TYPE_FLOAT" + +#: ../BrowserDB.cpp:436 +msgid "DB_DATA_TYPE_INTEGER" +msgstr "DB_DATA_TYPE_INTEGER" + +#: ../BrowserDB.cpp:435 +msgid "DB_DATA_TYPE_VARCHAR" +msgstr "DB_DATA_TYPE_VARCHAR" + +#: ../PgmCtrl.cpp:115 ../PgmCtrl.cpp:118 +msgid "Delete all wxConfigBase Entry's" +msgstr "Lösche alle wxConfigBase Eintragungen" + +#: ../Doc.cpp:150 +#, c-format +msgid "DsDesc(%s) - %s" +msgstr "" + +#: ../DBBrowser.cpp:194 ../DBBrowser.cpp:204 ../DBBrowser.cpp:291 ../DBBrowser.cpp:307 +msgid "E&xit" +msgstr "&Beenden" + +#: ../DBTree.cpp:139 +#, c-format +msgid "FN(%s" +msgstr "" + +#: ../DBBrowser.cpp:230 +msgid "Failed adding book helpfiles/DBBrowser.hhp" +msgstr "helpfiles/DBBrowser.hhp konnte nicht hinzugefügt" + +#: ../DBBrowser.cpp:234 +msgid "Failed adding book helpfiles/another.hhp" +msgstr "" + +#: ../DBBrowser.cpp:232 +msgid "Failed adding book helpfiles/testing.hhp" +msgstr "" + +#: ../BrowserDB.cpp:45 +msgid "File: " +msgstr "" + +#: ../PgmCtrl.cpp:186 +#, c-format +msgid "Item '%s': %sselected, %sexpanded, %sbold,%u children (%u immediately under this item)." +msgstr "" + +#: ../DBTree.cpp:145 +msgid "KEY" +msgstr "" + +#: ../DBTree.cpp:152 +msgid "KEYF" +msgstr "" + +#: ../PgmCtrl.cpp:116 ../PgmCtrl.cpp:145 +msgid "Language English" +msgstr "" + +#: ../PgmCtrl.cpp:117 ../PgmCtrl.cpp:152 +msgid "Language German" +msgstr "" + +#: ../Doc.cpp:113 +msgid "LogBook" +msgstr "LogBuch" + +#: ../DBBrowser.cpp:334 +msgid "Main page" +msgstr "" + +#: ../DBTree.cpp:199 ../DBTree.cpp:203 +msgid "Make wxDB.cpp/h " +msgstr "wxDB.cpp/h Erstellen" + +#: ../DBTree.cpp:199 ../DBTree.cpp:203 +msgid "Make all wxTable.cpp/h " +msgstr "Alle wxTable.cpp/h Erstellen" + +#: ../DBTree.cpp:199 ../DBTree.cpp:203 +msgid "Make wxTable.cpp/h " +msgstr "wxTable.cpp/h Erstellen" + +#: ../DBBrowser.cpp:164 +msgid "NONE" +msgstr "" + +#: ../Doc.cpp:171 ../Doc.cpp:184 +msgid "No Dataset names found in ODBC!\n" + " Program will exit!\n" + "\n" + " Ciao" +msgstr "Keine Datenquellen in ODBC gefunden\n" + " Programm wird beendet!\n" + "\n" + " Ciao" + +#: ../PgmCtrl.cpp:119 +msgid "ODBC DSN" +msgstr "" + +#: ../DBTree.cpp:217 ../PgmCtrl.cpp:170 +msgid "ODBC-" +msgstr "" + +#: ../PgmCtrl.cpp:122 +#, c-format +msgid "ODBC-%s" +msgstr "" + +#: ../PgmCtrl.cpp:119 +msgid "ODBC-DSN" +msgstr "" + +#: ../PgmCtrl.cpp:115 +msgid "Path Work" +msgstr "" + +#: ../Doc.cpp:94 ../Doc.cpp:96 +msgid "PgmCtrl" +msgstr "" + +#: ../DBBrowser.cpp:154 +msgid "PgmText" +msgstr "" + +#: ../PgmCtrl.cpp:107 ../PgmCtrl.cpp:110 +msgid "Program settings" +msgstr "Programm Einstellungen" + +#: ../DBGrid.cpp:313 +msgid "Resized col " +msgstr "" + +#: ../DBGrid.cpp:303 +msgid "Resized row " +msgstr "" + +#: ../DBTree.cpp:119 ../PgmCtrl.cpp:108 +msgid "Root" +msgstr "" + +#: ../BrowserDB.cpp:304 +#, c-format +msgid "SELECT * FROM %s" +msgstr "SELECT * FROM %s" + +#: ../DBTree.cpp:156 +#, c-format +msgid "SQL_C_???? (%d)" +msgstr "SQL_C_???? (%d)" + +#: ../BrowserDB.cpp:407 +msgid "SQL_C_BINARY" +msgstr "SQL_C_BINARY" + +#: ../BrowserDB.cpp:408 +msgid "SQL_C_BIT" +msgstr "SQL_C_BIT" + +#: ../BrowserDB.cpp:409 +msgid "SQL_C_BOOKMARK" +msgstr "SQL_C_BOOKMARK" + +#: ../BrowserDB.cpp:410 +msgid "SQL_C_CHAR" +msgstr "SQL_C_CHAR" + +#: ../BrowserDB.cpp:411 +msgid "SQL_C_DATE" +msgstr "SQL_C_DATE" + +#: ../BrowserDB.cpp:412 +msgid "SQL_C_DEFAULT" +msgstr "SQL_C_DEFAULT" + +#: ../BrowserDB.cpp:413 +msgid "SQL_C_DOUBLE" +msgstr "SQL_C_DOUBLE" + +#: ../BrowserDB.cpp:414 +msgid "SQL_C_FLOAT" +msgstr "SQL_C_FLOAT" + +#: ../BrowserDB.cpp:415 +msgid "SQL_C_LONG" +msgstr "SQL_C_LONG" + +#: ../BrowserDB.cpp:416 +msgid "SQL_C_SHORT" +msgstr "SQL_C_SHORT" + +#: ../BrowserDB.cpp:417 +msgid "SQL_C_SLONG" +msgstr "SQL_C_SLONG" + +#: ../BrowserDB.cpp:418 +msgid "SQL_C_SSHORT" +msgstr "SQL_C_SSHORT" + +#: ../BrowserDB.cpp:419 +msgid "SQL_C_STINYINT" +msgstr "SQL_C_STINYINT" + +#: ../BrowserDB.cpp:420 +msgid "SQL_C_TIME" +msgstr "SQL_C_TIME" + +#: ../BrowserDB.cpp:421 +msgid "SQL_C_TIMESTAMP" +msgstr "SQL_C_TIMESTAMP" + +#: ../BrowserDB.cpp:422 +msgid "SQL_C_TINYINT" +msgstr "SQL_C_TINYINT" + +#: ../BrowserDB.cpp:423 +msgid "SQL_C_ULONG" +msgstr "SQL_C_ULONG" + +#: ../BrowserDB.cpp:424 +msgid "SQL_C_USHORT" +msgstr "SQL_C_USHORT" + +#: ../BrowserDB.cpp:425 +msgid "SQL_C_UTINYINT" +msgstr "SQL_C_UTINYINT" + +#: ../BrowserDB.cpp:428 +msgid "SQL_LONGVARCHAR" +msgstr "SQL_LONGVARCHAR" + +#: ../BrowserDB.cpp:427 +msgid "SQL_NUMERIC" +msgstr "SQL_NUMERIC" + +#: ../BrowserDB.cpp:429 +msgid "SQL_REAL" +msgstr "SQL_REAL" + +#: ../BrowserDB.cpp:426 +msgid "SQL_VARCHAR" +msgstr "SQL_VARCHAR" + +#: ../DBGrid.cpp:324 +msgid "Selected cells from row " +msgstr "" + +#: ../DBBrowser.cpp:153 +msgid "SetLocale error" +msgstr "" + +#: ../PgmCtrl.cpp:110 ../PgmCtrl.cpp:113 +msgid "Setting Language" +msgstr "Sprache setzen" + +#: ../PgmCtrl.cpp:110 +msgid "Settings" +msgstr "" + +#: ../DBTree.cpp:197 ../DBTree.cpp:201 +msgid "Show Data" +msgstr "Daten Zeigen" + +#: ../DBTree.cpp:122 +msgid "TABLE" +msgstr "" + +#: ../DBTree.cpp:127 ../DBTree.cpp:264 ../DBTree.cpp:303 ../DBTree.cpp:325 +#, c-format +msgid "TN(%s" +msgstr "" + +#: ../DBTree.cpp:124 ../DBTree.cpp:133 ../DBTree.cpp:134 +#, c-format +msgid "Tablename(%s) with (%d)Columns ; Remarks(%s)" +msgstr "Tablename(%s) mit (%d)Spalten ; Bemerkungen(%s)" + +#: ../DBTree.cpp:151 ../DBTree.cpp:152 +#, c-format +msgid "This Foreign Key comes from the following Table : %s" +msgstr "diese Fremd-Schlüssel stammt aus der folgende Tabelle : %s" + +#: ../DBTree.cpp:144 ../DBTree.cpp:145 +#, c-format +msgid "This Key is used in the following Tables : %s" +msgstr "Diese Schlüssel wird in folgende Tabellen Verwendet : %s" + +#: ../PgmCtrl.cpp:111 ../PgmCtrl.cpp:114 +#, c-format +msgid "Work Path : %s" +msgstr "Arbeits Pfad : %s" + +#: ../DBBrowser.cpp:136 +msgid "a" +msgstr "" + +#: ../PgmCtrl.cpp:73 +msgid "bitmap1" +msgstr "" + +#: ../PgmCtrl.cpp:74 +msgid "bitmap2" +msgstr "" + +#: ../DBGrid.cpp:142 ../DBGrid.cpp:165 ../DBGrid.cpp:188 ../DBGrid.cpp:211 +msgid "col label " +msgstr "" + +#: ../DBGrid.cpp:146 ../DBGrid.cpp:169 ../DBGrid.cpp:192 ../DBGrid.cpp:215 +msgid "corner label" +msgstr "" + +#: ../DBBrowser.cpp:148 +msgid "cz" +msgstr "cz" + +#: ../DBBrowser.cpp:150 +msgid "czech" +msgstr "czech" + +#: ../Doc.cpp:166 +msgid "dba" +msgstr "dba" + +#: ../DBBrowser.cpp:136 ../PgmCtrl.cpp:154 +msgid "de" +msgstr "de" + +#: ../DBBrowser.cpp:160 +msgid "english" +msgstr "english" + +#: ../DBBrowser.cpp:140 +msgid "fr" +msgstr "fr" + +#: ../DBBrowser.cpp:142 +msgid "french" +msgstr "french" + +#: ../DBBrowser.cpp:138 +msgid "german" +msgstr "german" + +#: ../DBBrowser.cpp:239 +msgid "helpfiles/DBBrowser.hhp" +msgstr "" + +#: ../DBBrowser.cpp:241 +msgid "helpfiles/another.hhp" +msgstr "" + +#: ../DBBrowser.cpp:240 +msgid "helpfiles/testing.hhp" +msgstr "" + +#: ../PgmCtrl.cpp:109 ../PgmCtrl.cpp:112 +#, c-format +msgid "locale (%s) ; Language (%s) ; Number(%2.2f)" +msgstr "locale (%s) ; Sprache (%s) ; Nummer(%2.2f)" + +#: ../DBBrowser.cpp:112 +msgid "mj10777" +msgstr "mj10777" + +#: ../DBTree.cpp:40 ../PgmCtrl.cpp:45 +msgid "not " +msgstr "not" + +#: ../DBBrowser.cpp:144 +msgid "pl" +msgstr "pl" + +#: ../DBBrowser.cpp:146 +msgid "polish" +msgstr "polish" + +#: ../DBGrid.cpp:138 ../DBGrid.cpp:161 ../DBGrid.cpp:184 ../DBGrid.cpp:207 +msgid "row label " +msgstr "row label" + +#: ../Doc.cpp:167 +msgid "sql" +msgstr "sql" + +#: ../DBBrowser.cpp:126 ../DBBrowser.cpp:134 ../DBBrowser.cpp:162 ../PgmCtrl.cpp:147 +msgid "std" +msgstr "std" + +#: ../PgmCtrl.cpp:115 ../PgmCtrl.cpp:118 ../PgmCtrl.cpp:157 ../PgmCtrl.cpp:160 +msgid "wxConfigBase Delete" +msgstr "wxConfigBase Löschen" diff --git a/demos/dbbrowse/de/wxstd.mo b/demos/dbbrowse/de/wxstd.mo new file mode 100644 index 0000000000..05be4e9118 Binary files /dev/null and b/demos/dbbrowse/de/wxstd.mo differ diff --git a/demos/dbbrowse/de/xget.cfg b/demos/dbbrowse/de/xget.cfg new file mode 100644 index 0000000000..dd8ea056bc --- /dev/null +++ b/demos/dbbrowse/de/xget.cfg @@ -0,0 +1,12 @@ +../BrowserDB.cpp +../BrowserDB.h +../DBBrowser.cpp +../DBBrowser.h +../DBGrid.cpp +../DBGrid.h +../DBTree.cpp +../DBTree.h +../Doc.cpp +../Doc.h +../PgmCtrl.cpp +../PgmCtrl.h diff --git a/demos/dbbrowse/de/xget.cmd b/demos/dbbrowse/de/xget.cmd new file mode 100755 index 0000000000..bbd922a278 --- /dev/null +++ b/demos/dbbrowse/de/xget.cmd @@ -0,0 +1 @@ + xgettext -C -i -s -j -a -d PgmText -f xget.cfg diff --git a/demos/dbbrowse/dlguser.cpp b/demos/dbbrowse/dlguser.cpp new file mode 100644 index 0000000000..d4872af8bd --- /dev/null +++ b/demos/dbbrowse/dlguser.cpp @@ -0,0 +1,70 @@ +//--------------------------------------------------------------------------- +// Name: DlgUser.h,cpp +// Purpose: Dialog mit Variable Gestaltung durch DlgUser.wxr +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: 19991105.mj10777 +// Created: 19991105 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +//-- all #ifdefs that the whole Project needs. ------------------------------ +//--------------------------------------------------------------------------- +#ifdef __GNUG__ + #pragma implementation + #pragma interface +#endif +//--------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +//--------------------------------------------------------------------------- +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +//--------------------------------------------------------------------------- +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif +//--------------------------------------------------------------------------- +//-- all #includes that every .cpp needs ----19990807.mj10777 --- +//--------------------------------------------------------------------------- +#include "dlguser.h" +//--------------------------------------------------------------------------- +DlgUser::DlgUser(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long WXUNUSED(style) ) : + wxDialog(parent, ID_DIALOG_DSN, title, pos, size, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL) +{ + SetBackgroundColour("wheat"); + wxButton *but1 = new wxButton(this, wxID_OK, "OK", wxPoint(55,110), wxSize(80, 30)); + wxButton *but2 = new wxButton(this, wxID_CANCEL, "Cancel", wxPoint(210,110), wxSize(80, 30)); + (void)new wxStaticText(this, -1,_("User ID"), wxPoint(20, 40), wxSize(50, 20),wxALIGN_LEFT); + (void)new wxStaticText(this, -1,_("Password"), wxPoint(20, 80), wxSize(50, 20),wxALIGN_LEFT); +// but1->SetFocus(); + but1->SetDefault(); +} +void DlgUser::OnInit() +{ + wxString Temp; Temp.Printf(_(">>> %s <<< "),s_DSN.c_str()); + (void)new wxStaticText(this, -1, Temp, wxPoint(10, 10), wxSize(300, 20),wxALIGN_CENTRE ); + tc_User = new wxTextCtrl(this, ID_USER, s_User, wxPoint(75, 35), wxSize(200, 25), 0, wxDefaultValidator); + tc_Password = new wxTextCtrl(this, ID_PASSWORD, s_Password, wxPoint(75, 75), wxSize(200, 25),wxTE_PASSWORD, wxDefaultValidator); + tc_User->SetFocus(); +} +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(DlgUser, wxDialog) + EVT_BUTTON(wxID_OK, DlgUser::OnOk) + EVT_BUTTON(wxID_CANCEL, DlgUser::OnCancel) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +void DlgUser::OnOk(wxCommandEvent& WXUNUSED(event) ) +{ + canceled = FALSE; + s_User = tc_User->GetValue(); + s_Password = tc_Password->GetValue(); + EndModal(wxID_OK); +} +//--------------------------------------------------------------------------- +void DlgUser::OnCancel(wxCommandEvent& WXUNUSED(event) ) +{ + canceled = TRUE; + EndModal(wxID_CANCEL); +} +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/dlguser.h b/demos/dbbrowse/dlguser.h new file mode 100644 index 0000000000..859da2c34d --- /dev/null +++ b/demos/dbbrowse/dlguser.h @@ -0,0 +1,33 @@ +//--------------------------------------------------------------------------- +// Name: DlgUser.h,cpp +// Purpose: Dialog mit Variable Gestaltung durch DlgUser.wxr +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: 19991105.mj10777 +// Created: 19991105 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +// DlgUser +//--------------------------------------------------------------------------- +#define ID_DIALOG_DSN 100 +#define ID_DSN 101 +#define ID_USER 102 +#define ID_PASSWORD 103 +#define ID_TEXT 104 +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +class DlgUser: public wxDialog +{ + public: + bool canceled; + wxString s_DSN, s_User, s_Password; + wxTextCtrl *tc_User, *tc_Password; + //--------------------------------------------------------------------------- + DlgUser(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size,const long style = wxDEFAULT_DIALOG_STYLE); + void OnInit(); + void OnOk(wxCommandEvent& event); + void OnCancel(wxCommandEvent& event); + //--------------------------------------------------------------------------- + DECLARE_EVENT_TABLE() +}; +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/doc.cpp b/demos/dbbrowse/doc.cpp new file mode 100644 index 0000000000..806ceaf397 --- /dev/null +++ b/demos/dbbrowse/doc.cpp @@ -0,0 +1,327 @@ +//--------------------------------------------------------------------------- +// Name: Doc.cpp +// Purpose: Holds information for DBBrowser +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: 19990808.mj10777 +// BJO : Bart A.M. JOURQUIN +// Created: 19990808 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//--------------------------------------------------------------------------- +//-- all #ifdefs that the whole Project needs. ------------------------------ +//--------------------------------------------------------------------------- +#ifdef __GNUG__ + #pragma implementation + #pragma interface +#endif +//--------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +//--------------------------------------------------------------------------- +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +//--------------------------------------------------------------------------- +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +//-- all #includes that every .cpp needs ----19990807.mj10777 --- +//--------------------------------------------------------------------------- +#include "std.h" // sorgsam Pflegen ! +//--------------------------------------------------------------------------- +//-- Some Global Vars for all Files (extern in ?.h needed) ----------------- +// Global structure for holding ODBC connection information + struct DbStuff DbConnectInf; +//--------------------------------------------------------------------------- +wxConfigBase *p_ProgramCfg; // All Config and Path information +wxLogTextCtrl *p_LogBook; // All Log messages +wxString LogBuf; // String for all Logs +//--------------------------------------------------------------------------- +mjDoc::mjDoc() +{ + db_Br = NULL; + p_DSN = NULL; + i_DSN = 0; + p_Splitter = NULL; + p_MainFrame = NULL; + p_PgmCtrl = NULL; // Is not active + p_DBTree = NULL; + p_DBGrid = NULL; + p_LogWin = NULL; + p_TabArea = NULL; + p_PageArea = NULL; + i_TabNr = 0; + i_PageNr = 0; +} +//--------------------------------------------------------------------------- +mjDoc::~mjDoc() +{ + // ---------------------------------------------------------- + // -E-> The Tree Controls take to long to close : Why ?? + // ---------------------------------------------------------- + // wxMessageBox("-I-> end Doc"); + p_TabArea->Show(FALSE); // Deactivate the Window + p_PageArea->Show(FALSE); // Deactivate the Window + p_PgmCtrl = NULL; + delete p_PgmCtrl; + delete [] p_DSN; + delete p_DBTree; + p_TabArea = NULL; delete p_TabArea; + p_PageArea = NULL; delete p_PageArea; + p_Splitter = NULL; + delete p_Splitter; + delete [] db_Br; + // wxMessageBox("~mjDoc"); +} +//--------------------------------------------------------------------------- +bool mjDoc::OnNewDocument() +{ + //------------------------------------------------------------------- + if (!OnInitView()) // LogBook is now activ + return FALSE; + p_PgmCtrl->OnPopulate(); + //------------------------------------------------------------------- + return TRUE; +} +//--------------------------------------------------------------------------- +bool mjDoc::OnInitView() +{ + Sash = p_ProgramCfg->Read("/MainFrame/Sash", 200); + // wxMessageBox("OnInitView() - Begin ","-I->mjDoc::OnInitView"); + //-------------------------------------------------------------------------- + // create "workplace" window + //-------------------------------------------------------------------------- + p_TabArea = new wxTabbedWindow(); // Init the Pointer + p_TabArea->Create(p_Splitter, -1); + //-------------------------------------------------------------------------- + p_PgmCtrl = new PgmCtrl(p_TabArea, TREE_CTRL_PGM,wxDefaultPosition, wxDefaultSize, + wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); + p_PgmCtrl->i_TabArt = 0; // 0 = Tab ; 1 = Page + p_PgmCtrl->i_ViewNr = p_TabArea->GetTabCount()-1; + //-------------------------------------------------------------------------- + wxBitmap *p_FolderClose = new wxBitmap("PgmCtrl"); //, wxBITMAP_TYPE_BMP_RESOURCE); // BJO20000115 + //-------------------------------------------------------------------------- + p_TabArea->AddTab(p_PgmCtrl,"PgmCtrl",p_FolderClose); + //-------------------------------------------------------------------------- + // now create "output" window + //-------------------------------------------------------------------------- + p_PageArea = new wxPaggedWindow(); // Init the Pointer + p_PageArea->Create(p_Splitter, -1); + //-------------------------------------------------------------------------- + p_LogWin = new wxTextCtrl(p_PageArea,-1,wxEmptyString, + wxDefaultPosition, wxDefaultSize,wxTE_MULTILINE ); + wxFont* ft_Temp = new wxFont(10,wxSWISS,wxNORMAL,wxBOLD,FALSE,"Comic Sans MS"); + p_LogWin->SetFont(* ft_Temp); + // Don't forget ! This is always : i_TabArt = 0 ; i_ViewNr = 1; + //------------------------------------------------------------------ + p_LogBook = new wxLogTextCtrl(p_LogWin); // make p_LogWin the LogBook + p_LogBook->SetActiveTarget(p_LogBook); + p_LogBook->SetTimestamp( NULL ); + //------------------------------------------------------------------ + p_PageArea->AddTab(p_LogWin,_("LogBook"), "what is this?" ); + i_TabNr = p_TabArea->GetTabCount()-1; // Add one when a new AddTab is done; + i_PageNr = p_PageArea->GetTabCount()-1; // Add one when a new AddTab is done; + //-------------------------------------------------------------------------- + p_PgmCtrl->pDoc = this; + p_TabArea->SetActiveTab(i_PageNr); + //-------------------------------------------------------------------------- + p_Splitter->Initialize(p_TabArea); + p_Splitter->SplitHorizontally(p_TabArea,p_PageArea,Sash); + //-------------------------------------------------------------------------- + + if (!OnInitODBC()) + return FALSE; + //-------------------------------------------------------------------------- + Temp0.Printf("-I-> mjDoc::OnInitView() - End - %d DSN's found",i_DSN); + p_MainFrame->SetStatusText(Temp0, 0); + wxLogMessage(Temp0); + return TRUE; +} +//---------------------------------------------------------------------------------------- +bool mjDoc::OnInitODBC() +{ + char Dsn[SQL_MAX_DSN_LENGTH + 1]; + char DsDesc[255]; // BJO20002501 instead of 512 + Temp0 = ""; + i_DSN = 0; // Counter + int i = 0; + //--------------------------------------------------------------------------- + // Initialize the ODBC Environment for Database Operations + + if (SQLAllocEnv(&DbConnectInf.Henv) != SQL_SUCCESS) + { + return FALSE; + } + //--------------------------------------------------------------------------- + + const char sep = 3; // separator character used in string between DSN ans DsDesc + wxStringList s_SortDSNList, s_SortDsDescList; + // BJO-20000127 + // In order to have same sort result on both Dsn and DsDesc, create a 'keyed' string. + // The key will be removed after sorting + wxString KeyString; + //--------------------------------------------------------------------------- + while(GetDataSource(DbConnectInf.Henv, Dsn, sizeof(Dsn), DsDesc, sizeof(DsDesc))) + { + i_DSN++; // How many Dsn have we ? + KeyString.Printf("%s%c%s",Dsn, sep, DsDesc); + s_SortDSNList.Add(Dsn); + s_SortDsDescList.Add(KeyString); + } + s_SortDSNList.Sort(); //BJO + s_SortDsDescList.Sort(); //BJO + + char ** s_SortDSN = s_SortDSNList.ListToArray(); //BJO + char ** s_SortDsDesc = s_SortDsDescList.ListToArray(); //BJO + //--------------------------------------------------------------------------- + // Allocate n ODBC-DSN objects to hold the information + p_DSN = new DSN[i_DSN]; //BJO + for (i=0;iDsn = s_SortDSN[i]; + (p_DSN+i)->Drv = s_SortDsDesc[i]; + (p_DSN+i)->Usr = ""; + (p_DSN+i)->Pas = ""; + Temp0.Printf("%02d) Dsn(%s) DsDesc(%s)",i,(p_DSN+i)->Dsn,(p_DSN+i)->Drv); + wxLogMessage(Temp0); + } + i = 0; + //--------------------------------------------------------------------------- + // Allocate n wxDatabase objects to hold the column information + db_Br = new BrowserDB[i_DSN]; + for (i=0;ip_LogWindow = p_LogWin; + (db_Br+i)->ODBCSource = (p_DSN+i)->Dsn; + (db_Br+i)->UserName = (p_DSN+i)->Usr; + (db_Br+i)->Password = (p_DSN+i)->Pas; + (db_Br+i)->pDoc = this; + (db_Br+i)->i_Which = i; + } + + if (SQLFreeEnv(&DbConnectInf.Henv) != SQL_SUCCESS) // BJO20000125 + { + // Error freeing environment handle + } + + delete [] s_SortDSN; + delete [] s_SortDsDesc; + + //--------------------------------------------------------------------------- + if (!i_DSN) + { + wxMessageBox(_("No Dataset names found in ODBC!\n" \ + " Program will exit!\n\n" \ + " Ciao"),"-E-> Fatal situation"); + return FALSE; + } + //--------------------------------------------------------------------------- + return TRUE; +} +//---------------------------------------------------------------------------------------- +bool mjDoc::OnChosenDSN(int Which) +{ + // wxLogMessage("OnChosenDSN(%d) - Begin",Which); + //--------------------------------------------------------------------------- + if (p_DBTree != NULL) + { + p_TabArea->Show(FALSE); // Deactivate the Window + p_TabArea->RemoveTab(p_DBTree->i_ViewNr); + p_TabArea->Show(TRUE); // Activate the Window + OnChosenTbl(77,""); + } + //------------------------- + p_TabArea->Show(FALSE); // Deactivate the Window + p_DBTree = new DBTree(p_TabArea, TREE_CTRL_DB,wxDefaultPosition, wxDefaultSize, + wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); + p_TabArea->AddTab(p_DBTree,(p_DSN+Which)->Dsn," ? "); + p_DBTree->i_ViewNr = p_TabArea->GetTabCount()-1; + p_TabArea->Show(TRUE); // Deactivate the Window + p_DBTree->i_Which = Which; + p_DBTree->s_DSN = (p_DSN+Which)->Dsn; + p_DBTree->i_TabArt = 0; + p_DBTree->pDoc = this; + p_DBTree->OnPopulate(); + p_TabArea->SetActiveTab(p_DBTree->i_ViewNr); + //--------------------------------------------------------------------------- + // wxLogMessage("OnChosenDSN(%d) - End",Which); + return TRUE; +} +//---------------------------------------------------------------------------------------- +bool mjDoc::OnChosenTbl(int Tab,wxString Table) +{ + // wxLogMessage("OnChosenTbl(%d,%s)",Tab,Table.c_str()); + //------------------------- + if (p_DBGrid != NULL) + { + if (p_DBGrid->i_TabArt == 0) + { + p_TabArea->Show(FALSE); // Deactivate the Window + p_TabArea->RemoveTab(p_DBGrid->i_ViewNr); + p_TabArea->Show(TRUE); // Activate the Window + } + if (p_DBGrid->i_TabArt == 1) + { + p_PageArea->Show(FALSE); // Deactivate the Window + p_PageArea->RemoveTab(p_DBGrid->i_ViewNr); + p_PageArea->Show(TRUE); // Activate the Window + } + p_DBGrid = NULL; + delete p_DBGrid; + } + if (Tab == 77) // Delete only + return TRUE; + //------------------------- + if (Tab == 0) // Tabview + { + p_TabArea->Show(FALSE); // Deactivate the Window + p_DBGrid = new DBGrid(p_TabArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize, + wxSUNKEN_BORDER); + p_TabArea->AddTab(p_DBGrid, Table, ""); + p_DBGrid->i_ViewNr = p_TabArea->GetTabCount()-1; + p_DBGrid->pDoc = this; + p_DBGrid->db_Br = db_Br; + p_DBGrid->OnTableView(Table); + p_TabArea->SetActiveTab(p_DBGrid->i_ViewNr); + p_TabArea->Show(TRUE); // Activate the Window + } + if (Tab == 1) // Pageview + { + p_PageArea->Show(FALSE); // Deactivate the Window + p_DBGrid = new DBGrid(p_PageArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize, + wxSUNKEN_BORDER); + p_PageArea->AddTab(p_DBGrid, Table, ""); + p_DBGrid->i_ViewNr = p_PageArea->GetTabCount()-1; + p_DBGrid->pDoc = this; + p_DBGrid->db_Br = db_Br; + p_DBGrid->i_Which = p_DBTree->i_Which; + p_PageArea->Show(TRUE); // Activate the Window + p_DBGrid->OnTableView(Table); + p_PageArea->SetActiveTab(p_DBGrid->i_ViewNr); + } + p_DBGrid->i_TabArt = Tab; + //---*---------------------- + return TRUE;; +} +//---------------------------------------------------------------------------------------- +void mjDoc::OnLeer(wxString Aufrufer) +{ + // Temp0.Printf(_("\nmjDoc::OnLeer(%s) : auch diese funktion steht eines Tages zur Verfügung !"),Aufrufer.c_str()); + Temp0.Printf(_("\nmjDoc::OnLeer(%s) : even this function will one day be available !"),Aufrufer.c_str()); + wxLogMessage(Temp0); Temp0.Empty(); + return; +} +//---------------------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(DocSplitterWindow, wxSplitterWindow) +END_EVENT_TABLE() +//---------------------------------------------------------------------------------------- +// Define a constructor for my p_Splitter +DocSplitterWindow::DocSplitterWindow(wxWindow *parent, wxWindowID id) : wxSplitterWindow(parent, id) +{ +} +//---------------------------------------------------------------------------------------- diff --git a/demos/dbbrowse/doc.h b/demos/dbbrowse/doc.h new file mode 100644 index 0000000000..0604986d8f --- /dev/null +++ b/demos/dbbrowse/doc.h @@ -0,0 +1,81 @@ +//--------------------------------------------------------------------------- +// Name: Doc.h +// Purpose: First attempt to make a MDIProgram with a Tree and ListView +// Author: Mark Johnson, mj10777@gmx.net +// Modified by: 19990808.mj10777 +// Created: 19990808 +// Copyright: (c) Mark Johnson +// Licence: wxWindows license +//------------------------------------------------------------------------------ +//-- Some Global Vars ------------------------------------------------------ +//------------------------------------------------------------------------------ +class DSN +{ + public: + wxString Dsn; + wxString Drv; + wxString Pas; + wxString Usr; +}; + // Global structure for holding ODBC connection information +extern struct DbStuff DbConnectInf; +//------------------------------------------------------------------------------ +extern wxConfigBase *p_ProgramCfg; // All Config and Path information +extern wxLogTextCtrl *p_LogBook; // All Log messages +extern wxString LogBuf; // String for all Logs +//--------------------------------------------------------------------------- +class PgmCtrl; // Declared in PgmCtrl.h file +class DocSplitterWindow; // Declared at the end of the file +//--------------------------------------------------------------------------- +class mjDoc +{ + public: + //--------------------------------------------------------------------------- + mjDoc(); + virtual ~mjDoc(); + int Sash; + //--------------------------------------------------------------------------- + //-- declare document Vars here --------------------------------------------- + //--------------------------------------------------------------------------- + wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; + BrowserDB *db_Br; // Pointer to wxDB + DSN *p_DSN; + int i_DSN; // Counter + //--------------------------------------------------------------------------- + DocSplitterWindow *p_Splitter; + wxFrame *p_MainFrame; // SDI Version + PgmCtrl *p_PgmCtrl; + DBTree *p_DBTree; + DBGrid *p_DBGrid; + wxTextCtrl *p_LogWin; + wxTabbedWindow *p_TabArea; + wxPaggedWindow *p_PageArea; + int i_TabNr; // Amount of active Views in Tab + int i_PageNr; // Amount of active Views in Page + //--------------------------------------------------------------------------- + //-- declare document Functions here ---------------------------------------- + //--------------------------------------------------------------------------- + bool OnNewDocument(); + bool OnInitView(); + bool OnInitODBC(); + bool OnChosenDSN(int Which); + bool OnChosenTbl(int Tab,wxString Table); + //--------------------------------------------------------------------------- + void OnLeer(wxString Aufrufer); // Dummy Funktion + //--------------------------------------------------------------------------- +}; +class DocSplitterWindow: public wxSplitterWindow +{ + public: + mjDoc *pDoc; + DocSplitterWindow(wxWindow *parent, wxWindowID id); + virtual bool OnSashPositionChange(int newSashPosition) + { + if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition) ) + return FALSE; + pDoc->Sash = newSashPosition; + return TRUE; + } + DECLARE_EVENT_TABLE() +}; +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/fr/wxstd.mo b/demos/dbbrowse/fr/wxstd.mo new file mode 100644 index 0000000000..89c03eaf60 Binary files /dev/null and b/demos/dbbrowse/fr/wxstd.mo differ diff --git a/demos/dbbrowse/g.cmd b/demos/dbbrowse/g.cmd new file mode 100755 index 0000000000..164b338e58 --- /dev/null +++ b/demos/dbbrowse/g.cmd @@ -0,0 +1,2 @@ + DBBrowse + diff --git a/demos/dbbrowse/go.cmd b/demos/dbbrowse/go.cmd new file mode 100755 index 0000000000..b5db2de141 --- /dev/null +++ b/demos/dbbrowse/go.cmd @@ -0,0 +1,2 @@ + set WXWIN=F:\wxWindows + nmake -f makefile.vc FINAL=1 diff --git a/demos/dbbrowse/gogcc.cmd b/demos/dbbrowse/gogcc.cmd new file mode 100755 index 0000000000..25605df667 --- /dev/null +++ b/demos/dbbrowse/gogcc.cmd @@ -0,0 +1,5 @@ + set WXWIN=F:/wxWindows22B + set WXWIN=F:/wxWindows + make -f makefile.g95 + rem st + set WXWIN=F:\wxWindows diff --git a/demos/dbbrowse/govc.cmd b/demos/dbbrowse/govc.cmd new file mode 100755 index 0000000000..11bfe912c7 --- /dev/null +++ b/demos/dbbrowse/govc.cmd @@ -0,0 +1,3 @@ + set WXWIN=F:\wxWindows22B + set WXWIN=F:\wxWindows + nmake -f makefile.vc FINAL=1 diff --git a/demos/dbbrowse/help.cz/wxstd.mo b/demos/dbbrowse/help.cz/wxstd.mo new file mode 100644 index 0000000000..ebceb3394c Binary files /dev/null and b/demos/dbbrowse/help.cz/wxstd.mo differ diff --git a/demos/dbbrowse/help.de/compiler.htm b/demos/dbbrowse/help.de/compiler.htm new file mode 100644 index 0000000000..d1b8747402 --- /dev/null +++ b/demos/dbbrowse/help.de/compiler.htm @@ -0,0 +1,50 @@ + +DBBrowser Hilfe : Compiler +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Wo wurde DBBrowser Compiliert und mit was ?


(deutsch)

+ Stand: 2000-01-23.01-mj10777


+ + + +
 Windows NT 4.0 Server - SP 4 VC++ 6.0 Compiler
+ + +
wxWindows CVS 21.01.2000 18:00Statische Bibliothek
nmake -f makefile.vc FINAL=1
+ + +
Mark Johnson, Berlin GermanyKleine .EXE und stable

+ + + +
 Windows NT 4.0 Server - SP 4 mingw32 gcc-2.95 Compiler
+ + +
wxWindows CVS 21.01.2000 18:00Statische Bibliothek
make -f makefile.g95
+ + +
Mark Johnson, Berlin GermanyGroße .EXE und instable

+ + + +
 Linux - Redhat 6.1 gcc Compiler ?
+ + +
wxWindows  CVS ??.01.2000 ??:00??
+ + +
????

+ + + +
 Linux - SuSE 6.1 gcc Compiler ?
+ + +
wxWindows  CVS ??.01.2000 ??:00??
+ + +
????

+ + diff --git a/demos/dbbrowse/help.de/dbbrowse.hhc b/demos/dbbrowse/help.de/dbbrowse.hhc new file mode 100644 index 0000000000..6cc864928a --- /dev/null +++ b/demos/dbbrowse/help.de/dbbrowse.hhc @@ -0,0 +1,68 @@ + + + + + + + + + +
    +
  • + + + + +
  • + + + + +
      +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    +
  • + + + +
      +
    • + + + +
        +
      • + + + +
      • + + + +
      +
    • + + + +
    +
+ diff --git a/demos/dbbrowse/help.de/dbbrowse.hhk b/demos/dbbrowse/help.de/dbbrowse.hhk new file mode 100644 index 0000000000..cea1aff9d0 --- /dev/null +++ b/demos/dbbrowse/help.de/dbbrowse.hhk @@ -0,0 +1,31 @@ + + + + + + +
    +
  • + + + + +
  • + + + + +
      +
    • + + + + +
    • + + + + +
    +
+ diff --git a/demos/dbbrowse/help.de/dbbrowse.hhp b/demos/dbbrowse/help.de/dbbrowse.hhp new file mode 100644 index 0000000000..cd01ae0176 --- /dev/null +++ b/demos/dbbrowse/help.de/dbbrowse.hhp @@ -0,0 +1,22 @@ +[OPTIONS] +Compatibility=1.1 +Compiled file=testing.chm +Contents file=dbbrowse.hhc +Display compile progress=No +Index file=dbbrowse.hhk +Language=0x405 Hesky +Title=DBBrowser Handbuch +Default topic=sample.htm + +[FILES] +dbbrowse.htm +compiler.htm +icons.htm +problems.htm +startprm.htm +picgrams.htm +remstar.htm +wxdb.htm +getcol.htm +getcolsh.htm +wxtable.htm diff --git a/demos/dbbrowse/help.de/dbbrowse.htm b/demos/dbbrowse/help.de/dbbrowse.htm new file mode 100644 index 0000000000..35f2aba667 --- /dev/null +++ b/demos/dbbrowse/help.de/dbbrowse.htm @@ -0,0 +1,24 @@ + +DBBrowser Hilfe : Übersicht +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser


(deutsch)

+ Stand: 2000-01-22.01-mj10777


+ + + + +
+ + + +
+ + + +
+ +
+ diff --git a/demos/dbbrowse/help.de/getcol.htm b/demos/dbbrowse/help.de/getcol.htm new file mode 100644 index 0000000000..a10dd8bb48 --- /dev/null +++ b/demos/dbbrowse/help.de/getcol.htm @@ -0,0 +1,118 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +


Remstar ODBC Classes :
Die neue wxDB::GetColumns() Funktion
Beschreibung


(deutsch)

+ Stand: 2000-01-23.01-mj10777


+ + + +
Es gibt 2 neue wxDB Funktionen :
+ + + + +
wxColInf *wxDB::GetColumns(char *tableName, int *numCols, const char *userID)
+ + +
Diese Funktion sichert alle (int numCols) Informationen aus der Tabelle (char *tableName).
Es gibt das Ergebnis in eine wxColInf Stuktur (Klasse)
+ +

+ + +
int wxDB::GetKeyFields(char *tableName, wxColInf* colInf,int noCols)
+ + +
Versucht herauszufinden ob irgend welche (int noCols) Spalten (wxColInf* colInf)
aus der Tabelle (char *tableName)  Primär- oder  Fremdschlüssel sind.
Diese Funktion wird aus GetColumns() aufgerufen.


+ + + +
Es gibt 4 neue wxDB Klassen (Strukturen) :
+ +

+ + +
wxDbInf
+ + +
+ Diese Klasse speichert alle ODBC-Informationen für einen Datenbank :
+ Katalogeintrag (char catalog[128+1]),
+ Schema (char schema[128+1])
+ der Anzahl gefundene Tabellen (int numTables)
+ und eine Zeiger auf der (wxTableInf* pTableInf) Struktur. +
+ +

+ + +
wxTableInf
+ + +
+ Diese Klasse speichert alle ODBC-Informationen für einen Tabelle :
+ Tabellename (char tableName[DB_MAX_TABLE_NAME_LEN+1]),
+ Tabelletyp (char tableType[254+1]) - "TABLE", "SYSTEM TABLE" etc. ,
+ Tabellen Bemerkungen (char tableRemarks[254+1]),
+ der Anzahl gefundene Spalten (int numCols)
+ und eine Zeiger auf der (wxColInf* pColInf) Struktur. +
+ +

+ + +
wxColInf
+ + +
+ Diese Klasse speichert alle ODBC-Informationen für einen Spalte :
+ Katalogeintrag (char catalog[128+1]),
+ Schema (char schema[128+1])
+ Tabellename (char tableName[DB_MAX_TABLE_NAME_LEN+1]),
+ Spaltenname (char colName[DB_MAX_COLUMN_NAME_LEN+1]),
+ Datentyp (aus SQL) (SWORD sqlDataType),
+ Datatyp-Name(aus SQL) (char typeName[128+1]),
+ Spaltengröße(aus SQL) (SWORD columnSize),
+ Pufferlänge(aus SQL) (SWORD bufferLength),
+ Dezimalstellen(aus SQL) (short decimalDigets),
+ numPrecRadix (aus SQL) (short numPrecRadix),
+ Null-Fähig (aus SQL) (short nullable),
+ Bemerkungen (char remarks[254+1]),
+ Datatype (from wxDB) (int dbDataType),
+ Primärschlüssel (int PkCol) 0=Nein; 1= Erste Schlüssel, 2 = Zweite Schlüssel usw.,
+ Tabllennamen die diese Schlüssel als Fremdschlüssel verwenden (char PkTableName[DB_MAX_TABLE_NAME_LEN+1]),
+ Foreign-Key (int FkCol) 0=Nein; 1= Erste Schlüssel, 2 = Zweite Schlüssel usw.,
+ Tabellename wo diese Fremdschlüssel als Primärschlüssel (char FkTableName[DB_MAX_TABLE_NAME_LEN+1]),
+ und eine Zeiger auf der (wxColFor* pColFor) Struktur. +
+ +

+ + +
wxColFor
+ + +
+ Diese Klasse speichert wie diese Spalte als String formatiert werden soll :
+ Ausgabestring (wxString s_Field),
+ Formatierte Objekten (TIMESTAMP needs 7) (wxString s_Format[7]),
+ Formatierte Objekten (wxString s_Menge[7]),
+ Formatierte Objekten (TT MM YYYY HH MM SS m) (int i_Menge[7]),
+ Nation (0=timestamp,1=EU,2=UK,3=International,4=US)int i_Nation),
+ Datatyp (aus wxDB) (int I_dbDataType),
+ Datatyp (aus SQL) (SWORD i_sqlDataType),
+ int Format(int Nation, int dbDataType,SWORD sqlDataType,short columnSize,short decimalDigits);
+ Die Formatierte Objekten bekommen Standardwerte und Format() wird aufgerufen.
+ Die Programmierer können, wenn sie was besonderes haben wollen , diese Werte Ändern und Format() nochmal aufrufen. +
+ + +
Diese Klasse ist eindeutig unterentwickelt !
Es wurde erstmal zur Verwirklichung von DBGrid erstellt.
Änderungen sind Wahrscheinlich. (Vorschläge sind Willkommen)

+ + + +
Damit ist wohl alles klar, oder ?


+ + diff --git a/demos/dbbrowse/help.de/getcolsh.htm b/demos/dbbrowse/help.de/getcolsh.htm new file mode 100644 index 0000000000..08dec3e9a7 --- /dev/null +++ b/demos/dbbrowse/help.de/getcolsh.htm @@ -0,0 +1,53 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +


Remstar ODBC Classes :
The new wxDB::GetColumns() Function
How do you use it ?


(English)

+ Stand: 2000-01-23.01-mj10777


+ + + +

+ + + +
How does it work ?
+ + + +
Basicly you use a 3 Dimentional Dynamic Array
+ + +
wxDBInf --> wxTableInf --> wxColInf

+ + + +
Using DBBrowser as the Example, I will try to explain how it works
+ + +
Sorry, the rest will have to come later !!
+ + +


+ + + + + +
+ + +

+ + + +

+ + + +
Well now, that makes everything clear does't it?


+ + + diff --git a/demos/dbbrowse/help.de/icons.htm b/demos/dbbrowse/help.de/icons.htm new file mode 100644 index 0000000000..913caefac9 --- /dev/null +++ b/demos/dbbrowse/help.de/icons.htm @@ -0,0 +1,40 @@ + +DBBrowser Hilfe : Icons +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Icon Verwendung (.ICO / .XPM)


(deutsch)

+ Stand: 2000-01-22.01-mj10777


+ + + +
Welche Icons werden für was verwendet ?
+ + +
*.xpm sind nicht auf  Linux getestet !
+ + + + + + + + + + + + + + + +
 col.ico / col.xpmdbtree.cpp :
ODBC Spalte in eine Tabelle (weder Primär- noch Fremdschlüssel)
 d_closed.ico / d_closed.xpmpgmctrl + dbtree.cpp :
letzte Baumzweig (nicht angeklickt)
 d_open.ico / d_open.xpmpgmctrl + dbtree.cpp :
letzte Baumzweig (angeklickt)
 dsn.ico / dsn.xpmgute Frage
 dsnclose.ico / dsnclose.xpmpgmctrl.cpp :
Hauptzweig der ODBC-Datenquellebaum (nicht angeklickt)
 dsnopen.ico / dsnopen.xpmpgmctrl.cpp :
Hauptzweig der ODBC-Datenquellebaum (angeklickt)
 f_closed.ico / f_closed.xpmpgmctrl.cpp :
Hauptzweig der Programm-Einstellungsbaum (nicht angeklickt)
 f_open.ico / f_open.xpmpgmctrl.cpp :
Hauptzweig der Programm-Einstellungsbaum (angeklickt)
 key.ico / key.xpmdbtree.cpp :
ODBC Primärschlüssel-Spalte in eine Tablle
 keyf.ico / keyf.xpmdbtree.cpp :
ODBC Fremdschlüssel-Spalte in eine Tablle
 logo.ico / logo.xpmProgramm Logo
 pgmctrl.ico / pgmctrl.xpm / pgmctrl.bmppgmctrl.cpp :
Tab Bitmap
 tab.ico / tab.xpmdbtree.cpp :
ODBC Tabelle
+ + +
Alle andere Pictograms werden nicht in DBBrowser verwendet.
(sind .png Files)
+

+ +
Hoffentlich wird der Zeit bald kommen, wo man auschlie_lich XPM Dateien verwenden darf.
+ +


+ diff --git a/demos/dbbrowse/help.de/picgrams.htm b/demos/dbbrowse/help.de/picgrams.htm new file mode 100644 index 0000000000..37d05457c0 --- /dev/null +++ b/demos/dbbrowse/help.de/picgrams.htm @@ -0,0 +1,37 @@ + +DBBrowser Help : Pictograms +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Verwendete Pictograms (*.png)


(deutsch)

+ Stand: 2000-01-23.01-mj10777


+ + + +
Die wahre Bedeutung der verwendete Pictograms in diese Hilfe Dateien
+ + +
Alle Pictograms sind .PNG Dateien (Portable Network Graphics)
Ich verwende Paint Shop Pro 5.01 um diese Dateien zuerstellen.
+ + + + + + + + + + + + + + + +
 imbau.pngSeite ist nicht fertig
 gnu.pngGNU Logo : gcc 2.95 Compiler
 gtk.pngGTK Logo : Grafische Bibliothek in Linux
 kde.pngKDE Logo : Grafische System in Linux
 linux.pngLinux Logo : Linux (Allgemein)
 motif.pngMotif Logo : Grafische Bibliothek in Linux (ist diese Logo korrect ?)
 msvc.pngMicrosoft VC++ Logo : VC++ 6.0 Compiler
 odbc.pngODBC Logo
 remstar.pngRemstar Logo : Remstar ODBC-Klassen (http://www.remstar.com)
 redh.pngRedhat Logo : Linux Vertreiber (http://www.redhat.com / .de)
 suse.pngSuSE Logo : Linux Vertreiber (http://www.suse.com / .de)
 server.pngServer Logo
 wins.pngWindows Logo : Windows (Allgemein)
 winnt.pngWindows-NT Logo : Windows-NT speziefisch
+

+ +
Alle andere Pictograms sind .PNG-Kopien von der DBBrowser-Icons.
+ +


+ diff --git a/demos/dbbrowse/help.de/problems.htm b/demos/dbbrowse/help.de/problems.htm new file mode 100644 index 0000000000..cfb8eee771 --- /dev/null +++ b/demos/dbbrowse/help.de/problems.htm @@ -0,0 +1,76 @@ + +DBBrowser Hilfe : Probleme +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Was Funktionert nicht ?


(deutsch)

+ Stand: 2000-01-22.01-mj10777 + +


+ +
Allgemein
+ + + +
Problem :  Nur gcc 2.95 Compiler :
Assurt failed in file ../../src/msw/fontutil.cpp at line 238: unknown font slant
Lösung :nicht bekannt

+ + + +
Problem :  Nur gcc 2.95 Compiler :
Assurt failed in file ../../src/msw/fontutil.cpp at line 249: unknown font weight
Lösung :nicht bekannt

+


+ +
wxHtmlHelpController
+ + +
Problem :Wenn der Hilfe geschlossen wird wenn der Voll-HTML-Seite Modus an ist - sieht man nichts wenn Hilfe wieder gestartet wird. (Seite ist Grau)
+ + +
Taste Links-Oben drücken um in die geteilte Seitenmodus wiederzugelangen.
+ + +
Lösung :unbekannt

+ + + + +
Problem :Die Rechteseite (HTLM-Seite) bldttert nicht bei der Verwendung der Maus-Mittelrad.
Auf der Linkeseite funktioniert es.
Lösung :unbekannt

+ + + + +
Problem :Warum Funktioniert die Aktulisierungs-Taste (F5) nicht?
Lösung :unbekannt

+ + + + +
Problem :Wie kann die Hilfe Themenbezogen aufgerufen werden ? Eine bestimmte Seite wird ervffnet
Lösung :unbekannt

+ + + +
Problem :Bilder, die mit HelpView zusehen sind, erscheint nicht wenn OnHelp() aufgerufen wird.
+ + +
Logbuch : Warning: No handler found for image type.
Warnung: Kein Handler für Bildtyp gefunden
Warum kamm diese Text nicht auf Deutsch ?
+ + +
Lösung :
Folgende Zeilen in DBBrowser.cpp(MyApp::OnInit()) hinzugefügt:
#if wxUSE_LIBPNG
wxImage::AddHandler( new wxPNGHandler );
#endif

+ +


+ +
wxGrid (Neue Version)
+ + + +
Problem :Wenn wxGrid in wxPaggedWindows verwendet wird, funktioniert die Scrollbars nicht.
Lösung :unbekannt

+ +


+ +
ndchste Problem
+ + + +
Problem :irgend etwas taucht schon auf, wie immer.
Lösung :unbekannt

+ +


+ diff --git a/demos/dbbrowse/help.de/remstar.htm b/demos/dbbrowse/help.de/remstar.htm new file mode 100644 index 0000000000..35869b61f0 --- /dev/null +++ b/demos/dbbrowse/help.de/remstar.htm @@ -0,0 +1,15 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 Remstar ODBC Klassen :


(deutsch)

+ Stand: 2000-01-22.01-mj10777


+ + + +
TODO
+ +
+ diff --git a/demos/dbbrowse/help.de/sample.htm b/demos/dbbrowse/help.de/sample.htm new file mode 100644 index 0000000000..551e91bdca --- /dev/null +++ b/demos/dbbrowse/help.de/sample.htm @@ -0,0 +1,25 @@ + +DBBrowser Hilfe : Beispiel HTLM Seite +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Beispielseite


(deutsch)

+ Stand: 2000-01-22.01-mj10777


+ + + +
Blau (CCFFFF)
+ + + +
Gelb (FFFFAA)Hellgelb (FFFFE0)
Hellgrün <TH BGCOLOR=#CCFFCC>
Hintergrundsfarbe für diese teil der Tabelle
<BODY BGCOLOR=#C6DFC6>
Seitehintergrundsfarbe
+

+ +
Gold <TR BGCOLOR=#FFF777>
Hintergrundsfarbe für die Gesamte Tabelle
+

+ +
Rosa (FFBBBB)
+ +


+ diff --git a/demos/dbbrowse/help.de/startprm.htm b/demos/dbbrowse/help.de/startprm.htm new file mode 100644 index 0000000000..c898d1072e --- /dev/null +++ b/demos/dbbrowse/help.de/startprm.htm @@ -0,0 +1,24 @@ + +DBBrowser Hilfe : Start parameter +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Start Parameter (Internationalizierung)


(deutsch)

+ Stand: 2000-01-22.01-mj10777


+ + + +
DBBrowser xx
+ + +
xx = Sprachecz, de, fr, pl und std (englisch)
+

+ +
Zur Zeit gibt es für Tschechisch (cz), Französch (fr) und Polnisch (pl) keine Hilfe Texte
Alles wurde aber dafür vorbereitet und der lokale wird gesetzt.
+

+ +
DBBrowser wird diese Einstellung solange verwenden bis sie geändert werden (also auch nach Programm Neustart). (wxConfigBase)
In "Programm Einstellungen" kann man (zur Zeit nur) zwischen englisch und deutsch hin und her umschalten.
+ +


+ diff --git a/demos/dbbrowse/help.de/todo.htm b/demos/dbbrowse/help.de/todo.htm new file mode 100644 index 0000000000..d5dfe8e785 --- /dev/null +++ b/demos/dbbrowse/help.de/todo.htm @@ -0,0 +1,80 @@ + +DBBrowser Help : Problems +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Was für / Wann sind neue Funktionen geplanned ?


(deutsch)

+ Stand: 2000-01-22.01-mj10777 + +


+ +
Allgemein
+ + + +
Funktion :Wann wird es Möglich mehr als eine DSN / DBGrid Fenster aufzumachen?
Zeitplan :bald, da es für mich wichtig ist.

+ +


+ +
DBGrid
+ + + +
Funktion :Unterstützung für Neue, Löschen und Ändern eines Datensatz.
Zeitplan :Irgenwann Während meine jetztige Projekt.

+ +


+ +
DBGrid
+ + + +
Funktion :Wann werden Datensätze erst dann eingelesen wenn benötigt wird (Scrolling) ?
Zeitplan :Diese Funktion in für wxGrid geplannt. Ich hoffe bald.

+ +


+ +
DBTree
+ + + +
Funktion :Wann kann DBBrowser eine wxDB und wxTable .cpp/.h Dateien erstellen ?
Zeitplan :Die Funktionen OnDBClass(); OnClass() und OnClassAll(); sind dafür vorbereitet..
Für mich ist es nicht so wichtig. Irgend jemand wird es schon machen (vielleicht für wxStudio ?)

+ +


+ +
24.01.2000 : George Tasker
+ + + +
Have USER NAME and PASSWORD text widgets, or a menu item to enter them.25.01.2000 - done but must be tested +
+ + + +
Rather than have the "40 DSN's found" message at the end of the log book, Put that in the status bar of the frame.24.01.2000 - Done +
+ + + +
Make the grid cells READ-ONLY, since this is a browser (unless you want to make it an editor too -- good idea!)25.01.2000 - done : right mouse click on any grid lable and on popupmenu clicken +
+ + + +
Sort the DSNs in alphabetical order before putting them in the tree26.01.2000 - done +
+ + + +
Have program settings available from a TOOLS / OPTIONS menuWilldo +
+ +
+ +
neue Funktion
+ + + +
Funktion :irgend etwas taucht schon auf, wie immer.
Zeitplan :unknown

+ +


+ diff --git a/demos/dbbrowse/help.de/wxdb.htm b/demos/dbbrowse/help.de/wxdb.htm new file mode 100644 index 0000000000..aef801da46 --- /dev/null +++ b/demos/dbbrowse/help.de/wxdb.htm @@ -0,0 +1,27 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +


Remstar ODBC Classes : wxDB


(deutsch)

+ Stand: 2000-01-23.01-mj10777


+ + + +
Es gibt 2 neue wxDB Funktionen :
+ + + + + + + + +
Beschreibung der neue GetColumns()und GetKeyFields()
wxDbInf
wxTableInf
wxColInf
wxColFor
Wie verwendet man die neue GetColumns()und GetKeyFields()
wxDbInf
wxTableInf
wxColInf
wxColFor
+ + + +
Die andere GetColumns() hat sich nicht geÄndert.
Die dort verwendete CcolInf is allerdings, in wirklichkeit, ein wxColInf ! (typedef wxColInf CcolInf;)

+ + diff --git a/demos/dbbrowse/help.de/wxtable.htm b/demos/dbbrowse/help.de/wxtable.htm new file mode 100644 index 0000000000..02add93dc0 --- /dev/null +++ b/demos/dbbrowse/help.de/wxtable.htm @@ -0,0 +1,15 @@ + +DBBrowser Hilfe : Remstar ODBC Klassen +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 Remstar ODBC Klassen : wxTable


(deutsch)

+ Stand: 2000-01-22.01-mj10777


+ + + +
Diese Klasse wird in DBBrowser nicht verwendet!
+ +
+ diff --git a/demos/dbbrowse/help.png/col.png b/demos/dbbrowse/help.png/col.png new file mode 100644 index 0000000000..3496d89e94 Binary files /dev/null and b/demos/dbbrowse/help.png/col.png differ diff --git a/demos/dbbrowse/help.png/d_closed.png b/demos/dbbrowse/help.png/d_closed.png new file mode 100644 index 0000000000..fab0e79fde Binary files /dev/null and b/demos/dbbrowse/help.png/d_closed.png differ diff --git a/demos/dbbrowse/help.png/d_open.png b/demos/dbbrowse/help.png/d_open.png new file mode 100644 index 0000000000..7e77c77803 Binary files /dev/null and b/demos/dbbrowse/help.png/d_open.png differ diff --git a/demos/dbbrowse/help.png/dsn.png b/demos/dbbrowse/help.png/dsn.png new file mode 100644 index 0000000000..326d01994a Binary files /dev/null and b/demos/dbbrowse/help.png/dsn.png differ diff --git a/demos/dbbrowse/help.png/dsnclose.png b/demos/dbbrowse/help.png/dsnclose.png new file mode 100644 index 0000000000..327f5b2270 Binary files /dev/null and b/demos/dbbrowse/help.png/dsnclose.png differ diff --git a/demos/dbbrowse/help.png/dsnopen.png b/demos/dbbrowse/help.png/dsnopen.png new file mode 100644 index 0000000000..fb13f87ac2 Binary files /dev/null and b/demos/dbbrowse/help.png/dsnopen.png differ diff --git a/demos/dbbrowse/help.png/f_closed.png b/demos/dbbrowse/help.png/f_closed.png new file mode 100644 index 0000000000..afb75a20f6 Binary files /dev/null and b/demos/dbbrowse/help.png/f_closed.png differ diff --git a/demos/dbbrowse/help.png/f_open.png b/demos/dbbrowse/help.png/f_open.png new file mode 100644 index 0000000000..a4cc29c696 Binary files /dev/null and b/demos/dbbrowse/help.png/f_open.png differ diff --git a/demos/dbbrowse/help.png/gnu.png b/demos/dbbrowse/help.png/gnu.png new file mode 100644 index 0000000000..d4efb330c4 Binary files /dev/null and b/demos/dbbrowse/help.png/gnu.png differ diff --git a/demos/dbbrowse/help.png/gtk.png b/demos/dbbrowse/help.png/gtk.png new file mode 100644 index 0000000000..fffa2d5c7e Binary files /dev/null and b/demos/dbbrowse/help.png/gtk.png differ diff --git a/demos/dbbrowse/help.png/imbau.png b/demos/dbbrowse/help.png/imbau.png new file mode 100644 index 0000000000..75ed3d0d7a Binary files /dev/null and b/demos/dbbrowse/help.png/imbau.png differ diff --git a/demos/dbbrowse/help.png/kde.png b/demos/dbbrowse/help.png/kde.png new file mode 100644 index 0000000000..05d95fd73f Binary files /dev/null and b/demos/dbbrowse/help.png/kde.png differ diff --git a/demos/dbbrowse/help.png/key.png b/demos/dbbrowse/help.png/key.png new file mode 100644 index 0000000000..128a52a519 Binary files /dev/null and b/demos/dbbrowse/help.png/key.png differ diff --git a/demos/dbbrowse/help.png/keyf.png b/demos/dbbrowse/help.png/keyf.png new file mode 100644 index 0000000000..4678d31a0a Binary files /dev/null and b/demos/dbbrowse/help.png/keyf.png differ diff --git a/demos/dbbrowse/help.png/linux.png b/demos/dbbrowse/help.png/linux.png new file mode 100644 index 0000000000..47bdea6f39 Binary files /dev/null and b/demos/dbbrowse/help.png/linux.png differ diff --git a/demos/dbbrowse/help.png/logo.png b/demos/dbbrowse/help.png/logo.png new file mode 100644 index 0000000000..03ab75e6a6 Binary files /dev/null and b/demos/dbbrowse/help.png/logo.png differ diff --git a/demos/dbbrowse/help.png/motif.png b/demos/dbbrowse/help.png/motif.png new file mode 100644 index 0000000000..a0c096f8e0 Binary files /dev/null and b/demos/dbbrowse/help.png/motif.png differ diff --git a/demos/dbbrowse/help.png/msvc.png b/demos/dbbrowse/help.png/msvc.png new file mode 100644 index 0000000000..0b64785e7d Binary files /dev/null and b/demos/dbbrowse/help.png/msvc.png differ diff --git a/demos/dbbrowse/help.png/odbc.png b/demos/dbbrowse/help.png/odbc.png new file mode 100644 index 0000000000..41d260f035 Binary files /dev/null and b/demos/dbbrowse/help.png/odbc.png differ diff --git a/demos/dbbrowse/help.png/pgmctrl.png b/demos/dbbrowse/help.png/pgmctrl.png new file mode 100644 index 0000000000..907ce64b61 Binary files /dev/null and b/demos/dbbrowse/help.png/pgmctrl.png differ diff --git a/demos/dbbrowse/help.png/redh.png b/demos/dbbrowse/help.png/redh.png new file mode 100644 index 0000000000..86cf230225 Binary files /dev/null and b/demos/dbbrowse/help.png/redh.png differ diff --git a/demos/dbbrowse/help.png/remstar.png b/demos/dbbrowse/help.png/remstar.png new file mode 100644 index 0000000000..502460fbec Binary files /dev/null and b/demos/dbbrowse/help.png/remstar.png differ diff --git a/demos/dbbrowse/help.png/server.png b/demos/dbbrowse/help.png/server.png new file mode 100644 index 0000000000..4a03bb56f8 Binary files /dev/null and b/demos/dbbrowse/help.png/server.png differ diff --git a/demos/dbbrowse/help.png/suse.png b/demos/dbbrowse/help.png/suse.png new file mode 100644 index 0000000000..1f4be87e3f Binary files /dev/null and b/demos/dbbrowse/help.png/suse.png differ diff --git a/demos/dbbrowse/help.png/tab.png b/demos/dbbrowse/help.png/tab.png new file mode 100644 index 0000000000..c981d81cba Binary files /dev/null and b/demos/dbbrowse/help.png/tab.png differ diff --git a/demos/dbbrowse/help.png/winnt.png b/demos/dbbrowse/help.png/winnt.png new file mode 100644 index 0000000000..5e3cc64e3c Binary files /dev/null and b/demos/dbbrowse/help.png/winnt.png differ diff --git a/demos/dbbrowse/help.png/wins.png b/demos/dbbrowse/help.png/wins.png new file mode 100644 index 0000000000..e692008c4e Binary files /dev/null and b/demos/dbbrowse/help.png/wins.png differ diff --git a/demos/dbbrowse/help.std/compiler.htm b/demos/dbbrowse/help.std/compiler.htm new file mode 100644 index 0000000000..47973f630f --- /dev/null +++ b/demos/dbbrowse/help.std/compiler.htm @@ -0,0 +1,50 @@ + +DBBrowser Hilfe : Compiler +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Where has DBBrowser been Compilied ?


(English)

+ Stand: 2000-01-22.01-mj10777


+ + + +
 Windows NT 4.0 Server - SP 4 VC++ 6.0 Compiler
+ + +
wxWindows CVS 21.01.2000 18:00Static Library
nmake -f makefile.vc FINAL=1
+ + +
Mark Johnson, Berlin GermanySmall .EXE and stable

+ + + +
 Windows NT 4.0 Server - SP 4 mingw32 gcc-2.95 Compiler
+ + +
wxWindows CVS 21.01.2000 18:00Static Library
make -f makefile.g95
+ + +
Mark Johnson, Berlin GermanyBig .EXE and unstable

+ + + +
 Linux - Redhat 6.1 gcc Compiler ?
+ + +
wxWindows  CVS ??.01.2000 ??:00??
+ + +
????

+ + + +
 Linux - SuSE 6.1 gcc Compiler ?
+ + +
wxWindows  CVS ??.01.2000 ??:00??
+ + +
????

+ + diff --git a/demos/dbbrowse/help.std/dbbrowse.hhc b/demos/dbbrowse/help.std/dbbrowse.hhc new file mode 100644 index 0000000000..fc5d29c319 --- /dev/null +++ b/demos/dbbrowse/help.std/dbbrowse.hhc @@ -0,0 +1,68 @@ + + + + + + + + + +
    +
  • + + + + +
  • + + + + +
      +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    +
  • + + + +
      +
    • + + + +
        +
      • + + + +
      • + + + +
      +
    • + + + +
    +
+ diff --git a/demos/dbbrowse/help.std/dbbrowse.hhk b/demos/dbbrowse/help.std/dbbrowse.hhk new file mode 100644 index 0000000000..cea1aff9d0 --- /dev/null +++ b/demos/dbbrowse/help.std/dbbrowse.hhk @@ -0,0 +1,31 @@ + + + + + + +
    +
  • + + + + +
  • + + + + +
      +
    • + + + + +
    • + + + + +
    +
+ diff --git a/demos/dbbrowse/help.std/dbbrowse.hhp b/demos/dbbrowse/help.std/dbbrowse.hhp new file mode 100644 index 0000000000..f5a9fa0f5b --- /dev/null +++ b/demos/dbbrowse/help.std/dbbrowse.hhp @@ -0,0 +1,22 @@ +[OPTIONS] +Compatibility=1.1 +Compiled file=testing.chm +Contents file=dbbrowse.hhc +Display compile progress=No +Index file=dbbrowse.hhk +Language=0x405 Hesky +Title=DBBrowser Handbook +Default topic=sample.htm + +[FILES] +dbbrowse.htm +compiler.htm +icons.htm +problems.htm +startprm.htm +picgrams.htm +remstar.htm +wxdb.htm +getcol.htm +getcolsh.htm +wxtable.htm diff --git a/demos/dbbrowse/help.std/dbbrowse.htm b/demos/dbbrowse/help.std/dbbrowse.htm new file mode 100644 index 0000000000..ec00304f26 --- /dev/null +++ b/demos/dbbrowse/help.std/dbbrowse.htm @@ -0,0 +1,24 @@ + +DBBrowser Help : +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser


(English)

+ Stand: 2000-01-22.01-mj10777


+ + + + +
+ + + +
+ + + +
+ +
+ diff --git a/demos/dbbrowse/help.std/getcol.htm b/demos/dbbrowse/help.std/getcol.htm new file mode 100644 index 0000000000..d1bc4c879a --- /dev/null +++ b/demos/dbbrowse/help.std/getcol.htm @@ -0,0 +1,118 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +


Remstar ODBC Classes :
The new wxDB::GetColumns() Function
Description


(English)

+ Stand: 2000-01-23.01-mj10777


+ + + +
There are 2 new wxDB Functions :
+ +
+ + +
wxColInf *wxDB::GetColumns(char *tableName, int *numCols, const char *userID)
+ + +
This Function stores all (int numCols) information from the Table (char *tableName).
It returns the result in a wxColInf Stucture (Class)
+ +

+ + +
int wxDB::GetKeyFields(char *tableName, wxColInf* colInf,int noCols)
+ + +
Tries to find out if any (int noCols) of the columns (wxColInf* colInf)
in the Table (char *tableName) are  Primary or  Foreign Keys.
This Function is only called from GetColumns().


+ + + +
There are 4 new wxDB Classes (Structures) :
+ +

+ + +
wxDbInf
+ + +
+ This Class stores all ODBC-Information for a Database :
+ Catalog Entry (char catalog[128+1]),
+ Schema (char schema[128+1])
+ the number of Tables found(int numTables)
+ and a Pointer (wxTableInf* pTableInf) Structure is stored. +
+ +

+ + +
wxTableInf
+ + +
+ This Class stores all ODBC-Information about a Table :
+ Table-Name (char tableName[DB_MAX_TABLE_NAME_LEN+1]),
+ Table-Type (char tableType[254+1]) - "TABLE", "SYSTEM TABLE" etc. ,
+ Table-Remarks (char tableRemarks[254+1]),
+ the number of Columns found(int numCols)
+ and a Pointer (wxColInf* pColInf) Structure is stored. +
+ +

+ + +
wxColInf
+ + +
+ This Class stores all ODBC-Information about a Column :
+ Catalog Entry (char catalog[128+1]),
+ Schema (char schema[128+1])
+ Table-Name (char tableName[DB_MAX_TABLE_NAME_LEN+1]),
+ Column-Name (char colName[DB_MAX_COLUMN_NAME_LEN+1]),
+ Datatype (from SQL) (SWORD sqlDataType),
+ Data-Name(from SQL) (char typeName[128+1]),
+ Column size(from SQL) (SWORD columnSize),
+ Buffer length(from SQL) (SWORD bufferLength),
+ Decimal digits(from SQL) (short decimalDigits),
+ numPrecRadix (from SQL) (short numPrecRadix),
+ Nullable (from SQL) (short nullable),
+ Remarks (char remarks[254+1]),
+ Datatype (from wxDB) (int dbDataType),
+ Primary-Key (int PkCol) 0=No; 1= First Key, 2 = Second Key etc.,
+ Tables that use this Key as a Foreign Key(char PkTableName[DB_MAX_TABLE_NAME_LEN+1]),
+ Foreign-Key (int FkCol) 0=No; 1= First Key, 2 = Second Key etc.,
+ Table-Name where this Foreign-Key is Primary Key(char FkTableName[DB_MAX_TABLE_NAME_LEN+1]),
+ and a Pointer (wxColFor* pColFor) Structure is stored. +
+ +

+ + +
wxColFor
+ + +
+ This Class stores how this Column should be formated in a String :
+ Output String (wxString s_Field),
+ Formatted Objects (TIMESTAMP needs 7) (wxString s_Format[7]),
+ Formatted Objects (wxString s_Menge[7]),
+ Formatted Objects (TT MM YYYY HH MM SS m) (int i_Menge[7]),
+ National (0=timestamp,1=EU,2=UK,3=International,4=US)int i_Nation),
+ Datatype (from wxDB) (int I_dbDataType),
+ Datatype (from SQL) (SWORD i_sqlDataType),
+ int Format(int Nation, int dbDataType,SWORD sqlDataType,short columnSize,short decimalDigits);
+ The Formatted Objects receive Standard Values and Format() is called.
+ The Programmers can, if they want something special , change these Values and call Format() again +
+ + +
This class is most definitely very much underdeveloped !
It was made so that the DBGrid could be realised.
Changes here are probable. (Suggestions welcomed)

+ + + +
Well now, that makes everything clear does't it?


+ + diff --git a/demos/dbbrowse/help.std/getcolsh.htm b/demos/dbbrowse/help.std/getcolsh.htm new file mode 100644 index 0000000000..08dec3e9a7 --- /dev/null +++ b/demos/dbbrowse/help.std/getcolsh.htm @@ -0,0 +1,53 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +


Remstar ODBC Classes :
The new wxDB::GetColumns() Function
How do you use it ?


(English)

+ Stand: 2000-01-23.01-mj10777


+ + + +

+ + + +
How does it work ?
+ + + +
Basicly you use a 3 Dimentional Dynamic Array
+ + +
wxDBInf --> wxTableInf --> wxColInf

+ + + +
Using DBBrowser as the Example, I will try to explain how it works
+ + +
Sorry, the rest will have to come later !!
+ + +


+ + + + + +
+ + +

+ + + +

+ + + +
Well now, that makes everything clear does't it?


+ + + diff --git a/demos/dbbrowse/help.std/icons.htm b/demos/dbbrowse/help.std/icons.htm new file mode 100644 index 0000000000..51b0947c7d --- /dev/null +++ b/demos/dbbrowse/help.std/icons.htm @@ -0,0 +1,39 @@ + +DBBrowser Help : Icons useage +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Used Icons (.ICO / .XPM)


(English)

+ Stand: 2000-01-22.01-mj10777


+ + + +
Which Icons are used for what ?
+ + +
*.xpm have not been tested with   Linux as of yet !
+ + + + + + + + + + + + + + +
 col.ico / col.xpmdbtree.cpp :
ODBC Column in a Table (not a Primary or Foreign Key)
 d_closed.ico / d_closed.xpmpgmctrl + dbtree.cpp :
last branch of Tree (not selected)
 d_open.ico / d_open.xpmpgmctrl + dbtree.cpp :
last Branch of tree (selected)
 dsn.ico / dsn.xpmgood question
 dsnclose.ico / dsnclose.xpmpgmctrl.cpp :
Main Branch of ODBC-DSN Tree (not selected)
 dsnopen.ico / dsnopen.xpmpgmctrl.cpp :
Main Branch of ODBC-DSN Tree (selected)
 f_closed.ico / f_closed.xpmpgmctrl.cpp :
Main Branch of Program-Setting-DSN Tree (not selected)
 f_open.ico / f_open.xpmpgmctrl.cpp :
Main Branch of Program-Setting-DSN Tree (not selected)
 key.ico / key.xpmdbtree.cpp :
ODBC Primary-Key Column in a Table
 keyf.ico / keyf.xpmdbtree.cpp :
ODBC Foreign-Key Column in a Table
 logo.ico / logo.xpmProgramm Logo
 pgmctrl.ico / pgmctrl.xpm / pgmctrl.bmppgmctrl.cpp :
Tab Bitmap
 tab.ico / tab.xpmdbtree.cpp :
ODBC Table
+ + +
All other Pictograms are not used in DBBrowser
(they are .png files)
+

+ +
It will be nice, when the time comes where we can use XPM files for everything.
+ +


+ diff --git a/demos/dbbrowse/help.std/picgrams.htm b/demos/dbbrowse/help.std/picgrams.htm new file mode 100644 index 0000000000..166665bb1c --- /dev/null +++ b/demos/dbbrowse/help.std/picgrams.htm @@ -0,0 +1,38 @@ + +DBBrowser Help : Pictograms +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Used Pictograms (*.png)


(English)

+ Stand: 2000-01-23.01-mj10777


+ + + +
The real meaning of the used Pictograms in these help files
+ + +
All Pictograms are .PNG Files (Portable Network Graphics)
I use Paint Shop Pro 5.01 to make them.
+ + + + + + + + + + + + + + + + +
 imbau.pngUnder construction : Page is not compleated
 gnu.pngGNU Logo : gcc 2.95 Compiler
 gtk.pngGTK Logo : a Graphic Library in Linux
 kde.pngKDE Logo : Graphic System in Linux
 linux.pngLinux Logo : Linux (in General)
 motif.pngMotif Logo : Graphic Library in Linux (is the Logo correct ?)
 msvc.pngMicrosoft VC++ Logo : VC++ 6.0 Compiler
 odbc.pngODBC Logo
 remstar.pngRemstar Logo : Remstar ODBC-Classes (http://www.remstar.com)
 redh.pngRedhat Logo : Linux Distribution (http://www.redhat.com / .de)
 suse.pngSuSE Logo : Linux Distribution (http://www.suse.com / .de)
 server.pngServer Logo
 wins.pngWindows Logo : Windows (in General)
 winnt.pngWindows-NT Logo : Windows-NT specific
+

+ +
All other Pictograms are PNG-Copies of DBBrowser-Icons.
+ +


+ diff --git a/demos/dbbrowse/help.std/problems.htm b/demos/dbbrowse/help.std/problems.htm new file mode 100644 index 0000000000..a6d64aa689 --- /dev/null +++ b/demos/dbbrowse/help.std/problems.htm @@ -0,0 +1,77 @@ + +DBBrowser Help : Problems +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : What does not Work ?


(English)

+ Stand: 2000-01-22.01-mj10777 + +


+ +
General
+ + + +
Problem :  Only gcc 2.95 Compiler :
Assurt failed in file ../../src/msw/fontutil.cpp at line 238: unknown font slant
Solution :unknown

+ + + +
Problem :  Only gcc 2.95 Compiler :
Assurt failed in file ../../src/msw/fontutil.cpp at line 249: unknown font weight
Solution :unknown

+ +


+ +
wxHtmlHelpController
+ + +
Problem :When Help is closed with a Full HTML-View, you see nothing when Help is again started. (Page is Grey)
+ + +
Press the Upper left Button, so that the screen is again split.
+ + +
Solution :unknown

+ + + + +
Problem :The Middle (Center) Mouse-Wheel does not scroll the HTLM-Page (Rightside)
It does work on the Leftside
Solution :unknown

+ + + + +
Problem :How can Help be called and a certin Page be opened (Context Help)
Solution :unknown

+ + + + +
Problem :Why doesn't the Refresh-Button (F5) work?
Lvsung :unbekannt

+ + + +
Problem :Images that show with HelpView, do not show up when called from OnHelp()
+ + +
Logbook : Warning: No handler found for image type.
Why wasn't this message translated to German ?
+ + +
Solution :
Added following Code in DBBrowser.cpp(MyApp::OnInit()):
#if wxUSE_LIBPNG
wxImage::AddHandler( new wxPNGHandler );
#endif

+ +


+ +
wxGrid (new Versions)
+ + + +
Problem :When wxGrid is used in wxPaggedWindows, the Scrollbars do not work.
Solution :unknown

+ +


+ +
next Problem
+ + + +
Problem :something will turn up, it allways do.
Solution :unknown

+ +


+ diff --git a/demos/dbbrowse/help.std/remstar.htm b/demos/dbbrowse/help.std/remstar.htm new file mode 100644 index 0000000000..89b1e2f42c --- /dev/null +++ b/demos/dbbrowse/help.std/remstar.htm @@ -0,0 +1,15 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 Remstar ODBC Classes : wxDB


(English)

+ Stand: 2000-01-22.01-mj10777


+ + + +
TODO
+ +
+ diff --git a/demos/dbbrowse/help.std/sample.htm b/demos/dbbrowse/help.std/sample.htm new file mode 100644 index 0000000000..33e0b79be2 --- /dev/null +++ b/demos/dbbrowse/help.std/sample.htm @@ -0,0 +1,25 @@ + +DBBrowser Help : Sample HTLM Page +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Beispiel HTML Seite


(English)

+ Stand: 2000-01-22.01-mj10777


+ + + +
Blau (CCFFFF)
+ + + +
Gelb (FFFFAA)Hellgelb (FFFFE0)
hellgr|n <TH BGCOLOR=#CCFFCC>
Hintergrundsfarbe f|r diese Tabellenteil
<BODY BGCOLOR=#C6DFC6>
Background Colour of Page
+

+ +
Gold <TR BGCOLOR=#FFF777>
Hintergrundsfarbe f|r den Gesamte Tabelle
+

+ +
Rosa (FFBBBB)
+ +


+ diff --git a/demos/dbbrowse/help.std/startprm.htm b/demos/dbbrowse/help.std/startprm.htm new file mode 100644 index 0000000000..48664c36c2 --- /dev/null +++ b/demos/dbbrowse/help.std/startprm.htm @@ -0,0 +1,24 @@ + +DBBrowser Help : Start parameter +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : Start Parameter (Internationalisation)


(English)

+ Stand: 2000-01-22.01-mj10777


+ + + +
DBBrowser xx
+ + +
xx = languagecz, de, fr, pl and std (english)
+

+ +
There are no Help files for Czech (cz), French (fr) and Polish (pl)
Everything has been prepared and the locale will be set.
+

+ +
DBBrowse will use these setting until it is again changed (even after a Program restart). (wxConfigBase)
In "Program Settings" you can also switch (at the moment) between English and German.
+ +


+ diff --git a/demos/dbbrowse/help.std/todo.htm b/demos/dbbrowse/help.std/todo.htm new file mode 100644 index 0000000000..61bb04e2ff --- /dev/null +++ b/demos/dbbrowse/help.std/todo.htm @@ -0,0 +1,80 @@ + +DBBrowser Help : Problems +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +

 DBBrowser : What / When are new Functions planned ?


(English)

+ Stand: 2000-01-22.01-mj10777 + +


+ +
General
+ + + +
Function :When will it be possible to open more than one DSN / DBGrid ?
Timetable :soon, it is high priorty.

+ +


+ +
DBGrid
+ + + +
Function :Support for Adding, Deleting and Changes to Record.
Timetable :Sometime during my present Project.

+ +


+ +
DBGrid
+ + + +
Function :When will Records only be read in when needed (Scrolling)
Timetable :This is a Function that is planned in wxGrid. I too hope it will come soon.

+ +


+ +
DBTree
+ + + +
Function :When can DBBrowser create a wxDB and wxTable .cpp/.h File ?
Timetable :OnDBClass(); OnClass() and OnClassAll(); have been prepaired.
This has for me low priorty. But I am sure somebody will do (for wxStudio ?)

+ +


+ +
24.01.2000 : George Tasker
+ + + +
Have USER NAME and PASSWORD text widgets, or a menu item to enter them.25.01.2000 - should work, please test +
+ + + +
Rather than have the "40 DSN's found" message at the end of the log book, Put that in the status bar of the frame.24.01.2000 - Done +
+ + + +
Make the grid cells READ-ONLY, since this is a browser (unless you want to make it an editor too -- good idea!)25.01.2000 - done : right mouse click on any grid lable and on popupmenu clicken +
+ + + +
Sort the DSNs in alphabetical order before putting them in the tree26.01.2000 - done +
+ + + +
Have program settings available from a TOOLS | OPTIONS menuWilldo +
+ +
+ +
new Functions
+ + + +
Function :something will turn up, it allways do.
Timetable :unknown

+ +


+ diff --git a/demos/dbbrowse/help.std/wxdb.htm b/demos/dbbrowse/help.std/wxdb.htm new file mode 100644 index 0000000000..5dd3acc6e9 --- /dev/null +++ b/demos/dbbrowse/help.std/wxdb.htm @@ -0,0 +1,27 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +


Remstar ODBC Classes : wxDB


(English)

+ Stand: 2000-01-23.01-mj10777


+ + + +
There are 2 new wxDB Functions :
+ + + + + + + + +
Discription of the new GetColumns() and GetKeyFields()
wxDbInf
wxTableInf
wxColInf
wxColFor
How to use the new GetColumns() and GetKeyFields()
wxDbInf
wxTableInf
wxColInf
wxColFor
+ + + +
The other GetColumns() has not changed.
The CcolInf used is, however, really a wxColInf ! (typedef wxColInf CcolInf;)

+ + diff --git a/demos/dbbrowse/help.std/wxtable.htm b/demos/dbbrowse/help.std/wxtable.htm new file mode 100644 index 0000000000..d4396a4a7c --- /dev/null +++ b/demos/dbbrowse/help.std/wxtable.htm @@ -0,0 +1,15 @@ + +DBBrowser Help : Remstar ODBC Classes +

DBBrowser
Mark Johnson, Berlin Germany
mj10777@gmx.net

+ + + +


Remstar ODBC Classes : wxTable


(English)

+ Stand: 2000-01-22.01-mj10777


+ + + +
This class is not used in DBBrowser !
+ +
+ diff --git a/demos/dbbrowse/makefile.g95 b/demos/dbbrowse/makefile.g95 new file mode 100644 index 0000000000..3bacc7948e --- /dev/null +++ b/demos/dbbrowse/makefile.g95 @@ -0,0 +1,19 @@ +# +# File: makefile.g95 +# Author: Julian Smart +# Created: 1999 +# Updated: +# Copyright: (c) Julian Smart, 1999 +# +# Makefile for wxWindows sample (Cygwin/Mingw32). + +# Set WXDIR for your system +WXDIR = $(WXWIN) + +TARGET=dbbrowser +OBJECTS = dbbrowse.o doc.o pgmctrl.o tabpgwin.o \ + browsedb.o dbtree.o dbgrid.o dlguser.o + + +include $(WXDIR)/src/makeprog.g95 + diff --git a/demos/dbbrowse/makefile.gtk b/demos/dbbrowse/makefile.gtk new file mode 100644 index 0000000000..7765a3fcc5 --- /dev/null +++ b/demos/dbbrowse/makefile.gtk @@ -0,0 +1,15 @@ + +# Top dir of wxWindows +top_builddir = /gtm/bart/wxGTK + +PROGRAM=dbbrowser_gtk + + +OBJECTS= dbbrowser.o doc.o pgmctrl.o wxtbpgwin.o\ + browserdb.o dbtree.o dbgrid.o dlguser.o + + + + +include $(top_builddir)/src/makeprog.env + diff --git a/demos/dbbrowse/makefile.vc b/demos/dbbrowse/makefile.vc new file mode 100644 index 0000000000..a13526042c --- /dev/null +++ b/demos/dbbrowse/makefile.vc @@ -0,0 +1,19 @@ +# +# File: makefile.vc +# Author: Mark Johnson, mj10777@gmx.net +# Created: 19990808 +# Updated: +# Copyright: (c) Mark Johnson +# +# Makefile : Builds sample (VC++, WIN32) +# Use FINAL=1 argument to nmake to build final version with no debug info. + +# Set WXDIR for your system +WXDIR = $(WXWIN) + +PROGRAM=dbbrowse +OBJECTS = $(PROGRAM).obj doc.obj pgmctrl.obj tabpgwin.obj \ + browsedb.obj dbtree.obj dbgrid.obj dlguser.obj + +!include $(WXDIR)\src\makeprog.vc + diff --git a/demos/dbbrowse/o.cmd b/demos/dbbrowse/o.cmd new file mode 100755 index 0000000000..2d8f01386e --- /dev/null +++ b/demos/dbbrowse/o.cmd @@ -0,0 +1,4 @@ + erase *.res + erase *.obj + erase *.o + go diff --git a/demos/dbbrowse/pgmctrl.cpp b/demos/dbbrowse/pgmctrl.cpp new file mode 100644 index 0000000000..2c03f3d3c1 --- /dev/null +++ b/demos/dbbrowse/pgmctrl.cpp @@ -0,0 +1,296 @@ +//--------------------------------------------------------------------------- +// Name: pgmctrl.h +// Purpose: Programm Control with a Tree +// Author: Mark Johnson +// Modified by: 19990806.mj10777 +// Created: 19991010 +// RCS-ID: +// Copyright: (c) Mark Johnson, Berlin Germany, mj10777@gmx.net +// Licence: wxWindows license +//--------------------------------------------------------------------------- +//-- all #ifdefs that the whole Project needs. ------------------------------ +//--------------------------------------------------------------------------- +#ifdef __GNUG__ + #pragma implementation + #pragma interface +#endif +//--------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +//--------------------------------------------------------------------------- +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +//--------------------------------------------------------------------------- +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif +//--------------------------------------------------------------------------- +#ifndef __WXMSW__ + #include "bitmaps/d_closed.xpm" + #include "bitmaps/d_open.xpm" + #include "bitmaps/f_closed.xpm" + #include "bitmaps/f_open.xpm" + #include "bitmaps/logo.xpm" + #include "bitmaps/dsnclose.xpm" + #include "bitmaps/dsnopen.xpm" +#endif +//--------------------------------------------------------------------------- +//-- all #includes that every .cpp needs --- 19990807.mj10777 --- +//--------------------------------------------------------------------------- +#include "std.h" // sorgsam Pflegen ! +//--------------------------------------------------------------------------- +//-- Global functions ------------------------------------------------------- +//--------------------------------------------------------------------------- +static inline const char *bool2String(bool b) +{ + return b ? "" : "not "; +} +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(PgmCtrl, wxTreeCtrl) + EVT_MOTION (PgmCtrl::OnMouseMove) + EVT_LEFT_DCLICK(PgmCtrl::OnSelChanged) + EVT_TREE_ITEM_RIGHT_CLICK(TREE_CTRL_PGM,PgmCtrl::OnRightSelect) + EVT_MENU(PGMCTRL_ODBC_USER,PgmCtrl::OnUserPassword) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +// PgmCtrl implementation +//--------------------------------------------------------------------------- +IMPLEMENT_DYNAMIC_CLASS(PgmCtrl, wxTreeCtrl) +//--------------------------------------------------------------------------- +PgmCtrl::PgmCtrl(wxWindow *parent) : wxTreeCtrl(parent) +{ +} +PgmCtrl::PgmCtrl(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size, long style) + : wxTreeCtrl(parent, id, pos, size, style) +{ + wxFont* ft_Temp = new wxFont(10,wxSWISS,wxNORMAL,wxBOLD,FALSE,"Comic Sans MS"); + SetFont(* ft_Temp); + + // Make an image list containing small icons + p_imageListNormal = new wxImageList(16, 16, TRUE); + + // should correspond to TreeIc_xxx enum +#if defined(__WXMSW__) && defined(__WIN16__) + // This is required in 16-bit Windows mode only because we can't load a specific (16x16) + // icon image, so it comes out stretched + p_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE)); + p_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE)); +#else + p_imageListNormal->Add(wxICON(Logo)); + p_imageListNormal->Add(wxICON(DsnClosed)); + p_imageListNormal->Add(wxICON(DsnOpen)); + p_imageListNormal->Add(wxICON(DocClosed)); + p_imageListNormal->Add(wxICON(DocOpen)); + p_imageListNormal->Add(wxICON(FolderClosed)); + p_imageListNormal->Add(wxICON(FolderOpen)); +#endif + + SetImageList(p_imageListNormal); + + // Add some items to the tree + // AddTestItemsToTree(3, 2); +} +//--------------------------------------------------------------------------- +PgmCtrl::~PgmCtrl() +{ + // wxMessageBox("PgmCtrl::~PgmCtrl() - vor DeleteAllItems"); + // DeleteAllItems(); + // wxMessageBox("nach DeleteAllItems"); + delete p_imageListNormal; +} +//--------------------------------------------------------------------------- +#undef TREE_EVENT_HANDLER +//--------------------------------------------------------------------------- +int PgmCtrl::OnPopulate() +{ + wxTreeItemId Root, Folder, Docu; + //---------------------------------------------------------------------------------------------------------------------------- + int i; + double dTmp = 1234567.89; + Temp0.Printf(_("%s Functions"),p_ProgramCfg->GetAppName().c_str()); + Root = AddRoot(Temp0,TreeIc_Logo,TreeIc_Logo, new TreeData("Root")); + //---------------------------------------------------------------------------------------------------------------------------- + Folder = AppendItem(Root, _("Program settings") ,TreeIc_FolderClosed, TreeIc_FolderOpen, new TreeData("Settings")); + p_ProgramCfg->Read("/Local/langid",&Temp0); p_ProgramCfg->Read("/Local/language",&Temp2); + Temp1.Printf(_("locale (%s) ; Language (%s) ; Number(%2.2f)"),Temp0.c_str(), Temp2.c_str(), dTmp); Temp0.Empty(); Temp2.Empty(); + Docu = AppendItem(Folder, Temp1 ,TreeIc_DocClosed, TreeIc_DocOpen, new TreeData("Setting Language")); + p_ProgramCfg->Read("/Paths/Work",&Temp0); Temp1.Printf(_("Work Path : %s"),Temp0.c_str()); Temp0.Empty(); + Docu = AppendItem(Folder, Temp1 ,TreeIc_DocClosed, TreeIc_DocOpen, new TreeData("Path Work")); + Docu = AppendItem(Folder, _("Change the language to English") ,TreeIc_DocClosed, TreeIc_DocOpen, new TreeData("Language English")); + Docu = AppendItem(Folder, _("Change the language to German") ,TreeIc_DocClosed, TreeIc_DocOpen, new TreeData("Language German")); + Docu = AppendItem(Folder, _("Delete all wxConfigBase Entry's"),TreeIc_DocClosed, TreeIc_DocOpen, new TreeData("wxConfigBase Delete")); + Folder = AppendItem(Root, "ODBC DSN" ,TreeIc_FolderClosed, TreeIc_FolderOpen, new TreeData("ODBC-DSN")); + for (i=0;ii_DSN;i++) + { + Temp0.Printf("ODBC-%s",(pDoc->p_DSN+i)->Dsn.c_str()); + Docu = AppendItem(Folder,(pDoc->p_DSN+i)->Dsn ,TreeIc_DsnClosed,TreeIc_DsnOpen, new TreeData(Temp0)); + } + //---------------------------------------------------------------------------------------------------------------------------- + popupMenu1 = NULL; + popupMenu1 = new wxMenu(""); + popupMenu1->Append(PGMCTRL_ODBC_USER, _("Set Username and Password")); + // popupMenu1->AppendSeparator(); + //---------------------------------------------------------------------------------------------------------------------------- + Expand(Root); + Expand(Folder); + //---------------------------------------------------------------------------------------------------------------------------- + return 0; +} +//--------------------------------------------------------------------------- +void PgmCtrl::OnSelChanged(wxTreeEvent& WXUNUSED(event)) +{ + int i; + Temp0.Empty(); Temp1.Empty(); + pDoc->p_MainFrame->SetStatusText(Temp0,0); + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + TreeData *item = (TreeData *)GetItemData(itemId); + if ( item != NULL ) + { + int Treffer = 0; + Temp1.Printf("%s",item->m_desc.c_str()); + //----------------------------------------------------------------------------------------- + if (Temp1 == "Language English") + { + Temp0 = "std"; + p_ProgramCfg->Write("/Local/langid",Temp0); + Temp0 = _("-I-> After a programm restart, the language will be changed to English."); + wxMessageBox(Temp0); + } + if (Temp1 == "Language German") + { + Temp0 = "de"; + p_ProgramCfg->Write("/Local/langid",Temp0); + Temp0 = _("-I-> After a programm restart, the language will be changed to German."); + wxMessageBox(Temp0); + } + //----------------------------------------------------------------------------------------- + if (Temp1 == "wxConfigBase Delete") + { + if (p_ProgramCfg->DeleteAll()) // Default Diretory for wxFileSelector + Temp0 = _("-I-> wxConfigBase.p_ProgramCfg->DeleteAll() was succesfull."); + else + Temp0 = _("-E-> wxConfigBase.p_ProgramCfg->DeleteAll() was not succesfull !"); + wxBell(); // Ding_a_Ling + Treffer++; + } + //----------------------------------------------------------------------------------------- + if (Temp1.Contains("ODBC-")) + { + Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN); + for (i=0;ii_DSN;i++) + { + if (Temp1 == (pDoc->p_DSN+i)->Dsn) + { + pDoc->OnChosenDSN(i); + } + } + Treffer++; + } + //----------------------------------------------------------------------------------------- + if (Treffer == 0) + { + //--------------------------------------------------- + Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold," + "%u children (%u immediately under this item)."), + item->m_desc.c_str(), + bool2String(IsSelected(itemId)), + bool2String(IsExpanded(itemId)), + bool2String(IsBold(itemId)), + GetChildrenCount(itemId), + GetChildrenCount(itemId)); + LogBuf.Printf("-I-> PgmCtrl::OnSelChanged - %s",Temp0.c_str()); + wxLogMessage( "%s", LogBuf.c_str() ); + //--------------------------------------------------- + } + } +} +//--------------------------------------------------------------------------- +void PgmCtrl::OnRightSelect(wxTreeEvent& WXUNUSED(event)) +{ + int i; + Temp0.Empty(); + // Get the Information that we need + wxTreeItemId itemId = GetSelection(); + DBTreeData *item = (DBTreeData *)GetItemData(itemId); + SaveDSN.Empty(); + if ( item != NULL ) + { + int Treffer = 0; + Temp1.Printf("%s",item->m_desc.c_str()); + //----------------------------------------------------------------------------------------- + if (Temp1.Contains("ODBC-")) + { + Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN); + for (i=0;ii_DSN;i++) + { + if (Temp1 == (pDoc->p_DSN+i)->Dsn) + { + SaveDSN = Temp1; + PopupMenu(popupMenu1,TreePos.x,TreePos.y); + } + } + Treffer++; + } + //----------------------------------------------------------------------------------------- + if (Treffer == 0) + { + //--------------------------------------------------- + /* + Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold," + "%u children (%u immediately under this item)."), + item->m_desc.c_str(), + bool2String(IsSelected(itemId)), + bool2String(IsExpanded(itemId)), + bool2String(IsBold(itemId)), + GetChildrenCount(itemId), + GetChildrenCount(itemId)); + LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str()); + wxLogMessage( "%s", LogBuf.c_str() ); + */ + //--------------------------------------------------- + } + } +} +//------------------------------------------------------------------------------ +void PgmCtrl::OnMouseMove(wxMouseEvent &event) +{ + TreePos = event.GetPosition(); +} +//------------------------------------------------------------------------------ +void PgmCtrl::OnUserPassword() +{ + // wxMessageBox(SaveDSN); + int i, rc=0; + //------------------------------------------- + DlgUser p_Dlg(this, "Username and Password", wxPoint(100, 100), wxSize(340, 170)); + //------------------------------------------- + for (i=0;ii_DSN;i++) + { + if (SaveDSN == (pDoc->p_DSN+i)->Dsn) + { + p_Dlg.s_DSN = (pDoc->p_DSN+i)->Dsn; + p_Dlg.s_User = (pDoc->p_DSN+i)->Usr; + p_Dlg.s_Password = (pDoc->p_DSN+i)->Pas; + p_Dlg.OnInit(); + //-------------------- + // Temp0.Printf("i(%d) ; s_DSN(%s) ; s_User(%s) ; s_Password(%s)",i,p_Dlg.s_DSN,p_Dlg.s_User,p_Dlg.s_Password); + // wxMessageBox(Temp0); + if (p_Dlg.ShowModal() == wxID_OK) + { + (pDoc->p_DSN+i)->Usr = p_Dlg.s_User; + (pDoc->p_DSN+i)->Pas = p_Dlg.s_Password; + (pDoc->db_Br+i)->UserName = (pDoc->p_DSN+i)->Usr; + (pDoc->db_Br+i)->Password = (pDoc->p_DSN+i)->Pas; + } + p_Dlg.Destroy(); + //-------------------- + goto Weiter; // We have what we want, leave + } + } + Weiter: + //------------------------------------------- + SaveDSN.Empty(); +} +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/pgmctrl.h b/demos/dbbrowse/pgmctrl.h new file mode 100644 index 0000000000..44ebce47c9 --- /dev/null +++ b/demos/dbbrowse/pgmctrl.h @@ -0,0 +1,72 @@ +//--------------------------------------------------------------------------- +// Name: pgmctrl.h +// Purpose: Programm Control with a Tree +// Author: Mark Johnson +// Modified by: 19990806.mj10777 +// Created: 19991010 +// RCS-ID: +// Copyright: (c) Mark Johnson, Berlin Germany, mj10777@gmx.net +// Licence: wxWindows license +//--------------------------------------------------------------------------- +class mjDoc; // Declared in doc.h file +//--------------------------------------------------------------------------- +class TreeData : public wxTreeItemData +{ +public: + TreeData(const wxString& desc) : m_desc(desc) { } + + void ShowInfo(wxTreeCtrl *tree); + + wxString m_desc; +}; +//--------------------------------------------------------------------------- +class PgmCtrl : public wxTreeCtrl +{ + public: + enum + { // The order here must be the same as in m_imageListNormal ! + TreeIc_Logo, // logo.ico + TreeIc_DsnClosed, // dsnclose.ico + TreeIc_DsnOpen, // dsnopen.ico + TreeIc_DocClosed, // d_closed.ico + TreeIc_DocOpen, // d_open.ico + TreeIc_FolderClosed, // f_closed.ico + TreeIc_FolderOpen // f_open.ico + }; + wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; +//--------------------------------------------------------------------------- + PgmCtrl() { } + PgmCtrl(wxWindow *parent); + PgmCtrl(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size,long style); + virtual ~PgmCtrl(); + mjDoc *pDoc; +//--------------------------------------------------------------------------- + int i_TabArt; // Tab = 0 ; Page = 1; + int i_ViewNr; // View Nummer in Tab / Page +//--------------------------------------------------------------------------- + wxImageList *p_imageListNormal; + wxMenu *popupMenu1; // OnDBClass + wxPoint TreePos; + wxString SaveDSN; // Needed for User and Password +//--------------------------------------------------------------------------- + public: + int OnPopulate(); + void OnSelChanged(wxTreeEvent& event); + void OnRightSelect(wxTreeEvent& event); + void OnMouseMove(wxMouseEvent& event); + void OnUserPassword(); + + public: +//--------------------------------------------------------------------------- + // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() + // if you want your overloaded OnCompareItems() to be called. + // OTOH, if you don't want it you may omit the next line - this will + // make default (alphabetical) sorting much faster under wxMSW. + DECLARE_DYNAMIC_CLASS(PgmCtrl) + DECLARE_EVENT_TABLE() +}; +//--------------------------------------------------------------------------- +#define PGMCTRL_01_BEGIN 1000 +#define PGMCTRL_ODBC_USER 1001 +#define PGMCTRL_01_END 1010 +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/std.h b/demos/dbbrowse/std.h new file mode 100644 index 0000000000..c4672f42c7 --- /dev/null +++ b/demos/dbbrowse/std.h @@ -0,0 +1,35 @@ +//--------------------------------------------------------------------------- +//-- all #includes that the whole Project needs. ---------------------------- +//--------------------------------------------------------------------------- +#include // to let wxWindows choose a wxConfig class for your platform +#include // base config class +// #include +// #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // wxResourceParsedata/File/String +#include +#include +#include +#include +#ifdef __WXMSW__ + #include +#endif +//--------------------------- +#include "tabpgwin.h" // Original name : "controlarea.h" +//--------------------------- +#include "dlguser.h" +#include "browsedb.h" +#include "dbtree.h" +#include "dbgrid.h" +#include "pgmctrl.h" +#include "doc.h" +#include "dbbrowse.h" +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/tabpgwin.cpp b/demos/dbbrowse/tabpgwin.cpp new file mode 100644 index 0000000000..8ee68ecd49 --- /dev/null +++ b/demos/dbbrowse/tabpgwin.cpp @@ -0,0 +1,1143 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: No names yet. +// Purpose: Contrib. demo +// Author: Aleksandras Gluchovas +// Modified by: 19990908 : mj10777@gmx.net +// - rename to tabpgwin +// - restruction of Variable declaration +// - to prevent Warnings under MingGW32 +// Modified by: 19990909 : mj10777@gmx.net +// - mNoVertScroll TRUE = no / FALSE = Original Code +// the Original Code Paints a Vertical Scroll in wxPaggedWindow +// which is not needed in this Version. Use TRUE for this. +// Created: 07/09/98 +// RCS-ID: $Id$ +// Copyright: (c) Aleksandras Gluchovas +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "controlarea.h" +// #pragma interface +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#include "wx/wx.h" +#endif + +#include +#include + +#include "wx/string.h" +#include "wx/utils.h" // import wxMin/wxMax macros and wxFileExist(..) + +#include "tabpgwin.h" +//--------------------------------------------------------------------------- +// Implementation for class twTabInfo +//--------------------------------------------------------------------------- +IMPLEMENT_DYNAMIC_CLASS( twTabInfo, wxObject ) +//--------------------------------------------------------------------------- +twTabInfo::twTabInfo() + : mpContent( 0 ) +{} +//--------------------------------------------------------------------------- +twTabInfo::~twTabInfo() +{ + // FOR NOW:: nothing +} +//--------------------------------------------------------------------------- +int twTabInfo::ImgWidth() +{ + if ( mBitMap.Ok() ) return mBitMap.GetWidth(); + else return 0; +} +//--------------------------------------------------------------------------- +int twTabInfo::ImgHeight() +{ + if ( mBitMap.Ok() ) return mBitMap.GetHeight(); + else return 0; +} +//--------------------------------------------------------------------------- +int twTabInfo::ImageToTxtGap( int prefGap ) +{ + if ( mBitMap.Ok() ) return prefGap; + else return 0; +} +//--------------------------------------------------------------------------- +bool twTabInfo::HasImg() +{ + return mBitMap.Ok(); +} +//--------------------------------------------------------------------------- +// bool twTabInfo::HasText(); +unsigned int twTabInfo::HasText() +{ + return mText.Length(); +} +//--------------------------------------------------------------------------- +wxBitmap& twTabInfo::GetImg() +{ + return mBitMap; +} +//--------------------------------------------------------------------------- +wxString& twTabInfo::GetText() +{ + return mText; +} +//--------------------------------------------------------------------------- +wxWindow& twTabInfo::GetContent() +{ + return *mpContent; +} +//--------------------------------------------------------------------------- +// Implementation for class wxTabbedWindow +//--------------------------------------------------------------------------- +IMPLEMENT_DYNAMIC_CLASS( wxTabbedWindow, wxPanel ) +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE( wxTabbedWindow, wxPanel ) + EVT_SIZE ( wxTabbedWindow::OnSize ) + EVT_PAINT( wxTabbedWindow::OnPaint ) + EVT_LEFT_DOWN( wxTabbedWindow::OnLButtonDown ) +// TDB:: filciker reduction +// EVT_ERASE_BACKGROUND( wxTabbedWindow::OnBkErase ) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +wxTabbedWindow::wxTabbedWindow() + + : mpTabScroll ( NULL ), + mpHorizScroll( NULL ), + mpVertScroll ( NULL ), + + mVertGap ( 0 ), + mHorizGap( 0 ), + + mTitleVertGap ( 3 ), + mTitleHorizGap( 4 ), + mImageTextGap ( 2 ), + mFirstTitleGap( 11 ), + + mBorderOnlyWidth( 8 ), + + mWhitePen( wxColour(255,255,255), 1, wxSOLID ), + mGrayPen ( wxColour(192,192,192), 1, wxSOLID ), + mDarkPen ( wxColour(128,128,128), 1, wxSOLID ), + mBlackPen( wxColour( 0, 0, 0), 1, wxSOLID ), + + // state variables + + mActiveTab ( 0 ), + mTitleHeight( 0 ), + mLayoutType( wxTITLE_IMG_AND_TEXT ) +{} +//--------------------------------------------------------------------------- +wxTabbedWindow::~wxTabbedWindow() +{ + wxNode* pTab = mTabs.First(); + + while( pTab ) + { + delete ((twTabInfo*)pTab->Data()); + pTab = pTab->Next(); + } +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::SizeTabs(int x,int y, int width, int height, bool repant) +{ + wxNode* pTabNode = mTabs.First(); + int n = 0; + + while( pTabNode ) + { + twTabInfo& info = *((twTabInfo*)pTabNode->Data()); + + if ( n == mActiveTab ) + { + //wxSizeEvent evt; + //info.mpContent->GetEventHandler()->ProcessEvent( evt ); + + info.mpContent->SetSize( x, y, width, height, 0 ); + info.mpContent->Show(TRUE); + info.mpContent->Refresh(); + + } + else + { + info.mpContent->Show(FALSE); + } + + pTabNode = pTabNode->Next(); + ++n; + } +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::AddTab( wxWindow* pContent, + wxString tabText, + wxString imageFileName, + long imageType ) +{ + twTabInfo* pTab = new twTabInfo(); + + pTab->mpContent = pContent; + pTab->mText = tabText; + + if ( wxFileExists( imageFileName ) && + + pTab->mBitMap.LoadFile( imageFileName, imageType ) ) + { + pTab->mImageFile = imageFileName; + pTab->mImageType = imageType; + } + + + if ( pContent->GetParent() == NULL ) + pContent->Create( this, -1 ); + + mTabs.Append( (wxObject*)pTab ); + + RecalcLayout(TRUE); + + OnTabAdded( pTab ); +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::AddTab( wxWindow* pContent, + wxString tabText, wxBitmap* pImage ) +{ + twTabInfo* pTab = new twTabInfo(); + + pTab->mpContent = pContent; + pTab->mText = tabText; + + if ( pImage ) + pTab->mBitMap = *pImage; + + if ( pContent->GetParent() == NULL ) + pContent->Create( this, -1 ); + + mTabs.Append( (wxObject*)pTab ); + RecalcLayout(TRUE); + OnTabAdded( pTab ); +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::RemoveTab( int tabNo ) +{ + twTabInfo* pTab = ((twTabInfo*)(mTabs.Nth( tabNo )->Data())); + pTab->mpContent->Destroy(); + delete pTab; + mTabs.DeleteNode( mTabs.Nth( tabNo ) ); + // if ( mActiveTab >= mTabs.Number() ); + if ( mActiveTab >= mTabs.Number() ) + mActiveTab = mTabs.Number() - 1; + SetActiveTab( mActiveTab ); +} +//--------------------------------------------------------------------------- +int wxTabbedWindow::GetTabCount() +{ + return mTabs.Number(); +} +//--------------------------------------------------------------------------- +wxWindow* wxTabbedWindow::GetTab( int tabNo ) +{ + return ((twTabInfo*)(mTabs.Nth( tabNo )->Data()))->mpContent; +} +//--------------------------------------------------------------------------- +wxWindow* wxTabbedWindow::GetActiveTab() +{ + // FIMXE:: this is lame + return GetTab( mActiveTab ); +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::SetActiveTab( int tabNo ) +{ + mActiveTab = tabNo; + RecalcLayout(TRUE); + Refresh(); +} +//--------------------------------------------------------------------------- +// width of the decorations border (4 shade-lines), should not be changed +//--------------------------------------------------------------------------- +#define BORDER_SZ 4 +//--------------------------------------------------------------------------- +void wxTabbedWindow::DrawShadedRect( int x, int y, int width, int height, + wxPen& upperPen, wxPen& lowerPen, wxDC& dc + ) +{ + // darw the lightened upper-left sides of the rectangle + + dc.SetPen( upperPen ); + dc.DrawLine( x,y, x, y + height - 1 ); // vert + dc.DrawLine( x,y, x + width - 1, y ); // horiz + + // draw the unenlightened lower-right sides of the rectangle + + dc.SetPen( lowerPen ); + dc.DrawLine( x + width - 1, y, x + width - 1, y + height - 1 ); // vert + dc.DrawLine( x, y + height - 1, x + width, y + height - 1 ); // horiz +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::DrawDecorations( wxDC& dc ) +{ + // Protability NOTE::: DrawLine(..) draws a line from the first position, + // but not including the point specified by last position. + // This way Windows draws lines, not sure how Motif and Gtk + // prots behave... + + int width, height; + GetClientSize( &width, &height ); + + // check if there's at least a bit of space to draw things + + if ( width < mHorizGap*2 + BORDER_SZ*2+1 || + height < mVertGap*2 + BORDER_SZ*2+1 + mTitleHeight + ) + return; + + // step #1 - draw border around the tab content area + + // setup position for kind of "pencil" + int curX = mHorizGap; + int curY = mVertGap; + + int xSize = width - mHorizGap*2; + int ySize = height - mVertGap *2 - mTitleHeight; + + // layer 1 (upper white) + DrawShadedRect( curX+0, curY+0, xSize-0, ySize-0, + mWhitePen, mBlackPen, dc ); + + // layer 2 (upper gray) + DrawShadedRect( curX+1, curY+1, xSize-2-1, ySize-2-1, + mGrayPen, mGrayPen, dc ); + + // layer 3 (upper darkGray) + DrawShadedRect( curX+2, curY+2, xSize-3-2, ySize-3-2, + mDarkPen, mWhitePen, dc ); + + // layer 4 (upper black) + DrawShadedRect( curX+3, curY+3, xSize-4-3, ySize-4-3, + mBlackPen, mGrayPen, dc ); + + // add non-siemtric layer from the lower-right side (confroming to MFC-look) + + dc.SetPen( mDarkPen ); + dc.DrawLine( curX+1, curY + ySize - 2, curX + xSize - 1, curY + ySize - 2 ); // horiz + dc.DrawLine( curX + xSize - 2, curY + 1, curX + xSize - 2, curY + ySize - 2 ); // vert + + // step #2 - draw tab title bars + + curX = mFirstTitleGap; + curY = height - mVertGap - mTitleHeight; + + int tabNo = 0; + wxNode* pNode = mTabs.First(); + + while( pNode ) + { + // "hard-coded metafile" for decorations + + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + xSize = tab.mDims.x; + ySize = mTitleHeight; + + if ( tabNo == mActiveTab ) + { + dc.SetPen( mGrayPen ); + dc.DrawLine( curX+1, curY-2, curX+xSize-2, curY-2 ); + dc.DrawLine( curX+1, curY-1, curX+xSize-2, curY-1 ); + } + + dc.SetPen( mWhitePen ); + + if ( tabNo == mActiveTab ) + dc.DrawLine( curX, curY-2, curX, curY+ySize-2 ); + else + dc.DrawLine( curX, curY, curX, curY+ySize-2 ); + + dc.SetPen( mDarkPen ); + dc.DrawLine( curX+1, curY+ySize-3, curX+1, curY+ySize-1 ); // to pix down + dc.DrawLine( curX+2, curY+ySize-2, curX+xSize-2, curY+ySize-2 ); + dc.DrawLine( curX+xSize-3, curY+ySize-3, curX+xSize-2, curY+ySize-3 ); + if ( tabNo == mActiveTab ) + dc.DrawLine( curX+xSize-2, curY+ySize-3, curX+xSize-2, curY-3 ); + else + dc.DrawLine( curX+xSize-2, curY+ySize-3, curX+xSize-2, curY-1 ); + + dc.SetPen( mBlackPen ); + dc.DrawLine( curX+xSize-1, curY, curX+xSize-1, curY+ySize-2 ); + dc.DrawLine( curX+xSize-2, curY+ySize-2, curX+xSize-3, curY+ySize-2 ); + dc.DrawLine( curX+xSize-3, curY+ySize-1, curX+1, curY+ySize-1 ); + + pNode = pNode->Next(); + ++tabNo; + + // darw image and (or without) text centered within the + // title bar rectangle + + if ( mLayoutType != wxTITLE_BORDER_ONLY && tab.HasImg() ) + { + wxMemoryDC tmpDc; + tmpDc.SelectObject( tab.GetImg() ); + + dc.Blit( curX + mTitleHorizGap, + curY + ( ySize - tab.ImgHeight() ) / 2, + tab.ImgWidth(), + tab.ImgHeight(), + &tmpDc, 0, 0, wxCOPY + ); + } + + if ( mLayoutType == wxTITLE_IMG_AND_TEXT && tab.HasText() ) + { + long x,w,h; + + // set select default font of the window into it's device context + dc.SetFont( GetLabelingFont() ); + + dc.SetTextBackground( GetBackgroundColour() ); + + dc.GetTextExtent(tab.mText, &w, &h ); + + x = curX + mTitleHorizGap + + tab.ImgWidth() + tab.ImageToTxtGap(mImageTextGap); + + dc.DrawText( tab.GetText(), x, curY + ( ySize - h ) / 2 ); + } + curX += xSize; + + } // end of `while (pNode)' +} +//--------------------------------------------------------------------------- +int wxTabbedWindow::HitTest( const wxPoint& pos ) +{ + int width, height; + GetClientSize( &width, &height ); + + int curX = mFirstTitleGap; + int curY = height - mVertGap - mTitleHeight; + + int tabNo = 0; + wxNode* pNode = mTabs.First(); + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + int w,h; + w = tab.mDims.x; + h = tab.mDims.y; + // hit test rectangle of the currnet tab title bar + if ( pos.x >= curX && pos.x < curX + tab.mDims.x && + pos.y >= curY && pos.y < curY + tab.mDims.y + ) + { + return tabNo; + } + + curX += tab.mDims.x; + + pNode = pNode->Next(); + ++tabNo; + } + + return -1; +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::HideInactiveTabs( bool andRepaint ) +{ + if ( !andRepaint ) + return; + + wxNode* pNode = mTabs.First(); + int tabNo = 0; + + while( pNode ) + { + if ( tabNo != mActiveTab ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + tab.mpContent->Show(FALSE); + } + + pNode = pNode->Next(); + ++tabNo; + } +} +//--------------------------------------------------------------------------- +wxFont wxTabbedWindow::GetLabelingFont() +{ + wxFont font; +#ifdef __WINDOWS__ + font.SetFaceName("MS Sans Serif"); +#else + font.SetFamily( wxSWISS ); +#endif + + font.SetStyle(40); + font.SetWeight(40); + font.SetPointSize( 8 ); + +#ifdef __WINDOWS__ + font.RealizeResource(); +#endif + + return font; +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::RecalcLayout(bool andRepaint) +{ + HideInactiveTabs(andRepaint); + + // resetup position of the active tab + + int width, height; + GetClientSize( &width, &height ); + + int curX = mHorizGap + BORDER_SZ; + int curY = mVertGap + BORDER_SZ; + + int xSize = width - mHorizGap*2 - BORDER_SZ*2-1; + int ySize = height - mVertGap*2 - BORDER_SZ*2-1 - mTitleHeight; + + SizeTabs( curX, curY, xSize, ySize, andRepaint ); + + // pass #1 - try to layout assuming it's wxTITLE_IMG_AND_TEXT + + mLayoutType = wxTITLE_IMG_AND_TEXT; + + wxNode* pNode = mTabs.First(); + + curX = mFirstTitleGap; // the left-side gap + mTitleHeight = 0; + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + wxWindowDC dc(this); + + long w,h; + + // set select default font of the window into it's device context + dc.SetFont( GetLabelingFont() ); + + dc.GetTextExtent(tab.mText, &w, &h ); + + tab.mDims.x = w + tab.ImageToTxtGap(mImageTextGap) + + tab.ImgWidth() + mTitleHorizGap*2; + + tab.mDims.y = wxMax( h, tab.ImgHeight() ) + mTitleVertGap*2; + mTitleHeight = wxMax( mTitleHeight, tab.mDims.y ); + + curX += tab.mDims.x; + + pNode = pNode->Next(); + } + + curX += mHorizGap; // the right-side gap + + // make all title bars of equel height + + pNode = mTabs.First(); + + while( pNode ) + { + ((twTabInfo*)(pNode->Data()))->mDims.y = mTitleHeight;; + pNode = pNode->Next(); + } + + // if curX has'nt ran out of bounds, leave TITLE_IMG layout and return + if ( curX < width - mHorizGap ) + return; + + // pass #2 - try to layout assuming wxTITLE_IMG_ONLY + + mLayoutType = wxTITLE_IMG_ONLY; + + pNode = mTabs.First(); + + curX = mFirstTitleGap; // the left-side gap + + int denomiator = mTabs.Number(); + if ( denomiator == 0 ) ++denomiator; + + mBorderOnlyWidth = (width - mFirstTitleGap - mHorizGap) / denomiator; + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + if ( tab.HasImg() ) + { + tab.mDims.x = tab.ImgWidth() + mTitleHorizGap*2; + tab.mDims.y = tab.ImgHeight() + mTitleVertGap*2; + } + else + { + tab.mDims.x = mBorderOnlyWidth; + tab.mDims.y = mTitleHeight; + } + + curX += tab.mDims.x; + + pNode = pNode->Next(); + } + + curX += mHorizGap; // the right-side gap + + // if curX has'nt ran out of bounds, leave IMG_ONLY layout and return + if ( curX < width - mHorizGap ) + return; + + // pass #3 - set the narrowest layout wxTITLE_BORDER_ONLY + + mLayoutType = wxTITLE_BORDER_ONLY; + + pNode = mTabs.First(); + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + tab.mDims.x = mBorderOnlyWidth; + tab.mDims.y = mTitleHeight; + + pNode = pNode->Next(); + } +} +//--------------------------------------------------------------------------- +// wx event handlers +//--------------------------------------------------------------------------- +void wxTabbedWindow::OnPaint( wxPaintEvent& event ) +{ + wxPaintDC dc(this); + DrawDecorations( dc ); +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::OnSize ( wxSizeEvent& event ) +{ + SetBackgroundColour( wxColour( 192,192,192 ) ); + RecalcLayout(TRUE); +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::OnBkErase( wxEraseEvent& event ) +{ + // do nothing +} +//--------------------------------------------------------------------------- +void wxTabbedWindow::OnLButtonDown( wxMouseEvent& event ) +{ + // floats, why? + int x = (int)event.m_x; + int y = (int)event.m_y; + + int tabNo = HitTest( wxPoint(x,y) ); + + if ( tabNo != -1 ) + { + SetActiveTab( tabNo ); + } +} +//--------------------------------------------------------------------------- +// Implementation for class wxPaggedWindow +//--------------------------------------------------------------------------- +IMPLEMENT_DYNAMIC_CLASS( wxPaggedWindow, wxTabbedWindow ) +//--------------------------------------------------------------------------- +BEGIN_EVENT_TABLE( wxPaggedWindow, wxTabbedWindow ) + EVT_SIZE ( wxPaggedWindow::OnSize ) + EVT_PAINT ( wxPaggedWindow::OnPaint ) + EVT_LEFT_DOWN( wxPaggedWindow::OnLButtonDown ) + EVT_LEFT_UP ( wxPaggedWindow::OnLButtonUp ) + EVT_MOTION ( wxPaggedWindow::OnMouseMove ) + EVT_SCROLL ( wxPaggedWindow::OnScroll ) +END_EVENT_TABLE() +//--------------------------------------------------------------------------- +// border for pagged-window is 2 shaded-lines +//--------------------------------------------------------------------------- +#undef BORDER_SZ +#define BORDER_SZ 2 +//--------------------------------------------------------------------------- +wxPaggedWindow::wxPaggedWindow() + + : mScrollEventInProgress( FALSE ), + + mTabTrianGap(4), + + mWhiteBrush( wxColour(255,255,255), wxSOLID ), + mGrayBrush ( wxColour(192,192,192), wxSOLID ), + + mCurentRowOfs( 0 ), + mAdjustableTitleRowLen( 300 ), + + mIsDragged ( FALSE ), + mDagOrigin ( 0 ), + mCursorChanged( FALSE ), + mResizeCursor ( wxCURSOR_SIZEWE ), + mNormalCursor ( wxCURSOR_ARROW ) +{ + mTitleVertGap = 2; + mTitleHorizGap = 10; + mNoVertScroll = TRUE; // Horizontale Scroll abschalten +} +//--------------------------------------------------------------------------- +wxPaggedWindow::~wxPaggedWindow() +{ + // nothing (base class handles destruction) +} +//--------------------------------------------------------------------------- +wxFont wxPaggedWindow::GetLabelingFont() +{ + wxFont font; + +#ifdef __WINDOWS__ + font.SetFaceName("Comic Sans MS"); +#else + font.SetFamily( wxSWISS ); +#endif + + font.SetStyle(40); + font.SetWeight(40); + font.SetPointSize( 8 ); + + return font; +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::OnTabAdded( twTabInfo* pInfo ) +{ + int units = GetWholeTabRowLen() / 20; + + mpTabScroll->SetScrollbar( 0, 1, units, 1, FALSE ); +} +//--------------------------------------------------------------------------- +wxScrollBar& wxPaggedWindow::GetVerticalScrollBar() +{ + return *mpVertScroll; +} +//--------------------------------------------------------------------------- +wxScrollBar& wxPaggedWindow::GetHorizontalScrollBar() +{ + return *mpHorizScroll; +} +//--------------------------------------------------------------------------- +int wxPaggedWindow::GetWholeTabRowLen() +{ + wxNode* pNode = mTabs.First(); + + int len = 0; + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + len += tab.mDims.x; + pNode = pNode->Next(); + } + + return len; +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::DrawPaperBar( twTabInfo& tab, int x, int y, + wxBrush& brush, wxPen& pen, wxDC& dc ) +{ + wxPoint poly[4]; + + // draw organizer-style paper outlet + + poly[0].x = x - mTabTrianGap; + poly[0].y = y; + + poly[1].x = x + mTabTrianGap; + poly[1].y = y + tab.mDims.y-1; + + poly[2].x = x + tab.mDims.x - mTabTrianGap; + poly[2].y = y + tab.mDims.y-1; + + poly[3].x = x + tab.mDims.x + mTabTrianGap; + poly[3].y = y; + + dc.SetPen( pen ); + dc.SetBrush( brush ); + + dc.DrawPolygon( 4, poly ); + + long w,h; + + // set select default font of the window into it's device context + dc.SetFont( GetLabelingFont() ); + + dc.SetTextBackground( brush.GetColour() ); + + dc.GetTextExtent(tab.mText, &w, &h ); + + if ( tab.HasImg() ) + { + wxMemoryDC tmpDc; + tmpDc.SelectObject( tab.GetImg() ); + + dc.Blit( x + mTitleHorizGap, + y + ( tab.mDims.y - tab.ImgHeight() ) / 2, + tab.ImgWidth(), + tab.ImgHeight(), + &tmpDc, 0, 0, wxCOPY + ); + } + + if ( tab.HasText() ) + { + int tx = x + mTitleHorizGap + + tab.ImgWidth() + tab.ImageToTxtGap(mImageTextGap); + + dc.DrawText( tab.GetText(), tx, y + ( tab.mDims.y - h ) / 2 ); + } +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::DrawDecorations( wxDC& dc ) +{ + // FIXME:: the is big body have to be split! + + int width, height; + GetClientSize( &width, &height ); + + int curX = mHorizGap; + int curY = mVertGap; + + int xSize = width - mHorizGap*2; + int ySize = height - mVertGap*2; + + DrawShadedRect( curX, curY, xSize, ySize, + mDarkPen, mWhitePen, dc ); + + DrawShadedRect( curX+1, curY+1, xSize-2, ySize-2, + mBlackPen, mGrayPen, dc ); + + // draw inactive tab title bars frist (left-to-right) + + wxNode* pNode = mTabs.First(); + int tabNo = 0; + + /* OLD STUFF:: + curX = mTitleRowStart; + curY = height - mVertGap - BORDER_SZ - mTitleHeight; + */ + + curX = mTabTrianGap; + curY = 0; + + // FOR NOW:: avoid creating bitmap with invalid dimensions + + if ( mTitleRowLen < 1 || mTitleHeight < 1 ) return; + + wxMemoryDC tmpDc; + wxBitmap tmpBmp( mTitleRowLen, mTitleHeight ); + + tmpDc.SelectObject( tmpBmp ); + tmpDc.SetPen( mGrayPen ); + tmpDc.SetBrush( mGrayBrush ); + tmpDc.DrawRectangle( 0,0, mTitleRowLen, mTitleHeight ); + + tmpDc.SetDeviceOrigin( mCurentRowOfs, 0 ); + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + if ( tabNo != mActiveTab ) + + DrawPaperBar( tab, curX, curY, mGrayBrush, mBlackPen, tmpDc ); + + curX += tab.mDims.x; + + pNode = pNode->Next(); + ++tabNo; + } + + // finally, draw the active tab (white-filled) + + pNode = mTabs.First(); + tabNo = 0; + + curX = mTabTrianGap; + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + if ( tabNo == mActiveTab ) + { + DrawPaperBar( tab, curX, curY, mWhiteBrush, mBlackPen, tmpDc ); + + tmpDc.SetPen( mWhitePen ); + + tmpDc.DrawLine( curX - mTabTrianGap+1, curY, + curX + tab.mDims.x + mTabTrianGap, curY ); + break; + } + curX += tab.mDims.x; + + pNode = pNode->Next(); + ++tabNo; + } + + // back to initial device origin + + tmpDc.SetDeviceOrigin( 0, 0 ); + + // draw resize-hint-stick + + curX = mTitleRowLen - 6; + + DrawShadedRect( curX+0, 0+0, 6, mTitleHeight, mGrayPen, mBlackPen, tmpDc ); + DrawShadedRect( curX+1, 0+1, 6-2, mTitleHeight-2, mWhitePen, mDarkPen, tmpDc ); + DrawShadedRect( curX+2, 0+2, 6-4, mTitleHeight-4, mGrayPen, mGrayPen, tmpDc ); + + + + dc.Blit( mTitleRowStart, + height - mVertGap - BORDER_SZ - mTitleHeight, + mTitleRowLen, mTitleHeight, + &tmpDc, 0,0, wxCOPY ); +} +//--------------------------------------------------------------------------- +int wxPaggedWindow::HitTest( const wxPoint& pos ) +{ + return wxTabbedWindow::HitTest( pos ); +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::RecalcLayout(bool andRepaint) +{ + mTitleRowLen = mAdjustableTitleRowLen; + + if ( int(mpTabScroll) == -1 ) return; + + // scroll bars should be created after Create() for this window is called + if ( !mpTabScroll ) + { + mpTabScroll = + new wxScrollBar( this, -1, wxDefaultPosition, wxDefaultSize, wxSB_HORIZONTAL ); + + mpHorizScroll = + new wxScrollBar( this, -1, wxDefaultPosition, wxDefaultSize, wxSB_HORIZONTAL ); + if (!mNoVertScroll) // Vertical Scroll (Original) + mpVertScroll = new wxScrollBar( this, -1, wxDefaultPosition, wxDefaultSize, wxSB_VERTICAL ); + } + + { + int units = GetWholeTabRowLen() / 20; + + mpTabScroll->SetScrollbar( 0, 1, units, 1, FALSE ); + } + + // resetup position of the active tab + + int thumbLen = 16; // FOR NOW:: hardcoded + + int width, height; + GetClientSize( &width, &height ); + + mTitleHeight = thumbLen; + + int curX = mHorizGap + BORDER_SZ; + int curY = mVertGap + BORDER_SZ; + + int xSize; + if (!mNoVertScroll) // Vertical Scroll (Original) + xSize = width - mHorizGap*2 - BORDER_SZ*2 - thumbLen; + else + xSize = width - mHorizGap*2 - BORDER_SZ*2; + + int ySize = height - mVertGap*2 - BORDER_SZ*2 - mTitleHeight; + + SizeTabs( curX, curY, xSize, ySize, andRepaint ); + + // setup title bar LINES's horizontal scroll bar + + curY = height - mVertGap - BORDER_SZ - thumbLen; + + mpTabScroll->SetSize( curX, curY, thumbLen*2, thumbLen ); + + // setup view's HORIZONTAL scroll bar + curX += thumbLen*2; + + mTitleRowStart = curX; + mFirstTitleGap = curX + mCurentRowOfs + mTabTrianGap; + + mTitleRowLen = wxMin( mAdjustableTitleRowLen, + width - mHorizGap - BORDER_SZ - thumbLen*4 - curX ); + + curX += mTitleRowLen; + + if (!mNoVertScroll) // Vertical Scroll (Original) + mpHorizScroll->SetSize( curX, curY,width - curX - mHorizGap - BORDER_SZ - thumbLen, thumbLen ); + else + mpHorizScroll->SetSize( curX, curY,width - curX - mHorizGap - BORDER_SZ-4, thumbLen ); + + // setup view's VERTICAL scroll bar + if (!mNoVertScroll) // Vertical Scroll (Original) + { + curX = width - mHorizGap - BORDER_SZ - thumbLen; + curY = mVertGap + BORDER_SZ; + mpVertScroll->SetSize( curX, curY, thumbLen,height - curY - mVertGap - BORDER_SZ - thumbLen); + } + // layout tab title bars + + mLayoutType = wxTITLE_IMG_AND_TEXT; + + wxNode* pNode = mTabs.First(); + + while( pNode ) + { + twTabInfo& tab = *((twTabInfo*)(pNode->Data())); + + wxWindowDC dc(this); + + long w,h; + + // set select default font of the window into it's device context + dc.SetFont( GetLabelingFont() ); + dc.GetTextExtent(tab.mText, &w, &h ); + + tab.mDims.x = w + tab.ImageToTxtGap(mImageTextGap) + + tab.ImgWidth() + mTitleHorizGap*2; + + tab.mDims.y = mTitleHeight; + + pNode = pNode->Next(); + } + + // disable title-bar scroller if there's nowhere to scroll to + + mpTabScroll->Enable( mTitleRowLen < GetWholeTabRowLen() || mCurentRowOfs < 0 ); +} +//--------------------------------------------------------------------------- +// event handlers +//--------------------------------------------------------------------------- +void wxPaggedWindow::OnPaint( wxPaintEvent& event ) +{ + wxPaintDC dc(this); + DrawDecorations( dc ); +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::OnSize ( wxSizeEvent& event ) +{ + wxTabbedWindow::OnSize(event); +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::OnLButtonDown( wxMouseEvent& event ) +{ + if ( mCursorChanged ) + { + mIsDragged = TRUE; + mDagOrigin = event.m_x; + + mOriginalTitleRowLen = mAdjustableTitleRowLen; + + CaptureMouse(); + } + else + { + wxTabbedWindow::OnLButtonDown( event ); + } +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::OnLButtonUp( wxMouseEvent& event ) +{ + if ( mIsDragged ) + { + mIsDragged = FALSE; + mCursorChanged = FALSE; + SetCursor( mNormalCursor ); + + ReleaseMouse(); + } +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::OnMouseMove( wxMouseEvent& event ) +{ + int width, height; + GetClientSize( &width, &height ); + + if ( !mIsDragged ) + { + int y = height - mVertGap - BORDER_SZ - mTitleHeight; + int x = mTitleRowStart + mTitleRowLen - 6; + + if ( event.m_x >= x && event.m_y >= y && + event.m_x < x + 6 && + event.m_y < y + mTitleHeight + ) + { + if ( !mCursorChanged ) + { + SetCursor( mResizeCursor ); + + mCursorChanged = TRUE; + } + } + else + if ( mCursorChanged ) + { + SetCursor( mNormalCursor ); + + mCursorChanged = FALSE; + } + } + else + if ( mIsDragged ) + { + mAdjustableTitleRowLen = mOriginalTitleRowLen + ( event.m_x - mDagOrigin ); + + // FOR NOW:: fixed + if ( mAdjustableTitleRowLen < 6 ) mAdjustableTitleRowLen = 6; + + wxWindowDC dc(this); + DrawDecorations( dc ); + + RecalcLayout(FALSE); + + //Refresh(); + } +} +//--------------------------------------------------------------------------- +void wxPaggedWindow::OnScroll( wxScrollEvent& event ) +{ + + wxScrollBar* pSender = (wxScrollBar*)event.GetEventObject(); + // wxMessageBox("wxPaggedWindow::OnScroll","-I->"); + if ( pSender == mpTabScroll ) + { + + int maxUnits = GetWholeTabRowLen() / 20; + + mCurentRowOfs = -event.GetPosition()*maxUnits; + + mFirstTitleGap = mTitleRowStart + mCurentRowOfs + mTabTrianGap; + + // let' it automatically disable itself if it's time + mpTabScroll->Enable( mTitleRowLen < GetWholeTabRowLen() || mCurentRowOfs < 0 ); + + // repaint title bars + wxWindowDC dc(this); + DrawDecorations( dc ); + } + else + if ( !mScrollEventInProgress ) + { + mScrollEventInProgress = TRUE; + + GetActiveTab()->GetEventHandler()->ProcessEvent( event ); + } + else + { + // event bounced back to us, from here we + // know that it has traveled the loop - thus it's processed! + + mScrollEventInProgress = FALSE; + } +} +//--------------------------------------------------------------------------- diff --git a/demos/dbbrowse/tabpgwin.h b/demos/dbbrowse/tabpgwin.h new file mode 100644 index 0000000000..e3f2ea61af --- /dev/null +++ b/demos/dbbrowse/tabpgwin.h @@ -0,0 +1,272 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: No names yet. +// Purpose: Contrib. demo +// Author: Aleksandras Gluchovas +// Modified by: 19990908 : mj10777@gmx.net +// 19990909 : +// - rename to tabpgwin +// - restruction of Variable declaration +// - to prevent Warnings under MingGW32 +// Modified by: 19990909 : mj10777@gmx.net +// - mNoVertScroll TRUE = no / FALSE = Original Code +// the Original Code Paints a Vertical Scroll in wxPaggedWindow +// which is not needed in this Version. Use TRUE for this. +// Created: 07/09/98 +// RCS-ID: $Id$ +// Copyright: (c) Aleksandras Gluchovas +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifndef __CONTROLAREA_G__ +#define __CONTROLAREA_G__ + +#ifdef __GNUG__ +#pragma interface "controlarea.h" +#endif + +#include "wx/defs.h" +#include "wx/window.h" +#include "wx/string.h" + +#define WXCONTROLAREA_VERSION 1.0 + +// layout types for title bars of the tabs +// (are selected up by evaluating the available free space ) + +class twTabInfo; // forward decl. + +#define wxTITLE_IMG_AND_TEXT 0 +#define wxTITLE_IMG_ONLY 1 +#define wxTITLE_BORDER_ONLY 2 + +/* + * class manages and decorates contained "tab"-windows. + * Draws decorations similar to those in "Project Workplace" + * of Microsoft Developer Studio 4.xx + */ + +class wxTabbedWindow : public wxPanel +{ + DECLARE_DYNAMIC_CLASS( wxTabbedWindow ) + +public: + + friend class wxTabbedWindowSerializer; + + wxList mTabs; + void HideInactiveTabs( bool andRepaint ); + + // overrride,to provide different font for tab-labels + + virtual wxFont GetLabelingFont(); + + // FOR NOW:: scrollbars are actually related to wxPaggedWindow + + wxScrollBar* mpTabScroll; + wxScrollBar* mpHorizScroll; + wxScrollBar* mpVertScroll; + +public: + + // public properties (invoke ReclaclLayout(TRUE) to apply changes) + + int mVertGap; // default: 3 + int mHorizGap; // default: 5 + int mTitleVertGap; // default: 3 + int mTitleHorizGap; // default: 4 + int mImageTextGap; // default: 2 + int mFirstTitleGap; // default: 11 + int mBorderOnlyWidth; // default: 8 + + wxPen mWhitePen; // default: RGB(255,255,255) + wxPen mGrayPen; // default: RGB(192,192,192) + wxPen mDarkPen; // default: RGB(128,128,128) + wxPen mBlackPen; // default: RGB( 0, 0, 0) + + int mActiveTab; + int mTitleHeight; + int mLayoutType; + + // notifications (can be handled by derivatives) + + virtual void OnTabAdded( twTabInfo* pInfo ) {} + + virtual void SizeTabs(int x,int y, int width, int height, bool repant); + +public: + wxTabbedWindow(); + virtual ~wxTabbedWindow(); + + // tabs can be also added when the window is + // already displayed - "on the fly" + + virtual void AddTab( wxWindow* pContent, // contained window + wxString tabText, // tab label + wxString imageFileName = "", // if "", only text label is displayed + long imageType = wxBITMAP_TYPE_BMP ); + + // NOTE:: if this AddTab(..) overload is called, the + // image bitmap will not be serialized (if performed), + // use the above method instead, so that images could + // be restored using the given file names + + virtual void AddTab( wxWindow* pContent, + wxString tabText, + wxBitmap* pImage = NULL ); + + virtual void RemoveTab( int tabNo ); + + /* misc accessors */ + + virtual int GetTabCount(); + virtual wxWindow* GetTab( int tabNo ); + virtual wxWindow* GetActiveTab(); + virtual void SetActiveTab( int tabNo ); + + void DrawShadedRect( int x, int y, int width, int height, + wxPen& upperPen, wxPen& lowerPen, wxDC& dc ); + + virtual void DrawDecorations( wxDC& dc ); + + // return -1, if non of the title bars was hitted, + // otherwise the index of the hitted tab title bar + + virtual int HitTest( const wxPoint& pos ); + + // should be invoked to redisplay window with changed properties + + virtual void RecalcLayout( bool andRepaint = TRUE ); + + // event handlers + + void OnPaint( wxPaintEvent& event ); + void OnSize ( wxSizeEvent& event ); + + void OnBkErase( wxEraseEvent& event ); + void OnLButtonDown( wxMouseEvent& event ); + + DECLARE_EVENT_TABLE() +}; + +/* + * class manages and decorates contained "sheets" (or pages). + * Draws decorations similar to those in "Output window" + * of Microsoft Developer Studio 4.xx + */ + +class wxPaggedWindow : public wxTabbedWindow +{ + DECLARE_DYNAMIC_CLASS( wxPaggedWindow ) + // the protected: public: changes prevents Warnings in gcc +protected: + bool mScrollEventInProgress; +public: + int mTabTrianGap; + wxBrush mWhiteBrush; + wxBrush mGrayBrush; + int mCurentRowOfs; + int mAdjustableTitleRowLen; // setup by dragging mini-sash + // with the mosue pointer +protected: + // drag&drop state variables + bool mIsDragged; + int mDagOrigin; + bool mCursorChanged; + wxCursor mResizeCursor; + wxCursor mNormalCursor; + int mOriginalTitleRowLen; + +public: + int mTitleRowStart; + int mResizeNailGap; + int mTitleRowLen; // actual title row length + int mNoVertScroll; // No Vertical Scroll TRUE/FALSE + + void DrawPaperBar( twTabInfo& tab, int x, int y, + wxBrush& brush, wxPen& pen, wxDC& dc ); + + int GetWholeTabRowLen(); + + // adjusts scorllbars to fit around tabs + + virtual void OnTabAdded( twTabInfo* pInfo ); + + // sets smaller font for page-labels + + virtual wxFont GetLabelingFont(); + +public: + + +public: + wxPaggedWindow(); + ~wxPaggedWindow(); + + // NOTE:: use public methods of the base class + // to add "pages" to this window + + /* misc accessors */ + + // below two methods should be called after + // the tabs were added (AddTab(..)). Set up + // these scrollbars to match the needs of the + // tabs added into this area + + wxScrollBar& GetVerticalScrollBar(); + wxScrollBar& GetHorizontalScrollBar(); + + virtual void DrawDecorations( wxDC& dc ); + + // return -1, if non of the title bars was hitted, + // otherwise the index of the hitted tab title bar + + virtual int HitTest( const wxPoint& pos ); + + virtual void RecalcLayout( bool andRepaint = TRUE ); + + // event handlers + + void OnPaint( wxPaintEvent& event ); + void OnSize ( wxSizeEvent& event ); + void OnLButtonDown( wxMouseEvent& event ); + void OnLButtonUp ( wxMouseEvent& event ); + void OnMouseMove ( wxMouseEvent& event ); + void OnScroll ( wxScrollEvent& event ); + + DECLARE_EVENT_TABLE() +}; + +// helper structure of wxTabbedWindow + +class twTabInfo : public wxObject +{ + DECLARE_DYNAMIC_CLASS( twTabInfo ) +public: + twTabInfo(); + ~twTabInfo(); + + int ImgWidth(); + int ImgHeight(); + int ImageToTxtGap( int prefGap ); + + bool HasImg(); + wxBitmap& GetImg(); + // bool HasText(); + unsigned int HasText(); + wxString& GetText(); + wxWindow& GetContent(); + +public: + wxWindow* mpContent; + wxBitmap mBitMap; + + wxString mText; + wxSize mDims; + + // used for serialization + wxString mImageFile; + long mImageType; + +}; + +#endif