changeset 67:0bf7e664f913

window pos saving
author dmcc
date Tue, 09 Jul 2002 09:27:47 +0000
parents 8b6befd8b97e
children 57b3c454465a
files light8/Lightboard.py light8/panels.py light8/uihelpers.py
diffstat 3 files changed, 45 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/light8/Lightboard.py	Tue Jul 09 08:53:44 2002 +0000
+++ b/light8/Lightboard.py	Tue Jul 09 09:27:47 2002 +0000
@@ -4,6 +4,7 @@
 from time import sleep
 from signal import signal, SIGINT
 import sys, cPickle
+import shelve
 
 import io
 from uihelpers import *
@@ -15,12 +16,12 @@
 import Subs, Patch
 
 class Pickles:
-    def __init__(self, scalelevels, subs=None):
+    def __init__(self, scalelevels, subs=None, windowpos=None):
         self.scalelevels = dict([(name, lev.get()) 
             for name, lev in scalelevels.items()])
         self.substate = dict([(name, subobj.get_state())
             for name, subobj in subs])
-        # print "substate", self.substate 
+        self.windowpos = windowpos
 
 class Lightboard:
     def __init__(self, master, parportdmx, DUMMY):
@@ -34,6 +35,8 @@
         self.oldlevels = [None] * 68 # never replace this; just clear it
         self.subediting = Subediting(currentoutputlevels=self.oldlevels)
 
+        self.shelf = shelve.open('/tmp/light9.newprefs')
+        self.windowpos = self.shelf.get('window', {})
         self.get_data()
         self.buildinterface()
         self.load()
@@ -44,21 +47,21 @@
         for w in self.master.winfo_children():
             w.destroy()
 
-        stage_tl = toplevelat(22,30)
+        stage_tl = toplevelat('stage', self.windowpos)
         s = stage.Stage(stage_tl)
         stage.createlights(s)
         s.setsubediting(self.subediting)
         s.pack()
         self.stage = s # save it
 
-        sub_tl = toplevelat(0,0,w=440,h=610)
-        effect_tl = toplevelat(462,4)
+        sub_tl = toplevelat('sub', self.windowpos)
+        effect_tl = toplevelat('effect', self.windowpos)
 
         self.subpanels = Subpanels(sub_tl, effect_tl, self, self.scalelevels,
                                    Subs, self.xfader, self.changelevel,
                                    self.subediting, Subs.longestsubname())
 
-        leveldisplay_tl = toplevelat(873,400)
+        leveldisplay_tl = toplevelat('leveldisplay', self.windowpos)
         leveldisplay_tl.bind('<Escape>', sys.exit)
 
         self.leveldisplay = Leveldisplay(leveldisplay_tl, self.channel_levels)
@@ -82,7 +85,7 @@
         self.xfader.setupwidget(xf)
         controlpanel.pack()
 
-        cuefader_tl = toplevelat(78, 480)
+        cuefader_tl = toplevelat('cuefader', self.windowpos)
         cuefader = Fader(cuefader_tl, Subs.cues, self.scalelevels)
         cuefader.pack()
 
@@ -199,11 +202,32 @@
         self.master.destroy()
         sys.exit()
     def save(self, *args):
+
+
         filename = '/tmp/light9.prefs'
         if self.DUMMY:
             filename += '.dummy'
         print "Saving to", filename
         file = open(filename, 'w')
+
+        # {name : (tkname, geom)}
+        windowitems = self.windowpos.items()
+        windowmapping = dict([(pair[0], name) for name, pair in windowitems])
+        # print "windowmapping", windowmapping
+        # print "windowpos", self.windowpos
+
+        for w in self.master.winfo_children():
+            tkname, geom = str(w), w.winfo_geometry()
+            try:
+                name = windowmapping[tkname]
+                self.windowpos[name] = (tkname, geom)
+                # print name, "geom is", geom
+            except:
+                # print "failed to save windowpos"
+                pass
+        self.shelf['window'] = self.windowpos
+        self.shelf.close()
+
         try:
             cPickle.dump(Pickles(self.scalelevels, Subs.subs.items()), file)
         except cPickle.UnpickleableError:
--- a/light8/panels.py	Tue Jul 09 08:53:44 2002 +0000
+++ b/light8/panels.py	Tue Jul 09 09:27:47 2002 +0000
@@ -28,7 +28,7 @@
 class Console:
     def __init__(self,lightboard):
         print "Light 8: Everything's under control"
-        t=toplevelat(267,717,w=599,h=19)
+        t=toplevelat('console', lightboard.windowpos)
         self.frame = Frame(t)
         self.entry=Entry(self.frame)
         self.entry.pack(expand=1, fill='x')
--- a/light8/uihelpers.py	Tue Jul 09 08:53:44 2002 +0000
+++ b/light8/uihelpers.py	Tue Jul 09 09:27:47 2002 +0000
@@ -15,12 +15,21 @@
     for w in root.winfo_children():
         w.bind(key, func)
 
-def toplevelat(x,y,w=None,h=None):
+# def toplevelat(x,y,w=None,h=None):
+def toplevelat(name, windowpos):
     tl = Toplevel()
-    if w and h:
-        tl.wm_geometry("%dx%d+%d+%d" % (w,h,x,y))
+
+    if name in windowpos:
+        tkname, geom = windowpos[name]
+        tl.wm_geometry(geom)
+        windowpos[name] = str(tl), geom
     else:
-        tl.wm_geometry("+%d+%d" % (x,y))
+        windowpos[name] = str(tl), '+0+0'
+
+    # if w and h:
+        # tl.wm_geometry("%dx%d+%d+%d" % (w,h,x,y))
+    # else:
+        # tl.wm_geometry("+%d+%d" % (x,y))
     return tl
 
 def toggle_slider(s):