SVN commit 670270 by aseigo: Corona was a View but had lots of model stuff in it; besides being "wrong" this complicated a lot of things like how to get constraint information to the applets. so now Corona is a Scene and the View stuff has been moved to the new CoronaView class. M +1 -0 CMakeLists.txt M +113 -96 corona.cpp M +21 -22 corona.h A coronaview.cpp [License: LGPL (v2)] A coronaview.h [License: LGPL (v2)] M +8 -5 rootwidget.cpp M +2 -2 rootwidget.h --- trunk/KDE/kdebase/workspace/plasma/plasma/CMakeLists.txt #670269:670270 @@ -3,6 +3,7 @@ set(plasma_SRCS controlbox.cpp corona.cpp + coronaview.cpp main.cpp plasmaapp.cpp rootwidget.cpp --- trunk/KDE/kdebase/workspace/plasma/plasma/corona.cpp #670269:670270 @@ -19,27 +19,25 @@ #include "corona.h" -#include -#include -#include +#include #include -#include -#include -#include +#include +#include #include -#include + +#include +#include #include -#include -#include -#include -#include -#include - #include "applet.h" #include "dataengine.h" -#include "svg.h" #include "widgets/vboxlayout.h" + +#ifdef ICON_DEMO +#include "widgets/icon.h" +#endif + +#include "corona.h" #include "plasmaapp.h" using namespace Plasma; @@ -47,34 +45,71 @@ typedef QGraphicsItem* (*loadKaramba)(const KUrl &theme, QGraphicsView *view); } -Corona::Corona(QWidget *parent) - : QGraphicsView(parent), - m_formFactor(Plasma::Planar), - m_location(Plasma::Floating), - m_layout(0) +namespace Plasma { - setFrameShape(QFrame::NoFrame); + +class Corona::Private +{ +public: + Private() + : formFactor(Planar), + location(Floating), + layout(0), + engineExplorerAction(0) + { + } + + Applet::List applets; + FormFactor formFactor; + Location location; + Layout* layout; + QAction *engineExplorerAction; +}; + +Corona::Corona(QObject * parent) + : QGraphicsScene(parent), + d(new Private) +{ + init(); +} + +Corona::Corona(const QRectF & sceneRect, QObject * parent ) + : QGraphicsScene(sceneRect, parent), + d(new Private) +{ + init(); +} + +Corona::Corona(qreal x, qreal y, qreal width, qreal height, QObject * parent) + : QGraphicsScene(x, y, width, height, parent), + d(new Private) +{ + init(); +} + +void Corona::init() +{ /* setBackgroundMode(Qt::NoBackground);*/ - setAutoFillBackground(true); /* QPalette pal = palette(); pal.setBrush(QPalette::Base, Qt::transparent); setPalette(pal);*/ //setViewport(new QGLWidget ( QGLFormat(QGL::StencilBuffer | QGL::AlphaChannel) )); - m_graphicsScene = new QGraphicsScene(rect()); - m_graphicsScene->setItemIndexMethod(QGraphicsScene::NoIndex); - setScene(m_graphicsScene); - setDragMode(QGraphicsView::RubberBandDrag); - setCacheMode(QGraphicsView::CacheBackground); - setInteractive(true); - setAcceptDrops(true); +#ifdef ICON_DEMO + Icon* icon = new Icon(); + icon->setIcon("plasmagik"); + icon->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); + addItem(icon); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - + icon = new Icon(); + icon->setIcon("user-home"); + icon->setSize(64, 64); + icon->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); + addItem(icon); +#endif /* - KPluginInfo::List applets = Plasma::Applet::knownApplets(); + KPluginInfo::List applets = Applet::knownApplets(); kDebug() << "======= Applets =========" << endl; foreach (KPluginInfo* info, applets) { kDebug() << info->pluginName() << ": " << info->name() << endl; @@ -99,71 +134,61 @@ } */ - m_background = new Plasma::Svg("background/dialog", this); - - connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(displayContextMenu(QPoint))); - m_engineExplorerAction = new QAction(i18n("Engine Explorer"), this); - connect(m_engineExplorerAction, SIGNAL(triggered(bool)), this, SLOT(launchExplorer(bool))); - setContextMenuPolicy(Qt::CustomContextMenu); +// connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(displayContextMenu(QPoint))); + d->engineExplorerAction = new QAction(i18n("Engine Explorer"), this); + connect(d->engineExplorerAction, SIGNAL(triggered(bool)), this, SLOT(launchExplorer(bool))); +// setContextMenuPolicy(Qt::CustomContextMenu); } Corona::~Corona() { - while(!m_applets.isEmpty()) - delete m_applets.takeFirst(); + while (!d->applets.isEmpty()) { + delete d->applets.takeFirst(); + } } -Plasma::Location Corona::location() const +Location Corona::location() const { - return m_location; + return d->location; } -void Corona::setLocation(Plasma::Location location) +void Corona::setLocation(Location location) { - m_location = location; + d->location = location; } -Plasma::FormFactor Corona::formFactor() const +FormFactor Corona::formFactor() const { - return m_formFactor; + return d->formFactor; } -void Corona::setFormFactor(Plasma::FormFactor formFactor) +void Corona::setFormFactor(FormFactor formFactor) { - if (m_formFactor == formFactor) { + if (d->formFactor == formFactor) { return; } - m_formFactor = formFactor; - delete m_layout; - m_layout = 0; + d->formFactor = formFactor; + delete d->layout; + d->layout = 0; - switch (m_formFactor) { - case Plasma::Planar: + switch (d->formFactor) { + case Planar: break; - case Plasma::Horizontal: - //m_layout = new Plasma::HBoxLayout; + case Horizontal: + //d->layout = new HBoxLayout; break; - case Plasma::Vertical: - m_layout = new Plasma::VBoxLayout; + case Vertical: + d->layout = new VBoxLayout; break; - case Plasma::MediaCenter: + case MediaCenter: break; default: kDebug() << "This can't be happening!" << endl; break; } - if (!m_layout) { - return; - } - - foreach (Applet* applet, m_applets) { - //FIXME: the applet needs a way to query for its constraints - // currently there is no framework for this! - // so we tell them the constraints are updated, and they should - // in turn query for what they are and do any layouting changes - // they need to..... + foreach (Applet* applet, d->applets) { applet->constraintsUpdated(); } } @@ -171,30 +196,18 @@ void Corona::addPlasmoid(const QString& name) { - Plasma::Applet* applet = Plasma::Applet::loadApplet(name); + Applet* applet = Applet::loadApplet(name); if (applet) { - m_graphicsScene->addItem(applet); - m_applets << applet; + addItem(applet); + d->applets << applet; } else { kDebug() << "Plasmoid " << name << " could not be loaded." << endl; } } -void Corona::drawBackground(QPainter * painter, const QRectF &) +void Corona::dragEnterEvent( QGraphicsSceneDragDropEvent *event) { - m_background->paint(painter, rect()); -} - -void Corona::resizeEvent(QResizeEvent* event) -{ - Q_UNUSED(event); - m_graphicsScene->setSceneRect(rect()); - m_background->resize(width(), height()); -} - -void Corona::dragEnterEvent(QDragEnterEvent* event) -{ - kDebug() << "Corona::dragEnterEvent(QDragEnterEvent* event)" << endl; + kDebug() << "Corona::dragEnterEvent(QGraphicsSceneDragDropEvent* event)" << endl; if (event->mimeData()->hasFormat("text/x-plasmoidservicename")) { event->acceptProposedAction(); //TODO Create the applet, move to mouse position then send the @@ -206,35 +219,37 @@ // keeping its settings etc. } -void Corona::dragLeaveEvent(QDragLeaveEvent* event) +void Corona::dragLeaveEvent(QGraphicsSceneDragDropEvent *event) { - kDebug() << "Corona::dragLeaveEvent(QDragLeaveEvent* event)" << endl; + Q_UNUSED(event); + kDebug() << "Corona::dragLeaveEvent(QGraphicsSceneDragDropEvent* event)" << endl; //TODO If an established Applet is dragged out of the Corona, remove it and // create a QDrag type thing to keep the Applet's settings } -void Corona::dragMoveEvent(QDragMoveEvent* event) +void Corona::dragMoveEvent(QGraphicsSceneDragDropEvent *event) { + Q_UNUSED(event); kDebug() << "Corona::dragMoveEvent(QDragMoveEvent* event)" << endl; } -void Corona::dropEvent(QDropEvent* event) +void Corona::dropEvent(QGraphicsSceneDragDropEvent *event) { kDebug() << "Corona::dropEvent(QDropEvent* event)" << endl; if (event->mimeData()->hasFormat("text/x-plasmoidservicename")) { //TODO This will pretty much move into dragEnterEvent() QString plasmoidName; plasmoidName = event->mimeData()->data("text/x-plasmoidservicename"); - kDebug() << acceptDrops() << endl; addPlasmoid(plasmoidName); - m_applets.last()->setPos(event->pos()); + d->applets.last()->setPos(event->pos()); event->acceptProposedAction(); } } -void Corona::displayContextMenu(const QPoint& point) +void Corona::contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent) { + QPointF point = contextMenuEvent->pos(); /* * example for displaying the SuperKaramba context menu QGraphicsItem *item = itemAt(point); @@ -248,14 +263,14 @@ } */ - Plasma::Applet* applet = qgraphicsitem_cast( itemAt( point ) ); - KMenu desktopMenu(this); + Applet* applet = qgraphicsitem_cast(itemAt(point)); + KMenu desktopMenu; if(!applet) { desktopMenu.setTitle("Corona"); desktopMenu.addAction("The"); desktopMenu.addAction("desktop"); desktopMenu.addAction("menu"); - desktopMenu.addAction(m_engineExplorerAction); + desktopMenu.addAction(d->engineExplorerAction); } else { //desktopMenu.setTitle( applet->name() ); //This isn't implemented in Applet yet... desktopMenu.addAction("Widget"); @@ -268,7 +283,7 @@ applet, SLOT(configureDialog())); //This isn't implemented in Applet yet... desktopMenu.addAction(configureApplet); } - desktopMenu.exec(point); + desktopMenu.exec(point.toPoint()); } void Corona::launchExplorer(bool /*param*/) @@ -276,5 +291,7 @@ QProcess::execute("plasmaengineexplorer"); } +} // namespace Plasma + #include "corona.moc" --- trunk/KDE/kdebase/workspace/plasma/plasma/corona.h #670269:670270 @@ -19,29 +19,33 @@ #ifndef CORONA_H #define CORONA_H -#include +#include #include "plasma.h" #include "applet.h" -class QGraphicsScene; namespace Plasma { class Layout; class Svg; } +namespace Plasma +{ + /** * @short The view that displays the all the desktop */ -class Corona : public QGraphicsView +class Corona : public QGraphicsScene { -Q_OBJECT + Q_OBJECT //typedef QHash > layouts; public: - Corona(QWidget *parent = 0); + explicit Corona(QObject * parent = 0); + explicit Corona(const QRectF & sceneRect, QObject * parent = 0); + explicit Corona(qreal x, qreal y, qreal width, qreal height, QObject * parent = 0); ~Corona(); /** @@ -56,7 +60,7 @@ * * @param location the new location of this Corona */ - void setLocation(Plasma::Location location); + void setLocation(Location location); /** * The current form factor for this Corona. @see Plasma::FormFactor @@ -68,35 +72,30 @@ * the arrangement of Applets as well as the display choices of individual * Applets. */ - void setFormFactor(Plasma::FormFactor formFactor); + void setFormFactor(FormFactor formFactor); public Q_SLOTS: void addPlasmoid(const QString& name); protected: - void resizeEvent(QResizeEvent* event); - void dragEnterEvent(QDragEnterEvent* event); - void dragLeaveEvent(QDragLeaveEvent* event); - void dragMoveEvent(QDragMoveEvent* event); - void dropEvent(QDropEvent* event); - void drawBackground(QPainter * painter, const QRectF & rect); + void dragEnterEvent(QGraphicsSceneDragDropEvent* event); + void dragLeaveEvent(QGraphicsSceneDragDropEvent* event); + void dragMoveEvent(QGraphicsSceneDragDropEvent* event); + void dropEvent(QGraphicsSceneDragDropEvent* event); + void contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent); protected Q_SLOTS: - void displayContextMenu(const QPoint& point); void launchExplorer(bool /*param*/); private: - QGraphicsScene *m_graphicsScene; - QAction *m_engineExplorerAction; - Plasma::Applet::List m_applets; - Plasma::FormFactor m_formFactor; - Plasma::Location m_location; - Plasma::Layout* m_layout; + void init(); - //TODO: replace m_background with something actually useful. - Plasma::Svg* m_background; + class Private; + Private * const d; }; +} // namespace Plasma + #endif --- trunk/KDE/kdebase/workspace/plasma/plasma/rootwidget.cpp #670269:670270 @@ -25,8 +25,11 @@ #include +#include "corona.h" +#include "plasma.h" #include "svg.h" -#include "corona.h" + +#include "coronaview.h" #include "controlbox.h" RootWidget::RootWidget() @@ -42,9 +45,9 @@ rootLayout->setMargin(0); rootLayout->setSpacing(0); - m_view = new Corona(this); - m_view->setFormFactor(Plasma::Planar); - m_view->setLocation(Plasma::Desktop); + m_view = new CoronaView(this); + m_view->corona()->setFormFactor(Plasma::Planar); + m_view->corona()->setLocation(Plasma::Desktop); rootLayout->addWidget(m_view); m_view->show(); @@ -52,7 +55,7 @@ m_controlBox = new ControlBox(this); m_controlBox->show(); - connect(m_controlBox, SIGNAL(addPlasmoid(const QString&)), m_view, SLOT(addPlasmoid(const QString&))); + connect(m_controlBox, SIGNAL(addPlasmoid(const QString&)), m_view->corona(), SLOT(addPlasmoid(const QString&))); } RootWidget::~RootWidget() --- trunk/KDE/kdebase/workspace/plasma/plasma/rootwidget.h #670269:670270 @@ -22,7 +22,7 @@ #include -class Corona; +class CoronaView; class ControlBox; /** @@ -40,7 +40,7 @@ void adjustSize(); private: - Corona* m_view; + CoronaView* m_view; ControlBox* m_controlBox; };