Re: [ROOT] TGButton SetCommand query

From: Paul Dixon (paul.dixon@surfability.com)
Date: Wed Apr 17 2002 - 16:30:34 MEST


p.s.

this is the linkdef file I used:

PlotMeLinkDef.h:


#ifdef __CINT__

#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class PlotMe;

#endif


On Wed, 17 Apr 2002, Paul Dixon wrote:

> Hi,
> 
> (I've attached my small source code and makefile, hope no one minds - just
> type gmake -f Makefile PlotMe to compile under linux).
> 
> I'm still having trouble with creating a button that can access a method
> via SetCommand...
> 
> I've followed the instructions and created the dictionary files in order
> to get CINT to "know" about my class, but when I run the program, I get
> the following:
> 
> root [0] gSystem.Load("libPlotMe.so")
> 
> (int)0
> 
> root [1] .L canvasgui.cc
> 
> Error in <TApplication::TApplication>: only one instance of TApplication
> allowed
> 
> root [2] main()
> 
> <click on PlotMe button>
> 
> Error: Symbol gPlotMe is not defined in current scope
> FILE:/tmp/filevuBTUe_cint
> 
> LINE:1
> 
> Error: Failed to evaluate gPlotMe->DoPlot(c)Possible candidates are...
> 
> filename line:size busy function type and name
> 
> *** Interpreter error recovered ***
> 
> I've exhausted my current knowledge... can anyone point me in the right
> direction? 
> 
> Cheers,
> 					Paul
> 
> 
> On 12 Apr 2002, Fons Rademakers wrote:
> 
> > Hi Paul,
> > 
> >   SetCommand() can only be used to call methods that are know to the
> > CINT interpreter. That means that you need to export PlotGraph() to CINT
> > via the rootcint procedure. Also c is not directly known in the
> > interpreter if the global symbol has not been exported. Please check the
> > user guide on how all this can simply be done.
> > 
> > Cheers, Fons.
> > 
> > 
> > 
> > On Thu, 2002-04-11 at 13:44, Paul Dixon wrote:
> > > Hi,
> > > 
> > > I'm trying to build a trivial GUI so that when I click on different 
> > > buttons, different plots are generated. My first go is to have a button 
> > > that plots the example sin(x)/x.
> > > 
> > > >From some code posted earlier on roottalk:
> > > 
> > > I have a button defined (b) that acts as a quit button:
> > > 
> > >    TGButton *b = new TGTextButton(&mf, "Quit");
> > >    b->SetCommand("gApplication->Terminate()");
> > > 
> > > which works fine.
> > > 
> > > but if I change this to run my PlotGraph function:
> > > 
> > >    b->SetCommand("PlotGraph()");
> > > 
> > > where PlotGraph is:
> > > 
> > > void PlotGraph(void){ 
> > >    TCanvas *c1 = c->GetCanvas();  
> > >    TF1 f1("func1", "sin(x)/x", 0, 10);
> > >    f1.Draw();
> > >    c1->Update();
> > > }
> > > 
> > > *c is defined before main{} as
> > > 
> > > TRootEmbeddedCanvas *c = new TRootEmbeddedCanvas("Canvas", &mf, 600, 400);
> > > 
> > > which I believed made c global (therefore accessable from any other 
> > > function)...
> > > 
> > > When I compile the code and run it, I get:
> > > 
> > > [] ~/root $ ./canvasgui 
> > > Error: Function PlotGraph() is not defined in current scope  
> > > FILE:/tmp/filezX8DtE_cint LINE:1
> > > 
> > > Which has me (a c++ newbie) stumped. Presumably I've missed out some 
> > > important step...
> > > 
> > > Thanks in advance,
> > > 					Paul
> 

-- 

					Paul

-------------------------------------------------------------------------------
Dr Paul Dixon                        Email: paul.dixon@surfability.com
Surfability Limited                  Phone: 020 7074 0085
4/14 Tabernacle Street               Fax  : 020 7074 0086
London, EC2A 4LU                     URL  : http://www.surfability.com
-------------------------------------------------------------------------------



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