void UIMachineWindowSeamless::prepareMiniToolbar() { /* Get machine: */ CMachine m = machine(); /* Make sure mini-toolbar is necessary: */ bool fIsActive = m.GetExtraData(GUI_ShowMiniToolBar) != "no"; if (!fIsActive) return; /* Get the mini-toolbar alignment: */ bool fIsAtTop = m.GetExtraData(GUI_MiniToolBarAlignment) == "top"; /* Get the mini-toolbar auto-hide feature availability: */ bool fIsAutoHide = m.GetExtraData(GUI_MiniToolBarAutoHide) != "off"; m_pMiniToolBar = new VBoxMiniToolBar(centralWidget(), fIsAtTop ? VBoxMiniToolBar::AlignTop : VBoxMiniToolBar::AlignBottom, true, fIsAutoHide); m_pMiniToolBar->setSeamlessMode(true); m_pMiniToolBar->updateDisplay(true, true); QList<QMenu*> menus; QList<QAction*> actions = uisession()->newMenu()->actions(); for (int i=0; i < actions.size(); ++i) menus << actions.at(i)->menu(); *m_pMiniToolBar << menus; connect(m_pMiniToolBar, SIGNAL(minimizeAction()), this, SLOT(showMinimized())); connect(m_pMiniToolBar, SIGNAL(exitAction()), gActionPool->action(UIActionIndexRuntime_Toggle_Seamless), SLOT(trigger())); connect(m_pMiniToolBar, SIGNAL(closeAction()), gActionPool->action(UIActionIndexRuntime_Simple_Close), SLOT(trigger())); connect(m_pMiniToolBar, SIGNAL(geometryUpdated()), this, SLOT(sltUpdateMiniToolBarMask())); }
/* Timer event processor * Handles auto hide feature of the toolbar */ void VBoxMiniToolBar::timerEvent(QTimerEvent *pEvent) { if (pEvent->timerId() == m_scrollTimer.timerId()) { /* Due to X11 async nature, this timer-event could come before parent * VM window become visible, we should ignore those timer-events: */ if (QApplication::desktop()->screenNumber(window()) == -1) return; /* Update tool-bar position: */ QRect screen = m_fSeamless ? vboxGlobal().availableGeometry(QApplication::desktop()->screenNumber(window())) : QApplication::desktop()->screenGeometry(window()); switch (m_alignment) { case AlignTop: { if (((m_iPositionY == screen.y()) && m_fSlideToScreen) || ((m_iPositionY == screen.y() - height() + 1) && !m_fSlideToScreen)) { m_scrollTimer.stop(); if (m_fHideAfterSlide) { m_fHideAfterSlide = false; hide(); } return; } m_fSlideToScreen ? ++m_iPositionY : --m_iPositionY; break; } case AlignBottom: { if (((m_iPositionY == screen.y() + screen.height() - height()) && m_fSlideToScreen) || ((m_iPositionY == screen.y() + screen.height() - 1) && !m_fSlideToScreen)) { m_scrollTimer.stop(); if (m_fHideAfterSlide) { m_fHideAfterSlide = false; hide(); } return; } m_fSlideToScreen ? --m_iPositionY : ++m_iPositionY; break; } default: break; } move(parentWidget()->mapFromGlobal(QPoint(m_iPositionX, m_iPositionY))); emit geometryUpdated(); } else if (pEvent->timerId() == m_autoScrollTimer.timerId()) { QRect rect = this->rect(); QPoint p = mapFromGlobal(QCursor::pos()); if (!rect.contains(p)) { ++m_iAutoHideCounter; if (m_iAutoHideCounter == m_iAutoHideTotalCounter) { m_fSlideToScreen = false; m_scrollTimer.start(m_iScrollDelay, this); } } else m_iAutoHideCounter = 0; } else QWidget::timerEvent(pEvent); }
AboutDialog::AboutDialog(SettingsModel *settings, QWidget *parent, bool firstStart) : QDialog(parent), ui(new Ui::AboutDialog), m_settings(settings), m_initFlags(new QMap<QWidget*,bool>), m_disque(NULL), m_disqueTimer(NULL), m_rotateNext(false), m_lastTab(0) { //Init the dialog, from the .ui file ui->setupUi(this); setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint)); resize(this->minimumSize()); //Disable "X" button if(firstStart) { MUtils::GUI::enable_close_button(this, false); } //Init images for(int i = 0; i < 4; i++) { m_cartoon[i] = NULL; } //Init tab widget connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); //Make transparent const type_info &styleType = typeid(*qApp->style()); if((typeid(QWindowsVistaStyle) == styleType) || (typeid(QWindowsXPStyle) == styleType)) { MAKE_TRANSPARENT(ui->infoScrollArea); MAKE_TRANSPARENT(ui->contributorsScrollArea); MAKE_TRANSPARENT(ui->softwareScrollArea); MAKE_TRANSPARENT(ui->licenseScrollArea); } //Show about dialog for the first time? if(!firstStart) { ui->acceptButton->hide(); ui->declineButton->hide(); ui->aboutQtButton->show(); ui->closeButton->show(); QPixmap disque(":/images/Disque.png"); m_disque = new QLabel(this, Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); m_disque->resize(disque.size()); m_disque->setStyleSheet("background:transparent;"); m_disque->setAttribute(Qt::WA_TranslucentBackground); m_disque->setPixmap(disque); m_disque->setCursor(QCursor(Qt::PointingHandCursor)); m_disque->installEventFilter(this); connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), this, SLOT(geometryUpdated())); geometryUpdated(); m_discOpacity = 0.01; m_disquePos.setX(static_cast<int>(MUtils::next_rand_u32() % static_cast<unsigned int>(m_disqueBound.right() - disque.width() - m_disqueBound.left())) + m_disqueBound.left()); m_disquePos.setY(static_cast<int>(MUtils::next_rand_u32() % static_cast<unsigned int>(m_disqueBound.bottom() - disque.height() - m_disqueBound.top())) + m_disqueBound.top()); m_disqueFlags[0] = (MUtils::next_rand_u32() > (UINT_MAX/2)); m_disqueFlags[1] = (MUtils::next_rand_u32() > (UINT_MAX/2)); m_disque->move(m_disquePos); m_disque->setWindowOpacity(m_discOpacity); m_disque->show(); m_disqueTimer = new QTimer; connect(m_disqueTimer, SIGNAL(timeout()), this, SLOT(moveDisque())); m_disqueTimer->start(10); connect(ui->aboutQtButton, SIGNAL(clicked()), this, SLOT(showAboutQt())); }