1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
{
*****************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
}
unit Gtk3WSSplitter;
{$mode objfpc}{$H+}
{$I gtk3defines.inc}
interface
uses
// LCL
LCLProc, ExtCtrls, Classes, Controls, SysUtils, types, Graphics, LCLType,
// widgetset
WSExtCtrls, WSLCLClasses, WSPairSplitter,
Gtk3WSControls,
PairSplitter;
type
{ TGtk3WSPairSplitterSide }
TGtk3WSPairSplitterSide = class(TWSPairSplitterSide)
published
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLHandle; override;
end;
{ TGtk3WSCustomPairSplitter }
TGtk3WSCustomPairSplitter = class(TWSCustomPairSplitter)
published
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLHandle; override;
class function AddSide(ASplitter: TCustomPairSplitter; ASide: TPairSplitterSide; Side: integer): Boolean; override;
class function RemoveSide(ASplitter: TCustomPairSplitter; ASide: TPairSplitterSide; Side: integer): Boolean; override;
class function SetPosition(ASplitter: TCustomPairSplitter; var NewPosition: integer): Boolean; override;
// special cursor handling
class function GetSplitterCursor(ASplitter: TCustomPairSplitter; var ACursor: TCursor): Boolean; override;
class function SetSplitterCursor(ASplitter: TCustomPairSplitter; ACursor: TCursor): Boolean; override;
end;
implementation
uses
wsproc,gtk3widgets,lazgtk3;
{ TGtk3WSPairSplitterSide }
class function TGtk3WSPairSplitterSide.CreateHandle(
const AWinControl: TWinControl; const AParams: TCreateParams): TLCLHandle;
begin
Result:=TLCLHandle(TGtk3Window.Create(AWinControl, AParams));
end;
{ TGtk3WSSplitter }
{ TGtk3WSCustomPairSplitter }
class function TGtk3WSCustomPairSplitter.CreateHandle(
const AWinControl: TWinControl; const AParams: TCreateParams): TLCLHandle;
begin
Result:=TLCLHandle(TGtk3Paned.Create(AWinControl, AParams));
end;
class function TGtk3WSCustomPairSplitter.AddSide(ASplitter: TCustomPairSplitter;
ASide: TPairSplitterSide; Side: integer): Boolean;
var
paned: TGtk3Paned;
wside:TGtk3Widget;
begin
Result := False;
if not (WSCheckHandleAllocated(ASplitter, 'AddSide - splitter') and
WSCheckHandleAllocated(ASide, 'AddSide - side'))
then Exit;
if (Side < 0) or (Side > 1) then exit;
paned:=TGtk3Paned(ASplitter.Handle);
wside:=TGtk3Widget(ASide.Handle);
if Side=0 then
begin
PGtkWIdget(wside.Widget)^.set_parent(nil);
PGtkPaned(paned.Widget)^.add1(wside.Widget);
end
else
begin
PGtkWidget(wside.Widget)^.set_parent(nil);
PGtkPaned(paned.Widget)^.add2(wside.Widget);
end;
Result := True;
end;
class function TGtk3WSCustomPairSplitter.RemoveSide(ASplitter: TCustomPairSplitter;
ASide: TPairSplitterSide; Side: integer): Boolean;
begin
Result := False;
end;
class function TGtk3WSCustomPairSplitter.SetPosition(
ASplitter: TCustomPairSplitter; var NewPosition: integer): Boolean;
var
paned:PGtkPaned;
begin
Result:=false;
if not WSCheckHandleAllocated(ASplitter, ClassName+'.SetPosition') then
Exit;
paned:=PGtkPaned(TGtk3Paned(ASplitter.Handle).Widget);
paned^.set_position(NewPosition);
Result:=true;
///Result:=inherited SetPosition(ASplitter, NewPosition);
end;
class function TGtk3WSCustomPairSplitter.GetSplitterCursor(
ASplitter: TCustomPairSplitter; var ACursor: TCursor): Boolean;
begin
ACursor:=crHsplit;
Result:=true;
end;
class function TGtk3WSCustomPairSplitter.SetSplitterCursor(
ASplitter: TCustomPairSplitter; ACursor: TCursor): Boolean;
begin
//ASplitter.Cursor:=ACursor;
Result:=false;
end;
end.
|