Commit fd8abd6

Nick committed on
Add dialog for ensuring save of work
commit fd8abd6375522f17860a6fcf53f31ba5926d2996 parent bd682b2
2 changed files +43−4
Modifiedtracker.lfm +7−3
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 1063 2 Left = 593
3 Height = 1250 3 Height = 1250
4 Top = 283 4 Top = 627
5 Width = 2067 5 Width = 2067
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 1216 7 ClientHeight = 1216
@@ -10,6 +10,7 @@ object frmTracker: TfrmTracker
10 KeyPreview = True 10 KeyPreview = True
11 Menu = MainMenu1 11 Menu = MainMenu1
12 OnClose = FormClose 12 OnClose = FormClose
13 OnCloseQuery = FormCloseQuery
13 OnCreate = FormCreate 14 OnCreate = FormCreate
14 OnKeyDown = FormKeyDown 15 OnKeyDown = FormKeyDown
15 OnKeyUp = FormKeyUp 16 OnKeyUp = FormKeyUp
@@ -1891,12 +1892,14 @@ object frmTracker: TfrmTracker
1891 Caption = 'File' 1892 Caption = 'File'
1892 object MenuItem12: TMenuItem 1893 object MenuItem12: TMenuItem
1893 Action = FileOpen1 1894 Action = FileOpen1
1895 OnClick = MenuItem12Click
1894 end 1896 end
1895 object MenuItem13: TMenuItem 1897 object MenuItem13: TMenuItem
1896 Action = FileSaveAs1 1898 Action = FileSaveAs1
1897 end 1899 end
1898 object MenuItem14: TMenuItem 1900 object MenuItem14: TMenuItem
1899 Action = FileExit1 1901 Caption = 'E&xit'
1902 Hint = 'Exit'
1900 OnClick = MenuItem14Click 1903 OnClick = MenuItem14Click
1901 end 1904 end
1902 end 1905 end
@@ -2005,6 +2008,7 @@ object frmTracker: TfrmTracker
2005 Hint = 'Save As' 2008 Hint = 'Save As'
2006 ImageIndex = 59 2009 ImageIndex = 59
2007 ShortCut = 16467 2010 ShortCut = 16467
2011 BeforeExecute = FileSaveAs1BeforeExecute
2008 OnAccept = FileSaveAs1Accept 2012 OnAccept = FileSaveAs1Accept
2009 end 2013 end
2010 object FileExit1: TFileExit 2014 object FileExit1: TFileExit
Modifiedtracker.pas +36−1
@@ -202,6 +202,8 @@ type
202 procedure Button1Click(Sender: TObject); 202 procedure Button1Click(Sender: TObject);
203 procedure Duty1VisualizerClick(Sender: TObject); 203 procedure Duty1VisualizerClick(Sender: TObject);
204 procedure EditDelete1Execute(Sender: TObject); 204 procedure EditDelete1Execute(Sender: TObject);
205 procedure FileSaveAs1BeforeExecute(Sender: TObject);
206 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
205 procedure FormShow(Sender: TObject); 207 procedure FormShow(Sender: TObject);
206 procedure InstrumentComboBoxChange(Sender: TObject); 208 procedure InstrumentComboBoxChange(Sender: TObject);
207 procedure CopyActionExecute(Sender: TObject); 209 procedure CopyActionExecute(Sender: TObject);
@@ -239,6 +241,7 @@ type
239 procedure DebugShiteButtonClick(Sender: TObject); 241 procedure DebugShiteButtonClick(Sender: TObject);
240 procedure MenuItem10Click(Sender: TObject); 242 procedure MenuItem10Click(Sender: TObject);
241 procedure MenuItem11Click(Sender: TObject); 243 procedure MenuItem11Click(Sender: TObject);
244 procedure MenuItem12Click(Sender: TObject);
242 procedure MenuItem14Click(Sender: TObject); 245 procedure MenuItem14Click(Sender: TObject);
243 procedure MenuItem17Click(Sender: TObject); 246 procedure MenuItem17Click(Sender: TObject);
244 procedure MenuItem18Click(Sender: TObject); 247 procedure MenuItem18Click(Sender: TObject);
@@ -325,6 +328,7 @@ type
325 DrawingWave: Boolean; 328 DrawingWave: Boolean;
326 Playing: Boolean; 329 Playing: Boolean;
327 LoadingFile: Boolean; 330 LoadingFile: Boolean;
331 SaveSucceeded: Boolean;
328 332
329 {PatternsNode, }InstrumentsNode, WavesNode, RoutinesNode: TTreeNode; 333 {PatternsNode, }InstrumentsNode, WavesNode, RoutinesNode: TTreeNode;
330 334
@@ -354,6 +358,7 @@ type
354 358
355 procedure RecreateTrackerGrid; 359 procedure RecreateTrackerGrid;
356 procedure UpdateUIAfterLoad; 360 procedure UpdateUIAfterLoad;
361 function CheckUnsavedChanges: Boolean;
357 362
358 procedure DrawWaveform(PB: TPaintBox; Wave: TWave); 363 procedure DrawWaveform(PB: TPaintBox; Wave: TWave);
359 procedure DrawVizualizer(PB: TPaintBox; Channel: Integer); 364 procedure DrawVizualizer(PB: TPaintBox; Channel: Integer);
@@ -408,6 +413,19 @@ begin
408 PageControl1.ActivePageIndex := 0; 413 PageControl1.ActivePageIndex := 0;
409 end; 414 end;
410 415
416 function TfrmTracker.CheckUnsavedChanges: Boolean;
417 begin
418 case MessageDlg('Save?', 'Do you want to save your work before closing this file?',
419 mtWarning, [mbYes, mbNo, mbCancel], 0) of
420 mrYes: begin
421 FileSaveAs1.Execute;
422 Exit(SaveSucceeded)
423 end;
424 mrNo: Exit(True);
425 mrCancel: Exit(False)
426 end;
427 end;
428
411 procedure TfrmTracker.DrawWaveform(PB: TPaintBox; Wave: TWave); 429 procedure TfrmTracker.DrawWaveform(PB: TPaintBox; Wave: TWave);
412 var 430 var
413 Interval{, HInterval}: Integer; 431 Interval{, HInterval}: Integer;
@@ -1125,6 +1143,7 @@ begin
1125 stream := TFileStream.Create(FileSaveAs1.Dialog.FileName, fmCreate); 1143 stream := TFileStream.Create(FileSaveAs1.Dialog.FileName, fmCreate);
1126 try 1144 try
1127 WriteSongToStream(stream, Song); 1145 WriteSongToStream(stream, Song);
1146 SaveSucceeded := True;
1128 finally 1147 finally
1129 stream.Free; 1148 stream.Free;
1130 end; 1149 end;
@@ -1220,6 +1239,16 @@ begin
1220 1239
1221 end; 1240 end;
1222 1241
1242 procedure TfrmTracker.FileSaveAs1BeforeExecute(Sender: TObject);
1243 begin
1244 SaveSucceeded := False;
1245 end;
1246
1247 procedure TfrmTracker.FormCloseQuery(Sender: TObject; var CanClose: boolean);
1248 begin
1249 CanClose := CheckUnsavedChanges;
1250 end;
1251
1223 procedure TfrmTracker.FormShow(Sender: TObject); 1252 procedure TfrmTracker.FormShow(Sender: TObject);
1224 begin 1253 begin
1225 // HACK: This needs to be done due to a scaling bug in the LCL. 1254 // HACK: This needs to be done due to a scaling bug in the LCL.
@@ -1328,9 +1357,15 @@ begin
1328 TrackerGrid.DoUndo; 1357 TrackerGrid.DoUndo;
1329 end; 1358 end;
1330 1359
1360 procedure TfrmTracker.MenuItem12Click(Sender: TObject);
1361 begin
1362 CheckUnsavedChanges;
1363 end;
1364
1331 procedure TfrmTracker.MenuItem14Click(Sender: TObject); 1365 procedure TfrmTracker.MenuItem14Click(Sender: TObject);
1332 begin 1366 begin
1333 Halt; 1367 if CheckUnsavedChanges then
1368 Halt;
1334 end; 1369 end;
1335 1370
1336 procedure TfrmTracker.MenuItem17Click(Sender: TObject); 1371 procedure TfrmTracker.MenuItem17Click(Sender: TObject);