mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-21 22:56:03 +02:00
1138 lines
35 KiB
ObjectPascal
1138 lines
35 KiB
ObjectPascal
{$mode objfpc}{$h+}
|
|
unit FPgtkExt;
|
|
|
|
interface
|
|
|
|
uses FPgtk, gtk, gdk, glib, sysutils, classes;
|
|
|
|
{ ==== Application object ==== }
|
|
|
|
type
|
|
TFPgtkApplication = class
|
|
Private
|
|
FMainwindow : TFPgtkWindow;
|
|
FMainDestroysignal : guint;
|
|
procedure SetMainWindow (Value:TFPgtkWindow);
|
|
procedure MainDestroyed (Sender:TFPgtkObject; data:pointer);
|
|
Public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure Run;
|
|
property Mainwindow : TFPgtkWindow read FMainwindow write SetMainwindow;
|
|
end;
|
|
|
|
var
|
|
Application : TFPgtkApplication;
|
|
|
|
{ ==== Extra Widgets ==== }
|
|
|
|
type
|
|
|
|
TFPgtkFileEntry = class (TFPgtkHBox)
|
|
private
|
|
FEdit : TFPgtkEntry;
|
|
FButton : TFPgtkButton;
|
|
FImage : TFPgtkPixmap;
|
|
procedure OpenFileSelection (Sender : TFPgtkObject; data : pointer);
|
|
procedure CloseFileSelection (Sender:TFPgtkWindow; DialogResult:pointer;
|
|
Action:integer; initiator:TFPgtkObject);
|
|
procedure SetFilename (Value : string);
|
|
function GetFilename : string;
|
|
public
|
|
constructor create;
|
|
property Edit : TFPgtkEntry read FEdit;
|
|
property Button : TFPgtkButton read FButton;
|
|
property Image : TFPgtkPixmap read FImage;
|
|
property Filename : string read GetFilename write SetFilename;
|
|
end;
|
|
|
|
TFPgtkCheckedButton = class (TFPgtkToggleButton)
|
|
private
|
|
FChecked, FUnchecked : TFPgtkPixmap;
|
|
procedure ChangeCheck (Sender:TFPgtkObject; data:pointer);
|
|
public
|
|
constructor Create;
|
|
constructor CreateWithLabel (aText:string);
|
|
constructor CreateWithLabel (aText:string; AccelGroup : PGtkAccelGroup);
|
|
end;
|
|
|
|
{ ==== Widget who needs a scrollwindow ==== }
|
|
|
|
type
|
|
|
|
TFPgtkScrollText = class (TFPgtkScrolledWindow)
|
|
private
|
|
FText : TFPgtkText;
|
|
procedure SetTooltip (Value : string);
|
|
function GetTooltip : string;
|
|
function GetUdpatePolicy : TGtkUpdateType;
|
|
procedure SetUpdatePolicy (Value : TGtkUpdateType);
|
|
function GetText : string;
|
|
procedure SetText (Value : string);
|
|
function GetLines : TStrings;
|
|
public
|
|
constructor create;
|
|
procedure Clear;
|
|
property TheText : TFPgtkText read FText;
|
|
property Tooltip : string read GetTooltip write SetTooltip;
|
|
property UpdatePolicy : TGtkUpdateType read GetUdpatePolicy write SetUpdatePolicy;
|
|
property Text : string read GetText write SetText;
|
|
property Lines : TStrings read GetLines;
|
|
end;
|
|
|
|
TFPgtkScrollList = class (TFPgtkScrolledWindow)
|
|
private
|
|
FList : TFPgtkList;
|
|
public
|
|
constructor create;
|
|
property List : TFPgtkList read FList;
|
|
end;
|
|
|
|
TFPgtkScrollCList = class (TFPgtkScrolledWindow)
|
|
private
|
|
FCList : TFPgtkCList;
|
|
public
|
|
constructor create (CountColumns : integer);
|
|
property CList : TFPgtkCList read FCList;
|
|
end;
|
|
|
|
TFPgtkScrollTree = class (TFPgtkScrolledWindow)
|
|
private
|
|
FTree : TFPgtkTree;
|
|
public
|
|
constructor create;
|
|
property Tree : TFPgtkTree read FTree;
|
|
end;
|
|
|
|
{ ==== Message dialogs ==== }
|
|
|
|
type
|
|
TModalResult = Low(Integer)..High(Integer);
|
|
|
|
TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
|
|
TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
|
|
mbAll, mbNoToAll, mbYesToAll, mbHelp);
|
|
TMsgDlgButtons = set of TMsgDlgBtn;
|
|
|
|
const
|
|
mbYesNo = [mbYes,mbNo];
|
|
mbYesNoCancel = [mbYes, mbNo, mbCancel];
|
|
mbOKCancel = [mbOK, mbCancel];
|
|
mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
|
|
|
|
mrNone = 0;
|
|
mrOK = mrNone + 1;
|
|
mrCancel = mrNone + 2;
|
|
mrAbort = mrNone + 3;
|
|
mrRetry = mrNone + 4;
|
|
mrIgnore = mrNone + 5;
|
|
mrYes = mrNone + 6;
|
|
mrNo = mrNone + 7;
|
|
mrAll = mrNone + 8;
|
|
mrNoToAll = mrNone + 9;
|
|
mrYesToAll = mrNone + 10;
|
|
|
|
function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
|
|
Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
|
|
|
|
|
|
function MessageDlg(const Fmt: string; Args : Array of const; DlgType: TMsgDlgType;
|
|
Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
|
|
|
|
procedure ShowMessage (const aTitle, aMessage : string);
|
|
|
|
{ ==== Menu handling ==== }
|
|
|
|
type
|
|
TAccelKeyDef = record
|
|
Key : guint;
|
|
Mods : TGdkModifierType;
|
|
AG : PGtkAccelGroup;
|
|
end;
|
|
PAccelKeyDef = ^TAccelKeyDef;
|
|
|
|
TAccelModifier = (amShift, amLock, amControl, amMod1, amMod2, amMod3, amMod4,
|
|
amMod5, amButton1, amButton2, amButton3, amButton4, amButton5,
|
|
amRelease);
|
|
TAccelModifiersSet = set of TAccelModifier;
|
|
|
|
const
|
|
amAlt = amMod1;
|
|
gdk_Alt_mask = gdk_mod1_Mask;
|
|
DefaultAccelFlags : TGtkAccelFlags = GTK_ACCEL_VISIBLE;
|
|
|
|
function RemoveUnderscore (s : string) : string;
|
|
function ConvertAccelModifier (amSet : TAccelModifiersSet) : TGdkModifierType;
|
|
function ConvertModifierType (Mods : TGdkModifierType) : TAccelModifiersSet;
|
|
function MakeAccelKeyDef (aWindow : TFPgtkWindow; anAG : integer; aKey : guint; aMods : TGdkModifierType) : PAccelKeyDef; overload;
|
|
function MakeAccelKeyDef (aWindow : TFPgtkWindow; anAG : integer; aKey : guint; aMods : TAccelModifiersSet) : PAccelKeyDef; overload;
|
|
function MakeAccelKeyDef (anAG : PGtkAccelGroup; aKey : guint; aMods : TGdkModifierType) : PAccelKeyDef; overload;
|
|
function MakeAccelKeyDef (anAG : PGtkAccelGroup; aKey : guint; aMods : TAccelModifiersSet) : PAccelKeyDef; overload;
|
|
|
|
function NewMenuBar (items : array of TFPgtkMenuItem) : TFPgtkMenuBar;
|
|
function NewMenu (ATitle : string; items : array of TFPgtkMenuItem) : TFPgtkMenu;
|
|
|
|
function NewMenuItem (ACaption, AToolTip, AprivText : string; Accelerator : PAccelKeyDef;
|
|
ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem; overload;
|
|
function NewMenuItem (ACaption, AToolTip, AprivText : string;
|
|
ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem; overload;
|
|
function NewMenuItem (ACaption : string; Accelerator : PAccelKeyDef;
|
|
ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem; overload;
|
|
function NewMenuItem (ACaption : string; ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem; overload;
|
|
function NewMenuItem (ACaption : string) : TFPgtkMenuItem; overload;
|
|
|
|
function NewLine : TFPgtkMenuItem;
|
|
function NewTearOffMenu : TFPgtkTearOffMenuItem;
|
|
|
|
function NewSubMenu (ACaption, ATooltip, AprivText : string; Accelerator : PAccelKeyDef;
|
|
Items : array of TFPgtkMenuItem) : TFPgtkMenuItem; Overload;
|
|
function NewSubMenu (ACaption, ATooltip, AprivText : string;
|
|
Items : array of TFPgtkMenuItem) : TFPgtkMenuItem; Overload;
|
|
function NewSubMenu (ACaption : string; Accelerator : PAccelKeyDef;
|
|
Items : array of TFPgtkMenuItem) : TFPgtkMenuItem; Overload;
|
|
function NewSubMenu (ACaption : string; Items : array of TFPgtkMenuItem) : TFPgtkMenuItem; Overload;
|
|
|
|
function NewCheckMenuItem (ACaption, AToolTip, AprivText : string; Accelerator : PAccelKeyDef;
|
|
ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem; Overload;
|
|
function NewCheckMenuItem (ACaption, AToolTip, AprivText : string;
|
|
ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem; Overload;
|
|
function NewCheckMenuItem (ACaption : string; Accelerator : PAccelKeyDef;
|
|
ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem; Overload;
|
|
function NewCheckMenuItem (ACaption : string; ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem; Overload;
|
|
|
|
procedure InsertMenuItemGroup (InMenu : TFPgtkMenuShell; position : integer; MenuItems : TFPgtkItemGroup); Overload;
|
|
procedure InsertMenuItemGroup (InMenu : TFPgtkMenuShell; position : integer;
|
|
MenuItems : TFPgtkItemGroup; ActivateProc : TFPgtkSignalFunction; ActivateData : pointer); Overload;
|
|
procedure AppendMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup); Overload;
|
|
procedure AppendMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup;
|
|
ActivateProc : TFPgtkSignalFunction; ActivateData : pointer); Overload;
|
|
procedure PrependMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup); Overload;
|
|
procedure PrependMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup;
|
|
ActivateProc : TFPgtkSignalFunction; ActivateData : pointer); Overload;
|
|
|
|
implementation
|
|
|
|
resourcestring
|
|
rsNothingToRun = 'No main window defined, nothing to do...';
|
|
rsErrorTitle = 'Error occured';
|
|
rsMessageTitle = 'Message';
|
|
sErrWrongItemType = 'Items in list are not from TFPgtkMenuItem class.';
|
|
|
|
{ TFPgtkApplication }
|
|
|
|
constructor TFPgtkApplication.Create;
|
|
begin
|
|
gtk_init (@argc, @argv);
|
|
inherited create;
|
|
FMainWindow := nil;
|
|
end;
|
|
|
|
destructor TFPgtkApplication.Destroy;
|
|
begin
|
|
if assigned (FMainWindow) then
|
|
FMainWindow.Free;
|
|
gtk_Exit (0);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TFPgtkApplication.SetMainWindow (Value : TFPgtkWindow);
|
|
begin
|
|
if FMainWindow <> Value then
|
|
begin
|
|
if assigned (FMainWindow) and (FMainDestroySignal > 0) then
|
|
FMainWindow.signalDisconnect (FMainDestroySignal);
|
|
FMainWindow := Value;
|
|
if Assigned (Value) then
|
|
FMainDestroySignal := FMainWindow.ConnectDestroy (@MainDestroyed, nil);
|
|
end;
|
|
end;
|
|
|
|
procedure TFPgtkApplication.MainDestroyed (Sender:TFPgtkObject; data:pointer);
|
|
begin
|
|
FMainWindow := nil;
|
|
FMainDestroySignal := 0;
|
|
gtk_main_quit;
|
|
end;
|
|
|
|
procedure TFPgtkApplication.Run;
|
|
begin
|
|
if assigned (FMainWindow) then
|
|
while assigned (FMainWindow) do
|
|
try
|
|
FMainWindow.execute (nil, nil, nil);
|
|
//gtk_main;
|
|
FreeFPgtkObjects (nil);
|
|
except
|
|
on e : exception do
|
|
ShowMessage (rsErrorTitle, e.message);
|
|
end
|
|
else
|
|
ShowMessage (rsMessageTitle, rsNothingToRun);
|
|
end;
|
|
|
|
{ TFPgtkScrollText }
|
|
|
|
constructor TFPgtkScrollText.create;
|
|
begin
|
|
inherited create (nil,nil);
|
|
FText := TFPgtkText.Create;
|
|
Add (FText);
|
|
HPolicy := Gtk_Policy_Never;
|
|
end;
|
|
|
|
function TFPgtkScrollText.GetTooltip : string;
|
|
begin
|
|
result := inherited Tooltip;
|
|
end;
|
|
|
|
procedure TFPgtkScrollText.SetTooltip (Value : string);
|
|
begin
|
|
TheText.Tooltip := Value;
|
|
inherited Tooltip := Value;
|
|
end;
|
|
|
|
function TFPgtkScrollText.GetUdpatePolicy : TGtkUpdateType;
|
|
begin
|
|
result := VScrollbar.UpdatePolicy;
|
|
end;
|
|
|
|
procedure TFPgtkScrollText.Clear;
|
|
begin
|
|
if assigned(TheText) then
|
|
TheText.Clear;
|
|
end;
|
|
|
|
procedure TFPgtkScrollText.SetUpdatePolicy (Value : TGtkUpdateType);
|
|
begin
|
|
VScrollbar.UpdatePolicy := Value;
|
|
{$ifndef gtkwin}
|
|
HScrollbar.UpdatePolicy := Value;
|
|
{$endif}
|
|
end;
|
|
|
|
function TFPgtkScrollText.GetText : string;
|
|
begin
|
|
if assigned(TheText) then
|
|
begin
|
|
result := TheText.Text;
|
|
end
|
|
else
|
|
begin
|
|
result := '';
|
|
end;
|
|
end;
|
|
|
|
procedure TFPgtkScrollText.SetText (Value : string);
|
|
begin
|
|
if assigned (TheText) then
|
|
TheText.Text := Value;
|
|
end;
|
|
|
|
function TFPgtkScrollText.GetLines : TStrings;
|
|
begin
|
|
if assigned (TheText) then
|
|
result := TheText.Lines
|
|
else
|
|
result := nil;
|
|
end;
|
|
|
|
{ TFPgtkScrollList }
|
|
|
|
constructor TFPgtkScrollList.create;
|
|
begin
|
|
inherited create (nil, nil);
|
|
setusize (100, 40);
|
|
FList := TFPgtkList.Create;
|
|
AddWithViewport (FList);
|
|
end;
|
|
|
|
{ TFPgtkScrollCList }
|
|
|
|
constructor TFPgtkScrollCList.create (CountColumns : integer);
|
|
begin
|
|
inherited create (nil, nil);
|
|
setusize (100, 40);
|
|
FCList := TFPgtkCList.Create (CountColumns);
|
|
Add (FCList);
|
|
end;
|
|
|
|
{ TFPgtkScrollTree }
|
|
|
|
constructor TFPgtkScrollTree.create;
|
|
begin
|
|
inherited create (nil, nil);
|
|
FTree := TFPgtkTree.Create;
|
|
AddWithViewport (FTree);
|
|
FTree.Show;
|
|
end;
|
|
|
|
{ Menu functions }
|
|
|
|
function RemoveUnderscore (s : string) : string;
|
|
begin
|
|
result := stringreplace (s, '_', '', [rfReplaceAll]);
|
|
end;
|
|
|
|
type
|
|
TFPgtkMenuItemType = class of TFPgtkMenuItem;
|
|
|
|
function MakeAccelKeyDef (aWindow : TFPgtkWindow; anAG : integer; aKey : guint; aMods : TGdkModifierType) : PAccelKeyDef;
|
|
begin
|
|
new (result);
|
|
with result^ do
|
|
begin
|
|
AG := aWindow.AccelGroups[anAG];
|
|
Key := aKey;
|
|
Mods := aMods;
|
|
end;
|
|
end;
|
|
|
|
function MakeAccelKeyDef (aWindow : TFPgtkWindow; anAG : integer; aKey : guint; aMods : TAccelModifiersSet) : PAccelKeyDef;
|
|
begin
|
|
new (result);
|
|
with result^ do
|
|
begin
|
|
AG := aWindow.AccelGroups[anAG];
|
|
Key := aKey;
|
|
Mods := ConvertAccelModifier (aMods);
|
|
end;
|
|
end;
|
|
|
|
function MakeAccelKeyDef (anAG : PGtkAccelGroup; aKey : guint; aMods : TGdkModifierType) : PAccelKeyDef;
|
|
begin
|
|
new (result);
|
|
with result^ do
|
|
begin
|
|
AG := anAG;
|
|
Key := aKey;
|
|
Mods := aMods;
|
|
end;
|
|
end;
|
|
|
|
function MakeAccelKeyDef (anAG : PGtkAccelGroup; aKey : guint; aMods : TAccelModifiersSet) : PAccelKeyDef;
|
|
begin
|
|
new (result);
|
|
with result^ do
|
|
begin
|
|
AG := anAG;
|
|
Key := aKey;
|
|
Mods := ConvertAccelModifier (aMods);
|
|
end;
|
|
end;
|
|
|
|
function ConvertAccelModifier (amSet : TAccelModifiersSet) : TGdkModifierType;
|
|
var am : TAccelModifier;
|
|
begin
|
|
result := 0;
|
|
for am := low(TAccelModifier) to high (TAccelModifier) do
|
|
if am in amSet then
|
|
result := result + (1 shl ord(am));
|
|
end;
|
|
|
|
function ConvertModifierType (Mods : TGdkModifierType) : TAccelModifiersSet;
|
|
var am : TAccelModifier;
|
|
begin
|
|
result := [];
|
|
for am := low(TAccelModifier) to high (TAccelModifier) do
|
|
if (Mods and (1 shl ord(am))) <> 0 then
|
|
result := result + [am];
|
|
end;
|
|
|
|
function NewMenuBar (items : array of TFPgtkMenuItem) : TFPgtkMenuBar;
|
|
var r : integer;
|
|
begin
|
|
result := TFPgtkMenuBar.Create;
|
|
with result do
|
|
for r := low(items) to high (items) do
|
|
append (items[r]);
|
|
end;
|
|
|
|
function NewMenu (ATitle : string; items : array of TFPgtkMenuItem) : TFPgtkMenu;
|
|
var r : integer;
|
|
AG : PGtkAccelGroup;
|
|
m : TFPgtkMenuItem;
|
|
begin
|
|
result := TFPgtkMenu.Create;
|
|
with result do
|
|
begin
|
|
Title := ATitle;
|
|
ag := AccelGroup;
|
|
for r := low(items) to high(items) do
|
|
begin
|
|
m := items[r];
|
|
Append (m);
|
|
if m.AccelKey <> 0 then
|
|
m.AcceleratorAdd (AG, sgActivateItem, m.AccelKey, 0, TGtkAccelFlags(0));
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function CreateMenuItem (Atype : TFPgtkMenuItemType; ACaption, ATooltip,
|
|
APrivText : string; Accelerator : PAccelKeyDef) : TFPgtkMenuItem;
|
|
begin
|
|
result := AType.CreateWithLabel (ACaption);
|
|
if (ATooltip <> '') or (APrivText <> '') then
|
|
result.Tooltip := ComposeTooltip (ATooltip, APrivText);
|
|
if assigned(accelerator) then
|
|
begin
|
|
with Accelerator^ do
|
|
result.AcceleratorAdd (AG, sgActivateItem, Key, Mods, DefaultAccelFlags);
|
|
dispose (Accelerator);
|
|
end;
|
|
end;
|
|
|
|
function NewMenuItem (ACaption, AToolTip, AprivText : string; Accelerator : PAccelKeyDef;
|
|
ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem;
|
|
begin
|
|
result := CreateMenuItem (TFPgtkMenuItem, ACaption, ATooltip, APrivtext, Accelerator);
|
|
if assigned (ActivateFunc) then
|
|
result.ConnectActivate (ActivateFunc, AData);
|
|
end;
|
|
|
|
function NewMenuItem (ACaption, AToolTip, AprivText : string;
|
|
ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem;
|
|
begin
|
|
result := NewMenuItem (aCaption, aTooltip, aPrivText, nil, ActivateFunc, aData);
|
|
end;
|
|
|
|
function NewMenuItem (ACaption : string; Accelerator : PAccelKeyDef;
|
|
ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem;
|
|
begin
|
|
result := NewMenuItem (aCaption, '', '', Accelerator, ActivateFunc, aData);
|
|
end;
|
|
|
|
function NewMenuItem (ACaption : string; ActivateFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkMenuItem;
|
|
begin
|
|
result := NewMenuItem (aCaption, '', '', nil, ActivateFunc, aData);
|
|
end;
|
|
|
|
function NewMenuItem (ACaption : string) : TFPgtkMenuItem;
|
|
begin
|
|
result := NewMenuItem (aCaption, '', '', nil, nil, nil);
|
|
end;
|
|
|
|
function NewLine : TFPgtkMenuItem;
|
|
begin
|
|
result := TFPgtkMenuItem.Create;
|
|
end;
|
|
|
|
function NewTearOffMenu : TFPgtkTearOffMenuItem;
|
|
begin
|
|
result := TFPgtkTearOffMenuItem.create;
|
|
end;
|
|
|
|
function NewSubMenu (ACaption, ATooltip, AprivText : string; Accelerator : PAccelKeyDef;
|
|
Items : array of TFPgtkMenuItem) : TFPgtkMenuItem;
|
|
begin
|
|
result := CreateMenuItem (TFPgtkMenuItem, ACaption, ATooltip, APrivText, Accelerator);
|
|
result.SetSubmenu (NewMenu ('', Items));
|
|
end;
|
|
|
|
function NewSubMenu (ACaption, ATooltip, AprivText : string;
|
|
Items : array of TFPgtkMenuItem) : TFPgtkMenuItem;
|
|
begin
|
|
result := NewSubMenu (aCaption, aTooltip, aPrivText, nil, Items);
|
|
end;
|
|
|
|
function NewSubMenu (ACaption : string; Accelerator : PAccelKeyDef;
|
|
Items : array of TFPgtkMenuItem) : TFPgtkMenuItem;
|
|
begin
|
|
result := NewSubMenu (aCaption, '', '', Accelerator, Items);
|
|
end;
|
|
|
|
function NewSubMenu (ACaption : string; Items : array of TFPgtkMenuItem) : TFPgtkMenuItem;
|
|
begin
|
|
result := NewSubMenu (aCaption, '', '', nil, Items);
|
|
end;
|
|
|
|
function NewCheckMenuItem (ACaption, AToolTip, AprivText : string; Accelerator : PAccelKeyDef;
|
|
ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem;
|
|
begin
|
|
result := TFPgtkCheckMenuItem(CreateMenuItem (TFPgtkCheckMenuItem, ACaption, ATooltip, APrivText, Accelerator));
|
|
if assigned (ToggledFunc) then
|
|
Result.ConnectToggled (ToggledFunc, AData);
|
|
end;
|
|
|
|
function NewCheckMenuItem (ACaption, AToolTip, AprivText : string;
|
|
ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem;
|
|
begin
|
|
result := NewCheckMenuItem (aCaption, aToolTip, aPrivText, nil, ToggledFunc, AData);
|
|
end;
|
|
|
|
function NewCheckMenuItem (ACaption : string; Accelerator : PAccelKeyDef;
|
|
ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem;
|
|
begin
|
|
result := NewCheckMenuItem (aCaption, '', '', Accelerator, ToggledFunc, AData);
|
|
end;
|
|
|
|
function NewCheckMenuItem (ACaption : string; ToggledFunc : TFPgtkSignalFunction; AData : pointer) : TFPgtkCheckMenuItem;
|
|
begin
|
|
result := NewCheckMenuItem (aCaption, '', '', nil, ToggledFunc, AData);
|
|
end;
|
|
|
|
procedure InsertMenuItemGroup (InMenu : TFPgtkMenuShell; position : integer; MenuItems : TFPgtkItemGroup);
|
|
begin
|
|
InsertMenuItemGroup (InMenu, position, MenuItems, nil, nil);
|
|
end;
|
|
|
|
procedure InsertMenuItemGroup (InMenu : TFPgtkMenuShell; position : integer;
|
|
MenuItems : TFPgtkItemGroup; ActivateProc : TFPgtkSignalFunction; ActivateData : pointer);
|
|
var r : integer;
|
|
begin
|
|
if (MenuItems.count > 0) then
|
|
if (MenuItems.items[0] is TFPgtkMenuItem) then
|
|
with InMenu do
|
|
for r := MenuItems.count-1 downto 0 do
|
|
begin
|
|
if assigned(ActivateProc) then
|
|
if assigned (ActivateData) then
|
|
TFPgtkMenuItem(MenuItems.items[r]).ConnectActivate (ActivateProc, ActivateData)
|
|
else
|
|
TFPgtkMenuItem(MenuItems.items[r]).ConnectActivate (ActivateProc, inttopointer(r));
|
|
Insert (TFPgtkMenuItem(MenuItems.items[r]), position);
|
|
end
|
|
else
|
|
raise FPgtkException.Create (sErrWrongItemType);
|
|
end;
|
|
|
|
procedure AppendMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup);
|
|
begin
|
|
AppendMenuItemGroup (InMenu, MenuItems, nil, nil);
|
|
end;
|
|
|
|
procedure AppendMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup;
|
|
ActivateProc : TFPgtkSignalFunction; ActivateData : pointer);
|
|
var r : integer;
|
|
begin
|
|
if (MenuItems.count > 0) then
|
|
if MenuItems.items[0] is TFPgtkMenuItem then
|
|
with InMenu do
|
|
for r := 0 to MenuItems.count-1 do
|
|
begin
|
|
if assigned(ActivateProc) then
|
|
if assigned (ActivateData) then
|
|
TFPgtkMenuItem(MenuItems.items[r]).ConnectActivate (ActivateProc, ActivateData)
|
|
else
|
|
TFPgtkMenuItem(MenuItems.items[r]).ConnectActivate (ActivateProc, inttopointer(r));
|
|
Append (TFPgtkMenuItem(MenuItems.items[r]));
|
|
end
|
|
else
|
|
raise FPgtkException.Create (sErrWrongItemType);
|
|
end;
|
|
|
|
procedure PrependMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup);
|
|
begin
|
|
PrependMenuItemGroup (InMenu, MenuItems, nil, nil);
|
|
end;
|
|
|
|
procedure PrependMenuItemGroup (InMenu : TFPgtkmenuShell; MenuItems : TFPgtkItemGroup;
|
|
ActivateProc : TFPgtkSignalFunction; ActivateData : pointer);
|
|
var r : integer;
|
|
begin
|
|
if (MenuItems.count > 0) then
|
|
if MenuItems.items[0] is TFPgtkMenuItem then
|
|
with InMenu do
|
|
for r := MenuItems.count-1 downto 0 do
|
|
begin
|
|
if assigned(ActivateProc) then
|
|
if assigned (ActivateData) then
|
|
TFPgtkMenuItem(MenuItems.items[r]).ConnectActivate (ActivateProc, ActivateData)
|
|
else
|
|
TFPgtkMenuItem(MenuItems.items[r]).ConnectActivate (ActivateProc, inttopointer(r));
|
|
Prepend (TFPgtkMenuItem(MenuItems.items[r]));
|
|
end
|
|
else
|
|
raise FPgtkException.Create (sErrWrongItemType);
|
|
end;
|
|
|
|
{ TFileEntryDialog }
|
|
|
|
type
|
|
TFileEntryDialog = class (TFPgtkFileSelection)
|
|
public
|
|
constructor create (AType:TGtkWindowType);
|
|
procedure DoDialogInit (InitData : pointer); override;
|
|
end;
|
|
|
|
PFileEntryData = ^TFileEntryData;
|
|
TFileEntryData = record
|
|
aFilename : string;
|
|
end;
|
|
|
|
constructor TFileEntryDialog.Create (AType:TGtkWindowType);
|
|
begin
|
|
inherited;
|
|
OKButton.ConnectClicked (@CloseWithResult, inttopointer(drOk));
|
|
CancelButton.ConnectClicked (@CloseWindow, nil);
|
|
end;
|
|
|
|
procedure TFileEntryDialog.DoDialogInit (InitData : pointer);
|
|
begin
|
|
with PFileEntryData(InitData)^ do
|
|
Filename := aFilename;
|
|
end;
|
|
|
|
{ TFPgtkFileEntry }
|
|
|
|
const
|
|
FileEntryXPM =
|
|
'16 13 4 1'#13#10+
|
|
'. c None'#13#10+ // no color
|
|
'# c #000000'#13#10+ // black
|
|
'y c #ffff00'#13#10+ // yellow
|
|
'g c #AFAF00'#13#10+ // grayed yellow
|
|
'.......#####....'#13#10+
|
|
'............#.#.'#13#10+
|
|
'.............##.'#13#10+
|
|
'..####......###.'#13#10+
|
|
'##yyyy#####.....'#13#10+
|
|
'#yyyyyyyyy#.....'#13#10+
|
|
'#yyyyyyyyy#.....'#13#10+
|
|
'#yyyy###########'#13#10+
|
|
'#yyy#ggggggggg#.'#13#10+
|
|
'#yy#ggggggggg#..'#13#10+
|
|
'#y#ggggggggg#...'#13#10+
|
|
'##ggggggggg#....'#13#10+
|
|
'###########.....';
|
|
|
|
var
|
|
DefFileEntryPixmap : PGdkPixmap;
|
|
DefFileEntryBitmask : PGdkBitmap;
|
|
|
|
constructor TFPgtkFileEntry.create;
|
|
begin
|
|
inherited;
|
|
FEdit := TFPgtkEntry.Create;
|
|
FButton := TFPgtkButton.Create;
|
|
FImage := TFPgtkPixMap.Create;
|
|
with FImage do
|
|
if assigned (DefFileEntryPixmap) then
|
|
SetPixmap (DefFileEntryPixmap, DefFileEntryBitmask)
|
|
else
|
|
begin
|
|
loadfromtext (FileEntryXPM);
|
|
GetPixmap (DefFileEntryPixmap, DefFileEntryBitmask);
|
|
end;
|
|
with FButton do
|
|
begin
|
|
Add (FImage);
|
|
ConnectClicked (@OpenFileSelection, self);
|
|
end;
|
|
PackStart (FEdit, true, true, 0);
|
|
PackStart (FButton, false, true, 0);
|
|
end;
|
|
|
|
procedure TFPgtkFileEntry.SetFilename (Value : string);
|
|
begin
|
|
FEdit.Text := Value;
|
|
end;
|
|
|
|
function TFPgtkFileEntry.GetFilename : string;
|
|
begin
|
|
result := FEdit.Text;
|
|
end;
|
|
|
|
procedure TFPgtkFileEntry.OpenFileSelection (Sender : TFPgtkObject; data : pointer);
|
|
var d : TFileEntryData;
|
|
begin
|
|
d.aFilename := Filename;
|
|
with TFileEntryDialog.Create(gtk_window_dialog) do
|
|
Execute (nil, @d, @CloseFileSelection);
|
|
end;
|
|
|
|
procedure TFPgtkFileEntry.CloseFileSelection (Sender:TFPgtkWindow; DialogResult:pointer;
|
|
Action:integer; initiator:TFPgtkObject);
|
|
begin
|
|
if action = drOk then
|
|
Filename := (Sender as TFileEntryDialog).Filename;
|
|
end;
|
|
|
|
{ TFPgtkCheckedButton }
|
|
|
|
const
|
|
XPMChecked : array [0..17] of ansistring = (
|
|
'15 13 4 1',
|
|
'. c None', // None
|
|
'# c #000000', // Black
|
|
'- c #FFFFFF', // White
|
|
'o c #0000FF', // Blue
|
|
'..............o',
|
|
'.............o-',
|
|
'............o-.',
|
|
'..########.o-..',
|
|
'..#......#o-...',
|
|
'..#......o-....',
|
|
'..o-....oo-....',
|
|
'.ooo-..oo-.....',
|
|
'..ooo-oo-#.....',
|
|
'..#oooo-.#.....',
|
|
'..##ooo-##.....',
|
|
'.....o-........',
|
|
'...............');
|
|
|
|
XPMUnChecked : array [0..17] of ansistring = (
|
|
'15 13 4 1',
|
|
'. c None', // None
|
|
'# c #000000', // Black
|
|
'- c #FFFFFF', // White
|
|
'o c #0000FF', // Blue
|
|
'...............',
|
|
'...............',
|
|
'...............',
|
|
'..########.....',
|
|
'..#......#.....',
|
|
'..#......#.....',
|
|
'..#......#.....',
|
|
'..#......#.....',
|
|
'..#......#.....',
|
|
'..#......#.....',
|
|
'..########.....',
|
|
'...............',
|
|
'...............');
|
|
|
|
var
|
|
DefChecked, DefUnchecked : PGdkPixmap;
|
|
DefCheckedBM, DefUncheckedBM : PGdkBitmap;
|
|
|
|
procedure TFPgtkCheckedButton.ChangeCheck (Sender:TFPgtkObject; data:pointer);
|
|
var b : boolean;
|
|
begin
|
|
b := Active;
|
|
FChecked.visible := b;
|
|
FUnchecked.visible := not b;
|
|
end;
|
|
|
|
constructor TFPgtkCheckedButton.CreateWithLabel (aText:string);
|
|
begin
|
|
create;
|
|
Text := aText;
|
|
end;
|
|
|
|
constructor TFPgtkCheckedButton.CreateWithLabel (aText:string; AccelGroup : PGtkAccelGroup);
|
|
begin
|
|
create;
|
|
Text := aText;
|
|
if (AccelKey <> 0) and assigned(AccelGroup) then
|
|
AcceleratorAdd (AccelGroup, sgClicked, AccelKey, DefaultButtonModifiers, GTK_ACCEL_Visible);
|
|
end;
|
|
|
|
constructor TFPgtkCheckedButton.create;
|
|
begin
|
|
inherited;
|
|
DrawIndicator := False;
|
|
AddContainer := TFPgtkHBox.Create;
|
|
Add (AddContainer);
|
|
FChecked := TFPgtkPixMap.Create;
|
|
with FChecked do
|
|
if assigned (DefChecked) then
|
|
SetPixmap (DefChecked, DefCheckedBM)
|
|
else
|
|
begin
|
|
loadfromArray (XPMChecked);
|
|
GetPixmap (DefChecked, DefCheckedBM);
|
|
end;
|
|
FUnchecked := TFPgtkPixMap.Create;
|
|
with FUnchecked do
|
|
if assigned (DefUnchecked) then
|
|
SetPixmap (DefUnchecked, DefUncheckedBM)
|
|
else
|
|
begin
|
|
loadfromArray (XPMUnchecked);
|
|
GetPixmap (DefUnchecked, DefUncheckedBM);
|
|
end;
|
|
with TFPgtkBox(AddContainer) do
|
|
begin
|
|
PackStart (FChecked, false, false, 0);
|
|
PackStart (FUnChecked, false, false, 0);
|
|
end;
|
|
ChangeCheck (self, nil);
|
|
ConnectToggled (@ChangeCheck, nil);
|
|
end;
|
|
|
|
{ ShowMessage }
|
|
|
|
resourcestring
|
|
rsOk = ' Ok ';
|
|
|
|
function MessageWindow (aTitle, aMessage : string) : TFPgtkWindow;
|
|
var b : TFPgtkBox;
|
|
but : TFPgtkButton;
|
|
l : TFPgtkLabel;
|
|
AG : integer;
|
|
bb : TFPgtkButtonBox;
|
|
begin
|
|
result := TFPgtkWindow.create (gtk_window_dialog);
|
|
|
|
result.setDefaultSize (200,25);
|
|
result.title := aTitle;
|
|
|
|
AG := result.AccelGroupNew;
|
|
|
|
b := TFPgtkVBox.create;
|
|
b.Homogeneous := false;
|
|
b.border := 15;
|
|
b.spacing := 15;
|
|
|
|
l := TFPgtkLabel.Create (aMessage);
|
|
b.Packstart (l, true, true, 0); // Text to show
|
|
|
|
bb := TFPgtkHButtonBox.create;
|
|
bb.Layout := GTK_BUTTONBOX_DEFAULT_STYLE;
|
|
b.PackEnd (bb, false, false, 0);
|
|
|
|
but := TFPgtkButton.CreateWithLabel (rsOk); // Ok button to close
|
|
but.ConnectClicked (@(result.CloseWindow), nil);
|
|
result.AcceleratorAdd (AG, but, sgClicked, gdk_Cancel, 0, TGTKAccelFlags(0));
|
|
result.AcceleratorAdd (AG, but, sgClicked, gdk_Return, 0, TGTKAccelFlags(0));
|
|
bb.add (but);
|
|
|
|
result.Add (b);
|
|
end;
|
|
|
|
procedure ShowMessage (const aTitle, aMessage : string);
|
|
begin
|
|
with MessageWindow (aTitle, aMessage) do
|
|
Execute (nil, nil, nil);
|
|
end;
|
|
|
|
{ MessageDialog }
|
|
|
|
type
|
|
TMessageDialogWindow = Class(TFPgtkWindow)
|
|
FImage : TFPGtkPixMap;
|
|
FLabel : TFPGtkLabel;
|
|
FLTable : TFPgtkTable;
|
|
FVBox : TFPgtkVBox;
|
|
FButtonBox: TFPgtkButtonBox;
|
|
Constructor Create(AMsg:String; DlgType:TMsgDlgType; Buttons: TMsgDlgButtons);
|
|
Procedure CreateButtons(Buttons: TMsgDlgButtons);
|
|
end;
|
|
|
|
const
|
|
|
|
IMGInfo : Array[1..37] of string = ('32 32 4 1',
|
|
'. c None',
|
|
' c None',
|
|
'a c #ffffff', //#c3c3c3',
|
|
'# c #0000ff',
|
|
'............#######.............',
|
|
'.........###aaaaaaa###..........',
|
|
'.......##aaaaaaaaaaaaa##........',
|
|
'......#aaaaaaa###aaaaaaa#.......',
|
|
'.....#aaaaaaa#####aaaaaaa#......',
|
|
'....#aaaaaaa#######aaaaaaa#.....',
|
|
'...#aaaaaaaa#######aaaaaaaa#....',
|
|
'..#aaaaaaaaa#######aaaaaaaaa#...',
|
|
'..#aaaaaaaaaa#####aaaaaaaaaa#...',
|
|
'.#aaaaaaaaaaaa###aaaaaaaaaaaa#..',
|
|
'.#aaaaaaaaaaaaaaaaaaaaaaaaaaa#..',
|
|
'.#aaaaaaaaaaa#####aaaaaaaaaaa#..',
|
|
'#aaaaaaaaaaaa#####aaaaaaaaaaaa#.',
|
|
'#aaaaaaaaaaaa#####aaaaaaaaaaaa#.',
|
|
'#aaaaaaaaaaaa#####aaaaaaaaaaaa#.',
|
|
'#aaaaaaaaaaaa#####aaaaaaaaaaaa#.',
|
|
'#aaaaaaaaaaaa#####aaaaaaaaaaaa#.',
|
|
'#aaaaaaaaaaaa#####aaaaaaaaaaaa#.',
|
|
'#aaaaaaaaaaaa#####aaaaaaaaaaaa#.',
|
|
'.#aaaaaaaaaaa#####aaaaaaaaaaa#..',
|
|
'.#aaaaaaaaaaa#####aaaaaaaaaaa#..',
|
|
'.#aaaaaaaaaa#######aaaaaaaaaa#..',
|
|
'..#aaaaaaaaa#######aaaaaaaaa#...',
|
|
'..#aaaaaaaaa#######aaaaaaaaa#...',
|
|
'...#aaaaaaaaaaaaaaaaaaaaaaa#....',
|
|
'....#aaaaaaaaaaaaaaaaaaaaa#.....',
|
|
'.....#aaaaaaaaaaaaaaaaaaa#......',
|
|
'......#aaaaaaaaaaaaaaaaa#.......',
|
|
'.......##aaaaaaaaaaaaa##........',
|
|
'.........###aaaaaaa###..........',
|
|
'............#######.............',
|
|
'................................');
|
|
|
|
IMGWarning :Array[1..37] of string = ('32 32 4 1',
|
|
'# c #000000',
|
|
'b c #9c999c',
|
|
'. c None',
|
|
'a c #ffff00',
|
|
'.............###................',
|
|
'............#aaa#...............',
|
|
'...........#aaaaa#b.............',
|
|
'...........#aaaaa#bb............',
|
|
'..........#aaaaaaa#bb...........',
|
|
'..........#aaaaaaa#bb...........',
|
|
'.........#aaaaaaaaa#bb..........',
|
|
'.........#aaaaaaaaa#bb..........',
|
|
'........#aaaaaaaaaaa#bb.........',
|
|
'........#aaaa###aaaa#bb.........',
|
|
'.......#aaaa#####aaaa#bb........',
|
|
'.......#aaaa#####aaaa#bb........',
|
|
'......#aaaaa#####aaaaa#bb.......',
|
|
'......#aaaaa#####aaaaa#bb.......',
|
|
'.....#aaaaaa#####aaaaaa#bb......',
|
|
'.....#aaaaaa#####aaaaaa#bb......',
|
|
'....#aaaaaaaa###aaaaaaaa#bb.....',
|
|
'....#aaaaaaaa###aaaaaaaa#bb.....',
|
|
'...#aaaaaaaaa###aaaaaaaaa#bb....',
|
|
'...#aaaaaaaaaa#aaaaaaaaaa#bb....',
|
|
'..#aaaaaaaaaaa#aaaaaaaaaaa#bb...',
|
|
'..#aaaaaaaaaaaaaaaaaaaaaaa#bb...',
|
|
'.#aaaaaaaaaaaa##aaaaaaaaaaa#bb..',
|
|
'.#aaaaaaaaaaa####aaaaaaaaaa#bb..',
|
|
'#aaaaaaaaaaaa####aaaaaaaaaaa#bb.',
|
|
'#aaaaaaaaaaaaa##aaaaaaaaaaaa#bb.',
|
|
'#aaaaaaaaaaaaaaaaaaaaaaaaaaa#bbb',
|
|
'#aaaaaaaaaaaaaaaaaaaaaaaaaaa#bbb',
|
|
'.#aaaaaaaaaaaaaaaaaaaaaaaaa#bbbb',
|
|
'..#########################bbbbb',
|
|
'....bbbbbbbbbbbbbbbbbbbbbbbbbbb.',
|
|
'.....bbbbbbbbbbbbbbbbbbbbbbbbb..');
|
|
|
|
IMGError : Array[1..37] of string = ('32 32 4 1',
|
|
'. c None',
|
|
'b c #808080',
|
|
'# c #c00000',
|
|
'a c #ffffff',
|
|
'................................',
|
|
'................................',
|
|
'................................',
|
|
'............#######.............',
|
|
'...........###########..........',
|
|
'........###############.........',
|
|
'.......##################.......',
|
|
'......####################......',
|
|
'.....###aa############aa###.....',
|
|
'.....###aaa##########aaa###.....',
|
|
'....#####aaa########aaa#####....',
|
|
'....######aaa######aaa######....',
|
|
'...########aaa####aaa########...',
|
|
'...#########aaa##aaa#########b..',
|
|
'...##########aaaaaa##########b..',
|
|
'...###########aaaa###########b..',
|
|
'...###########aaaa###########b..',
|
|
'...##########aaaaaa##########b..',
|
|
'...#########aaa##aaa#########b..',
|
|
'...########aaa####aaa#######bb..',
|
|
'....######aaa######aaa######bb..',
|
|
'.....####aaa########aaa#####bb..',
|
|
'.....###aaa##########aaa###bbb..',
|
|
'.....###aa############aa##bbb...',
|
|
'......####################bb....',
|
|
'.......##################bb.....',
|
|
'.........###############bb......',
|
|
'..........###########bbbb.......',
|
|
'.............#######bbb.........',
|
|
'................................',
|
|
'................................',
|
|
'................................');
|
|
|
|
IMGConfirmation : Array[1..37] of string = ('32 32 4 1',
|
|
'. c None',
|
|
'b c #808080',
|
|
'a c #c00000',
|
|
'# c #ffffff',
|
|
'................................',
|
|
'................................',
|
|
'................................',
|
|
'................................',
|
|
'.............######.............',
|
|
'..........###########...........',
|
|
'.........##############.........',
|
|
'........################........',
|
|
'.......##################.......',
|
|
'......########aaaaa#######......',
|
|
'.....########aaaaaaa#######.....',
|
|
'.....#######aa#####aa######.....',
|
|
'.....#######a######aa#######....',
|
|
'....###############aa#######b...',
|
|
'....###############aa#######bb..',
|
|
'....##############aa########bb..',
|
|
'....#############aa#########bb..',
|
|
'....############aa##########bb..',
|
|
'....###########aa###########bb..',
|
|
'.....##########aa##########bbb..',
|
|
'.....##########aa##########bbb..',
|
|
'.....##########aa##########bb...',
|
|
'......#########aa#########bb....',
|
|
'.......##################bbb....',
|
|
'........#######aa#######bbb.....',
|
|
'.........######aa######bbb......',
|
|
'...........###########bbb.......',
|
|
'.............######bbbbb........',
|
|
'................................',
|
|
'................................',
|
|
'................................',
|
|
'................................');
|
|
|
|
|
|
Constructor TMessageDialogWindow.Create(AMsg : String;DlgType:TMsgDlgType;Buttons: TMsgDlgButtons);
|
|
const
|
|
OH = GTK_FILL OR GTK_EXPAND;
|
|
begin
|
|
Inherited Create(GTK_WINDOW_DIALOG);
|
|
FVBox:=TFPGtkVBox.Create;
|
|
FVBox.Spacing:=4;
|
|
FVBox.Border:=8;
|
|
Add(FVBox);
|
|
FLTable:=TFpgtkTable.Create(10,1);
|
|
if DlgType <> mtCustom then
|
|
begin
|
|
FImage:=TFPGtkPixMap.Create;
|
|
With FImage do
|
|
Case DlgType of
|
|
mtInformation : LoadFromArray(Imginfo);
|
|
mtWarning : LoadFromArray(imgWarning);
|
|
mtConfirmation : LoadFromArray(imgConfirmation);
|
|
mtError : LoadFromArray(imgError);
|
|
end;
|
|
FLTable.Attach(FImage,1,2,0,1,OH,OH,0,0);
|
|
end;
|
|
FLabel:=TFPGtkLabel.Create(Amsg);
|
|
FLTable.Attach(FLabel,4,9,0,1,OH,OH,0,0);
|
|
FButtonBox:=TFPgtkHButtonBox.Create;
|
|
with FButtonBox do
|
|
begin
|
|
Layout := GTK_BUTTONBOX_DEFAULT_STYLE;
|
|
spacing := 4;
|
|
end;
|
|
CreateButtons(Buttons);
|
|
FVBox.PackStart(FLTable,false,False,8);
|
|
FVBox.PackStart(FButtonBox,false,False,8);
|
|
end;
|
|
|
|
Const
|
|
ButtonText : Array[TMsgDlgBtn] of string =
|
|
('Yes', 'No', 'OK', 'Cancel','Abort', 'Retry', 'Ignore',
|
|
'All', 'NoToAll', 'YesToAll', 'Help');
|
|
ButtonResult : array [TMsgDlgbtn] of TModalResult =
|
|
(mrYes, mrNo, mrOK, mrCAncel, mrAbort, mrRetry, mrIgnore,
|
|
mrAll, mrNoToAll, mrYesToAll, 0);
|
|
|
|
Procedure TMessageDialogWindow.CreateButtons(Buttons: TMsgDlgButtons);
|
|
Var
|
|
b : TMsgDlgBtn;
|
|
bw : TFPGtkButton;
|
|
begin
|
|
For B:=Low(TMsgDlgBtn) to high(TMsgDlgBtn) do
|
|
If b in Buttons then
|
|
begin
|
|
BW:=TFPGtkButton.CreateWithLabel(ButtonText[b]);
|
|
BW.ConnectClicked(@CloseWithResult,IntToPointer(ButtonResult[b]));
|
|
BW.Setusize(50,25);
|
|
FButtonBox.PackStart(BW,False,False,4);
|
|
end;
|
|
end;
|
|
|
|
function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
|
|
Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
|
|
begin
|
|
With TMessageDialogWindow.Create(AMsg,DlgType,Buttons) do
|
|
Result:=Execute(Nil,Nil,Nil);
|
|
end;
|
|
|
|
function MessageDlg(const Fmt: string; Args : Array of const; DlgType: TMsgDlgType;
|
|
Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
|
|
begin
|
|
Result:=MessageDlg(Format(Fmt,Args),Dlgtype,Buttons,HelpCtx);
|
|
end;
|
|
|
|
end.
|