Hi Christian,.
this might very well be a 10.1 problem. I have this week no access
to my Mac so I can not verify the behaviour on Mac OS X 10.2. Maybe Damir
can try?
Cheers, Fons.
On Sat, Feb 15, 2003 at 06:33:11PM +0100, cstrato wrote:
> Dear Rooters
>
> The enclosed macro ".x mygui.C" contains two classes,
> called MyFrame and SubFrame.
>
> In the constructor of MyFrame I am able to call methods,
> however, in the constructor of SubFrame I am unable to
> call any method. Even calling the simple method "Test(1)"
> (see line 321) causes ROOT to crash with:
>
> root [7] .x mygui.C
> ---TEST - 1
> *** Break *** segmentation violation
> Root > Function mygui() busy flag cleared
> Function MyFrame() busy flag cleared
> Function CreateShutterFrames() busy flag cleared
> Function SubFrame() busy flag cleared
> Function Test() busy flag cleared
>
> Can anybody tell me, why I am not able to call a
> method in the SubFrame constructor??
>
> Note: Yesterday, I could run a similar macro in root
> for about 50 times without problems, until root finally
> crashed with the error described above. Since then, it
> is no longer possible to call a method from the constructor.
>
> I am using root 3.05/02 on MacOS X 10.1.2
>
> 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 for constructor
>
> // Menu commands
> enum EMenuCommands {
> M_FILE,
> M_FILE_NEW,
> };
>
> // Shutter commands
> enum EShutterCommands {
> S_SHUT1 = 1001,
> S_SHUT1_A,
> S_SHUT1_B,
>
> S_SHUT2 = 1001,
> S_SHUT2_A,
> S_SHUT2_B,
> };
>
> const char *xpm_names[] = {
> "Folder.xpm",
> "Folder.xpm",
> 0
> };
> const char *kShutterName[] = {
> "Shutter1",
> "Shutter2",
> 0
> };
>
> struct ShutterData_t {
> const char *sPixmap_name;
> const char *sTip_text;
> Int_t sId;
> TGButton *sButton;
> };
>
> ShutterData_t kItems1[] = {
> { "folder_s.xpm", "xxx", S_SHUT1_A, 0 },
> { "folder_s.xpm", "xxx", S_SHUT1_B, 0 },
> { 0, 0, 0, 0 }
> };
>
> ShutterData_t kItems2[] = {
> { "folder_s.xpm", "xxx", S_SHUT2_A, 0 },
> { "folder_s.xpm", "xxx", S_SHUT2_B, 0 },
> { 0, 0, 0, 0 }
> };
>
> class MyFrame;
> class SubFrame;
>
> class MyFrame {
>
> RQ_OBJECT("MyFrame")
>
> private:
> TGMainFrame *fMain;
>
> // MenuBar Frame
> TGPopupMenu *fMenuFile;
> TGMenuBar *fMenuBar;
> TGHorizontal3DLine *fLineH1;
>
> // Shutter Frame
> TGHorizontalFrame *fHF1;
> TGShutter *fShutter;
> const TGPicture *fDefaultPic;
> SubFrame *fSubFrame;
>
> // Layout hints
> TGLayoutHints *fMenuBarLayout;
> TGLayoutHints *fMenuBarItemLayout;
> TGLayoutHints *fMenuBarHelpLayout;
> TGLayoutHints *fLineLayout;
> TGLayoutHints *fLayout;
>
> TList *fTrash;
>
> public:
> MyFrame(const TGWindow *window, UInt_t w, UInt_t h);
> virtual ~MyFrame();
>
> void AddShutterItem(const char *name, ShutterData_t data[], Int_t id);
>
> // Slots
> void DoCloseWindow();
> void DoShutter(Int_t id = -1);
>
> private:
> void CreateMenuBar();
> void DeleteMenuBar();
> void CreateShutter();
> void DeleteShutter();
> void CreateShutterFrames();
> void DeleteShutterFrames();
>
> // ClassDef(MyFrame,0) //MainFrame
> };
>
> class SubFrame {
>
> RQ_OBJECT("SubFrame")
>
> private:
> MyFrame *fMyFrame;
> TGCompositeFrame *fShutterFrame;
> TGCompositeFrame *fFrameA;
> TGGroupFrame *fFG1;
>
> TList *fTrash;
>
> public:
> SubFrame() {}
> SubFrame(TGCompositeFrame *parent, MyFrame *main, UInt_t w, UInt_t h);
> virtual ~SubFrame();
>
> void HandleShutter(Int_t id = -1);
>
> private:
> void Test(Int_t k) {cout << "---TEST - " << k << endl;}
> void CreateFrameA();
> void DeleteFrameA();
>
> // ClassDef(SubFrame,0) //SubFrame
> };
>
>
> //______________________________________________________________________________
> //______________________________________________________________________________
>
>
> //ClassImp(MyFrame);
> //ClassImp(SubFrame);
>
> //______________________________________________________________________________
> MyFrame::MyFrame(const TGWindow *window, UInt_t w, UInt_t h)
> {
> fTrash = new TList();
>
> fMain = new TGMainFrame(window, w, h);
> fMain->Connect("CloseWindow()", "MyFrame", this, "DoCloseWindow()");
>
> // Create menus
> this->CreateMenuBar();
>
> // Basic frame layout
> fLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY);
> fHF1 = new TGHorizontalFrame(fMain, 20, 20);
> fMain->AddFrame(fHF1, fLayout);
>
> // Create shutter
> this->CreateShutter();
> this->CreateShutterFrames();
>
> // Main settings
> fMain->SetWindowName("MyGui");
> fMain->MapSubwindows();
> fMain->Resize(fMain->GetDefaultSize());
> fMain->MapWindow();
> fMain->Move(20, 20);
> }//Constructor
>
> //______________________________________________________________________________
> MyFrame::~MyFrame()
> {
> this->DeleteMenuBar();
> this->DeleteShutterFrames();
> this->DeleteShutter();
>
> delete fHF1;
> delete fMain;
>
> delete fLayout;
>
> fTrash->Delete();
> delete fTrash;
> }//Destructor
>
> //______________________________________________________________________________
> void MyFrame::CreateMenuBar()
> {
> // File menu
> fMenuFile = new TGPopupMenu(gClient->GetRoot());
> fMenuFile->AddEntry("&New...", M_FILE_NEW);
>
> // 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()
> {
> delete fLineH1;
> delete fMenuBar;
> delete fMenuFile;
>
> delete fMenuBarLayout;
> delete fMenuBarItemLayout;
> delete fMenuBarHelpLayout;
> delete fLineLayout;
> }//DeleteMenuBar
>
> //______________________________________________________________________________
> void MyFrame::CreateShutter()
> {
> fDefaultPic = gClient->GetPicture("folder_s.xpm");
> fShutter = new TGShutter(fHF1, kSunkenFrame | kFixedWidth | kDoubleBorder);
>
> this->AddShutterItem(kShutterName[0], kItems1, S_SHUT1);
> this->AddShutterItem(kShutterName[1], kItems2, S_SHUT2);
>
> TGLayoutHints *hint = 0;
> hint = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY);
> fTrash->Add(hint);
> fHF1->AddFrame(fShutter, hint);
> fShutter->Resize(100, 400);
> }//CreateShutter
>
> //______________________________________________________________________________
> void MyFrame::DeleteShutter()
> {
> delete fShutter;
> }//DeleteShutter
>
> //______________________________________________________________________________
> void MyFrame::CreateShutterFrames()
> {
> fSubFrame = new SubFrame(fHF1, this, 0, 0);
> }//CreateShutterFrames
>
> //______________________________________________________________________________
> void MyFrame::DeleteShutterFrames()
> {
> delete fSubFrame;
> }//DeleteShutterFrames
>
> //______________________________________________________________________________
> void MyFrame::AddShutterItem(const char *name, ShutterData_t data[], Int_t id)
> {
> TGShutterItem *item;
> TGCompositeFrame *container;
> TGButton *button;
> const TGPicture *buttonpic;
> TGLayoutHints *hint;
>
> hint = new TGLayoutHints(kLHintsTop | kLHintsCenterX, 5, 5, 5, 0);
> fTrash->Add(hint);
>
> item = new TGShutterItem(fShutter, new TGHotString(name), id);
> fTrash->Add(item);
> container = (TGCompositeFrame*)item->GetContainer();
>
> for (Int_t i=0; data[i].sPixmap_name != 0; i++) {
> buttonpic = gClient->GetPicture(data[i].sPixmap_name);
> if (!buttonpic) {
> printf("Shutter: missing pixmap \"%s\", using default",
> data[i].sPixmap_name);
> buttonpic = fDefaultPic;
> }//if
>
> button = new TGPictureButton(container, buttonpic, data[i].sId);
> fTrash->Add(button);
> button->Connect("Clicked()", "MyFrame", this, "DoShutter()");
> button->SetToolTipText(data[i].sTip_text);
> data[i].sButton = button;
> container->AddFrame(button, hint);
> }//for_i
>
> fShutter->AddItem(item);
> }//AddShutterItem
>
> //______________________________________________________________________________
> void MyFrame::DoCloseWindow()
> {
> delete this; //does not exit root
> // gApplication->Terminate(0); //exit root, needed for standalone App
> }//DoCloseWindow
>
> //______________________________________________________________________________
> void MyFrame::DoShutter(Int_t id)
> {
> }//DoShutter
>
>
> //______________________________________________________________________________
> //______________________________________________________________________________
> SubFrame::SubFrame(TGCompositeFrame *parent, MyFrame *main, UInt_t w, UInt_t h)
> {
> fMyFrame = main;
> fTrash = new TList();
>
> // Subframe for frame containing different shutter frames
> TGLayoutHints *hint = 0;
> hint = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY);
> fTrash->Add(hint);
> fShutterFrame = new TGCompositeFrame(parent, w, h);
> parent->AddFrame(fShutterFrame, hint);
>
> //THIS DOES WORK!!
> fFrameA = new TGCompositeFrame(fShutterFrame,0,0, kHorizontalFrame);
> fShutterFrame->AddFrame(fFrameA, hint);
> fFG1 = new TGGroupFrame(fFrameA, "Group frame for A", kVerticalFrame);
> fFrameA->AddFrame(fFG1, hint);
>
> // Create shutter subframes
> this->Test(1);
> //THIS DOES NOT WORK!!
> // this->CreateFrameA();
> // this->Test(2);
>
> // Show first frame
> fShutterFrame->ShowFrame(fFrameA);
> }//Constructor
>
> //______________________________________________________________________________
> SubFrame::~SubFrame()
> {
> this->DeleteFrameA();
>
> fTrash->Delete();
> delete fTrash;
>
> fMyFrame = 0;
> }//Destructor
>
> //______________________________________________________________________________
> void SubFrame::HandleShutter(Int_t id)
> {
> }//HandleShutter
>
> //______________________________________________________________________________
> void SubFrame::CreateFrameA()
> {
> TGLayoutHints *hint1 = 0;
> hint1 = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY);
> fTrash->Add(hint1);
>
> fFrameA = new TGCompositeFrame(fShutterFrame,0,0, kHorizontalFrame);
> fShutterFrame->AddFrame(fFrameA, hint1);
> fFG1 = new TGGroupFrame(fFrameA, "Group frame for A", kVerticalFrame);
> fFrameA->AddFrame(fFG1, hint1);
>
> fShutterFrame->HideFrame(fFrameA);
> }//CreateFrameA
>
> //______________________________________________________________________________
> void SubFrame::DeleteFrameA()
> {
> delete fFG1; delete fFrameA;
> }//DeleteFrameA
>
>
> //______________________________________________________________________________
> void mygui()
> {
> new MyFrame(gClient->GetRoot(), 400, 220);
> }
--
Org: CERN, European Laboratory for Particle Physics.
Mail: 1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7679480
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET