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

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

wip

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