Make SaveQueryMemo a member of TQueryTab, and suppress reload dialog when SQL file was saved in Heidi, not from outside. Also, fix non working file modification watch for newly created files - was only started when loading an existing file.

This commit is contained in:
Ansgar Becker
2010-09-09 21:36:44 +00:00
parent 9231338fa9
commit eccf950566

View File

@ -38,11 +38,11 @@ type
pnlHelpers: TPanel; pnlHelpers: TPanel;
treeHelpers: TVirtualStringTree; treeHelpers: TVirtualStringTree;
Memo: TSynMemo; Memo: TSynMemo;
MemoFilename: String;
MemoFileRenamed: Boolean; MemoFileRenamed: Boolean;
MemoLineBreaks: TLineBreaks; MemoLineBreaks: TLineBreaks;
DirectoryWatch: TDirectoryWatch; DirectoryWatch: TDirectoryWatch;
MemofileModifiedTimer: TTimer; MemofileModifiedTimer: TTimer;
LastSaveTime: Cardinal;
spltHelpers: TSplitter; spltHelpers: TSplitter;
spltQuery: TSplitter; spltQuery: TSplitter;
tabsetQuery: TTabSet; tabsetQuery: TTabSet;
@ -53,8 +53,13 @@ type
function GetActiveResultTab: TResultTab; function GetActiveResultTab: TResultTab;
procedure DirectoryWatchNotify(const Sender: TObject; const Action: TWatchAction; const FileName: string); procedure DirectoryWatchNotify(const Sender: TObject; const Action: TWatchAction; const FileName: string);
procedure MemofileModifiedTimerNotify(Sender: TObject); procedure MemofileModifiedTimerNotify(Sender: TObject);
procedure SaveQueryMemo(Filename: String; OnlySelection: Boolean);
private
FMemoFilename: String;
procedure SetMemoFilename(Value: String);
public public
property ActiveResultTab: TResultTab read GetActiveResultTab; property ActiveResultTab: TResultTab read GetActiveResultTab;
property MemoFilename: String read FMemoFilename write SetMemoFilename;
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
end; end;
@ -854,7 +859,6 @@ type
procedure PlaceObjectEditor(Obj: TDBObject); procedure PlaceObjectEditor(Obj: TDBObject);
procedure SetTabCaption(PageIndex: Integer; Text: String); procedure SetTabCaption(PageIndex: Integer; Text: String);
function ConfirmTabClose(PageIndex: Integer): Boolean; function ConfirmTabClose(PageIndex: Integer): Boolean;
procedure SaveQueryMemo(Tab: TQueryTab; Filename: String; OnlySelection: Boolean);
procedure UpdateFilterPanel(Sender: TObject); procedure UpdateFilterPanel(Sender: TObject);
procedure DatabaseChanged(Database: String); procedure DatabaseChanged(Database: String);
procedure DBObjectsCleared(Database: String); procedure DBObjectsCleared(Database: String);
@ -1961,7 +1965,6 @@ begin
m.SelStart := 0; m.SelStart := 0;
m.SelEnd := 0; m.SelEnd := 0;
if QueryTabActive then begin if QueryTabActive then begin
SetTabCaption(PageControlMain.ActivePageIndex, '');
ActiveQueryTab.MemoFilename := ''; ActiveQueryTab.MemoFilename := '';
ActiveQueryTab.Memo.Modified := False; ActiveQueryTab.Memo.Modified := False;
end; end;
@ -3113,7 +3116,7 @@ begin
end; end;
end; end;
if CanSave = mrYes then begin if CanSave = mrYes then begin
SaveQueryMemo(ActiveQueryTab, SaveDialogSQLFile.FileName, (Sender as TAction).Tag = 1); ActiveQueryTab.SaveQueryMemo(SaveDialogSQLFile.FileName, (Sender as TAction).Tag = 1);
for i:=0 to QueryTabs.Count-1 do begin for i:=0 to QueryTabs.Count-1 do begin
if QueryTabs[i] = ActiveQueryTab then if QueryTabs[i] = ActiveQueryTab then
continue; continue;
@ -3130,7 +3133,7 @@ var
i: Integer; i: Integer;
begin begin
if ActiveQueryTab.MemoFilename <> '' then begin if ActiveQueryTab.MemoFilename <> '' then begin
SaveQueryMemo(ActiveQueryTab, ActiveQueryTab.MemoFilename, False); ActiveQueryTab.SaveQueryMemo(ActiveQueryTab.MemoFilename, False);
for i:=0 to QueryTabs.Count-1 do begin for i:=0 to QueryTabs.Count-1 do begin
if QueryTabs[i] = ActiveQueryTab then if QueryTabs[i] = ActiveQueryTab then
continue; continue;
@ -3143,31 +3146,6 @@ begin
end; end;
procedure TMainForm.SaveQueryMemo(Tab: TQueryTab; Filename: String; OnlySelection: Boolean);
var
Text, LB: String;
begin
Screen.Cursor := crHourGlass;
if OnlySelection then
Text := Tab.Memo.SelText
else
Text := Tab.Memo.Text;
LB := '';
case Tab.MemoLineBreaks of
lbsUnix: LB := LB_UNIX;
lbsMac: LB := LB_MAC;
lbsWide: LB := LB_WIDE;
end;
if LB <> '' then
Text := StringReplace(Text, CRLF, LB, [rfReplaceAll]);
SaveUnicodeFile( Filename, Text );
SetTabCaption(Tab.Number+tabData.PageIndex, ExtractFilename(Filename));
Tab.MemoFilename := Filename;
Tab.Memo.Modified := False;
Screen.Cursor := crDefault;
end;
procedure TMainForm.actSaveSQLSnippetExecute(Sender: TObject); procedure TMainForm.actSaveSQLSnippetExecute(Sender: TObject);
var var
snippetname : String; snippetname : String;
@ -5124,11 +5102,8 @@ begin
Tab.Memo.SelText := filecontent; Tab.Memo.SelText := filecontent;
Tab.Memo.SelStart := ActiveQueryMemo.SelEnd; Tab.Memo.SelStart := ActiveQueryMemo.SelEnd;
Tab.Memo.EndUpdate; Tab.Memo.EndUpdate;
SetTabCaption(PageControlMain.ActivePageIndex, sstr(ExtractFilename(filename), 70));
Tab.Memo.Modified := False; Tab.Memo.Modified := False;
Tab.MemoFilename := filename; Tab.MemoFilename := filename;
Tab.DirectoryWatch.Directory := ExtractFilePath(filename);
Tab.DirectoryWatch.Start;
Result := True; Result := True;
except on E:Exception do except on E:Exception do
// File does not exist, is locked or broken // File does not exist, is locked or broken
@ -8839,9 +8814,9 @@ begin
mrNo: Result := True; mrNo: Result := True;
mrYes: begin mrYes: begin
if Tab.MemoFilename <> '' then if Tab.MemoFilename <> '' then
SaveQueryMemo(Tab, Tab.MemoFilename, False) Tab.SaveQueryMemo(Tab.MemoFilename, False)
else if SaveDialogSQLFile.Execute then else if SaveDialogSQLFile.Execute then
SaveQueryMemo(Tab, SaveDialogSQLFile.FileName, False); Tab.SaveQueryMemo(SaveDialogSQLFile.FileName, False);
// The save dialog can be cancelled. // The save dialog can be cancelled.
Result := not Tab.Memo.Modified; Result := not Tab.Memo.Modified;
end; end;
@ -9658,6 +9633,7 @@ begin
MemofileModifiedTimer.Interval := 1000; MemofileModifiedTimer.Interval := 1000;
MemofileModifiedTimer.Enabled := False; MemofileModifiedTimer.Enabled := False;
MemofileModifiedTimer.OnTimer := MemofileModifiedTimerNotify; MemofileModifiedTimer.OnTimer := MemofileModifiedTimerNotify;
LastSaveTime := 0;
end; end;
@ -9695,7 +9671,7 @@ begin
end; end;
waModified: waModified:
if IsCurrentFile then begin if IsCurrentFile and (LastSaveTime < GetTickCount-MemofileModifiedTimer.Interval) then begin
MemofileModifiedTimer.Enabled := False; MemofileModifiedTimer.Enabled := False;
MemofileModifiedTimer.Enabled := True; MemofileModifiedTimer.Enabled := True;
end; end;
@ -9707,8 +9683,6 @@ begin
waRenamedNew: waRenamedNew:
if (not IsCurrentFile) and (MemoFilename <> '') and MemoFileRenamed then begin if (not IsCurrentFile) and (MemoFilename <> '') and MemoFileRenamed then begin
MemoFilename := DirectoryWatch.Directory + FileName; MemoFilename := DirectoryWatch.Directory + FileName;
Mainform.SetTabCaption(TabSheet.PageIndex, Filename);
Mainform.ValidateQueryControls(Sender);
MemoFileRenamed := False; MemoFileRenamed := False;
end; end;
@ -9732,6 +9706,47 @@ begin
end; end;
procedure TQueryTab.SaveQueryMemo(Filename: String; OnlySelection: Boolean);
var
Text, LB: String;
begin
Screen.Cursor := crHourGlass;
MainForm.ShowStatusMsg('Saving file ...');
if OnlySelection then
Text := Memo.SelText
else
Text := Memo.Text;
LB := '';
case MemoLineBreaks of
lbsUnix: LB := LB_UNIX;
lbsMac: LB := LB_MAC;
lbsWide: LB := LB_WIDE;
end;
if LB <> '' then
Text := StringReplace(Text, CRLF, LB, [rfReplaceAll]);
SaveUnicodeFile( Filename, Text );
MemoFilename := Filename;
Memo.Modified := False;
LastSaveTime := GetTickCount;
MainForm.ShowStatusMsg;
Screen.Cursor := crDefault;
end;
procedure TQueryTab.SetMemoFilename(Value: String);
begin
FMemoFilename := Value;
MainForm.SetTabCaption(TabSheet.PageIndex, sstr(ExtractFilename(FMemoFilename), 70));
MainForm.ValidateQueryControls(Self);
if FMemoFilename <> '' then begin
DirectoryWatch.Directory := ExtractFilePath(FMemoFilename);
DirectoryWatch.Start;
end else
DirectoryWatch.Stop;
end;
{ TResultTab } { TResultTab }