Commit 147467d4 authored by TSC21's avatar TSC21

Merge branch 'master' of https://github.com/mavlink/qgroundcontrol into lpe_parameters

parents 344ede49 21d48a5b
......@@ -112,40 +112,41 @@
<file alias="FlightDisplay.qml">src/ui/flightdisplay/FlightDisplay.qml</file>
<file alias="MapDisplay.qml">src/ui/mapdisplay/MapDisplay.qml</file>
<!-- QML Main UI Components -->
<file alias="QGroundControl/FlightControls/qmldir">src/ui/qmlcommon/qmldir</file>
<file alias="QGroundControl/FlightControls/QGCAltitudeWidget.qml">src/ui/qmlcommon/QGCAltitudeWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCAttitudeWidget.qml">src/ui/qmlcommon/QGCAttitudeWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCArtificialHorizon.qml">src/ui/qmlcommon/QGCArtificialHorizon.qml</file>
<file alias="QGroundControl/FlightControls/QGCAttitudeInstrument.qml">src/ui/qmlcommon/QGCAttitudeInstrument.qml</file>
<file alias="QGroundControl/FlightControls/QGCAttitudeWidget.qml">src/ui/qmlcommon/QGCAttitudeWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCCompass.qml">src/ui/qmlcommon/QGCCompass.qml</file>
<file alias="QGroundControl/FlightControls/QGCCompassInstrument.qml">src/ui/qmlcommon/QGCCompassInstrument.qml</file>
<file alias="QGroundControl/FlightControls/QGCCurrentAltitude.qml">src/ui/qmlcommon/QGCCurrentAltitude.qml</file>
<file alias="QGroundControl/FlightControls/QGCCurrentSpeed.qml">src/ui/qmlcommon/QGCCurrentSpeed.qml</file>
<file alias="QGroundControl/FlightControls/QGCHudMessage.qml">src/ui/qmlcommon/QGCHudMessage.qml</file>
<file alias="QGroundControl/FlightControls/QGCMapBackground.qml">src/ui/qmlcommon/QGCMapBackground.qml</file>
<file alias="QGroundControl/FlightControls/QGCMapToolButton.qml">src/ui/qmlcommon/QGCMapToolButton.qml</file>
<file alias="QGroundControl/FlightControls/QGCPitchWidget.qml">src/ui/qmlcommon/QGCPitchWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCSpeedWidget.qml">src/ui/qmlcommon/QGCSpeedWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCSlider.qml">src/ui/qmlcommon/QGCSlider.qml</file>
<file alias="QGroundControl/FlightControls/QGCSpeedWidget.qml">src/ui/qmlcommon/QGCSpeedWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCWaypointEditor.qml">src/ui/qmlcommon/QGCWaypointEditor.qml</file>
<file alias="QGroundControl/FlightControls/QGCMapToolButton.qml">src/ui/qmlcommon/QGCMapToolButton.qml</file>
<file alias="QGroundControl/FlightControls/QGCArtificialHorizon.qml">src/ui/qmlcommon/QGCArtificialHorizon.qml</file>
<file alias="QGroundControl/FlightControls/qmldir">src/ui/qmlcommon/qmldir</file>
<!-- QML Map Resources -->
<file alias="QGroundControl/FlightControls/QGCWaypoint.qml">src/ui/qmlcommon/QGCWaypoint.qml</file>
<!-- QML Main UI Resources -->
<file alias="attitudeDial.svg">src/ui/qmlcommon/attitudeDial.svg</file>
<file alias="attitudeInstrument.svg">src/ui/qmlcommon/attitudeInstrument.svg</file>
<file alias="attitudePointer.svg">src/ui/qmlcommon/attitudePointer.svg</file>
<file alias="buttonHome.svg">src/ui/qmlcommon/buttonHome.svg</file>
<file alias="buttonLeft.svg">src/ui/qmlcommon/buttonLeft.svg</file>
<file alias="buttonMore.svg">src/ui/qmlcommon/buttonMore.svg</file>
<file alias="buttonRight.svg">src/ui/qmlcommon/buttonRight.svg</file>
<file alias="compass.svg">src/ui/qmlcommon/compass.svg</file>
<file alias="compassInstrumentAirplane.svg">src/ui/qmlcommon/compassInstrumentAirplane.svg</file>
<file alias="compassInstrumentDial.svg">src/ui/qmlcommon/compassInstrumentDial.svg</file>
<file alias="compassNeedle.svg">src/ui/qmlcommon/compassNeedle.svg</file>
<file alias="crossHair.svg">src/ui/qmlcommon/crossHair.svg</file>
<file alias="rollDialWhite.svg">src/ui/qmlcommon/rollDialWhite.svg</file>
<file alias="rollPointerWhite.svg">src/ui/qmlcommon/rollPointerWhite.svg</file>
<file alias="scale.png">src/ui/qmlcommon/scale.png</file>
<file alias="scale_end.png">src/ui/qmlcommon/scale_end.png</file>
<file alias="buttonLeft.svg">src/ui/qmlcommon/buttonLeft.svg</file>
<file alias="buttonRight.svg">src/ui/qmlcommon/buttonRight.svg</file>
<file alias="buttonHome.svg">src/ui/qmlcommon/buttonHome.svg</file>
<file alias="buttonMore.svg">src/ui/qmlcommon/buttonMore.svg</file>
<file alias="attitudeInstrument.svg">src/ui/qmlcommon/attitudeInstrument.svg</file>
<file alias="attitudeDial.svg">src/ui/qmlcommon/attitudeDial.svg</file>
<file alias="attitudePointer.svg">src/ui/qmlcommon/attitudePointer.svg</file>
<file alias="compassInstrumentAirplane.svg">src/ui/qmlcommon/compassInstrumentAirplane.svg</file>
<file alias="compassInstrumentDial.svg">src/ui/qmlcommon/compassInstrumentDial.svg</file>
</qresource>
<qresource prefix="/AutoPilotPlugins/PX4">
......
......@@ -2,12 +2,16 @@
This is the master style sheet as well as the dark style. This style sheet should contain both
color and size/positioning information for all styled controls. This sheet is always loaded first
Then the user specified style sheet is loaded after it to override and color settings.
Font sizes are defined with tokens, which are parsed and replaced at run time.
*/
* {
background-color: #222;
color: #FFF;
font-size: 12pt;
font-size: FONT_NORMAL;
font-weight: lighter;
}
QWidget#viewModeWidget {
......@@ -128,7 +132,7 @@ QGroupBox::title {
subcontrol-position: top center;
margin: 0 3px 0 3px;
padding: 0 3px 0 0;
font: bold 8px;
font: bold FONT_SMALL;
color: #DDD;
}
......@@ -149,7 +153,7 @@ QLabel:disabled {
}
QLabel#noUas {
font-size: 30pt;
font-size: FONT_LARGE;
}
QMessageBox {
......@@ -158,7 +162,7 @@ QMessageBox {
}
QLabel#tabTitleLabel {
font-size: 28pt;
font-size: FONT_LARGE;
font-weight: lighter;
margin-top: 16px;
margin-bottom: 8px;
......@@ -166,7 +170,7 @@ QLabel#tabTitleLabel {
QLabel#instructionLabel {
color: #FEC654;
font-size: 26pt;
font-size: FONT_LARGE;
}
QLineEdit {
......@@ -226,7 +230,7 @@ QPlainTextEdit {
border: 1px solid #777;
border-radius: 2px;
font-family: "Monospace";
font: large;
font: FONT_SMALL;
}
QProgressBar {
......@@ -529,11 +533,10 @@ UASQuickViewItem QLabel {
padding: 0;
margin: 0;
min-height: 1em;
font-weight: bold;
}
UASQuickViewItem QLabel#value {
font-size: 20pt;
font-size: FONT_LARGE;
}
UASView {
......
......@@ -40,7 +40,7 @@ AutoPilotPluginManager::AutoPilotPluginManager(QObject* parent) :
// We need to track uas coming and going so that we can instantiate plugins for each uas
connect(uasMgr, &UASManagerInterface::UASCreated, this, &AutoPilotPluginManager::_uasCreated);
connect(uasMgr, &UASManagerInterface::UASDeleted, this, &AutoPilotPluginManager::_uasDeleted);
connect(uasMgr, SIGNAL(UASDeleted(UASInterface*)), this, SLOT(_uasDeleted(UASInterface*)));
}
AutoPilotPluginManager::~AutoPilotPluginManager()
......
......@@ -97,7 +97,7 @@ QGCView {
QGCLabel {
id: header
width: parent.width
font.pointSize: ScreenTools.largeFontPointSize
font.pixelSize: ScreenTools.largeFontPixelSize
text: "AIRFRAME CONFIG"
}
......@@ -225,4 +225,4 @@ QGCView {
} // Flow - summary boxes
} // Scroll View - summary boxes
} // QGCViewPanel
} // QGCView
\ No newline at end of file
} // QGCView
......@@ -102,9 +102,10 @@ void AirframeComponentController::changeAutostart(void)
getParameterFact(-1, "SYS_AUTOSTART")->setValue(_autostartId);
getParameterFact(-1, "SYS_AUTOCONFIG")->setValue(1);
// Wait for the parameters to flow through system
// FactSystem doesn't currently have a mechanism to wait for the parameters to come backf from the board.
// So instead we wait for enough time for the parameters to hoepfully make it to the board.
qgcApp()->processEvents(QEventLoop::ExcludeUserInputEvents);
QGC::SLEEP::sleep(1);
QGC::SLEEP::sleep(3);
qgcApp()->processEvents(QEventLoop::ExcludeUserInputEvents);
// Reboot board
......
......@@ -384,7 +384,7 @@ Item {
QGCLabel {
text: "FLIGHT MODES CONFIG"
font.pointSize: ScreenTools.largeFontPointSize
font.pixelSize: ScreenTools.largeFontPixelSize
}
Item { height: 20; width: 10 } // spacer
......@@ -973,7 +973,7 @@ Item {
QGCLabel {
text: "FLIGHT MODES CONFIG"
font.pointSize: ScreenTools.fontPointFactor * (20);
font.pixelSize: ScreenTools.font20;
}
QGCLabel {
......
......@@ -115,12 +115,12 @@ QGCView {
QGCLabel {
text: "POWER CONFIG"
font.pointSize: ScreenTools.largeFontPointSize
font.pixelSize: ScreenTools.largeFontPixelSize
}
QGCLabel {
text: "Battery"
font.pointSize: ScreenTools.mediumFontPointSize
font.pixelSize: ScreenTools.mediumFontPixelSize
}
Rectangle {
......@@ -234,7 +234,7 @@ QGCView {
QGCLabel {
text: "ESC Calibration"
font.pointSize: ScreenTools.mediumFontPointSize
font.pixelSize: ScreenTools.mediumFontPixelSize
}
Rectangle {
......@@ -269,7 +269,7 @@ QGCView {
width: (parent.width / 2) - 5
QGCLabel {
text: "Propeller Function"
font.pointSize: ScreenTools.fontPointFactor * (20);
font.pixelSize: ScreenTools.font20;
}
Rectangle {
width: parent.width
......@@ -282,7 +282,7 @@ QGCView {
width: (parent.width / 2) - 5
QGCLabel {
text: "Magnetometer Distortion"
font.pointSize: ScreenTools.fontPointFactor * (20);
font.pixelSize: ScreenTools.font20;
}
Rectangle {
width: parent.width
......@@ -301,7 +301,7 @@ QGCView {
}
QGCLabel {
text: "Advanced Power Settings"
font.pointSize: ScreenTools.fontPointFactor * (20);
font.pixelSize: ScreenTools.font20;
visible: showAdvanced.checked
}
Rectangle {
......
......@@ -42,6 +42,7 @@ QGCView {
QGCPalette { id: qgcPal; colorGroupEnabled: panel.enabled }
readonly property string dialogTitle: "Radio Config"
readonly property real labelToMonitorMargin: defaultTextWidth * 3
property bool controllerCompleted: false
property bool controllerAndViewReady: false
......@@ -49,11 +50,15 @@ QGCView {
function updateChannelCount()
{
if (controllerAndViewReady) {
/*
FIXME: Turned off for now, since it prevents binding. Need to restructure to
allow binding and still check channel count
if (controller.channelCount < controller.minChannelCount) {
showDialog(channelCountDialogComponent, "Radio Config", 50, 0)
showDialog(channelCountDialogComponent, dialogTitle, 50, 0)
} else {
hideDialog()
}
*/
}
}
......@@ -89,6 +94,32 @@ QGCView {
id: panel
anchors.fill: parent
Component {
id: copyTrimsDialogComponent
QGCViewMessage {
message: "Center your sticks and move throttle all the way down, then press Ok to copy trims. After pressing Ok, reset the trims on your radio back to zero."
function accept() {
hideDialog()
controller.copyTrims()
}
}
}
Component {
id: zeroTrimsDialogComponent
QGCViewMessage {
message: "Before calibrating you should zero all your trims and subtrims. Click Ok to start Calibration."
function accept() {
hideDialog()
controller.nextButtonClicked()
}
}
}
Component {
id: channelCountDialogComponent
......@@ -205,6 +236,8 @@ QGCView {
duration: 1500
}
/*
// FIXME: Bar animation is turned off for now to figure out better usbaility
onRcValueChanged: {
if (Math.abs(rcValue - __lastRcValue) > __rcValueMaxJitter) {
__lastRcValue = rcValue
......@@ -212,7 +245,6 @@ QGCView {
}
}
/*
// rcValue debugger
QGCLabel {
anchors.fill: parent
......@@ -226,7 +258,7 @@ QGCView {
QGCLabel {
id: header
font.pointSize: ScreenTools.largeFontPointSize
font.pixelSize: ScreenTools.largeFontPixelSize
text: "RADIO CONFIG"
}
......@@ -245,22 +277,6 @@ QGCView {
anchors.right: columnSpacer.left
spacing: 10
Row {
spacing: 10
QGCLabel {
anchors.baseline: bindButton.baseline
text: "Place Spektrum satellite receiver in bind mode:"
}
QGCButton {
id: bindButton
text: "Spektrum Bind"
onClicked: showDialog(spektrumBindDialogComponent, "Radio Config", 50, StandardButton.Ok | StandardButton.Cancel)
}
}
// Attitude Controls
Column {
width: parent.width
......@@ -412,7 +428,13 @@ QGCView {
primary: true
text: "Calibrate"
onClicked: controller.nextButtonClicked()
onClicked: {
if (text == "Calibrate") {
showDialog(zeroTrimsDialogComponent, dialogTitle, 50, StandardButton.Ok | StandardButton.Cancel)
} else {
controller.nextButtonClicked()
}
}
}
} // Row - Buttons
......@@ -422,6 +444,42 @@ QGCView {
width: parent.width
wrapMode: Text.WordWrap
}
Item {
width: 10
height: defaultTextHeight * 4
}
Rectangle {
width: parent.width
height: 1
border.color: qgcPal.text
border.width: 1
}
QGCLabel { text: "Additional Radio setup:" }
Row {
spacing: 10
QGCLabel {
anchors.baseline: bindButton.baseline
text: "Place Spektrum satellite receiver in bind mode:"
}
QGCButton {
id: bindButton
text: "Spektrum Bind"
onClicked: showDialog(spektrumBindDialogComponent, dialogTitle, 50, StandardButton.Ok | StandardButton.Cancel)
}
}
QGCButton {
text: "Copy Trims"
onClicked: showDialog(copyTrimsDialogComponent, dialogTitle, 50, StandardButton.Ok | StandardButton.Cancel)
}
} // Column - Left Column
Item {
......
......@@ -1050,3 +1050,8 @@ void RadioComponentController::_signalAllAttiudeValueChanges(void)
emit yawChannelReversedChanged(yawChannelReversed());
emit throttleChannelReversedChanged(throttleChannelReversed());
}
void RadioComponentController::copyTrims(void)
{
_uas->startCalibration(UASInterface::StartCalibrationCopyTrims);
}
......@@ -93,6 +93,7 @@ public:
Q_INVOKABLE void skipButtonClicked(void);
Q_INVOKABLE void nextButtonClicked(void);
Q_INVOKABLE void start(void);
Q_INVOKABLE void copyTrims(void);
int rollChannelRCValue(void);
int pitchChannelRCValue(void);
......
......@@ -52,7 +52,7 @@ FactPanel {
QGCLabel {
text: "SAFETY CONFIG"
font.pointSize: ScreenTools.largeFontPointSize
font.pixelSize: ScreenTools.largeFontPixelSize
}
Item { height: 20; width: 10 } // spacer
......@@ -60,7 +60,7 @@ FactPanel {
//-----------------------------------------------------------------
//-- Return Home Triggers
QGCLabel { text: "Triggers For Return Home"; font.pointSize: ScreenTools.mediumFontPointSize; }
QGCLabel { text: "Triggers For Return Home"; font.pixelSize: ScreenTools.mediumFontPixelSize; }
Item { height: 10; width: 10 } // spacer
......@@ -119,7 +119,7 @@ FactPanel {
//-----------------------------------------------------------------
//-- Return Home Settings
QGCLabel { text: "Return Home Settings"; font.pointSize: ScreenTools.mediumFontPointSize; }
QGCLabel { text: "Return Home Settings"; font.pixelSize: ScreenTools.mediumFontPixelSize; }
Item { height: 10; width: 10 } // spacer
......@@ -290,7 +290,7 @@ FactPanel {
QGCLabel {
width: parent.width
font.pointSize: ScreenTools.mediumFontPointSize
font.pixelSize: ScreenTools.mediumFontPixelSize
text: "Warning: You have an advanced safety configuration set using the NAV_RCL_OBC parameter. The above settings may not apply.";
visible: fact.value !== 0
wrapMode: Text.Wrap
......@@ -300,7 +300,7 @@ FactPanel {
QGCLabel {
width: parent.width
font.pointSize: ScreenTools.mediumFontPointSize
font.pixelSize: ScreenTools.mediumFontPixelSize
text: "Warning: You have an advanced safety configuration set using the NAV_DLL_OBC parameter. The above settings may not apply.";
visible: fact.value !== 0
wrapMode: Text.Wrap
......
......@@ -57,8 +57,8 @@ QGCView {
// Used to pass help text to the preCalibrationDialog dialog
property string preCalibrationDialogHelp
readonly property int sideBarH1PointSize: (ScreenTools.defaultFontPointSize * 1.3 + 0.5)
readonly property int mainTextH1PointSize: (ScreenTools.defaultFontPointSize * 1.5 + 0.5)
readonly property int sideBarH1PointSize: ScreenTools.mediumFontPixelSize
readonly property int mainTextH1PointSize: ScreenTools.mediumFontPixelSize // Seems to be unused
readonly property int rotationColumnWidth: 250
readonly property var rotations: [
......@@ -213,7 +213,7 @@ QGCView {
id: compass0ComponentLabel
QGCLabel {
font.pointSize: sideBarH1PointSize
font.pixelSize: sideBarH1PointSize
text: "External Compass Orientation"
}
......@@ -280,7 +280,7 @@ QGCView {
QGCLabel {
text: "SENSORS CONFIG"
font.pointSize: ScreenTools.largeFontPointSize
font.pixelSize: ScreenTools.largeFontPixelSize
}
Item { height: 20; width: 10 } // spacer
......@@ -408,7 +408,7 @@ QGCView {
id: orientationCalAreaHelpText
width: parent.width
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.fontPointFactor * (22);
font.pixelSize: ScreenTools.font22;
anchors.top: orientationCalArea.top
anchors.left: orientationCalArea.left
anchors.topMargin: 15
......@@ -480,7 +480,7 @@ QGCView {
spacing: 5
QGCLabel {
font.pointSize: sideBarH1PointSize
font.pixelSize: sideBarH1PointSize
text: "Autopilot Orientation"
}
......@@ -506,7 +506,7 @@ QGCView {
id: compass0ComponentLabel2
QGCLabel {
font.pointSize: sideBarH1PointSize
font.pixelSize: sideBarH1PointSize
text: "External Compass Orientation"
}
}
......@@ -531,7 +531,7 @@ QGCView {
id: compass1ComponentLabel2
QGCLabel {
font.pointSize: sideBarH1PointSize
font.pixelSize: sideBarH1PointSize
text: "External Compass 1 Orientation"
}
}
......@@ -556,7 +556,7 @@ QGCView {
id: compass2ComponentLabel2
QGCLabel {
font.pointSize: sidebarH1PointSize
font.pixelSize: sidebarH1PointSize
text: "Compass 2 Orientation"
}
}
......
......@@ -119,6 +119,7 @@ static QObject* screenToolsSingletonFactory(QQmlEngine*, QJSEngine*)
static QObject* mavManagerSingletonFactory(QQmlEngine*, QJSEngine*)
{
MavManager* mavManager = new MavManager;
qgcApp()->setMavManager(mavManager);
return mavManager;
}
......@@ -133,10 +134,11 @@ static QObject* mavManagerSingletonFactory(QQmlEngine*, QJSEngine*)
**/
QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) :
QApplication(argc, argv),
_runningUnitTests(unitTesting),
_styleIsDark(true)
QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
: QApplication(argc, argv)
, _runningUnitTests(unitTesting)
, _styleIsDark(true)
, _pMavManager(NULL)
{
Q_ASSERT(_app == NULL);
_app = this;
......@@ -145,46 +147,61 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) :
#ifndef __android__
setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
#endif
// Parse command line options
bool fClearSettingsOptions = false; // Clear stored settings
bool fullLogging = false; // Turn on all logging
CmdLineOpt_t rgCmdLineOptions[] = {
{ "--clear-settings", &fClearSettingsOptions, QString() },
{ "--full-logging", &fullLogging, QString() },
// Add additional command line option flags here
};
ParseCmdLineOptions(argc, argv, rgCmdLineOptions, sizeof(rgCmdLineOptions)/sizeof(rgCmdLineOptions[0]), false);
#ifdef __mobile__
QLoggingCategory::setFilterRules(QStringLiteral("*Log.debug=false"));
#endif
#ifndef __mobile__
// First thing we want to do is set up the qtlogging.ini file. If it doesn't already exist we copy
// it to the correct location. This way default debug builds will have logging turned off.
#else
if (fullLogging) {
QLoggingCategory::setFilterRules(QStringLiteral("*Log=true"));
} else {
// First thing we want to do is set up the qtlogging.ini file. If it doesn't already exist we copy
// it to the correct location. This way default debug builds will have logging turned off.
static const char* qtProjectDir = "QtProject";
static const char* qtLoggingFile = "qtlogging.ini";
bool loggingDirectoryOk = false;
static const char* qtProjectDir = "QtProject";
static const char* qtLoggingFile = "qtlogging.ini";
bool loggingDirectoryOk = false;
QDir iniFileLocation(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation));
if (!iniFileLocation.cd(qtProjectDir)) {
if (!iniFileLocation.mkdir(qtProjectDir)) {
qDebug() << "Unable to create qtlogging.ini directory" << iniFileLocation.filePath(qtProjectDir);
} else {
if (!iniFileLocation.cd(qtProjectDir)) {
qDebug() << "Unable to access qtlogging.ini directory" << iniFileLocation.filePath(qtProjectDir);;
QDir iniFileLocation(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation));
if (!iniFileLocation.cd(qtProjectDir)) {
if (!iniFileLocation.mkdir(qtProjectDir)) {
qDebug() << "Unable to create qtlogging.ini directory" << iniFileLocation.filePath(qtProjectDir);
} else {
if (!iniFileLocation.cd(qtProjectDir)) {
qDebug() << "Unable to access qtlogging.ini directory" << iniFileLocation.filePath(qtProjectDir);;
}
loggingDirectoryOk = true;
}
} else {
loggingDirectoryOk = true;
}
} else {
loggingDirectoryOk = true;
}
if (loggingDirectoryOk) {
qDebug () << iniFileLocation;
if (!iniFileLocation.exists(qtLoggingFile)) {
QFile loggingFile(iniFileLocation.filePath(qtLoggingFile));
if (loggingFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&loggingFile);
out << "[Rules]\n";
out << "*Log.debug=false\n";
foreach(QString category, QGCLoggingCategoryRegister::instance()->registeredCategories()) {
out << category << ".debug=false\n";
if (loggingDirectoryOk) {
qDebug () << iniFileLocation;
if (!iniFileLocation.exists(qtLoggingFile)) {
QFile loggingFile(iniFileLocation.filePath(qtLoggingFile));
if (loggingFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&loggingFile);
out << "[Rules]\n";
out << "*Log.debug=false\n";
foreach(QString category, QGCLoggingCategoryRegister::instance()->registeredCategories()) {
out << category << ".debug=false\n";
}
} else {
qDebug() << "Unable to create logging file" << QString(qtLoggingFile) << "in" << iniFileLocation;
}
} else {
qDebug() << "Unable to create logging file" << QString(qtLoggingFile) << "in" << iniFileLocation;
}
}
}
......@@ -215,17 +232,6 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) :
// Set settings format
QSettings::setDefaultFormat(QSettings::IniFormat);
// Parse command line options
bool fClearSettingsOptions = false; // Clear stored settings
CmdLineOpt_t rgCmdLineOptions[] = {
{ "--clear-settings", &fClearSettingsOptions, QString() },
// Add additional command line option flags here
};
ParseCmdLineOptions(argc, argv, rgCmdLineOptions, sizeof(rgCmdLineOptions)/sizeof(rgCmdLineOptions[0]), false);
QSettings settings;
#ifdef UNITTEST_BUILD
qDebug() << "Settings location" << settings.fileName();
......@@ -341,7 +347,7 @@ void QGCApplication::_initCommon(void)
//-- Create QML Singleton Interfaces
qmlRegisterSingletonType<ScreenTools>("QGroundControl.ScreenTools", 1, 0, "ScreenTools", screenToolsSingletonFactory);
qmlRegisterSingletonType<MavManager>("QGroundControl.MavManager", 1, 0, "MavManager", mavManagerSingletonFactory);
//-- Register Waypoint Interface
qmlRegisterInterface<Waypoint>("Waypoint");
}
......@@ -649,33 +655,16 @@ void QGCApplication::_loadCurrentStyle(void)
}
}
// Now that we have the styles loaded we need to dpi adjust the font point sizes
QString dpiAdjustedStyles;
if (success) {
QTextStream styleStream(&styles, QIODevice::ReadOnly);
QRegularExpression regex("font-size:.+(\\d\\d)pt;");
while (!styleStream.atEnd()) {
QString adjustedLine;
QString line = styleStream.readLine();
QRegularExpressionMatch match = regex.match(line);
if (match.hasMatch()) {
//qDebug() << "found:" << line << match.captured(1);
adjustedLine = QString("font-size: %1pt;").arg(ScreenTools::adjustFontPointSize_s(match.captured(1).toDouble()));
//qDebug() << "adjusted:" << adjustedLine;
} else {
adjustedLine = line;
}
dpiAdjustedStyles += adjustedLine;
}
}
// Now that we have the styles loaded we need to adjust the font sizes.
if (!dpiAdjustedStyles.isEmpty()) {
setStyleSheet(dpiAdjustedStyles);
}
QString fSmall = QString("%1px;").arg(ScreenTools::font10_s());
QString fNormal = QString("%1px;").arg(ScreenTools::defaultFontPizelSize_s());
QString fLarge = QString("%1px;").arg(ScreenTools::largeFontPixelSize_s());
styles.replace("FONT_SMALL", fSmall);
styles.replace("FONT_NORMAL", fNormal);
styles.replace("FONT_LARGE", fLarge);
setStyleSheet(styles);
if (!success) {
// Fall back to plastique if we can't load our own
......@@ -709,7 +698,19 @@ void QGCApplication::_missingParamsDisplay(void)
}
_missingParams.clear();
QGCMessageBox::critical("Missing Parameters",
QString("Parameters missing from firmware: %1.\n\n"
"You should quit QGroundControl immediately and update your firmware.").arg(params));
QGCMessageBox::critical(
"Missing Parameters",
QString("Parameters missing from firmware: %1.\n\n"
"You should quit QGroundControl immediately and update your firmware.").arg(params));
}
void QGCApplication::setMavManager(MavManager* pMgr)
{
if(!_pMavManager)
_pMavManager = pMgr;
}
MavManager* QGCApplication::getMavManager()
{
return _pMavManager;
}
......@@ -44,6 +44,7 @@
// Work around circular header includes
class QGCSingleton;
class MainWindow;
class MavManager;
/**
* @brief The main application and management class.
......@@ -99,6 +100,12 @@ public:
/// Used to report a missing Parameter. Warning will be displayed to user. Method may be called
/// multiple times.
void reportMissingParameter(int componentId, const QString& name);
/// When the singleton is created, it sets a pointer for subsequent use
void setMavManager(MavManager* pMgr);
/// MavManager accessor
MavManager* getMavManager();
public slots:
/// You can connect to this slot to show an information message box from a different thread.
......@@ -166,7 +173,8 @@ private:
static const int _missingParamsDelayedDisplayTimerTimeout = 1000; ///< Timeout to wait for next missing fact to come in before display
QTimer _missingParamsDelayedDisplayTimer; ///< Timer use to delay missing fact display
QStringList _missingParams; ///< List of missing facts to be displayed
MavManager* _pMavManager;
/// Unit Test have access to creating and destroying singletons
friend class UnitTest;
};
......
......@@ -32,7 +32,7 @@
#endif
#ifndef QGC_APPLICATION_VERSION_BUILDTYPE
#define QGC_APPLICATION_VERSION_BUILDTYPE "(Development)"
#define QGC_APPLICATION_VERSION_BUILDTYPE "(Stable)"
#endif
#endif // QGC_CONFIGURATION_H
......@@ -32,6 +32,7 @@ This file is part of the QGROUNDCONTROL project
#include "UASManager.h"
#include "Waypoint.h"
#include "MavManager.h"
#include "UASMessageHandler.h"
#define UPDATE_TIMER 50
#define DEFAULT_LAT 38.965767f
......@@ -40,6 +41,12 @@ This file is part of the QGROUNDCONTROL project
MavManager::MavManager(QObject *parent)
: QObject(parent)
, _mav(NULL)
, _currentMessageCount(0)
, _messageCount(0)
, _currentErrorCount(0)
, _currentWarningCount(0)
, _currentNormalCount(0)
, _currentMessageType(MessageNone)
, _roll(0.0f)
, _pitch(0.0f)
, _heading(0.0f)
......@@ -99,6 +106,8 @@ QString MavManager::loadSetting(const QString &name, const QString& defaultValue
void MavManager::_forgetUAS(UASInterface* uas)
{
if (_mav != NULL && _mav == uas) {
// Stop listening for system messages
disconnect(UASMessageHandler::instance(), &UASMessageHandler::textMessageCountChanged, this, &MavManager::_handleTextMessage);
// Disconnect any previously connected active MAV
disconnect(_mav, SIGNAL(attitudeChanged (UASInterface*, double,double,double,quint64)), this, SLOT(_updateAttitude(UASInterface*, double, double, double, quint64)));
disconnect(_mav, SIGNAL(attitudeChanged (UASInterface*, int,double,double,double,quint64)), this, SLOT(_updateAttitude(UASInterface*,int,double, double, double, quint64)));
......@@ -149,6 +158,8 @@ void MavManager::_setActiveUAS(UASInterface* uas)
emit heartbeatTimeoutChanged();
// Set new UAS
_mav = uas;
// Listen for system messages
connect(UASMessageHandler::instance(), &UASMessageHandler::textMessageCountChanged, this, &MavManager::_handleTextMessage);
// Now connect the new UAS
connect(_mav, SIGNAL(attitudeChanged (UASInterface*,double,double,double,quint64)), this, SLOT(_updateAttitude(UASInterface*, double, double, double, quint64)));
connect(_mav, SIGNAL(attitudeChanged (UASInterface*,int,double,double,double,quint64)), this, SLOT(_updateAttitude(UASInterface*,int,double, double, double, quint64)));
......@@ -637,3 +648,87 @@ void MavManager::_waypointViewOnlyListChanged()
*/
}
}
void MavManager::_handleTextMessage(int newCount)
{
// Reset?
if(!newCount) {
_currentMessageCount = 0;
_currentNormalCount = 0;
_currentWarningCount = 0;
_currentErrorCount = 0;
_messageCount = 0;
_currentMessageType = MessageNone;
emit newMessageCountChanged();
emit messageTypeChanged();
emit messageCountChanged();
return;
}
UASMessageHandler* pMh = UASMessageHandler::instance();
Q_ASSERT(pMh);
MessageType_t type = newCount ? _currentMessageType : MessageNone;
int errorCount = _currentErrorCount;
int warnCount = _currentWarningCount;
int normalCount = _currentNormalCount;
//-- Add current message counts
errorCount += pMh->getErrorCount();
warnCount += pMh->getWarningCount();
normalCount += pMh->getNormalCount();
//-- See if we have a higher level
if(errorCount != _currentErrorCount) {
_currentErrorCount = errorCount;
type = MessageError;
}
if(warnCount != _currentWarningCount) {
_currentWarningCount = warnCount;
if(_currentMessageType != MessageError) {
type = MessageWarning;
}
}
if(normalCount != _currentNormalCount) {
_currentNormalCount = normalCount;
if(_currentMessageType != MessageError && _currentMessageType != MessageWarning) {
type = MessageNormal;
}
}
int count = _currentErrorCount + _currentWarningCount + _currentNormalCount;
if(count != _currentMessageCount) {
_currentMessageCount = count;
// Display current total new messages count
emit newMessageCountChanged();
}
if(type != _currentMessageType) {
_currentMessageType = type;
// Update message level
emit messageTypeChanged();
}
// Update message count (all messages)
if(newCount != _messageCount) {
_messageCount = newCount;
emit messageCountChanged();
}
QString errMsg = pMh->getLatestError();
if(errMsg != _latestError) {
_latestError = errMsg;
emit latestErrorChanged();
}
}
void MavManager::resetMessages()
{
// Reset Counts
int count = _currentMessageCount;
MessageType_t type = _currentMessageType;
_currentErrorCount = 0;
_currentWarningCount = 0;
_currentNormalCount = 0;
_currentMessageCount = 0;
_currentMessageType = MessageNone;
if(count != _currentMessageCount) {
emit newMessageCountChanged();
}
if(type != _currentMessageType) {
emit messageTypeChanged();
}
}
......@@ -46,6 +46,13 @@ public:
explicit MavManager(QObject *parent = 0);
~MavManager();
typedef enum {
MessageNone,
MessageNormal,
MessageWarning,
MessageError
} MessageType_t;
enum {
ROLL_CHANGED,
PITCH_CHANGED,
......@@ -58,10 +65,19 @@ public:
ALTITUDEAMSL_CHANGED
};
// Called when the message drop-down is invoked to clear current count
void resetMessages();
Q_INVOKABLE QString getMavIconColor();
Q_INVOKABLE void saveSetting (const QString &key, const QString& value);
Q_INVOKABLE QString loadSetting (const QString &key, const QString& defaultValue);
//-- System Messages
Q_PROPERTY(MessageType_t messageType READ messageType NOTIFY messageTypeChanged)
Q_PROPERTY(int newMessageCount READ newMessageCount NOTIFY newMessageCountChanged)
Q_PROPERTY(int messageCount READ messageCount NOTIFY messageCountChanged)
Q_PROPERTY(QString latestError READ latestError NOTIFY latestErrorChanged)
//-- UAV Stats
Q_PROPERTY(float roll READ roll NOTIFY rollChanged)
Q_PROPERTY(float pitch READ pitch NOTIFY pitchChanged)
Q_PROPERTY(float heading READ heading NOTIFY headingChanged)
......@@ -87,8 +103,13 @@ public:
Q_PROPERTY(double waypointDistance READ waypointDistance NOTIFY waypointDistanceChanged)
Q_PROPERTY(uint16_t currentWaypoint READ currentWaypoint NOTIFY currentWaypointChanged)
Q_PROPERTY(unsigned int heartbeatTimeout READ heartbeatTimeout NOTIFY heartbeatTimeoutChanged)
//-- Waypoint management
Q_PROPERTY(QQmlListProperty<Waypoint> waypoints READ waypoints NOTIFY waypointsChanged)
MessageType_t messageType () { return _currentMessageType; }
int newMessageCount () { return _currentMessageCount; }
int messageCount () { return _messageCount; }
QString latestError () { return _latestError; }
float roll () { return _roll; }
float pitch () { return _pitch; }
float heading () { return _heading; }
......@@ -118,6 +139,10 @@ public:
QQmlListProperty<Waypoint> waypoints() {return QQmlListProperty<Waypoint>(this, _waypoints); }
signals:
void messageTypeChanged ();
void newMessageCountChanged ();
void messageCountChanged ();
void latestErrorChanged ();
void rollChanged ();
void pitchChanged ();
void headingChanged ();
......@@ -147,6 +172,7 @@ signals:
void waypointsChanged ();
private slots:
void _handleTextMessage (int newCount);
/** @brief Attitude from main autopilot / system state */
void _updateAttitude (UASInterface* uas, double roll, double pitch, double yaw, quint64 timestamp);
/** @brief Attitude from one specific component / redundant autopilot */
......@@ -182,6 +208,13 @@ private:
private:
UASInterface* _mav;
int _currentMessageCount;
int _messageCount;
int _currentErrorCount;
int _currentWarningCount;
int _currentNormalCount;
MessageType_t _currentMessageType;
QString _latestError;
float _roll;
float _pitch;
float _heading;
......
......@@ -66,7 +66,7 @@ QGCView {
height: defaultTextHeight + (ScreenTools.pixelSizeFactor * (9))
text: group
verticalAlignment: Text.AlignVCenter
font.pointSize: ScreenTools.fontPointFactor * (16);
font.pixelSize: ScreenTools.font16;
}
Rectangle {
......@@ -142,7 +142,7 @@ QGCView {
height: firstButton.height
QGCLabel {
font.pointSize: ScreenTools.fontPointFactor * (20)
font.pixelSize: ScreenTools.font20;
visible: fullMode
text: "PARAMETER EDITOR"
}
......@@ -202,7 +202,7 @@ QGCView {
height: contentHeight + (ScreenTools.pixelSizeFactor * (9))
text: "Component #: " + componentId.toString()
verticalAlignment: Text.AlignVCenter
font.pointSize: ScreenTools.fontPointFactor * (16);
font.pixelSize: ScreenTools.font16;
}
Repeater {
......@@ -357,4 +357,4 @@ QGCView {
}
} // Rectangle - editorDialog
} // Component - Editor Dialog
} // QGCView
\ No newline at end of file
} // QGCView
......@@ -104,7 +104,7 @@ Button {
id: text
antialiasing: true
text: control.text
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
anchors.verticalCenter: parent.verticalCenter
......
......@@ -29,7 +29,7 @@ CheckBox {
id: text
text: control.text
antialiasing: true
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
anchors.centerIn: parent
......
......@@ -11,7 +11,7 @@ ComboBox {
property bool __showHighlight: pressed | hovered
style: ComboBoxStyle {
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
textColor: __showHighlight ?
control.__qgcPal.buttonHighlightText :
control.__qgcPal.buttonText
......
......@@ -10,7 +10,7 @@ Text {
property bool enabled: true
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
color: __qgcPal.text
antialiasing: true
}
......@@ -28,7 +28,7 @@ RadioButton {
Text {
id: text
text: control.text
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
antialiasing: true
anchors.centerIn: parent
......
......@@ -50,7 +50,7 @@ TextField {
width: unitsLabelWidthGenerator.width
text: control.unitsLabel
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
antialiasing: true
color: control.textColor
......
......@@ -27,35 +27,55 @@
#include "ScreenTools.h"
#include "MainWindow.h"
#include <QFont>
#include <QFontMetrics>
const double ScreenTools::_defaultFontPointSize = 13;
const double ScreenTools::_mediumFontPointSize = 16;
const double ScreenTools::_largeFontPointSize = 20;
// Pixel size, instead of a physical thing is actually a philosophical question when
// it comes to Qt.
// The values below came from actually measuring the elements on the screen on these
// devices. I have yet to find a constant from Qt so these things can be properly
// computed at runtime.
#if defined(Q_OS_OSX)
double ScreenTools::_pixelFactor = 1.0;
#elif defined(__ios__)
double ScreenTools::_pixelFactor = 0.75;
#elif defined(Q_OS_WIN)
double ScreenTools::_pixelFactor = 0.86;
#elif defined(__android__)
double ScreenTools::_pixelFactor = 2.5;
#elif defined(Q_OS_LINUX)
double ScreenTools::_pixelFactor = 1.0;
#endif
#if defined(__android__)
#define FONT_FACTOR 2
#else
#define FONT_FACTOR 1
#endif
int ScreenTools::_font8 = 8 * FONT_FACTOR;
int ScreenTools::_font9 = 9 * FONT_FACTOR;
int ScreenTools::_font10 = 10 * FONT_FACTOR;
int ScreenTools::_font11 = 11 * FONT_FACTOR;
int ScreenTools::_font12 = 12 * FONT_FACTOR;
int ScreenTools::_font13 = 13 * FONT_FACTOR;
int ScreenTools::_font14 = 14 * FONT_FACTOR;
int ScreenTools::_font15 = 15 * FONT_FACTOR;
int ScreenTools::_font16 = 16 * FONT_FACTOR;
int ScreenTools::_font17 = 17 * FONT_FACTOR;
int ScreenTools::_font18 = 18 * FONT_FACTOR;
int ScreenTools::_font19 = 19 * FONT_FACTOR;
int ScreenTools::_font20 = 20 * FONT_FACTOR;
int ScreenTools::_font21 = 21 * FONT_FACTOR;
int ScreenTools::_font22 = 22 * FONT_FACTOR;
ScreenTools::ScreenTools()
{
MainWindow* mainWindow = MainWindow::instance();
// Unit tests can run Qml without MainWindow
if (mainWindow) {
connect(mainWindow, &MainWindow::repaintCanvas, this, &ScreenTools::_updateCanvas);
connect(mainWindow, &MainWindow::pixelSizeChanged, this, &ScreenTools::_updatePixelSize);
connect(mainWindow, &MainWindow::fontSizeChanged, this, &ScreenTools::_updateFontSize);
connect(mainWindow, &MainWindow::repaintCanvas, this, &ScreenTools::_updateCanvas);
}
}
qreal ScreenTools::adjustFontPointSize(qreal pointSize)
{
return adjustFontPointSize_s(pointSize);
}
qreal ScreenTools::adjustFontPointSize_s(qreal pointSize)
{
return pointSize * MainWindow::fontPointFactor();
}
qreal ScreenTools::adjustPixelSize(qreal pixelSize)
{
return adjustPixelSize_s(pixelSize);
......@@ -63,66 +83,10 @@ qreal ScreenTools::adjustPixelSize(qreal pixelSize)
qreal ScreenTools::adjustPixelSize_s(qreal pixelSize)
{
return pixelSize * MainWindow::pixelSizeFactor();
}
void ScreenTools::increasePixelSize()
{
MainWindow::instance()->setPixelSizeFactor(MainWindow::pixelSizeFactor() + 0.025);
}
void ScreenTools::decreasePixelSize()
{
MainWindow::instance()->setPixelSizeFactor(MainWindow::pixelSizeFactor() - 0.025);
}
void ScreenTools::increaseFontSize()
{
MainWindow::instance()->setFontSizeFactor(MainWindow::fontPointFactor() + 0.025);
}
void ScreenTools::decreaseFontSize()
{
MainWindow::instance()->setFontSizeFactor(MainWindow::fontPointFactor() - 0.025);
return pixelSize * _pixelFactor;
}
void ScreenTools::_updateCanvas()
{
emit repaintRequestedChanged();
}
void ScreenTools::_updatePixelSize()
{
emit pixelSizeFactorChanged();
}
void ScreenTools::_updateFontSize()
{
emit fontPointFactorChanged();
emit fontSizesChanged();
}
double ScreenTools::fontPointFactor()
{
return MainWindow::fontPointFactor();
}
double ScreenTools::pixelSizeFactor()
{
return MainWindow::pixelSizeFactor();
}
double ScreenTools::defaultFontPointSize(void)
{
return _defaultFontPointSize * MainWindow::fontPointFactor();
}
double ScreenTools::mediumFontPointSize(void)
{
return _mediumFontPointSize * MainWindow::fontPointFactor();
}
double ScreenTools::largeFontPointSize(void)
{
return _largeFontPointSize * MainWindow::fontPointFactor();
}
......@@ -80,46 +80,87 @@ public:
@endcode
*/
Q_PROPERTY(bool repaintRequested READ repaintRequested NOTIFY repaintRequestedChanged)
//! Returns the font point size factor
Q_PROPERTY(double fontPointFactor READ fontPointFactor NOTIFY fontPointFactorChanged)
//! Returns the pixel size factor
Q_PROPERTY(double pixelSizeFactor READ pixelSizeFactor NOTIFY pixelSizeFactorChanged)
//! Font sizes
Q_PROPERTY(int font22 READ font22 CONSTANT)
Q_PROPERTY(int font21 READ font21 CONSTANT)
Q_PROPERTY(int font20 READ font20 CONSTANT)
Q_PROPERTY(int font19 READ font19 CONSTANT)
Q_PROPERTY(int font18 READ font18 CONSTANT)
Q_PROPERTY(int font17 READ font17 CONSTANT)
Q_PROPERTY(int font16 READ font16 CONSTANT)
Q_PROPERTY(int font15 READ font15 CONSTANT)
Q_PROPERTY(int font14 READ font14 CONSTANT)
Q_PROPERTY(int font13 READ font13 CONSTANT)
Q_PROPERTY(int font12 READ font12 CONSTANT)
Q_PROPERTY(int font11 READ font11 CONSTANT)
Q_PROPERTY(int font10 READ font10 CONSTANT)
Q_PROPERTY(int font9 READ font9 CONSTANT)
Q_PROPERTY(int font8 READ font8 CONSTANT)
//! Returns the system wide default font point size (properly scaled)
Q_PROPERTY(double defaultFontPointSize READ defaultFontPointSize NOTIFY fontSizesChanged)
Q_PROPERTY(int defaultFontPizelSize READ defaultFontPizelSize CONSTANT)
//! Returns the system wide default font point size (properly scaled)
Q_PROPERTY(double mediumFontPointSize READ mediumFontPointSize NOTIFY fontSizesChanged)
Q_PROPERTY(int mediumFontPixelSize READ mediumFontPixelSize CONSTANT)
//! Returns the system wide default font point size (properly scaled)
Q_PROPERTY(double largeFontPointSize READ largeFontPointSize NOTIFY fontSizesChanged)
Q_PROPERTY(int largeFontPixelSize READ largeFontPixelSize CONSTANT)
//! Utility for adjusting font point size. Not dynamic (no signals)
Q_INVOKABLE qreal adjustFontPointSize(qreal pointSize);
Q_PROPERTY(bool repaintRequested READ repaintRequested NOTIFY repaintRequestedChanged)
//! Returns the pixel size factor
Q_PROPERTY(double pixelSizeFactor READ pixelSizeFactor CONSTANT)
//! Utility for adjusting pixel size. Not dynamic (no signals)
Q_INVOKABLE qreal adjustPixelSize(qreal pixelSize);
//! Utility for increasing pixel size.
Q_INVOKABLE void increasePixelSize();
//! Utility for decreasing pixel size.
Q_INVOKABLE void decreasePixelSize();
//! Utility for increasing font size.
Q_INVOKABLE void increaseFontSize();
//! Utility for decreasing font size.
Q_INVOKABLE void decreaseFontSize();
/// Static version of adjustFontPointSize of use in C++ code
static qreal adjustFontPointSize_s(qreal pointSize);
/// Static version of adjustPixelSize of use in C++ code
static qreal adjustPixelSize_s(qreal pixelSize);
int mouseX () { return QCursor::pos().x(); }
int mouseY () { return QCursor::pos().y(); }
bool repaintRequested () { return true; }
double fontPointFactor ();
double pixelSizeFactor ();
double defaultFontPointSize(void);
double mediumFontPointSize(void);
double largeFontPointSize(void);
double pixelSizeFactor () { return _pixelFactor; }
int font22 () { return _font22; }
int font21 () { return _font21; }
int font20 () { return _font20; }
int font19 () { return _font19; }
int font18 () { return _font18; }
int font17 () { return _font17; }
int font16 () { return _font16; }
int font15 () { return _font15; }
int font14 () { return _font14; }
int font13 () { return _font13; }
int font12 () { return _font12; }
int font11 () { return _font11; }
int font10 () { return _font10; }
int font9 () { return _font9; }
int font8 () { return _font8; }
int defaultFontPizelSize () { return _font12; }
int mediumFontPixelSize () { return _font16; }
int largeFontPixelSize () { return _font20; }
/// Static version for use in C++ code
static int font22_s () { return _font22; }
static int font21_s () { return _font21; }
static int font20_s () { return _font20; }
static int font19_s () { return _font19; }
static int font18_s () { return _font18; }
static int font17_s () { return _font17; }
static int font16_s () { return _font16; }
static int font15_s () { return _font15; }
static int font14_s () { return _font14; }
static int font13_s () { return _font13; }
static int font12_s () { return _font12; }
static int font11_s () { return _font11; }
static int font10_s () { return _font10; }
static int font9_s () { return _font9; }
static int font8_s () { return _font8; }
static int defaultFontPizelSize_s () { return _font12; }
static int mediumFontPixelSize_s () { return _font16; }
static int largeFontPixelSize_s () { return _font20; }
static double pixelSizeFactor_s () { return _pixelFactor; }
#if defined (__android__)
bool isAndroid () { return true; }
......@@ -137,19 +178,29 @@ public:
signals:
void repaintRequestedChanged();
void pixelSizeFactorChanged();
void fontPointFactorChanged();
void fontSizesChanged();
private slots:
void _updateCanvas();
void _updatePixelSize();
void _updateFontSize();
private:
static const double _defaultFontPointSize;
static const double _mediumFontPointSize;
static const double _largeFontPointSize;
// Font Sizes
static int _font8;
static int _font9;
static int _font10;
static int _font11;
static int _font12;
static int _font13;
static int _font14;
static int _font15;
static int _font16;
static int _font17;
static int _font18;
static int _font19;
static int _font20;
static int _font21;
static int _font22;
// UI Dimension Factors
static double _pixelFactor;
};
#endif
......@@ -40,7 +40,7 @@ Button {
horizontalAlignment: TextEdit.AlignHCenter
text: control.text
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
antialiasing: true
color: __showHighlight ? __qgcPal.buttonHighlightText : __qgcPal.buttonText
......
......@@ -70,10 +70,9 @@ Rectangle {
height: parent.height
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignBottom
font.pointSize: ScreenTools.fontPointFactor * (25);
font.pixelSize: ScreenTools.font22;
font.bold: true
color: "black"
text: parent.calText
}
QGCLabel {
......@@ -81,9 +80,8 @@ Rectangle {
height: parent.height
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignBottom
font.pointSize: ScreenTools.fontPointFactor * (25);
font.pixelSize: ScreenTools.font22;
color: calInProgress ? "yellow" : "white"
text: parent.calText
}
}
......
......@@ -74,7 +74,7 @@ QGCView {
QGCLabel {
text: "FIRMWARE UPDATE"
font.pointSize: ScreenTools.fontPointFactor * (20);
font.pixelSize: ScreenTools.font20;
}
Item {
......@@ -177,7 +177,7 @@ QGCView {
height: 300
readOnly: true
frameVisible: false
font.pointSize: ScreenTools.defaultFontPointSize
font.pixelSize: ScreenTools.defaultFontPizelSize
text: qsTr("Please disconnect all vehicles from QGroundControl before selecting Upgrade.")
......@@ -188,4 +188,4 @@ QGCView {
}
} // Column
} // QGCViewPanel
} // QGCView
\ No newline at end of file
} // QGCView
......@@ -114,7 +114,7 @@ Rectangle {
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.mediumFontPointSize
font.pixelSize: ScreenTools.mediumFontPixelSize
text: "Welcome to QGroundControl. " +
"QGroundControl supports any <font color=\"orange\"><a href=\"http://www.qgroundcontrol.org/mavlink/start\">mavlink</a></font> enabled vehicle. " +
"If you are using the <font color=\"orange\"><a href=\"https://pixhawk.org/choice\">PX4 Flight Stack</a></font>, you also get full support for setting up and calibrating your vehicle. "+
......@@ -136,7 +136,7 @@ Rectangle {
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
wrapMode: Text.WordWrap
font.pointSize: ScreenTools.mediumFontPointSize
font.pixelSize: ScreenTools.mediumFontPixelSize
text: messagePanelText
}
}
......
......@@ -46,7 +46,7 @@ Rectangle {
QGCLabel {
text: "VEHICLE SUMMARY"
font.pointSize: ScreenTools.fontPointFactor * (20);
font.pixelSize: ScreenTools.font20;
}
Item {
......@@ -59,7 +59,7 @@ Rectangle {
width: parent.width
wrapMode: Text.WordWrap
color: setupComplete ? qgcPal.text : "red"
font.pointSize: setupComplete ? ScreenTools.defaultFontPointSize : ScreenTools.fontPointFactor * (20)
font.pixelSize: setupComplete ? ScreenTools.defaultFontPizelSize : ScreenTools.font20
text: setupComplete ?
"Below you will find a summary of the settings for your vehicle. To the left are the setup menus for each component." :
"WARNING: Your vehicle requires setup prior to flight. Please resolve the items marked in red using the menu on the left."
......
......@@ -37,8 +37,11 @@ ViewWidget {
id: commandComponenet
Item {
id: bogusFactPanel
CustomCommandWidgetController { id: controller }
// We aren't really using the controller in a FactPanel for this usage so we
// pass in a bogus item to keep it from getting upset.
CustomCommandWidgetController { id: controller; factPanel: bogusFactPanel }
Item {
anchors.top: parent.top
......
......@@ -191,14 +191,28 @@ QString QGCAudioWorker::_fixTextMessageForAudio(const QString& string) {
QString match;
QString newNumber;
QString result = string;
//-- Look for modes
//-- Look for codified terms
if(result.contains("ERR ", Qt::CaseInsensitive)) {
result.replace("ERR ", "error ", Qt::CaseInsensitive);
}
if(result.contains("ERR:", Qt::CaseInsensitive)) {
result.replace("ERR:", "error.", Qt::CaseInsensitive);
}
if(result.contains("POSCTL", Qt::CaseInsensitive)) {
result.replace("POSCTL", "Position Control", Qt::CaseInsensitive);
} else if(result.contains("ALTCTL", Qt::CaseInsensitive)) {
}
if(result.contains("ALTCTL", Qt::CaseInsensitive)) {
result.replace("ALTCTL", "Altitude Control", Qt::CaseInsensitive);
} else if(result.contains("RTL", Qt::CaseInsensitive)) {
}
if(result.contains("RTL", Qt::CaseInsensitive)) {
result.replace("RTL", "Return To Land", Qt::CaseInsensitive);
}
if(result.contains("ACCEL ", Qt::CaseInsensitive)) {
result.replace("ACCEL ", "accelerometer ", Qt::CaseInsensitive);
}
if(result.contains("RC_MAP_MODE_SW", Qt::CaseInsensitive)) {
result.replace("RC_MAP_MODE_SW", "RC mode switch", Qt::CaseInsensitive);
}
int number;
if(_getMillisecondString(string, match, number) && number > 1000) {
if(number < 60000) {
......
......@@ -459,6 +459,8 @@ void LinkManager::_updateConfigurationList(void)
QList<QSerialPortInfo> portList = QSerialPortInfo::availablePorts();
// Iterate Comm Ports
foreach (QSerialPortInfo portInfo, portList) {
#if 0
// Too noisy for most logging, so turn on as needed
qCDebug(LinkManagerLog) << "-----------------------------------------------------";
qCDebug(LinkManagerLog) << "portName: " << portInfo.portName();
qCDebug(LinkManagerLog) << "systemLocation: " << portInfo.systemLocation();
......@@ -466,6 +468,7 @@ void LinkManager::_updateConfigurationList(void)
qCDebug(LinkManagerLog) << "manufacturer: " << portInfo.manufacturer();
qCDebug(LinkManagerLog) << "serialNumber: " << portInfo.serialNumber();
qCDebug(LinkManagerLog) << "vendorIdentifier: " << portInfo.vendorIdentifier();
#endif
// Save port name
currentPorts << portInfo.systemLocation();
// Is this a PX4 and NOT in bootloader mode?
......
......@@ -237,15 +237,16 @@ void QGCXPlaneLink::run()
QGC::SLEEP::msleep(5);
}
if (mav)
uas = dynamic_cast<UAS*>(mav);
if (uas)
{
disconnect(mav, SIGNAL(hilControlsChanged(quint64, float, float, float, float, quint8, quint8)), this, SLOT(updateControls(quint64,float,float,float,float,quint8,quint8)));
disconnect(mav, SIGNAL(hilActuatorsChanged(quint64, float, float, float, float, float, float, float, float)), this, SLOT(updateActuators(quint64,float,float,float,float,float,float,float,float)));
disconnect(uas, SIGNAL(hilControlsChanged(quint64, float, float, float, float, quint8, quint8)), this, SLOT(updateControls(quint64,float,float,float,float,quint8,quint8)));
disconnect(uas, SIGNAL(hilActuatorsChanged(quint64, float, float, float, float, float, float, float, float)), this, SLOT(updateActuators(quint64,float,float,float,float,float,float,float,float)));
disconnect(this, SIGNAL(hilGroundTruthChanged(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)), mav, SLOT(sendHilGroundTruth(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)));
disconnect(this, SIGNAL(hilStateChanged(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)), mav, SLOT(sendHilState(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)));
disconnect(this, SIGNAL(sensorHilGpsChanged(quint64,double,double,double,int,float,float,float,float,float,float,float,int)), mav, SLOT(sendHilGps(quint64,double,double,double,int,float,float,float,float,float,float,float,int)));
disconnect(this, SIGNAL(sensorHilRawImuChanged(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)), mav, SLOT(sendHilSensors(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)));
disconnect(this, SIGNAL(hilGroundTruthChanged(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)), uas, SLOT(sendHilGroundTruth(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)));
disconnect(this, SIGNAL(hilStateChanged(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)), uas, SLOT(sendHilState(quint64,float,float,float,float,float,float,double,double,double,float,float,float,float,float,float,float,float)));
disconnect(this, SIGNAL(sensorHilGpsChanged(quint64,double,double,double,int,float,float,float,float,float,float,float,int)), uas, SLOT(sendHilGps(quint64,double,double,double,int,float,float,float,float,float,float,float,int)));
disconnect(this, SIGNAL(sensorHilRawImuChanged(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)), uas, SLOT(sendHilSensors(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)));
// Do not toggle HIL state on the UAS - this is not the job of this link, but of the
// UAS object
......
......@@ -1473,6 +1473,9 @@ void UAS::startCalibration(UASInterface::StartCalibrationType calType)
case StartCalibrationRadio:
radioCal = 1;
break;
case StartCalibrationCopyTrims:
radioCal = 2;
break;
case StartCalibrationAccel:
accelCal = 1;
break;
......
......@@ -245,7 +245,8 @@ public:
StartCalibrationAirspeed,
StartCalibrationAccel,
StartCalibrationLevel,
StartCalibrationEsc
StartCalibrationEsc,
StartCalibrationCopyTrims
};
/// Starts the specified calibration
......
......@@ -340,6 +340,7 @@ void UASManager::removeUAS(UASInterface* uas)
// Notify other UI elements that a UAS is being deleted before finally deleting it.
qDebug() << "Deleting UAS object: " << uas->getUASName();
emit UASDeleted(uas);
emit UASDeleted(uas->getUASID());
uas->deleteLater();
}
}
......
......@@ -98,6 +98,8 @@ signals:
void UASCreated(UASInterface* UAS);
/** A system was deleted */
void UASDeleted(UASInterface* UAS);
/** A system was deleted */
void UASDeleted(int systemId);
/** @brief The UAS currently under main operator control changed */
void activeUASSet(UASInterface* UAS);
/** @brief The UAS currently under main operator control changed */
......
......@@ -163,6 +163,17 @@ void UASMessageHandler::handleTextMessage(int, int compId, int severity, QString
message->_setFormatedText(QString("<p style=\"color:#CCCCCC\">[%2 - COMP:%3]<font style=\"%1\">%4 %5</font></p>").arg(style).arg(dateString).arg(compId).arg(severityText).arg(text));
_messages.append(message);
int count = _messages.count();
switch (severity)
{
case MAV_SEVERITY_EMERGENCY:
case MAV_SEVERITY_ALERT:
case MAV_SEVERITY_CRITICAL:
case MAV_SEVERITY_ERROR:
_latestError = severityText + " " + text;
break;
default:
break;
}
_mutex.unlock();
emit textMessageReceived(message);
emit textMessageCountChanged(count);
......
......@@ -107,6 +107,10 @@ public:
* @brief Get normal message count (Resets count once read)
*/
int getNormalCount();
/**
* @brief Get latest error message
*/
QString getLatestError() { return _latestError; }
public slots:
/**
* @brief Set currently active UAS
......@@ -140,6 +144,7 @@ private:
int _errorCount;
int _warningCount;
int _normalCount;
QString _latestError;
};
#endif // QGCMESSAGEHANDLER_H
......@@ -83,29 +83,6 @@ This file is part of the QGROUNDCONTROL project
#include "LogCompressor.h"
// Pixel size, instead of a physical thing is actually a philosophical question when
// it comes to Qt. Fonts are that and some heavy Kabalistic Voodoo added to the mix.
// The values below came from actually measuring the elements on the screen on these
// devices. I have yet to find a constant from Qt so these things can be properly
// computed at runtime.
#if defined(Q_OS_OSX)
double MainWindow::_pixelFactor = 1.0;
double MainWindow::_fontFactor = 1.0;
#elif defined(__ios__)
double MainWindow::_pixelFactor = 1.0;
double MainWindow::_fontFactor = 1.0;
#elif defined(Q_OS_WIN)
double MainWindow::_pixelFactor = 0.86;
double MainWindow::_fontFactor = 0.63;
#elif defined(__android__)
double MainWindow::_pixelFactor = 2.0;
double MainWindow::_fontFactor = 1.23;
#elif defined(Q_OS_LINUX)
double MainWindow::_pixelFactor = 1.0;
double MainWindow::_fontFactor = 0.85;
#endif
/// The key under which the Main Window settings are saved
const char* MAIN_SETTINGS_GROUP = "QGC_MAINWINDOW";
......@@ -689,8 +666,6 @@ void MainWindow::loadSettings()
_autoReconnect = settings.value("AUTO_RECONNECT", _autoReconnect).toBool();
_lowPowerMode = settings.value("LOW_POWER_MODE", _lowPowerMode).toBool();
_showStatusBar = settings.value("SHOW_STATUSBAR", _showStatusBar).toBool();
_fontFactor = settings.value("FONT_SIZE_FACTOR", _fontFactor).toDouble();
_pixelFactor = settings.value("PIXEL_SIZE_FACTOR", _pixelFactor).toDouble();
settings.endGroup();
}
......@@ -701,8 +676,6 @@ void MainWindow::storeSettings()
settings.setValue("AUTO_RECONNECT", _autoReconnect);
settings.setValue("LOW_POWER_MODE", _lowPowerMode);
settings.setValue("SHOW_STATUSBAR", _showStatusBar);
settings.setValue("FONT_SIZE_FACTOR", _fontFactor);
settings.setValue("PIXEL_SIZE_FACTOR", _pixelFactor);
settings.endGroup();
settings.setValue(_getWindowGeometryKey(), saveGeometry());
......@@ -796,6 +769,7 @@ void MainWindow::connectCommonActions()
// Connect internal actions
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(UASCreated(UASInterface*)));
connect(UASManager::instance(), SIGNAL(UASDeleted(int)), this, SLOT(UASDeleted(int)));
// Unmanned System controls
connect(_ui.actionLiftoff, SIGNAL(triggered()), UASManager::instance(), SLOT(launchActiveUAS()));
......@@ -909,6 +883,14 @@ void MainWindow::UASCreated(UASInterface* uas)
}
}
void MainWindow::UASDeleted(int uasId)
{
if (_mapUasId2HilDockWidget.contains(uasId)) {
_mapUasId2HilDockWidget[uasId]->deleteLater();
_mapUasId2HilDockWidget.remove(uasId);
}
}
/// Stores the state of the toolbar, status bar and widgets associated with the current view
void MainWindow::_storeCurrentViewState(void)
{
......@@ -1190,22 +1172,6 @@ void MainWindow::_linkStateChange(LinkInterface*)
emit repaintCanvas();
}
void MainWindow::setPixelSizeFactor(double size) {
if(size < 0.1) {
size = 0.1;
}
_pixelFactor = size;
emit pixelSizeChanged();
}
void MainWindow::setFontSizeFactor(double size) {
if(size < 0.1) {
size = 0.1;
}
_fontFactor = size;
emit fontSizeChanged();
}
#ifdef QGC_MOUSE_ENABLED_LINUX
bool MainWindow::x11Event(XEvent *event)
{
......
......@@ -130,15 +130,6 @@ public:
QWidget* getCurrentViewWidget(void) { return _currentViewWidget; }
//! Returns the font point size factor
static double fontPointFactor() { return _fontFactor; }
//! Returns the pixel size factor
static double pixelSizeFactor() { return _pixelFactor; }
//! Sets pixel size factor
void setPixelSizeFactor(double size);
//! Sets font size factor
void setFontSizeFactor(double size);
public slots:
/** @brief Show the application settings */
void showSettings();
......@@ -146,6 +137,9 @@ public slots:
/** @brief Add a new UAS */
void UASCreated(UASInterface* uas);
/** @brief Remove an old UAS */
void UASDeleted(int uasID);
void handleMisconfiguration(UASInterface* uas);
/** @brief Load configuration views */
void loadSetupView();
......@@ -206,10 +200,6 @@ signals:
void valueChanged(const int uasId, const QString& name, const QString& unit, const QVariant& value, const quint64 msec);
/** Emitted when any the Canvas elements within QML wudgets need updating */
void repaintCanvas();
/** Emitted when pixel size factor changes */
void pixelSizeChanged();
/** Emitted when pixel size factor changes */
void fontSizeChanged();
#ifdef QGC_MOUSE_ENABLED_LINUX
/** @brief Forward X11Event to catch 3DMouse inputs */
......@@ -370,10 +360,6 @@ private:
QString _getWindowStateKey();
QString _getWindowGeometryKey();
// UI Dimension Factors
static double _pixelFactor;
static double _fontFactor;
};
#endif /* _MAINWINDOW_H_ */
......@@ -29,6 +29,8 @@ QGCHilConfiguration::QGCHilConfiguration(UAS *mav, QWidget *parent) :
}
settings.endGroup();
connect(mav, SIGNAL(destroyed()), this, SLOT(deleteLater()));
}
void QGCHilConfiguration::receiveStatusMessage(const QString& message)
......
......@@ -26,10 +26,10 @@ QGCHilXPlaneConfiguration::QGCHilXPlaneConfiguration(QGCHilLink* link, QWidget *
// connect(ui->randomAttitudeButton, SIGNAL(clicked()), link, SLOT(setRandomAttitude()));
// connect(ui->randomPositionButton, SIGNAL(clicked()), link, SLOT(setRandomPosition()));
ui->airframeComboBox->setCurrentIndex(link->getAirFrameIndex());
connect(ui->airframeComboBox, SIGNAL(activated(QString)), link, SLOT(selectAirframe(QString)));
//ui->airframeComboBox->setCurrentIndex(link->getAirFrameIndex());
//connect(ui->airframeComboBox, SIGNAL(activated(QString)), link, SLOT(selectAirframe(QString)));
// XXX not implemented yet
ui->airframeComboBox->hide();
//ui->airframeComboBox->hide();
ui->sensorHilCheckBox->setChecked(xplane->sensorHilEnabled());
connect(xplane, SIGNAL(sensorHilChanged(bool)), ui->sensorHilCheckBox, SLOT(setChecked(bool)));
connect(ui->sensorHilCheckBox, SIGNAL(clicked(bool)), xplane, SLOT(enableSensorHIL(bool)));
......
......@@ -6,89 +6,27 @@
<rect>
<x>0</x>
<y>0</y>
<width>570</width>
<height>238</height>
<width>226</width>
<height>150</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,100" columnstretch="20,40,40,20">
<property name="margin">
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0" columnstretch="20,0,0">
<property name="leftMargin">
<number>0</number>
</property>
<item row="3" column="0" colspan="2">
<widget class="QPushButton" name="startButton">
<property name="text">
<string>Start</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="3">
<widget class="QComboBox" name="airframeComboBox">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>X-Plane default</string>
</property>
</item>
<item>
<property name="text">
<string>QRO_X/MK</string>
</property>
</item>
<item>
<property name="text">
<string>QRO_X/Ardrone</string>
</property>
</item>
<item>
<property name="text">
<string>QRO_X/PWM</string>
</property>
</item>
<item>
<property name="text">
<string>Unlimited</string>
</property>
</item>
<item>
<property name="text">
<string>Twinjet</string>
</property>
</item>
<item>
<property name="text">
<string>Early Bird</string>
</property>
</item>
<item>
<property name="text">
<string>Reno Racer</string>
</property>
</item>
<item>
<property name="text">
<string>Slowstick</string>
</property>
</item>
<item>
<property name="text">
<string>Tiny</string>
</property>
</item>
</widget>
</item>
<item row="3" column="2" colspan="2">
<widget class="QPushButton" name="setHomeButton">
<property name="text">
<string>Set HOME</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3">
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="1" colspan="2">
<widget class="QComboBox" name="hostComboBox">
<property name="editable">
<bool>true</bool>
......@@ -100,28 +38,21 @@
</item>
</widget>
</item>
<item row="1" column="0">
<item row="0" column="0">
<widget class="QLabel" name="hostLabel">
<property name="text">
<string>Host</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Airframe</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="4">
<item row="3" column="0" colspan="3">
<widget class="QCheckBox" name="sensorHilCheckBox">
<property name="text">
<string>Enable sensor level HIL</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="4">
<item row="4" column="0" colspan="3">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
......@@ -134,6 +65,13 @@
</property>
</spacer>
</item>
<item row="1" column="1" colspan="2">
<widget class="QPushButton" name="startButton">
<property name="text">
<string>Start</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
......
......@@ -31,7 +31,7 @@ This file is part of the QGROUNDCONTROL project
#include <QQmlEngine>
#include <QSettings>
#include "MainWindow.h"
#include "ScreenTools.h"
#include "FlightDisplay.h"
#include "UASManager.h"
......@@ -48,8 +48,8 @@ FlightDisplay::FlightDisplay(QWidget *parent)
pl->setContentsMargins(0,0,0,0);
}
#ifndef __android__
setMinimumWidth( 380 * MainWindow::pixelSizeFactor());
setMinimumHeight(400 * MainWindow::pixelSizeFactor());
setMinimumWidth( 380 * ScreenTools::pixelSizeFactor_s());
setMinimumHeight(400 * ScreenTools::pixelSizeFactor_s());
#endif
setContextPropertyObject("flightDisplay", this);
setSource(QUrl::fromUserInput("qrc:/qml/FlightDisplay.qml"));
......
......@@ -230,63 +230,6 @@ Item {
}
}
}
//-- Hack tool to find optimal scale factor
Column {
id: fudgeColumn
anchors.horizontalCenter: parent.horizontalCenter
spacing: ScreenTools.adjustPixelSize(4)
width: parent.width
QGCLabel {
text: "Adjust Pixel Size Factor"
anchors.horizontalCenter: parent.horizontalCenter
}
Row {
spacing: ScreenTools.adjustPixelSize(4)
anchors.horizontalCenter: parent.horizontalCenter
Button {
text: 'Inc'
onClicked: {
ScreenTools.increasePixelSize()
}
}
Label {
text: ScreenTools.pixelSizeFactor.toFixed(2)
color: __qgcPal.text
anchors.verticalCenter: parent.verticalCenter
}
Button {
text: 'Dec'
onClicked: {
ScreenTools.decreasePixelSize()
}
}
}
QGCLabel {
text: "Adjust Font Size Factor"
anchors.horizontalCenter: parent.horizontalCenter
}
Row {
spacing: ScreenTools.adjustPixelSize(4)
anchors.horizontalCenter: parent.horizontalCenter
Button {
text: 'Inc'
onClicked: {
ScreenTools.increaseFontSize()
}
}
Label {
text: ScreenTools.fontPointFactor.toFixed(2)
color: __qgcPal.text
anchors.verticalCenter: parent.verticalCenter
}
Button {
text: 'Dec'
onClicked: {
ScreenTools.decreaseFontSize()
}
}
}
}
}
}
}
......@@ -487,6 +430,15 @@ Item {
z: 10
}
QGCHudMessage {
id: hudMessage
y: ScreenTools.pixelSizeFactor * (5)
width: (parent.width - 520 > 200) ? parent.width - 520 : 200
height: ScreenTools.pixelSizeFactor * (30)
anchors.horizontalCenter: parent.horizontalCenter
z: mapBackground.z + 1
}
QGCCompassInstrument {
id: compassInstrument
y: ScreenTools.pixelSizeFactor * (5)
......@@ -494,7 +446,7 @@ Item {
size: ScreenTools.pixelSizeFactor * (160)
heading: isNaN(MavManager.heading) ? 0 : MavManager.heading
visible: mapBackground.visible && showCompass
z: mapBackground.z + 1
z: mapBackground.z + 2
onResetRequested: {
y = ScreenTools.pixelSizeFactor * (5)
x = ScreenTools.pixelSizeFactor * (85)
......@@ -514,7 +466,7 @@ Item {
visible: mapBackground.visible && showAttitudeIndicator
anchors.right: root.right
anchors.rightMargin: ScreenTools.pixelSizeFactor * (85)
z: mapBackground.z + 1
z: mapBackground.z + 2
onResetRequested: {
y = ScreenTools.pixelSizeFactor * (5)
anchors.right = root.right
......@@ -531,7 +483,6 @@ Item {
rollAngle: roll
pitchAngle: pitch
visible: !mapBackground.visible
z: 10
}
QGCAttitudeWidget {
......
......@@ -31,7 +31,7 @@ This file is part of the QGROUNDCONTROL project
#include <QQmlEngine>
#include <QSettings>
#include "MainWindow.h"
#include "ScreenTools.h"
#include "QGCMapDisplay.h"
#include "UASManager.h"
......@@ -48,8 +48,8 @@ QGCMapDisplay::QGCMapDisplay(QWidget *parent)
pl->setContentsMargins(0,0,0,0);
}
#ifndef __android__
setMinimumWidth( 380 * MainWindow::pixelSizeFactor());
setMinimumHeight(400 * MainWindow::pixelSizeFactor());
setMinimumWidth( 380 * ScreenTools::pixelSizeFactor_s());
setMinimumHeight(400 * ScreenTools::pixelSizeFactor_s());
#endif
setContextPropertyObject("mapEngine", this);
setSource(QUrl::fromUserInput("qrc:/qml/MapDisplay.qml"));
......
......@@ -35,7 +35,7 @@ QGCMovableItem {
id: root
property real heading: 0
property real size: ScreenTools.pixelSizeFactor * (120)
property real _fontSize: ScreenTools.fontPointFactor * (12)
property int _fontSize: ScreenTools.font12
width: size
height: size
Rectangle {
......@@ -72,7 +72,7 @@ QGCMovableItem {
QGCLabel {
text: heading.toFixed(0)
font.weight: Font.DemiBold
font.pointSize: _fontSize < 1 ? 1 : _fontSize;
font.pixelSize: _fontSize < 1 ? 1 : _fontSize;
color: "white"
anchors.centerIn: parent
}
......
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL 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 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL 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 QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief QGC HUD Message
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.4
import QtQuick.Controls 1.3
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.MavManager 1.0
Item {
id: root
visible: MavManager.latestError !== ''
Rectangle {
anchors.fill: parent
color: Qt.rgba(0,0,0,0.75)
border.color: Qt.rgba(1,1,1,0.75)
radius: 4
QGCLabel {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
antialiasing: true
font.weight: Font.DemiBold
text: MavManager.latestError
color: "#f84444"
}
OpacityAnimator {
id: vanish
target: root;
from: 1;
to: 0;
duration: 2000
running: false
}
}
Timer {
id: vanishTimer
interval: 30000
running: false
repeat: false
onTriggered: {
vanish.start();
}
}
MouseArea {
anchors.fill: parent
z: 1000
acceptedButtons: Qt.LeftButton
onClicked: {
if (mouse.button == Qt.LeftButton)
{
vanishTimer.stop();
vanish.stop();
root.opacity = 0;
}
}
}
Connections {
target: MavManager
onLatestErrorChanged: {
vanishTimer.stop();
vanish.stop();
vanishTimer.start();
root.opacity = 1;
}
}
}
......@@ -40,7 +40,7 @@ Rectangle {
property real _reticleSlot: _reticleSpacing + _reticleHeight
property real _longDash: size * 0.40
property real _shortDash: size * 0.25
property real _fontSize: ScreenTools.fontPointFactor * (11);
property real _fontSize: ScreenTools.font11
height: size * 0.9
width: size
radius: ScreenTools.pixelSizeFactor * (8)
......@@ -70,7 +70,7 @@ Rectangle {
anchors.verticalCenter: parent.verticalCenter
smooth: true
font.weight: Font.DemiBold
font.pointSize: _fontSize < 1 ? 1 : _fontSize;
font.pixelSize: _fontSize < 1 ? 1 : _fontSize;
text: _pitch
color: "white"
visible: (_pitch != 0) && ((_pitch % 10) === 0)
......@@ -81,7 +81,7 @@ Rectangle {
anchors.verticalCenter: parent.verticalCenter
smooth: true
font.weight: Font.DemiBold
font.pointSize: _fontSize < 1 ? 1 : _fontSize;
font.pixelSize: _fontSize < 1 ? 1 : _fontSize;
text: _pitch
color: "white"
visible: (_pitch != 0) && ((_pitch % 10) === 0)
......
......@@ -83,7 +83,7 @@ Item {
id: label
color: "black"
text: slider.value.toFixed(2)
width: font.pointSize * 3.5
width: font.pixelSize * 3.5
anchors.horizontalCenter: labelRect.horizontalCenter
horizontalAlignment: Text.AlignHCenter
anchors.verticalCenter: labelRect.verticalCenter
......
......@@ -45,7 +45,7 @@ MapQuickItem {
Text {
id: number
anchors.centerIn: parent
font.pointSize: 11
font.pixelSize: 11
font.weight: Font.DemiBold
color: "white"
text: marker.waypointID
......
......@@ -15,3 +15,4 @@ QGCAttitudeInstrument 1.0 QGCAttitudeInstrument.qml
QGCCompassInstrument 1.0 QGCCompassInstrument.qml
QGCArtificialHorizon 1.0 QGCArtificialHorizon.qml
QGCWaypoint 1.0 QGCWaypoint.qml
QGCHudMessage 1.0 QGCHudMessage.qml
......@@ -31,10 +31,13 @@ This file is part of the QGROUNDCONTROL project
#include <QQmlEngine>
#include "MainToolBar.h"
#include "ScreenTools.h"
#include "MainWindow.h"
#include "UASMessageHandler.h"
#include "UASMessageView.h"
#include "UASMessageHandler.h"
#include "FlightDisplay.h"
#include "QGCApplication.h"
#include "MavManager.h"
MainToolBar::MainToolBar(QWidget* parent)
: QGCQmlWidgetHolder(parent)
......@@ -42,12 +45,6 @@ MainToolBar::MainToolBar(QWidget* parent)
, _toolBar(NULL)
, _currentView(ViewNone)
, _connectionCount(0)
, _currentMessageCount(0)
, _messageCount(0)
, _currentErrorCount(0)
, _currentWarningCount(0)
, _currentNormalCount(0)
, _currentMessageType(MessageNone)
, _showGPS(true)
, _showMav(true)
, _showMessages(true)
......@@ -61,13 +58,14 @@ MainToolBar::MainToolBar(QWidget* parent)
{
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
setObjectName("MainToolBar");
_updatePixelSize();
setMinimumWidth(MainWindow::instance()->minimumWidth());
// Get rid of layout default margins
QLayout* pl = layout();
if(pl) {
pl->setContentsMargins(0,0,0,0);
}
setMinimumHeight(40 * ScreenTools::pixelSizeFactor_s());
setMaximumHeight(40 * ScreenTools::pixelSizeFactor_s());
// Tool Bar Preferences
QSettings settings;
settings.beginGroup(TOOL_BAR_SETTINGS_GROUP);
......@@ -87,7 +85,6 @@ MainToolBar::MainToolBar(QWidget* parent)
connect(LinkManager::instance(), &LinkManager::linkConfigurationChanged, this, &MainToolBar::_updateConfigurations);
connect(LinkManager::instance(), &LinkManager::linkConnected, this, &MainToolBar::_linkConnected);
connect(LinkManager::instance(), &LinkManager::linkDisconnected, this, &MainToolBar::_linkDisconnected);
connect(MainWindow::instance(), &MainWindow::pixelSizeChanged, this, &MainToolBar::_updatePixelSize);
// RSSI (didn't like standard connection)
connect(MAVLinkProtocol::instance(),
SIGNAL(radioStatusChanged(LinkInterface*, unsigned, unsigned, unsigned, unsigned, unsigned, unsigned, unsigned)), this,
......@@ -215,20 +212,8 @@ void MainToolBar::onEnterMessageArea(int x, int y)
// If not already there and messages are actually present
if(!_rollDownMessages && UASMessageHandler::instance()->messages().count())
{
// Reset Counts
int count = _currentMessageCount;
MessageType_t type = _currentMessageType;
_currentErrorCount = 0;
_currentWarningCount = 0;
_currentNormalCount = 0;
_currentMessageCount = 0;
_currentMessageType = MessageNone;
if(count != _currentMessageCount) {
emit newMessageCountChanged(0);
}
if(type != _currentMessageType) {
emit messageTypeChanged(MessageNone);
}
if(qgcApp()->getMavManager())
qgcApp()->getMavManager()->resetMessages();
// Show messages
int dialogWidth = 400;
x = x - (dialogWidth >> 1);
......@@ -280,7 +265,6 @@ void MainToolBar::setCurrentView(int currentView)
void MainToolBar::_forgetUAS(UASInterface* uas)
{
if (_mav != NULL && _mav == uas) {
disconnect(UASMessageHandler::instance(), &UASMessageHandler::textMessageCountChanged, this, &MainToolBar::_handleTextMessage);
disconnect(_mav, &UASInterface::remoteControlRSSIChanged, this, &MainToolBar::_remoteControlRSSIChanged);
disconnect(AutoPilotPluginManager::instance()->getInstanceForAutoPilotPlugin(_mav).data(), &AutoPilotPlugin::parameterListProgress, this, &MainToolBar::_setProgressBarValue);
_mav = NULL;
......@@ -300,7 +284,6 @@ void MainToolBar::_setActiveUAS(UASInterface* active)
_mav = active;
if (_mav)
{
connect(UASMessageHandler::instance(), &UASMessageHandler::textMessageCountChanged, this, &MainToolBar::_handleTextMessage);
connect(_mav, &UASInterface::remoteControlRSSIChanged, this, &MainToolBar::_remoteControlRSSIChanged);
connect(AutoPilotPluginManager::instance()->getInstanceForAutoPilotPlugin(_mav).data(), &AutoPilotPlugin::parameterListProgress, this, &MainToolBar::_setProgressBarValue);
}
......@@ -401,75 +384,8 @@ void MainToolBar::_updateConnection(LinkInterface *disconnectedLink)
}
}
void MainToolBar::_handleTextMessage(int newCount)
{
// Reset?
if(!newCount) {
_currentMessageCount = 0;
_currentNormalCount = 0;
_currentWarningCount = 0;
_currentErrorCount = 0;
_messageCount = 0;
_currentMessageType = MessageNone;
emit newMessageCountChanged(0);
emit messageTypeChanged(MessageNone);
emit messageCountChanged(0);
return;
}
UASMessageHandler* pMh = UASMessageHandler::instance();
Q_ASSERT(pMh);
MessageType_t type = newCount ? _currentMessageType : MessageNone;
int errorCount = _currentErrorCount;
int warnCount = _currentWarningCount;
int normalCount = _currentNormalCount;
//-- Add current message counts
errorCount += pMh->getErrorCount();
warnCount += pMh->getWarningCount();
normalCount += pMh->getNormalCount();
//-- See if we have a higher level
if(errorCount != _currentErrorCount) {
_currentErrorCount = errorCount;
type = MessageError;
}
if(warnCount != _currentWarningCount) {
_currentWarningCount = warnCount;
if(_currentMessageType != MessageError) {
type = MessageWarning;
}
}
if(normalCount != _currentNormalCount) {
_currentNormalCount = normalCount;
if(_currentMessageType != MessageError && _currentMessageType != MessageWarning) {
type = MessageNormal;
}
}
int count = _currentErrorCount + _currentWarningCount + _currentNormalCount;
if(count != _currentMessageCount) {
_currentMessageCount = count;
// Display current total new messages count
emit newMessageCountChanged(count);
}
if(type != _currentMessageType) {
_currentMessageType = type;
// Update message level
emit messageTypeChanged(type);
}
// Update message count (all messages)
if(newCount != _messageCount) {
_messageCount = newCount;
emit messageCountChanged(_messageCount);
}
}
void MainToolBar::_setProgressBarValue(float value)
{
_progressBarValue = value;
emit progressBarValueChanged(value);
}
void MainToolBar::_updatePixelSize()
{
setMinimumHeight(40 * MainWindow::pixelSizeFactor());
setMaximumHeight(40 * MainWindow::pixelSizeFactor());
}
......@@ -47,17 +47,7 @@ class MainToolBar : public QGCQmlWidgetHolder
{
Q_OBJECT
Q_ENUMS(ViewType_t)
Q_ENUMS(MessageType_t)
public:
MainToolBar(QWidget* parent = NULL);
~MainToolBar();
typedef enum {
MessageNone,
MessageNormal,
MessageWarning,
MessageError
} MessageType_t;
typedef enum {
ViewNone = -1,
......@@ -67,6 +57,9 @@ public:
ViewSetup , // MainWindow::VIEW_SETUP
} ViewType_t;
MainToolBar(QWidget* parent = NULL);
~MainToolBar();
Q_INVOKABLE void onSetupView();
Q_INVOKABLE void onPlanView();
Q_INVOKABLE void onFlyView();
......@@ -78,9 +71,6 @@ public:
Q_PROPERTY(ViewType_t currentView MEMBER _currentView NOTIFY currentViewChanged)
Q_PROPERTY(QStringList configList MEMBER _linkConfigurations NOTIFY configListChanged)
Q_PROPERTY(MessageType_t messageType MEMBER _currentMessageType NOTIFY messageTypeChanged)
Q_PROPERTY(int newMessageCount MEMBER _currentMessageCount NOTIFY newMessageCountChanged)
Q_PROPERTY(int messageCount MEMBER _messageCount NOTIFY messageCountChanged)
Q_PROPERTY(int connectionCount READ connectionCount NOTIFY connectionCountChanged)
Q_PROPERTY(QStringList connectedList MEMBER _connectedList NOTIFY connectedListChanged)
Q_PROPERTY(bool showGPS MEMBER _showGPS NOTIFY showGPSChanged)
......@@ -104,9 +94,6 @@ signals:
void connectionCountChanged (int count);
void currentViewChanged ();
void configListChanged ();
void messageTypeChanged (MessageType_t type);
void newMessageCountChanged (int count);
void messageCountChanged (int count);
void connectedListChanged (QStringList connectedList);
void showGPSChanged (bool value);
void showMavChanged (bool value);
......@@ -124,10 +111,8 @@ private slots:
void _updateConfigurations ();
void _linkConnected (LinkInterface* link);
void _linkDisconnected (LinkInterface* link);
void _handleTextMessage (int newCount);
void _leaveMessageView ();
void _setProgressBarValue (float value);
void _updatePixelSize ();
void _remoteControlRSSIChanged (uint8_t rssi);
void _telemetryChanged (LinkInterface* link, unsigned rxerrors, unsigned fixed, unsigned rssi, unsigned remrssi, unsigned txbuf, unsigned noise, unsigned remnoise);
......@@ -141,12 +126,6 @@ private:
ViewType_t _currentView;
QStringList _linkConfigurations;
int _connectionCount;
int _currentMessageCount;
int _messageCount;
int _currentErrorCount;
int _currentWarningCount;
int _currentNormalCount;
MessageType_t _currentMessageType;
QStringList _connectedList;
bool _showGPS;
bool _showMav;
......
......@@ -64,20 +64,20 @@ Rectangle {
}
function getMessageColor() {
if(mainToolBar.messageType === MainToolBar.MessageNone)
if(MavManager.messageType === MavManager.MessageNone)
return qgcPal.button;
if(mainToolBar.messageType === MainToolBar.MessageNormal)
if(MavManager.messageType === MavManager.MessageNormal)
return colorBlue;
if(mainToolBar.messageType === MainToolBar.MessageWarning)
if(MavManager.messageType === MavManager.MessageWarning)
return colorOrange;
if(mainToolBar.messageType === MainToolBar.MessageError)
if(MavManager.messageType === MavManager.MessageError)
return colorRed;
// Cannot be so make make it obnoxious to show error
return "purple";
}
function getMessageIcon() {
if(mainToolBar.messageType === MainToolBar.MessageNormal || mainToolBar.messageType === MainToolBar.MessageNone)
if(MavManager.messageType === MavManager.MessageNormal || MavManager.messageType === MavManager.MessageNone)
return "qrc:/res/Megaphone";
else
return "qrc:/res/Yield";
......@@ -311,7 +311,7 @@ Rectangle {
Rectangle {
id: messages
width: (mainToolBar.messageCount > 99) ? getProportionalDimmension(65) : getProportionalDimmension(60)
width: (MavManager.messageCount > 99) ? getProportionalDimmension(65) : getProportionalDimmension(60)
height: cellHeight
visible: (mainToolBar.connectionCount > 0) && (mainToolBar.showMessages)
anchors.verticalCenter: parent.verticalCenter
......@@ -337,8 +337,8 @@ Rectangle {
width: messages.width - messageIcon.width
QGCLabel {
id: messageText
text: (mainToolBar.messageCount > 0) ? mainToolBar.messageCount : ''
font.pointSize: ScreenTools.fontPointFactor * (14);
text: (MavManager.messageCount > 0) ? MavManager.messageCount : ''
font.pixelSize: ScreenTools.font14
font.weight: Font.DemiBold
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
......@@ -350,7 +350,7 @@ Rectangle {
Image {
id: dropDown
source: "QGroundControl/Controls/arrow-down.png"
visible: (messages.showTriangle) && (mainToolBar.messageCount > 0)
visible: (messages.showTriangle) && (MavManager.messageCount > 0)
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.bottomMargin: getProportionalDimmension(3)
......@@ -424,7 +424,7 @@ Rectangle {
QGCLabel {
id: satelitteText
text: MavManager.satelliteCount >= 0 ? MavManager.satelliteCount : 'NA'
font.pointSize: MavManager.satelliteCount >= 0 ? ScreenTools.fontPointFactor * (14) : ScreenTools.fontPointFactor * (10)
font.pixelSize: MavManager.satelliteCount >= 0 ? ScreenTools.font14 : ScreenTools.font10
font.weight: Font.DemiBold
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
......@@ -459,7 +459,7 @@ Rectangle {
anchors.rightMargin: getProportionalDimmension(6)
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignRight
font.pointSize: ScreenTools.fontPointFactor * (12);
font.pixelSize: ScreenTools.font12
font.weight: Font.DemiBold
color: colorWhite
}
......@@ -492,7 +492,7 @@ Rectangle {
anchors.right: parent.right
QGCLabel {
text: 'R '
font.pointSize: ScreenTools.fontPointFactor * (11);
font.pixelSize: ScreenTools.font11
font.weight: Font.DemiBold
color: colorWhite
}
......@@ -500,7 +500,7 @@ Rectangle {
text: mainToolBar.telemetryRRSSI + 'dB'
width: getProportionalDimmension(30)
horizontalAlignment: Text.AlignRight
font.pointSize: ScreenTools.fontPointFactor * (11);
font.pixelSize: ScreenTools.font11
font.weight: Font.DemiBold
color: colorWhite
}
......@@ -509,7 +509,7 @@ Rectangle {
anchors.right: parent.right
QGCLabel {
text: 'L '
font.pointSize: ScreenTools.fontPointFactor * (11);
font.pixelSize: ScreenTools.font11
font.weight: Font.DemiBold
color: colorWhite
}
......@@ -517,7 +517,7 @@ Rectangle {
text: mainToolBar.telemetryLRSSI + 'dB'
width: getProportionalDimmension(30)
horizontalAlignment: Text.AlignRight
font.pointSize: ScreenTools.fontPointFactor * (11);
font.pixelSize: ScreenTools.font11
font.weight: Font.DemiBold
color: colorWhite
}
......@@ -548,7 +548,7 @@ Rectangle {
QGCLabel {
visible: batteryStatus.visible && MavManager.batteryConsumed < 0.0
text: MavManager.batteryVoltage.toFixed(1) + 'V';
font.pointSize: ScreenTools.fontPointFactor * (11);
font.pixelSize: ScreenTools.font11
font.weight: Font.DemiBold
anchors.right: parent.right
anchors.rightMargin: getProportionalDimmension(6)
......@@ -566,7 +566,7 @@ Rectangle {
text: MavManager.batteryVoltage.toFixed(1) + 'V';
width: getProportionalDimmension(30)
horizontalAlignment: Text.AlignRight
font.pointSize: ScreenTools.fontPointFactor * (11);
font.pixelSize: ScreenTools.font11
font.weight: Font.DemiBold
color: colorWhite
}
......@@ -574,7 +574,7 @@ Rectangle {
text: MavManager.batteryConsumed.toFixed(0) + 'mA';
width: getProportionalDimmension(30)
horizontalAlignment: Text.AlignRight
font.pointSize: ScreenTools.fontPointFactor * (11);
font.pixelSize: ScreenTools.font11
font.weight: Font.DemiBold
color: colorWhite
}
......@@ -599,7 +599,7 @@ Rectangle {
QGCLabel {
id: armedStatusText
text: (MavManager.systemArmed) ? qsTr("ARMED") : qsTr("DISARMED")
font.pointSize: ScreenTools.fontPointFactor * (12);
font.pixelSize: ScreenTools.font12
font.weight: Font.DemiBold
anchors.centerIn: parent
color: (MavManager.systemArmed) ? colorOrangeText : colorGreenText
......@@ -618,7 +618,7 @@ Rectangle {
QGCLabel {
id: stateStatusText
text: MavManager.currentState
font.pointSize: ScreenTools.fontPointFactor * (12);
font.pixelSize: ScreenTools.font12
font.weight: Font.DemiBold
anchors.centerIn: parent
color: (MavManager.currentState === "STANDBY") ? colorGreenText : colorRedText
......@@ -639,7 +639,7 @@ Rectangle {
QGCLabel {
id: modeStatusText
text: MavManager.currentMode
font.pointSize: ScreenTools.fontPointFactor * (12);
font.pixelSize: ScreenTools.font12
font.weight: Font.DemiBold
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
......@@ -660,7 +660,7 @@ Rectangle {
QGCLabel {
id: connectionStatusText
text: qsTr("CONNECTION LOST")
font.pointSize: ScreenTools.fontPointFactor * (14);
font.pixelSize: ScreenTools.font14
font.weight: Font.DemiBold
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
......
......@@ -63,7 +63,8 @@ UASQuickView::~UASQuickView()
void UASQuickView::columnActionTriggered()
{
bool ok = false;
int newcolumns = QInputDialog::getInt(this,"Columns","Enter number of columns",1,0,100,1,&ok);
int newcolumns = QInputDialog::getInt(
this,"Columns","Enter number of columns", m_columnCount, 1, 10, 1, &ok);
if (!ok)
{
return;
......@@ -110,7 +111,7 @@ void UASQuickView::loadSettings()
QSettings settings;
m_columnCount = settings.value("UAS_QUICK_VIEW_COLUMNS",1).toInt();
int size = settings.beginReadArray("UAS_QUICK_VIEW_ITEMS");
for (int i=0;i<size;i++)
for (int i = 0; i < size; i++)
{
settings.setArrayIndex(i);
QString nameval = settings.value("name").toString();
......@@ -158,16 +159,16 @@ void UASQuickView::sortItems(int columncount)
m_PropertyToLayoutIndexMap.remove(i.key());
itemlist.append(i.value());
}
//Item list has all the widgets availble, now re-add them to the layouts.
for (int i=0;i<m_verticalLayoutList.size();i++)
// Item list has all the widgets availble, now re-add them to the layouts.
for (int i = 0; i < m_verticalLayoutList.size(); i++)
{
ui.horizontalLayout->removeItem(m_verticalLayoutList[i]);
m_verticalLayoutList[i]->deleteLater(); //removeItem de-parents the item.
}
m_verticalLayoutList.clear();
//Create a vertical layout for every intended column
for (int i=0;i<columncount;i++)
// Create a vertical layout for every intended column
for (int i = 0; i < columncount; i++)
{
QVBoxLayout *layout = new QVBoxLayout();
ui.horizontalLayout->addItem(layout);
......@@ -177,7 +178,7 @@ void UASQuickView::sortItems(int columncount)
//Cycle through all items and add them to the layout
int currcol = 0;
for (int i=0;i<itemlist.size();i++)
for (int i = 0; i < itemlist.size(); i++)
{
m_verticalLayoutList[currcol]->addWidget(itemlist[i]);
currcol++;
......@@ -206,6 +207,8 @@ void UASQuickView::recalculateItemTextSizing()
minpixelsize = tempmin;
}
}
if(minpixelsize < 6)
minpixelsize = 6;
for (QMap<QString,UASQuickViewItem*>::const_iterator i = uasPropertyToLabelMap.constBegin();i!=uasPropertyToLabelMap.constEnd();i++)
{
i.value()->setValuePixelSize(minpixelsize);
......
......@@ -10,27 +10,27 @@ UASQuickViewTextItem::UASQuickViewTextItem(QWidget *parent) : UASQuickViewItem(p
// Create the title label. Scale the font based on available size.
titleLabel = new QLabel(this);
titleLabel->setAlignment(Qt::AlignHCenter);
titleLabel->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Minimum);
titleLabel->setObjectName(QString::fromUtf8("title"));
QFont titlefont = titleLabel->font();
titlefont.setPixelSize(this->height() / 4.0);
titleLabel->setFont(titlefont);
layout->addWidget(titleLabel);
titleLabel->setAlignment(Qt::AlignHCenter);
titleLabel->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Minimum);
titleLabel->setObjectName(QString::fromUtf8("title"));
QFont titlefont = titleLabel->font();
titlefont.setPixelSize(this->height() / 4.0);
titleLabel->setFont(titlefont);
layout->addWidget(titleLabel);
// Create the value label. Scale the font based on available size.
valueLabel = new QLabel(this);
valueLabel->setAlignment(Qt::AlignHCenter);
valueLabel->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Minimum);
valueLabel->setObjectName(QString::fromUtf8("value"));
valueLabel->setText("0.00");
// Create the value label. Scale the font based on available size.
valueLabel = new QLabel(this);
valueLabel->setAlignment(Qt::AlignHCenter);
valueLabel->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Minimum);
valueLabel->setObjectName(QString::fromUtf8("value"));
valueLabel->setText("0.00");
QFont valuefont = valueLabel->font();
valuefont.setPixelSize(this->height() / 2.0);
valueLabel->setFont(valuefont);
layout->addWidget(valueLabel);
// And make sure the items are evenly spaced in the UASQuickView.
layout->addSpacerItem(new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
layout->addSpacerItem(new QSpacerItem(10, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
this->setLayout(layout);
}
void UASQuickViewTextItem::setValue(double value)
......@@ -61,7 +61,7 @@ void UASQuickViewTextItem::setTitle(QString title)
{
if (title.indexOf(".") != -1 && title.indexOf(":") != -1)
{
titleLabel->setText(title.mid(title.indexOf(".")+1));
titleLabel->setText(title.mid(title.indexOf(".") + 1));
}
else
{
......@@ -73,7 +73,7 @@ int UASQuickViewTextItem::minValuePixelSize()
QFont valuefont = valueLabel->font();
QFont titlefont = titleLabel->font();
valuefont.setPixelSize(this->height());
titlefont.setPixelSize(valuefont.pixelSize() / 2.0);
titlefont.setPixelSize(valuefont.pixelSize() * 0.75);
//spacerItem->setGeometry(QRect(0,0,20,this->height()/10.0));
QFontMetrics metrics(valuefont);
......@@ -87,18 +87,18 @@ int UASQuickViewTextItem::minValuePixelSize()
//QFontMetrics titlefm( titlefont );
//QRect titlebound = titlefm.boundingRect(0,0, titleLabel->width(), titleLabel->height(), Qt::TextWordWrap | Qt::AlignLeft, titleLabel->text());
if ((valbound.width() <= valueLabel->width() && valbound.height() <= valueLabel->height()))// && (titlebound.width() <= titleLabel->width() && titlebound.height() <= titleLabel->height()))
if ((valbound.width() <= valueLabel->width() && valbound.height() <= valueLabel->height())) // && (titlebound.width() <= titleLabel->width() && titlebound.height() <= titleLabel->height()))
fit = true;
else
{
if (valuefont.pixelSize()-5 <= 0)
if (valuefont.pixelSize() - 1 <= 6)
{
fit = true;
valuefont.setPixelSize(5);
valuefont.setPixelSize(6);
}
else
{
valuefont.setPixelSize(valuefont.pixelSize() - 5);
valuefont.setPixelSize(valuefont.pixelSize() - 1);
}
//titlefont.setPixelSize(valuefont.pixelSize() / 2.0);
//qDebug() << "Point size:" << valuefont.pixelSize() << valueLabel->width() << valueLabel->height();
......@@ -111,7 +111,7 @@ void UASQuickViewTextItem::setValuePixelSize(int size)
QFont valuefont = valueLabel->font();
QFont titlefont = titleLabel->font();
valuefont.setPixelSize(size);
titlefont.setPixelSize(valuefont.pixelSize() / 2.0);
titlefont.setPixelSize(valuefont.pixelSize() * 0.75);
valueLabel->setFont(valuefont);
titleLabel->setFont(titlefont);
update();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment