File: tabbed_machine_view.tcl

package info (click to toggle)
openmsx 0.10.1-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 16,628 kB
  • ctags: 19,723
  • sloc: cpp: 131,938; xml: 25,418; tcl: 15,394; python: 4,012; sh: 365; makefile: 26
file content (108 lines) | stat: -rw-r--r-- 3,220 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# This script visualizes with 'tabs' in the OSD the different running
# machines in openMSX.
# It only shows when there is more than one machine currently running.
# Because of that, it shouldn't be necessary to turn it off.
#
# Feel free to tune/improve the color scheme :)

# TODO:
# - needs events to know when a machine got deleted or created... now only
#   updates when there was a switch...
#   (Luckily, that is very often... but not enough!)

namespace eval tabbed_machine_view {

variable curtab_bgcolor 0x4040D0C0
variable curtab_text_color 0xFFFFFF
variable inactive_tab_bgcolor 0x202040A0
variable inactive_tab_text_color 0xA0A0A0
variable background_color 0x00000060
variable text_size 12
variable tab_margin 2
variable tab_main_spacing 3 ;# the width of the space between tab-row and main content
variable total_height 20
variable top_spacing 2


proc update {} {
	variable curtab_bgcolor
	variable curtab_text_color
	variable inactive_tab_bgcolor
	variable inactive_tab_text_color
	variable background_color
	variable tab_margin
	variable tab_main_spacing
	variable total_height
	variable top_spacing
	variable text_size

	osd destroy tabbed_machine_view

	if {[llength [list_machines]] > 1} {
		# init
		osd create rectangle tabbed_machine_view \
			-relw 1 \
			-h $total_height \
			-rgba $background_color \
			-x 0 \
			-y 0

		# create new ones
		set rel_width [expr {1.0 / [llength [list_machines]]}]
		set tab_count 0
		foreach machine [utils::get_ordered_machine_list] {
			if {$machine eq [activate_machine]} {
				set bg_color $curtab_bgcolor
				set text_color $curtab_text_color
				set display_text [utils::get_machine_display_name $machine]
			} else {
				set bg_color $inactive_tab_bgcolor
				set text_color $inactive_tab_text_color
				set display_text [format "%s (%s)" [utils::get_machine_display_name $machine] [utils::get_machine_time $machine]]
			}
			osd create rectangle tabbed_machine_view.${machine}_rect \
				-relx [expr {$tab_count * $rel_width}] \
				-x [expr { 2 * $tab_margin}] \
				-relw $rel_width \
				-w [expr {-2 * $tab_margin}] \
				-y $top_spacing \
				-h [expr {$total_height - $top_spacing + -$tab_main_spacing}] \
				-rgba $bg_color \
				-clip true
			osd create text tabbed_machine_view.${machine}_rect.text \
				-text $display_text \
				-size $text_size \
				-rgb $text_color \
				-x 1
			incr tab_count
		}
		# create the bottom 'line' for the visual tab effect
		osd create rectangle tabbed_machine_view.bottom_rect \
			-x 0 \
			-relw 1 \
			-rely 1 \
			-y [expr {-$tab_main_spacing}] \
			-h $tab_main_spacing \
			-rgba $curtab_bgcolor
	}
	after machine_switch [namespace code update]
}

proc on_mouse_click {} {
	set x 2; set y 2
	if {[osd exists tabbed_machine_view]} {
		catch {lassign [osd info "tabbed_machine_view" -mousecoord] x y}
		if {$x > 0 && 1 > $x && $y > 0 && 1 > $y} {
			set machine_index [expr int($x * [llength [list_machines]])]
			set machine [lindex [list_machines] $machine_index]
			activate_machine $machine
		}
	}

	after "mouse button1 up" [namespace code on_mouse_click]
}

after realtime 0.01 [namespace code update]
after "mouse button1 up" [namespace code on_mouse_click]

} ;# namespace tabbed_machine_view