From d97bb47f0941b3b32d5b2d5acee55959ecb868c1 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 26 Aug 2014 15:18:30 +0200 Subject: [PATCH] Add proper QResrouce system to libcalamaresui, finish up prepare checks This also adds ImageRegistry, a SVG cache, a bunch of utility functions for shared pixmaps in CalamaresUtilsGui and renames several qrc files in viewmodules. --- CMakeLists.txt | 2 +- CalamaresAddLibrary.cmake | 6 +- CalamaresAddPlugin.cmake | 9 +- data/images/no.svgz | Bin 0 -> 1082 bytes {images => data/images}/squid.png | Bin {images => data/images}/squid.svg | 0 data/images/yes.svgz | Bin 0 -> 1138 bytes src/libcalamares/utils/CalamaresUtils.h | 2 + src/libcalamaresui/CMakeLists.txt | 3 + src/libcalamaresui/libcalamaresui.qrc | 6 + .../utils/CalamaresUtilsGui.cpp | 83 +++++++++ src/libcalamaresui/utils/CalamaresUtilsGui.h | 26 ++- src/libcalamaresui/utils/ImageRegistry.cpp | 163 ++++++++++++++++++ src/libcalamaresui/utils/ImageRegistry.h | 47 +++++ src/modules/keyboard/CMakeLists.txt | 2 + .../keyboard/{resources.qrc => keyboard.qrc} | 0 src/modules/locale/CMakeLists.txt | 2 + .../locale/{resources.qrc => locale.qrc} | 0 src/modules/prepare/CMakeLists.txt | 3 +- src/modules/prepare/PrepareCheckWidget.cpp | 50 ++++++ src/modules/prepare/PrepareCheckWidget.h | 36 ++++ src/modules/prepare/PreparePage.cpp | 21 ++- src/modules/prepare/PreparePage.h | 5 +- src/modules/prepare/PrepareViewStep.cpp | 18 +- src/modules/users/CMakeLists.txt | 2 + .../users/{resources.qrc => users.qrc} | 0 26 files changed, 470 insertions(+), 16 deletions(-) create mode 100644 data/images/no.svgz rename {images => data/images}/squid.png (100%) rename {images => data/images}/squid.svg (100%) create mode 100644 data/images/yes.svgz create mode 100644 src/libcalamaresui/libcalamaresui.qrc create mode 100644 src/libcalamaresui/utils/ImageRegistry.cpp create mode 100644 src/libcalamaresui/utils/ImageRegistry.h rename src/modules/keyboard/{resources.qrc => keyboard.qrc} (100%) rename src/modules/locale/{resources.qrc => locale.qrc} (100%) create mode 100644 src/modules/prepare/PrepareCheckWidget.cpp create mode 100644 src/modules/prepare/PrepareCheckWidget.h rename src/modules/users/{resources.qrc => users.qrc} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74f62c770..750cf57e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ include( MacroLogFeature ) set( QT_VERSION 5.3.0 ) -find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core Gui Widgets LinguistTools ) +find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core Gui Widgets LinguistTools Svg ) find_package( YamlCpp 0.5.1 REQUIRED ) option( WITH_PYTHON "Enable Python modules support." ON ) diff --git a/CalamaresAddLibrary.cmake b/CalamaresAddLibrary.cmake index 050c08a5d..a774b1f31 100644 --- a/CalamaresAddLibrary.cmake +++ b/CalamaresAddLibrary.cmake @@ -4,7 +4,7 @@ function(calamares_add_library) # parse arguments (name needs to be saved before passing ARGN into the macro) set(NAME ${ARGV0}) set(options NO_INSTALL NO_VERSION) - set(oneValueArgs NAME TYPE EXPORT_MACRO TARGET TARGET_TYPE EXPORT VERSION SOVERSION INSTALL_BINDIR) + set(oneValueArgs NAME TYPE EXPORT_MACRO TARGET TARGET_TYPE EXPORT VERSION SOVERSION INSTALL_BINDIR RESOURCES) set(multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS QT5_MODULES) cmake_parse_arguments(LIBRARY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(LIBRARY_NAME ${NAME}) @@ -30,8 +30,8 @@ function(calamares_add_library) endif() # add resources from current dir - if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/resources.qrc") - qt5_add_resources(LIBRARY_RC_SOURCES "resources.qrc") + if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${LIBRARY_RESOURCES}") + qt5_add_resources(LIBRARY_RC_SOURCES "${LIBRARY_RESOURCES}") list(APPEND LIBRARY_SOURCES ${LIBRARY_RC_SOURCES}) unset(LIBRARY_RC_SOURCES) endif() diff --git a/CalamaresAddPlugin.cmake b/CalamaresAddPlugin.cmake index 63e63d009..e9d5607c9 100644 --- a/CalamaresAddPlugin.cmake +++ b/CalamaresAddPlugin.cmake @@ -5,7 +5,7 @@ function( calamares_add_plugin ) # parse arguments ( name needs to be saved before passing ARGN into the macro ) set( NAME ${ARGV0} ) set( options NO_INSTALL SHARED_LIB ) - set( oneValueArgs NAME TYPE EXPORT_MACRO ) + set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES ) set( multiValueArgs SOURCES UI LINK_LIBRARIES COMPILE_DEFINITIONS ) cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set( PLUGIN_NAME ${NAME} ) @@ -30,6 +30,9 @@ function( calamares_add_plugin ) if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PLUGIN_CONFIG_FILE}" ) message( " ${Green}CONFIGURATION_FILE:${ColorReset} ${PLUGIN_CONFIG_FILE} => ${PLUGIN_DATA_DESTINATION}" ) endif() + if( PLUGIN_RESOURCES ) + message( " ${Green}RESOURCES:${ColorReset} ${PLUGIN_RESOURCES}" ) + endif() message( "" ) endif() # create target name once for convenience @@ -65,6 +68,10 @@ function( calamares_add_plugin ) list( APPEND calamares_add_library_args "INSTALL_BINDIR" "${PLUGIN_DESTINATION}" ) + if( PLUGIN_RESOURCES ) + list( APPEND calamares_add_library_args "RESOURCES" "${PLUGIN_RESOURCES}" ) + endif() + calamares_add_library( ${calamares_add_library_args} ) configure_file( ${PLUGIN_DESC_FILE} ${PLUGIN_DESC_FILE} COPYONLY ) diff --git a/data/images/no.svgz b/data/images/no.svgz new file mode 100644 index 0000000000000000000000000000000000000000..423fdaca7fddc8afc7e2b69a18fefbc2963bc1d5 GIT binary patch literal 1082 zcmV-A1jYLwiwFpR82M8G19xd|WN&vZV{C78WiE4eX8@g7QE%cn5Ps)Z_|lhFM-n?p z31oqlZmX5{^=?o1?8XMHCNYXlf&KM2PV6KU3hhR!8hgH(@%LryG4rp7vOurARzg+_ zj|A95yvijL)q3Im`}4a$^^nrEVziJIUwD=DzAi`eKYSm3t2x!2p}o)>^rL!FIo)z} zztMV|h2eg`4}_fzWW5d_knb-?qq%xrj}StTw^A9)7oK(4?&_ievOMGkFL|X^NCFai zJv{H>xydeGc`nORR;ux=)ZGAFvsH&StJ%j5h|FfQ5JzDY`GD}%vC{P5pSr>tFS$k- z;}C2;@?)q>fuLLX>)>u8P;yu2d3l5SQs!5b4)^vHpB z^N(1N+Q|L7HuC9u=j3}gl0gqyu4vI|-s)#_41#se_G8-uB=O{or$xA;OvxEpivY3w zGYPE?w2I<)Y$ZL2QvBjTmo&9DEUEQQFy8t>1xY1zQ{%RZaWal@^GZ_Bp=2#USlR;N z+s>M2j5~l4wuzfypxYMl=W^PV)5|&WxXXGm=k((_$;>VPMo#|*(G>qy((B^lv453m z8ht!zY}Jj&kpAiyeY{RI`JJ4xP5Ca-F6+gdpQs`-b<4kz)4xUZGiB5zy&ExYMC%QNWYCDlt&!g*;f0e?d0o`=2R1Z=qULEEr3Z?6Ow z??o&xg>ef1(V{4Rm?WKCT~MJ5zHD-~uZ~4%X;_lsfaN@N8Z@Kzn{%|F&%9W8-{_Vi z^7fEj*K)TlCF8coc)hSEJxABHQbq;SC*ZY!%j3N%2OQ%dopQrq%4yW&q2Hu& z9K>Xr^l)f2X*3OBOA^ve4!FTbuEpUV2PsYoo}|<9;MKo8jmP+*FZ&_=tAYIwyf>i- zYxmP62_|urJPv94X*>(!8O9%x<+6+e#rx2o{CaNZuHhGk**we9{~!7->7Wb%0CN>5 AYybcN literal 0 HcmV?d00001 diff --git a/images/squid.png b/data/images/squid.png similarity index 100% rename from images/squid.png rename to data/images/squid.png diff --git a/images/squid.svg b/data/images/squid.svg similarity index 100% rename from images/squid.svg rename to data/images/squid.svg diff --git a/data/images/yes.svgz b/data/images/yes.svgz new file mode 100644 index 0000000000000000000000000000000000000000..a4a8f6c8460700aa47e0c980d2534d8439c024a1 GIT binary patch literal 1138 zcmV-&1daP2iwFpR82M8G17vAoY;R{RZ)+`KaBysSE^~Hg0G(IKa@#l%z56RL^d+eX zB*C2;NjW5ys$4Ufnlns56v`yQ0-?=cKMk&09our*BD){@p&uGRd-3&97HG#+BV@I- zi0xX4SD9p@%9qx^zklGwLXD;sqlK*a(yFBOb@j0L3uE+6ajH2(d!aYzXZ74Jf46RTaRcno4wzHNSdaO>p7l>0fC!irRf2m4~0428tS>O z>ws@Uz6~{RK+qa~NBCf{8@W{(U&A0w_tqT7<|WS-hkG(kkfj{C?*8k3BI4OPqgWBL8zuVta~BV z(t2FCpWg8#72|4fMeXOzB|#gZk6oqrv4`YL)Y0$W_BR{Kau7E-I{L4Y^+13%=Gj9jdFG8=fbrwb9^8x4o!9Gu)RT@y8{(L=0sa zMadlmsEDtm?|mSm=il*_^dL&{!a)ae2{96#F728YW1+S3Z3W{^FW{=RFUG+}+YXA5 zKAN3*I2xNZ7>)GC5D*gdReoCMZSVnG%SPySd-*n;Aub{DEU@9YO5-FPBT6M;wP^=* zXCyl3G64e;`fn#AX~*V4td1?cM~3gP#cyZx#?*lKH8zsW+*@SPJ5oC#`=gG@O|tME zWbUZr>ty(DYVXl;VtZXjvud|$ErX6Q1$Y z*Iw80?p}+B8d*5kw`FTDxu%S2I$fQE1+Lm?IKrU!ng9C!W7ShEvTXjJRL=t=LIyye zh{ig#_#&EAh?r7(k>f3zry zpN3@AcMK|Y!6)Ow>1W^P=A0zAaE9#LxBTMtFX$65mew~~Q*?DT_M^ZKV-ol?9D1Q0r*0g69^|j7-V7-<`d9!(-+Ro--)l&G z{unUx)4t%z*Jvf5`MiQ|d@K*M#K=!PJBffT^xc*$MwmdK<|lD9gNHDRf&k&bCP9>@ zGxLzfv4^0`jNKS2629RiPtbtq0LJgS#tVN@hxL1Gj5;44oR>giTpbdhLHmitGu+QC zoaWIFiO|bg{VSenxJCWRI5t4Cs=z4~hE`}t^;U7yh78*zhyPbhnXVrG2l?$7x$X=A E0F_fXQvd(} literal 0 HcmV?d00001 diff --git a/src/libcalamares/utils/CalamaresUtils.h b/src/libcalamares/utils/CalamaresUtils.h index c0839f96f..915b4c2a6 100644 --- a/src/libcalamares/utils/CalamaresUtils.h +++ b/src/libcalamares/utils/CalamaresUtils.h @@ -26,6 +26,8 @@ #include "DllMacro.h" +#define RESPATH ":/data/" + class QDir; class QObject; diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index 6ded069b0..357ee9712 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -7,6 +7,7 @@ list( APPEND ${CALAMARESUI_LIBRARY_TARGET}_SOURCES modulesystem/ViewModule.cpp utils/CalamaresUtilsGui.cpp + utils/ImageRegistry.cpp utils/YamlUtils.cpp viewpages/AbstractPage.cpp @@ -35,6 +36,8 @@ calamares_add_library( ${CALAMARESUI_LIBRARY_TARGET} EXPORT_MACRO UIDLLEXPORT_PRO LINK_LIBRARIES yaml-cpp + Qt5::Svg + RESOURCES libcalamaresui.qrc EXPORT CalamaresLibraryDepends VERSION ${CALAMARES_VERSION_SHORT} ) diff --git a/src/libcalamaresui/libcalamaresui.qrc b/src/libcalamaresui/libcalamaresui.qrc new file mode 100644 index 000000000..4bea23aeb --- /dev/null +++ b/src/libcalamaresui/libcalamaresui.qrc @@ -0,0 +1,6 @@ + + + ../../data/images/yes.svgz + ../../data/images/no.svgz + + diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp index e43dc966c..747460261 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp @@ -18,9 +18,14 @@ #include "CalamaresUtilsGui.h" +#include "ImageRegistry.h" + +#include #include #include #include +#include +#include namespace CalamaresUtils { @@ -29,6 +34,84 @@ static int s_defaultFontSize = 0; static int s_defaultFontHeight = 0; + +QPixmap +defaultPixmap( ImageType type, ImageMode mode, const QSize& size ) +{ + QPixmap pixmap; + + switch ( type ) + { + case Yes: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/yes.svgz", size ); + break; + + case No: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/no.svgz", size ); + break; + + default: + break; + } + + if ( pixmap.isNull() ) + { + Q_ASSERT( false ); + return QPixmap(); + } + + return pixmap; +} + + +QPixmap +createRoundedImage( const QPixmap& pixmap, const QSize& size, float frameWidthPct ) +{ + int height; + int width; + + if ( !size.isEmpty() ) + { + height = size.height(); + width = size.width(); + } + else + { + height = pixmap.height(); + width = pixmap.width(); + } + + if ( !height || !width ) + return QPixmap(); + + QPixmap scaledAvatar = pixmap.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + if ( frameWidthPct == 0.00 ) + return scaledAvatar; + + QPixmap frame( width, height ); + frame.fill( Qt::transparent ); + + QPainter painter( &frame ); + painter.setRenderHint( QPainter::Antialiasing ); + + QRect outerRect( 0, 0, width, height ); + QBrush brush( scaledAvatar ); + QPen pen; + pen.setColor( Qt::transparent ); + pen.setJoinStyle( Qt::RoundJoin ); + + painter.setBrush( brush ); + painter.setPen( pen ); + painter.drawRoundedRect( outerRect, frameWidthPct * 100.0, frameWidthPct * 100.0, Qt::RelativeSize ); + +/* painter.setBrush( Qt::transparent ); + painter.setPen( Qt::white ); + painter.drawRoundedRect( outerRect, frameWidthPct, frameWidthPct, Qt::RelativeSize ); */ + + return frame; +} + + void unmarginLayout( QLayout* layout ) { diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.h b/src/libcalamaresui/utils/CalamaresUtilsGui.h index c835ddbf7..1a52bf305 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.h +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.h @@ -22,19 +22,37 @@ #include "utils/CalamaresUtils.h" #include "UiDllMacro.h" +#include #include class QLayout; namespace CalamaresUtils { +enum ImageType +{ + Yes, + No +}; + +enum ImageMode +{ + Original, + CoverInCase, + Grid, + DropShadow, + RoundedCorners +}; + +UIDLLEXPORT QPixmap defaultPixmap( ImageType type, ImageMode mode = CalamaresUtils::Original, const QSize& size = QSize( 0, 0 ) ); +UIDLLEXPORT QPixmap createRoundedImage( const QPixmap& avatar, const QSize& size, float frameWidthPct = 0.20 ); UIDLLEXPORT void unmarginLayout( QLayout* layout ); -DLLEXPORT void setDefaultFontSize( int points ); -DLLEXPORT int defaultFontSize(); -DLLEXPORT int defaultFontHeight(); -DLLEXPORT QSize defaultIconSize(); +UIDLLEXPORT void setDefaultFontSize( int points ); +UIDLLEXPORT int defaultFontSize(); +UIDLLEXPORT int defaultFontHeight(); +UIDLLEXPORT QSize defaultIconSize(); } diff --git a/src/libcalamaresui/utils/ImageRegistry.cpp b/src/libcalamaresui/utils/ImageRegistry.cpp new file mode 100644 index 000000000..48f5ea867 --- /dev/null +++ b/src/libcalamaresui/utils/ImageRegistry.cpp @@ -0,0 +1,163 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Teo Mrnjavac + * + * Originally from Tomahawk, + * Copyright 2012, Christian Muehlhaeuser + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "ImageRegistry.h" + +#include +#include +#include + +#include "utils/Logger.h" + +static QHash< QString, QHash< int, QHash< qint64, QPixmap > > > s_cache; +ImageRegistry* ImageRegistry::s_instance = 0; + + +ImageRegistry* +ImageRegistry::instance() +{ + return s_instance; +} + + +ImageRegistry::ImageRegistry() +{ + s_instance = this; +} + + +QIcon +ImageRegistry::icon( const QString& image, CalamaresUtils::ImageMode mode ) +{ + return pixmap( image, CalamaresUtils::defaultIconSize(), mode ); +} + + +qint64 +ImageRegistry::cacheKey( const QSize& size, float opacity, QColor tint ) +{ + return size.width() * 100 + size.height() * 10 + ( opacity * 100.0 ) + tint.value(); +} + + +QPixmap +ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, float opacity, QColor tint ) +{ + QHash< qint64, QPixmap > subsubcache; + QHash< int, QHash< qint64, QPixmap > > subcache; + + if ( s_cache.contains( image ) ) + { + subcache = s_cache.value( image ); + + if ( subcache.contains( mode ) ) + { + subsubcache = subcache.value( mode ); + + const qint64 ck = cacheKey( size, opacity, tint ); + if ( subsubcache.contains( ck ) ) + { + return subsubcache.value( ck ); + } + } + } + + // Image not found in cache. Let's load it. + QPixmap pixmap; + if ( image.toLower().endsWith( ".svg" ) || + image.toLower().endsWith( ".svgz" ) ) + { + QSvgRenderer svgRenderer( image ); + QPixmap p( size.isNull() ? svgRenderer.defaultSize() : size ); + p.fill( Qt::transparent ); + + QPainter pixPainter( &p ); + pixPainter.setOpacity( opacity ); + svgRenderer.render( &pixPainter ); + pixPainter.end(); + + if ( tint.alpha() > 0 ) + { + QImage resultImage( p.size(), QImage::Format_ARGB32_Premultiplied ); + QPainter painter( &resultImage ); + painter.drawPixmap( 0, 0, p ); + painter.setCompositionMode( QPainter::CompositionMode_Screen ); + painter.fillRect( resultImage.rect(), tint ); + painter.end(); + + resultImage.setAlphaChannel( p.toImage().alphaChannel() ); + p = QPixmap::fromImage( resultImage ); + } + + pixmap = p; + } + else + pixmap = QPixmap( image ); + + if ( !pixmap.isNull() ) + { + switch ( mode ) + { + case CalamaresUtils::RoundedCorners: + pixmap = CalamaresUtils::createRoundedImage( pixmap, size ); + break; + + default: + break; + } + + if ( !size.isNull() && pixmap.size() != size ) + pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + + putInCache( image, size, mode, opacity, pixmap, tint ); + } + + return pixmap; +} + + +void +ImageRegistry::putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, float opacity, const QPixmap& pixmap, QColor tint ) +{ + cDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Adding to image cache:" << image << size << mode; + + QHash< qint64, QPixmap > subsubcache; + QHash< int, QHash< qint64, QPixmap > > subcache; + + if ( s_cache.contains( image ) ) + { + subcache = s_cache.value( image ); + + if ( subcache.contains( mode ) ) + { + subsubcache = subcache.value( mode ); + +/* if ( subsubcache.contains( size.width() * size.height() ) ) + { + Q_ASSERT( false ); + }*/ + } + } + + subsubcache.insert( cacheKey( size, opacity, tint ), pixmap ); + subcache.insert( mode, subsubcache ); + s_cache.insert( image, subcache ); +} diff --git a/src/libcalamaresui/utils/ImageRegistry.h b/src/libcalamaresui/utils/ImageRegistry.h new file mode 100644 index 000000000..41ed2d6ac --- /dev/null +++ b/src/libcalamaresui/utils/ImageRegistry.h @@ -0,0 +1,47 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Teo Mrnjavac + * + * Originally from Tomahawk, + * Copyright 2012, Christian Muehlhaeuser + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef IMAGE_REGISTRY_H +#define IMAGE_REGISTRY_H + +#include + +#include "utils/CalamaresUtilsGui.h" +#include "UiDllMacro.h" + +class UIDLLEXPORT ImageRegistry +{ +public: + static ImageRegistry* instance(); + + explicit ImageRegistry(); + + QIcon icon( const QString& image, CalamaresUtils::ImageMode mode = CalamaresUtils::Original ); + QPixmap pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode = CalamaresUtils::Original, float opacity = 1.0, QColor tint = QColor( 0, 0, 0, 0 ) ); + +private: + qint64 cacheKey( const QSize& size, float opacity, QColor tint ); + void putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, float opacity, const QPixmap& pixmap, QColor tint ); + + static ImageRegistry* s_instance; +}; + +#endif // IMAGE_REGISTRY_H diff --git a/src/modules/keyboard/CMakeLists.txt b/src/modules/keyboard/CMakeLists.txt index fdfc6695e..99405c99f 100644 --- a/src/modules/keyboard/CMakeLists.txt +++ b/src/modules/keyboard/CMakeLists.txt @@ -10,6 +10,8 @@ calamares_add_plugin( keyboard keyboardwidget/keyboardpreview.cpp UI KeyboardPage.ui + RESOURCES + keyboard.qrc LINK_LIBRARIES calamaresui SHARED_LIB diff --git a/src/modules/keyboard/resources.qrc b/src/modules/keyboard/keyboard.qrc similarity index 100% rename from src/modules/keyboard/resources.qrc rename to src/modules/keyboard/keyboard.qrc diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt index 3fa6c00ce..1a0082159 100644 --- a/src/modules/locale/CMakeLists.txt +++ b/src/modules/locale/CMakeLists.txt @@ -10,6 +10,8 @@ calamares_add_plugin( locale timezonewidget/timezonewidget.cpp timezonewidget/localeglobal.cpp UI + RESOURCES + locale.qrc LINK_LIBRARIES calamaresui SHARED_LIB diff --git a/src/modules/locale/resources.qrc b/src/modules/locale/locale.qrc similarity index 100% rename from src/modules/locale/resources.qrc rename to src/modules/locale/locale.qrc diff --git a/src/modules/prepare/CMakeLists.txt b/src/modules/prepare/CMakeLists.txt index b89b26eda..c9bad0181 100644 --- a/src/modules/prepare/CMakeLists.txt +++ b/src/modules/prepare/CMakeLists.txt @@ -9,8 +9,9 @@ calamares_add_plugin( prepare TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES - PrepareViewStep.cpp + PrepareCheckWidget.cpp PreparePage.cpp + PrepareViewStep.cpp partman_devices.c UI LINK_LIBRARIES diff --git a/src/modules/prepare/PrepareCheckWidget.cpp b/src/modules/prepare/PrepareCheckWidget.cpp new file mode 100644 index 000000000..59686241f --- /dev/null +++ b/src/modules/prepare/PrepareCheckWidget.cpp @@ -0,0 +1,50 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Teo Mrnjavac + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "PrepareCheckWidget.h" + +#include "utils/CalamaresUtilsGui.h" +#include "utils/Logger.h" + +#include + +PrepareCheckWidget::PrepareCheckWidget( const QString &text, + bool checked, + QWidget* parent ) + : QWidget( parent ) +{ + QBoxLayout* mainLayout = new QHBoxLayout; + setLayout( mainLayout ); + + m_iconLabel = new QLabel( this ); + mainLayout->addWidget( m_iconLabel ); + m_textLabel = new QLabel( text, this ); + mainLayout->addWidget( m_textLabel ); + m_textLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); + + if ( checked ) + m_iconLabel->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, + CalamaresUtils::Original, + QSize( m_iconLabel->height(), + m_iconLabel->height() ) ) ); + else + m_iconLabel->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, + CalamaresUtils::Original, + QSize( m_iconLabel->height(), + m_iconLabel->height() ) ) ); +} diff --git a/src/modules/prepare/PrepareCheckWidget.h b/src/modules/prepare/PrepareCheckWidget.h new file mode 100644 index 000000000..43efad018 --- /dev/null +++ b/src/modules/prepare/PrepareCheckWidget.h @@ -0,0 +1,36 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Teo Mrnjavac + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef PREPARECHECKWIDGET_H +#define PREPARECHECKWIDGET_H + +#include + +class PrepareCheckWidget : public QWidget +{ + Q_OBJECT +public: + explicit PrepareCheckWidget( const QString &text, + bool checked, + QWidget* parent = nullptr ); +private: + QLabel* m_textLabel; + QLabel* m_iconLabel; +}; + +#endif // PREPARECHECKWIDGET_H diff --git a/src/modules/prepare/PreparePage.cpp b/src/modules/prepare/PreparePage.cpp index 46f7445fa..521911377 100644 --- a/src/modules/prepare/PreparePage.cpp +++ b/src/modules/prepare/PreparePage.cpp @@ -18,6 +18,10 @@ #include "PreparePage.h" +#include "PrepareCheckWidget.h" + +#include "utils/CalamaresUtilsGui.h" + #include #include @@ -30,16 +34,25 @@ PreparePage::PreparePage( QWidget* parent ) QLabel* text = new QLabel( tr( "For best results, please ensure that this " "computer:" ), this ); - text->setAlignment( Qt::AlignCenter ); - mainLayout->addStretch(); mainLayout->addWidget( text ); + QHBoxLayout* spacerLayout = new QHBoxLayout; + mainLayout->addLayout( spacerLayout ); + spacerLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); + m_entriesLayout = new QVBoxLayout; + spacerLayout->addLayout( m_entriesLayout ); + CalamaresUtils::unmarginLayout( spacerLayout ); mainLayout->addStretch(); } void -PreparePage::init() +PreparePage::init( const QList< QPair< QString, bool > > &checkEntries ) { - + for ( const QPair< QString, bool >& entry : checkEntries ) + { + PrepareCheckWidget* pcw = new PrepareCheckWidget( entry.first, entry.second ); + m_entriesLayout->addWidget( pcw ); + pcw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); + } } diff --git a/src/modules/prepare/PreparePage.h b/src/modules/prepare/PreparePage.h index 6ee64c49a..3230656d9 100644 --- a/src/modules/prepare/PreparePage.h +++ b/src/modules/prepare/PreparePage.h @@ -19,6 +19,7 @@ #ifndef PREPAREPAGE_H #define PREPAREPAGE_H +#include #include class PreparePage : public QWidget @@ -27,8 +28,10 @@ class PreparePage : public QWidget public: explicit PreparePage( QWidget* parent = nullptr ); - void init(); + void init( const QList< QPair< QString, bool > >& checkEntries ); +private: + QBoxLayout* m_entriesLayout; }; #endif // PREPAREPAGE_H diff --git a/src/modules/prepare/PrepareViewStep.cpp b/src/modules/prepare/PrepareViewStep.cpp index 174c4b9e1..f49d3c0bb 100644 --- a/src/modules/prepare/PrepareViewStep.cpp +++ b/src/modules/prepare/PrepareViewStep.cpp @@ -97,7 +97,23 @@ PrepareViewStep::PrepareViewStep( QObject* parent ) cDebug() << "enoughStorage, enoughRam, hasPower, hasInternet: " << enoughStorage << enoughRam << hasPower << hasInternet; - m_actualWidget->init(); + QList< QPair< QString, bool > > checkEntries; + checkEntries.append( qMakePair( + tr( "has at least %1 GB available drive space" ) + .arg( m_requiredStorageGB ), + enoughStorage ) ); + checkEntries.append( qMakePair( + tr( "has at least %1 GB working memory" ) + .arg( m_requiredRamGB ), + enoughRam ) ); + checkEntries.append( qMakePair( + tr( "is plugged in to a power source" ), + hasPower ) ); + checkEntries.append( qMakePair( + tr( "is connected to the Internet" ), + hasInternet ) ); + + m_actualWidget->init( checkEntries ); m_widget->layout()->removeWidget( waitingWidget ); waitingWidget->deleteLater(); m_widget->layout()->addWidget( m_actualWidget ); diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt index 4905ccf94..4d4ef208f 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -13,6 +13,8 @@ calamares_add_plugin( users UsersPage.cpp UI page_usersetup.ui + RESOURCES + users.qrc LINK_LIBRARIES calamaresui ${CRYPT_LIBRARIES} diff --git a/src/modules/users/resources.qrc b/src/modules/users/users.qrc similarity index 100% rename from src/modules/users/resources.qrc rename to src/modules/users/users.qrc