summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/apps/uidesigner/vfdfile.pas2
-rw-r--r--examples/apps/uidesigner/vfdpropeditgrid.pas5
-rw-r--r--examples/gui/edits/edittest.lpi1
-rw-r--r--examples/gui/gridtest/gridtest.lpr5
-rw-r--r--src/gui/gui_basegrid.pas24
-rw-r--r--src/gui/gui_grid.pas9
6 files changed, 30 insertions, 16 deletions
diff --git a/examples/apps/uidesigner/vfdfile.pas b/examples/apps/uidesigner/vfdfile.pas
index 9162d3b0..1f0a96df 100644
--- a/examples/apps/uidesigner/vfdfile.pas
+++ b/examples/apps/uidesigner/vfdfile.pas
@@ -354,7 +354,7 @@ begin
'uses' + LineEnding +
' SysUtils, Classes, gfxbase, fpgfx, gui_edit, ' + LineEnding +
' gfx_widget, gui_form, gui_label, gui_button,' + LineEnding +
- ' gui_listbox, gui_memo, gui_combobox, gui_grid, ' + LineEnding +
+ ' gui_listbox, gui_memo, gui_combobox, gui_basegrid, gui_grid, ' + LineEnding +
' gui_dialogs, gui_checkbox, gui_tree, gui_trackbar, ' + LineEnding +
' gui_progressbar, gui_radiobutton, gui_tab, gui_menu,' + LineEnding +
' gui_bevel, gui_popupcalendar, gui_gauge;' + LineEnding + LineEnding +
diff --git a/examples/apps/uidesigner/vfdpropeditgrid.pas b/examples/apps/uidesigner/vfdpropeditgrid.pas
index b14cb590..e469abec 100644
--- a/examples/apps/uidesigner/vfdpropeditgrid.pas
+++ b/examples/apps/uidesigner/vfdpropeditgrid.pas
@@ -34,6 +34,7 @@ uses
gui_memo,
gui_combobox,
gui_customgrid,
+ gui_basegrid,
gui_grid,
gui_checkbox,
vfdforms,
@@ -56,7 +57,7 @@ type
TColumnsGrid = class(TfpgCustomGrid)
protected
function GetRowCount: Longword; override;
- procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer); override;
+ procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
public
dbgrid: TfpgStringGrid;
constructor Create(AOwner: TComponent); override;
@@ -385,7 +386,7 @@ begin
end;
end;
-procedure TColumnsGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer);
+procedure TColumnsGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState);
var
s: string;
x: integer;
diff --git a/examples/gui/edits/edittest.lpi b/examples/gui/edits/edittest.lpi
index 302cd2c1..e9661391 100644
--- a/examples/gui/edits/edittest.lpi
+++ b/examples/gui/edits/edittest.lpi
@@ -9,6 +9,7 @@
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
+ <IconPath Value="./"/>
<TargetFileExt Value=""/>
</General>
<VersionInfo>
diff --git a/examples/gui/gridtest/gridtest.lpr b/examples/gui/gridtest/gridtest.lpr
index 79ad595d..3209911e 100644
--- a/examples/gui/gridtest/gridtest.lpr
+++ b/examples/gui/gridtest/gridtest.lpr
@@ -11,6 +11,7 @@ uses
gfxbase,
fpgfx,
gui_form,
+ gui_basegrid,
gui_grid,
gui_button,
gui_checkbox,
@@ -39,7 +40,7 @@ type
procedure chkShowGridChange(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
procedure stringgridDrawCell(Sender: TObject; const ARow, ACol: Longword;
- const ARect: TfpgRect; AFlags: integer; var ADefaultDrawing: boolean);
+ const ARect: TfpgRect; const AFlags: TfpgGridDrawState; var ADefaultDrawing: boolean);
protected
procedure HandleShow; override;
public
@@ -78,7 +79,7 @@ begin
end;
procedure TMainForm.stringgridDrawCell(Sender: TObject; const ARow,
- ACol: Longword; const ARect: TfpgRect; AFlags: integer;
+ ACol: Longword; const ARect: TfpgRect; const AFlags: TfpgGridDrawState;
var ADefaultDrawing: boolean);
begin
if (ACol = 1) and (ARow = 3) then
diff --git a/src/gui/gui_basegrid.pas b/src/gui/gui_basegrid.pas
index ecccf8ef..cd75e132 100644
--- a/src/gui/gui_basegrid.pas
+++ b/src/gui/gui_basegrid.pas
@@ -33,10 +33,12 @@ uses
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; AFlags: integer; var ADefaultDrawing: boolean) of object;
+ TfpgDrawCellEvent = procedure(Sender: TObject; const ARow, ACol: Longword; 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.
@@ -103,9 +105,9 @@ type
function GetColumnCount: Longword; virtual;
function GetRowCount: Longword; virtual;
function CanSelectCell(const ARow, ACol: Longword): boolean;
- function DoDrawCellEvent(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer): boolean; virtual;
+ 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: integer); virtual;
+ 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;
procedure HandlePaint; override;
@@ -288,7 +290,7 @@ begin
end;
function TfpgBaseGrid.DoDrawCellEvent(ARow, ACol: Longword; ARect: TfpgRect;
- AFlags: integer): boolean;
+ AFlags: TfpgGridDrawState): boolean;
begin
Result := True;
if Assigned(OnDrawCell) then
@@ -302,7 +304,7 @@ begin
FOnCanSelectCell(self, ARow, ACol, ACanSelect);
end;
-procedure TfpgBaseGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer);
+procedure TfpgBaseGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState);
var
s: string;
begin
@@ -544,7 +546,9 @@ var
col: Longword;
row: Longword;
clipr: TfpgRect; // clip rectangle
+ drawstate: TfpgGridDrawState;
begin
+ drawstate := [];
Canvas.BeginDraw;
// inherited HandlePaint;
Canvas.ClearClipRect;
@@ -613,8 +617,14 @@ begin
end;
Canvas.AddClipRect(r);
Canvas.FillRectangle(r);
- if DoDrawCellEvent(row, col, r, 0) then
- DrawCell(row, col, r, 0);
+ // setup drawstate
+ if FFocused then
+ Include(drawstate, gdFocused);
+ if (row = FFocusRow) and (col = FFocusCol) then
+ Include(drawstate, gdSelected);
+
+ if DoDrawCellEvent(row, col, r, drawstate) then
+ DrawCell(row, col, r, drawstate);
// drawing grid lines
if FShowGrid then
diff --git a/src/gui/gui_grid.pas b/src/gui/gui_grid.pas
index 7a869299..c5bd8bd3 100644
--- a/src/gui/gui_grid.pas
+++ b/src/gui/gui_grid.pas
@@ -35,6 +35,7 @@ uses
SysUtils,
gfxbase,
fpgfx,
+ gui_basegrid,
gui_customgrid;
type
@@ -74,7 +75,7 @@ type
FFixedFont: TfpgFont;
protected
function GetRowCount: Longword; override;
- procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer); override;
+ procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@@ -123,7 +124,7 @@ type
procedure DoDeleteColumn(ACol: integer); override;
procedure DoSetRowCount(AValue: integer); override;
function DoCreateColumnClass: TfpgStringColumn; reintroduce; override;
- procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer); override;
+ procedure DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
{ AIndex is 1-based. }
property Columns[AIndex: Longword]: TfpgStringColumn read GetColumns;
public
@@ -243,7 +244,7 @@ begin
Result := FFileList.Count;
end;
-procedure TfpgFileGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: integer);
+procedure TfpgFileGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect; AFlags: TfpgGridDrawState);
const
modestring: string[9] = 'xwrxwrxwr'; // must be in reverse order
var
@@ -519,7 +520,7 @@ begin
end;
procedure TfpgCustomStringGrid.DrawCell(ARow, ACol: Longword; ARect: TfpgRect;
- AFlags: integer);
+ AFlags: TfpgGridDrawState);
var
x: TfpgCoord;
begin