def get_selected_field(self): """ Get the selected field @return a tuple (packet, proto, field) containing the parent protocol for field and the field or None, None, None """ model, iter = self.tree.get_selection().get_selected() if not iter: return (None, None, None) obj = model.get_value(iter, 0) proto = obj.proto if isinstance(obj, TField): field = obj.ref elif isinstance(obj, TFlag): field = obj.field else: field = None if not proto or not field or \ not backend.is_field(field) or \ not backend.is_proto(proto): return (None, None, None) return (self.packet, proto, field)
def get_editor(field): "@return the corresponding editor class for field or None" if not backend.is_field(field): log.error('%s is not a valid field' % field) return None # MACField # IPField # We use a list because order is important here table = [(backend.PMMACField, MACEditor), (backend.PMStrField, StrEditor), (backend.PMIP6Field, IPv6Editor), (backend.PMIPField, IPv4Editor), (backend.PMEnumField, EnumEditor), (backend.PMByteField, IntEditor), (backend.PMShortField, IntEditor), (backend.PMLEShortField, IntEditor), (backend.PMIntField, IntEditor), (backend.PMSignedIntField, IntEditor), (backend.PMLEIntField, IntEditor), (backend.PMLESignedIntField, IntEditor), (backend.PMLongField, IntEditor), (backend.PMLELongField, IntEditor), (backend.PMLenField, IntEditor), (backend.PMRDLenField, IntEditor), (backend.PMFieldLenField, IntEditor), (backend.PMBCDFloatField, IntEditor), (backend.PMBitField, IntEditor), ] for it in table: if it[0] != None and backend.implements(field, it[0]): return it[1]