summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-02-25 09:14:10 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-02-25 09:14:10 +0000
commit450da5d28e0173db8484a0be094bfc23872ecedc (patch)
tree46b3f75a9e3d9bf85911d7a66fa9783ada0d5963 /src/gui
parenteae9a03adbefd12de7881d0cb933f4d2330d3b11 (diff)
downloadfpGUI-450da5d28e0173db8484a0be094bfc23872ecedc.tar.xz
* Scrolling the dropdown to the end, it doesn't display the last item.
Example: in a un-filtered list the name Yves doesn't get displayed. * The user couldn't select the last item in the dropdown list (filtered or not). Using the keyboard or mouse, selecting the last item didn't close the combobox and select the item. * InternalListBoxSelect() has some bugs. Items property is 0-based but FocusItem is 1-based.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/fpgui_package.lpk14
-rw-r--r--src/gui/fpgui_package.pas3
-rw-r--r--src/gui/gui_editcombo.pas32
-rw-r--r--src/gui/gui_listbox.pas2
4 files changed, 33 insertions, 18 deletions
diff --git a/src/gui/fpgui_package.lpk b/src/gui/fpgui_package.lpk
index 0e178984..06e68ea5 100644
--- a/src/gui/fpgui_package.lpk
+++ b/src/gui/fpgui_package.lpk
@@ -31,7 +31,7 @@
<License Value="Modified LGPL
"/>
<Version Minor="6" Release="1"/>
- <Files Count="28">
+ <Files Count="29">
<Item1>
<Filename Value="gui_button.pas"/>
<UnitName Value="gui_button"/>
@@ -144,16 +144,20 @@
<Filename Value="gui_gauge.pas"/>
<UnitName Value="gui_gauge"/>
</Item28>
+ <Item29>
+ <Filename Value="gui_editcombo.pas"/>
+ <UnitName Value="gui_editcombo"/>
+ </Item29>
</Files>
<LazDoc Paths="../../docs/xml/gui/"/>
<RequiredPkgs Count="2">
<Item1>
- <PackageName Value="FCL"/>
- <MinVersion Major="1" Valid="True"/>
- </Item1>
- <Item2>
<PackageName Value="fpgfx_package"/>
<MinVersion Minor="6" Release="1" Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="FCL"/>
+ <MinVersion Major="1" Valid="True"/>
</Item2>
</RequiredPkgs>
<UsageOptions>
diff --git a/src/gui/fpgui_package.pas b/src/gui/fpgui_package.pas
index ad9e692a..964bea47 100644
--- a/src/gui/fpgui_package.pas
+++ b/src/gui/fpgui_package.pas
@@ -11,7 +11,8 @@ uses
gui_listbox, gui_memo, gui_scrollbar, gui_bevel, gui_checkbox,
gui_radiobutton, gui_trackbar, gui_tab, gui_basegrid, gui_listview,
gui_customgrid, gui_progressbar, gui_menu, gui_style, gui_grid, gui_tree,
- gui_iniutils, gui_mru, fpgui_db, gui_popupcalendar, gui_gauge;
+ gui_iniutils, gui_mru, fpgui_db, gui_popupcalendar, gui_gauge,
+ gui_editcombo;
implementation
diff --git a/src/gui/gui_editcombo.pas b/src/gui/gui_editcombo.pas
index 7e8ffc85..00fd11c3 100644
--- a/src/gui/gui_editcombo.pas
+++ b/src/gui/gui_editcombo.pas
@@ -61,7 +61,8 @@ uses
gfx_popupwindow;
type
- TAllowNew = (anNo,anYes,anAsk);
+ TAllowNew = (anNo, anYes, anAsk);
+
TfpgAbstractEditCombo = class(TfpgWidget)
private
@@ -109,6 +110,7 @@ type
procedure HandlePaint; override;
procedure PaintInternalButton; virtual;
property DropDownCount: integer read FDropDownCount write SetDropDownCount default 8;
+ // property is 0-based
property Items: TStringList read FItems; {$Note Make this read/write}
// property is 1-based
property FocusItem: integer read FFocusItem write SetFocusItem;
@@ -349,11 +351,11 @@ begin
begin
FreeAndNil(FDropDown);
OriginalFocusRoot := FocusRootWidget;
- FDropDown := TDropDownWindow.Create(nil);
+ FDropDown := TDropDownWindow.Create(nil);
ddw := TDropDownWindow(FDropDown);
ddw.Width := Width;
- ddw.CallerWidget := self;
- ddw.ListBox.OnSelect := @InternalListBoxSelect;
+ ddw.CallerWidget := self;
+ ddw.ListBox.OnSelect := @InternalListBoxSelect;
// Assign combobox text items to internal listbox
if FAutoCompletion then
@@ -371,7 +373,7 @@ begin
rowcount := FDropDownCount;
if rowcount < 1 then
rowcount := 1;
- ddw.Height := (ddw.ListBox.RowHeight * rowcount) + 4;
+ ddw.Height := (ddw.ListBox.RowHeight * rowcount) + 4;
// set default focusitem
ddw.ListBox.FocusItem := FFocusItem;
@@ -396,9 +398,17 @@ end;
procedure TfpgAbstractEditCombo.InternalListBoxSelect(Sender: TObject);
var
- msgp: TfpgMessageParams;
+ i: Integer;
begin
- FFocusItem := TDropDownWindow(FDropDown).ListBox.FocusItem;
+ 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
+ begin
+ FFocusItem := i+1;
+ Break;
+ end;
+ end;
FDropDown.Close;
if HasHandle then
@@ -442,7 +452,7 @@ begin
begin
for i := 0 to FItems.Count - 1 do
begin
- if SameText(UTF8Copy(FItems.Strings[i],1,UTF8Length(AVAlue)), AValue) then
+ if SameText(UTF8Copy(FItems.Strings[i], 1, UTF8Length(AVAlue)), AValue) then
begin
SetFocusItem(i+1); // our FocusItem is 1-based. TStringList is 0-based.
Break;
@@ -484,9 +494,9 @@ var
s: string;
prevval: string;
begin
- prevval := FText;
- s := UTF8Encode(AText);
- consumed := False;
+ prevval := FText;
+ s := UTF8Encode(AText);
+ consumed := False;
// Handle only printable characters
// Note: This is not UTF-8 compliant!
diff --git a/src/gui/gui_listbox.pas b/src/gui/gui_listbox.pas
index dd83bd5d..29cf50f7 100644
--- a/src/gui/gui_listbox.pas
+++ b/src/gui/gui_listbox.pas
@@ -273,7 +273,7 @@ begin
FScrollBar.SliderSize := pn / ItemCount
else
FScrollBar.SliderSize := 1;
- FScrollBar.Max := ItemCount-pn{+1}; // change to avoid the last blanc item
+ FScrollBar.Max := ItemCount-pn+1;
FScrollBar.Position := FFirstItem;
FScrollBar.RepaintSlider;
end;