Statistiques
| Révision :

root / ase / gui / movie.py @ 1

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

1
#!/usr/bin/env python
2
import gtk
3
import gobject
4

    
5
from ase.gui.languages import translate as _
6
from ase.gui.widgets import pack
7

    
8

    
9
class Movie(gtk.Window):
10
    def __init__(self, gui):
11
        gtk.Window.__init__(self)
12
        self.set_position(gtk.WIN_POS_NONE)
13
        self.connect('destroy', self.close)
14
        #self.connect('delete_event', self.exit2)
15
        self.set_title('Movie')
16
        vbox = gtk.VBox()
17
        pack(vbox, gtk.Label(_('Image number:')))
18
        self.frame_number = gtk.Adjustment(gui.frame, 0,
19
                                           gui.images.nimages - 1,
20
                                           1.0, 5.0)
21
        self.frame_number.connect('value-changed', self.new_frame)
22

    
23
        hscale = pack(vbox, gtk.HScale(self.frame_number))
24
        hscale.set_update_policy(gtk.UPDATE_CONTINUOUS)
25
        hscale.set_digits(0)
26

    
27
        buttons = [gtk.Button(stock=gtk.STOCK_GOTO_FIRST),
28
                   gtk.Button(stock=gtk.STOCK_GO_BACK),
29
                   gtk.Button(stock=gtk.STOCK_GO_FORWARD),
30
                   gtk.Button(stock=gtk.STOCK_GOTO_LAST)]
31

    
32
        buttons[0].connect('clicked', self.click, -10000000)
33
        buttons[1].connect('clicked', self.click, -1)
34
        buttons[2].connect('clicked', self.click, 1)
35
        buttons[3].connect('clicked', self.click, 10000000)
36

    
37
        pack(vbox, buttons)
38

    
39
        play, stop = pack(vbox, [gtk.Button(_('Play')),
40
                                 gtk.Button('Stop')])
41
        play.connect('clicked', self.play)
42
        stop.connect('clicked', self.stop)
43

    
44
        self.rock = pack(vbox, gtk.CheckButton('Rock'))
45

    
46
        self.time = gtk.Adjustment(2.0, 0.5, 9.0, 0.2)
47
        hscale = pack(vbox, gtk.HScale(self.time))
48
        hscale.set_update_policy(gtk.UPDATE_DISCONTINUOUS)
49
            
50
        self.time.connect('value-changed', self.new_time)
51

    
52
        self.add(vbox)
53

    
54
        if gtk.pygtk_version < (2, 12):
55
            self.set_tip = gtk.Tooltips().set_tip
56
            self.set_tip(hscale, _('Adjust play time.'))
57
        else:
58
            hscale.set_tooltip_text(_('Adjust play time.'))
59
        vbox.show()
60
        self.show()
61
        self.gui = gui
62
        #gui.m=self
63
        self.direction = 1
64
        self.id = None
65
        gui.register_vulnerable(self)
66

    
67
    def notify_atoms_changed(self):
68
        "Called by gui object when the atoms have changed."
69
        self.destroy()
70
        
71
    def close(self, event):
72
        self.stop()
73

    
74
    def click(self, button, step):
75
        i = max(0, min(self.gui.images.nimages - 1, self.gui.frame + step))
76
        self.gui.set_frame(i)
77
        self.frame_number.value = i
78
        self.direction = cmp(step, 0)
79
        
80
    def new_frame(self, widget):
81
        self.gui.set_frame(int(self.frame_number.value))
82

    
83
    def play(self, widget=None):
84
        if self.id is not None:
85
            gobject.source_remove(self.id)
86

    
87
        t = int(1000 * self.time.value / (self.gui.images.nimages - 1))
88
        self.id = gobject.timeout_add(t, self.step)
89

    
90
    def stop(self, widget=None):
91
        if self.id is not None:
92
            gobject.source_remove(self.id)
93
            self.id = None
94

    
95
    def step(self):
96
        i = self.gui.frame
97
        nimages = self.gui.images.nimages
98
        
99
        if self.rock.get_active():
100
            if i == 0:
101
                self.direction = 1
102
            elif i == nimages - 1:
103
                self.direction = -1
104
            i += self.direction
105
        else:
106
            i = (i + self.direction + nimages) % nimages
107
            
108
        self.gui.set_frame(i)
109
        self.frame_number.value = i
110
        return True
111

    
112
    def new_time(self, widget):
113
        if self.id is not None:
114
            self.play()
115

    
116
if __name__ == '__main__':
117
    import os
118
    os.system('python gui.py')