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

Last change on this file since 3773 was 3773, 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_related()
86                self.build_categories()
87                self.set_css_names()
88               
89               
90                GLib.timeout_add(3000,self.next_image)
91               
92        #def __init__
93       
94        def download_home_info(self):
95               
96                #HOME_CONTENT_URL
97               
98                header = {
99                                        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'
100                                }
101                       
102                try:
103                       
104                        self.core.dprint("Downloading home_content.json...")
105                       
106                        req=urllib2.Request(HOME_CONTENT_URL,headers=header)
107                        res=urllib2.urlopen(req)
108                        f=open(TMP_STORE_DIR+"home_content.json","w")
109                        f.write(res.read())
110                        f.close()
111                       
112                        f=open(TMP_STORE_DIR+"home_content.json")
113                        self.home_info=json.load(f)
114                        f.close()
115
116                except Exception as e:
117                       
118                        print e
119               
120               
121        #def download_home_info
122       
123        def build_banners(self):
124
125                # Main banners
126               
127                spacing=5
128                count=1
129               
130                for pkg in self.home_info["large"]:
131                        s=Screenshot.ScreenshotNeo()
132                        info={}
133                        info["image_url"]=pkg["banner_url"]
134                        info["image_id"]=pkg["debian_name"]+"_banner_large"
135                        info["x"]=self.banner_large_x
136                        info["y"]=self.banner_large_y
137                        info["aspect_ratio"]=True
138                        info["pkg_name"]=pkg["name"]
139                        s.download_image(info)
140                        s.set_size_request(self.banner_large_x,self.banner_large_y)
141                        b=Gtk.Button()
142                        b.set_name("RELATED_BUTTON")
143                        b.add(s)
144                        b.show_all()
145                        b.set_size_request(self.banner_large_x,self.banner_large_y)
146                        b.connect("clicked",self.banner_clicked,pkg["debian_name"])
147                        self.image_stack.add_titled(b,"image%s"%count,"Image %s"%count)
148                        count+=1
149
150               
151                # Smaller banners
152               
153               
154                banner_range=range(0,len(self.home_info["small"]))
155                sample=random.sample(banner_range,5)
156               
157                for b_id in banner_range:
158                       
159                        pkg=self.home_info["small"][b_id]
160                        s=Screenshot.ScreenshotNeo()
161                        info={}
162                        if pkg["banner_url"]!=None:
163                                info["image_url"]=pkg["banner_url"]
164                        else:
165                                info["image_url"]=pkg["icon_url"]
166                                info["custom_frame"]=True
167                        info["image_id"]=pkg["debian_name"]+"_banner_small"
168                        info["x"]=self.banner_small
169                        info["y"]=self.banner_small
170                        info["aspect_ratio"]=False
171                        info["pkg_name"]=pkg["name"]
172                       
173                        s.download_image(info)
174                        b=Gtk.Button()
175                        b.set_name("RELATED_BUTTON")
176                        b.add(s)
177                        b.connect("clicked",self.banner_clicked,pkg["debian_name"])
178                        self.featured_extra_box.pack_start(b,True,False,spacing)
179                               
180               
181               
182                self.show_all()
183               
184               
185        #def build_related
186       
187        def build_categories(self):
188               
189                max_width=7
190                w_counter=0
191                h_counter=0
192               
193                button_size=97
194               
195                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")]
196               
197               
198                for x in img_list:
199                       
200                        label,icon_name=x
201                        b=Gtk.Button()
202                        b.set_name("RELATED_BUTTON")
203                        hbox=Gtk.HBox()
204                        hbox.set_halign(Gtk.Align.START)
205                        img_path="/home/cless/Desktop/icons/clean_icons/%s"%icon_name
206                       
207                        s=Screenshot.ScreenshotNeo()
208                        i={}
209                        i["image_path"]=img_path
210                        i["x"]=button_size
211                        i["y"]=button_size
212                        i["custom_frame"]=True
213                        i["pkg_name"]=label
214                       
215                        s.create_banner_from_file(i)
216                        b.add(s)
217                        b.connect("clicked",self.category_clicked,label)
218                       
219                       
220                        #self.categories_flowbox.add(b)
221                       
222                        self.categories_grid.attach(b,w_counter,h_counter,1,1)
223                        w_counter+=1
224                        if w_counter ==max_width:
225                                w_counter=0
226                                h_counter+=1
227               
228                       
229                #self.categories_grid.show_all()
230               
231        #def build_categories
232       
233       
234        def set_css_names(self):
235               
236                self.main_view_box.set_name("DETAILS_BOX")
237                self.divider1.set_name("DIVIDER")
238                self.divider2.set_name("DIVIDER")
239                self.divider3.set_name("DIVIDER")
240                self.featured_label.set_name("RELATED_LABEL")
241                self.categories_label.set_name("RELATED_LABEL")
242                self.rewind_button.set_name("MEDIA_BUTTON")
243                self.play_button.set_name("MEDIA_BUTTON")
244                self.forward_button.set_name("MEDIA_BUTTON")
245               
246               
247        #def set_css_info
248       
249       
250        def banner_clicked(self,widget,pkg_id):
251               
252                self.core.main_window.load_pkg_data(pkg_id)
253               
254               
255        #def banner_clicked
256       
257        def category_clicked(self,widget,category):
258               
259                print category
260               
261        #def category_clicked
262       
263       
264        def next_image(self,force=False,add=True):
265               
266                tmp=self.image_stack.get_visible_child_name()
267                if tmp!=None:
268                        id=int(tmp.split("image")[1])
269                       
270                        if add:
271                       
272                                if id < self.max_image_id:
273                                        id+=1
274                                else:
275                                        id=1
276                        else:
277                               
278                                if id <= 1:
279                                        id=self.max_image_id
280                                else:
281                                        id-=1
282                       
283                        id="image%s"%id
284                       
285                        if not self.paused or force:
286                                if not self.image_stack.get_transition_running() or force:
287                                        self.image_stack.set_visible_child_name(id)
288                       
289                return True
290               
291        #def next_image
292       
293        def rewind_clicked(self,widget):
294               
295                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
296                self.next_image(True,False)
297                self.image_stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
298               
299        #def rewind_clicked
300       
301        def play_clicked(self,widget):
302
303                if self.paused:
304                        self.media_play_image.set_from_file(RSRC_DIR + "media_pause.svg")
305                else:
306                        self.media_play_image.set_from_file(RSRC_DIR + "media_play.svg")
307                       
308                self.paused=not self.paused
309               
310        #def rewind_clicked
311       
312        def forward_clicked(self,widget):
313               
314                self.next_image(True)
315               
316        #def rewind_clicked
317       
318#class MainMenu
Note: See TracBrowser for help on using the repository browser.