/// \file /// \ingroup tutorial_gui /// This macro gives an example of how to set/change text button attributes. /// To run it do either: /// ~~~ /// .x buttonTest.C /// .x buttonTest.C++ /// ~~~ /// /// \macro_code /// /// \author Valeriy Onuchin 17/07/2007 #include #include #include #include #include #include //////////// auxilary class /////////////////////////////////////////////////// class TextMargin : public TGHorizontalFrame { protected: TGNumberEntry *fEntry; public: TextMargin(const TGWindow *p, const char *name) : TGHorizontalFrame(p) { fEntry = new TGNumberEntry(this, 0, 6, -1, TGNumberFormat::kNESInteger); AddFrame(fEntry, new TGLayoutHints(kLHintsLeft)); TGLabel *label = new TGLabel(this, name); AddFrame(label, new TGLayoutHints(kLHintsLeft, 10)); } TGTextEntry *GetEntry() const { return fEntry->GetNumberEntry(); } ClassDef(TextMargin, 0) }; //////////////////////////////////////////////////////////////////////////////// class ButtonWindow : public TGMainFrame { protected: TGTextButton *fButton; // button being tested public: ButtonWindow(); void DoHPosition(Int_t); void DoVPosition(Int_t); void DoLeftMargin(char*); void DoRightMargin(char*); void DoTopMargin(char*); void DoBottomMargin(char*); ClassDef(ButtonWindow, 0) }; //______________________________________________________________________________ ButtonWindow::ButtonWindow() : TGMainFrame(gClient->GetRoot(), 10, 10, kHorizontalFrame) { // Main test window. SetCleanup(kDeepCleanup); // Controls on right TGVerticalFrame *controls = new TGVerticalFrame(this); AddFrame(controls, new TGLayoutHints(kLHintsRight | kLHintsExpandY, 5, 5, 5, 5)); // Separator TGVertical3DLine *separator = new TGVertical3DLine(this); AddFrame(separator, new TGLayoutHints(kLHintsRight | kLHintsExpandY)); // Contents TGHorizontalFrame *contents = new TGHorizontalFrame(this); AddFrame(contents, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5)); // The button for test fButton = new TGTextButton(contents, "&This button has a multi-line label\nand shows features\n" "available in the button classes"); fButton->Resize(300, 200); fButton->ChangeOptions(fButton->GetOptions() | kFixedSize); fButton->SetToolTipText("The assigned tooltip\ncan be multi-line also",200); contents->AddFrame(fButton, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY, 20, 20, 20, 20)); TGGroupFrame *group = new TGGroupFrame(controls, "Enable/Disable"); group->SetTitlePos(TGGroupFrame::kCenter); TGCheckButton *disable = new TGCheckButton(group, "Switch state\nEnable/Disable"); disable->SetOn(); disable->Connect("Toggled(Bool_t)", "TGButton", fButton, "SetEnabled(Bool_t)"); group->AddFrame(disable, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); controls->AddFrame(group, new TGLayoutHints(kLHintsExpandX)); // control horizontal position of the text TGButtonGroup *horizontal = new TGButtonGroup(controls, "Horizontal Position"); horizontal->SetTitlePos(TGGroupFrame::kCenter); new TGRadioButton(horizontal, "Center", kTextCenterX); new TGRadioButton(horizontal, "Left", kTextLeft); new TGRadioButton(horizontal, "Right", kTextRight); horizontal->SetButton(kTextCenterX); horizontal->Connect("Pressed(Int_t)", "ButtonWindow", this, "DoHPosition(Int_t)"); controls->AddFrame(horizontal, new TGLayoutHints(kLHintsExpandX)); // control vertical position of the text TGButtonGroup *vertical = new TGButtonGroup(controls, "Vertical Position"); vertical->SetTitlePos(TGGroupFrame::kCenter); new TGRadioButton(vertical, "Center", kTextCenterY); new TGRadioButton(vertical, "Top", kTextTop); new TGRadioButton(vertical, "Bottom", kTextBottom); vertical->SetButton(kTextCenterY); vertical->Connect("Pressed(Int_t)", "ButtonWindow", this, "DoVPosition(Int_t)"); controls->AddFrame(vertical, new TGLayoutHints(kLHintsExpandX)); // control margins of the text TGGroupFrame *margins = new TGGroupFrame(controls, "Text Margins"); margins->SetTitlePos(TGGroupFrame::kCenter); TextMargin *left = new TextMargin(margins, "Left"); margins->AddFrame(left, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 2)); left->GetEntry()->Connect("TextChanged(char*)", "ButtonWindow", this, "DoLeftMargin(char*)"); TextMargin *right = new TextMargin(margins, "Right"); margins->AddFrame(right, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 2)); right->GetEntry()->Connect("TextChanged(char*)", "ButtonWindow", this, "DoRightMargin(char*)"); TextMargin *top = new TextMargin(margins, "Top"); margins->AddFrame(top, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 2)); top->GetEntry()->Connect("TextChanged(char*)", "ButtonWindow", this, "DoTopMargin(char*)"); TextMargin *bottom = new TextMargin(margins, "Bottom"); margins->AddFrame(bottom, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 2)); bottom->GetEntry()->Connect("TextChanged(char*)", "ButtonWindow", this, "DoBottomMargin(char*)"); controls->AddFrame(margins, new TGLayoutHints(kLHintsExpandX)); TGTextButton *quit = new TGTextButton(controls, "Quit"); controls->AddFrame(quit, new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 0, 0, 0, 5)); quit->Connect("Pressed()", "TApplication", gApplication, "Terminate()"); Connect("CloseWindow()", "TApplication", gApplication, "Terminate()"); DontCallClose(); MapSubwindows(); Resize(); SetWMSizeHints(GetDefaultWidth(), GetDefaultHeight(), 1000, 1000, 0 ,0); SetWindowName("Button Test"); MapRaised(); } //______________________________________________________________________________ void ButtonWindow::DoHPosition(Int_t id) { // Horizontal position handler. Int_t tj = fButton->GetTextJustify(); tj &= ~kTextCenterX; tj &= ~kTextLeft; tj &= ~kTextRight; tj |= id; fButton->SetTextJustify(tj); } //______________________________________________________________________________ void ButtonWindow::DoVPosition(Int_t id) { // Vertical position handler. Int_t tj = fButton->GetTextJustify(); tj &= ~kTextCenterY; tj &= ~kTextTop; tj &= ~kTextBottom; tj |= id; fButton->SetTextJustify(tj); } //______________________________________________________________________________ void ButtonWindow::DoLeftMargin(char *val) { // Set left text margin. fButton->SetLeftMargin(atoi(val)); gClient->NeedRedraw(fButton); } //______________________________________________________________________________ void ButtonWindow::DoRightMargin(char *val) { // Set right text margin. fButton->SetRightMargin(atoi(val)); gClient->NeedRedraw(fButton); } //______________________________________________________________________________ void ButtonWindow::DoTopMargin(char *val) { // Set top text margin. fButton->SetTopMargin(atoi(val)); gClient->NeedRedraw(fButton); } //______________________________________________________________________________ void ButtonWindow::DoBottomMargin(char *val) { // Set bottom text margin. fButton->SetBottomMargin(atoi(val)); gClient->NeedRedraw(fButton); } //////////////////////////////////////////////////////////////////////////////// void buttonTest() { // Main program. new ButtonWindow(); }