QIMainDialog.cpp revision c7814cf6e1240a519cbec0441e033d0e2470ed00
4be39ac606cc80de5b28e745a94b099557387ff7vboxsync/* $Id$ */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync/** @file
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync *
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * VBox frontends: Qt GUI ("VirtualBox"):
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * VirtualBox Qt extensions: QIMainDialog class implementation
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2008-2012 Oracle Corporation
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync *
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * available from http://www.virtualbox.org. This file is free software;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * you can redistribute it and/or modify it under the terms of the GNU
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * General Public License (GPL) as published by the Free Software
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include "QIMainDialog.h"
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include "VBoxUtils.h"
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include "VBoxGlobal.h"
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <iprt/assert.h>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync/* Qt includes */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QProcess>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QEventLoop>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QApplication>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QDir>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QUrl>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QMenu>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QSizeGrip>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QPushButton>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#include <QDialogButtonBox>
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncQIMainDialog::QIMainDialog (QWidget *aParent /* = 0 */,
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync Qt::WindowFlags aFlags /* = Qt::Dialog */)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync : QMainWindow (aParent, aFlags)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync , mRescode (QDialog::Rejected)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync , mPolished (false)
3f001a14123f18f268775568f603105a7ed246b8vboxsync , mIsAutoCentering (true)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync , mCenterWidget (aParent)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync qApp->installEventFilter (this);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncQDialog::DialogCode QIMainDialog::exec()
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Check for the recursive run: */
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync AssertMsg(!mEventLoop, ("QIMainDialog::exec() is called recursively!\n"));
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Reset the result code: */
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync setResult(QDialog::Rejected);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Tune some attributes: */
e0b4007776ecc4b476e118a0d29ed5fa68667f18vboxsync bool fDeleteOnClose = testAttribute(Qt::WA_DeleteOnClose); NOREF(fDeleteOnClose);
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync AssertMsg(!fDeleteOnClose, ("QIMainDialog is NOT supposed to be run in 'delete-on-close' mode!"));
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync setAttribute(Qt::WA_DeleteOnClose, false);
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync bool fWasShowModal = testAttribute(Qt::WA_ShowModal);
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync setAttribute(Qt::WA_ShowModal, true);
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Create a local event-loop: */
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync QEventLoop eventLoop;
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync mEventLoop = &eventLoop;
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Show the window: */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync show();
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* A guard to ourself for the case we destroy ourself: */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QPointer<QIMainDialog> guard = this;
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Start the event-loop: */
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync eventLoop.exec();
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Check if dialog is still valid: */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (guard.isNull())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return QDialog::Rejected;
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync mEventLoop = 0;
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Prepare result: */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QDialog::DialogCode res = result();
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Restore old show-modal attribute: */
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync setAttribute(Qt::WA_ShowModal, fWasShowModal);
ff58db82d953628895c2060fb6f9169b5cc8cd19vboxsync /* Return the final result: */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return res;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncQDialog::DialogCode QIMainDialog::result() const
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return mRescode;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::setFileForProxyIcon (const QString& aFile)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mFileForProxyIcon = aFile;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncQString QIMainDialog::fileForProxyIcon() const
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return mFileForProxyIcon;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::setSizeGripEnabled (bool aEnabled)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (!mSizeGrip && aEnabled)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mSizeGrip = new QSizeGrip (this);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mSizeGrip->resize (mSizeGrip->sizeHint());
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mSizeGrip->show();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync else if (mSizeGrip && !aEnabled)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync delete mSizeGrip;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncbool QIMainDialog::isSizeGripEnabled() const
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return mSizeGrip;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::setDefaultButton (QPushButton* aButton)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mDefaultButton = aButton;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncQPushButton* QIMainDialog::defaultButton() const
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return mDefaultButton;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
3f001a14123f18f268775568f603105a7ed246b8vboxsyncvoid QIMainDialog::setAutoCenteringEnabled(bool fIsAutoCentering)
3f001a14123f18f268775568f603105a7ed246b8vboxsync{
3f001a14123f18f268775568f603105a7ed246b8vboxsync mIsAutoCentering = fIsAutoCentering;
3f001a14123f18f268775568f603105a7ed246b8vboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::setVisible (bool aVisible)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QMainWindow::setVisible (aVisible);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Exit from the event loop if there is any and we are changing our state
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * from visible to invisible. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (mEventLoop && !aVisible)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mEventLoop->exit();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncbool QIMainDialog::event (QEvent *aEvent)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync switch (aEvent->type())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#ifdef Q_WS_MAC
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case QEvent::IconDrag:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync Qt::KeyboardModifiers currentModifiers = qApp->keyboardModifiers();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (currentModifiers == Qt::NoModifier)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (!mFileForProxyIcon.isEmpty())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync aEvent->accept();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Create a drag object we can use */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QDrag *drag = new QDrag (this);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QMimeData *data = new QMimeData();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Set the appropriate url data */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync data->setUrls (QList<QUrl>() << QUrl::fromLocalFile (mFileForProxyIcon));
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync drag->setMimeData (data);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Make a nice looking DnD icon */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QFileInfo fi (mFileForProxyIcon);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QPixmap cursorPixmap (::darwinCreateDragPixmap (QPixmap (windowIcon().pixmap (16, 16)), fi.fileName()));
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync drag->setPixmap (cursorPixmap);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync drag->setHotSpot (QPoint (5, cursorPixmap.height() - 5));
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Start the DnD action */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync drag->start (Qt::LinkAction | Qt::CopyAction);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return true;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#if QT_VERSION < 0x040400
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync else if (currentModifiers == Qt::ShiftModifier)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#else
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync else if (currentModifiers == Qt::ControlModifier)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#endif
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (!mFileForProxyIcon.isEmpty())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync aEvent->accept();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Create the proxy icon menu */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QMenu menu (this);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync connect (&menu, SIGNAL (triggered (QAction*)),
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync this, SLOT (openAction (QAction*)));
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Add the file with the disk icon to the menu */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QFileInfo fi (mFileForProxyIcon);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QAction *action = menu.addAction (fi.fileName());
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync action->setIcon (windowIcon());
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Create some nice looking menu out of the other
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * directory parts. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QDir dir (fi.absolutePath());
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync do
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (dir.isRoot())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync action = menu.addAction ("/");
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync else
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync action = menu.addAction (dir.dirName());
f0bd3112311126f4b8aa45d059a4c75d9abaecf3vboxsync action->setIcon (vboxGlobal().icon(QFileInfo (dir, "")));
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync while (dir.cdUp());
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Show the menu */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync menu.exec (QPoint (QCursor::pos().x() - 20, frameGeometry().y() - 5));
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return true;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#endif /* Q_WS_MAC */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case QEvent::Polish:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Initially search for the default button. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mDefaultButton = searchDefaultButton();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync default:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return QMainWindow::event (aEvent);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::showEvent (QShowEvent *aEvent)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QMainWindow::showEvent (aEvent);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Polishing border */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (mPolished)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mPolished = true;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Explicit widget centering relatively to it's centering
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * widget if any or desktop if centering widget is missed. */
3f001a14123f18f268775568f603105a7ed246b8vboxsync if (mIsAutoCentering)
3f001a14123f18f268775568f603105a7ed246b8vboxsync VBoxGlobal::centerWidget (this, mCenterWidget, false);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::resizeEvent (QResizeEvent *aEvent)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QMainWindow::resizeEvent (aEvent);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Adjust the size-grip location for the current resize event */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (mSizeGrip)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (isRightToLeft())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mSizeGrip->move (rect().bottomLeft() - mSizeGrip->rect().bottomLeft());
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync else
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mSizeGrip->move (rect().bottomRight() - mSizeGrip->rect().bottomRight());
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync aEvent->accept();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncbool QIMainDialog::eventFilter (QObject *aObject, QEvent *aEvent)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (!isActiveWindow())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return QMainWindow::eventFilter (aObject, aEvent);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (qobject_cast<QWidget*> (aObject) &&
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync qobject_cast<QWidget*> (aObject)->window() != this)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return QMainWindow::eventFilter (aObject, aEvent);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync switch (aEvent->type())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Auto-default button focus-in processor used to move the "default"
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * button property into the currently focused button. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case QEvent::FocusIn:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (qobject_cast<QPushButton*> (aObject) &&
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync (aObject->parent() == centralWidget() ||
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync qobject_cast<QDialogButtonBox*> (aObject->parent())))
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync qobject_cast<QPushButton*> (aObject)->setDefault (aObject != mDefaultButton);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (mDefaultButton)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mDefaultButton->setDefault (aObject == mDefaultButton);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Auto-default button focus-out processor used to remove the "default"
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * button property from the previously focused button. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case QEvent::FocusOut:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (qobject_cast<QPushButton*> (aObject) &&
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync (aObject->parent() == centralWidget() ||
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync qobject_cast<QDialogButtonBox*> (aObject->parent())))
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (mDefaultButton)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mDefaultButton->setDefault (aObject != mDefaultButton);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync qobject_cast<QPushButton*> (aObject)->setDefault (aObject == mDefaultButton);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case QEvent::KeyPress:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#if defined (Q_WS_MAC) && (QT_VERSION < 0x040402)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Bug in Qt below 4.4.2. The key events are send to the current
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * window even if a menu is shown & has the focus. See
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * http://trolltech.com/developer/task-tracker/index_html?method=entry&id=214681. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (::darwinIsMenuOpen())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return true;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#endif /* defined (Q_WS_MAC) && (QT_VERSION < 0x040402) */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Make sure that we only proceed if no
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * popup or other modal widgets are open. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (qApp->activePopupWidget() ||
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync (qApp->activeModalWidget() && qApp->activeModalWidget() != this))
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QKeyEvent *event = static_cast<QKeyEvent*> (aEvent);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#ifdef Q_WS_MAC
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (event->modifiers() == Qt::ControlModifier &&
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync event->key() == Qt::Key_Period)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync reject();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync else
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#endif
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (event->modifiers() == Qt::NoModifier ||
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync (event->modifiers() & Qt::KeypadModifier && event->key() == Qt::Key_Enter))
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync switch (event->key())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case Qt::Key_Enter:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case Qt::Key_Return:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QPushButton *currentDefault = searchDefaultButton();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (currentDefault)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* We handle this, so return true after
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync * that. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync currentDefault->animateClick();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return true;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync case Qt::Key_Escape:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync reject();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return true;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
18317fa481202a4db57e3f56c87c912eb2f6a2f9vboxsync default:
18317fa481202a4db57e3f56c87c912eb2f6a2f9vboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync default:
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync break;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync return QMainWindow::eventFilter (aObject, aEvent);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncQPushButton* QIMainDialog::searchDefaultButton() const
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Search for the first default button in the dialog. */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QList<QPushButton*> list = qFindChildren<QPushButton*> (this);
12ec5aac02dd8816cf19a6e018e8cea6fed03d37vboxsync foreach (QPushButton *button, list)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (button->isDefault() &&
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync (button->parent() == centralWidget() ||
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync qobject_cast<QDialogButtonBox*> (button->parent())))
12ec5aac02dd8816cf19a6e018e8cea6fed03d37vboxsync return button;
12ec5aac02dd8816cf19a6e018e8cea6fed03d37vboxsync return NULL;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::accept()
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync done (QDialog::Accepted);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::reject()
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync done (QDialog::Rejected);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::done (QDialog::DialogCode aResult)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Set the final result */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync setResult (aResult);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Hide this window */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync hide();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* And close the window */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync close();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::setResult (QDialog::DialogCode aRescode)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync mRescode = aRescode;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsyncvoid QIMainDialog::openAction (QAction *aAction)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync{
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#ifdef Q_WS_MAC
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (!mFileForProxyIcon.isEmpty())
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QString path = mFileForProxyIcon.left (mFileForProxyIcon.indexOf (aAction->text())) + aAction->text();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* Check for the first item */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync if (mFileForProxyIcon != path)
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync {
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync /* @todo: vboxGlobal().openURL (path); should be able to open paths */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync QProcess process;
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync process.start ("/usr/bin/open", QStringList() << path, QIODevice::ReadOnly);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync process.waitForFinished();
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync }
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#else /* Q_WS_MAC */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync NOREF (aAction);
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync#endif /* Q_WS_MAC */
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync}
ad13c20995d0a1aafbfbd35b2d698ef2ff5fbeefvboxsync