From 5734784b69993c7d5680863ca16e4d480e6f5b27 Mon Sep 17 00:00:00 2001 From: felixrojauro Date: Mon, 16 Nov 2015 01:07:27 +0100 Subject: [PATCH] Custom CSCFusionStyle (WIP) --- casinocoin-qt.pro | 6 +- src/qt/bitcoingui.cpp | 5 + src/qt/cscfusionstyle.cpp | 362 ++++++++++++++++++ src/qt/cscfusionstyle.h | 77 ++++ src/qt/forms/addressbookpage.ui | 58 +-- src/qt/forms/overviewpage.ui | 186 +++++---- src/qt/gui20_skin.cpp | 16 +- src/qt/gui20_skin.h | 52 ++- .../qtquick_controls/cpp/guibannerwidget.cpp | 8 +- .../qml/QmlGUIBannerControl.qml | 2 +- src/qt/res/icons/_0001_Remove-user-icon.png | Bin 0 -> 463 bytes src/qt/res/icons/_0001_sign-icon.png | Bin 0 -> 322 bytes src/qt/res/icons/_0002_logo bottom.png | Bin 0 -> 3799 bytes src/qt/res/icons/add.png | Bin 1279 -> 179 bytes src/qt/res/icons/address-book.png | Bin 2492 -> 207 bytes src/qt/res/icons/buy-casinocoins-btn.png | Bin 0 -> 521 bytes src/qt/res/icons/connect0_16.png | Bin 702 -> 338 bytes src/qt/res/icons/connect4_16.png | Bin 673 -> 312 bytes src/qt/res/icons/editcopy.png | Bin 879 -> 232 bytes src/qt/res/icons/editpaste.png | Bin 1458 -> 245 bytes src/qt/res/icons/export.png | Bin 1409 -> 286 bytes src/qt/res/icons/qrcode.png | Bin 237 -> 256 bytes src/qt/res/icons/remove.png | Bin 1224 -> 134 bytes src/qt/res/icons/transaction2.png | Bin 413 -> 343 bytes src/qt/walletview.cpp | 2 +- 25 files changed, 635 insertions(+), 139 deletions(-) create mode 100644 src/qt/cscfusionstyle.cpp create mode 100644 src/qt/cscfusionstyle.h create mode 100644 src/qt/res/icons/_0001_Remove-user-icon.png create mode 100644 src/qt/res/icons/_0001_sign-icon.png create mode 100644 src/qt/res/icons/_0002_logo bottom.png create mode 100644 src/qt/res/icons/buy-casinocoins-btn.png diff --git a/casinocoin-qt.pro b/casinocoin-qt.pro index bee8532..ad2ef96 100644 --- a/casinocoin-qt.pro +++ b/casinocoin-qt.pro @@ -278,7 +278,8 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/qtquick_controls/cpp/guimenutoolbarwidget.h \ src/qt/qtquick_controls/cpp/guimenutoolbarlistview.h \ src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.h \ - src/qt/gui20_skin.h + src/qt/gui20_skin.h \ + src/qt/cscfusionstyle.h SOURCES += src/qt/bitcoin.cpp \ src/qt/bitcoingui.cpp \ @@ -367,7 +368,8 @@ SOURCES += src/qt/bitcoin.cpp \ src/qt/qtquick_controls/cpp/guimenutoolbarwidget.cpp \ src/qt/qtquick_controls/cpp/guimenutoolbarlistview.cpp \ src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.cpp \ - src/qt/gui20_skin.cpp + src/qt/gui20_skin.cpp \ + src/qt/cscfusionstyle.cpp RESOURCES += src/qt/bitcoin.qrc diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 91beffa..45b599a 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -25,6 +25,8 @@ #include "ui_interface.h" #include "wallet.h" #include "init.h" +#include "cscfusionstyle.h" +#include "gui20_skin.h" #include "qtquick_controls/cpp/guimenutoolbarwidget.h" @@ -54,6 +56,7 @@ #include #include #include +#include #include @@ -163,6 +166,8 @@ BitcoinGUI::BitcoinGUI(QWidget *parent) : // Initially wallet actions should be disabled setWalletActionsEnabled(false); + + QApplication::setStyle(new CSCFusionStyle); } BitcoinGUI::~BitcoinGUI() diff --git a/src/qt/cscfusionstyle.cpp b/src/qt/cscfusionstyle.cpp new file mode 100644 index 0000000..9611719 --- /dev/null +++ b/src/qt/cscfusionstyle.cpp @@ -0,0 +1,362 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "cscfusionstyle.h" +#include "gui20_skin.h" + +CSCFusionStyle::CSCFusionStyle() : + QProxyStyle(QStyleFactory::create("fusion")) +{ +} + +void CSCFusionStyle::polish(QPalette &palette) +{ + GUI20Skin& skin = GUI20Skin::Instance(); + QLinearGradient buttonGradient; + buttonGradient.setColorAt( 0, skin.GetColorButtonTopGradient() ); + buttonGradient.setColorAt( 1, skin.GetColorButtonBottomGradient() ); + + QLinearGradient toolTipGradient; + toolTipGradient.setColorAt( 0, skin.GetColorToolbarMainGradientBegin() ); + toolTipGradient.setColorAt( 1, skin.GetColorToolbarMainGradientEnd() ); + + palette = QPalette(); + + + palette.setBrush( QPalette::Active, QPalette::Text, skin.GetColorTextActive() ); + palette.setBrush( QPalette::Active, QPalette::BrightText, skin.GetColorTextActiveAutocomplete() ); + palette.setBrush( QPalette::Active, QPalette::Base, skin.GetColorFrameBackground() ); + palette.setBrush( QPalette::Active, QPalette::AlternateBase, skin.GetColorListValueAlternative() ); + palette.setBrush( QPalette::Active, QPalette::Highlight, skin.GetColorListCurrent() ); + palette.setBrush( QPalette::Active, QPalette::HighlightedText, skin.GetColorTextActive() ); + palette.setBrush( QPalette::Active, QPalette::Button, skin.GetColorButtonBottomGradient() ); + palette.setBrush( QPalette::Active, QPalette::ButtonText, skin.GetColorTextActive() ); + palette.setBrush( QPalette::Active, QPalette::Mid, skin.GetColorButtonMid() ); + palette.setBrush( QPalette::Active, QPalette::Dark, skin.GetColorButtonDark() ); + palette.setBrush( QPalette::Active, QPalette::Light, skin.GetColorButtonLight() ); + palette.setBrush( QPalette::Active, QPalette::Window, skin.GetColorWindowBackground() ); + + palette.setBrush( QPalette::Inactive, QPalette::Text, skin.GetColorTextDisabled() ); + palette.setBrush( QPalette::Inactive, QPalette::BrightText, skin.GetColorTextDisabledAutocomplete() ); + palette.setBrush( QPalette::Inactive, QPalette::Base, skin.GetColorFrameBackground() ); + palette.setBrush( QPalette::Inactive, QPalette::AlternateBase, skin.GetColorListValueAlternative() ); + palette.setBrush( QPalette::Inactive, QPalette::Highlight, skin.GetColorListCurrent() ); + palette.setBrush( QPalette::Inactive, QPalette::HighlightedText, skin.GetColorTextDisabled() ); + palette.setBrush( QPalette::Inactive, QPalette::Button, skin.GetColorButtonBottomGradient() ); + palette.setBrush( QPalette::Inactive, QPalette::ButtonText, skin.GetColorTextDisabled() ); + palette.setBrush( QPalette::Inactive, QPalette::Mid, skin.GetColorButtonMid() ); + palette.setBrush( QPalette::Inactive, QPalette::Dark, skin.GetColorButtonDark() ); + palette.setBrush( QPalette::Inactive, QPalette::Light, skin.GetColorButtonLight() ); + palette.setBrush( QPalette::Inactive, QPalette::Window, skin.GetColorWindowBackground() ); + palette.setBrush( QPalette::Inactive, QPalette::ToolTipBase, toolTipGradient ); + palette.setBrush( QPalette::Inactive, QPalette::ToolTipText, skin.GetColorToolbarMainTextCurrent() ); + + palette.setBrush( QPalette::Disabled, QPalette::Text, skin.GetColorTextDisabled() ); + palette.setBrush( QPalette::Disabled, QPalette::BrightText, skin.GetColorTextDisabledAutocomplete() ); + palette.setBrush( QPalette::Disabled, QPalette::Base, skin.GetColorFrameBackground() ); + palette.setBrush( QPalette::Disabled, QPalette::AlternateBase, skin.GetColorListValueAlternative() ); + palette.setBrush( QPalette::Disabled, QPalette::Highlight, skin.GetColorListCurrent() ); + palette.setBrush( QPalette::Disabled, QPalette::HighlightedText, skin.GetColorTextDisabled() ); + palette.setBrush( QPalette::Disabled, QPalette::Button, skin.GetColorButtonBottomGradient() ); + palette.setBrush( QPalette::Disabled, QPalette::ButtonText, skin.GetColorTextDisabled() ); + palette.setBrush( QPalette::Disabled, QPalette::Mid, skin.GetColorButtonMid() ); + palette.setBrush( QPalette::Disabled, QPalette::Dark, skin.GetColorButtonDark() ); + palette.setBrush( QPalette::Disabled, QPalette::Light, skin.GetColorButtonLight() ); + palette.setBrush( QPalette::Disabled, QPalette::Window, skin.GetColorWindowBackground() ); + +} + +void CSCFusionStyle::polish(QWidget *widget) +{ + if ( qobject_cast(widget) + || qobject_cast(widget) + ) + { + widget->setAttribute(Qt::WA_Hover, true); + } +} + +void CSCFusionStyle::unpolish(QWidget *widget) +{ + if ( qobject_cast(widget) + || qobject_cast(widget) + ) + { + widget->setAttribute(Qt::WA_Hover, false); + } +} + +int CSCFusionStyle::pixelMetric(PixelMetric metric, + const QStyleOption *option, + const QWidget *widget) const +{ + switch (metric) + { + case PM_DefaultFrameWidth: + { + return 8; + } + case PM_ComboBoxFrameWidth: + { + return 8; + } + case PM_ScrollBarExtent: + { + return QProxyStyle::pixelMetric(metric, option, widget) + 4; + } + case PM_ToolTipLabelFrameWidth: + { + return 6; + } + default: + { + return QProxyStyle::pixelMetric(metric, option, widget); + } + } +} + +int CSCFusionStyle::styleHint(StyleHint hint, const QStyleOption *option, + const QWidget *widget, + QStyleHintReturn *returnData) const +{ + switch (hint) + { + case SH_DitherDisabledText: + { + return int(false); + } + case SH_EtchDisabledText: + { + return int(true); + } + default: + { + return QProxyStyle::styleHint(hint, option, widget, returnData); + } + } +} + +void CSCFusionStyle::drawPrimitive(PrimitiveElement element, + const QStyleOption *option, + QPainter *painter, + const QWidget *widget) const +{ + switch (element) + { + case PE_FrameDefaultButton: + { + return; + } + case PE_FrameFocusRect: + { + return; + } + case PE_FrameGroupBox: + case PE_FrameWindow: + case PE_Frame: + { + int x, y, width, height; + option->rect.getRect(&x, &y, &width, &height); + + QPainterPath roundRect = roundRectPath(option->rect, 5); + + QBrush brush = option->palette.base(); + painter->save(); + painter->setRenderHint(QPainter::Antialiasing, true); + painter->fillPath(roundRect, brush); + painter->restore(); + break; + } + case PE_PanelButtonCommand: + { + GUI20Skin& skin = GUI20Skin::Instance(); + int delta = (option->state & State_MouseOver) ? 64 : 0; + QColor semiTransparentWhite = skin.GetColorButtonLight(); + semiTransparentWhite.setAlpha(127 + delta); + QColor semiTransparentBlack = skin.GetColorButtonDark(); + semiTransparentBlack.setAlpha(127 - delta); + + int x, y, width, height; + option->rect.getRect(&x, &y, &width, &height); + + QPainterPath roundRect = roundRectPath(option->rect, 5 ); + + int radius = 5; + + QBrush brush; + + if (option->state & (State_Sunken | State_On)) + { + brush = option->palette.mid(); + } + else + { + brush = option->palette.button(); + } + + painter->save(); + painter->setRenderHint(QPainter::Antialiasing, true); + painter->fillPath(roundRect, brush); + + int penWidth; + if (radius < 10) + { + penWidth = 3; + } + else if (radius < 20) + { + penWidth = 5; + } + else + { + penWidth = 7; + } + + QPen topPen(semiTransparentWhite, penWidth); + QPen bottomPen(semiTransparentBlack, penWidth); + + if (option->state & (State_Sunken | State_On)) + { + qSwap(topPen, bottomPen); + } + + int x1 = x; + int x2 = x + radius; + int x3 = x + width - radius; + int x4 = x + width; + + if (option->direction == Qt::RightToLeft) + { + qSwap(x1, x4); + qSwap(x2, x3); + } + + QPolygon topHalf; + topHalf << QPoint(x1, y) + << QPoint(x4, y) + << QPoint(x3, y + radius) + << QPoint(x2, y + height - radius) + << QPoint(x1, y + height); + + painter->setClipPath(roundRect); + painter->setClipRegion(topHalf, Qt::IntersectClip); + painter->setPen(topPen); + painter->drawPath(roundRect); + + QPolygon bottomHalf = topHalf; + bottomHalf[0] = QPoint(x4, y + height); + + painter->setClipPath(roundRect); + painter->setClipRegion(bottomHalf, Qt::IntersectClip); + painter->setPen(bottomPen); + painter->drawPath(roundRect); + + painter->setPen(option->palette.foreground().color()); + painter->setClipping(false); + painter->drawPath(roundRect); + + painter->restore(); + break; + } + default: + { + QProxyStyle::drawPrimitive(element, option, painter, widget); + } + } +} + +void CSCFusionStyle::drawControl(ControlElement element, + const QStyleOption *option, + QPainter *painter, + const QWidget *widget) const +{ + switch (element) + { + case CE_PushButtonLabel: + { + QStyleOptionButton myButtonOption; + const QStyleOptionButton *buttonOption = + qstyleoption_cast(option); + if (buttonOption) + { + myButtonOption = *buttonOption; + if (myButtonOption.palette.currentColorGroup() != QPalette::Disabled) + { + if (myButtonOption.state & (State_Sunken | State_On)) + { + myButtonOption.palette.setBrush(QPalette::ButtonText, + myButtonOption.palette.brightText()); + } + } + } + QProxyStyle::drawControl(element, &myButtonOption, painter, widget); + break; + } + default: + { + QProxyStyle::drawControl(element, option, painter, widget); + break; + } + } +} + +QPainterPath CSCFusionStyle::roundRectPath(const QRect &rect, int radius) +{ + int diam = 2 * radius; + + int x1, y1, x2, y2; + rect.getCoords(&x1, &y1, &x2, &y2); + + QPainterPath path; + path.moveTo(x2, y1 + radius); + path.arcTo(QRect(x2 - diam, y1, diam, diam), 0.0, +90.0); + path.lineTo(x1 + radius, y1); + path.arcTo(QRect(x1, y1, diam, diam), 90.0, +90.0); + path.lineTo(x1, y2 - radius); + path.arcTo(QRect(x1, y2 - diam, diam, diam), 180.0, +90.0); + path.lineTo(x1 + radius, y2); + path.arcTo(QRect(x2 - diam, y2 - diam, diam, diam), 270.0, +90.0); + path.closeSubpath(); + return path; +} +//! [40] + diff --git a/src/qt/cscfusionstyle.h b/src/qt/cscfusionstyle.h new file mode 100644 index 0000000..a4a0610 --- /dev/null +++ b/src/qt/cscfusionstyle.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CSCFUSIONSTYLE_H +#define CSCFUSIONSTYLE_H + +#include +#include + +QT_BEGIN_NAMESPACE +class QPainterPath; +QT_END_NAMESPACE + +//! [0] +class CSCFusionStyle : public QProxyStyle +{ + Q_OBJECT + +public: + CSCFusionStyle(); + + void polish(QPalette &palette) Q_DECL_OVERRIDE; + void polish(QWidget *widget) Q_DECL_OVERRIDE; + void unpolish(QWidget *widget) Q_DECL_OVERRIDE; + int pixelMetric(PixelMetric metric, const QStyleOption *option, + const QWidget *widget) const Q_DECL_OVERRIDE; + int styleHint(StyleHint hint, const QStyleOption *option, + const QWidget *widget, QStyleHintReturn *returnData) const Q_DECL_OVERRIDE; + void drawPrimitive(PrimitiveElement element, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE; + void drawControl(ControlElement control, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE; + +private: + static QPainterPath roundRectPath(const QRect &rect, int radius); + +}; +//! [0] + +#endif diff --git a/src/qt/forms/addressbookpage.ui b/src/qt/forms/addressbookpage.ui index 49dbdac..f120a98 100644 --- a/src/qt/forms/addressbookpage.ui +++ b/src/qt/forms/addressbookpage.ui @@ -6,7 +6,7 @@ 0 0 - 760 + 993 380 @@ -24,34 +24,6 @@ - - - - Qt::CustomContextMenu - - - Double-click to edit address or label - - - false - - - true - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectRows - - - true - - - false - - - @@ -177,6 +149,34 @@ + + + + Qt::CustomContextMenu + + + Double-click to edit address or label + + + false + + + true + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + true + + + false + + + diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index 870b030..b9a6b22 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -31,11 +31,11 @@ - + - + 470 @@ -48,59 +48,7 @@ 16777215 - - QFrame::NoFrame - - - QFrame::Plain - - - - - - - - 75 - true - - - - Wallet - - - - - - - The displayed information may be out of date. Your wallet automatically synchronizes with the CasinoCoin network after a connection is established, but this process has not completed yet. - - - QLabel { color: red; } - - - (out of sync) - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - @@ -112,17 +60,18 @@ 12 - + Balance: - + + 14 75 true @@ -144,14 +93,14 @@ - + Unconfirmed: - + @@ -176,14 +125,14 @@ - + Immature: - + @@ -205,7 +154,7 @@ - + @@ -215,7 +164,7 @@ - + Qt::Vertical @@ -228,13 +177,13 @@ - + - Hide all advertisements (temporary) + Hide all advertisements false @@ -247,9 +196,59 @@ - + + + + + + + + 14 + 75 + true + + + + color: rgb(166, 27, 31); + + + Wallet + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the CasinoCoin network after a connection is established, but this process has not completed yet. + + + color: rgb(166, 27, 31); + + + (out of sync) + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + @@ -260,42 +259,28 @@ - + 150 0 - - QFrame::NoFrame - - - QFrame::Plain - - - <b>Recent transactions</b> - - - - - - - The displayed information may be out of date. Your wallet automatically synchronizes with the CasinoCoin network after a connection is established, but this process has not completed yet. + + + 14 + - QLabel { color: red; } + color: rgb(166, 27, 31); - (out of sync) - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + <b>Recent transactions</b> @@ -312,6 +297,22 @@ + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the CasinoCoin network after a connection is established, but this process has not completed yet. + + + color: rgb(166, 27, 31); + + + (out of sync) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + @@ -336,19 +337,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - diff --git a/src/qt/gui20_skin.cpp b/src/qt/gui20_skin.cpp index e22ec44..0cd1402 100644 --- a/src/qt/gui20_skin.cpp +++ b/src/qt/gui20_skin.cpp @@ -13,8 +13,20 @@ GUI20Skin::GUI20Skin( QObject* a_pParent ) , colorToolbarMainTextVisitWebsite( "#ffffaf" ) , colorToolbarMainTextShadow( "#c72427" ) - , colorMainWindowBackground( "#afafaf" ) - , colorMainWindowFrameBackground( "#ffffff" ) + , colorWindowBackground( "#f0f0f0" ) + , colorFrameBackground( "#ffffff" ) + , colorButtonTopGradient( colorFrameBackground ) + , colorButtonBottomGradient( "#F2F2F2" ) + , colorButtonMid( "#F8F8F8" ) + , colorButtonDark( colorButtonBottomGradient ) + , colorButtonLight( colorFrameBackground ) + , colorListCurrent( "#F5E5E5" ) + , colorListValue( colorFrameBackground ) + , colorListValueAlternative( "#F5F5F5" ) + , colorTextActive( "#404040" ) + , colorTextActiveAutocomplete( "#6B3D3D" ) + , colorTextDisabled( "#707070" ) + , colorTextDisabledAutocomplete( "#8B5D5D" ) { } diff --git a/src/qt/gui20_skin.h b/src/qt/gui20_skin.h index 2b10bdb..8a38ce5 100644 --- a/src/qt/gui20_skin.h +++ b/src/qt/gui20_skin.h @@ -23,6 +23,23 @@ class GUI20Skin : public QObject Q_PROPERTY( QColor colorToolbarMainTextWebsiteURL READ GetColorToolbarMainTextWebsiteURL CONSTANT ) Q_PROPERTY( QColor colorToolbarMainTextVisitWebsite READ GetColorToolbarMainTextVisitWebsite CONSTANT ) + Q_PROPERTY( QColor colorWindowBackground READ GetColorWindowBackground CONSTANT ) + Q_PROPERTY( QColor colorFrameBackground READ GetColorFrameBackground CONSTANT ) + + Q_PROPERTY( QColor colorButtonTopGradient READ GetColorButtonTopGradient CONSTANT ) + Q_PROPERTY( QColor colorButtonBottomGradient READ GetColorButtonBottomGradient CONSTANT ) + Q_PROPERTY( QColor colorButtonMid READ GetColorButtonMid CONSTANT ) + Q_PROPERTY( QColor colorButtonDark READ GetColorButtonDark CONSTANT ) + Q_PROPERTY( QColor colorButtonLight READ GetColorButtonLight CONSTANT ) + + Q_PROPERTY( QColor colorListCurrent READ GetColorListCurrent CONSTANT ) + Q_PROPERTY( QColor colorListValue READ GetColorListValue CONSTANT ) + Q_PROPERTY( QColor colorListValueAlternative READ GetColorListValueAlternative CONSTANT ) + + Q_PROPERTY( QColor colorTextActive READ GetColorTextActive CONSTANT ) + Q_PROPERTY( QColor colorTextActiveAutocomplete READ GetColorTextActiveAutocomplete CONSTANT ) + Q_PROPERTY( QColor colorTextDisabled READ GetColorTextDisabled CONSTANT ) + Q_PROPERTY( QColor colorTextDisabledAutocomplete READ GetColorTextDisabledAutocomplete CONSTANT ) Q_ENUMS( ESizeConstants ) @@ -45,6 +62,22 @@ public: const QColor GetColorToolbarMainTextShadow() const {return colorToolbarMainTextShadow;} const QColor GetColorToolbarMainTextWebsiteURL() const {return colorToolbarMainTextWebsiteURL;} const QColor GetColorToolbarMainTextVisitWebsite() const {return colorToolbarMainTextVisitWebsite;} + + const QColor GetColorButtonTopGradient() const {return colorButtonTopGradient;} + const QColor GetColorButtonBottomGradient() const {return colorButtonBottomGradient;} + const QColor GetColorButtonMid() const {return colorButtonMid;} + const QColor GetColorButtonDark() const {return colorButtonDark;} + const QColor GetColorButtonLight() const {return colorButtonLight;} + + const QColor GetColorListCurrent() const {return colorListCurrent;} + const QColor GetColorListValue() const {return colorListValue;} + const QColor GetColorListValueAlternative() const {return colorListValueAlternative;} + + const QColor GetColorTextActive() const {return colorTextActive;} + const QColor GetColorTextActiveAutocomplete() const {return colorTextActiveAutocomplete;} + const QColor GetColorTextDisabled() const {return colorTextDisabled;} + const QColor GetColorTextDisabledAutocomplete() const {return colorTextDisabledAutocomplete;} + private: const QColor colorToolbarMainGradientBegin; const QColor colorToolbarMainGradientEnd; @@ -58,8 +91,23 @@ private: const QColor colorToolbarMainTextWebsiteURL; const QColor colorToolbarMainTextVisitWebsite; - const QColor colorMainWindowBackground; - const QColor colorMainWindowFrameBackground; + const QColor colorWindowBackground; + const QColor colorFrameBackground; + + const QColor colorButtonTopGradient; + const QColor colorButtonBottomGradient; + const QColor colorButtonMid; + const QColor colorButtonDark; + const QColor colorButtonLight; + + const QColor colorListCurrent; + const QColor colorListValue; + const QColor colorListValueAlternative; + + const QColor colorTextActive; + const QColor colorTextActiveAutocomplete; + const QColor colorTextDisabled; + const QColor colorTextDisabledAutocomplete; public: static GUI20Skin& Instance(); diff --git a/src/qt/qtquick_controls/cpp/guibannerwidget.cpp b/src/qt/qtquick_controls/cpp/guibannerwidget.cpp index 9de8cb4..734d540 100644 --- a/src/qt/qtquick_controls/cpp/guibannerwidget.cpp +++ b/src/qt/qtquick_controls/cpp/guibannerwidget.cpp @@ -2,7 +2,10 @@ #include #include -#include +#include +#include + +#include "gui20_skin.h" // qml #include "guibannercontrol.h" @@ -43,8 +46,7 @@ void GUIBannerWidget::registerCustomQmlTypes() QWidget* GUIBannerWidget::dockQmlToWidget() { QQuickView* pBannerWindow = new QQuickView; - QWidget* pPlaceHolder = 0; - if ( pBannerWindow ) + QQmlContext* pContext = pBannerWindow->rootContext(); { pBannerWindow->setSource( QUrl( QStringLiteral( "qrc:/qml/qtquick_controls/qml/QmlGUIBannerWindow.qml" ) ) ); QQmlEngine* pEngine = pBannerWindow->engine(); diff --git a/src/qt/qtquick_controls/qml/QmlGUIBannerControl.qml b/src/qt/qtquick_controls/qml/QmlGUIBannerControl.qml index 1e8f911..9750936 100644 --- a/src/qt/qtquick_controls/qml/QmlGUIBannerControl.qml +++ b/src/qt/qtquick_controls/qml/QmlGUIBannerControl.qml @@ -5,7 +5,7 @@ GUIBannerControl { id: id_bannerControl - property color colorBackgroundInWidget: "#FFFFFF" + property color colorBackgroundInWidget: GUI20Skin.colorWindowBackground Rectangle { id: id_leftArrow diff --git a/src/qt/res/icons/_0001_Remove-user-icon.png b/src/qt/res/icons/_0001_Remove-user-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..903ca85a8e52e2f86f88d49c01cfa3a90ef5471e GIT binary patch literal 463 zcmV;=0WkiFP)20000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzaY;l$RCwB))y*qJQ5eVZxn3izl*Q02 z$%frTG?cKiq?DzymRVBrl7;fNQp!e?g_n)D60)-Jo`w7YQfv@eF}_bdQ@7i>_ntea zKAk&f&i!@nIrp6FWa5dKp)_I|9Vo#Srf?FoC`CSj7pQWzrO<`}Y=?yw7~1AMfw@wM zMXe)+%AFx^*?eqNp#hYGF-~e5yR6RJws5exuhj4>U zPv|bR0oF&M+1bEa&Z( z002ovPDHLk FV1ljV(*OVf literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/_0001_sign-icon.png b/src/qt/res/icons/_0001_sign-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ff8366a6a5aa6e896c24c822978b60840738e0 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GPdr^5Ln>}1#i;3?cVK(K^k}KW8_pxSK0HqtLlw$clFAhH zSS3Hr_qfAgx`4HVx#0$Phdt9rH8G{!yp~6K3VM!0+nFCppJ+39WXPgoF4?hp;*p5P zA3`0DJ>D}KE7Szkl{>#O7V`ESc4=YkzQ8ks>1&X!VcQ1Ak6sFWPC~P}k5oFuw2NG@ z*vs6t%hcgbvkF^LpjDL5!_t#MCd^@sg+c=Vk1ms#t+>fSrsK$ch9ety@El0>Ul8x@IUO1p88lw&ibhZT R8Upk$gQu&X%Q~loCIARza~1#q literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/_0002_logo bottom.png b/src/qt/res/icons/_0002_logo bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd80ae9e70b4033882d22ee61a2d00628b1ed6b GIT binary patch literal 3799 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 diff --git a/src/qt/res/icons/address-book.png b/src/qt/res/icons/address-book.png index a969997836fde31d184f4e98546478f7aa725622..48933379acc0c6097704f8368eca908009a3a72c 100644 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8LQfaRkcwMLF>1Q!8Ca?uY=k>}8)mdNnjGjj)0i2@bYvG# z2!oHq8DHJQ33@3DCq@2G)LWt@VOntIKp->wnFI9!-(nTS8m8qhN#J3&XZ|RxFpVWC zHLG$bYsb!pA39qkl-L(baA^J0Zv3IWRF8$jfMLxY$+FxczPUil89ZJ6T-G@yGywpj Cl0#Jh literal 2492 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 literal 879 zcmV-#1CacQP)`L67Pgx?s>x;iesW>}d@Y9b!$flFK zd-Zkk>eAOO7q2e;&6~gd=U;yHZ3qZ=y-cN&e=KU>SIztBbb7fB5n)vW z34xep#4PL7AAfmtu(LCLy{U*n0V0Bk5JW%(X|>$l-C^(ZM||`3S5F`BKKgSL5%ErS znV`uLAZ8h=iL>(sXXl+}U)0YN;N?~YG?54aO$mVSzxx(b=j!T;5C7%>{Pz1F{4Wvc zL_>ru6U-pbbIMYy`cUo7>FJBb(eq6bL#z@RECX>lV*oNNpScl%+DT;!!RLrXV4w;a}Q2h=85vk4U_rf;zxgMY> z5=Bv<>b21fJRk(j6@n9}1l{gC2HRc=QmLer>J@=`CBn=I!Evi64Nj1(6aKN-_HKcy zwsOEyh>%vdnnK*A7hCAZc2IyO!|MUsgS9({a1-tuT|NriK@WJJCxR2KGG$Xws3vU* zakD{eO)8?oE#Yy9f|X}E){UGhX2aNCdnmhw=aK+31NUaN?v5Ls)eoH+eb|Blf?JoA zUIESOMZkS28fI2MJ6EbE6P9H;3fmu6-X^Rql)JRs?jg z?MY&HVY|^5Yy;bk1Z)di0J+ZB_b4ZuPVVk6LKWMRM!)&j9D5U&B^5U8Q<*c37Wu>lZY z1>*l`*cph=0&z5ycEh3uq|X54lI1|Gfx|VHK>PrRars#bh*z;78Ni4n`5%dmZUDME zRVD^109*mfNQxm;amlD5qlOGUE<-LL400000z@+$TtOw>5(BPe+5KIL_t(|+G70w|33o=FfuYS-~z3!^A<2MF~vi8{~4fKz~JxS zf0s|3*yFWz>+%;s?jHsc0YCsTfE@52*+eu@Q!{-zm6NZV znmVWgm9vs+KR^I6B8R}u$=U*c|NS@o_2)m+pTGYZSG>xIf0dFFi%UxKW#Hsw$7#sg zwfh)Op1gch*;p9=0nNB?Rdw?|ILIIvD*y-}xC730YZ*l!4mN^5S+QalgV2v-43-Md7=C?x#qj&nYlf$9f91Ki+@1rJ z{t3kYu;~K`e;^hZ6o4MFTD!E ze<1$n?_f5wj5LEy5SPvJ6J;B5MFBtn;Y*b4D5nl4D9Ue@B|5R1jsReMgIY_ z^*;uEnSTsSm+youTC|xpF3vX*6gf}~2LJ)Ye}o7Dhy#el|A0vxWH}EHHyHEsax?Jp z@i6f7^MGjx<_6Uj4C?Bt{`2N-1Z5{aAZA8(06+l29qzgHg^{ylvQp<(#lCx(CDeiD}>fl&ae=|PS# zFi>WYmX-?W?Og$P1V8|>pcW#CJoEoE(1OpnE&0ntTomx~ax!e%bQ~NKAjg1cAt8|f zpi~7YGXVq;3${}1|3_e!_=-PA{A2!0e^eA08L5HO!H*xm;p%VSeg>lWf%p|b0HHeI zH!#kB0DboHJ3)j0F%uU8tgNg+2mEGWVPOGhQKX~?vYQDYfKVI&N^JjMe`O%X|Y5y^7Y00sykv?w6HC`Jwen8gT7 zF@22e2xNx?1Q6C-K$HXi{()N#%37F~GT?LsatHtf5Q+mneEiG6&-IVEDER#c9Mq5& zHD)m5a|E&j00M{w(T4bcbkiwbe`^cX&%ovw;dJmp1mY9q)J?1-kfQ(~fZz_e^6XRi z&p$jMn@gRonM-x0_m01!avz67PJWUo+6por!8 z0W*kHM<6=@Ab^<2ZFhny807u}$TCQDAkz>_(Z!LY03d)^$ZmN9tJcexA2U37@CM!% sM8=@9;UCbum}38d9iEqPa{vMi0Q+WtY{NEovH$=807*qoM6N<$g4Z;DtpET3 diff --git a/src/qt/res/icons/export.png b/src/qt/res/icons/export.png index 5c17cab6befa2a487722d15415ee5d0d8a7e2b7e..b3dcb2d2d2ebe27096b5e5f900cf738a99620669 100644 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^f(Q92_#NNt!9n8ydqM zWY|Jgn2v09sNw3^ueh?3>qyuRo=Dy!Nde44jX(a@-+90;uzaI|0)sNMRtC!>E4Duk zf;|&`T)&ko2>k!uFK=`Bnd}V4ISzjWwAhR?gaz6im?ueU)$xQMIKi)Y)z|BDu@J26%|Ug6r1XoUulvxZcNN(c4z13oYQj#mxGzzoq%}JcX@bU z&du|@&-V2V^lrNGLTmX^huh=)O5US6I%dGh21-}fi;hXzzw z0!ush@83@;B~pX@L1vj`27uYQKpp8WPiC6z{Q2|ilF4L20h)kbSy@>f1XP!Vgh+A) zpqLOvtmO73dd7J=+I1#h*U~&ewLy>cRG%l}!LA0na zFFutD8t&O#TXb! zV$atX(fV2=7S+w4Er90>5)qImEHM&NWJJ_WV|v<#ZD&ziJ0DF=OVHVU6{jx^!wcA4 z98eueK#|?oHDer8GZ}au4HbuCIm68KBxVG;S!RYUa?Y`4^+NpGpTgiR8*gk}7TE!U zVwl>aB-C8gV1G;X25FG)90F~{7aRx>iC=Fl` zjzlHXUReL1FMEgVMOF3dzPNenEw|_nNTA5f84d2uItRz`k#iYbpTi3P*W&^VIRV!d z*$sp%0kVz<$8k}UU<+2%^EQiQzFV~U;IfDVMHcTqahx+ur!y$8%7JSp805@(ICG6~ z08%7JKpA|GiZQrCYzEVJ(@3T62u$eqOr}Mzs#{rb1mL{nZQzVzU^s~>Tf^fu6o~{! zMJ0o27|;lj?t@Ya-w)urau*zAGj@nf*5iz8nrT@+G=8P{El@cE>3|_Y)^Ps5?}Kx$ z1jjf~aQ4w!1!D~J=0A#SLw^9H{n+vHT0Fn%8Bj{Yh14`6vr7nZp#lVvP~FFOt;i+O z)-9XRvUDCkc(WNxo~%V`VgjS1qqv<)VRCBHzkK=f-jw(X#l41+ccD~BTk`^*U092T z#}er4>%)!Pw^3D9g_@cgE=O?V`t@%*J3IF}j+2WYLA2AT8&LrvGMNn0=`@;~o27U@ zHa5lw2M2#VaNxj4Jv}`s0Eis{VwX}6(3WR~Uh}s_^&m#zEcqC^pY(L%I z-TmINW5*PEi~|o0p^YaJ32$U%VwAC8cha)1h?J}f3Gw7RqQG;wBmT>U`{&K?u39c|Q&E_+F(7Hq z(Ff&sWo~`YTUNa1b`I_cm__t8#}@u;C&3 zmp4Vy3sS6hD|F30z3163*YM++Y!@02Z=BUuWO|XSLffos-Ad~;1+&zEsSL7f4VN!; zxqJ0i=CT`CXK7h|cHq0(+9Y`8OzD=gUoY&cStJ;ilvv8Q`|hj*x|YGy)z4*}Q$iB} DJXvHN literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF%}28J29*~C-V}>VGHmHasB`Q zKad%E=yDxMI?3DJg`tC0)&t1lEbxddW?|6H_V+Po~-c6=`_7IEGZ*N{Up|t)J1@c(AR}rl6&h>8wJ+;Uf-;43Y&c fOn==OnRpm}PGedBIPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipe_ z3ndRC4ewL{00c-$L_t(o!?l;oZyZGshrjCXnb{p@AHhOFh(km`+z5&kaX{q6Kaf9z z1Ls7DBNECXaNz{v0A~bek}DyJ0up&3L=r_750Tge<7e#c?kWzmUXQUMHp;d%>fTaM z*H^#luIUvsW52EXtN;xa5xGAfdX%y)wLB?-df-Hnqj{ai%$cmkDcbs@iUaJ zL@|_1B9llYNn|pY=Dud|?hH%stUXx(1WwGJpd%fUB@&IpL?T%tOEW(D)KL!7_6=Zw znljSS*twF3lRnuPN7Hlw1jw36+C<-0Ad*mW)2mJg0BZoY705fJ-?C-P(*h8(W}?Pj zdq72r#0Ee!V$(>0f@&t_xWoCRA1je_8Yk?D0|+T^E1;5zTS~|_M7G@Q*r_OxGck`^ z(T`8SmPN*=-~a&fVcC7D>h(T)_SEaIq6*r)Z8jdOVwO-<35WWIY6XDWWRBVPJTn{J zxpeJEFS?<46cAAq-#8ps-Yl}dD7+cexpS|5@cya8FTQ}PVlkm9VWw!xSk92rq$fp4 zU5)0a&^AEq`6PiUSYdu30+-f;j0U*UBA&p*>co|a4j3soRpBwEXRoDv@7bJs*E9YtU$_aK3HJ!@;5A9 zzk!c&N961QktOc1DGAN;#mw^UJ1ktj%KF{gI1JyCSN{Wo zNjh2zBp`2YHaq`cqPCoPwD6F{pKf#i%2h^xJj4MWPauQXjvR+^DN6rX?X+)>ytb$MW3Itj^7`^2@KpwYA-!ClRo{A-4K9L=-4m5DJ7W!Ve#R z!rjlmAapud&aBVRKem8q<82p&dkjRL*osC069qh*i;HY>u(lUO7WT}4+GB5Mvj_ae zW!0Apkskl6wd<}cfLIE611C-8bCPg?LkJ>>87od!qHs~njJNxP6ZeKJ6pM;FkK(FXg7d2hqWg|bD z(v_^$dS#!%7+_cp8B_yi!VKM_W+g387oc<{y`o3I>@%na+e(yu>Y~Pv{B!}jp{6cs zW{Q~xqy^C{d*qEgU4Txg==$yiM(UtPY-|y4u=;{aAEQkzJZx3YUY>c545Bl_6%<2LF00004u*Y0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy`AI}URCwBATqZ65pMiAH2*eFQoD0Ny zK%Busfg#mE+yWJ2M>dF&NP|G?I)S(h%KrhxtMIu9B=-l4Aya`k6UzSr#Qs3Mj|qn% zASdqyVm>4>W*}aOWXO9Ub_E#%vlShbLH*AFHOvEuKLha!AP$6zzXW1;AifCGgv~|s zfcPAgZ34sxfp`m&Ay0tV0f+;THDNR84G=p4@ewFr8|noRxC_L#KpYN@IYi(gr6crM z;{xLKK|D}h)B8dh)dMKM0`3y4F3m=hY{H~|w83Gfdg pLx?qqD1hv>|CAU+H5UN{7y#>@E^Mj^!yo_v002ovPDHLkV1jcHecAv3 literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)Ha<~v<98h?X+R;_%#er@=ltB< z)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6^dDE`IM#WBR<^xn(1UM_|rZ4ce&Itg&U zW$|X_3g1x7+NE8 z`3rwieebz%j_^P0Q+bB*^Z9uh{1W9)&*)aXd#FHdPebvVkTYTRYo{`vU)0>`Rdqai zTI;6ho<~fz_x&S!6-$fqH^eqqM|3I1rrRdn)Kx3&|LAqANAa!M_pMSFl-vs1zDm_J z?|sjg6%}!qO-`!Hy6wxv$q8$umS;!tv)f1Jemf{CCwgetHistoryAction(), SIGNAL(triggered())); connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), transactionView, SLOT(focusTransaction(QModelIndex))); // Double-clicking on a transaction on the transaction history page shows details