From e6d2ec50bb37d5b92703e1852b814c90dd4d3204 Mon Sep 17 00:00:00 2001 From: graemeg Date: Sat, 8 Sep 2007 13:49:40 +0000 Subject: * Fixed initial painting of components when they are placed in the form designer. * Fixed the initial state of scrollbars for various components. * Implemented more fine grained cursors. Used by the designer for the resizer buttons. * Components can now be moved around in the designer form. * Components can now be placed inside container components like TfpgBevel. * Treeview doesn't crash the GUI designer anymore, yet the painting is still not working for it. * Tab and reverse Tab now work in the GUI designer. * GUI Designer title bar is now consistent in text format. --- examples/apps/uidesigner/vfddesigner.pas | 102 +++++++++++++++------------- examples/apps/uidesigner/vfdformparser.pas | 3 +- examples/apps/uidesigner/vfdmain.pas | 7 +- examples/apps/uidesigner/vfdresizer.pas | 4 +- examples/apps/uidesigner/vfdwidgetclass.pas | 36 +++++----- examples/apps/uidesigner/vfdwidgets.pas | 10 ++- 6 files changed, 87 insertions(+), 75 deletions(-) (limited to 'examples') diff --git a/examples/apps/uidesigner/vfddesigner.pas b/examples/apps/uidesigner/vfddesigner.pas index 4640ac06..77743a71 100644 --- a/examples/apps/uidesigner/vfddesigner.pas +++ b/examples/apps/uidesigner/vfddesigner.pas @@ -68,7 +68,7 @@ type TWidgetDesigner = class(TObject) private - procedure SetSelected(const AValue: boolean); + procedure SetSelected(const AValue: boolean); public FFormDesigner: TFormDesigner; FWidget: TfpgWidget; @@ -96,49 +96,48 @@ type FWasDrag: boolean; protected // messages of the designed widgets - procedure MsgMouseDown(var msg: TfpgMessageRec); message FPGM_MOUSEDOWN; - procedure MsgMouseUp(var msg: TfpgMessageRec); message FPGM_MOUSEUP; - procedure MsgMouseMove(var msg: TfpgMessageRec); message FPGM_MOUSEMOVE; - procedure MsgKeyPress(var msg: TfpgMessageRec); message FPGM_KEYPRESS; - procedure MsgMove(var msg: TfpgMessageRec); message FPGM_MOVE; - procedure MsgResize(var msg: TfpgMessageRec); message FPGM_RESIZE; - procedure MsgActivate(var msg: TfpgMessageRec); message FPGM_ACTIVATE; + procedure MsgMouseDown(var msg: TfpgMessageRec); message FPGM_MOUSEDOWN; + procedure MsgMouseUp(var msg: TfpgMessageRec); message FPGM_MOUSEUP; + procedure MsgMouseMove(var msg: TfpgMessageRec); message FPGM_MOUSEMOVE; + procedure MsgKeyPress(var msg: TfpgMessageRec); message FPGM_KEYPRESS; + procedure MsgMove(var msg: TfpgMessageRec); message FPGM_MOVE; + procedure MsgResize(var msg: TfpgMessageRec); message FPGM_RESIZE; + procedure MsgActivate(var msg: TfpgMessageRec); message FPGM_ACTIVATE; public OneClickMove: boolean; // the widgets can be selected and dragged within one click constructor Create; - destructor Destroy; override; - procedure ClearForm; - procedure DefaultHandler(var msg); override; - procedure Show; - procedure InitTest; - function AddWidget(wg: TfpgWidget; wgc: TVFDWidgetClass): TWidgetDesigner; - function WidgetDesigner(wg: TfpgWidget): TWidgetDesigner; - function FindWidgetByName(const wgname: string): TfpgWidget; - procedure DeSelectAll; - procedure SelectAll; - procedure SelectNextWidget(fw: boolean); - procedure MoveResizeWidgets(dx, dy, dw, dh: integer); - procedure DeleteWidgets; - procedure EditWidgetOrder; - procedure DesignerKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); - procedure PutControlByName(x, y: integer; cname: string); - procedure InsertWidget(pwg: TfpgWidget; x, y: integer; wgc: TVFDWidgetClass); - procedure OnPaletteChange(Sender: TObject); - procedure UpdatePropWin; - procedure OnPropTextChange(Sender: TObject); - procedure OnPropNameChange(Sender: TObject); - procedure OnPropPosEdit(Sender: TObject); - procedure OnOtherChange(Sender: TObject); - procedure OnAnchorChange(Sender: TObject); - procedure OnEditWidget(Sender: TObject); - function GenerateNewName(namebase: string): string; - procedure RunWidgetEditor(wgd: TWidgetDesigner; wg: TfpgWidget); - public - function GetFormSourceDecl: string; - function GetFormSourceImpl: string; - function GetWidgetSourceImpl(wd: TWidgetDesigner; ident: string): string; - property Form: TDesignedForm read FForm; - property FormOther: string read FFormOther write FFormOther; + destructor Destroy; override; + procedure ClearForm; + procedure DefaultHandler(var msg); override; + procedure Show; + procedure InitTest; + function AddWidget(wg: TfpgWidget; wgc: TVFDWidgetClass): TWidgetDesigner; + function WidgetDesigner(wg: TfpgWidget): TWidgetDesigner; + function FindWidgetByName(const wgname: string): TfpgWidget; + procedure DeSelectAll; + procedure SelectAll; + procedure SelectNextWidget(fw: boolean); + procedure MoveResizeWidgets(dx, dy, dw, dh: integer); + procedure DeleteWidgets; + procedure EditWidgetOrder; + procedure DesignerKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); +// procedure PutControlByName(x, y: integer; cname: string); + procedure InsertWidget(pwg: TfpgWidget; x, y: integer; wgc: TVFDWidgetClass); + procedure OnPaletteChange(Sender: TObject); + procedure UpdatePropWin; + procedure OnPropTextChange(Sender: TObject); + procedure OnPropNameChange(Sender: TObject); + procedure OnPropPosEdit(Sender: TObject); + procedure OnOtherChange(Sender: TObject); + procedure OnAnchorChange(Sender: TObject); + procedure OnEditWidget(Sender: TObject); + function GenerateNewName(namebase: string): string; + procedure RunWidgetEditor(wgd: TWidgetDesigner; wg: TfpgWidget); + function GetFormSourceDecl: string; + function GetFormSourceImpl: string; + function GetWidgetSourceImpl(wd: TWidgetDesigner; ident: string): string; + property Form: TDesignedForm read FForm; + property FormOther: string read FFormOther write FFormOther; end; @@ -174,7 +173,7 @@ begin UpdateResizerPositions; - if FSelected and (Widget.Parent.WinHandle > 0) then + if FSelected and Widget.Parent.HasHandle then for n := 1 to 8 do resizer[n].Show; end; @@ -494,6 +493,7 @@ function TFormDesigner.AddWidget(wg: TfpgWidget; wgc: TVFDWidgetClass): TWidgetD var cd: TWidgetDesigner; begin +// writeln('TFormDesigner.AddWidget'); cd := TWidgetDesigner.Create(self, wg, wgc); FWidgets.Add(cd); //cd.Selected := true; @@ -711,8 +711,13 @@ begin keyDelete: DeleteWidgets; - keyTab: SelectNextWidget(True); -// KEY_STAB: SelectNextWidget(False); + keyTab: + begin + if ssShift in shiftstate then + SelectNextWidget(False) // tab backwards + else + SelectNextWidget(True); // tab forward + end; keyF1: ShowMessage('ENTER, F11: switch to Properties' + LineEnding + 'TAB, SHIFT+TAB: select next widget' + LineEnding + @@ -739,6 +744,7 @@ begin MoveResizeWidgets(dx, dy, 0, 0); end; +(* procedure TFormDesigner.PutControlByName(x, y: integer; cname: string); var wg: TfpgWidget; @@ -821,6 +827,7 @@ begin UpdatePropWin; end; end; +*) procedure TFormDesigner.OnPaletteChange(Sender: TObject); begin @@ -1491,6 +1498,7 @@ var wg: TfpgWidget; wgd: TWidgetDesigner; begin +// writeln('TFormDesigner.InsertWidget'); if wgc = nil then Exit; @@ -1515,8 +1523,9 @@ begin wg := wgc.CreateWidget(pwg); if wg <> nil then begin - wg.Left := x; - wg.Top := y; + wg.FormDesigner := self; +// wg.Left := x; +// wg.Top := y; if newname = '' then newname := GenerateNewName(wgc.NameBase); wg.Name := newname; @@ -1524,6 +1533,7 @@ begin TOtherWidget(wg).wgClassName := newclassname; wgd := AddWidget(wg, wgc); wg.Visible := True; + wg.SetPosition(x, y, wg.Width, wg.Height); DeSelectAll; wgd.Selected := True; UpdatePropWin; diff --git a/examples/apps/uidesigner/vfdformparser.pas b/examples/apps/uidesigner/vfdformparser.pas index d57be188..e3900f4b 100644 --- a/examples/apps/uidesigner/vfdformparser.pas +++ b/examples/apps/uidesigner/vfdformparser.pas @@ -303,7 +303,8 @@ begin end; wg.Name := wgname; - + wg.FormDesigner := ffd; + NextLine; s := UpperCase(line); ident := GetIdentifier(s); diff --git a/examples/apps/uidesigner/vfdmain.pas b/examples/apps/uidesigner/vfdmain.pas index 80dde07b..e59026d4 100644 --- a/examples/apps/uidesigner/vfdmain.pas +++ b/examples/apps/uidesigner/vfdmain.pas @@ -223,13 +223,10 @@ begin CloseFile(ff); end; writeln('Form saved.'); - - frmMain.WindowTitle := fname + ' - VFD v' + program_version; - + frmMain.WindowTitle := 'fpGUI Designer v' + program_version + ' - ' + fname; except Writeln('Form save I/O failure.'); end; - end; procedure TMainDesigner.OnAnchorChange(Sender: TObject); @@ -291,7 +288,7 @@ procedure TMainDesigner.CreateWindows; // fd : TFormDesigner; begin frmMain := TfrmMain.Create(nil); - frmMain.WindowTitle := 'fpGUI Form Designer - v' + program_version; + frmMain.WindowTitle := 'fpGUI Designer v' + program_version; frmMain.Show; frmProperties := TfrmProperties.Create(nil); diff --git a/examples/apps/uidesigner/vfdresizer.pas b/examples/apps/uidesigner/vfdresizer.pas index f26e0e86..1298c6ab 100644 --- a/examples/apps/uidesigner/vfdresizer.pas +++ b/examples/apps/uidesigner/vfdresizer.pas @@ -120,9 +120,9 @@ begin Height := 5; direction := adirection; case direction of - 1: MouseCursor := mcSizeNWSE; + 1: MouseCursor := mcSizeSENW; 2: MouseCursor := mcSizeNS; - 3: MouseCursor := mcSizeNESW; + 3: MouseCursor := mcSizeSWNE; 4: MouseCursor := mcSizeEW; 5: MouseCursor := mcSizeNWSE; 6: MouseCursor := mcSizeNS; diff --git a/examples/apps/uidesigner/vfdwidgetclass.pas b/examples/apps/uidesigner/vfdwidgetclass.pas index 39b5493b..e6f0add2 100644 --- a/examples/apps/uidesigner/vfdwidgetclass.pas +++ b/examples/apps/uidesigner/vfdwidgetclass.pas @@ -40,14 +40,12 @@ type FProp: TVFDWidgetProperty; public OnUpdate: TNotifyEvent; - procedure UpdateProperty(Sender: TObject); - property Prop: TVFDWidgetProperty read FProp; + procedure UpdateProperty(Sender: TObject); + property Prop: TVFDWidgetProperty read FProp; constructor Create(AOwner: TComponent; aprop: TVFDWidgetProperty); reintroduce; - public - // virtuals - procedure CreateLayout; virtual; - procedure LoadValue(wg: TfpgWidget); virtual; - procedure StoreValue(wg: TfpgWidget); virtual; + procedure CreateLayout; virtual; + procedure LoadValue(wg: TfpgWidget); virtual; + procedure StoreValue(wg: TfpgWidget); virtual; end; @@ -56,15 +54,13 @@ type Name: string; Description: string; public - // Virtuals constructor Create(aName: string); virtual; - function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; virtual; - function GetPropertySource(wg: TfpgWidget; const ident: string): string; virtual; - // Property editing - function GetValueText(wg: TfpgWidget): string; virtual; - procedure DrawValue(wg: TfpgWidget; Canvas: TfpgCanvas; rect: TfpgRect; flags: integer); virtual; - function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; virtual; - procedure OnExternalEdit(wg: TfpgWidget); virtual; + function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; virtual; + function GetPropertySource(wg: TfpgWidget; const ident: string): string; virtual; + function GetValueText(wg: TfpgWidget): string; virtual; + procedure DrawValue(wg: TfpgWidget; Canvas: TfpgCanvas; rect: TfpgRect; flags: integer); virtual; + function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; virtual; + procedure OnExternalEdit(wg: TfpgWidget); virtual; end; @@ -81,11 +77,11 @@ type NameBase: string; Container: boolean; constructor Create(aClass: TWidgetClass); - destructor Destroy; override; - function AddProperty(apropname: string; apropclass: TVFDPropertyClass; desc: string): TVFDWidgetProperty; - function PropertyCount: integer; - function GetProperty(ind: integer): TVFDWidgetProperty; - function CreateWidget(AOwner: TComponent): TfpgWidget; + destructor Destroy; override; + function AddProperty(apropname: string; apropclass: TVFDPropertyClass; desc: string): TVFDWidgetProperty; + function PropertyCount: integer; + function GetProperty(ind: integer): TVFDWidgetProperty; + function CreateWidget(AOwner: TComponent): TfpgWidget; end; diff --git a/examples/apps/uidesigner/vfdwidgets.pas b/examples/apps/uidesigner/vfdwidgets.pas index 8685c9cd..529a3085 100644 --- a/examples/apps/uidesigner/vfdwidgets.pas +++ b/examples/apps/uidesigner/vfdwidgets.pas @@ -253,6 +253,8 @@ begin wc.NameBase := 'cbName'; wc.AddProperty('Text', TPropertyString, 'Initial text'); wc.AddProperty('FontDesc', TPropertyString, 'The font used for displaying the text'); + wc.AddProperty('Checked', TPropertyInteger, 'Boolean value'); +// wc.AddProperty('BackgroundColor', TPropertyString, ''); wc.WidgetIconName := 'vfd.checkbox'; RegisterVFDWidget(wc); @@ -261,6 +263,9 @@ begin wc.NameBase := 'rbName'; wc.AddProperty('Text', TPropertyString, 'Initial text'); wc.AddProperty('FontDesc', TPropertyString, 'The font used for displaying the text'); + wc.AddProperty('GroupIndex', TPropertyInteger, ''); + wc.AddProperty('Checked', TPropertyInteger, 'Boolean value'); +// wc.AddProperty('BackgroundColor', TPropertyString, ''); wc.WidgetIconName := 'vfd.radiobutton'; RegisterVFDWidget(wc); @@ -337,7 +342,10 @@ begin wc.AddProperty('FontDesc',TPropertyString, ''); wc.AddProperty('ShowImages',TPropertyInteger, 'Boolean value'); wc.AddProperty('ShowColumns',TPropertyInteger, 'Boolean value'); - wc.AddProperty('DefaultColumnWidth',TPropertyInteger,''); + wc.AddProperty('DefaultColumnWidth',TPropertyInteger, ''); + wc.AddProperty('TreeLineStyle', TPropertyEnum, ''); +// wc.AddProperty('TreeLineColor', TPropertyString, ''); + wc.AddProperty('ScrollWheelDelta', TPropertyInteger, 'Scroll amount with mouse wheel'); wc.WidgetIconName := 'vfd.treeview'; RegisterVFDWidget(wc); -- cgit v1.2.3-70-g09d2