summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-09-06 21:41:49 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-09-06 21:41:49 +0000
commit4296554992d2c56360ef23f5ada4c966b9fa157c (patch)
tree3cdfe0433cc85ee1a4cd7aefadcafa36c46b50de /src
parent7d76bc5a71cccf70ab7e6c49fd3ea8d9c93f1e8c (diff)
downloadfpGUI-4296554992d2c56360ef23f5ada4c966b9fa157c.tar.xz
* Added a new generic property to TfpgWidget to dispatch messages so
the GUI Form Designer can intercept them. * File Save dialog can now save even if the file does not exist. Still needs a little bit of improvement. * GUI Designer now detects OS messages in designer window. * Painting has been improved a bit, though the z-order is still screwed. * The formating of a new template unit has been improved.
Diffstat (limited to 'src')
-rw-r--r--src/corelib/gfx_widget.pas52
-rw-r--r--src/gui/gui_dialogs.pas7
-rw-r--r--src/gui/gui_form.pas7
3 files changed, 64 insertions, 2 deletions
diff --git a/src/corelib/gfx_widget.pas b/src/corelib/gfx_widget.pas
index 39a155c3..b0e22233 100644
--- a/src/corelib/gfx_widget.pas
+++ b/src/corelib/gfx_widget.pas
@@ -41,6 +41,7 @@ type
procedure MsgMouseScroll(var msg: TfpgMessageRec); message FPGM_SCROLL;
procedure SetActiveWidget(const AValue: TfpgWidget);
protected
+ FFormDesigner: TObject;
FVisible: boolean;
FEnabled: boolean;
FFocusable: boolean;
@@ -95,6 +96,7 @@ type
procedure MoveAndResizeBy(dx, dy, dw, dh: TfpgCoord);
procedure SetPosition(aleft, atop, awidth, aheight: TfpgCoord);
procedure Invalidate; // double check this works as developers expect????
+ property FormDesigner: TObject read FFormDesigner write FFormDesigner;
property Parent: TfpgWidget read GetParent write SetParent;
property ActiveWidget: TfpgWidget read FActiveWidget write SetActiveWidget;
property Visible: boolean read FVisible write SetVisible;
@@ -246,6 +248,12 @@ var
consumed: boolean;
wg: TfpgWidget;
begin
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
key := msg.params.keyboard.keycode;
ss := msg.params.keyboard.shiftstate;
consumed := False;
@@ -269,6 +277,12 @@ var
consumed: boolean;
wg: TfpgWidget;
begin
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
key := msg.params.keyboard.keycode;
ss := msg.params.keyboard.shiftstate;
consumed := False;
@@ -289,6 +303,12 @@ procedure TfpgWidget.MsgMouseDown(var msg: TfpgMessageRec);
var
mb: TMouseButton;
begin
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
if not FEnabled then
exit; // Do we want this here?
@@ -318,6 +338,12 @@ var
mb: TMouseButton;
IsDblClick: boolean;
begin
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
if not FEnabled then
exit; // Do we want this here?
@@ -359,6 +385,12 @@ end;
procedure TfpgWidget.MsgMouseMove(var msg: TfpgMessageRec);
begin
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
HandleMouseMove(msg.Params.mouse.x, msg.Params.mouse.y, msg.Params.mouse.Buttons, msg.Params.mouse.shiftstate);
if Assigned(OnMouseMove) then
OnMouseMove(self, msg.Params.mouse.shiftstate,
@@ -382,6 +414,12 @@ end;
procedure TfpgWidget.MsgMouseEnter(var msg: TfpgMessageRec);
begin
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
HandleMouseEnter;
if Assigned(FOnMouseEnter) then
FOnMouseEnter(self);
@@ -389,6 +427,12 @@ end;
procedure TfpgWidget.MsgMouseExit(var msg: TfpgMessageRec);
begin
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
HandleMouseExit;
if Assigned(FOnMouseExit) then
FOnMouseExit(Self);
@@ -706,6 +750,10 @@ end;
procedure TfpgWidget.MsgResize(var msg: TfpgMessageRec);
begin
HandleResize(msg.Params.rect.Width, msg.Params.rect.Height);
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ end;
end;
procedure TfpgWidget.HandleResize(awidth, aheight: TfpgCoord);
@@ -723,6 +771,10 @@ end;
procedure TfpgWidget.MsgMove(var msg: TfpgMessageRec);
begin
HandleMove(msg.Params.rect.left, msg.Params.rect.top);
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ end;
end;
procedure TfpgWidget.HandleMove(x, y: TfpgCoord);
diff --git a/src/gui/gui_dialogs.pas b/src/gui/gui_dialogs.pas
index 0cad667f..715685d4 100644
--- a/src/gui/gui_dialogs.pas
+++ b/src/gui/gui_dialogs.pas
@@ -716,8 +716,11 @@ begin
if grid.CurrentEntry.EntryType <> etDir then
edFileName.Text := grid.CurrentEntry.Name;
-
- btnOK.Enabled := grid.CurrentEntry.EntryType = etFile;
+
+ if FOpenMode then
+ btnOK.Enabled := grid.CurrentEntry.EntryType = etFile
+ else
+ btnOK.Enabled := edFileName.Text <> '';
lbFileInfo.Text := s;
end;
diff --git a/src/gui/gui_form.pas b/src/gui/gui_form.pas
index 4e075068..7acab61c 100644
--- a/src/gui/gui_form.pas
+++ b/src/gui/gui_form.pas
@@ -112,6 +112,13 @@ begin
if (fpgApplication.TopModalForm = nil) or (fpgApplication.TopModalForm = self) then
begin
FocusRootWidget := self;
+
+ if FFormDesigner <> nil then
+ begin
+ FFormDesigner.Dispatch(msg);
+ Exit;
+ end;
+
if ActiveWidget = nil then
ActiveWidget := FindFocusWidget(nil, fsdFirst)
else