
Date Control


hrodstein
// Creates a date control that uses YYYY-MM-DD format. // Sticking to one standard date format simplifies life immensely. // You can enter a date directly in YYYY-MM-DD format. You can also use up/down // buttons. And you can also use the mouse scroll wheel. // Two SetVariable controls are used - one to display the date and to accept a date string // and the other to provide the up/down buttons. // Does not support fractional dates or date and time. // To try it, execute: // DemoDateControlPanel() static Constant kDebugDateControl = 0 // Set to 1 for debug printouts Function ConvertYYYYMMDDToIgorDate(dateStr) String dateStr // In YYYY-MM-DD format String separatorStr = "-" Variable month, day, year String formatStr = "%d" + separatorStr + "%d" + separatorStr + "%d" sscanf dateStr, formatStr, year, month, day Variable dt = date2secs(year, month, day ) return dt End Function/S SetDateControlDate(panelName, controlName, igorDateTimeValue) String panelName String controlName Variable igorDateTimeValue // In Igor date/time format (seconds since 1904) String dateStr = Secs2Date(igorDateTimeValue, -2) SetVariable $controlName win=$panelName, value=_STR:dateStr return dateStr End // DateUpDownSetVarProc(sva) // This is the action procedure for the SetVariable control that provides the // up and down buttons. Function DateUpDownSetVarProc(sva) : SetVariableControl STRUCT WMSetVariableAction &sva switch( sva.eventCode ) case 1: // mouse up case 3: // Live update Variable dval = sva.dval ControlInfo DateStringSetVar String dateStr = S_value // e.g., "2011-06-19" Variable igorDateTimeValue = ConvertYYYYMMDDToIgorDate(dateStr) igorDateTimeValue += dval * 86400 dateStr = SetDateControlDate(sva.win, "DateStringSetVar", igorDateTimeValue) SetVariable DateUpDownSetVar value=_NUM:0 if (kDebugDateControl) if (dval > 0) Printf "Up button; Result = %s (Igor date/time value=%d)\r", dateStr, igorDateTimeValue else Printf "Down button; Result = %s (Igor date/time value=%d)\r", dateStr, igorDateTimeValue endif endif break endswitch return 0 End // DateStringSetVarProc(sva) // This is the action procedure for the SetVariable control that displays the // date and accepts manually-entered dates. Function DateStringSetVarProc(sva) : SetVariableControl STRUCT WMSetVariableAction &sva Variable igorDateTimeValue String dateStr switch( sva.eventCode ) case 1: // mouse up Printf "Mouse up: text = %s\r", sva.sval break case 2: // Enter key igorDateTimeValue = ConvertYYYYMMDDToIgorDate(sva.sval) dateStr = Secs2Date(igorDateTimeValue, -2) if (kDebugDateControl) Printf "Enter key: Result = %s (Igor date/time value=%d)\r", dateStr, igorDateTimeValue endif break case 4: // Scroll wheel up igorDateTimeValue = ConvertYYYYMMDDToIgorDate(sva.sval) igorDateTimeValue += 86400 // Add one day dateStr = SetDateControlDate(sva.win, sva.ctrlName, igorDateTimeValue) if (kDebugDateControl) Printf "Scroll wheel up: Result = %s (Igor date/time value=%d)\r", dateStr, igorDateTimeValue endif break case 5: // Scroll wheel down igorDateTimeValue = ConvertYYYYMMDDToIgorDate(sva.sval) igorDateTimeValue -= 86400 // Subtract one day dateStr = SetDateControlDate(sva.win, sva.ctrlName, igorDateTimeValue) if (kDebugDateControl) Printf "Scroll wheel down: Result = %s (Igor date/time value=%d)\r", dateStr, igorDateTimeValue endif break endswitch return 0 End Window DemoDateControlPanel() : Panel PauseUpdate; Silent 1 // building window... NewPanel /W=(197,60,639,265) /K=2 as "Demo Date Control" SetVariable DateStringSetVar,pos={1,2},size={150,19},live=1,proc=DateStringSetVarProc,title="Date:" SetVariable DateStringSetVar,fSize=12,value= _STR:"2011-06-19" Variable hintVPos = 2 // Works well on Macintosh #ifdef WINDOWS hintVPos = 3 // Works better on Windows #endif TitleBox DateHint,pos={171,3},size={85,16},title="(YYYY-MM-DD)",fSize=12,frame=0 Variable upDownSetVarWidth Variable upDownSetVarLeft if (CmpStr("Windows",IgorInfo(2)) == 0) upDownSetVarLeft = 149 // Works better on Windows upDownSetVarWidth = 14 // Works better on Windows else upDownSetVarLeft = 152 // Works better on Macintosh upDownSetVarWidth = 18 // Works well on Macintosh endif SetVariable DateUpDownSetVar,pos={upDownSetVarLeft,2},size={upDownSetVarWidth,19},proc=DateUpDownSetVarProc,fSize=12 SetVariable DateUpDownSetVar,value= _NUM:0 EndMacro

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More