void EmergencyWindowManager::addWindow(Window* win)
{
	if (win->type() != Window::Type_Emergency)
		return;

	if (m_emergencyWindow) {

		luna_critical(s_logChannel, "Only one emergency window is allowed at a time");
		WebAppMgrProxy::instance()->closeWindow(win);
		return;
	}
	setVisible(true);
	
	m_emergencyWindow = win;
	static_cast<CardWindow*>(win)->focusEvent(true);
	IMEController::instance()->setClient(static_cast<HostWindow*>(win));

	m_emergencyWindow->setParentItem(this);
	m_emergencyWindow->stackBefore(m_cornerContainer);
	m_emergencyWindow->setOpacity(kFadedOpacity);
	m_emergencyWindow->setVisible(true);
	static_cast<CardWindow*>(m_emergencyWindow)->setPaintCompositionMode(QPainter::CompositionMode_SourceOver);

	static_cast<CardWindow*>(m_emergencyWindow)->setBoundingRect(m_winRect.width(), m_winRect.height());

	setPosTopLeft(win, m_winRect.x(), m_winRect.y());

	positionCornerWindows();
	showCornerWindows();

	SystemUiController::instance()->setEmergencyMode(true);

	if (static_cast<CardWindow*>(m_emergencyWindow)->fullScreen())
		SystemUiController::instance()->hideStatusBarAndNotificationArea();
	else {
		SystemUiController::instance()->showStatusBarAndNotificationArea();
	}
	
	m_opacityAnimPtr = new QPropertyAnimation();
	m_opacityAnimPtr->setPropertyName("opacity");
	m_opacityAnimPtr->setEasingCurve(QEasingCurve::Linear);
	m_opacityAnimPtr->setTargetObject(m_emergencyWindow);
	m_opacityAnimPtr->setDuration(kFadeAnimDuration);
	m_opacityAnimPtr->setEndValue(1.0);
	connect(m_opacityAnimPtr, SIGNAL(finished()), SLOT(fadeAnimationFinished()));
	m_opacityAnimPtr->start(QAbstractAnimation::DeleteWhenStopped);
	
	update();
}
Esempio n. 2
0
void MenuWindowManager::slotPositiveSpaceChanged(const QRect& r)
{
	m_positiveSpace = r;
	
	positionCornerWindows(r);

	Q_FOREACH(Window* w, m_winArray) {
		if (w)
			setPosTopLeft(w, r.x(), r.y());
	}

	if (m_statusBar) {
		setPosTopLeft(m_statusBar, 0, r.y() - m_statusBar->boundingRect().height());
	}
	update();
}
Esempio n. 3
0
void MenuWindowManager::init()
{
	if(m_statusBar) {
		m_statusBar->init();
		m_statusBar->setParentItem(this);
		m_statusBar->setPos(0, m_boundingRect.y() + m_statusBar->boundingRect().height() / 2);
		m_statusBar->setZValue(100);
	}

	if(m_statusBar && m_sysMenu) {
		int offset = 0;
		m_sysMenu->init();
		offset = m_sysMenu->getRightEdgeOffset();
		m_statusBar->setSystemMenuObject(m_sysMenu);
		m_sysMenu->setPos(boundingRect().x() + boundingRect().width() - m_sysMenu->boundingRect().width()/2 + offset,
				          boundingRect().y() + m_statusBar->boundingRect().height() + m_sysMenu->boundingRect().height()/2);
	}

	if(!Settings::LunaSettings()->tabletUi) {
		m_cornerContainer = new GraphicsItemContainer(m_boundingRect.width(),
													  m_boundingRect.height());

		QSize dims = RoundedCorners::topLeft().size();

		m_corners[kTopLeftWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::topLeft(), m_cornerContainer);
		m_corners[kTopRightWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::topRight(), m_cornerContainer);
		m_corners[kBottomLeftWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::bottomLeft(), m_cornerContainer);
		m_corners[kBottomRightWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::bottomRight(), m_cornerContainer);

		for (int i=kTopLeftWindowIndex; i <= kBottomRightWindowIndex; i++) {
			m_corners[i]->setOffset(-dims.width()/2, -dims.height()/2);

			// disable mouse events for the corners
			m_corners[i]->setAcceptedMouseButtons(0);
		}

		m_cornerContainer->setParentItem(this);

		positionCornerWindows(m_positiveSpace);
	}
}
void EmergencyWindowManager::slotPositiveSpaceChanged(const QRect& r)
{
	// The emergency window manager always covers the whole display but limits 
	// the size of the active emergency window to be either full screen or
	// screen height - top positive space

	int positiveSpaceTopPadding = Settings::LunaSettings()->positiveSpaceTopPadding;

	int y = qMin(r.y(), positiveSpaceTopPadding);
	int w = SystemUiController::instance()->currentUiWidth() - r.x();
	int h = SystemUiController::instance()->currentUiHeight() - y;

	m_winRect.setX(qMin(0, r.x()));
	m_winRect.setY(y);
	m_winRect.setHeight(h);
	m_winRect.setWidth(w);

	positionCornerWindows();

	if (m_emergencyWindow) {
		setPosTopLeft(m_emergencyWindow, m_winRect.x(), m_winRect.y());
		static_cast<CardWindow*>(m_emergencyWindow)->resizeEvent(w, h);
	}
}