From 840e970e27232420ec8d58c94bef3e2e947f1d7e Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 8 Oct 2018 06:57:48 +1100 Subject: [PATCH] [Developer] Opening or creating a new project saves and closes open editor files --- .../developer/TIKE/actions/dmActionsMain.pas | 16 +++----- .../developer/TIKE/child/UfrmMDIEditor.pas | 5 ++- ....UI.ImportWindowsKeyboardDialogManager.pas | 9 +---- windows/src/developer/TIKE/main/UfrmMain.pas | 39 +++++++++++++++++++ ...an.Developer.UI.Project.UfrmNewProject.pas | 6 +-- ...er.UI.Project.UfrmNewProjectParameters.pas | 8 +--- 6 files changed, 51 insertions(+), 32 deletions(-) diff --git a/windows/src/developer/TIKE/actions/dmActionsMain.pas b/windows/src/developer/TIKE/actions/dmActionsMain.pas index f7d4a347bd..fa7eb5954e 100644 --- a/windows/src/developer/TIKE/actions/dmActionsMain.pas +++ b/windows/src/developer/TIKE/actions/dmActionsMain.pas @@ -479,13 +479,15 @@ end; procedure TmodActionsMain.actProjectNewExecute(Sender: TObject); begin - // TODO: Close all existing editor forms + if not frmKeymanDeveloper.BeforeOpenProject then + Exit; ShowNewProjectForm(frmKeymanDeveloper); end; procedure TmodActionsMain.actProjectOpenAccept(Sender: TObject); begin - // TODO: Close all existing editor forms + if not frmKeymanDeveloper.BeforeOpenProject then + Exit; OpenProject(actProjectOpen.Dialog.FileName); end; @@ -767,16 +769,8 @@ begin end; procedure TmodActionsMain.actViewProjectExecute(Sender: TObject); -var - frmProject: TfrmProject; begin - with frmKeymanDeveloper do - begin - frmProject := ProjectForm; - if Assigned(frmProject) and (ActiveChild = frmProject) - then PostMessage(frmProject.Handle, WM_CLOSE, 0, 0) - else ShowProject; - end; + frmKeymanDeveloper.ToggleProject; end; procedure TmodActionsMain.actViewProjectUpdate(Sender: TObject); diff --git a/windows/src/developer/TIKE/child/UfrmMDIEditor.pas b/windows/src/developer/TIKE/child/UfrmMDIEditor.pas index c2088cf659..10c14351b0 100644 --- a/windows/src/developer/TIKE/child/UfrmMDIEditor.pas +++ b/windows/src/developer/TIKE/child/UfrmMDIEditor.pas @@ -189,7 +189,10 @@ begin case MessageDlg('The file '+s+' has changed.'+#13#10+'Do you wish to save changes?', mtConfirmation, mbYesNoCancel, 0) of mrYes: - CanClose := modActionsMain.actFileSave.Execute; + begin + frmKeymanDeveloper.ActiveChild := Self; + CanClose := modActionsMain.actFileSave.Execute; + end; mrNo: CanClose := True; mrCancel: diff --git a/windows/src/developer/TIKE/main/Keyman.Developer.UI.ImportWindowsKeyboardDialogManager.pas b/windows/src/developer/TIKE/main/Keyman.Developer.UI.ImportWindowsKeyboardDialogManager.pas index 9571b91c4e..9a2dd7bb5d 100644 --- a/windows/src/developer/TIKE/main/Keyman.Developer.UI.ImportWindowsKeyboardDialogManager.pas +++ b/windows/src/developer/TIKE/main/Keyman.Developer.UI.ImportWindowsKeyboardDialogManager.pas @@ -15,8 +15,6 @@ uses Vcl.Dialogs, Keyman.Developer.System.ImportWindowsKeyboard, - Keyman.Developer.System.Project.Project, - Keyman.Developer.UI.Project.ProjectUI, Keyman.Developer.UI.Project.UfrmNewProjectParameters, UfrmMain, UfrmSelectSystemKeyboard; @@ -83,12 +81,7 @@ begin f.Free; end; - // TODO: Refactor this hunk of junk code below that is repeated all over the place - FGlobalProject.Save; - frmKeymanDeveloper.ProjectForm.Free; - FreeGlobalProjectUI; - LoadGlobalProjectUI(ProjectFilename); - frmKeymanDeveloper.ShowProject; + frmKeymanDeveloper.OpenProject(ProjectFilename); Result := True; end; diff --git a/windows/src/developer/TIKE/main/UfrmMain.pas b/windows/src/developer/TIKE/main/UfrmMain.pas index 960c9c5552..cc6fd1982d 100644 --- a/windows/src/developer/TIKE/main/UfrmMain.pas +++ b/windows/src/developer/TIKE/main/UfrmMain.pas @@ -362,8 +362,11 @@ type property ActiveChildIndex: Integer read GetActiveChildIndex write SetActiveChildIndex; + function BeforeOpenProject: Boolean; + procedure OpenProject(const ProjectFilename: string); procedure ShowProject; function ProjectForm: TfrmProject; + procedure ToggleProject; procedure ShowDebug(AShow: Boolean); @@ -887,6 +890,16 @@ begin ProjectForm.SetGlobalProject; end; +procedure TfrmKeymanDeveloper.ToggleProject; +var + frmProject: TfrmProject; +begin + frmProject := ProjectForm; + if Assigned(frmProject) and (ActiveChild = frmProject) + then PostMessage(frmProject.Handle, WM_CLOSE, 0, 0) + else ShowProject; +end; + procedure TfrmKeymanDeveloper.InitDock; begin AppStorage := TJvAppRegistryStorage.Create(self); @@ -1165,6 +1178,32 @@ begin Result := OpenEditor(FFileName, TfrmOSKEditor); end; +function TfrmKeymanDeveloper.BeforeOpenProject: Boolean; +var + i: Integer; +begin + for i := 0 to FChildWindows.Count - 1 do + if not FChildWindows[i].CloseQuery then + Exit(False); + + Result := True; +end; + +procedure TfrmKeymanDeveloper.OpenProject(const ProjectFilename: string); +var + i: Integer; +begin + // Close child windows + for i := 0 to FChildWindows.Count - 1 do + FChildWindows[i].Close; + + FGlobalProject.Save; + ProjectForm.Free; + FreeGlobalProjectUI; + LoadGlobalProjectUI(''); + ShowProject; +end; + function TfrmKeymanDeveloper.OpenEditor(FFileName: string; frmClass: TfrmTikeEditorClass): TfrmTikeEditor; var i, n: Integer; diff --git a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProject.pas b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProject.pas index 5bcbeb908c..531cd92e0c 100644 --- a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProject.pas +++ b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProject.pas @@ -108,11 +108,7 @@ begin Result := ShowNewProjectParameters(Owner); kptBlank: begin - FGlobalProject.Save; - frmKeymanDeveloper.ProjectForm.Free; - FreeGlobalProjectUI; - LoadGlobalProjectUI(''); - frmKeymanDeveloper.ShowProject; + frmKeymanDeveloper.OpenProject(''); Result := True; end; kptImportWindowsKeyboard: diff --git a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProjectParameters.pas b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProjectParameters.pas index 045e37b8f4..2bcbfafd02 100644 --- a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProjectParameters.pas +++ b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmNewProjectParameters.pas @@ -105,10 +105,8 @@ uses UfrmMain, utilstr, utilsystem, - Keyman.Developer.System.Project.Project, Keyman.Developer.System.Project.ProjectFile, Keyman.Developer.System.KeyboardProjectTemplate, - Keyman.Developer.UI.Project.ProjectUI, Keyman.Developer.UI.UfrmSelectBCP47Language, Keyman.System.KeyboardUtils; @@ -143,11 +141,7 @@ begin kpt.BCP47Tags := f.BCP47Tags; kpt.Generate; - FGlobalProject.Save; - frmKeymanDeveloper.ProjectForm.Free; - FreeGlobalProjectUI; - LoadGlobalProjectUI(kpt.ProjectFilename); - frmKeymanDeveloper.ShowProject; + frmKeymanDeveloper.OpenProject(kpt.ProjectFilename); Result := True; finally