Toc Gallery Index Tree Gtk.Handle_Box

Screenshot

No screeshot

Hierarchy

Description

The Gtk_Handle_Box widget allows a portion of a window to be "torn off". It is a bin widget which displays its child and a handle that the user can drag to tear off a separate window (the float window) containing the child widget. A thin ghost is drawn in the original location of the handlebox. By dragging the separate window back to its original location, it can be reattached.

When reattaching, the ghost and float window, must be aligned along one of the edges, the snap edge. This either can be specified by the application programmer explicitely, or GtkAda will pick a reasonable default based on the handle position.

To make detaching and reattaching the handlebox as minimally confusing as possible to the user, it is important to set the snap edge so that the snap edge does not move when the handlebox is detached. For instance, if the handlebox is packed at the bottom of a Vbox, then when the handlebox is detached, the bottom edge of the handlebox's allocation will remain fixed as the height of the handlebox shrinks, so the snap edge should be set to Pos_Bottom.

Types

  • type Gtk_Handle_Box is access all Gtk_Handle_Box_Record'Class;
  • type Gtk_Handle_Box_Record is new Gtk.Bin.Gtk_Bin_Record with private;

Subprograms

  • procedure Gtk_New (Handle_Box : out Gtk_Handle_Box);
    Create a new Handle_Box.
  • procedure Initialize (Handle_Box : access Gtk_Handle_Box_Record'Class);
    Internal initialization function. See the section "Creating your own widgets" in the documentation.
  • function Get_Type return Gtk.Gtk_Type;
    Return the internal value associated with a Gtk_Dialog.
  • procedure Set_Shadow_Type (Handle_Box : access Gtk_Handle_Box_Record; Typ : Enums.Gtk_Shadow_Type);
    function Get_Shadow_Type (Handle_Box : access Gtk_Handle_Box_Record) return Enums.Gtk_Shadow_Type;
    Sets or gets the type of shadow to be drawn around the border of the Handle_Box.
  • procedure Set_Handle_Position (Handle_Box : access Gtk_Handle_Box_Record; Position : Enums.Gtk_Position_Type);
    function Get_Handle_Position (Handle_Box : access Gtk_Handle_Box_Record) return Enums.Gtk_Position_Type;
    Sets or gets the side of the Handle_Box where the handle is drawn.
  • procedure Set_Snap_Edge (Handle_Box : access Gtk_Handle_Box_Record; Edge : Enums.Gtk_Position_Type);
    function Get_Snap_Edge (Handle_Box : access Gtk_Handle_Box_Record) return Enums.Gtk_Position_Type;
    Sets or gets the snap edge of a Handle_Box. The snap edge is the edge of the detached child that must be aligned with the corresponding edge of the "ghost" left behind when the child was detached to reattach the torn-off window. Usually, the snap edge should be chosen so that it stays in the same place on the screen when the Handle_Box is torn off.

    If the snap edge is not set, then an appropriate value will be guessed from the handle position. If the handle position is Pos_Right or Pos_Left, then the snap edge will be Pos_Top, otherwise it will be Pos_Left.

Signals

  • child_attached
    procedure Handler (Handle_Box : access Gtk_Handle_Box_Record'Class; Widget : access Gtk_Widget_Record'Class);
    Emitted when the contents of the Handle_Box are reattached to the main window. Widget is the child widget of the Handle_Box. (this argument provides no extra information and is here only for backwards-compatibility)
  • child_detached
    procedure Handler (Handle_Box : access Gtk_Handle_Box_Record'Class; Widget : access Gtk_Widget_Record'Class);
    Emitted when the contents of the Handle_Box are detached from the main window. See "child-attached" for drtails on the parameters.

Properties

  • Handle_Position_Property
    Gtk_Position_Type
    Position of the handle relative to the child widget.
    See: Set_Handle_Position
  • Shadow_Property and Shadow_Type_Property
    Gtk_Shadow_Type
    Appearance of the shadow that surrounds the container.
    See: Set_Shadow_Type
  • Snap_Edge_Property
    Gtk_Position_Type
    Side of the handlebox that's lined up with the docking point
  • Snap_Edge_Set_Property
    Boolean
    Whether to use the value from the Snap_Edge_Property, or a

Testgtk source code

This code is part of testgtk, a demo application packaged with GtkAda. Testgtk demonstrates the various widgets of GtkAda
----------------------------------------------------------------------- -- GtkAda - Ada95 binding for the Gimp Toolkit -- -- -- -- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet -- -- Copyright (C) 2001 ACT-Europe -- -- -- -- This library is free software; you can redistribute it and/or -- -- modify it under the terms of the GNU General Public -- -- License as published by the Free Software Foundation; either -- -- version 2 of the License, or (at your option) any later version. -- -- -- -- This library is distributed in the hope that it will be useful, -- -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- -- General Public License for more details. -- -- -- -- You should have received a copy of the GNU General Public -- -- License along with this library; if not, write to the -- -- Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- -- Boston, MA 02111-1307, USA. -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- with Glib; use Glib; with Glib.Object; use Glib.Object; with Gtk.Box; use Gtk.Box; with Gtk.Handle_Box; use Gtk.Handle_Box; with Gtk.Label; use Gtk.Label; with Gtk.Separator; use Gtk.Separator; with Gtk.Handlers; use Gtk.Handlers; with Gtk.Toolbar; use Gtk.Toolbar; with Gtk.Widget; use Gtk.Widget; with Gtk; use Gtk; with Ada.Text_IO; with Create_Toolbar; package body Create_Handle_Box is package Handle_Cb is new Handlers.User_Callback (Gtk_Handle_Box_Record, String); ---------- -- Help -- ---------- function Help return String is begin return "A @bGtk_Handle_Box@B provides a special place where widgets" & " can be attached and detached. For instance, in this demo the" & " @bGtk_Toolbar@B can be detached from the handle box to create" & " a separate window." & ASCII.LF & "When the window is closed, the toolbar is reattached to the" & " @bGtk_Handle_Box@B."; end Help; ------------------ -- Child_Signal -- ------------------ procedure Child_Signal (Handle : access Gtk_Handle_Box_Record'Class; Child : access Gtk_Widget_Record'Class; Data : in String) is begin Ada.Text_IO.Put_Line ("In Child Signal"); if Is_Created (Child.all) then Ada.Text_IO.Put_Line (Type_Name (Get_Type (Handle)) & ": child <" & Type_Name (Get_Type (Child)) & "> " & Data); else Ada.Text_IO.Put_Line (Type_Name (Get_Type (Handle)) & ": child <null> " & Data); end if; end Child_Signal; --------- -- Run -- --------- procedure Run (Frame : access Gtk.Frame.Gtk_Frame_Record'Class) is Vbox : Gtk_Box; Hbox : Gtk_Box; Label : Gtk_Label; Separator : Gtk_Separator; Handle : Gtk_Handle_Box; Handle2 : Gtk_Handle_Box; Toolbar : Gtk_Toolbar; begin Set_Label (Frame, "Handle Box"); Gtk_New_Vbox (Vbox, Homogeneous => False, Spacing => 0); Add (Frame, Vbox); Gtk_New (Label, "Above"); Pack_Start (Vbox, Label, False, False); Gtk_New_Hseparator (Separator); Pack_Start (Vbox, Separator, False, False); Gtk_New_Hbox (Hbox, Homogeneous => False, Spacing => 10); Pack_Start (Vbox, Hbox, False, False); Gtk_New_Hseparator (Separator); Pack_Start (Vbox, Separator, False, False); Gtk_New (Label, "Below"); Pack_Start (Vbox, Label, False, False); Gtk_New (Handle); Pack_Start (Hbox, Child => Handle, Expand => False, Fill => False, Padding => 0); Handle_Cb.Connect (Handle, "child_attached", Handle_Cb.To_Marshaller (Child_Signal'Access), "attached"); Handle_Cb.Connect (Handle, "child_detached", Handle_Cb.To_Marshaller (Child_Signal'Access), "detached"); Create_Toolbar.Make_Toolbar (Toolbar, Get_Window (Frame), Get_Style (Frame)); Add (Handle, Toolbar); Gtk_New (Handle); Pack_Start (Hbox, Child => Handle, Expand => False, Fill => False, Padding => 0); Handle_Cb.Connect (Handle, "child_attached", Handle_Cb.To_Marshaller (Child_Signal'Access), "attached"); Handle_Cb.Connect (Handle, "child_detached", Handle_Cb.To_Marshaller (Child_Signal'Access), "detached"); Gtk_New (Handle2); Add (Handle, Handle2); Handle_Cb.Connect (Handle2, "child_attached", Handle_Cb.To_Marshaller (Child_Signal'Access), "attached"); Handle_Cb.Connect (Handle2, "child_detached", Handle_Cb.To_Marshaller (Child_Signal'Access), "detached"); Gtk_New (Label, "Fooo!"); Add (Handle2, Label); Show_All (Frame); end Run; end Create_Handle_Box;

Alphabetical Index