131 { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
163 return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)));
195 if (((
c ==
'.') || (
c ==
',')) &&
238 for (
Int_t i = strlen(
text) - 1; i >= 0; i--) {
253 if (
text[i] ==
'-') {
256 l = 10 *
l + (
text[i] -
'0');
268 while (digits >
s.Length()) {
274 strlcpy(
text, (
const char *)
s, 250);
297 strlcpy(p,
"-", 256);
303 strlcpy(p,
".", 256-strlen(p));
309 strlcpy(p,
"e", 256-strlen(p));
311 StrInt(p, ri.fExpoNum, 0);
333 strlcpy(buf,
text,
sizeof(buf));
335 frac = strchr(
s,
'.');
337 frac = strchr(
s,
',');
339 expo = strchr(
s,
'e');
340 minus = strchr(
s,
'-');
342 expo = strchr(
s,
'E');
344 if ((frac != 0) && (expo != 0) && (frac > expo)) {
347 if ((minus != 0) && ((expo == 0) || (minus < expo))) {
352 if ((frac == 0) && (expo == 0)) {
354 }
else if (frac == 0) {
356 }
else if (expo == 0) {
371 ri.fExpoNum =
IntStr(expo);
375 if (ri.fExpoNum > 999) {
378 if (ri.fExpoNum < -999) {
385 for (
UInt_t i = 0; i < strlen(frac); i++) {
386 if (isdigit(frac[i])) {
387 if (ri.fFracNum + 9 <
kMaxInt / 10) {
388 ri.fFracNum = 10 * ri.fFracNum + (frac[i] -
'0');
395 if ((ri.fFracDigits == 0) && (ri.fStyle ==
kRSFrac)) {
398 if ((ri.fFracDigits == 0) && (ri.fStyle ==
kRSFracExpo)) {
403 return ri.fSign * ri.fIntNum;
406 (ri.fIntNum + (
Double_t) ri.fFracNum / ri.fFracBase);
408 return ri.fSign * (ri.fIntNum *
TMath::Power(10, ri.fExpoNum));
410 return ri.fSign * (ri.fIntNum +
411 (
Double_t) ri.fFracNum / ri.fFracBase) *
422 for (
UInt_t i = 0; i < strlen(
s); i++) {
423 if ((
s[i] >=
'0') && (
s[i] <=
'9')) {
424 w = 16 * w + (
s[i] -
'0');
425 }
else if ((toupper(
s[i]) >=
'A') && (toupper(
s[i]) <=
'F')) {
426 w = 16 * w + (toupper(
s[i]) -
'A' + 10);
436 const char *
const digits =
"0123456789ABCDEF";
442 *(--p) = digits[
l % 16];
484 strlcpy(
text, (
const char *)
s, 256);
504 strlcpy(
text, (
const char *)
s, 256);
525 if (!isdigit(*
s) && !strchr(Delimiters, *
s)) {
528 while ((*
s != 0) && ((strchr(Delimiters, *
s) == 0) || (maxd2 == 0))) {
529 if (isdigit(*
s) && (
d < maxd1)) {
531 n1 = 10 * n1 + (*
s -
'0');
537 if (strcspn(
s, Delimiters) == strlen(
s)) {
560 p = strchr(
text,
'.');
562 p = strchr(
text,
',');
568 for (
UInt_t i = 0; i < strlen(p); i++) {
573 while (found < digits) {
575 strcpy(p + strlen(p),
"0");
600 if (Day >
kDays[Month])
602 if ((Month == 2) && (Day > 28) && !
IsLeapYear(Year))
604 return 10000 * Year + 100 * Month + Day;
627 strlcpy(buf,
text,
sizeof(buf));
629 GetNumbers(buf, sign, n1, 12, n2, 2, n3, 0,
".,");
635 strlcpy(buf,
text,
sizeof(buf));
637 GetNumbers(buf, sign, n1, 12, n2, 3, n3, 0,
".,");
643 strlcpy(buf,
text,
sizeof(buf));
645 GetNumbers(buf, sign, n1, 12, n2, 4, n3, 0,
".,");
709 strlcpy(
text, (
const char *) date, 256);
718 strlcpy(
text, (
const char *) date, 256);
735 return (
Double_t) ri.fSign * ri.fIntNum;
739 (
Double_t) ri.fFracNum / ri.fFracBase);
742 return (
Double_t) ri.fSign * ri.fIntNum *
771 lower =
Round(10.0 * min);
774 lower =
Round(100.0 * min);
777 lower =
Round(1000.0 * min);
780 lower =
Round(10000.0 * min);
805 upper =
Round(10.0 * max);
808 upper =
Round(100.0 * max);
811 upper =
Round(1000.0 * max);
814 upper =
Round(10000.0 * max);
854 x =
x + mag / ri.fFracBase;
878 for (
int j = 0; j < 10; j++) {
891 ri.fFracBase = 10000;
893 for (
int k = 0; k < 4; k++) {
894 if (rest % 10 != 0) {
901 if (ri.fFracDigits == 0) {
944 ri.fSign = (
x < 0) ? -1 : 1;
951 ri.fSign = (
x < 0) ? -1 : 1;
959 ri.fSign = (
x < 0) ? -1 : 1;
961 if (ri.fIntNum == 0) {
969 ri.fSign = (
x < 0) ? -1 : 1;
973 if ((ri.fIntNum == 0) && (ri.fFracNum == 0)) {
1021 if (day >
kDays[month])
1023 if ((month == 2) && (day > 28) && !
IsLeapYear(year)) {
1047 ((day >
kDays[month]) ||
1048 ((month == 2) && (day > 28) && !
IsLeapYear(year)))) {
1056 if ((sign < 0) && (day == 0)) {
1068 if (day >
kDays[month])
1070 if ((month == 2) && (day > 28) && !
IsLeapYear(year)) {
1073 l = 10000 * year + 100 * month + day;
1087 fNeedsVerification(
kFALSE), fNumStyle(kNESReal), fNumAttr(kNEAAnyNumber),
1088 fNumLimits(kNELNoLimits), fNumMin(0.0), fNumMax(1.0)
1105 fNumAttr(attr), fNumLimits(limits), fNumMin(min), fNumMax(max)
1237 strlcpy(buf,
text,
sizeof(buf));
1348 month = (
l % 10000) / 100;
1388 Int_t sign = stepsign;
1428 rmag = (!logstep) ? 1. : (odd ? 3. : 10. / 3.);
1434 rmag = (!logstep) ? 100. : (odd ? 30. : 100. / 3.);
1437 rmag = (!logstep) ? 1000. : 100.;
1441 rmag = logstep ? 1. / rmag : -rmag;
1450 sign = (sign > 0) ? 1 : -1;
1483 l += sign * 36 * mag;
1485 l += sign * 6 * mag;
1498 l += sign * 36 * mag;
1500 l += sign * 6 * mag;
1505 l = (24 * 3600) - ((-
l) % (24 * 3600));
1507 l =
l % (24 * 3600);
1513 l += sign * 6 * mag;
1526 l += sign * 6 * mag;
1531 l = (24 * 60) - ((-
l) % (24 * 60));
1547 ll += sign * 4096 * mag / 1000;
1549 ll += sign * 256 * mag / 100;
1551 ll += sign * 16 * mag / 10;
1622 gVirtualX->LookupString(event, tmp,
sizeof(tmp), keysym);
1678 else if (
n && (keysym < 127) && (keysym >= 32) &&
1731 if (instr != outstr) {
1777 UInt_t numw = (w >
h) ? w - upw : w;
1805class TGRepeatFireButton;
1809class TRepeatTimer :
public TTimer {
1811 TGRepeatFireButton *fButton;
1814 TRepeatTimer(TGRepeatFireButton * button,
Long_t ms)
1833 TRepeatTimer *fTimer;
1834 Int_t fIgnoreNextFire;
1839 Bool_t IsEditableParent();
1845 fStep(
TGNumberFormat::kNSSSmall), fStepLog(logstep), fDoLogStep(logstep)
1847 virtual ~TGRepeatFireButton() {
delete fTimer; }
1851 virtual void SetLogStep(
Bool_t on =
kTRUE) { fStepLog = on; }
1857Bool_t TGRepeatFireButton::IsEditableParent()
1861 while (parent && (parent != fClient->GetDefaultRoot())) {
1875 const Int_t t0 = 200;
1880 if (IsEditableParent()) {
1889 fDoLogStep = fStepLog;
1891 fDoLogStep = !fDoLogStep;
1903 fIgnoreNextFire = 0;
1905 fIgnoreNextFire = 2;
1908 fTimer =
new TRepeatTimer(
this, t0);
1916 fTimer->SetTime(t0);
1926void TGRepeatFireButton::FireButton()
1928 if (fIgnoreNextFire <= 0) {
1930 fWidgetId, (
Long_t) fStep + (fDoLogStep ? 100 : 0));
1939Bool_t TRepeatTimer::Notify()
1941 fButton->FireButton();
1943 if ((
Long64_t)fTime > 20) fTime -= 10;
1961 Error(
"TGNumberEntry",
"arrow_up.xpm not found");
1964 Error(
"TGNumberEntry",
"arrow_down.xpm not found");
1970 "ValueSet(Long_t=0)");
2063 (parm1 >= 1) && (parm1 <= 2)) {
2065 Int_t sign = (parm1 == 1) ? 1 : -1;
2067 Bool_t logstep = (parm2 >= 100);
2071 10000 * (parm1 - 1) + parm2);
2075 ValueSet(10000 * (parm1 - 1) + parm2);
2107 Emit(
"ValueChanged(Long_t)", val);
2119 Emit(
"ValueSet(Long_t)", val);
2133 Int_t digits = (30*w - 240 -20*
h)/(3*charw) + 3;
2136 Int_t hour, min, sec;
2143 out <<
" TGNumberEntry *";
2175 out << min*60 + sec <<
"," << digits <<
"," <<
WidgetId()
2179 out << hour*60 + min <<
"," << digits <<
"," <<
WidgetId()
2183 out << hour*3600 + min*60 + sec <<
"," << digits <<
"," <<
WidgetId()
2187 out << yy <<
mm << dd <<
"," << digits <<
"," <<
WidgetId()
2191 out << yy <<
mm << dd <<
"," << digits <<
"," <<
WidgetId()
2198 std::ios::fmtflags
f = out.flags();
2199 out <<
"0x" << std::hex <<
"U," << digits <<
"," <<
WidgetId()
2209 out <<
");" << std::endl;
2211 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr() <<
");" << std::endl;
2214 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2215 <<
",(TGNumberFormat::ELimit) " <<
GetNumLimits() <<
");" << std::endl;
2218 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2220 <<
"," <<
GetNumMin() <<
");" << std::endl;
2223 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2227 if (option && strstr(option,
"keep_names"))
2228 out <<
" " <<
GetName() <<
"->SetName(\"" <<
GetName() <<
"\");" << std::endl;
2230 out <<
" " <<
GetName() <<
"->SetState(kFALSE);" << std::endl;
2237 out <<
GetName() <<
"->GetNumberEntry()->SetToolTipText(" << quote
2238 << tiptext << quote <<
");" << std::endl;
2250 Int_t hour, min, sec;
2257 out <<
" TGNumberEntryField *";
2259 <<
", " <<
WidgetId() <<
", (Double_t) ";
2294 out << hour*60 + min
2298 out << hour*3600 + min*60 + sec
2302 out << yy <<
mm << dd
2306 out << yy <<
mm << dd
2313 std::ios::fmtflags
f = out.flags();
2314 out <<
"0x" << std::hex <<
"U"
2324 out <<
");" << std::endl;
2326 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr() <<
");" << std::endl;
2329 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2330 <<
",(TGNumberFormat::ELimit) " <<
GetNumLimits() <<
");" << std::endl;
2333 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2335 <<
"," <<
GetNumMin() <<
");" << std::endl;
2338 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2342 if (option && strstr(option,
"keep_names"))
2343 out <<
" " <<
GetName() <<
"->SetName(\"" <<
GetName() <<
"\");" << std::endl;
2345 out <<
" " <<
GetName() <<
"->SetState(kFALSE);" << std::endl;
2348 <<
"->GetDefaultHeight());" << std::endl;
2355 out <<
GetName() <<
"->SetToolTipText(" << quote
2356 << tiptext << quote <<
");" << std::endl;
const Mask_t kKeyMod1Mask
const Mask_t kKeyShiftMask
const Mask_t kKeyControlMask
static RooMathCoreReg dummy
static char * DIntToStr(char *text, Long_t l, Bool_t Sec, char Del)
static void IncreaseDate(Long_t &l, TGNumberFormat::EStepSize step, Int_t sign)
Change year/month/day format.
static void IncreaseReal(RealInfo_t &ri, Double_t mag, Bool_t logstep, TGNumberFormat::ELimit limits=TGNumberFormat::kNELNoLimits, Double_t min=0, Double_t max=1)
Convert to double format.
static Long_t Truncate(Double_t x)
static char * RealToStr(char *text, const RealInfo_t &ri)
static Long_t TranslateToNum(const char *text, TGNumberFormat::EStyle style, RealInfo_t &ri)
Translate a string to a number value.
static Bool_t IsGoodChar(char c, TGNumberFormat::EStyle style, TGNumberFormat::EAttribute attr)
static char * MIntToStr(char *text, Long_t l, Int_t digits)
static char * IntToHexStr(char *text, ULong_t l)
static char * TranslateToStr(char *text, Long_t l, TGNumberFormat::EStyle style, const RealInfo_t &ri)
Translate a number value to a string.
static char * EliminateGarbage(char *text, TGNumberFormat::EStyle style, TGNumberFormat::EAttribute attr)
static Long_t Round(Double_t x)
static void GetNumbers(const char *s, Int_t &Sign, Long_t &n1, Int_t maxd1, Long_t &n2, Int_t maxd2, Long_t &n3, Int_t maxd3, const char *Delimiters)
static char * StrInt(char *text, Long_t i, Int_t digits)
static ULong_t HexStrToInt(const char *s)
static Long_t GetSignificant(Long_t l, Int_t Max)
static void AppendFracZero(char *text, Int_t digits)
static void CheckMinMax(Long_t &l, TGNumberFormat::EStyle style, TGNumberFormat::ELimit limits, Double_t min, Double_t max)
Check min/max limits for the set value.
static Long_t IntStr(const char *text)
static Double_t RealToDouble(const RealInfo_t ri)
Convert to double format.
static TString StringInt(Long_t i, Int_t digits)
static Double_t StrToReal(const char *text, RealInfo_t &ri)
static Bool_t IsLeapYear(Int_t year)
static Long_t MakeDateNumber(const char *, Long_t Day, Long_t Month, Long_t Year)
Create a number entry with year/month/day information.
R__EXTERN TSystem * gSystem
const TGPicture * GetPicture(const char *name)
Get picture from the picture pool.
TGLayoutManager * fLayoutManager
virtual void SetLayoutManager(TGLayoutManager *l)
Set the layout manager for the composite frame.
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
virtual void Cleanup()
Cleanup and delete all objects contained in this composite frame.
virtual void MapSubwindows()
Map all sub windows that are part of the composite frame.
virtual UInt_t GetDefaultHeight() const
TGDimension GetSize() const
virtual void SendMessage(const TGWindow *w, Long_t msg, Long_t parm1, Long_t parm2)
Send message (i.e.
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
virtual void MoveResize(Int_t x, Int_t y, UInt_t w=0, UInt_t h=0)
Move and/or resize the frame.
virtual void InvalidInput(const char *instr)
virtual void SetText(const char *text, Bool_t emit=kTRUE)
Set the value (text format).
virtual Double_t GetNumMin() const
Bool_t fNeedsVerification
virtual void SetFormat(EStyle style, EAttribute attr=kNEAAnyNumber)
Set the numerical format.
virtual void SavePrimitive(std::ostream &out, Option_t *="")
Save a number entry widget as a C++ statement(s) on output stream out.
virtual void SetTime(Int_t hour, Int_t min, Int_t sec)
Set the numeric value (time format).
virtual Long_t GetIntNumber() const
Get the numeric value (integer representation).
virtual Double_t GetNumber() const
Get the numeric value (floating point representation).
virtual void ReturnPressed()
Return was pressed.
virtual Bool_t IsLogStep() const
virtual Bool_t HandleKey(Event_t *event)
Handle keys.
virtual EStyle GetNumStyle() const
virtual Double_t GetNumMax() const
virtual void GetDate(Int_t &year, Int_t &month, Int_t &day) const
Get the numeric value (date format).
virtual Bool_t HandleFocusChange(Event_t *event)
Handle focus change.
virtual void IncreaseNumber(EStepSize step=kNSSSmall, Int_t sign=1, Bool_t logstep=kFALSE)
Increase the number value.
virtual void SetState(Bool_t state)
Set the active state.
virtual ULong_t GetHexNumber() const
Get the numeric value (hex format).
virtual void SetLimits(ELimit limits=kNELNoLimits, Double_t min=0, Double_t max=1)
Set the numerical limits.
virtual void GetTime(Int_t &hour, Int_t &min, Int_t &sec) const
Get the numeric value (time format).
virtual void TextChanged(const char *text=0)
Text has changed message.
virtual void SetLogStep(Bool_t on=kTRUE)
virtual void SetDate(Int_t year, Int_t month, Int_t day)
Set the numeric value (date format).
virtual EAttribute GetNumAttr() const
TGNumberEntryField(const TGWindow *p, Int_t id, Double_t val, GContext_t norm, FontStruct_t font=GetDefaultFontStruct(), UInt_t option=kSunkenFrame|kDoubleBorder, Pixel_t back=GetWhitePixel())
Constructs a number entry field.
virtual void SetIntNumber(Long_t val)
Set the numeric value (integer representation).
virtual void SetNumber(Double_t val)
Set the numeric value (floating point representation).
virtual Int_t GetCharWidth(const char *text="0") const
Get the text width in pixels.
virtual void Layout()
Layout.
virtual ELimit GetNumLimits() const
virtual void SetHexNumber(ULong_t val)
Set the numeric value (hex format).
virtual TGDimension GetDefaultSize() const
Return the default size of the numeric control box.
virtual void Layout()
Layout the internal GUI elements in use.
virtual Double_t GetNumMax() const
virtual EStyle GetNumStyle() const
virtual ULong_t GetHexNumber() const
virtual ~TGNumberEntry()
Destructs a numeric entry widget.
virtual void SetButtonToNum(Bool_t state)
Send button messages to the number field (true) or parent widget (false).
virtual void ValueSet(Long_t val)
Emit ValueSet(Long_t) signal.
TGNumberEntry(const TGNumberEntry &)
TGNumberEntryField * GetNumberEntry() const
virtual void Associate(const TGWindow *w)
Make w the window that will receive the generated messages.
virtual void SetState(Bool_t enable=kTRUE)
Set the active state.
virtual ELimit GetNumLimits() const
virtual void SetLogStep(Bool_t on=kTRUE)
Set log steps.
const TGPicture * fPicDown
virtual void ValueChanged(Long_t val)
Emit ValueChanged(Long_t) signal.
virtual void GetDate(Int_t &year, Int_t &month, Int_t &day) const
TGButton * GetButtonDown() const
virtual Long_t GetIntNumber() const
virtual EAttribute GetNumAttr() const
virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
Process the up/down button messages.
virtual Double_t GetNumMin() const
TGNumberEntryField * fNumericEntry
virtual Double_t GetNumber() const
virtual void SavePrimitive(std::ostream &out, Option_t *="")
Save a number entry widget as a C++ statement(s) on output stream out.
TGButton * GetButtonUp() const
virtual TGLayoutManager * GetLayoutManager() const
Return layout manager.
virtual void GetTime(Int_t &hour, Int_t &min, Int_t &sec) const
const char * GetString() const
const char * GetString() const
virtual void SetState(Bool_t state)
Set state of widget. If kTRUE=enabled, kFALSE=disabled.
virtual Bool_t HandleKey(Event_t *event)
The key press event handler converts a key press to some line editor action.
TGTextBuffer * GetBuffer() const
const char * GetText() const
virtual Bool_t HandleFocusChange(Event_t *event)
Handle focus change event in text entry widget.
virtual void SetAlignment(ETextJustification mode=kTextLeft)
Sets the alignment of the text entry.
virtual TGToolTip * GetToolTip() const
ETextJustification GetAlignment() const
virtual void ReturnPressed()
This signal is emitted when the return or enter key is pressed.
virtual void TextChanged(const char *text=0)
This signal is emitted every time the text has changed.
virtual void SetText(const char *text, Bool_t emit=kTRUE)
Sets text entry to text, clears the selection and moves the cursor to the end of the line.
void End(Bool_t mark=kFALSE)
Moves the text cursor to the right end of the line.
void Home(Bool_t mark=kFALSE)
Moves the text cursor to the left end of the line.
virtual const char * GetName() const
Return unique name, used in SavePrimitive methods.
virtual Bool_t IsEditable() const
const TGWindow * GetParent() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
TString & ReplaceAll(const TString &s1, const TString &s2)
virtual void AddTimer(TTimer *t)
Add timer to list of system timers.
Handles synchronous and a-synchronous timer events.
virtual Bool_t Notify()
Notify when timer times out.
static constexpr double s
static constexpr double mm
static constexpr double ms
Short_t Max(Short_t a, Short_t b)
constexpr Double_t E()
Base of natural log:
LongDouble_t Power(LongDouble_t x, LongDouble_t y)