summaryrefslogtreecommitdiff
path: root/src/gui/fpg_listbox.pas
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2009-03-27 08:37:36 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2009-03-27 08:37:36 +0000
commitc74a9d112f38ded37c8f76808bd8ad80e107a553 (patch)
treeb6af67161f397cc11b99e5390ba869163a7ec278 /src/gui/fpg_listbox.pas
parent9196c30d5247ffa4233fcc336df7709217210fce (diff)
downloadfpGUI-c74a9d112f38ded37c8f76808bd8ad80e107a553.tar.xz
* Applied DragToReorder patch from David Emerson.
* Minor changes to his patch by publishing the property when needed. * Updated the ListBox and ColorListBox demos to show the feature.
Diffstat (limited to 'src/gui/fpg_listbox.pas')
-rw-r--r--src/gui/fpg_listbox.pas22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/gui/fpg_listbox.pas b/src/gui/fpg_listbox.pas
index 8465987f..8e9af727 100644
--- a/src/gui/fpg_listbox.pas
+++ b/src/gui/fpg_listbox.pas
@@ -50,6 +50,7 @@ type
TfpgBaseListBox = class(TfpgWidget)
private
FHotTrack: boolean;
+ FDragToReorder: boolean;
FOnChange: TNotifyEvent;
FOnScroll: TNotifyEvent;
FOnSelect: TNotifyEvent;
@@ -79,6 +80,7 @@ type
procedure DrawItem(num: integer; rect: TfpgRect; flags: integer); virtual;
procedure DoChange;
procedure DoSelect;
+ procedure Exchange(Index1, Index2: Integer); virtual; abstract;
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed : boolean); override;
procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
@@ -92,6 +94,7 @@ type
property FontDesc: string read GetFontDesc write SetFontDesc;
property HotTrack: boolean read FHotTrack write FHotTrack;
property PopupFrame: boolean read FPopupFrame write SetPopupFrame;
+ property DragToReorder: boolean read FDragToReorder write FDragToReorder default False;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@@ -115,6 +118,7 @@ type
protected
FItems: TStringList;
procedure DrawItem(num: integer; rect: TfpgRect; flags: integer); override;
+ procedure Exchange(Index1, Index2: Integer); override;
procedure HandleKeyChar(var AText: TfpgChar; var shiftstate: TShiftState; var consumed: boolean); override;
property Items: TStringList read FItems;
public
@@ -130,6 +134,7 @@ type
published
property AutoHeight;
property BackgroundColor default clListBox;
+ property DragToReorder;
property FocusItem;
property FontDesc;
property HotTrack;
@@ -169,6 +174,7 @@ type
protected
FItems: TList;
procedure DrawItem(num: integer; rect: TfpgRect; flags: integer); override;
+ procedure Exchange(Index1, Index2: Integer); override;
// procedure HandleKeyChar(var AText: TfpgChar; var shiftstate: TShiftState; var consumed: boolean); override;
property Items: TList read FItems;
property Color: TfpgColor read GetColor write SetColor;
@@ -178,7 +184,6 @@ type
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ItemCount: integer; override;
-
end;
@@ -188,6 +193,7 @@ type
property BackgroundColor default clListBox;
property Color;
property ColorPalette;
+ property DragToReorder;
property FocusItem;
property FontDesc;
property HotTrack;
@@ -555,6 +561,9 @@ begin
if NewFocus < 0 then
NewFocus := 0;
+ if FDragToReorder and FMouseDragging and (NewFocus<ItemCount) then
+ Exchange(FocusItem, NewFocus);
+
FocusItem := NewFocus;
end;
@@ -745,6 +754,7 @@ begin
FPopupFrame := False;
FHotTrack := False;
FAutoHeight := False;
+ FDragToReorder := False;
FScrollBar := TfpgScrollBar.Create(self);
FScrollBar.Name := '_BaseListBoxScrollBar';
@@ -812,6 +822,11 @@ begin
fpgStyle.DrawString(Canvas, rect.left+2, rect.top+1, FItems.Strings[num], Enabled);
end;
+procedure TfpgTextListBox.Exchange (Index1, Index2: Integer);
+begin
+ Items.Exchange(Index1, Index2);
+end;
+
procedure TfpgTextListBox.HandleKeyChar(var AText: TfpgChar;
var shiftstate: TShiftState; var consumed: boolean);
var
@@ -1143,6 +1158,11 @@ begin
fpgStyle.DrawString(Canvas, FColorboxWidth + 8 + rect.left, rect.top+1, itm.ColorName, Enabled);
end;
+procedure TfpgBaseColorListBox.Exchange (Index1, Index2: Integer);
+begin
+ Items.Exchange(Index1, Index2);
+end;
+
constructor TfpgBaseColorListBox.Create(AOwner: TComponent);
begin
inherited Create (AOwner );