diff --git a/utilities/imageeditor/tools/enhance/healingclonetool.cpp b/utilities/imageeditor/tools/enhance/healingclonetool.cpp index 53c140bdd9..f356e851a6 100644 --- a/utilities/imageeditor/tools/enhance/healingclonetool.cpp +++ b/utilities/imageeditor/tools/enhance/healingclonetool.cpp @@ -1,206 +1,206 @@ #include "healingclonetool.h" // Qt includes #include #include #include #include #include // KDE includes #include #include // Local includes #include "dexpanderbox.h" #include "dnuminput.h" #include "editortoolsettings.h" #include "imageiface.h" #include "imageguidewidget.h" #include "imagebrushguidewidget.h" namespace Digikam { class HealingCloneTool::Private { public: Private() : radiusInput(0), previewWidget(0), gboxSettings(0) { } static const QString configGroupName; static const QString configRadiusAdjustmentEntry; static const QString configBlurAdjustmentEntry; DIntNumInput* radiusInput; DDoubleNumInput* blurPercent; ImageBrushGuideWidget* previewWidget; EditorToolSettings* gboxSettings; QPoint sourcePoint; QPoint destinationStartPoint; QPushButton* src; DImg currentImg; }; const QString HealingCloneTool::Private::configGroupName(QLatin1String("Healing Clone Tool")); const QString HealingCloneTool::Private::configRadiusAdjustmentEntry(QLatin1String("RadiusAdjustment")); const QString HealingCloneTool::Private::configBlurAdjustmentEntry(QLatin1String("BlurAdjustment")); // -------------------------------------------------------- HealingCloneTool::HealingCloneTool(QObject * const parent) : EditorTool(parent), d(new Private) { setObjectName(QLatin1String("healing clone")); setToolName(i18n("Healing Clone Tool")); setToolIcon(QIcon::fromTheme(QLatin1String("healimage"))); setToolHelp(QLatin1String("healingclonetool.anchor")); d->gboxSettings = new EditorToolSettings; d->previewWidget = new ImageBrushGuideWidget(0, true, ImageGuideWidget::PickColorMode, Qt::red); setToolView(d->previewWidget); setPreviewModeMask(PreviewToolBar::PreviewTargetImage); // -------------------------------------------------------- QLabel* const label = new QLabel(i18n("Brush Radius:")); d->radiusInput = new DIntNumInput(); d->radiusInput->setRange(0, 50, 1); d->radiusInput->setDefaultValue(0); d->radiusInput->setWhatsThis(i18n("A radius of 0 has no effect, " "1 and above determine the brush radius " "that determines the size of parts copied in the image.")); // -------------------------------------------------------- QLabel* const label2 = new QLabel(i18n("Radial Blur Percent:")); d->blurPercent = new DDoubleNumInput(); d->blurPercent->setRange(0,100, 0.1); d->blurPercent->setDefaultValue(0); - d->blurPercent->setWhatsThis(i18n("A percent of 0 has no effect, and the prush just copies " - "above than 0 represents a ratio mixing" + d->blurPercent->setWhatsThis(i18n("A percent of 0 has no effect, values " + "above represent a ratio of mixing" " the destination color with source.")); // -------------------------------------------------------- QLabel* const label_src = new QLabel(i18n("Source:")); d->src = new QPushButton(i18n("click to set/unset"), d->gboxSettings->plainPage()); // -------------------------------------------------------- const int spacing = d->gboxSettings->spacingHint(); QGridLayout* const grid = new QGridLayout( ); grid->addWidget(label_src, 1, 0, 1, 2); grid->addWidget(d->src, 2, 0, 1, 2); grid->addWidget(new DLineWidget(Qt::Horizontal, d->gboxSettings->plainPage()), 3, 0, 1, 2); grid->addWidget(label, 4, 0, 1, 2); grid->addWidget(d->radiusInput, 5, 0, 1, 2); grid->addWidget(label2, 6, 0, 1, 2); grid->addWidget(d->blurPercent, 7, 0, 1, 2); grid->setRowStretch(8, 8); grid->setContentsMargins(spacing, spacing, spacing, spacing); grid->setSpacing(spacing); d->gboxSettings->plainPage()->setLayout(grid); // -------------------------------------------------------- setPreviewModeMask(PreviewToolBar::PreviewTargetImage); setToolSettings(d->gboxSettings); setToolView(d->previewWidget); // -------------------------------------------------------- d->previewWidget->setSrcSet(false); connect(d->radiusInput, SIGNAL(valueChanged(int)), this, SLOT(slotRadiusChanged(int))); connect(d->src, SIGNAL(clicked(bool)), d->previewWidget, SLOT(slotSrcSet())); connect(d->previewWidget, SIGNAL(signalClone(QPoint&,QPoint&)), this, SLOT(slotReplace(QPoint&,QPoint&))); connect(d->previewWidget, SIGNAL(signalResized()), this, SLOT(slotResized())); } HealingCloneTool::~HealingCloneTool() { delete d; } void HealingCloneTool::readSettings() { KSharedConfig::Ptr config = KSharedConfig::openConfig(); KConfigGroup group = config->group(d->configGroupName); d->radiusInput->setValue(group.readEntry(d->configRadiusAdjustmentEntry, d->radiusInput->defaultValue())); d->blurPercent->setValue(group.readEntry(d->configBlurAdjustmentEntry, d->blurPercent->defaultValue())); } void HealingCloneTool::writeSettings() { KSharedConfig::Ptr config = KSharedConfig::openConfig(); KConfigGroup group = config->group(d->configGroupName); group.writeEntry(d->configRadiusAdjustmentEntry, d->radiusInput->value()); group.writeEntry(d->configBlurAdjustmentEntry, d->blurPercent->value()); config->sync(); } void HealingCloneTool::finalRendering() { ImageIface iface; DImg dest = d->previewWidget->imageIface()->preview(); FilterAction action(QLatin1String("digikam:healingCloneTool"), 1); iface.setOriginal(i18n("healingClone"), action, dest); } void HealingCloneTool::slotResetSettings() { d->radiusInput->blockSignals(true); d->radiusInput->slotReset(); d->radiusInput->blockSignals(false); } void HealingCloneTool::slotResized() { toolView()->update(); } void HealingCloneTool::slotReplace(QPoint &srcPoint, QPoint &dstPoint) { ImageIface* const iface = d->previewWidget->imageIface(); DImg * const current = iface->previewReference(); clone(current, srcPoint, dstPoint, d->radiusInput->value()); d->previewWidget->updatePreview(); } void HealingCloneTool::slotRadiusChanged(int r) { d->previewWidget->setMaskPenSize(r); } void HealingCloneTool::clone(DImg * const img, QPoint &srcPoint, QPoint &dstPoint, int radius) { double blurPercent = d->blurPercent->value()/100; for(int i = -1* radius; i < radius; i++){ for(int j = -1* radius; j < radius; j++){ int rPercent = (i*i) + (j*j); if (rPercent < (radius * radius)) // Check for inside the circle { double rP = blurPercent * rPercent/(radius * radius); DColor cSrc = img->getPixelColor(srcPoint.x()+i, srcPoint.y()+j); DColor cDst = img->getPixelColor(dstPoint.x()+i, dstPoint.y()+j); cSrc.multiply(1 - rP); cDst.multiply(rP); cSrc.blendAdd(cDst); img->setPixelColor(dstPoint.x()+i, dstPoint.y()+j, cSrc); } } } } } // namespace Digikam diff --git a/utilities/mediaserver/app/server/mediaserver_window.ui b/utilities/mediaserver/app/server/mediaserver_window.ui index 6a31761ac7..9b017cae1b 100644 --- a/utilities/mediaserver/app/server/mediaserver_window.ui +++ b/utilities/mediaserver/app/server/mediaserver_window.ui @@ -1,120 +1,120 @@ MediaServerWindow 0 0 1000 382 360 170 Simple Media Server Test true QAbstractItemView::MultiSelection QAbstractItemView::SelectRows true true 40 true false Recursive Monitored Path QLayout::SetMinimumSize Add Items Delete Selected Directories Qt::RightToLeft Scan recursively true &Add New Root Directory - PushButton + Hide diff --git a/utilities/setup/setupdlnaserver.cpp b/utilities/setup/setupdlnaserver.cpp index e6ca958a10..2fec5e3874 100644 --- a/utilities/setup/setupdlnaserver.cpp +++ b/utilities/setup/setupdlnaserver.cpp @@ -1,150 +1,150 @@ /* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2007-05-11 * Description : setup DLNA Server tab. * * Copyright (C) 2007-2017 by Gilles Caulier * Copyright (C) 2017 by Ahmed Fathy * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ #include "setupdlnaserver.h" // Qt includes #include #include #include #include #include #include #include // KDE includes #include #include // Local includes #include "fullscreensettings.h" #include "dxmlguiwindow.h" namespace Digikam { class SetupDlna::Private { public: Private() : startServerOnStartupCheckBox(0), startInBackgroundCheckBox(0) { } QCheckBox* startServerOnStartupCheckBox; QCheckBox* startInBackgroundCheckBox; static const QString configGroupName; static const QString configstartServerOnStartupCheckBoxEntry; static const QString configstartInBackgroundCheckBoxEntry; }; // -------------------------------------------------------- const QString SetupDlna::Private::configGroupName(QLatin1String("DLNA Settings")); const QString SetupDlna::Private::configstartServerOnStartupCheckBoxEntry(QLatin1String("Start Server On Startup")); const QString SetupDlna::Private::configstartInBackgroundCheckBoxEntry(QLatin1String("Start Server In Background")); SetupDlna::SetupDlna(QWidget* const parent) : QScrollArea(parent), d(new Private) { const int spacing = QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing); QWidget* const panel = new QWidget(viewport()); setWidget(panel); setWidgetResizable(true); QVBoxLayout* const layout = new QVBoxLayout(panel); // -------------------------------------------------------- QGroupBox* const dlnaServerSettingsGroup = new QGroupBox(i18n("Server Options"), panel); QVBoxLayout* const gLayout = new QVBoxLayout(dlnaServerSettingsGroup); d->startServerOnStartupCheckBox = new QCheckBox(i18n("Automatic Start ?")); - d->startServerOnStartupCheckBox->setWhatsThis(i18n("Set this option to start the DLNA server on digikam start")); + d->startServerOnStartupCheckBox->setWhatsThis(i18n("Set this option to start the DLNA server on digiKam start")); gLayout->addWidget(d->startServerOnStartupCheckBox); d->startServerOnStartupCheckBox->setChecked(true); d->startInBackgroundCheckBox = new QCheckBox(i18n("Start In Background ?")); d->startInBackgroundCheckBox->setWhatsThis(i18n("Set this option to start the DLNA server " "In Background without showing the server window")); gLayout->addWidget(d->startInBackgroundCheckBox); gLayout->setContentsMargins(spacing, spacing, spacing, spacing); gLayout->setSpacing(0); layout->addWidget(dlnaServerSettingsGroup); layout->setContentsMargins(QMargins()); layout->setSpacing(spacing); layout->addStretch(); // -------------------------------------------------------- connect(d->startServerOnStartupCheckBox, SIGNAL(toggled(bool)), this, SLOT(slotSettingsChanged())); readSettings(); d->startInBackgroundCheckBox->setEnabled(d->startServerOnStartupCheckBox->isChecked()); // -------------------------------------------------------- } SetupDlna::~SetupDlna() { delete d; } void SetupDlna::readSettings() { KSharedConfig::Ptr config = KSharedConfig::openConfig(); KConfigGroup group = config->group(d->configGroupName); d->startServerOnStartupCheckBox->setChecked(group.readEntry(d->configstartServerOnStartupCheckBoxEntry, false)); d->startInBackgroundCheckBox->setChecked(group.readEntry(d->configstartInBackgroundCheckBoxEntry, false)); } void SetupDlna::applySettings() { KSharedConfig::Ptr config = KSharedConfig::openConfig(); KConfigGroup group = config->group(d->configGroupName); group.writeEntry(d->configstartServerOnStartupCheckBoxEntry, d->startServerOnStartupCheckBox->isChecked()); group.writeEntry(d->configstartInBackgroundCheckBoxEntry, d->startInBackgroundCheckBox->isChecked()); config->sync(); } void SetupDlna::slotSettingsChanged() { d->startInBackgroundCheckBox->setEnabled(d->startServerOnStartupCheckBox->isChecked()); } } // namespace Digikam