plasma-framework/src/declarativeimports/core/dialog.h

183 lines
5.9 KiB
C
Raw Normal View History

/***************************************************************************
* Copyright 2011 Marco Martin <mart@kde.org> *
* Copyright 2013 Sebastian Kügler <sebas@kde.org> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#ifndef DIALOG_PROXY_P
#define DIALOG_PROXY_P
#include <QQuickItem>
#include <QQuickWindow>
#include <QWeakPointer>
#include <QPoint>
#include <Plasma/Plasma>
2014-01-23 15:17:18 +01:00
#include <Plasma/Theme>
2013-10-30 14:08:32 +01:00
#include <netwm_def.h>
class QQuickItem;
namespace Plasma
{
2013-02-21 14:32:48 +01:00
class FrameSvgItem;
}
/**
2013-02-26 05:47:12 +01:00
* QML wrapper for dialogs
*
2013-02-26 05:47:12 +01:00
* Exposed as `PlasmaCore.Dialog` in QML.
*/
class DialogProxy : public QQuickWindow
{
Q_OBJECT
2011-12-23 14:50:34 +01:00
/**
* The main QML item that will be displayed in the Dialog
*/
Q_PROPERTY(QQuickItem *mainItem READ mainItem WRITE setMainItem NOTIFY mainItemChanged)
2011-12-23 14:50:34 +01:00
/**
* The main QML item that will be displayed in the Dialog
*/
Q_PROPERTY(QQuickItem *visualParent READ visualParent WRITE setVisualParent NOTIFY visualParentChanged)
2011-12-23 14:50:34 +01:00
/**
* Margins of the dialog around the mainItem.
* @see DialogMargins
*/
Q_PROPERTY(QObject *margins READ margins CONSTANT)
2011-12-23 14:50:34 +01:00
/**
* Plasma Location of the dialog window. Useful if this dialog is a popup for a panel
2011-12-23 14:50:34 +01:00
*/
2013-10-18 16:50:56 +02:00
Q_PROPERTY(Plasma::Types::Location location READ location WRITE setLocation NOTIFY locationChanged)
2013-10-30 14:08:32 +01:00
/**
* Type of the window
*/
Q_PROPERTY(WindowType type READ type WRITE setType NOTIFY typeChanged)
/**
* Whether the dialog should be hidden when the dialog loses focus.
*
* The default value is @c false.
**/
Q_PROPERTY(bool hideOnWindowDeactivate READ hideOnWindowDeactivate WRITE setHideOnWindowDeactivate NOTIFY hideOnWindowDeactivateChanged)
/**
* Whether the dialog is output only. Default value is @c false. If it is @c true
* the dialog does not accept input and all pointer events are not accepted, thus the dialog
* is click through.
*
* This property is currently only supported on the X11 platform. On any other platform the
* property has no effect.
**/
Q_PROPERTY(bool outputOnly READ isOutputOnly WRITE setOutputOnly NOTIFY outputOnlyChanged)
2013-02-20 19:31:06 +01:00
Q_CLASSINFO("DefaultProperty", "mainItem")
public:
2013-10-30 14:08:32 +01:00
enum WindowType {
Normal = NET::Normal,
Dock = NET::Dock,
Dialog = NET::Dialog,
PopupMenu = NET::PopupMenu,
Tooltip = NET::Tooltip,
Notification = NET::Notification
2011-02-25 19:00:01 +01:00
};
2013-10-30 14:08:32 +01:00
Q_ENUMS(WindowType)
2011-02-25 19:00:01 +01:00
DialogProxy(QQuickItem *parent = 0);
~DialogProxy();
QQuickItem *mainItem() const;
void setMainItem(QQuickItem *mainItem);
QQuickItem *visualParent() const;
void setVisualParent(QQuickItem *visualParent);
2013-10-18 16:50:56 +02:00
Plasma::Types::Location location() const;
void setLocation(Plasma::Types::Location location);
QObject *margins() const;
2014-01-09 12:10:22 +01:00
/*
* set the dialog position. subclasses may change it. ToolTipDialog adjusts the position in an animated way
*/
2014-01-09 16:36:59 +01:00
virtual void adjustGeometry(const QRect &geom);
2014-01-09 12:10:22 +01:00
/**
* @returns The suggested screen position for the popup
* @arg item the item the popup has to be positioned relatively to. if null, the popup will be positioned in the center of the window
* @arg alignment alignment of the popup compared to the item
*/
QPoint popupPosition(QQuickItem *item, const QSize &size, Qt::AlignmentFlag alignment=Qt::AlignCenter) ;
2011-12-23 14:50:34 +01:00
2013-10-30 14:08:32 +01:00
void setType(WindowType type);
WindowType type() const;
bool hideOnWindowDeactivate() const;
void setHideOnWindowDeactivate(bool hide);
void setOutputOnly(bool outputOnly);
bool isOutputOnly() const;
void updateInputShape();
Q_SIGNALS:
void mainItemChanged();
void locationChanged();
void visualParentChanged();
2013-10-30 14:08:32 +01:00
void typeChanged();
void hideOnWindowDeactivateChanged();
void outputOnlyChanged();
2013-04-09 00:08:23 +02:00
public Q_SLOTS:
2013-02-21 14:49:28 +01:00
void syncMainItemToSize();
2013-02-20 19:31:06 +01:00
void syncToMainItemSize();
void requestSyncToMainItemSize(bool delayed = false);
2011-02-25 20:37:56 +01:00
protected:
// bool eventFilter(QObject *watched, QEvent *event);
2013-02-20 15:18:58 +01:00
void resizeEvent(QResizeEvent *re);
2013-02-20 19:39:03 +01:00
void focusInEvent(QFocusEvent *ev);
void focusOutEvent(QFocusEvent *ev);
2013-08-29 15:11:07 +02:00
void showEvent(QShowEvent *event);
void hideEvent(QHideEvent *event);
bool event(QEvent *event);
2011-02-25 20:37:56 +01:00
2013-02-20 19:31:06 +01:00
QTimer *m_syncTimer;
2013-05-14 18:27:27 +02:00
Plasma::Types::Location m_location;
Plasma::FrameSvgItem *m_frameSvgItem;
QWeakPointer<QQuickItem> m_mainItem;
QWeakPointer<QQuickItem> m_visualParent;
private Q_SLOTS:
void syncBorders();
void updateVisibility(bool visible);
private:
QRect m_cachedGeometry;
2013-10-30 14:08:32 +01:00
WindowType m_type;
bool m_hideOnWindowDeactivate;
bool m_outputOnly;
2014-01-23 15:17:18 +01:00
Plasma::Theme m_theme;
};
#endif