LunaSysMgr
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DashboardWindowContainer.h
Go to the documentation of this file.
1 /* @@@LICENSE
2 *
3 * Copyright (c) 2010-2012 Hewlett-Packard Development Company, L.P.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * LICENSE@@@ */
18 
19 
20 
21 
22 #ifndef DASHBOARDWINDOWCONTAINER_H
23 #define DASHBOARDWINDOWCONTAINER_H
24 
25 #include "Common.h"
26 
27 #include <QList>
28 #include <QObject>
29 #include <QParallelAnimationGroup>
30 #include <QSet>
31 
32 #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
33 #include <QWeakPointer>
34 #endif
35 
36 #include <QPointer>
37 #include <QPixmap>
38 
39 QT_BEGIN_NAMESPACE
40 class QPropertyAnimation;
41 QT_END_NAMESPACE
42 
43 #include "GraphicsItemContainer.h"
44 #include "VariantAnimation.h"
45 
47 class QGraphicsSceneMouseEvent;
48 class DashboardWindow;
50 
52 {
53  Q_OBJECT
54 public:
55 
57  virtual ~DashboardWindowContainer();
58 
60  void setScrollBottom(int newBottom);
61  void addWindow(DashboardWindow* win);
62  void removeWindow(DashboardWindow* win);
63  bool empty() const;
64 
65  inline int scrollBottom() const { return m_scrollBottom; }
66  inline int viewportHeight() const { return m_viewportHeight; }
67  inline int contentsHeight() const { return m_contentsHeight; }
68 
69  void resizeWindowsEventSync(int w);
70  void focusAllWindows(bool focus);
71  void sendClickToDashboardWindow(int num, QPointF tap, bool whileLocked);
72  void resetLocalState(bool forceReset = false);
73  int getMaximumHeightForMenu() const;
74 
75  QRectF boundingRect() const;
76 
77  Q_INVOKABLE int getWidth() { return boundingRect().width(); }
78  Q_INVOKABLE int getHeight() { return boundingRect().height(); }
79  Q_INVOKABLE void mouseWasGrabbedByParent();
80 
81  QList<DashboardWindow*> windows() const { return m_items; }
82 
83  static int getDashboardWindowHeight() {
84  return sDashboardWindowHeight;
85  }
86 
87 private:
88 
89  virtual void mousePressEvent(QGraphicsSceneMouseEvent* event);
90  virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
91  virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
92  virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value);
93  virtual bool sceneEvent(QEvent* event);
94  virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*);
95  virtual void paintInsideMenu(QPainter* painter);
96  void paintHoriz3Tile(QPainter* painter, QPixmap* maskImg, int x, int y, int width, int height, int leftOffset, int rightOffset);
97  void animateResize(int width, int height);
98  void heightAnimationValueChanged( const QVariant & value);
99 
100  enum Operation {
101  Invalid = 0,
102  SingleWindowAdded,
103  SingleWindowRemoved,
104  MultipleWindowsRemoved
105  };
106 
107  enum DeviceShowMasks {
108  ShowNoMasks=0,
109  TopMaskOnly,
110  BottomMaskOnly,
111  ShowBothMasks
112  };
113 
114  enum FlickDirection {
115  Ignore=0,
116  FlickDown,
117  FlickUp
118  };
119 
120  enum WindowPosition {
121  Unknown=0,
122  InvisibleAboveViewport,
123  Visible,
124  InvisibleBelowViewport,
125  VisibleAboveDeletedItem,
126  VisibleBelowDeletedItem
127  };
128 
129 Q_SIGNALS:
130 
134  void signalEmpty();
136  void signalItemDragState(bool itemBeingDragged);
137 
138 private Q_SLOTS:
139 
140  void slotProcessAnimationComplete();
141  void slotDeleteAnimationFinished();
142  void slotNegativeSpaceAboutToChange(const QRect& r, bool, bool screenResizing);
143  void slotNegativeSpaceChanged(const QRect& r);
144  void slotNegativeSpaceChangeFinished(const QRect& r);
145 
146 private:
147 
148  void initPixmaps();
149  void calculateScrollProperties();
150  void restoreNonDeletedItems(bool recalcScrollBottom=true);
151  void showOrHideMasks();
152  void handleTap(const QPointF& pos);
153  void triggerItemDelete(DashboardWindow* win);
154  void animateWindowsToFinalDestination(int yCoOrd);
155  void animateWindowsToFinalDestinationInMenu(int topCoord);
156  void setWindowsToFinalDestinationInMenu(int topCoord);
157  void setMaskVisibility(bool& topMask, bool& bottomMask);
158 
159  //bool isViewPortShowingAllItems();
160 
161  DeviceShowMasks m_maskDisplayStatus;
162  Operation m_operation;
164  bool m_trackingMouseDirection;
165  bool m_vertLockedMovement;
166  QList<DashboardWindow*> m_items;
167  QSet<DashboardWindow*> m_pendingDeleteItems;
168  QSet<DashboardWindow*> m_deletedItems;
169  QPointer<QPropertyAnimation> m_updateViewPortAnimation;
170 #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
171  QWeakPointer<DashboardWindow> m_draggedWindow;
172 #else
173  QPointer<DashboardWindow> m_draggedWindow;
174 #endif
175 
176  bool m_isMenu;
177 
178  static const int sDashboardWindowHeight;
179  static const int sDashboardBadgeWidth;
180  int m_itemsDeleted;
181  int m_contentsHeight;
182  int m_viewportHeight;
183  int m_scrollBottom;
184  int m_IndexOfDeletedItem;
185  bool m_verticalMouseMoveInProgress;
186  bool m_seenFlick;
187  bool m_isViewPortAnimationInProgress;
188  bool m_isWindowBeingDeleted;
189  bool m_animateVisibleViewportHeight;
190  FlickDirection m_FlickDirection;
191  mutable int m_DashboardTopPadding;
192  mutable int m_BottomMaskHeightCorrection;
193  int m_menuSeparatorHeight;
194  bool m_dashboardManualDrag;
195 
196  QParallelAnimationGroup m_anim;
197  QParallelAnimationGroup m_deleteAnim;
199  QPixmap* m_tabletBackground;
200  QPixmap* m_tabletTopMask;
201  QPixmap* m_tabletbottomMask;
202  QPixmap* m_tabletArrowUp;
203  QPixmap* m_tabletArrowDown;
204  QPixmap* m_menuSwipeBkg;
205  QPixmap* m_menuSwipeHighlight;
206  QPixmap* m_itemSeparator;
207 };
208 
209 #endif /* DASHBOARDWINDOWCONTAINER_H */