Ejemplo n.º 1
0
bool QDesigner::parseCommandLineArgs(QStringList &fileNames, QString &resourceDir)
{
    const QStringList args = arguments();
    const QStringList::const_iterator acend = args.constEnd();
    QStringList::const_iterator it = args.constBegin();
    for (++it; it != acend; ++it) {
        const QString &argument = *it;
        do {
            // Arguments
            if (!argument.startsWith(QLatin1Char('-'))) {
                if (!fileNames.contains(argument))
                    fileNames.append(argument);
                break;
            }
            // Options
            if (argument == QStringLiteral("-server")) {
                m_server = new QDesignerServer();
                printf("%d\n", m_server->serverPort());
                fflush(stdout);
                break;
            }
            if (argument == QStringLiteral("-client")) {
                bool ok = true;
                if (++it == acend) {
                    qWarning("** WARNING The option -client requires an argument");
                    return false;
                }
                const quint16 port = it->toUShort(&ok);
                if (ok) {
                    m_client = new QDesignerClient(port, this);
                } else {
                    qWarning("** WARNING Non-numeric argument specified for -client");
                    return false;
                }
                break;
            }
            if (argument == QStringLiteral("-resourcedir")) {
                if (++it == acend) {
                    qWarning("** WARNING The option -resourcedir requires an argument");
                    return false;
                }
                resourceDir = QFile::decodeName(it->toLocal8Bit());
                break;
            }
            if (argument == QStringLiteral("-enableinternaldynamicproperties")) {
                QDesignerPropertySheet::setInternalDynamicPropertiesEnabled(true);
                break;
            }
            const QString msg = QString::fromUtf8("** WARNING Unknown option %1").arg(argument);
            qWarning("%s", qPrintable(msg));
        } while (false);
    }
    return true;
}
static std::ostream& operator<<( std::ostream& stream, const QStringList& list )
{
    stream << "QStringList(";
    for( QStringList::const_iterator it = list.begin(); it != list.end(); ++it )
    {
        stream << " " << it->toLocal8Bit().data();
        if( it + 1 != list.end() )
            stream << ",";
    }
    stream << " )";
    return stream;
}
Ejemplo n.º 3
0
bool CliParser::init(const QStringList &args) {
    argsRaw = args;
    QStringList::const_iterator currentArg;
    for (currentArg = argsRaw.constBegin(); currentArg != argsRaw.constEnd(); ++currentArg) {
        if(currentArg->startsWith("--")) {
            // long
            QString name;
            if(currentArg->contains("=")) {
                // option
                QStringList tmp = currentArg->mid(2).split("=");
                name = tmp.at(0);
                QString value;
                // this is needed to allow --option=""
                if(tmp.at(1).isNull()) value = QString("");
                else value = tmp.at(1);
                if(!addLongArg(CliParserArg::CliArgOption, name, value)) return false;
            }
            else {
                // switch
                name = currentArg->mid(2);
                if(!addLongArg(CliParserArg::CliArgSwitch, name)) return false;
            }
        }
        else if(currentArg->startsWith("-")) {
            // short
            char name;
            QStringList::const_iterator nextArg = currentArg+1;
            // if next arg is a short/long option/switch the current arg is one too
            if(nextArg == argsRaw.constEnd() || nextArg->startsWith("-")) {
                // switch
                for (int i = 0; i < currentArg->mid(1).toAscii().size(); i++) {
                    name = currentArg->mid(1).toAscii().at(i);
                    if(!addShortArg(CliParserArg::CliArgSwitch, name)) return false;
                }
            }
            // if next arg is is no option/switch it's an argument to a shortoption
            else {
                // option
                // short options are not freely mixable with other shortargs
                if(currentArg->mid(1).toAscii().size() > 1) {
                    qWarning() << "Warning: Shortoptions may not be combined with other shortoptions or switches";
                    return false;
                }
                QString value;
                bool skipNext = false;
                if(nextArg != argsRaw.constEnd()) {
                    value = nextArg->toLocal8Bit();
                    skipNext = true;
                }
                else value = currentArg->toLocal8Bit();
                name = currentArg->mid(1).toAscii().at(0);
                // we took one argument as argument to an option so skip it next time
                if(skipNext) currentArg++;
                if(!addShortArg(CliParserArg::CliArgOption, name, value)) return false;
            }
        }
        else {
            // we don't support plain arguments without -/--
            if(currentArg->toLatin1() != argsRaw.at(0)) return false;
        }
    }
    return true;
}