added --set-opts

This commit is contained in:
arcan1s 2014-07-15 06:11:22 +04:00
parent 39b8ff834f
commit 51659c7a42
10 changed files with 100 additions and 20 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required (VERSION 3.0)
cmake_minimum_required (VERSION 2.8)
cmake_policy (SET CMP0003 OLD)
cmake_policy (SET CMP0002 OLD)
@ -14,6 +14,7 @@ set (PROJECT_VERSION_MINOR 2)
set (PROJECT_VERSION_PATCH 0)
set (PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
string (TIMESTAMP CURRENT_DATE UTC)
string (REGEX REPLACE "T|Z" " " CURRENT_DATE ${CURRENT_DATE})
string (TIMESTAMP CURRENT_YEAR "%Y")
message (STATUS "Project: ${PROJECT_NAME}")
@ -22,10 +23,14 @@ message (STATUS "Build date: ${CURRENT_DATE}")
# install options
option (USE_QT5 "Use Qt5 instead of Qt4" ON)
option (BUILD_DOCS "Build documentation" OFF)
option (BUILD_GUI "Build GUI" ON)
option (BUILD_LIBRARY "Build library" ON)
option (BUILD_DATAENGINE "Build data engine" ON)
option (BUILD_PLASMOID "Build plasmoid" ON)
if (BUILD_DOCS)
set (BUILD_LIBRARY ON)
endif ()
if (BUILD_GUI)
set (BUILD_LIBRARY ON)
endif ()

View File

@ -6,7 +6,8 @@ netctl-gui is a graphical interface for netctl
[ --about ] [ --netctl-auto ] [ --settings ]
[ -e ESSID | --essid ESSID ] [ -o PROFILE | --open PROFILE ]
[ -s PROFILE | --select PROFILE ]
[ -d | --debug ] [ --default ] [ -t NUM | --tab NUM ]
[ -d | --debug ] [ --default ] [ --set-opts OPTIONS ]
[ -t NUM | --tab NUM ]
[ -v | --version ] [ -i | --info ] [ -h | --help]
.SH DESCRIPTION
Graphical user interface for netctl written on C++ using Qt toolkit. Provides shared library for interaction with netctl and Plasmoid and DataEngine for KDE.
@ -25,10 +26,10 @@ show settings window
select ESSID ESSID. This option will set tab to 3 automatically
.TP
-o, --open PROFILE
open profile PROFILE. This option will set tab to 2 automatically.
open profile PROFILE. This option will set tab to 2 automatically
.TP
-s, --select PROFILE
select profile PROFILE. This option will set tab to 1 automatically.
select profile PROFILE. This option will set tab to 1 automatically
.TP
-d, --debug
print debug information
@ -36,6 +37,9 @@ print debug information
--default
start with default settings
.TP
--set-opts OPTIONS
set options OPTIONS for this run, comma separated. Example "LANGUAGE=en,NETCTL_PATH=/usr/bin/netctl"
.TP
-t, --tab NUM
open a tab with number NUM
.TP

View File

@ -22,7 +22,7 @@
#include <QLocale>
Language::Language(const QString configPath)
Language::Language()
{
}
@ -41,8 +41,13 @@ QString Language::checkLanguage(const QString language, const QString defaultLan
}
QString Language::defineLanguage(const QString configPath)
QString Language::defineLanguage(const QString configPath, const QString options)
{
QMap<QString, QString> optionsDict = parseOptions(options);
if (optionsDict.contains(QString("LANGUAGE")))
if (getAvailableLanguages().contains(optionsDict[QString("LANGUAGE")]))
return optionsDict[QString("LANGUAGE")];
QString language;
language = defineLanguageFromFile(configPath);
if (language.isEmpty())
@ -92,3 +97,17 @@ QStringList Language::getAvailableLanguages()
return languages;
}
QMap<QString, QString> Language::parseOptions(const QString options)
{
QMap<QString, QString> optionsDict;
for (int i=0; i<options.split(QChar(',')).count(); i++) {
if (options.split(QChar(','))[i].split(QChar('=')).count() < 2)
continue;
optionsDict[options.split(QChar(','))[i].split(QChar('='))[0]] =
options.split(QChar(','))[i].split(QChar('='))[1];
}
return optionsDict;
}

View File

@ -26,13 +26,17 @@ class Language : public QObject
Q_OBJECT
public:
explicit Language(const QString configPath);
explicit Language();
static QString checkLanguage(const QString language,
const QString defaultLanguage = QString("en"));
static QString defineLanguage(const QString configPath);
static QString defineLanguage(const QString configPath,
const QString options = QString("OPTIONS"));
static QString defineLanguageFromFile(const QString configPath);
static QString defineLanguageFromLocale();
static QStringList getAvailableLanguages();
private:
static QMap<QString, QString> parseOptions(const QString options);
};

View File

@ -64,6 +64,7 @@ int main(int argc, char *argv[])
// additional functions
bool debug = false;
bool defaultSettings = false;
QString options = QString("OPTIONS");
int tabNumber = 1;
// messages
bool showVersion = false;
@ -109,6 +110,11 @@ int main(int argc, char *argv[])
else if (QString(argv[i]) == QString("--default")) {
defaultSettings = true;
}
// options
else if (QString(argv[i]) == QString("--set-opts")) {
options = QString(argv[i+1]);
i++;
}
// tab number
else if ((QString(argv[i]) == QString("-t")) || (QString(argv[i]) == QString("--tab"))) {
if (atoi(argv[i+1]) > 3)
@ -151,7 +157,8 @@ int main(int argc, char *argv[])
helpMessage += QString("netctl-gui [ --about ] [ --netctl-auto ] [ --settings ]\n");
helpMessage += QString(" [ -e ESSID | --essid ESSID ] [ -o PROFILE | --open PROFILE ]\n");
helpMessage += QString(" [ -s PROFILE | --select PROFILE ]\n");
helpMessage += QString(" [ -d | --debug ] [ --default ] [ -t NUM | --tab NUM ]\n");
helpMessage += QString(" [ -d | --debug ] [ --default ] [ --set-opts OPTIONS ]\n");
helpMessage += QString(" [ -t NUM | --tab NUM ]\n");
helpMessage += QString(" [ -v | --version ] [ -i | --info ] [ -h | --help]\n\n");
helpMessage += QString("%1\n").arg(QApplication::translate("MainWindow", "Parametrs:"));
// windows
@ -184,6 +191,10 @@ int main(int argc, char *argv[])
helpMessage += QString("%1 --default - %2\n")
.arg(isParametrEnable(defaultSettings))
.arg(QApplication::translate("MainWindow", "start with default settings"));
helpMessage += QString(" --set-opts %1\n")
.arg(options, -10);
helpMessage += QString(" - %1\n")
.arg(QApplication::translate("MainWindow", "set options for this run, comma separated"));
helpMessage += QString(" -t %1 --tab %1 - %2\n")
.arg(QString::number(tabNumber), -3)
.arg(QApplication::translate("MainWindow", "open a tab with number %1").arg(QString::number(tabNumber)));
@ -202,6 +213,7 @@ int main(int argc, char *argv[])
infoMessage += QString("\n%1\n").arg(QApplication::translate("MainWindow", "cmake flags:"));
infoMessage += QString("\t-DCMAKE_BUILD_TYPE=%1 \\\n").arg(QString(CMAKE_BUILD_TYPE));
infoMessage += QString("\t-DCMAKE_INSTALL_PREFIX=%1 \\\n").arg(QString(CMAKE_INSTALL_PREFIX));
infoMessage += QString("\t-DBUILD_DOCS=%1 \\\n").arg(QString(PROJECT_BUILD_DOCS));
infoMessage += QString("\t-DBUILD_LIBRARY=%1 \\\n").arg(QString(PROJECT_BUILD_LIBRARY));
infoMessage += QString("\t-DBUILD_GUI=%1 \\\n").arg(QString(PROJECT_BUILD_GUI));
infoMessage += QString("\t-DUSE_QT5=%1 \\\n").arg(QString(PROJECT_USE_QT5));
@ -214,6 +226,12 @@ int main(int argc, char *argv[])
versionMessage += QApplication::translate("MainWindow", "Author : %1\n").arg(QString(AUTHOR));
versionMessage += QApplication::translate("MainWindow", "License : %1\n").arg(QString(LICENSE));
// reread translations
a.removeTranslator(&translator);
language = Language::defineLanguage(configPath, options);
translator.load(QString(":/translations/") + language);
a.installTranslator(&translator);
// running
if (error) {
cout << errorMessage.toUtf8().data() << endl;
@ -236,7 +254,7 @@ int main(int argc, char *argv[])
MainWindow w(0,
showAbout, showNetctlAuto, showSettings,
selectEssid, openProfile, selectProfile,
debug, defaultSettings, tabNumber);
debug, defaultSettings, options, tabNumber);
w.show();
return a.exec();
}

View File

@ -54,6 +54,7 @@ MainWindow::MainWindow(QWidget *parent,
const QString selectProfile,
const bool debugCmd,
const bool defaultSettings,
const QString options,
const int tabNum)
: QMainWindow(parent),
ui(new Ui::MainWindow),
@ -67,6 +68,7 @@ MainWindow::MainWindow(QWidget *parent,
if (debug) qDebug() << "[MainWindow]" << "[MainWindow]" << ":" << "selectProfile" << selectProfile;
if (debug) qDebug() << "[MainWindow]" << "[MainWindow]" << ":" << "debug" << debug;
if (debug) qDebug() << "[MainWindow]" << "[MainWindow]" << ":" << "defaultSettings" << defaultSettings;
if (debug) qDebug() << "[MainWindow]" << "[MainWindow]" << ":" << "options" << options;
if (debug) qDebug() << "[MainWindow]" << "[MainWindow]" << ":" << "tabNum" << tabNum;
// reading configuration
@ -76,6 +78,9 @@ MainWindow::MainWindow(QWidget *parent,
if (defaultSettings)
settingsWin->setDefault();
configuration = settingsWin->getSettings();
QMap<QString, QString> optionsDict = parseOptions(options);
for (int i=0; i<optionsDict.keys().count(); i++)
configuration[optionsDict.keys()[i]] = optionsDict[optionsDict.keys()[i]];
// backend
netctlCommand = new Netctl(debug, configuration);
@ -302,6 +307,26 @@ void MainWindow::setIconsToButtons()
}
QMap<QString, QString> MainWindow::parseOptions(const QString options)
{
if (debug) qDebug() << "[MainWindow]" << "[parseOptions]";
QMap<QString, QString> settings;
for (int i=0; i<options.split(QChar(',')).count(); i++) {
if (options.split(QChar(','))[i].split(QChar('=')).count() < 2)
continue;
settings[options.split(QChar(','))[i].split(QChar('='))[0]] =
options.split(QChar(','))[i].split(QChar('='))[1];
}
for (int i=0; i<settings.keys().count(); i++)
if (debug) qDebug() << "[MainWindow]" << "[parseOptions]" << ":" <<
settings.keys()[i] + QString("=") + settings[settings.keys()[i]];
return settings;
}
// window slots
void MainWindow::setMenuActionsShown(const bool state)
{

View File

@ -61,6 +61,7 @@ public:
const QString selectProfile = QString("PROFILE"),
const bool debugCmd = false,
const bool defaultSettings = false,
const QString options = QString("OPTIONS"),
const int tabNum = 1);
~MainWindow();
@ -133,6 +134,7 @@ private:
bool hiddenNetwork;
// configuration
QMap<QString, QString> configuration;
QMap<QString, QString> parseOptions(const QString options);
};

View File

@ -78,6 +78,7 @@ void NetctlAutoWindow::showWindow()
if (debug) qDebug() << "[NetctlAutoWindow]" << "[showWindow]";
netctlAutoUpdateTable();
show();
}

View File

@ -270,6 +270,7 @@ void SettingsWindow::showWindow()
setSettings(getSettings());
ui->label_info->hide();
show();
}

View File

@ -19,6 +19,7 @@
#define CMAKE_BUILD_TYPE "@CMAKE_BUILD_TYPE@"
#define CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
#define PROJECT_BUILD_DATAENGINE "@BUILD_DATAENGINE@"
#define PROJECT_BUILD_DOCS "@BUILD_DOCS@"
#define PROJECT_BUILD_GUI "@BUILD_GUI@"
#define PROJECT_BUILD_LIBRARY "@BUILD_LIBRARY@"
#define PROJECT_BUILD_PLASMOID "@BUILD_PLASMOID@"