File: gtk3wssplitter.pas

package info (click to toggle)
lazarus 4.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 275,760 kB
  • sloc: pascal: 2,341,904; xml: 509,420; makefile: 348,726; cpp: 93,608; sh: 3,387; java: 609; perl: 297; sql: 222; ansic: 137
file content (135 lines) | stat: -rw-r--r-- 3,886 bytes parent folder | download
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.