From 5278c9a6305269f9778e53b610dce84e173d58d2 Mon Sep 17 00:00:00 2001 From: bjschuma Date: Sat, 9 Jan 2010 14:18:53 -0500 Subject: [PATCH] Move ncurses initialization --- src/core/cli.py | 45 +++------------------------------ src/core/cline/loop.py | 49 +++++++++++++++++++++++++++++++++--- src/extra/guiGTK/__init__.py | 2 +- src/extra/guiGTK/box.py | 23 +++++++++++++++++ src/extra/guiGTK/window.py | 8 +++++- src/extra/sgtk.py | 36 +++++++++++++++++++------- 6 files changed, 106 insertions(+), 57 deletions(-) create mode 100644 src/extra/guiGTK/box.py diff --git a/src/core/cli.py b/src/core/cli.py index 00e57d1c..966d79ce 100644 --- a/src/core/cli.py +++ b/src/core/cli.py @@ -10,68 +10,29 @@ app = "scion" type = "core" path = "" opt = [] -import curses -from bt.message import * -#from bt.needle import Needle -import bt.needle +from bt.message import * import cline.loop import cline.message import settings -global maxyx, stdscr, thread # Called every time the plugin is enabled def open(): write("Starting CLI", True) - global maxyx, stdscr, thread - # Initialize ncurses screen - stdscr = curses.initscr() - maxyx = stdscr.getmaxyx() - curses.cbreak() - curses.noecho() - stdscr.keypad(1) - - # Set these values in settings class for use elsewhere - settings.set("stdscr", stdscr) - settings.set("maxyx", maxyx) - settings.set("prompt", ">>> ") - settings.set("clinex", 0) - settings.set("cliney", 0) - - # Start loop in new thread + # Tell settings to run this loop settings.set("loop",cline.loop.loop) - #thread = bt.needle.Needle(cline.loop.loop) - #thread.start() - settings.set("write", cline.message.insert) # Called every time the plugin is stopped def close(): - global stdscr, thread - - settings.pop("write") - - # Stop looping + # Stop loop cline.loop.quit() settings.pop("loop") - - # Undo ncurses initialization - curses.nocbreak() - curses.echo() - stdscr.keypad(0) - curses.endwin() - #thread.join() write("CLI has been stopped", True) - # Delete keys that settings no longer needs - settings.delete("stdscr") - settings.delete("maxyx") - settings.delete("prompt") - settings.delete("clinex") - settings.delete("cliney") # Called when the plugin needs to perform some action diff --git a/src/core/cline/loop.py b/src/core/cline/loop.py index 7d6538fb..f6d9c31e 100644 --- a/src/core/cline/loop.py +++ b/src/core/cline/loop.py @@ -15,16 +15,60 @@ import settings from addch import addch from message import * - global halt halt = False + +def init(): + # Initialize ncurses screen + stdscr = curses.initscr() + maxyx = stdscr.getmaxyx() + curses.cbreak() + curses.noecho() + stdscr.keypad(1) + + # Set these values in settings class for use elsewhere + settings.set("stdscr", stdscr) + settings.set("maxyx", maxyx) + settings.set("prompt", ">>> ") + settings.set("clinex", 0) + settings.set("cliney", 0) + settings.set("write", insert) + + + +def quit(): + # Halt our loop + global halt + halt = True + + # Undo ncurses initialization + curses.nocbreak() + curses.echo() + settings.get("stdscr").keypad(0) + #stdscr.keypad(0) + curses.endwin() + + # Delete keys that settings no longer needs + settings.delete("stdscr") + settings.delete("maxyx") + settings.delete("prompt") + settings.delete("clinex") + settings.delete("cliney") + + # Return to previous write function + settings.pop("write") + + + # Loop around until the plugin manager calls shutdown def loop(): write("Beginning command line loop",True) global halt + init() + stdscr = settings.get("stdscr") input = settings.get("prompt") (y, x) = settings.get("stdscr").getyx() @@ -35,6 +79,3 @@ def loop(): disp(input) -def quit(): - global halt - halt = True \ No newline at end of file diff --git a/src/extra/guiGTK/__init__.py b/src/extra/guiGTK/__init__.py index 771b9259..951c0e3a 100644 --- a/src/extra/guiGTK/__init__.py +++ b/src/extra/guiGTK/__init__.py @@ -2,4 +2,4 @@ __author__="bjschuma" __date__ ="$Jan 6, 2010 9:52:21 PM$" -__all__ = ["button","window"] \ No newline at end of file +__all__ = ["box", "button", "window"] \ No newline at end of file diff --git a/src/extra/guiGTK/box.py b/src/extra/guiGTK/box.py new file mode 100644 index 00000000..11727f11 --- /dev/null +++ b/src/extra/guiGTK/box.py @@ -0,0 +1,23 @@ +#! /usr/bin/python + +# To change this template, choose Tools | Templates +# and open the template in the editor. + +__author__="bjschuma" +__date__ ="$Jan 8, 2010 12:17:55 AM$" + +import gtk +from manager import manager + +class HBox(gtk.HBox): + def __init__(self, name, homogeneous=False, spacing=0): + gtk.HBox.__init__(homogeneous, spacing) + manager.run("sgtk", (name,self)) + self.show() + + +class VBox(gtk.VBox): + def __init__(self, name, homogeneous=False, spacing=0): + gtk.VBox.__init__(homogeneous, spacing) + manager.run("sgtk", (name,self)) + self.show() \ No newline at end of file diff --git a/src/extra/guiGTK/window.py b/src/extra/guiGTK/window.py index 1de27149..c9be4b77 100644 --- a/src/extra/guiGTK/window.py +++ b/src/extra/guiGTK/window.py @@ -8,16 +8,19 @@ __date__ ="$Jan 6, 2010 10:07:31 PM$" import gtk from manager import manager +import settings + def quit(a,b): manager.run("exit") class Window(gtk.Window): - def __init__(self, title, type=gtk.WINDOW_TOPLEVEL, icon=None): + def __init__(self, title, name, type=gtk.WINDOW_TOPLEVEL, icon=None): gtk.Window.__init__(self,type) self.set_title(title) self.connect("delete_event",quit) + manager.run("sgtk", (name,self)) if not (icon == None): self.set_icon_from_file(icon) @@ -25,5 +28,8 @@ class Window(gtk.Window): self.show() + def quit(self,func): + self.connect("delete_event",func) + #def quit(self,a,b): # manager.run("exit") diff --git a/src/extra/sgtk.py b/src/extra/sgtk.py index 465cbdd2..a274be98 100644 --- a/src/extra/sgtk.py +++ b/src/extra/sgtk.py @@ -21,19 +21,35 @@ global running running = False from manager import manager -#global thread + +def register(name, object): + gui = settings.get("gui") + gui[name] = object + # Called when the plugin needs to perform some action def run(args=None): - running = settings.get("guirunning") - win = window.Window("Scion") + if args == None: + running = settings.get("guirunning") - # Start gtk main - if running == False: - manager.run("disable", ["cli"] ) - settings.set("guirunning",True) - #if settings.has("loop") == False: - gtk.main() + # Main window + win = window.Window("Scion", "gui") + + # Horizontal box + box = HBox("MainBox") + win.add(box) + + + + # Start gtk main + if running == False: + manager.run("disable", ["cli"] ) + settings.set("guirunning",True) + #if settings.has("loop") == False: + gtk.main() + else: + if len(args) == 2: + register(args[0],args[1]) def loop(): @@ -50,6 +66,7 @@ def loop(): def open(): settings.init("guirunning",False) settings.set("loop",loop) + settings.init("gui",dict()) #if settings.get("guirunning") == True: # run() # settings.set("loop",gtk.main) @@ -60,6 +77,7 @@ def close(): running = settings.get("guirunning") if running == True: gtk.main_quit() + settings.delete("gui") #print loop