From 2eddebe1c2c41f8a9be56862f355251d5d34f18f Mon Sep 17 00:00:00 2001 From: marcin Date: Wed, 16 Jul 2014 14:40:09 +0200 Subject: [PATCH] https://trello.com/c/LXEnXYLF/42-fix-monero-logo https://trello.com/c/VpuuPT5L/27-per-transaction-descriptions-should-be-removed-from-dashboard-history-as-discussed https://trello.com/c/wy3nFH3g/30-please-add-ctrl-tab-ctrl-shift-tab-shortcut-keys-to-rotate-between-tabs https://trello.com/c/6Y6kOXsU/44-add-monero-title-to-the-main-window --- LeftPanel.qml | 8 ++--- bitmonero.pro | 6 ++-- bitmonero.pro.user | 2 +- clipboardAdapter.cpp | 12 +++++++ clipboardAdapter.h | 19 ++++++++++ components/DashboardTable.qml | 34 +++++++++++++++--- components/TableDropdown.qml | 14 ++------ components/TitleBar.qml | 9 +++++ filter.cpp | 8 +++++ .../{dropdownOption1.png => dropdownAdd.png} | Bin images/dropdownCopy.png | Bin 0 -> 306 bytes images/moneroLogo.png | Bin 2576 -> 2237 bytes main.cpp | 5 ++- main.qml | 5 +-- qml.qrc | 3 +- 15 files changed, 98 insertions(+), 27 deletions(-) create mode 100644 clipboardAdapter.cpp create mode 100644 clipboardAdapter.h rename images/{dropdownOption1.png => dropdownAdd.png} (100%) create mode 100644 images/dropdownCopy.png diff --git a/LeftPanel.qml b/LeftPanel.qml index 10037ffc..d97d9bfc 100644 --- a/LeftPanel.qml +++ b/LeftPanel.qml @@ -34,15 +34,15 @@ Rectangle { Image { id: logo - anchors.horizontalCenter: parent.horizontalCenter + anchors.left: parent.left + anchors.leftMargin: 50 source: "images/moneroLogo.png" } Image { - anchors.right: logo.left + anchors.left: parent.left anchors.verticalCenter: logo.verticalCenter - anchors.verticalCenterOffset: 5 - anchors.rightMargin: 20 + anchors.leftMargin: 19 source: appWindow.rightPanelExpanded ? "images/expandRightPanel.png" : "images/collapseRightPanel.png" } diff --git a/bitmonero.pro b/bitmonero.pro index 3904b44c..5cfbbf37 100644 --- a/bitmonero.pro +++ b/bitmonero.pro @@ -3,7 +3,8 @@ TEMPLATE = app QT += qml quick widgets SOURCES += main.cpp \ - filter.cpp + filter.cpp \ + clipboardAdapter.cpp RESOURCES += qml.qrc @@ -14,4 +15,5 @@ QML_IMPORT_PATH = include(deployment.pri) HEADERS += \ - filter.h + filter.h \ + clipboardAdapter.h diff --git a/bitmonero.pro.user b/bitmonero.pro.user index 6b4a1b04..82647009 100644 --- a/bitmonero.pro.user +++ b/bitmonero.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/clipboardAdapter.cpp b/clipboardAdapter.cpp new file mode 100644 index 00000000..1d5d2d71 --- /dev/null +++ b/clipboardAdapter.cpp @@ -0,0 +1,12 @@ +#include "clipboardAdapter.h" + +clipboardAdapter::clipboardAdapter(QObject *parent) : + QObject(parent) +{ + m_pClipboard = QGuiApplication::clipboard(); +} + +void clipboardAdapter::setText(const QString &text) { + m_pClipboard->setText(text, QClipboard::Clipboard); + m_pClipboard->setText(text, QClipboard::Selection); +} diff --git a/clipboardAdapter.h b/clipboardAdapter.h new file mode 100644 index 00000000..239b699a --- /dev/null +++ b/clipboardAdapter.h @@ -0,0 +1,19 @@ +#ifndef CLIPBOARDADAPTER_H +#define CLIPBOARDADAPTER_H + +#include +#include +#include + +class clipboardAdapter : public QObject +{ + Q_OBJECT +public: + explicit clipboardAdapter(QObject *parent = 0); + Q_INVOKABLE void setText(const QString &text); + +private: + QClipboard *m_pClipboard; +}; + +#endif // CLIPBOARDADAPTER_H diff --git a/components/DashboardTable.qml b/components/DashboardTable.qml index cbd1c8d0..1b0d0f69 100644 --- a/components/DashboardTable.qml +++ b/components/DashboardTable.qml @@ -1,5 +1,6 @@ import QtQuick 2.0 import "../components" +import moneroComponents 1.0 ListView { id: listView @@ -36,30 +37,39 @@ ListView { } Text { - id: paymentIdText - width: text.length ? 120 : 0 + id: descriptionText + width: text.length ? (descriptionArea.containsMouse ? parent.width - x - 12 : 120) : 0 anchors.verticalCenter: dot.verticalCenter font.family: "Arial" font.bold: true font.pixelSize: 19 color: "#444444" elide: Text.ElideRight - text: paymentId + text: description + + MouseArea { + id: descriptionArea + anchors.fill: parent + hoverEnabled: true + } } Item { //separator - width: paymentIdText.width ? 12 : 0 + width: descriptionText.width ? 12 : 0 height: 14 + visible: !descriptionArea.containsMouse } Text { + id: addressText anchors.verticalCenter: dot.verticalCenter width: parent.width - x - 12 elide: Text.ElideRight font.family: "Arial" font.pixelSize: 14 color: "#545454" - text: description.length > 0 ? description : address + text: address + visible: !descriptionArea.containsMouse } } @@ -173,12 +183,22 @@ ListView { color: "#DBDBDB" } + ListModel { + id: dropModel + ListElement { name: "Copy address to clipboard"; icon: "../images/dropdownCopy.png" } + ListElement { name: "Add to address book"; icon: "../images/dropdownAdd.png" } + ListElement { name: "Send to same destination"; icon: "../images/dropdownSend.png" } + ListElement { name: "Find similar transactions"; icon: "../images/dropdownSearch.png" } + } + + Clipboard { id: clipboard } TableDropdown { id: dropdown anchors.right: parent.right anchors.bottom: parent.bottom anchors.bottomMargin: 11 anchors.rightMargin: 5 + dataModel: dropModel onExpandedChanged: { if(listView.previousItem !== undefined && listView.previousItem !== delegate) listView.previousItem.collapseDropdown() @@ -189,6 +209,10 @@ ListView { } } onCollapsed: delegate.z = 0 + onOptionClicked: { + if(option === 0) + clipboard.setText(address) + } } } } diff --git a/components/TableDropdown.qml b/components/TableDropdown.qml index 17b4bc93..69728a73 100644 --- a/components/TableDropdown.qml +++ b/components/TableDropdown.qml @@ -3,8 +3,9 @@ import QtQuick 2.0 Item { id: dropdown property bool expanded: false + property alias dataModel: repeater.model signal collapsed() - signal optionClicked(int index) + signal optionClicked(int option) width: 72 height: 37 @@ -115,17 +116,8 @@ Item { anchors.right: parent.right anchors.top: parent.top - ListModel { - id: dataModel - ListElement { name: "Add to adress book"; icon: "../images/dropdownOption1.png" } - ListElement { name: "Send to same destination"; icon: "../images/dropdownSend.png" } - ListElement { name: "Find similar transactions"; icon: "../images/dropdownSearch.png" } - } - Repeater { id: repeater - model: dataModel - delegate: Rectangle { id: delegate anchors.left: parent.left @@ -163,7 +155,7 @@ Item { anchors.fill: parent propagateComposedEvents: true onEntered: { - var pos = appWindow.mapFromItem(delegate, 30, -20) + var pos = rootItem.mapFromItem(delegate, 30, -20) tipItem.text = name tipItem.x = pos.x if(tipItem.height > 30) diff --git a/components/TitleBar.qml b/components/TitleBar.qml index 5db8b7e1..c4f2dab5 100644 --- a/components/TitleBar.qml +++ b/components/TitleBar.qml @@ -8,6 +8,15 @@ Rectangle { y: -height property int mouseX: 0 property int mouseY: 0 + + Text { + anchors.centerIn: parent + font.family: "Arial" + font.pixelSize: 15 + font.letterSpacing: -1 + color: "#FFFFFF" + text: qsTr("Monero") + } Behavior on y { NumberAnimation { duration: 100; easing.type: Easing.InQuad } diff --git a/filter.cpp b/filter.cpp index df0b9376..e9b236d6 100644 --- a/filter.cpp +++ b/filter.cpp @@ -25,6 +25,10 @@ bool filter::eventFilter(QObject *obj, QEvent *ev) { QKeySequence ks(ke->modifiers() + ke->key()); sks = ks.toString(); } +#ifndef Q_OS_MAC + if(sks.contains("Alt+Tab") || sks.contains("Alt+Shift+Backtab")) + break; +#endif emit sequencePressed(QVariant::fromValue(obj), sks); } break; case QEvent::KeyRelease: { @@ -39,6 +43,10 @@ bool filter::eventFilter(QObject *obj, QEvent *ev) { QKeySequence ks(ke->modifiers() + ke->key()); sks = ks.toString(); } +#ifndef Q_OS_MAC + if(sks.contains("Alt+Tab") || sks.contains("Alt+Shift+Backtab")) + break; +#endif emit sequenceReleased(QVariant::fromValue(obj), sks); } break; case QEvent::MouseButtonPress: { diff --git a/images/dropdownOption1.png b/images/dropdownAdd.png similarity index 100% rename from images/dropdownOption1.png rename to images/dropdownAdd.png diff --git a/images/dropdownCopy.png b/images/dropdownCopy.png new file mode 100644 index 0000000000000000000000000000000000000000..24d0d5902deaf05bfbdfb34838462c8c567c3049 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM3!3HF=W8NDADVAa<&kznEsNqQI0P;BtJR*x3 z7`TN%nDNrxx<5ccu@cva66d1S#FEVXJcW?V+*AewbA3ZIeM6JG>`}LXDr7(^g7ec# z$`gxH85~pclTsDjGK*5n^NX^J6`X_3UhLV_160@L>Eak-(YtlhMcxJl9vA+{`}xvh z9m5KRBOCRevHei|(U==5r2lYrWqJ64rBf6#)ow8=81-M;Bfc`Y*|2$Wrq|7zPgOQL z*}m5a_ujth=ugkHo!9%~ug>`)#`Cj=$vNelf9KZXjx%*?w-|KNlFInSSWaxO3cakr st21?>W5d6bp$lGoFBdtuwK1AMsnqBbll6^UpsN@>UHx3vIVCg!05unE2><{9 literal 0 HcmV?d00001 diff --git a/images/moneroLogo.png b/images/moneroLogo.png index 8155c5fae9f9efb2a86a7e7b0ee3c19e8d0ccdee..8cbb60c2275ce5ed651e0e536703adba41f372d7 100644 GIT binary patch delta 2162 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 S&Rn?w0000 #include - +#include +#include "clipboardAdapter.h" #include "filter.h" int main(int argc, char *argv[]) @@ -9,6 +10,8 @@ int main(int argc, char *argv[]) filter *eventFilter = new filter; app.installEventFilter(eventFilter); + qmlRegisterType("moneroComponents", 1, 0, "Clipboard"); + QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); QObject *rootObject = engine.rootObjects().first(); diff --git a/main.qml b/main.qml index e485dde7..8bb2c1f2 100644 --- a/main.qml +++ b/main.qml @@ -11,6 +11,7 @@ ApplicationWindow { property bool whatIsEnable: false property bool ctrlPressed: false property bool rightPanelExpanded: true + property bool osx: false function altKeyReleased() { ctrlPressed = false; } function showPageRequest(page) { @@ -31,14 +32,14 @@ ApplicationWindow { else if(seq === "Ctrl+B") middlePanel.state = "AddressBook" else if(seq === "Ctrl+M") middlePanel.state = "Mining" else if(seq === "Ctrl+S") middlePanel.state = "Settings" - else if(seq === "Ctrl+Tab") { + else if(seq === "Ctrl+Tab" || seq === "Alt+Tab") { if(middlePanel.state === "Dashboard") middlePanel.state = "Transfer" else if(middlePanel.state === "Transfer") middlePanel.state = "History" else if(middlePanel.state === "History") middlePanel.state = "AddressBook" else if(middlePanel.state === "AddressBook") middlePanel.state = "Mining" else if(middlePanel.state === "Mining") middlePanel.state = "Settings" else if(middlePanel.state === "Settings") middlePanel.state = "Dashboard" - } else if(seq === "Ctrl+Shift+Backtab") { + } else if(seq === "Ctrl+Shift+Backtab" || seq === "Alt+Shift+Backtab") { if(middlePanel.state === "Dashboard") middlePanel.state = "Settings" else if(middlePanel.state === "Settings") middlePanel.state = "Mining" else if(middlePanel.state === "Mining") middlePanel.state = "AddressBook" diff --git a/qml.qrc b/qml.qrc index a0a5e571..eae1e0f7 100644 --- a/qml.qrc +++ b/qml.qrc @@ -41,7 +41,7 @@ components/DashboardTable.qml components/TableDropdown.qml images/tableOptions.png - images/dropdownOption1.png + images/dropdownAdd.png images/dropdownSearch.png images/dropdownSend.png components/TipItem.qml @@ -69,5 +69,6 @@ components/TitleBar.qml images/collapseRightPanel.png images/expandRightPanel.png + images/dropdownCopy.png