library: libGui #include "TGXYLayout.h"

# TGXYLayout

class description - source file - inheritance tree (.pdf)

## class TGXYLayout : public TGLayoutManager

| Inheritance Chart:
`TObject`
| <- | `TGLayoutManager`
| <- | `TGXYLayout` |

        public:

                              TGXYLayout(TGCompositeFrame* main)
                              TGXYLayout(const TGXYLayout&)
                              ~TGXYLayout()
               static TClass* Class()
          virtual TGDimension GetDefaultSize() const
              virtual TClass* IsA() const
                 virtual void Layout()
                         void NewSize()
                  TGXYLayout& operator=(const TGXYLayout&)
                 virtual void ShowMembers(TMemberInspector& insp, char* parent)
                 virtual void Streamer(TBuffer& b)
                         void StreamerNVirtual(TBuffer& b)

### Data Members

        protected:

                     TList* fList         list of frames to arrange
          TGCompositeFrame* fMain         container frame
                     Bool_t fFirst        flag to determine the first call of Layout()
                     UInt_t fFirstWidth   original width of the frame fMain
                     UInt_t fFirstHeight  original height of the fram fMain
                      Int_t fTWidth       text width of a default character "1234567890" / 10
                      Int_t fTHeight      text height

## Class Description

     TGXYLayout

     Is a layout manager where the position and the size of each widget
     in the frame are defined by X / Y - coordinates. The coordinates
     for each widget are defined by the TGXYLayoutHints. Therefore it
     is not possible to share a layout hint for several widgets.

     The coordinates (X, Y) and the size (W, H) are defined in units
     of the size of a typical character. Also the size of the
     TGCompositeFrame for which a TGXYLayout manager is used has to be
     defined in its constructor in units of the size of a character!

     It is not possible to use any other layout hint than the
     TGXYLayoutHints for this layout manager!

     The rubberFlag in the constructor of the TGLXYLayoutHins defines
     how the position and the size of a widget is recalculated if the
     size of the frame is increased:
     - kLRubberX: The X - position (left edge) is increased by the same
                  factor as the width of the frame increases.
     - kLRubberY: The Y - position (upper edge) is increased by the same
                  factor as the height of the frame increases.
     - kLRubberW: The width of the widget is increased by the same
                  factor as the width of the frame increases.
     - kLRubberY: The height of the widget is increased by the same
                  factor as the height of the frame increases.
     But the size never becomes smaller than defined by the
     TGXYLayoutHints and the X and Y coordinates becomes never smaller
     than defined by the layout hints.

     TGXYLayoutHints

     This layout hint must be used for the TGXYLouyout manager!

     Example how to use this layout manager:

     TGMyFrame::TGMyFrame()
        : TGMainFrame(gClient->GetRoot(), 30, 12)
        // frame is 30 character long and 12 character heigh
     {
        SetLayoutManager(new TGXYLayout(this));

        // create a button of size 8 X 1.8 at position 20 / 1
        TGTextButton * button;
        button = new TGTextButton(this, "&Apply", 1);
        AddFrame(button, new TGXYLayoutHints(20, 1, 8, 1.8));

        // create a listbox of size 18 X 10 at position 1 / 1.
        // The height will increase if the frame height increases
        TGListBox * listBox;
        listBox = new TGListBox(this, 2);
        AddFrame(listBox, new TGXYLayoutHints(1, 1, 18, 10,
                 TGXYLayoutHints::kLRubberX |
                 TGXYLayoutHints::kLRubberY |
                 TGXYLayoutHints::kLRubberH ));
        .
        .
        .
     }

     Normaly there is one layout hint per widget. Therefore these
     can be deleted like in the following example in the desctuctor
     of the frame:

     TGMyFrame::~TGMyFrame()
     {
        // Destructor, deletes all frames and their layout hints.

        TGFrameElement *ptr;

        // delete all frames and layout hints
        if (fList) {
           TIter next(fList);
           while ((ptr = (TGFrameElement *) next())) {
              if (ptr->fLayout)
                 delete ptr->fLayout;
              if (ptr->fFrame)
                 delete ptr->fFrame;
           }
        }
     }

TGXYLayout(TGCompositeFrame *main)

     Constructor. The main is the frame for which this layout manager works.

void Layout()

     Recalculates the postion and the size of all widgets.

TGDimension GetDefaultSize() const

     Returns the original size of the frame.

### Inline Functions

                   void ~TGXYLayout()
                   void NewSize()
                TClass* Class()
                TClass* IsA() const
                   void ShowMembers(TMemberInspector& insp, char* parent)
                   void Streamer(TBuffer& b)
                   void StreamerNVirtual(TBuffer& b)
             TGXYLayout TGXYLayout(const TGXYLayout&)
            TGXYLayout& operator=(const TGXYLayout&)

Author: Reiner Rohlfs 24/03/2002
Last update: root/gui:$Name: $:$Id: TGXYLayout.cxx,v 1.1 2002/08/08 16:54:11 rdm Exp $
Copyright (C) 1995-2001, Rene Brun, Fons Rademakers and Reiner Rohlfs *