def set_pmw_validator(self, validator): self.pmw_validator = validator if not self.pmw_validator: return None if self.pmw_validator["validator"] == "integer": self.setValidator( QtGui.QIntValidator(self.pmw_validator["min"], self.pmw_validator["max"])) elif self.pmw_validator["validator"] == "real": self.setValidator( QtGui.QDoubleValidator(self.pmw_validator["min"], self.pmw_validator["max"], 9)) else: raise KeyError("Unknown 'validator': %s" % self.pmw_validator["validator"])
def render_dialog(self, widget=None): form = self.load_form('render', widget) lock = UpdateLock([ZeroDivisionError]) def get_factor(): units = form.input_units.currentText() factor = 1.0 if units == 'inch' else 2.54 return factor / float(form.input_dpi.currentText()) @lock.skipIfCircular def update_units(*args): width = form.input_width.value() height = form.input_height.value() factor = get_factor() form.input_width_units.setValue(width * factor) form.input_height_units.setValue(height * factor) @lock.skipIfCircular def update_pixels(*args): width = form.input_width_units.value() height = form.input_height_units.value() factor = get_factor() form.input_width.setValue(width / factor) form.input_height.setValue(height / factor) @lock.skipIfCircular def update_width(*args): if form.aspectratio > 0: width = form.input_height.value() * form.aspectratio form.input_width.setValue(int(width)) form.input_width_units.setValue(width * get_factor()) @lock.skipIfCircular def update_height(*args): if form.aspectratio > 0: height = form.input_width.value() / form.aspectratio form.input_height.setValue(int(height)) form.input_height_units.setValue(height * get_factor()) def update_aspectratio(checked=True): if checked: try: form.aspectratio = (float(form.input_width.value()) / float(form.input_height.value())) except ZeroDivisionError: form.button_lock.setChecked(False) else: form.aspectratio = 0 def update_from_viewport(): w, h = self.cmd.get_viewport() form.aspectratio = 0 form.input_width.setValue(w) form.input_height.setValue(h) update_aspectratio(form.button_lock.isChecked()) def run_draw(ray=False): width = form.input_width.value() height = form.input_height.value() if ray: self.cmd.set('opaque_background', not form.input_transparent.isChecked()) self.cmd.do('ray %d, %d, async=1' % (width, height)) else: self.cmd.do('draw %d, %d' % (width, height)) form.stack.setCurrentIndex(1) def run_ray(): run_draw(ray=True) def run_save(): fname = getSaveFileNameWithExt(self, 'Save As...', self.initialdir, filter='PNG File (*.png)') if not fname: return self.initialdir = os.path.dirname(fname) self.cmd.png(fname, prior=1, dpi=form.input_dpi.currentText()) def run_copy_clipboard(): with PopupOnException(): _copy_image(self.cmd, False, form.input_dpi.currentText()) dpi = self.cmd.get_setting_int('image_dots_per_inch') if dpi > 0: form.input_dpi.setEditText(str(dpi)) form.input_dpi.setValidator(QtGui.QIntValidator()) form.input_units.currentIndexChanged.connect(update_units) form.input_dpi.editTextChanged.connect(update_pixels) form.input_width.valueChanged.connect(update_units) form.input_height.valueChanged.connect(update_units) form.input_width_units.valueChanged.connect(update_pixels) form.input_height_units.valueChanged.connect(update_pixels) # set values before connecting mutual width<->height updates update_from_viewport() form.input_width.valueChanged.connect(update_height) form.input_height.valueChanged.connect(update_width) form.input_width_units.valueChanged.connect(update_height) form.input_height_units.valueChanged.connect(update_width) form.button_lock.toggled.connect(update_aspectratio) form.button_draw.clicked.connect(run_draw) form.button_ray.clicked.connect(run_ray) form.button_current.clicked.connect(update_from_viewport) form.button_back.clicked.connect(lambda: form.stack.setCurrentIndex(0)) form.button_clip.clicked.connect(run_copy_clipboard) form.button_save.clicked.connect(run_save) if widget is None: form._dialog.show()