diff options
author | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-02-25 09:14:10 +0000 |
---|---|---|
committer | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-02-25 09:14:10 +0000 |
commit | 450da5d28e0173db8484a0be094bfc23872ecedc (patch) | |
tree | 46b3f75a9e3d9bf85911d7a66fa9783ada0d5963 /src/gui | |
parent | eae9a03adbefd12de7881d0cb933f4d2330d3b11 (diff) | |
download | fpGUI-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.lpk | 14 | ||||
-rw-r--r-- | src/gui/fpgui_package.pas | 3 | ||||
-rw-r--r-- | src/gui/gui_editcombo.pas | 32 | ||||
-rw-r--r-- | src/gui/gui_listbox.pas | 2 |
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; |