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

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

wip

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