40 ClassImp(TAttTextEditor);
54 TAttTextEditor::TAttTextEditor(
const TGWindow *p, Int_t width,
55 Int_t height, UInt_t options, Pixel_t back)
56 : TGedFrame(p, width, height, options | kVerticalFrame, back)
64 TGCompositeFrame *f2 =
new TGCompositeFrame(
this, 80, 20, kHorizontalFrame);
65 fColorSelect =
new TGColorSelect(f2, 0, kCOLOR);
66 f2->AddFrame(fColorSelect,
new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
67 fColorSelect->Associate(
this);
68 fSizeCombo = BuildFontSizeComboBox(f2, kFONT_SIZE);
69 f2->AddFrame(fSizeCombo,
new TGLayoutHints(kLHintsLeft, 3, 1, 1, 1));
70 fSizeCombo->Resize(91, 20);
71 fSizeCombo->Associate(
this);
72 AddFrame(f2,
new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
73 fTypeCombo =
new TGFontTypeComboBox(
this, kFONT_STYLE);
74 fTypeCombo->Resize(137, 20);
75 AddFrame(fTypeCombo,
new TGLayoutHints(kLHintsLeft, 3, 1, 1, 1));
76 fAlignCombo = BuildTextAlignComboBox(
this, kFONT_ALIGN);
77 fAlignCombo->Resize(137, 20);
78 AddFrame(fAlignCombo,
new TGLayoutHints(kLHintsLeft, 3, 1, 1, 1));
80 TGLabel *AlphaLabel =
new TGLabel(
this,
"Opacity");
82 new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
83 TGHorizontalFrame *f2a =
new TGHorizontalFrame(
this);
84 fAlpha =
new TGHSlider(f2a,100,kSlider2|kScaleNo,kALPHA);
85 fAlpha->SetRange(0,1000);
86 f2a->AddFrame(fAlpha,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
87 fAlphaField =
new TGNumberEntryField(f2a, kALPHAFIELD, 0,
88 TGNumberFormat::kNESReal,
89 TGNumberFormat::kNEANonNegative);
90 fAlphaField->Resize(40,20);
91 if (!TCanvas::SupportAlpha()) {
92 fAlpha->SetEnabled(kFALSE);
93 AlphaLabel->Disable(kTRUE);
94 fAlphaField->SetEnabled(kFALSE);
96 f2a->AddFrame(fAlphaField,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
97 AddFrame(f2a,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
103 TAttTextEditor::~TAttTextEditor()
110 void TAttTextEditor::ConnectSignals2Slots()
112 fAlpha->Connect(
"Released()",
"TAttTextEditor",
this,
"DoAlpha()");
113 fAlpha->Connect(
"PositionChanged(Int_t)",
"TAttTextEditor",
this,
"DoLiveAlpha(Int_t)");
114 fAlphaField->Connect(
"ReturnPressed()",
"TAttTextEditor",
this,
"DoAlphaField()");
115 fAlpha->Connect(
"Pressed()",
"TAttTextEditor",
this,
"GetCurAlpha()");
116 fColorSelect->Connect(
"ColorSelected(Pixel_t)",
"TAttTextEditor",
this,
"DoTextColor(Pixel_t)");
117 fColorSelect->Connect(
"AlphaColorSelected(ULong_t)",
"TAttTextEditor",
this,
"DoTextAlphaColor(ULong_t)");
124 void TAttTextEditor::SetModel(TObject* obj)
126 TAttText *atttext =
dynamic_cast<TAttText *
>(obj);
127 if (!atttext)
return;
130 fAvoidSignal = kTRUE;
132 fTypeCombo->Select(fAttText->GetTextFont() / 10);
134 Float_t s = fAttText->GetTextSize();
137 if (obj->InheritsFrom(TPaveLabel::Class())) {
138 TBox *pl = (TBox*)obj;
139 dy = s * (pl->GetY2() - pl->GetY1());
142 dy = s * (fGedEditor->GetPad()->GetY2() - fGedEditor->GetPad()->GetY1());
144 Int_t size = fGedEditor->GetPad()->YtoPixel(0.0) - fGedEditor->GetPad()->YtoPixel(dy);
145 if (size > 50) size = 50;
146 if (size < 0) size = 0;
147 fSizeCombo->Select(size, kFALSE);
149 fAlignCombo->Select(fAttText->GetTextAlign(), kFALSE);
151 Color_t c = fAttText->GetTextColor();
152 Pixel_t p = TColor::Number2Pixel(c);
153 fColorSelect->SetColor(p, kFALSE);
155 if (fInit) ConnectSignals2Slots();
156 fAvoidSignal = kFALSE;
158 if (TColor *color = gROOT->GetColor(fAttText->GetTextColor())) {
159 fAlpha->SetPosition((Int_t)color->GetAlpha()*1000);
160 fAlphaField->SetNumber(color->GetAlpha());
167 void TAttTextEditor::DoTextColor(Pixel_t color)
169 if (fAvoidSignal)
return;
170 fAttText->SetTextColor(TColor::GetColor(color));
172 if (TColor *tcolor = gROOT->GetColor(TColor::GetColor(color))) {
173 fAlpha->SetPosition((Int_t)(tcolor->GetAlpha()*1000));
174 fAlphaField->SetNumber(tcolor->GetAlpha());
183 void TAttTextEditor::DoTextAlphaColor(ULong_t p)
185 TColor *color = (TColor *)p;
187 if (fAvoidSignal)
return;
188 fAttText->SetTextColor(color->GetNumber());
189 fAlpha->SetPosition((Int_t)(color->GetAlpha()*1000));
190 fAlphaField->SetNumber(color->GetAlpha());
198 Bool_t TAttTextEditor::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
200 if(!fGedEditor || !fGedEditor->GetModel())
return kTRUE;
204 if (GET_MSG(msg) == kC_COLORSEL && GET_SUBMSG(msg) == kCOL_SELCHANGED) {
205 if (parm1 != 0) fAttText->SetTextColor(TColor::GetColor(parm2));
210 if (GET_MSG(msg) == kC_COMMAND && GET_SUBMSG(msg) == kCM_COMBOBOX) {
212 if (parm1 == kFONT_SIZE) {
213 TVirtualPad* pad = fGedEditor->GetPad();
214 Float_t dy = pad->AbsPixeltoY(0) - pad->AbsPixeltoY(parm2);
217 if (fGedEditor->GetModel()->InheritsFrom(TPaveLabel::Class())) {
218 TBox *pl = (TBox*)fGedEditor->GetModel();
219 textSize = dy/(pl->GetY2() - pl->GetY1());
222 textSize = dy/(pad->GetY2() - pad->GetY1());
224 fAttText->SetTextSize(textSize);
226 }
else if (parm1 == kFONT_STYLE) {
227 Int_t fontPrec = fAttText->GetTextFont()%10;
228 fAttText->SetTextFont(parm2 * 10 + fontPrec);
230 }
else if (parm1 == kFONT_ALIGN) {
231 fAttText->SetTextAlign(parm2);
236 if (b && !fAvoidSignal) Update();
244 TGComboBox* TAttTextEditor::BuildFontSizeComboBox(TGFrame* parent, Int_t
id)
247 TGComboBox *c =
new TGComboBox(parent,
id);
249 c->AddEntry(
"Default", 0);
250 for (
int i = 1; i <= 50; i++) {
251 snprintf(a, 99,
"%d", i);
261 TGComboBox* TAttTextEditor::BuildTextAlignComboBox(TGFrame* parent, Int_t
id)
263 TGComboBox *c =
new TGComboBox(parent,
id);
265 c->AddEntry(
"11 Bottom, Left", 11);
266 c->AddEntry(
"21 Bottom, Middle", 21);
267 c->AddEntry(
"31 Bottom, Right", 31);
268 c->AddEntry(
"12 Middle, Left", 12);
269 c->AddEntry(
"22 Middle, Middle", 22);
270 c->AddEntry(
"32 Middle, Right", 32);
271 c->AddEntry(
"13 Top, Left", 13);
272 c->AddEntry(
"23 Top, Middle", 23);
273 c->AddEntry(
"33 Top, Right", 33);
281 void TAttTextEditor::DoAlphaField()
283 if (fAvoidSignal)
return;
285 if (TColor *color = gROOT->GetColor(fAttText->GetTextColor())) {
286 color->SetAlpha((Float_t)fAlphaField->GetNumber());
287 fAlpha->SetPosition((Int_t)(fAlphaField->GetNumber()*1000));
295 void TAttTextEditor::DoAlpha()
297 if (fAvoidSignal)
return;
299 if (TColor *color = gROOT->GetColor(fAttText->GetTextColor())) {
300 color->SetAlpha((Float_t)fAlpha->GetPosition()/1000);
301 fAlphaField->SetNumber((Float_t)fAlpha->GetPosition()/1000);
309 void TAttTextEditor::DoLiveAlpha(Int_t a)
311 if (fAvoidSignal)
return;
312 fAlphaField->SetNumber((Float_t)a/1000);
314 if (TColor *color = gROOT->GetColor(fAttText->GetTextColor())) {
316 if (color->GetAlpha() == 1.) {
317 fAttText->SetTextColor(TColor::GetColorTransparent(color->GetNumber(),0.99));
319 color->SetAlpha((Float_t)a/1000);
328 void TAttTextEditor::GetCurAlpha()
330 if (fAvoidSignal)
return;
332 if (TColor *color = gROOT->GetColor(fAttText->GetTextColor())) {
333 fAlpha->SetPosition((Int_t)(color->GetAlpha()*1000));
334 fAlphaField->SetNumber(color->GetAlpha());