Hi Christian and Fons,
Christian's script does not work as is neither on MacOSX 10.2.3
However, changing line 321 from:
this->Test(1);
to simply
Test(1);
everything works fine !
So perhaps there is an interpreter problem, which is more general than
just GUI-related.
Cheers
Damir
=====================================================================
| Damir Buskulic | Universite de Savoie/LAPP |
| | Chemin de Bellevue, B.P. 110 |
| Tel : +33 (0)450091600 | F-74941 Annecy-le-Vieux Cedex |
| e-mail: buskulic@lapp.in2p3.fr | FRANCE |
=====================================================================
mailto:buskulic@lapp.in2p3.fr
On Sun, 16 Feb 2003, Fons Rademakers wrote:
> 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