summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-05-19 15:13:26 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-05-19 15:13:26 +0000
commit3d203b58185f8d703d638fe762167291f3dc055c (patch)
tree9682d9e92dfa95a420e4b8db346516fae7fb6c5e
parent47aa5a7615cb3d7adf5e9af693288d9cbd89adb9 (diff)
downloadfpGUI-3d203b58185f8d703d638fe762167291f3dc055c.tar.xz
* Merged my private graemeg branch changes (r752:r781) into trunk. These changes are required to change all componens from 1-based indexing to 0-based indexing.
-rw-r--r--examples/apps/uidesigner/newformdesigner.pas50
-rw-r--r--examples/apps/uidesigner/uidesigner.lpr2
-rw-r--r--examples/apps/uidesigner/vfddesigner.pas43
-rw-r--r--examples/apps/uidesigner/vfdeditors.pas28
-rw-r--r--examples/apps/uidesigner/vfdfile.pas41
-rw-r--r--examples/apps/uidesigner/vfdformparser.pas40
-rw-r--r--examples/apps/uidesigner/vfdforms.pas49
-rw-r--r--examples/apps/uidesigner/vfdmain.pas52
-rw-r--r--examples/apps/uidesigner/vfdpropeditgrid.pas46
-rw-r--r--examples/apps/uidesigner/vfdprops.pas63
-rw-r--r--examples/apps/uidesigner/vfdresizer.pas17
-rw-r--r--examples/apps/uidesigner/vfdutils.pas4
-rw-r--r--examples/apps/uidesigner/vfdwidgetclass.pas4
-rw-r--r--examples/apps/uidesigner/vfdwidgets.pas6
-rw-r--r--examples/gui/colorlistbox/frmMain.pas2
-rw-r--r--examples/gui/combobox/comboboxtest.lpi58
-rw-r--r--examples/gui/combobox/comboboxtest.lpr29
-rw-r--r--examples/gui/combobox/extrafpc.cfg5
-rw-r--r--examples/gui/combobox/frm_main.pas251
-rw-r--r--examples/gui/filedialog/filedialog.lpr8
-rw-r--r--examples/gui/gridtest/gridtest.lpr100
-rw-r--r--examples/gui/listbox/frm_main.pas160
-rw-r--r--examples/gui/listbox/listboxtest.lpi58
-rw-r--r--examples/gui/listbox/listboxtest.lpr29
-rw-r--r--examples/gui/memo/memotest.lpr6
-rw-r--r--examples/gui/menutest/menutest.lpr3
-rw-r--r--src/corelib/gdi/gfx_gdi.pas8
-rw-r--r--src/corelib/gdi/gfx_impl.pas1
-rw-r--r--src/corelib/gfx_utf8utils.pas5
-rw-r--r--src/corelib/gfxbase.pas10
-rw-r--r--src/corelib/x11/gfx_impl.pas2
-rw-r--r--src/corelib/x11/gfx_x11.pas9
-rw-r--r--src/gui/db/fpgui_db.pas2
-rw-r--r--src/gui/gui_basegrid.pas297
-rw-r--r--src/gui/gui_bevel.pas2
-rw-r--r--src/gui/gui_button.pas2
-rw-r--r--src/gui/gui_checkbox.pas2
-rw-r--r--src/gui/gui_combobox.pas92
-rw-r--r--src/gui/gui_customgrid.pas94
-rw-r--r--src/gui/gui_dialogs.pas86
-rw-r--r--src/gui/gui_edit.pas12
-rw-r--r--src/gui/gui_editcombo.pas103
-rw-r--r--src/gui/gui_form.pas2
-rw-r--r--src/gui/gui_gauge.pas2
-rw-r--r--src/gui/gui_grid.pas164
-rw-r--r--src/gui/gui_hyperlink.pas2
-rw-r--r--src/gui/gui_iniutils.pas2
-rw-r--r--src/gui/gui_label.pas2
-rw-r--r--src/gui/gui_listbox.pas188
-rw-r--r--src/gui/gui_listview.pas2
-rw-r--r--src/gui/gui_memo.pas146
-rw-r--r--src/gui/gui_menu.pas238
-rw-r--r--src/gui/gui_mru.pas2
-rw-r--r--src/gui/gui_panel.pas5
-rw-r--r--src/gui/gui_popupcalendar.pas53
-rw-r--r--src/gui/gui_progressbar.pas4
-rw-r--r--src/gui/gui_radiobutton.pas2
-rw-r--r--src/gui/gui_scrollbar.pas2
-rw-r--r--src/gui/gui_style.pas2
-rw-r--r--src/gui/gui_tab.pas2
-rw-r--r--src/gui/gui_trackbar.pas2
-rw-r--r--src/gui/gui_tree.pas2
-rw-r--r--src/gui/promptuserdialog.inc2
63 files changed, 1687 insertions, 1020 deletions
diff --git a/examples/apps/uidesigner/newformdesigner.pas b/examples/apps/uidesigner/newformdesigner.pas
index 175e4fa6..8a96997c 100644
--- a/examples/apps/uidesigner/newformdesigner.pas
+++ b/examples/apps/uidesigner/newformdesigner.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
@@ -75,7 +75,6 @@ type
previewmenu: TfpgPopupMenu;
{@VFD_HEAD_END: frmMain}
mru: TfpgMRU;
-
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetSelectedWidget: TVFDWidgetClass;
@@ -89,11 +88,11 @@ type
TPropertyList = class(TObject)
private
FList: TList;
+ function GetCount: integer;
public
Widget: TfpgWidget;
constructor Create;
destructor Destroy; override;
- function GetCount: integer;
procedure Clear;
property Count: integer read GetCount;
procedure AddItem(aProp: TVFDWidgetProperty);
@@ -346,7 +345,7 @@ begin
SetPosition(116, 60, 200, 22);
Items.Add('-');
FontDesc := '#List';
- FocusItem := 1;
+ FocusItem := 0;
end;
filemenu := TfpgPopupMenu.Create(self);
@@ -415,7 +414,7 @@ begin
x := 0;
- for n := 1 to VFDWidgetCount do
+ for n := 0 to VFDWidgetCount-1 do
begin
wgc := VFDWidget(n);
btn := TwgPaletteButton.Create(wgpalette);
@@ -457,12 +456,10 @@ begin
if TwgPaletteButton(Sender).Down then
begin
s := TwgPaletteButton(Sender).VFDWidget.WidgetClass.ClassName;
- i := chlPalette.Items.IndexOf(s);
- if i >= 0 then
- chlPalette.FocusItem := i + 1;
- end
- else
- chlPalette.FocusItem := 1;
+ chlPalette.FocusItem := chlPalette.Items.IndexOf(s);
+ end;
+ if chlPalette.FocusItem = -1 then
+ chlPalette.FocusItem := 0;
end;
{ TfrmProperties }
@@ -665,20 +662,11 @@ end;
procedure TPropertyList.AddItem(aProp: TVFDWidgetProperty);
begin
- {
- result := TPropertyLine.Create;
- result.name := aPropName;
- result.propclass := apropclass;
- result.value := aPropName;
-}
FList.Add(aProp);
end;
procedure TPropertyList.Clear;
- //var
- // n : integer;
begin
- //for n:=0 to FList.Count-1 do TObject(FList[n]).Free;
FList.Clear;
end;
@@ -702,17 +690,17 @@ end;
function TPropertyList.GetItem(index: integer): TVFDWidgetProperty;
begin
- if (index < 1) or (index > Count) then
+ if (index < 0) or (index > Count-1) then
Result := nil
else
- Result := TVFDWidgetProperty(FList[index - 1]);
+ Result := TVFDWidgetProperty(FList[index]);
end;
{ TwgPropertyList }
constructor TwgPropertyList.Create(AOwner: TComponent);
begin
- inherited;
+ inherited Create(AOwner);
NameWidth := 80;
editor := nil;
OnChange := @OnRowChange;
@@ -741,10 +729,9 @@ var
prop: TVFDWidgetProperty;
r: TfpgRect;
begin
- //inherited;
prop := Props.GetItem(num);
if prop = nil then
- Exit;
+ Exit; //==>
x := rect.left;
y := rect.top;
@@ -782,9 +769,7 @@ end;
procedure TwgPropertyList.OnUpdateProperty(Sender: TObject);
begin
-// writeln('updating property...');
editor.StoreValue(props.Widget);
-// props.Widget.UpdateWindowPosition;
end;
procedure TwgPropertyList.HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState);
@@ -887,8 +872,8 @@ end;
function TfrmMain.GetSelectedWidget: TVFDWidgetClass;
begin
- if chlPalette.FocusItem > 1 then
- Result := TVFDWidgetClass(chlPalette.Items.Objects[chlPalette.FocusItem - 1])
+ if chlPalette.FocusItem > 0 then
+ Result := TVFDWidgetClass(chlPalette.Items.Objects[chlPalette.FocusItem])
else
Result := nil;
end;
@@ -899,7 +884,7 @@ var
begin
if wgc = nil then
begin
- chlPalette.FocusItem := 1;
+ chlPalette.FocusItem := 0;
for n := 0 to wgpalette.ComponentCount - 1 do
if wgpalette.Components[n] is TwgPaletteButton then
TwgPaletteButton(wgpalette.Components[n]).Down := False;
@@ -943,10 +928,7 @@ end;
procedure TwgPalette.HandlePaint;
begin
-// inherited HandlePaint;
- Canvas.BeginDraw;
Canvas.Clear(clWindowBackground);
- Canvas.EndDraw;
end;
diff --git a/examples/apps/uidesigner/uidesigner.lpr b/examples/apps/uidesigner/uidesigner.lpr
index 4b4c371f..96aef118 100644
--- a/examples/apps/uidesigner/uidesigner.lpr
+++ b/examples/apps/uidesigner/uidesigner.lpr
@@ -12,7 +12,7 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Description:
- The starting unit for the uiDesigner project.
+ The starting unit for the UI Designer project.
}
program uidesigner;
diff --git a/examples/apps/uidesigner/vfddesigner.pas b/examples/apps/uidesigner/vfddesigner.pas
index 6eb79b9b..17e1bedc 100644
--- a/examples/apps/uidesigner/vfddesigner.pas
+++ b/examples/apps/uidesigner/vfddesigner.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
@@ -49,7 +49,7 @@ type
TOtherWidget = class(TfpgWidget)
protected
FFont: TfpgFont;
- procedure HandlePaint; override;
+ procedure HandlePaint; override;
public
wgClassName: string;
constructor Create(AOwner: TComponent); override;
@@ -61,7 +61,7 @@ type
TDesignedForm = class(TfpgForm)
public
- procedure AfterCreate; override;
+ procedure AfterCreate; override;
end;
@@ -145,9 +145,6 @@ implementation
uses
vfdmain, TypInfo;
-type
- // used to get to SetDesigning() in Form Designer
- TComponentFriendClass = class(TComponent);
{ TWidgetDesigner }
@@ -439,13 +436,13 @@ begin
FWidgets := TList.Create;
FWasDrag := False;
- OneClickMove := True; //false;
+ OneClickMove := True;
- FForm := TDesignedForm.Create(nil);
- FForm.FormDesigner := self;
- FForm.Name := maindsgn.NewFormName;
- FForm.WindowTitle := FForm.Name;
- FFormOther := '';
+ FForm := TDesignedForm.Create(nil);
+ FForm.FormDesigner := self;
+ FForm.Name := maindsgn.NewFormName;
+ FForm.WindowTitle := FForm.Name;
+ FFormOther := '';
end;
destructor TFormDesigner.Destroy;
@@ -543,7 +540,7 @@ var
n, dir: integer;
cd, scd: TWidgetDesigner;
begin
- if FWidgets.Count < 1 then
+ if FWidgets.Count = 0 then
Exit;
if fw then
@@ -894,7 +891,7 @@ end;
procedure TFormDesigner.OnPaletteChange(Sender: TObject);
begin
- if PaletteForm.clist.FocusItem > 1 then
+ if PaletteForm.clist.FocusItem > 0 then
FForm.MouseCursor := mcCross
else
FForm.MouseCursor := mcDefault;
@@ -936,18 +933,18 @@ begin
wgc := scd.FVFDClass;
n := frmProperties.lstProps.FocusItem;
- if (n > 0) and (PropList.GetItem(n) <> nil) then
+ if (n >= 0) and (PropList.GetItem(n) <> nil) then
lastpropname := PropList.GetItem(n).Name
else
lastpropname := '';
- i := 0;
+ i := -1;
if PropList.Widget <> wg then
begin
frmProperties.lstProps.ReleaseEditor;
PropList.Clear;
- for n := 1 to wgc.PropertyCount do
+ for n := 0 to wgc.PropertyCount-1 do
begin
PropList.AddItem(wgc.GetProperty(n));
if UpperCase(wgc.GetProperty(n).Name) = UpperCase(lastPropName) then
@@ -955,7 +952,7 @@ begin
end;
PropList.Widget := wg;
frmProperties.lstProps.Update;
- if i > 0 then
+ if i > -1 then
frmProperties.lstProps.FocusItem := i;
end;
@@ -1475,7 +1472,7 @@ begin
s := s + ident + 'Anchors := ' + ts + LineEnding;
end;
- for n := 1 to wgc.PropertyCount do
+ for n := 0 to wgc.PropertyCount-1 do
s := s + wgc.GetProperty(n).GetPropertySource(wg, ident);
{
@@ -1642,7 +1639,6 @@ begin
WindowPosition := wpUser;
WindowTitle := 'New Form';
SetPosition(300, 150, 300, 250);
-// TComponentFriendClass(self).SetDesigning(True);
end;
@@ -1652,9 +1648,6 @@ procedure TOtherWidget.HandlePaint;
var
s: string;
begin
- Canvas.BeginDraw;
- inherited HandlePaint;
-
Canvas.Clear(FBackgroundColor);
Canvas.SetFont(FFont);
Canvas.SetColor(clWidgetFrame);
@@ -1662,8 +1655,6 @@ begin
Canvas.SetTextColor(clText1);
s := Name + ': ' + wgClassName;
Canvas.DrawString(2, 2, s);
-
- Canvas.EndDraw;
end;
constructor TOtherWidget.Create(AOwner: TComponent);
diff --git a/examples/apps/uidesigner/vfdeditors.pas b/examples/apps/uidesigner/vfdeditors.pas
index 50a47b37..c5ba41e1 100644
--- a/examples/apps/uidesigner/vfdeditors.pas
+++ b/examples/apps/uidesigner/vfdeditors.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
@@ -31,14 +31,18 @@ uses
vfdforms;
type
+
TItemEditorForm = class(TVFDDialog)
+ private
+ procedure btnClearClicked(Sender: TObject);
+ procedure OnButtonClick(Sender: TObject);
public
l1: TfpgLabel;
edItems: TfpgMemo;
- btnOK,
+ btnOK: TfpgButton;
btnCancel: TfpgButton;
+ btnClear: TfpgButton;
procedure AfterCreate; override;
- procedure OnButtonClick(Sender: TObject);
end;
@@ -61,13 +65,23 @@ begin
with edItems do
begin
SetPosition(8, 24, 344, 168);
- Anchors := [anLeft, anTop, anRight, anBottom];
+ Anchors := AllAnchors;
end;
- btnOK := CreateButton(self, 8, 200, 105, 'OK', @OnButtonClick);
+ btnClear := CreateButton(self, 8, 200, 80, 'Clear', @btnClearClicked);
+ btnClear.Anchors := [anLeft, anBottom];
+
+ btnOK := CreateButton(self, btnClear.Right + 4, 200, 80, 'OK', @OnButtonClick);
btnOK.Anchors := [anLeft, anBottom];
- btnCancel := CreateButton(self, 244, 200, 105, 'Cancel', @OnButtonClick);
+
+ btnCancel := CreateButton(self, Width-84, 200, 80, 'Cancel', @OnButtonClick);
btnCancel.Anchors := [anRight, anBottom];
+
+end;
+
+procedure TItemEditorForm.btnClearClicked(Sender: TObject);
+begin
+ edItems.Lines.Clear;
end;
procedure TItemEditorForm.OnButtonClick(Sender: TObject);
diff --git a/examples/apps/uidesigner/vfdfile.pas b/examples/apps/uidesigner/vfdfile.pas
index 15e23d75..16910883 100644
--- a/examples/apps/uidesigner/vfdfile.pas
+++ b/examples/apps/uidesigner/vfdfile.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -46,20 +46,21 @@ type
NewFormsDecl: string;
NewFormsImpl: string;
constructor Create;
- destructor Destroy; override;
- function LoadFile(fname: string): boolean;
- procedure AddBlock(aposition: integer; ablockid, aformname, ablockdata: string);
- function BlockCount: integer;
- function Block(index: integer): TVFDFileBlock;
- procedure FreeBlocks;
- function GetBlocks: integer; // parse file
- function MergeBlocks: string; // store file
- procedure AddNewFormDecl(formname, formheadblock: string);
- procedure AddNewFormImpl(formname, formbody: string);
- function FindFormBlock(blockid, formname: string): TVFDFileBlock;
- procedure SetFormData(formname, headblock, bodyblock: string);
- procedure NewFileSkeleton(unitname: string);
+ destructor Destroy; override;
+ function LoadFile(fname: string): boolean;
+ procedure AddBlock(aposition: integer; ablockid, aformname, ablockdata: string);
+ function BlockCount: integer;
+ function Block(index: integer): TVFDFileBlock;
+ procedure FreeBlocks;
+ function GetBlocks: integer; // parse file
+ function MergeBlocks: string; // store file
+ procedure AddNewFormDecl(formname, formheadblock: string);
+ procedure AddNewFormImpl(formname, formbody: string);
+ function FindFormBlock(blockid, formname: string): TVFDFileBlock;
+ procedure SetFormData(formname, headblock, bodyblock: string);
+ procedure NewFileSkeleton(unitname: string);
end;
+
implementation
@@ -109,9 +110,9 @@ end;
function TVFDFile.Block(index: integer): TVFDFileBlock;
begin
Result := nil;
- if (index < 1) or (index > FBlocks.Count) then
+ if (index < 0) or (index > FBlocks.Count-1) then
Exit;
- Result := TVFDFileBlock(FBlocks[index - 1]);
+ Result := TVFDFileBlock(FBlocks[index]);
end;
function TVFDFile.BlockCount: integer;
@@ -141,7 +142,7 @@ var
fb: TVFDFileBlock;
begin
Result := nil;
- for n := 1 to BlockCount do
+ for n := 0 to BlockCount-1 do
begin
fb := Block(n);
if (fb.BlockID = blockid) and (UpperCase(fb.FormName) = UpperCase(formname)) then
@@ -156,7 +157,7 @@ procedure TVFDFile.FreeBlocks;
var
n: integer;
begin
- for n := 0 to FBlocks.Count - 1 do
+ for n := 0 to FBlocks.Count-1 do
TVFDFileBlock(FBlocks[n]).Free;
FBlocks.Clear;
NewFormsDecl := '';
@@ -338,10 +339,8 @@ begin
end;
if not newsaved and (NewFormsImpl <> '') then
- rs := rs + NewFormsImpl// do not loose new form data.
- ;
+ rs := rs + NewFormsImpl; // do not loose new form data.
- //writeln(rs);
Result := rs;
end;
diff --git a/examples/apps/uidesigner/vfdformparser.pas b/examples/apps/uidesigner/vfdformparser.pas
index 1acaed31..a3d7c966 100644
--- a/examples/apps/uidesigner/vfdformparser.pas
+++ b/examples/apps/uidesigner/vfdformparser.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
@@ -41,7 +41,7 @@ type
line: string;
lineindex: integer;
public
- procedure nextline;
+ procedure NextLine;
public
constructor Create(const FormName, FormHead, FormBody: string);
destructor Destroy; override;
@@ -52,15 +52,17 @@ type
end;
-function GetIdentifier(var s: string): string;
-function GetStringValue(var s: string): string;
+function GetIdentifier(var s: string): string;
+function GetStringValue(var s: string): string;
procedure SkipSpaces(var s: string);
-function CheckSymbol(var s: string; const sym: string): boolean;
-function GetIntValue(var s: string): integer;
-function GetBoolValue(var s: string): boolean;
+function CheckSymbol(var s: string; const sym: string): boolean;
+function GetIntValue(var s: string): integer;
+function GetBoolValue(var s: string): boolean;
+
implementation
+
{ TVFDFormParser }
constructor TVFDFormParser.Create(const FormName, FormHead, FormBody: string);
@@ -69,7 +71,7 @@ begin
ffd := nil;
BodyLines := TStringList.Create;
BodyLines.Text := FormBody;
- lineindex := 0;
+ lineindex := -1;
end;
destructor TVFDFormParser.Destroy;
@@ -78,13 +80,13 @@ begin
inherited;
end;
-procedure TVFDFormParser.nextline;
+procedure TVFDFormParser.NextLine;
begin
repeat
Inc(lineindex);
- eob := (lineindex > BodyLines.Count);
+ eob := (lineindex > BodyLines.Count-1);
if not eob then
- line := trim(bodylines.Strings[lineindex - 1])
+ line := trim(bodylines.Strings[lineindex])
else
line := '';
until eob or (line <> '');
@@ -94,16 +96,12 @@ function TVFDFormParser.ParseForm: TFormDesigner;
begin
ffd := TFormDesigner.Create;
ffd.Form.Name := fformname;
-
// parsing line by line
// the unknown lines will be "other properties"
- lineindex := 0;
- nextline;
-
+ lineindex := -1;
+ NextLine;
ParseFormProperties;
-
ParseFormWidgets;
-
Result := ffd;
end;
@@ -250,10 +248,8 @@ begin
while not eob and (pos('.CREATE(', UpperCase(line)) = 0) do
begin
lok := ReadWGProperty(line, ffd.Form, VFDFormWidget);
-
if not lok then
ffd.FormOther := ffd.FormOther + line + LineEnding;
-
NextLine;
end;
end;
@@ -307,7 +303,7 @@ begin
wg := nil;
wgc := nil;
- for n := 1 to VFDWidgetCount do
+ for n := 0 to VFDWidgetCount-1 do
begin
wgc := VFDWidget(n);
if wgclassuc = UpperCase(wgc.WidgetClass.ClassName) then
@@ -532,7 +528,7 @@ begin
if not lok then
if wgc <> nil then
- for n := 1 to wgc.PropertyCount do
+ for n := 0 to wgc.PropertyCount-1 do
begin
lok := wgc.GetProperty(n).ParseSourceLine(wg, line);
if lok then
diff --git a/examples/apps/uidesigner/vfdforms.pas b/examples/apps/uidesigner/vfdforms.pas
index 508b64bf..8c19104a 100644
--- a/examples/apps/uidesigner/vfdforms.pas
+++ b/examples/apps/uidesigner/vfdforms.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -161,18 +161,7 @@ begin
clist.Top := 22;
clist.Height := Height - clist.top - 2;
clist.Anchors := [anLeft, anRight, anTop, anBottom];
-
clist.Items.Add('-');
-{
- clist.Items.Add('Label');
- clist.Items.Add('Edit');
- clist.Items.Add('Button');
- clist.Items.Add('CheckBox');
- clist.Items.Add('ComboBox');
- clist.Items.Add('Memo');
- clist.Items.Add('ListBox');
- clist.Items.Add('[OTHER]');
-}
clist.OnChange := @(maindsgn.OnPaletteChange);
end;
@@ -360,8 +349,8 @@ end;
procedure TWidgetOrderForm.OnButtonClick(Sender: TObject);
var
- i,
- n,
+ i: integer;
+ n: integer;
myilev: integer;
function IdentLevel(astr: string): integer;
@@ -388,16 +377,16 @@ begin
begin
// up / down
i := list.FocusItem;
- if i < 1 then
+ if i < 0 then
Exit;
- myilev := IdentLevel(list.Items[i - 1]);
+ myilev := IdentLevel(list.Items[i]);
if Sender = btnUP then
begin
- if (i > 1) and (IdentLevel(list.Items[i - 2]) = myilev) then
+ if (i > 0) and (IdentLevel(list.Items[i - 1]) = myilev) then
begin
- list.Items.Move(i - 1, i - 2);
+ list.Items.Move(i, i - 1);
n := i;
while (n < list.Items.Count) and (IdentLevel(list.Items[n]) > myilev) do
@@ -410,24 +399,21 @@ begin
end;
end
else if Sender = btnDOWN then
- if (i < list.Items.Count) then
+ if (i < list.Items.Count-1) then
begin
- //list.Items.Move(i-1,i);
-
n := i;
while (n < list.Items.Count) and (IdentLevel(list.Items[n]) > myilev) do
- Inc(n)//list.Items.Move(n,n-1);
- ;
+ Inc(n);
- if (i = n) and (i < list.Items.Count - 1) and (IdentLevel(list.Items[i + 1]) > myilev) then
+ 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;
+ if (n > list.Items.Count-1) then
+ Exit; //==>
while (n >= i) do
begin
- list.Items.Move(n, n - 1);
+ list.Items.Move(n, n + 1);
Dec(n);
end;
@@ -444,16 +430,15 @@ begin
begin
ModalResult := 2;
consumed := True;
- end
- else
- inherited HandleKeyPress(keycode, shiftstate, consumed);
+ end;
+ inherited HandleKeyPress(keycode, shiftstate, consumed);
end;
procedure TfrmVFDSetup.LoadSettings;
begin
- chlGrid.FocusItem := gINI.ReadInteger('Options', 'GridResolution', 2);
+ chlGrid.FocusItem := gINI.ReadInteger('Options', 'GridResolution', 2);
tbMRUFileCount.Position := gINI.ReadInteger('Options', 'MRUFileCount', 4);
- cbFullPath.Checked := gINI.ReadBool('Options', 'ShowFullPath', True);
+ cbFullPath.Checked := gINI.ReadBool('Options', 'ShowFullPath', True);
end;
procedure TfrmVFDSetup.SaveSettings;
diff --git a/examples/apps/uidesigner/vfdmain.pas b/examples/apps/uidesigner/vfdmain.pas
index 53145c6d..d0e81778 100644
--- a/examples/apps/uidesigner/vfdmain.pas
+++ b/examples/apps/uidesigner/vfdmain.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -38,8 +38,8 @@ type
TMainDesigner = class(TObject)
private
- procedure SetEditedFileName(const Value: string);
- procedure LoadGridResolution;
+ procedure SetEditedFileName(const Value: string);
+ procedure LoadGridResolution;
protected
FDesigners: TList;
FFile: TVFDFile;
@@ -137,23 +137,21 @@ begin
TFormDesigner(FDesigners[n]).Free;
end;
FDesigners.Clear;
-
+
if not fpgFileExists(fname) then
begin
ShowMessage('File does not exists.', 'Error loading form');
Exit;
end;
- Writeln('loading file...');
-
FFile.LoadFile(fname);
FFile.GetBlocks;
- for n := 1 to FFile.BlockCount do
+ for n := 0 to FFile.BlockCount-1 do
begin
bl := FFile.Block(n);
if bl.BlockID = 'VFD_HEAD_BEGIN' then
- for m := n + 1 to FFile.BlockCount do
+ for m := n + 1 to FFile.BlockCount-1 do
begin
bl2 := FFile.Block(m);
if (bl2.BlockID = 'VFD_BODY_BEGIN') and (bl2.FormName = bl.FormName) then
@@ -213,7 +211,7 @@ begin
FFile.NewFileSkeleton(uname);
end;
- for n := 1 to DesignerCount do
+ for n := 0 to DesignerCount-1 do
begin
fd := Designer(n);
FFile.SetFormData(fd.Form.Name, fd.GetFormSourceDecl, fd.GetFormSourceImpl);
@@ -229,11 +227,11 @@ begin
finally
CloseFile(ff);
end;
- // frmMain.WindowTitle := 'fpGUI Designer v' + program_version + ' - ' + fname;
- // everything is done by SetEditedFileName (EditedFileName := ...)
frmMain.mru.AddItem(fname);
except
- Writeln('Form save I/O failure.');
+ on E: Exception do
+ raise Exception.Create('Form save I/O failure in TMainDesigner.OnSaveFile.' + #13 +
+ E.Message);
end;
end;
@@ -277,7 +275,6 @@ var
fd: TFormDesigner;
nfrm: TNewFormForm;
begin
- Writeln('new form');
nfrm := TNewFormForm.Create(nil);
if nfrm.ShowModal = 1 then
if nfrm.edName.Text <> '' then
@@ -292,8 +289,6 @@ begin
end;
procedure TMainDesigner.CreateWindows;
- //var
- // fd : TFormDesigner;
begin
frmMain := TfrmMain.Create(nil);
frmMain.WindowTitle := 'fpGUI Designer v' + program_version;
@@ -301,12 +296,6 @@ begin
frmProperties := TfrmProperties.Create(nil);
frmProperties.Show;
-
- // fd := TFormDesigner.Create;
- // fd.Form.Name := 'frmNewForm';
- // fd.Form.WindowTitle := u8('frmNewForm');
- // FDesigners.Add(fd);
- // fd.Show;
end;
constructor TMainDesigner.Create;
@@ -338,7 +327,6 @@ end;
procedure TMainDesigner.SelectForm(aform: TFormDesigner);
begin
- //Writeln('selected...');
if (SelectedForm <> nil) and (SelectedForm <> aform) then
SelectedForm.DeSelectAll;
SelectedForm := aform;
@@ -347,9 +335,9 @@ end;
function TMainDesigner.Designer(index: integer): TFormDesigner;
begin
Result := nil;
- if (index < 1) or (index > FDesigners.Count) then
+ if (index < 0) or (index > FDesigners.Count-1) then
Exit;
- Result := TFormDesigner(FDesigners[index - 1]);
+ Result := TFormDesigner(FDesigners[index]);
end;
function TMainDesigner.DesignerCount: integer;
@@ -366,14 +354,14 @@ begin
repeat
Inc(i);
s := 'Form' + IntToStr(i);
- n := 1;
- while (n <= DesignerCount) do
+ n := 0;
+ while (n < DesignerCount) do
begin
if Designer(n).Form.Name = s then
Break;
Inc(n);
end;
- until n > DesignerCount;
+ until n > DesignerCount-1;
Result := s;
end;
@@ -382,8 +370,6 @@ var
fd: TFormDesigner;
fp: TVFDFormParser;
begin
- Writeln('CreateParseForm: ', FormName);
-
fp := TVFDFormParser.Create(FormName, FormHead, FormBody);
fd := fp.ParseForm;
fp.Free;
@@ -446,10 +432,10 @@ end;
procedure TMainDesigner.LoadGridResolution;
begin
- case gINI.ReadInteger('Options', 'GridResolution', 2) of
- 1: GridResolution := 2;
- 2: GridResolution := 4;
- 3: GridResolution := 8;
+ case gINI.ReadInteger('Options', 'GridResolution', 1) of
+ 0: GridResolution := 2;
+ 1: GridResolution := 4;
+ 2: GridResolution := 8;
end;
end;
diff --git a/examples/apps/uidesigner/vfdpropeditgrid.pas b/examples/apps/uidesigner/vfdpropeditgrid.pas
index 97ebb0e6..d31f7f5b 100644
--- a/examples/apps/uidesigner/vfdpropeditgrid.pas
+++ b/examples/apps/uidesigner/vfdpropeditgrid.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
@@ -56,8 +56,8 @@ type
TColumnsGrid = class(TfpgCustomGrid)
protected
- function GetRowCount: Longword; override;
- procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
+ function GetRowCount: Integer; override;
+ procedure DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
public
dbgrid: TfpgStringGrid;
constructor Create(AOwner: TComponent); override;
@@ -66,7 +66,7 @@ type
TColumnEditForm = class(TfpgForm)
private
- procedure GridRowChange(Sender: TObject; row: Longword);
+ procedure GridRowChange(Sender: TObject; row: Integer);
procedure EditChange(Sender: TObject);
procedure NewButtonClick(Sender: TObject);
procedure DeleteButtonClick(Sender: TObject);
@@ -284,12 +284,12 @@ begin
{@VFD_BODY_END: ColumnEditForm}
end;
-procedure TColumnEditForm.GridRowChange(Sender: TObject; row: Longword);
+procedure TColumnEditForm.GridRowChange(Sender: TObject; row: Integer);
var
i: integer;
c: TfpgStringColumn;
begin
- c := dbgrid.Columns[row{ - 1}];
+ c := dbgrid.Columns[row];
if c = nil then
Exit;
@@ -298,11 +298,11 @@ begin
edCOLWIDTH.Text := IntToStr(c.Width);
case c.Alignment of
taRightJustify:
- i := 2;
+ i := 1;
taCenter:
- i := 3
+ i := 2
else
- i := 1;
+ i := 0;
end;
chlALIGN.FocusItem := i;
end;
@@ -311,15 +311,15 @@ procedure TColumnEditForm.SaveColumn(row: integer);
var
c: TfpgStringColumn;
begin
- c := dbgrid.Columns[row{ - 1}];
+ c := dbgrid.Columns[row];
if c = nil then
Exit;
c.Title := edTITLE.Text;
c.Width := StrToIntDef(edCOLWIDTH.Text, 30);
case chlALIGN.FocusItem of
- 2: c.Alignment := taRightJustify;
- 3: c.Alignment := taCenter;
+ 1: c.Alignment := taRightJustify;
+ 2: c.Alignment := taCenter;
else
c.Alignment := taLeftJustify;
end;
@@ -330,7 +330,7 @@ end;
procedure TColumnEditForm.EditChange(Sender: TObject);
begin
- if grid.FocusRow < 1 then
+ if grid.FocusRow < 0 then
Exit;
SaveColumn(grid.FocusRow);
@@ -359,14 +359,14 @@ procedure TColumnEditForm.UpDownButtonClick(Sender: TObject);
begin
if Sender = btnUP then
begin
- if grid.FocusRow > 1 then
+ if grid.FocusRow > 0 then
begin
dbgrid.MoveColumn(grid.FocusRow - 1, grid.FocusRow - 2);
grid.FocusRow := grid.FocusRow - 1;
grid.Update;
end;
end
- else if grid.FocusRow < grid.RowCount then
+ else if grid.FocusRow < grid.RowCount-1 then
begin
dbgrid.MoveColumn(grid.FocusRow - 1, grid.FocusRow);
grid.FocusRow := grid.FocusRow + 1;
@@ -377,7 +377,7 @@ end;
{ TColumnsGrid }
-function TColumnsGrid.GetRowCount: Longword;
+function TColumnsGrid.GetRowCount: Integer;
begin
try
// Yes, it must be ColumnCount and *not* RowCount!
@@ -387,7 +387,7 @@ begin
end;
end;
-procedure TColumnsGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState);
+procedure TColumnsGrid.DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState);
var
s: string;
x: integer;
@@ -404,10 +404,10 @@ begin
x := ARect.Left + 1;
case ACol of
- 1: s := IntToStr(ARow);
- 2: s := c.Title;
- 3: s := IntToStr(c.Width);
- 4: case c.Alignment of
+ 0: s := IntToStr(ARow);
+ 1: s := c.Title;
+ 2: s := IntToStr(c.Width);
+ 3: case c.Alignment of
taRightJustify:
s := 'Right';
taCenter:
@@ -506,7 +506,7 @@ begin
Result := '';
with TfpgStringGrid(wg) do
begin
- for f := 1 to ColumnCount do
+ for f := 0 to ColumnCount-1 do
begin
c := Columns[f];
case c.Alignment of
diff --git a/examples/apps/uidesigner/vfdprops.pas b/examples/apps/uidesigner/vfdprops.pas
index fa2c8cd7..7e033d24 100644
--- a/examples/apps/uidesigner/vfdprops.pas
+++ b/examples/apps/uidesigner/vfdprops.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
@@ -62,10 +62,10 @@ type
TPropertyStringList = class(TVFDWidgetProperty)
public
- function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
- function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
- function GetValueText(wg: TfpgWidget): string; override;
- function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
+ function GetValueText(wg: TfpgWidget): string; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
procedure OnExternalEdit(wg: TfpgWidget); override;
end;
@@ -79,10 +79,8 @@ type
end;
- { TPropertyFontDesc }
-
TPropertyFontDesc = class(TPropertyString)
- function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
procedure OnExternalEdit(wg: TfpgWidget); override;
end;
@@ -151,19 +149,19 @@ uses
fpgfx,
gui_dialogs;
+
procedure EditStringList(sl: TStringList);
var
- frmie: TItemEditorForm;
+ frm: TItemEditorForm;
begin
- frmie := TItemEditorForm.Create(nil);
- //GfxGetAbsolutePosition(PropertyForm.btnEdit.WinHandle, PropertyForm.btnEdit.width, 0, ax,ay);
- //frmie.Left := ax;
- //frmie.Top := ay;
-
- frmie.edItems.Lines.Assign(sl);
- if frmie.ShowModal = 1 then
- sl.Assign(frmie.edItems.Lines);
- frmie.Free;
+ frm := TItemEditorForm.Create(nil);
+ try
+ frm.edItems.Lines.Assign(sl);
+ if frm.ShowModal = 1 then
+ sl.Assign(frm.edItems.Lines);
+ finally
+ frm.Free;
+ end;
end;
procedure GetEnumPropValueList(wg: TObject; const APropName: string; sl: TStringList);
@@ -377,11 +375,18 @@ var
f: integer;
begin
sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
Result := '';
- for f := 0 to sl.Count - 1 do
- Result := Result + ident + Name + '.Add(' + QuotedStr(sl.Strings[f]) + ');' + LineEnding;
+ //if sl.Text <> '' then
+ //begin
+ //writeln('Text = <', sl.Text, '>');
+ //writeln('StringList.Count = ', sl.Count);
+ for f := 0 to sl.Count - 1 do
+ Result := Result + ident + Name + '.Add(' + QuotedStr(sl.Strings[f]) + ');' + LineEnding;
+ //end;
end;
function TPropertyStringList.GetValueText(wg: TfpgWidget): string;
@@ -389,6 +394,8 @@ var
sl: TStringList;
begin
sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
Result := '[' + IntToStr(sl.Count) + ' lines]';
end;
@@ -397,6 +404,8 @@ var
sl: TStringList;
begin
sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
EditStringList(sl);
end;
@@ -424,6 +433,8 @@ begin
if Result then
begin
sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
sl.Add(sval);
end;
end;
@@ -498,12 +509,10 @@ begin
// Exit;
if widget = nil then
Exit;
- Canvas.BeginDraw;
Canvas.Clear(clBoxColor);
Canvas.GetWinRect(r);
Canvas.SetTextColor(clText1);
prop.DrawValue(Widget, Canvas, r, 0);
- Canvas.EndDraw;
end;
procedure TExternalPropertyEditor.CreateLayout;
@@ -616,12 +625,12 @@ begin
sv := GetEnumProp(wg, prop.Name);
sl := TStringList.Create;
GetEnumPropValueList(wg, prop.Name, sl);
- fi := 1;
+ fi := 0;
for i := 0 to sl.Count - 1 do
begin
chl.Items.Add(sl.Strings[i]);
if UpperCase(sv) = UpperCase(sl.Strings[i]) then
- fi := i + 1;
+ fi := i;
end;
chl.FocusItem := fi;
sl.Free;
@@ -642,9 +651,9 @@ begin
chl.Items.Add('True');
chl.Items.Add('False');
if b = 1 then
- chl.FocusItem := 1
+ chl.FocusItem := 0
else
- chl.FocusItem := 2;
+ chl.FocusItem := 1;
end;
procedure TBooleanPropertyEditor.StoreValue(wg: TfpgWidget);
diff --git a/examples/apps/uidesigner/vfdresizer.pas b/examples/apps/uidesigner/vfdresizer.pas
index 137fdbd4..9944e3b6 100644
--- a/examples/apps/uidesigner/vfdresizer.pas
+++ b/examples/apps/uidesigner/vfdresizer.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
@@ -31,10 +31,10 @@ type
TwgResizer = class(TfpgWidget)
protected
wgdesigner: TObject;
- procedure HandlePaint; override;
- procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
- procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
- procedure HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState); override;
+ procedure HandlePaint; override;
+ procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState); override;
public
direction: integer;
FDragging: boolean;
@@ -43,9 +43,11 @@ type
constructor Create(ACompDesigner: TObject; adirection: integer); reintroduce;
procedure Show;
end;
+
implementation
+
uses
vfddesigner,
vfdmain;
@@ -54,10 +56,7 @@ uses
procedure TwgResizer.HandlePaint;
begin
- Canvas.BeginDraw;
- inherited HandlePaint;
Canvas.Clear(FBackgroundColor);
- Canvas.EndDraw;
end;
procedure TwgResizer.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
diff --git a/examples/apps/uidesigner/vfdutils.pas b/examples/apps/uidesigner/vfdutils.pas
index fe60c933..90b99841 100644
--- a/examples/apps/uidesigner/vfdutils.pas
+++ b/examples/apps/uidesigner/vfdutils.pas
@@ -1,7 +1,7 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
+ 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,
diff --git a/examples/apps/uidesigner/vfdwidgetclass.pas b/examples/apps/uidesigner/vfdwidgetclass.pas
index 19308b35..9729691f 100644
--- a/examples/apps/uidesigner/vfdwidgetclass.pas
+++ b/examples/apps/uidesigner/vfdwidgetclass.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -133,7 +133,7 @@ end;
function TVFDWidgetClass.GetProperty(ind: integer): TVFDWidgetProperty;
begin
- Result := TVFDWidgetProperty(FProps[ind - 1]);
+ Result := TVFDWidgetProperty(FProps[ind]);
end;
function TVFDWidgetClass.PropertyCount: integer;
diff --git a/examples/apps/uidesigner/vfdwidgets.pas b/examples/apps/uidesigner/vfdwidgets.pas
index 73088160..71cacc1d 100644
--- a/examples/apps/uidesigner/vfdwidgets.pas
+++ b/examples/apps/uidesigner/vfdwidgets.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -79,7 +79,7 @@ end;
function VFDWidget(ind: integer): TVFDWidgetClass;
begin
- Result := TVFDWidgetClass(FVFDWidgets[ind - 1]);
+ Result := TVFDWidgetClass(FVFDWidgets[ind]);
end;
procedure RegisterVFDWidget(awc: TVFDWidgetClass);
@@ -352,6 +352,7 @@ begin
wc.AddProperty('Min', TPropertyInteger, '');
wc.AddProperty('Max', TPropertyInteger, '');
wc.AddProperty('Position', TPropertyInteger, '');
+ wc.AddProperty('ShowCaption', TPropertyBoolean, '');
wc.WidgetIconName := 'vfd.progressbar';
RegisterVFDWidget(wc);
@@ -362,6 +363,7 @@ begin
wc.AddProperty('Min', TPropertyInteger, '');
wc.AddProperty('Orientation', TPropertyEnum, '');
wc.AddProperty('Position', TPropertyInteger, '');
+ wc.AddProperty('ShowPosition', TPropertyBoolean, '');
wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
wc.WidgetIconName := 'vfd.trackbar';
RegisterVFDWidget(wc);
diff --git a/examples/gui/colorlistbox/frmMain.pas b/examples/gui/colorlistbox/frmMain.pas
index 7fbe0327..5ec2d98c 100644
--- a/examples/gui/colorlistbox/frmMain.pas
+++ b/examples/gui/colorlistbox/frmMain.pas
@@ -83,7 +83,7 @@ begin
cbName1.Items.Add('cpStandardColors');
cbName1.Items.Add('cpSystemColors');
cbName1.Items.Add('cpWebColors');
- cbName1.FocusItem := 1;
+ cbName1.FocusItem := 0;
cbName1.OnChange := @cbName1Change;
end;
diff --git a/examples/gui/combobox/comboboxtest.lpi b/examples/gui/combobox/comboboxtest.lpi
new file mode 100644
index 00000000..41183e45
--- /dev/null
+++ b/examples/gui/combobox/comboboxtest.lpi
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <PathDelim Value="/"/>
+ <Version Value="6"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <IconPath Value="./"/>
+ <TargetFileExt Value=""/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_package"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="comboboxtest.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="comboboxtest"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="frm_main.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="frm_main"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="5"/>
+ <CodeGeneration>
+ <Generate Value="Faster"/>
+ </CodeGeneration>
+ <Other>
+ <CustomOptions Value="-FUunits"/>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/examples/gui/combobox/comboboxtest.lpr b/examples/gui/combobox/comboboxtest.lpr
new file mode 100644
index 00000000..a3a38da1
--- /dev/null
+++ b/examples/gui/combobox/comboboxtest.lpr
@@ -0,0 +1,29 @@
+program comboboxtest;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes, fpgfx, frm_main;
+
+procedure MainProc;
+var
+ frm: TMainForm;
+begin
+ fpgApplication.Initialize;
+ frm := TMainForm.Create(nil);
+ try
+ frm.Show;
+ fpgApplication.Run;
+ finally
+ frm.Free;
+ end;
+end;
+
+begin
+ MainProc;
+end.
+
+
diff --git a/examples/gui/combobox/extrafpc.cfg b/examples/gui/combobox/extrafpc.cfg
new file mode 100644
index 00000000..073dc4b6
--- /dev/null
+++ b/examples/gui/combobox/extrafpc.cfg
@@ -0,0 +1,5 @@
+-FUunits
+-Fu../../../lib
+-Xs
+-XX
+-CX
diff --git a/examples/gui/combobox/frm_main.pas b/examples/gui/combobox/frm_main.pas
new file mode 100644
index 00000000..2b834b51
--- /dev/null
+++ b/examples/gui/combobox/frm_main.pas
@@ -0,0 +1,251 @@
+unit frm_main;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Classes, gfxbase, fpgfx, gui_edit,
+ gfx_widget, gui_form, gui_label, gui_button,
+ gui_listbox, gui_memo, gui_combobox, gui_basegrid, gui_grid,
+ gui_dialogs, gui_checkbox, gui_tree, gui_trackbar,
+ gui_progressbar, gui_radiobutton, gui_tab, gui_menu,
+ gui_panel, gui_popupcalendar, gui_gauge, gui_editcombo;
+
+type
+
+ TMainForm = class(TfpgForm)
+ private
+ procedure cbAutoCompleteChanged(Sender: TObject);
+ procedure cbAutoDropDownChanged(Sender: TObject);
+ procedure cbAllowNewChanged(Sender: TObject);
+ procedure btnAdd1Clicked(Sender: TObject);
+ procedure btnFocusClicked(Sender: TObject);
+ procedure btnClearClicked(Sender: TObject);
+ procedure btnAdd10Clicked(Sender: TObject);
+ public
+ {@VFD_HEAD_BEGIN: MainForm}
+ btnAdd10: TfpgButton;
+ btnClear: TfpgButton;
+ btnFocus: TfpgButton;
+ btnAdd1: TfpgButton;
+ cbAutoComplete: TfpgCheckBox;
+ Combo1: TfpgComboBox;
+ lblName1: TfpgLabel;
+ lblName2: TfpgLabel;
+ EditCombo1: TfpgEditCombo;
+ cbAutoDropdown: TfpgCheckBox;
+ lblName3: TfpgLabel;
+ lblName4: TfpgLabel;
+ cbAllowNew: TfpgComboBox;
+ {@VFD_HEAD_END: MainForm}
+ procedure AfterCreate; override;
+ end;
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TMainForm.cbAutoCompleteChanged(Sender: TObject);
+begin
+ EditCombo1.AutoCompletion := cbAutoComplete.Checked;
+end;
+
+procedure TMainForm.cbAutoDropDownChanged(Sender: TObject);
+begin
+ EditCombo1.AutoDropDown := cbAutoDropdown.Checked;
+end;
+
+procedure TMainForm.cbAllowNewChanged(Sender: TObject);
+begin
+ if cbAllowNew.Text = 'anNo' then
+ EditCombo1.AllowNew := anNo
+ else if cbAllowNew.Text = 'anYes' then
+ EditCombo1.AllowNew := anYes
+ else if cbAllowNew.Text = 'anAsk' then
+ EditCombo1.AllowNew := anAsk
+end;
+
+procedure TMainForm.btnAdd1Clicked(Sender: TObject);
+begin
+ Combo1.Items.Add(Format('Item %2d', [Combo1.Items.Count]));
+ EditCombo1.Items.Add(Format('Item %2d', [EditCombo1.Items.Count]));
+end;
+
+procedure TMainForm.btnFocusClicked(Sender: TObject);
+begin
+ if Combo1.Items.Count > 1 then
+ Combo1.FocusItem := 2;
+ if EditCombo1.Items.Count > 1 then
+ EditCombo1.FocusItem := 2;
+end;
+
+procedure TMainForm.btnClearClicked(Sender: TObject);
+begin
+ Combo1.Items.Clear;
+ EditCombo1.Items.Clear;
+end;
+
+procedure TMainForm.btnAdd10Clicked(Sender: TObject);
+var
+ i: integer;
+begin
+ for i := 1 to 10 do
+ begin
+ Combo1.Items.Add(Format('Item %2d', [Combo1.Items.Count]));
+ EditCombo1.Items.Add(Format('Item %2d', [EditCombo1.Items.Count]));
+ end;
+end;
+
+procedure TMainForm.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: MainForm}
+ Name := 'MainForm';
+ SetPosition(345, 220, 344, 260);
+ WindowTitle := 'ComboBox test';
+ WindowPosition := wpScreenCenter;
+
+ btnAdd10 := TfpgButton.Create(self);
+ with btnAdd10 do
+ begin
+ Name := 'btnAdd10';
+ SetPosition(220, 28, 92, 23);
+ Text := 'Add 10 items';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 1;
+ OnClick := @btnAdd10Clicked;
+ end;
+
+ btnClear := TfpgButton.Create(self);
+ with btnClear do
+ begin
+ Name := 'btnClear';
+ SetPosition(220, 56, 92, 23);
+ Text := 'Clear Items';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 2;
+ OnClick := @btnClearClicked;
+ end;
+
+ btnFocus := TfpgButton.Create(self);
+ with btnFocus do
+ begin
+ Name := 'btnFocus';
+ SetPosition(220, 84, 92, 23);
+ Text := 'FocusItem = 2';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 3;
+ OnClick := @btnFocusClicked;
+ end;
+
+ btnAdd1 := TfpgButton.Create(self);
+ with btnAdd1 do
+ begin
+ Name := 'btnAdd1';
+ SetPosition(220, 112, 92, 23);
+ Text := 'Add 1 item';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 4;
+ OnClick := @btnAdd1Clicked;
+ end;
+
+ cbAutoComplete := TfpgCheckBox.Create(self);
+ with cbAutoComplete do
+ begin
+ Name := 'cbAutoComplete';
+ SetPosition(216, 168, 120, 19);
+ FontDesc := '#Label1';
+ TabOrder := 6;
+ Text := 'Auto Complete';
+ OnChange := @cbAutoCompleteChanged;
+ end;
+
+ Combo1 := TfpgComboBox.Create(self);
+ with Combo1 do
+ begin
+ Name := 'Combo1';
+ SetPosition(8, 24, 168, 21);
+ FontDesc := '#List';
+ TabOrder := 6;
+ end;
+
+ lblName1 := TfpgLabel.Create(self);
+ with lblName1 do
+ begin
+ Name := 'lblName1';
+ SetPosition(8, 8, 176, 15);
+ FontDesc := '#Label1';
+ Text := 'Static ComboBox';
+ end;
+
+ lblName2 := TfpgLabel.Create(self);
+ with lblName2 do
+ begin
+ Name := 'lblName2';
+ SetPosition(8, 68, 176, 15);
+ FontDesc := '#Label1';
+ Text := 'Edit ComboBox';
+ end;
+
+ EditCombo1 := TfpgEditCombo.Create(self);
+ with EditCombo1 do
+ begin
+ Name := 'EditCombo1';
+ SetPosition(8, 88, 168, 21);
+ end;
+
+ cbAutoDropdown := TfpgCheckBox.Create(self);
+ with cbAutoDropdown do
+ begin
+ Name := 'cbAutoDropdown';
+ SetPosition(216, 188, 120, 19);
+ FontDesc := '#Label1';
+ TabOrder := 9;
+ Text := 'Auto Dropdown';
+ OnChange := @cbAutoDropDownChanged;
+ end;
+
+ lblName3 := TfpgLabel.Create(self);
+ with lblName3 do
+ begin
+ Name := 'lblName3';
+ SetPosition(204, 148, 128, 15);
+ FontDesc := '#Label2';
+ Text := 'EditCombo only';
+ end;
+
+ lblName4 := TfpgLabel.Create(self);
+ with lblName4 do
+ begin
+ Name := 'lblName4';
+ SetPosition(204, 8, 136, 15);
+ FontDesc := '#Label2';
+ Text := 'Both components';
+ end;
+
+ cbAllowNew := TfpgComboBox.Create(self);
+ with cbAllowNew do
+ begin
+ Name := 'cbAllowNew';
+ SetPosition(220, 212, 100, 21);
+ FontDesc := '#List';
+ Items.Add('anNo');
+ Items.Add('anYes');
+ Items.Add('anAsk');
+ TabOrder := 13;
+ OnChange := @cbAllowNewChanged;
+ FocusItem := 0;
+ end;
+
+ {@VFD_BODY_END: MainForm}
+
+end;
+
+
+end.
diff --git a/examples/gui/filedialog/filedialog.lpr b/examples/gui/filedialog/filedialog.lpr
index 29635dbb..e7fa99ce 100644
--- a/examples/gui/filedialog/filedialog.lpr
+++ b/examples/gui/filedialog/filedialog.lpr
@@ -55,7 +55,7 @@ type
function TMyDBLoginDlg.GetDatabase: TfpgString;
begin
- Result := aStringList.ValueFromIndex[cbDatabases.FocusItem-1];
+ Result := aStringList.ValueFromIndex[cbDatabases.FocusItem];
end;
procedure TMyDBLoginDlg.PopulateComboDb;
@@ -64,9 +64,9 @@ var
begin
aStringList.Clear;
aStringList.Add('Database1=192.168.0.1:/data/db1.gdb');
- aStringList.Add('Database2=192.168.0.10:/data/live.gdb');
- aStringList.Add('Database3=192.168.0.150:/data/sometest.gdb');
- aStringList.Add('Database4=192.168.0.200:c:\MyData\test.gdb');
+ aStringList.Add('Database2=192.168.0.10:/data/db2.gdb');
+ aStringList.Add('Database3=192.168.0.150:/data/db3.gdb');
+ aStringList.Add('Database4=192.168.0.200:c:\MyData\db4.gdb');
cbDatabases.Items.Clear;
for i := 0 to aStringList.Count-1 do
cbDatabases.Items.Add(aStringList.Names[i]);
diff --git a/examples/gui/gridtest/gridtest.lpr b/examples/gui/gridtest/gridtest.lpr
index a7bbe7fc..2bd6d4ec 100644
--- a/examples/gui/gridtest/gridtest.lpr
+++ b/examples/gui/gridtest/gridtest.lpr
@@ -34,13 +34,21 @@ type
chkDisabled: TfpgCheckBox;
edtTopRow: TfpgEditInteger;
btnTopRow: TfpgButton;
+ btnAddFive: TfpgButton;
+ btnAddOne: TfpgButton;
+ btnFiveOnly: TfpgButton;
{@VFD_HEAD_END: MainForm}
+ procedure StringGridDoubleClicked(Sender: TObject; AButton: TMouseButton;
+ AShift: TShiftState; const AMousePos: TPoint);
+ procedure btnAddFiveClicked(Sender: TObject);
+ procedure btnAddOneClicked(Sender: TObject);
+ procedure btnFiveOnlyClicked(Sender: TObject);
procedure chkDisabledChange(Sender: TObject);
procedure chkRowSelectChange(Sender: TObject);
procedure chkShowHeaderChange(Sender: TObject);
procedure chkShowGridChange(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
- procedure stringgridDrawCell(Sender: TObject; const ARow, ACol: Longword;
+ procedure stringgridDrawCell(Sender: TObject; const ARow, ACol: Integer;
const ARect: TfpgRect; const AFlags: TfpgGridDrawState; var ADefaultDrawing: boolean);
procedure btnTopRowClicked(Sender: TObject);
public
@@ -51,6 +59,30 @@ type
{ TMainForm }
+procedure TMainForm.StringGridDoubleClicked(Sender: TObject;
+ AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
+var
+ lCol, lRow: integer;
+begin
+ StringGrid.MouseToCell(AMousePos.X, AMousePos.Y, lCol, lRow);
+ StringGrid.Cells[lCol, lRow] := Format('(c%d,r%d)', [lCol, lRow]);
+end;
+
+procedure TMainForm.btnAddFiveClicked(Sender: TObject);
+begin
+ StringGrid.RowCount := StringGrid.RowCount + 5;
+end;
+
+procedure TMainForm.btnAddOneClicked(Sender: TObject);
+begin
+ StringGrid.RowCount := StringGrid.RowCount + 1;
+end;
+
+procedure TMainForm.btnFiveOnlyClicked(Sender: TObject);
+begin
+ StringGrid.RowCount := 5;
+end;
+
procedure TMainForm.chkDisabledChange(Sender: TObject);
begin
stringgrid.Enabled := not chkDisabled.Checked;
@@ -77,7 +109,7 @@ begin
end;
procedure TMainForm.stringgridDrawCell(Sender: TObject; const ARow,
- ACol: Longword; const ARect: TfpgRect; const AFlags: TfpgGridDrawState;
+ ACol: Integer; const ARect: TfpgRect; const AFlags: TfpgGridDrawState;
var ADefaultDrawing: boolean);
begin
if (ACol = 1) and (ARow = 3) then
@@ -93,7 +125,7 @@ end;
procedure TMainForm.btnTopRowClicked(Sender: TObject);
begin
- if edtTopRow.Value < 1 then
+ if edtTopRow.Value < 0 then
Exit;
stringgrid.TopRow := edtTopRow.Value;
end;
@@ -104,7 +136,7 @@ var
begin
{@VFD_BODY_BEGIN: MainForm}
Name := 'MainForm';
- SetPosition(351, 214, 566, 350);
+ SetPosition(351, 214, 515, 350);
WindowTitle := 'Grid control test';
WindowPosition := wpScreenCenter;
@@ -112,7 +144,7 @@ begin
with btnQuit do
begin
Name := 'btnQuit';
- SetPosition(476, 320, 80, 25);
+ SetPosition(425, 320, 80, 25);
Anchors := [anRight,anBottom];
Text := 'Quit';
FontDesc := '#Label1';
@@ -124,11 +156,12 @@ begin
with stringgrid do
begin
Name := 'stringgrid';
- SetPosition(10, 10, 426, 250);
+ SetPosition(10, 10, 375, 250);
Anchors := [anLeft,anRight,anTop,anBottom];
+ AddColumn('Column 0', 65);
AddColumn('Column 1', 100, taLeftJustify);
AddColumn('Col 2', 50, taCenter);
- AddColumn('New', 150, taRightJustify);
+ AddColumn('Numbers', 150, taRightJustify);
FontDesc := '#Grid';
HeaderFontDesc := '#GridHeader';
RowCount := 17;
@@ -143,12 +176,14 @@ begin
TextColor:= clBlue;
ColumnTextColor[1] := clRed;
// add some text
- Cells[1, 1] := '(r1,c1)';
+ Cells[0, 0] := '[c0, r0]';
+ Cells[1, 1] := '[c1, r1]';
Cells[1, 3] := 'Custom';
Cells[2, 3] := 'Hello';
- Cells[3, 1] := '(r1,c3)';
+ Cells[3, 1] := '[c3, r1]';
// Add custom painting
- OnDrawCell := @stringgridDrawCell;
+ OnDrawCell := @StringGridDrawCell;
+ OnDoubleClick := @StringGridDoubleClicked;
end;
chkShowHeader := TfpgCheckBox.Create(self);
@@ -168,7 +203,7 @@ begin
with chkShowGrid do
begin
Name := 'chkShowGrid';
- SetPosition(110, 320, 100, 24);
+ SetPosition(114, 320, 92, 24);
Anchors := [anLeft,anBottom];
Checked := True;
FontDesc := '#Label1';
@@ -213,7 +248,7 @@ begin
with btnTopRow do
begin
Name := 'btnTopRow';
- SetPosition(76, 280, 91, 24);
+ SetPosition(72, 280, 91, 23);
Anchors := [anLeft,anBottom];
Text := 'Set TopRow';
FontDesc := '#Label1';
@@ -222,9 +257,48 @@ begin
OnClick := @btnTopRowClicked;
end;
+ btnAddFive := TfpgButton.Create(self);
+ with btnAddFive do
+ begin
+ Name := 'btnAddFive';
+ SetPosition(188, 280, 80, 23);
+ Anchors := [anLeft,anBottom];
+ Text := 'Add 5 lines';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 8;
+ OnClick := @btnAddFiveClicked;
+ end;
+
+ btnAddOne := TfpgButton.Create(self);
+ with btnAddOne do
+ begin
+ Name := 'btnAddOne';
+ SetPosition(272, 280, 80, 23);
+ Anchors := [anLeft,anBottom];
+ Text := 'Add 1 line';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 9;
+ OnClick := @btnAddOneClicked;
+ end;
+
+ btnFiveOnly := TfpgButton.Create(self);
+ with btnFiveOnly do
+ begin
+ Name := 'btnFiveOnly';
+ SetPosition(356, 280, 80, 23);
+ Anchors := [anLeft,anBottom];
+ Text := '5 lines only';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 10;
+ OnClick := @btnFiveOnlyClicked;
+ end;
+
{@VFD_BODY_END: MainForm}
- for r := 1 to stringgrid.RowCount do
+ for r := 0 to stringgrid.RowCount-1 do
stringgrid.Cells[3, r] := IntToStr(r);
end;
diff --git a/examples/gui/listbox/frm_main.pas b/examples/gui/listbox/frm_main.pas
new file mode 100644
index 00000000..9757bfc9
--- /dev/null
+++ b/examples/gui/listbox/frm_main.pas
@@ -0,0 +1,160 @@
+unit frm_main;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Classes, gfxbase, fpgfx, gui_edit,
+ gfx_widget, gui_form, gui_label, gui_button,
+ gui_listbox, gui_memo, gui_combobox, gui_basegrid, gui_grid,
+ gui_dialogs, gui_checkbox, gui_tree, gui_trackbar,
+ gui_progressbar, gui_radiobutton, gui_tab, gui_menu,
+ gui_panel, gui_popupcalendar, gui_gauge;
+
+type
+
+ TMainForm = class(TfpgForm)
+ private
+ procedure cbHotTrackChanged(Sender: TObject);
+ procedure btnAdd1Clicked(Sender: TObject);
+ procedure btnFocusClicked(Sender: TObject);
+ procedure btnClearClicked(Sender: TObject);
+ procedure btnAdd10Clicked(Sender: TObject);
+ public
+ {@VFD_HEAD_BEGIN: MainForm}
+ lstName1: TfpgListBox;
+ btnAdd10: TfpgButton;
+ btnClear: TfpgButton;
+ btnFocus: TfpgButton;
+ btnAdd1: TfpgButton;
+ memName1: TfpgMemo;
+ cbHotTrack: TfpgCheckBox;
+ {@VFD_HEAD_END: MainForm}
+ procedure AfterCreate; override;
+ end;
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TMainForm.cbHotTrackChanged(Sender: TObject);
+begin
+ lstName1.HotTrack := cbHotTrack.Checked;
+end;
+
+procedure TMainForm.btnAdd1Clicked(Sender: TObject);
+begin
+ lstName1.Items.Add(Format('Item %2d', [lstName1.ItemCount]));
+end;
+
+procedure TMainForm.btnFocusClicked(Sender: TObject);
+begin
+ if lstName1.ItemCount > 1 then
+ lstName1.FocusItem := 2;
+end;
+
+procedure TMainForm.btnClearClicked(Sender: TObject);
+begin
+ lstName1.Items.Clear;
+end;
+
+procedure TMainForm.btnAdd10Clicked(Sender: TObject);
+var
+ i: integer;
+begin
+ for i := 1 to 10 do
+ lstName1.Items.Add(Format('Item %2d', [lstName1.ItemCount]));
+end;
+
+procedure TMainForm.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: MainForm}
+ Name := 'MainForm';
+ SetPosition(345, 220, 300, 270);
+ WindowTitle := 'ListBox test';
+ WindowPosition := wpScreenCenter;
+
+ lstName1 := TfpgListBox.Create(self);
+ with lstName1 do
+ begin
+ Name := 'lstName1';
+ SetPosition(12, 12, 128, 168);
+ FontDesc := '#List';
+ end;
+
+ btnAdd10 := TfpgButton.Create(self);
+ with btnAdd10 do
+ begin
+ Name := 'btnAdd10';
+ SetPosition(204, 28, 92, 23);
+ Text := 'Add 10 items';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 1;
+ OnClick := @btnAdd10Clicked;
+ end;
+
+ btnClear := TfpgButton.Create(self);
+ with btnClear do
+ begin
+ Name := 'btnClear';
+ SetPosition(204, 56, 92, 23);
+ Text := 'Clear Items';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 2;
+ OnClick := @btnClearClicked;
+ end;
+
+ btnFocus := TfpgButton.Create(self);
+ with btnFocus do
+ begin
+ Name := 'btnFocus';
+ SetPosition(204, 84, 92, 23);
+ Text := 'FocusItem = 2';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 3;
+ OnClick := @btnFocusClicked;
+ end;
+
+ btnAdd1 := TfpgButton.Create(self);
+ with btnAdd1 do
+ begin
+ Name := 'btnAdd1';
+ SetPosition(204, 112, 92, 23);
+ Text := 'Add 1 item';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 4;
+ OnClick := @btnAdd1Clicked;
+ end;
+
+ memName1 := TfpgMemo.Create(self);
+ with memName1 do
+ begin
+ Name := 'memName1';
+ SetPosition(12, 188, 280, 77);
+ FontDesc := '#Edit1';
+ TabOrder := 5;
+ end;
+
+ cbHotTrack := TfpgCheckBox.Create(self);
+ with cbHotTrack do
+ begin
+ Name := 'cbHotTrack';
+ SetPosition(204, 140, 120, 19);
+ FontDesc := '#Label1';
+ TabOrder := 6;
+ Text := 'Track Focus';
+ OnChange := @cbHotTrackChanged;
+ end;
+
+ {@VFD_BODY_END: MainForm}
+end;
+
+
+end.
diff --git a/examples/gui/listbox/listboxtest.lpi b/examples/gui/listbox/listboxtest.lpi
new file mode 100644
index 00000000..f80a70b0
--- /dev/null
+++ b/examples/gui/listbox/listboxtest.lpi
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <PathDelim Value="/"/>
+ <Version Value="6"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <IconPath Value="./"/>
+ <TargetFileExt Value=""/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_package"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="listboxtest.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="listboxtest"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="frm_main.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="frm_main"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="5"/>
+ <CodeGeneration>
+ <Generate Value="Faster"/>
+ </CodeGeneration>
+ <Other>
+ <CustomOptions Value="-FUunits"/>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/examples/gui/listbox/listboxtest.lpr b/examples/gui/listbox/listboxtest.lpr
new file mode 100644
index 00000000..dd14a408
--- /dev/null
+++ b/examples/gui/listbox/listboxtest.lpr
@@ -0,0 +1,29 @@
+program listboxtest;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes, fpgfx, frm_main, fpgui_package;
+
+procedure MainProc;
+var
+ frm: TMainForm;
+begin
+ fpgApplication.Initialize;
+ frm := TMainForm.Create(nil);
+ try
+ frm.Show;
+ fpgApplication.Run;
+ finally
+ frm.Free;
+ end;
+end;
+
+begin
+ MainProc;
+end.
+
+
diff --git a/examples/gui/memo/memotest.lpr b/examples/gui/memo/memotest.lpr
index c3e106a8..e4eed10b 100644
--- a/examples/gui/memo/memotest.lpr
+++ b/examples/gui/memo/memotest.lpr
@@ -57,9 +57,9 @@ begin
memo.Lines.Add('Memo Test0');
memo.Lines.Add('Memo Test1');
- //memo.Lines.Add('Memo Test2');
- //memo.Lines.Add('Memo Test3');
- //memo.Lines.Add('Memo Test4');
+ memo.Lines.Add('Memo Test2');
+ memo.Lines.Add('Memo Test3');
+ memo.Lines.Add('Memo Test4');
memo.Lines.Insert(1,'0 Before 1 after');
//memo.Lines.Delete(1);
//memo.Lines.Text := 'Dude'+LineEnding+'What''s mine say?'+LineEnding;;
diff --git a/examples/gui/menutest/menutest.lpr b/examples/gui/menutest/menutest.lpr
index c95c49de..801bdb97 100644
--- a/examples/gui/menutest/menutest.lpr
+++ b/examples/gui/menutest/menutest.lpr
@@ -77,8 +77,7 @@ begin
FHelpSubMenu.AddMenuItem('Test Russian text -> Òåñò', '', @miMenuItemSelected);
// Create main menu bar
- FMenuBar := TfpgMenuBar.Create(self);
- FMenuBar.SetPosition(0, 0, Width, FMenuBar.Height);
+ FMenuBar := CreateMenuBar(self);
FMenuBar.AddMenuItem('&File', nil).SubMenu := FFileSubMenu;
FMenuBar.AddMenuItem('&Edit', nil).SubMenu := FEditSubMenu;
FMenuBar.AddMenuItem('&Windows', nil);
diff --git a/src/corelib/gdi/gfx_gdi.pas b/src/corelib/gdi/gfx_gdi.pas
index 977ec960..0873d682 100644
--- a/src/corelib/gdi/gfx_gdi.pas
+++ b/src/corelib/gdi/gfx_gdi.pas
@@ -44,7 +44,6 @@ var
FontSmoothingType: Cardinal;
type
- TfpgGContext = HDC;
// forward declaration
TfpgWindowImpl = class;
@@ -93,9 +92,9 @@ type
FDrawing: boolean;
FBufferBitmap: HBitmap;
FDrawWindow: TfpgWindowImpl;
- Fgc: TfpgGContext;
- fBufgc: TfpgGContext;
- FWinGC: TfpgGContext;
+ Fgc: TfpgDCHandle;
+ fBufgc: TfpgDCHandle;
+ FWinGC: TfpgDCHandle;
FBackgroundColor: TfpgColor;
FCurFontRes: TfpgFontResourceImpl;
FClipRect: TfpgRect;
@@ -132,6 +131,7 @@ type
procedure SetPixel(X, Y: integer; const AValue: TfpgColor); override;
procedure DoDrawArc(x, y, w, h: TfpgCoord; a1, a2: Extended); override;
procedure DoFillArc(x, y, w, h: TfpgCoord; a1, a2: Extended); override;
+ property DCHandle: TfpgDCHandle read Fgc;
public
constructor Create; override;
destructor Destroy; override;
diff --git a/src/corelib/gdi/gfx_impl.pas b/src/corelib/gdi/gfx_impl.pas
index 2f8eddf2..3aabb3d6 100644
--- a/src/corelib/gdi/gfx_impl.pas
+++ b/src/corelib/gdi/gfx_impl.pas
@@ -9,6 +9,7 @@ uses
type
TfpgWinHandle = HWND;
+ TfpgDCHandle = HDC;
implementation
diff --git a/src/corelib/gfx_utf8utils.pas b/src/corelib/gfx_utf8utils.pas
index 6ce45891..137e39de 100644
--- a/src/corelib/gfx_utf8utils.pas
+++ b/src/corelib/gfx_utf8utils.pas
@@ -127,7 +127,10 @@ end;
function UTF8Length(const s: string): integer;
begin
- Result := UTF8Length(PChar(s),length(s));
+ if s = '' then
+ Result := length(s)
+ else
+ Result := UTF8Length(PChar(s),length(s));
end;
function UTF8Length(p: PChar; ByteCount: integer): integer;
diff --git a/src/corelib/gfxbase.pas b/src/corelib/gfxbase.pas
index 4497e4dc..3acadb64 100644
--- a/src/corelib/gfxbase.pas
+++ b/src/corelib/gfxbase.pas
@@ -524,15 +524,15 @@ type
destructor Destroy; override;
function Count: integer;
function CurrentSpecialDir: integer;
- property HasFileMode: boolean read FHasFileMode;
function ReadDirectory(const aDirectory: TfpgString = ''): boolean;
procedure Clear;
procedure Sort(AOrder: TFileListSortOrder);
- property Entry[i: integer]: TFileEntry read GetEntry;
- property SpecialDirs: TStringList read FSpecialDirs;
property DirectoryName: TfpgString read FDirectoryName;
+ property Entry[i: integer]: TFileEntry read GetEntry;
property FileMask: TfpgString read FFileMask write FFileMask;
+ property HasFileMode: boolean read FHasFileMode;
property ShowHidden: boolean read FShowHidden write FShowHidden;
+ property SpecialDirs: TStringList read FSpecialDirs;
end;
@@ -2050,10 +2050,10 @@ end;
function TfpgFileListBase.GetEntry(i: integer): TFileEntry;
begin
- if (i < 1) or (i > FEntries.Count) then
+ if (i < 0) or (i > FEntries.Count-1) then
Result := nil
else
- Result := TFileEntry(FEntries[i-1]);
+ Result := TFileEntry(FEntries[i]);
end;
function TfpgFileListBase.InitializeEntry(sr: TSearchRec): TFileEntry;
diff --git a/src/corelib/x11/gfx_impl.pas b/src/corelib/x11/gfx_impl.pas
index 0bd6b311..897e0cbf 100644
--- a/src/corelib/x11/gfx_impl.pas
+++ b/src/corelib/x11/gfx_impl.pas
@@ -9,6 +9,8 @@ uses
type
TfpgWinHandle = TXID;
+ TfpgDCHandle = TXID;
+
implementation
diff --git a/src/corelib/x11/gfx_x11.pas b/src/corelib/x11/gfx_x11.pas
index d507ecb5..034030bb 100644
--- a/src/corelib/x11/gfx_x11.pas
+++ b/src/corelib/x11/gfx_x11.pas
@@ -136,8 +136,8 @@ type
private
FDrawing: boolean;
FDrawWindow: TfpgWindowImpl;
- FBufferPixmap: TPixmap;
- FDrawHandle: TXID;
+ FBufferPixmap: TfpgDCHandle;
+ FDrawHandle: TfpgDCHandle;
Fgc: TfpgGContext;
FCurFontRes: TfpgFontResourceImpl;
FClipRect: TfpgRect;
@@ -174,6 +174,7 @@ type
procedure SetPixel(X, Y: integer; const AValue: TfpgColor); override;
procedure DoDrawArc(x, y, w, h: TfpgCoord; a1, a2: Extended); override;
procedure DoFillArc(x, y, w, h: TfpgCoord; a1, a2: Extended); override;
+ property DCHandle: TfpgDCHandle read FDrawHandle;
public
constructor Create; override;
destructor Destroy; override;
@@ -261,8 +262,6 @@ type
end;
- { TfpgFileListImpl }
-
TfpgFileListImpl = class(TfpgFileListBase)
function EncodeModeString(FileMode: longword): TFileModeString;
function GetUserName(uid: integer): string;
@@ -281,7 +280,7 @@ uses
{$if defined(linux) and defined(cpu386)}libc,{$endif}
fpgfx,
gfx_widget,
- gui_form, // remove this!!!!!
+ gui_form,
cursorfont,
gfx_popupwindow,
xatom, // used for XA_WM_NAME
diff --git a/src/gui/db/fpgui_db.pas b/src/gui/db/fpgui_db.pas
index 810abe70..ec91e8e3 100644
--- a/src/gui/db/fpgui_db.pas
+++ b/src/gui/db/fpgui_db.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_basegrid.pas b/src/gui/gui_basegrid.pas
index e2049481..a16fd08a 100644
--- a/src/gui/gui_basegrid.pas
+++ b/src/gui/gui_basegrid.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -12,7 +12,8 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Description:
- Defines a Base Grid control.
+ Defines a Base Grid control. Usable as the base for any grid type of
+ component.
}
unit gui_basegrid;
@@ -35,10 +36,10 @@ type
TfpgGridDrawState = set of (gdSelected, gdFocused, gdFixed);
- TfpgFocusChangeNotify = procedure(Sender: TObject; ARow, ACol: Longword) of object;
- TfpgRowChangeNotify = procedure(Sender: TObject; ARow: Longword) of object;
- TfpgCanSelectCellEvent = procedure(Sender: TObject; const ARow, ACol: Longword; var ACanSelect: boolean) of object;
- TfpgDrawCellEvent = procedure(Sender: TObject; const ARow, ACol: Longword; const ARect: TfpgRect; const AFlags: TfpgGridDrawState; var ADefaultDrawing: boolean) of object;
+ TfpgFocusChangeNotify = procedure(Sender: TObject; ARow, ACol: Integer) of object;
+ TfpgRowChangeNotify = procedure(Sender: TObject; ARow: Integer) of object;
+ TfpgCanSelectCellEvent = procedure(Sender: TObject; const ARow, ACol: Integer; var ACanSelect: boolean) of object;
+ TfpgDrawCellEvent = procedure(Sender: TObject; const ARow, ACol: Integer; const ARect: TfpgRect; const AFlags: TfpgGridDrawState; var ADefaultDrawing: boolean) of object;
// Column 2 is special just for testing purposes. Descendant classes will
// override that special behavior anyway.
@@ -53,16 +54,16 @@ type
FResizedCol: integer; // used for column resizing
FDefaultColWidth: integer;
FDefaultRowHeight: integer;
- FFocusCol: Longword;
- FFocusRow: Longword;
+ FFocusCol: Integer;
+ FFocusRow: Integer;
FHeaderHeight: integer;
FOnCanSelectCell: TfpgCanSelectCellEvent;
FOnFocusChange: TfpgFocusChangeNotify;
FOnRowChange: TfpgRowChangeNotify;
- FPrevCol: Longword;
- FPrevRow: Longword;
- FFirstRow: Longword;
- FFirstCol: Longword;
+ FPrevCol: Integer;
+ FPrevRow: Integer;
+ FFirstRow: Integer;
+ FFirstCol: Integer;
FMargin: integer;
FFont: TfpgFont;
FHeaderFont: TfpgFont;
@@ -84,32 +85,32 @@ type
procedure VScrollBarMove(Sender: TObject; position: integer);
procedure SetDefaultColWidth(const AValue: integer);
procedure SetDefaultRowHeight(const AValue: integer);
- procedure SetFocusCol(const AValue: Longword);
- procedure SetFocusRow(const AValue: Longword);
+ procedure SetFocusCol(const AValue: Integer);
+ procedure SetFocusRow(const AValue: Integer);
procedure CheckFocusChange;
procedure SetShowGrid(const AValue: boolean);
procedure SetShowHeader(const AValue: boolean);
- function VisibleLines: Longword;
+ function VisibleLines: Integer;
function VisibleWidth: integer;
function VisibleHeight: integer;
- procedure SetFirstRow(const AValue: Longword);
+ procedure SetFirstRow(const AValue: Integer);
protected
procedure UpdateScrollBars; virtual;
- function GetHeaderText(ACol: Longword): string; virtual;
- function GetColumnWidth(ACol: Longword): integer; virtual;
- procedure SetColumnWidth(ACol: Longword; const AValue: integer); virtual;
- function GetColumnBackgroundColor(ACol: Longword): TfpgColor; virtual;
- procedure SetColumnBackgroundColor(ACol: Longword; const AValue: TfpgColor); virtual;
- function GetColumnTextColor(ACol: Longword): TfpgColor; virtual;
- procedure SetColumnTextColor(ACol: Longword; const AValue: TfpgColor); virtual;
- function GetColumnCount: Longword; virtual;
- function GetRowCount: Longword; virtual;
- function CanSelectCell(const ARow, ACol: Longword): boolean;
- function DoDrawCellEvent(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState): boolean; virtual;
- procedure DoCanSelectCell(const ARow, ACol: integer; var ACanSelect: boolean);
- procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState); virtual;
- procedure DrawHeader(ACol: Longword; ARect: TfpgRect; AFlags: integer); virtual;
- procedure DrawGrid(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer); virtual;
+ function GetHeaderText(ACol: Integer): string; virtual;
+ function GetColumnWidth(ACol: Integer): integer; virtual;
+ procedure SetColumnWidth(ACol: Integer; const AValue: integer); virtual;
+ function GetColumnBackgroundColor(ACol: Integer): TfpgColor; virtual;
+ procedure SetColumnBackgroundColor(ACol: Integer; const AValue: TfpgColor); virtual;
+ function GetColumnTextColor(ACol: Integer): TfpgColor; virtual;
+ procedure SetColumnTextColor(ACol: Integer; const AValue: TfpgColor); virtual;
+ function GetColumnCount: Integer; virtual;
+ function GetRowCount: Integer; virtual;
+ function CanSelectCell(const ARow, ACol: Integer): boolean;
+ function DoDrawCellEvent(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState): boolean; virtual;
+ procedure DoCanSelectCell(const ARow, ACol: Integer; var ACanSelect: boolean);
+ procedure DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState); virtual;
+ procedure DrawHeader(ACol: Integer; ARect: TfpgRect; AFlags: integer); virtual;
+ procedure DrawGrid(ARow, ACol: Integer; ARect: TfpgRect; AFlags: integer); virtual;
procedure HandlePaint; override;
procedure HandleShow; override;
procedure HandleResize(awidth, aheight: TfpgCoord); override;
@@ -125,20 +126,20 @@ type
property FontDesc: string read GetFontDesc write SetFontDesc;
property HeaderFont: TfpgFont read FHeaderFont;
property HeaderFontDesc: string read GetHeaderFontDesc write SetHeaderFontDesc;
- property FocusCol: Longword read FFocusCol write SetFocusCol;
- property FocusRow: Longword read FFocusRow write SetFocusRow;
+ property FocusCol: Integer read FFocusCol write SetFocusCol;
+ property FocusRow: Integer read FFocusRow write SetFocusRow;
property RowSelect: boolean read FRowSelect write SetRowSelect;
- property ColumnCount: Longword read GetColumnCount;
- property RowCount: Longword read GetRowCount;
+ property ColumnCount: Integer read GetColumnCount;
+ property RowCount: Integer read GetRowCount;
property ShowHeader: boolean read FShowHeader write SetShowHeader default True;
property ShowGrid: boolean read FShowGrid write SetShowGrid default True;
property ScrollBarStyle: TfpgScrollStyle read FScrollBarStyle write SetScrollBarStyle default ssAutoBoth;
property HeaderHeight: integer read FHeaderHeight;
// property ColResizing: boolean read FColResizing write FColResizing;
- property ColumnWidth[ACol: Longword]: integer read GetColumnWidth write SetColumnWidth;
- property ColumnBackgroundColor[ACol: Longword]: TfpgColor read GetColumnBackgroundColor write SetColumnBackgroundColor;
- property ColumnTextColor[ACol: Longword]: TfpgColor read GetColumnTextColor write SetColumnTextColor;
- property TopRow: Longword read FFirstRow write SetFirstRow;
+ property ColumnWidth[ACol: Integer]: integer read GetColumnWidth write SetColumnWidth;
+ property ColumnBackgroundColor[ACol: Integer]: TfpgColor read GetColumnBackgroundColor write SetColumnBackgroundColor;
+ property ColumnTextColor[ACol: Integer]: TfpgColor read GetColumnTextColor write SetColumnTextColor;
+ property TopRow: Integer read FFirstRow write SetFirstRow;
property OnDrawCell: TfpgDrawCellEvent read FOnDrawCell write FOnDrawCell;
property OnFocusChange: TfpgFocusChangeNotify read FOnFocusChange write FOnFocusChange;
property OnRowChange: TfpgRowChangeNotify read FOnRowChange write FOnRowChange;
@@ -150,7 +151,7 @@ type
procedure Update;
procedure BeginUpdate;
procedure EndUpdate;
- procedure MouseToCell(X, Y: Integer; var ACol, ARow: Longword);
+ procedure MouseToCell(X, Y: Integer; var ACol, ARow: Integer);
end;
implementation
@@ -159,10 +160,10 @@ implementation
procedure TfpgBaseGrid.HScrollBarMove(Sender: TObject; position: integer);
begin
- if FFirstCol <> Longword(position) then
+ if FFirstCol <> position then
begin
- if Position < 1 then
- Position := 1;
+ if Position < 0 then
+ Position := 0;
FFirstCol := position;
RePaint;
end;
@@ -213,7 +214,7 @@ end;
procedure TfpgBaseGrid.VScrollBarMove(Sender: TObject; position: integer);
begin
- if FFirstRow <> LongWord(position) then
+ if FFirstRow <> position then
begin
FFirstRow := position;
RePaint;
@@ -236,12 +237,12 @@ begin
RePaint;
end;
-function TfpgBaseGrid.GetColumnWidth(ACol: Longword): integer;
+function TfpgBaseGrid.GetColumnWidth(ACol: Integer): integer;
begin
Result := 50;
end;
-procedure TfpgBaseGrid.SetColumnWidth(ACol: Longword; const AValue: integer);
+procedure TfpgBaseGrid.SetColumnWidth(ACol: Integer; const AValue: integer);
begin
// GetColumnWidth and SetColumnWidth will be overriden in decendant!
// Column 2 is special just for testing purposes
@@ -253,44 +254,44 @@ begin
end;
end;
-function TfpgBaseGrid.GetColumnBackgroundColor(ACol: Longword): TfpgColor;
+function TfpgBaseGrid.GetColumnBackgroundColor(ACol: Integer): TfpgColor;
begin
// implemented in descendant
end;
-procedure TfpgBaseGrid.SetColumnBackgroundColor(ACol: Longword; const AValue: TfpgColor);
+procedure TfpgBaseGrid.SetColumnBackgroundColor(ACol: Integer; const AValue: TfpgColor);
begin
// implemented in descendant
end;
-function TfpgBaseGrid.GetColumnTextColor(ACol: Longword): TfpgColor;
+function TfpgBaseGrid.GetColumnTextColor(ACol: Integer): TfpgColor;
begin
// implemented in descendant
end;
-procedure TfpgBaseGrid.SetColumnTextColor(ACol: Longword; const AValue: TfpgColor);
+procedure TfpgBaseGrid.SetColumnTextColor(ACol: Integer; const AValue: TfpgColor);
begin
// implemented in descendant
end;
-function TfpgBaseGrid.GetColumnCount: Longword;
+function TfpgBaseGrid.GetColumnCount: Integer;
begin
Result := 7;
end;
-function TfpgBaseGrid.GetRowCount: Longword;
+function TfpgBaseGrid.GetRowCount: Integer;
begin
Result := 24;
end;
-function TfpgBaseGrid.CanSelectCell(const ARow, ACol: Longword): boolean;
+function TfpgBaseGrid.CanSelectCell(const ARow, ACol: Integer): boolean;
begin
- Result := (ARow > 0) and (ACol > 0) and (ARow <= RowCount) and (ACol <= ColumnCount);
+ Result := (ARow >= 0) and (ACol >= 0) and (ARow < RowCount) and (ACol < ColumnCount);
if Result then
DoCanSelectCell(ARow, ACol, Result);
end;
-function TfpgBaseGrid.DoDrawCellEvent(ARow, ACol: Longword; ARect: TfpgRect;
+function TfpgBaseGrid.DoDrawCellEvent(ARow, ACol: Integer; ARect: TfpgRect;
AFlags: TfpgGridDrawState): boolean;
begin
Result := True;
@@ -298,14 +299,14 @@ begin
FOnDrawCell(self, ARow, ACol, ARect, AFlags, Result);
end;
-procedure TfpgBaseGrid.DoCanSelectCell(const ARow, ACol: integer; var
+procedure TfpgBaseGrid.DoCanSelectCell(const ARow, ACol: Integer; var
ACanSelect: boolean);
begin
if Assigned(OnCanSelectCell) then
FOnCanSelectCell(self, ARow, ACol, ACanSelect);
end;
-procedure TfpgBaseGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState);
+procedure TfpgBaseGrid.DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState);
var
s: string;
begin
@@ -314,10 +315,10 @@ begin
s := 'Here lives Graeme!';
if not Enabled then
Canvas.SetTextColor(clShadow1);
- Canvas.DrawString(ARect.Left+1, ARect.Top+1, s);
+ Canvas.DrawText(ARect, s, [txtHCenter, txtVCenter]);
end;
-procedure TfpgBaseGrid.DrawHeader(ACol: Longword; ARect: TfpgRect; AFlags: integer);
+procedure TfpgBaseGrid.DrawHeader(ACol: Integer; ARect: TfpgRect; AFlags: integer);
var
s: string;
r: TfpgRect;
@@ -349,7 +350,7 @@ begin
fpgStyle.DrawString(Canvas, x, ARect.Top+1, s, Enabled);
end;
-procedure TfpgBaseGrid.DrawGrid(ARow, ACol: Longword; ARect: TfpgRect;
+procedure TfpgBaseGrid.DrawGrid(ARow, ACol: Integer; ARect: TfpgRect;
AFlags: integer);
begin
// default is inside bottom/right edge or cell
@@ -358,33 +359,33 @@ begin
Canvas.DrawLine(ARect.Right, ARect.Bottom, ARect.Right, ARect.Top-1); // cell right
end;
-procedure TfpgBaseGrid.SetFocusCol(const AValue: Longword);
+procedure TfpgBaseGrid.SetFocusCol(const AValue: Integer);
begin
if FFocusCol = AValue then
Exit; //==>
FFocusCol := AValue;
// apply min/max limit
- if FFocusCol < 1 then
- FFocusCol := 1;
- if FFocusCol > ColumnCount then
- FFocusCol := ColumnCount;
+ if FFocusCol < 0 then
+ FFocusCol := 0;
+ if FFocusCol > ColumnCount-1 then
+ FFocusCol := ColumnCount-1;
FollowFocus;
CheckFocusChange;
end;
-procedure TfpgBaseGrid.SetFocusRow(const AValue: Longword);
+procedure TfpgBaseGrid.SetFocusRow(const AValue: Integer);
begin
if FFocusRow = AValue then
Exit; //==>
FFocusRow := AValue;
// apply min/max limit
- if FFocusRow < 1 then
- FFocusRow := 1;
- if FFocusRow > RowCount then
- FFocusRow := RowCount;
+ if FFocusRow < 0 then
+ FFocusRow := 0;
+ if FFocusRow > RowCount-1 then
+ FFocusRow := RowCount-1;
FollowFocus;
CheckFocusChange;
@@ -422,7 +423,7 @@ begin
end;
// Return the fully visible lines only. Partial lines not counted
-function TfpgBaseGrid.VisibleLines: Longword;
+function TfpgBaseGrid.VisibleLines: Integer;
var
hh: integer;
begin
@@ -432,7 +433,7 @@ begin
hh := 0;
if ShowHeader then
hh := hh + FHeaderHeight+1;
- Result := (Height - (2*FMargin) - hh) div (FDefaultRowHeight);
+ Result := (Height - (2*FMargin) - hh) div FDefaultRowHeight;
end;
function TfpgBaseGrid.VisibleWidth: integer;
@@ -457,14 +458,14 @@ begin
Result := Height - (FMargin*2) - sw;
end;
-procedure TfpgBaseGrid.SetFirstRow(const AValue: Longword);
+procedure TfpgBaseGrid.SetFirstRow(const AValue: Integer);
begin
if FFirstRow = AValue then
- Exit;
- if AValue < ((RowCount - VisibleLines) + 1) then
+ Exit; //==>
+ if AValue < ((RowCount - VisibleLines)) then
FFirstRow := AValue
else
- FFirstRow := (RowCount - VisibleLines) + 1;
+ FFirstRow := (RowCount - VisibleLines);
UpdateScrollBars;
RePaint;
end;
@@ -482,7 +483,7 @@ begin
vw := VisibleWidth;
cw := 0;
- for i := 1 to ColumnCount do
+ for i := 0 to ColumnCount-1 do
cw := cw + ColumnWidth[i];
// This needs improving while resizing
@@ -491,7 +492,7 @@ begin
else
begin
FHScrollBar.Visible := False;
- FFirstCol := 1;
+ FFirstCol := 0;
end;
// This needs improving while resizing
@@ -500,18 +501,18 @@ begin
else
begin
FVScrollBar.Visible := False;
- FFirstRow := 1;
+ FFirstRow := 0;
end;
if FVScrollBar.Visible then
begin
Dec(HWidth, FVScrollBar.Width);
- FVScrollBar.Min := 1;
+ FVScrollBar.Min := 0;
if RowCount > 0 then
FVScrollBar.SliderSize := VisibleLines / RowCount
else
FVScrollBar.SliderSize := 0;
- FVScrollBar.Max := RowCount-VisibleLines+1;
+ FVScrollBar.Max := RowCount-VisibleLines;
FVScrollBar.Position := FFirstRow;
FVScrollBar.RepaintSlider;
end;
@@ -519,9 +520,9 @@ begin
if FHScrollBar.Visible then
begin
Dec(VHeight, FHScrollBar.Height);
- FHScrollBar.Min := 1;
+ FHScrollBar.Min := 0;
FHScrollBar.SliderSize := 0.2;
- FHScrollBar.Max := ColumnCount;
+ FHScrollBar.Max := ColumnCount-1;
FHScrollBar.Position := FFirstCol;
FHScrollBar.RepaintSlider;
end;
@@ -538,7 +539,7 @@ begin
FHScrollBar.UpdateWindowPosition;
end;
-function TfpgBaseGrid.GetHeaderText(ACol: Longword): string;
+function TfpgBaseGrid.GetHeaderText(ACol: Integer): string;
begin
Result := 'Head ' + IntToStr(ACol);
end;
@@ -547,8 +548,8 @@ procedure TfpgBaseGrid.HandlePaint;
var
r: TfpgRect;
r2: TfpgRect;
- col: Longword;
- row: Longword;
+ col: Integer;
+ row: Integer;
clipr: TfpgRect; // clip rectangle
drawstate: TfpgGridDrawState;
begin
@@ -573,7 +574,7 @@ begin
// Drawing horizontal headers
r.Height := FHeaderHeight;
Canvas.SetFont(FHeaderFont);
- for col := FFirstCol to ColumnCount do
+ for col := FFirstCol to ColumnCount-1 do
begin
r.Width := ColumnWidth[col];
Canvas.SetClipRect(clipr);
@@ -592,14 +593,13 @@ begin
r.Height := DefaultRowHeight;
Canvas.SetFont(FFont);
- for row := FFirstRow to RowCount do
+ for row := FFirstRow to RowCount-1 do
begin
r.Left := FMargin;
- for col := FFirstCol to ColumnCount do
+ for col := FFirstCol to ColumnCount-1 do
begin
r.Width := ColumnWidth[col];
Canvas.SetClipRect(clipr);
-// Canvas.SetClipRect(r);
if (row = FFocusRow) and (RowSelect or (col = FFocusCol)) then
begin
@@ -684,8 +684,6 @@ end;
procedure TfpgBaseGrid.HandleShow;
begin
inherited HandleShow;
-// if (csDesigning in ComponentState) then
-// Exit;
if (csLoading in ComponentState) then
Exit;
UpdateScrollBars;
@@ -703,7 +701,7 @@ procedure TfpgBaseGrid.HandleKeyPress(var keycode: word;
var shiftstate: TShiftState; var consumed: boolean);
var
w: integer;
- r: Longword;
+ r: integer;
begin
consumed := True;
case keycode of
@@ -765,10 +763,10 @@ begin
keyPageUp:
begin
r := FFocusRow-VisibleLines;
- if r < 1 then
- r := 1;
+ if r < 0 then
+ r := 0;
- if (FFocusRow <> 1) and CanSelectCell(r, FFocusCol) then
+ if (FFocusRow <> 0) and CanSelectCell(r, FFocusCol) then
begin
FFocusRow := r;
FollowFocus;
@@ -779,10 +777,10 @@ begin
keyPageDown:
begin
r := FFocusRow+VisibleLines;
- if r > RowCount then
- r := RowCount;
+ if r > (RowCount-1) then
+ r := RowCount-1;
- if (FFocusRow <> RowCount) and CanSelectCell(r, FFocusCol) then
+ if (FFocusRow <> (RowCount-1)) and CanSelectCell(r, FFocusCol) then
begin
FFocusRow := r;
FollowFocus;
@@ -794,16 +792,16 @@ begin
begin
if FRowSelect then
begin
- if (FFocusRow <> 1) and CanSelectCell(1, FFocusCol) then
+ if (FFocusRow <> 0) and CanSelectCell(0, FFocusCol) then
begin
- FFocusRow := 1;
+ FFocusRow := 0;
FollowFocus;
RePaint;
end;
end
- else if (FFocusCol <> 1) and CanSelectCell(FFocusRow, 1) then
+ else if (FFocusCol <> 0) and CanSelectCell(FFocusRow, 0) then
begin
- FFocusCol := 1;
+ FFocusCol := 0;
FollowFocus;
RePaint;
end;
@@ -813,16 +811,16 @@ begin
begin
if FRowSelect then
begin
- if (FFocusRow <> RowCount) and CanSelectCell(RowCount, FFocusCol) then
+ if (FFocusRow <> (RowCount-1)) and CanSelectCell(RowCount-1, FFocusCol) then
begin
- FFocusRow := RowCount;
+ FFocusRow := RowCount-1;
FollowFocus;
RePaint;
end;
end
- else if (FFocusCol <> ColumnCount) and CanSelectCell(FFocusRow, ColumnCount) then
+ else if (FFocusCol <> (ColumnCount-1)) and CanSelectCell(FFocusRow, ColumnCount-1) then
begin
- FFocusCol := ColumnCount;
+ FFocusCol := ColumnCount-1;
FollowFocus;
RePaint;
end;
@@ -840,8 +838,8 @@ end;
procedure TfpgBaseGrid.HandleMouseScroll(x, y: integer; shiftstate: TShiftState; delta: smallint);
var
- lRow: Longword;
- lCol: Longword;
+ lRow: Integer;
+ lCol: Integer;
begin
inherited HandleMouseScroll(x, y, shiftstate, delta);
@@ -851,27 +849,28 @@ begin
if delta > 0 then // scroll down
inc(FFirstRow, abs(delta))
else // scroll up
- dec(FFirstRow, abs(delta));
+ if FFirstRow > 0 then
+ dec(FFirstRow, abs(delta));
// apply limits
- if FFirstRow > RowCount - VisibleLines + 1 then
- FFirstRow := RowCount - VisibleLines + 1;
- if FFirstRow < 1 then
- FFirstRow := 1;
+ if FFirstRow > RowCount - VisibleLines then
+ FFirstRow := RowCount - VisibleLines;
+ if FFirstRow < 0 then
+ FFirstRow := 0;
// scroll left/right
// If vertical scrollbar is not visible, but
// horizontal is. Mouse wheel will scroll horizontally. :)
- if FHScrollBar.Visible and (not FVScrollBar.Visible) then
+ if FHScrollBar.Visible and (not FVScrollBar.Visible) then
begin
if delta > 0 then // scroll right
begin
- if FFirstCol < ColumnCount then
+ if FFirstCol < (ColumnCount-1) then
inc(FFirstCol);
end
else
begin
- if FFirstCol > 1 then
+ if FFirstCol > 0 then
dec(FFirstCol);
end;
end;
@@ -892,7 +891,7 @@ var
begin
inherited HandleMouseMove(x, y, btnstate, shiftstate);
- if (ColumnCount < 0) or (RowCount < 1) then
+ if (ColumnCount = 0) or (RowCount = 0) then
Exit; //==>
if FColResizing then
@@ -916,7 +915,7 @@ begin
if (y <= FMargin + hh) then // we are over the Header row
begin
cw := 0;
- for n := FFirstCol to ColumnCount do
+ for n := FFirstCol to ColumnCount-1 do
begin
inc(cw, ColumnWidth[n]);
// Resizing is enabled 4 pixel either way of the cell border
@@ -955,15 +954,15 @@ end;
procedure TfpgBaseGrid.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
var
hh: integer;
- n: Longword;
+ n: Integer;
cw: integer;
nw: integer;
- prow: Longword;
- pcol: Longword;
+ prow: Integer;
+ pcol: Integer;
begin
inherited HandleLMouseDown(x, y, shiftstate);
- if (ColumnCount < 0) or (RowCount < 1) then
+ if (ColumnCount = 0) or (RowCount = 0) then
Exit; //==>
pcol := FFocusCol;
@@ -979,7 +978,7 @@ begin
begin
{$IFDEF DEBUG} Writeln('header click...'); {$ENDIF}
cw := 0;
- for n := FFirstCol to ColumnCount do
+ for n := FFirstCol to ColumnCount-1 do
begin
inc(cw, ColumnWidth[n]);
if (x >= (FMargin+cw - 4)) and (x <= (FMargin+cw + 4)) then
@@ -1031,23 +1030,23 @@ end;
procedure TfpgBaseGrid.FollowFocus;
var
- n: Longword;
+ n: Integer;
w: TfpgCoord;
begin
- if (RowCount > 0) and (FFocusRow < 1) then
- FFocusRow := 1;
- if FFocusRow > RowCount then
- FFocusRow := RowCount;
+ if (RowCount > 0) and (FFocusRow < 0) then
+ FFocusRow := 0;
+ if FFocusRow > RowCount-1 then
+ FFocusRow := RowCount-1;
- if (ColumnCount > 0) and (FFocusCol < 1) then
- FFocusCol := 1;
- if FFocusCol > ColumnCount then
- FFocusCol := ColumnCount;
+ if (ColumnCount > 0) and (FFocusCol < 0) then
+ FFocusCol := 0;
+ if FFocusCol > ColumnCount-1 then
+ FFocusCol := ColumnCount-1;
- if FFirstRow < 1 then
- FFirstRow := 1;
- if FFirstCol < 1 then
- FFirstCol := 1;
+ if FFirstRow < 0 then
+ FFirstRow := 0;
+ if FFirstCol < 0 then
+ FFirstCol := 0;
if FFocusRow < FFirstRow then
FFirstRow := FFocusRow
@@ -1086,12 +1085,12 @@ begin
Focusable := True;
Width := 120;
Height := 80;
- FFocusCol := 1;
- FPrevCol := 0;
- FFocusRow := 1;
- FPrevRow := 0;
- FFirstRow := 1;
- FFirstCol := 1;
+ FFocusCol := 0;
+ FPrevCol := -1;
+ FFocusRow := 0;
+ FPrevRow := -1;
+ FFirstRow := 0;
+ FFirstCol := 0;
FMargin := 2;
FShowHeader := True;
FShowGrid := True;
@@ -1161,23 +1160,23 @@ begin
end;
end;
-procedure TfpgBaseGrid.MouseToCell(X, Y: Integer; var ACol, ARow: Longword);
+procedure TfpgBaseGrid.MouseToCell(X, Y: Integer; var ACol, ARow: Integer);
var
hh: integer;
cw: integer;
- n: Longword;
+ n: Integer;
begin
if ShowHeader then
hh := FHeaderHeight+1
else
hh := 0;
- ARow := FFirstRow + Longword((y - FMargin - hh) div FDefaultRowHeight);
- if ARow > RowCount then
- ARow := RowCount;
+ ARow := FFirstRow + ((y - FMargin - hh) div FDefaultRowHeight);
+ if ARow > RowCount-1 then
+ ARow := RowCount-1;
cw := 0;
- for n := FFirstCol to ColumnCount do
+ for n := FFirstCol to ColumnCount-1 do
begin
inc(cw, ColumnWidth[n]);
if FMargin+cw >= x then
diff --git a/src/gui/gui_bevel.pas b/src/gui/gui_bevel.pas
index d5458f1f..f62e18af 100644
--- a/src/gui/gui_bevel.pas
+++ b/src/gui/gui_bevel.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_button.pas b/src/gui/gui_button.pas
index 46ad9aea..66cd514c 100644
--- a/src/gui/gui_button.pas
+++ b/src/gui/gui_button.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_checkbox.pas b/src/gui/gui_checkbox.pas
index 5458a955..463ea405 100644
--- a/src/gui/gui_checkbox.pas
+++ b/src/gui/gui_checkbox.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_combobox.pas b/src/gui/gui_combobox.pas
index f103c13a..0f251357 100644
--- a/src/gui/gui_combobox.pas
+++ b/src/gui/gui_combobox.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -60,7 +60,6 @@ type
TfpgComboOption = (wo_FocusItemTriggersOnChange);
TfpgComboOptions = set of TfpgComboOption;
- { TfpgBaseComboBox }
TfpgBaseComboBox = class(TfpgWidget)
private
@@ -79,8 +78,10 @@ type
FFocusItem: integer;
FItems: TStringList;
procedure InternalOnClose(Sender: TObject);
+ procedure InternalItemsChanged(Sender: TObject); virtual;
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
procedure DoOnChange; virtual;
+ procedure DoOnDropDown; virtual;
procedure DoDropDown; virtual; abstract;
procedure DoOnCloseUp; virtual;
function GetDropDownPos(AParent, AComboBox, ADropDown: TfpgWidget): TfpgRect; virtual;
@@ -99,8 +100,6 @@ type
end;
- { TfpgAbstractComboBox }
-
TfpgAbstractComboBox = class(TfpgBaseComboBox)
private
procedure InternalBtnClick(Sender: TObject);
@@ -193,9 +192,9 @@ begin
Result := FFont.FontDesc;
end;
-{ Focusitem is 1 based and NOT 0 based like the Delphi ItemIndex property.
- So at startup, FocusItem = 0 which means nothing is selected. If FocusItem = 1
- it means the first item is selected etc. }
+{ Focusitem is 0 based like the Delphi ItemIndex property.
+ So at startup, FocusItem = -1 which means nothing is selected. If
+ FocusItem = 0 it means the first item is selected etc. }
procedure TfpgBaseComboBox.SetFocusItem(const AValue: integer);
begin
if FFocusItem = AValue then
@@ -203,10 +202,10 @@ begin
FFocusItem := AValue;
// do some limit check corrections
- if FFocusItem < 0 then
- FFocusItem := 0 // nothing is selected
- else if FFocusItem > FItems.Count then
- FFocusItem := FItems.Count;
+ if FFocusItem < -1 then
+ FFocusItem := -1 // nothing is selected
+ else if FFocusItem > FItems.Count-1 then
+ FFocusItem := FItems.Count-1;
RePaint;
if wo_FocusItemTriggersOnChange in FOptions then
@@ -218,7 +217,7 @@ begin
FFont.Free;
FFont := fpgGetFont(AValue);
if Height < FFont.Height + 6 then
- Height:= FFont.Height + 6;
+ Height := FFont.Height + 6;
RePaint;
end;
@@ -227,6 +226,12 @@ begin
DoOnCloseUp;
end;
+procedure TfpgBaseComboBox.InternalItemsChanged(Sender: TObject);
+begin
+ if FItems.Count = 0 then
+ FocusItem := -1;
+end;
+
procedure TfpgBaseComboBox.HandleKeyPress(var keycode: word;
var shiftstate: TShiftState; var consumed: boolean);
var
@@ -267,6 +272,12 @@ begin
FOnChange(self);
end;
+procedure TfpgBaseComboBox.DoOnDropDown;
+begin
+ if Assigned(OnDropDown) then
+ FOnDropDown(self);
+end;
+
procedure TfpgBaseComboBox.DoOnCloseUp;
begin
if Assigned(OnCloseUp) then
@@ -298,18 +309,15 @@ begin
Result.Left := AComboBox.Left;
Result.Width := ADropDown.Width;
-
-// writeln('H:', fpgApplication.ScreenHeight, ' W:', fpgApplication.ScreenWidth);
-// writeln('Point x:', pt.x, ' y:', pt.y);
-// PrintRect(Result);
end;
constructor TfpgBaseComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDropDownCount := 8;
- FFocusItem := 0; // nothing is selected
+ FFocusItem := -1; // nothing is selected
FItems := TStringList.Create;
+ FItems.OnChange := @InternalItemsChanged;
FFont := fpgGetFont('#List');
FOptions := [];
FOnChange := nil;
@@ -329,12 +337,12 @@ procedure TComboboxDropdownWindow.SetFirstItem;
var
i: integer;
begin
- // If FocusItem is less than DropDownCount FirsItem = 1
- if ListBox.FocusItem <= FCallerWidget.DropDownCount then
- ListBox.SetFirstItem(1)
+ // If FocusItem is less than DropDownCount FirsItem = 0
+ if ListBox.FocusItem+1 <= FCallerWidget.DropDownCount then
+ ListBox.SetFirstItem(0)
// If FocusItem is in the last DropDownCount of items
- else if (ListBox.ItemCount - ListBox.FocusItem) < FCallerWidget.DropDownCount then
- ListBox.SetFirstItem(ListBox.ItemCount - FCallerWidget.DropDownCount+1)
+ else if (ListBox.ItemCount - (ListBox.FocusItem+1)) < FCallerWidget.DropDownCount then
+ ListBox.SetFirstItem(ListBox.ItemCount - FCallerWidget.DropDownCount)
else
// Try and centre FocusItem in the drow down window
ListBox.SetFirstItem(ListBox.FocusItem - (FCallerWidget.DropDownCount div 2));
@@ -405,15 +413,15 @@ end;
function TfpgAbstractComboBox.GetText: string;
begin
- if (FocusItem > 0) and (FocusItem <= FItems.Count) then
- Result := Items.Strings[FocusItem-1]
+ if (FocusItem >= 0) and (FocusItem < FItems.Count) then
+ Result := Items.Strings[FocusItem]
else
Result := '';
end;
function TfpgAbstractComboBox.HasText: boolean;
begin
- Result := FocusItem > 0;
+ Result := FocusItem >= 0;
end;
procedure TfpgAbstractComboBox.DoDropDown;
@@ -449,8 +457,8 @@ begin
r := GetDropDownPos(Parent, self, ddw); // find suitable position
ddw.Height := r.Height; // in case GetDropDownPos resized us
- if (FItems.Count > 0) and Assigned(OnDropDown) then
- OnDropDown(self);
+ if (FItems.Count > 0) then
+ DoOnDropDown;
ddw.OnClose := @InternalOnClose;
ddw.ShowAt(Parent, r.Left, r.Top);
@@ -477,25 +485,25 @@ var
i: integer;
begin
if AValue = '' then
- SetFocusItem(0) // nothing selected
+ SetFocusItem(-1) // nothing selected
else
begin
- for i := 0 to FItems.Count - 1 do
+ for i := 0 to FItems.Count-1 do
begin
if SameText(Items.Strings[i], AValue) then
begin
- SetFocusItem(i+1); // our FocusItem is 1-based. TStringList is 0-based.
- Exit;
+ SetFocusItem(i);
+ Exit; //==>
end;
end;
// if we get here, we didn't find a match
- SetFocusItem(0);
+ SetFocusItem(-1);
end;
end;
procedure TfpgAbstractComboBox.SetWidth(const AValue: TfpgCoord);
begin
- inherited;
+ inherited SetWidth(AValue);
CalculateInternalButtonRect;
RePaint;
end;
@@ -514,7 +522,7 @@ end;
procedure TfpgAbstractComboBox.SetHeight(const AValue: TfpgCoord);
begin
- inherited;
+ inherited SetHeight(AValue);
CalculateInternalButtonRect;
RePaint;
end;
@@ -541,17 +549,17 @@ var
NewIndex: Integer;
begin
if (FDropDown <> nil) and FDropDown.Visible then
- Exit;
+ Exit; //==>
if Items.Count < 1 then
- Exit;
+ Exit; //==>
NewIndex := FocusItem + Delta;
- if NewIndex > Items.Count then
- NewIndex := Items.Count;
+ if NewIndex > Items.Count-1 then
+ NewIndex := Items.Count-1;
- if NewIndex < 1 then
- NewIndex := 1;
+ if NewIndex < 0 then
+ NewIndex := 0;
if NewIndex <> FocusItem then
begin
@@ -651,8 +659,8 @@ begin
FBackgroundColor := clBoxColor;
FTextColor := Parent.TextColor;
FWidth := 120;
- FHeight := Font.Height + 6;
FMargin := 3;
+ FHeight := Font.Height + (2*FMargin);
FFocusable := True;
FBtnPressed := False;
@@ -667,7 +675,7 @@ end;
procedure TfpgAbstractComboBox.Update;
begin
- FFocusItem := 0;
+ FFocusItem := -1;
Repaint;
end;
diff --git a/src/gui/gui_customgrid.pas b/src/gui/gui_customgrid.pas
index 53123cec..42f41fe2 100644
--- a/src/gui/gui_customgrid.pas
+++ b/src/gui/gui_customgrid.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -56,38 +56,34 @@ type
end;
- { TfpgCustomGrid }
-
TfpgCustomGrid = class(TfpgBaseGrid)
protected
- FRowCount: Longword;
+ FRowCount: Integer;
FColumns: TList;
procedure SetTextColor(const AValue: TfpgColor); override;
function GetColumns(AIndex: integer): TfpgGridColumn; virtual;
procedure DoDeleteColumn(ACol: integer); virtual;
procedure DoSetRowCount(AValue: integer); virtual;
function DoCreateColumnClass: TfpgGridColumn; virtual;
- function GetColumnCount: Longword; override;
- procedure SetColumnCount(const AValue: Longword); virtual;
- function GetRowCount: Longword; override;
- procedure SetRowCount(const AValue: LongWord); virtual;
- function GetColumnWidth(ACol: Longword): integer; override;
- procedure SetColumnWidth(ACol: Longword; const AValue: integer); override;
- function GetColumnBackgroundColor(ACol: Longword): TfpgColor; override;
- procedure SetColumnBackgroundColor(ACol: Longword; const AValue: TfpgColor); override;
- function GetColumnTextColor(ACol: Longword): TfpgColor; override;
- procedure SetColumnTextColor(ACol: Longword; const AValue: TfpgColor); override;
- function GetHeaderText(ACol: Longword): string; override;
- property RowCount: Longword read GetRowCount write SetRowCount;
- property ColumnCount: Longword read GetColumnCount write SetColumnCount;
- { Columns AIndex is 1-based. }
+ function GetColumnCount: Integer; override;
+ procedure SetColumnCount(const AValue: Integer); virtual;
+ function GetRowCount: Integer; override;
+ procedure SetRowCount(const AValue: Integer); virtual;
+ function GetColumnWidth(ACol: Integer): integer; override;
+ procedure SetColumnWidth(ACol: Integer; const AValue: integer); override;
+ function GetColumnBackgroundColor(ACol: Integer): TfpgColor; override;
+ procedure SetColumnBackgroundColor(ACol: Integer; const AValue: TfpgColor); override;
+ function GetColumnTextColor(ACol: Integer): TfpgColor; override;
+ procedure SetColumnTextColor(ACol: Integer; const AValue: TfpgColor); override;
+ function GetHeaderText(ACol: Integer): string; override;
+ property RowCount: Integer read GetRowCount write SetRowCount;
+ property ColumnCount: Integer read GetColumnCount write SetColumnCount;
property Columns[AIndex: integer]: TfpgGridColumn read GetColumns;
// property AlternateColor: TColor read FAlternateColor write SetAlternateColor stored IsAltColorStored;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function AddColumn(ATitle: string; AWidth: integer): TfpgGridColumn; virtual;
- { AIndex is 1-based. }
procedure DeleteColumn(AIndex: integer); virtual;
procedure MoveColumn(oldindex, newindex: integer); virtual;
end;
@@ -106,7 +102,7 @@ end;
{ TfpgCustomGrid }
-function TfpgCustomGrid.GetRowCount: Longword;
+function TfpgCustomGrid.GetRowCount: Integer;
begin
Result := FRowCount;
end;
@@ -125,16 +121,16 @@ end;
function TfpgCustomGrid.GetColumns(AIndex: integer): TfpgGridColumn;
begin
- if (AIndex < 1) or (AIndex > FColumns.Count) then
+ if (AIndex < 0) or (AIndex > FColumns.Count-1) then
Result := nil
else
- Result := TfpgGridColumn(FColumns[AIndex-1]);
+ Result := TfpgGridColumn(FColumns[AIndex]);
end;
procedure TfpgCustomGrid.DoDeleteColumn(ACol: integer);
begin
- TfpgGridColumn(FColumns.Items[ACol-1]).Free;
- FColumns.Delete(ACol-1);
+ TfpgGridColumn(FColumns.Items[ACol]).Free;
+ FColumns.Delete(ACol);
end;
procedure TfpgCustomGrid.DoSetRowCount(AValue: integer);
@@ -147,14 +143,14 @@ begin
Result := TfpgGridColumn.Create;
end;
-function TfpgCustomGrid.GetColumnCount: Longword;
+function TfpgCustomGrid.GetColumnCount: Integer;
begin
Result := FColumns.Count;
end;
-procedure TfpgCustomGrid.SetColumnCount(const AValue: Longword);
+procedure TfpgCustomGrid.SetColumnCount(const AValue: Integer);
var
- n: Longword;
+ n: Integer;
begin
n := FColumns.Count;
if (n = AValue) or (AValue < 0) then
@@ -171,6 +167,7 @@ begin
end
else
begin
+ // removing columns
while n > AValue do
begin
DoDeleteColumn(n);
@@ -184,35 +181,34 @@ begin
RePaint;
end;
-procedure TfpgCustomGrid.SetRowCount(const AValue: Longword);
+procedure TfpgCustomGrid.SetRowCount(const AValue: Integer);
begin
if FRowCount = AValue then
Exit; //==>
FRowCount := AValue;
- if FocusRow > FRowCount then
- begin
- FocusRow := FRowCount;
- end;
+ if FocusRow > FRowCount-1 then
+ FocusRow := FRowCount-1;
DoSetRowCount(AValue); // could be implemented by descendants
+
if csUpdating in ComponentState then
Exit;
UpdateScrollBars;
RePaint;
end;
-function TfpgCustomGrid.GetColumnWidth(ACol: Longword): integer;
+function TfpgCustomGrid.GetColumnWidth(ACol: Integer): integer;
begin
- if (ACol > 0) and (ACol <= ColumnCount) then
- Result := TfpgGridColumn(FColumns[ACol-1]).Width
+ if (ACol >= 0) and (ACol < ColumnCount) then
+ Result := TfpgGridColumn(FColumns[ACol]).Width
else
result := DefaultColWidth;
end;
-procedure TfpgCustomGrid.SetColumnWidth(ACol: Longword; const AValue: integer);
+procedure TfpgCustomGrid.SetColumnWidth(ACol: Integer; const AValue: integer);
var
lCol: TfpgGridColumn;
begin
- lCol := TfpgGridColumn(FColumns[ACol-1]);
+ lCol := TfpgGridColumn(FColumns[ACol]);
if lCol.Width <> AValue then
begin
@@ -225,19 +221,19 @@ begin
end;
end;
-function TfpgCustomGrid.GetColumnBackgroundColor(ACol: Longword): TfpgColor;
+function TfpgCustomGrid.GetColumnBackgroundColor(ACol: Integer): TfpgColor;
begin
- if (ACol > 0) and (ACol <= ColumnCount) then
- Result := TfpgGridColumn(FColumns[ACol-1]).FBackgroundColor
+ if (ACol >= 0) and (ACol < ColumnCount) then
+ Result := TfpgGridColumn(FColumns[ACol]).FBackgroundColor
else
result := BackgroundColor;
end;
-procedure TfpgCustomGrid.SetColumnBackgroundColor(ACol: Longword; const AValue: TfpgColor);
+procedure TfpgCustomGrid.SetColumnBackgroundColor(ACol: Integer; const AValue: TfpgColor);
var
lCol: TfpgGridColumn;
begin
- lCol := TfpgGridColumn(FColumns[ACol-1]);
+ lCol := TfpgGridColumn(FColumns[ACol]);
if lCol.FBackgroundColor <> AValue then
begin
@@ -247,19 +243,19 @@ begin
end;
end;
-function TfpgCustomGrid.GetColumnTextColor(ACol: Longword): TfpgColor;
+function TfpgCustomGrid.GetColumnTextColor(ACol: Integer): TfpgColor;
begin
- if (ACol > 0) and (ACol <= ColumnCount) then
- Result := TfpgGridColumn(FColumns[ACol-1]).FTextColor
+ if (ACol >= 0) and (ACol < ColumnCount) then
+ Result := TfpgGridColumn(FColumns[ACol]).FTextColor
else
result := TextColor;
end;
-procedure TfpgCustomGrid.SetColumnTextColor(ACol: Longword; const AValue: TfpgColor);
+procedure TfpgCustomGrid.SetColumnTextColor(ACol: Integer; const AValue: TfpgColor);
var
lCol: TfpgGridColumn;
begin
- lCol := TfpgGridColumn(FColumns[ACol-1]);
+ lCol := TfpgGridColumn(FColumns[ACol]);
if lCol.FTextColor <> AValue then
begin
@@ -269,9 +265,9 @@ begin
end;
end;
-function TfpgCustomGrid.GetHeaderText(ACol: Longword): string;
+function TfpgCustomGrid.GetHeaderText(ACol: Integer): string;
begin
- Result := TfpgGridColumn(FColumns[ACol-1]).Title;
+ Result := TfpgGridColumn(FColumns[ACol]).Title;
end;
constructor TfpgCustomGrid.Create(AOwner: TComponent);
diff --git a/src/gui/gui_dialogs.pas b/src/gui/gui_dialogs.pas
index f7c2060b..62e87c80 100644
--- a/src/gui/gui_dialogs.pas
+++ b/src/gui/gui_dialogs.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -138,8 +138,6 @@ type
end;
- { TfpgFileDialog }
-
TfpgFileDialog = class(TfpgBaseDialog)
private
chlDir: TfpgComboBox;
@@ -159,7 +157,7 @@ type
procedure SetFilter(const Value: string);
function GetShowHidden: boolean;
procedure SetShowHidden(const Value: boolean);
- procedure ListChanged(Sender: TObject; ARow: Longword);
+ procedure ListChanged(Sender: TObject; ARow: Integer);
procedure GridDblClicked(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
procedure InitializeComponents;
procedure ProcessFilterString;
@@ -508,14 +506,13 @@ end;
procedure TfpgFontSelectDialog.CreateFontList;
var
fl: TStringList;
- i: integer;
begin
- lbFaces.Items.Clear;
+ lbFaces.BeginUpdate;
fl := fpgApplication.GetFontFaceList;
- for i := 0 to fl.Count-1 do
- lbFaces.Items.Add(fl[i]);
+ lbFaces.Items.Assign(fl);
fl.Free;
- lbFaces.FocusItem := 1;
+ lbFaces.FocusItem := 0;
+ lbFaces.EndUpdate;
end;
procedure TfpgFontSelectDialog.CreateFontAliasList;
@@ -523,12 +520,14 @@ var
fl: TStringList;
i: integer;
begin
- lbFaces.Items.Clear;
+ lbFaces.BeginUpdate;
fl := fpgGetNamedFontList;
+ lbFaces.Items.Clear;
for i := 0 to fl.Count-1 do
lbFaces.Items.Add(fl.Names[i]);
fl.Free;
- lbFaces.FocusItem := 1
+ lbFaces.FocusItem := 0;
+ lbFaces.EndUpdate;
end;
procedure TfpgFontSelectDialog.SetupUI(AMode: Byte);
@@ -537,23 +536,23 @@ begin
case FMode of
1: // Normal Fonts
begin
- lblSize.Enabled := True;
- lblTypeFace.Enabled := True;
- lbSize.Enabled := True;
- cbBold.Enabled := True;
- cbItalic.Enabled := True;
- cbUnderline.Enabled := True;
- cbAntiAlias.Enabled := True;
+ lblSize.Enabled := True;
+ lblTypeFace.Enabled := True;
+ lbSize.Enabled := True;
+ cbBold.Enabled := True;
+ cbItalic.Enabled := True;
+ cbUnderline.Enabled := True;
+ cbAntiAlias.Enabled := True;
end;
2: // Font Aliases
begin
- lblSize.Enabled := False;
- lblTypeFace.Enabled := False;
- lbSize.Enabled := False;
- cbBold.Enabled := False;
- cbItalic.Enabled := False;
- cbUnderline.Enabled := False;
- cbAntiAlias.Enabled := False;
+ lblSize.Enabled := False;
+ lblTypeFace.Enabled := False;
+ lbSize.Enabled := False;
+ cbBold.Enabled := False;
+ cbItalic.Enabled := False;
+ cbUnderline.Enabled := False;
+ cbAntiAlias.Enabled := False;
end;
end;
end;
@@ -589,7 +588,6 @@ procedure TfpgFontSelectDialog.SetFontDesc(Desc: string);
var
cp: integer;
c: char;
- i: integer;
token: string;
prop: string;
propval: string;
@@ -619,9 +617,9 @@ var
i: integer;
begin
lbCollection.FocusItem := lbCollection.ItemCount;
- for i := 1 to lbFaces.ItemCount do
+ for i := 0 to lbFaces.ItemCount-1 do
begin
- if SameText(lbFaces.Items[i-1], Desc) then
+ if SameText(lbFaces.Items[i], Desc) then
begin
lbFaces.FocusItem := i;
Exit; //==>
@@ -651,16 +649,13 @@ begin
cbAntiAlias.Checked := True;
NextToken;
- i := lbFaces.Items.IndexOf(token);
- if i >= 0 then
- lbFaces.FocusItem := i+1;
+ lbFaces.FocusItem := lbFaces.Items.IndexOf(token);
+
if c = '-' then
begin
NextC;
NextToken;
- i := lbSize.Items.IndexOf(token);
- if i >= 0 then
- lbSize.FocusItem := i+1;
+ lbSize.FocusItem := lbSize.Items.IndexOf(token);
end;
while c = ':' do
@@ -728,7 +723,7 @@ begin
Text := fpgAddColon(rsCollection);
end;
- { TODO : This need to be implemented at some stage. }
+ { TODO : This need to be fully implemented at some stage. }
lbCollection := TfpgListBox.Create(self);
with lbCollection do
begin
@@ -743,7 +738,7 @@ begin
Items.Add(rsCollectionSans);
Items.Add(rsCollectionSerif);
Items.Add(rsCollectionFontAliases);
- FocusItem := 1;
+ FocusItem := 0;
OnChange := @OnCollectionChanged;
// Enabled := False;
end;
@@ -779,7 +774,6 @@ begin
begin
Name := 'lbSize';
SetPosition(401, 28, 52, 236);
- { We need to improve this! }
Items.Add('6');
Items.Add('7');
Items.Add('8');
@@ -877,7 +871,7 @@ end;
{ TfpgFileDialog }
-procedure TfpgFileDialog.ListChanged(Sender: TObject; ARow: Longword);
+procedure TfpgFileDialog.ListChanged(Sender: TObject; ARow: Integer);
var
s: string;
begin
@@ -1049,10 +1043,7 @@ begin
ActiveWidget := grid;
FileName := '';
SetFilter(rsAllFiles + ' (*)|*');
- // we don't want chlFilter to call FilterChange
- chlFilter.OnChange := nil;
- chlFilter.FocusItem := 1;
- chlFilter.OnChange := @FilterChange; // restore event handler
+ chlFilter.FocusItem := 0;
end;
procedure TfpgFileDialog.HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean);
@@ -1213,13 +1204,13 @@ begin
// we don't want chlDir to call DirChange while populating items
chlDir.OnChange := nil;
chlDir.Items.Assign(grid.FileList.SpecialDirs);
- chlDir.FocusItem := grid.FileList.CurrentSpecialDir + 1;
+ chlDir.FocusItem := grid.FileList.CurrentSpecialDir;
chlDir.OnChange := @DirChange; // restore event handler
if fsel <> '' then
SelectFile(fsel)
else
- grid.FocusRow := 1;
+ grid.FocusRow := 0;
grid.Update;
grid.SetFocus;
@@ -1229,7 +1220,7 @@ function TfpgFileDialog.SelectFile(const AFilename: string): boolean;
var
n: integer;
begin
- for n := 1 to grid.FileList.Count do
+ for n := 0 to grid.FileList.Count-1 do
begin
if grid.FileList.Entry[n].Name = AFilename then
begin
@@ -1280,6 +1271,7 @@ begin
FFilterList.Add(fm);
end;
until (fs = '') or (fm = ''); { repeat/until }
+ chlFilter.FocusItem := 0; // first filter
// restore event handler
chlFilter.OnChange := @FilterChange;
end;
@@ -1289,8 +1281,8 @@ var
i: integer;
begin
i := chlFilter.FocusItem;
- if (i > 0) and (i <= FFilterList.Count) then
- Result := FFilterList[i-1]
+ if (i >= 0) and (i < FFilterList.Count) then
+ Result := FFilterList[i]
else
Result := '*';
end;
diff --git a/src/gui/gui_edit.pas b/src/gui/gui_edit.pas
index fd3d2ad7..ccfe5418 100644
--- a/src/gui/gui_edit.pas
+++ b/src/gui/gui_edit.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -75,6 +75,7 @@ type
FSelOffset: integer;
FCursorPos: integer; // Caret position (characters)
FCursorX: integer; // Caret position (pixels)
+ procedure DoOnChange; virtual;
procedure ShowDefaultPopupMenu(const x, y: integer; const shiftstate: TShiftState); virtual;
procedure HandlePaint; override;
procedure HandleResize(awidth, aheight: TfpgCoord); override;
@@ -457,8 +458,7 @@ begin
end;
if prevval <> Text then
- if Assigned(FOnChange) then
- FOnChange(self);
+ DoOnChange;
end;
if consumed then
@@ -855,6 +855,12 @@ begin
end;
end;
+procedure TfpgCustomEdit.DoOnChange;
+begin
+ if Assigned(FOnChange) then
+ FOnChange(self);
+end;
+
procedure TfpgCustomEdit.ShowDefaultPopupMenu(const x, y: integer;
const shiftstate: TShiftState);
var
diff --git a/src/gui/gui_editcombo.pas b/src/gui/gui_editcombo.pas
index a9c32cc9..fe5b1d89 100644
--- a/src/gui/gui_editcombo.pas
+++ b/src/gui/gui_editcombo.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -77,7 +77,6 @@ type
procedure InternalBtnClick(Sender: TObject);
procedure InternalListBoxSelect(Sender: TObject);
procedure CalculateInternalButtonRect;
- procedure MsgPopupClose(var msg: TfpgMessageRec); message FPGM_POPUPCLOSE;
protected
FMargin: integer;
FBtnPressed: Boolean;
@@ -253,7 +252,7 @@ end;
procedure TfpgAbstractEditCombo.SetAllowNew(const AValue: TAllowNew);
begin
if FAllowNew <> AValue then
- FAllowNew:= AValue;
+ FAllowNew := AValue;
end;
function TfpgAbstractEditCombo.GetText: string;
@@ -262,10 +261,10 @@ var
begin
if FAutoCompletion then
begin
- if (FocusItem > 0) and (FocusItem <= FItems.Count) then
+ if (FocusItem >= 0) and (FocusItem <= FItems.Count-1) then
begin
- FText := FItems.Strings[FocusItem-1];
- FSelectedItem:= FocusItem-1;
+ FText := FItems.Strings[FocusItem];
+ FSelectedItem:= FocusItem;
end
else
if FText <> '' then
@@ -290,32 +289,34 @@ begin
end;
case FAllowNew of
anNo:
- if FSelectedItem= -1 then
+ if FSelectedItem = -1 then
begin
UTF8Delete(FText, FCursorPos, 1);
Dec(FCursorPos);
end;
- anAsk,anYes:
- if FSelectedItem= -1 then
+
+ anAsk,
+ anYes:
+ if FSelectedItem = -1 then
begin
FNewItem:= True;
end;
- end;
- end;
+ end; { case }
+ end; { if/else }
FCursorPos := UTF8Length(FText);
FSelStart := FCursorPos;
Result := FText;
end
else
- if (FocusItem > 0) and (FocusItem <= FItems.Count) then
- Result := FItems.Strings[FocusItem-1]
+ if (FocusItem >= 0) and (FocusItem <= FItems.Count-1) then
+ Result := FItems.Strings[FocusItem]
else
Result := '';
end;
function TfpgAbstractEditCombo.HasText: boolean;
begin
- Result := FFocusItem > 0;
+ Result := FFocusItem >= 0;
end;
procedure TfpgAbstractEditCombo.DoDropDown;
@@ -337,7 +338,7 @@ begin
// Assign combobox text items to internal listbox
if FAutoCompletion then
begin
- for i := 0 to FItems.Count - 1 do
+ for i := 0 to FItems.Count-1 do
if SameText(UTF8Copy(FItems.Strings[i], 1, UTF8Length(FText)), FText) then
ddw.ListBox.Items.Add(FItems.Strings[i]);
end
@@ -360,8 +361,8 @@ begin
r := GetDropDownPos(Parent, self, ddw);
ddw.Height := r.Height;
- if (FItems.Count > 0) and Assigned(OnDropDown) then
- OnDropDown(self);
+ if (FItems.Count > 0) then
+ DoOnDropDown;
ddw.OnClose := @InternalOnClose;
ddw.ShowAt(Parent, r.Left, r.Top);
@@ -386,10 +387,9 @@ var
begin
for i := 0 to Items.Count-1 do
begin
- // Items is 0-based and FocusItem is 1-based
- if Items[i]= TDropDownWindow(FDropDown).ListBox.Items[TDropDownWindow(FDropDown).ListBox.FocusItem-1] then
+ if Items[i]= TDropDownWindow(FDropDown).ListBox.Items[TDropDownWindow(FDropDown).ListBox.FocusItem] then
begin
- FocusItem := i+1;
+ FocusItem := i;
Break;
end;
end;
@@ -406,26 +406,26 @@ begin
if AValue = '' then
begin
FText:= '';
- FocusItem := 0; // nothing selected
+ FocusItem := -1; // nothing selected
end
else
begin
- for i := 0 to Items.Count - 1 do
+ for i := 0 to Items.Count-1 do
begin
if SameText(UTF8Copy(Items.Strings[i], 1, UTF8Length(AVAlue)), AValue) then
begin
- FocusItem := i+1; // our FocusItem is 1-based. TStringList is 0-based.
- Exit;
+ FocusItem := i;
+ Exit; //==>
end;
end;
// if we get here, we didn't find a match
- FocusItem := 0;
+ FocusItem := -1;
end;
end;
procedure TfpgAbstractEditCombo.SetWidth(const AValue: TfpgCoord);
begin
- inherited;
+ inherited SetWidth(AValue);
CalculateInternalButtonRect;
RePaint;
end;
@@ -436,14 +436,9 @@ begin
Height-4);
end;
-procedure TfpgAbstractEditCombo.MsgPopupClose(var msg: TfpgMessageRec);
-begin
- DoDropDown;
-end;
-
procedure TfpgAbstractEditCombo.SetHeight(const AValue: TfpgCoord);
begin
- inherited;
+ inherited SetHeight(AValue);
CalculateInternalButtonRect;
RePaint;
end;
@@ -451,7 +446,7 @@ end;
procedure TfpgAbstractEditCombo.HandleKeyChar(var AText: TfpgChar;
var shiftstate: TShiftState; var consumed: Boolean);
var
- s: string;
+ s: TfpgChar;
prevval: string;
begin
prevval := FText;
@@ -459,7 +454,7 @@ begin
consumed := False;
// Handle only printable characters
- // Note: This is not UTF-8 compliant!
+ // Note: This is now UTF-8 compliant!
if (Ord(AText[1]) > 31) and (Ord(AText[1]) < 127) or (Length(AText) > 1) then
begin
if (FMaxLength <= 0) or (UTF8Length(FText) < FMaxLength) then
@@ -493,34 +488,34 @@ begin
keyBackSpace:
begin
if HasText then
- FocusItem := 0;
+ FocusItem := -1;
if FCursorPos > 0 then
begin
UTF8Delete(FText, FCursorPos, 1);
Dec(FCursorPos);
hasChanged := True;
- end;// backspace
+ end;
end;
keyDelete:
begin
if HasText then
- FocusItem := 0;
+ FocusItem := -1;
FSelectedItem := -2; // detects delete has been pressed
hasChanged := True;
end;
- keyReturn, keyPEnter:
+ keyReturn,
+ keyPEnter:
begin
if FSelectedItem > -1 then
SetText(Items[FSelectedItem])
else
SetText(FText);
- FSelectedItem:= -4; // detects return has been pressed (must be 4 due to number of repaints)
+ FSelectedItem := -4; // detects return has been pressed (must be 4 due to number of repaints)
if FNewItem and (FAllowNew = anYes) then
FItems.Add(FText);
- if Assigned(FDropDown) then
- FDropDown.Close;
+ DoOnDropDown;
end;
else
@@ -606,6 +601,17 @@ var
end;
tw := Font.TextWidth(UTF8Copy(Items[FSelectedItem], 1, st));
tw2 := Font.TextWidth(UTF8Copy(Items[FSelectedItem], 1, st + len));
+
+ // XOR on Anti-aliased text doesn't look to good. Lets try standard
+ // Blue & White like what was doen in TfpgEdit.
+{ Canvas.SetColor(lcolor);
+ Canvas.FillRectangle(-FDrawOffset + FMargin + tw, 3, tw2 - tw, Font.Height);
+ r.SetRect(-FDrawOffset + FMargin + tw, 3, tw2 - tw, Font.Height);
+ Canvas.AddClipRect(r);
+ Canvas.SetTextColor(clWhite);
+ fpgStyle.DrawString(Canvas, -FDrawOffset + FMargin, 3, Text, Enabled);
+ Canvas.ClearClipRect;
+}
Canvas.XORFillRectangle(fpgColorToRGB(lcolor) xor $FFFFFF,
-FDrawOffset + FMargin + tw, 3, tw2 - tw, Font.Height);
end;
@@ -663,23 +669,23 @@ begin
begin
if HasText then
begin
- FSelOffset:= 0;
+ FSelOffset := 0;
fpgStyle.DrawString(Canvas, FMargin+1, FMargin, Text, Enabled);
end
else
begin
- Texte:= Text;
+ Texte := Text;
if Texte <> '' then
if FSelectedItem > -1 then
begin
- FSelOffset:= Font.TextWidth(UTF8Copy(Items[FSelectedItem], UTF8Length(FText) + 1,
+ FSelOffset := Font.TextWidth(UTF8Copy(Items[FSelectedItem], UTF8Length(FText) + 1,
UTF8Length(Items[FSelectedItem]) - UTF8Length(FText)));
fpgStyle.DrawString(Canvas, FMargin+1, FMargin, FText + UTF8Copy(Items[FSelectedItem],
UTF8Length(FText) + 1, UTF8Length(Items[FSelectedItem]) - UTF8Length(FText)), Enabled);
end
else
begin
- FSelOffset:= 0;
+ FSelOffset := 0;
fpgStyle.DrawString(Canvas, FMargin+1, FMargin, FText, Enabled);
end;
end;
@@ -725,9 +731,7 @@ begin
if Enabled then
Canvas.SetColor(clText1)
else
- begin
Canvas.SetColor(clShadow1);
- end;
// paint arrow
fpgStyle.DrawDirectionArrow(Canvas, ar.Left, ar.Top, ar.Width, ar.Height, 1);
Canvas.EndDraw(FInternalBtnRect);
@@ -744,7 +748,8 @@ begin
FFocusable := True;
FBtnPressed := False;
FAutocompletion := False;
- AutoDropDown := False;
+ FAutoDropDown := False;
+ FAllowNew := anNo;
FText := '';
FCursorPos := UTF8Length(FText);
@@ -765,7 +770,7 @@ end;
procedure TfpgAbstractEditCombo.Update;
begin
- FFocusItem := 0;
+ FFocusItem := -1;
Repaint;
end;
diff --git a/src/gui/gui_form.pas b/src/gui/gui_form.pas
index 69e1470a..ea68397b 100644
--- a/src/gui/gui_form.pas
+++ b/src/gui/gui_form.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_gauge.pas b/src/gui/gui_gauge.pas
index 16d4fd74..b3685d50 100644
--- a/src/gui/gui_gauge.pas
+++ b/src/gui/gui_gauge.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_grid.pas b/src/gui/gui_grid.pas
index 906b3d6a..eaeb9ddc 100644
--- a/src/gui/gui_grid.pas
+++ b/src/gui/gui_grid.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -39,43 +39,14 @@ uses
gui_customgrid;
type
-{
- TfpgGrid = class(TfpgCustomGrid)
- public
- property Font;
- property HeaderFont;
- published
- property Columns;
- property DefaultColWidth;
- property DefaultRowHeight;
- property FontDesc;
- property HeaderFontDesc;
- property BackgroundColor;
- property FocusCol;
- property FocusRow;
- property RowSelect;
- property ColumnCount;
- property RowCount;
- property ShowHeader;
- property ShowGrid;
- property HeaderHeight;
- property ColResizing;
- property ColumnWidth;
- property OnFocusChange;
- property OnRowChange;
- property OnDoubleClick;
- end;
-}
-
- { TfpgFileGrid }
TfpgFileGrid = class(TfpgCustomGrid)
private
FFileList: TfpgFileList;
FFixedFont: TfpgFont;
protected
- function GetRowCount: Longword; override;
- procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
+ function GetRowCount: Integer; override;
+ procedure DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@@ -111,33 +82,31 @@ type
TfpgCustomStringGrid = class(TfpgCustomGrid)
private
- function GetCell(ACol, ARow: Longword): string;
- function GetColumnTitle(ACol: Longword): string;
- function GetObjects(ACol, ARow: Longword): TObject;
- procedure SetCell(ACol, ARow: Longword; const AValue: string);
- procedure SetColumnTitle(ACol: Longword; const AValue: string);
- procedure SetObjects(ACol, ARow: Longword; const AValue: TObject);
+ function GetCell(ACol, ARow: Integer): string;
+ function GetColumnTitle(ACol: Integer): string;
+ function GetObjects(ACol, ARow: Integer): TObject;
+ procedure SetCell(ACol, ARow: Integer; const AValue: string);
+ procedure SetColumnTitle(ACol: Integer; const AValue: string);
+ procedure SetObjects(ACol, ARow: Integer; const AValue: TObject);
protected
- function GetColumnWidth(ACol: Longword): integer; override;
- procedure SetColumnWidth(ACol: Longword; const AValue: integer); override;
- function GetColumns(AIndex: Longword): TfpgStringColumn; reintroduce;
+ function GetColumnWidth(ACol: Integer): integer; override;
+ procedure SetColumnWidth(ACol: Integer; const AValue: integer); override;
+ function GetColumns(AIndex: Integer): TfpgStringColumn; reintroduce;
procedure DoDeleteColumn(ACol: integer); override;
procedure DoSetRowCount(AValue: integer); override;
function DoCreateColumnClass: TfpgStringColumn; reintroduce; override;
- procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
- { AIndex is 1-based. }
- property Columns[AIndex: Longword]: TfpgStringColumn read GetColumns;
+ procedure DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
+ property Columns[AIndex: Integer]: TfpgStringColumn read GetColumns;
public
constructor Create(AOwner: TComponent); override;
function AddColumn(ATitle: string; AWidth: integer; AAlignment: TAlignment = taLeftJustify;
AbackgroundColor: TfpgColor = clDefault; ATextColor: TfpgColor = clDefault): TfpgStringColumn; overload;
- { ACol and ARow is 1-based. }
- property Cells[ACol, ARow: Longword]: string read GetCell write SetCell;
- property Objects[ACol, ARow: Longword]: TObject read GetObjects write SetObjects;
- property ColumnTitle[ACol: Longword]: string read GetColumnTitle write SetColumnTitle;
- property ColumnWidth[ACol: Longword]: integer read GetColumnWidth write SetColumnWidth;
- property ColumnBackgroundColor[ACol: Longword]: TfpgColor read GetColumnBackgroundColor write SetColumnBackgroundColor;
- property ColumnTextColor[ACol: Longword]: TfpgColor read GetColumnTextColor write SetColumnTextColor;
+ property Cells[ACol, ARow: Integer]: string read GetCell write SetCell;
+ property Objects[ACol, ARow: Integer]: TObject read GetObjects write SetObjects;
+ property ColumnTitle[ACol: Integer]: string read GetColumnTitle write SetColumnTitle;
+ property ColumnWidth[ACol: Integer]: integer read GetColumnWidth write SetColumnWidth;
+ property ColumnBackgroundColor[ACol: Integer]: TfpgColor read GetColumnBackgroundColor write SetColumnBackgroundColor;
+ property ColumnTextColor[ACol: Integer]: TfpgColor read GetColumnTextColor write SetColumnTextColor;
// property Cols[index: Integer]: TStrings read GetCols write SetCols;
// property Rows[index: Integer]: TStrings read GetRows write SetRows;
end;
@@ -192,12 +161,12 @@ end;
{ TfpgFileGrid }
-function TfpgFileGrid.GetRowCount: Longword;
+function TfpgFileGrid.GetRowCount: Integer;
begin
Result := FFileList.Count;
end;
-procedure TfpgFileGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState);
+procedure TfpgFileGrid.DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState);
const
picture_width = 20;
var
@@ -215,13 +184,13 @@ begin
y := ARect.Top;// + 1;
s := '';
- if (e.EntryType = etDir) and (ACol = 1) then
+ if (e.EntryType = etDir) and (ACol = 0) then
Canvas.SetFont(HeaderFont)
else
Canvas.SetFont(Font);
case ACol of
- 1: begin
+ 0: begin
if e.EntryType = etDir then
img := fpgImages.GetImage('stdimg.folder') // Do NOT localize
else if e.IsExecutable then
@@ -238,16 +207,16 @@ begin
s := e.Name;
end;
- 2: begin
+ 1: begin
s := FormatFloat('###,###,###,##0', e.size);
x := ARect.Right - Font.TextWidth(s) - 1;
if x < (ARect.Left + 2) then
x := ARect.Left + 2;
end;
- 3: s := FormatDateTime('yyyy-mm-dd hh:nn', e.ModTime);
+ 2: s := FormatDateTime('yyyy-mm-dd hh:nn', e.ModTime);
- 4: begin
+ 3: begin
if FFileList.HasFileMode then // on unix
s := e.Mode
else // on windows
@@ -259,8 +228,8 @@ begin
if FFileList.HasFileMode then // unix
case ACol of
- 5: s := e.Owner;
- 6: s := e.Group;
+ 4: s := e.Owner;
+ 5: s := e.Group;
end;
// centre text in row height
@@ -289,7 +258,8 @@ begin
AddColumn(rsFileRights, 78);
AddColumn(rsFileOwner, 54);
AddColumn(rsFileGroup, 54);
- end else
+ end
+ else
AddColumn(rsFileAttributes, 78);
RowSelect := True;
@@ -325,93 +295,93 @@ end;
{ TfpgCustomStringGrid }
-function TfpgCustomStringGrid.GetCell(ACol, ARow: Longword): string;
+function TfpgCustomStringGrid.GetCell(ACol, ARow: Integer): string;
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
- if ARow > RowCount then
+ if ARow > RowCount-1 then
Exit; //==>
- Result := TfpgStringColumn(FColumns.Items[ACol-1]).Cells[ARow-1];
+ Result := TfpgStringColumn(FColumns.Items[ACol]).Cells[ARow];
end;
-function TfpgCustomStringGrid.GetColumnTitle(ACol: Longword): string;
+function TfpgCustomStringGrid.GetColumnTitle(ACol: Integer): string;
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
- Result := TfpgStringColumn(FColumns.Items[ACol-1]).Title;
+ Result := TfpgStringColumn(FColumns.Items[ACol]).Title;
end;
-function TfpgCustomStringGrid.GetObjects(ACol, ARow: Longword): TObject;
+function TfpgCustomStringGrid.GetObjects(ACol, ARow: Integer): TObject;
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
- if ARow > RowCount then
+ if ARow > RowCount-1 then
Exit; //==>
- Result := TfpgStringColumn(FColumns.Items[ACol-1]).Cells.Objects[ARow-1];
+ Result := TfpgStringColumn(FColumns.Items[ACol]).Cells.Objects[ARow];
end;
-function TfpgCustomStringGrid.GetColumnWidth(ACol: Longword): integer;
+function TfpgCustomStringGrid.GetColumnWidth(ACol: Integer): integer;
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
- Result := TfpgStringColumn(FColumns.Items[ACol-1]).Width;
+ Result := TfpgStringColumn(FColumns.Items[ACol]).Width;
end;
-procedure TfpgCustomStringGrid.SetCell(ACol, ARow: Longword;
+procedure TfpgCustomStringGrid.SetCell(ACol, ARow: Integer;
const AValue: string);
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
- if ARow > RowCount then
+ if ARow > RowCount-1 then
Exit; //==>
- if TfpgStringColumn(FColumns.Items[ACol-1]).Cells[ARow-1] <> AValue then
+ if TfpgStringColumn(FColumns.Items[ACol]).Cells[ARow] <> AValue then
begin
BeginUpdate;
- TfpgStringColumn(FColumns.Items[ACol-1]).Cells[ARow-1] := AValue;
+ TfpgStringColumn(FColumns.Items[ACol]).Cells[ARow] := AValue;
EndUpdate;
end;
end;
-procedure TfpgCustomStringGrid.SetColumnTitle(ACol: Longword; const AValue: string);
+procedure TfpgCustomStringGrid.SetColumnTitle(ACol: Integer; const AValue: string);
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
BeginUpdate;
- TfpgStringColumn(FColumns.Items[ACol-1]).Title := AValue;
+ TfpgStringColumn(FColumns.Items[ACol]).Title := AValue;
EndUpdate;
end;
-procedure TfpgCustomStringGrid.SetObjects(ACol, ARow: Longword;
+procedure TfpgCustomStringGrid.SetObjects(ACol, ARow: Integer;
const AValue: TObject);
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
- if ARow > RowCount then
+ if ARow > RowCount-1 then
Exit; //==>
- TfpgStringColumn(FColumns.Items[ACol-1]).Cells.Objects[ARow-1] := AValue;
+ TfpgStringColumn(FColumns.Items[ACol]).Cells.Objects[ARow] := AValue;
end;
-procedure TfpgCustomStringGrid.SetColumnWidth(ACol: Longword; const AValue: integer);
+procedure TfpgCustomStringGrid.SetColumnWidth(ACol: Integer; const AValue: integer);
begin
- if ACol > ColumnCount then
+ if ACol > ColumnCount-1 then
Exit; //==>
BeginUpdate;
- TfpgStringColumn(FColumns.Items[ACol-1]).Width := AValue;
+ TfpgStringColumn(FColumns.Items[ACol]).Width := AValue;
EndUpdate;
end;
-function TfpgCustomStringGrid.GetColumns(AIndex: Longword): TfpgStringColumn;
+function TfpgCustomStringGrid.GetColumns(AIndex: Integer): TfpgStringColumn;
begin
- if (AIndex < 1) or (AIndex > ColumnCount) then
+ if (AIndex < 0) or (AIndex > ColumnCount-1) then
Result := nil
else
- Result := TfpgStringColumn(FColumns.Items[AIndex-1]);
+ Result := TfpgStringColumn(FColumns.Items[AIndex]);
end;
procedure TfpgCustomStringGrid.DoDeleteColumn(ACol: integer);
begin
- TfpgStringColumn(FColumns.Items[ACol-1]).Free;
- FColumns.Delete(ACol-1);
+ TfpgStringColumn(FColumns.Items[ACol]).Free;
+ FColumns.Delete(ACol);
end;
procedure TfpgCustomStringGrid.DoSetRowCount(AValue: integer);
@@ -439,7 +409,7 @@ begin
Result := TfpgStringColumn.Create;
end;
-procedure TfpgCustomStringGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect;
+procedure TfpgCustomStringGrid.DrawCell(ARow, ACol: Integer; ARect: TfpgRect;
AFlags: TfpgGridDrawState);
var
x: TfpgCoord;
@@ -497,7 +467,7 @@ begin
else
Result.TextColor:= ATextColor;
- for r := 1 to RowCount do
+ for r := 0 to RowCount-1 do
Result.Cells.Append('');
Updated;
end;
diff --git a/src/gui/gui_hyperlink.pas b/src/gui/gui_hyperlink.pas
index ee424a53..a4310fb9 100644
--- a/src/gui/gui_hyperlink.pas
+++ b/src/gui/gui_hyperlink.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_iniutils.pas b/src/gui/gui_iniutils.pas
index 9bd204a8..34e85ba3 100644
--- a/src/gui/gui_iniutils.pas
+++ b/src/gui/gui_iniutils.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2007 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_label.pas b/src/gui/gui_label.pas
index 96ed5d2b..09fc21ff 100644
--- a/src/gui/gui_label.pas
+++ b/src/gui/gui_label.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_listbox.pas b/src/gui/gui_listbox.pas
index f606099a..2825df34 100644
--- a/src/gui/gui_listbox.pas
+++ b/src/gui/gui_listbox.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -52,6 +52,7 @@ type
FOnSelect: TNotifyEvent;
FPopupFrame: boolean;
FAutoHeight: boolean;
+ FUpdateCount: Integer;
function GetFontDesc: string;
procedure SetFocusItem(const AValue: integer);
procedure SetFontDesc(const AValue: string);
@@ -65,12 +66,13 @@ type
FMouseDragging: boolean;
FFirstItem: integer;
FMargin: integer;
+ procedure MsgPaint(var msg: TfpgMessageRec); message FPGM_PAINT;
procedure UpdateScrollBar;
procedure FollowFocus;
function ListHeight: TfpgCoord;
function ScrollBarWidth: TfpgCoord;
function PageLength: integer;
- procedure ScrollBarMove(Sender: TObject; position: integer);
+ procedure ScrollBarMove(Sender: TObject; APosition: integer);
procedure DrawItem(num: integer; rect: TfpgRect; flags: integer); virtual;
procedure DoChange;
procedure DoSelect;
@@ -89,22 +91,23 @@ type
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
+ procedure BeginUpdate;
+ procedure EndUpdate;
procedure Update;
function ItemCount: integer; virtual;
function RowHeight: integer; virtual;
procedure SetFirstItem(item: integer);
property Font: TfpgFont read FFont;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
- property OnSelect: TNotifyEvent read FOnSelect write FOnSelect;
- property OnScroll: TNotifyEvent read FOnScroll write FOnScroll;
property OnKeyPress; // to allow to detect return or tab key has been pressed
+ property OnScroll: TNotifyEvent read FOnScroll write FOnScroll;
+ property OnSelect: TNotifyEvent read FOnSelect write FOnSelect;
end;
// Listbox containg strings - the normal listbox as we know it. Used by
// component developers.
TfpgTextListBox = class(TfpgBaseListBox)
- private
protected
FItems: TStringList;
procedure DrawItem(num: integer; rect: TfpgRect; flags: integer); override;
@@ -246,20 +249,28 @@ function TfpgListBoxStrings.Add(const s: String): Integer;
begin
Result := inherited Add(s);
if Assigned(ListBox) and (ListBox.HasHandle) then
+ begin
ListBox.UpdateScrollBar;
+ ListBox.Invalidate;
+ end;
end;
procedure TfpgListBoxStrings.Delete(Index: Integer);
begin
inherited Delete(Index);
if Assigned(ListBox) and (ListBox.HasHandle) then
+ begin
ListBox.UpdateScrollBar;
+ ListBox.Invalidate;
+ end;
end;
procedure TfpgListBoxStrings.Clear;
begin
inherited Clear;
- ListBox.FocusItem := 0;
+ ListBox.FocusItem := -1;
+ ListBox.UpdateScrollBar;
+ ListBox.Invalidate;
end;
@@ -279,19 +290,19 @@ begin
old := FFocusItem;
// do some sanity checks
- if AValue < 0 then // zero is a valid focusitem (no selection)
- FFocusItem := 1
- else if AValue > ItemCount then
- FFocusItem := ItemCount
+ if AValue < -1 then // -1 is a valid focusitem (no selection)
+ FFocusItem := -1
+ else if AValue > ItemCount-1 then
+ FFocusItem := ItemCount-1
else
FFocusItem := AValue;
if FFocusItem = old then
Exit; //==>
- if FFocusItem <= 1 then
- FFirstItem := 1;
-
+ if FFocusItem <= 0 then
+ FFirstItem := 0;
+
FollowFocus;
UpdateScrollbar;
RePaint;
@@ -340,6 +351,13 @@ begin
Height := (PageLength * RowHeight) + (2 * FMargin);
end;
+procedure TfpgBaseListBox.MsgPaint(var msg: TfpgMessageRec);
+begin
+ // Optimising painting and preventing OnPaint from firing if not needed
+ if FUpdateCount = 0 then
+ inherited MsgPaint(msg);
+end;
+
procedure TfpgBaseListBox.SetFirstItem(item: integer);
begin
FFirstItem := item;
@@ -351,16 +369,16 @@ var
pn : integer;
begin
pn := PageLength;
- FScrollBar.Visible := PageLength < ItemCount;
+ FScrollBar.Visible := PageLength < ItemCount-1;
if FScrollBar.Visible then
begin
- FScrollBar.Min := 1;
+ FScrollBar.Min := 0;
if ItemCount <> 0 then
FScrollBar.SliderSize := pn / ItemCount
else
FScrollBar.SliderSize := 1;
- FScrollBar.Max := ItemCount-pn+1;
+ FScrollBar.Max := ItemCount-1-pn;
FScrollBar.Position := FFirstItem;
FScrollBar.RepaintSlider;
end;
@@ -368,14 +386,11 @@ end;
procedure TfpgBaseListBox.FollowFocus;
var
- n : integer;
- h : TfpgCoord;
+ n: integer;
+ h: TfpgCoord;
begin
if FFocusItem < FFirstItem then
- begin
- FFirstItem := FFocusItem;
- UpdateScrollBar;
- end
+ FFirstItem := FFocusItem
else
begin
h := 0;
@@ -385,11 +400,14 @@ begin
if h > ListHeight then
begin
FFirstItem := n+1;
- UpdateScrollBar;
- break;
+ Break;
end;
end;
end;
+
+ if FFirstItem < 0 then
+ FFirstItem := 0;
+ UpdateScrollBar;
end;
function TfpgBaseListBox.ListHeight: TfpgCoord;
@@ -407,12 +425,12 @@ end;
function TfpgBaseListBox.PageLength: integer;
begin
- result := Trunc(ListHeight / RowHeight);
+ result := (ListHeight div RowHeight)-1; // component height minus 1 line
end;
-procedure TfpgBaseListBox.ScrollBarMove(Sender: TObject; position: integer);
+procedure TfpgBaseListBox.ScrollBarMove(Sender: TObject; APosition: integer);
begin
- FFirstItem := position;
+ FFirstItem := APosition;
Repaint;
if Assigned(FOnScroll) then
FOnScroll(self);
@@ -420,9 +438,6 @@ end;
procedure TfpgBaseListBox.DoChange;
begin
- {$IFDEF DEBUG}
- writeln(Name + '.OnChange assigned');
- {$ENDIF}
if Assigned(OnChange) then
FOnChange(self);
end;
@@ -441,39 +456,51 @@ begin
case keycode of
keyUp:
begin
- if FFocusItem > 1 then
+ if FFocusItem > 0 then
FocusItem := FFocusItem - 1;
end;
keyDown:
begin
- if FFocusItem < ItemCount then
+ if FFocusItem < (ItemCount-1) then
FocusItem := FFocusItem + 1;
end;
keyPageUp:
begin
- FocusItem := FFocusItem - PageLength;
+ if ItemCount > 0 then
+ begin
+ if ((FFocusItem - PageLength) < 0) then
+ FocusItem := 0
+ else
+ FocusItem := FFocusItem - PageLength;
+ end;
end;
keyPageDown:
begin
- FocusItem := FFocusItem + PageLength;
+ if ItemCount > 0 then
+ begin
+ if (FFocusItem + PageLength) > ItemCount-1 then
+ FocusItem := ItemCount - 1
+ else
+ FocusItem := FFocusItem + PageLength;
+ end;
end;
keyHome:
begin
- FocusItem := 1;
+ FocusItem := 0;
end;
keyEnd:
begin
- FocusItem := ItemCount;
+ FocusItem := ItemCount-1;
end;
keyReturn, keyPEnter:
begin
- if FocusItem > 0 then
+ if FocusItem > -1 then
DoSelect;
consumed := false; // to allow the forms to detect it
end;
@@ -495,10 +522,7 @@ begin
end;
procedure TfpgBaseListBox.HandleLMouseUp(x, y: integer; shiftstate: TShiftState);
-var
- r: TfpgRect;
begin
- r.SetRect(Left, Top, Width, Height);
inherited HandleLMouseUp(x, y, shiftstate);
if ItemCount < 1 then
Exit; //==>
@@ -520,8 +544,8 @@ begin
Exit; //==>
NewFocus := FFirstItem + Trunc((y - FMargin) / RowHeight);
- if NewFocus < 1 then
- NewFocus := 1;
+ if NewFocus < 0 then
+ NewFocus := 0;
FocusItem := NewFocus;
end;
@@ -536,10 +560,10 @@ begin
else // scroll up
FFirstItem := FFirstItem - abs(delta);
- if FFirstItem + PageLength > ItemCount then
- FFirstItem := ItemCount - PageLength + 1;
- if FFirstItem < 1 then
- FFirstItem := 1;
+ if FFirstItem + PageLength > (ItemCount-1) then
+ FFirstItem := ItemCount - 1 - PageLength;
+ if FFirstItem < 0 then
+ FFirstItem := 0;
if pfi <> FFirstItem then
begin
UpdateScrollBar;
@@ -561,6 +585,9 @@ var
n: integer;
r: TfpgRect;
begin
+ //if FUpdateCount > 0 then
+ //Exit; //==>
+
inherited HandlePaint;
Canvas.ClearClipRect;
@@ -591,7 +618,11 @@ begin
r.Height := RowHeight;
- for n := FFirstItem to ItemCount do
+ if ItemCount = 0 then
+ Exit; //==>
+ if FFirstItem = -1 then
+ FFirstItem := 0;
+ for n := FFirstItem to ItemCount-1 do
begin
if n = FFocusItem then
begin
@@ -661,11 +692,12 @@ begin
FTextColor := Parent.TextColor;
FFocusable := True;
- FFocusItem := 0;
- FFirstItem := 1;
+ FFocusItem := -1;
+ FFirstItem := 0;
FWidth := 80;
FHeight := 80;
FMargin := 2;
+ FUpdateCount := 0;
FMouseDragging := False;
FPopupFrame := False;
FHotTrack := False;
@@ -685,10 +717,24 @@ begin
inherited Destroy;
end;
+procedure TfpgBaseListBox.BeginUpdate;
+begin
+ Inc(FUpdateCount);
+end;
+
+procedure TfpgBaseListBox.EndUpdate;
+begin
+ if FUpdateCount = 0 then
+ Exit; //==>
+ Dec(FUpdateCount);
+ if FUpdateCount = 0 then
+ Repaint;
+end;
+
procedure TfpgBaseListBox.Update;
begin
- FFirstItem := 1;
- FFocusItem := 1;
+ FFirstItem := -1;
+ FFocusItem := -1;
UpdateScrollBar;
Repaint;
end;
@@ -717,9 +763,9 @@ end;
procedure TfpgTextListBox.DrawItem(num: integer; rect: TfpgRect; flags: integer);
begin
- if num < 1 then
- Exit;
- fpgStyle.DrawString(Canvas, rect.left+2, rect.top+1, FItems.Strings[num-1], Enabled);
+ //if num < 0 then
+ //Exit; //==>
+ fpgStyle.DrawString(Canvas, rect.left+2, rect.top+1, FItems.Strings[num], Enabled);
end;
procedure TfpgTextListBox.HandleKeyChar(var AText: TfpgChar;
@@ -727,12 +773,12 @@ procedure TfpgTextListBox.HandleKeyChar(var AText: TfpgChar;
var
i: integer;
begin
- // if user press a key then it will search the stringlist for a word
- // beginning with such as letter
- if (Ord(AText[1]) > 31) and (Ord(AText[1]) < 127) and (FFocusItem > 0) or (Length(AText) > 1 ) then
- for i := FFocusItem to FItems.Count do
+ // If the user pressed a key then it will search the stringlist for a word
+ // beginning with that letter
+ if (Ord(AText[1]) > 31) and (Ord(AText[1]) < 127) and (FFocusItem > -1) or (Length(AText) > 1 ) then
+ for i := FFocusItem to FItems.Count-1 do
begin
- if SameText(LeftStr(FItems.Strings[i-1], Length(AText)), AText) then
+ if SameText(LeftStr(FItems.Strings[i], Length(AText)), AText) then
begin
FocusItem := i;
Consumed := True;
@@ -746,7 +792,7 @@ constructor TfpgTextListBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FItems := TfpgListBoxStrings.Create(self);
- FFocusItem := 0;
+ FFocusItem := -1;
end;
destructor TfpgTextListBox.Destroy;
@@ -762,8 +808,8 @@ end;
function TfpgTextListBox.Text: string;
begin
- if (ItemCount > 0) and (FocusItem <> 0) then
- result := FItems[FocusItem-1]
+ if (ItemCount > 0) and (FocusItem <> -1) then
+ result := FItems[FocusItem]
else
result := '';
end;
@@ -798,7 +844,7 @@ end;
function TfpgBaseColorListBox.GetColor: TfpgColor;
begin
- Result := TColorItem(FItems.Items[FocusItem-1]).ColorValue;
+ Result := TColorItem(FItems.Items[FocusItem]).ColorValue;
end;
procedure TfpgBaseColorListBox.SetColor(const AValue: TfpgColor);
@@ -806,12 +852,12 @@ var
i: integer;
begin
if GetColor = AValue then
- Exit;
+ Exit; //==>
for i := 0 to FItems.Count-1 do
begin
if TColorItem(FItems.Items[i]).ColorValue = AValue then
begin
- FocusItem := i+1;
+ FocusItem := i;
Exit;
end;
end;
@@ -1022,7 +1068,7 @@ begin
FItems.Add(TColorItem.Create('clYellowGreen', clYellowGreen));
end;
end;
- FocusItem := 1;
+ FocusItem := 0;
FollowFocus;
UpdateScrollbar;
end;
@@ -1036,13 +1082,13 @@ begin
FItems.Clear;
end;
-procedure TfpgBaseColorListBox.DrawItem (num: integer; rect: TfpgRect; flags: integer );
+procedure TfpgBaseColorListBox.DrawItem(num: integer; rect: TfpgRect; flags: integer);
var
itm: TColorItem;
begin
- if num < 1 then
- Exit;
- itm := TColorItem(FItems.Items[num-1]);
+ if num < 0 then
+ Exit; //==>
+ itm := TColorItem(FItems.Items[num]);
// color box
Canvas.SetColor(itm.ColorValue);
Canvas.FillRectangle(rect.Left + 2, rect.Top + 4, FColorBoxWidth, FColorboxHeight);
@@ -1053,7 +1099,7 @@ begin
fpgStyle.DrawString(Canvas, FColorboxWidth + 8 + rect.left, rect.top+1, itm.ColorName, Enabled);
end;
-constructor TfpgBaseColorListBox.Create (AOwner: TComponent );
+constructor TfpgBaseColorListBox.Create(AOwner: TComponent);
begin
inherited Create (AOwner );
FColorBoxWidth := 35;
diff --git a/src/gui/gui_listview.pas b/src/gui/gui_listview.pas
index 90980bff..543d61c2 100644
--- a/src/gui/gui_listview.pas
+++ b/src/gui/gui_listview.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_memo.pas b/src/gui/gui_memo.pas
index 4330c3f3..fc4a0f86 100644
--- a/src/gui/gui_memo.pas
+++ b/src/gui/gui_memo.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -33,8 +33,6 @@ uses
type
- { TfpgMemo }
-
TfpgMemo = class(TfpgWidget)
private
FLines: TStringList;
@@ -77,8 +75,8 @@ type
function VisibleWidth: integer;
procedure VScrollBarMove(Sender: TObject; position: integer);
procedure HScrollBarMove(Sender: TObject; position: integer);
- procedure SetText(const AValue: string);
- function GetText: string;
+ procedure SetText(const AValue: TfpgString);
+ function GetText: TfpgString;
procedure SetCursorLine(aValue: integer);
procedure UpdateScrollBarCoords;
protected
@@ -102,7 +100,7 @@ type
property LineHeight: integer read FLineHeight;
property MaxLength: integer read FMaxLength write FMaxLength;
property TabWidth: integer read FTabWidth write FTabWidth;
- property Text: string read GetText write SetText;
+ property Text: TfpgString read GetText write SetText;
property UseTabs: boolean read FUseTabs write FUseTabs default False;
published
property BackgroundColor default clBoxColor;
@@ -192,7 +190,7 @@ var
MaxLine: integer;
yp: integer;
begin
- if (aValue < 1) or (aValue = FCursorLine) then
+ if (aValue < 0) or (aValue = FCursorLine) then
Exit; // wrong value
if aValue < FFirstLine then
begin
@@ -204,7 +202,7 @@ begin
end;
yp := 2;
MaxLine := 0;
- for i := FFirstLine to LineCount do
+ for i := FFirstLine to LineCount-1 do
begin
yp := yp + LineHeight;
if yp > Height then
@@ -274,14 +272,14 @@ begin
FTabWidth := 4;
FLines := TfpgMemoStrings.Create(self);
- FFirstLine := 1;
- FCursorLine := 1;
+ FFirstLine := 0;
+ FCursorLine := 0;
FCursorPos := 0;
FSelStartPos := FCursorPos;
FSelEndPos := 0;
- FSelStartLine := 0;
- FSelEndLine := 0;
+ FSelStartLine := -1;
+ FSelEndLine := -1;
FDrawOffset := 0;
FMouseDragging := False;
@@ -311,7 +309,7 @@ var
lw: TfpgCoord;
begin
FLongestLineWidth := 0;
- for n := 1 to LineCount do
+ for n := 0 to LineCount-1 do
begin
lw := FFont.TextWidth(getlinetext(n));
if lw > FlongestLineWidth then
@@ -335,7 +333,7 @@ var
len: integer;
st: integer;
begin
- if FSelEndLine < 1 then
+ if FSelEndLine < 0 then
Exit;
if (FSelStartLine shl 16) + FSelStartPos <= (FSelEndLine shl 16) + FSelEndPos then
@@ -351,6 +349,7 @@ begin
selep := FSelStartPos;
selsl := FSelEndLine;
selsp := FSelEndPos;
+
end;
for n := selsl to selel do
@@ -378,11 +377,11 @@ begin
end;
for n := selsl + 1 to selel do
- FLines.Delete(selsl);
+ FLines.Delete(n);
FCursorPos := selsp;
FCursorLine := selsl;
- FSelEndLine := 0;
+ FSelEndLine := -1;
end;
procedure TfpgMemo.DoCopy;
@@ -397,7 +396,7 @@ var
st: integer;
s: string;
begin
- if FSelEndLine < 1 then
+ if FSelEndLine < 0 then
Exit;
if (FSelStartLine shl 16) + FSelStartPos <= (FSelEndLine shl 16) + FSelEndPos then
@@ -528,11 +527,11 @@ begin
if FCursorline - FFirstLine + 1 > VisibleLines then
FFirstLine := FCursorline - VisibleLines + 1;
- if FFirstLine + VisibleLines > LineCount then
+ if (FFirstLine + VisibleLines) > LineCount then
begin
FFirstLine := LineCount - VisibleLines + 1;
- if FFirstline < 1 then
- FFirstLine := 1;
+ if FFirstline < 0 then
+ FFirstLine := 0;
end;
UpdateScrollbars;
@@ -583,12 +582,12 @@ begin
if FVScrollBar.Visible then
begin
- FVScrollBar.Min := 1;
+ FVScrollBar.Min := 0;
// TODO: Look at calculation of vlines value to improve this!
if LineCount > 0 then
begin
FVScrollBar.SliderSize := VisibleLines / LineCount;
- FVScrollBar.Max := LineCount - VisibleLines + 1;
+ FVScrollBar.Max := LineCount - VisibleLines;
end
else
begin
@@ -610,10 +609,10 @@ end;
function TfpgMemo.GetLineText(linenum: integer): string;
begin
- if LineCount < 1 then
+ if LineCount = 0 then
FLines.Add('');
- if (linenum >= 1) and (linenum <= LineCount) then
- Result := FLines.Strings[linenum - 1]
+ if (linenum >= 0) and (linenum < LineCount) then
+ Result := FLines.Strings[linenum]
else
Result := '';
end;
@@ -627,7 +626,7 @@ end;
procedure TfpgMemo.SetLineText(linenum: integer; Value: string);
begin
- FLines.Strings[linenum - 1] := Value;
+ FLines.Strings[linenum] := Value;
end;
function TfpgMemo.GetCursorX: integer;
@@ -774,7 +773,7 @@ begin
end;
yp := 3;
- for n := FFirstline to LineCount do
+ for n := FFirstline to LineCount-1 do
begin
ls := GetLineText(n);
if FUseTabs then
@@ -802,7 +801,7 @@ begin
if Focused then
begin
// drawing selection
- if (FSelEndLine > 0) and (selsl <= n) and (selel >= n) then
+ if (FSelEndLine > -1) and (selsl <= n) and (selel >= n) then
begin
if selsl < n then
st := 0
@@ -863,6 +862,8 @@ begin
begin
if (FMaxLength <= 0) or (UTF8Length(FLines.Text) < FMaxLength) then
begin
+ if FCursorLine < 0 then
+ FCursorLine := 0;
DeleteSelection;
ls := GetLineText(FCursorLine);
UTF8Insert(s, ls, FCursorPos + 1);
@@ -870,7 +871,7 @@ begin
Inc(FCursorPos);
FSelStartPos := FCursorPos;
FSelStartLine := FCursorLine;
- FSelEndLine := 0;
+ FSelEndLine := -1;
AdjustCursor;
end;
@@ -897,7 +898,7 @@ var
begin
FSelStartLine := FCursorLine;
FSelStartPos := FCursorPos;
- FSelEndLine := 0;
+ FSelEndLine := -1;
end;
begin
@@ -967,7 +968,7 @@ begin
keyUp:
begin // up
cx := GetCursorX;
- if FCursorLine > 1 then
+ if FCursorLine > 0 then
begin
Dec(FCursorline);
SetCPByX(cx);
@@ -977,7 +978,7 @@ begin
keyDown:
begin
cx := GetCursorX;
- if FCursorLine < LineCount then
+ if FCursorLine < (LineCount-1) then
begin
Inc(FCursorline);
SetCPByX(cx);
@@ -987,35 +988,35 @@ begin
keyHome:
begin
if (ssCtrl in shiftstate) then
- FCursorLine := 1;
+ FCursorLine := 0;
FCursorPos := 0;
end;
keyEnd:
begin
if (ssCtrl in shiftstate) then
- FCursorLine := LineCount;
+ FCursorLine := LineCount-1;
FCursorPos := UTF8Length(CurrentLine);
end;
keyPageUp:
- if FCursorLine > 1 then
+ if FCursorLine > 0 then
begin
cx := GetCursorX;
Dec(FCursorLine, VisibleLines);
- if FCursorLine < 1 then
- FCursorLine := 1;
+ if FCursorLine < 0 then
+ FCursorLine := 0;
SetCPByX(cx);
end;
keyPageDown:
begin
cx := GetCursorX;
- if FCursorLine < LineCount then
+ if FCursorLine < (LineCount-1) then
begin
Inc(FCursorline, VisibleLines);
- if FCursorLine > LineCount then
- FCursorLine := LineCount;
+ if FCursorLine > (LineCount-1) then
+ FCursorLine := LineCount-1;
SetCPByX(cx);
end;
end;
@@ -1043,16 +1044,18 @@ begin
consumed := True;
case keycode of
- keyReturn, keyPEnter:
+ keyReturn,
+ keyPEnter:
begin
- ls := UTF8Copy(FLines[FCursorline - 1], 1, FCursorPos);
- ls2 := UTF8Copy(FLines[FCursorline - 1], FCursorPos + 1, UTF8Length(FLines[FCursorline - 1]));
- FLines.Insert(FCursorLine - 1, ls);
+ ls := UTF8Copy(FLines[FCursorline], 1, FCursorPos);
+ ls2 := UTF8Copy(FLines[FCursorline], FCursorPos + 1, UTF8Length(FLines[FCursorline]));
+ FLines.Insert(FCursorLine, ls);
Inc(FCursorLine);
SetLineText(FCursorLine, ls2);
FCursorPos := 0;
hasChanged := True;
end;
+
keyBackSpace:
begin
if FCursorPos > 0 then
@@ -1062,13 +1065,13 @@ begin
SetLineText(FCursorLine, ls);
Dec(FCursorPos);
end
- else if FCursorLine > 1 then
+ else if FCursorLine > 0 then
begin
- ls := CurrentLine;
- FLines.Delete(FCursorLine - 1);
+ ls := CurrentLine;
+ FLines.Delete(FCursorLine);
Dec(FCursorLine);
- FCursorPos := UTF8Length(FLines.Strings[FCursorLine - 1]);
- FLines.Strings[FCursorLine - 1] := FLines.Strings[FCursorLine - 1] + ls;
+ FCursorPos := UTF8Length(FLines.Strings[FCursorLine]);
+ FLines.Strings[FCursorLine] := FLines.Strings[FCursorLine] + ls;
end;
hasChanged := True;
end;
@@ -1076,21 +1079,22 @@ begin
keyDelete:
begin
ls := GetLineText(FCursorLine);
- if FSelEndLine > 0 then
+ if FSelEndLine > -1 then
DeleteSelection
else if FCursorPos < UTF8Length(ls) then
begin
UTF8Delete(ls, FCursorPos + 1, 1);
SetLineText(FCursorLine, ls);
end
- else if FCursorLine < LineCount then
+ else if FCursorLine < (LineCount-1) then
begin
- ls2 := FLines.Strings[FCursorLine];
+ ls2 := FLines.Strings[FCursorLine+1];
FLines.Delete(FCursorLine);
- FLines.Strings[FCursorLine - 1] := ls + ls2;
+ FLines.Strings[FCursorLine] := ls + ls2;
end;
hasChanged := True;
end;
+
keyTab:
begin
if FUseTabs then
@@ -1150,8 +1154,8 @@ begin
// searching the appropriate character position
lnum := FFirstLine + (y - FSideMargin) div LineHeight;
- if lnum > LineCount then
- lnum := LineCount;
+ if lnum > (LineCount-1) then
+ lnum := LineCount-1;
ls := GetLineText(lnum);
cpx := FFont.TextWidth(UTF8Copy(ls, 1, FCursorPos)) - FDrawOffset + FSideMargin;
@@ -1181,7 +1185,7 @@ begin
begin
FSelStartLine := lnum;
FSelStartPos := cp;
- FSelEndLine := 0;
+ FSelEndLine := -1;
end;
Repaint;
end;
@@ -1203,8 +1207,8 @@ begin
// searching the appropriate character position
lnum := FFirstLine + (y - FSideMargin) div LineHeight;
- if lnum > LineCount then
- lnum := LineCount;
+ if lnum > LineCount-1 then
+ lnum := LineCount-1;
ls := GetLineText(lnum);
cpx := FFont.TextWidth(UTF8Copy(ls, 1, FCursorPos)) - FDrawOffset + FSideMargin;
@@ -1326,10 +1330,10 @@ begin
else
inc(FFirstLine, abs(delta)); // scroll down
- if FFirstLine > LineCount - VisibleLines + 1 then
- FFirstLine := LineCount - VisibleLines + 1;
- if FFirstLine < 1 then
- FFirstLine := 1;
+ if FFirstLine > LineCount - VisibleLines{ + 1} then
+ FFirstLine := LineCount - VisibleLines {+ 1};
+ if FFirstLine < 0 then
+ FFirstLine := 0;
if FHScrollBar.Visible then
begin
@@ -1365,26 +1369,26 @@ begin
Result := '';
end;
-function TfpgMemo.GetText: string;
+function TfpgMemo.GetText: TfpgString;
var
n: integer;
- s: string;
+ s: TfpgString;
begin
s := '';
- for n := 1 to LineCount do
+ for n := 0 to LineCount-1 do
begin
- if n > 1 then
+ if n > 0 then
s := s + #13#10;
s := s + GetLineText(n);
end;
Result := s;
end;
-procedure TfpgMemo.SetText(const AValue: string);
+procedure TfpgMemo.SetText(const AValue: TfpgString);
var
n: integer;
- c: string[2];
- s: string;
+ c: TfpgChar;
+ s: TfpgString;
begin
FLines.Clear;
s := '';
@@ -1410,10 +1414,10 @@ begin
FDrawOffset := 0;
FCursorPos := 0;
- FCursorLine := 1;
+ FCursorLine := 0;
FSelStartLine := FCursorLine;
FSelStartPos := FCursorPos;
- FSelEndLine := 0;
+ FSelEndLine := -1;
AdjustCursor;
Repaint;
diff --git a/src/gui/gui_menu.pas b/src/gui/gui_menu.pas
index bd6f10a2..3242685c 100644
--- a/src/gui/gui_menu.pas
+++ b/src/gui/gui_menu.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -62,12 +62,12 @@ type
FOnClick: TNotifyEvent;
FSeparator: boolean;
FSubMenu: TfpgPopupMenu;
- FText: string;
+ FText: TfpgString;
FVisible: boolean;
procedure SetEnabled(const AValue: boolean);
procedure SetHotKeyDef(const AValue: TfpgHotKeyDef);
procedure SetSeparator(const AValue: boolean);
- procedure SetText(const AValue: string);
+ procedure SetText(const AValue: TfpgString);
procedure SetVisible(const AValue: boolean);
public
constructor Create(AOwner: TComponent); override;
@@ -77,7 +77,7 @@ type
procedure DrawText(ACanvas: TfpgCanvas; x, y: TfpgCoord);
function GetCommand: ICommand;
procedure SetCommand(ACommand: ICommand);
- property Text: string read FText write SetText;
+ property Text: TfpgString read FText write SetText;
property HotKeyDef: TfpgHotKeyDef read FHotKeyDef write SetHotKeyDef;
property Separator: boolean read FSeparator write SetSeparator;
property Visible: boolean read FVisible write SetVisible;
@@ -128,8 +128,8 @@ type
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Close; override;
- function AddMenuItem(const AMenuName: string; const hotkeydef: string; HandlerProc: TNotifyEvent): TfpgMenuItem;
- function MenuItemByName(const AMenuName: string): TfpgMenuItem;
+ function AddMenuItem(const AMenuName: TfpgString; const hotkeydef: string; HandlerProc: TNotifyEvent): TfpgMenuItem;
+ function MenuItemByName(const AMenuName: TfpgString): TfpgMenuItem;
function MenuItem(const AMenuPos: integer): TfpgMenuItem; // added to allow for localization
property BeforeShow: TNotifyEvent read FBeforeShow write FBeforeShow;
end;
@@ -176,7 +176,9 @@ type
property BeforeShow: TNotifyEvent read FBeforeShow write FBeforeShow;
end;
-function CreateMenuBar(AOwner: TComponent; x, y, w, h: TfpgCoord): TfpgMenuBar;
+
+function CreateMenuBar(AOwner: TfpgWidget; x, y, w, h: TfpgCoord): TfpgMenuBar; overload;
+function CreateMenuBar(AOwner: TfpgWidget): TfpgMenuBar; overload;
implementation
@@ -184,23 +186,34 @@ implementation
var
uFocusedPopupMenu: TfpgPopupMenu;
-function CreateMenuBar(AOwner: TComponent; x, y, w, h: TfpgCoord): TfpgMenuBar;
+function CreateMenuBar(AOwner: TfpgWidget; x, y, w, h: TfpgCoord): TfpgMenuBar;
begin
+ if AOwner = nil then
+ raise Exception.Create('MenuBar component must have an Owner assigned');
Result := TfpgMenuBar.Create(AOwner);
Result.Left := x;
Result.Top := y;
- Result.Width := w;
+ if w = 0 then
+ Result.Width := AOwner.Width
+ else
+ Result.Width := w;
if h > 0 then
Result.Height := h;
end;
+function CreateMenuBar(AOwner: TfpgWidget): TfpgMenuBar;
+begin
+ Result := CreateMenuBar(AOwner, 0, 0, 0, 0);
+end;
+
{ TfpgMenuItem }
-procedure TfpgMenuItem.SetText(const AValue: string);
+procedure TfpgMenuItem.SetText(const AValue: TfpgString);
begin
- if FText=AValue then exit;
- FText:=AValue;
+ if FText = AValue then
+ Exit; //==>
+ FText := AValue;
end;
procedure TfpgMenuItem.SetVisible(const AValue: boolean);
@@ -358,10 +371,10 @@ end;
function TfpgMenuBar.VisibleItem(ind: integer): TfpgMenuItem;
begin
- if (ind < 1) or (ind > FItems.Count) then
+ if (ind < 0) or (ind > FItems.Count-1) then
Result := nil
else
- Result := TfpgMenuItem(FItems.Items[ind-1]);
+ Result := TfpgMenuItem(FItems.Items[ind]);
end;
procedure TfpgMenuBar.HandleShow;
@@ -488,7 +501,7 @@ begin
Canvas.SetColor(clHilite1);
Canvas.DrawLine(r.Left, r.Bottom, r.Right+1, r.Bottom); // bottom
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
DrawColumn(n, n = FocusItem);
Canvas.EndDraw;
end;
@@ -498,8 +511,8 @@ begin
inherited Create(AOwner);
FItems := TList.Create;
FBeforeShow := nil;
- FFocusItem := 0;
- FPrevFocusItem := 0;
+ FFocusItem := -1;
+ FPrevFocusItem := -1;
FFocusable := False;
FBackgroundColor := Parent.BackgroundColor;
FTextColor := Parent.TextColor;
@@ -520,7 +533,7 @@ end;
function TfpgMenuBar.ItemWidth(mi: TfpgMenuItem): integer;
begin
- Result := fpgStyle.MenuFont.TextWidth(mi.Text) + 2*6;
+ Result := fpgStyle.MenuFont.TextWidth(mi.Text) + (2*6);
end;
procedure TfpgMenuBar.DrawColumn(col: integer; focus: boolean);
@@ -532,7 +545,7 @@ begin
Canvas.BeginDraw;
r.SetRect(2, 1, 1, fpgStyle.MenuFont.Height+1);
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
begin
mi := VisibleItem(n);
r.width := ItemWidth(mi);
@@ -579,10 +592,10 @@ var
w: integer;
n: integer;
begin
- Result := 1;
+ Result := 0;
w := 0;
- n := 1;
- while (w <= x) and (n <= VisibleCount) do
+ n := 0;
+ while (w <= x) and (n < VisibleCount) do
begin
Result := n;
inc(w, ItemWidth(VisibleItem(n)));
@@ -595,10 +608,10 @@ var
n: integer;
begin
Result := 0;
- if index < 1 then
+ if index < 0 then
Exit; //==>
- n := 1;
- while (n <= VisibleCount) and (n < index) do
+ n := 0;
+ while (n < VisibleCount) and (n < index) do
begin
Inc(result, ItemWidth(VisibleItem(n)));
inc(n);
@@ -617,11 +630,10 @@ begin
ActivateMenu;
// showing the submenu
mi.SubMenu.ShowAt(self, GetItemPosX(FocusItem)+2, fpgStyle.MenuFont.Height+4);
- mi.SubMenu.OpenerPopup := nil;
- mi.SubMenu.OpenerMenuBar := self;
- mi.SubMenu.DontCloseWidget := self;
-
- uFocusedPopupMenu := mi.SubMenu;
+ mi.SubMenu.OpenerPopup := nil;
+ mi.SubMenu.OpenerMenuBar := self;
+ mi.SubMenu.DontCloseWidget := self;
+ uFocusedPopupMenu := mi.SubMenu;
RePaint;
end
else
@@ -636,7 +648,7 @@ var
n: integer;
begin
// Close all previous popups
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
with VisibleItem(n) do
begin
if (SubMenu <> nil) and (SubMenu.HasHandle) then
@@ -650,7 +662,7 @@ var
mi: TfpgMenuItem;
begin
Result := True;
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
begin
mi := VisibleItem(n);
if (mi.SubMenu <> nil) and (mi.SubMenu.HasHandle) then
@@ -666,7 +678,7 @@ var
n: integer;
begin
Result := -1;
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
begin
with VisibleItem(n) do
begin
@@ -745,7 +757,7 @@ var
n: integer;
begin
// Close all previous popups
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
with VisibleItem(n) do
begin
if (SubMenu <> nil) and (SubMenu.HasHandle) then
@@ -758,10 +770,10 @@ var
n: integer;
begin
Result := 2;
- if index < 1 then
+ if index < 0 then
Exit; //==>
- n := 1;
- while (n <= VisibleCount) and (n < index) do
+ n := 0;
+ while (n < VisibleCount) and (n < index) do
begin
Inc(Result, ItemHeight(VisibleItem(n)));
inc(n);
@@ -778,7 +790,7 @@ begin
Exit; //==>
newf := CalcMouseRow(y);
- if newf < 1 then
+ if newf < 0 then
Exit; //==>
if newf = FFocusItem then
@@ -797,9 +809,8 @@ begin
r.SetRect(0, 0, Width, Height);
if not PtInRect(r, Point(x, y)) then
begin
-// writeln('Pointer out of bounds.');
ClosePopups;
- Exit;
+ Exit; //==>
end;
end;
@@ -812,7 +823,7 @@ begin
inherited HandleLMouseUp(x, y, shiftstate);
newf := CalcMouseRow(y);
- if newf < 1 then
+ if newf < 0 then
Exit;
if not VisibleItem(newf).Selectable then
@@ -853,69 +864,75 @@ begin
consumed := true;
case keycode of
keyUp:
- begin // up
- trycnt := 2;
- i := FFocusItem-1;
- repeat
- while (i >= 1) and not VisibleItem(i).Selectable do dec(i);
-
- if i >= 1 then break;
-
- i := VisibleCount;
- dec(trycnt);
- until trycnt > 0;
-
- if i >= 1 then FFocusItem := i;
- end;
+ begin // up
+ trycnt := 2;
+ i := FFocusItem-1;
+ repeat
+ while (i >= 0) and not VisibleItem(i).Selectable do
+ dec(i);
+
+ if i >= 0 then
+ break; //==>
+
+ i := VisibleCount-1;
+ dec(trycnt);
+ until trycnt > 0;
+
+ if i >= 0 then
+ FFocusItem := i;
+ end;
+
keyDown:
- begin // down
-
- trycnt := 2;
- i := FFocusItem+1;
- repeat
- while (i <= VisibleCount) and not VisibleItem(i).Selectable do inc(i);
-
- if i <= VisibleCount then break;
-
- i := 1;
- dec(trycnt);
- until trycnt > 0;
-
- if i <= VisibleCount then FFocusItem := i;
-
- end;
+ begin // down
+ trycnt := 2;
+ i := FFocusItem+1;
+ repeat
+ while (i < VisibleCount) and not VisibleItem(i).Selectable do
+ inc(i);
+ if i < VisibleCount then
+ Break; //==>
+ i := 0;
+ dec(trycnt);
+ until trycnt > 0;
+
+ if i < VisibleCount then
+ FFocusItem := i;
+ end;
+
keyReturn:
- begin
- DoSelect;
- end;
+ begin
+ DoSelect;
+ end;
keyLeft:
- begin
- if OpenerMenubar <> nil then OpenerMenubar.HandleKeyPress(keycode, shiftstate, consumed);
- end;
+ begin
+ if OpenerMenubar <> nil then
+ OpenerMenubar.HandleKeyPress(keycode, shiftstate, consumed);
+ end;
keyRight:
- begin
- if OpenerMenubar <> nil then OpenerMenubar.HandleKeyPress(keycode, shiftstate, consumed);
- // VisibleItem(FFocusItem).SubMenu <> nil then DoSelect;
- end;
+ begin
+ if OpenerMenubar <> nil then
+ OpenerMenubar.HandleKeyPress(keycode, shiftstate, consumed);
+ // VisibleItem(FFocusItem).SubMenu <> nil then DoSelect;
+ end;
keyBackSpace:
- begin
- //if self.OpenerPopup <> nil then
- Close;
- end;
+ begin
+ //if self.OpenerPopup <> nil then
+ Close;
+ end;
keyEscape:
- begin
- Close;
- op := OpenerPopup;
- while op <> nil do
- begin
- op.Close;
- op := op.OpenerPopup;
- end;
- end;
+ begin
+ Close;
+ op := OpenerPopup;
+ while op <> nil do
+ begin
+ op.Close;
+ op := op.OpenerPopup;
+ end;
+ end;
else
consumed := false;
end;
@@ -927,7 +944,7 @@ begin
// normal char
s := chr(keycode and $00FF) + chr((keycode and $FF00) shr 8);
i := SearchItemByAccel(s);
- if i > 0 then
+ if i >= 0 then
begin
FFocusItem := i;
FollowFocus;
@@ -948,7 +965,7 @@ begin
Canvas.DrawRectangle(0, 0, Width, Height); // black rectangle border
Canvas.DrawButtonFace(1, 1, Width-1, Height-1, []); // 3d rectangle inside black border
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
DrawRow(n, n = FFocusItem);
Canvas.EndDraw;
@@ -956,7 +973,6 @@ end;
procedure TfpgPopupMenu.HandleShow;
begin
-// CaptureMouse;
PrepareToShow;
inherited HandleShow;
end;
@@ -966,7 +982,6 @@ begin
{$IFDEF DEBUG}
writeln(Classname, '.HandleClose');
{$ENDIF}
-// ReleaseMouse;
inherited HandleClose;
end;
@@ -977,10 +992,10 @@ end;
function TfpgPopupMenu.VisibleItem(ind: integer): TfpgMenuItem;
begin
- if (ind < 1) or (ind > FItems.Count) then
+ if (ind < 0) or (ind > FItems.Count-1) then
Result := nil
else
- Result := TfpgMenuItem(FItems.Items[ind-1]);
+ Result := TfpgMenuItem(FItems.Items[ind]);
end;
procedure TfpgPopupMenu.DrawItem(mi: TfpgMenuItem; rect: TfpgRect);
@@ -1028,7 +1043,7 @@ begin
Canvas.BeginDraw;
r.SetRect(FMargin, FMargin, FWidth-(2*FMargin), FHeight-(2*FMargin));
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
begin
mi := VisibleItem(n);
@@ -1092,7 +1107,7 @@ var
n: integer;
begin
result := -1;
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
begin
with VisibleItem(n) do
begin
@@ -1111,7 +1126,6 @@ begin
{$IFDEF DEBUG}
writeln(Classname, '.HandleMouseEnter');
{$ENDIF}
-// CaptureMouse;
inherited HandleMouseEnter;
end;
@@ -1121,9 +1135,8 @@ begin
writeln(Classname, '.HandleMouseExit');
{$ENDIF}
inherited HandleMouseExit;
- FFocusItem := 0;
+ FFocusItem := -1;
Repaint;
-// ReleaseMouse;
end;
// Collecting visible items and measuring sizes
@@ -1157,7 +1170,7 @@ begin
tw := 0; // text width
hkw := 0; // hotkey width
FSymbolWidth := 0;
- for n := 1 to VisibleCount do
+ for n := 0 to VisibleCount-1 do
begin
mi := VisibleItem(n);
x := ItemHeight(mi);
@@ -1193,12 +1206,12 @@ begin
Result := n;
// sanity check
- if y < 1 then
+ if y < 0 then
Exit
else
- n := 1;
+ n := 0;
- while (h <= y) and (n <= VisibleCount) do
+ while (h <= y) and (n < VisibleCount) do
begin
Result := n;
inc(h, ItemHeight(VisibleItem(n)));
@@ -1220,7 +1233,7 @@ begin
FSymbolWidth := FMenuFont.Height+2;
FBeforeShow := nil;
- FFocusItem := 0;
+ FFocusItem := -1;
OpenerPopup := nil;
OpenerMenubar := nil;
end;
@@ -1230,7 +1243,6 @@ begin
{$IFDEF DEBUG}
writeln(Classname, '.Destroy');
{$ENDIF}
-// ReleaseMouse;
FItems.Free;
inherited Destroy;
end;
@@ -1267,7 +1279,7 @@ begin
end;
end;
-function TfpgPopupMenu.AddMenuItem(const AMenuName: string;
+function TfpgPopupMenu.AddMenuItem(const AMenuName: TfpgString;
const hotkeydef: string; HandlerProc: TNotifyEvent): TfpgMenuItem;
begin
result := TfpgMenuItem.Create(self);
@@ -1283,7 +1295,7 @@ begin
end;
end;
-function TfpgPopupMenu.MenuItemByName(const AMenuName: string): TfpgMenuItem;
+function TfpgPopupMenu.MenuItemByName(const AMenuName: TfpgString): TfpgMenuItem;
var
i: integer;
begin
diff --git a/src/gui/gui_mru.pas b/src/gui/gui_mru.pas
index b4523ba9..1c97dc58 100644
--- a/src/gui/gui_mru.pas
+++ b/src/gui/gui_mru.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_panel.pas b/src/gui/gui_panel.pas
index 94b83b35..463aaa32 100644
--- a/src/gui/gui_panel.pas
+++ b/src/gui/gui_panel.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -51,6 +51,7 @@ type
public
constructor Create(AOwner: TComponent); override;
end;
+
TfpgBevel = class(TfpgAbstractPanel)
private
@@ -65,6 +66,7 @@ type
property OnClick;
property OnDoubleClick;
end;
+
TfpgPanel = class(TfpgAbstractPanel)
private
@@ -109,6 +111,7 @@ type
property OnClick;
property OnDoubleClick;
end;
+
TfpgGroupBox = class(TfpgAbstractPanel)
private
diff --git a/src/gui/gui_popupcalendar.pas b/src/gui/gui_popupcalendar.pas
index 1fcfb44b..51f11d28 100644
--- a/src/gui/gui_popupcalendar.pas
+++ b/src/gui/gui_popupcalendar.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -54,8 +54,6 @@ type
TfpgOnDateSetEvent = procedure(Sender: TObject; const ADate: TDateTime) of object;
- { TfpgPopupCalendar }
-
TfpgPopupCalendar = class(TfpgPopupWindow)
private
FMonthOffset: integer;
@@ -78,7 +76,7 @@ type
function GetDateElement(Index: integer): Word;
procedure PopulateDays;
procedure CalculateMonthOffset;
- function CalculateCellDay(const ACol, ARow: LongWord): Word;
+ function CalculateCellDay(const ACol, ARow: Integer): Integer;
procedure SetDateElement(Index: integer; const AValue: Word);
procedure SetDateValue(const AValue: TDateTime);
procedure SetMaxDate(const AValue: TDateTime);
@@ -115,8 +113,6 @@ type
end;
- { TfpgCalendarCombo }
-
TfpgCalendarCombo = class(TfpgAbstractComboBox)
private
FDate: TDateTime;
@@ -166,18 +162,18 @@ uses
procedure TfpgPopupCalendar.PopulateDays;
var
r, c: integer;
- lCellDay: Word;
+ lCellDay: Integer;
begin
grdName1.BeginUpdate;
- for r := 0 to 6 do
- for c := 1 to 7 do
+ for r := -1 to 5 do
+ for c := 0 to 6 do
begin
- if r = 0 then
- grdName1.ColumnTitle[c] := ShortDayNames[c]
+ if r = -1 then
+ grdName1.ColumnTitle[c] := ShortDayNames[c+1] // ShortDayNames is 1-based indexing
else
begin
lCellDay := CalculateCellDay(c, r);
- if lCellDay = 0 then
+ if lCellDay = -1 then
grdName1.Cells[c, r] := ''
else
grdName1.Cells[c, r] := IntToStr(lCellDay);
@@ -246,11 +242,11 @@ begin
FMonthOffset := 2 - DayOfWeek(lTheFirst);
end;
-function TfpgPopupCalendar.CalculateCellDay(const ACol, ARow: LongWord): Word;
+function TfpgPopupCalendar.CalculateCellDay(const ACol, ARow: Integer): Integer;
begin
- Result := FMonthOffset + (ACol-1) + (ARow-1) * 7;
+ Result := FMonthOffset + ACol + ARow * 7;
if (Result < 1) or (Result > MonthDays[IsLeapYear(Year), Month]) then
- Result := 0;
+ Result := -1;
end;
procedure TfpgPopupCalendar.SetDateElement(Index: integer; const AValue: Word);
@@ -352,8 +348,8 @@ begin
edtMonth.Text := LongMonthNames[Month];
DecodeDate(FDate, lY, lM, lD);
- grdName1.FocusCol := (lD - FMonthOffset) mod 7 + 1;
- grdName1.FocusRow := (lD - FMonthOffset) div 7 + 1;
+ grdName1.FocusCol := (lD - FMonthOffset) mod 7{ + 1};
+ grdName1.FocusRow := (lD - FMonthOffset) div 7{ + 1};
end;
end;
@@ -634,16 +630,17 @@ begin
end;
{@VFD_BODY_END: fpgPopupCalendar}
-
+{
// Setup localization
// UI Designer doesn't support resource strings yet!
- grdName1.ColumnTitle[1] := rsShortSun;
- grdName1.ColumnTitle[2] := rsShortMon;
- grdName1.ColumnTitle[3] := rsShortTue;
- grdName1.ColumnTitle[4] := rsShortWed;
- grdName1.ColumnTitle[5] := rsShortThu;
- grdName1.ColumnTitle[6] := rsShortFri;
- grdName1.ColumnTitle[7] := rsShortSat;
+ grdName1.ColumnTitle[0] := rsShortSun;
+ grdName1.ColumnTitle[1] := rsShortMon;
+ grdName1.ColumnTitle[2] := rsShortTue;
+ grdName1.ColumnTitle[3] := rsShortWed;
+ grdName1.ColumnTitle[4] := rsShortThu;
+ grdName1.ColumnTitle[5] := rsShortFri;
+ grdName1.ColumnTitle[6] := rsShortSat;
+}
btnToday.Text := rsToday;
end;
@@ -771,7 +768,7 @@ begin
FDropDown := TfpgPopupCalendar.Create(nil, FocusRootWidget);
ddw := TfpgPopupCalendar(FDropDown);
ddw.DontCloseWidget := self;
- { Set to false CloseOnSelect to leave opened popup calendar menu}
+ { Set to false CloseOnSelect to leave opened popup calendar menu }
ddw.CloseOnSelect := CloseOnSelect;
ddw.CallerWidget := self;
@@ -782,8 +779,8 @@ begin
ddw.MaxDate := FMaxDate;
ddw.DateValue := FDate;
ddw.ShowAt(Parent, Left, Top+Height);
-{ I added this call to UpdateCalendar because sometimes after btnTodayClicked event,
- reopeing the dropdown menu gave an empty calendar}
+ { I added this call to UpdateCalendar because sometimes after
+ btnTodayClicked event, reopeing the dropdown menu gave an empty calendar }
ddw.UpdateCalendar; //slapshot
ddw.PopupFrame := True;
ddw.OnValueSet := @InternalOnValueSet;
diff --git a/src/gui/gui_progressbar.pas b/src/gui/gui_progressbar.pas
index 8b9d4612..d6d25b60 100644
--- a/src/gui/gui_progressbar.pas
+++ b/src/gui/gui_progressbar.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
@@ -49,7 +49,7 @@ type
property Position: longint read FPosition write SetPBPosition default 0;
property Step: longint read FStep write SetStep;
// property FontName: string read GetFontName write SetFontName;
- property ShowCaption: boolean read FShowCaption write SetShowCaption;
+ property ShowCaption: boolean read FShowCaption write SetShowCaption default False;
public
constructor Create(AOwner: TComponent); override;
procedure StepIt;
diff --git a/src/gui/gui_radiobutton.pas b/src/gui/gui_radiobutton.pas
index 0ca1a11e..cf49365e 100644
--- a/src/gui/gui_radiobutton.pas
+++ b/src/gui/gui_radiobutton.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_scrollbar.pas b/src/gui/gui_scrollbar.pas
index 86f6a77f..2668f659 100644
--- a/src/gui/gui_scrollbar.pas
+++ b/src/gui/gui_scrollbar.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_style.pas b/src/gui/gui_style.pas
index bdc7979e..9cd32df2 100644
--- a/src/gui/gui_style.pas
+++ b/src/gui/gui_style.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_tab.pas b/src/gui/gui_tab.pas
index a405d349..52bd8885 100644
--- a/src/gui/gui_tab.pas
+++ b/src/gui/gui_tab.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_trackbar.pas b/src/gui/gui_trackbar.pas
index fdb7697d..a4a82d69 100644
--- a/src/gui/gui_trackbar.pas
+++ b/src/gui/gui_trackbar.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/gui_tree.pas b/src/gui/gui_tree.pas
index c52914bc..64bf6718 100644
--- a/src/gui/gui_tree.pas
+++ b/src/gui/gui_tree.pas
@@ -1,5 +1,5 @@
{
- fpGUI - Free Pascal GUI Library
+ fpGUI - Free Pascal GUI Toolkit
Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
diff --git a/src/gui/promptuserdialog.inc b/src/gui/promptuserdialog.inc
index 9c5e5d0f..14124d54 100644
--- a/src/gui/promptuserdialog.inc
+++ b/src/gui/promptuserdialog.inc
@@ -3,8 +3,6 @@
{$IFDEF read_interface}
-{ TfpgPromptUserDialog }
-
TfpgPromptUserDialog = class(TfpgBaseDialog)
private
lblTitle: TfpgLabel;