File: start.py

package info (click to toggle)
glitch 0.6-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 488 kB
  • ctags: 649
  • sloc: python: 3,432; makefile: 2
file content (127 lines) | stat: -rw-r--r-- 3,945 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import os, gtk, gtksourceview2
import glitch
from glitch import *

_default="""import glitch, glitch.gtk
from glitch.limbo.objects import Square
cam=glitch.gtk.GtkCamera(children=[
        Square()])

cam.run()
"""

class Start(gtk.Window):
    def __init__(self, *args, **kwargs):
        gtk.Window.__init__(self)
        self.set_title("The Dagger")

        self.glue = gtk.VBox()
        self.add(self.glue)

        self.srcview = self._srcview()
        sw = gtk.ScrolledWindow()
        sw.add(self.srcview)

        toolbar=self._toolbar()

        self.nodes=self._nodes()

        hp= gtk.HPaned()
        hp.add1(self.nodes)
        hp.add2(sw)

        self.glue.pack_start(toolbar, False)
        self.glue.pack_start(hp)

    def do_run(self, *args):
        src= self.srcview.get_buffer().get_text(*self.srcview.get_buffer().get_bounds())
        exec(src, {})

    def do_open(self, *args):
        f=gtk.FileChooserDialog(action=gtk.FILE_CHOOSER_ACTION_OPEN,buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
        response = f.run()
        if response == gtk.RESPONSE_OK:
            self.outfile=f.get_filename()
            self.srcview.get_buffer().set_text(open(self.outfile).read())
        f.destroy()

    def do_save(self, *args):
        if not hasattr(self, "outfile"):
            f=gtk.FileChooserDialog(action=gtk.FILE_CHOOSER_ACTION_SAVE,buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
            response = f.run()
            if response == gtk.RESPONSE_OK:
                self.outfile=f.get_filename()
                self.do_save()
            f.destroy()
        else:
            src= self.srcview.get_buffer().get_text(*self.srcview.get_buffer().get_bounds())
            open(self.outfile, 'w').write(src)

    def _srcview(self):
        mgr = gtksourceview2.LanguageManager()
        python = mgr.get_language('python')
        buffer = gtksourceview2.Buffer()
        buffer.set_language(python)
        buffer.set_text(_default)
        return gtksourceview2.View(buffer)

    def _nodes(self):
        vp = gtk.VPaned()

        ls = gtk.ListStore(str)
        for node in dir(glitch):
            if isinstance(getattr(glitch, node), type):
                ls.append([node])

        tv = gtk.TreeView(ls)
        renderer = gtk.CellRendererText()
        col= gtk.TreeViewColumn("Nodes", renderer)
        col.add_attribute(renderer, "text", 0)

        mgr = gtksourceview2.LanguageManager()
        python = mgr.get_language('python')
        docbuffer=gtksourceview2.Buffer()
        docbuffer.set_language(python)
        docs=gtksourceview2.View(docbuffer)

        def on_change(tv):
            (model, iter)=tv.get_selection().get_selected()
            sel= model.get_value(iter, 0)
            cls=eval(sel, globals())
            mod=eval(cls.__module__, globals())
            f=mod.__file__.replace('pyc', 'py')
            docbuffer.set_text(open(f).read())

        tv.connect('cursor-changed', on_change)

        tv.append_column(col)

        sc_tv=gtk.ScrolledWindow()
        sc_tv.set_size_request(200,400)
        sc_tv.add(tv)

        sc_docs=gtk.ScrolledWindow()
        sc_docs.add(docs)

        vp.add1(sc_tv)
        vp.add2(sc_docs)
        return vp

    def _toolbar(self):
        toolbar = gtk.Toolbar()
        items = [("execute", gtk.STOCK_EXECUTE, self.do_run),
                 ("save", gtk.STOCK_SAVE, self.do_save),
                 ("open", gtk.STOCK_OPEN, self.do_open),
                 ("close", gtk.STOCK_CLOSE, lambda w: gtk.main_quit())]
        for (label, icon, fn) in items:
            b = gtk.ToolButton(icon)
            b.set_label(label)
            toolbar.insert(b, 0)
            b.connect("clicked", fn)
        return toolbar

if __name__=='__main__':
    s = Start()
    s.show_all()
    s.connect('destroy', lambda w: gtk.main_quit()) # todo: save?
    gtk.main()