KisDlgOptionsTIFF::KisDlgOptionsTIFF(QWidget *parent) : KDialog(parent), wdg(new QWidget) { setWindowTitle(i18n("TIFF Export Options")); setButtons(KDialog::Ok | KDialog::Cancel); optionswdg = new Ui_KisWdgOptionsTIFF(); optionswdg->setupUi(wdg); activated(0); connect(optionswdg->kComboBoxCompressionType, SIGNAL(activated(int)), this, SLOT(activated(int))); connect(optionswdg->flatten, SIGNAL(toggled(bool)), this, SLOT(flattenToggled(bool))); setMainWidget(wdg); qApp->restoreOverrideCursor(); setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); QString filterConfig = KisConfig().exportConfiguration("TIFF"); KisPropertiesConfiguration cfg; cfg.fromXML(filterConfig); optionswdg->kComboBoxCompressionType->setCurrentIndex(cfg.getInt("compressiontype", 0)); activated(optionswdg->kComboBoxCompressionType->currentIndex()); optionswdg->kComboBoxPredictor->setCurrentIndex(cfg.getInt("predictor", 0)); optionswdg->alpha->setChecked(cfg.getBool("alpha", true)); optionswdg->flatten->setChecked(cfg.getBool("flatten", true)); flattenToggled(optionswdg->flatten->isChecked()); optionswdg->qualityLevel->setValue(cfg.getInt("quality", 80)); optionswdg->compressionLevelDeflate->setValue(cfg.getInt("deflate", 6)); optionswdg->kComboBoxFaxMode->setCurrentIndex(cfg.getInt("faxmode", 0)); optionswdg->compressionLevelPixarLog->setValue(cfg.getInt("pixarlog", 6)); }
void KisFilterDialog::close() { if (d->node->inherits("KisLayer")) { qobject_cast<KisLayer*>(d->node.data())->removePreviewMask(); } d->node->setDirty(d->node->extent()); KisConfig().setShowFilterGallery(d->uiFilterDialog.filterSelection->isFilterGalleryVisible()); }
void KisDlgFilter::slotOnReject() { if (d->filterManager->isStrokeRunning()) { d->filterManager->cancel(); } KisConfig().setShowFilterGallery(d->uiFilterDialog.filterSelection->isFilterGalleryVisible()); }
KisPaintOpPresetsChooserPopup::KisPaintOpPresetsChooserPopup(QWidget * parent) : QWidget(parent) , m_d(new Private()) { m_d->uiWdgPaintOpPresets.setupUi(this); KMenu* menu = new KMenu(this); QActionGroup *actionGroup = new QActionGroup(this); KisPresetChooser::ViewMode mode = (KisPresetChooser::ViewMode)KisConfig().presetChooserViewMode(); bool showAll = KisConfig().presetShowAllMode(); QAction* action = menu->addAction(koIcon("view-preview"), i18n("Thumbnails"), this, SLOT(slotThumbnailMode())); action->setCheckable(true); action->setChecked(mode == KisPresetChooser::THUMBNAIL); action->setActionGroup(actionGroup); action = menu->addAction(koIcon("view-list-details"), i18n("Details"), this, SLOT(slotDetailMode())); action->setCheckable(true); action->setChecked(mode == KisPresetChooser::DETAIL); action->setActionGroup(actionGroup); m_d->uiWdgPaintOpPresets.viewModeButton->setIcon(koIcon("view-choose")); m_d->uiWdgPaintOpPresets.viewModeButton->setMenu(menu); m_d->uiWdgPaintOpPresets.viewModeButton->setPopupMode(QToolButton::InstantPopup); m_d->uiWdgPaintOpPresets.wdgPresetChooser->setViewMode(mode); m_d->uiWdgPaintOpPresets.wdgPresetChooser->showTaggingBar(false,true); connect(m_d->uiWdgPaintOpPresets.wdgPresetChooser, SIGNAL(resourceSelected(KoResource*)), this, SIGNAL(resourceSelected(KoResource*))); connect(m_d->uiWdgPaintOpPresets.searchBar, SIGNAL(textChanged(QString)), m_d->uiWdgPaintOpPresets.wdgPresetChooser, SLOT(searchTextChanged(QString))); connect(m_d->uiWdgPaintOpPresets.searchBar, SIGNAL(textChanged(QString)), this, SLOT(setLineEditCompleter(QString))); connect(m_d->uiWdgPaintOpPresets.searchBar, SIGNAL(returnPressed(QString)), this, SLOT(returnKeyPressed(QString))); connect(m_d->uiWdgPaintOpPresets.showAllCheckBox, SIGNAL(toggled(bool)), m_d->uiWdgPaintOpPresets.wdgPresetChooser, SLOT(setShowAll(bool))); m_d->firstShown = true; m_d->uiWdgPaintOpPresets.showAllCheckBox->setChecked(showAll); }
KisTIFFOptions KisDlgOptionsTIFF::options() { KisTIFFOptions options; switch (optionswdg->kComboBoxCompressionType->currentIndex()) { case 0: options.compressionType = COMPRESSION_NONE; break; case 1: options.compressionType = COMPRESSION_JPEG; break; case 2: options.compressionType = COMPRESSION_DEFLATE; break; case 3: options.compressionType = COMPRESSION_LZW; break; case 4: options.compressionType = COMPRESSION_JP2000; break; case 5: options.compressionType = COMPRESSION_CCITTRLE; break; case 6: options.compressionType = COMPRESSION_CCITTFAX3; break; case 7: options.compressionType = COMPRESSION_CCITTFAX4; break; case 8: options.compressionType = COMPRESSION_PIXARLOG; break; default: options.compressionType = COMPRESSION_NONE; } options.predictor = optionswdg->kComboBoxPredictor->currentIndex() + 1; options.alpha = optionswdg->alpha->isChecked(); options.flatten = optionswdg->flatten->isChecked(); options.jpegQuality = optionswdg->qualityLevel->value(); options.deflateCompress = optionswdg->compressionLevelDeflate->value(); options.faxMode = optionswdg->kComboBoxFaxMode->currentIndex() + 1; options.pixarLogCompress = optionswdg->compressionLevelPixarLog->value(); qDebug() << options.compressionType << options.predictor << options.alpha << options.jpegQuality << options.deflateCompress << options.faxMode << options.pixarLogCompress; KisPropertiesConfiguration cfg; cfg.setProperty("compressiontype", optionswdg->kComboBoxCompressionType->currentIndex()); cfg.setProperty("predictor", options.predictor - 1); cfg.setProperty("alpha", options.alpha); cfg.setProperty("flatten", options.flatten); cfg.setProperty("quality", options.jpegQuality); cfg.setProperty("deflate", options.deflateCompress); cfg.setProperty("faxmode", options.faxMode - 1); cfg.setProperty("pixarlog", options.pixarLogCompress); KisConfig().setExportConfiguration("TIFF", cfg); return options; }
void KisDlgFilter::slotOnAccept() { if (!d->filterManager->isStrokeRunning()) { KisSafeFilterConfigurationSP config(d->uiFilterDialog.filterSelection->configuration()); startApplyingFilter(config); } d->filterManager->finish(); d->uiFilterDialog.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); KisConfig().setShowFilterGallery(d->uiFilterDialog.filterSelection->isFilterGalleryVisible()); }
void setTextureParameters() { const int numMipmapLevels = KisConfig().numMipmapLevels(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, numMipmapLevels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, numMipmapLevels); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); }
KisDlgFilter::KisDlgFilter(KisViewManager *view, KisNodeSP node, KisFilterManager *filterManager, QWidget *parent) : QDialog(parent), d(new Private) { setModal(false); d->uiFilterDialog.setupUi(this); d->node = node; d->view = view; d->filterManager = filterManager; d->uiFilterDialog.filterSelection->setView(view); d->uiFilterDialog.filterSelection->showFilterGallery(KisConfig().showFilterGallery()); d->uiFilterDialog.pushButtonCreateMaskEffect->show(); connect(d->uiFilterDialog.pushButtonCreateMaskEffect, SIGNAL(pressed()), SLOT(createMask())); d->uiFilterDialog.filterGalleryToggle->setChecked(d->uiFilterDialog.filterSelection->isFilterGalleryVisible()); d->uiFilterDialog.filterGalleryToggle->setIcon(QPixmap(KoResourcePaths::findResource("data", "krita/pics/sidebaricon.png"))); d->uiFilterDialog.filterGalleryToggle->setMaximumWidth(d->uiFilterDialog.filterGalleryToggle->height()); connect(d->uiFilterDialog.filterSelection, SIGNAL(sigFilterGalleryToggled(bool)), d->uiFilterDialog.filterGalleryToggle, SLOT(setChecked(bool))); connect(d->uiFilterDialog.filterGalleryToggle, SIGNAL(toggled(bool)), d->uiFilterDialog.filterSelection, SLOT(showFilterGallery(bool))); connect(d->uiFilterDialog.filterSelection, SIGNAL(sigSizeChanged()), this, SLOT(slotFilterWidgetSizeChanged())); if (node->inherits("KisMask")) { d->uiFilterDialog.pushButtonCreateMaskEffect->setVisible(false); } d->uiFilterDialog.filterSelection->setPaintDevice(true, d->node->original()); connect(d->uiFilterDialog.buttonBox, SIGNAL(accepted()), SLOT(accept())); connect(d->uiFilterDialog.buttonBox, SIGNAL(rejected()), SLOT(reject())); connect(d->uiFilterDialog.checkBoxPreview, SIGNAL(toggled(bool)), SLOT(enablePreviewToggled(bool))); connect(d->uiFilterDialog.filterSelection, SIGNAL(configurationChanged()), SLOT(filterSelectionChanged())); connect(this, SIGNAL(accepted()), SLOT(slotOnAccept())); connect(this, SIGNAL(rejected()), SLOT(slotOnReject())); KConfigGroup group( KSharedConfig::openConfig(), "filterdialog"); d->uiFilterDialog.checkBoxPreview->setChecked(group.readEntry("showPreview", true)); }
KisFilterDialog::KisFilterDialog(KisView2 *view, KisNodeSP node, KisImageWSP image, KisSelectionSP selection) : QDialog(view), d(new Private) { setModal(false); d->uiFilterDialog.setupUi(this); d->node = node; d->image = image; d->view = view; d->mask = new KisFilterMask(); d->mask->initSelection(selection, dynamic_cast<KisLayer*>(node.data())); d->uiFilterDialog.filterSelection->setView(view); d->uiFilterDialog.filterSelection->showFilterGallery(KisConfig().showFilterGallery()); if (d->node->inherits("KisLayer")) { qobject_cast<KisLayer*>(d->node.data())->setPreviewMask(d->mask); d->uiFilterDialog.pushButtonCreateMaskEffect->show(); d->uiFilterDialog.pushButtonCreateMaskEffect->setEnabled(true); connect(d->uiFilterDialog.pushButtonCreateMaskEffect, SIGNAL(pressed()), SLOT(createMask())); } else { d->uiFilterDialog.pushButtonCreateMaskEffect->hide(); } d->uiFilterDialog.pushButtonCreateMaskEffect->hide(); // TODO fixme, understand why the mask isn't created, and then remove that line d->uiFilterDialog.filterSelection->setPaintDevice(d->node->original()); d->uiFilterDialog.pushButtonOk->setGuiItem(KStandardGuiItem::ok()); d->uiFilterDialog.pushButtonCancel->setGuiItem(KStandardGuiItem::cancel()); connect(d->uiFilterDialog.pushButtonOk, SIGNAL(pressed()), SLOT(apply())); connect(d->uiFilterDialog.pushButtonOk, SIGNAL(pressed()), SLOT(accept())); connect(d->uiFilterDialog.pushButtonCancel, SIGNAL(pressed()), SLOT(reject())); connect(d->uiFilterDialog.checkBoxPreview, SIGNAL(stateChanged(int)), SLOT(previewCheckBoxChange(int))); connect(d->uiFilterDialog.filterSelection, SIGNAL(configurationChanged()), SLOT(updatePreview())); connect(this, SIGNAL(finished(int)), SLOT(close())); KConfigGroup group(KGlobal::config(), "filterdialog"); d->uiFilterDialog.checkBoxPreview->setChecked(group.readEntry("showPreview", true)); }
KisImportExportFilter::ConversionStatus KisHeightMapExport::convert(const QByteArray& from, const QByteArray& to) { dbgFile << "HeightMap export! From:" << from << ", To:" << to; if (from != "application/x-krita") return KisImportExportFilter::NotImplemented; KisDocument *inputDoc = inputDocument(); QString filename = outputFile(); if (!inputDoc) return KisImportExportFilter::NoDocumentCreated; if (filename.isEmpty()) return KisImportExportFilter::FileNotFound; KisImageWSP image = inputDoc->image(); Q_CHECK_PTR(image); if (inputDoc->image()->width() != inputDoc->image()->height()) { inputDoc->setErrorMessage(i18n("Cannot export this image to a heightmap: it is not square")); return KisImportExportFilter::WrongFormat; } if (inputDoc->image()->colorSpace()->colorModelId() != GrayAColorModelID) { inputDoc->setErrorMessage(i18n("Cannot export this image to a heightmap: it is not grayscale")); return KisImportExportFilter::WrongFormat; } KoDialog* kdb = new KoDialog(0); kdb->setWindowTitle(i18n("HeightMap Export Options")); kdb->setButtons(KoDialog::Ok | KoDialog::Cancel); Ui::WdgOptionsHeightMap optionsHeightMap; QWidget* wdg = new QWidget(kdb); optionsHeightMap.setupUi(wdg); kdb->setMainWidget(wdg); QApplication::restoreOverrideCursor(); QString filterConfig = KisConfig().exportConfiguration("HeightMap"); KisPropertiesConfiguration cfg; cfg.fromXML(filterConfig); optionsHeightMap.intSize->setValue(image->width()); int endianness = cfg.getInt("endianness", 0); QDataStream::ByteOrder bo = QDataStream::LittleEndian; optionsHeightMap.radioPC->setChecked(true); if (endianness == 0) { bo = QDataStream::BigEndian; optionsHeightMap.radioMac->setChecked(true); } if (!getBatchMode()) { if (kdb->exec() == QDialog::Rejected) { return KisImportExportFilter::UserCancelled; } } if (optionsHeightMap.radioMac->isChecked()) { cfg.setProperty("endianness", 0); bo = QDataStream::BigEndian; } else { cfg.setProperty("endianness", 1); bo = QDataStream::LittleEndian; } KisConfig().setExportConfiguration("HeightMap", cfg); bool downscale = false; if (to == "image/x-r8" && image->colorSpace()->colorDepthId() == Integer16BitsColorDepthID) { downscale = (QMessageBox::question(0, i18nc("@title:window", "Downscale Image"), i18n("You specified the .r8 extension for a 16 bit/channel image. Do you want to save as 8 bit? Your image data will not be changed."), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes); } // the image must be locked at the higher levels KIS_SAFE_ASSERT_RECOVER_NOOP(image->locked()); KisPaintDeviceSP pd = new KisPaintDevice(*image->projection()); QFile f(filename); f.open(QIODevice::WriteOnly); QDataStream s(&f); s.setByteOrder(bo); KisRandomConstAccessorSP it = pd->createRandomConstAccessorNG(0, 0); bool r16 = ((image->colorSpace()->colorDepthId() == Integer16BitsColorDepthID) && !downscale); for (int i = 0; i < image->height(); ++i) { for (int j = 0; j < image->width(); ++j) { it->moveTo(i, j); if (r16) { s << KoGrayU16Traits::gray(const_cast<quint8*>(it->rawDataConst())); } else { s << KoGrayU8Traits::gray(const_cast<quint8*>(it->rawDataConst())); } } } f.close(); return KisImportExportFilter::OK; }
void KisPaintOpPresetsChooserPopup::slotThumbnailMode() { KisConfig().setPresetChooserViewMode(KisPresetChooser::THUMBNAIL); m_d->uiWdgPaintOpPresets.wdgPresetChooser->setViewMode(KisPresetChooser::THUMBNAIL); }
KisPaintOpPresetsChooserPopup::~KisPaintOpPresetsChooserPopup() { KisConfig().setPresetShowAllMode(m_d->uiWdgPaintOpPresets.showAllCheckBox->isChecked()); delete m_d; }
void KisPaintOpPresetsChooserPopup::slotDetailMode() { KisConfig().setPresetChooserViewMode(KisPresetChooser::DETAIL); m_d->uiWdgPaintOpPresets.wdgPresetChooser->setViewMode(KisPresetChooser::DETAIL); }
bool KisNodeDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { if ((event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick) && (index.flags() & Qt::ItemIsEnabled)) { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); const QRect iconsRect_ = iconsRect(option, index).translated(option.rect.topLeft()); if (iconsRect_.isValid() && iconsRect_.contains(mouseEvent->pos())) { // Avoid conflicts with context menu events if (!(mouseEvent->buttons() & Qt::LeftButton)) { return false; } const int iconWidth = option.decorationSize.width(); int xPos = mouseEvent->pos().x() - iconsRect_.left(); if (xPos % (iconWidth + d->margin) < iconWidth) { //it's on an icon, not a margin Model::PropertyList propertyList = index.data(Model::PropertiesRole).value<Model::PropertyList>(); int clickedProperty = -1; // Discover which of all properties was clicked for (int i = 0; i < propertyList.count(); ++i) { if (propertyList[i].isMutable) { xPos -= iconWidth + d->margin; } ++clickedProperty; if (xPos < 0) break; } // Using Ctrl+click to enter stasis if (mouseEvent->modifiers() == Qt::ControlModifier && propertyList[clickedProperty].canHaveStasis) { // STEP 0: Prepare to Enter or Leave control key stasis quint16 numberOfLeaves = model->rowCount(index.parent()); QModelIndex eachItem; // STEP 1: Go. if (propertyList[clickedProperty].isInStasis == false) { // Enter /* Make every leaf of this node go State = False, saving the old property value to stateInStasis */ for (quint16 i = 0; i < numberOfLeaves; ++i) { // Foreach leaf in the node (index.parent()) eachItem = model->index(i, 0, index.parent()); // The entire property list has to be altered because model->setData cannot set individual properties Model::PropertyList eachPropertyList = eachItem.data(Model::PropertiesRole).value<Model::PropertyList>(); eachPropertyList[clickedProperty].stateInStasis = eachPropertyList[clickedProperty].state.toBool(); eachPropertyList[clickedProperty].state = false; eachPropertyList[clickedProperty].isInStasis = true; model->setData(eachItem, QVariant::fromValue(eachPropertyList), Model::PropertiesRole); } /* Now set the current node's clickedProperty back to True, to save the user time (obviously, if the user is clicking one item with ctrl+click, that item should have a True property, value while the others are in stasis and set to False) */ // First refresh propertyList, otherwise old data will be saved back causing bugs propertyList = index.data(Model::PropertiesRole).value<Model::PropertyList>(); propertyList[clickedProperty].state = true; model->setData(index, QVariant::fromValue(propertyList), Model::PropertiesRole); } else { // Leave /* Make every leaf of this node go State = stateInStasis */ for (quint16 i = 0; i < numberOfLeaves; ++i) { eachItem = model->index(i, 0, index.parent()); // The entire property list has to be altered because model->setData cannot set individual properties Model::PropertyList eachPropertyList = eachItem.data(Model::PropertiesRole).value<Model::PropertyList>(); eachPropertyList[clickedProperty].state = eachPropertyList[clickedProperty].stateInStasis; eachPropertyList[clickedProperty].isInStasis = false; model->setData(eachItem, QVariant::fromValue(eachPropertyList), Model::PropertiesRole); } } } else { propertyList[clickedProperty].state = !propertyList[clickedProperty].state.toBool(); model->setData(index, QVariant::fromValue(propertyList), Model::PropertiesRole); } } return true; } if (mouseEvent->button() == Qt::LeftButton && mouseEvent->modifiers() == Qt::AltModifier) { d->view->setCurrentIndex(index); model->setData(index, true, Model::AlternateActiveRole); return true; } if (mouseEvent->button() != Qt::LeftButton) { d->view->setCurrentIndex(index); return false; } } else if (event->type() == QEvent::ToolTip) { if (!KisConfig().hidePopups()) { QHelpEvent *helpEvent = static_cast<QHelpEvent*>(event); d->tip.showTip(d->view, helpEvent->pos(), option, index); } return true; } else if (event->type() == QEvent::Leave) { d->tip.hide(); } return false; }