130 { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
162 return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)));
194 if (((
c ==
'.') || (
c ==
',')) &&
237 for (
Int_t i = strlen(
text) - 1; i >= 0; i--) {
252 if (
text[i] ==
'-') {
255 l = 10 *
l + (
text[i] -
'0');
267 while (digits > s.
Length()) {
273 strlcpy(
text, (
const char *) s, 250);
296 strlcpy(p,
"-", 256);
302 strlcpy(p,
".", 256-strlen(p));
308 strlcpy(p,
"e", 256-strlen(p));
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) {
384 for (
UInt_t i = 0; i < strlen(frac); i++) {
385 if (isdigit(frac[i])) {
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);
435 const char *
const digits =
"0123456789ABCDEF";
441 *(--p) = digits[
l % 16];
483 strlcpy(
text, (
const char *) s, 256);
503 strlcpy(
text, (
const char *) s, 256);
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);
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");
599 if (Day >
kDays[Month])
601 if ((Month == 2) && (Day > 28) && !
IsLeapYear(Year))
603 return 10000 * Year + 100 * Month + Day;
626 strlcpy(buf,
text,
sizeof(buf));
628 GetNumbers(buf, sign, n1, 12, n2, 2, n3, 0,
".,");
634 strlcpy(buf,
text,
sizeof(buf));
636 GetNumbers(buf, sign, n1, 12, n2, 3, n3, 0,
".,");
642 strlcpy(buf,
text,
sizeof(buf));
644 GetNumbers(buf, sign, n1, 12, n2, 4, n3, 0,
".,");
708 strlcpy(
text, (
const char *) date, 256);
717 strlcpy(
text, (
const char *) date, 256);
770 lower =
Round(10.0 * min);
773 lower =
Round(100.0 * min);
776 lower =
Round(1000.0 * min);
779 lower =
Round(10000.0 * min);
804 upper =
Round(10.0 * max);
807 upper =
Round(100.0 * max);
810 upper =
Round(1000.0 * max);
813 upper =
Round(10000.0 * max);
877 for (
int j = 0; j < 10; j++) {
892 for (
int k = 0; k < 4; k++) {
893 if (rest % 10 != 0) {
943 ri.
fSign = (
x < 0) ? -1 : 1;
950 ri.
fSign = (
x < 0) ? -1 : 1;
958 ri.
fSign = (
x < 0) ? -1 : 1;
968 ri.
fSign = (
x < 0) ? -1 : 1;
1020 if (day >
kDays[month])
1022 if ((month == 2) && (day > 28) && !
IsLeapYear(year)) {
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;
1086 fNeedsVerification(
kFALSE), fNumStyle(kNESReal), fNumAttr(kNEAAnyNumber),
1087 fNumLimits(kNELNoLimits), fNumMin(0.0), fNumMax(1.0)
1104 fNumAttr(attr), fNumLimits(limits), fNumMin(min), fNumMax(max)
1235 strlcpy(buf,
text,
sizeof(buf));
1346 month = (
l % 10000) / 100;
1386 Int_t sign = stepsign;
1426 rmag = (!logstep) ? 1. : (odd ? 3. : 10. / 3.);
1432 rmag = (!logstep) ? 100. : (odd ? 30. : 100. / 3.);
1435 rmag = (!logstep) ? 1000. : 100.;
1439 rmag = logstep ? 1. / rmag : -rmag;
1448 sign = (sign > 0) ? 1 : -1;
1481 l += sign * 36 * mag;
1483 l += sign * 6 * mag;
1496 l += sign * 36 * mag;
1498 l += sign * 6 * mag;
1503 l = (24 * 3600) - ((-
l) % (24 * 3600));
1505 l =
l % (24 * 3600);
1511 l += sign * 6 * mag;
1524 l += sign * 6 * mag;
1529 l = (24 * 60) - ((-
l) % (24 * 60));
1545 ll += sign * 4096 * mag / 1000;
1547 ll += sign * 256 * mag / 100;
1549 ll += sign * 16 * mag / 10;
1676 else if (
n && (keysym < 127) && (keysym >= 32) &&
1729 if (instr != outstr) {
1775 UInt_t numw = (w >
h) ? w - upw : w;
1873 const Int_t t0 = 200;
1959 Error(
"TGNumberEntry",
"arrow_up.xpm not found");
1962 Error(
"TGNumberEntry",
"arrow_down.xpm not found");
1968 "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);
2092 if (entry->
fLayoutManager->IsA() != TGNumberEntryLayout::Class()) {
2108 Emit(
"ValueChanged(Long_t)", val);
2120 Emit(
"ValueSet(Long_t)", val);
2143 Int_t digits = (30*w - 240 -20*
h)/(3*charw) + 3;
2146 Int_t hour, min, sec;
2153 out <<
" TGNumberEntry *";
2185 out << min*60 + sec <<
"," << digits <<
"," <<
WidgetId()
2189 out << hour*60 + min <<
"," << digits <<
"," <<
WidgetId()
2193 out << hour*3600 + min*60 + sec <<
"," << digits <<
"," <<
WidgetId()
2197 out << yy << mm << dd <<
"," << digits <<
"," <<
WidgetId()
2201 out << yy << mm << dd <<
"," << digits <<
"," <<
WidgetId()
2208 std::ios::fmtflags
f = out.flags();
2209 out <<
"0x" << std::hex <<
"U," << digits <<
"," <<
WidgetId()
2219 out <<
");" << std::endl;
2221 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr() <<
");" << std::endl;
2224 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2225 <<
",(TGNumberFormat::ELimit) " <<
GetNumLimits() <<
");" << std::endl;
2228 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2230 <<
"," <<
GetNumMin() <<
");" << std::endl;
2233 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2237 if (option && strstr(option,
"keep_names"))
2238 out <<
" " <<
GetName() <<
"->SetName(\"" <<
GetName() <<
"\");" << std::endl;
2240 out <<
" " <<
GetName() <<
"->SetState(kFALSE);" << std::endl;
2247 out <<
GetName() <<
"->GetNumberEntry()->SetToolTipText(" << quote
2248 << tiptext << quote <<
");" << std::endl;
2260 Int_t hour, min, sec;
2267 out <<
" TGNumberEntryField *";
2269 <<
", " <<
WidgetId() <<
", (Double_t) ";
2304 out << hour*60 + min
2308 out << hour*3600 + min*60 + sec
2312 out << yy << mm << dd
2316 out << yy << mm << dd
2323 std::ios::fmtflags
f = out.flags();
2324 out <<
"0x" << std::hex <<
"U"
2334 out <<
");" << std::endl;
2336 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr() <<
");" << std::endl;
2339 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2340 <<
",(TGNumberFormat::ELimit) " <<
GetNumLimits() <<
");" << std::endl;
2343 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2345 <<
"," <<
GetNumMin() <<
");" << std::endl;
2348 out <<
",(TGNumberFormat::EAttribute) " <<
GetNumAttr()
2352 if (option && strstr(option,
"keep_names"))
2353 out <<
" " <<
GetName() <<
"->SetName(\"" <<
GetName() <<
"\");" << std::endl;
2355 out <<
" " <<
GetName() <<
"->SetState(kFALSE);" << std::endl;
2358 <<
"->GetDefaultHeight());" << std::endl;
2365 out <<
GetName() <<
"->SetToolTipText(" << quote
2366 << tiptext << quote <<
");" << std::endl;
const Mask_t kKeyMod1Mask
typically the Alt key
const Mask_t kKeyShiftMask
const Mask_t kKeyControlMask
Handle_t GContext_t
Graphics context handle.
Handle_t FontStruct_t
Pointer to font structure.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
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 TGWindow * GetDefaultRoot() const
Returns the root (i.e.
const TGPicture * GetPicture(const char *name)
Get picture from the picture pool.
The base class for composite widgets (menu bars, list boxes, etc.).
TGLayoutManager * fLayoutManager
layout manager
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, Longptr_t msg, Longptr_t parm1, Longptr_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 SetHexNumber(ULong_t val, Bool_t emit=kTRUE)
Set the numeric value (hex format).
ELimit fNumLimits
Limit attributes.
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
Needs verification of input.
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 SetDate(Int_t year, Int_t month, Int_t day, Bool_t emit=kTRUE)
Set the numeric value (date format).
virtual Long_t GetIntNumber() const
Get the numeric value (integer representation).
virtual void SetNumber(Double_t val, Bool_t emit=kTRUE)
Set the numeric value (floating point representation).
virtual Double_t GetNumber() const
Get the numeric value (floating point representation).
virtual void ReturnPressed()
Return was pressed.
EStyle fNumStyle
Number style.
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 SetIntNumber(Long_t val, Bool_t emit=kTRUE)
Set the numeric value (integer representation).
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 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.
EAttribute fNumAttr
Number attribute.
Double_t fNumMin
Lower limit.
virtual Int_t GetCharWidth(const char *text="0") const
Get the text width in pixels.
virtual void SetTime(Int_t hour, Int_t min, Int_t sec, Bool_t emit=kTRUE)
Set the numeric value (time format).
virtual void Layout()
Layout.
Bool_t fStepLog
Logarithmic steps for increase?
Double_t fNumMax
Upper limit.
virtual ELimit GetNumLimits() const
virtual TGDimension GetDefaultSize() const
Return the default size of the numeric control box.
virtual void Layout()
Layout the internal GUI elements in use.
TGNumberEntry is a number entry input widget with up/down buttons.
TGButton * fButtonDown
Button for decreasing value.
virtual Double_t GetNumMax() const
virtual EStyle GetNumStyle() const
Bool_t fButtonToNum
Send button messages to parent rather than number entry field.
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.
TGNumberEntryField * GetNumberEntry() const
virtual void Associate(const TGWindow *w)
Make w the window that will receive the generated messages.
const TGPicture * fPicUp
Up arrow.
virtual Bool_t ProcessMessage(Longptr_t msg, Longptr_t parm1, Longptr_t parm2)
Process the up/down button messages.
virtual void SetState(Bool_t enable=kTRUE)
Set the active state.
TGNumberEntry(const TGNumberEntry &)=delete
virtual ELimit GetNumLimits() const
virtual void SetLogStep(Bool_t on=kTRUE)
Set log steps.
const TGPicture * fPicDown
Down arrow.
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 void Modified()
Emit Modified() signal.
virtual Double_t GetNumMin() const
TGNumberEntryField * fNumericEntry
Number text entry field.
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 * fButtonUp
Button for increasing value.
TGButton * GetButtonUp() const
virtual TGLayoutManager * GetLayoutManager() const
Return layout manager.
virtual void GetTime(Int_t &hour, Int_t &min, Int_t &sec) const
TGClient * fClient
Connection to display server.
The TGPicture class implements pictures and icons used in the different GUI elements and widgets.
const char * GetString() const
A text buffer is used in several widgets, like TGTextEntry, TGFileDialog, etc.
const char * GetString() const
A TGTextEntry is a one line text input widget.
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 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.
FontStruct_t fFontStruct
text font
void End(Bool_t mark=kFALSE)
Moves the text cursor to the right end of the line.
virtual void TextChanged(const char *text=nullptr)
This signal is emitted every time the text has changed.
void Home(Bool_t mark=kFALSE)
Moves the text cursor to the left end of the line.
ROOT GUI Window base class.
virtual const char * GetName() const
Return unique name, used in SavePrimitive methods.
const TGWindow * fParent
Parent window.
@ kEditDisableHeight
window height cannot be edited
@ kEditDisableLayout
window layout cannot be edited
@ kEditDisableGrab
window grab cannot be edited
@ kEditDisable
disable edit of this window
virtual Bool_t IsEditable() const
const TGWindow * GetParent() const
UInt_t fEditDisabled
flags used for "guibuilding"
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.
TRepeatTimer(TGRepeatFireButton *button, Long_t ms)
virtual Bool_t Notify()
Notify when timer times out and reset the timer.
TGRepeatFireButton * fButton
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.
void Reset()
Reset the timer.
void SetTime(Long_t milliSec)
LongDouble_t Power(LongDouble_t x, LongDouble_t y)