90 ClassImp(TGNumberFormat);
91 ClassImp(TGNumberEntryField);
92 ClassImp(TGNumberEntryLayout);
93 ClassImp(TGNumberEntry);
125 const Double_t kEpsilon = 1E-12;
129 const Int_t kDays[13] =
130 { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
134 static Long_t Round(Double_t x)
137 return (Long_t) (x + 0.5);
139 return (Long_t) (x - 0.5);
147 static Long_t Truncate(Double_t x)
150 return (Long_t) (x + kEpsilon);
152 return (Long_t) (x - kEpsilon);
160 static Bool_t IsLeapYear(Int_t year)
162 return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)));
167 static Bool_t IsGoodChar(
char c, TGNumberFormat::EStyle style,
168 TGNumberFormat::EAttribute attr)
173 if (isxdigit(c) && (style == TGNumberFormat::kNESHex)) {
176 if ((c ==
'-') && (style == TGNumberFormat::kNESInteger) &&
177 (attr == TGNumberFormat::kNEAAnyNumber)) {
181 ((style == TGNumberFormat::kNESRealOne) ||
182 (style == TGNumberFormat::kNESRealTwo) ||
183 (style == TGNumberFormat::kNESRealThree) ||
184 (style == TGNumberFormat::kNESRealFour) ||
185 (style == TGNumberFormat::kNESReal) ||
186 (style == TGNumberFormat::kNESDegree) ||
187 (style == TGNumberFormat::kNESMinSec)) &&
188 (attr == TGNumberFormat::kNEAAnyNumber)) {
191 if ((c ==
'-') && (style == TGNumberFormat::kNESReal)) {
194 if (((c ==
'.') || (c ==
',')) &&
195 ((style == TGNumberFormat::kNESRealOne) ||
196 (style == TGNumberFormat::kNESRealTwo) ||
197 (style == TGNumberFormat::kNESRealThree) ||
198 (style == TGNumberFormat::kNESRealFour) ||
199 (style == TGNumberFormat::kNESReal) ||
200 (style == TGNumberFormat::kNESDegree) ||
201 (style == TGNumberFormat::kNESMinSec) ||
202 (style == TGNumberFormat::kNESHourMin) ||
203 (style == TGNumberFormat::kNESHourMinSec) ||
204 (style == TGNumberFormat::kNESDayMYear) ||
205 (style == TGNumberFormat::kNESMDayYear))) {
209 ((style == TGNumberFormat::kNESDegree) ||
210 (style == TGNumberFormat::kNESMinSec) ||
211 (style == TGNumberFormat::kNESHourMin) ||
212 (style == TGNumberFormat::kNESHourMinSec) ||
213 (style == TGNumberFormat::kNESDayMYear) ||
214 (style == TGNumberFormat::kNESMDayYear))) {
218 ((style == TGNumberFormat::kNESDayMYear) ||
219 (style == TGNumberFormat::kNESMDayYear))) {
222 if (((c ==
'e') || (c ==
'E')) && (style == TGNumberFormat::kNESReal)) {
230 static char *EliminateGarbage(
char *text,
231 TGNumberFormat::EStyle style,
232 TGNumberFormat::EAttribute attr)
237 for (Int_t i = strlen(text) - 1; i >= 0; i--) {
238 if (!IsGoodChar(text[i], style, attr)) {
239 memmove(text + i, text + i + 1, strlen(text) - i);
247 static Long_t IntStr(
const char *text)
251 for (UInt_t i = 0; i < strlen(text); i++) {
252 if (text[i] ==
'-') {
254 }
else if ((isdigit(text[i])) && (l < kMaxLong)) {
255 l = 10 * l + (text[i] -
'0');
263 static char *StrInt(
char *text, Long_t i, Int_t digits)
265 snprintf(text, 250,
"%li", TMath::Abs(i));
267 while (digits > s.Length()) {
273 strlcpy(text, (
const char *) s, 250);
279 static TString StringInt(Long_t i, Int_t digits)
282 StrInt(text, i, digits);
283 return TString(text);
288 static char *RealToStr(
char *text,
const RealInfo_t & ri)
296 strlcpy(p,
"-", 256);
299 StrInt(p, TMath::Abs(ri.fIntNum), 0);
301 if ((ri.fStyle == kRSFrac) || (ri.fStyle == kRSFracExpo)) {
302 strlcpy(p,
".", 256-strlen(p));
304 StrInt(p, TMath::Abs(ri.fFracNum), ri.fFracDigits);
307 if ((ri.fStyle == kRSExpo) || (ri.fStyle == kRSFracExpo)) {
308 strlcpy(p,
"e", 256-strlen(p));
310 StrInt(p, ri.fExpoNum, 0);
318 static Double_t StrToReal(
const char *text, RealInfo_t & ri)
326 if ((text == 0) || (!text[0])) {
332 strlcpy(buf, text,
sizeof(buf));
334 frac = strchr(s,
'.');
336 frac = strchr(s,
',');
338 expo = strchr(s,
'e');
339 minus = strchr(s,
'-');
341 expo = strchr(s,
'E');
343 if ((frac != 0) && (expo != 0) && (frac > expo)) {
346 if ((minus != 0) && ((expo == 0) || (minus < expo))) {
351 if ((frac == 0) && (expo == 0)) {
353 }
else if (frac == 0) {
355 }
else if (expo == 0) {
358 ri.fStyle = kRSFracExpo;
368 ri.fIntNum = TMath::Abs(IntStr(s));
370 ri.fExpoNum = IntStr(expo);
374 if (ri.fExpoNum > 999) {
377 if (ri.fExpoNum < -999) {
384 for (UInt_t i = 0; i < strlen(frac); i++) {
385 if (isdigit(frac[i])) {
386 if (ri.fFracNum + 9 < kMaxInt / 10) {
387 ri.fFracNum = 10 * ri.fFracNum + (frac[i] -
'0');
394 if ((ri.fFracDigits == 0) && (ri.fStyle == kRSFrac)) {
397 if ((ri.fFracDigits == 0) && (ri.fStyle == kRSFracExpo)) {
402 return ri.fSign * ri.fIntNum;
405 (ri.fIntNum + (Double_t) ri.fFracNum / ri.fFracBase);
407 return ri.fSign * (ri.fIntNum * TMath::Power(10, ri.fExpoNum));
409 return ri.fSign * (ri.fIntNum +
410 (Double_t) ri.fFracNum / ri.fFracBase) *
411 TMath::Power(10, ri.fExpoNum);
418 static ULong_t HexStrToInt(
const char *s)
421 for (UInt_t i = 0; i < strlen(s); i++) {
422 if ((s[i] >=
'0') && (s[i] <=
'9')) {
423 w = 16 * w + (s[i] -
'0');
424 }
else if ((toupper(s[i]) >=
'A') && (toupper(s[i]) <=
'F')) {
425 w = 16 * w + (toupper(s[i]) -
'A' + 10);
433 static char *IntToHexStr(
char *text, ULong_t l)
435 const char *
const digits =
"0123456789ABCDEF";
441 *(--p) = digits[l % 16];
456 static char *MIntToStr(
char *text, Long_t l, Int_t digits)
478 s = StringInt(TMath::Abs(l) / base, 0) +
"." +
479 StringInt(TMath::Abs(l) % base, digits);
483 strlcpy(text, (
const char *) s, 256);
489 static char *DIntToStr(
char *text, Long_t l, Bool_t Sec,
char Del)
493 s = StringInt(TMath::Abs(l) / 3600, 0) + Del +
494 StringInt((TMath::Abs(l) % 3600) / 60, 2) + Del +
495 StringInt(TMath::Abs(l) % 60, 2);
497 s = StringInt(TMath::Abs(l) / 60, 0) + Del +
498 StringInt(TMath::Abs(l) % 60, 2);
503 strlcpy(text, (
const char *) s, 256);
509 static void GetNumbers(
const char *s, Int_t & Sign,
510 Long_t & n1, Int_t maxd1,
511 Long_t & n2, Int_t maxd2,
512 Long_t & n3, Int_t maxd3,
const char *Delimiters)
524 if (!isdigit(*s) && !strchr(Delimiters, *s)) {
527 while ((*s != 0) && ((strchr(Delimiters, *s) == 0) || (maxd2 == 0))) {
528 if (isdigit(*s) && (d < maxd1)) {
530 n1 = 10 * n1 + (*s -
'0');
536 if (strcspn(s, Delimiters) == strlen(s)) {
540 GetNumbers(s + 1, dummy, n2, maxd2, n3, maxd3, n, d, Delimiters);
545 static Long_t GetSignificant(Long_t l, Int_t Max)
547 while (TMath::Abs(l) >= Max) {
555 static void AppendFracZero(
char *text, Int_t digits)
559 p = strchr(text,
'.');
561 p = strchr(text,
',');
567 for (UInt_t i = 0; i < strlen(p); i++) {
572 while (found < digits) {
574 strcpy(p + strlen(p),
"0");
582 static Long_t MakeDateNumber(
const char * , Long_t Day,
583 Long_t Month, Long_t Year)
585 Day = TMath::Abs(Day);
586 Month = TMath::Abs(Month);
587 Year = TMath::Abs(Year);
591 Month = GetSignificant(Month, 100);
596 Day = GetSignificant(Day, 100);
599 if (Day > kDays[Month])
601 if ((Month == 2) && (Day > 28) && !IsLeapYear(Year))
603 return 10000 * Year + 100 * Month + Day;
609 static Long_t TranslateToNum(
const char *text,
610 TGNumberFormat::EStyle style, RealInfo_t & ri)
617 case TGNumberFormat::kNESInteger:
618 GetNumbers(text, sign, n1, 12, n2, 0, n3, 0,
"");
620 case TGNumberFormat::kNESRealOne:
621 GetNumbers(text, sign, n1, 12, n2, 1, n3, 0,
".,");
622 return sign * (10 * n1 + GetSignificant(n2, 10));
623 case TGNumberFormat::kNESRealTwo:
626 strlcpy(buf, text,
sizeof(buf));
627 AppendFracZero(buf, 2);
628 GetNumbers(buf, sign, n1, 12, n2, 2, n3, 0,
".,");
629 return sign * (100 * n1 + GetSignificant(n2, 100));
631 case TGNumberFormat::kNESRealThree:
634 strlcpy(buf, text,
sizeof(buf));
635 AppendFracZero(buf, 3);
636 GetNumbers(buf, sign, n1, 12, n2, 3, n3, 0,
".,");
637 return sign * (1000 * n1 + GetSignificant(n2, 1000));
639 case TGNumberFormat::kNESRealFour:
642 strlcpy(buf, text,
sizeof(buf));
643 AppendFracZero(buf, 4);
644 GetNumbers(buf, sign, n1, 12, n2, 4, n3, 0,
".,");
645 return sign * (10000 * n1 + GetSignificant(n2, 10000));
647 case TGNumberFormat::kNESReal:
648 return (Long_t) StrToReal(text, ri);
649 case TGNumberFormat::kNESDegree:
650 GetNumbers(text, sign, n1, 12, n2, 2, n3, 2,
".,:");
651 return sign * (3600 * n1 + 60 * GetSignificant(n2, 60) +
652 GetSignificant(n3, 60));
653 case TGNumberFormat::kNESHourMinSec:
654 GetNumbers(text, sign, n1, 12, n2, 2, n3, 2,
".,:");
655 return 3600 * n1 + 60 * GetSignificant(n2, 60) +
656 GetSignificant(n3, 60);
657 case TGNumberFormat::kNESMinSec:
658 GetNumbers(text, sign, n1, 12, n2, 2, n3, 0,
".,:");
659 return sign * (60 * n1 + GetSignificant(n2, 60));
660 case TGNumberFormat::kNESHourMin:
661 GetNumbers(text, sign, n1, 12, n2, 2, n3, 0,
".,:");
662 return 60 * n1 + GetSignificant(n2, 60);
663 case TGNumberFormat::kNESDayMYear:
664 GetNumbers(text, sign, n1, 2, n2, 2, n3, 4,
".,/");
665 return MakeDateNumber(text, n1, n2, n3);
666 case TGNumberFormat::kNESMDayYear:
667 GetNumbers(text, sign, n2, 2, n1, 2, n3, 4,
".,/");
668 return MakeDateNumber(text, n1, n2, n3);
669 case TGNumberFormat::kNESHex:
670 return HexStrToInt(text);
678 static char *TranslateToStr(
char *text, Long_t l,
679 TGNumberFormat::EStyle style,
const RealInfo_t & ri)
682 case TGNumberFormat::kNESInteger:
683 return StrInt(text, l, 0);
684 case TGNumberFormat::kNESRealOne:
685 return MIntToStr(text, l, 1);
686 case TGNumberFormat::kNESRealTwo:
687 return MIntToStr(text, l, 2);
688 case TGNumberFormat::kNESRealThree:
689 return MIntToStr(text, l, 3);
690 case TGNumberFormat::kNESRealFour:
691 return MIntToStr(text, l, 4);
692 case TGNumberFormat::kNESReal:
693 return RealToStr(text, ri);
694 case TGNumberFormat::kNESDegree:
695 return DIntToStr(text, l, kTRUE,
'.');
696 case TGNumberFormat::kNESHourMinSec:
697 return DIntToStr(text, l % (24 * 3600), kTRUE,
':');
698 case TGNumberFormat::kNESMinSec:
699 return DIntToStr(text, l, kFALSE,
':');
700 case TGNumberFormat::kNESHourMin:
701 return DIntToStr(text, l % (24 * 60), kFALSE,
':');
702 case TGNumberFormat::kNESDayMYear:
705 StringInt(TMath::Abs(l) % 100, 0) +
"/" +
706 StringInt((TMath::Abs(l) / 100) % 100, 0) +
"/" +
707 StringInt(TMath::Abs(l) / 10000, 0);
708 strlcpy(text, (
const char *) date, 256);
711 case TGNumberFormat::kNESMDayYear:
714 StringInt((TMath::Abs(l) / 100) % 100, 0) +
"/" +
715 StringInt(TMath::Abs(l) % 100, 0) +
"/" +
716 StringInt(TMath::Abs(l) / 10000, 0);
717 strlcpy(text, (
const char *) date, 256);
720 case TGNumberFormat::kNESHex:
721 return IntToHexStr(text, (ULong_t) l);
729 static Double_t RealToDouble(
const RealInfo_t ri)
734 return (Double_t) ri.fSign * ri.fIntNum;
737 return (Double_t) ri.fSign * ((Double_t) TMath::Abs(ri.fIntNum) +
738 (Double_t) ri.fFracNum / ri.fFracBase);
741 return (Double_t) ri.fSign * ri.fIntNum *
742 TMath::Power(10, ri.fExpoNum);
745 return (Double_t) ri.fSign * ((Double_t) TMath::Abs(ri.fIntNum) +
746 (Double_t) ri.fFracNum /
747 ri.fFracBase) * TMath::Power(10,
756 static void CheckMinMax(Long_t & l, TGNumberFormat::EStyle style,
757 TGNumberFormat::ELimit limits,
758 Double_t min, Double_t max)
760 if ((limits == TGNumberFormat::kNELNoLimits) ||
761 (style == TGNumberFormat::kNESReal)) {
765 if ((limits == TGNumberFormat::kNELLimitMin) ||
766 (limits == TGNumberFormat::kNELLimitMinMax)) {
769 case TGNumberFormat::kNESRealOne:
770 lower = Round(10.0 * min);
772 case TGNumberFormat::kNESRealTwo:
773 lower = Round(100.0 * min);
775 case TGNumberFormat::kNESRealThree:
776 lower = Round(1000.0 * min);
778 case TGNumberFormat::kNESRealFour:
779 lower = Round(10000.0 * min);
781 case TGNumberFormat::kNESHex:
782 lower = (ULong_t) Round(min);
788 if (style != TGNumberFormat::kNESHex) {
794 if ((ULong_t) l < (ULong_t) lower)
799 if ((limits == TGNumberFormat::kNELLimitMax) ||
800 (limits == TGNumberFormat::kNELLimitMinMax)) {
803 case TGNumberFormat::kNESRealOne:
804 upper = Round(10.0 * max);
806 case TGNumberFormat::kNESRealTwo:
807 upper = Round(100.0 * max);
809 case TGNumberFormat::kNESRealThree:
810 upper = Round(1000.0 * max);
812 case TGNumberFormat::kNESRealFour:
813 upper = Round(10000.0 * max);
815 case TGNumberFormat::kNESHex:
816 upper = (ULong_t) Round(max);
822 if (style != TGNumberFormat::kNESHex) {
828 if ((ULong_t) l > (ULong_t) upper)
837 static void IncreaseReal(RealInfo_t & ri, Double_t mag, Bool_t logstep,
838 TGNumberFormat::ELimit limits =
839 TGNumberFormat::kNELNoLimits, Double_t min = 0,
842 Double_t x = RealToDouble(ri);
853 x = x + mag / ri.fFracBase;
856 x = x + mag * TMath::Power(10, ri.fExpoNum);
859 x = x + (mag / ri.fFracBase) * TMath::Power(10, ri.fExpoNum);
864 if ((limits == TGNumberFormat::kNELLimitMin) ||
865 (limits == TGNumberFormat::kNELLimitMinMax)) {
870 if ((limits == TGNumberFormat::kNELLimitMax) ||
871 (limits == TGNumberFormat::kNELLimitMinMax)) {
876 if ((x != 0) && logstep && (TMath::Abs(mag) > kEpsilon)) {
877 for (
int j = 0; j < 10; j++) {
879 if ((ri.fStyle == kRSInt) && (TMath::Abs(x) < 1) &&
880 (TMath::Abs(x) > kEpsilon)) {
886 if ((ri.fStyle == kRSInt) && (TMath::Abs(x) > 10000)) {
887 ri.fStyle = kRSFracExpo;
890 ri.fFracBase = 10000;
891 Long_t rest = Round(TMath::Abs(x)) % 10000;
892 for (
int k = 0; k < 4; k++) {
893 if (rest % 10 != 0) {
900 if (ri.fFracDigits == 0) {
905 if (ri.fStyle == kRSInt)
910 if ((ri.fStyle == kRSExpo) || (ri.fStyle == kRSFracExpo)) {
911 y = TMath::Abs(x) * TMath::Power(10, -ri.fExpoNum);
916 if ((Truncate(y) == 0) && (y > 0.001)) {
917 if ((ri.fStyle == kRSExpo) || (ri.fStyle == kRSFracExpo)) {
920 ri.fStyle = kRSFracExpo;
926 if (Truncate(y) >= 10) {
927 if ((ri.fStyle == kRSExpo) || (ri.fStyle == kRSFracExpo)) {
930 ri.fStyle = kRSFracExpo;
943 ri.fSign = (x < 0) ? -1 : 1;
944 ri.fIntNum = Round(TMath::Abs(x));
950 ri.fSign = (x < 0) ? -1 : 1;
951 ri.fIntNum = Truncate(TMath::Abs(x));
952 ri.fFracNum = Round((TMath::Abs(x) - TMath::Abs(ri.fIntNum)) * ri.fFracBase);
958 ri.fSign = (x < 0) ? -1 : 1;
959 ri.fIntNum = Round(TMath::Abs(x) * TMath::Power(10, -ri.fExpoNum));
960 if (ri.fIntNum == 0) {
968 ri.fSign = (x < 0) ? -1 : 1;
969 Double_t y = TMath::Abs(x) * TMath::Power(10, -ri.fExpoNum);
970 ri.fIntNum = Truncate(y);
971 ri.fFracNum = Round((y - TMath::Abs(ri.fIntNum)) * ri.fFracBase);
972 if ((ri.fIntNum == 0) && (ri.fFracNum == 0)) {
980 if (limits != TGNumberFormat::kNELNoLimits) {
981 x = RealToDouble(ri);
983 if ((limits == TGNumberFormat::kNELLimitMin) ||
984 (limits == TGNumberFormat::kNELLimitMinMax)) {
987 snprintf(text, 255,
"%g", min);
992 if ((limits == TGNumberFormat::kNELLimitMax) ||
993 (limits == TGNumberFormat::kNELLimitMinMax)) {
996 snprintf(text, 255,
"%g", max);
1006 static void IncreaseDate(Long_t & l, TGNumberFormat::EStepSize step, Int_t sign)
1014 month = (TMath::Abs(l) / 100) % 100;
1019 day = TMath::Abs(l) % 100;
1020 if (day > kDays[month])
1022 if ((month == 2) && (day > 28) && !IsLeapYear(year)) {
1029 if (step == TGNumberFormat::kNSSHuge) {
1031 }
else if (step == TGNumberFormat::kNSSLarge) {
1033 }
else if (step == TGNumberFormat::kNSSMedium) {
1043 }
else if (step == TGNumberFormat::kNSSSmall) {
1046 ((day > kDays[month]) ||
1047 ((month == 2) && (day > 28) && !IsLeapYear(year)))) {
1055 if ((sign < 0) && (day == 0)) {
1067 if (day > kDays[month])
1069 if ((month == 2) && (day > 28) && !IsLeapYear(year)) {
1072 l = 10000 * year + 100 * month + day;
1081 TGNumberEntryField::TGNumberEntryField(
const TGWindow * p, Int_t
id,
1082 Double_t val, GContext_t norm,
1083 FontStruct_t font, UInt_t option,
1085 : TGTextEntry(p, new TGTextBuffer(), id, norm, font, option, back),
1086 fNeedsVerification(kFALSE), fNumStyle(kNESReal), fNumAttr(kNEAAnyNumber),
1087 fNumLimits(kNELNoLimits), fNumMin(0.0), fNumMax(1.0)
1090 SetAlignment(kTextRight);
1092 fEditDisabled = kEditDisable | kEditDisableGrab;
1098 TGNumberEntryField::TGNumberEntryField(
const TGWindow * parent,
1099 Int_t
id, Double_t val,
1100 EStyle style, EAttribute attr,
1101 ELimit limits, Double_t min,
1103 : TGTextEntry(parent,
"", id), fNeedsVerification(kFALSE), fNumStyle(style),
1104 fNumAttr(attr), fNumLimits(limits), fNumMin(min), fNumMax(max)
1107 SetAlignment(kTextRight);
1109 fEditDisabled = kEditDisable | kEditDisableGrab;
1115 void TGNumberEntryField::SetNumber(Double_t val)
1117 switch (fNumStyle) {
1119 SetIntNumber(Round(val));
1122 SetIntNumber(Round(10.0 * val));
1125 SetIntNumber(Round(100.0 * val));
1128 SetIntNumber(Round(1000.0 * val));
1131 SetIntNumber(Round(10000.0 * val));
1137 snprintf(text, 255,
"%g", val);
1142 SetIntNumber(Round(val));
1144 case kNESHourMinSec:
1145 SetIntNumber(Round(val));
1148 SetIntNumber(Round(val));
1151 SetIntNumber(Round(val));
1154 SetIntNumber(Round(val));
1157 SetIntNumber(Round(val));
1160 SetIntNumber((UInt_t) (TMath::Abs(val) + 0.5));
1168 void TGNumberEntryField::SetIntNumber(Long_t val)
1172 if (fNumStyle == kNESReal) {
1173 TranslateToStr(text, val, kNESInteger, ri);
1175 TranslateToStr(text, val, fNumStyle, ri);
1183 void TGNumberEntryField::SetTime(Int_t hour, Int_t min, Int_t sec)
1185 switch (fNumStyle) {
1186 case kNESHourMinSec:
1187 SetIntNumber(3600 * TMath::Abs(hour) + 60 * TMath::Abs(min) +
1192 SetIntNumber(60 * min + sec);
1196 SetIntNumber(60 * TMath::Abs(hour) + TMath::Abs(min));
1206 void TGNumberEntryField::SetDate(Int_t year, Int_t month, Int_t day)
1208 switch (fNumStyle) {
1212 SetIntNumber(10000 * TMath::Abs(year) + 100 * TMath::Abs(month) +
1225 void TGNumberEntryField::SetHexNumber(ULong_t val)
1227 SetIntNumber((Long_t) val);
1233 void TGNumberEntryField::SetText(
const char *text, Bool_t emit)
1236 strlcpy(buf, text,
sizeof(buf));
1237 EliminateGarbage(buf, fNumStyle, fNumAttr);
1238 TGTextEntry::SetText(buf, emit);
1239 fNeedsVerification = kFALSE;
1245 Double_t TGNumberEntryField::GetNumber()
const
1247 switch (fNumStyle) {
1249 return (Double_t) GetIntNumber();
1251 return (Double_t) GetIntNumber() / 10.0;
1253 return (Double_t) GetIntNumber() / 100.0;
1255 return (Double_t) GetIntNumber() / 1000.0;
1257 return (Double_t) GetIntNumber() / 10000.0;
1262 strlcpy(text, GetText(),
sizeof(text));
1263 return StrToReal(text, ri);
1266 return (Double_t) GetIntNumber();
1267 case kNESHourMinSec:
1268 return (Double_t) GetIntNumber();
1270 return (Double_t) GetIntNumber();
1272 return (Double_t) GetIntNumber();
1274 return (Double_t) GetIntNumber();
1276 return (Double_t) GetIntNumber();
1278 return (Double_t) (ULong_t) GetIntNumber();
1286 Long_t TGNumberEntryField::GetIntNumber()
const
1289 return TranslateToNum(GetText(), fNumStyle, ri);
1295 void TGNumberEntryField::GetTime(Int_t & hour, Int_t & min, Int_t & sec)
const
1297 switch (fNumStyle) {
1298 case kNESHourMinSec:
1300 Long_t l = GetIntNumber();
1301 hour = TMath::Abs(l) / 3600;
1302 min = (TMath::Abs(l) % 3600) / 60;
1303 sec = TMath::Abs(l) % 60;
1308 Long_t l = GetIntNumber();
1310 min = TMath::Abs(l) / 60;
1311 sec = TMath::Abs(l) % 60;
1320 Long_t l = GetIntNumber();
1321 hour = TMath::Abs(l) / 60;
1322 min = TMath::Abs(l) % 60;
1339 void TGNumberEntryField::GetDate(Int_t & year, Int_t & month, Int_t & day)
const
1341 switch (fNumStyle) {
1345 Long_t l = GetIntNumber();
1347 month = (l % 10000) / 100;
1364 ULong_t TGNumberEntryField::GetHexNumber()
const
1366 return (ULong_t) GetIntNumber();
1372 Int_t TGNumberEntryField::GetCharWidth(
const char *text)
const
1374 return gVirtualX->TextWidth(fFontStruct, text, strlen(text));
1380 void TGNumberEntryField::IncreaseNumber(EStepSize step,
1381 Int_t stepsign, Bool_t logstep)
1386 Double_t rmag = 0.0;
1387 Int_t sign = stepsign;
1390 TString oldtext = GetText();
1392 if (fNumStyle != kNESReal) {
1395 StrToReal(oldtext, ri);
1399 if ((fNumStyle == kNESDegree) || (fNumStyle == kNESHourMinSec) ||
1400 (fNumStyle == kNESMinSec) || (fNumStyle == kNESHourMin) ||
1401 (fNumStyle == kNESDayMYear) || (fNumStyle == kNESMDayYear) ||
1402 (fNumStyle == kNESHex)) {
1419 Int_t msd = TMath::Abs((fNumStyle == kNESReal) ? ri.fIntNum : l);
1422 Bool_t odd = (msd < 3);
1427 rmag = (!logstep) ? 1. : (odd ? 3. : 10. / 3.);
1433 rmag = (!logstep) ? 100. : (odd ? 30. : 100. / 3.);
1436 rmag = (!logstep) ? 1000. : 100.;
1440 rmag = logstep ? 1. / rmag : -rmag;
1449 sign = (sign > 0) ? 1 : -1;
1452 switch (fNumStyle) {
1459 l = logstep ? Round(l * rmag) : Round(l + rmag);
1460 CheckMinMax(l, fNumStyle, fNumLimits, fNumMin, fNumMax);
1461 if ((l < 0) && (fNumAttr == kNEANonNegative))
1463 if ((l <= 0) && (fNumAttr == kNEAPositive))
1469 IncreaseReal(ri, rmag, logstep, fNumLimits, fNumMin, fNumMax);
1470 if (((fNumAttr == kNEANonNegative) ||
1471 (fNumAttr == kNEAPositive)) && (ri.fSign < 0)) {
1482 l += sign * 36 * mag;
1484 l += sign * 6 * mag;
1487 CheckMinMax(l, fNumStyle, fNumLimits, fNumMin, fNumMax);
1488 if ((l < 0) && (fNumAttr == kNEANonNegative))
1490 if ((l <= 0) && (fNumAttr == kNEAPositive))
1494 case kNESHourMinSec:
1497 l += sign * 36 * mag;
1499 l += sign * 6 * mag;
1502 CheckMinMax(l, fNumStyle, fNumLimits, fNumMin, fNumMax);
1504 l = (24 * 3600) - ((-l) % (24 * 3600));
1506 l = l % (24 * 3600);
1512 l += sign * 6 * mag;
1515 CheckMinMax(l, fNumStyle, fNumLimits, fNumMin, fNumMax);
1516 if ((l < 0) && (fNumAttr == kNEANonNegative))
1518 if ((l <= 0) && (fNumAttr == kNEAPositive))
1525 l += sign * 6 * mag;
1528 CheckMinMax(l, fNumStyle, fNumLimits, fNumMin, fNumMax);
1530 l = (24 * 60) - ((-l) % (24 * 60));
1538 IncreaseDate(l, step, sign);
1539 CheckMinMax(l, fNumStyle, fNumLimits, fNumMin, fNumMax);
1544 ULong_t ll = (ULong_t) l;
1546 ll += sign * 4096 * mag / 1000;
1548 ll += sign * 256 * mag / 100;
1550 ll += sign * 16 * mag / 10;
1554 CheckMinMax(l, fNumStyle, fNumLimits, fNumMin, fNumMax);
1558 if (fNumStyle != kNESReal) {
1570 void TGNumberEntryField::SetFormat(EStyle style, EAttribute attr)
1572 Double_t val = GetNumber();
1575 if ((fNumAttr != kNEAAnyNumber) && (val < 0))
1579 IncreaseNumber(kNSSSmall, 0, kFALSE);
1585 void TGNumberEntryField::SetLimits(ELimit limits,
1586 Double_t min, Double_t max)
1588 Double_t val = GetNumber();
1589 fNumLimits = limits;
1594 IncreaseNumber(kNSSSmall, 0, kFALSE);
1600 void TGNumberEntryField::SetState(Bool_t state)
1602 if (!state && fNeedsVerification) {
1604 IncreaseNumber(kNSSSmall, 0, kFALSE);
1606 TGTextEntry::SetState(state);
1612 Bool_t TGNumberEntryField::HandleKey(Event_t * event)
1615 return TGTextEntry::HandleKey(event);
1621 gVirtualX->LookupString(event, tmp,
sizeof(tmp), keysym);
1625 if ((EKeySym) keysym == kKey_Up) {
1627 Bool_t logstep = fStepLog;
1628 if (event->fState & kKeyMod1Mask)
1631 if ((event->fState & kKeyShiftMask) &&
1632 (event->fState & kKeyControlMask)) {
1633 IncreaseNumber(kNSSHuge, 1, logstep);
1636 else if (event->fState & kKeyControlMask) {
1637 IncreaseNumber(kNSSLarge, 1, logstep);
1641 else if (event->fState & kKeyShiftMask) {
1642 IncreaseNumber(kNSSMedium, 1, logstep);
1647 IncreaseNumber(kNSSSmall, 1, logstep);
1652 else if ((EKeySym) keysym == kKey_Down) {
1654 Bool_t logstep = fStepLog;
1655 if (event->fState & kKeyMod1Mask)
1658 if ((event->fState & kKeyShiftMask) &&
1659 (event->fState & kKeyControlMask)) {
1660 IncreaseNumber(kNSSHuge, -1, logstep);
1663 else if (event->fState & kKeyControlMask) {
1664 IncreaseNumber(kNSSLarge, -1, logstep);
1667 else if (event->fState & kKeyShiftMask) {
1668 IncreaseNumber(kNSSMedium, -1, logstep);
1672 IncreaseNumber(kNSSSmall, -1, logstep);
1677 else if (n && (keysym < 127) && (keysym >= 32) &&
1678 ((EKeySym) keysym != kKey_Delete) &&
1679 ((EKeySym) keysym != kKey_Backspace) &&
1680 ((event->fState & kKeyControlMask) == 0)) {
1681 if (IsGoodChar(tmp[0], fNumStyle, fNumAttr)) {
1682 return TGTextEntry::HandleKey(event);
1689 return TGTextEntry::HandleKey(event);
1696 Bool_t TGNumberEntryField::HandleFocusChange(Event_t * event)
1698 if (IsEnabled() && fNeedsVerification &&
1699 (event->fCode == kNotifyNormal) &&
1700 (event->fState != kNotifyPointer) && (event->fType == kFocusOut)) {
1702 IncreaseNumber(kNSSSmall, 0, kFALSE);
1705 return TGTextEntry::HandleFocusChange(event);
1711 void TGNumberEntryField::TextChanged(
const char *text)
1713 TGTextEntry::TextChanged(text);
1714 fNeedsVerification = kTRUE;
1720 void TGNumberEntryField::ReturnPressed()
1722 TString instr, outstr;
1723 instr = TGTextEntry::GetBuffer()->GetString();
1725 if (fNeedsVerification) {
1727 IncreaseNumber(kNSSSmall, 0, kFALSE);
1729 outstr = TGTextEntry::GetBuffer()->GetString();
1730 if (instr != outstr) {
1731 InvalidInput(instr);
1734 TGTextEntry::ReturnPressed();
1740 void TGNumberEntryField::Layout()
1742 if (GetAlignment() == kTextRight) {
1761 void TGNumberEntryLayout::Layout()
1766 UInt_t w = fBox->GetWidth();
1767 UInt_t h = fBox->GetHeight();
1768 UInt_t upw = 2 * h / 3;
1770 Int_t upx = (w > h) ? (Int_t) w - (Int_t) upw : -1000;
1772 Int_t downx = (w > h) ? (Int_t) w - (Int_t) upw : -1000;
1773 Int_t downy = h / 2;
1775 UInt_t downh = h - downy;
1776 UInt_t numw = (w > h) ? w - upw : w;
1778 if (fBox->GetNumberEntry())
1779 fBox->GetNumberEntry()->MoveResize(0, 0, numw, numh);
1780 if (fBox->GetButtonUp())
1781 fBox->GetButtonUp()->MoveResize(upx, upy, upw, uph);
1782 if (fBox->GetButtonDown())
1783 fBox->GetButtonDown()->MoveResize(downx, downy, downw, downh);
1789 TGDimension TGNumberEntryLayout::GetDefaultSize()
const
1791 return fBox->GetSize();
1804 class TGRepeatFireButton;
1808 class TRepeatTimer :
public TTimer {
1810 TGRepeatFireButton *fButton;
1813 TRepeatTimer(TGRepeatFireButton * button, Long_t ms)
1814 : TTimer(ms, kTRUE), fButton(button) { }
1815 virtual Bool_t Notify();
1830 class TGRepeatFireButton :
public TGPictureButton {
1832 TRepeatTimer *fTimer;
1833 Int_t fIgnoreNextFire;
1834 TGNumberFormat::EStepSize fStep;
1838 Bool_t IsEditableParent();
1841 TGRepeatFireButton(
const TGWindow *p,
const TGPicture *pic,
1842 Int_t
id, Bool_t logstep)
1843 : TGPictureButton(p, pic, id), fTimer(0), fIgnoreNextFire(0),
1844 fStep(TGNumberFormat::kNSSSmall), fStepLog(logstep), fDoLogStep(logstep)
1845 { fEditDisabled = kEditDisable | kEditDisableGrab; }
1846 virtual ~TGRepeatFireButton() {
delete fTimer; }
1848 virtual Bool_t HandleButton(Event_t *event);
1850 virtual void SetLogStep(Bool_t on = kTRUE) { fStepLog = on; }
1856 Bool_t TGRepeatFireButton::IsEditableParent()
1858 TGWindow *parent = (TGWindow*)GetParent();
1860 while (parent && (parent != fClient->GetDefaultRoot())) {
1861 if (parent->IsEditable()) {
1864 parent = (TGWindow*)parent->GetParent();
1872 Bool_t TGRepeatFireButton::HandleButton(Event_t * event)
1874 const Int_t t0 = 200;
1879 if (IsEditableParent()) {
1883 if (fState == kButtonDisabled)
1886 if (event->fType == kButtonPress) {
1888 fDoLogStep = fStepLog;
1889 if (event->fState & kKeyMod1Mask)
1890 fDoLogStep = !fDoLogStep;
1891 if ((event->fState & kKeyShiftMask) &&
1892 (event->fState & kKeyControlMask)) {
1893 fStep = TGNumberFormat::kNSSHuge;
1894 }
else if (event->fState & kKeyControlMask) {
1895 fStep = TGNumberFormat::kNSSLarge;
1896 }
else if (event->fState & kKeyShiftMask) {
1897 fStep = TGNumberFormat::kNSSMedium;
1899 fStep = TGNumberFormat::kNSSSmall;
1901 SetState(kButtonDown);
1902 fIgnoreNextFire = 0;
1904 fIgnoreNextFire = 2;
1907 fTimer =
new TRepeatTimer(
this, t0);
1910 gSystem->AddTimer(fTimer);
1912 SetState(kButtonUp);
1915 fTimer->SetTime(t0);
1925 void TGRepeatFireButton::FireButton()
1927 if (fIgnoreNextFire <= 0) {
1928 SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_BUTTON),
1929 fWidgetId, (Long_t) fStep + (fDoLogStep ? 100 : 0));
1938 Bool_t TRepeatTimer::Notify()
1940 fButton->FireButton();
1942 if ((Long64_t)fTime > 20) fTime -= 10;
1949 TGNumberEntry::TGNumberEntry(
const TGWindow *parent,
1950 Double_t val, Int_t wdigits, Int_t
id,
1953 ELimit limits, Double_t min, Double_t max)
1954 : TGCompositeFrame(parent, 10 * wdigits, 25), fButtonToNum(kTRUE)
1957 fMsgWindow = parent;
1958 fPicUp = fClient->GetPicture(
"arrow_up.xpm");
1960 Error(
"TGNumberEntry",
"arrow_up.xpm not found");
1961 fPicDown = fClient->GetPicture(
"arrow_down.xpm");
1963 Error(
"TGNumberEntry",
"arrow_down.xpm not found");
1966 fNumericEntry =
new TGNumberEntryField(
this,
id, val, style, attr,
1968 fNumericEntry->Connect(
"ReturnPressed()",
"TGNumberEntry",
this,
1969 "ValueSet(Long_t=0)");
1970 fNumericEntry->Associate(fMsgWindow);
1971 AddFrame(fNumericEntry, 0);
1972 fButtonUp =
new TGRepeatFireButton(
this, fPicUp, 1,
1973 fNumericEntry->IsLogStep());
1974 fButtonUp->Associate(
this);
1975 AddFrame(fButtonUp, 0);
1976 fButtonDown =
new TGRepeatFireButton(
this, fPicDown, 2,
1977 fNumericEntry->IsLogStep());
1978 fButtonDown->Associate(
this);
1979 AddFrame(fButtonDown, 0);
1982 Int_t h = fNumericEntry->GetDefaultHeight();
1983 Int_t charw = fNumericEntry->GetCharWidth(
"0123456789");
1984 Int_t w = charw * TMath::Abs(wdigits) / 10 + 8 + 2 * h / 3;
1985 SetLayoutManager(
new TGNumberEntryLayout(
this));
1988 fEditDisabled = kEditDisableLayout | kEditDisableHeight;
1994 TGNumberEntry::~TGNumberEntry()
1996 gClient->FreePicture(fPicUp);
1997 gClient->FreePicture(fPicDown);
2005 void TGNumberEntry::Associate(
const TGWindow *w)
2007 TGWidget::Associate(w);
2008 fNumericEntry->Associate(w);
2014 void TGNumberEntry::SetLogStep(Bool_t on)
2016 fNumericEntry->SetLogStep(on);
2017 ((TGRepeatFireButton *) fButtonUp)->SetLogStep(fNumericEntry->IsLogStep());
2018 ((TGRepeatFireButton *) fButtonDown)->SetLogStep(fNumericEntry->IsLogStep());
2024 void TGNumberEntry::SetState(Bool_t enable)
2027 fButtonUp->SetState(kButtonUp);
2028 fButtonDown->SetState(kButtonUp);
2029 fNumericEntry->SetState(kTRUE);
2031 fButtonUp->SetState(kButtonDisabled);
2032 fButtonDown->SetState(kButtonDisabled);
2033 fNumericEntry->SetState(kFALSE);
2044 void TGNumberEntry::SetButtonToNum(Bool_t state)
2046 fButtonToNum = state;
2056 Bool_t TGNumberEntry::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
2058 switch (GET_MSG(msg)) {
2061 if ((GET_SUBMSG(msg) == kCM_BUTTON) &&
2062 (parm1 >= 1) && (parm1 <= 2)) {
2064 Int_t sign = (parm1 == 1) ? 1 : -1;
2065 EStepSize step = (EStepSize) (parm2 % 100);
2066 Bool_t logstep = (parm2 >= 100);
2067 fNumericEntry->IncreaseNumber(step, sign, logstep);
2069 SendMessage(fMsgWindow, msg, fWidgetId,
2070 10000 * (parm1 - 1) + parm2);
2071 ValueChanged(10000 * (parm1 - 1) + parm2);
2074 ValueSet(10000 * (parm1 - 1) + parm2);
2086 TGLayoutManager *TGNumberEntry::GetLayoutManager()
const
2088 TGNumberEntry *entry = (TGNumberEntry*)
this;
2090 if (entry->fLayoutManager->IsA() != TGNumberEntryLayout::Class()) {
2091 entry->SetLayoutManager(
new TGNumberEntryLayout(entry));
2094 return entry->fLayoutManager;
2104 void TGNumberEntry::ValueChanged(Long_t val)
2106 Emit(
"ValueChanged(Long_t)", val);
2116 void TGNumberEntry::ValueSet(Long_t val)
2118 Emit(
"ValueSet(Long_t)", val);
2124 void TGNumberEntry::SavePrimitive(std::ostream &out, Option_t *option )
2129 Int_t w = fNumericEntry->GetWidth();
2130 Int_t h = fNumericEntry->GetHeight();
2131 Int_t charw = fNumericEntry->GetCharWidth(
"0123456789");
2132 Int_t digits = (30*w - 240 -20*h)/(3*charw) + 3;
2135 Int_t hour, min, sec;
2136 GetTime(hour, min, sec);
2140 GetDate(yy, mm, dd);
2142 out <<
" TGNumberEntry *";
2143 out << GetName() <<
" = new TGNumberEntry(" << fParent->GetName() <<
", (Double_t) ";
2144 switch (GetNumStyle()){
2146 out << GetIntNumber() <<
"," << digits <<
"," << WidgetId()
2147 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2150 out << GetNumber() <<
"," << digits <<
"," << WidgetId()
2151 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2154 out << GetNumber() <<
"," << digits <<
"," << WidgetId()
2155 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2158 out << GetNumber() <<
"," << digits <<
"," << WidgetId()
2159 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2162 out << GetNumber() <<
"," << digits <<
"," << WidgetId()
2163 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2166 out << GetNumber() <<
"," << digits <<
"," << WidgetId()
2167 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2170 out << GetIntNumber() <<
"," << digits <<
"," << WidgetId()
2171 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2174 out << min*60 + sec <<
"," << digits <<
"," << WidgetId()
2175 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2178 out << hour*60 + min <<
"," << digits <<
"," << WidgetId()
2179 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2181 case kNESHourMinSec:
2182 out << hour*3600 + min*60 + sec <<
"," << digits <<
"," << WidgetId()
2183 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2186 out << yy << mm << dd <<
"," << digits <<
"," << WidgetId()
2187 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2190 out << yy << mm << dd <<
"," << digits <<
"," << WidgetId()
2191 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2195 ULong_t l = GetHexNumber();
2196 IntToHexStr(hex, l);
2197 std::ios::fmtflags f = out.flags();
2198 out <<
"0x" << std::hex <<
"U," << digits <<
"," << WidgetId()
2199 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2204 if (GetNumMax() ==1) {
2205 if (GetNumMin() == 0) {
2206 if (GetNumLimits() == kNELNoLimits) {
2207 if (GetNumAttr() == kNEAAnyNumber) {
2208 out <<
");" << std::endl;
2210 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr() <<
");" << std::endl;
2213 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr()
2214 <<
",(TGNumberFormat::ELimit) " << GetNumLimits() <<
");" << std::endl;
2217 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr()
2218 <<
",(TGNumberFormat::ELimit) " << GetNumLimits()
2219 <<
"," << GetNumMin() <<
");" << std::endl;
2222 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr()
2223 <<
",(TGNumberFormat::ELimit) " << GetNumLimits()
2224 <<
"," << GetNumMin() <<
"," << GetNumMax() <<
");" << std::endl;
2226 if (option && strstr(option,
"keep_names"))
2227 out <<
" " << GetName() <<
"->SetName(\"" << GetName() <<
"\");" << std::endl;
2228 if (fButtonDown->GetState() == kButtonDisabled)
2229 out <<
" " << GetName() <<
"->SetState(kFALSE);" << std::endl;
2231 TGToolTip *tip = GetNumberEntry()->GetToolTip();
2233 TString tiptext = tip->GetText()->GetString();
2234 tiptext.ReplaceAll(
"\n",
"\\n");
2236 out << GetName() <<
"->GetNumberEntry()->SetToolTipText(" << quote
2237 << tiptext << quote <<
");" << std::endl;
2244 void TGNumberEntryField::SavePrimitive(std::ostream &out, Option_t *option )
2249 Int_t hour, min, sec;
2250 GetTime(hour, min, sec);
2254 GetDate(yy, mm, dd);
2256 out <<
" TGNumberEntryField *";
2257 out << GetName() <<
" = new TGNumberEntryField(" << fParent->GetName()
2258 <<
", " << WidgetId() <<
", (Double_t) ";
2259 switch (GetNumStyle()){
2261 out << GetIntNumber()
2262 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2266 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2270 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2274 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2278 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2282 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2285 out << GetIntNumber()
2286 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2290 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2293 out << hour*60 + min
2294 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2296 case kNESHourMinSec:
2297 out << hour*3600 + min*60 + sec
2298 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2301 out << yy << mm << dd
2302 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2305 out << yy << mm << dd
2306 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2310 ULong_t l = GetHexNumber();
2311 IntToHexStr(hex, l);
2312 std::ios::fmtflags f = out.flags();
2313 out <<
"0x" << std::hex <<
"U"
2314 <<
",(TGNumberFormat::EStyle) " << GetNumStyle();
2319 if (GetNumMax() ==1) {
2320 if (GetNumMin() == 0) {
2321 if (GetNumLimits() == kNELNoLimits) {
2322 if (GetNumAttr() == kNEAAnyNumber) {
2323 out <<
");" << std::endl;
2325 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr() <<
");" << std::endl;
2328 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr()
2329 <<
",(TGNumberFormat::ELimit) " << GetNumLimits() <<
");" << std::endl;
2332 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr()
2333 <<
",(TGNumberFormat::ELimit) " << GetNumLimits()
2334 <<
"," << GetNumMin() <<
");" << std::endl;
2337 out <<
",(TGNumberFormat::EAttribute) " << GetNumAttr()
2338 <<
",(TGNumberFormat::ELimit) " << GetNumLimits()
2339 <<
"," << GetNumMin() <<
"," << GetNumMax() <<
");" << std::endl;
2341 if (option && strstr(option,
"keep_names"))
2342 out <<
" " << GetName() <<
"->SetName(\"" << GetName() <<
"\");" << std::endl;
2344 out <<
" " << GetName() <<
"->SetState(kFALSE);" << std::endl;
2346 out <<
" " << GetName() <<
"->Resize("<< GetWidth() <<
"," << GetName()
2347 <<
"->GetDefaultHeight());" << std::endl;
2349 TGToolTip *tip = GetToolTip();
2351 TString tiptext = tip->GetText()->GetString();
2352 tiptext.ReplaceAll(
"\n",
"\\n");
2354 out << GetName() <<
"->SetToolTipText(" << quote
2355 << tiptext << quote <<
");" << std::endl;