source: lliurex-store/trunk/fuentes/lliurex-store-gui/usr/share/lliurex-store/lliurex-store-gui/SearchBox.py @ 4136

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

wip

File size: 5.2 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3from gi.repository import Gtk,GdkPixbuf,GLib,GObject, Pango, Gdk
4
5import os
6import ImageManager
7import Core
8import Screenshot
9
10import gettext
11gettext.textdomain('lliurex-store')
12_ = gettext.gettext
13
14
15class SearchBox(Gtk.VBox):
16
17        def __init__(self):
18               
19                Gtk.VBox.__init__(self)
20               
21                self.core=Core.Core.get_core()
22                ui_path=self.core.ui_path
23                builder=Gtk.Builder()
24                builder.set_translation_domain('lliurex-store')
25                builder.add_from_file(ui_path)
26                       
27                self.label_max_width=1
28               
29                self.description_label_ratio=0.091
30               
31                self.current_category=""
32                self.current_pkg_list=[]
33               
34                self.search_box=builder.get_object("search_box2")
35                self.search_box.set_name("DETAILS_BOX")
36                self.results_search_box=builder.get_object("search_results_box")
37                self.search_sw=builder.get_object("results_scrolledwindow")
38                self.search_categories_box=builder.get_object("search_categories_box")
39                self.categories_sw=builder.get_object("categories_scrolledwindow")
40               
41                #self.search_categories_box.set_name("LIGHT_BLUE_BOX")
42               
43                self.add(self.search_box)
44                self.show_all()
45               
46        #def init
47       
48       
49        def populate_search_results(self,pkg_list,categories=None):
50               
51
52                for child in self.results_search_box.get_children():
53                        self.results_search_box.remove(child)
54       
55                for child in self.search_categories_box.get_children():
56                        self.search_categories_box.remove(child)
57                       
58                # restore scroll bar to top
59                self.search_sw.get_vadjustment().set_value(0)
60               
61                self.current_pkg_list=pkg_list
62       
63               
64       
65               
66       
67                if categories!=None:
68                       
69                        found_categories=set()
70       
71                        for pkg in pkg_list:
72                                for category in categories:
73                                        if category in pkg["categories"]:
74                                                found_categories.add(category)
75                                                break
76                       
77                       
78               
79                        found_categories=list(sorted(found_categories))
80                        found_categories.insert(0,_("All"))
81                       
82                        counter=0
83               
84                        for c in found_categories:
85                       
86                                hbox=Gtk.HBox()
87                                hbox.set_name("PKG_BOX")
88                               
89                                label=Gtk.Label(_(c))
90                                label.set_name("SHORT_DESCRIPTION")
91                               
92                                hbox.pack_start(label,True,True,5)
93                               
94                               
95                                b=Gtk.Button()
96                                b.set_name("RELATED_BUTTON")
97                                b.add(hbox)
98                                b.show_all()
99                               
100                                #b.set_size_request(150,10)
101                                b.set_halign(Gtk.Align.FILL)
102                               
103                                if counter==0:
104                                        c=None
105                               
106                                b.connect("clicked",self.filter_by,c)
107                               
108                                self.search_categories_box.pack_start(b,False,False,3)
109                                counter+=1
110                       
111                        self.categories_sw.show()
112                       
113                else:
114                        self.categories_sw.hide()
115               
116                connect_size_request=True
117               
118                for pkg in pkg_list:
119                       
120                        self.add_pkg_to_list(pkg,connect_size_request)
121                        connect_size_request=False
122                       
123                       
124                #self.results_search_box.set_size_request(50,0)
125                self.results_search_box.set_halign(Gtk.Align.FILL)
126                self.results_search_box.show_all()
127               
128               
129        #def populate_search_results
130       
131       
132        def add_pkg_to_list(self,pkg,connect_size_request=False):
133               
134                item_box=Gtk.HBox()
135                item_box.set_name("PKG_BOX")
136                       
137                i={}
138                i["x"]=64
139                i["y"]=64
140                i["aspect_ratio"]=True
141                i["image_path"]=pkg["icon_uri"]
142                i["name"]=pkg["name"]
143                i["image_id"]=pkg["package"]+"_icon"
144                s=Screenshot.ScreenshotNeo()
145                s.set_from_file(i)
146                       
147                vbox=Gtk.VBox()
148                       
149                label=Gtk.Label(pkg["name"])
150                label.set_name("RELATED_LABEL")
151                label.set_valign(Gtk.Align.END)
152                label.set_halign(Gtk.Align.START)
153                       
154                description=Gtk.Label(pkg["summary"])
155                description.set_name("SHORT_DESCRIPTION")
156                description.set_valign(Gtk.Align.START)
157                description.set_halign(Gtk.Align.START)
158                description.set_ellipsize(Pango.EllipsizeMode.END)
159                description.set_max_width_chars(self.label_max_width)
160                       
161                vbox.pack_start(label,True,True,1)
162                vbox.pack_start(description,True,True,1)
163                vbox.set_halign(Gtk.Align.START)
164                       
165                item_box.pack_start(s,False,False,5)
166                item_box.pack_start(vbox,True,True,5)
167                       
168                b=Gtk.Button()
169                b.add(item_box)
170                b.set_name("RELATED_BUTTON")
171                b.set_valign(Gtk.Align.START)
172                #b.set_halign(Gtk.Align.FILL)
173                b.connect("clicked",self.result_clicked,pkg)
174                       
175                b.set_size_request(0,80)
176               
177                if connect_size_request:
178                        b.connect("draw",self.search_item_size_request)
179                       
180                self.results_search_box.pack_start(b,False,False,3)
181                self.results_search_box.queue_draw()
182               
183               
184        #def create_item
185       
186        def search_item_size_request(self,widget,data=None):
187               
188                allocation=widget.get_allocation()
189                self.label_max_width=int(allocation.width*self.description_label_ratio)
190               
191                for child in self.results_search_box.get_children():
192                        child.get_child().get_children()[1].get_children()[1].set_max_width_chars(self.label_max_width)
193                       
194                if type(data)!=Gdk.Rectangle:
195                        widget.disconnect_by_func(self.search_item_size_request)
196                        widget.connect("size-allocate",self.search_item_size_request)
197               
198        #def search_item_size_request
199       
200       
201        def filter_by(self,widget,filter):
202               
203                for child in self.results_search_box.get_children():
204                        self.results_search_box.remove(child)
205               
206                connect_size_request=True
207                for pkg in self.current_pkg_list:
208                       
209                        if filter==None:
210                                self.add_pkg_to_list(pkg)
211                                continue
212                        if filter in pkg["categories"]:
213                               
214                                self.add_pkg_to_list(pkg,connect_size_request)
215                                connect_size_request=False
216                       
217                self.results_search_box.show_all()
218                       
219        #def filter_by
220       
221       
222        def result_clicked(self,widget,pkg_data):
223               
224                a=widget.get_allocation()
225                self.core.main_window.load_pkg_data(pkg_data["package"])
226               
227        #def result_clicked
228
229
230
231#class SearchBox
Note: See TracBrowser for help on using the repository browser.