diff options
author | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-08-26 16:47:53 +0000 |
---|---|---|
committer | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-08-26 16:47:53 +0000 |
commit | 483eda5909cf21a06f3011857a12f47ae676ffef (patch) | |
tree | eb8bf9cc2e6a6a02e7ea79db1540a7c48d7dc827 /uidesigner/vfdforms.pas | |
parent | a88f8e00c7094d32411871d3993654f326563e3b (diff) | |
download | fpGUI-483eda5909cf21a06f3011857a12f47ae676ffef.tar.xz |
* Moved the UI Designer from the examples/apps directory to the root directory.
* Updated some build scripts
Diffstat (limited to 'uidesigner/vfdforms.pas')
-rw-r--r-- | uidesigner/vfdforms.pas | 587 |
1 files changed, 587 insertions, 0 deletions
diff --git a/uidesigner/vfdforms.pas b/uidesigner/vfdforms.pas new file mode 100644 index 00000000..61ce43c2 --- /dev/null +++ b/uidesigner/vfdforms.pas @@ -0,0 +1,587 @@ +{ + fpGUI - Free Pascal GUI Toolkit + + Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this + distribution, for details of the copyright. + + See the file COPYING.modifiedLGPL, included in this distribution, + for details about redistributing fpGUI. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + Description: + The main uiDesigner forms. +} + +unit vfdforms; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, + SysUtils, + gfxbase, + gfx_widget, + gui_form, + gui_label, + gui_edit, + gui_button, + gui_listbox, + gui_combobox, + gui_trackbar, + gui_checkbox; + +type + + TVFDDialog = class(TfpgForm) + protected + procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override; + end; + + + TInsertCustomForm = class(TVFDDialog) + public + l1, + l2: TfpgLabel; + edClass: TfpgEdit; + edName: TfpgEdit; + btnOK: TfpgButton; + btnCancel: TfpgButton; + procedure AfterCreate; override; + procedure OnButtonClick(Sender: TObject); + end; + + + TNewFormForm = class(TVFDDialog) + private + procedure OnedNameKeyPressed(Sender: TObject; var KeyCode: word; + var ShiftState: TShiftState; var Consumed: boolean); + public + l1: TfpgLabel; + edName: TfpgEdit; + btnOK: TfpgButton; + btnCancel: TfpgButton; + procedure AfterCreate; override; + procedure OnButtonClick(Sender: TObject); + end; + + + TEditPositionForm = class(TVFDDialog) + private + procedure edPosKeyPressed(Sender: TObject; var KeyCode: word; + var ShiftState: TShiftState; var Consumed: boolean); + public + lbPos: TfpgLabel; + edPos: TfpgEdit; + btnOK: TfpgButton; + btnCancel: TfpgButton; + procedure AfterCreate; override; + procedure OnButtonClick(Sender: TObject); + end; + + + TWidgetOrderForm = class(TVFDDialog) + public + {@VFD_HEAD_BEGIN: WidgetOrderForm} + l1: TfpgLabel; + list: TfpgListBox; + btnOK: TfpgButton; + btnCancel: TfpgButton; + btnUp: TfpgButton; + btnDown: TfpgButton; + {@VFD_HEAD_END: WidgetOrderForm} + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure AfterCreate; override; + procedure OnButtonClick(Sender: TObject); + end; + + + TfrmVFDSetup = class(TfpgForm) + private + procedure LoadSettings; + procedure SaveSettings; + procedure btnOKClick(Sender: TObject); + public + {@VFD_HEAD_BEGIN: frmVFDSetup} + lb1: TfpgLabel; + chlGrid: TfpgComboBox; + btnOK: TfpgButton; + btnCancel: TfpgButton; + lblRecentFiles: TfpgLabel; + tbMRUFileCount: TfpgTrackBar; + cbFullPath: TfpgCheckBox; + lblName1: TfpgLabel; + lblName2: TfpgLabel; + eDefaultExt: TfpgEdit; + lblName3: TfpgLabel; + cbUndoOnExit: TfpgCheckBox; + {@VFD_HEAD_END: frmVFDSetup} + procedure AfterCreate; override; + procedure BeforeDestruction; override; + end; + + + +implementation + +uses + fpgfx, + gui_iniutils, + gfx_constants, + vfdprops; // used to get Object Inspector defaults + + +{ TInsertCustomForm } + +procedure TInsertCustomForm.AfterCreate; +begin + inherited; + WindowPosition := wpScreenCenter; + WindowTitle := 'Insert Custom Widget'; + SetPosition(0, 0, 300, 100); + + l1 := CreateLabel(self, 8, 4, 'Class name:'); + edClass := CreateEdit(self, 8, 24, 150, 0); + edClass.Text := 'Tfpg'; + l2 := CreateLabel(self, 8, 48, 'Name:'); + edName := CreateEdit(self, 8, 68, 150, 0); + btnOK := CreateButton(self, 180, 20, 100, 'OK', @OnButtonClick); + btnCancel := CreateButton(self, 180, 52, 100, 'Cancel', @OnButtonClick); +end; + +procedure TInsertCustomForm.OnButtonClick(Sender: TObject); +begin + if Sender = btnOK then + ModalResult := 1 + else + ModalResult := 2; +end; + +{ TNewFormForm } + +procedure TNewFormForm.OnedNameKeyPressed(Sender: TObject; var KeyCode: word; + var ShiftState: TShiftState; var Consumed: boolean); +begin + if (KeyCode = keyEnter) or (KeyCode = keyPEnter) then + btnOK.Click; +end; + +procedure TNewFormForm.AfterCreate; +begin + inherited AfterCreate; + WindowPosition := wpScreenCenter; + SetPosition(0, 0, 286, 66); + WindowTitle := 'New Form'; + + l1 := CreateLabel(self, 8, 8, 'Form name:'); + edName := CreateEdit(self, 8, 28, 180, 0); + edName.Text := 'frm'; + edName.OnKeyPress := @OnedNameKeyPressed; + btnOK := CreateButton(self, 196, 8, 80, rsOK, @OnButtonClick); + btnCancel := CreateButton(self, 196, 36, 80, rsCancel, @OnButtonClick); +end; + +procedure TNewFormForm.OnButtonClick(Sender: TObject); +begin + if Sender = btnOK then + ModalResult := 1 + else + ModalResult := 2; +end; + +{ TEditPositionForm } + +procedure TEditPositionForm.edPosKeyPressed(Sender: TObject; var KeyCode: word; + var ShiftState: TShiftState; var Consumed: boolean); +begin + if (KeyCode = keyEnter) or (KeyCode = keyPEnter) then + btnOK.Click; +end; + +procedure TEditPositionForm.AfterCreate; +begin + inherited AfterCreate; + WindowPosition := wpScreenCenter; + Width := 186; + Height := 66; + WindowTitle := 'Position'; + Sizeable := False; + + lbPos := CreateLabel(self, 8, 8, 'Pos: '); + edPos := CreateEdit(self, 8, 28, 80, 0); + edPos.OnKeyPress := @edPosKeyPressed; + btnOK := CreateButton(self, 98, 8, 80, rsOK, @OnButtonClick); + btnCancel := CreateButton(self, 98, 36, 80, rsCancel, @OnButtonClick); +end; + +procedure TEditPositionForm.OnButtonClick(Sender: TObject); +begin + if Sender = btnOK then + ModalResult := 1 + else + ModalResult := 2; +end; + +{ TWidgetOrderForm } + +constructor TWidgetOrderForm.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + Name := 'WidgetOrderForm'; + gINI.ReadFormState(self); +end; + +destructor TWidgetOrderForm.Destroy; +begin + gINI.WriteFormState(self); + inherited Destroy; +end; + +procedure TWidgetOrderForm.AfterCreate; +begin + inherited AfterCreate; + {@VFD_BODY_BEGIN: WidgetOrderForm} + Name := 'WidgetOrderForm'; + SetPosition(534, 173, 312, 258); + WindowTitle := 'Widget order'; + WindowPosition := wpScreenCenter; + + l1 := TfpgLabel.Create(self); + with l1 do + begin + Name := 'l1'; + SetPosition(4, 4, 108, 16); + FontDesc := '#Label1'; + Text := 'Form widget order:'; + end; + + list := TfpgListBox.Create(self); + with list do + begin + Name := 'list'; + SetPosition(4, 24, 220, 228); + Anchors := [anLeft,anRight,anTop,anBottom]; + FontDesc := '#List'; + TabOrder := 1; + end; + + btnOK := TfpgButton.Create(self); + with btnOK do + begin + Name := 'btnOK'; + SetPosition(232, 24, 75, 24); + Anchors := [anRight,anTop]; + Text := 'OK'; + FontDesc := '#Label1'; + ImageName := 'stdimg.ok'; + TabOrder := 2; + OnClick := @OnButtonClick; + end; + + btnCancel := TfpgButton.Create(self); + with btnCancel do + begin + Name := 'btnCancel'; + SetPosition(232, 52, 75, 24); + Anchors := [anRight,anTop]; + Text := 'Cancel'; + FontDesc := '#Label1'; + ImageName := 'stdimg.cancel'; + TabOrder := 3; + OnClick := @OnButtonClick; + end; + + btnUp := TfpgButton.Create(self); + with btnUp do + begin + Name := 'btnUp'; + SetPosition(232, 108, 75, 24); + Anchors := [anRight,anTop]; + Text := 'Up'; + FontDesc := '#Label1'; + ImageName := ''; + TabOrder := 4; + OnClick := @OnButtonClick; + end; + + btnDown := TfpgButton.Create(self); + with btnDown do + begin + Name := 'btnDown'; + SetPosition(232, 136, 75, 24); + Anchors := [anRight,anTop]; + Text := 'Down'; + FontDesc := '#Label1'; + ImageName := ''; + TabOrder := 5; + OnClick := @OnButtonClick; + end; + + {@VFD_BODY_END: WidgetOrderForm} +end; + +procedure TWidgetOrderForm.OnButtonClick(Sender: TObject); +var + i: integer; + n: integer; + myilev: integer; + + function IdentLevel(astr: string): integer; + var + s: string; + f: integer; + begin + Result := 0; + s := astr; + f := 1; + while (f <= length(s)) and (s[f] = ' ') do + begin + Inc(Result); + Inc(f); + end; + end; + +begin + if Sender = btnOK then + ModalResult := 1 + else if Sender = btnCancel then + ModalResult := 2 + else + begin + // up / down + i := list.FocusItem; + if i < 0 then + Exit; + + myilev := IdentLevel(list.Items[i]); + + if Sender = btnUP then + begin + if (i > 0) and (IdentLevel(list.Items[i - 1]) = myilev) then + begin + list.Items.Move(i, i - 1); + + n := i; + while (n < list.Items.Count) and (IdentLevel(list.Items[n]) > myilev) do + begin + list.Items.Move(n, n - 1); + Inc(n); + end; + + list.FocusItem := i - 1; + end; + end + else if Sender = btnDOWN then + if (i < list.Items.Count-1) then + begin + n := i; + while (n < list.Items.Count) and (IdentLevel(list.Items[n]) > myilev) do + Inc(n); + + if (i = n) and (i < list.Items.Count-1) and (IdentLevel(list.Items[i]) > myilev) then + Exit; + + if (n > list.Items.Count-1) then + Exit; //==> + + while (n >= i) do + begin + list.Items.Move(n, n + 1); + Dec(n); + end; + + list.FocusItem := i + 1; + end; + end; +end; + +{ TVFDDialogBase } + +procedure TVFDDialog.HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); +begin + if keycode = keyEscape then + begin + ModalResult := 2; + consumed := True; + end; + inherited HandleKeyPress(keycode, shiftstate, consumed); +end; + +procedure TfrmVFDSetup.LoadSettings; +begin + chlGrid.FocusItem := gINI.ReadInteger('Options', 'GridResolution', 2); + tbMRUFileCount.Position := gINI.ReadInteger('Options', 'MRUFileCount', 4); + cbFullPath.Checked := gINI.ReadBool('Options', 'ShowFullPath', True); + eDefaultExt.Text := gINI.ReadString('Options', 'DefaultFileExt', '.pas'); + cbUndoOnExit.Checked := gINI.ReadBool('Options', 'UndoOnExit', UndoOnPropExit); +end; + +procedure TfrmVFDSetup.SaveSettings; +begin + gINI.WriteInteger('Options', 'GridResolution', chlGrid.FocusItem); + gINI.WriteInteger('Options', 'MRUFileCount', tbMRUFileCount.Position); + gINI.WriteBool('Options', 'ShowFullPath', cbFullPath.Checked); + gINI.WriteString('Options', 'DefaultFileExt', eDefaultExt.Text); + gINI.WriteBool('Options', 'UndoOnExit', cbUndoOnExit.Checked); +end; + +procedure TfrmVFDSetup.btnOKClick(Sender: TObject); +begin + SaveSettings; + ModalResult := 1; +end; + +procedure TfrmVFDSetup.AfterCreate; +begin + {@VFD_BODY_BEGIN: frmVFDSetup} + Name := 'frmVFDSetup'; + SetPosition(394, 399, 253, 225); + WindowTitle := 'General settings'; + WindowPosition := wpScreenCenter; + gINI.ReadFormState(self); + + lb1 := TfpgLabel.Create(self); + with lb1 do + begin + Name := 'lb1'; + SetPosition(28, 28, 116, 16); + FontDesc := '#Label1'; + Text := 'Grid resolution:'; + end; + + chlGrid := TfpgComboBox.Create(self); + with chlGrid do + begin + Name := 'chlGrid'; + SetPosition(140, 24, 88, 22); + FontDesc := '#List'; + Items.Add('1'); + Items.Add('4'); + Items.Add('8'); + TabOrder := 1; + FocusItem := 0; + end; + + btnOK := TfpgButton.Create(self); + with btnOK do + begin + Name := 'btnOK'; + SetPosition(93, 195, 75, 24); + Anchors := [anRight,anBottom]; + Text := 'OK'; + FontDesc := '#Label1'; + ImageName := 'stdimg.ok'; + TabOrder := 6; + OnClick := @btnOKClick; + end; + + btnCancel := TfpgButton.Create(self); + with btnCancel do + begin + Name := 'btnCancel'; + SetPosition(172, 195, 75, 24); + Anchors := [anRight,anBottom]; + Text := 'Cancel'; + FontDesc := '#Label1'; + ImageName := 'stdimg.cancel'; + ModalResult := -1; + TabOrder := 7; + end; + + lblRecentFiles := TfpgLabel.Create(self); + with lblRecentFiles do + begin + Name := 'lblRecentFiles'; + SetPosition(28, 92, 124, 16); + FontDesc := '#Label1'; + Text := 'Recent files count:'; + end; + + tbMRUFileCount := TfpgTrackBar.Create(self); + with tbMRUFileCount do + begin + Name := 'tbMRUFileCount'; + SetPosition(156, 84, 76, 30); + Max := 10; + Min := 2; + Position := 4; + ShowPosition := True; + TabOrder := 3; + end; + + cbFullPath := TfpgCheckBox.Create(self); + with cbFullPath do + begin + Name := 'cbFullPath'; + SetPosition(24, 112, 204, 20); + FontDesc := '#Label1'; + TabOrder := 4; + Text := 'Show the full file path'; + end; + + lblName1 := TfpgLabel.Create(self); + with lblName1 do + begin + Name := 'lblName1'; + SetPosition(8, 8, 176, 16); + FontDesc := '#Label2'; + Text := 'Form designer'; + end; + + lblName2 := TfpgLabel.Create(self); + with lblName2 do + begin + Name := 'lblName2'; + SetPosition(8, 72, 232, 16); + FontDesc := '#Label2'; + Text := 'Open Recent menu settings'; + end; + + eDefaultExt := TfpgEdit.Create(self); + with eDefaultExt do + begin + Name := 'eDefaultExt'; + SetPosition(28, 160, 68, 22); + TabOrder := 5; + Text := ''; + FontDesc := '#Edit1'; + end; + + lblName3 := TfpgLabel.Create(self); + with lblName3 do + begin + Name := 'lblName3'; + SetPosition(12, 140, 152, 16); + FontDesc := '#Label2'; + Text := 'Default file extension'; + end; + + cbUndoOnExit := TfpgCheckBox.Create(self); + with cbUndoOnExit do + begin + Name := 'cbUndoOnExit'; + SetPosition(24, 48, 204, 18); + FontDesc := '#Label1'; + TabOrder := 2; + Text := 'Undo on property editor exit'; + end; + + {@VFD_BODY_END: frmVFDSetup} + + LoadSettings; +end; + +procedure TfrmVFDSetup.BeforeDestruction; +begin + gINI.WriteFormState(self); + inherited BeforeDestruction; +end; + + +end. + |