Use the users registry to store settings on Windows.
authorPat Thoyts <patthoyts@users.sourceforge.net>
Fri, 27 Nov 2009 00:34:33 +0000 (00:34 +0000)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Fri, 27 Nov 2009 00:34:33 +0000 (00:34 +0000)
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
bin/sockspy.tcl

index c0a9cff6c98d792ce3c377c4547048c1c5be80d8..2abc6e2ce01a52f61bad9c23bcab1b001e61829d 100644 (file)
@@ -260,8 +260,10 @@ proc createMain {} {
     grid columnconfigure . 0 -weight 1
 
     bind .out <Control-l> clearOutput
-    bind all <Alt-c> {console show}
-    bind all <Control-F2> {console show}
+    if {[tk windowingsystem] eq "win32"} {
+        bind all <Alt-c> {console show}
+        bind all <Control-F2> {console show}
+    }
     focus .out
     wm geometry . +10+10
     wm deiconify .
@@ -1145,6 +1147,10 @@ proc DoExtract {who data timestamp} {
 proc stateRestore {} {
     global env state SP extract
 
+    if {[useRegistry]} {
+        if {[stateRestoreRegistry]} { return }
+    }
+
     switch $::tcl_platform(platform) "macintosh" {
        set stateFile [file join $env(PREF_FOLDER) "SockSpy Preferences"]
     } "windows" {
@@ -1168,6 +1174,21 @@ proc stateRestore {} {
        trace variable $v w stateSave
     }
 }
+
+set regkey {HKEY_CURRENT_USER\SOFTWARE\sockspy.sourceforge.net}
+proc stateRestoreRegistry {} {
+    global env state SP extract regkey
+    set r 0
+    foreach name $::saveList {
+        catch {
+            uplevel #0 [list set $name [registry get $regkey $name]]
+            trace variable $name w stateSave
+            set r 1
+        }
+    }
+    return $r
+}
+
 ##+#########################################################################
 #
 # stateSave and stateSaveReal - Save program state.
@@ -1189,6 +1210,10 @@ proc stateSave {a b c} {
 proc stateSaveReal {} {
     global state SP extract
 
+    if {[useRegistry]} {
+        return [stateSaveRegistry]
+    }
+
     # silently ignore open failure
     if {[catch {open $state(stateFile) w} sf]} return
 
@@ -1207,6 +1232,24 @@ proc stateSaveReal {} {
     close $sf
 }
 
+proc stateSaveRegistry {} {
+    global state SP extract regkey
+    foreach name $::saveList {
+        registry set $regkey $name [set $name] sz
+    }
+}
+
+proc useRegistry {} {
+    global tcl_platform
+    set r 0
+    if {$tcl_platform(platform) eq "windows"} {
+        if {![catch {package require registry}]} {
+            set r 1
+        }
+    }
+    return $r
+}
+
 ################################################################
 ################################################################
 ################################################################