Revert "Merge pull request #875 from ONLYOFFICE/feature/download_widget"

This reverts commit eb652e4c4c, reversing
changes made to 55d5e39a08.
This commit is contained in:
SimplestStudio
2023-10-03 09:42:08 +03:00
parent 7ff6fdb1de
commit 9b8f71213c
22 changed files with 925 additions and 351 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="m19 9h-4v-6h-6v6h-4l7 7zm-14 9v2h14v-2z" fill="#b3b3b3"/>
</svg>

Before

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -1,147 +0,0 @@
CDownloadWidget {background: #ffffff;}
QWidget#contentArea {background: #ffffff;}
QPushButton {padding: 0px; font-weight: normal;}
QPushButton:hover {background-color: #cecece;}
QPushButton:pressed {background-color: #b7b7b7;}
QPushButton::menu-indicator {width: 0px; height: 0px;}
QPushButton#buttonCancel {border: none; margin: 0px; padding: 0px; color: #666666; font-family: "Open Sans", sans-serif, "Arial";}
QProgressBar {background-color: #cacaca; border-color: #cacaca;}
QProgressBar::chunk {background-color: #2b86b7;}
QLabel#labelName {color: #666666; font-family: "Open Sans", sans-serif, "Arial";}
QScrollArea {border: none;}
QScrollBar {background: transparent;}
QScrollBar:vertical {margin: 0px; border: none; border-radius: 0px; background: transparent;}
QScrollBar::handle:vertical {background: #cacaca;}
QScrollBar::add-line:vertical {height: 10px; border: none; border-radius: 0px;
background: transparent; subcontrol-position: bottom; subcontrol-origin: margin;}
QScrollBar::sub-line:vertical {height: 10px; border: none; border-radius: 0px;
background: transparent; subcontrol-position: top; subcontrol-origin: margin;}
QScrollBar::up-arrow:vertical,
QScrollBar::down-arrow:vertical {background: none;}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical {background: none;}
QAbstractScrollArea::corner {background: transparent;}
/* dark theme */
CDownloadWidget[uitheme="theme-dark"] {background: #404040;}
CDownloadWidget[uitheme="theme-dark"] QWidget#contentArea {background: #404040;}
CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel {color: #d9d9d9;}
CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:hover {background: #555;}
CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:pressed {background: #606060;}
CDownloadWidget[uitheme="theme-dark"] QLabel#labelName {color: #d9d9d9;}
/* contrast theme */
CDownloadWidget[uitheme="theme-contrast-dark"] {background: #2a2a2a;}
CDownloadWidget[uitheme="theme-contrast-dark"] QWidget#contentArea {background: #2a2a2a;}
CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel {color: #d9d9d9;}
CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:hover {background: #555;}
CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:pressed {background: #606060;}
CDownloadWidget[uitheme="theme-contrast-dark"] QLabel#labelName {color: #d9d9d9;}
/* 1.0x */
QPushButton#buttonCancel {padding-left: 6px; padding-right: 6px; min-height: 22px; font-size: 12px;}
QProgressBar {border-radius: 2px; max-height: 5px; margin-right: 10px; margin-top: 1px;}
QProgressBar::chunk {border-radius: 2px;}
QLabel#labelName {font-size: 16px;}
QScrollBar:vertical {width: 10px;}
QScrollBar::handle:vertical {min-height: 25px; border-radius: 3px;}
/* 1.25x */
CDownloadWidget[zoom="1.25x"] QPushButton#buttonCancel {padding-left: 8px; padding-right: 8px; min-height: 28px; font-size: 15px;}
CDownloadWidget[zoom="1.25x"] QProgressBar {border-radius: 2px; max-height: 6px; margin-right: 13px; margin-top: 1px;}
CDownloadWidget[zoom="1.25x"] QProgressBar::chunk {border-radius: 2px;}
CDownloadWidget[zoom="1.25x"] QLabel#labelName {font-size: 20px;}
CDownloadWidget[zoom="1.25x"] QScrollBar:vertical {width: 13px;}
CDownloadWidget[zoom="1.25x"] QScrollBar::handle:vertical {min-height: 31px; border-radius: 4px;}
/* 1.5x */
CDownloadWidget[zoom="1.5x"] QPushButton#buttonCancel {padding-left: 9px; padding-right: 9px; min-height: 33px; font-size: 18px;}
CDownloadWidget[zoom="1.5x"] QProgressBar {border-radius: 3px; max-height: 8px; margin-right: 15px; margin-top: 2px;}
CDownloadWidget[zoom="1.5x"] QProgressBar::chunk {border-radius: 3px;}
CDownloadWidget[zoom="1.5x"] QLabel#labelName {font-size: 24px;}
CDownloadWidget[zoom="1.5x"] QScrollBar:vertical {width: 15px;}
CDownloadWidget[zoom="1.5x"] QScrollBar::handle:vertical {min-height: 38px; border-radius: 5px;}
/* 1.75x */
CDownloadWidget[zoom="1.75x"] QPushButton#buttonCancel {padding-left: 11px; padding-right: 11px; min-height: 39px; font-size: 18px;}
CDownloadWidget[zoom="1.75x"] QProgressBar {border-radius: 3px; max-height: 8px; margin-right: 15px; margin-top: 2px;}
CDownloadWidget[zoom="1.75x"] QProgressBar::chunk {border-radius: 3px;}
CDownloadWidget[zoom="1.75x"] QLabel#labelName {font-size: 24px;}
CDownloadWidget[zoom="1.75x"] QScrollBar:vertical {width: 18px;}
CDownloadWidget[zoom="1.75x"] QScrollBar::handle:vertical {min-height: 44px; border-radius: 5px;}
/* 2.0x */
CDownloadWidget[zoom="2x"] QPushButton#buttonCancel {padding-left: 12px; padding-right: 12px; min-height: 44px; font-size: 24px;}
CDownloadWidget[zoom="2x"] QProgressBar {border-radius: 4px; max-height: 10px; margin-right: 20px; margin-top: 2px;}
CDownloadWidget[zoom="2x"] QProgressBar::chunk {border-radius: 4px;}
CDownloadWidget[zoom="2x"] QLabel#labelName {font-size: 32px;}
CDownloadWidget[zoom="2x"] QScrollBar:vertical {width: 20px;}
CDownloadWidget[zoom="2x"] QScrollBar::handle:vertical {min-height: 50px; border-radius: 6px;}
/* 2.25x */
CDownloadWidget[zoom="2.25x"] QPushButton#buttonCancel {padding-left: 14px; padding-right: 14px; min-height: 50px; font-size: 27px;}
CDownloadWidget[zoom="2.25x"] QProgressBar {border-radius: 5px; max-height: 11px; margin-right: 23px; margin-top: 2px;}
CDownloadWidget[zoom="2.25x"] QProgressBar::chunk {border-radius: 5px;}
CDownloadWidget[zoom="2.25x"] QLabel#labelName {font-size: 36px;}
CDownloadWidget[zoom="2.25x"] QScrollBar:vertical {width: 23px;}
CDownloadWidget[zoom="2.25x"] QScrollBar::handle:vertical {min-height: 56px; border-radius: 7px;}
/* 2.5x */
CDownloadWidget[zoom="2.5x"] QPushButton#buttonCancel {padding-left: 15px; padding-right: 15px; min-height: 55px; font-size: 30px;}
CDownloadWidget[zoom="2.5x"] QProgressBar {border-radius: 5px; max-height: 13px; margin-right: 25px; margin-top: 3px;}
CDownloadWidget[zoom="2.5x"] QProgressBar::chunk {border-radius: 5px;}
CDownloadWidget[zoom="2.5x"] QLabel#labelName {font-size: 40px;}
CDownloadWidget[zoom="2.5x"] QScrollBar:vertical {width: 25px;}
CDownloadWidget[zoom="2.5x"] QScrollBar::handle:vertical {min-height: 63px; border-radius: 8px;}
/* 2.75x */
CDownloadWidget[zoom="2.75x"] QPushButton#buttonCancel {padding-left: 17px; padding-right: 17px; min-height: 61px; font-size: 33px;}
CDownloadWidget[zoom="2.75x"] QProgressBar {border-radius: 6px; max-height: 14px; margin-right: 28px; margin-top: 3px;}
CDownloadWidget[zoom="2.75x"] QProgressBar::chunk {border-radius: 6px;}
CDownloadWidget[zoom="2.75x"] QLabel#labelName {font-size: 44px;}
CDownloadWidget[zoom="2.75x"] QScrollBar:vertical {width: 28px;}
CDownloadWidget[zoom="2.75x"] QScrollBar::handle:vertical {min-height: 69px; border-radius: 8px;}
/* 3.0x */
CDownloadWidget[zoom="3x"] QPushButton#buttonCancel {padding-left: 18px; padding-right: 18px; min-height: 66px; font-size: 36px;}
CDownloadWidget[zoom="3x"] QProgressBar {border-radius: 6px; max-height: 15px; margin-right: 30px; margin-top: 3px;}
CDownloadWidget[zoom="3x"] QProgressBar::chunk {border-radius: 6px;}
CDownloadWidget[zoom="3x"] QLabel#labelName {font-size: 48px;}
CDownloadWidget[zoom="3x"] QScrollBar:vertical {width: 30px;}
CDownloadWidget[zoom="3x"] QScrollBar::handle:vertical {min-height: 75px; border-radius: 9px;}
/* 3.5x */
CDownloadWidget[zoom="3.5x"] QPushButton#buttonCancel {padding-left: 21px; padding-right: 21px; min-height: 77px; font-size: 42px;}
CDownloadWidget[zoom="3.5x"] QProgressBar {border-radius: 7px; max-height: 18px; margin-right: 35px; margin-top: 4px;}
CDownloadWidget[zoom="3.5x"] QProgressBar::chunk {border-radius: 7px;}
CDownloadWidget[zoom="3.5x"] QLabel#labelName {font-size: 56px;}
CDownloadWidget[zoom="3.5x"] QScrollBar:vertical {width: 35px;}
CDownloadWidget[zoom="3.5x"] QScrollBar::handle:vertical {min-height: 88px; border-radius: 11px;}
/* 4.0x */
CDownloadWidget[zoom="4x"] QPushButton#buttonCancel {padding-left: 24px; padding-right: 24px; min-height: 88px; font-size: 48px;}
CDownloadWidget[zoom="4x"] QProgressBar {border-radius: 8px; max-height: 20px; margin-right: 40px; margin-top: 4px;}
CDownloadWidget[zoom="4x"] QProgressBar::chunk {border-radius: 8px;}
CDownloadWidget[zoom="4x"] QLabel#labelName {font-size: 64px;}
CDownloadWidget[zoom="4x"] QScrollBar:vertical {width: 40px;}
CDownloadWidget[zoom="4x"] QScrollBar::handle:vertical {min-height: 100px; border-radius: 12px;}
/* 4.5x */
CDownloadWidget[zoom="4.5x"] QPushButton#buttonCancel {padding-left: 27px; padding-right: 27px; min-height: 99px; font-size: 54px;}
CDownloadWidget[zoom="4.5x"] QProgressBar {border-radius: 9px; max-height: 23px; margin-right: 45px; margin-top: 5px;}
CDownloadWidget[zoom="4.5x"] QProgressBar::chunk {border-radius: 9px;}
CDownloadWidget[zoom="4.5x"] QLabel#labelName {font-size: 72px;}
CDownloadWidget[zoom="4.5x"] QScrollBar:vertical {width: 45px;}
CDownloadWidget[zoom="4.5x"] QScrollBar::handle:vertical {min-height: 113px; border-radius: 14px;}
/* 5.0x */
CDownloadWidget[zoom="5x"] QPushButton#buttonCancel {padding-left: 30px; padding-right: 30px; min-height: 110px; font-size: 60px;}
CDownloadWidget[zoom="5x"] QProgressBar {border-radius: 10px; max-height: 25px; margin-right: 50px; margin-top: 5px;}
CDownloadWidget[zoom="5x"] QProgressBar::chunk {border-radius: 10px;}
CDownloadWidget[zoom="5x"] QLabel#labelName {font-size: 80px;}
CDownloadWidget[zoom="5x"] QScrollBar:vertical {width: 50px;}
CDownloadWidget[zoom="5x"] QScrollBar::handle:vertical {min-height: 125px; border-radius: 15px;}

View File

@ -128,7 +128,22 @@ QPushButton#toolButtonMain[class=normal]:hover {
/*border-bottom: 1px solid #b6b6b6;*/
/*}*/
QPushButton::menu-indicator {width: 0px; height: 0px;}
QPushButton::menu-indicator {
/*border: 1px solid white;*/
width: 10px;
height: 10px;
image: url(:/menu_indicator_normal_light.svg);
left: -2px;
top: -2px;
}
QPushButton::menu-indicator:disabled {
image: url(:/menu_indicator_pressed_light.svg);
}
QPushButton::menu-indicator:hover {
image: url(:/menu_indicator_hover_light.svg);
}
/*QPushButton[theme=dark]::menu-indicator {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 0 repeat repeat;*/
@ -142,7 +157,15 @@ QPushButton::menu-indicator {width: 0px; height: 0px;}
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 10 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px; height: 28px;}
QPushButton#toolButtonDownload {
background-origin: content;
padding: 6px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -10px;
left: -4px;
}
/**************************/
/* dark theme definitions */
@ -190,15 +213,13 @@ QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px;
}
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonMinimize:hover,
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:hover,
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload:hover
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:hover
{
background-color: #555;
}
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonMinimize:pressed,
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:pressed,
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload:pressed
#mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:pressed
{
background-color: #606060;
}
@ -231,8 +252,7 @@ QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px;
}
#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMinimize:hover,
#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover,
#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonDownload:hover
#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover
{
background-color: #555;
}
@ -254,6 +274,70 @@ QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px;
}
/* download widget */
QMenu#menuButtonDownload {
/*padding: 0;*/
border: 1px solid #d1d1d1;
background-color: #fafafa;
}
QMenu[hdpi]#menuButtonDownload {
border-width: 2px;
}
CDownloadWidget QProgressBar {
background-color: #cacaca;
border-color: #cacaca;
border-radius: 2px;
max-height: 5px;
margin-right: 10px;
margin-top: 1px;
min-width: 200px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 4px;
max-height: 10px;
margin-right: 20px;
margin-top: 2px;
min-width: 400px;
}
CDownloadWidget QProgressBar::chunk {
background-color: #2b86b7;
border-radius: 2px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 4px;
}
CDownloadWidget QPushButton#buttonCancel {
border: none;
margin: 0;
padding: 0;
color: #666666;
font-family: 'Open Sans',sans-serif,Arial;
font-size: 12px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 24px;
}
CDownloadWidget QLabel#labelName {
color: #666666;
font-size: 16px;
font-family: 'Open Sans',sans-serif,Arial;
}
CDownloadWidget[hdpi] QLabel#labelName {
color: #f00;
font-size: 32px;
}
/* ToolTip*/
#CToolTip>QLabel {

View File

@ -34,7 +34,47 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 1px;
}
QPushButton#toolButtonDownload {max-width: 50px; width: 50px; max-height: 35px; height: 35px;}
QPushButton::menu-indicator {
width: 13px;
height: 13px;
left: -2px;
top: -2px;
}
QPushButton#toolButtonDownload {
padding: 7px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -13px;
left: -5px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 1px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 2px;
max-height: 6px;
margin-right: 13px;
margin-top: 1px;
min-width: 500px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 2px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 15px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 20px;
}
/* ToolTip*/

View File

@ -35,7 +35,47 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 2px;
}
QPushButton#toolButtonDownload {max-width: 60px; width: 60px; max-height: 42px; height: 42px;}
QPushButton::menu-indicator {
width: 15px;
height: 15px;
left: -3px;
top: -2px;
}
QPushButton#toolButtonDownload {
padding: 9px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -15px;
left: -6px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 2px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 3px;
max-height: 8px;
margin-right: 15px;
margin-top: 2px;
min-width: 600px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 3px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 18px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 24px;
}
/* ToolTip*/

View File

@ -35,7 +35,47 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 2px;
}
QPushButton#toolButtonDownload {max-width: 70px; width: 70px; max-height: 49px; height: 49px;}
QPushButton::menu-indicator {
width: 18px;
height: 18px;
left: -4px;
top: -2px;
}
QPushButton#toolButtonDownload {
padding: 11px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -18px;
left: -7px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 2px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 3px;
max-height: 8px;
margin-right: 15px;
margin-top: 2px;
min-width: 600px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 3px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 18px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 24px;
}
/* ToolTip*/

View File

@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 3px;
}
QPushButton#toolButtonDownload {max-width: 100px; width: 100px; max-height: 70px; height: 70px;}
QPushButton::menu-indicator {
width: 25px;
height: 25px;
left: -5px;
top: -3px;
}
/*QPushButton[theme=dark]::menu-indicator:disabled {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/
/*}*/
/*QPushButton[theme=dark]::menu-indicator:hover {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {
padding: 15px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -25px;
left: -10px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 3px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 5px;
max-height: 13px;
margin-right: 25px;
margin-top: 3px;
min-width: 500px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 5px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 30px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 40px;
}
/* ToolTip*/

View File

@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 2px;
}
QPushButton#toolButtonDownload {max-width: 80px; width: 80px; max-height: 56px; height: 56px;}
QPushButton::menu-indicator {
width: 20px;
height: 20px;
left: -4px;
top: -2px;
}
/*QPushButton[theme=dark]::menu-indicator:disabled {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/
/*}*/
/*QPushButton[theme=dark]::menu-indicator:hover {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {
padding: 12px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -20px;
left: -8px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 2px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 4px;
max-height: 10px;
margin-right: 20px;
margin-top: 2px;
min-width: 400px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 4px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 24px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 32px;
}
/* ToolTip*/

View File

@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 4px;
}
QPushButton#toolButtonDownload {max-width: 140px; width: 140px; max-height: 98px; height: 98px;}
QPushButton::menu-indicator {
width: 35px;
height: 35px;
left: -7px;
top: -4px;
}
/*QPushButton[theme=dark]::menu-indicator:disabled {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/
/*}*/
/*QPushButton[theme=dark]::menu-indicator:hover {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {
padding: 21px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -35px;
left: -14px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 4px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 7px;
max-height: 18px;
margin-right: 35px;
margin-top: 4px;
min-width: 700px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 7px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 42px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 56px;
}
/* ToolTip*/

View File

@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 3px;
}
QPushButton#toolButtonDownload {max-width: 120px; width: 120px; max-height: 84px; height: 84px;}
QPushButton::menu-indicator {
width: 30px;
height: 30px;
left: -6px;
top: -3px;
}
/*QPushButton[theme=dark]::menu-indicator:disabled {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/
/*}*/
/*QPushButton[theme=dark]::menu-indicator:hover {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {
padding: 18px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -30px;
left: -12px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 3px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 6px;
max-height: 15px;
margin-right: 30px;
margin-top: 3px;
min-width: 600px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 6px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 36px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 48px;
}
/* ToolTip*/

View File

@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 5px;
}
QPushButton#toolButtonDownload {max-width: 180px; width: 180px; max-height: 126px; height: 126px;}
QPushButton::menu-indicator {
width: 45px;
height: 45px;
left: -9px;
top: -5px;
}
/*QPushButton[theme=dark]::menu-indicator:disabled {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/
/*}*/
/*QPushButton[theme=dark]::menu-indicator:hover {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {
padding: 27px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -45px;
left: -18px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 5px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 9px;
max-height: 23px;
margin-right: 45px;
margin-top: 5px;
min-width: 900px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 9px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 54px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 72px;
}
/* ToolTip*/

View File

@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 4px;
}
QPushButton#toolButtonDownload {max-width: 160px; width: 160px; max-height: 112px; height: 112px;}
QPushButton::menu-indicator {
width: 40px;
height: 40px;
left: -8px;
top: -4px;
}
/*QPushButton[theme=dark]::menu-indicator:disabled {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/
/*}*/
/*QPushButton[theme=dark]::menu-indicator:hover {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {
padding: 24px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -40px;
left: -16px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 4px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 8px;
max-height: 20px;
margin-right: 40px;
margin-top: 4px;
min-width: 800px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 8px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 48px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 64px;
}
/* ToolTip*/

View File

@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal],
border-bottom-width: 5px;
}
QPushButton#toolButtonDownload {max-width: 200px; width: 200px; max-height: 140px; height: 140px;}
QPushButton::menu-indicator {
width: 50px;
height: 50px;
left: -10px;
top: -5px;
}
/*QPushButton[theme=dark]::menu-indicator:disabled {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/
/*}*/
/*QPushButton[theme=dark]::menu-indicator:hover {*/
/*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/
/*}*/
QPushButton#toolButtonDownload {
padding: 30px;
}
QPushButton#toolButtonDownload::menu-indicator {
top: -50px;
left: -20px;
}
/* download widget */
QMenu[hdpi]#menuButtonDownload {
border-width: 5px;
}
CDownloadWidget[hdpi] QProgressBar {
border-radius: 10px;
max-height: 25px;
margin-right: 50px;
margin-top: 5px;
min-width: 1000px;
}
CDownloadWidget[hdpi] QProgressBar::chunk {
border-radius: 10px;
}
CDownloadWidget[hdpi] QPushButton#buttonCancel {
font-size: 60px;
}
CDownloadWidget[hdpi] QLabel#labelName {
font-size: 80px;
}
/* ToolTip*/

View File

@ -7,7 +7,8 @@
<file alias="message_info.svg">res/icons/message_info.svg</file>
<file alias="message_confirm.svg">res/icons/message_confirm.svg</file>
<file alias="message_warn.svg">res/icons/message_warn.svg</file>
<file alias="downloading.svg">res/icons/downloading.svg</file>
<file>res/icons/downloading.gif</file>
<file>res/icons/downloading_2x.gif</file>
<file alias="close.svg">res/icons/close.svg</file>
<file alias="close_light.svg">res/icons/close_light.svg</file>
<file alias="minimize.svg">res/icons/minimize.svg</file>
@ -85,7 +86,6 @@
<file alias="editor.qss">res/styles/editor.qss</file>
<file alias="message.qss">res/styles/message.qss</file>
<file alias="tabbar.qss">res/styles/tabbar.qss</file>
<file alias="download.qss">res/styles/download.qss</file>
</qresource>
<qresource prefix="/styles@1.5x">
<file alias="styles.qss">res/styles/styles@1.5x.qss</file>

View File

@ -31,81 +31,100 @@
*/
#include "components/cdownloadwidget.h"
#include "components/celipsislabel.h"
#include "cascapplicationmanagerwrapper.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QProgressBar>
#include <QPushButton>
#include <QMenu>
#include <QEvent>
#include <QActionEvent>
#include <QApplication>
#include <QScrollBar>
#include <QWidgetAction>
#include "qcefview.h"
#include "common/Types.h"
#include "windows/cwindowbase.h"
#define DOWNLOAD_WIDGET_MIN_SIZE QSize(450, 250)
#define MARGINS 6
#define SPACING 6
#include <QDebug>
#define DOWNLOAD_WIDGET_MAX_WIDTH 350
using namespace NSEditorApi;
CProfileMenuFilter::CProfileMenuFilter(QObject *parent)
: QObject(parent), _parentButton(NULL)
{}
class CDownloadWidget::CDownloadItem
bool CProfileMenuFilter::eventFilter(QObject * obj, QEvent *event)
{
if (!_parentButton)
return false;
QMenu * menu = dynamic_cast<QMenu*>(obj);
if ( event->type() == QEvent::Show && obj == _parentButton->menu() ) {
QPoint pos = ((QWidget*)_parentButton->parent())->mapToGlobal(_parentButton->pos());
pos += QPoint(_parentButton->width() - menu->width(), _parentButton->height() + 6);
_parentButton->menu()->move(pos);
return true;
}
return false;
}
void CProfileMenuFilter::setMenuButton(QPushButton * button)
{
_parentButton = button;
}
class CDownloadWidget::CDownloadItem {
public:
CDownloadItem(QWidget * w)
: _p_progress(w), _is_temp(true)
{}
QWidget * progress() const { return _p_progress; }
bool is_temporary() const { return _is_temp; }
void set_is_temporary(bool v) { _is_temp = v; }
private:
QWidget * _p_progress;
bool _is_temp;
};
CDownloadWidget::CDownloadWidget(QWidget *parent)
: QDialog(parent)
: QWidget(parent)
, CScalingWrapper(parent)
, m_pToolButton(new CPushButton)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
setMinimumSize(DOWNLOAD_WIDGET_MIN_SIZE);
setLayout(new QVBoxLayout);
m_defMargins = QMargins(layout()->contentsMargins());
m_defSpacing = layout()->spacing();
QVBoxLayout *main_lut = new QVBoxLayout(this);
main_lut->setContentsMargins(0, 0, 0, 0);
main_lut->setSpacing(0);
setLayout(main_lut);
connect(this, &CDownloadWidget::downloadCanceled, this, &CDownloadWidget::slot_downloadCanceled, Qt::QueuedConnection);
m_pArea = new QScrollArea(this);
m_pArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_pArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
m_pArea->setWidgetResizable(true);
m_pContentArea = new QWidget(m_pArea);
m_pContentArea->setObjectName("contentArea");
QVBoxLayout *lut = new QVBoxLayout(m_pContentArea);
lut->setContentsMargins(MARGINS, MARGINS, MARGINS, MARGINS);
lut->setSpacing(SPACING);
m_pContentArea->setLayout(lut);
m_pArea->setWidget(m_pContentArea);
main_lut->addWidget(m_pArea);
m_pContentArea->setGeometry(0, 0, width(), height());
connect(this, &CDownloadWidget::downloadCanceled, this, [=](int id) {
AscAppManager::getInstance().CancelDownload(id);
slot_downloadCanceled(id);
});
setMaximumWidth(DOWNLOAD_WIDGET_MAX_WIDTH);
m_pToolButton->setObjectName("toolButtonDownload");
m_pToolButton->setProperty("act", "tool");
m_pToolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
m_pToolButton->setVisible(false);
connect(m_pToolButton, &QPushButton::clicked, this, [=]() {
show();
});
m_pToolButton->setAnimatedIcon(":/downloading.svg");
QSpacerItem *spacer = new QSpacerItem(5, 5, QSizePolicy::Fixed, QSizePolicy::Expanding);
lut->addSpacerItem(spacer);
m_pToolButton->setFixedSize(QSize(33, TOOLBTN_HEIGHT));
m_pToolButton->setVisible(false, false);
QPair<QString,QString> _icon_download{":/res/icons/downloading.gif", ":/res/icons/downloading_2x.gif"};
m_pToolButton->setAnimatedIcon( _icon_download );
QMenu * menuDownload = new QMenu;
QWidgetAction * waction = new QWidgetAction(menuDownload);
waction->setDefaultWidget(this);
menuDownload->setObjectName("menuButtonDownload");
menuDownload->addAction(waction);
m_pToolButton->setMenu(menuDownload);
CProfileMenuFilter * eventFilter = new CProfileMenuFilter(this);
eventFilter->setMenuButton(m_pToolButton);
menuDownload->installEventFilter(eventFilter);
applyScaling(scaling());
}
CDownloadWidget::~CDownloadWidget()
@ -120,19 +139,15 @@ QPushButton * CDownloadWidget::toolButton()
QWidget * CDownloadWidget::addFile(const QString& fn, int id)
{
QWidget * widget = new QWidget(m_pContentArea);
QWidget * widget = new QWidget(this);
QGridLayout * grid = new QGridLayout;
CElipsisLabel * name = new CElipsisLabel(fn);
QLabel * name = new QLabel(fn);
name->setObjectName("labelName");
name->setEllipsisMode(Qt::ElideRight);
name->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
QProgressBar * progress = new QProgressBar;
progress->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
QPushButton * cancel = new QPushButton(tr("Cancel"));
cancel->setObjectName("buttonCancel");
cancel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
connect(cancel, &QPushButton::clicked, qApp, [=](){
connect(cancel, &QPushButton::clicked, [=](){
emit downloadCanceled(id);
});
@ -141,14 +156,14 @@ QWidget * CDownloadWidget::addFile(const QString& fn, int id)
grid->setColumnStretch(0, 1);
grid->setColumnStretch(1, 0);
grid->addWidget(name, 0, 0, 1, 1);
grid->addWidget(name, 0, 0, 1, -1);
grid->addWidget(progress, 1, 0, 1, 1);
grid->addWidget(cancel, 1, 1, 1, 1);
widget->setLayout(grid);
if (QVBoxLayout *lut = dynamic_cast<QVBoxLayout*>(m_pContentArea->layout()))
lut->insertWidget(lut->count() - 1, widget);
widget->show();
layout()->addWidget(widget);
updateLayoutGeomentry();
return widget;
}
@ -168,6 +183,8 @@ void CDownloadWidget::downloadProcess(void * info)
slot_downloadCanceled(id);
} else {
if (iter == m_mapDownloads.end()) {
// ADDREFINTERFACE(pData);
QString path = QString::fromStdWString(pData->get_FilePath()),
file_name = "Unconfirmed";
@ -188,10 +205,21 @@ void CDownloadWidget::downloadProcess(void * info)
}
}
}
updateProgress(iter, pData);
}
}
void CDownloadWidget::updateLayoutGeomentry()
{
adjustSize();
if (m_pToolButton && m_pToolButton->menu()) {
QActionEvent e(QEvent::ActionChanged, m_pToolButton->menu()->actions().at(0));
QApplication::sendEvent(m_pToolButton->menu(), &e);
}
}
void CDownloadWidget::slot_downloadCanceled(int id)
{
removeFile(id);
@ -207,29 +235,35 @@ void CDownloadWidget::removeFile(MapItem iter)
if (iter != m_mapDownloads.end()) {
CDownloadItem * di = static_cast<CDownloadItem *>((*iter).second);
// CAscDownloadFileInfo * pData = reinterpret_cast<CAscDownloadFileInfo *>(di->info());
// RELEASEINTERFACE(pData)
QWidget * pItemWidget = di->progress();
layout()->removeWidget(pItemWidget);
RELEASEOBJECT(pItemWidget)
RELEASEOBJECT(di)
updateLayoutGeomentry();
m_mapDownloads.erase(iter);
if (!m_mapDownloads.size() && m_pToolButton->isVisible()) {
m_pToolButton->deleteLater();
deleteLater();
}
m_pToolButton->menu()->close();
if (!m_mapDownloads.size() && m_pToolButton->isVisible())
m_pToolButton->hide();
}
}
void CDownloadWidget::updateProgress(MapItem iter, void * data)
{
CElipsisLabel * label_name;
QLabel * label_name;
QProgressBar * progress;
CDownloadItem * d_item;
CAscDownloadFileInfo * pData;
d_item = static_cast<CDownloadItem *>((*iter).second);
if (d_item) {
// pData = reinterpret_cast<CAscDownloadFileInfo *>(d_item->info());
pData = reinterpret_cast<CAscDownloadFileInfo *>(data);
progress = qobject_cast<QProgressBar *>(d_item->progress()->layout()->itemAt(1)->widget());
@ -241,10 +275,14 @@ void CDownloadWidget::updateProgress(MapItem iter, void * data)
QString path = QString().fromStdWString(pData->get_FilePath());
if (!path.isEmpty()) {
label_name = static_cast<CElipsisLabel*>(d_item->progress()->layout()->itemAt(0)->widget());
label_name->setText(getFileName(path));
label_name = qobject_cast<QLabel *>(d_item->progress()->layout()->itemAt(0)->widget());
QFontMetrics metrics(label_name->font());
label_name->setText(metrics.elidedText(getFileName(path), Qt::ElideRight, DOWNLOAD_WIDGET_MAX_WIDTH - 36));
d_item->set_is_temporary(false);
d_item->progress()->adjustSize();
if ( !m_pToolButton->isVisible()) {
m_pToolButton->setVisible(true);
}
@ -264,48 +302,61 @@ QString CDownloadWidget::getFileName(const QString& path) const
return "";
}
void CDownloadWidget::closeEvent(QCloseEvent *ev)
void CDownloadWidget::resizeEvent(QResizeEvent * e)
{
ev->ignore();
hide();
// qDebug() << "resize: " << e->size();
}
void CDownloadWidget::polish()
void CDownloadWidget::applyScaling(double factor)
{
style()->polish(this);
m_pArea->style()->polish(m_pArea);
m_pArea->verticalScrollBar()->style()->polish(m_pArea->verticalScrollBar());
m_pContentArea->style()->polish(m_pContentArea);
for (int i(0); i < m_pContentArea->layout()->count(); ++i) {
auto item = m_pContentArea->layout()->itemAt(i);
if (item && item->widget()) {
QWidget * _d_item = item->widget();
int j = _d_item->layout()->count();
while ( !(--j < 0) ) {
QWidget * _qw = _d_item->layout()->itemAt(j)->widget();
_qw->style()->polish(_qw);
}
if ( factor > 1 ) {
setProperty("hdpi", true);
m_pToolButton->menu()->setProperty("hdpi", true);
} else {
setProperty("hdpi", QVariant(QVariant::Invalid));
m_pToolButton->menu()->setProperty("hdpi", QVariant(QVariant::Invalid));
}
layout()->setContentsMargins(m_defMargins * factor);
layout()->setSpacing(int(m_defSpacing * factor));
m_pToolButton->setScaling(factor);
setMaximumWidth(int(DOWNLOAD_WIDGET_MAX_WIDTH * factor));
for (int i(0); i < layout()->count(); ++i) {
QWidget * _d_item = layout()->itemAt(i)->widget();
int j = _d_item->layout()->count();
while ( !(--j < 0) ) {
QWidget * _qw = _d_item->layout()->itemAt(j)->widget();
_qw->style()->unpolish(_qw);
_qw->style()->polish(_qw);
}
}
// qApp->setStyleSheet(qApp->styleSheet());
// style()->unpolish(this);
// style()->polish(this);
// update();
m_pToolButton->menu()->style()->unpolish(m_pToolButton->menu());
m_pToolButton->menu()->style()->polish(m_pToolButton->menu());
QPixmap::grabWidget(m_pToolButton->menu());
}
void CDownloadWidget::updateScalingFactor(double factor)
void CDownloadWidget::updateScalingFactor(double f)
{
setProperty("zoom", QString::number(factor) + "x");
setMinimumSize(DOWNLOAD_WIDGET_MIN_SIZE * factor);
m_pArea->verticalScrollBar()->setFixedWidth(qRound(10 * factor));
int mrg = qRound(MARGINS * factor);
m_pContentArea->layout()->setContentsMargins(mrg, mrg, mrg, mrg);
m_pContentArea->layout()->setSpacing(qRound(SPACING * factor));
m_pToolButton->setIconSize((QSizeF(20,20) * factor).toSize());
polish();
CScalingWrapper::updateScalingFactor(f);
applyScaling(scaling());
}
void CDownloadWidget::applyTheme(const QString &theme)
{
setProperty("uitheme", theme);
polish();
}
//void CDownloadWidget::updateProgress()
//{
// for (auto e : m_mapDownloads) {
// updateProgress(e);
// }
//}
//void CDownloadWidget::cancelAll()
//{

View File

@ -33,14 +33,25 @@
#ifndef CDOWNLOADWIDGET_H
#define CDOWNLOADWIDGET_H
#include <QDialog>
#include <QScrollArea>
#include <QWidget>
#include "cpushbutton.h"
#include "cscalingwrapper.h"
//class CProfileMenuFilter;
class CProfileMenuFilter : public QObject {
public:
CProfileMenuFilter(QObject *);
class CDownloadWidget : public QDialog
bool eventFilter(QObject *, QEvent *);
void setMenuButton(QPushButton *);
private:
QPushButton * _parentButton;
};
class CDownloadWidget : public QWidget, public CScalingWrapper
{
Q_OBJECT
class CDownloadItem;
typedef std::map<int, CDownloadItem *>::const_iterator MapItem;
@ -50,24 +61,27 @@ public:
void downloadProcess(void *);
QPushButton * toolButton();
// void updateProgress();
// void cancelAll();
void updateScalingFactor(double);
void applyTheme(const QString&);
void updateScalingFactor(double) override;
protected:
QWidget * addFile(const QString&, int);
void removeFile(int);
void removeFile(MapItem);
void updateLayoutGeomentry();
void updateProgress(MapItem, void *);
QString getFileName(const QString&) const;
void closeEvent(QCloseEvent *) final;
void applyScaling(double);
void resizeEvent(QResizeEvent *);
private:
void polish();
CPushButton * m_pToolButton = nullptr;
QScrollArea * m_pArea = nullptr;
QWidget *m_pContentArea = nullptr;
CPushButton * m_pToolButton;
std::map<int, CDownloadItem *> m_mapDownloads;
QMargins m_defMargins;
int m_defSpacing;
signals:
void downloadCanceled(int);

View File

@ -31,66 +31,179 @@
*/
#include "components/cpushbutton.h"
#include <QPainter>
#include <math.h>
#define ANIMATION_MS 2500
#include <QMovie>
#include <QStyleOption>
#include <QStylePainter>
#include <QGraphicsEffect>
#include <QDebug>
CPushButton::CPushButton(QWidget *parent)
: QPushButton(parent)
CPushButton::CPushButton(double scaling)
: CPushButton(Q_NULLPTR, scaling)
{}
CPushButton::CPushButton(QWidget *parent, double scaling)
: QPushButton(parent)
, _movie(Q_NULLPTR)
, _dpi_ratio(scaling)
{
setIconSize(QSize(16,16) * _dpi_ratio);
int START_OPACITY = 0;
QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(this);
effect->setOpacity(START_OPACITY);
setGraphicsEffect(effect);
_animation = new QPropertyAnimation(effect, "opacity");
_animation->setDuration(500);
_animation->setStartValue(START_OPACITY);
_animation->setEndValue(1.0);
connect(_animation, SIGNAL(finished()), this, SLOT(onAnimationFinished()));
}
CPushButton::~CPushButton()
{
if (m_animation) {
m_animation->stop();
m_animation->disconnect();
delete m_animation, m_animation = nullptr;
if (_movie) {
disconnect(_movie, SIGNAL(finished()), _movie, SLOT(start()));
_movie->stop();
delete _movie, _movie = NULL;
}
if ( _animation ) {
disconnect(_animation, SIGNAL(finished()));
delete _animation, _animation = NULL;
}
}
void CPushButton::setAnimatedIcon(const QString &path)
void CPushButton::setAnimatedIcon(QPair<QString, QString>& icon, bool autostart)
{
if (m_animation) {
m_animation->stop();
m_animation->disconnect();
delete m_animation, m_animation = nullptr;
_icon = QPair<QString,QString>(icon);
applyAnimatedIcon(_dpi_ratio > 1 ? _icon.first : _icon.second);
if ( autostart && _movie->frameCount() > 0 ) {
_movie->start();
}
if (m_renderer)
delete m_renderer, m_renderer = nullptr;
m_renderer = new QSvgRenderer(path, this);
m_animation = new QVariantAnimation(this);
m_animation->setStartValue(0.0);
m_animation->setKeyValueAt(0.5, 1.0);
m_animation->setEndValue(0.0);
m_animation->setDuration(ANIMATION_MS);
m_animation->setLoopCount(-1);
m_animation->setEasingCurve(QEasingCurve::Linear);
connect(m_animation, &QVariantAnimation::valueChanged, this, [=](const QVariant &val) {
double opacity = round(val.toReal() * 100) / 100;
if (qRound(opacity * 100) % 2 == 0) // frequency limitation
applyAnimatedIcon(opacity);
});
m_animation->start(QAbstractAnimation::KeepWhenStopped);
}
void CPushButton::applyAnimatedIcon(double opacity)
void CPushButton::applyAnimatedIcon(const QString& f)
{
if (m_renderer && m_renderer->isValid()) {
QSize icon_size = iconSize();
QImage img(icon_size, QImage::Format_ARGB32);
img.fill(Qt::transparent);
QPixmap pixmap = QPixmap::fromImage(img, Qt::NoFormatConversion);
if ( !f.isEmpty() ) {
if (Q_NULLPTR == _movie) {
_movie = new QMovie(f);
connect(_movie, SIGNAL(frameChanged(int)), this, SLOT(setButtonIcon(int)));
} else {
disconnect(_movie, SIGNAL(finished()), _movie, SLOT(start()));
QPainter painter(&pixmap);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.setRenderHint(QPainter::Antialiasing);
painter.setOpacity(opacity);
m_renderer->render(&painter, QRect(QPoint(0,0), icon_size));
painter.end();
setIcon(QIcon(pixmap));
_movie->stop();
_movie->setFileName(f);
}
if (_movie->loopCount() != -1) {
connect(_movie, SIGNAL(finished()), _movie, SLOT(start()));
}
}
}
void CPushButton::setButtonIcon(int frame)
{
Q_UNUSED(frame)
repaint();
}
void CPushButton::startIconAnimation(bool start)
{
if (_movie) {
if (start) {
if (_movie->state() != QMovie::Running)
_movie->start();
} else {
if (_movie->state() == QMovie::Running)
_movie->jumpToFrame(0);
_movie->stop();
}
}
}
void CPushButton::setEnabled(bool enable)
{
startIconAnimation(enable);
QPushButton::setEnabled(enable);
}
void CPushButton::setVisible(bool visible, bool animation)
{
animation ? setVisible(visible) : QPushButton::setVisible(visible);
}
void CPushButton::setVisible(bool visible)
{
if (visible != QPushButton::isVisible()) {
if (visible) QPushButton::setVisible(visible);
startIconAnimation(visible);
if( _animation->state() == QAbstractAnimation::Running )
_animation->pause();
_animation->setDirection(visible ? QAbstractAnimation::Forward : QAbstractAnimation::Backward);
_animation->start();
// if (!visible) QPushButton::setVisible(visible);
}
}
void CPushButton::paintEvent(QPaintEvent * e)
{
Q_UNUSED(e)
// QPushButton::paintEvent(e);
// return;
QStylePainter p(this);
p.setOpacity(255);
QStyleOptionButton option;
initStyleOption(&option);
option.icon = QIcon();
p.drawControl(QStyle::CE_PushButton, option);
p.drawItemPixmap( QRect(QPoint(0, int(5*_dpi_ratio)), option.iconSize),
Qt::AlignLeft | Qt::AlignVCenter, _movie->currentPixmap() );
}
void CPushButton::onAnimationFinished()
{
if (_animation->direction() == QAbstractAnimation::Backward) {
QPushButton::setVisible(false);
}
}
void CPushButton::setScaling(double s)
{
_dpi_ratio = s;
setIconSize(QSize(16, 16) * _dpi_ratio);
bool autostart = _movie->state() == QMovie::Running;
applyAnimatedIcon(_dpi_ratio > 1 ? _icon.second : _icon.first);
if ( !_fixed_size.isEmpty() )
QPushButton::setFixedSize( _fixed_size * _dpi_ratio );
if ( autostart )
_movie->start();
}
void CPushButton::setFixedSize(const QSize& s)
{
if ( !s.isEmpty() ) {
_fixed_size = QSize(s);
QPushButton::setFixedSize( _fixed_size * _dpi_ratio );
}
}

View File

@ -34,21 +34,43 @@
#define CPUSHBUTTON_H
#include <QPushButton>
#include <QSvgRenderer>
#include <QVariantAnimation>
#include <QPropertyAnimation>
class CPushButton : public QPushButton
{
Q_OBJECT
public:
explicit CPushButton(QWidget *parent = nullptr);
explicit CPushButton(QWidget *parent, double scaling);
CPushButton(double scaling = 1);
~CPushButton();
void setAnimatedIcon(const QString &path);
void setAnimatedIcon(QPair<QString, QString>&, bool autostart = false);
void startIconAnimation(bool);
void setEnabled(bool);
void setVisible(bool visible, bool animation);
void setScaling(double);
void setFixedSize(const QSize&);
protected:
void paintEvent(QPaintEvent *);
private:
void applyAnimatedIcon(double);
QVariantAnimation * m_animation = nullptr;
QSvgRenderer *m_renderer = nullptr;
QMovie * _movie;
QPropertyAnimation * _animation;
QPair<QString, QString> _icon;
QSize _fixed_size;
double _dpi_ratio;
void applyAnimatedIcon(const QString&);
signals:
public slots:
void setButtonIcon(int);
void setVisible(bool visible);
void onAnimationFinished();
};
#endif // CPUSHBUTTON_H

View File

@ -207,10 +207,6 @@ void CMainWindow::applyTheme(const std::wstring& theme)
m_pButtonMain->setIcon(MAIN_ICON_PATH, GetCurrentTheme().isDark() ? "logo-light" : "logo-dark");
m_pButtonMain->setIconSize(MAIN_ICON_SIZE * m_dpiRatio);
if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) {
m_pWidgetDownload->applyTheme(QString::fromStdWString(GetActualTheme(theme)));
m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton());
}
}
/** Private **/
@ -967,24 +963,17 @@ void CMainWindow::onDocumentSaveInnerRequest(int id)
void CMainWindow::onDocumentDownload(void * info)
{
CAscDownloadFileInfo *pData = reinterpret_cast<CAscDownloadFileInfo*>(info);
if (!pData->get_IsCanceled()) {
if ( !m_pWidgetDownload ) {
m_pWidgetDownload = new CDownloadWidget(this);
connect(m_pWidgetDownload, &QWidget::destroyed, this, [=]() {
m_pWidgetDownload = nullptr;
});
QHBoxLayout * layoutBtns = qobject_cast<QHBoxLayout *>(m_boxTitleBtns->layout());
layoutBtns->insertWidget(1, m_pWidgetDownload->toolButton());
m_pWidgetDownload->show();
std::vector<std::string> files{":/styles/download.qss"};
m_pWidgetDownload->setStyleSheet(Utils::readStylesheets(&files));
m_pWidgetDownload->applyTheme(m_pMainPanel->property("uitheme").toString());
m_pWidgetDownload->updateScalingFactor(m_dpiRatio);
m_pWidgetDownload->move(geometry().bottomRight() - m_pWidgetDownload->rect().bottomRight());
}
m_pWidgetDownload->downloadProcess(info);
if ( !m_pWidgetDownload ) {
m_pWidgetDownload = new CDownloadWidget(this);
QHBoxLayout * layoutBtns = qobject_cast<QHBoxLayout *>(m_boxTitleBtns->layout());
layoutBtns->insertWidget(1, m_pWidgetDownload->toolButton());
}
m_pWidgetDownload->downloadProcess(info);
// CAscDownloadFileInfo * pData = reinterpret_cast<CAscDownloadFileInfo *>(info);
// RELEASEINTERFACE(pData);
}
void CMainWindow::onDocumentFragmented(int id, bool isfragmented)
@ -1387,10 +1376,6 @@ void CMainWindow::updateScalingFactor(double dpiratio)
m_pTabs->reloadTabIcons();
m_pButtonMain->setIcon(MAIN_ICON_PATH, GetCurrentTheme().isDark() ? "logo-light" : "logo-dark");
m_pButtonMain->setIconSize(MAIN_ICON_SIZE * dpiratio);
if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) {
m_pWidgetDownload->updateScalingFactor(dpiratio);
m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton());
}
}
void CMainWindow::setScreenScalingFactor(double factor, bool resize)