changeset 701:417e23dc0af0

add marble-ice theme. use --reload to opt in to all autoreloading Ignore-this: d87e96e140fa5c7d43bc3cdc32b86a50
author Drew Perttula <drewp@bigasterisk.com>
date Sun, 10 Jun 2012 06:55:46 +0000
parents d5692ab6bc2a
children 155c7bb9c948
files bin/curvecalc light9/curvecalc/curvecalc.glade theme/marble-ice/README theme/marble-ice/gtk-2.0/gtkrc
diffstat 4 files changed, 123 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/bin/curvecalc	Sun Jun 10 05:57:15 2012 +0000
+++ b/bin/curvecalc	Sun Jun 10 06:55:46 2012 +0000
@@ -30,7 +30,6 @@
 from light9.curvecalc import curveview 
 from light9.curvecalc.musicaccess import Music, currentlyPlayingSong
 from light9.wavelength import wavelength
-from light9.uihelpers import toplevelat
 from light9.namespaces import L9
 from light9.curvecalc.subterm import read_all_subs, savekey, graphPathForSubterms
 from light9.curvecalc.subtermview import add_one_subterm
@@ -46,14 +45,19 @@
 
 class Main(object):
     def __init__(self, graph, opts, song, curveset, subterms, music):
-        self.graph = graph
-        self.music = music
-        wtree = gtk.Builder()
+        self.graph, self.opts, self.song = graph, opts, song
+        self.curveset, self.subterms, self.music = curveset, subterms, music
+
+        wtree = self.wtree = gtk.Builder()
         wtree.add_from_file(sibpath(__file__, "../light9/curvecalc/curvecalc.glade"))
         mainwin = wtree.get_object("MainWindow")
         
         mainwin.connect("destroy", self.onQuit)
         wtree.connect_signals(self)
+        gtk.rc_parse("theme/marble-ice/gtk-2.0/gtkrc")
+        gtk.rc_parse_string("""style "default" {font_name = "sans 7"}""")
+        if self.opts.reload:
+            self.refreshTheme()
         mainwin.show_all()
 
         mainwin.connect("delete-event", lambda *args: reactor.crash())
@@ -62,48 +66,14 @@
         self.add_subterms_for_song(song, curveset, subterms,
                                    wtree.get_object("subterms")
                                    )
-
-        def refreshCurveView():
-            mtimes = [os.path.getmtime(f) for f in [
-                'light9/curvecalc/curveview.py',
-                'light9/curvecalc/zoomcontrol.py',
-                ]]
-
-            if (not hasattr(self, 'curvesetView') or
-                self.curvesetView._mtimes != mtimes):
-                print "reload curveview.py"
-                curvesVBox = wtree.get_object("curves")
-                zoomControlBox = wtree.get_object("zoomControlBox")
-                [curvesVBox.remove(c) for c in curvesVBox.get_children()]
-                [zoomControlBox.remove(c) for c in
-                 zoomControlBox.get_children()]
-                try:
-                    linecache.clearcache()
-                    reload(curveview)
-                    # mem problem somewhere; need to hold a ref to this
-                    self.curvesetView = curveview.Curvesetview(
-                        curvesVBox, zoomControlBox, curveset)
-                    self.curvesetView._mtimes = mtimes
-
-                    # curvesetview must already exist, since this
-                    # makes 'add_curve' signals for all the initial
-                    # curves
-                    curveset.load(basename=os.path.join(
-                        showconfig.curvesDir(),
-                        showconfig.songFilenameFromURI(song)),
-                                  skipMusic=opts.skip_music)
-                    # this is scheduled after some tk shuffling, to
-                    # try to minimize the number of times we redraw
-                    # the curve at startup. If tk is very slow, it's
-                    # ok. You'll just get some wasted redraws.
-                    self.curvesetView.goLive()
-                except Exception, e:
-                    print "reload failed:", e
-            reactor.callLater(1, refreshCurveView)
-        refreshCurveView()       
+        self.refreshCurveView()       
         
         self.makeStatusLines(wtree.get_object("status"))
 
+    def refreshTheme(self):
+        gtk.rc_reparse_all()
+        reactor.callLater(1, self.refreshTheme)
+
     def onQuit(self, *args):
         reactor.crash()
         # there's a hang after this, maybe in sem_wait in two
@@ -165,8 +135,47 @@
                                signame, weak=False)
         master.show_all()
 
+    def refreshCurveView(self):
+        wtree = self.wtree
+        mtimes = [os.path.getmtime(f) for f in [
+            'light9/curvecalc/curveview.py',
+            'light9/curvecalc/zoomcontrol.py',
+            ]]
 
-    def onReloadSubs(self): # wants to be ctrl-r  too
+        if (not hasattr(self, 'curvesetView') or
+            self.curvesetView._mtimes != mtimes):
+            print "reload curveview.py"
+            curvesVBox = wtree.get_object("curves")
+            zoomControlBox = wtree.get_object("zoomControlBox")
+            [curvesVBox.remove(c) for c in curvesVBox.get_children()]
+            [zoomControlBox.remove(c) for c in
+             zoomControlBox.get_children()]
+            try:
+                linecache.clearcache()
+                reload(curveview)
+                # mem problem somewhere; need to hold a ref to this
+                self.curvesetView = curveview.Curvesetview(
+                    curvesVBox, zoomControlBox, self.curveset)
+                self.curvesetView._mtimes = mtimes
+
+                # curvesetview must already exist, since this
+                # makes 'add_curve' signals for all the initial
+                # curves
+                self.curveset.load(basename=os.path.join(
+                    showconfig.curvesDir(),
+                    showconfig.songFilenameFromURI(self.song)),
+                              skipMusic=self.opts.skip_music)
+                # this is scheduled after some tk shuffling, to
+                # try to minimize the number of times we redraw
+                # the curve at startup. If tk is very slow, it's
+                # ok. You'll just get some wasted redraws.
+                self.curvesetView.goLive()
+            except Exception, e:
+                print "reload failed:", e
+        if self.opts.reload:
+            reactor.callLater(1, self.refreshCurveView)
+
+    def onReloadSubs(self, *args): # wants to be ctrl-r  too
         dispatcher.send('reload all subs')
 
     def onAddSubterm(self):
@@ -190,6 +199,8 @@
                       help="ignore music and smooth_music curve files")
     parser.add_option("--debug", action="store_true",
                       help="log at DEBUG")
+    parser.add_option("--reload", action="store_true",
+                      help="live reload of themes and code")
     parser.add_option("--startup-only", action='store_true',
                       help="quit after loading everything (for timing tests)")
     opts, args = parser.parse_args()
@@ -203,7 +214,7 @@
     except IndexError:
         song = currentlyPlayingSong()
 
-    music=Music()
+    music = Music()
     graph = makeGraph()
 
     curveset = Curveset(sliders=opts.sliders)
@@ -233,6 +244,6 @@
         log.debug("quitting now because of --startup-only")
         return
 
-    reactor.run()
+    prof.run(reactor.run, profile=False)
 
 main()
--- a/light9/curvecalc/curvecalc.glade	Sun Jun 10 05:57:15 2012 +0000
+++ b/light9/curvecalc/curvecalc.glade	Sun Jun 10 06:55:46 2012 +0000
@@ -193,7 +193,6 @@
                 <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">Poin_ts</property>
                 <property name="use_underline">True</property>
-                <signal name="activate" handler="onPlayPause" swapped="no"/>
                 <child type="submenu">
                   <object class="GtkMenu" id="menu4">
                     <property name="visible">True</property>
@@ -399,6 +398,7 @@
                             <property name="receives_default">True</property>
                             <property name="use_action_appearance">False</property>
                             <property name="image">image2</property>
+                            <accelerator key="r" signal="clicked" modifiers="GDK_CONTROL_MASK"/>
                             <signal name="clicked" handler="onReloadSubs" swapped="no"/>
                           </object>
                           <packing>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/theme/marble-ice/README	Sun Jun 10 06:55:46 2012 +0000
@@ -0,0 +1,5 @@
+GTK2 Theme:	marble-ice
+Engine:			Thinice, Redmond95
+
+Author:			Floe
+Comment:		a Frankenstein-style creation from marble-look and Black Marble
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/theme/marble-ice/gtk-2.0/gtkrc	Sun Jun 10 06:55:46 2012 +0000
@@ -0,0 +1,60 @@
+# Sneaking through the code are we.? ;)
+style "default"
+{
+
+	GtkEntry::cursor_color = "#FFCE00"
+	GtkTextView::cursor_color = "#FFCE00"
+	NautilusIconContainer::frame_text = 1
+
+	fg[NORMAL]        = "#CACAC6"
+	fg[ACTIVE]        = "#CACAC6"
+	fg[INSENSITIVE]   = "#000000"
+	fg[PRELIGHT]      = "#E2E2E2"
+	fg[SELECTED]      = "#E2E2E2"
+
+	bg[ACTIVE]        = "#484949"
+	bg[NORMAL]        = "#5A5C5F"
+	bg[INSENSITIVE]   = "#505050"
+	bg[PRELIGHT]      = "#6A6C6F"
+	bg[SELECTED]      = "#424446"
+
+	base[NORMAL]      = "#919499"
+	base[ACTIVE]      = "#5A5C5F"
+	base[INSENSITIVE] = "#5A5C5F"
+	base[PRELIGHT]    = "#646668"
+	base[SELECTED]    = "#5A5C5F"
+
+	text[NORMAL]      = "#000000"
+	text[ACTIVE]      = "#000000"
+	text[PRELIGHT]    = "#000000"
+	text[SELECTED]    = "#E0D6AD"
+	text[INSENSITIVE] = "#777777"
+
+	engine "thinice"
+	{
+		# Do you want the scrollbar handles rectangular or a bit shaped?
+		rect_scrollbar = TRUE
+
+		# The following variables are semi-generic, can be applied to
+		# different widget classes etc..
+
+		# Mark type 1 is used on scrollbar handles, handleboxes etc
+		mark_type1 = DOT
+		# Mark type 2 is used on scrollbar buttons
+		mark_type2 = ARROW
+	}
+}
+
+style "togglebuttons" = "default"
+{
+	fg[NORMAL]        = "#000000"
+	fg[ACTIVE]        = "#000000"
+	fg[PRELIGHT]      = "#000000"
+	fg[SELECTED]      = "#000000"
+	engine "redmond95" { }
+}
+
+class "GtkWidget" style "default"
+class "GtkCheckButton" style "togglebuttons"
+class "GtkRadioButton" style "togglebuttons"
+