diff options
Diffstat (limited to 'UGnome.pas')
| -rw-r--r-- | UGnome.pas | 342 |
1 files changed, 260 insertions, 82 deletions
@@ -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))); |
