diff --git a/src/declarativeimports/plasmacomponents/fullscreensheet.cpp b/src/declarativeimports/plasmacomponents/fullscreensheet.cpp deleted file mode 100644 index fd739dfa2..000000000 --- a/src/declarativeimports/plasmacomponents/fullscreensheet.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/*************************************************************************** - * Copyright 2012 Marco Martin * - * * - * 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 of the License, 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 "fullscreensheet.h" - -#include -#include -#include - -#include - -FullScreenSheet::FullScreenSheet(QDeclarativeItem *parent) - : FullScreenWindow(parent) -{ - init("Sheet"); - - view()->setGeometry(QApplication::desktop()->availableGeometry()); - - if (mainItem()) { - connect(mainItem(), SIGNAL(titleChanged()), - this, SIGNAL(titleChanged())); - connect(mainItem(), SIGNAL(acceptButtonChanged()), - this, SIGNAL(acceptButtonChanged())); - connect(mainItem(), SIGNAL(rejectButtonChanged()), - this, SIGNAL(rejectButtonChanged())); - connect(mainItem(), SIGNAL(acceptButtonTextChanged()), - this, SIGNAL(acceptButtonTextChanged())); - connect(mainItem(), SIGNAL(rejectButtonTextChanged()), - this, SIGNAL(rejectButtonTextChanged())); - } -} - -FullScreenSheet::~FullScreenSheet() -{ -} - -QString FullScreenSheet::title() const -{ - if (mainItem()) { - return mainItem()->property("title").toString(); - } else { - return 0; - } -} - -void FullScreenSheet::setTitle(const QString &text) -{ - if (mainItem()) { - mainItem()->setProperty("title", QVariant::fromValue(text)); - } -} - -QDeclarativeItem *FullScreenSheet::acceptButton() const -{ - if (mainItem()) { - return mainItem()->property("acceptButton").value(); - } else { - return 0; - } -} - -void FullScreenSheet::setAcceptButton(QDeclarativeItem *button) -{ - if (mainItem()) { - mainItem()->setProperty("acceptButton", QVariant::fromValue(button)); - } -} - -QDeclarativeItem *FullScreenSheet::rejectButton() const -{ - if (mainItem()) { - return mainItem()->property("rejectButton").value(); - } else { - return 0; - } -} - -void FullScreenSheet::setRejectButton(QDeclarativeItem *button) -{ - if (mainItem()) { - mainItem()->setProperty("rejectButton", QVariant::fromValue(button)); - } -} - -QString FullScreenSheet::acceptButtonText() const -{ - if (mainItem()) { - return mainItem()->property("acceptButtonText").toString(); - } else { - return 0; - } -} - -void FullScreenSheet::setAcceptButtonText(const QString &text) -{ - if (mainItem()) { - mainItem()->setProperty("acceptButtonText", QVariant::fromValue(text)); - } -} - -QString FullScreenSheet::rejectButtonText() const -{ - if (mainItem()) { - return mainItem()->property("rejectButtonText").toString(); - } else { - return 0; - } -} - -void FullScreenSheet::setRejectButtonText(const QString &text) -{ - if (mainItem()) { - mainItem()->setProperty("rejectButtonText", QVariant::fromValue(text)); - } -} - -void FullScreenSheet::open() -{ - if (mainItem()) { - view()->setGeometry(QApplication::desktop()->availableGeometry()); - QMetaObject::invokeMethod(mainItem(), "open"); - } -} - - diff --git a/src/declarativeimports/plasmacomponents/fullscreensheet.h b/src/declarativeimports/plasmacomponents/fullscreensheet.h deleted file mode 100644 index 3a2b283a8..000000000 --- a/src/declarativeimports/plasmacomponents/fullscreensheet.h +++ /dev/null @@ -1,64 +0,0 @@ -/*************************************************************************** - * Copyright 2012 Marco Martin * - * * - * 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 of the License, 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 FULLSCREENSHEET_P -#define FULLSCREENSHEET_P - -#include "fullscreenwindow.h" - -class FullScreenSheet : public FullScreenWindow -{ - Q_OBJECT - Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) - - Q_PROPERTY(QDeclarativeItem *acceptButton READ acceptButton WRITE setAcceptButton NOTIFY acceptButtonChanged) - Q_PROPERTY(QDeclarativeItem *rejectButton READ rejectButton WRITE setRejectButton NOTIFY rejectButtonChanged) - - Q_PROPERTY(QString acceptButtonText READ acceptButtonText WRITE setAcceptButtonText NOTIFY acceptButtonTextChanged) - Q_PROPERTY(QString rejectButtonText READ rejectButtonText WRITE setRejectButtonText NOTIFY rejectButtonTextChanged) - -public: - explicit FullScreenSheet(QDeclarativeItem *parent = nullptr); - ~FullScreenSheet() override; - - QString title() const; - void setTitle(const QString &text); - - QDeclarativeItem *acceptButton() const; - void setAcceptButton(QDeclarativeItem *button); - - QDeclarativeItem *rejectButton() const; - void setRejectButton(QDeclarativeItem *button); - - QString acceptButtonText() const; - void setAcceptButtonText(const QString &text); - - QString rejectButtonText() const; - void setRejectButtonText(const QString &text); - - Q_INVOKABLE void open(); - -Q_SIGNALS: - void titleChanged(); - void acceptButtonChanged(); - void rejectButtonChanged(); - void acceptButtonTextChanged(); - void rejectButtonTextChanged(); -}; - -#endif diff --git a/src/declarativeimports/plasmacomponents/fullscreenwindow.cpp b/src/declarativeimports/plasmacomponents/fullscreenwindow.cpp deleted file mode 100644 index d6fece73f..000000000 --- a/src/declarativeimports/plasmacomponents/fullscreenwindow.cpp +++ /dev/null @@ -1,384 +0,0 @@ -/*************************************************************************** - * Copyright 2012 Marco Martin * - * * - * 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 of the License, 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 "fullscreenwindow.h" -#include "../core/declarativeitemcontainer_p.h" -#include "plasmacomponentsplugin.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include - -uint FullScreenWindow::s_numItems = 0; - -class Background : public QWidget -{ -public: - Background(FullScreenWindow *dialog) - : QWidget(0L), - m_dialog(dialog) - { - setAttribute(Qt::WA_NoSystemBackground); - setAttribute(Qt::WA_TranslucentBackground); - - setWindowFlags(Qt::FramelessWindowHint | Qt::CustomizeWindowHint); - KWindowSystem::setOnAllDesktops(winId(), true); - unsigned long state = NET::Sticky | NET::StaysOnTop | NET::KeepAbove | NET::SkipTaskbar | NET::SkipPager | NET::MaxVert | NET::MaxHoriz; - KWindowSystem::setState(effectiveWinId(), state); - } - - ~Background() - {} - - void paintEvent(QPaintEvent *e) - { - QPainter painter(this); - painter.setCompositionMode(QPainter::CompositionMode_Source); - painter.fillRect(e->rect(), QColor(0, 0, 0, 80)); - } - - void mousePressEvent(QMouseEvent *event) - { - event->accept(); - m_dialog->view()->winId(); - KWindowSystem::forceActiveWindow(m_dialog->view()->winId()); - } - - void mouseReleaseEvent(QMouseEvent *event) - { - if (!m_dialog->view()->geometry().contains(event->globalPos())) { - emit m_dialog->clickedOutside(); - m_dialog->close(); - } - } - -private: - FullScreenWindow *m_dialog; -}; - -FullScreenWindow::FullScreenWindow(QDeclarativeItem *parent) - : QDeclarativeItem(parent), - m_declarativeItemContainer(0) -{ - m_view = new QGraphicsView(); - m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_view->installEventFilter(this); - m_view->setAutoFillBackground(false); - m_view->viewport()->setAutoFillBackground(false); - m_view->setAttribute(Qt::WA_TranslucentBackground); - m_view->setAttribute(Qt::WA_NoSystemBackground); - m_view->viewport()->setAttribute(Qt::WA_NoSystemBackground); - m_view->setCacheMode(QGraphicsView::CacheNone); - m_view->setWindowFlags(Qt::FramelessWindowHint | Qt::CustomizeWindowHint); - m_view->setFrameShape(QFrame::NoFrame); - KWindowSystem::setOnAllDesktops(m_view->winId(), true); - unsigned long state = NET::Sticky | NET::StaysOnTop | NET::KeepAbove | NET::SkipTaskbar | NET::SkipPager; - KWindowSystem::setState(m_view->effectiveWinId(), state); - - m_background = new Background(this); -} - -FullScreenWindow::~FullScreenWindow() -{ - delete m_view; -} - -void FullScreenWindow::init(const QString &componentName) -{ - if (m_rootObject) { - return; - } - - //Try to figure out the path of the dialog component - const QString target = KDeclarative::componentsTarget(); - QString filePath; - if (target != KDeclarative::defaultComponentsTarget()) { - const QString file = "platformimports/" % target % "/org/kde/plasma/components/" % componentName % ".qml"; - filePath = KStandardDirs::locate("module", file); - } - - if (filePath.isEmpty()) { - const QString file = "imports/org/kde/plasma/components/" % componentName % ".qml"; - filePath = KStandardDirs::locate("module", file); - } - - if (filePath.isEmpty()) { - qWarning() << "Component not found:" << componentName; - return; - } - - QDeclarativeEngine *engine = EngineBookKeeping::self()->engine(); - if (!engine) { - qWarning() << "Warning, no QDeclarativeEngines available anymore, should never happen"; - Q_ASSERT(0); - } - QDeclarativeComponent *component = new QDeclarativeComponent(engine, filePath, this); - - QDeclarativeContext *creationContext = component->creationContext(); - m_rootObject = component->create(creationContext); - if (component->status() == QDeclarativeComponent::Error) { - qWarning() << component->errors(); - } - - if (m_rootObject) { - setMainItem(qobject_cast(m_rootObject.data())); - connect(m_rootObject.data(), SIGNAL(statusChanged()), this, SLOT(statusHasChanged())); - connect(m_rootObject.data(), SIGNAL(accepted()), this, SIGNAL(accepted())); - connect(m_rootObject.data(), SIGNAL(rejected()), this, SIGNAL(rejected())); - connect(m_rootObject.data(), SIGNAL(clickedOutside()), this, SIGNAL(clickedOutside())); - } -} - -QGraphicsObject *FullScreenWindow::mainItem() const -{ - return m_mainItem.data(); -} - -void FullScreenWindow::setMainItem(QGraphicsObject *mainItem) -{ - if (m_mainItem.data() != mainItem) { - if (m_mainItem) { - m_mainItem.data()->setParent(mainItem->parent()); - m_mainItem.data()->removeEventFilter(this); - m_mainItem.data()->setY(0); - m_scene = 0; - } - m_mainItem = mainItem; - if (mainItem) { - mainItem->setParentItem(0); - mainItem->setParent(this); - m_scene = mainItem->scene(); - m_view->resize(mainItem->boundingRect().size().toSize()); - mainItem->installEventFilter(this); - } - - //if this is called in Component.onCompleted we have to wait a loop the item is added to a scene - QTimer::singleShot(0, this, SLOT(syncViewToMainItem())); - } -} - -void FullScreenWindow::syncViewToMainItem() -{ - if (!m_mainItem) { - return; - } - - //not have a scene? go up in the hierarchy until we find something with a scene - QGraphicsScene *scene = m_mainItem.data()->scene(); - if (!scene) { - QObject *parent = m_mainItem.data(); - while ((parent = parent->parent())) { - QGraphicsObject *qo = qobject_cast(parent); - if (qo) { - scene = qo->scene(); - - if (scene) { - scene->addItem(m_mainItem.data()); - ++s_numItems; - Plasma::Corona *corona = qobject_cast(scene); - QDeclarativeItem *di = qobject_cast(m_mainItem.data()); - - if (corona && di) { - if (!m_declarativeItemContainer) { - m_declarativeItemContainer = new DeclarativeItemContainer(); - scene->addItem(m_declarativeItemContainer); - corona->addOffscreenWidget(m_declarativeItemContainer); - } - m_declarativeItemContainer->setDeclarativeItem(di); - } else { - m_mainItem.data()->setY(-10000 * s_numItems); - m_mainItem.data()->setY(10000 * s_numItems); - } - break; - } - } - } - } - - if (!scene) { - return; - } - - m_view->setScene(scene); - - QRectF itemGeometry(QPointF(m_mainItem.data()->x(), m_mainItem.data()->y()), - QSizeF(m_mainItem.data()->boundingRect().size())); - if (m_declarativeItemContainer) { - m_view->resize(itemGeometry.size().toSize()); - m_view->setSceneRect(m_declarativeItemContainer->geometry()); - - } else { - QRectF itemGeometry(QPointF(m_mainItem.data()->x(), m_mainItem.data()->y()), - QSizeF(m_mainItem.data()->boundingRect().size())); - m_view->resize(itemGeometry.size().toSize()); - m_view->setSceneRect(itemGeometry); - } - - m_view->move(QApplication::desktop()->availableGeometry().center() - QPoint(m_view->width() / 2, m_view->height() / 2)); -} - -void FullScreenWindow::syncMainItemToView() -{ - if (!m_mainItem) { - return; - } - - m_mainItem.data()->setProperty("width", m_view->width()); - m_mainItem.data()->setProperty("height", m_view->height()); - - if (m_declarativeItemContainer) { - m_declarativeItemContainer->resize(m_view->size()); - m_view->setSceneRect(m_declarativeItemContainer->geometry()); - } else { - QRectF itemGeometry(QPointF(m_mainItem.data()->x(), m_mainItem.data()->y()), - QSizeF(m_mainItem.data()->boundingRect().size())); - m_view->setSceneRect(itemGeometry); - } -} - -bool FullScreenWindow::isVisible() const -{ - return m_view->isVisible(); -} - -void FullScreenWindow::setVisible(const bool visible) -{ - if (m_view->isVisible() != visible) { - m_background->setVisible(visible); - Plasma::WindowEffects::slideWindow(m_view->winId(), Plasma::BottomEdge, 0); - m_view->setVisible(visible); - unsigned long state = NET::Sticky | NET::StaysOnTop | NET::KeepAbove | NET::SkipTaskbar | NET::SkipPager; - KWindowSystem::setState(m_view->effectiveWinId(), state); - KWindowSystem::setState(m_background->effectiveWinId(), state); - if (visible) { - m_view->raise(); - KWindowSystem::forceActiveWindow(m_view->effectiveWinId()); - } - } -} - -QGraphicsView *FullScreenWindow::view() const -{ - return m_view; -} - -QDeclarativeListProperty FullScreenWindow::title() -{ - if (m_rootObject) { - return m_rootObject.data()->property("title").value >(); - } else { - return QDeclarativeListProperty(this, m_dummyTitleElements); - } -} - -QDeclarativeListProperty FullScreenWindow::content() -{ - if (m_rootObject) { - return m_rootObject.data()->property("content").value >(); - } else { - return QDeclarativeListProperty(this, m_dummyContentElements); - } -} - -QDeclarativeListProperty FullScreenWindow::buttons() -{ - if (m_rootObject) { - return m_rootObject.data()->property("buttons").value >(); - } else { - return QDeclarativeListProperty(this, m_dummyButtonsElements); - } -} - -DialogStatus::Status FullScreenWindow::status() const -{ - if (m_rootObject) { - return (DialogStatus::Status)m_rootObject.data()->property("status").toInt(); - } else { - return DialogStatus::Closed; - } -} - -void FullScreenWindow::statusHasChanged() -{ - if (status() == DialogStatus::Closed) { - setVisible(false); - } else { - setVisible(true); - } - emit statusChanged(); -} - -void FullScreenWindow::open() -{ - if (m_rootObject) { - QMetaObject::invokeMethod(m_rootObject.data(), "open"); - } -} - -void FullScreenWindow::accept() -{ - if (m_rootObject) { - QMetaObject::invokeMethod(m_rootObject.data(), "accept"); - } -} - -void FullScreenWindow::reject() -{ - if (m_rootObject) { - QMetaObject::invokeMethod(m_rootObject.data(), "reject"); - } -} - -void FullScreenWindow::close() -{ - if (m_rootObject) { - QMetaObject::invokeMethod(m_rootObject.data(), "close"); - } -} - -bool FullScreenWindow::eventFilter(QObject *watched, QEvent *event) -{ - if (watched == m_mainItem.data() && - (event->type() == QEvent::GraphicsSceneResize)) { - syncViewToMainItem(); - } else if (watched == m_view && - (event->type() == QEvent::Resize)) { - syncMainItemToView(); - } - return false; -} - - diff --git a/src/declarativeimports/plasmacomponents/fullscreenwindow.h b/src/declarativeimports/plasmacomponents/fullscreenwindow.h deleted file mode 100644 index 7bc158b6c..000000000 --- a/src/declarativeimports/plasmacomponents/fullscreenwindow.h +++ /dev/null @@ -1,100 +0,0 @@ -/*************************************************************************** - * Copyright 2012 Marco Martin * - * * - * 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 of the License, 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 FULLSCREENWINDOW_P -#define FULLSCREENWINDOW_P - -#include -#include -#include -#include -#include -#include - -#include "enums.h" - -class QGraphicsObject; -class QGraphicsView; -class QGraphicsScene; -class DeclarativeItemContainer; -class Background; - -class FullScreenWindow : public QDeclarativeItem -{ - Q_OBJECT - - Q_PROPERTY(QDeclarativeListProperty title READ title DESIGNABLE false) - Q_PROPERTY(QDeclarativeListProperty content READ content DESIGNABLE false) - Q_PROPERTY(QDeclarativeListProperty buttons READ buttons DESIGNABLE false) - Q_PROPERTY(DialogStatus::Status status READ status NOTIFY statusChanged) - -public: - explicit FullScreenWindow(QDeclarativeItem *parent = nullptr); - ~FullScreenWindow() override; - - QGraphicsObject *mainItem() const; - void setMainItem(QGraphicsObject *mainItem); - - bool isVisible() const; - void setVisible(const bool visible); - - QGraphicsView *view() const; - - //QML properties - QDeclarativeListProperty title(); - QDeclarativeListProperty content(); - QDeclarativeListProperty buttons(); - DialogStatus::Status status() const; - - Q_INVOKABLE void open(); - Q_INVOKABLE void accept(); - Q_INVOKABLE void reject(); - Q_INVOKABLE void close(); - -Q_SIGNALS: - void accepted(); - void rejected(); - void clickedOutside(); - void statusChanged(); - -private Q_SLOTS: - void syncViewToMainItem(); - void syncMainItemToView(); - void statusHasChanged(); - -protected: - bool eventFilter(QObject *watched, QEvent *event); - void init(const QString &componentName); - -private: - QGraphicsView *m_view; - QPointer m_mainItem; - DeclarativeItemContainer *m_declarativeItemContainer; - QGraphicsScene *m_scene; - QPointer m_rootObject; - static uint s_numItems; - Background *m_background; - - //those only used in case of error, to not make plasma crash - QList m_dummyTitleElements; - QList m_dummyContentElements; - QList m_dummyButtonsElements; - friend class Background; -}; - -#endif