source: trunk/demos/embedded/anomaly/src/BrowserWindow.cpp@ 769

Last change on this file since 769 was 651, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.2 sources.

  • Property svn:eol-style set to native
File size: 5.3 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the demos of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "BrowserWindow.h"
43
44#include <QtCore>
45#include <QtGui>
46#include <QPropertyAnimation>
47#include <QResizeEvent>
48
49#include "BrowserView.h"
50#include "HomeView.h"
51
52BrowserWindow::BrowserWindow()
53 : m_slidingSurface(new QWidget(this))
54 , m_homeView(new HomeView(m_slidingSurface))
55 , m_browserView(new BrowserView(m_slidingSurface))
56 , m_animation(new QPropertyAnimation(this, "slideValue"))
57{
58 m_slidingSurface->setAutoFillBackground(true);
59
60 m_homeView->resize(size());
61
62 m_browserView->resize(size());
63
64 connect(m_homeView, SIGNAL(addressEntered(QString)), SLOT(gotoAddress(QString)));
65 connect(m_homeView, SIGNAL(urlActivated(QUrl)), SLOT(navigate(QUrl)));
66
67 connect(m_browserView, SIGNAL(menuButtonClicked()), SLOT(showHomeView()));
68
69 m_animation->setDuration(200);
70 connect(m_animation, SIGNAL(finished()), SLOT(animationFinished()));
71
72 setSlideValue(0.0f);
73}
74
75void BrowserWindow::gotoAddress(const QString &address)
76{
77 m_browserView->navigate(QUrl::fromUserInput(address));
78 showBrowserView();
79}
80
81void BrowserWindow::animationFinished()
82{
83 m_animation->setDirection(QAbstractAnimation::Forward);
84}
85
86void BrowserWindow::navigate(const QUrl &url)
87{
88 m_browserView->navigate(url);
89 showBrowserView();
90}
91
92void BrowserWindow::setSlideValue(qreal slideRatio)
93{
94 // we use a ratio to handle resize corectly
95 const int pos = -qRound(slideRatio * width());
96 m_slidingSurface->scroll(pos - m_homeView->x(), 0);
97
98 if (qFuzzyCompare(slideRatio, static_cast<qreal>(1.0f))) {
99 m_browserView->show();
100 m_homeView->hide();
101 } else if (qFuzzyCompare(slideRatio, static_cast<qreal>(0.0f))) {
102 m_homeView->show();
103 m_browserView->hide();
104 } else {
105 m_browserView->show();
106 m_homeView->show();
107 }
108}
109
110qreal BrowserWindow::slideValue() const
111{
112 Q_ASSERT(m_slidingSurface->x() < width());
113 return static_cast<qreal>(qAbs(m_homeView->x())) / width();
114}
115
116void BrowserWindow::showHomeView()
117{
118 m_animation->setStartValue(slideValue());
119 m_animation->setEndValue(0.0f);
120 m_animation->start();
121 m_homeView->setFocus();
122}
123
124void BrowserWindow::showBrowserView()
125{
126 m_animation->setStartValue(slideValue());
127 m_animation->setEndValue(1.0f);
128 m_animation->start();
129
130 m_browserView->setFocus();
131}
132
133void BrowserWindow::keyReleaseEvent(QKeyEvent *event)
134{
135 QWidget::keyReleaseEvent(event);
136
137 if (event->key() == Qt::Key_F3) {
138 if (m_animation->state() == QAbstractAnimation::Running) {
139 const QAbstractAnimation::Direction direction = m_animation->direction() == QAbstractAnimation::Forward
140 ? QAbstractAnimation::Forward
141 : QAbstractAnimation::Backward;
142 m_animation->setDirection(direction);
143 } else if (qFuzzyCompare(slideValue(), static_cast<qreal>(1.0f)))
144 showHomeView();
145 else
146 showBrowserView();
147 event->accept();
148 }
149}
150
151void BrowserWindow::resizeEvent(QResizeEvent *event)
152{
153 const QSize oldSize = event->oldSize();
154 const qreal oldSlidingRatio = static_cast<qreal>(qAbs(m_homeView->x())) / oldSize.width();
155
156 const QSize newSize = event->size();
157 m_slidingSurface->resize(newSize.width() * 2, newSize.height());
158
159 m_homeView->resize(newSize);
160 m_homeView->move(0, 0);
161
162 m_browserView->resize(newSize);
163 m_browserView->move(newSize.width(), 0);
164
165 setSlideValue(oldSlidingRatio);
166}
Note: See TracBrowser for help on using the repository browser.