using namespace std; class BasicA : public TGVerticalFrame { private: TGTextButton *fButton1; TGTextButton *fButton2; public: BasicA(const TGWindow *p, int w, int h, int n) : TGVerticalFrame(p,w,h) { TString str = "Button "; str += n; fButton1 = new TGTextButton(this, str.Data()); AddFrame(fButton1, new TGLayoutHints(kLHintsCenterX)); str = "Button "; str += ++n; fButton2 = new TGTextButton(this, str.Data()); AddFrame(fButton2, new TGLayoutHints(kLHintsCenterX)); fButton2->Connect("Clicked()", "BasicA", this, "Click()"); } virtual ~BasicA(); void Click() { cout<<"Clicked from BasicA\n"; Emit("Click()"); } ClassDef(BasicA, 0) }; class BasicB : public TGVerticalFrame { private: BasicA *fBasicA; TGCheckButton *fCheckButton; public: BasicB(const TGWindow *p, int w, int h) : TGVerticalFrame(p,w,h){ int start = 1; fBasicA = new BasicA(this, w, h, start); AddFrame(fBasicA, new TGLayoutHints(kLHintsExpandX)); fCheckButton = new TGCheckButton(this, "just a check"); AddFrame(fCheckButton, new TGLayoutHints(kLHintsExpandX)); } virtual ~BasicB(); ClassDef(BasicB, 0) }; class Main : public TGMainFrame { private: BasicA *fBasicA; BasicB *fBasicB; public: Main(const TGWindow *p, int w, int h) : TGMainFrame(p,w,h, kMainFrame | kVerticalFrame ){ SetCleanup(kDeepCleanup); Connect("CloseWindow()", "TApplication", gApplication, "Terminate()"); DontCallClose(); fBasicB = new BasicB(this, w, h/2); AddFrame(fBasicB, new TGLayoutHints(kLHintsExpandX)); fBasicA = new BasicA(this, w, h/2, 3); AddFrame(fBasicA, new TGLayoutHints(kLHintsExpandX)); Connect("BasicA", "Click()", "Main", this, "Click()"); MapSubwindows(); Resize(); MapRaised(); } virtual ~Main() { Cleanup(); } void Click() { cout << "Clicked from Main\n"; } ClassDef(Main, 0) }; void guitest() { new Main(gClient->GetRoot(), 500, 500); }