Statistiques
| Révision :

root / ase / gui / widgets.py @ 1

Historique | Voir | Annoter | Télécharger (4,23 ko)

1 1 tkerber
import gtk
2 1 tkerber
3 1 tkerber
from ase.gui.languages import translate as _
4 1 tkerber
5 1 tkerber
6 1 tkerber
class Number(gtk.SpinButton):
7 1 tkerber
    def __init__(self, value=0,
8 1 tkerber
                 lower=0, upper=10000,
9 1 tkerber
                 step_incr=1, page_incr=10,
10 1 tkerber
                 climb_rate=0.5, digits=0):
11 1 tkerber
        self.adj = gtk.Adjustment(value, lower, upper, step_incr, page_incr, 0)
12 1 tkerber
        gtk.SpinButton.__init__(self, self.adj, climb_rate, digits)
13 1 tkerber
14 1 tkerber
    def connect(self, *args):
15 1 tkerber
        return self.adj.connect(*args)
16 1 tkerber
17 1 tkerber
18 1 tkerber
class Menu:
19 1 tkerber
    def __init__(self, menubar, name, items):
20 1 tkerber
        self.items = {}
21 1 tkerber
        menu = gtk.Menu()
22 1 tkerber
        for data in items:
23 1 tkerber
            text = data[0]
24 1 tkerber
            callback = data[1]
25 1 tkerber
            args = data[2:]
26 1 tkerber
            menuitem = gtk.MenuItem(_(text))
27 1 tkerber
            menu.append(menuitem)
28 1 tkerber
            menuitem.connect('activate', callback, *args)
29 1 tkerber
            menuitem.show()
30 1 tkerber
            self.items[text] = menuitem
31 1 tkerber
        menuitem = gtk.MenuItem(_(name))
32 1 tkerber
        menubar.append(menuitem)
33 1 tkerber
        menuitem.set_submenu(menu)
34 1 tkerber
        menuitem.show()
35 1 tkerber
36 1 tkerber
37 1 tkerber
class Help(gtk.Window):
38 1 tkerber
    def __init__(self, text):
39 1 tkerber
        gtk.Window.__init__(self)
40 1 tkerber
        vbox = gtk.VBox()
41 1 tkerber
        self.add(vbox)
42 1 tkerber
        label = pack(vbox, gtk.Label())
43 1 tkerber
        label.set_line_wrap(True)
44 1 tkerber
        text = _(text).replace('<c>', '<span foreground="blue">')
45 1 tkerber
        text = text.replace('</c>', '</span>')
46 1 tkerber
        label.set_markup(text)
47 1 tkerber
        close = pack(vbox, gtk.Button(_('Close')))
48 1 tkerber
        close.connect('clicked', lambda widget: self.destroy())
49 1 tkerber
        self.show_all()
50 1 tkerber
51 1 tkerber
def help(text):
52 1 tkerber
    button = gtk.Button(_('Help'))
53 1 tkerber
    button.connect('clicked', lambda widget, text=text: Help(text))
54 1 tkerber
    return button
55 1 tkerber
56 1 tkerber
57 1 tkerber
class Window(gtk.Window):
58 1 tkerber
    def __init__(self, gui):
59 1 tkerber
        self.gui = gui
60 1 tkerber
        gtk.Window.__init__(self)
61 1 tkerber
        self.set_title(_('Constraints'))
62 1 tkerber
        vbox = gtk.VBox()
63 1 tkerber
        b = pack(vbox, [gtk.Button(_('Constrain')),
64 1 tkerber
                        gtk.Label(_(' selected atoms'))])[0]
65 1 tkerber
        b.connect('clicked', self.selected)
66 1 tkerber
        b = pack(vbox, [gtk.Button(_('Constrain')),
67 1 tkerber
                        gtk.Label(_(' immobile atoms:'))])[0]
68 1 tkerber
        b.connect('clicked', self.immobile)
69 1 tkerber
        b = pack(vbox, gtk.Button('Clear constraint'))
70 1 tkerber
        b.connect('clicked', self.clear)
71 1 tkerber
        close = pack(vbox, gtk.Button(_('Close')))
72 1 tkerber
        close.connect('clicked', lambda widget: self.destroy())
73 1 tkerber
        self.add(vbox)
74 1 tkerber
        vbox.show()
75 1 tkerber
        self.show()
76 1 tkerber
77 1 tkerber
def pack(vbox, widgets, end=False, bottom=False):
78 1 tkerber
    if not isinstance(widgets, list):
79 1 tkerber
        widgets.show()
80 1 tkerber
        if bottom:
81 1 tkerber
            vbox.pack_end(widgets, 0, 0)
82 1 tkerber
        else:
83 1 tkerber
            vbox.pack_start(widgets, 0, 0)
84 1 tkerber
        return widgets
85 1 tkerber
    hbox = gtk.HBox(0, 0)
86 1 tkerber
    hbox.show()
87 1 tkerber
    if bottom:
88 1 tkerber
        vbox.pack_end(hbox, 0, 0)
89 1 tkerber
    else:
90 1 tkerber
        vbox.pack_start(hbox, 0, 0)
91 1 tkerber
    for widget in widgets:
92 1 tkerber
        if type(widget) is gtk.Entry:
93 1 tkerber
            widget.set_size_request(widget.get_max_length() * 9, 24)
94 1 tkerber
        widget.show()
95 1 tkerber
        if end and widget is widgets[-1]:
96 1 tkerber
            hbox.pack_end(widget, 0, 0)
97 1 tkerber
        else:
98 1 tkerber
            hbox.pack_start(widget, 0, 0)
99 1 tkerber
    return widgets
100 1 tkerber
101 1 tkerber
class cancel_apply_ok(gtk.HButtonBox):
102 1 tkerber
    "Widget with Cancel, Apply and OK buttons.  The arguments are callbacks."
103 1 tkerber
    def __init__(self, cancel, apply, ok):
104 1 tkerber
        gtk.HButtonBox.__init__(self)
105 1 tkerber
        cancel_but = gtk.Button(stock=gtk.STOCK_CANCEL)
106 1 tkerber
        cancel_but.connect('clicked', cancel)
107 1 tkerber
        apply_but = gtk.Button(stock=gtk.STOCK_APPLY)
108 1 tkerber
        apply_but.connect('clicked', apply)
109 1 tkerber
        ok_but = gtk.Button(stock=gtk.STOCK_OK)
110 1 tkerber
        ok_but.connect('clicked', ok)
111 1 tkerber
        for w in (cancel_but, apply_but, ok_but):
112 1 tkerber
            self.pack_start(w, 0, 0)
113 1 tkerber
            w.show()
114 1 tkerber
        #self.show_all()
115 1 tkerber
116 1 tkerber
def oops(message, message2=None):
117 1 tkerber
    dialog = gtk.MessageDialog(flags=gtk.DIALOG_MODAL,
118 1 tkerber
                               type=gtk.MESSAGE_WARNING,
119 1 tkerber
                               buttons=gtk.BUTTONS_CLOSE,
120 1 tkerber
                               message_format=message)
121 1 tkerber
    try:
122 1 tkerber
        dialog.format_secondary_text(message2)
123 1 tkerber
    except AttributeError:
124 1 tkerber
        print >>sys.stderr, message
125 1 tkerber
        print >>sys.stderr, message2
126 1 tkerber
    dialog.connect('response', lambda x, y, dialog=dialog: dialog.destroy())
127 1 tkerber
    dialog.show()
128 1 tkerber
129 1 tkerber
class AseGuiCancelException(Exception):
130 1 tkerber
    pass