File: screenruler.tcl

package info (click to toggle)
tklib 0.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,156 kB
  • sloc: tcl: 105,088; sh: 2,573; ansic: 792; pascal: 359; makefile: 69; sed: 53; exp: 21
file content (102 lines) | stat: -rw-r--r-- 2,813 bytes parent folder | download
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
#! /usr/bin/env tclsh

package require Tk 8.4-
set noimg [catch {package require img::png}] ; # for saving images

# We are the main script being run - show ourselves
wm withdraw .

package require widget::screenruler
set dlg [widget::screenruler .r -title "Screen Ruler" -width 250 -height 100]

if {[tk windowingsystem] eq "aqua"} {
    set CTRL    "Command-"
    set CONTROL Command
} else {
    set CTRL    Ctrl+
    set CONTROL Control
}

upvar \#0 [$dlg info vars reflect] reflect
if {[lsearch -exact [image names] $reflect(image)] != -1} {
    # We have a reflectable desktop

    $dlg menu add separator
    $dlg menu add command -label "Save Image" -accelerator ${CTRL}s \
	-underline 0 -command [list save $dlg]
    bind $dlg <$CONTROL-s> [list save $dlg]
}

if {[tk windowingsystem] eq "x11"} {
    # Add hack to control overrideredirect as some wms (eg KDE) have focus
    # issues on the overrideredirect window
    set override [expr {![wm overrideredirect $dlg]}]
    $dlg menu add separator
    $dlg menu add checkbutton -label "Window Decoration" -variable ::override \
	-command [list override $dlg]
    proc override {w} {
	wm withdraw $w
	wm overrideredirect $w [expr {! $::override}]
	wm deiconify $w
    }
    wm protocol $dlg WM_DELETE_WINDOW exit
}

$dlg menu add separator
$dlg menu add command -label "Exit" \
    -underline 1 -accelerator ${CTRL}q -command { exit }
bind $dlg <$CONTROL-q> { exit }

package require comm
$dlg menu add separator
$dlg menu add command -label "COMM: [comm::comm self]" -state disabled

focus -force $dlg
$dlg display
$dlg configure -alpha 0.8

if {$::argc} {
    eval [linsert $argv 0 $dlg configure]
}

set LASTDIR  [pwd]

proc save {dlg} {
    global LASTDIR
    variable [$dlg info vars reflect]
    after cancel $reflect(id)

    if {$::noimg} {
	set filetypes {
	    {"All Image Files" {.gif .ppm}}
	}
	set re {\.(gif|ppm)$}
    } else {
	set filetypes {
	    {"All Image Files" {.gif .png .ppm}}
	    {"PNG Images" .png}
	}
	set re {\.(gif|ppm|png)$}
    }
    lappend filetypes {"GIF Images" .gif} {"PPM Images" .ppm} {"All Files" *}
    set file [tk_getSaveFile -parent $dlg -title "Save Image to File" \
		  -initialdir $LASTDIR -filetypes $filetypes]

    if {$file ne ""} {
	set LASTDIR [file dirname $file]
	if {![regexp -nocase $re $file -> ext]} {
	    tk_messageBox -title "Unrecognized Extension" \
		-parent $dlg -icon error -type ok \
		-message "Unknown file type to save for file\
		\"[file tail $file]\"\nPlease use .gif, .ppm or .png."
	} elseif {[catch {$reflect(image) write $file \
			      -format [string tolower $ext]} err]} {
	    tk_messageBox -title "Error Writing File" \
		-parent $dlg -icon error -type ok \
		-message "Error writing to file \"$file\":\n$err"
	}
    }

    $dlg configure -reflect [$dlg cget -reflect]
}