source: lliurex-store/trunk/fuentes/lliurex-store-gui/ScreenshotViewer.py @ 3734

Last change on this file since 3734 was 3734, checked in by hectorgh, 3 years ago

wip

File size: 4.3 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3gi.require_version('WebKit', '3.0')
4
5from gi.repository import Gtk,GdkPixbuf,GLib,Gdk,WebKit
6import Screenshot
7
8
9class ScreenshotViewer(Gtk.EventBox):
10
11        def __init__(self):
12       
13                Gtk.EventBox.__init__(self)
14                self.set_valign(Gtk.Align.START)
15                self.set_halign(Gtk.Align.START)
16
17                self.html_skel='<html><body bgcolor=black><div align=center><iframe height=97% width=90% align=center src="%%URL%%" frameborder="0" allowfullscreen></iframe></div></body></html>'             
18                self.border=20
19               
20                self.revealer=Gtk.Revealer()
21                self.revealer.set_transition_type(Gtk.RevealerTransitionType.SLIDE_DOWN)
22                self.revealer.set_transition_duration(500)
23               
24
25                self.content_box=Gtk.VBox()
26                self.content_box.set_name("POPUP_SHADOW_TOPBOTTOM")
27                hbox=Gtk.HBox()
28               
29                self.image=Screenshot.ScreenshotNeo()
30                self.wv=WebKit.WebView()
31               
32                self.wv=WebKit.WebView()
33                self.w_vp=Gtk.Viewport()
34                self.w_sw=Gtk.ScrolledWindow()
35                self.w_vp.add(self.w_sw)
36                self.w_sw.add(self.wv)
37               
38                self.image.add_titled(self.w_vp,"html","Html")
39               
40               
41                hbox.pack_start(self.image,True,True,self.border)
42                self.content_box.pack_start(hbox,True,True,self.border)
43               
44                self.buttons_box=Gtk.HBox()
45                self.buttons_box.set_valign(Gtk.Align.CENTER)
46               
47               
48                for x in range(0,4):
49                        b=Gtk.Button(str(x))
50                        b.set_size_request(100,100)
51                        b.set_name("RELATED_BUTTON")
52                        self.buttons_box.pack_start(b,False,False,5)
53                       
54                self.sw=Gtk.ScrolledWindow()
55               
56                self.vp=Gtk.Viewport()
57                self.vp.set_halign(Gtk.Align.CENTER)
58                self.sw.add(self.vp)
59                self.sw.set_halign(Gtk.Align.CENTER)
60                self.sw.set_margin_bottom(30)
61                self.vp.add(self.buttons_box)
62               
63                self.content_box.pack_end(self.sw,False,False,0)
64
65                self.revealer.add(self.content_box)
66                self.revealer.show_all()
67                self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
68                self.connect("button-press-event",self.area_clicked)
69               
70                self.add(self.revealer)
71       
72        #def init
73       
74        def wait_to_reveal(self,x,y,data,url=False):
75               
76                if not self.revealer.get_child_revealed():
77                       
78                        return True
79               
80                if url==False:
81                        self.image.set_from_pixbuf(data,x,y)
82                else:
83                        self.show_url(None,data)
84                       
85        #def wait_to_reveal
86       
87        def set_screenshot(self,current_id,screenshots_box,current_id_is_url=False):
88
89               
90                self.image.spinner.start()
91                self.image.spinner.show()
92                self.image.set_visible_child_name("spinner")
93               
94               
95                for child in self.buttons_box.get_children():
96                       
97                        self.buttons_box.remove(child)
98               
99                for x in screenshots_box:
100                       
101                        tmp=x.get_children()[0]
102                        pixbuf=tmp.image.get_pixbuf()
103                        id=x.get_children()[0].image_id
104                        b=Gtk.Button()
105                        b.add(Gtk.Image.new_from_pixbuf(pixbuf))
106                        if tmp.video_url!=None:
107                                b.connect("clicked",self.show_url,tmp.video_url)
108                        else:
109                                b.connect("clicked",self.screenshot_button_clicked,id)
110                        b.set_size_request(100,100)
111                        b.set_name("RELATED_BUTTON")
112                        self.buttons_box.pack_start(b,False,False,5)
113                        self.buttons_box.show_all()
114               
115               
116                if not current_id_is_url:
117               
118                        image=Gtk.Image.new_from_file("/tmp/.lliurex-store/"+current_id)
119                       
120                        pixbuf=image.get_pixbuf()
121                        x=pixbuf.get_width()
122                        y=pixbuf.get_height()
123                       
124                        w_x,w_y=self.content_box.get_size_request()
125                        w_x-=self.border*2 
126                        w_y-=self.border*2 + 240
127                       
128                        ratio=min(w_x*1.0/x,w_y*1.0/y)
129                        pixbuf=pixbuf.scale_simple(x*ratio,y*ratio,GdkPixbuf.InterpType.BILINEAR)
130                       
131                        new_x=x*ratio
132                        new_y=y*ratio
133                       
134                        GLib.timeout_add(30,self.wait_to_reveal,new_x,new_y,pixbuf,False)
135                       
136                else:
137                       
138                        new_x=0
139                        new_y=0
140                        GLib.timeout_add(30,self.wait_to_reveal,new_x,new_y,current_id,True)
141               
142                       
143
144        #def set_screenshot
145       
146       
147       
148        def show_url(self,widget,url):
149               
150                self.wv.load_html_string(self.html_skel.replace("%%URL%%",url),"")
151                self.image.set_visible_child_name("html")
152               
153        #def show url
154               
155        def screenshot_button_clicked(self,widget,current_id):
156               
157                image=Gtk.Image.new_from_file("/tmp/.lliurex-store/"+current_id)
158               
159                pixbuf=image.get_pixbuf()
160                x=pixbuf.get_width()
161                y=pixbuf.get_height()
162               
163                w_x,w_y=self.content_box.get_size_request()
164                w_x-=self.border*2 
165                w_y-=self.border*2 + 240
166               
167                ratio=min(w_x*1.0/x,w_y*1.0/y)
168               
169                new_x=x*ratio
170                new_y=y*ratio
171               
172                pixbuf=pixbuf.scale_simple(x*ratio,y*ratio,GdkPixbuf.InterpType.BILINEAR)
173                self.image.spinner.hide()
174                self.image.set_from_pixbuf(pixbuf,new_x,new_y)
175
176        #def screenshot_button_clicked
177               
178       
179        def area_clicked(self,widget,event):
180               
181                self.revealer.set_reveal_child(False)
182
183        #def area_clicked
184
185
186#class ScreenshotViewer
Note: See TracBrowser for help on using the repository browser.