diff --git a/MainWindow.cpp b/MainWindow.cpp index 1a1d9d0..16c565a 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -1532,7 +1532,11 @@ void MainWindow::addPaintItem(uid paintId, const QIcon& icon, const QString& nam // Create paint gui. PaintGui::ptr paintGui; QString paintType = paint->getType(); - if (paintType == "color") + if (paintType == "media") + paintGui = PaintGui::ptr(new MediaGui(paint)); + else if (paintType == "image") + paintGui = PaintGui::ptr(new ImageGui(paint)); + else if (paintType == "color") paintGui = PaintGui::ptr(new ColorGui(paint)); else paintGui = PaintGui::ptr(new PaintGui(paint)); diff --git a/PaintGui.cpp b/PaintGui.cpp index a69c516..feed15b 100644 --- a/PaintGui.cpp +++ b/PaintGui.cpp @@ -68,3 +68,48 @@ void ColorGui::setValue(QtProperty* property, const QVariant& value) { emit valueChanged(_paint); } } + +TextureGui::TextureGui(Paint::ptr paint) : PaintGui(paint) { +} + +ImageGui::ImageGui(Paint::ptr paint) + : TextureGui(paint) +{ + image = std::tr1::static_pointer_cast(paint); + Q_CHECK_PTR(image); + +_imageFileItem = _variantManager->addProperty(QVariant::String, + QObject::tr("Image file")); + +_imageFileItem->setValue(image->getUri()); + +_topItem->addSubProperty(_imageFileItem); +} + +void ImageGui::setValue(QtProperty* property, const QVariant& value) { + if (property == _imageFileItem) { + image->setUri(value.toString()); + emit valueChanged(_paint); + } +} + +MediaGui::MediaGui(Paint::ptr paint) +: TextureGui(paint) +{ + media = std::tr1::static_pointer_cast(paint); + Q_CHECK_PTR(media); + + _mediaFileItem = _variantManager->addProperty(QVariant::String, + QObject::tr("Media file")); + + _mediaFileItem->setValue(media->getUri()); + + _topItem->addSubProperty(_mediaFileItem); +} + +void MediaGui::setValue(QtProperty* property, const QVariant& value) { + if (property == _mediaFileItem) { + media->setUri(value.toString()); + emit valueChanged(_paint); + } +} diff --git a/PaintGui.h b/PaintGui.h index a424a7e..cc8f0a7 100644 --- a/PaintGui.h +++ b/PaintGui.h @@ -76,7 +76,6 @@ class ColorGui : public PaintGui { Q_OBJECT public: - /// Constructor. A paint gui applies to a paint. ColorGui(Paint::ptr paint); virtual ~ColorGui() {} @@ -88,4 +87,45 @@ protected: QtVariantProperty* _colorItem; }; +class TextureGui : public PaintGui { + Q_OBJECT + +public: + TextureGui(Paint::ptr paint); + virtual ~TextureGui() {} + +public slots: + virtual void setValue(QtProperty* property, const QVariant& value) = 0; +}; + +class ImageGui : public TextureGui { + Q_OBJECT + +public: + ImageGui(Paint::ptr paint); + virtual ~ImageGui() {} + +public slots: + virtual void setValue(QtProperty* property, const QVariant& value); + +protected: + std::tr1::shared_ptr image; + QtVariantProperty* _imageFileItem; +}; + +class MediaGui : public TextureGui { + Q_OBJECT + +public: + MediaGui(Paint::ptr paint); + virtual ~MediaGui() {} + +public slots: + virtual void setValue(QtProperty* property, const QVariant& value); + +protected: + std::tr1::shared_ptr media; + QtVariantProperty* _mediaFileItem; +}; + #endif /* PAINTGUI_H_ */