1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-17 02:52:12 +01:00

Merge remote-tracking branch 'origin/kevinv033/OP-791' into next

Conflicts:
	ground/openpilotgcs/src/plugins/coreplugin/qml/AboutDialog.qml
This commit is contained in:
Fredrik Arvidsson 2013-04-22 20:14:05 +02:00
commit 538bedeb93
5 changed files with 258 additions and 260 deletions

View File

@ -64,7 +64,8 @@
<file>images/tx-rx.svg</file>
<file>qml/images/tab.png</file>
<file>qml/AboutDialog.qml</file>
<file>qml/FlickableWebView.qml</file>
<file>qml/AuthorsModel.qml</file>
<file>qml/ScrollDecorator.qml</file>
<file>qml/TabWidget.qml</file>
</qresource>
</RCC>

View File

@ -39,72 +39,74 @@
****************************************************************************/
import QtQuick 1.1
import QtWebKit 1.0
// This is a tabbed pane element. Add a nested Rectangle to add a tab.
TabWidget {
id: tabs
width: 640; height: 480
// This tab is for the GCS version information
Rectangle {
property string title: "OpenPilot GCS"
anchors.fill: parent
color: "#e3e3e3"
Rectangle {
anchors.fill: parent; anchors.margins: 20
color: "#e3e3e3"
Image {
source: "../images/openpilot_logo_128.png"
x: 0; y: 0; z: 100
fillMode: Image.PreserveAspectFit
}
Flickable {
anchors.fill: parent
anchors.centerIn: parent
Text {
id: versionLabel
x: 156; y: 0
width: 430; height: 379
horizontalAlignment: Qt.AlignLeft
font.pixelSize: 12
wrapMode: Text.WordWrap
// @var version exposed in authorsdialog.cpp
text: version
}
}
// Define AuthorsModel as type
property AuthorsModel authors: AuthorsModel {}
id: tabs
width: 640; height: 480
// This tab is for the GCS version information
Rectangle {
property string title: "OpenPilot GCS"
anchors.fill: parent
color: "#e3e3e3"
Rectangle {
anchors.fill: parent; anchors.margins: 20
color: "#e3e3e3"
Image {
source: "../images/openpilot_logo_128.png"
x: 0; y: 0; z: 100
fillMode: Image.PreserveAspectFit
}
Flickable {
anchors.fill: parent
anchors.centerIn: parent
Text {
id: versionLabel
x: 156; y: 0
width: 430; height: 379
horizontalAlignment: Qt.AlignLeft
font.pixelSize: 12
wrapMode: Text.WordWrap
// @var version exposed in authorsdialog.cpp
text: version
}
}
}
// This is a stub for the Plugins.
// Rectangle {
// property string title: "Plugins"
// anchors.fill: parent
// color: "#e3e3e3"
//
// Rectangle {
// anchors.fill: parent; anchors.margins: 20
// color: "#7fff7f"
// Text {
// width: parent.width - 20
// anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter
// font.pixelSize: 20
// wrapMode: Text.WordWrap
// }
// }
// }
// This tab is for the authors/contributors/credits
}
// This tab is for the authors/contributors/credits
Rectangle {
property string title: "Authors"
anchors.fill: parent; color: "#e3e3e3"
Rectangle {
property string title: "Authors"
anchors.fill: parent; color: "#e3e3e3"
Rectangle {
anchors.fill: parent; anchors.margins: 20
color: "#e3e3e3"
FlickableWebView {
id: webView
z: 0
url: "../CREDITS.html"
anchors { top: parent.top; left: parent.left; right: parent.right; bottom: parent.bottom }
}
}
}
}
anchors.fill: parent; anchors.margins: 20
color: "#e3e3e3"
Text {
id: description
text: "<h4>These people have been key contributors to the OpenPilot project. Without the work of the people in this list, OpenPilot would not be what it is today.</h4><p>This list is sorted alphabetically by name</p>"
width: 600
wrapMode: Text.WordWrap
}
ListView {
id: authorsView
y: description.y + description.height + 20
width: parent.width; height: parent.height - description.height - 20
spacing: 3
model: authors
delegate: Text {
text: name
}
clip: true
}
ScrollDecorator {
flickableItem: authorsView
}
}
}
}

View File

@ -0,0 +1,151 @@
/*
This list model was created for the AuthorsDialog.
*/
import QtQuick 1.1
ListModel {
ListElement{ name:"Connor Abbott" }
ListElement{ name:"David Ankers" }
ListElement{ name:"Sergiy Anikeyev" }
ListElement{ name:"Pedro Assuncao" }
ListElement{ name:"Fredrik Arvidsson" }
ListElement{ name:"Werner Backes" }
ListElement{ name:"Jose Barros" }
ListElement{ name:"Pete Boehl" }
ListElement{ name:"David Carlson" }
ListElement{ name:"James Cotton" }
ListElement{ name:"Steve Doll" }
ListElement{ name:"Piotr Esden-Tempski" }
ListElement{ name:"Richard Flay" }
ListElement{ name:"Peter Farnworth" }
ListElement{ name:"Ed Faulkner" }
ListElement{ name:"Darren Furniss" }
ListElement{ name:"Frederic Goddeeris" }
ListElement{ name:"Daniel Godin" }
ListElement{ name:"Bani Greyling" }
ListElement{ name:"Nuno Guedes" }
ListElement{ name:"Erik Gustavsson" }
ListElement{ name:"Peter Gunnarsson" }
ListElement{ name:"Dean Hall" }
ListElement{ name:"Joe Hlebasko" }
ListElement{ name:"Andy Honecker" }
ListElement{ name:"Ryan Hunt" }
ListElement{ name:"Mark James" }
ListElement{ name:"Sami Korhonen" }
ListElement{ name:"Thorsten Klose" }
ListElement{ name:"Hallvard Kristiansen" }
ListElement{ name:"Edouard Lafargue" }
ListElement{ name:"Mike Labranche" }
ListElement{ name:"Fredrik Larsson" }
ListElement{ name:"Pablo Lema" }
ListElement{ name:"David Llama" }
ListElement{ name:"Matt Lipski" }
ListElement{ name:"Les Newell" }
ListElement{ name:"Ken Northup" }
ListElement{ name:"Greg Matthews" }
ListElement{ name:"Guy McCaldin" }
ListElement{ name:"Gary Mortimer" }
ListElement{ name:"Alessio Morale" }
ListElement{ name:"Cathy Moss" }
ListElement{ name:"Angus Peart" }
ListElement{ name:"Dmytro Poplavskiy" }
ListElement{ name:"Eric Price" }
ListElement{ name:"Richard Querin" }
ListElement{ name:"Randy Ram" }
ListElement{ name:"Laurent Ribon" }
ListElement{ name:"Julien Rouviere" }
ListElement{ name:"Jackson Russell" }
ListElement{ name:"Zik Saleeba" }
ListElement{ name:"Professor Dale Schinstock" }
ListElement{ name:"Professor Kenn Sebesta" }
ListElement{ name:"Oleg Semyonov" }
ListElement{ name:"Stacey Sheldon" }
ListElement{ name:"Troy Schultz" }
ListElement{ name:"Dr. Erhard Siegl" }
ListElement{ name:"Mike Smith" }
ListElement{ name:"Alex Sowa" }
ListElement{ name:"Pete Stapley" }
ListElement{ name:"Rowan Taubitz" }
ListElement{ name:"Andrew Thoms" }
ListElement{ name:"Jasper van Loenen" }
ListElement{ name:"Vassilis Varveropoulos" }
ListElement{ name:"Kevin Vertucio" }
ListElement{ name:"Alex Vrubel" }
ListElement{ name:"Brian Webb" }
ListElement{ name:"Justin Welander" }
ListElement{ name:"Mat Wellington" }
ListElement{ name:"Kendal Wells" }
ListElement{ name:"Dmitriy Zaitsev" }
}

View File

@ -1,196 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** 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.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 1.0
import QtWebKit 1.0
Flickable {
property alias title: webView.title
property alias icon: webView.icon
property alias progress: webView.progress
property alias url: webView.url
property alias back: webView.back
property alias stop: webView.stop
property alias reload: webView.reload
property alias forward: webView.forward
id: flickable
width: parent.width
contentWidth: Math.max(parent.width,webView.width)
contentHeight: Math.max(parent.height,webView.height)
// anchors.top: headerSpace.bottom
anchors.bottom: parent.top
anchors.left: parent.left
anchors.right: parent.right
pressDelay: 200
clip: true
onWidthChanged : {
// Expand (but not above 1:1) if otherwise would be smaller that available width.
if (width > webView.width*webView.contentsScale && webView.contentsScale < 1.0)
webView.contentsScale = width / webView.width * webView.contentsScale;
}
WebView {
id: webView
transformOrigin: Item.TopLeft
function fixUrl(url)
{
if (url == "") return url
if (url[0] == "/") return "file://"+url
if (url.indexOf(":")<0) {
if (url.indexOf(".")<0 || url.indexOf(" ")>=0) {
// Fall back to a search engine; hard-code Wikipedia
return "http://en.wikipedia.org/w/index.php?search="+url
} else {
return "http://"+url
}
}
return url
}
url: fixUrl(webBrowser.urlString)
smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions
focus: true
onAlert: console.log(message)
function doZoom(zoom,centerX,centerY)
{
if (centerX) {
var sc = zoom*contentsScale;
scaleAnim.to = sc;
flickVX.from = flickable.contentX
flickVX.to = Math.max(0,Math.min(centerX-flickable.width/2,webView.width*sc-flickable.width))
finalX.value = flickVX.to
flickVY.from = flickable.contentY
flickVY.to = Math.max(0,Math.min(centerY-flickable.height/2,webView.height*sc-flickable.height))
finalY.value = flickVY.to
quickZoom.start()
}
}
Keys.onLeftPressed: webView.contentsScale -= 0.1
Keys.onRightPressed: webView.contentsScale += 0.1
preferredWidth: flickable.width
preferredHeight: flickable.height
contentsScale: 1
onContentsSizeChanged: {
// zoom out
contentsScale = Math.min(1,flickable.width / contentsSize.width)
}
onUrlChanged: {
// got to topleft
flickable.contentX = 0
flickable.contentY = 0
// if (url != null) { header.editUrl = url.toString(); }
}
onDoubleClick: {
if (!heuristicZoom(clickX,clickY,2.5)) {
var zf = flickable.width / contentsSize.width
if (zf >= contentsScale)
zf = 2.0*contentsScale // zoom in (else zooming out)
doZoom(zf,clickX*zf,clickY*zf)
}
}
SequentialAnimation {
id: quickZoom
PropertyAction {
target: webView
property: "renderingEnabled"
value: false
}
ParallelAnimation {
NumberAnimation {
id: scaleAnim
target: webView
property: "contentsScale"
// the to property is set before calling
easing.type: Easing.Linear
duration: 200
}
NumberAnimation {
id: flickVX
target: flickable
property: "contentX"
easing.type: Easing.Linear
duration: 200
from: 0 // set before calling
to: 0 // set before calling
}
NumberAnimation {
id: flickVY
target: flickable
property: "contentY"
easing.type: Easing.Linear
duration: 200
from: 0 // set before calling
to: 0 // set before calling
}
}
// Have to set the contentXY, since the above 2
// size changes may have started a correction if
// contentsScale < 1.0.
PropertyAction {
id: finalX
target: flickable
property: "contentX"
value: 0 // set before calling
}
PropertyAction {
id: finalY
target: flickable
property: "contentY"
value: 0 // set before calling
}
PropertyAction {
target: webView
property: "renderingEnabled"
value: true
}
}
onZoomTo: doZoom(zoom,centerX,centerY)
}
}

View File

@ -0,0 +1,40 @@
import QtQuick 1.1
Rectangle {
id: scrollDecorator
property Flickable flickableItem: null
Loader {
id: scrollLoader
sourceComponent: scrollDecorator.flickableItem ? scrollBar : undefined
}
Component.onDestruction: scrollLoader.sourceComponent = undefined
Component {
id: scrollBar
Rectangle {
property Flickable flickable: scrollDecorator.flickableItem
parent: flickable
anchors.right: parent.right
smooth: true
radius: 2
color: "gray"
border.color: "lightgray"
border.width: 1.0
opacity: flickable.moving ? 0.8 : 0.4
Behavior on opacity {
NumberAnimation { duration: 500 }
}
width: 4
height: flickable.height * (flickable.height / flickable.contentHeight)
y: flickable.height * (flickable.contentY / flickable.contentHeight)
visible: flickable.height < flickable.contentHeight
}
}
}