[ROOT] Splitter

From: Isidro.Gonzalez.Caballero@cern.ch
Date: Thu Oct 03 2002 - 19:22:35 MEST


Hi rooters,

	I have build a very simple GUI class (see attached file) which
builds a frame with to frames inside separated by a vertical splitter. I
think I have done the things correctly, but the splitter doesn't work. 
When you are over it the pointer changes accordingly, but it does not
resize the windows. I am missing something?... 

I have tested with root.3.03.08 under linux 7.3 with gcc 2.96 and gcc 3.2

	Thanks for your help,

		Isidro


PS.: Instructions...

1) Save the attached file somewhere
2) Run root
3) root [0] .L RootMainFrame.C+
4) root [1] new RootMainFrame(gClient->GetRoot(),800,600)
5) Try to move the splitter....

+---------------------------+--------------------------------+
| Isidro González Caballero | mailto:Isidro.Gonzalez@cern.ch |
| CERN-EP / Mailbox: F28010 | http://home.cern.ch/~iglez/    |
| 1211 Geneva 23            |               -o-              |
| Switzerland               | Tel: +41 22 76 73060, 73316    |
+---------------------------+--------------------------------+



#include <TGFrame.h>
#include <TGStatusBar.h> //For TGStatusBar::SetText...
#include <TGSplitter.h>
#include <RQ_OBJECT.h>

#include <iostream.h>


class RootMainFrame : public TGMainFrame {
  RQ_OBJECT("RootMainFrame")

public:
  //////////////////////////////////////////////////////////////
  // Constructor and Destructor
  //
  RootMainFrame(const TGWindow *p, UInt_t w, UInt_t h);

  virtual ~RootMainFrame();

private:
  static Int_t fgDefaultXPosition; //  default X position of top left corner
  static Int_t fgDefaultYPosition; //  default Y position of top left corner

  //All the different layouts
  TGLayoutHints* fLMainFrame;                 
  TGLayoutHints* fLLeftFrame;
  TGLayoutHints* fLRightFrame;                 
  TGLayoutHints* fLVSplitter;
  
  //Frames and subframes
  TGCompositeFrame* fMainFrame;      //The Central one
  TGCompositeFrame* fLeftFrame;      //For the left frame
  TGCompositeFrame* fRightFrame;     //For the right frame
  TGVSplitter*      fVSplitter;      //Splitter between right and left frames

  ClassDef(RootMainFrame,0) 

};

Int_t RootMainFrame::fgDefaultXPosition = 25;
Int_t RootMainFrame::fgDefaultYPosition = 25;

/////////////////////////////////////////////////////////////////////////////
// Constructor
RootMainFrame::RootMainFrame(const TGWindow *p, UInt_t w, UInt_t h):
  TGMainFrame(p, w, h) {
  
  // Layout hints
  fLMainFrame  = new TGLayoutHints(kLHintsTop | kLHintsLeft | 
				   kLHintsExpandY | kLHintsExpandX,
				   0, 0, 0, 0);
  fLLeftFrame  = new TGLayoutHints(kLHintsTop | kLHintsLeft | 
				   kLHintsExpandX  | kLHintsExpandY,
				   2, 2, 2, 2);
  fLRightFrame = new TGLayoutHints(kLHintsTop | kLHintsRight |
				   kLHintsExpandX | kLHintsExpandY,
				   2, 2, 2, 2);

  //-------------------  Main frame in top Window
  fMainFrame = new TGCompositeFrame(this, 100, 100,
                                    kFixedWidth | 
				    kHorizontalFrame | kRaisedFrame);
  AddFrame(fMainFrame, fLMainFrame);
  
  //            ------- Create Left frame in Main Window
  fLeftFrame = new TGVerticalFrame(fMainFrame, 100, 300,
				    kFixedWidth);
  fMainFrame->AddFrame(fLeftFrame, fLLeftFrame);
  
  
  //            ------- Vertical splitter between frames
  fVSplitter = new TGVSplitter(fMainFrame);
  fVSplitter->SetFrame(fLeftFrame,kTRUE);
  fLVSplitter = new TGLayoutHints(kLHintsLeft | kLHintsExpandY);
  fMainFrame->AddFrame(fVSplitter,fLVSplitter);
  
  //            ------- Create Right Frame
  fRightFrame = new TGVerticalFrame(fMainFrame, 500, 30,
				    kSunkenFrame | kDoubleBorder);
  fMainFrame->AddFrame(fRightFrame, fLRightFrame);
  
  
  //Set Window and Icon Name
  SetWindowName("Root Window Name");
  SetIconName("Root Icon Name");
  
  //Last Operations for display
  MapSubwindows();
  Layout();
  Resize(w,h); // this is used here to init layout algoritme
  this->Move(fgDefaultXPosition, fgDefaultYPosition);
  
  MapWindow();
  
  //gSystem->ProcessEvents();
  
}

///////////////////////////////////////////////////////////////////////////
// Destructor
RootMainFrame::~RootMainFrame(){
  
  //Layouts
  if (fLLeftFrame)
    delete fLLeftFrame;
  if (fLRightFrame)
    delete fLRightFrame;                 
  if (fLVSplitter)
    delete fLVSplitter;                 
  if (fLMainFrame)
    delete fLMainFrame;                 

  //Frames
  if (fLeftFrame)
    delete fLeftFrame;
  if (fRightFrame)
    delete fRightFrame;
  if (fVSplitter)
    delete fVSplitter;
  if (fMainFrame)
    delete fMainFrame; 
  
}






ClassImpQ(RootMainFrame)



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:12 MET