From b6924d33a1f17713369a21f4b709b7c4d395c268 Mon Sep 17 00:00:00 2001
From: bart <9132501-flyingsheep@users.noreply.gitlab.com>
Date: Fri, 10 Oct 2014 20:34:36 +0000
Subject: [PATCH] PoChecker: use a custom made dialog for displying possibly
very long list of filenames.
git-svn-id: trunk@46508 -
---
.gitattributes | 2 +
components/pochecker/Proj/pochecker.lpi | 9 ++-
components/pochecker/pocheckermain.pp | 20 ++++--
components/pochecker/pocheckermemodlg.lfm | 41 +++++++++++
components/pochecker/pocheckermemodlg.pp | 88 +++++++++++++++++++++++
5 files changed, 154 insertions(+), 6 deletions(-)
create mode 100644 components/pochecker/pocheckermemodlg.lfm
create mode 100644 components/pochecker/pocheckermemodlg.pp
diff --git a/.gitattributes b/.gitattributes
index c9971c43a4..f34d6ec394 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2937,6 +2937,8 @@ components/pochecker/pochecker.pas svneol=native#text/plain
components/pochecker/pocheckerconsts.pas svneol=native#text/pascal
components/pochecker/pocheckermain.lfm svneol=native#text/plain
components/pochecker/pocheckermain.pp svneol=native#text/plain
+components/pochecker/pocheckermemodlg.lfm svneol=native#text/plain
+components/pochecker/pocheckermemodlg.pp svneol=native#text/pascal
components/pochecker/pocheckersettings.pp svneol=native#text/pascal
components/pochecker/pocheckerxmlconfig.pp svneol=native#text/pascal
components/pochecker/pofamilies.pp svneol=native#text/plain
diff --git a/components/pochecker/Proj/pochecker.lpi b/components/pochecker/Proj/pochecker.lpi
index 1baa2ca276..d780c9a6db 100644
--- a/components/pochecker/Proj/pochecker.lpi
+++ b/components/pochecker/Proj/pochecker.lpi
@@ -69,7 +69,7 @@
-
+
@@ -123,6 +123,13 @@
+
+
+
+
+
+
+
diff --git a/components/pochecker/pocheckermain.pp b/components/pochecker/pocheckermain.pp
index 757ace0195..8b64249155 100644
--- a/components/pochecker/pocheckermain.pp
+++ b/components/pochecker/pocheckermain.pp
@@ -33,7 +33,7 @@ uses
IDEIntf, MenuIntf,
{$ENDIF}
SimplePoFiles, PoFamilies, ResultDlg, pocheckerconsts, PoCheckerSettings,
- PoFamilyLists;
+ PoFamilyLists, PoCheckerMemoDlg;
type
@@ -475,11 +475,16 @@ begin
end;
end;
if (Msg <> '') then
- MessageDlg('PoChecker',Format(sFilesNotFoundAndRemoved,[Msg]), mtInformation, [mbOk], 0);
+ //MessageDlg('PoChecker',Format(sFilesNotFoundAndRemoved,[Msg]), mtInformation, [mbOk], 0);
+ Msg := Format(sFilesNotFoundAndRemoved,[Msg]);
Cnt := MasterList.Count;
+ if (Cnt = 0) then
+ Msg := Msg + LineEnding + LineEnding + LineEnding + sNoFilesLeftToCheck;
+ if (Msg <> '') then
+ MemoDlg('PoChecker',Msg);
if (Cnt = 0) then
begin
- MessageDlg('PoChecker', sNoFilesLeftToCheck, mtInformation, [mbOk], 0);
+ //MessageDlg('PoChecker', sNoFilesLeftToCheck, mtInformation, [mbOk], 0);
Exit;
end;
try
@@ -487,10 +492,15 @@ begin
PoFamilyList := TPoFamilyList.Create(MasterList, Lang, Msg);
if (Msg <> '') then
begin
- MessageDlg('PoChecker',Format(sFilesNotFoundAndRemoved,[Msg]), mtInformation, [mbOk], 0);
+ //MessageDlg('PoChecker',Format(sFilesNotFoundAndRemoved,[Msg]), mtInformation, [mbOk], 0);
+ Msg := Format(sFilesNotFoundAndRemoved,[Msg]);
+ if (PoFamilyList.Count = 0) then
+ Msg := Msg + LineEnding + LineEnding + LineEnding + sNoFilesLeftToCheck;
+ if (Msg <> '') then
+ MemoDlg('PoChecker',Msg);
if (PoFamilyList.Count = 0) then
begin
- MessageDlg('PoChecker', sNoFilesLeftToCheck, mtInformation, [mbOk], 0);
+ //MessageDlg('PoChecker', sNoFilesLeftToCheck, mtInformation, [mbOk], 0);
FreeAndNil(PoFamilyList);
Exit;
end;
diff --git a/components/pochecker/pocheckermemodlg.lfm b/components/pochecker/pocheckermemodlg.lfm
new file mode 100644
index 0000000000..ff05977e5c
--- /dev/null
+++ b/components/pochecker/pocheckermemodlg.lfm
@@ -0,0 +1,41 @@
+object MemoForm: TMemoForm
+ Left = 649
+ Height = 230
+ Top = 123
+ Width = 365
+ Caption = 'MemoForm'
+ ClientHeight = 230
+ ClientWidth = 365
+ Constraints.MinHeight = 230
+ Constraints.MinWidth = 365
+ Position = poMainFormCenter
+ LCLVersion = '1.3'
+ object BitBtn1: TBitBtn
+ AnchorSideLeft.Control = MsgMemo
+ AnchorSideLeft.Side = asrCenter
+ Left = 132
+ Height = 30
+ Top = 192
+ Width = 100
+ Anchors = [akLeft, akBottom]
+ Default = True
+ DefaultCaption = True
+ Kind = bkOK
+ ModalResult = 1
+ TabOrder = 0
+ end
+ object MsgMemo: TMemo
+ AnchorSideBottom.Control = BitBtn1
+ Left = 0
+ Height = 182
+ Top = 0
+ Width = 365
+ Align = alTop
+ Anchors = [akTop, akLeft, akRight, akBottom]
+ BorderSpacing.Bottom = 10
+ ReadOnly = True
+ ScrollBars = ssAutoBoth
+ TabOrder = 1
+ WordWrap = False
+ end
+end
diff --git a/components/pochecker/pocheckermemodlg.pp b/components/pochecker/pocheckermemodlg.pp
new file mode 100644
index 0000000000..287f866166
--- /dev/null
+++ b/components/pochecker/pocheckermemodlg.pp
@@ -0,0 +1,88 @@
+unit pocheckermemodlg;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, types, FileUtil, Forms, Controls, Graphics, Dialogs,
+ Buttons, StdCtrls, LCLProc, PoCheckerSettings;
+
+type
+
+ { TMemoForm }
+
+ TMemoForm = class(TForm)
+ BitBtn1: TBitBtn;
+ MsgMemo: TMemo;
+ private
+ FMsg: String;
+ procedure SetMsg(AValue: String);
+ { private declarations }
+ public
+ { public declarations }
+ property Message: String read FMsg write SetMsg;
+ end;
+
+function MemoDlg(const ACaption, AMsg: String): TModalResult;
+
+implementation
+
+
+function MemoDlg(const ACaption, AMsg: String): TModalResult;
+var
+ Dlg: TMemoForm;
+begin
+ Dlg := TMemoForm.Create(nil);
+ try
+ Dlg.Caption := ACaption;
+ Dlg.SetMsg(AMsg);
+ Result := Dlg.ShowModal;
+ finally
+ Dlg.Free;
+ end;
+end;
+
+{$R *.lfm}
+
+{ TMemoForm }
+
+procedure TMemoForm.SetMsg(AValue: String);
+var
+ i, LH, TW, MaxTW, BottomGap, ReqH: Integer;
+ Size: TSize;
+ ARect, WARect: TRect;
+begin
+ if FMsg = AValue then Exit;
+ FMsg := AValue;
+ MsgMemo.Text := AValue;
+
+ //for i := 1 to 50 do MsgMemo.Lines.Add(IntToStr(i));
+
+ Size := Canvas.TextExtent('qWM');
+ LH := Size.cy;
+ MaxTW := Constraints.MinWidth;
+ for i := 0 to MsgMemo.Lines.Count - 1 do
+ begin
+ TW := Self.Canvas.TextWidth(MsgMemo.Lines[i]);
+ if TW > MaxTW then MaxTW := TW;
+ end;
+ ClientWidth := MaxTW + 50;
+
+ ReqH := MsgMemo.Lines.Count * LH;
+ BottomGap := ClientHeight - MsgMemo.Height;
+ ReqH := ReqH + BottomGap;
+ ClientHeight := ReqH;
+ ARect := Self.BoundsRect;
+ WARect := Screen.WorkAreaRect;
+ WARect.Right := WARect.Right - 50;
+ WARect.Bottom := WARect.Bottom - 75;
+ //debugln('ARect = ',DbgS(ARect));
+ ARect := FitToRect(ARect, WARect);
+ //debugln('ARect = ',DbgS(ARect));
+ //debugln('Screen.WARect = ',DbgS(WARect));
+ BoundsRect := ARect;
+end;
+
+end.
+