/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include "commandline.h" static void usage(const char *appname) { Q_UNUSED(appname); printf(" GraphicsViewBenchmark related options:\n"); printf(" -h,-help,--help: This help\n"); printf(" -resolution : UI resolution in format WxH where width and height are positive values\n"); printf(" -opengl : Enables OpenGL usage. Building PRECONDITIONS: QT_NO_OPENGL is off.\n"); printf(" -manual : Run test manually \n"); printf("\n The following options are available in manual mode:\n"); printf(" -rotation : UI rotation in degrees\n"); printf(" -subtree-cache : Enables usage of subtree caching method\n"); printf(" -fps : Output FPS count to stdout during application execution\n"); printf(" -items : Count of items created to the list\n"); printf("\n"); } static inline bool argumentOnlyAvailableInManualMode(const char *arg) { return (strcmp(arg, "-rotation") == 0) || (strcmp(arg, "-subtree-cache") == 0) || (strcmp(arg, "-fps") == 0) || (strcmp(arg, "-items") == 0); } bool readSettingsFromCommandLine(int argc, char *argv[], Settings& config) { bool builtWithOpenGL = false; Settings::Options options; #ifndef QT_NO_OPENGL builtWithOpenGL = true; #endif for (int i = 1; i < argc; ++i) { if (strcmp(argv[i], "-manual") == 0) { options |= Settings::ManualTest; argv[i] = 0; break; } } for (int i = 1; i < argc; ++i) { if (!argv[i]) continue; if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0 || strcmp(argv[i], "--help") == 0) { usage(argv[0]); return true; } if (strcmp(argv[i], "-opengl") == 0) { if (builtWithOpenGL) { options |= Settings::UseOpenGL; argv[i] = 0; } else { printf("-opengl parameter can be used only with building PRECONDITIONS: QT_NO_OPENGL is off.\n"); usage(argv[0]); return false; } } else if (strcmp(argv[i], "-resolution") == 0) { if (i + 1 >= argc) { printf("-resolution needs an extra parameter specifying the application UI resolution\n"); usage(argv[0]); return false; } else { QStringList res = QString(argv[i+1]).split(QLatin1Char('x')); if (res.count() != 2) { printf("-resolution parameter UI resolution should be set in format WxH where width and height are positive values\n"); usage(argv[0]); return false; } int width = res.at(0).toInt(); int height = res.at(1).toInt(); config.setSize(QSize(width, height)); if (width <=0 || height <=0) { printf("-resolution parameter UI resolution should be set in format WxH where width and height are positive values\n"); usage(argv[0]); return false; } argv[i] = 0; i++; argv[i] = 0; } } if (!argv[i]) continue; if (!(options & Settings::ManualTest)) { if (argumentOnlyAvailableInManualMode(argv[i])) { printf("\nWrong option: '%s' is only available in manual mode\n\n", argv[i]); usage(argv[0]); return false; } continue; } if (strcmp(argv[i], "-rotation") == 0) { if (i + 1 >= argc) { printf("-rotation needs an extra parameter specifying the application UI rotation in degrees\n"); usage(argv[0]); return false; } else { bool ok; int angle = QString(argv[i+1]).toInt(&ok); if (!ok) { printf("-rotation parameter should specify rotation angle in degrees\n"); usage(argv[0]); return false; } config.setAngle(angle); argv[i] = 0; i++; argv[i] = 0; } } else if (strcmp(argv[i], "-subtree-cache") == 0) { options |= Settings::UseListItemCache; argv[i] = 0; } else if (strcmp(argv[i], "-fps") == 0) { options |= Settings::OutputFps; argv[i] = 0; } else if (strcmp(argv[i], "-items") == 0) { if (i + 1 >= argc) { printf("-items needs an extra parameter specifying amount of list items\n"); usage(argv[0]); return false; } else { bool ok; int amount = QString(argv[i+1]).toInt(&ok); if (!ok) { printf("-items needs an extra parameter specifying amount (integer) of list items\n"); usage(argv[0]); return false; } config.setListItemCount(amount); argv[i] = 0; i++; argv[i] = 0; } } } config.setOptions(options); return true; }