Changeset 73 in main for trunk/plugins


Ignore:
Timestamp:
07/06/10 16:27:06 (12 years ago)
Author:
pcosquer
Message:

plugin : advanced search

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/gedit/openplm.py

    r72 r73  
    283283        self.instance = instance 
    284284        docs = self.instance.get_data("api/docs/") 
     285        self.types = docs["types"] 
    285286        table = gtk.Table(2, 3) 
    286287        self.vbox.pack_start(table) 
     
    289290            self.type_entry.append_text(t) 
    290291        self.type_entry.child.set_text("Document") 
     292        self.type_entry.connect("changed", self.type_entry_activate_cb) 
    291293        self.name_entry = gtk.Entry() 
    292294        self.rev_entry = gtk.Entry() 
    293         self.fields = (("type", self.type_entry), 
    294                   ("name", self.name_entry), 
    295                   ("revision", self.rev_entry), 
    296                  ) 
     295        self.fields = [("type", self.type_entry), 
     296                       ("reference", self.name_entry), 
     297                       ("revision", self.rev_entry), 
     298                      ] 
    297299        for i, (text, entry) in enumerate(self.fields):  
    298300            table.attach(gtk.Label(_(text.capitalize()+":")), 0, 1, i, i+1) 
    299301            table.attach(entry, 1, 2, i, i+1) 
    300302         
     303        self.advanced_table = gtk.Table(2, 3) 
     304        self.advanced_fields = [] 
     305        self.vbox.pack_start(self.advanced_table) 
     306        self.display_fields("Document") 
     307         
    301308        search_button = gtk.Button(_("Search")) 
    302309        search_button.connect("clicked", self.search) 
     
    306313        self.vbox.pack_start(self.results_box) 
    307314        self.vbox.show_all() 
     315 
     316    def type_entry_activate_cb(self, entry): 
     317        typename = entry.child.get_text() 
     318        if typename in self.types: 
     319            self.display_fields(typename) 
     320 
     321    def display_fields(self, typename): 
     322        fields = self.instance.get_data("api/search_fields/%s/" % typename)["fields"] 
     323        temp = {} 
     324        for field, entry in self.advanced_fields: 
     325            temp[field] = self.get_value(entry) 
     326        for child in self.advanced_table.get_children(): 
     327            child.destroy() 
     328        self.advanced_fields = [] 
     329        self.advanced_table.resize(2, len(fields)) 
     330        for i, (text, choices) in enumerate(fields): 
     331            self.advanced_table.attach(gtk.Label(_(text.capitalize()+":")), 
     332                                       0, 1, i, i+1) 
     333            if choices: 
     334                model = gtk.ListStore(object, str) 
     335                if [u'', u'---------'] not in choices: 
     336                    choices = ([u'', u'---------'],) + tuple(choices) 
     337                for c in choices: 
     338                    model.append(c) 
     339                widget = gtk.ComboBox(model) 
     340                cell = gtk.CellRendererText() 
     341                widget.pack_start(cell, True) 
     342                widget.add_attribute(cell, 'text', 1)   
     343            else: 
     344                widget = gtk.Entry() 
     345            if text in temp: 
     346                self.set_value(widget, temp[text]) 
     347            self.advanced_table.attach(widget, 1, 2, i, i+1) 
     348            self.advanced_fields.append((text, widget)) 
     349        self.advanced_table.show_all() 
     350 
     351    def get_value(self, entry): 
     352        if isinstance(entry, gtk.ComboBoxEntry): 
     353            value = entry.child.get_text() 
     354        elif isinstance(entry, gtk.ComboBox): 
     355            model = entry.get_model() 
     356            active = entry.get_active() 
     357            if active < 0: 
     358                value = "" 
     359            else: 
     360                value = model[active][0] 
     361        elif isinstance(entry, gtk.Entry): 
     362            value = entry.get_text() 
     363        return value 
     364 
     365    def set_value(self, entry, value): 
     366        if isinstance(entry, gtk.ComboBoxEntry): 
     367            entry.child.set_text(entry) 
     368        elif isinstance(entry, gtk.ComboBox): 
     369            model = entry.get_model() 
     370            for i, it in enumerate(iter(model)): 
     371                if value == it[0]: 
     372                    entry.set_active(i) 
     373                    return 
     374        elif isinstance(entry, gtk.Entry): 
     375            entry.set_text(value) 
     376 
    308377 
    309378    def display_results(self, results): 
     
    334403    def search(self, *args): 
    335404        data = {} 
    336         for text, entry in self.fields: 
    337             if hasattr(entry, "child"): 
    338                 entry = entry.child 
    339             data[text] = entry.get_text() 
     405        for text, entry in self.fields + self.advanced_fields: 
     406            value = self.get_value(entry) 
     407            if value: 
     408                data[text] = value 
    340409        get = urllib.urlencode(data) 
    341410        self.display_results(self.instance.get_data("api/search/?%s" % get)["objects"]) 
Note: See TracChangeset for help on using the changeset viewer.