From c0e6968b2bcf8f7c490db375980fbef976d15e7d Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 28 Sep 2018 17:01:48 -0700 Subject: [PATCH] Attempting to redesign Downloads --- onionshare/common.py | 15 +++++ onionshare_gui/share_mode/downloads.py | 74 +++++++++++++++++-------- share/images/downloads.png | Bin 0 -> 2120 bytes share/images/downloads_transparent.png | Bin 0 -> 2138 bytes share/images/uploads.png | Bin 0 -> 2076 bytes share/images/uploads_transparent.png | Bin 0 -> 2096 bytes share/locale/en.json | 4 +- 7 files changed, 69 insertions(+), 24 deletions(-) create mode 100644 share/images/downloads.png create mode 100644 share/images/downloads_transparent.png create mode 100644 share/images/uploads.png create mode 100644 share/images/uploads_transparent.png diff --git a/onionshare/common.py b/onionshare/common.py index 28b282c2..78b6e2d7 100644 --- a/onionshare/common.py +++ b/onionshare/common.py @@ -248,6 +248,15 @@ class Common(object): border-radius: 5px; }""", + 'downloads_uploads': """ + background-color: #ffffff; + """, + + 'downloads_uploads_empty_text': """ + QLabel { + color: #999999; + }""", + 'downloads_uploads_label': """ QLabel { font-weight: bold; @@ -255,6 +264,12 @@ class Common(object): text-align: center; }""", + 'downloads_uploads_clear': """ + QPushButton { + color: #3f7fcf; + } + """, + 'downloads_uploads_progress_bar': """ QProgressBar { border: 1px solid #4e064f; diff --git a/onionshare_gui/share_mode/downloads.py b/onionshare_gui/share_mode/downloads.py index a34796f1..3da88bc4 100644 --- a/onionshare_gui/share_mode/downloads.py +++ b/onionshare_gui/share_mode/downloads.py @@ -89,33 +89,64 @@ class Downloads(QtWidgets.QScrollArea): self.downloads = {} - self.setWindowTitle(strings._('gui_downloads', True)) - self.setWidgetResizable(True) - self.setMinimumHeight(150) self.setMinimumWidth(350) - self.setWindowIcon(QtGui.QIcon(common.get_resource_path('images/logo.png'))) - self.setWindowFlags(QtCore.Qt.Sheet | QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.CustomizeWindowHint) + self.setStyleSheet(self.common.css['downloads_uploads']) + + # Scroll bar self.vbar = self.verticalScrollBar() self.vbar.rangeChanged.connect(self.resizeScroll) + # When there are no downloads + empty_image = QtWidgets.QLabel() + empty_image.setAlignment(QtCore.Qt.AlignCenter) + empty_image.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/downloads_transparent.png')))) + empty_text = QtWidgets.QLabel(strings._('gui_no_downloads', True)) + empty_text.setAlignment(QtCore.Qt.AlignCenter) + empty_text.setStyleSheet(self.common.css['downloads_uploads_empty_text']) + empty_layout = QtWidgets.QVBoxLayout() + empty_layout.addStretch() + empty_layout.addWidget(empty_image) + empty_layout.addWidget(empty_text) + empty_layout.addStretch() + self.empty = QtWidgets.QWidget() + self.empty.setLayout(empty_layout) + + # When there are downloads downloads_label = QtWidgets.QLabel(strings._('gui_downloads', True)) downloads_label.setStyleSheet(self.common.css['downloads_uploads_label']) - self.no_downloads_label = QtWidgets.QLabel(strings._('gui_no_downloads', True)) - self.clear_history_button = QtWidgets.QPushButton(strings._('gui_clear_history', True)) - self.clear_history_button.clicked.connect(self.reset) - self.clear_history_button.hide() + clear_button = QtWidgets.QPushButton(strings._('gui_clear_history', True)) + clear_button.setStyleSheet(self.common.css['downloads_uploads_clear']) + clear_button.setFlat(True) + clear_button.clicked.connect(self.reset) + download_header = QtWidgets.QHBoxLayout() + download_header.addWidget(downloads_label) + download_header.addStretch() + download_header.addWidget(clear_button) + self.not_empty = QtWidgets.QWidget() + self.not_empty.setLayout(download_header) self.downloads_layout = QtWidgets.QVBoxLayout() - widget = QtWidgets.QWidget() + # Layout + self.widget = QtWidgets.QWidget() layout = QtWidgets.QVBoxLayout() - layout.addWidget(downloads_label) - layout.addWidget(self.no_downloads_label) - layout.addWidget(self.clear_history_button) + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(self.empty) + layout.addWidget(self.not_empty) layout.addLayout(self.downloads_layout) layout.addStretch() - widget.setLayout(layout) - self.setWidget(widget) + self.widget.setLayout(layout) + self.setWidget(self.widget) + + # Reset once at the beginning + self.reset() + + def resizeEvent(self, event): + """ + When the widget resizes, resize the inner widget to match + """ + #self.empty.resize(self.width()-2, self.width()-2) + pass def resizeScroll(self, minimum, maximum): """ @@ -127,10 +158,9 @@ class Downloads(QtWidgets.QScrollArea): """ Add a new download progress bar. """ - # Hide the no_downloads_label - self.no_downloads_label.hide() - # Show the clear_history_button - self.clear_history_button.show() + # Hide empty, show not empty + self.empty.hide() + self.not_empty.show() # Add it to the list download = Download(self.common, download_id, total_bytes) @@ -158,6 +188,6 @@ class Downloads(QtWidgets.QScrollArea): download.progress_bar.close() self.downloads = {} - self.no_downloads_label.show() - self.clear_history_button.hide() - self.resize(self.sizeHint()) + # Hide not empty, show empty + self.not_empty.hide() + self.empty.show() diff --git a/share/images/downloads.png b/share/images/downloads.png new file mode 100644 index 0000000000000000000000000000000000000000..ad879b6e0f80dbfa3c82459e645d52f1412caf3a GIT binary patch literal 2120 zcmV-O2)Fl%P)T2h~YL zK~#9!?VVp}Th|@OKf01F)%Kl{W9HOJRQTP1#AYs39JVKz!snZXaxM?&=_zZ zm;n9(M1XPN0T5L+_1{iigUbPE+kqf(0B{3dgGJ5)kAe4qAyrd9S#tmtS!o4!0mp#~ zi_Oger+~1ksaIAlKt)!3qDkJg0a`YgJAjC)sWVm>kSv1tCU6(H;~+eQ?K{9-QK!=O zK+(U2fhtN<)4(n>`$?CH@a~Ecbu}oeYU;O30-z!*2Z7T-EvrjY!0W1}{@zF-ZiDcC z3-kj%R-b%;67UA?%4XiEQ1HP|n z>SQ4&d5SP}--OviDQbhbHlOJpC|ujWhT)}74I6=&s;NoSny?}(U)j}cTYuI{*Bf2b zt*--Ma(t4Dzq-hkKVGq|Ijfqw(X>%mbh6*Gqvi+SI!I?0UO3pkBtdgr}eWlgz5a*zgIPkQcwXNS+Z^|(y>vT~7#oX4`>6x$E zXUZ`qt5&ecAD~!Ov3+46nM|5;j0M^(nB?t&VJB*tm`|8;j719P1yC$JI*1z?)@8IdwBFK=J6YqRc0!Dg>()9=OX) zE1i9veE8oF7ym+oA^Z(~%dgJg;3qT~T4uYmuhVQZyV3zXZdU32m;34J>st0%TX!3S z*9Y19!dA=RZGB-YgVzUX>uy{2c~@T-{g?aAGFaA57#X0w zr`>dT?LF-bj0{j)pMLVRt$CZ7o>;LESTA^B(5#YEJug+B3J<}zgY=y0F%4eNsUCuF z2k}&R4Areb1(yOmU}v!EcDvbqXg9q>y@t!`9qMKGq20LMZfw>80FQXZY?*bJ%ldbY zBuS!WUkdXwJRz-E^sD?b7LluRZ~yOS4gU0}m^3VVEV|6li!>ty6QIqPxSq=q)B(fCYb zLFM23=RHEtn?6hZsf7M^sHx2$^n8eiUp_48oW^Gwsqxq3Jg&xHQ!u=TUp}+~9>97D zXtSc^;Il!-J|8RSoP2I#p*MQ$^D%>Bn9?#_g-O9h-CAzIvNuFCMef z#1;vVt+a5m<0Rqt!?v#DC6h_Q?}s_ranfp24IZGe8xs1)Jx8?=E9NVkV!V9x7YTjWqvJXgJd^i>b(>1KXzKI8ZEbMtg>>2@66l92C#1Vqu_3wB(wi5MO0I*5K2UGZJ?vnUjY_Pn;I*a0IWqf~$q;At)W^(0Bc)iehvNox4{^)te{yw&91L-sjG7mnv&K4W4*Ft)eVsuW` z)T4#~3W(Q$rvEc|qpGGh=bSI+Tbi9oCrUthC!Hv#Jy|Jh(w;1VIkSc#&Z?SP(3bdO zCasO=X_D4lvlZ8d)c|9ne;8e31I9-5Y{3P|&^v8wB*e)Xs$`8hjaZJvBOe94fv?0o zakb?ToC1!hnmS;lka7x8gEDR9Q&eaNrM(n34eT%ro~a&~;*D>jC$A`#{0m>BFNXG; yU2r)Occ}tQfmu!kZz9a{j}e#%bJhPG#{U3#k;&MKJ6Qq%0000Iz^0 literal 0 HcmV?d00001 diff --git a/share/images/downloads_transparent.png b/share/images/downloads_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..9920709707a9dc6e3e9c59f5d5ab9d6a1fc21026 GIT binary patch literal 2138 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 a#{U3{;?ogoegf_Q0000