summaryrefslogtreecommitdiffstats
path: root/src/other/widgetmanager.h
blob: fad056c5d0f1017a81252a33b486ca59966ad7d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**************************************************************************
**
** This file is part of Qt Simulator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** No Commercial Usage
**
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights.  These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**************************************************************************/

#ifndef WIDGETMANAGER_H
#define WIDGETMANAGER_H

#include "deviceitem.h"
#include "qsimulatordata_p.h"

#include <QtGui/QImage>
#include <QtCore/QObject>

class Application;
class DisplayWidget;
class Widget;
class QPoint;
class QRect;
class QTableWidget;
class QWidget;
class QMenuBar;

class WidgetManager : public QObject
{
    Q_OBJECT
public:
    explicit WidgetManager(DisplayWidget *dw, QObject *parent = 0);
    ~WidgetManager();

    Widget* widgetForId(int) const;
    Widget* focusWidget() const;
    Widget* activeWidget() const;
    Widget* topWidget() const;

    DisplayWidget* display() const;
    QImage::Format imageFormat() const;
    inline QWidget* logWidget() { return configWidget; }

    QtSimulatorPrivate::NewWindowInfo create(
        int parentWidgetId, QRect geometry, const QString &title, Application *app);

public slots:
    int widgetAt(const QPoint &position) const;
    void showWidget(int);
    void paintWidget(int id);
    void setWidgetGeometry(int id, const QRect &geometry);
    void moveWidget(int id, const QPoint &to);
    void hideWidget(int id);
    void destroyWidget(int id);
    void raiseAboveMenus(int id);
    void dropBelowMenus(int id);
    void stackWidget(int id, int pos); // -1 front, -2 back
    void setHighestZ(Widget *w);
    void setLowestZ(Widget *w);
    void setZBefore(Widget *w, Widget *other);
    void setWidgetWindowTitle(int id, const QString &title);
    void setFocusWidget(int id);
    void setWidgetOpacity(int id, double opacity);
    void setWidgetParent(int id, int newParentId);
    void setMaemo5StackedWindowFlag(int id, bool stacked);
    void setOrientationAttribute(int id, int orientation, bool on);

    void onApplicationUnregistered(int appId);

    void sendKeyPress(Qt::Key key, const QString &text = "");
    void sendKeyRelease(Qt::Key key);
    void closeCurrentWindow();
    void triggerSymbianSoftKeyAction(int buttonNr);

    void changeOffset(const QPoint &offset);

    void updateSymbianSoftKeys();

private slots:
    void handleUpdateRequests();
    void updateMaemoNavigate(Widget *topWidget);
    void maybeFullscreen(Widget *topWidget);
    void handleTopOrientation(Widget *topWidget);

signals:
    void topWidgetChanged(Widget *);
    void topOrientationChanged(Qt::WidgetAttribute orientation);
    void symbianSoftKeyTextChanged(int buttonNr, QString text);
    void maemoNavigationChanged(MaemoNavigationMode mode);

private:
    void updateLogItem(int id);
    void removeWidgetFromTable(int id);
    void updateWidgetOffset(const QPoint &newOffset);
    void updateMaemoNavigate();
    QString freeSharedMemoryName();

    QList<Widget*> widgets;
    QTableWidget *tableWidget;
    QWidget *configWidget;
    DisplayWidget *displayWidget;
    Widget *mFocusWidget;
    QPoint mOffset;
    int mSharedMemoryIndex;

    QImage::Format mImageFormat;
    bool mSymbianSoftKeysSupported;
};

#endif