Add style command && applied new style format to existing code && setup tests plugins

This commit is contained in:
Quentin Rouland 2019-03-21 11:22:12 +01:00
parent aa4018c680
commit 7dc320f8ce
30 changed files with 355 additions and 267 deletions

13
.astylerc Normal file
View File

@ -0,0 +1,13 @@
suffix=none
recursive
--style=kr
--indent=spaces=4
--align-pointer=name
--align-reference=name
--convert-tabs
--attach-namespaces
--max-code-length=100
--max-instatement-indent=120
--pad-header
--pad-oper
--lineend=linux

View File

@ -37,7 +37,6 @@ set(DESKTOP_FILE_NAME ${PROJECT_NAME}.desktop)
add_executable(${PROJECT_NAME} main.cpp) add_executable(${PROJECT_NAME} main.cpp)
qt5_use_modules(${PROJECT_NAME} Gui Qml Quick) qt5_use_modules(${PROJECT_NAME} Gui Qml Quick)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})
@ -97,4 +96,19 @@ file(GLOB_RECURSE PROJECT_SRC_FILES
*.desktop.in *.desktop.in
) )
add_custom_target(${PROJECT_NAME}_FILES ALL SOURCES ${PROJECT_SRC_FILES}) add_custom_target(${PROJECT_NAME}_FILES ALL SOURCES ${PROJECT_SRC_FILES})
# Tests
enable_testing(true)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories(tests/plugins)
find_package(Qt5Test)
add_executable(TestGpg tests/plugins/TestGpg.cpp)
add_executable(TestPass tests/plugins/TestPass.cpp)
target_link_libraries(TestGpg Qt5::Test)
target_link_libraries(TestPass Qt5::Test)
add_test(TestGpg TestGpg)
add_test(TestPass TestPass)

View File

@ -11,15 +11,15 @@ A password management app for Ubuntu Touch aiming to be compatible with [ZX2C4
For more options/details see the [clickable documentation](http://clickable.bhdouglass.com/en/latest/index.html) For more options/details see the [clickable documentation](http://clickable.bhdouglass.com/en/latest/index.html)
## Custom clickable command ## Custom clickable command
* ```clickable c ``` : clean third directory and run ```clickable clean``` * ```clickable test ``` : run test for all plugins
* ```clickable cr ``` : clean third directory and run ```clickable``` * ```clickable test_gpg ``` : run test for gpg plugin
* ```clickable r``` : run ```clickable --dirty``` * ```clickable test_pass``` : run test for pass plugin
* ```clickable crd ``` : clean third directory and run ```clickable desktop``` * ```clickable style ``` : reformat the code (Required : [astyle](astyle.sourceforge.ne) & [https://github.com/jesperhh/qmlfmt](https://github.com/jesperhh/qmlfmt))
* ```clickable rd ``` : run ```clickable desktop --dirty ```
# Contributing # Contributing
Any contributions are welcome using the github issue & pull request system. Any contributions are welcome using the github issue & pull request system.
Please try to respect the code style format by runnning ```clickable style``` before committing.
# Features # Features

View File

@ -1,5 +1,4 @@
{ {
template": "unconfined",
"policy_groups": [], "policy_groups": [],
"policy_version": 16.04 "policy_version": 16.04
} }

View File

@ -2,11 +2,11 @@
"template": "cmake", "template": "cmake",
"kill": "UTPass", "kill": "UTPass",
"scripts": { "scripts": {
"c": "third/clean.sh && clickable clean", "clean": "third/clean.sh && rm -rf build",
"cr": "third/clean.sh && clickable", "style": "astyle --options=.astylerc \"plugins/*.cpp,*.h\" && qmlfmt -w qml",
"r": "clickable --dirty", "test": "clickable run \"cd build && make test\"",
"crd": "third/clean.sh && clickable desktop", "test_gpg": "clickable run \"cd build && ./TestGpg\"",
"rd": "clickable desktop --dirty" "test_pass": "clickable run \"cd build && ./TestPass\""
}, },
"dependencies_build": [ "dependencies_build": [
"texinfo", "texinfo",

View File

@ -17,148 +17,157 @@
using namespace GpgME; using namespace GpgME;
using namespace QGpgME; using namespace QGpgME;
Gpg::Gpg() { Gpg::Gpg()
auto error = initializeLibrary(OpenPGP); {
if (error) { auto error = initializeLibrary(OpenPGP);
qDebug() << "Code Error : " << error.code(); if (error) {
qDebug() << "Error str : " << error.asString(); qDebug() << "Code Error : " << error.code();
qFatal("GpgME init fail"); qDebug() << "Error str : " << error.asString();
} qFatal("GpgME init fail");
}
QString gnuhome = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).append("/gpghome"); QString gnuhome = QStandardPaths::writableLocation(
QDir dir(gnuhome); QStandardPaths::AppDataLocation).append("/gpghome");
if (!dir.exists()) QDir dir(gnuhome);
dir.mkpath("."); if (!dir.exists())
qputenv("GNUPGHOME", gnuhome.toStdString().c_str()); dir.mkpath(".");
qDebug() << "GNUPGHOME is :" << qgetenv("GNUPGHOME"); qputenv("GNUPGHOME", gnuhome.toStdString().c_str());
qDebug() << "GNUPGHOME is :" << qgetenv("GNUPGHOME");
error = checkEngine(OpenPGP); error = checkEngine(OpenPGP);
if (error) { if (error) {
qDebug() << "Code Error : " << error.code(); qDebug() << "Code Error : " << error.code();
qDebug() << "Error str : " << error.asString(); qDebug() << "Error str : " << error.asString();
qFatal("Engine check Fail"); qFatal("Engine check Fail");
}
} qDebug() << "GpgME Engine Version :" << engineInfo(OpenPGP).version();
qDebug() << "GpgME Engine Version :" << engineInfo(OpenPGP).version();
} }
void Gpg::list_dir() { void Gpg::list_dir()
qDebug() << "hello world!"; {
qDebug() << "hello world!";
} }
QString Gpg::decrypt(const QByteArray cipherText) { QString Gpg::decrypt(const QByteArray cipherText)
/*auto decJob = openpgp()->decryptJob(); {
auto ctx = DecryptJob::context(decJob);*/ /*auto decJob = openpgp()->decryptJob();
auto ctx = DecryptJob::context(decJob);*/
/* TODO /* TODO
* TestPassphraseProvider provider; * TestPassphraseProvider provider;
ctx->setPassphraseProvider(&provider); ctx->setPassphraseProvider(&provider);
ctx->setPinentryMode(Context::PinentryLoopback);*/ ctx->setPinentryMode(Context::PinentryLoopback);*/
/*QByteArray plainText; /*QByteArray plainText;
decJob->exec(cipherText, plainText); decJob->exec(cipherText, plainText);
return QString::fromUtf8(plainText);*/ return QString::fromUtf8(plainText);*/
} }
QString Gpg::decrypt_file(const QString path) { QString Gpg::decrypt_file(const QString path)
/*QFile file(path); {
if (!file.open(QIODevice::ReadOnly)) { /*QFile file(path);
qErrnoWarning("Can't open the File"); if (!file.open(QIODevice::ReadOnly)) {
return nullptr; qErrnoWarning("Can't open the File");
} return nullptr;
QByteArray plainText = file.readAll(); }
return this->decrypt(plainText);*/ QByteArray plainText = file.readAll();
return this->decrypt(plainText);*/
} }
QByteArray Gpg::encrypt(const QString str) { QByteArray Gpg::encrypt(const QString str)
/*auto listjob = openpgp()->keyListJob(false, false, false); {
std::vector<Key> keys; /*auto listjob = openpgp()->keyListJob(false, false, false);
auto keylistresult = listjob->exec(QStringList() << QStringLiteral("alfa@example.net"), false, keys); std::vector<Key> keys;
auto keylistresult = listjob->exec(QStringList() << QStringLiteral("alfa@example.net"), false, keys);
auto job = openpgp() auto job = openpgp()
->encryptJob( ->encryptJob(
true, //ASCII Armor true, //ASCII Armor
true //Textmode true //Textmode
); );
QByteArray cipherText; QByteArray cipherText;
auto result = job->exec(keys, QStringLiteral("Hello World").toUtf8(), Context::AlwaysTrust, cipherText); auto result = job->exec(keys, QStringLiteral("Hello World").toUtf8(), Context::AlwaysTrust, cipherText);
return cipherText;*/ return cipherText;*/
} }
bool Gpg::encrypt_file(const QString str, const QString path) { bool Gpg::encrypt_file(const QString str, const QString path)
/*QFile file(path); {
if (!file.open(QIODevice::WriteOnly)) { /*QFile file(path);
qErrnoWarning("Can't open the File"); if (!file.open(QIODevice::WriteOnly)) {
return false; qErrnoWarning("Can't open the File");
} return false;
file.write(Pass::encrypt(str)); }
return true;*/ file.write(Pass::encrypt(str));
return true;*/
} }
QString Gpg::get_key_id(QString uid) { QString Gpg::get_key_id(QString uid)
qDebug() << "Getting the key id " << uid; {
auto *job = openpgp()->keyListJob(false, false, false); qDebug() << "Getting the key id " << uid;
std::vector<Key> keys; auto *job = openpgp()->keyListJob(false, false, false);
auto result = job->exec(QStringList() << uid, false, keys); std::vector<Key> keys;
delete job; auto result = job->exec(QStringList() << uid, false, keys);
delete job;
if (keys.empty()) { if (keys.empty()) {
qDebug() << "No key found for" << uid; qDebug() << "No key found for" << uid;
return nullptr; return nullptr;
} }
const QString kId = QLatin1String(keys.front().keyID()); const QString kId = QLatin1String(keys.front().keyID());
qDebug() << "Id key for " << uid << "is : " << kId; qDebug() << "Id key for " << uid << "is : " << kId;
return kId; return kId;
} }
QStringList Gpg::get_all_keys_id() { QStringList Gpg::get_all_keys_id()
qDebug() << "Show all available key"; {
auto job = openpgp()->keyListJob(false, false, false); qDebug() << "Show all available key";
std::vector<Key> keys; auto job = openpgp()->keyListJob(false, false, false);
auto result = job->exec(QStringList(""), false, keys); std::vector<Key> keys;
delete job; auto result = job->exec(QStringList(""), false, keys);
delete job;
if (keys.empty()) { if (keys.empty()) {
qDebug() << "No key found"; qDebug() << "No key found";
return QStringList(); return QStringList();
} }
auto r = QStringList(); auto r = QStringList();
for (const auto &key: keys) { for (const auto &key : keys) {
r.append(QLatin1String(key.keyID())); r.append(QLatin1String(key.keyID()));
qDebug() << "Key" << QLatin1String(key.keyID()); qDebug() << "Key" << QLatin1String(key.keyID());
} }
return r; return r;
} }
bool Gpg::import_key(QString path) { bool Gpg::import_key(QString path)
qDebug() << "Importing the key file" << path; {
QFile file(path); qDebug() << "Importing the key file" << path;
if (!file.open(QIODevice::ReadOnly)) { QFile file(path);
qWarning() << "Can't open the File"; if (!file.open(QIODevice::ReadOnly)) {
return false; qWarning() << "Can't open the File";
} return false;
}
auto job = openpgp()->importJob(); auto job = openpgp()->importJob();
auto result = job->exec(file.readAll()); auto result = job->exec(file.readAll());
delete job; delete job;
file.close(); file.close();
if (result.error()) { if (result.error()) {
qWarning() << "Import go wrong"; qWarning() << "Import go wrong";
return false; return false;
} }
qDebug() << "Key imported" << result.numImported(); qDebug() << "Key imported" << result.numImported();
qDebug() << "Key not imported" << result.notImported(); qDebug() << "Key not imported" << result.notImported();
qDebug() << "Key unchanged" << result.numUnchanged(); qDebug() << "Key unchanged" << result.numUnchanged();
qDebug() << "Result null" << result.isNull(); qDebug() << "Result null" << result.isNull();
qDebug() << "newUserIDs" << result.newUserIDs(); qDebug() << "newUserIDs" << result.newUserIDs();
for (const auto &key: result.imports()) for (const auto &key : result.imports())
qDebug() << "Key" << key.fingerprint(); qDebug() << "Key" << key.fingerprint();
return true; return true;
} }

View File

@ -3,21 +3,22 @@
#include <QObject> #include <QObject>
class Gpg : public QObject { class Gpg : public QObject
Q_OBJECT {
Q_OBJECT
public: public:
Gpg(); Gpg();
~Gpg() = default; ~Gpg() = default;
Q_INVOKABLE void list_dir(); Q_INVOKABLE void list_dir();
Q_INVOKABLE QString get_key_id(QString uid); Q_INVOKABLE QString get_key_id(QString uid);
Q_INVOKABLE QStringList get_all_keys_id(); Q_INVOKABLE QStringList get_all_keys_id();
Q_INVOKABLE bool import_key(QString path); Q_INVOKABLE bool import_key(QString path);
Q_INVOKABLE QString decrypt(QByteArray plainText); Q_INVOKABLE QString decrypt(QByteArray plainText);
Q_INVOKABLE QString decrypt_file(QString path); Q_INVOKABLE QString decrypt_file(QString path);
Q_INVOKABLE QByteArray encrypt(QString str); Q_INVOKABLE QByteArray encrypt(QString str);
Q_INVOKABLE bool encrypt_file(QString str, QString path); Q_INVOKABLE bool encrypt_file(QString str, QString path);
}; };
#endif #endif

View File

@ -3,7 +3,8 @@
#include "plugin.h" #include "plugin.h"
#include "gpg.h" #include "gpg.h"
void FileSystemPlugin::registerTypes(const char *uri) { void FileSystemPlugin::registerTypes(const char *uri)
//@uri Pass {
qmlRegisterSingletonType<Gpg>(uri, 1, 0, "Gpg", [](QQmlEngine *, QJSEngine *) -> QObject * { return new Gpg; }); //@uri Pass
qmlRegisterSingletonType<Gpg>(uri, 1, 0, "Gpg", [](QQmlEngine *, QJSEngine *) -> QObject * { return new Gpg; });
} }

View File

@ -3,13 +3,14 @@
#include <QQmlExtensionPlugin> #include <QQmlExtensionPlugin>
class FileSystemPlugin : public QQmlExtensionPlugin { class FileSystemPlugin : public QQmlExtensionPlugin
Q_OBJECT {
Q_PLUGIN_METADATA(IID Q_OBJECT
"org.qt-project.Qt.QQmlExtensionInterface") Q_PLUGIN_METADATA(IID
"org.qt-project.Qt.QQmlExtensionInterface")
public: public:
void registerTypes(const char *uri); void registerTypes(const char *uri);
}; };
#endif #endif

View File

@ -3,12 +3,14 @@
#include "pass.h" #include "pass.h"
Pass::Pass() { Pass::Pass()
{
} }
void Pass::speak() { void Pass::speak()
qDebug() << "Starting app from main.cpp"; {
qDebug() << "Starting app from main.cpp";
} }

View File

@ -3,15 +3,16 @@
#include <QObject> #include <QObject>
class Pass : public QObject { class Pass : public QObject
Q_OBJECT {
QString gpgHome; Q_OBJECT
QString gpgHome;
public: public:
Pass(); Pass();
~Pass() override = default; ~Pass() override = default;
Q_INVOKABLE void speak(); Q_INVOKABLE void speak();
}; };
#endif #endif

View File

@ -3,7 +3,8 @@
#include "plugin.h" #include "plugin.h"
#include "pass.h" #include "pass.h"
void PassPlugin::registerTypes(const char *uri) { void PassPlugin::registerTypes(const char *uri)
//@uri Pass {
qmlRegisterSingletonType<Pass>(uri, 1, 0, "Pass", [](QQmlEngine *, QJSEngine *) -> QObject * { return new Pass; }); //@uri Pass
qmlRegisterSingletonType<Pass>(uri, 1, 0, "Pass", [](QQmlEngine *, QJSEngine *) -> QObject * { return new Pass; });
} }

View File

@ -3,13 +3,14 @@
#include <QQmlExtensionPlugin> #include <QQmlExtensionPlugin>
class PassPlugin : public QQmlExtensionPlugin { class PassPlugin : public QQmlExtensionPlugin
Q_OBJECT {
Q_PLUGIN_METADATA(IID Q_OBJECT
"org.qt-project.Qt.QQmlExtensionInterface") Q_PLUGIN_METADATA(IID
"org.qt-project.Qt.QQmlExtensionInterface")
public: public:
void registerTypes(const char *uri) override; void registerTypes(const char *uri) override;
}; };
#endif #endif

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: utpass.qrouland\n" "Project-Id-Version: utpass.qrouland\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-20 22:31+0000\n" "POT-Creation-Date: 2019-03-21 16:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,32 +17,32 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ../qml/pages/PasswordList.qml:17 #: ../qml/pages/Settings.qml:8 ../qml/pages/headers/MainHeader.qml:49
msgid "Back"
msgstr ""
#: ../qml/pages/PasswordList.qml:39
msgid "No password found in the current folder"
msgstr ""
#: ../qml/pages/Settings.qml:8 ../qml/pages/headers/MainHeader.qml:47
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: ../qml/pages/headers/MainHeader.qml:8 ../qml/pages/headers/StackHeader.qml:8 #: ../qml/pages/PasswordList.qml:16
#: ../qml/pages/Info.qml:43 UTPass.desktop.in.h:1 msgid "Back"
msgid "UTPass"
msgstr "" msgstr ""
#: ../qml/pages/headers/MainHeader.qml:23 #: ../qml/pages/PasswordList.qml:38
#: ../qml/pages/headers/MainHeader.qml:36 msgid "No password found in the current folder"
msgid "Search"
msgstr "" msgstr ""
#: ../qml/pages/headers/MainHeader.qml:54 ../qml/pages/Info.qml:9 #: ../qml/pages/Info.qml:9 ../qml/pages/headers/MainHeader.qml:56
msgid "Info" msgid "Info"
msgstr "" msgstr ""
#: ../qml/pages/Info.qml:43 ../qml/pages/headers/MainHeader.qml:8
#: ../qml/pages/headers/StackHeader.qml:8 UTPass.desktop.in.h:1
msgid "UTPass"
msgstr ""
#: ../qml/pages/Info.qml:53 #: ../qml/pages/Info.qml:53
msgid "Suggest improvement(s) or report a bug(s)" msgid "Suggest improvement(s) or report a bug(s)"
msgstr "" msgstr ""
#: ../qml/pages/headers/MainHeader.qml:23
#: ../qml/pages/headers/MainHeader.qml:38
msgid "Search"
msgstr ""

View File

@ -6,7 +6,7 @@ import Gpg 1.0
import "components" import "components"
MainView { MainView {
id: root id: "root"
objectName: "mainView" objectName: "mainView"
applicationName: "utpass.qrouland" applicationName: "utpass.qrouland"
@ -18,7 +18,12 @@ MainView {
id: pageStack id: pageStack
anchors.fill: parent anchors.fill: parent
Component.onCompleted: push(pageStack.push(Qt.resolvedUrl("pages/PasswordList.qml"))) Component.onCompleted: push(pageStack.push(
Qt.resolvedUrl(
"pages/PasswordList.qml")))
}
Component.onCompleted: {
Gpg.import_key("password-store/public.key")
Gpg.get_all_keys_id()
} }
Component.onCompleted: { Gpg.import_key("password-store/public.key"); Gpg.get_all_keys_id();}
} }

View File

@ -19,13 +19,18 @@ Component {
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
width: units.gu(4) width: units.gu(4)
height: units.gu(4) height: units.gu(4)
name: fileIsDir ? "go-next" : "lock" name: fileIsDir ? "go-next" : "lock"
color: Theme.raisin_black color: Theme.raisin_black
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { if (fileIsDir){ folderModel.folder = folderModel.folder + "/" + fileName ; backAction.visible = true;} } onClicked: {
if (fileIsDir) {
folderModel.folder = folderModel.folder + "/" + fileName
backAction.visible = true
}
}
} }
CustomBorder { CustomBorder {
@ -37,4 +42,4 @@ Component {
borderColor: UbuntuColors.warmGrey borderColor: UbuntuColors.warmGrey
} }
} }
} }

View File

@ -3,19 +3,19 @@ import Ubuntu.Components 1.3
import "../styles" import "../styles"
Item { Item {
property string url property string url
property string text property string text
property bool commonBorder : true property bool commonBorder: true
property int lBorderwidth : 0 property int lBorderwidth: 0
property int rBorderwidth : 0 property int rBorderwidth: 0
property int tBorderwidth : 0 property int tBorderwidth: 0
property int bBorderwidth : 0 property int bBorderwidth: 0
property int commonBorderWidth : 0 property int commonBorderWidth: 0
property string borderColor : UbuntuColors.warmGrey property string borderColor: UbuntuColors.warmGrey
width: parent.width width: parent.width
height: units.gu(6) height: units.gu(6)
Rectangle { Rectangle {
width: parent.width width: parent.width
@ -33,17 +33,19 @@ Item {
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
width: units.gu(4) width: units.gu(4)
height: units.gu(4) height: units.gu(4)
name: "go-next" name: "go-next"
color: Theme.raisin_black color: Theme.raisin_black
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { Qt.openUrlExternally(parent.parent.url); } onClicked: {
Qt.openUrlExternally(parent.parent.url)
}
} }
CustomBorder { CustomBorder {
id : cb id: cb
commonBorder: parent.parent.commonBorder commonBorder: parent.parent.commonBorder
lBorderwidth: parent.parent.lBorderwidth lBorderwidth: parent.parent.lBorderwidth
rBorderwidth: parent.parent.rBorderwidth rBorderwidth: parent.parent.rBorderwidth
@ -52,4 +54,4 @@ Item {
borderColor: parent.parent.borderColor borderColor: parent.parent.borderColor
} }
} }
} }

View File

@ -2,5 +2,4 @@ pragma Singleton
import QtQuick 2.4 import QtQuick 2.4
Item { Item {
} }

5
qml/models/Passtore.qml Normal file
View File

@ -0,0 +1,5 @@
pragma Singleton
import QtQuick 2.4
Item {
}

View File

@ -5,7 +5,7 @@ import "../components"
Page { Page {
header: StackHeader { header: StackHeader {
id : infoHeader id: infoHeader
title: i18n.tr('Info') title: i18n.tr('Info')
} }
@ -19,22 +19,22 @@ Page {
spacing: 2 spacing: 2
anchors.fill: parent anchors.fill: parent
Rectangle { Rectangle {
width: parent.width width: parent.width
height: units.gu(4) height: units.gu(4)
} }
Rectangle { Rectangle {
width: parent.width width: parent.width
height: units.gu(12) height: units.gu(12)
Image { Image {
source: "../../assets/logo.svg" source: "../../assets/logo.svg"
width: units.gu(12) width: units.gu(12)
height: units.gu(12) height: units.gu(12)
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }
} }
Rectangle { Rectangle {
width: parent.width width: parent.width
height: units.gu(4) height: units.gu(4)
} }
Text { Text {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
@ -55,5 +55,3 @@ Page {
} }
} }
} }

View File

@ -4,10 +4,9 @@ import Qt.labs.folderlistmodel 2.1
import "../components" import "../components"
import "headers" import "headers"
Page { Page {
header : MainHeader { header: MainHeader {
flickable : nav flickable: nav
leadingActionBar.height: units.gu(4) leadingActionBar.height: units.gu(4)
leadingActionBar.actions: [ leadingActionBar.actions: [
@ -15,11 +14,11 @@ Page {
id: backAction id: backAction
iconName: "back" iconName: "back"
text: i18n.tr("Back") text: i18n.tr("Back")
visible:false visible: false
onTriggered: { onTriggered: {
folderModel.folder = folderModel.parentFolder; folderModel.folder = folderModel.parentFolder
if(folderModel.rootFolder === folderModel.folder) { if (folderModel.rootFolder === folderModel.folder) {
backAction.visible = false; backAction.visible = false
} }
} }
} }
@ -42,7 +41,7 @@ Page {
} }
} }
ListView { ListView {
anchors.fill: parent anchors.fill: parent
spacing: 1 spacing: 1
model: FolderListModel { model: FolderListModel {
@ -56,4 +55,4 @@ Page {
} }
} }
} }
} }

View File

@ -4,7 +4,7 @@ import "headers"
Page { Page {
header: StackHeader { header: StackHeader {
id:settingsHeader id: settingsHeader
title: i18n.tr('Settings') title: i18n.tr('Settings')
} }
@ -23,8 +23,6 @@ Page {
height: units.gu(6) height: units.gu(6)
text: "Settings" text: "Settings"
} }
} }
} }
} }

View File

@ -8,23 +8,25 @@ PageHeader {
title: i18n.tr("UTPass") title: i18n.tr("UTPass")
contents: Item { contents: Item {
height : parent.height height: parent.height
width: parent.width width: parent.width
Label { Label {
id : labelTitle id: labelTitle
text: mainHeader.title text: mainHeader.title
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: true visible: true
} }
TextField { TextField {
id: searchBar id: searchBar
anchors.right : parent.right anchors.right: parent.right
anchors.left : parent.left anchors.left: parent.left
placeholderText: i18n.tr("Search") placeholderText: i18n.tr("Search")
height: units.gu(4) height: units.gu(4)
visible: false visible: false
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
onFocusChanged: {} onFocusChanged: {
}
} }
} }
@ -35,8 +37,8 @@ PageHeader {
iconName: "search" iconName: "search"
text: i18n.tr("Search") text: i18n.tr("Search")
onTriggered: { onTriggered: {
searchBar.visible = !searchBar.visible; searchBar.visible = !searchBar.visible
labelTitle.visible = !searchBar.visible; labelTitle.visible = !searchBar.visible
if (searchBar.visible === true) { if (searchBar.visible === true) {
searchBar.focus = true searchBar.focus = true
} }
@ -57,4 +59,4 @@ PageHeader {
} }
} }
] ]
} }

View File

@ -8,10 +8,10 @@ PageHeader {
title: i18n.tr("UTPass") title: i18n.tr("UTPass")
contents: Item { contents: Item {
height : parent.height height: parent.height
width: parent.width width: parent.width
Label { Label {
id : labelTitle id: labelTitle
text: stackHeader.title text: stackHeader.title
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }

View File

@ -2,33 +2,31 @@
// @ https://stackoverflow.com/questions/16534489/qml-control-border-width-and-color-on-any-one-side-of-rectangle-element#16562823 // @ https://stackoverflow.com/questions/16534489/qml-control-border-width-and-color-on-any-one-side-of-rectangle-element#16562823
import QtQuick 2.4 import QtQuick 2.4
Rectangle Rectangle {
{ property bool commonBorder: true
property bool commonBorder : true
property int lBorderwidth : 1 property int lBorderwidth: 1
property int rBorderwidth : 1 property int rBorderwidth: 1
property int tBorderwidth : 1 property int tBorderwidth: 1
property int bBorderwidth : 1 property int bBorderwidth: 1
property int commonBorderWidth : 1 property int commonBorderWidth: 1
z : -1 z: -1
property string borderColor : "white" property string borderColor: "white"
color: borderColor color: borderColor
anchors anchors {
{
left: parent.left left: parent.left
right: parent.right right: parent.right
top: parent.top top: parent.top
bottom: parent.bottom bottom: parent.bottom
topMargin : commonBorder ? -commonBorderWidth : -tBorderwidth topMargin: commonBorder ? -commonBorderWidth : -tBorderwidth
bottomMargin : commonBorder ? -commonBorderWidth : -bBorderwidth bottomMargin: commonBorder ? -commonBorderWidth : -bBorderwidth
leftMargin : commonBorder ? -commonBorderWidth : -lBorderwidth leftMargin: commonBorder ? -commonBorderWidth : -lBorderwidth
rightMargin : commonBorder ? -commonBorderWidth : -rBorderwidth rightMargin: commonBorder ? -commonBorderWidth : -rBorderwidth
} }
} }

View File

@ -2,9 +2,9 @@ pragma Singleton
import QtQuick 2.4 import QtQuick 2.4
Item { Item {
readonly property color claret : "#77172A" readonly property color claret: "#77172A"
readonly property color raisin_black : "#AE2B25" readonly property color raisin_black: "#AE2B25"
readonly property color steel_blue : "#462C98" readonly property color steel_blue: "#462C98"
readonly property color twilight_lavender : "#754888" readonly property color twilight_lavender: "#754888"
readonly property color eerie_black : "#191716" readonly property color eerie_black: "#191716"
} }

17
tests/plugins/TestGpg.cpp Normal file
View File

@ -0,0 +1,17 @@
#include <QtTest/QtTest>
class TestGpg: public QObject
{
Q_OBJECT
private slots:
void toUpper();
};
void TestGpg::toUpper()
{
QString str = "Hello";
QCOMPARE(str.toUpper(), QString("HELLO"));
}
QTEST_MAIN(TestGpg)
#include "TestGpg.moc"

View File

@ -0,0 +1,17 @@
#include <QtTest/QtTest>
class TestPass: public QObject
{
Q_OBJECT
private slots:
void toUpper();
};
void TestPass::toUpper()
{
QString str = "Hello";
QCOMPARE(str.toUpper(), QString("HELLO"));
}
QTEST_MAIN(TestPass)
#include "TestPass.moc"

View File

@ -56,7 +56,7 @@ ExternalProject_Add(
INSTALL_DIR ${EXTERNAL_LIBS} INSTALL_DIR ${EXTERNAL_LIBS}
DOWNLOAD_COMMAND "" DOWNLOAD_COMMAND ""
SOURCE_DIR ${GNUPG_PATH} SOURCE_DIR ${GNUPG_PATH}
CONFIGURE_COMMAND <SOURCE_DIR>/autogen.sh && <SOURCE_DIR>/configure --prefix=${EXTERNAL_LIBS} --enable-maintainer-mode --host ${ARCH_TRIPLET} --disable-doc CONFIGURE_COMMAND <SOURCE_DIR>/autogen.sh && <SOURCE_DIR>/configure --prefix=${EXTERNAL_LIBS} --enable-maintainer-mode --host ${ARCH_TRIPLET}
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
BUILD_COMMAND make BUILD_COMMAND make
INSTALL_COMMAND make install INSTALL_COMMAND make install