From 82eb1fcd6f80f3e7bf27eff8b1480771bbf634b7 Mon Sep 17 00:00:00 2001 From: bjschuma Date: Thu, 7 Jan 2010 21:31:58 -0500 Subject: [PATCH] Can create and open a GTK window. --- src/base/bt/message.py | 5 ++- src/base/manager.py | 10 ++++- src/base/scion.py | 3 ++ src/base/settings.py | 30 ++++++++++----- src/core/cli.py | 6 ++- src/{core => extra}/example.py | 2 +- src/extra/guiGTK/__init__.py | 5 +++ src/extra/guiGTK/button.py | 30 +++++++++++++++ src/extra/guiGTK/window.py | 29 +++++++++++++++ src/extra/sgtk.py | 68 ++++++++++++++++++++++++++++++++++ 10 files changed, 172 insertions(+), 16 deletions(-) rename src/{core => extra}/example.py (97%) create mode 100644 src/extra/guiGTK/__init__.py create mode 100644 src/extra/guiGTK/button.py create mode 100644 src/extra/guiGTK/window.py create mode 100644 src/extra/sgtk.py diff --git a/src/base/bt/message.py b/src/base/bt/message.py index db8381a4..5dfae224 100644 --- a/src/base/bt/message.py +++ b/src/base/bt/message.py @@ -16,7 +16,10 @@ def disp(text): def write(text,verbose=False): if (verbose==False) or (settings.get("verbose")==True): w = settings.get("write") - w(str(text)) + if w == None: + disp(str(text)) + else: + w(str(text)) # Print an error message diff --git a/src/base/manager.py b/src/base/manager.py index e1b7fcd3..edd11562 100644 --- a/src/base/manager.py +++ b/src/base/manager.py @@ -93,9 +93,10 @@ class Manager: def run(self,name,args=None): name = name.strip() if (name in self.enabled)==True: - self.enabled[name].run(args) + return self.enabled[name].run(args) else: - write("Plugin either not loaded or doesn't exist") + write("Plugin either not loaded or doesn't exist: "+name) + return None def findsession(self): @@ -130,7 +131,12 @@ class Manager: # By an earlier call to restore session for key in self.enabled.keys(): if (key in self.restored) == False: + write(0) self.disablePlugin(key) + for key in self.disabled.keys(): + if (key in self.restored) == True: + write(1) + self.enablePlugin(key) diff --git a/src/base/scion.py b/src/base/scion.py index cdfd5c13..37a0aced 100644 --- a/src/base/scion.py +++ b/src/base/scion.py @@ -33,6 +33,9 @@ def main(): for path in settings.get("PLUGPATH",True): loadPluginPath(path) + manager.manager.restoresession() + settings.pop("loop")() + if __name__ == "__main__":main() diff --git a/src/base/settings.py b/src/base/settings.py index 730b1e2c..4fafaa1a 100644 --- a/src/base/settings.py +++ b/src/base/settings.py @@ -45,7 +45,13 @@ def get(key, all=False): if(all == False): return settings[key][0] else: - return settings[key] + return settings[key] + + +# Set key to value only if it is not set yet +def init(key,value): + if has(key) == False: + set(key,value) # Replace settings[key] with value @@ -57,15 +63,6 @@ def replace(key,value): set(key,value) -# Pop off the first value at key.upper() -def pop(key): - key = key.upper() - global settings - if (key in settings.keys()) == True: - return settings[key].pop(0) - return None - - def delete(key): key = key.upper() global settings @@ -73,6 +70,18 @@ def delete(key): del settings[key] +# Pop off the first value at key.upper() +def pop(key): + key = key.upper() + global settings + if (key in settings.keys()) == True: + item = settings[key].pop(0) + if len(settings[key]) == 0: + delete(key) + return item + return None + + # Read settings from file def readfile(file): write("Reading file: "+file,True) @@ -106,6 +115,7 @@ def clean(): delete("args") delete("plugpath") delete("verbose") + delete("loop") def save(path): diff --git a/src/core/cli.py b/src/core/cli.py index 55051709..00e57d1c 100644 --- a/src/core/cli.py +++ b/src/core/cli.py @@ -41,8 +41,9 @@ def open(): settings.set("cliney", 0) # Start loop in new thread - thread = bt.needle.Needle(cline.loop.loop) - thread.start() + settings.set("loop",cline.loop.loop) + #thread = bt.needle.Needle(cline.loop.loop) + #thread.start() settings.set("write", cline.message.insert) @@ -55,6 +56,7 @@ def close(): # Stop looping cline.loop.quit() + settings.pop("loop") # Undo ncurses initialization curses.nocbreak() diff --git a/src/core/example.py b/src/extra/example.py similarity index 97% rename from src/core/example.py rename to src/extra/example.py index 5e9ea0dd..68219fc0 100644 --- a/src/core/example.py +++ b/src/extra/example.py @@ -7,7 +7,7 @@ __date__ ="$Dec 7, 2009 9:12:00 AM$" global name, app, type, path, opt name = "test" app = "scion" -type = "core" +type = "extra" path = "" opt = [] diff --git a/src/extra/guiGTK/__init__.py b/src/extra/guiGTK/__init__.py new file mode 100644 index 00000000..771b9259 --- /dev/null +++ b/src/extra/guiGTK/__init__.py @@ -0,0 +1,5 @@ +__author__="bjschuma" +__date__ ="$Jan 6, 2010 9:52:21 PM$" + + +__all__ = ["button","window"] \ No newline at end of file diff --git a/src/extra/guiGTK/button.py b/src/extra/guiGTK/button.py new file mode 100644 index 00000000..f4497846 --- /dev/null +++ b/src/extra/guiGTK/button.py @@ -0,0 +1,30 @@ +#! /usr/bin/python + +# To change this template, choose Tools | Templates +# and open the template in the editor. + +__author__="bjschuma" +__date__ ="$Jan 6, 2010 9:55:39 PM$" + + +import gtk + +class Button(gtk.Button): + def __init__(self,name,func,image=None,text=None): + gtk.Button.__init__(self) + box = gtk.HBox(True,0) + # Add an image if we were given one + if image!= None: + box.pack_start(image,True,True,0) + # Add text if we were given some + if text != None: + label = gtk.Label(text) + label.set_line_wrap(True) + label.set_size_request(100,100) + label.show() + box.pack_start(label,True,True,0) + # Show and add callback function + box.show() + self.add(box) + self.connect("clicked",func,name) + self.show() \ No newline at end of file diff --git a/src/extra/guiGTK/window.py b/src/extra/guiGTK/window.py new file mode 100644 index 00000000..1de27149 --- /dev/null +++ b/src/extra/guiGTK/window.py @@ -0,0 +1,29 @@ +#! /usr/bin/python + +# To change this template, choose Tools | Templates +# and open the template in the editor. + +__author__="bjschuma" +__date__ ="$Jan 6, 2010 10:07:31 PM$" + +import gtk +from manager import manager + +def quit(a,b): + manager.run("exit") + + +class Window(gtk.Window): + def __init__(self, title, type=gtk.WINDOW_TOPLEVEL, icon=None): + gtk.Window.__init__(self,type) + self.set_title(title) + self.connect("delete_event",quit) + + if not (icon == None): + self.set_icon_from_file(icon) + + self.show() + + + #def quit(self,a,b): + # manager.run("exit") diff --git a/src/extra/sgtk.py b/src/extra/sgtk.py new file mode 100644 index 00000000..465cbdd2 --- /dev/null +++ b/src/extra/sgtk.py @@ -0,0 +1,68 @@ +# This is a simple test plugin, to make sure everything is working + +__author__="bjschuma" +__date__ ="$Jan 6, 2010 9:50:31 PM$" + + +global name, app, type, path, opt +name = "sgtk" +app = "scion" +type = "extra" +path = "" +opt = [] + +from guiGTK import * +import gtk +import gobject +gobject.threads_init() + +import settings +global running +running = False +from manager import manager + +#global thread + +# Called when the plugin needs to perform some action +def run(args=None): + running = settings.get("guirunning") + win = window.Window("Scion") + + # Start gtk main + if running == False: + manager.run("disable", ["cli"] ) + settings.set("guirunning",True) + #if settings.has("loop") == False: + gtk.main() + + +def loop(): + #write(settings.get("guirunning")) + if settings.get("guirunning") == True: + run() + gtk.main() + else: + #settings.pop("loop") + settings.pop("loop")() + + +# Called every time the plugin is enabled +def open(): + settings.init("guirunning",False) + settings.set("loop",loop) + #if settings.get("guirunning") == True: + # run() + # settings.set("loop",gtk.main) + + +# Called every time the plugin is stopped +def close(): + running = settings.get("guirunning") + if running == True: + gtk.main_quit() + + +#print loop +#settings.set("loop",loop) + +