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

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

wip

File size: 7.4 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib
4
5import Core
6import Package
7
8import threading
9import gettext
10import signal
11import time
12
13signal.signal(signal.SIGINT, signal.SIG_DFL)
14_=gettext.gettext
15
16
17
18class MainWindow:
19       
20        def __init__(self):
21               
22                self.core=Core.Core.get_core()
23                self.load_thread=threading.Thread()
24                self.thread_aborted=False
25                self.load_gui()
26               
27        #def init
28       
29        def load_gui(self):
30               
31                builder=Gtk.Builder()
32                ui_path=self.core.ui_path
33                builder.add_from_file(ui_path)
34               
35                self.window=builder.get_object("window1")
36                self.menu_button=builder.get_object("menu_button")
37               
38                self.main_scroll=builder.get_object("main_scrolledwindow")
39                self.location_label=builder.get_object("location_label")
40                self.search_entry=builder.get_object("search_entry")
41                self.main_box=builder.get_object("main_box")
42                self.header_box=builder.get_object("header_box")
43                test_box=builder.get_object("box1")
44                test_box.set_name("INSTALL_BUTTON")
45               
46                self.details_box=self.core.details_box
47               
48               
49                self.stack=Gtk.Stack()
50                self.stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
51                self.stack.set_transition_duration(500)
52               
53                self.main_menu=self.core.main_menu
54               
55                import random
56                id=int(random.random()*2)
57                #self.main_menu.testbutton.connect("clicked",self.load_pkg_data,id)
58               
59                self.loading_box=self.core.loading_box
60               
61                self.stack.add_titled(self.loading_box,"loading","Loading")
62                self.stack.add_titled(self.main_menu,"main","Main")
63                self.stack.add_titled(self.details_box,"details","Details")
64               
65                self.main_scroll.add(self.stack)
66               
67                self.load_thread=threading.Thread(target=self.download_home_info_thread)
68                self.load_thread.daemon=True
69                self.load_thread.start()
70               
71                GLib.timeout_add(500,self.load_home)
72               
73               
74               
75                self.overlay=Gtk.Overlay()
76                self.main_eb=Gtk.EventBox()
77                self.main_eb.add(self.main_box)
78               
79                self.main_eb.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
80                self.main_eb.connect("button-press-event",self.main_eb_clicked)
81               
82                self.overlay.add(self.main_eb)
83                self.overlay.show_all()
84               
85                self.popup_menu=self.core.popup_menu
86               
87               
88                self.screenshot_viewer=self.core.screenshot_viewer
89
90                self.fade_box_revealer=Gtk.Revealer()
91                self.fade_box_revealer.set_valign(Gtk.Align.END)
92                self.fade_box_revealer.set_halign(Gtk.Align.END)
93               
94                self.fade_box=Gtk.HBox()
95                self.fade_eb=Gtk.EventBox()
96                self.fade_eb.add(self.fade_box)
97                self.fade_eb.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
98                self.fade_eb.connect("button-press-event",self.main_eb_clicked)
99               
100                self.fade_box_revealer.set_transition_type(Gtk.RevealerTransitionType.SLIDE_UP)
101                self.fade_box_revealer.set_transition_duration(self.popup_menu.revealer.get_transition_duration())
102                self.fade_box_revealer.add(self.fade_eb)
103                self.fade_box_revealer.show_all()
104               
105               
106                self.overlay.add_overlay(self.fade_box_revealer)
107                self.overlay.add_overlay(self.popup_menu)
108                self.overlay.add_overlay(self.screenshot_viewer)
109               
110               
111               
112                for x in self.details_box.screenshots_box.get_children():
113                        x.connect("clicked",self.screenshot_clicked)
114               
115                self.window.add(self.overlay)
116                self.set_css_info()
117               
118                self.window.connect("size-allocate",self.window_size_changed)
119                self.window.connect("destroy",Gtk.main_quit)
120                self.menu_button.connect("clicked",self.menu_button_clicked)
121               
122               
123                self.window.show_all()
124               
125               
126        #def load_gui
127
128       
129        def set_css_info(self):
130               
131                self.style_provider=Gtk.CssProvider()
132                f=Gio.File.new_for_path("lliurex-store.css")
133                self.style_provider.load_from_file(f)
134                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
135               
136                self.window.set_name("MAIN_BOX")
137                self.header_box.set_name("HEADER_MENU")
138                self.menu_button.set_name("MENU_BUTTON")
139                self.location_label.set_name("RELATED_LABEL")
140                self.fade_box.set_name("FADE_BOX")
141               
142        #def set-css_info       
143       
144       
145        def start_gui(self):
146               
147                GObject.threads_init()
148                Gtk.main()
149               
150        #def start_gui
151
152        # ### HOME LOADING FUNCTIONS # ##############
153       
154        def load_home(self):
155               
156                if self.thread_aborted:
157                        self.thread_aborted=False
158                        return False
159               
160               
161                if self.load_thread.is_alive():
162                        return True
163               
164                self.main_menu.build_banners()
165                self.show_home()
166                return False
167               
168        #def load_home
169
170       
171        def download_home_info_thread(self):
172               
173                self.main_menu.download_home_info()
174                #time.sleep(2)
175
176        #def load_home_thread
177       
178        # #################################
179       
180        # ### LOAD PKG FUNCTIONS # ##################
181       
182        def load_pkg_data(self,pkg_id):
183               
184                self.current_pkg=None
185                self.thread_aborted=False
186                self.load_thread=threading.Thread(target=self.load_pkg_data_thread,args=(pkg_id,))
187                self.load_thread.daemon=True
188                self.load_thread.start()
189                self.show_loading()
190                GLib.timeout_add(500,self.load_pkg_listener)
191               
192        #def load_pkg_data
193       
194        def load_pkg_data_thread(self,pkg_id):
195               
196                self.current_pkg=Package.Package.get_demo_package(pkg_id)
197                #time.sleep(2)
198               
199        #def load_pkg_data_thread
200       
201        def load_pkg_listener(self):
202               
203                if self.thread_aborted:
204                        self.thread_aborted=False
205                        return False
206               
207                if self.load_thread.is_alive():
208                        return True
209                       
210                if self.current_pkg!=None:
211                        self.details_box.set_package_info(self.current_pkg)
212                        self.stack.set_visible_child_name("details")
213               
214                return False
215               
216        #def load_pkg_listener
217       
218        # #################################
219       
220       
221        def show_loading(self):
222               
223                self.stack.set_visible_child_name("loading")
224               
225        #def kk
226               
227        def show_details_box(self):
228               
229                self.stack.set_visible_child_name("details")
230               
231        #def show_details_box
232       
233        def show_home(self):
234               
235                self.stack.set_visible_child_name("main")
236               
237        #def show_details_box
238       
239
240        def window_size_changed(self,widget,allocation):
241               
242                x,y=self.window.get_size()
243                self.popup_menu.popup_menu.set_size_request(400,y)
244                self.screenshot_viewer.content_box.set_size_request(x,y)
245                self.screenshot_viewer.sw.set_size_request(x-20,150)
246                self.fade_box.set_size_request(x,y)
247               
248        #def window_size_allocation
249
250
251        def screenshot_clicked(self,widget):
252
253                if widget.get_children()[0].get_visible_child_name()=="image":
254                       
255                        if self.popup_menu.revealer.get_reveal_child():
256                                self.popup_menu.revealer.set_reveal_child(False)
257                                return
258                       
259                        if widget.get_children()[0].image_info["video_url"]==None:
260                                self.screenshot_viewer.set_screenshot(widget.get_children()[0].image_info["image_id"],self.details_box.screenshots_box)
261                        else:
262                                self.screenshot_viewer.set_screenshot(widget.get_children()[0].image_info["video_url"],self.details_box.screenshots_box,True)
263                               
264                        self.screenshot_viewer.revealer.set_reveal_child(True)
265                       
266                       
267        #def screenshot_clicked
268       
269
270        def main_eb_clicked(self,widget,event):
271               
272                if self.popup_menu.revealer.get_reveal_child():
273                        self.popup_menu.revealer.set_reveal_child(False)
274                       
275                if self.fade_box_revealer.get_reveal_child():
276                        GLib.timeout_add(30,self.check_fade_out)
277                        self.fade_box_revealer.set_reveal_child(False)
278                       
279        #def main_eb_clicked
280
281       
282        def menu_button_clicked(self,widget):
283               
284                if self.popup_menu.revealer.get_reveal_child()==True:
285                        GLib.timeout_add(250,self.check_fade_out)
286                else:
287                        self.fade_box_revealer.set_transition_type(Gtk.RevealerTransitionType.CROSSFADE)
288                       
289                self.popup_menu.revealer.set_reveal_child(not self.popup_menu.revealer.get_reveal_child())
290                self.fade_box_revealer.set_reveal_child(True)
291               
292        #def menu_button_clicked
293
294
295        def check_fade_out(self):
296               
297                if self.fade_box_revealer.get_child_revealed():
298                        return True
299                       
300                self.fade_box_revealer.set_transition_type(Gtk.RevealerTransitionType.SLIDE_UP)
301               
302        #def check_fade_out
303       
304       
305
306       
307       
308       
309#class LliurexStore
310
311if __name__=="__main__":
312       
313        llx_store=LliurexStore()
Note: See TracBrowser for help on using the repository browser.