Hi,
(I've appended some source code and a Makefile below, hope no one minds - just
type gmake Makefile 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] $ ./canvasgui
Hello World
<I click on the PlotMe button>
Error: Symbol gPlotMe is not defined in current scope FILE:/tmp/fileSwUcgo_cint LINE:1
Error: Failed to evaluate gPlotMe->Sinx()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
Files below are: PlotMe.h
PlotMe.cxx
PlotMeLinkDef.h
canvasgui.cxx
Makefile
//
// PlotMe.h
//
#ifndef __PLOTME_H
#define __PLOTME_H
#include <iostream.h>
#include <TROOT.h>
#include <TCanvas.h>
#include <TF1.h>
#include <TRootEmbeddedCanvas.h>
class PlotMe {
public:
PlotMe();
~PlotMe();
void Sinx(void);
ClassDef (PlotMe, 1)
private:
//none
};
R__EXTERN PlotMe *gPlotMe;
#endif
/////////////////// End of PlotMe.h ////////////////////
//
// PlotMe.cxx
//
#ifndef __PLOTME_H
#include "PlotMe.h"
ClassImp (PlotMe);
#endif
// constructor
PlotMe::PlotMe()
{
}
// destructor
PlotMe::~PlotMe()
{
}
// methods
void PlotMe::Sinx(void)
{
// TRootEmbeddedCanvas *c;
// TCanvas *c1 = c->GetCanvas();
cout<<"Hello World"<<endl;
TF1 f1("func1", "sin(x)/x", 0, 10);
f1.Draw();
}
/////////////////////// End of PlotMe.cxx ////////////////////
//
// 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
////////////////// End of PlotMeLinkDef.h ///////////////
//
// canvasgui.cxx
//
#include <TApplication.h>
#include <TGButton.h>
#include <TRootEmbeddedCanvas.h>
#include <TFile.h>
#include <TF1.h>
#include <TCanvas.h>
#include "PlotMe.h"
int main()
{
// Create application environment
TApplication app("test", 0, 0);
// Create main frame
TGMainFrame mf(gClient->GetRoot(), 100, 100);
// Create embedded canvas and add to main frame, centered in x and y and
// with 30 pixel margins all around
TRootEmbeddedCanvas *c = new TRootEmbeddedCanvas("Canvas", &mf, 600, 400);
mf.AddFrame(c, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY,
30, 30, 30, 30));
// Create button and add to main frame, centered in x and with 30
// pixel margin at bottom, when button is clicked terminate program
TGButton *b1 = new TGTextButton(&mf, "Plot");
TGButton *b2 = new TGTextButton(&mf, "Quit");
b1->SetCommand("gPlotMe->Sinx()");
b2->SetCommand("gApplication->Terminate()");
TCanvas *c1 = c->GetCanvas();
PlotMe *pt = new PlotMe();
pt->Sinx();
c1->Update();
mf.AddFrame(b1,new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 30));
mf.AddFrame(b2,new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 40));
// Set main frame name, map sub windows (button), initialize layout
// algorithm via Resize() and map main frame
mf.SetWindowName("Test");
mf.MapSubwindows();
mf.Resize(mf.GetDefaultSize());
mf.MapWindow();
// enter application event loop
app.Run();
return 0;
}
#
# Makefile for canvasgui
#
ROOTCFLAGS := $(shell root-config --cflags)
ROOTLIBS := $(shell root-config --libs)
ROOTGLIBS := $(shell root-config --glibs)
CC = g++
all: PlotMeDict.cxx PlotMeDict.o PlotMe.o canvasgui
PlotMeDict.cxx: PlotMe.h PlotMeLinkDef.h
@echo "Generationg Dictionary $@..."
@rootcint -f $@ -c $^
PlotMeDict.o: PlotMeDict.cxx
@echo "Compiling $< ..."
@$(CC) $(ROOTCFLAGS) -c $^
PlotMe.o: PlotMe.cxx PlotMe.h
@echo "Compiling $< ..."
@$(CC) $(ROOTCFLAGS) -c PlotMe.cxx
canvasgui: canvasgui.cxx PlotMe.o PlotMeDict.o
@echo "Compiling $< ..."
@$(CC) $(ROOTCFLAGS) $(ROOTLIBS) $(ROOTGLIBS) $^ -o $@
clean:
@rm -f PlotMe.o libPlotMe.so PlotMeDict.cxx \
PlotMeDict.cxx canvasgui
############### End of Makefile ################
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:51 MET