root / ase / gui / widgets.py @ 11
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
|