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

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

wip

File size: 10.3 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3
4from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio
5import Screenshot
6import ImageManager
7
8import Core
9
10import signal
11signal.signal(signal.SIGINT, signal.SIG_DFL)
12
13import gettext
14
15_=gettext.gettext
16
17class DetailsBox(Gtk.VBox):
18
19        def __init__(self):
20               
21                Gtk.VBox.__init__(self)
22               
23                self.core=Core.Core.get_core()
24               
25                self.banner_full_size=250
26                self.screenshot_small=100
27                self.banner_small=150
28                self.icon_size=64
29               
30                self.full_info_box=Gtk.HBox()
31                self.pack_start(self.full_info_box,True,True,5)
32               
33                # ####### LEFT SIDE ######
34               
35                self.app_details=Gtk.VBox()
36                self.app_details.set_margin_left(10)
37                self.app_details.set_margin_bottom(10)
38                self.app_details.set_margin_top(5)
39                self.full_info_box.pack_start(self.app_details,False,False,0)
40
41                self.app_banner=Screenshot.ScreenshotNeo()
42                self.app_banner.set_size_request(self.banner_full_size,self.banner_full_size)
43
44                self.app_details.pack_start(self.app_banner,False,False,0)
45                self.install_button=Gtk.Button("Install/Installed")
46                self.app_details.pack_start(self.install_button,False,False,10)
47               
48                self.details_label=Gtk.Label("Details")
49                self.details_label.set_alignment(0,0.5)
50                self.details_label.set_margin_left(0)
51                self.app_details.pack_start(self.details_label,False,False,0)
52               
53                self.details_divider=Gtk.HBox()
54                self.details_divider.set_size_request(0,1)
55                self.app_details.pack_start(self.details_divider,False,False,5)
56               
57                self.version_label=Gtk.Label(_("Version"))
58                self.version_label.set_alignment(0,0.5)
59                self.category_label=Gtk.Label(_("Category"))
60                self.category_label.set_alignment(0,0.5)
61                self.license_label=Gtk.Label(_("License"))
62                self.license_label.set_alignment(0,0.5)
63                self.size_label=Gtk.Label(_("Size"))
64                self.size_label.set_alignment(0,0.5)
65                self.website_label=Gtk.Label(_("Website"))
66                self.website_label.set_alignment(0,0.5)
67               
68
69                self.version_value_label=Gtk.Label()
70                self.version_value_label.set_alignment(1,0.5)
71                self.category_value_label=Gtk.Label()
72                self.category_value_label.set_alignment(1,0.5)
73                self.license_value_label=Gtk.Label()
74                self.license_value_label.set_alignment(1,0.5)
75                self.size_value_label=Gtk.Label()
76                self.size_value_label.set_alignment(1,0.5)
77                self.website_value_label=Gtk.Label()
78                self.website_value_label.set_alignment(1,0.5)
79               
80               
81                hbox=Gtk.HBox()
82                hbox.pack_start(self.version_label,False,False,0)
83                hbox.pack_end(self.version_value_label,False,False,0)
84                self.app_details.pack_start(hbox,False,False,0)
85                hbox=Gtk.HBox()
86                hbox.pack_start(self.category_label,False,False,0)
87                hbox.pack_end(self.category_value_label,False,False,0)
88                self.app_details.pack_start(hbox,False,False,0)
89                hbox=Gtk.HBox()
90                hbox.pack_start(self.license_label,False,False,0)
91                hbox.pack_end(self.license_value_label,False,False,0)
92                self.app_details.pack_start(hbox,False,False,0)
93                hbox=Gtk.HBox()
94                hbox.pack_start(self.size_label,False,False,0)
95                hbox.pack_end(self.size_value_label,False,False,0)
96                self.app_details.pack_start(hbox,False,False,0)
97                hbox=Gtk.HBox()
98                hbox.pack_start(self.website_label,False,False,0)
99                hbox.pack_end(self.website_value_label,False,False,0)
100                self.app_details.pack_start(hbox,False,False,0)
101               
102               
103                # ############# #
104               
105                # ####### RIGHT SIDE ######
106               
107                self.app_details_r=Gtk.VBox()
108                self.app_details_r.set_margin_top(5)
109                self.full_info_box.pack_start(self.app_details_r,True,True,20)
110               
111                hbox=Gtk.HBox()
112                self.app_icon=Screenshot.ScreenshotNeo()
113                self.app_icon.set_size_request(64,64)
114               
115                hbox.pack_start(self.app_icon,False,False,0)
116               
117                self.app_name_label=Gtk.Label("")
118                self.app_name_label.set_alignment(0,1)
119                self.short_description_label=Gtk.Label("")
120                self.short_description_label.set_alignment(0,0)
121               
122                vbox=Gtk.VBox()
123                vbox.pack_start(self.app_name_label,True,True,0)
124                vbox.pack_start(self.short_description_label,True,True,0)
125                hbox.pack_start(vbox,True,True,5)
126               
127                self.app_details_r.pack_start(hbox,False,False,0)
128               
129                self.full_description_label=Gtk.Label()
130                self.full_description_label.set_margin_right(10)
131                self.full_description_label.set_alignment(0,1)
132                self.full_description_label.set_justify(Gtk.Justification.FILL)
133                self.full_description_label.set_line_wrap(True)
134               
135               
136                sw=Gtk.ScrolledWindow()
137                sw.set_shadow_type(Gtk.ShadowType.NONE)
138                sw.set_overlay_scrolling(True)
139                sw.set_kinetic_scrolling(True)
140                vp=Gtk.Viewport()
141                sw.add(vp)
142                vp.add(self.full_description_label)
143               
144                self.app_details_r.pack_start(sw,True,True,10)
145               
146               
147                self.description_divider=Gtk.HBox()
148                self.description_divider.set_size_request(0,1)
149                self.app_details_r.pack_start(self.description_divider,False,False,5)
150               
151                ss_sw=Gtk.ScrolledWindow()
152                ss_sw.set_shadow_type(Gtk.ShadowType.NONE)
153                ss_vp=Gtk.Viewport()
154               
155                ss_sw.add(ss_vp)
156               
157                self.screenshots_box=Gtk.HBox()
158               
159                ss_sw.set_size_request(0,130)
160                vbox=Gtk.VBox()
161                vbox.pack_start(self.screenshots_box,True,False,0)
162                ss_vp.add(vbox)
163                self.app_details_r.pack_start(ss_sw,False,False,5)
164               
165               
166               
167                # ####################### #
168               
169                # ## RELATED #######
170               
171                related_vbox=Gtk.VBox()
172                related_vbox.set_margin_left(10)
173               
174                self.related_label=Gtk.Label(_("Related"))
175                self.related_label.set_alignment(0,1)
176               
177                related_vbox.pack_start(self.related_label,False,False,0)
178                               
179                self.related_divider=Gtk.HBox()
180                self.related_divider.set_size_request(0,1)
181                self.related_divider.set_margin_right(20)
182                related_vbox.pack_start(self.related_divider,False,False,5)
183               
184                related_sw=Gtk.ScrolledWindow()
185                related_sw.set_shadow_type(Gtk.ShadowType.NONE)
186                related_sw.set_size_request(0,self.banner_small+40)
187                related_sw.set_margin_right(20)
188                related_vp=Gtk.Viewport()
189                related_sw.add(related_vp)
190               
191                self.related_box=Gtk.HBox()
192                self.related_box.set_margin_bottom(10)
193               
194                related_vp.add(self.related_box)
195               
196                related_vbox.pack_start(related_sw,False,False,5)
197                self.pack_start(related_vbox,True,True,0)
198               
199                # #################
200
201                self.set_css_info()
202               
203        #def
204       
205        def set_package_info(self,pkg):
206               
207                info={}
208                info["image_url"]=pkg.banner_url
209                info["image_id"]=pkg.banner_id
210                info["x"]=self.banner_full_size
211                info["y"]=self.banner_full_size
212                info["aspect_ratio"]=False
213                info["pkg_name"]=pkg.name
214               
215               
216                if pkg.banner_url !=None:
217                        #self.app_banner.download_image(pkg.banner_url,pkg.banner_id,self.banner_full_size,self.banner_full_size,False)
218                        self.app_banner.download_image(info)
219                else:
220                        info["image_url"]=pkg.icon_url
221                        self.app_banner.download_image(info)
222                        #self.app_banner.create_banner_from_url(pkg.icon_url,pkg.banner_id,self.banner_full_size,self.banner_full_size,pkg.name)
223               
224                self.version_value_label.set_text(pkg.version)
225                self.category_value_label.set_text(pkg.category)
226                self.license_value_label.set_text(pkg.license)
227                self.size_value_label.set_text(pkg.size)
228                self.website_value_label.set_markup("<a href=\"%s\">%s</a>"%(pkg.website,pkg.website))
229                self.app_name_label.set_text(pkg.name)
230                self.short_description_label.set_text(pkg.short_description)
231                self.full_description_label.set_text(pkg.full_description)
232                self.core.main_window.location_label.set_text(pkg.section)
233               
234                info["image_url"]=pkg.icon_url
235                info["image_id"]=pkg.icon_id
236                info["x"]=self.icon_size
237                info["y"]=self.icon_size
238               
239                self.app_icon.download_image(info)
240               
241               
242                for s in self.screenshots_box.get_children():
243                        self.screenshots_box.remove(s)
244               
245                for v in pkg.videos:
246                       
247                        image=Screenshot.ScreenshotNeo()
248                        info["video_url"]=v.video_url
249                        info["image_url"]=v.video_preview_image
250                        info["image_id"]=v.video_id
251                        info["x"]=self.screenshot_small
252                        info["y"]=self.screenshot_small
253                       
254                        image.set_video_info(info)
255                       
256                        b=Gtk.Button()
257                        b.set_name("RELATED_BUTTON")
258                        b.add(image)
259                        self.screenshots_box.pack_start(b,False,False,5)
260                       
261                for s in pkg.screenshots:
262                       
263                        image=Screenshot.ScreenshotNeo()
264                       
265                        info["image_url"]=s.screenshot_url
266                        info["image_id"]=s.screenshot_id
267                        info["x"]=self.screenshot_small
268                        info["y"]=self.screenshot_small
269                        info["aspect_ratio"]=False
270                                               
271                        image.download_image(info)
272                        b=Gtk.Button()
273                        b.set_name("RELATED_BUTTON")
274                        b.add(image)
275                        self.screenshots_box.pack_start(b,False,False,5)
276               
277                self.screenshots_box.show_all()
278                       
279                       
280                for p in self.related_box.get_children():
281                        self.related_box.remove(p)
282                       
283                for p in pkg.related_packages:
284                       
285                        image=Screenshot.ScreenshotNeo()
286                       
287                        info["image_url"]=p.banner_url
288                        info["image_id"]=p.banner_id
289                        info["x"]=self.banner_small
290                        info["y"]=self.banner_small
291                        info["pkg_name"]=p.name
292                        info["custom_frame"]=False
293                       
294                       
295                        if p.banner_url !=None:
296                                image.download_image(info)
297                        else:
298                                info["image_url"]=p.icon_url
299                                info["custom_frame"]=True
300                                image.create_banner_from_url(info)
301                       
302                        b=Gtk.Button()
303                        b.add(image)
304                        b.set_size_request(self.banner_small,self.banner_small)
305                        b.set_margin_top(10)
306                        b.connect("clicked",self.related_app_clicked,None)
307                        b.set_name("RELATED_BUTTON")
308                        b.set_valign(Gtk.Align.CENTER)
309                       
310                        self.related_box.pack_start(b,False,False,5)
311                       
312                self.related_box.show_all()
313               
314                for x in self.screenshots_box.get_children():
315                        x.connect("clicked",self.core.main_window.screenshot_clicked)
316               
317               
318        #def set_values
319       
320       
321        def set_css_info(self):
322               
323                self.style_provider=Gtk.CssProvider()
324                f=Gio.File.new_for_path("lliurex-store.css")
325                self.style_provider.load_from_file(f)
326                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
327               
328                self.set_name("DETAILS_BOX")
329               
330                self.details_divider.set_name("DIVIDER")
331                self.description_divider.set_name("DIVIDER")
332                self.related_divider.set_name("DIVIDER")
333               
334                self.details_label.set_name("DETAILS_LABEL")
335                self.version_label.set_name("DETAILS_OPTIONS")
336                self.category_label.set_name("DETAILS_OPTIONS")
337                self.license_label.set_name("DETAILS_OPTIONS")
338                self.size_label.set_name("DETAILS_OPTIONS")
339                self.website_label.set_name("DETAILS_OPTIONS")
340               
341                self.version_value_label.set_name("DETAILS_VALUES")
342                self.category_value_label.set_name("DETAILS_VALUES")
343                self.license_value_label.set_name("DETAILS_VALUES")
344                self.size_value_label.set_name("DETAILS_VALUES")
345                self.website_value_label.set_name("DETAILS_VALUES")
346               
347                self.app_name_label.set_name("TITLE")
348                self.short_description_label.set_name("SHORT_DESCRIPTION")
349                self.full_description_label.set_name("FULL_DESCRIPTION")
350               
351                self.related_label.set_name("RELATED_LABEL")
352               
353                self.install_button.set_name("INSTALL_BUTTON")
354               
355        #def set-css_info
356       
357        def related_app_clicked(self,widget,app):
358               
359                print "app clicked"
360               
361        #def related_app_clicked
362       
363
Note: See TracBrowser for help on using the repository browser.