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

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

wip

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