source: lliurex-store/trunk/fuentes/lliurex-store-gui/SearchBox.py @ 4114

Last change on this file since 4114 was 4114, checked in by hectorgh, 2 years ago

wip

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