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

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

wip

File size: 7.6 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3
4from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib
5
6import signal
7signal.signal(signal.SIGINT, signal.SIG_DFL)
8
9import gettext
10import urllib2
11import json
12import random
13
14import Core
15import Screenshot
16import ImageManager
17
18_=gettext.gettext
19
20RSRC_DIR="./"
21
22HOME_CONTENT_URL="http://lliurex.net/xenial/store/home_content.json"
23HOME_CONTENT_URL="file:///srv/svn/xenial/lliurex-store/trunk/fuentes/lliurex-store-gui/home_content.json"
24TMP_STORE_DIR="/tmp/.lliurex-store/"
25
26class MainMenu(Gtk.VBox):
27       
28        def __init__(self):
29               
30                Gtk.VBox.__init__(self)
31               
32                self.paused=False
33                self.max_image_id=5
34               
35                self.banner_large_x=735
36                self.banner_large_y=180
37                self.banner_small=134
38               
39                self.core=Core.Core.get_core()
40               
41                ui_path=self.core.ui_path
42               
43                builder=Gtk.Builder()
44                builder.add_from_file(ui_path)
45               
46               
47                self.main_view_box=builder.get_object("main_view_box")
48                self.divider1=builder.get_object("mv_divider1")
49                self.divider2=builder.get_object("mv_divider2")
50                self.divider3=builder.get_object("mv_divider3")
51                self.featured_label=builder.get_object("featured_label")
52                self.categories_label=builder.get_object("categories_label")
53                self.featured_extra_box=builder.get_object("featured_extra_box")
54                self.rewind_button=builder.get_object("media_rewind_button")
55                self.play_button=builder.get_object("media_play_button")
56                self.forward_button=builder.get_object("media_forward_button")
57                self.media_play_image=builder.get_object("media_play_image")
58                self.categories_grid=builder.get_object("categories_grid")
59
60                self.image_stack=Gtk.Stack()
61                self.image_stack.set_transition_duration(800)
62                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
63                self.image_stack.set_margin_right(10)
64                self.image_stack.set_margin_left(10)
65                self.image_stack.set_size_request(self.banner_large_x,self.banner_large_y)
66               
67                self.main_view_box.pack_start(self.image_stack,False,False,10)
68                self.main_view_box.reorder_child(self.image_stack,2)
69               
70                '''
71                self.categories_flowbox = Gtk.FlowBox()
72                self.categories_flowbox.set_max_children_per_line(30)
73                self.categories_flowbox.set_column_spacing(1)
74                self.categories_flowbox.set_row_spacing(1)
75               
76                self.main_view_box.pack_start(self.categories_flowbox,False,False,10)
77                '''
78               
79                self.pack_start(self.main_view_box,True,True,0)
80               
81                self.rewind_button.connect("clicked",self.rewind_clicked)
82                self.play_button.connect("clicked",self.play_clicked)
83                self.forward_button.connect("clicked",self.forward_clicked)
84               
85                self.build_categories()
86                self.set_css_names()
87               
88                GLib.timeout_add(3000,self.next_image)
89               
90        #def __init__
91       
92        def download_home_info(self):
93               
94                #HOME_CONTENT_URL
95               
96                header = {
97                                        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'
98                                }
99                       
100                try:
101                       
102                        self.core.dprint("Downloading home_content.json...")
103                       
104                        req=urllib2.Request(HOME_CONTENT_URL,headers=header)
105                        res=urllib2.urlopen(req)
106                        f=open(TMP_STORE_DIR+"home_content.json","w")
107                        f.write(res.read())
108                        f.close()
109                       
110                        f=open(TMP_STORE_DIR+"home_content.json")
111                        self.home_info=json.load(f)
112                        f.close()
113
114                except Exception as e:
115                       
116                        print e
117               
118               
119        #def download_home_info
120       
121        def build_banners(self):
122
123                # Main banners
124               
125                spacing=5
126                count=1
127               
128                for pkg in self.home_info["large"]:
129                        s=Screenshot.ScreenshotNeo()
130                        info={}
131                        info["image_url"]=pkg["banner_url"]
132                        info["image_id"]=pkg["debian_name"]+"_banner_large"
133                        info["x"]=self.banner_large_x
134                        info["y"]=self.banner_large_y
135                        info["aspect_ratio"]=True
136                        info["pkg_name"]=pkg["name"]
137                        s.download_image(info)
138                        s.set_size_request(self.banner_large_x,self.banner_large_y)
139                        b=Gtk.Button()
140                        b.set_name("RELATED_BUTTON")
141                        b.add(s)
142                        b.show_all()
143                        b.set_size_request(self.banner_large_x,self.banner_large_y)
144                        b.connect("clicked",self.banner_clicked,pkg["debian_name"])
145                        self.image_stack.add_titled(b,"image%s"%count,"Image %s"%count)
146                        count+=1
147
148               
149                # Smaller banners
150               
151               
152                banner_range=range(0,len(self.home_info["small"]))
153                sample=random.sample(banner_range,5)
154               
155                for b_id in banner_range:
156                       
157                        pkg=self.home_info["small"][b_id]
158                        s=Screenshot.ScreenshotNeo()
159                        info={}
160                        if pkg["banner_url"]!=None:
161                                info["image_url"]=pkg["banner_url"]
162                        else:
163                                info["image_url"]=pkg["icon_url"]
164                                info["custom_frame"]=True
165                        info["image_id"]=pkg["debian_name"]+"_banner_small"
166                        info["x"]=self.banner_small
167                        info["y"]=self.banner_small
168                        info["aspect_ratio"]=False
169                        info["pkg_name"]=pkg["name"]
170                       
171                        s.download_image(info)
172                        b=Gtk.Button()
173                        b.set_name("RELATED_BUTTON")
174                        b.add(s)
175                        b.connect("clicked",self.banner_clicked,pkg["debian_name"])
176                        self.featured_extra_box.pack_start(b,True,False,spacing)
177                               
178               
179               
180                self.show_all()
181               
182               
183        #def build_related
184       
185        def build_categories(self):
186               
187                max_width=7
188                w_counter=0
189                h_counter=0
190               
191                button_size=97
192               
193                img_list=[("Audio","audio.svg"),("Development","development.svg"),("Education","education.svg"),("Games","games.svg"),("Graphics","graphics.svg"),("Internet","internet.svg"),("Office","office.svg"),("Science","science.svg"),("System","system.svg"),("Utilities","utilities.svg"),("Video","video.svg")]
194               
195               
196                for x in img_list:
197                       
198                        label,icon_name=x
199                        b=Gtk.Button()
200                        b.set_name("RELATED_BUTTON")
201                        hbox=Gtk.HBox()
202                        hbox.set_halign(Gtk.Align.START)
203                        img_path="/home/cless/Desktop/icons/clean_icons/%s"%icon_name
204                       
205                        s=Screenshot.ScreenshotNeo()
206                        i={}
207                        i["image_path"]=img_path
208                        i["x"]=button_size
209                        i["y"]=button_size
210                        i["custom_frame"]=True
211                        i["pkg_name"]=label
212                       
213                        s.create_banner_from_file(i)
214                        b.add(s)
215                        b.connect("clicked",self.category_clicked,label)
216                       
217                       
218                        #self.categories_flowbox.add(b)
219                       
220                        self.categories_grid.attach(b,w_counter,h_counter,1,1)
221                        w_counter+=1
222                        if w_counter ==max_width:
223                                w_counter=0
224                                h_counter+=1
225               
226                       
227                self.categories_grid.show_all()
228               
229        #def build_categories
230       
231       
232        def set_css_names(self):
233               
234                self.main_view_box.set_name("DETAILS_BOX")
235                self.divider1.set_name("DIVIDER")
236                self.divider2.set_name("DIVIDER")
237                self.divider3.set_name("DIVIDER")
238                self.featured_label.set_name("RELATED_LABEL")
239                self.categories_label.set_name("RELATED_LABEL")
240                self.rewind_button.set_name("MEDIA_BUTTON")
241                self.play_button.set_name("MEDIA_BUTTON")
242                self.forward_button.set_name("MEDIA_BUTTON")
243               
244               
245        #def set_css_info
246       
247       
248        def banner_clicked(self,widget,pkg_id):
249               
250                self.core.main_window.load_pkg_data(pkg_id)
251               
252               
253        #def banner_clicked
254       
255        def category_clicked(self,widget,category):
256               
257                print category
258               
259        #def category_clicked
260       
261       
262        def next_image(self,force=False,add=True):
263               
264                tmp=self.image_stack.get_visible_child_name()
265                if tmp!=None:
266                        id=int(tmp.split("image")[1])
267                       
268                        if add:
269                       
270                                if id < self.max_image_id:
271                                        id+=1
272                                else:
273                                        id=1
274                        else:
275                               
276                                if id <= 1:
277                                        id=self.max_image_id
278                                else:
279                                        id-=1
280                       
281                        id="image%s"%id
282                       
283                        if not self.paused or force:
284                                if not self.image_stack.get_transition_running() or force:
285                                        self.image_stack.set_visible_child_name(id)
286                       
287                return True
288               
289        #def next_image
290       
291        def rewind_clicked(self,widget):
292               
293                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
294                self.next_image(True,False)
295                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
296               
297        #def rewind_clicked
298       
299        def play_clicked(self,widget):
300
301                if self.paused:
302                        self.media_play_image.set_from_file(RSRC_DIR + "media_pause.svg")
303                else:
304                        self.media_play_image.set_from_file(RSRC_DIR + "media_play.svg")
305                       
306                self.paused=not self.paused
307               
308        #def rewind_clicked
309       
310        def forward_clicked(self,widget):
311               
312                self.next_image(True)
313               
314        #def rewind_clicked
315       
316#class MainMenu
Note: See TracBrowser for help on using the repository browser.