def saveValues(self):
        """
        Generates a dictionary of values from the widgets in this editor that
        will be used to save the values on its record.
        
        :return     {<str> columnName: <variant> value, ..}
        """
        output = {}
        
        for widget in self.findChildren(QWidget):
            prop = widget.property('columnName')
            if not prop:
                continue
            
            columnName = nativestring(unwrapVariant(prop, ''))
            
            if ( not columnName ):
                continue
            
            value, success = projexui.widgetValue(widget)
            if ( not success ):
                continue
            
            # convert from values to standard python values
            if ( isinstance(value, QDateTime) ):
                value = value.toPyDateTime()
            elif ( isinstance(value, QDate) ):
                value = value.toPyDate()
            elif ( isinstance(value, QTime) ):
                value = value.toPyTime()
            elif ( type(value).__name__ == 'QString' ):
                value = nativestring(value)
            
            output[columnName] = value
        
        return output