diff --git a/source/about.pas b/source/about.pas index 6f066bc8..18a26523 100644 --- a/source/about.pas +++ b/source/about.pas @@ -70,8 +70,8 @@ begin // Assign text Caption := 'About '+AppName; lblAppName.Caption := AppName; - lblAppDescription.Caption := AppDescription; - lblAppVersion.Caption := 'Version '+AppVersion; + lblAppDescription.Caption := Mainform.AppDescription; + lblAppVersion.Caption := 'Version '+Mainform.AppVersion; FileAge(ParamStr(0), Compiled); lblAppCompiled.Caption := 'Compiled on: ' + DateTimeToStr(Compiled); lblAppWebpage.Caption := AppDomain; diff --git a/source/const.inc b/source/const.inc index 95104a49..f58c2264 100644 --- a/source/const.inc +++ b/source/const.inc @@ -269,9 +269,15 @@ const // Data grid: How many bytes to fetch from data fields that are potentially large. GRIDMAXDATA: Integer = 256; - // Data grid: How many rows to fetch at a time. GRIDMAXROWS: Cardinal = 1000; + // The InnoDB folks are raging over the lack of count(*) support + // in the storage engine. To avoid count(*), the first of these + // constants decide how many rows the data area should estimate + // in any table. The second value decides how many percent above the + // number of seen (or simulated) rows the scrollbar should project. + SIMULATE_INITIAL_ROWS = 10000; + SIMULATE_MORE_ROWS = 20; VTREE_NOTLOADED = 0; VTREE_LOADED = 1; diff --git a/source/helpers.pas b/source/helpers.pas index a6cc654d..aa317f51 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -846,7 +846,7 @@ begin else NodeCount := Grid.RootNodeCount; EnableProgressBar(NodeCount); - Generator := APPNAME+' '+AppVersion; + Generator := APPNAME+' '+Mainform.AppVersion; tmp := '' + CRLF + CRLF + diff --git a/source/main.pas b/source/main.pas index f6abddd2..bf06692d 100644 --- a/source/main.pas +++ b/source/main.pas @@ -714,29 +714,22 @@ type procedure actDataResetSortingExecute(Sender: TObject); procedure actReformatSQLExecute(Sender: TObject); private - ReachedEOT : Boolean; + ReachedEOT: Boolean; FDelimiter: String; - viewingdata : Boolean; - EditVariableForm : TfrmEditVariable; - FileNameSessionLog : String; - FileHandleSessionLog : Textfile; - SelectedTableColumns : TTableColumnList; - SelectedTableKeys : TTableKeyList; - SelectedTableForeignKeys : TForeignKeyList; - FilterPanelManuallyOpened : Boolean; - DataGridDB, DataGridTable : String; - PrevTableColWidths : TWideStringList; - DataGridHasChanges : Boolean; - FLastMouseUpOnPageControl : Cardinal; - FLastTabNumberOnMouseUp : Integer; - FLastMouseDownCloseButton : TObject; - DataGridResult : TGridResult; + FileNameSessionLog: String; + FileHandleSessionLog: Textfile; + FLastMouseUpOnPageControl: Cardinal; + FLastTabNumberOnMouseUp: Integer; + FLastMouseDownCloseButton: TObject; // Filter text per tab for filter panel - FilterTextVariables, FilterTextStatus, FilterTextProcessList, FilterTextCommandStats, - FilterTextDatabase, FilterTextData: String; + FilterTextVariables: String; + FilterTextStatus: String; + FilterTextProcessList: String; + FilterTextCommandStats: String; + FilterTextDatabase: String; + FilterTextData: String; PreviousFocusedNode: PVirtualNode; - function GetParamValue(const paramChar: Char; const paramName: - string; var curIdx: Byte; out paramValue: string): Boolean; + function GetParamValue(const paramChar: Char; const paramName: string; var curIdx: Byte; out paramValue: string): Boolean; procedure SetDelimiter(Value: String); procedure DisplayRowCountStats(MatchingRows: Int64 = -1); procedure insertFunction(Sender: TObject); @@ -754,8 +747,14 @@ type procedure DatabaseChanged(Database: String); public Connection: TMySQLConnection; - cancelling: Boolean; + SessionName: String; virtualDesktopName: string; + AllDatabases: TWideStringList; + Databases: TWideStringList; + btnAddTab: TPngSpeedButton; + QueryTabs: TObjectList; + + // Cached forms TableToolsDialog: TfrmTableTools; ViewEditor: TfrmView; UserManagerForm: TUserManagerForm; @@ -765,50 +764,71 @@ type TriggerEditor: TfrmTriggerEditor; OptionsForm: Toptionsform; SessionManager: TConnForm; - AllDatabases, Databases: TWideStringList; - TemporaryDatabase : String; - dataselected : Boolean; - editing : Boolean; - WindowNumber : Integer; - SessionName : String; + CreateDatabaseForm: TCreateDatabaseForm; + TableEditor: TfrmTableEditor; + InsertFiles: TfrmInsertFiles; + EditVariableForm: TfrmEditVariable; + + // Virtual Tree data arrays VTRowDataListVariables, VTRowDataListStatus, VTRowDataListProcesses, VTRowDataListCommandStats, - VTRowDataListTables : TVTreeDataArray; + VTRowDataListTables: TVTreeDataArray; + // Variables set by preferences dialog - prefRememberFilters : Boolean; - prefLogsqlnum, - prefLogSqlWidth, - prefMaxColWidth, - prefMaxTotalRows : Integer; - prefCSVSeparator, - prefCSVEncloser, - prefCSVTerminator : String; - prefLogToFile, - prefEnableBinaryEditor, - prefEnableDatetimeEditor, - prefEnableEnumEditor, - prefEnableSetEditor, - prefEnableNullBG, - prefExportLocaleNumbers : Boolean; - prefNullColorDefault, - prefNullBG : TColor; - CreateDatabaseForm : TCreateDatabaseForm; - TableEditor : TfrmTableEditor; - InsertFiles : TfrmInsertFiles; - FDataGridSelect : TWideStringList; - FDataGridSort : TOrderColArray; - FDataGridFocusedNodeIndex : Cardinal; + prefRememberFilters: Boolean; + prefLogsqlnum: Integer; + prefLogSqlWidth: Integer; + prefMaxColWidth: Integer; + prefMaxTotalRows: Integer; + prefCSVSeparator: String; + prefCSVEncloser: String; + prefCSVTerminator: String; + prefLogToFile: Boolean; + prefEnableBinaryEditor: Boolean; + prefEnableDatetimeEditor: Boolean; + prefEnableEnumEditor: Boolean; + prefEnableSetEditor: Boolean; + prefEnableNullBG: Boolean; + prefExportLocaleNumbers: Boolean; + prefNullColorDefault: TColor; + prefNullBG: TColor; + + // Data grid related stuff + FDataGridSelect: TWideStringList; + FDataGridSort: TOrderColArray; + FDataGridFocusedNodeIndex: Cardinal; FDataGridFocusedColumnIndex: TColumnIndex; - DataGridCurrentSelect, - DataGridCurrentFullSelect, - DataGridCurrentFrom, - DataGridCurrentFilter, - DataGridCurrentSort : String; - btnAddTab : TPngSpeedButton; - QueryTabs : TObjectList; + DataGridCurrentSelect: String; + DataGridCurrentFullSelect: String; + DataGridCurrentFrom: String; + DataGridCurrentFilter: String; + DataGridCurrentSort: String; + DataGridDB: String; + DataGridTable: String; + DataGridHasChanges: Boolean; + DataGridResult: TGridResult; SelectedTableCreateStatement: String; + SelectedTableColumns: TTableColumnList; + SelectedTableKeys: TTableKeyList; + SelectedTableForeignKeys: TForeignKeyList; + FilterPanelManuallyOpened: Boolean; + PrevTableColWidths: TWideStringList; + + // Executable file details + AppVerMajor: Integer; + AppVerMinor: Integer; + AppVerRelease: Integer; + AppVerRevision: Integer; + AppVersion: String; + AppDescription: String; + + // Common directories + DirnameCommonAppData: String; + DirnameUserAppData: String; + DirnameSnippets: String; + DirnameSessionLogs: String; property Delimiter: String read FDelimiter write SetDelimiter; procedure CallSQLHelpWithKeyword( keyword: String ); @@ -819,14 +839,11 @@ type procedure PopupQueryLoadRemoveAbsentFiles( sender: TObject ); procedure SessionConnect(Sender: TObject); function InitConnection(parHost, parSocketname, parPort, parUser, parPass, parCompress, parSession: String): Boolean; - function ActiveGrid: TVirtualStringTree; function GridResult(Grid: TBaseVirtualTree): TGridResult; overload; function GridResult(PageIndex: Integer): TGridResult; overload; - property ActiveDatabase : String read GetActiveDatabase write SetSelectedDatabase; property SelectedTable : TDBObject read GetSelectedTable; - procedure TestVTreeDataArray( P: PVTreeDataArray ); function GetVTreeDataArray( VT: TBaseVirtualTree ): PVTreeDataArray; procedure ActivateFileLogging; @@ -863,27 +880,10 @@ end; var - MainForm : TMainForm; - AppVerMajor, AppVerMinor, AppVerRelease, AppVerRevision: Integer; - AppVersion, AppDescription: String; - DirnameCommonAppData, - DirnameUserAppData, - DirnameSnippets, - DirnameSessionLogs : String; + MainForm: TMainForm; const - discname = 'not connected'; - ICON_MYSELF_CONNECTED = 38; - ICON_MYSELF_DISCONNECTED = -1; - ICON_OTHER_CONNECTED = 36; - ICON_OTHER_DISCONNECTED = -1; - // The InnoDB folks are raging over the lack of count(*) support - // in the storage engine. To avoid count(*), the first of these - // constants decide how many rows the data area should estimate - // in any table. The second value decides how many percent above the - // number of seen (or simulated) rows the scrollbar should project. - SIMULATE_INITIAL_ROWS = 10000; - SIMULATE_MORE_ROWS = 20; + // Customized messages MSG_UPDATECHECK = WM_USER + 1; MSG_ABOUT = WM_USER + 2; @@ -1194,8 +1194,6 @@ begin // Folder for session logfiles DirnameSessionLogs := DirnameUserAppData + 'Sessionlogs\'; - TemporaryDatabase := ''; - // SQLFiles-History FillPopupQueryLoad; @@ -2554,7 +2552,6 @@ var begin // Refresh // Force data tab update when appropriate. - dataselected := false; tab1 := PageControlMain.ActivePage; if ActiveControl = DBtree then RefreshTree(True) @@ -3272,7 +3269,6 @@ begin if (SelectedTable.Name = '') or (ActiveDatabase = '') then Exit; Screen.Cursor := crHourglass; - viewingdata := true; sl_query := TWideStringList.Create(); // Ensure grid has left editing mode so DataGrid.OnNewText applies its changes @@ -3399,8 +3395,6 @@ begin end; debug('mem: browse row initialization complete.'); - dataselected := true; - PageControlMainChange(Self); finally DataGrid.Header.Columns.EndUpdate; @@ -3418,7 +3412,6 @@ begin SelectNode(DataGrid, FDataGridFocusedNodeIndex); if DataGrid.Header.Columns.Count > FDataGridFocusedColumnIndex then DataGrid.FocusedColumn := FDataGridFocusedColumnIndex; - viewingdata := false; EnumerateRecentFilters; Screen.Cursor := crDefault; end; @@ -3828,7 +3821,6 @@ begin end; // Avoid excessive GridHighlightChanged() when flicking controls. - viewingdata := true; ProgressBarStatus.Hide; if Assigned(Results) and Results.HasResult then begin @@ -3883,7 +3875,6 @@ begin end; // Ensure controls are in a valid state ValidateControls(Sender); - viewingdata := false; Screen.Cursor := crDefault; ShowStatus( STATUS_MSG_READY ); end; @@ -8499,8 +8490,6 @@ var begin // Set window caption and taskbar text Cap := SessionName; - if WindowNumber <> 0 then - Cap := Cap + Format( ' (%d)', [WindowNumber] ); if ActiveDatabase <> '' then Cap := Cap + ' /' + ActiveDatabase; if SelectedTable.Name <> '' then diff --git a/source/options.pas b/source/options.pas index abfaa43b..8ccd64f3 100644 --- a/source/options.pas +++ b/source/options.pas @@ -293,7 +293,7 @@ begin Mainform.ActivateFileLogging else if Mainform.prefLogToFile then Mainform.DeactivateFileLogging; - btnOpenLogFolder.Enabled := DirectoryExists(DirnameSessionLogs); + btnOpenLogFolder.Enabled := DirectoryExists(Mainform.DirnameSessionLogs); Mainform.prefMaxColWidth := updownMaxColWidth.Position; Mainform.prefMaxTotalRows := maxrows; Mainform.prefCSVSeparator := editCSVSeparator.Text; @@ -392,7 +392,7 @@ begin // Log to file chkLogToFile.Checked := GetRegValue(REGNAME_LOGTOFILE, DEFAULT_LOGTOFILE); - btnOpenLogFolder.Enabled := DirectoryExists(DirnameSessionLogs); + btnOpenLogFolder.Enabled := DirectoryExists(Mainform.DirnameSessionLogs); // SQL: Mainform.SetupSynEditors; @@ -475,7 +475,7 @@ end; } procedure Toptionsform.btnOpenLogFolderClick(Sender: TObject); begin - ShellExec( '', DirnameSessionLogs ); + ShellExec( '', Mainform.DirnameSessionLogs ); end; {** diff --git a/source/tabletools.pas b/source/tabletools.pas index 458869f7..1959a048 100644 --- a/source/tabletools.pas +++ b/source/tabletools.pas @@ -961,7 +961,7 @@ begin WideFormat('# %-30s%s', ['Database:', DBObj.Database]) + CRLF + WideFormat('# %-30s%s', ['Server version:', Mainform.Connection.ServerVersionUntouched]) + CRLF + WideFormat('# %-30s%s', ['Server OS:', Mainform.Connection.GetVar('SHOW VARIABLES LIKE ' + esc('version_compile_os'), 1)]) + CRLF + - WideFormat('# %-30s%s', [APPNAME + ' version:', AppVersion]) + CRLF + + WideFormat('# %-30s%s', [APPNAME + ' version:', Mainform.AppVersion]) + CRLF + WideFormat('# %-30s%s', ['Date/time:', DateTimeToStr(Now)]) + CRLF + '# --------------------------------------------------------' + CRLF + CRLF + '/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;' + CRLF + diff --git a/source/updatecheck.pas b/source/updatecheck.pas index a9a0a88c..339f777a 100644 --- a/source/updatecheck.pas +++ b/source/updatecheck.pas @@ -104,8 +104,8 @@ begin // Prepare download CheckfileDownload := TDownLoadURL2.Create(Self); - CheckfileDownload.SetUserAgent(APPNAME + ' ' + AppVersion + ' update checker tool'); - CheckfileDownload.URL := APPDOMAIN + 'updatecheck.php?r='+IntToStr(AppVerRevision); + CheckfileDownload.SetUserAgent(APPNAME + ' ' + Mainform.AppVersion + ' update checker tool'); + CheckfileDownload.URL := APPDOMAIN + 'updatecheck.php?r='+IntToStr(Mainform.AppVerRevision); CheckfileDownload.Filename := GetTempDir + APPNAME + '_updatecheck.ini'; // Download the check file @@ -117,9 +117,9 @@ begin ReadCheckFile; // Developer versions probably have "unknown" (0) as revision, // which makes it impossible to compare the revisions. - if AppVerRevision = 0 then + if Mainform.AppVerRevision = 0 then Status('Error: Cannot determine current revision. Using a developer version?') - else if AppVerRevision = BuildRevision then + else if Mainform.AppVerRevision = BuildRevision then Status('Your '+APPNAME+' is up-to-date (no update available).') else if groupRelease.Enabled or btnBuild.Enabled then Status('Updates available.'); @@ -166,14 +166,14 @@ begin ReleaseVersion := Ini.ReadString(INISECT_RELEASE, 'Version', 'unknown'); ReleaseRevision := Ini.ReadInteger(INISECT_RELEASE, 'Revision', 0); ReleaseURL := Ini.ReadString(INISECT_RELEASE, 'URL', ''); - memoRelease.Lines.Add( 'Version ' + ReleaseVersion + ' (yours: '+AppVersion+')' ); + memoRelease.Lines.Add( 'Version ' + ReleaseVersion + ' (yours: '+Mainform.AppVersion+')' ); memoRelease.Lines.Add( 'Released: ' + Ini.ReadString(INISECT_RELEASE, 'Date', '') ); Note := Ini.ReadString(INISECT_RELEASE, 'Note', ''); if Note <> '' then memoRelease.Lines.Add( 'Note: ' + Note ); btnRelease.Caption := 'Download version ' + ReleaseVersion; // Enable the download button if the current version is outdated - groupRelease.Enabled := ReleaseRevision > AppVerRevision; + groupRelease.Enabled := ReleaseRevision > Mainform.AppVerRevision; btnRelease.Enabled := groupRelease.Enabled; memoRelease.Enabled := groupRelease.Enabled; if not memoRelease.Enabled then @@ -187,7 +187,7 @@ begin BuildRevision := Ini.ReadInteger(INISECT_BUILD, 'Revision', 0); BuildURL := Ini.ReadString(INISECT_BUILD, 'URL', ''); BuildSize := Ini.ReadInteger(INISECT_BUILD, 'Size', 0); - memoBuild.Lines.Add( 'Revision ' + IntToStr(BuildRevision) + ' (yours: '+IntToStr(AppVerRevision)+')' ); + memoBuild.Lines.Add( 'Revision ' + IntToStr(BuildRevision) + ' (yours: '+IntToStr(Mainform.AppVerRevision)+')' ); FileAge(ParamStr(0), Compiled); memoBuild.Lines.Add( 'Compiled: ' + Ini.ReadString(INISECT_BUILD, 'Date', '') + ' (yours: '+DateToStr(Compiled)+')' ); Note := Ini.ReadString(INISECT_BUILD, 'Note', ''); @@ -197,7 +197,7 @@ begin // A new release should have priority over a new nightly build. // So the user should not be able to download a newer build here // before having installed the new release. - btnBuild.Enabled := (AppVerRevision = 0) or ((BuildRevision > AppVerRevision) and (not btnRelease.Enabled)); + btnBuild.Enabled := (Mainform.AppVerRevision = 0) or ((BuildRevision > Mainform.AppVerRevision) and (not btnRelease.Enabled)); end; end;