Check-in [42384a9b23]

Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Automatically activate new tracks and items. New command to focus location in detail. Notes on the 3 axes, tracks got commands and ordering. Noted ordering for all axes.
Timelines: family | ancestors | descendants | both | schedule-mgmt
Files: files | file ages | folders
SHA1: 42384a9b23aef018a26d00b18e0a94e7e6df5752
User & Date: andreask 2015-07-03 00:46:04.268
Context
2015-07-04
00:03
Brought tests back into shape for items. Fixed various issues. check-in: f6452980ec user: andreask tags: schedule-mgmt
2015-07-03
00:46
Automatically activate new tracks and items. New command to focus location in detail. Notes on the 3 axes, tracks got commands and ordering. Noted ordering for all axes. check-in: 42384a9b23 user: andreask tags: schedule-mgmt
00:44
More low-level accessors. check-in: 9f8083e1f6 user: andreask tags: schedule-mgmt
Changes
Unified Diff Ignore Whitespace Patch
Changes to lib/cm.tcl.
1769
1770
1771
1772
1773
1774
1775

1776

1777
1778
1779

1780
1781
1782

1783

1784
1785
1786
1787
1788
1789
1790
1791
	}
	alias event       = item event
	alias placeholder = item placeholder

	# TODO : Interactive operations.
	##
	# Navigation - Active item, day, track, time

	# - Three axes: day, time, track

	# - Day-axis:
	#   - f(irst), l(ast),
	#   - p(rev(ious)), n(ext)

	# - Time-axis:
	#   - t(op), b(ottom),
	#   - u(p)/f(orw(ard)), d(own)/back(ward)

	# - Track-axis:

	#   - g(o) "name" (no inherent ordering)
	##
	# Selection
	# - SetMark, FromMark, Include, Exclude
	# - Copy, Cut, Paste
	# = Selection limits: Single day, track ?
	# Enter/Close
	##







>

>
|


>
|


>
|
>
|







1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
	}
	alias event       = item event
	alias placeholder = item placeholder

	# TODO : Interactive operations.
	##
	# Navigation - Active item, day, track, time
	#
	# - Three axes: day, time, track
	#
	# - Day (numerically ordered 0, 1, ...):
	#   - f(irst), l(ast),
	#   - p(rev(ious)), n(ext)
	#
	# - Time (numerically ordered ascending from midnight):
	#   - t(op), b(ottom),
	#   - u(p)/f(orw(ard)), d(own)/back(ward)
	#
	# - Track (lexicographically ordered by name):
	#   - l(eft)m(ost), r(ight)m(ost)
	#   - l(eft), r(ight)
	##
	# Selection
	# - SetMark, FromMark, Include, Exclude
	# - Copy, Cut, Paste
	# = Selection limits: Single day, track ?
	# Enter/Close
	##
Changes to lib/schedule.tcl.
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
namespace eval ::cm {
    namespace export schedule
    namespace ensemble create
}
namespace eval ::cm::schedule {
    namespace export \
	active-or-select just-select validate \
	add remove rename select select-clear selected show listing test-known \
	test-select track-add track-remove track-rename test-track-known \
	test-track-select item-add-event item-add-placeholder test-item-day-known
    #item-remove item-rename
    namespace ensemble create

    namespace import ::cmdr::color
    namespace import ::cmdr::ask







|







34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
namespace eval ::cm {
    namespace export schedule
    namespace ensemble create
}
namespace eval ::cm::schedule {
    namespace export \
	active-or-select just-select validate \
	add remove rename select select-clear selected focus show listing test-known \
	test-select track-add track-remove track-rename test-track-known \
	test-track-select item-add-event item-add-placeholder test-item-day-known
    #item-remove item-rename
    namespace ensemble create

    namespace import ::cmdr::color
    namespace import ::cmdr::ask
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
    set pschedule [pschedule active_get]

    if {$pschedule eq {}} {
	puts \n[color note {No active schedule, operation ignored.}]
	return
    }

    set name [dict get [pschedule details $pschedule] xdname]

    puts -nonewline "\nDeactivating schedule \"[color name $name]\" ... "
    flush stdout

    db do transaction {
	pschedule active_set {}
	pschedule validate







|







203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
    set pschedule [pschedule active_get]

    if {$pschedule eq {}} {
	puts \n[color note {No active schedule, operation ignored.}]
	return
    }

    set name [pschedule piece $pschedule dname]

    puts -nonewline "\nDeactivating schedule \"[color name $name]\" ... "
    flush stdout

    db do transaction {
	pschedule active_set {}
	pschedule validate
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
    set pschedule [pschedule active_get]

    if {$pschedule eq {}} {
	puts \n[color note {No active schedule}]
	return
    }

    set name [dict get [pschedule details $pschedule] xdname]

    puts "\nActive schedule is \"[color name $name]\""
    return
}

proc ::cm::schedule::select {config} {
    debug.cm/schedule {}







|







229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
    set pschedule [pschedule active_get]

    if {$pschedule eq {}} {
	puts \n[color note {No active schedule}]
	return
    }

    set name [pschedule piece $pschedule dname]

    puts "\nActive schedule is \"[color name $name]\""
    return
}

proc ::cm::schedule::select {config} {
    debug.cm/schedule {}
299
300
301
302
303
304
305















































306
307
308
309
310
311
312

	    # Extension: Mark the active track, and day.
	}
    }] show
    return
}
















































proc ::cm::schedule::TrackList {pschedule} {
    debug.cm/schedule {}
    set tracks {}

    set trackstats [pschedule track-name-counts $pschedule]
    # (name -> icount, sorted by name)








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359

	    # Extension: Mark the active track, and day.
	}
    }] show
    return
}

proc ::cm::schedule::focus {config} {
    debug.cm/schedule {}
    pschedule setup
    db show-location

    set pschedule [pschedule active_get]

    if {$pschedule eq {}} {
	puts \n[color note {No active schedule}]
	return
    }

    set name  [pschedule piece $pschedule dname]
    set focus [pschedule focus $pschedule]
    dict with focus {} ;# => xactive{item,day,track,time},xaitem{day,track,start,len}

    if {$xactivetrack ne {}} { set xactivetrack [track-piece $xactivetrack dname] }
    if {$xaitemtrack  ne {}} { set xaitemtrack  [track-piece $xaitemtrack  dname] }

    puts "\nFocus"
    [table/d t {
	$t add Schedule  $name
	if {$xactiveitem eq {}} {
	    # No item. Use saved historical data
	    $t add Day       $xactiveday
	    $t add Track     $xactivetrack
	    $t add Time      $xactivetime
	} else {
	    # Use item information, and show delta to historical
	    if {$xactiveday == $xaitemday} {
		$t add Day   "I $xaitemday"
	    } else {
		$t add Day   "I $xaitemday (-- $xactiveday)"
	    }
	    if {$xactivetrack eq $xaitemtrack} {
		$t add Track "I $xaitemtrack"
	    } else {
		$t add Track "I $xaitemtrack (-- $xactivetrack)"
	    }
	    $t add Time  "I $xaitemstart $xaitemlen (-- $xactivetime)" ;# -- TODO: format start, activetime
	}
    }] show
    return
}

# # ## ### ##### ######## ############# ######################

proc ::cm::schedule::TrackList {pschedule} {
    debug.cm/schedule {}
    set tracks {}

    set trackstats [pschedule track-name-counts $pschedule]
    # (name -> icount, sorted by name)

355
356
357
358
359
360
361






362
363
364
365
366
367
368
    # try to insert, report failure as user error
    puts -nonewline "Schedule \"[color name $pslabel]\": Creating track \"[color name $name]\" ... "
    flush stdout

    try {
	db do transaction {
	    set track [pschedule track-new $pschedule $name]






	    pschedule validate
	}
    } on error {e o} {
	# TODO: trap only proper insert error, if possible.
	util user-error $e SCHEDULE-TRACK CREATE
	return
    }







>
>
>
>
>
>







402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
    # try to insert, report failure as user error
    puts -nonewline "Schedule \"[color name $pslabel]\": Creating track \"[color name $name]\" ... "
    flush stdout

    try {
	db do transaction {
	    set track [pschedule track-new $pschedule $name]

	    # New track is automatically active.
	    puts -nonewline "Activating ... "
	    flush stdout
	    pschedule track-active-set $pschedule $track

	    pschedule validate
	}
    } on error {e o} {
	# TODO: trap only proper insert error, if possible.
	util user-error $e SCHEDULE-TRACK CREATE
	return
    }
454
455
456
457
458
459
460
461






462
463
464
465
466
467
468
    puts "* Day:    $day"
    puts "* Start:  [pschedule-day 2external $start]"
    puts "* Length: $length"
    puts "* Note:   $note"

    try {
	db do transaction {
	    set track [pschedule item-new-event $pschedule $track $day $start $length $desc $note]






	    pschedule validate
	}
    } on error {e o} {
	# TODO: trap only proper insert error, if possible.
	util user-error $e SCHEDULE-ITEM CREATE
	return
    }







|
>
>
>
>
>
>







507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
    puts "* Day:    $day"
    puts "* Start:  [pschedule-day 2external $start]"
    puts "* Length: $length"
    puts "* Note:   $note"

    try {
	db do transaction {
	    set item [pschedule item-new-event $pschedule $track $day $start $length $desc $note]

	    # New item is automatically active.
	    puts -nonewline "Activating ... "
	    flush stdout
	    pschedule item-active-set $pschedule $item

	    pschedule validate
	}
    } on error {e o} {
	# TODO: trap only proper insert error, if possible.
	util user-error $e SCHEDULE-ITEM CREATE
	return
    }
492
493
494
495
496
497
498
499






500
501
502
503
504
505
506
    puts "* Day:         $day"
    puts "* Start:       [pschedule-day 2external $start]"
    puts "* Length:      $length"
    puts "* Description: $description"

    try {
	db do transaction {
	    set track [pschedule item-new-placeholder $pschedule $track $day $start $length $label]






	    pschedule validate
	}
    } on error {e o} {
	# TODO: trap only proper insert error, if possible.
	util user-error $e SCHEDULE-ITEM CREATE
	return
    }







|
>
>
>
>
>
>







551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
    puts "* Day:         $day"
    puts "* Start:       [pschedule-day 2external $start]"
    puts "* Length:      $length"
    puts "* Description: $description"

    try {
	db do transaction {
	    set item [pschedule item-new-placeholder $pschedule $track $day $start $length $label]

	    # New item is automatically active.
	    puts -nonewline "Activating ... "
	    flush stdout
	    pschedule item-active-set $pschedule $item

	    pschedule validate
	}
    } on error {e o} {
	# TODO: trap only proper insert error, if possible.
	util user-error $e SCHEDULE-ITEM CREATE
	return
    }