Skip to content
This repository has been archived by the owner on May 30, 2019. It is now read-only.

Commit

Permalink
Validate property editors.
Browse files Browse the repository at this point in the history
  • Loading branch information
till213 committed Feb 11, 2011
1 parent e40ff7d commit 2aea858
Show file tree
Hide file tree
Showing 19 changed files with 287 additions and 30 deletions.
6 changes: 4 additions & 2 deletions src/Kernel/Sources.pri
Expand Up @@ -25,7 +25,8 @@ HEADERS += $$PWD/src/KernelLib.h \
$$PWD/src/Dialogs/ReflectionPropertiesWidget.h \
$$PWD/src/Dialogs/FilePathModelPropertiesDialog.h \
$$PWD/src/Dialogs/FilePathModelPropertiesWidget.h \
$$PWD/src/Dialogs/ImageModelPropertiesDialog.h
$$PWD/src/Dialogs/ImageModelPropertiesDialog.h \
src/Dialogs/PropertyValidatorWidget.h

SOURCES += $$PWD/src/ExportImage.cpp \
$$PWD/src/Reflection.cpp \
Expand All @@ -45,7 +46,8 @@ SOURCES += $$PWD/src/ExportImage.cpp \
$$PWD/src/Dialogs/ReflectionPropertiesWidget.cpp \
$$PWD/src/Dialogs/FilePathModelPropertiesDialog.cpp \
$$PWD/src/Dialogs/FilePathModelPropertiesWidget.cpp \
$$PWD/src/Dialogs/ImageModelPropertiesDialog.cpp
$$PWD/src/Dialogs/ImageModelPropertiesDialog.cpp \
src/Dialogs/PropertyValidatorWidget.cpp

FORMS += $$PWD/ui/ScreenieModelPropertiesDialog.ui \
$$PWD/ui/GeometryPropertiesWidget.ui \
Expand Down
10 changes: 9 additions & 1 deletion src/Kernel/src/Dialogs/FilePathModelPropertiesWidget.cpp
Expand Up @@ -20,13 +20,15 @@

#include <QtCore/QFileInfo>
#include <QtCore/QDir>
#include <QtCore/QFileInfo>
#include <QtGui/QWidget>
#include <QtGui/QFileDialog>

#include "../../../Utils/src/FileUtils.h"
#include "../../../Model/src/ScreenieFilePathModel.h"
#include "../ScreenieControl.h"
#include "FilePathModelPropertiesWidget.h"
#include "PropertyValidatorWidget.h"
#include "ui_FilePathModelPropertiesWidget.h"

class FilePathModelPropertiesWidgetPrivate
Expand All @@ -44,7 +46,7 @@ class FilePathModelPropertiesWidgetPrivate
// public

FilePathModelPropertiesWidget::FilePathModelPropertiesWidget(ScreenieFilePathModel &filePathModel, ScreenieControl &screenieControl, QWidget *parent) :
QWidget(parent),
PropertyValidatorWidget(parent),
ui(new Ui::FilePathModelPropertiesWidget),
d(new FilePathModelPropertiesWidgetPrivate(filePathModel, screenieControl))
{
Expand Down Expand Up @@ -81,6 +83,12 @@ void FilePathModelPropertiesWidget::on_filePathLineEdit_editingFinished()
{
QString filePath = ui->filePathLineEdit->text();
d->screenieControl.setFilePath(filePath, &d->screenieFilePathModel);
QFileInfo fileInfo(filePath);
if (fileInfo.exists() && fileInfo.isReadable()) {
validate(*ui->filePathLineEdit, true);
} else {
validate(*ui->filePathLineEdit, false);
}
}

void FilePathModelPropertiesWidget::on_filePathPushButton_clicked()
Expand Down
7 changes: 4 additions & 3 deletions src/Kernel/src/Dialogs/FilePathModelPropertiesWidget.h
Expand Up @@ -24,6 +24,8 @@
#include <QtCore/QString>
#include <QtGui/QWidget>

#include "PropertyValidatorWidget.h"

class ScreenieFilePathModel;
class ScreenieControl;
class FilePathModelPropertiesWidgetPrivate;
Expand All @@ -32,13 +34,12 @@ namespace Ui {
class FilePathModelPropertiesWidget;
}

class FilePathModelPropertiesWidget : public QWidget
class FilePathModelPropertiesWidget : public PropertyValidatorWidget
{
Q_OBJECT

public:
FilePathModelPropertiesWidget(ScreenieFilePathModel &filePathModel, ScreenieControl &screenieControl, QWidget *parent = 0);
~FilePathModelPropertiesWidget();
virtual ~FilePathModelPropertiesWidget();

private:
Ui::FilePathModelPropertiesWidget *ui;
Expand Down
21 changes: 18 additions & 3 deletions src/Kernel/src/Dialogs/GeometryPropertiesWidget.cpp
Expand Up @@ -19,12 +19,16 @@
*/

#include <QtCore/QString>
#include <QtGui/QDoubleValidator>
#include <QtGui/QIntValidator>
#include <QtGui/QSlider>
#include <QtGui/QLineEdit>

#include "../../../Model/src/ScreenieModelInterface.h"
#include "../../../Model/src/SceneLimits.h"
#include "../ScreenieControl.h"
#include "GeometryPropertiesWidget.h"
#include "PropertyValidatorWidget.h"
#include "ui_GeometryPropertiesWidget.h"

class GeometryPropertiesWidgetPrivate
Expand All @@ -42,7 +46,7 @@ class GeometryPropertiesWidgetPrivate
// public

GeometryPropertiesWidget::GeometryPropertiesWidget(ScreenieModelInterface &screenieModel, ScreenieControl &screenieControl, QWidget *parent) :
QWidget(parent),
PropertyValidatorWidget(parent),
ui(new Ui::GeometryPropertiesWidget),
d(new GeometryPropertiesWidgetPrivate(screenieModel, screenieControl))
{
Expand All @@ -65,7 +69,14 @@ GeometryPropertiesWidget::~GeometryPropertiesWidget()

void GeometryPropertiesWidget::initializeUi()
{
ui->distanceSlider->setMaximum(ScreenieModelInterface::MaxDistance);
ui->distanceSlider->setMaximum(SceneLimits::MinDistance);
ui->distanceSlider->setMaximum(SceneLimits::MaxDistance);
QDoubleValidator *doubleValidator = new QDoubleValidator(this);
QIntValidator *integerValidator = new QIntValidator(this);
ui->positionXLineEdit->setValidator(doubleValidator);
ui->positionYLineEdit->setValidator(doubleValidator);
ui->rotationLineEdit->setValidator(integerValidator);
ui->distanceLineEdit->setValidator(doubleValidator);
}

void GeometryPropertiesWidget::frenchConnection()
Expand All @@ -88,6 +99,7 @@ void GeometryPropertiesWidget::updateUi()
ui->positionXLineEdit->setText(QString::number(x));
ui->positionYLineEdit->setText(QString::number(y));
ui->distanceLineEdit->setText(QString::number(z));
validate(*ui->distanceLineEdit, true);
ui->distanceSlider->setValue(z);
int rotation = d->screenieModel.getRotation();
ui->rotationLineEdit->setText(QString::number(rotation));
Expand Down Expand Up @@ -131,8 +143,11 @@ void GeometryPropertiesWidget::on_distanceLineEdit_editingFinished()
{
bool ok;
qreal distance = ui->distanceLineEdit->text().toFloat(&ok);
if (ok) {
if (ok && distance >= 0.0 && distance <= SceneLimits::MaxDistance) {
d->screenieControl.setDistance(distance, &d->screenieModel);
validate(*ui->distanceLineEdit, true);
} else {
validate(*ui->distanceLineEdit, false);
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/Kernel/src/Dialogs/GeometryPropertiesWidget.h
Expand Up @@ -23,6 +23,8 @@

#include <QtGui/QWidget>

#include "PropertyValidatorWidget.h"

class ScreenieModelInterface;
class ScreenieControl;
class GeometryPropertiesWidgetPrivate;
Expand All @@ -31,7 +33,7 @@ namespace Ui {
class GeometryPropertiesWidget;
}

class GeometryPropertiesWidget : public QWidget
class GeometryPropertiesWidget : public PropertyValidatorWidget
{
Q_OBJECT
public:
Expand Down
59 changes: 59 additions & 0 deletions src/Kernel/src/Dialogs/PropertyValidatorWidget.cpp
@@ -0,0 +1,59 @@
/* This file is part of the Screenie project.
Screenie is a fancy screenshot composer.
Copyright (C) 2008 Ariya Hidayat <ariya.hidayat@gmail.com>
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.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

#include <QtGui/QPalette>
#include <QtGui/QWidget>

#include "PropertyValidatorWidget.h"

class PropertyValidatorWidgetPrivate
{
public:
PropertyValidatorWidgetPrivate()
{
validPalette.setColor(QPalette::Text, Qt::black);
invalidPalette.setColor(QPalette::Text, Qt::red);
}

QPalette validPalette;
QPalette invalidPalette;
};

// public

PropertyValidatorWidget::PropertyValidatorWidget(QWidget *parent) :
QWidget(parent),
d(new PropertyValidatorWidgetPrivate())
{
}

PropertyValidatorWidget::~PropertyValidatorWidget()
{
delete d;
}

void PropertyValidatorWidget::validate(QWidget &widget, bool valid)
{
if (valid) {
widget.setPalette(d->validPalette);
} else {
widget.setPalette(d->invalidPalette);
}
}
46 changes: 46 additions & 0 deletions src/Kernel/src/Dialogs/PropertyValidatorWidget.h
@@ -0,0 +1,46 @@
/* This file is part of the Screenie project.
Screenie is a fancy screenshot composer.
Copyright (C) 2008 Ariya Hidayat <ariya.hidayat@gmail.com>
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.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

#ifndef PROPERTYVALIDATORWIDGET_H
#define PROPERTYVALIDATORWIDGET_H

#include <QtGui/QWidget>

class PropertyValidatorWidgetPrivate;

/*!
* Base class for property editor widgets. Colours the edit widgets
* according to their validation state.
*/
class PropertyValidatorWidget : public QWidget
{
Q_OBJECT
public:
explicit PropertyValidatorWidget(QWidget *parent = 0);
virtual ~PropertyValidatorWidget();

protected:
void validate(QWidget &widget, bool valid);

private:
PropertyValidatorWidgetPrivate *d;
};

#endif // PROPERTYVALIDATORWIDGET_H
28 changes: 25 additions & 3 deletions src/Kernel/src/Dialogs/ReflectionPropertiesWidget.cpp
Expand Up @@ -22,8 +22,10 @@
#include <QtGui/QWidget>
#include <QtGui/QSlider>
#include <QtGui/QLineEdit>
#include <QtGui/QIntValidator>

#include "../../../Model/src/ScreenieModelInterface.h"
#include "../../../Model/src/SceneLimits.h"
#include "../ScreenieControl.h"
#include "ReflectionPropertiesWidget.h"
#include "ui_ReflectionPropertiesWidget.h"
Expand All @@ -43,11 +45,12 @@ class ReflectionPropertiesWidgetPrivate
// public

ReflectionPropertiesWidget::ReflectionPropertiesWidget(ScreenieModelInterface &screenieModel, ScreenieControl &screenieControl, QWidget *parent) :
QWidget(parent),
PropertyValidatorWidget(parent),
ui(new Ui::ReflectionPropertiesWidget),
d(new ReflectionPropertiesWidgetPrivate(screenieModel, screenieControl))
{
ui->setupUi(this);
initializeUi();
updateUi();
frenchConnection();
}
Expand All @@ -63,6 +66,17 @@ ReflectionPropertiesWidget::~ReflectionPropertiesWidget()

// private

void ReflectionPropertiesWidget::initializeUi()
{
QIntValidator *integerValidator = new QIntValidator(this);
ui->offsetSlider->setMinimum(SceneLimits::MinReflectionOffset);
ui->offsetSlider->setMaximum(SceneLimits::MaxReflectionOffset);
ui->opacitySlider->setMinimum(SceneLimits::MinReflectionOpacity);
ui->opacitySlider->setMaximum(SceneLimits::MaxReflectionOpacity);
ui->offsetLineEdit->setValidator(integerValidator);
ui->opacityLineEdit->setValidator(integerValidator);
}

void ReflectionPropertiesWidget::frenchConnection()
{
connect(&d->screenieModel, SIGNAL(reflectionChanged()),
Expand All @@ -78,11 +92,13 @@ void ReflectionPropertiesWidget::updateUi()
int reflectionOffset = d->screenieModel.getReflectionOffset();
ui->offsetLineEdit->setText(QString::number(reflectionOffset));
ui->offsetLineEdit->setEnabled(enableReflection);
validate(*ui->offsetLineEdit, true);
ui->offsetSlider->setValue(reflectionOffset);
ui->offsetSlider->setEnabled(enableReflection);
int reflectionOpacity = d->screenieModel.getReflectionOpacity();
ui->opacityLineEdit->setText(QString::number(reflectionOpacity));
ui->opacityLineEdit->setEnabled(enableReflection);
validate(*ui->opacityLineEdit, true);
ui->opacitySlider->setValue(reflectionOpacity);
ui->opacitySlider->setEnabled(enableReflection);
}
Expand All @@ -102,8 +118,11 @@ void ReflectionPropertiesWidget::on_offsetLineEdit_editingFinished()
{
bool ok;
int offset = ui->offsetLineEdit->text().toInt(&ok);
if (ok) {
if (ok && offset >= SceneLimits::MinReflectionOffset && offset <= SceneLimits::MaxReflectionOffset) {
d->screenieControl.setReflectionOffset(offset, &d->screenieModel);
validate(*ui->offsetLineEdit, true);
} else {
validate(*ui->offsetLineEdit, false);
}
}

Expand All @@ -116,8 +135,11 @@ void ReflectionPropertiesWidget::on_opacityLineEdit_editingFinished()
{
bool ok;
int opacity = ui->opacityLineEdit->text().toInt(&ok);
if (ok) {
if (ok && opacity >= SceneLimits::MinReflectionOpacity && opacity <= SceneLimits::MaxReflectionOpacity) {
d->screenieControl.setReflectionOpacity(opacity, &d->screenieModel);
validate(*ui->opacityLineEdit, true);
} else {
validate(*ui->opacityLineEdit, false);
}
}

4 changes: 3 additions & 1 deletion src/Kernel/src/Dialogs/ReflectionPropertiesWidget.h
Expand Up @@ -23,6 +23,8 @@

#include <QtGui/QWidget>

#include "PropertyValidatorWidget.h"

class ScreenieModelInterface;
class ScreenieControl;
class ReflectionPropertiesWidgetPrivate;
Expand All @@ -31,7 +33,7 @@ namespace Ui {
class ReflectionPropertiesWidget;
}

class ReflectionPropertiesWidget : public QWidget
class ReflectionPropertiesWidget : public PropertyValidatorWidget
{
Q_OBJECT
public:
Expand Down

0 comments on commit 2aea858

Please sign in to comment.