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

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

wip

File size: 4.6 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                        image_info={}
82                        image_info["x"]=x
83                        image_info["y"]=y
84                        image_info["pixbuf"]=data
85                        image_info["aspect_ratio"]=True
86                        self.image.set_from_pixbuf(image_info)
87                else:
88                        self.show_url(None,data)
89                       
90        #def wait_to_reveal
91       
92        def set_screenshot(self,current_id,screenshots_box,current_id_is_url=False):
93
94               
95                self.image.spinner.start()
96                self.image.spinner.show()
97                self.image.set_visible_child_name("spinner")
98               
99               
100                for child in self.buttons_box.get_children():
101                       
102                        self.buttons_box.remove(child)
103               
104                for x in screenshots_box:
105                       
106                        tmp=x.get_children()[0]
107                        pixbuf=tmp.image.get_pixbuf()
108                        id=x.get_children()[0].image_info["image_id"]
109                        b=Gtk.Button()
110                        b.add(Gtk.Image.new_from_pixbuf(pixbuf))
111                        if tmp.image_info["video_url"]!=None:
112                                b.connect("clicked",self.show_url,tmp.image_info["video_url"])
113                        else:
114                                b.connect("clicked",self.screenshot_button_clicked,id)
115                        b.set_size_request(100,100)
116                        b.set_name("RELATED_BUTTON")
117                        self.buttons_box.pack_start(b,False,False,5)
118                        self.buttons_box.show_all()
119               
120               
121                if not current_id_is_url:
122               
123                        image=Gtk.Image.new_from_file("/tmp/.lliurex-store/"+current_id)
124                       
125                        pixbuf=image.get_pixbuf()
126                        x=pixbuf.get_width()
127                        y=pixbuf.get_height()
128                       
129                        w_x,w_y=self.content_box.get_size_request()
130                        w_x-=self.border*2 
131                        w_y-=self.border*2 + 240
132                       
133                        ratio=min(w_x*1.0/x,w_y*1.0/y)
134                        pixbuf=pixbuf.scale_simple(x*ratio,y*ratio,GdkPixbuf.InterpType.BILINEAR)
135                       
136                        new_x=x*ratio
137                        new_y=y*ratio
138                       
139                        GLib.timeout_add(30,self.wait_to_reveal,new_x,new_y,pixbuf,False)
140                       
141                else:
142                       
143                        new_x=0
144                        new_y=0
145                        GLib.timeout_add(30,self.wait_to_reveal,new_x,new_y,current_id,True)
146               
147                       
148
149        #def set_screenshot
150       
151       
152       
153        def show_url(self,widget,url):
154               
155                self.wv.load_html_string(self.html_skel.replace("%%URL%%",url),"")
156                self.image.set_visible_child_name("html")
157               
158        #def show url
159               
160        def screenshot_button_clicked(self,widget,current_id):
161               
162                image=Gtk.Image.new_from_file("/tmp/.lliurex-store/"+current_id)
163               
164                pixbuf=image.get_pixbuf()
165                x=pixbuf.get_width()
166                y=pixbuf.get_height()
167               
168                w_x,w_y=self.content_box.get_size_request()
169                w_x-=self.border*2 
170                w_y-=self.border*2 + 240
171               
172                ratio=min(w_x*1.0/x,w_y*1.0/y)
173               
174                new_x=x*ratio
175                new_y=y*ratio
176               
177                pixbuf=pixbuf.scale_simple(x*ratio,y*ratio,GdkPixbuf.InterpType.BILINEAR)
178                self.image.spinner.hide()
179               
180                image_info={}
181                image_info["x"]=new_x
182                image_info["y"]=new_y
183                image_info["pixbuf"]=pixbuf
184                image_info["aspect_ratio"]=True
185                self.image.set_from_pixbuf(image_info)
186               
187                self.image.set_from_pixbuf(image_info)
188
189        #def screenshot_button_clicked
190               
191       
192        def area_clicked(self,widget,event):
193               
194                self.revealer.set_reveal_child(False)
195
196        #def area_clicked
197
198
199#class ScreenshotViewer
Note: See TracBrowser for help on using the repository browser.