Index: CHANGES.txt
==================================================================
--- CHANGES.txt
+++ CHANGES.txt
@@ -1,5 +1,11 @@
+Version [next]
+
+[Improved] Multi-threading is more standards-compliant now (thanks @Th69).
+
+-------------------------------
+
Version 0.13.1
2024-01-29
[Improved] Finding groff happens in a thread now. No more blocking on startup.
[Removed] So we got rid of the loading window again.
Index: src/groffstudio.lpi
==================================================================
--- src/groffstudio.lpi
+++ src/groffstudio.lpi
@@ -21,12 +21,12 @@
-
-
+
+
Index: src/unit1.lfm
==================================================================
--- src/unit1.lfm
+++ src/unit1.lfm
@@ -11,12 +11,12 @@
LCLVersion = '3.99.0.0'
OnClose = FormClose
OnCreate = FormCreate
object MainStatusBar: TStatusBar
Left = 0
- Height = 23
- Top = 669
+ Height = 18
+ Top = 674
Width = 847
Panels = <
item
Text = 'file name with save status'
Width = 200
@@ -41,40 +41,40 @@
Style = tsFlatButtons
TabIndex = 0
TabOrder = 1
object tsEdit: TTabSheet
Caption = 'edit a groff document'
- ClientHeight = 631
- ClientWidth = 819
+ ClientHeight = 626
+ ClientWidth = 821
ParentFont = False
object GroupBox1: TGroupBox
Left = 10
Height = 66
- Top = 560
- Width = 799
+ Top = 555
+ Width = 801
Align = alBottom
BorderSpacing.Left = 10
BorderSpacing.Right = 10
BorderSpacing.Bottom = 5
Caption = 'build'
- ClientHeight = 46
- ClientWidth = 795
+ ClientHeight = 39
+ ClientWidth = 791
TabOrder = 0
object Label1: TLabel
Left = 184
- Height = 15
+ Height = 16
Top = -4
- Width = 72
+ Width = 83
Caption = 'macro to use:'
ParentColor = False
end
object cmbMacro: TComboBox
Left = 184
- Height = 23
+ Height = 20
Top = 16
Width = 100
- ItemHeight = 15
+ ItemHeight = 19
Items.Strings = (
'man'
'me'
'mm'
'mom'
@@ -82,50 +82,50 @@
)
TabOrder = 0
Text = '[ select ]'
end
object Label2: TLabel
- Left = 672
- Height = 15
+ Left = 659
+ Height = 16
Top = -4
- Width = 78
+ Width = 87
Anchors = [akTop, akRight]
Caption = 'output format:'
ParentColor = False
end
object rdPs: TRadioButton
- Left = 673
- Height = 19
+ Left = 655
+ Height = 18
Top = 16
- Width = 71
+ Width = 85
Anchors = [akTop, akRight]
Caption = 'PostScript'
TabOrder = 1
end
object rdPdf: TRadioButton
- Left = 753
- Height = 19
+ Left = 738
+ Height = 18
Top = 16
- Width = 39
+ Width = 50
Anchors = [akTop, akRight]
Caption = 'PDF'
TabOrder = 2
end
object Label3: TLabel
- Left = 419
- Height = 15
+ Left = 400
+ Height = 16
Top = -4
- Width = 76
+ Width = 91
Anchors = [akTop, akRight]
Caption = 'preprocessors:'
ParentColor = False
end
object Label4: TLabel
- Left = 544
- Height = 15
+ Left = 533
+ Height = 16
Top = -4
- Width = 34
+ Width = 41
Anchors = [akTop, akRight]
Caption = 'extras:'
ParentColor = False
end
object btnBuild: TButton
@@ -141,21 +141,21 @@
TabOrder = 3
OnClick = btnBuildClick
end
object chkLogFile: TCheckBox
Left = 80
- Height = 19
+ Height = 18
Hint = 'If enabled, a log file containing the groff output will be placed alongside the source document.'
Top = 16
- Width = 68
+ Width = 79
Caption = 'log to file'
Enabled = False
TabOrder = 4
end
object chkBoxPreprocessors: TCheckComboBox
- Left = 419
- Height = 22
+ Left = 415
+ Height = 20
Top = 15
Width = 100
Anchors = [akTop, akRight]
ItemHeight = 16
Items.Strings = (
@@ -165,66 +165,68 @@
'pic'
'refer'
'tbl'
)
TabOrder = 5
+ Text = '0'
end
object chkBoxExtras: TCheckComboBox
- Left = 544
- Height = 22
+ Left = 540
+ Height = 20
Top = 15
Width = 100
Anchors = [akTop, akRight]
ItemHeight = 16
Items.Strings = (
'hdtbl'
'Pdfmark'
)
TabOrder = 6
+ Text = '0'
end
end
object btnSaveGroff: TButton
- Left = 734
+ Left = 736
Height = 28
- Top = 528
+ Top = 523
Width = 75
Anchors = [akRight, akBottom]
Caption = 'save'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
OnClick = btnSaveGroffClick
end
object btnLoadGroff: TButton
- Left = 653
+ Left = 655
Height = 28
- Top = 528
+ Top = 523
Width = 75
Anchors = [akRight, akBottom]
Caption = 'load'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
OnClick = btnLoadGroffClick
end
object Label5: TLabel
- Left = 197
- Height = 15
- Top = 541
- Width = 438
+ Left = 128
+ Height = 16
+ Top = 535
+ Width = 509
Anchors = [akRight, akBottom]
Caption = 'note that everything build-related will be stored in the document''s storage directory'
Font.Color = clBlue
Font.Style = [fsItalic]
ParentColor = False
ParentFont = False
end
inline SynEdit1: TSynEdit
Left = 10
- Height = 523
+ Height = 518
Top = 0
- Width = 799
+ Width = 801
Anchors = [akTop, akLeft, akRight, akBottom]
Font.CharSet = 4
Font.Height = -13
Font.Name = 'Andale Mono'
Font.Pitch = fpFixed
@@ -733,85 +735,85 @@
end
end
end
object tsSettings: TTabSheet
Caption = 'groffstudio settings'
- ClientHeight = 631
- ClientWidth = 819
+ ClientHeight = 626
+ ClientWidth = 821
object chkAutoSaveBuildSettings: TCheckBox
Left = 0
- Height = 19
+ Height = 18
Top = 16
- Width = 309
+ Width = 341
Caption = 'save and restore the chosen build settings for next time'
TabOrder = 0
end
object btnSaveSettings: TButton
- Left = 730
+ Left = 732
Height = 25
- Top = 600
+ Top = 595
Width = 91
Anchors = [akRight, akBottom]
Caption = 'save settings'
TabOrder = 1
OnClick = btnSaveSettingsClick
end
object Label14: TLabel
Left = 0
- Height = 15
+ Height = 16
Top = 80
- Width = 129
+ Width = 150
Caption = 'yes, that''s all for now. :-)'
ParentColor = False
end
object chkUpdateCheckOnStart: TCheckBox
Left = 0
- Height = 19
+ Height = 18
Top = 40
- Width = 169
+ Width = 190
Caption = 'check for updates on startup'
TabOrder = 2
end
end
object tsGroff: TTabSheet
Caption = 'groff version'
- ClientHeight = 631
- ClientWidth = 819
+ ClientHeight = 626
+ ClientWidth = 821
object GroupBox2: TGroupBox
Left = 20
Height = 57
- Top = 566
- Width = 779
+ Top = 561
+ Width = 781
Align = alBottom
BorderSpacing.Left = 20
BorderSpacing.Right = 20
BorderSpacing.Bottom = 8
Caption = 'groff for Windows'
- ClientHeight = 37
- ClientWidth = 775
+ ClientHeight = 30
+ ClientWidth = 771
TabOrder = 0
object Label6: TLabel
Left = 8
- Height = 15
+ Height = 16
Top = 8
- Width = 108
+ Width = 125
Caption = 'latest version online:'
ParentColor = False
end
object edtOnlineGroffVersionWindows: TEdit
Left = 136
- Height = 15
+ Height = 17
Top = 8
- Width = 542
+ Width = 538
Anchors = [akTop, akLeft, akRight]
BorderStyle = bsNone
Enabled = False
TabOrder = 0
Text = 'fetching ...'
end
object btnDownloadGroffWindows: TButton
- Left = 686
+ Left = 682
Height = 25
Top = 5
Width = 80
Anchors = [akTop, akRight]
Caption = 'download it'
@@ -819,42 +821,42 @@
OnClick = btnDownloadGroffWindowsClick
end
end
object Label7: TLabel
Left = 8
- Height = 30
+ Height = 32
Top = 8
- Width = 807
+ Width = 809
Anchors = [akTop, akLeft, akRight]
Caption = 'as you might guess, groffstudio requires a working installation of groff. this page performs the basic checks for you. note that on windows, everything is harder than it should. :-)'
Constraints.MaxHeight = 582
ParentColor = False
WordWrap = True
end
object Label9: TLabel
Left = 8
- Height = 15
+ Height = 16
Top = 56
- Width = 70
+ Width = 81
Caption = 'groff version:'
ParentColor = False
end
object edtGroffInstalledVersion: TEdit
Left = 144
- Height = 15
+ Height = 17
Top = 56
- Width = 671
+ Width = 673
Anchors = [akTop, akLeft, akRight]
BorderStyle = bsNone
Enabled = False
TabOrder = 1
end
object lblTroffCommandNotFound: TLabel
Left = 8
- Height = 45
+ Height = 48
Top = 112
- Width = 806
+ Width = 808
Anchors = [akTop, akLeft, akRight]
Caption = 'groff was not found. in order to use groffstudio, you absolutely need groff in your PATH variable. on unix and unix-like systems, you''ll need to edit the $PATH variable. on windows, i warmly recommend the Rapid Environment Editor for that.'#13#10'please exit groffstudio at your nearest convenience and adjust your PATH variables. then try again.'
Font.Color = clRed
ParentColor = False
ParentFont = False
@@ -861,95 +863,95 @@
Visible = False
WordWrap = True
end
object edtGroffstudioInstalledVersion: TEdit
Left = 144
- Height = 15
+ Height = 17
Top = 77
- Width = 671
+ Width = 673
Anchors = [akTop, akLeft, akRight]
BorderStyle = bsNone
Enabled = False
TabOrder = 2
end
object Label10: TLabel
Left = 8
- Height = 15
+ Height = 16
Top = 77
- Width = 103
+ Width = 118
Caption = 'groffstudio version:'
ParentColor = False
end
end
object tsAbout: TTabSheet
Caption = 'about groffstudio'
- ClientHeight = 631
- ClientWidth = 819
+ ClientHeight = 626
+ ClientWidth = 821
object lblAboutProductName: TLabel
Left = 0
- Height = 61
+ Height = 53
Top = 16
- Width = 315
+ Width = 297
Caption = 'groffstudio x.y.z'
Font.Color = clBlue
Font.Height = -45
ParentColor = False
ParentFont = False
end
object Label8: TLabel
Left = 20
- Height = 15
+ Height = 16
Top = 80
- Width = 217
+ Width = 246
Caption = 'brought to you by tux0r and contributors'
ParentColor = False
end
object Label11: TLabel
Left = 0
- Height = 15
+ Height = 16
Top = 128
- Width = 45
+ Width = 53
Caption = 'Website:'
Font.Style = [fsItalic]
ParentColor = False
ParentFont = False
end
object Label12: TLabel
Left = 0
- Height = 15
+ Height = 16
Top = 152
- Width = 57
+ Width = 69
Caption = 'Repository:'
Font.Style = [fsItalic]
ParentColor = False
ParentFont = False
end
object Label13: TLabel
Left = 0
- Height = 15
+ Height = 16
Top = 176
- Width = 99
+ Width = 119
Caption = 'Repository (mirror):'
Font.Style = [fsItalic]
ParentColor = False
ParentFont = False
end
object mLicense: TMemo
Left = 0
Height = 418
Top = 216
- Width = 826
+ Width = 828
Anchors = [akTop, akLeft, akRight]
ScrollBars = ssAutoBoth
TabOrder = 0
end
object lblWebsite: TLabel
Cursor = crHandPoint
Left = 120
- Height = 15
+ Height = 16
Top = 128
- Width = 99
+ Width = 113
Caption = 'groff.tuxproject.de'
Font.Color = clBlue
Font.Style = [fsUnderline]
ParentColor = False
ParentFont = False
@@ -956,13 +958,13 @@
OnClick = lblWebsiteClick
end
object lblFossilRepo: TLabel
Cursor = crHandPoint
Left = 120
- Height = 15
+ Height = 16
Top = 152
- Width = 121
+ Width = 140
Caption = 'code.rosaelefanten.org'
Font.Color = clBlue
Font.Style = [fsUnderline]
ParentColor = False
ParentFont = False
@@ -969,13 +971,13 @@
OnClick = lblFossilRepoClick
end
object lblGithubRepo: TLabel
Cursor = crHandPoint
Left = 120
- Height = 15
+ Height = 16
Top = 176
- Width = 62
+ Width = 68
Caption = 'github.com'
Font.Color = clBlue
Font.Style = [fsUnderline]
ParentColor = False
ParentFont = False
Index: src/unit1.pas
==================================================================
--- src/unit1.pas
+++ src/unit1.pas
@@ -94,75 +94,89 @@
procedure FormCreate(Sender: TObject);
procedure lblFossilRepoClick(Sender: TObject);
procedure lblGithubRepoClick(Sender: TObject);
procedure lblWebsiteClick(Sender: TObject);
procedure SynEdit1Change(Sender: TObject);
-{$IFDEF DARWIN}
+ {$IFDEF DARWIN}
procedure GetSocketHandler(Sender: TObject; const UseSSL: Boolean; out AHandler: TSocketHandler);
-{$ENDIF}
+ {$ENDIF}
private
- var currentGroffFilePath: String;
- var currentGroffFileName: String;
- var unsavedChanges: Boolean;
-{$IFDEF WINDOWS}
- var latestGroffWindowsUrl: String;
-{$ENDIF}
- var storeBuildSettings: Boolean;
- var updateCheck: Boolean;
+ var
+ currentGroffFilePath: string;
+ currentGroffFileName: string;
+ unsavedChanges: boolean;
+ {$IFDEF WINDOWS}
+ atestGroffWindowsUrl: String;
+ {$ENDIF}
+ storeBuildSettings: boolean;
+ updateCheck: boolean;
public
end;
TDetectGroffThread = class(TThread)
- procedure Execute; Override;
+ private
+ procedure UpdateUI;
+ protected
+ procedure Execute; override;
end;
var
MainForm: TMainForm;
BuildWindow: TBuildStatusWindow;
- hasGroff: Boolean;
+ hasGroff: boolean;
+ GroffOutputVersion: string;
implementation
{$R *.lfm}
+
+procedure TDetectGroffThread.UpdateUI;
+begin
+ MainForm.edtGroffInstalledVersion.Text := GroffOutputVersion;
+ if pos('GNU', GroffOutputVersion) = 0 then
+ begin
+ ShowMessage('groffstudio thinks that your installed version of troff is not GNU troff.'
+ + LineEnding + 'If this is correct, you are advised to fix this before continuing.'
+ + LineEnding +
+ 'If it is an error, please tell me so I can improve this detection.');
+ hasGroff := True;
+ end
+ else
+ begin
+ MainForm.edtGroffInstalledVersion.Text := 'n/a';
+ hasGroff := False;
+ MainForm.lblTroffCommandNotFound.Visible := True;
+ end;
+end;
procedure TDetectGroffThread.Execute;
-var
- GroffOutputVersion: String;
begin
FreeOnTerminate := True;
{$IFDEF WINDOWS}
if RunCommand('cmd', ['/c', 'troff --version'], GroffOutputVersion, [], swoHIDE) then
{$ELSE}
- if RunCommand('/bin/sh', ['-c', 'troff --version'], GroffOutputVersion, [], swoHIDE) then
+ if RunCommand('/bin/sh', ['-c', 'troff --version'], GroffOutputVersion,
+ [], swoHIDE) then
{$ENDIF}
begin
- MainForm.edtGroffInstalledVersion.Text := GroffOutputVersion;
- if pos('GNU', GroffOutputVersion) = 0 then
- ShowMessage('groffstudio thinks that your installed version of troff is not GNU troff.' + LineEnding +
- 'If this is correct, you are advised to fix this before continuing.' + LineEnding +
- 'If it is an error, please tell me so I can improve this detection.');
- hasGroff := True;
- end else begin
- MainForm.edtGroffInstalledVersion.Text := 'n/a';
- hasGroff := False;
- MainForm.lblTroffCommandNotFound.Visible := True;
+ Synchronize(@UpdateUI);
end;
end;
{ TMainForm }
procedure TMainForm.FormCreate(Sender: TObject);
var
- OnlineVersionsFile: String;
+ OnlineVersionsFile: string;
{$IFDEF WINDOWS}
reGroffVersion: TRegExpr;
{$ENDIF}
reGroffStudioVersion: TRegExpr;
FileVerInfo: TFileVersionInfo;
- HasVersionUpdate: Integer;
+ HasVersionUpdate: integer;
GroffHelpers: TGroffHelpers;
ResStream: TResourceStream;
{$IFDEF DARWIN}
HTTPClient: TFPHttpClient;
{$ENDIF}
@@ -172,11 +186,11 @@
// Default file name
currentGroffFileName := '[unsaved file]';
// Embed the license
- ResStream:= TResourceStream.Create(HInstance, 'LICENSE', RT_RCDATA);
+ ResStream := TResourceStream.Create(HInstance, 'LICENSE', RT_RCDATA);
try
mLicense.Lines.LoadFromStream(ResStream);
finally
ResStream.Free;
end;
@@ -184,42 +198,45 @@
// Restore the settings
iniStorage.Restore;
storeBuildSettings := iniStorage.ReadBoolean('AutoSaveBuildSettings', False);
chkAutoSaveBuildSettings.Checked := storeBuildSettings;
-{$IF DEFINED(LINUX) OR DEFINED(BSD)}
+ {$IF DEFINED(LINUX) OR DEFINED(BSD)}
// On platforms which probably use a package manager (currently, Linux and
// BSDs), the "update check" checkbox is disabled.
chkUpdateCheckOnStart.Enabled := False;
-{$ELSE}
+ {$ELSE}
updateCheck := iniStorage.ReadBoolean('UpdateCheckOnStart', False);
chkUpdateCheckOnStart.Checked := updateCheck;
-{$ENDIF}
+ {$ENDIF}
if storeBuildSettings then
begin
- chkLogFile.Checked := iniStorage.ReadBoolean('BuildLogFile', False);
- cmbMacro.Text := iniStorage.ReadString('BuildChosenMacro', '[ select ]');
- chkBoxPreprocessors.Checked[0] := iniStorage.ReadBoolean('BuildUseChem', False);
- chkBoxPreprocessors.Checked[1] := iniStorage.ReadBoolean('BuildUseEqn', False);
- chkBoxPreprocessors.Checked[2] := iniStorage.ReadBoolean('BuildUseGrn', False);
- chkBoxPreprocessors.Checked[3] := iniStorage.ReadBoolean('BuildUsePic', False);
- chkBoxPreprocessors.Checked[4] := iniStorage.ReadBoolean('BuildUseRefer', False);
- chkBoxPreprocessors.Checked[5] := iniStorage.ReadBoolean('BuildUseTbl', False);
- chkBoxExtras.Checked[0] := iniStorage.ReadBoolean('BuildUseHdtbl', False);
- chkBoxExtras.Checked[1] := iniStorage.ReadBoolean('BuildUsePdfMark', False);
- rdPs.Checked := iniStorage.ReadBoolean('BuildToPostscript', False);
- rdPdf.Checked := iniStorage.ReadBoolean('BuildToPDF', False);
+ chkLogFile.Checked := iniStorage.ReadBoolean('BuildLogFile', False);
+ cmbMacro.Text := iniStorage.ReadString('BuildChosenMacro', '[ select ]');
+ chkBoxPreprocessors.Checked[0] := iniStorage.ReadBoolean('BuildUseChem', False);
+ chkBoxPreprocessors.Checked[1] := iniStorage.ReadBoolean('BuildUseEqn', False);
+ chkBoxPreprocessors.Checked[2] := iniStorage.ReadBoolean('BuildUseGrn', False);
+ chkBoxPreprocessors.Checked[3] := iniStorage.ReadBoolean('BuildUsePic', False);
+ chkBoxPreprocessors.Checked[4] := iniStorage.ReadBoolean('BuildUseRefer', False);
+ chkBoxPreprocessors.Checked[5] := iniStorage.ReadBoolean('BuildUseTbl', False);
+ chkBoxExtras.Checked[0] := iniStorage.ReadBoolean('BuildUseHdtbl', False);
+ chkBoxExtras.Checked[1] := iniStorage.ReadBoolean('BuildUsePdfMark', False);
+ rdPs.Checked := iniStorage.ReadBoolean('BuildToPostscript', False);
+ rdPdf.Checked := iniStorage.ReadBoolean('BuildToPDF', False);
end;
// What's the latest available version?
FileVerInfo := TFileVersionInfo.Create(nil);
try
FileVerInfo.ReadFileInfo;
- edtGroffStudioInstalledVersion.Text := FileVerInfo.VersionStrings.Values['FileVersion'];
- lblAboutProductName.Caption := FileVerInfo.VersionStrings.Values['ProductName'] + ' ' + FileVerInfo.VersionStrings.Values['FileVersion'];
+ edtGroffStudioInstalledVersion.Text :=
+ FileVerInfo.VersionStrings.Values['FileVersion'];
+ lblAboutProductName.Caption :=
+ FileVerInfo.VersionStrings.Values['ProductName'] + ' ' +
+ FileVerInfo.VersionStrings.Values['FileVersion'];
MainStatusBar.Panels[2].Text := '';
{$IFDEF WINDOWS}
if updateCheck then
begin
@@ -281,11 +298,11 @@
if updateCheck then HTTPClient.Free;
end;
{$ENDIF}
edtOnlineGroffVersionWindows.Text := 'n/a';
btnDownloadGroffWindows.Enabled := False;
- {$ENDIF}
+ {$ENDIF}
finally
FileVerInfo.Free;
end;
// Loaded file display
@@ -317,22 +334,22 @@
unsavedChanges := True;
end;
procedure TMainForm.btnDownloadGroffWindowsClick(Sender: TObject);
begin
- {$IFDEF WINDOWS}
+ {$IFDEF WINDOWS}
// On other systems, the button is disabled anyway.
OpenURL(latestGroffWindowsUrl);
- {$ENDIF}
+ {$ENDIF}
end;
procedure TMainForm.btnBuildClick(Sender: TObject);
var
- buildSuccess: Boolean;
- buildOpts: String;
- logFileName: String = '';
- outputFileName: String;
+ buildSuccess: boolean;
+ buildOpts: string;
+ logFileName: string = '';
+ outputFileName: string;
begin
// Reset status display:
MainStatusBar.Panels[1].Text := '';
BuildWindow := TBuildStatusWindow.Create(Application);
@@ -346,26 +363,28 @@
// - Enforce UTF-8:
buildOpts := buildOpts + ' -Kutf8';
// - Preprocessors:
- if chkBoxPreprocessors.Checked[0] then buildOpts := buildOpts + ' -chem';
- if chkBoxPreprocessors.Checked[1] then buildOpts := buildOpts + ' -eqn';
- if chkBoxPreprocessors.Checked[2] then buildOpts := buildOpts + ' -grn';
- if chkBoxPreprocessors.Checked[3] then buildOpts := buildOpts + ' -pic';
- if chkBoxPreprocessors.Checked[4] then buildOpts := buildOpts + ' -refer';
- if chkBoxPreprocessors.Checked[5] then buildOpts := buildOpts + ' -tbl';
+ if chkBoxPreprocessors.Checked[0] then buildOpts := buildOpts + ' -chem';
+ if chkBoxPreprocessors.Checked[1] then buildOpts := buildOpts + ' -eqn';
+ if chkBoxPreprocessors.Checked[2] then buildOpts := buildOpts + ' -grn';
+ if chkBoxPreprocessors.Checked[3] then buildOpts := buildOpts + ' -pic';
+ if chkBoxPreprocessors.Checked[4] then buildOpts := buildOpts + ' -refer';
+ if chkBoxPreprocessors.Checked[5] then buildOpts := buildOpts + ' -tbl';
if chkBoxExtras.Checked[0] then buildOpts := buildOpts + ' -mhdtbl';
// - PDF-specifics:
- if rdPdf.Checked then begin
+ if rdPdf.Checked then
+ begin
buildOpts := buildOpts + ' -Tpdf';
if chkBoxExtras.Checked[1] then buildOpts := buildOpts + ' -mpdfmark';
outputFileName := currentGroffFilePath + '.pdf';
end
- else outputFileName := currentGroffFilePath + '.ps';
+ else
+ outputFileName := currentGroffFilePath + '.ps';
// - Input file:
buildOpts := buildOpts + ' ' + currentGroffFilePath;
buildOpts := buildOpts + ' > ' + outputFileName;
@@ -382,19 +401,21 @@
FreeAndNil(BuildWindow);
end;
procedure TMainForm.btnLoadGroffClick(Sender: TObject);
var
- Reply, BoxStyle: Integer;
+ Reply, BoxStyle: integer;
begin
// If the current file has unsaved changes, ask first.
- if unsavedChanges then with Application do begin
- BoxStyle := MB_ICONQUESTION + MB_YESNO;
- Reply := MessageBox('Do you want to save the document first?', 'UnsavedChanges', BoxStyle);
- if Reply = IDYES then SynEdit1.Lines.SaveToFile(currentGroffFilePath);
- unsavedChanges := False;
- end;
+ if unsavedChanges then with Application do
+ begin
+ BoxStyle := MB_ICONQUESTION + MB_YESNO;
+ Reply := MessageBox('Do you want to save the document first?',
+ 'UnsavedChanges', BoxStyle);
+ if Reply = idYes then SynEdit1.Lines.SaveToFile(currentGroffFilePath);
+ unsavedChanges := False;
+ end;
if odOpenGroffFile.Execute then
begin
if FileExists(odOpenGroffFile.FileName) then
begin
@@ -423,11 +444,12 @@
begin
currentGroffFilePath := sdSaveGroffFile.FileName;
currentGroffFileName := ExtractFileName(currentGroffFilePath);
SynEdit1.Lines.SaveToFile(sdSaveGroffFile.FileName);
- if hasGroff then begin
+ if hasGroff then
+ begin
btnBuild.Enabled := True;
chkLogFile.Enabled := True;
end;
end;
@@ -459,19 +481,21 @@
iniStorage.Save;
end;
procedure TMainForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
var
- Reply, BoxStyle: Integer;
+ Reply, BoxStyle: integer;
begin
// If the current file has unsaved changes, ask first.
if unsavedChanges then
- with Application do begin
- BoxStyle := MB_ICONQUESTION + MB_YESNO;
- Reply := MessageBox('Do you want to save the document first?', 'UnsavedChanges', BoxStyle);
- if Reply = IDYES then btnSaveGroffClick(Sender);
- end;
+ with Application do
+ begin
+ BoxStyle := MB_ICONQUESTION + MB_YESNO;
+ Reply := MessageBox('Do you want to save the document first?',
+ 'UnsavedChanges', BoxStyle);
+ if Reply = idYes then btnSaveGroffClick(Sender);
+ end;
end;
{$IFDEF DARWIN}
// Fix HTTPS on macOS:
procedure TMainForm.GetSocketHandler(Sender: TObject; const UseSSL: Boolean; out AHandler: TSocketHandler);
@@ -482,6 +506,5 @@
end else AHandler := TSocketHandler.Create;
end;
{$ENDIF}
end.
-