Changeset 8643

Show
Ignore:
Timestamp:
08/30/07 23:05:00 (15 months ago)
Author:
roidelapluie
Message:

0.11.2: add multiple data form support (XEP-0004)

Location:
branches/gajim_0.11.1/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/gajim_0.11.1/src/common/dataforms.py

    r7984 r8643  
    6464                'list-single': ListSingleField, 
    6565                'text-multi': TextMultiField, 
    66         }[typ](extend=node) 
    67         return f 
     66        } 
     67        if typ not in f: 
     68                typ = 'text-single' 
     69        return f[typ](extend=node) 
    6870 
    6971def ExtendForm(node): 
    7072        ''' Helper function to extend a node to form of appropriate type. ''' 
    71         if node.getTag('recorded') is not None: 
     73        if node.getTag('reported') is not None: 
    7274                return MultipleDataForm(extend=node) 
    7375        else: 
     
    386388 
    387389class MultipleDataForm(DataForm): 
    388         def __init__(self): 
     390        def __init__(self, type=None, title=None, instructions=None, items=None, extend=None): 
     391                DataForm.__init__(self, type=type, title=title, instructions=instructions, extend=extend) 
    389392                # all records, recorded into DataRecords 
    390                 pass 
     393                if extend is None: 
     394                        # we have to build this object from scratch 
     395                        xmpp.Node.__init__(self) 
     396 
     397                        if items is not None: self.items = items 
     398                else: 
     399                        # we already have xmpp.Node inside - try to convert all 
     400                        # fields into DataField objects 
     401                        if items is None: 
     402                                self.items = list(self.iterTags('item')) 
     403                        else: 
     404                                for item in self.getTags('item'): 
     405                                        self.delChild(item) 
     406                                self.items = items 
     407                reported_tag = self.getTag('reported') 
     408                self.reported = DataRecord(extend = reported_tag) 
    391409 
    392410        @nested_property 
     
    402420                                self.addChild(node=record) 
    403421                def fdel(self): 
    404                         for record in self.getTags('record'): 
     422                        for record in self.getTags('item'): 
    405423                                self.delChild(record) 
    406424                return locals() 
     
    410428                        yield record 
    411429 
    412         @nested_property 
    413         def recorded(): 
    414                 ''' DataRecord that contains descriptions of fields in records.''' 
    415                 def fget(self): 
    416                         return self.getTag('recorded') 
    417                 def fset(self, record): 
    418                         try: 
    419                                 self.delChild('recorded') 
    420                         except: 
    421                                 pass 
    422  
    423                         record.setName('recorded') 
    424                         self.addChild(node=record) 
    425                 return locals() 
    426  
     430#       @nested_property 
     431#       def reported(): 
     432#               ''' DataRecord that contains descriptions of fields in records.''' 
     433#               def fget(self): 
     434#                       return self.getTag('reported') 
     435#               def fset(self, record): 
     436#                       try: 
     437#                               self.delChild('reported') 
     438#                       except: 
     439#                               pass 
     440# 
     441#                       record.setName('reported') 
     442#                       self.addChild(node=record) 
     443#               return locals() 
     444 
  • branches/gajim_0.11.1/src/dataforms_widget.py

    r7677 r8643  
    1717""" This module contains widget that can display data form (JEP-0004). 
    1818Words single and multiple refers here to types of data forms: 
    19 single means these with one record of data (without <recorded/> element), 
    20 multiple - these which may contain more data (with <recorded/> element).""" 
     19single means these with one record of data (without <reported/> element), 
     20multiple - these which may contain more data (with <reported/> element).""" 
    2121 
    2222import gtk 
     
    4242                                'single_form_viewport', 'data_form_types_notebook', 
    4343                                'single_form_scrolledwindow', 'multiple_form_hbox', 
    44                                 'records_treeview', 'add_button', 'remove_button', 
     44                                'records_treeview', 'buttons_vbox', 'add_button', 'remove_button', 
    4545                                'edit_button', 'up_button', 'down_button', 'clear_button'): 
    4646                        self.__dict__[name] = self.xml.get_widget(name) 
     
    142142                # creating model for form... 
    143143                fieldtypes = [] 
    144                 for field in self._data_form.recorded.iter_fields(): 
     144                for field in self._data_form.reported.iter_fields(): 
    145145                        # note: we store also text-private and hidden fields, 
    146146                        # we just do not display them. 
     
    158158 
    159159                # constructing columns... 
    160                 for field, counter in zip(self._data_form.iter_fields(), itertools.count()): 
    161                         print repr(field), repr(counter) 
     160                for field, counter in zip(self._data_form.reported.iter_fields(), itertools.count()): 
    162161                        self.records_treeview.append_column( 
    163162                                gtk.TreeViewColumn(field.label, gtk.CellRendererText(), 
     
    173172                self.clean_data_form = self.clean_multiple_data_form 
    174173 
    175                 # refresh list look 
    176                 self.refresh_multiple_buttons() 
     174                readwrite = self._data_form.type != 'result' 
     175                if not readwrite: 
     176                        self.buttons_vbox.set_no_show_all(True) 
     177                        self.buttons_vbox.hide() 
     178                else: 
     179                        self.buttons_vbox.set_no_show_all(False) 
     180                        # refresh list look 
     181                        self.refresh_multiple_buttons() 
    177182 
    178183        def clean_multiple_data_form(self): 
     
    187192                model = self.records_treeview.get_model() 
    188193                count = selection.count_selected_rows() 
    189                 if count==0: 
     194                if count == 0: 
    190195                        self.remove_button.set_sensitive(False) 
    191196                        self.edit_button.set_sensitive(False) 
    192197                        self.up_button.set_sensitive(False) 
    193198                        self.down_button.set_sensitive(False) 
    194                 elif count==1: 
     199                elif count == 1: 
    195200                        self.remove_button.set_sensitive(True) 
    196201                        self.edit_button.set_sensitive(True) 
     
    200205                                self.up_button.set_sensitive(True) 
    201206                                self.down_button.set_sensitive(False) 
    202                         elif path==(0,): 
     207                        elif path == (0, ): 
    203208                                self.up_button.set_sensitive(False) 
    204209                                self.down_button.set_sensitive(True) 
     
    212217                        self.down_button.set_sensitive(False) 
    213218 
    214                 if len(model)==0: 
     219                if len(model) == 0: 
    215220                        self.clear_button.set_sensitive(False) 
    216221                else: