Merge pull request #1242 from keymanapp/developer-new-project-closes-open-files

[Developer] Opening or creating a new project saves and closes open editor files
This commit is contained in:
Marc Durdin 2018-10-11 06:09:17 +11:00 committed by GitHub
commit 9df52014ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 51 additions and 32 deletions

View file

@ -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);

View file

@ -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:

View file

@ -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;

View file

@ -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;

View file

@ -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:

View file

@ -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