void Panel::setLocation(const QString &locationString) { Plasma::Containment *c = containment(); if (!c) { return; } const QString lower = locationString.toLower(); Plasma::Types::Location loc = Plasma::Types::Floating; Plasma::Types::FormFactor ff = Plasma::Types::Planar; if (lower == "desktop") { loc = Plasma::Types::Desktop; } else if (lower == "fullscreen") { loc = Plasma::Types::FullScreen; } else if (lower == "top") { loc = Plasma::Types::TopEdge; ff = Plasma::Types::Horizontal; } else if (lower == "bottom") { loc = Plasma::Types::BottomEdge; ff = Plasma::Types::Horizontal; } else if (lower == "left") { loc = Plasma::Types::LeftEdge; ff = Plasma::Types::Vertical; } else if (lower == "right") { loc = Plasma::Types::RightEdge; ff = Plasma::Types::Vertical; } c->setLocation(loc); c->setFormFactor(ff); }
QString Panel::location() const { Plasma::Containment *c = containment(); if (!c) { return "floating"; } switch (c->location()) { case Plasma::Types::Floating: return "floating"; break; case Plasma::Types::Desktop: return "desktop"; break; case Plasma::Types::FullScreen: return "fullscreen"; break; case Plasma::Types::TopEdge: return "top"; break; case Plasma::Types::BottomEdge: return "bottom"; break; case Plasma::Types::LeftEdge: return "left"; break; case Plasma::Types::RightEdge: return "right"; break; } return "floating"; }
bool DeclarativeAppletScript::init() { //make possible to import extensions from the package //FIXME: probably to be removed, would make possible to use native code from within the package :/ //m_interface->qmlObject()->engine()->addImportPath(package()->path()+"/contents/imports"); Plasma::Applet *a = applet(); Plasma::Containment *pc = qobject_cast<Plasma::Containment *>(a); if (pc && pc->isContainment()) { m_interface = new ContainmentInterface(this, m_args); //fail? so it's a normal Applet } else { m_interface = new AppletInterface(this, m_args); } m_interface->setParent(this); return true; }
void PanelView::updateGeometry(int) { Plasma::Containment *c = containment(); if(!c) return; QRect screenGeometry = QApplication::desktop()->screenGeometry(c->screen()); QPoint topLeft; QSize newSize; int length = mLength; Plasma::Location loc = c->location(); if(length < 0) { if(loc == Plasma::TopEdge || loc == Plasma::BottomEdge) length = screenGeometry.width() - qAbs(mOffSet); else length = screenGeometry.height() - qAbs(mOffSet); } int depth = qMax(mDepth, 1); int offSet = qMax(mOffSet, 0); switch(loc) { case Plasma::TopEdge: topLeft = QPoint(screenGeometry.left() + offSet, screenGeometry.top()); newSize = QSize(length, depth); break; case Plasma::BottomEdge: topLeft = QPoint(screenGeometry.left() + offSet, screenGeometry.bottom() - depth); newSize = QSize(length, depth); break; case Plasma::LeftEdge: topLeft = QPoint(screenGeometry.left(), screenGeometry.top() + offSet); newSize = QSize(depth, length); break; case Plasma::RightEdge: topLeft = QPoint(screenGeometry.right() - depth, screenGeometry.top() + offSet); newSize = QSize(depth, length); break; default: qDebug() << "Not a panel location"; //Set a valid geometry anyway. topLeft = screenGeometry.topLeft(); newSize = QSize(screenGeometry.width(), mDepth); break; } setGeometry(QRect(topLeft, newSize)); c->setMaximumSize(newSize); c->setMinimumSize(newSize); c->resize(newSize); mStrutTimer->start(); }
void XbmcremoteApplet::init() { Plasma::Containment * c = containment(); /* When applet is not in panel the tooltip always appears when hovering any point of the popup's area, which is annoying. */ if (c && (c->containmentType() == Plasma::Containment::PanelContainment || c->containmentType() == Plasma::Containment::CustomPanelContainment)) { Plasma::ToolTipManager::self()->registerWidget(this); m_panelContainment = true; } else { m_panelContainment = false; } //kDebug(); m_popup = new DeclarativePopup(this); // TODO: config // connect(d->m_popup, SIGNAL(configNeedsSaving()), this, SIGNAL(configNeedsSaving())); // TODO: context options // QAction* action = new QAction(i18nc("CheckBox to enable or disable networking completely", "Enable networking"), this); // action->setToolTip(i18nc("@info:tooltip tooltip for the 'Enable networking' checkbox", "Enable or disable the networking system")); // action->setCheckable(true); // action->setChecked(NetworkManager::isNetworkingEnabled()); // connect(action, SIGNAL(triggered(bool)), d->m_popup, SLOT(networkingEnabledToggled(bool))); // connect(NetworkManager::notifier(), SIGNAL(networkingEnabledChanged(bool)), // action, SLOT(setChecked(bool))); // d->actions.append(action); setGraphicsWidget(m_popup); connect(Xbmc::instance(), SIGNAL(connectedChanged(bool)), SLOT(connectedChanged(bool))); connect(Xbmc::instance(), SIGNAL(activePlayerChanged()), SLOT(activePlayerChanged())); }
void PanelAppletOverlay::mouseMoveEvent(QMouseEvent *event) { if (!m_layout || !m_applet) { //kDebug() << "no layout"; return; } const int margin = 9; if (m_applet->inherits("PanelSpacer")) { if (m_applet->formFactor() == Plasma::Horizontal) { if (event->pos().x() < margin || event->pos().x() > m_applet->size().width() - margin) { setCursor(Qt::SizeHorCursor); } else { setCursor(Qt::ArrowCursor); } } else if (m_applet->formFactor() == Plasma::Vertical) { if (event->pos().y() < margin || event->pos().y() > m_applet->size().height() - margin) { setCursor(Qt::SizeVerCursor); } else { setCursor(Qt::ArrowCursor); } } } if (!m_clickDrag && !(event->buttons() & Qt::LeftButton)) { //kDebug() << "no left button and we aren't click dragging"; return; } Plasma::FormFactor f = m_applet->formFactor(); if (!m_applet->inherits("PanelSpacer") && (((f != Plasma::Horizontal && f != Plasma::Vertical) && rect().intersects(m_applet->rect().toRect())) || ((f == Plasma::Horizontal || f == Plasma::Vertical) && !rect().contains(event->globalPos()))) ) { Plasma::View *view = Plasma::View::topLevelViewAt(event->globalPos()); //kDebug() << "checking view" << view << m_applet->view(); if (!view) { view = dynamic_cast<Plasma::View*>(parent()); } if (!view) { return; } if (view != m_applet->view() && (event->buttons() & Qt::LeftButton)) { Plasma::Containment *c = view->containment(); if (!c) { return; } syncOrientation(); syncGeometry(); if (m_spacer) { if (m_layout) { m_layout->removeItem(m_spacer); } m_spacer->deleteLater(); m_spacer = 0; } QPointF pos = c->view()->mapFromGlobal(event->globalPos()); QRectF g = m_applet->geometry(); pos += QPoint(m_offset, m_offset); g.moveTo(pos); m_applet->setGeometry(g); m_layout = 0; c->addApplet(m_applet, pos, true); m_applet->flushPendingConstraintsEvents(); m_applet->setPos(pos); releaseMouse(); emit moved(this); return; } } else if (m_applet->inherits("PanelSpacer") && m_dragAction != Move) { if (m_applet->formFactor() == Plasma::Horizontal) { if (m_dragAction == LeftResize) { int fixedWidth = m_applet->size().width()+(m_lastGlobalPos.x() - event->globalPos().x()); m_applet->setPos(m_applet->pos().x()-(fixedWidth-m_applet->size().width()), m_applet->pos().y()); m_applet->setMinimumWidth(fixedWidth); m_applet->setMaximumWidth(fixedWidth); } else if (m_dragAction == RightResize) { int fixedWidth = m_applet->size().width()-(m_lastGlobalPos.x() - event->globalPos().x()); m_applet->setMinimumWidth(fixedWidth); m_applet->setMaximumWidth(fixedWidth); } } else if (m_applet->formFactor() == Plasma::Vertical) { if (m_dragAction == LeftResize) { int fixedHeight = m_applet->size().height()+(m_lastGlobalPos.y() - event->globalPos().y()); m_applet->setPos(m_applet->pos().x(), m_applet->pos().y()-(fixedHeight-m_applet->size().height())); m_applet->setMinimumHeight(fixedHeight); m_applet->setMaximumHeight(fixedHeight); } else if (m_dragAction == RightResize) { int fixedHeight = m_applet->size().height()-(m_lastGlobalPos.y() - event->globalPos().y()); m_applet->setMinimumHeight(fixedHeight); m_applet->setMaximumHeight(fixedHeight); } } m_lastGlobalPos = event->globalPos(); return; } if (!m_spacer) { m_spacer = new AppletMoveSpacer(m_applet); m_spacer->setMinimumSize(m_applet->geometry().size()); m_spacer->setMaximumSize(m_applet->geometry().size()); if (m_layout) { m_layout->removeItem(m_applet); m_layout->insertItem(m_index, m_spacer); } } QPoint p = mapToParent(event->pos()); QRectF g = m_applet->geometry(); //kDebug() << p << g << "<-- movin'?"; if (m_orientation == Qt::Horizontal) { g.moveLeft(p.x() + m_offset); } else { g.moveTop(p.y() + m_offset); } m_applet->setGeometry(g); //FIXME: assumption on how panel containment works, presence of a non applet spacer in last position (if they were swapped would be impossible to save and restore) if ((m_index > 0 && m_layout->itemAt(m_index - 1)) || m_index == 0) { const bool prevIsApplet = dynamic_cast<Plasma::Applet*>(m_layout->itemAt(m_index - 1)) != 0; const bool nextIsApplet = dynamic_cast<Plasma::Applet*>(m_layout->itemAt(m_index + 1)) != 0; QPointF mousePos = event->pos() + g.topLeft(); // swap items if we pass completely over the next/previous item or cross // more than halfway across it, whichever comes first if (m_orientation == Qt::Horizontal) { //kDebug() << prevIsApplet << m_prevGeom << g << nextIsApplet << m_nextGeom; if (QApplication::layoutDirection() == Qt::RightToLeft) { if (prevIsApplet && m_prevGeom.isValid() && mousePos.x() >= m_prevGeom.right()) { swapWithPrevious(); } else if (nextIsApplet && m_nextGeom.isValid() && mousePos.x() <= m_nextGeom.left()) { swapWithNext(); } } else if (prevIsApplet && m_prevGeom.isValid() && mousePos.x() <= m_prevGeom.left()) { swapWithPrevious(); } else if (nextIsApplet && m_nextGeom.isValid() && mousePos.x() >= m_nextGeom.right()) { swapWithNext(); } } else if (prevIsApplet && m_prevGeom.isValid() && mousePos.y() <= m_prevGeom.top()) { swapWithPrevious(); } else if (nextIsApplet && m_nextGeom.isValid() && mousePos.y() >= m_nextGeom.bottom()) { swapWithNext(); } } m_lastGlobalPos = event->globalPos(); //kDebug() << "================================="; }
int PlasmaApp::newInstance() { KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); if (args->count() == 0) { KCmdLineArgs::usage(); return 0; } QString pluginName; if (args->count() > 0) { pluginName = args->arg(0); } //is the applet already running? if (m_viewForPlugin.contains(pluginName)) { m_viewForPlugin.value(pluginName)->activateWindow(); m_viewForPlugin.value(pluginName)->raise(); return 0; } QVariantList appletArgs; for (int i = 1; i < args->count(); ++i) { appletArgs << args->arg(i); } int appletId; Plasma::Containment *containment = m_corona->addContainment("null"); containment->setFormFactor(Plasma::Planar); containment->setLocation(Plasma::Floating); appletId = ++m_maxId; if (m_storedApplets.contains(pluginName)) { int storedAppletId = m_storedApplets.values(pluginName).first(); KConfigGroup config = storedConfig(storedAppletId); KConfigGroup actualConfig(containment->config()); actualConfig = KConfigGroup(&actualConfig, "Applets"); actualConfig = KConfigGroup(&actualConfig, QString::number(appletId)); config.copyTo(&actualConfig); config.deleteGroup(); m_storedApplets.remove(pluginName, storedAppletId); } SingleView *view = new SingleView(m_corona, containment, pluginName, appletId, appletArgs); if (!view->applet()) { delete view; return 0; } connect(view, SIGNAL(storeApplet(Plasma::Applet*)), this, SLOT(storeApplet(Plasma::Applet*))); connect(view, SIGNAL(destroyed(QObject*)), this, SLOT(viewDestroyed(QObject*))); if (args->isSet("border")) { view->setBackgroundBrush(KColorUtils::mix(Plasma::Theme::defaultTheme()->color(Plasma::Theme::BackgroundColor), Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor), 0.15)); connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), SLOT(themeChanged())); view->applet()->setBackgroundHints(Plasma::Applet::NoBackground); } else { view->setWindowFlags(Qt::FramelessWindowHint); view->setAttribute(Qt::WA_TranslucentBackground); view->setAutoFillBackground(false); view->viewport()->setAutoFillBackground(false); view->setAttribute(Qt::WA_NoSystemBackground); view->viewport()->setAttribute(Qt::WA_NoSystemBackground); Plasma::WindowEffects::overrideShadow(view->winId(), true); } if (args->isSet("fullscreen")) { view->setWindowState(Qt::WindowFullScreen); } args->clear(); m_viewForPlugin[pluginName] = view; m_pluginForView[view] = pluginName; KWindowSystem::setOnDesktop(view->winId(), KWindowSystem::currentDesktop()); view->show(); view->raise(); return 0; }