summaryrefslogtreecommitdiff
path: root/UGnome.pas
diff options
context:
space:
mode:
Diffstat (limited to 'UGnome.pas')
-rw-r--r--UGnome.pas342
1 files changed, 260 insertions, 82 deletions
diff --git a/UGnome.pas b/UGnome.pas
index 532301d..c0b92eb 100644
--- a/UGnome.pas
+++ b/UGnome.pas
@@ -52,28 +52,52 @@ type
property Time: time_t read GetTime write SetTime;
end;
- TEphyNotebook = class;
- TEphyNotebookReorderedEvent = procedure (Sender: TObject; const Source, Dest: integer) of object;
+
TEphyNotebookTabCloseEvent = procedure (Sender: TObject; const TabNum: integer; var CanClose: boolean) of object;
- TEphyNotebookTabDoubleClickEvent = procedure (Sender: TObject; const TabNum: integer) of object;
- TEphyNotebookFindNotebookAtPointerEvent = function (Sender: TObject; const AbsX, AbsY: integer): TEphyNotebook of object;
- TEphyNotebookMoveTabToAnotherNotebookEvent = function (Sender: TObject; Destination: TEphyNotebook; const SourceTabNo, DestTabNo: integer): boolean of object;
- TEphyNotebookTabSwitchedEvent = procedure (Sender: TObject; const NewTabNum: integer; const ShouldFocus: boolean) of object;
- TEphyNotebookTabFocusOnlyEvent = procedure (Sender: TObject; const NewTabNum: integer) of object;
- // Extended capatibilities notebook (icons, close buttons, reordering by drag&drop)
+
TEphyNotebook = class(TGTKNotebook)
private
FShowCloseButtons: boolean;
+ FOnTabClose: TEphyNotebookTabCloseEvent;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ function AppendPage(Child: TGTKControl; Caption: string): integer;
+ function InsertPage(Position: integer; Child: TGTKControl; Caption: string): integer;
+ function GetTabCaption(PageNo: integer): string;
+ procedure SetTabCaption(PageNo: integer; Caption: string);
+ procedure SetTabTooltip(PageNo: integer; ATooltip: string);
+ procedure SetShowCloseButtons(Value: boolean);
+ published
+ property ShowCloseButtons: boolean read FShowCloseButtons write SetShowCloseButtons default False;
+ property OnTabClose: TEphyNotebookTabCloseEvent read FOnTabClose write FOnTabClose;
+ end;
+
+
+
+ TEphyNotebookx = class;
+
+ TEphyNotebookxReorderedEvent = procedure (Sender: TObject; const Source, Dest: integer) of object;
+ TEphyNotebookxTabCloseEvent = procedure (Sender: TObject; const TabNum: integer; var CanClose: boolean) of object;
+ TEphyNotebookxTabDoubleClickEvent = procedure (Sender: TObject; const TabNum: integer) of object;
+ TEphyNotebookxFindNotebookAtPointerEvent = function (Sender: TObject; const AbsX, AbsY: integer): TEphyNotebookx of object;
+ TEphyNotebookxMoveTabToAnotherNotebookEvent = function (Sender: TObject; Destination: TEphyNotebookx; const SourceTabNo, DestTabNo: integer): boolean of object;
+ TEphyNotebookxTabSwitchedEvent = procedure (Sender: TObject; const NewTabNum: integer; const ShouldFocus: boolean) of object;
+ TEphyNotebookxTabFocusOnlyEvent = procedure (Sender: TObject; const NewTabNum: integer) of object;
+ // Extended capatibilities notebook (icons, close buttons, reordering by drag&drop)
+ TEphyNotebookx = class(TGTKNotebook)
+ private
+ FShowCloseButtons: boolean;
FAllowDragDrop: boolean;
FAllowDragOutside: boolean;
- FOnNotebookReordered: TEphyNotebookReorderedEvent;
+ FOnNotebookReordered: TEphyNotebookxReorderedEvent;
FOnTabClose: TEphyNotebookTabCloseEvent;
- FOnTabDoubleClick: TEphyNotebookTabDoubleClickEvent;
- FOnFindNotebookAtPointer: TEphyNotebookFindNotebookAtPointerEvent;
- FOnMoveTabToAnotherNotebook: TEphyNotebookMoveTabToAnotherNotebookEvent;
- FOnTabSwitchedEvent: TEphyNotebookTabSwitchedEvent;
- FOnTabFocusOnlyEvent: TEphyNotebookTabFocusOnlyEvent;
+ FOnTabDoubleClick: TEphyNotebookxTabDoubleClickEvent;
+ FOnFindNotebookAtPointer: TEphyNotebookxFindNotebookAtPointerEvent;
+ FOnMoveTabToAnotherNotebook: TEphyNotebookxMoveTabToAnotherNotebookEvent;
+ FOnTabSwitchedEvent: TEphyNotebookxTabSwitchedEvent;
+ FOnTabFocusOnlyEvent: TEphyNotebookxTabFocusOnlyEvent;
// Notebook private
motion_notify_handler_id, grab_notify_handler_id, toplevel_grab_broken_handler_id, toplevel_motion_notify_handler_id,
@@ -89,12 +113,12 @@ type
procedure SetAllowDragOutside(Value: boolean);
function find_tab_num_at_pos(abs_x, abs_y: integer): integer;
- function find_notebook_at_pointer(abs_x, abs_y: integer): TEphyNotebook;
- function is_in_notebook_window(notebook: TEphyNotebook; abs_x, abs_y: integer): boolean;
+ function find_notebook_at_pointer(abs_x, abs_y: integer): TEphyNotebookx;
+ function is_in_notebook_window(notebook: TEphyNotebookx; abs_x, abs_y: integer): boolean;
function drag_start(time: guint32): gboolean;
procedure drag_stop(time: guint32);
procedure move_tab(dest_position: integer);
- procedure move_tab_to_another_notebook(dest: TEphyNotebook; event: PGdkEventMotion);
+ procedure move_tab_to_another_notebook(dest: TEphyNotebookx; event: PGdkEventMotion);
function GetPageIndex: integer;
procedure SetPageIndex(Value: integer);
@@ -112,13 +136,13 @@ type
property ShowCloseButtons: boolean read FShowCloseButtons write SetShowCloseButtons default False;
property AllowDragDrop: boolean read FAllowDragDrop write SetAllowDragDrop default False;
property AllowDragOutside: boolean read FAllowDragOutside write SetAllowDragOutside default False;
- property OnNotebookReordered: TEphyNotebookReorderedEvent read FOnNotebookReordered write FOnNotebookReordered;
- property OnTabClose: TEphyNotebookTabCloseEvent read FOnTabClose write FOnTabClose;
- property OnTabDoubleClick: TEphyNotebookTabDoubleClickEvent read FOnTabDoubleClick write FOnTabDoubleClick;
- property OnFindNotebookAtPointer: TEphyNotebookFindNotebookAtPointerEvent read FOnFindNotebookAtPointer write FOnFindNotebookAtPointer;
- property OnMoveTabToAnotherNotebook: TEphyNotebookMoveTabToAnotherNotebookEvent read FOnMoveTabToAnotherNotebook write FOnMoveTabToAnotherNotebook;
- property OnTabSwitched: TEphyNotebookTabSwitchedEvent read FOnTabSwitchedEvent write FOnTabSwitchedEvent;
- property OnTabFocusOnlyEvent: TEphyNotebookTabFocusOnlyEvent read FOnTabFocusOnlyEvent write FOnTabFocusOnlyEvent;
+ property OnNotebookReordered: TEphyNotebookxReorderedEvent read FOnNotebookReordered write FOnNotebookReordered;
+ property OnTabClose: TEphyNotebookxTabCloseEvent read FOnTabClose write FOnTabClose;
+ property OnTabDoubleClick: TEphyNotebookxTabDoubleClickEvent read FOnTabDoubleClick write FOnTabDoubleClick;
+ property OnFindNotebookAtPointer: TEphyNotebookxFindNotebookAtPointerEvent read FOnFindNotebookAtPointer write FOnFindNotebookAtPointer;
+ property OnMoveTabToAnotherNotebook: TEphyNotebookxMoveTabToAnotherNotebookEvent read FOnMoveTabToAnotherNotebook write FOnMoveTabToAnotherNotebook;
+ property OnTabSwitched: TEphyNotebookxTabSwitchedEvent read FOnTabSwitchedEvent write FOnTabSwitchedEvent;
+ property OnTabFocusOnlyEvent: TEphyNotebookxTabFocusOnlyEvent read FOnTabFocusOnlyEvent write FOnTabFocusOnlyEvent;
end;
@@ -237,12 +261,184 @@ end;
(********************************************************************************************************************************)
(********************************************************************************************************************************)
+
+constructor TEphyNotebook.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+{ cursor := nil; }
+ FShowCloseButtons := False;
+{ FAllowDragDrop := False;
+ FAllowDragOutside := False;
+ FOnNotebookReordered := nil; }
+ FOnTabClose := nil;
+{ FOnTabDoubleClick := nil;
+ FOnFindNotebookAtPointer := nil;
+ FOnMoveTabToAnotherNotebook := nil;
+ FOnTabFocusOnlyEvent := nil;
+ FBusy := False; }
+
+ // Set up drag-and-drop
+{ g_signal_connect_data(PGObject(FWidget), 'button-press-event', TGCallback(@button_press_cb), Self, nil, G_CONNECT_DEFAULT);
+ g_signal_connect_data(PGObject(FWidget), 'button-release-event', TGCallback(@button_release_cb), Self, nil, G_CONNECT_DEFAULT);
+ g_signal_connect_data(PGObject(FWidget), 'scroll-event', TGCallback(@scroll_event_callback), Self, nil, G_CONNECT_DEFAULT);
+ gtk_widget_add_events(FWidget, guint(GDK_BUTTON1_MOTION_MASK));
+}
+// Show;
+end;
+
+destructor TEphyNotebook.Destroy;
+begin
+ inherited Destroy;
+end;
+
+
+
+
+procedure close_button_clicked_cb(widget: PGtkWidget; data: pointer); cdecl;
+var tab: PGtkWidget;
+ ntb: TEphyNotebook;
+ position: integer;
+ CanClose: boolean;
+begin
+ tab := g_object_get_data(PGObject(widget), 'child');
+ ntb := TEphyNotebook(data);
+
+ position := gtk_notebook_page_num(PGtkNotebook(ntb.FWidget), PGtkWidget(tab));
+// DebugMsg(['@******* close_button_clicked_cb: Position = ', position, ', data = 0x', IntToHex(Integer(data), 8), ', widget = 0x', IntToHex(Integer(widget), 8)]);
+
+ CanClose := True;
+
+ if @ntb.FOnTabClose <> nil then ntb.FOnTabClose(ntb, position, CanClose);
+
+ if CanClose then gtk_notebook_remove_page(PGtkNotebook(ntb.FWidget), position);
+end;
+
+function TEphyNotebook.AppendPage(Child: TGTKControl; Caption: string): integer;
+begin
+ Result := InsertPage(ChildrenCount, Child, Caption);
+end;
+
+function TEphyNotebook.InsertPage(Position: integer; Child: TGTKControl; Caption: string): integer;
+var hbox, label_hbox, label_ebox, _label, close_button, image, icon: PGtkWidget;
+begin
+ // set hbox spacing and label padding (see below) so that there's an equal amount of space around the label
+ hbox := gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+
+ label_ebox := gtk_event_box_new();
+ gtk_event_box_set_visible_window(PGtkEventBox (label_ebox), FALSE);
+ gtk_box_pack_start(PGtkBox (hbox), label_ebox, TRUE, TRUE, 0);
+// g_signal_connect_data(PGObject(label_ebox), 'button-press-event', TGCallback(@label_ebox_button_pressed), Self, nil, G_CONNECT_DEFAULT);
+ g_object_set_data(PGObject(label_ebox), 'child', Child.FWidget);
+
+ label_hbox := gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_container_add(PGtkContainer (label_ebox), label_hbox);
+
+ // setup close button
+ close_button := gtk_button_new ();
+ gtk_button_set_relief (PGtkButton (close_button), GTK_RELIEF_NONE);
+ // don't allow focus on the close button
+ g_object_set(PGObject(close_button), 'can-focus', [gboolean(FALSE), nil]);
+ gtk_button_set_relief (PGtkButton (close_button), GTK_RELIEF_NONE);
+
+ // TODO
+{ rcstyle := gtk_rc_style_new ();
+ rcstyle^.xthickness := Ord(rcstyle^.ythickness = 0);
+ gtk_widget_modify_style (close_button, rcstyle);
+ gtk_rc_style_unref (rcstyle);
+}
+ image := gtk_image_new_from_icon_name('gtk-close', GTK_ICON_SIZE_MENU);
+ gtk_container_add(PGtkContainer(close_button), image);
+ gtk_box_pack_start(PGtkBox(hbox), close_button, FALSE, FALSE, 0);
+
+ gtk_widget_set_tooltip_text(close_button, PChar(LANGEphyNotebookCloseTab));
+ g_object_set_data(PGObject(close_button), 'tab', hbox);
+ g_object_set_data(PGObject(close_button), 'child', Child.FWidget);
+ g_signal_connect_data(PGObject(close_button), 'clicked', TGCallback(@close_button_clicked_cb), Self, nil, G_CONNECT_DEFAULT);
+
+ // setup site icon, empty by default
+ icon := gtk_image_new ();
+ gtk_box_pack_start (PGtkBox (label_hbox), icon, FALSE, FALSE, 0);
+
+ // setup label
+ _label := gtk_label_new(PChar(Caption));
+// gtk_label_set_ellipsize (PGtkLabel (label), PANGO_ELLIPSIZE_END);
+// gtk_label_set_single_line_mode (PGtkLabel (label), TRUE);
+ gtk_label_set_yalign(PGtkLabel(_label), 0.5);
+ gtk_widget_set_margin_start(_label, 2);
+ gtk_widget_set_margin_end(_label, 2);
+ gtk_box_pack_start (PGtkBox(label_hbox), _label, TRUE, TRUE, 0);
+
+ // Set minimal size
+ // TODO
+// g_signal_connect_data(PGObject(hbox), 'style-set', TGCallback(@tab_label_style_set_cb), nil, nil, G_CONNECT_DEFAULT);
+
+ gtk_widget_show (hbox);
+ gtk_widget_show (label_ebox);
+ gtk_widget_show (label_hbox);
+ gtk_widget_show (_label);
+ gtk_widget_show (image);
+ if FShowCloseButtons then gtk_widget_show (close_button);
+
+ g_object_set_data(PGObject(hbox), 'label', _label);
+ g_object_set_data(PGObject(hbox), 'label-ebox', label_ebox);
+ g_object_set_data(PGObject(hbox), 'icon', icon);
+ g_object_set_data(PGObject(hbox), 'close-button', close_button);
+
+ Result := gtk_notebook_insert_page(PGtkNotebook(FWidget), Child.FWidget, hbox, Position);
+end;
+
+function TEphyNotebook.GetTabCaption(PageNo: integer): string;
+var wid, lab: PGtkWidget;
+begin
+ wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
+ lab := g_object_get_data (PGObject(wid), 'label');
+ Result := String(gtk_label_get_text(PGtkLabel(lab)));
+end;
+
+procedure TEphyNotebook.SetTabCaption(PageNo: integer; Caption: string);
+var wid, lab: PGtkWidget;
+begin
+ wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
+ lab := g_object_get_data (PGObject(wid), 'label');
+ gtk_label_set_text(PGtkLabel(lab), PChar(Caption));
+end;
+
+procedure TEphyNotebook.SetTabTooltip(PageNo: integer; ATooltip: string);
+var wid, lab: PGtkWidget;
+begin
+ wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
+ lab := g_object_get_data (PGObject(wid), 'label-ebox');
+ gtk_widget_set_tooltip_text(lab, PChar(ATooltip));
+end;
+
+procedure TEphyNotebook.SetShowCloseButtons(Value: boolean);
+begin
+ FShowCloseButtons := Value;
+
+ // Apply settings here
+end;
+
+
+
+
+
+
+
+
+
+
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+function label_ebox_button_pressed(widget: PGtkWidget; event: PGdkEventButton; data: pointer): gboolean; cdecl; forward;
function button_press_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl; forward;
function button_release_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl; forward;
function scroll_event_callback(widget: PGtkWidget; event: PGdkEventScroll; user_data: gpointer): gboolean; cdecl; forward;
-function label_ebox_button_pressed(widget: PGtkWidget; event: PGdkEventButton; data: pointer): gboolean; cdecl; forward;
-constructor TEphyNotebook.Create(AOwner: TComponent);
+constructor TEphyNotebookx.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
cursor := nil;
@@ -266,25 +462,25 @@ begin
Show;
end;
-destructor TEphyNotebook.Destroy;
+destructor TEphyNotebookx.Destroy;
begin
inherited Destroy;
end;
-procedure TEphyNotebook.SetShowCloseButtons(Value: boolean);
+procedure TEphyNotebookx.SetShowCloseButtons(Value: boolean);
begin
FShowCloseButtons := Value;
// Apply settings here
end;
-procedure TEphyNotebook.SetAllowDragDrop(Value: boolean);
+procedure TEphyNotebookx.SetAllowDragDrop(Value: boolean);
begin
FAllowDragDrop := Value;
if (not Value) and drag_in_progress then drag_stop(GDK_CURRENT_TIME (* FIXME? *));
end;
-procedure TEphyNotebook.SetAllowDragOutside(Value: boolean);
+procedure TEphyNotebookx.SetAllowDragOutside(Value: boolean);
begin
FAllowDragOutside := Value;
if (not Value) and drag_in_progress then drag_stop(GDK_CURRENT_TIME (* FIXME? *));
@@ -313,31 +509,13 @@ begin
gtk_widget_set_size_request(button, w + 2, h + 2);
end;
-procedure close_button_clicked_cb(widget: PGtkWidget; data: pointer); cdecl;
-var tab: PGtkWidget;
- ntb: TEphyNotebook;
- position: integer;
- CanClose: boolean;
-begin
- tab := g_object_get_data(PGObject(widget), 'child');
- ntb := TEphyNotebook(data);
-
- position := gtk_notebook_page_num(PGtkNotebook(ntb.FWidget), PGtkWidget(tab));
-// DebugMsg(['@******* close_button_clicked_cb: Position = ', position, ', data = 0x', IntToHex(Integer(data), 8), ', widget = 0x', IntToHex(Integer(widget), 8)]);
-
- CanClose := True;
- if @ntb.FOnTabClose <> nil then ntb.FOnTabClose(ntb, position, CanClose);
-
- if CanClose then gtk_notebook_remove_page(PGtkNotebook(ntb.FWidget), position);
-end;
-
-function TEphyNotebook.AppendPage(Child: TGTKControl; Caption: string): integer;
+function TEphyNotebookx.AppendPage(Child: TGTKControl; Caption: string): integer;
begin
Result := InsertPage(ChildrenCount, Child, Caption);
end;
-function TEphyNotebook.InsertPage(Position: integer; Child: TGTKControl; Caption: string): integer;
+function TEphyNotebookx.InsertPage(Position: integer; Child: TGTKControl; Caption: string): integer;
var hbox, label_hbox, label_ebox, _label, close_button, image, icon: PGtkWidget;
// rcstyle: PGtkRcStyle;
begin
@@ -407,12 +585,12 @@ begin
Result := gtk_notebook_insert_page(PGtkNotebook(FWidget), Child.FWidget, hbox, Position);
end;
-procedure TEphyNotebook.RemovePage(PageNo: integer);
+procedure TEphyNotebookx.RemovePage(PageNo: integer);
begin
gtk_notebook_remove_page(PGtkNotebook(FWidget), PageNo);
end;
-function TEphyNotebook.GetTabCaption(PageNo: integer): string;
+function TEphyNotebookx.GetTabCaption(PageNo: integer): string;
var wid, lab: PGtkWidget;
begin
wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
@@ -420,7 +598,7 @@ begin
Result := String(gtk_label_get_text(PGtkLabel(lab)));
end;
-procedure TEphyNotebook.SetTabCaption(PageNo: integer; Caption: string);
+procedure TEphyNotebookx.SetTabCaption(PageNo: integer; Caption: string);
var wid, lab: PGtkWidget;
begin
wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
@@ -428,7 +606,7 @@ begin
gtk_label_set_text(PGtkLabel(lab), PChar(Caption));
end;
-procedure TEphyNotebook.SetTabTooltip(PageNo: integer; ATooltip: string);
+procedure TEphyNotebookx.SetTabTooltip(PageNo: integer; ATooltip: string);
var wid, lab: PGtkWidget;
begin
wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
@@ -436,12 +614,12 @@ begin
gtk_widget_set_tooltip_text(lab, PChar(ATooltip));
end;
-function TEphyNotebook.GetPageIndex: integer;
+function TEphyNotebookx.GetPageIndex: integer;
begin
Result := gtk_notebook_get_current_page(PGtkNotebook(FWidget));
end;
-procedure TEphyNotebook.SetPageIndex(Value: integer);
+procedure TEphyNotebookx.SetPageIndex(Value: integer);
begin
DebugMsg(['SetPageIndex(Value = ', Value, ')']);
if (GetPageIndex <> Value) and (Value >= 0) then begin
@@ -451,7 +629,7 @@ begin
end;
-function TEphyNotebook.find_tab_num_at_pos(abs_x, abs_y: integer): integer;
+function TEphyNotebookx.find_tab_num_at_pos(abs_x, abs_y: integer): integer;
var tab_pos: TGtkPositionType;
page_num: integer;
page, tab: PGtkWidget;
@@ -510,7 +688,7 @@ begin
// DebugMsg(['@******* find_tab_num_at_pos(abs_x = ', abs_x, ', abs_y = ', abs_y, ', Result = ', Result, ')']);
end;
-function TEphyNotebook.find_notebook_at_pointer(abs_x, abs_y: integer): TEphyNotebook;
+function TEphyNotebookx.find_notebook_at_pointer(abs_x, abs_y: integer): TEphyNotebookx;
(* var win_at_pointer{, toplevel_win}: PGdkWindow;
x, y: integer;
// toplevel: pointer; *)
@@ -545,7 +723,7 @@ begin
{ Result := nil;}
end;
-function TEphyNotebook.is_in_notebook_window(notebook: TEphyNotebook; abs_x, abs_y: integer): boolean;
+function TEphyNotebookx.is_in_notebook_window(notebook: TEphyNotebookx; abs_x, abs_y: integer): boolean;
begin
Result := find_notebook_at_pointer(abs_x, abs_y) <> nil;
// Result := notebook = find_notebook_at_pointer(abs_x, abs_y);
@@ -596,7 +774,7 @@ terminal_notebook_move_tab (TerminalNotebook *src,
}
} *)
-procedure TEphyNotebook.drag_stop(time: guint32);
+procedure TEphyNotebookx.drag_stop(time: guint32);
var toplevel{, child}: PGtkWidget;
drag_stop_idx: integer;
begin
@@ -661,22 +839,22 @@ end;
function grab_broken_event_cb(widget: PGtkWidget; event: PGdkEvent; data: gpointer): gboolean; cdecl;
begin
- if data <> nil then TEphyNotebook(data).drag_stop(GDK_CURRENT_TIME (* FIXME? *));
+ if data <> nil then TEphyNotebookx(data).drag_stop(GDK_CURRENT_TIME (* FIXME? *));
Result := False;
end;
procedure grab_notify_cb(widget: PGtkWidget; was_grabbed: gboolean; data: gpointer); cdecl;
begin
- if data <> nil then TEphyNotebook(data).drag_stop(GDK_CURRENT_TIME (* FIXME? *));
+ if data <> nil then TEphyNotebookx(data).drag_stop(GDK_CURRENT_TIME (* FIXME? *));
end;
function toplevel_motion_notify_cb(widget: PGtkWidget; event: PGdkEventMotion; data: gpointer): gboolean; cdecl;
-var ntb, dest: TEphyNotebook;
+var ntb, dest: TEphyNotebookx;
page_num: integer;
begin
// DebugMsg(['@######## toplevel_motion_notify_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
Result := False;
- ntb := TEphyNotebook(data);
+ ntb := TEphyNotebookx(data);
if ntb.FBusy then Exit;
page_num := ntb.find_tab_num_at_pos(Trunc(event^.x_root), Trunc(event^.y_root));
@@ -716,12 +894,12 @@ begin
end;
function toplevel_button_release_cb(widget: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl;
-var ntb: TEphyNotebook;
+var ntb: TEphyNotebookx;
// cur_page_num: integer;
// cur_page: PGtkWidget;
begin
DebugMsg(['@######## toplevel_button_release_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
- ntb := TEphyNotebook(data);
+ ntb := TEphyNotebookx(data);
if ntb.drag_in_progress then begin
// cur_page_num := gtk_notebook_get_current_page(PGtkNotebook(ntb.FWidget));
@@ -741,7 +919,7 @@ begin
Result := False;
end;
-function TEphyNotebook.drag_start(time: guint32): gboolean;
+function TEphyNotebookx.drag_start(time: guint32): gboolean;
var toplevel, child: PGtkWidget;
begin
DebugMsg(['@######## drag_start']);
@@ -791,7 +969,7 @@ begin
toplevel_motion_notify_handler_id := g_signal_connect_data(PGObject(toplevel), 'motion-notify-event', TGCallback(@toplevel_motion_notify_cb), Self, nil, G_CONNECT_DEFAULT);
toplevel_button_release_handler_id := g_signal_connect_data(PGObject(toplevel), 'button-release-event', TGCallback(@toplevel_button_release_cb), Self, nil, G_CONNECT_DEFAULT);
grab_notify_handler_id := g_signal_connect_data(PGObject(FWidget), 'grab-notify', TGCallback(@grab_notify_cb), Self, nil, G_CONNECT_DEFAULT);
-
+
drag_start_idx := gtk_notebook_get_current_page(PGtkNotebook(FWidget));
Result := True;
end else begin
@@ -801,7 +979,7 @@ begin
end;
// this function is only called during dnd, we don't need to emit TABS_REORDERED here, instead we do it on drag_stop
-procedure TEphyNotebook.move_tab(dest_position: integer);
+procedure TEphyNotebookx.move_tab(dest_position: integer);
var cur_page_num: integer;
cur_tab: PGtkWidget;
begin
@@ -818,10 +996,10 @@ begin
end;
function motion_notify_cb(notebook: PGtkWidget; event: PGdkEventMotion; data: gpointer): gboolean; cdecl;
-var ntb: TEphyNotebook;
+var ntb: TEphyNotebookx;
begin
// DebugMsg(['@######## motion_notify_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
- ntb := TEphyNotebook(data);
+ ntb := TEphyNotebookx(data);
Result := False;
if (not ntb.drag_in_progress) and (ntb.x_start >= 0) and (ntb.y_start >= 0) and
@@ -830,15 +1008,15 @@ begin
then Result := ntb.drag_start(event^.time);
end;
-procedure TEphyNotebook.move_tab_to_another_notebook(dest: TEphyNotebook; event: PGdkEventMotion);
+procedure TEphyNotebookx.move_tab_to_another_notebook(dest: TEphyNotebookx; event: PGdkEventMotion);
var cur_page, dest_page_num: integer;
begin
// This is getting tricky, the screen was dragged in a notebook in another window of the same app, we move the screen
// to that new notebook, and let this notebook handle the drag
DebugMsg(['@######## move_tab_to_another_notebook(dest = 0x', IntToHex(Integer(pointer(dest)), 8), ')']);
- if not (dest is TEphyNotebook) then begin
- DebugMsg(['@######## move_tab_to_another_notebook: dest(', dest.ClassName, ') is not TEphyNotebook']);
+ if not (dest is TEphyNotebookx) then begin
+ DebugMsg(['@######## move_tab_to_another_notebook: dest(', dest.ClassName, ') is not TEphyNotebookx']);
Exit;
end;
@@ -909,9 +1087,9 @@ begin
end;
function button_release_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl;
-var ntb: TEphyNotebook;
+var ntb: TEphyNotebookx;
begin
- ntb := TEphyNotebook(data);
+ ntb := TEphyNotebookx(data);
DebugMsg(['@######## button_release_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
// This must be called even if a drag isn't happening
@@ -921,11 +1099,11 @@ end;
function label_ebox_button_pressed(widget: PGtkWidget; event: PGdkEventButton; data: pointer): gboolean; cdecl;
var tab: PGtkWidget;
- ntb: TEphyNotebook;
+ ntb: TEphyNotebookx;
position: integer;
begin
Result := False;
- ntb := TEphyNotebook(data);
+ ntb := TEphyNotebookx(data);
tab := g_object_get_data(PGObject(widget), 'child');
position := gtk_notebook_page_num(PGtkNotebook(ntb.FWidget), PGtkWidget(tab));
// DebugMsg(['@******* label_ebox_button_pressed, button = ', event^.button, ', Position = ', position, ', data = 0x', IntToHex(Integer(data), 8), ', widget = 0x', IntToHex(Integer(widget), 8)]);
@@ -943,10 +1121,10 @@ end;
function button_press_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl;
var tab_clicked: integer;
- ntb: TEphyNotebook;
+ ntb: TEphyNotebookx;
begin
Result := False;
- ntb := TEphyNotebook(data);
+ ntb := TEphyNotebookx(data);
if ntb.FBusy then Exit;
DebugMsg(['@######## button_press_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
@@ -994,13 +1172,13 @@ begin
end;
function scroll_event_callback(widget: PGtkWidget; event: PGdkEventScroll; user_data: gpointer): gboolean; cdecl;
-var ntb: TEphyNotebook;
+var ntb: TEphyNotebookx;
page: integer;
child: PGtkWidget;
px, py: gint;
begin
Result := True;
- ntb := TEphyNotebook(user_data);
+ ntb := TEphyNotebookx(user_data);
if ntb.FBusy then Exit;
child := gtk_notebook_get_nth_page(PGtkNotebook(ntb.FWidget), gtk_notebook_get_current_page(PGtkNotebook(ntb.FWidget)));