diff --git a/onionshare_gui/gui_common.py b/onionshare_gui/gui_common.py
index 47ffd787..59316a6e 100644
--- a/onionshare_gui/gui_common.py
+++ b/onionshare_gui/gui_common.py
@@ -74,13 +74,8 @@ class GuiCommon:
}""",
"mode_header_label": """
QLabel {
- color: #ffffff;
- background-color: #4e064f;
- border: 0;
- font-weight: bold;
- font-size: 18px;
- border-radius: 0;
- padding: 10px 0 10px 0;
+ color: #333333;
+ font-size: 30px;
}""",
"settings_button": """
QPushButton {
@@ -132,7 +127,7 @@ class GuiCommon:
QPushButton {
background-color: #5fa416;
color: #ffffff;
- padding: 10px;
+ padding: 10px 30px 10px 30px;
border: 0;
border-radius: 5px;
}""",
@@ -140,7 +135,7 @@ class GuiCommon:
QPushButton {
background-color: #4c8211;
color: #ffffff;
- padding: 10px;
+ padding: 10px 30px 10px 30px;
border: 0;
border-radius: 5px;
font-style: italic;
@@ -149,7 +144,7 @@ class GuiCommon:
QPushButton {
background-color: #d0011b;
color: #ffffff;
- padding: 10px;
+ padding: 10px 30px 10px 30px;
border: 0;
border-radius: 5px;
}""",
@@ -214,6 +209,21 @@ class GuiCommon:
QLabel {
color: #cc0000;
}""",
+ # New tab
+ "new_tab_button_image": """
+ QLabel {
+ padding: 30px;
+ }
+ """,
+ "new_tab_button_text": """
+ QLabel {
+ border: 1px solid #efeff0;
+ border-radius: 4px;
+ background-color: #ffffff;
+ text-align: center;
+ color: #4e0d4e;
+ }
+ """,
# Share mode and child widget styles
"share_delete_all_files_button": """
QPushButton {
@@ -239,9 +249,14 @@ class GuiCommon:
color: #333333;
}
""",
+ "share_file_selection_drop_here_header_label": """
+ QLabel {
+ color: #333333;
+ font-size: 30px;
+ }""",
"share_file_selection_drop_here_label": """
QLabel {
- color: #999999;
+ color: #666666;
}""",
"share_file_selection_drop_count_label": """
QLabel {
diff --git a/onionshare_gui/tab/mode/__init__.py b/onionshare_gui/tab/mode/__init__.py
index fc79d0ad..a527ef0c 100644
--- a/onionshare_gui/tab/mode/__init__.py
+++ b/onionshare_gui/tab/mode/__init__.py
@@ -93,12 +93,6 @@ class Mode(QtWidgets.QWidget):
self.starting_server_early.connect(self.start_server_early)
self.starting_server_error.connect(self.start_server_error)
- # Header
- # Note: It's up to the downstream Mode to add this to its layout
- self.header_label = QtWidgets.QLabel()
- self.header_label.setStyleSheet(self.common.gui.css["mode_header_label"])
- self.header_label.setAlignment(QtCore.Qt.AlignHCenter)
-
# Primary action
# Note: It's up to the downstream Mode to add this to its layout
self.primary_action_layout = QtWidgets.QVBoxLayout()
diff --git a/onionshare_gui/tab/mode/chat_mode/__init__.py b/onionshare_gui/tab/mode/chat_mode/__init__.py
index 52b61592..d255fcbd 100644
--- a/onionshare_gui/tab/mode/chat_mode/__init__.py
+++ b/onionshare_gui/tab/mode/chat_mode/__init__.py
@@ -47,8 +47,20 @@ class ChatMode(Mode):
# Create the Web object
self.web = Web(self.common, True, self.settings, "chat")
- # Header
- self.header_label.setText(strings._("gui_new_tab_chat_button"))
+ # Chat image
+ self.image_label = QtWidgets.QLabel()
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(self.common.get_resource_path("images/mode_chat.png"))
+ )
+ )
+ self.image_label.setFixedSize(300, 300)
+ image_layout = QtWidgets.QVBoxLayout()
+ image_layout.addStretch()
+ image_layout.addWidget(self.image_label)
+ image_layout.addStretch()
+ self.image = QtWidgets.QWidget()
+ self.image.setLayout(image_layout)
# Server status
self.server_status.set_mode("chat")
@@ -59,6 +71,10 @@ class ChatMode(Mode):
self.server_status.web = self.web
self.server_status.update()
+ # Header
+ header_label = QtWidgets.QLabel(strings._("gui_new_tab_chat_button"))
+ header_label.setStyleSheet(self.common.gui.css["mode_header_label"])
+
# Top bar
top_bar_layout = QtWidgets.QHBoxLayout()
top_bar_layout.addStretch()
@@ -66,17 +82,19 @@ class ChatMode(Mode):
# Main layout
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.addLayout(top_bar_layout)
+ self.main_layout.addStretch()
+ self.main_layout.addWidget(header_label)
self.main_layout.addWidget(self.primary_action)
self.main_layout.addStretch()
self.main_layout.addWidget(MinimumWidthWidget(700))
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
+ self.column_layout.addWidget(self.image)
self.column_layout.addLayout(self.main_layout)
# Wrapper layout
self.wrapper_layout = QtWidgets.QVBoxLayout()
- self.wrapper_layout.addWidget(self.header_label)
self.wrapper_layout.addLayout(self.column_layout)
self.setLayout(self.wrapper_layout)
diff --git a/onionshare_gui/tab/mode/file_selection.py b/onionshare_gui/tab/mode/file_selection.py
index 5a9e5d59..bcff07cb 100644
--- a/onionshare_gui/tab/mode/file_selection.py
+++ b/onionshare_gui/tab/mode/file_selection.py
@@ -25,42 +25,55 @@ from onionshare import strings
from ...widgets import Alert, AddFileDialog
-class DropHereLabel(QtWidgets.QLabel):
+class DropHereWidget(QtWidgets.QWidget):
"""
When there are no files or folders in the FileList yet, display the
'drop files here' message and graphic.
"""
- def __init__(self, common, parent, image=False):
- self.parent = parent
- super(DropHereLabel, self).__init__(parent=parent)
-
+ def __init__(self, common, image_filename, header_text, w, h, parent):
+ super(DropHereWidget, self).__init__(parent)
self.common = common
-
self.setAcceptDrops(True)
- self.setAlignment(QtCore.Qt.AlignCenter)
- if image:
- self.setPixmap(
- QtGui.QPixmap.fromImage(
- QtGui.QImage(
- self.common.get_resource_path("images/logo_transparent.png")
- )
- )
- )
- else:
- self.setText(strings._("gui_drag_and_drop"))
- self.setStyleSheet(
- self.common.gui.css["share_file_selection_drop_here_label"]
+ self.image_label = QtWidgets.QLabel(parent=self)
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(self.common.get_resource_path(image_filename))
)
+ )
+ self.image_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.image_label.show()
+ self.header_label = QtWidgets.QLabel(parent=self)
+ self.header_label.setText(header_text)
+ self.header_label.setStyleSheet(
+ self.common.gui.css["share_file_selection_drop_here_header_label"]
+ )
+ self.header_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.header_label.show()
+
+ self.text_label = QtWidgets.QLabel(parent=self)
+ self.text_label.setText(strings._("gui_drag_and_drop"))
+ self.text_label.setStyleSheet(
+ self.common.gui.css["share_file_selection_drop_here_label"]
+ )
+ self.text_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.text_label.show()
+
+ self.resize(w, h)
self.hide()
def dragEnterEvent(self, event):
- self.parent.drop_here_image.hide()
- self.parent.drop_here_text.hide()
+ self.hide()
event.accept()
+ def resize(self, w, h):
+ self.setGeometry(0, 0, w, h)
+ self.image_label.setGeometry(0, 0, w, h - 100)
+ self.header_label.setGeometry(0, 340, w, h - 340)
+ self.text_label.setGeometry(0, 410, w, h - 410)
+
class DropCountLabel(QtWidgets.QLabel):
"""
@@ -93,18 +106,23 @@ class FileList(QtWidgets.QListWidget):
files_dropped = QtCore.pyqtSignal()
files_updated = QtCore.pyqtSignal()
- def __init__(self, common, parent=None):
+ def __init__(self, common, background_image_filename, header_text, parent=None):
super(FileList, self).__init__(parent)
-
self.common = common
-
self.setAcceptDrops(True)
+
self.setIconSize(QtCore.QSize(32, 32))
self.setSortingEnabled(True)
self.setMinimumHeight(160)
self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
- self.drop_here_image = DropHereLabel(self.common, self, True)
- self.drop_here_text = DropHereLabel(self.common, self, False)
+ self.drop_here = DropHereWidget(
+ self.common,
+ background_image_filename,
+ header_text,
+ self.width(),
+ self.height(),
+ self,
+ )
self.drop_count = DropCountLabel(self.common, self)
self.resizeEvent(None)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
@@ -115,11 +133,9 @@ class FileList(QtWidgets.QListWidget):
"""
# file list should have a background image if empty
if self.count() == 0:
- self.drop_here_image.show()
- self.drop_here_text.show()
+ self.drop_here.show()
else:
- self.drop_here_image.hide()
- self.drop_here_text.hide()
+ self.drop_here.hide()
def server_started(self):
"""
@@ -144,9 +160,7 @@ class FileList(QtWidgets.QListWidget):
"""
When the widget is resized, resize the drop files image and text.
"""
- offset = 70
- self.drop_here_image.setGeometry(0, 0, self.width(), self.height() - offset)
- self.drop_here_text.setGeometry(0, offset, self.width(), self.height() - offset)
+ self.drop_here.resize(self.width(), self.height())
if self.count() > 0:
# Add and delete an empty item, to force all items to get redrawn
@@ -177,7 +191,7 @@ class FileList(QtWidgets.QListWidget):
size_hint = self.drop_count.sizeHint()
self.drop_count.setGeometry(
- self.width() - size_hint.width() - 10,
+ self.width() - size_hint.width() - 30,
self.height() - size_hint.height() - 10,
size_hint.width(),
size_hint.height(),
@@ -313,7 +327,7 @@ class FileSelection(QtWidgets.QVBoxLayout):
delete the files and folders.
"""
- def __init__(self, common, parent):
+ def __init__(self, common, background_image_filename, header_text, parent):
super(FileSelection, self).__init__()
self.common = common
@@ -322,7 +336,7 @@ class FileSelection(QtWidgets.QVBoxLayout):
self.server_on = False
# File list
- self.file_list = FileList(self.common)
+ self.file_list = FileList(self.common, background_image_filename, header_text)
self.file_list.itemSelectionChanged.connect(self.update)
self.file_list.files_dropped.connect(self.update)
self.file_list.files_updated.connect(self.update)
diff --git a/onionshare_gui/tab/mode/receive_mode/__init__.py b/onionshare_gui/tab/mode/receive_mode/__init__.py
index 92cd17fa..6f1bc7f5 100644
--- a/onionshare_gui/tab/mode/receive_mode/__init__.py
+++ b/onionshare_gui/tab/mode/receive_mode/__init__.py
@@ -40,8 +40,20 @@ class ReceiveMode(Mode):
# Create the Web object
self.web = Web(self.common, True, self.settings, "receive")
- # Header
- self.header_label.setText(strings._("gui_new_tab_receive_button"))
+ # Receive image
+ self.image_label = QtWidgets.QLabel()
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(self.common.get_resource_path("images/mode_receive.png"))
+ )
+ )
+ self.image_label.setFixedSize(300, 300)
+ image_layout = QtWidgets.QVBoxLayout()
+ image_layout.addStretch()
+ image_layout.addWidget(self.image_label)
+ image_layout.addStretch()
+ self.image = QtWidgets.QWidget()
+ self.image.setLayout(image_layout)
# Settings
data_dir_label = QtWidgets.QLabel(
@@ -97,6 +109,10 @@ class ReceiveMode(Mode):
),
)
+ # Header
+ header_label = QtWidgets.QLabel(strings._("gui_new_tab_receive_button"))
+ header_label.setStyleSheet(self.common.gui.css["mode_header_label"])
+
# Receive mode warning
receive_warning = QtWidgets.QLabel(strings._("gui_receive_mode_warning"))
receive_warning.setMinimumHeight(80)
@@ -110,6 +126,8 @@ class ReceiveMode(Mode):
# Main layout
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.addLayout(top_bar_layout)
+ self.main_layout.addStretch()
+ self.main_layout.addWidget(header_label)
self.main_layout.addWidget(receive_warning)
self.main_layout.addWidget(self.primary_action)
self.main_layout.addStretch()
@@ -117,12 +135,12 @@ class ReceiveMode(Mode):
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
+ self.column_layout.addWidget(self.image)
self.column_layout.addLayout(self.main_layout)
self.column_layout.addWidget(self.history, stretch=1)
# Wrapper layout
self.wrapper_layout = QtWidgets.QVBoxLayout()
- self.wrapper_layout.addWidget(self.header_label)
self.wrapper_layout.addLayout(self.column_layout)
self.setLayout(self.wrapper_layout)
diff --git a/onionshare_gui/tab/mode/share_mode/__init__.py b/onionshare_gui/tab/mode/share_mode/__init__.py
index a81f83d4..aa386e3d 100644
--- a/onionshare_gui/tab/mode/share_mode/__init__.py
+++ b/onionshare_gui/tab/mode/share_mode/__init__.py
@@ -47,9 +47,6 @@ class ShareMode(Mode):
# Create the Web object
self.web = Web(self.common, True, self.settings, "share")
- # Header
- self.header_label.setText(strings._("gui_new_tab_share_button"))
-
# Settings
self.autostop_sharing_checkbox = QtWidgets.QCheckBox()
self.autostop_sharing_checkbox.clicked.connect(
@@ -68,7 +65,12 @@ class ShareMode(Mode):
)
# File selection
- self.file_selection = FileSelection(self.common, self)
+ self.file_selection = FileSelection(
+ self.common,
+ "images/mode_share.png",
+ strings._("gui_new_tab_share_button"),
+ self,
+ )
if self.filenames:
for filename in self.filenames:
self.file_selection.file_list.add_file(filename)
@@ -162,7 +164,6 @@ class ShareMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QVBoxLayout()
- self.wrapper_layout.addWidget(self.header_label)
self.wrapper_layout.addLayout(self.column_layout)
self.setLayout(self.wrapper_layout)
diff --git a/onionshare_gui/tab/mode/website_mode/__init__.py b/onionshare_gui/tab/mode/website_mode/__init__.py
index 6199812c..c520d8f7 100644
--- a/onionshare_gui/tab/mode/website_mode/__init__.py
+++ b/onionshare_gui/tab/mode/website_mode/__init__.py
@@ -49,9 +49,6 @@ class WebsiteMode(Mode):
# Create the Web object
self.web = Web(self.common, True, self.settings, "website")
- # Header
- self.header_label.setText(strings._("gui_new_tab_website_button"))
-
# Settings
self.disable_csp_checkbox = QtWidgets.QCheckBox()
self.disable_csp_checkbox.clicked.connect(self.disable_csp_checkbox_clicked)
@@ -68,7 +65,12 @@ class WebsiteMode(Mode):
)
# File selection
- self.file_selection = FileSelection(self.common, self)
+ self.file_selection = FileSelection(
+ self.common,
+ "images/mode_website.png",
+ strings._("gui_new_tab_website_button"),
+ self,
+ )
if self.filenames:
for filename in self.filenames:
self.file_selection.file_list.add_file(filename)
@@ -162,7 +164,6 @@ class WebsiteMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QVBoxLayout()
- self.wrapper_layout.addWidget(self.header_label)
self.wrapper_layout.addLayout(self.column_layout)
self.setLayout(self.wrapper_layout)
diff --git a/onionshare_gui/tab/server_status.py b/onionshare_gui/tab/server_status.py
index 71c6c228..b26a1223 100644
--- a/onionshare_gui/tab/server_status.py
+++ b/onionshare_gui/tab/server_status.py
@@ -129,8 +129,12 @@ class ServerStatus(QtWidgets.QWidget):
url_layout.addLayout(url_buttons_layout)
# Add the widgets
+ button_layout = QtWidgets.QHBoxLayout()
+ button_layout.addWidget(self.server_button)
+ button_layout.addStretch()
+
layout = QtWidgets.QVBoxLayout()
- layout.addWidget(self.server_button)
+ layout.addLayout(button_layout)
layout.addLayout(url_layout)
self.setLayout(layout)
diff --git a/onionshare_gui/tab/tab.py b/onionshare_gui/tab/tab.py
index 4f006949..604d1acf 100644
--- a/onionshare_gui/tab/tab.py
+++ b/onionshare_gui/tab/tab.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
import queue
-from PyQt5 import QtCore, QtWidgets, QtGui
+from PyQt5 import QtCore, QtWidgets, QtGui, QtSvg
from onionshare import strings
from onionshare.onionshare import OnionShare
@@ -35,6 +35,35 @@ from .server_status import ServerStatus
from ..widgets import Alert
+class NewTabButton(QtWidgets.QPushButton):
+ def __init__(self, common, image_filename, text):
+ super(NewTabButton, self).__init__()
+ self.common = common
+
+ self.setFixedSize(280, 280)
+
+ # Image
+ self.image_label = QtWidgets.QLabel(parent=self)
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(self.common.get_resource_path(image_filename))
+ )
+ )
+ self.image_label.setFixedSize(280, 280)
+ self.image_label.setStyleSheet(self.common.gui.css["new_tab_button_image"])
+ self.image_label.setGeometry(0, 0, self.width(), self.height())
+ self.image_label.show()
+
+ # Text
+ self.text_label = QtWidgets.QLabel(text, parent=self)
+ self.text_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.text_label.setStyleSheet(self.common.gui.css["new_tab_button_text"])
+ self.text_label.setGeometry(
+ (self.width() - 200) / 2, self.height() - 40, 200, 30
+ )
+ self.text_label.show()
+
+
class Tab(QtWidgets.QWidget):
"""
A GUI tab, you know, sort of like in a web browser
@@ -67,69 +96,55 @@ class Tab(QtWidgets.QWidget):
# Start the OnionShare app
self.app = OnionShare(common, self.common.gui.onion, self.common.gui.local_only)
- # Widgets to display on a new tab
- self.share_button = QtWidgets.QPushButton(strings._("gui_new_tab_share_button"))
- self.share_button.setStyleSheet(self.common.gui.css["mode_new_tab_button"])
- share_description = QtWidgets.QLabel(strings._("gui_new_tab_share_description"))
- share_description.setWordWrap(True)
+ # New tab buttons
+ self.share_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_share.png",
+ strings._("gui_new_tab_share_button"),
+ )
self.share_button.clicked.connect(self.share_mode_clicked)
- self.receive_button = QtWidgets.QPushButton(
- strings._("gui_new_tab_receive_button")
+ self.receive_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_receive.png",
+ strings._("gui_new_tab_receive_button"),
)
- self.receive_button.setStyleSheet(self.common.gui.css["mode_new_tab_button"])
self.receive_button.clicked.connect(self.receive_mode_clicked)
- receive_description = QtWidgets.QLabel(
- strings._("gui_new_tab_receive_description")
- )
- receive_description.setWordWrap(True)
- self.website_button = QtWidgets.QPushButton(
- strings._("gui_new_tab_website_button")
+ self.website_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_website.png",
+ strings._("gui_new_tab_website_button"),
)
- self.website_button.setStyleSheet(self.common.gui.css["mode_new_tab_button"])
self.website_button.clicked.connect(self.website_mode_clicked)
- website_description = QtWidgets.QLabel(
- strings._("gui_new_tab_website_description")
- )
- website_description.setWordWrap(True)
- self.chat_button = QtWidgets.QPushButton(
- strings._("gui_new_tab_chat_button")
+ self.chat_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_chat.png",
+ strings._("gui_new_tab_chat_button"),
)
- self.chat_button.setStyleSheet(self.common.gui.css["mode_new_tab_button"])
self.chat_button.clicked.connect(self.chat_mode_clicked)
- chat_description = QtWidgets.QLabel(
- strings._("gui_new_tab_chat_description")
- )
- chat_description.setWordWrap(True)
+
+ new_tab_top_layout = QtWidgets.QHBoxLayout()
+ new_tab_top_layout.addStretch()
+ new_tab_top_layout.addWidget(self.share_button)
+ new_tab_top_layout.addWidget(self.receive_button)
+ new_tab_top_layout.addStretch()
+
+ new_tab_bottom_layout = QtWidgets.QHBoxLayout()
+ new_tab_bottom_layout.addStretch()
+ new_tab_bottom_layout.addWidget(self.website_button)
+ new_tab_bottom_layout.addWidget(self.chat_button)
+ new_tab_bottom_layout.addStretch()
new_tab_layout = QtWidgets.QVBoxLayout()
- new_tab_layout.addStretch(1)
- new_tab_layout.addWidget(self.share_button)
- new_tab_layout.addWidget(share_description)
- new_tab_layout.addSpacing(50)
- new_tab_layout.addWidget(self.receive_button)
- new_tab_layout.addWidget(receive_description)
- new_tab_layout.addSpacing(50)
- new_tab_layout.addWidget(self.website_button)
- new_tab_layout.addWidget(website_description)
- new_tab_layout.addSpacing(50)
- new_tab_layout.addWidget(self.chat_button)
- new_tab_layout.addWidget(chat_description)
- new_tab_layout.addStretch(3)
-
- new_tab_inner = QtWidgets.QWidget()
- new_tab_inner.setFixedWidth(500)
- new_tab_inner.setLayout(new_tab_layout)
-
- new_tab_outer_layout = QtWidgets.QHBoxLayout()
- new_tab_outer_layout.addStretch()
- new_tab_outer_layout.addWidget(new_tab_inner)
- new_tab_outer_layout.addStretch()
+ new_tab_layout.addStretch()
+ new_tab_layout.addLayout(new_tab_top_layout)
+ new_tab_layout.addLayout(new_tab_bottom_layout)
+ new_tab_layout.addStretch()
self.new_tab = QtWidgets.QWidget()
- self.new_tab.setLayout(new_tab_outer_layout)
+ self.new_tab.setLayout(new_tab_layout)
self.new_tab.show()
# Layout
@@ -313,16 +328,12 @@ class Tab(QtWidgets.QWidget):
self.chat_mode.start_server_finished.connect(
self.update_server_status_indicator
)
- self.chat_mode.stop_server_finished.connect(
- self.update_server_status_indicator
- )
+ self.chat_mode.stop_server_finished.connect(self.update_server_status_indicator)
self.chat_mode.stop_server_finished.connect(self.stop_server_finished)
self.chat_mode.start_server_finished.connect(self.clear_message)
self.chat_mode.server_status.button_clicked.connect(self.clear_message)
self.chat_mode.server_status.url_copied.connect(self.copy_url)
- self.chat_mode.server_status.hidservauth_copied.connect(
- self.copy_hidservauth
- )
+ self.chat_mode.server_status.hidservauth_copied.connect(self.copy_hidservauth)
self.change_title.emit(self.tab_id, strings._("gui_new_tab_chat_button"))
@@ -388,6 +399,25 @@ class Tab(QtWidgets.QWidget):
self.set_server_status_indicator_started(
strings._("gui_status_indicator_receive_started")
)
+ elif self.mode == self.common.gui.MODE_CHAT:
+ # Chat mode
+ if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED:
+ self.set_server_status_indicator_stopped(
+ strings._("gui_status_indicator_receive_stopped")
+ )
+ elif self.chat_mode.server_status.status == ServerStatus.STATUS_WORKING:
+ if self.settings.get("general", "autostart_timer"):
+ self.set_server_status_indicator_working(
+ strings._("gui_status_indicator_receive_scheduled")
+ )
+ else:
+ self.set_server_status_indicator_working(
+ strings._("gui_status_indicator_receive_working")
+ )
+ elif self.chat_mode.server_status.status == ServerStatus.STATUS_STARTED:
+ self.set_server_status_indicator_started(
+ strings._("gui_status_indicator_receive_started")
+ )
def set_server_status_indicator_stopped(self, label_text):
self.change_icon.emit(self.tab_id, "images/server_stopped.png")
diff --git a/share/images/mode_chat.png b/share/images/mode_chat.png
new file mode 100644
index 00000000..33114364
Binary files /dev/null and b/share/images/mode_chat.png differ
diff --git a/share/images/mode_chat.svg b/share/images/mode_chat.svg
new file mode 100644
index 00000000..335e9cf4
--- /dev/null
+++ b/share/images/mode_chat.svg
@@ -0,0 +1,81 @@
+
diff --git a/share/images/mode_new_tab_chat.png b/share/images/mode_new_tab_chat.png
new file mode 100644
index 00000000..4d54f127
Binary files /dev/null and b/share/images/mode_new_tab_chat.png differ
diff --git a/share/images/mode_new_tab_receive.png b/share/images/mode_new_tab_receive.png
new file mode 100644
index 00000000..fe46f5ff
Binary files /dev/null and b/share/images/mode_new_tab_receive.png differ
diff --git a/share/images/mode_new_tab_share.png b/share/images/mode_new_tab_share.png
new file mode 100644
index 00000000..bb33318c
Binary files /dev/null and b/share/images/mode_new_tab_share.png differ
diff --git a/share/images/mode_new_tab_website.png b/share/images/mode_new_tab_website.png
new file mode 100644
index 00000000..08cc24a5
Binary files /dev/null and b/share/images/mode_new_tab_website.png differ
diff --git a/share/images/mode_receive.png b/share/images/mode_receive.png
new file mode 100644
index 00000000..d57aa409
Binary files /dev/null and b/share/images/mode_receive.png differ
diff --git a/share/images/mode_receive.svg b/share/images/mode_receive.svg
new file mode 100644
index 00000000..5a0a29fd
--- /dev/null
+++ b/share/images/mode_receive.svg
@@ -0,0 +1,74 @@
+
diff --git a/share/images/mode_share.png b/share/images/mode_share.png
new file mode 100644
index 00000000..f2565bd5
Binary files /dev/null and b/share/images/mode_share.png differ
diff --git a/share/images/mode_share.svg b/share/images/mode_share.svg
new file mode 100644
index 00000000..9fb97c65
--- /dev/null
+++ b/share/images/mode_share.svg
@@ -0,0 +1,63 @@
+
diff --git a/share/images/mode_website.png b/share/images/mode_website.png
new file mode 100644
index 00000000..b146f451
Binary files /dev/null and b/share/images/mode_website.png differ
diff --git a/share/images/mode_website.svg b/share/images/mode_website.svg
new file mode 100644
index 00000000..1a80846f
--- /dev/null
+++ b/share/images/mode_website.svg
@@ -0,0 +1,35 @@
+
diff --git a/share/locale/en.json b/share/locale/en.json
index ab7e92aa..61fc0e2e 100644
--- a/share/locale/en.json
+++ b/share/locale/en.json
@@ -7,7 +7,7 @@
"close_on_autostop_timer": "Stopped because auto-stop timer ran out",
"closing_automatically": "Stopped because transfer is complete",
"large_filesize": "Warning: Sending a large share could take hours",
- "gui_drag_and_drop": "Drag and drop files and folders\nto start sharing",
+ "gui_drag_and_drop": "Drag and drop files and folders to start sharing",
"gui_add": "Add",
"gui_add_files": "Add Files",
"gui_add_folder": "Add Folder",
@@ -185,13 +185,9 @@
"gui_new_tab": "New Tab",
"gui_new_tab_tooltip": "Open a new tab",
"gui_new_tab_share_button": "Share Files",
- "gui_new_tab_share_description": "Choose files on your computer to send to someone else. The person or people who you want to send files to will need to use Tor Browser to download them from you.",
"gui_new_tab_receive_button": "Receive Files",
- "gui_new_tab_receive_description": "Turn your computer into an online dropbox. People will be able to use Tor Browser to send files to your computer.",
- "gui_new_tab_website_button": "Publish Website",
- "gui_new_tab_website_description": "Host a static HTML onion website from your computer.",
- "gui_new_tab_chat_button": "Start Chat Server",
- "gui_new_tab_chat_description": "Start an onion chat server and use it to chat in Tor Browser.",
+ "gui_new_tab_website_button": "Host a Website",
+ "gui_new_tab_chat_button": "Chat Anonymously",
"gui_close_tab_warning_title": "Are you sure?",
"gui_close_tab_warning_persistent_description": "This tab is persistent. If you close it you'll lose the onion address that it's using. Are you sure you want to close it?",
"gui_close_tab_warning_share_description": "You're in the process of sending files. Are you sure you want to close this tab?",