Dear Fons Thank you for adding these methods. Sorrowly, I do not get the expected behavior: 1, Although canvas is now constant, the size is 100x100 instead of 600x600 2, There are no scrollbars to scroll, if the window is smaller than the canvas. Enlosed, I am sending you a macro, which displays in the 1.tab the unwanted behavior, and in the 2.tab the wanted behavior. It is not clear to me why TRootEmbeddedCanvas does not show scrollbars, even though it is derived from TGCanvas? Best regards Christian Fons Rademakers wrote: >Hi Christian, > > I've added the methods: SetAutoFit() and GetAutoFit(). Try using it >like: >TRootEmbeddedCanvas *embedded = new TRootEmbeddedCanvas(0, p, 100, 100); >[note name must be 0, not null string ""] >Int_t wid = embedded->GetCanvasWindowId(); >TCanvas *myc = new TCanvas("myname", 600, 600, wid); >embedded->SetAutoFit(kFALSE); >embedded->AdoptCanvas(myc); > >Let me know if this works for you. > >Cheers, Fons. > >On Sun, 2003-04-27 at 19:06, cstrato wrote: > > >>Dear Rooters >> >>In my GUI-application I want to create a canvas of fixed size in a >>TGCanvas with scrollbars. >> >>Sorrowly, I am unable to use TRootEmbeddedCanvas for this purpose, >>since for some reason it is not possible to set: fAutoFit = kFALSE; >> >>For some reason it is also not possible to embed TRootEmbeddedCanvas >>in TGCanvas, I get no scrollbars. >>Only embedding TRootEmbeddedCanvas in TGCompositeFrame, >>which is embedded in TGCanvas did help (pretty complicated). >> >>Since I want to set a checkbox, determining, if the canvas should >>have fixed size or keep the size of its container, it would be great, >>if a function SetAutoFit(kFALSE) could be added. >> >>Thank you in advance. >> >>Best regards >>Christian >>_._._._._._._._._._._._._._._._ >>C.h.i.s.t.i.a.n S.t.r.a.t.o.w.a >>V.i.e.n.n.a A.u.s.t.r.i.a >>_._._._._._._._._._._._._._._._ >> >> // Test gui class MyFrame { RQ_OBJECT("MyFrame") private: TGMainFrame *fMain; // MenuBar Frame TGPopupMenu *fMenuFile; TGMenuBar *fMenuBar; TGHorizontal3DLine *fLineH1; TGHorizontalFrame *fHF1; TGVerticalFrame *fVF1; TGCompositeFrame *fFPlot; TGTab *fTabCvs; // Test Frame TRootEmbeddedCanvas *fRECvs1; TCanvas *fCanvas1; TGCanvas *fGCanvas2; TGCompositeFrame *fFRE2; TRootEmbeddedCanvas *fRECvs2; //Test: TRootEmbeddedCanvas *fCvs; // Layout hints TGLayoutHints *fMenuBarLayout; TGLayoutHints *fMenuBarItemLayout; TGLayoutHints *fMenuBarHelpLayout; TGLayoutHints *fLineLayout; TGLayoutHints *fLayout; TGLayoutHints *fHintTL; TGLayoutHints *fHintTXY; TGLayoutHints *fHintRXY; TGLayoutHints *fHintLY; TGLayoutHints *fHintXY; TList *fTrash; Int_t fPlotID; public: MyFrame(const TGWindow *window, UInt_t w, UInt_t h); virtual ~MyFrame(); // Slots void DoCloseWindow(); private: void CreateMenuBar(); void DeleteMenuBar(); void CreateFrame1(TGTab *tab); void DeleteFrame1(); void CreateFrame2(TGTab *tab); void DeleteFrame2(); // ClassDef(MyFrame,0) //MainFrame }; //______________________________________________________________________________ //______________________________________________________________________________ //debug: print function names const Bool_t kCS = 1; //ClassImp(MyFrame); // Menu commands enum EMenuCommands { M_FILE, M_FILE_EXIT, }; //______________________________________________________________________________ MyFrame::MyFrame(const TGWindow *window, UInt_t w, UInt_t h) { if(kCS) cout << "------MyFrame::MyFrame------" << endl; fTrash = new TList(); fHintTL = new TGLayoutHints(kLHintsTop | kLHintsLeft); fHintTXY = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY); fHintRXY = new TGLayoutHints(kLHintsRight | kLHintsExpandX | kLHintsExpandY); fHintLY = new TGLayoutHints(kLHintsLeft | kLHintsExpandY); fHintXY = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY); fMain = new TGMainFrame(window, w, h); fMain->Connect("CloseWindow()", "MyFrame", this, "DoCloseWindow()"); // Create menus CreateMenuBar(); // Basic frame layout fLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY); fHF1 = new TGHorizontalFrame(fMain, 20, 20); fMain->AddFrame(fHF1, fLayout); fVF1 = new TGVerticalFrame(fHF1, 300, 200); fHF1->AddFrame(fVF1, fLayout); // Plot Frame fFPlot = new TGCompositeFrame(fVF1,0,0, kVerticalFrame); fVF1->AddFrame(fFPlot, fHintTXY); // Frame for Tab widgets fTabCvs = new TGTab(fFPlot, 20, 20); fFPlot->AddFrame(fTabCvs, fHintTXY); // Create Test Frame CreateFrame1(fTabCvs); CreateFrame2(fTabCvs); TGLayoutHints *hint = 0; hint = new TGLayoutHints(kLHintsBottom | kLHintsLeft | kLHintsExpandX); fTrash->Add(hint); fCvs = new TRootEmbeddedCanvas("canvasA",fVF1,300,40); fVF1->AddFrame(fCvs, hint); // fVF1->AddFrame(fCvs, fLayout); // Main settings fMain->SetWindowName("MyGui"); fMain->MapSubwindows(); fMain->Resize(fMain->GetDefaultSize()); fMain->MapWindow(); fMain->Move(20, 20); }//Constructor //______________________________________________________________________________ MyFrame::~MyFrame() { if(kCS) cout << "------MyFrame::~MyFrame------" << endl; DeleteFrame2(); DeleteFrame1(); DeleteMenuBar(); delete fTabCvs; delete fFPlot; delete fCvs; delete fVF1; delete fHF1; delete fMain; delete fLayout; delete fHintTL; delete fHintTXY; delete fHintRXY; delete fHintLY; delete fHintXY; fTrash->Delete(); delete fTrash; }//Destructor //______________________________________________________________________________ void MyFrame::CreateMenuBar() { if(kCS) cout << "------MyFrame::CreateMenuBar------" << endl; // File menu fMenuFile = new TGPopupMenu(gClient->GetRoot()); fMenuFile->AddEntry("&Exit", M_FILE_EXIT); // Create menubar layout hints fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1); fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0); fMenuBarHelpLayout = new TGLayoutHints(kLHintsTop | kLHintsRight); // Add menus to MenuBar fMenuBar = new TGMenuBar(fMain, 1, 1, kHorizontalFrame); fMenuBar->AddPopup("&File", fMenuFile, fMenuBarItemLayout); fMain->AddFrame(fMenuBar, fMenuBarLayout); // Line to separate menubar fLineH1 = new TGHorizontal3DLine(fMain); fLineLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX); fMain->AddFrame(fLineH1, fLineLayout); fLineH1->DrawBorder(); }//CreateMenuBar //______________________________________________________________________________ void MyFrame::DeleteMenuBar() { if(kCS) cout << "------MyFrame::DeleteMenuBar------" << endl; delete fLineH1; delete fMenuBar; delete fMenuFile; delete fMenuBarLayout; delete fMenuBarItemLayout; delete fMenuBarHelpLayout; delete fLineLayout; }//DeleteMenuBar //______________________________________________________________________________ void MyFrame::DoCloseWindow() { if(kCS) cout << "------MyFrame::DoCloseWindow------" << endl; delete this; //does not exit root // gApplication->Terminate(0); //exit root, needed for standalone App }//DoCloseWindow //______________________________________________________________________________ void MyFrame::CreateFrame1(TGTab *tab) { if(kCS) cout << "------MyFrame::CreateFrame1------" << endl; TGLayoutHints *hint = 0; // New Tab TGCompositeFrame *tabframe = 0; tabframe = tab->AddTab("New Canvas1"); fRECvs1 = new TRootEmbeddedCanvas(0,tabframe,300,300); hint = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 5, 5, 5, 5); tabframe->AddFrame(fRECvs1, hint); fTrash->Add(hint); Int_t wid = fRECvs1->GetCanvasWindowId(); fCanvas1 = new TCanvas("Canvas_1", 500, 500, wid); // fRECvs1->SetAutoFit(kTRUE); fRECvs1->SetAutoFit(kFALSE); fRECvs1->AdoptCanvas(fCanvas1); //TEST Graphics Double_t x[100], y[100]; Int_t n = 20; for (Int_t i=0;i<n;i++) { x[i] = i*0.1; y[i] = 10*sin(x[i]+0.2); } TGraph *gr = new TGraph(n,x,y); gr->Draw("AC*"); //END }//CreateFrame //______________________________________________________________________________ void MyFrame::DeleteFrame1() { if(kCS) cout << "------MyFrame::DeleteFrame1------" << endl; delete fRECvs1; //fCanvas deleted by fRECvs! }//DeleteFrame //______________________________________________________________________________ void MyFrame::CreateFrame2(TGTab *tab) { if(kCS) cout << "------MyFrame::CreateFrame2------" << endl; TGLayoutHints *hint = 0; // New Tab TGCompositeFrame *tabframe = 0; tabframe = fTabCvs->AddTab("New Canvas2"); fGCanvas2 = new TGCanvas(tabframe, 300, 300, 0); fFRE2 = new TGCompositeFrame(fGCanvas2->GetViewPort(),500,400, kVerticalFrame); fGCanvas2->SetContainer(fFRE2); fRECvs2 = new TRootEmbeddedCanvas("canvasB",fFRE2,500,400); fFRE2->AddFrame(fRECvs2, fHintTL); hint = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 5, 5, 5, 5); tabframe->AddFrame(fGCanvas2, hint); fTrash->Add(hint); //TEST Graphics Double_t x[100], y[100]; Int_t n = 20; for (Int_t i=0;i<n;i++) { x[i] = i*0.1; y[i] = 10*sin(x[i]+0.2); } TGraph *gr = new TGraph(n,x,y); gr->Draw("AC*"); //END }//CreateFrame //______________________________________________________________________________ void MyFrame::DeleteFrame2() { if(kCS) cout << "------MyFrame::DeleteFrame2------" << endl; delete fRECvs2; delete fFRE2; delete fGCanvas2; }//DeleteFrame //______________________________________________________________________________ void embedded() { new MyFrame(gClient->GetRoot(), 400, 220); }
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET