/* $VER: MRemind-GUI.rexx 1.0a (06-Aug-2000) by A.Greve */

mrname     = 'C:MicroReminder'
editorname = 'CED:ED'
editoropt  = ' -s'

/**************************************/

prefsfile  = 'MRemind-GUI.cfg'
tempfile   = 'T:MRemind-GUI.tmp'
tab        = '09'x
qu         = '22'x
lf         = '0a'x
wintags2   = ''
wt_flag    = 0
rt_flag    = 1
timer      = 0

appname     = 'MRemind-GUI'
applongname = 'MRemind-GUI - ©2000 by Axel Greve'
appinfo     = 'GUI for MicroReminder 1.1 by Deniil715!'
appversion  = '1.0a'
apprelease  = '2'
appdate     = '06-Aug-2000'

IF ~SHOW('LIBRARIES','tritonrexx.library') THEN DO
	IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN DO
		SAY 'Cannot open <tritonrexx.library> !'
		EXIT(10)
	END
END

IF ~SHOW('LIBRARIES','rexxtricks.library') THEN DO
	IF ~ADDLIB('rexxtricks.library',10,-30,0) THEN rt_flag = 0
END

SIGNAL ON break_c
SIGNAL ON failure
SIGNAL ON halt
SIGNAL ON ioerr
SIGNAL ON syntax

wintags1 =	WindowID(100),
			WindowTitle(appname appversion),
			WindowPosition('TRWP_CENTERDISPLAY'),
				'VertGroupA' 'SpaceB'
wintags3 =			'HorizGroupAC' 'Space',
						TextID("  _Hours",1) 'SpaceS' SliderGadget(0,23,0,1) 'Space',
					'EndGroup' 'Space',
					'HorizGroupAC' 'Space',
						TextID("_Minutes",3) 'SpaceS' SliderGadget(0,59,1,3) 'Space',
					'EndGroup' 'Space',
					'HorizGroupAC' 'Space',
						TextID("_Seconds",5) 'SpaceS' SliderGadget(0,59,0,5) 'Space',
					'EndGroup' 'SpaceB',
					'HorizSeparator' 'SpaceB',
					'HorizGroupC' 'Space',
						ButtonR(" Start ",98) 'SpaceB',
						'GroupBox',
						'HorizGroup' 'SpaceS',
							TextID('00',2) 'TRAT_MinWidth 2' TextN(':'),
							TextID('01',4) 'TRAT_MinWidth 2' TextN(':'),
							TextID('00',6) 'TRAT_MinWidth 2' 'SpaceS',
						'EndGroup' 'SpaceB',
						Button("Cancel",99) 'Space',
					'EndGroup' 'SpaceB',
				'EndGroup',
 			'EndProject'

_ReadPrefs()

IF wt_flag THEN
	wintags2 =	'HorizGroupAC' 'Space',
					Button("_Prefs",12) 'SpaceS',
					ListSS('pref',11,0,0) 'TRAT_MinWidth' minwid 'TRAT_MinHeight' 3 'Space',
				'EndGroup' 'SpaceB'

app = 	TR_CREATEAPP('TRCA_Name'     '"'appname'"',
					 'TRCA_LongName' '"'applongname'"',
					 'TRCA_Info'     '"'appinfo'"',
					 'TRCA_Version'  '"'appversion'"',
					 'TRCA_Release'  '"'apprelease'"',
					 'TRCA_Date'     '"'appdate'"',
					 'TAG_END')

IF app ~= '00000000'x THEN DO
	window = TR_OPENPROJECT(app,wintags1' 'wintags2' 'wintags3)
	IF window ~= '00000000'x THEN DO
		lock = C2D(window)
		ende = 0
		DO WHILE ende ~= 1
			CALL TR_WAIT(app,'')
			DO WHILE TR_HANDLEMSG(app,'event')
				IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
					SELECT
						WHEN event.trm_id = 1  THEN _NewVal(2,0)
						WHEN event.trm_id = 3  THEN _NewVal(4,0)
						WHEN event.trm_id = 5  THEN _NewVal(6,0)
						WHEN event.trm_id = 11 THEN DO
							IF BITAND(D2X(event.trm_qualifier),'0200'x) = '0200'x THEN
								_StartTimer()
							ELSE DO
								data = event.trm_data
								TR_SetAttribute(window,1,'TRAT_Disabled',(data ~= 0))
								TR_SetAttribute(window,3,'TRAT_Disabled',(data ~= 0))
								TR_SetAttribute(window,5,'TRAT_Disabled',(data ~= 0))
								IF data = 0 THEN DO
									_NewVal(2,1)
									_NewVal(4,3)
									_NewVal(6,5)
								END
								ELSE DO
									data = data + 1
									timer = timer.data
									TR_SetAttribute(window,2,'TRAT_Text',th.data)
									TR_SetAttribute(window,4,'TRAT_Text',tm.data)
									TR_SetAttribute(window,6,'TRAT_Text',ts.data)
								END
							END
						END
						WHEN event.trm_id = 12 THEN _EditPrefs()
					OTHERWISE
						NOP
					END
				END

				IF event.trm_class = 'TRMS_ACTION' THEN DO
					SELECT
						WHEN event.trm_id = 12 THEN _EditPrefs()
						WHEN event.trm_id = 98 THEN _StartTimer()
						WHEN event.trm_id = 99 THEN ende = 1
					OTHERWISE
						NOP
					END
				END

				IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende = 1

			END
		END
		CALL TR_CLOSEPROJECT(window)
	END
	CALL TR_DELETEAPP(app)
END

EXIT(0)

/**************************************/

_NewVal:
	PARSE ARG obj,obj1
	IF obj1 = 0 THEN tmp = event.trm_data
	ELSE			 tmp = TR_GetAttribute(window,obj1,'TRAT_Value')
	TR_SetAttribute(window,obj,'TRAT_Text',RIGHT('0'tmp,2))
	timer = TR_GetAttribute(window,1,'TRAT_Value') * 3600 + TR_GetAttribute(window,3,'TRAT_Value') * 60	+ TR_GetAttribute(window,5,'TRAT_Value')
RETURN 0

_StartTimer:
	IF OPEN('fname',mrname,'R') THEN DO
		CLOSE('fname')
		ADDRESS COMMAND 'Run >NIL: 'mrname timer' NOSAVE'
		ende = 1
	END
	ELSE _EasyReq(mrname)
RETURN 0

_EditPrefs:
	IF OPEN('fname',editorname,'R') THEN DO
		CLOSE('fname')
		ADDRESS COMMAND editorname''editoropt' ENV:'prefsfile
	    DROP dummy.
		IF OPEN('fname','ENVARC:'prefsfile,'R') THEN DO
			CLOSE('fname')
			ADDRESS COMMAND 'Compare >'tempfile' ENV:'prefsfile' ENVARC:'prefsfile
			IF RXTR_READFILE(tempfile, dummy) THEN DO
				IF dummy.0 ~= 0 THEN DO
					ADDRESS COMMAND 'Copy >NIL: ENV:'prefsfile' ENVARC:'
					_ReadPrefs()
					TR_SetAttribute(window,11,'TROB_Listview',pref)
					TR_SetAttribute(window,11,'TRLV_Top',0)
					TR_SetAttribute(window,11,'TRAT_Value',0)
					TR_SetAttribute(window,1, 'TRAT_Disabled',0)
					TR_SetAttribute(window,3, 'TRAT_Disabled',0)
					TR_SetAttribute(window,5, 'TRAT_Disabled',0)
					_NewVal(2,1)
					_NewVal(4,3)
					_NewVal(6,5)
				END
			END
		END
		ELSE ADDRESS COMMAND 'Copy >NIL: ENV:'prefsfile' ENVARC:'
		ADDRESS COMMAND 'Delete >NIL: 'tempfile
	END
	ELSE _EasyReq(editorname)
RETURN 0

_ReadPrefs:
	IF rt_flag THEN DO
		DROP pref. prefs.

		IF RXTR_READFILE('ENV:'prefsfile,'prefs') THEN DO
			wt_flag = 1
			pref.0 = 1
			pref.1 = 'Manuell'
			minwid = LENGTH(pref.1)
			j = 1
			DO i = 1 TO prefs.0
				temp = TRANSLATE(prefs.i,' ',tab)
				temp = STRIP(temp)

				IF LEFT(temp,1) ~= ';' & WORDS(temp) > 0 THEN DO
					temp1 = WORD(temp,1)
					temp2 = RIGHT(temp,LENGTH(temp) - WORDINDEX(temp,2) + 1)
					IF (LEFT(temp2,1) = qu) & (RIGHT(temp2,1) = qu) THEN
						temp2 = CENTER(temp2,LENGTH(temp2) - 2)

					IF LENGTH(temp1) = 5 | LENGTH(temp1) = 8 THEN DO
						IF SUBSTR(temp1,3,1) = ':' THEN DO
							IF SUBSTR(temp1,6,1) = ':' THEN DO
								th = LEFT(temp1,2)
								tm = SUBSTR(temp1,4,2)
								ts = RIGHT(temp1,2)
							END
							ELSE DO
								th = '00'
								tm = LEFT(temp1,2)
								ts = SUBSTR(temp1,4,2)
							END
							IF DATATYPE(th''tm''ts) = 'NUM' THEN DO
								DROP temp1 
								temp1 = th * 3600 + tm * 60 + ts
								_TakeOver()
							END
						END
					END
					ELSE DO
						IF DATATYPE(temp1) = 'NUM' THEN _TakeOver()
					END

				END
			END
			minwid = minwid + 1
		END
	END
RETURN 0

_TakeOver:
	IF (temp1 > -1) & (temp1 < 86400) THEN DO
		j = j + 1
		timer.j = temp1
		rest1 = temp1 // 3600
		th.j = RIGHT('0'temp1 % 3600,2)
		rest2 = rest1 // 60
		tm.j = RIGHT('0'rest1 % 60,2)
		ts.j = RIGHT('0'rest2,2)
		pref.j = temp2
		minwid = MAX(minwid,LENGTH(temp2))
		pref.0 = j
	END
RETURN 0

_EasyReq:
	PARSE ARG argum
	CALL TR_EASYREQUEST(app,'Could not find »'argum'« !',' O K ',,
			'TREZ_Title' "MRemind-GUI"'a0'x"Message...",
			'TREZ_LockProject' lock 'TAG_END')
RETURN 0

break_c:
failure:
halt:
ioerr:
syntax:
	SAY '+++ Error' rc 'in line' sigl '-' ERRORTEXT(rc)
	SAY SOURCELINE(sigl)
	IF app ~= '00000000'x THEN CALL TR_DELETEAPP(app)
	EXIT(10)
