Statistiques
| Révision :

root / ase / gui / movie.py @ 1

Historique | Voir | Annoter | Télécharger (3,65 ko)

1 1 tkerber
#!/usr/bin/env python
2 1 tkerber
import gtk
3 1 tkerber
import gobject
4 1 tkerber
5 1 tkerber
from ase.gui.languages import translate as _
6 1 tkerber
from ase.gui.widgets import pack
7 1 tkerber
8 1 tkerber
9 1 tkerber
class Movie(gtk.Window):
10 1 tkerber
    def __init__(self, gui):
11 1 tkerber
        gtk.Window.__init__(self)
12 1 tkerber
        self.set_position(gtk.WIN_POS_NONE)
13 1 tkerber
        self.connect('destroy', self.close)
14 1 tkerber
        #self.connect('delete_event', self.exit2)
15 1 tkerber
        self.set_title('Movie')
16 1 tkerber
        vbox = gtk.VBox()
17 1 tkerber
        pack(vbox, gtk.Label(_('Image number:')))
18 1 tkerber
        self.frame_number = gtk.Adjustment(gui.frame, 0,
19 1 tkerber
                                           gui.images.nimages - 1,
20 1 tkerber
                                           1.0, 5.0)
21 1 tkerber
        self.frame_number.connect('value-changed', self.new_frame)
22 1 tkerber
23 1 tkerber
        hscale = pack(vbox, gtk.HScale(self.frame_number))
24 1 tkerber
        hscale.set_update_policy(gtk.UPDATE_CONTINUOUS)
25 1 tkerber
        hscale.set_digits(0)
26 1 tkerber
27 1 tkerber
        buttons = [gtk.Button(stock=gtk.STOCK_GOTO_FIRST),
28 1 tkerber
                   gtk.Button(stock=gtk.STOCK_GO_BACK),
29 1 tkerber
                   gtk.Button(stock=gtk.STOCK_GO_FORWARD),
30 1 tkerber
                   gtk.Button(stock=gtk.STOCK_GOTO_LAST)]
31 1 tkerber
32 1 tkerber
        buttons[0].connect('clicked', self.click, -10000000)
33 1 tkerber
        buttons[1].connect('clicked', self.click, -1)
34 1 tkerber
        buttons[2].connect('clicked', self.click, 1)
35 1 tkerber
        buttons[3].connect('clicked', self.click, 10000000)
36 1 tkerber
37 1 tkerber
        pack(vbox, buttons)
38 1 tkerber
39 1 tkerber
        play, stop = pack(vbox, [gtk.Button(_('Play')),
40 1 tkerber
                                 gtk.Button('Stop')])
41 1 tkerber
        play.connect('clicked', self.play)
42 1 tkerber
        stop.connect('clicked', self.stop)
43 1 tkerber
44 1 tkerber
        self.rock = pack(vbox, gtk.CheckButton('Rock'))
45 1 tkerber
46 1 tkerber
        self.time = gtk.Adjustment(2.0, 0.5, 9.0, 0.2)
47 1 tkerber
        hscale = pack(vbox, gtk.HScale(self.time))
48 1 tkerber
        hscale.set_update_policy(gtk.UPDATE_DISCONTINUOUS)
49 1 tkerber
50 1 tkerber
        self.time.connect('value-changed', self.new_time)
51 1 tkerber
52 1 tkerber
        self.add(vbox)
53 1 tkerber
54 1 tkerber
        if gtk.pygtk_version < (2, 12):
55 1 tkerber
            self.set_tip = gtk.Tooltips().set_tip
56 1 tkerber
            self.set_tip(hscale, _('Adjust play time.'))
57 1 tkerber
        else:
58 1 tkerber
            hscale.set_tooltip_text(_('Adjust play time.'))
59 1 tkerber
        vbox.show()
60 1 tkerber
        self.show()
61 1 tkerber
        self.gui = gui
62 1 tkerber
        #gui.m=self
63 1 tkerber
        self.direction = 1
64 1 tkerber
        self.id = None
65 1 tkerber
        gui.register_vulnerable(self)
66 1 tkerber
67 1 tkerber
    def notify_atoms_changed(self):
68 1 tkerber
        "Called by gui object when the atoms have changed."
69 1 tkerber
        self.destroy()
70 1 tkerber
71 1 tkerber
    def close(self, event):
72 1 tkerber
        self.stop()
73 1 tkerber
74 1 tkerber
    def click(self, button, step):
75 1 tkerber
        i = max(0, min(self.gui.images.nimages - 1, self.gui.frame + step))
76 1 tkerber
        self.gui.set_frame(i)
77 1 tkerber
        self.frame_number.value = i
78 1 tkerber
        self.direction = cmp(step, 0)
79 1 tkerber
80 1 tkerber
    def new_frame(self, widget):
81 1 tkerber
        self.gui.set_frame(int(self.frame_number.value))
82 1 tkerber
83 1 tkerber
    def play(self, widget=None):
84 1 tkerber
        if self.id is not None:
85 1 tkerber
            gobject.source_remove(self.id)
86 1 tkerber
87 1 tkerber
        t = int(1000 * self.time.value / (self.gui.images.nimages - 1))
88 1 tkerber
        self.id = gobject.timeout_add(t, self.step)
89 1 tkerber
90 1 tkerber
    def stop(self, widget=None):
91 1 tkerber
        if self.id is not None:
92 1 tkerber
            gobject.source_remove(self.id)
93 1 tkerber
            self.id = None
94 1 tkerber
95 1 tkerber
    def step(self):
96 1 tkerber
        i = self.gui.frame
97 1 tkerber
        nimages = self.gui.images.nimages
98 1 tkerber
99 1 tkerber
        if self.rock.get_active():
100 1 tkerber
            if i == 0:
101 1 tkerber
                self.direction = 1
102 1 tkerber
            elif i == nimages - 1:
103 1 tkerber
                self.direction = -1
104 1 tkerber
            i += self.direction
105 1 tkerber
        else:
106 1 tkerber
            i = (i + self.direction + nimages) % nimages
107 1 tkerber
108 1 tkerber
        self.gui.set_frame(i)
109 1 tkerber
        self.frame_number.value = i
110 1 tkerber
        return True
111 1 tkerber
112 1 tkerber
    def new_time(self, widget):
113 1 tkerber
        if self.id is not None:
114 1 tkerber
            self.play()
115 1 tkerber
116 1 tkerber
if __name__ == '__main__':
117 1 tkerber
    import os
118 1 tkerber
    os.system('python gui.py')