schrodinger.models.advanced_mappers module

class schrodinger.models.advanced_mappers.ModelBaseClassMapperMixin(*args, **kwargs)

Bases: schrodinger.models.mappers.MapperMixin

A mapper mixin that allows any model class that is a subclass of a specified base class. Unlike a standard MapperMixin, the mapper is re- generated every time a new model is set, and the model_class class variable is updated to the class of the new model.

This allows mappings to vary depending on the characteristics of the model class (for example, values of class attributes, presence or absence of specific params, etc.).

To use, set the model_base_class class variable to the base class of all models that will be used with this mapper.

model_base_class = None
__init__(*args, **kwargs)

Initialize self. See help(type(self)) for accurate signature.

defineMappings()

Override this in the subclass to define mappings. Should return a list of tuples [(<target>, <param>)]. Targets can be

  1. a basic widget, like QLineEdit or QComboBox
  2. a custom object that inherits MapperMixin or TargetMixin
  3. a TargetSpec instance
  4. a slot

For common widgets, standard signals and getter/setter methods will be used, as defined in mappers._get_default_access_names().

For more fine-grained custom control, instantiate a TargetSpec object, which allows custom setters, getters, and signals to be specified.

Supplying a slot as the first element of the tuple is equivalent to providing TargetSpec(slot=my_slot).

Note that all target slots are triggered on setModel() as well as in response to the specified signal.

The param is an abstract param reference, e.g. MyModel.my_param.

Example:

def defineMappings(self):
    combo = self.style_combo
    return [(self.name_le, MyModel.name),
            (TargetSpec(combo,
                    getter=combo.currentText,
                    setter=combo.setCurrentText), MyModel.style),
            (self.coord_widget, MyModel.coord),
            (self._onASLTextChanged, MyModel.asl_text)]
getModel()
getSignalsAndSlots(model)

Override this method to specify signal and slot pairs that need to be connected/disconnected whenever the model instance is switched using setModel. The model instance is provided as an argument so that instance-specific signals can be used, but any pairs of signals and slots may be returned from this method.

Returns:a list of 2-tuples where each tuple is a signal, slot pair
initLayOut()

@overrides: widgetmixins.InitMixin

initSetDefaults()

@overrides: widgetmixins.InitMixin

makeInitialModel()
mappedParams()

Return a list of the abstract params that are mapped to.

model
modelChanged
model_class = None
resetMappedParams()
runAllSlots()
setDefaults()

@overrides: af2.App

setModel(model)

Sets the model object for the mapper. Disconnects the old model, if one is set, and connects the new model. Pass in None to have no model set.

Parameters:model – the model instance or None
setModelWithoutSlots(model)

This is called when this MapperMixin is a sub-widget of a parent MapperMixin. Since the slots will all be called at the end of the parent setModel, they shouldn’t be called during the sub-widget’s setModel.

setting_model()
class schrodinger.models.advanced_mappers.MultiModelClassMapperMixin(*args, **kwargs)

Bases: schrodinger.models.mappers.MapperMixin

A mapper mixin that allows multiple model classes. To use, define the model_classes tuple with all the allowable model classes. Then define the usual defineMappings and getSignalsAndSlots methods, which are allowed to branch on self.model_class to specify model class-specific mappings and signal/slot connections.

In use, self.model_class will be set to one of the classes in self.model_classes, depending on what the current model is.

model_classes = ()
__init__(*args, **kwargs)

Initialize self. See help(type(self)) for accurate signature.

defineMappings()

Override this in the subclass to define mappings. Should return a list of tuples [(<target>, <param>)]. Targets can be

  1. a basic widget, like QLineEdit or QComboBox
  2. a custom object that inherits MapperMixin or TargetMixin
  3. a TargetSpec instance
  4. a slot

For common widgets, standard signals and getter/setter methods will be used, as defined in mappers._get_default_access_names().

For more fine-grained custom control, instantiate a TargetSpec object, which allows custom setters, getters, and signals to be specified.

Supplying a slot as the first element of the tuple is equivalent to providing TargetSpec(slot=my_slot).

Note that all target slots are triggered on setModel() as well as in response to the specified signal.

The param is an abstract param reference, e.g. MyModel.my_param.

Example:

def defineMappings(self):
    combo = self.style_combo
    return [(self.name_le, MyModel.name),
            (TargetSpec(combo,
                    getter=combo.currentText,
                    setter=combo.setCurrentText), MyModel.style),
            (self.coord_widget, MyModel.coord),
            (self._onASLTextChanged, MyModel.asl_text)]
getModel()
getSignalsAndSlots(model)

Override this method to specify signal and slot pairs that need to be connected/disconnected whenever the model instance is switched using setModel. The model instance is provided as an argument so that instance-specific signals can be used, but any pairs of signals and slots may be returned from this method.

Returns:a list of 2-tuples where each tuple is a signal, slot pair
initLayOut()

@overrides: widgetmixins.InitMixin

initSetDefaults()

@overrides: widgetmixins.InitMixin

makeInitialModel()
mappedParams()

Return a list of the abstract params that are mapped to.

model
modelChanged
model_class = None
resetMappedParams()
runAllSlots()
setDefaults()

@overrides: af2.App

setModel(model)

Sets the model object for the mapper. Disconnects the old model, if one is set, and connects the new model. Pass in None to have no model set.

Parameters:model – the model instance or None
setModelWithoutSlots(model)

This is called when this MapperMixin is a sub-widget of a parent MapperMixin. Since the slots will all be called at the end of the parent setModel, they shouldn’t be called during the sub-widget’s setModel.

setting_model()