summaryrefslogtreecommitdiff
path: root/hacks/python-playback/thumbs.py
blob: 921f82f5d35745ed0a59c0328e1d2c5ad45edeec (plain)
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
# GUI to display thumbnails and allow cropping
# to be set up

import os
import sys
import pygtk
pygtk.require('2.0')
import gtk
import film
import player

class Thumbs(gtk.Dialog):
    def __init__(self, film):
        gtk.Dialog.__init__(self)
        self.film = film
        self.controls = gtk.Table()
        self.controls.set_col_spacings(4)
        self.thumb_adj = gtk.Adjustment(0, 0, self.film.thumbs() - 1, 1, 10)
        self.add_control("Thumbnail", self.thumb_adj, 0)
        self.left_crop_adj = gtk.Adjustment(self.film.left_crop, 0, 1024, 1, 128)
        self.add_control("Left crop", self.left_crop_adj, 1)
        self.right_crop_adj = gtk.Adjustment(self.film.right_crop, 0, 1024, 1, 128)
        self.add_control("Right crop", self.right_crop_adj, 2)
        self.top_crop_adj = gtk.Adjustment(self.film.top_crop, 0, 1024, 1, 128)
        self.add_control("Top crop", self.top_crop_adj, 3)
        self.bottom_crop_adj = gtk.Adjustment(self.film.bottom_crop, 0, 1024, 1, 128)
        self.add_control("Bottom crop", self.bottom_crop_adj, 4)
        self.display_image = gtk.Image()
        self.update_display()
        window_box = gtk.HBox()
        window_box.set_spacing(12)

        controls_vbox = gtk.VBox()
        controls_vbox.set_spacing(4)
        controls_vbox.pack_start(self.controls, False, False)
        
        window_box.pack_start(controls_vbox, True, True)
        window_box.pack_start(self.display_image)
        
        self.set_title("%s Thumbnails" % film.name)
        self.get_content_area().add(window_box)
        self.add_button("Close", gtk.RESPONSE_ACCEPT)
        self.show_all()

        for a in [self.thumb_adj, self.left_crop_adj, self.right_crop_adj, self.top_crop_adj, self.bottom_crop_adj]:
            a.connect('value-changed', self.update_display, self)

    def add_control(self, name, adj, n):
        l = gtk.Label(name)
        l.set_alignment(1, 0.5)
        self.controls.attach(l, 0, 1, n, n + 1)
        s = gtk.SpinButton(adj)
        self.controls.attach(s, 1, 2, n, n + 1)

    def update_display(self, a = None, b = None):
        thumb_pixbuf = gtk.gdk.pixbuf_new_from_file(self.film.thumb(self.thumb_adj.get_value()))
        self.width = thumb_pixbuf.get_width()
        self.height = thumb_pixbuf.get_height()
        left = self.left_crop()
        right = self.right_crop()
        top = self.top_crop()
        bottom = self.bottom_crop()
        pixbuf = thumb_pixbuf.subpixbuf(left, top, self.width - left - right, self.height - top - bottom)
        self.display_image.set_from_pixbuf(pixbuf)

    def top_crop(self):
        return int(self.top_crop_adj.get_value())

    def bottom_crop(self):
        return int(self.bottom_crop_adj.get_value())

    def left_crop(self):
        return int(self.left_crop_adj.get_value())
    
    def right_crop(self):
        return int(self.right_crop_adj.get_value())