From 3c85a8dae11b3a583a1d360a1dc048376ab71010 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 13 Apr 2021 18:06:29 -0400 Subject: Add custom title to GUI --- desktop/src/onionshare/resources/locale/en.json | 1 + .../src/onionshare/tab/mode/chat_mode/__init__.py | 5 +++ .../onionshare/tab/mode/mode_settings_widget.py | 39 ++++++++++++++++++++++ .../onionshare/tab/mode/receive_mode/__init__.py | 5 +++ .../src/onionshare/tab/mode/share_mode/__init__.py | 5 +++ .../onionshare/tab/mode/website_mode/__init__.py | 5 +++ desktop/src/onionshare/tab_widget.py | 4 +++ 7 files changed, 64 insertions(+) (limited to 'desktop') diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json index 20569c57..679ff965 100644 --- a/desktop/src/onionshare/resources/locale/en.json +++ b/desktop/src/onionshare/resources/locale/en.json @@ -165,6 +165,7 @@ "gui_quit_warning_cancel": "Cancel", "mode_settings_advanced_toggle_show": "Show advanced settings", "mode_settings_advanced_toggle_hide": "Hide advanced settings", + "mode_settings_title_label": "Title", "mode_settings_persistent_checkbox": "Save this tab, and automatically open it when I open OnionShare", "mode_settings_public_checkbox": "Don't use a password", "mode_settings_autostart_timer_checkbox": "Start onion service at scheduled time", diff --git a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py index 2312a64e..44a6d240 100644 --- a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py @@ -68,6 +68,11 @@ class ChatMode(Mode): self.image = QtWidgets.QWidget() self.image.setLayout(image_layout) + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_chat") + ) + # Server status self.server_status.set_mode("chat") self.server_status.server_started_finished.connect(self.update_primary_action) diff --git a/desktop/src/onionshare/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py index a3a315c9..990e1a92 100644 --- a/desktop/src/onionshare/tab/mode/mode_settings_widget.py +++ b/desktop/src/onionshare/tab/mode/mode_settings_widget.py @@ -39,6 +39,16 @@ class ModeSettingsWidget(QtWidgets.QWidget): # Downstream Mode need to fill in this layout with its settings self.mode_specific_layout = QtWidgets.QVBoxLayout() + # Title + title_label = QtWidgets.QLabel(strings._("mode_settings_title_label")) + self.title_lineedit = QtWidgets.QLineEdit() + self.title_lineedit.editingFinished.connect(self.title_editing_finished) + if self.settings.get("general", "title"): + self.title_lineedit.setText(self.settings.get("general", "title")) + title_layout = QtWidgets.QHBoxLayout() + title_layout.addWidget(title_label) + title_layout.addWidget(self.title_lineedit) + # Persistent self.persistent_checkbox = QtWidgets.QCheckBox() self.persistent_checkbox.clicked.connect(self.persistent_checkbox_clicked) @@ -162,6 +172,7 @@ class ModeSettingsWidget(QtWidgets.QWidget): layout = QtWidgets.QVBoxLayout() layout.addLayout(self.mode_specific_layout) + layout.addLayout(title_layout) layout.addWidget(self.persistent_checkbox) layout.addWidget(self.public_checkbox) layout.addWidget(self.advanced_widget) @@ -203,6 +214,34 @@ class ModeSettingsWidget(QtWidgets.QWidget): self.legacy_checkbox.hide() self.client_auth_checkbox.hide() + def title_editing_finished(self): + if self.title_lineedit.text() == "": + self.settings.set("general", "title", None) + if self.tab.mode == self.common.gui.MODE_SHARE: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_share") + ) + elif self.tab.mode == self.common.gui.MODE_RECEIVE: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_receive") + ) + elif self.tab.mode == self.common.gui.MODE_WEBSITE: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_website") + ) + elif self.tab.mode == self.common.gui.MODE_CHAT: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_chat") + ) + elif self.tab_mode == None: + pass + else: + self.settings.set("general", "title", self.title_lineedit.text()) + shortened_title = self.title_lineedit.text() + if len(shortened_title) > 11: + shortened_title = shortened_title[:10] + "..." + self.tab.change_title.emit(self.tab.tab_id, shortened_title) + def persistent_checkbox_clicked(self): self.settings.set("persistent", "enabled", self.persistent_checkbox.isChecked()) self.settings.set("persistent", "mode", self.tab.mode) diff --git a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py index 5cc72201..7e3fda47 100644 --- a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py @@ -106,6 +106,11 @@ class ReceiveMode(Mode): self.hide_webhook_url() self.mode_settings_widget.mode_specific_layout.addLayout(webhook_url_layout) + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_receive") + ) + # Server status self.server_status.set_mode("receive") self.server_status.server_started_finished.connect(self.update_primary_action) diff --git a/desktop/src/onionshare/tab/mode/share_mode/__init__.py b/desktop/src/onionshare/tab/mode/share_mode/__init__.py index 74a4e2c2..05038e20 100644 --- a/desktop/src/onionshare/tab/mode/share_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/share_mode/__init__.py @@ -77,6 +77,11 @@ class ShareMode(Mode): for filename in self.filenames: self.file_selection.file_list.add_file(filename) + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_share") + ) + # Server status self.server_status.set_mode("share", self.file_selection) self.server_status.server_started.connect(self.file_selection.server_started) diff --git a/desktop/src/onionshare/tab/mode/website_mode/__init__.py b/desktop/src/onionshare/tab/mode/website_mode/__init__.py index 6aa83de0..f7cfa758 100644 --- a/desktop/src/onionshare/tab/mode/website_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/website_mode/__init__.py @@ -77,6 +77,11 @@ class WebsiteMode(Mode): for filename in self.filenames: self.file_selection.file_list.add_file(filename) + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_website") + ) + # Server status self.server_status.set_mode("website", self.file_selection) self.server_status.server_started.connect(self.file_selection.server_started) diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py index b9a70011..94f51616 100644 --- a/desktop/src/onionshare/tab_widget.py +++ b/desktop/src/onionshare/tab_widget.py @@ -176,6 +176,10 @@ class TabWidget(QtWidgets.QTabWidget): ) tab.init(mode_settings) + + # Make sure the title is set + tab.get_mode().mode_settings_widget.title_editing_finished() + # If it's persistent, set the persistent image in the tab self.change_persistent(tab.tab_id, tab.settings.get("persistent", "enabled")) -- cgit v1.2.3-54-g00ecf From 67724312201b0943209728097baaae00c2dc07e5 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 13 Apr 2021 18:18:44 -0400 Subject: Put the title and persistent options at the top of the options widget, above mode-specific options --- desktop/src/onionshare/tab/mode/mode_settings_widget.py | 2 +- desktop/src/onionshare/tab_widget.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'desktop') diff --git a/desktop/src/onionshare/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py index 990e1a92..f93f37bf 100644 --- a/desktop/src/onionshare/tab/mode/mode_settings_widget.py +++ b/desktop/src/onionshare/tab/mode/mode_settings_widget.py @@ -171,9 +171,9 @@ class ModeSettingsWidget(QtWidgets.QWidget): self.advanced_widget.hide() layout = QtWidgets.QVBoxLayout() - layout.addLayout(self.mode_specific_layout) layout.addLayout(title_layout) layout.addWidget(self.persistent_checkbox) + layout.addLayout(self.mode_specific_layout) layout.addWidget(self.public_checkbox) layout.addWidget(self.advanced_widget) layout.addWidget(self.toggle_advanced_button) diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py index 94f51616..3df924d3 100644 --- a/desktop/src/onionshare/tab_widget.py +++ b/desktop/src/onionshare/tab_widget.py @@ -178,7 +178,8 @@ class TabWidget(QtWidgets.QTabWidget): tab.init(mode_settings) # Make sure the title is set - tab.get_mode().mode_settings_widget.title_editing_finished() + if tab.get_mode(): + tab.get_mode().mode_settings_widget.title_editing_finished() # If it's persistent, set the persistent image in the tab self.change_persistent(tab.tab_id, tab.settings.get("persistent", "enabled")) -- cgit v1.2.3-54-g00ecf From 3c76f3403d32d6ecd1c4eedc6283e530af580dd6 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 13 Apr 2021 18:28:00 -0400 Subject: Add tooltips to tabs, so you can tell what even long titles are --- desktop/src/onionshare/tab/mode/mode_settings_widget.py | 8 +++----- desktop/src/onionshare/tab_widget.py | 7 ++++++- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'desktop') diff --git a/desktop/src/onionshare/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py index f93f37bf..777987a8 100644 --- a/desktop/src/onionshare/tab/mode/mode_settings_widget.py +++ b/desktop/src/onionshare/tab/mode/mode_settings_widget.py @@ -236,11 +236,9 @@ class ModeSettingsWidget(QtWidgets.QWidget): elif self.tab_mode == None: pass else: - self.settings.set("general", "title", self.title_lineedit.text()) - shortened_title = self.title_lineedit.text() - if len(shortened_title) > 11: - shortened_title = shortened_title[:10] + "..." - self.tab.change_title.emit(self.tab.tab_id, shortened_title) + title = self.title_lineedit.text() + self.settings.set("general", "title", title) + self.tab.change_title.emit(self.tab.tab_id, title) def persistent_checkbox_clicked(self): self.settings.set("persistent", "enabled", self.persistent_checkbox.isChecked()) diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py index 3df924d3..a955ea53 100644 --- a/desktop/src/onionshare/tab_widget.py +++ b/desktop/src/onionshare/tab_widget.py @@ -188,8 +188,13 @@ class TabWidget(QtWidgets.QTabWidget): self.bring_to_front.emit() def change_title(self, tab_id, title): + shortened_title = title + if len(shortened_title) > 11: + shortened_title = shortened_title[:10] + "..." + index = self.indexOf(self.tabs[tab_id]) - self.setTabText(index, title) + self.setTabText(index, shortened_title) + self.setTabToolTip(index, title) def change_icon(self, tab_id, icon_path): index = self.indexOf(self.tabs[tab_id]) -- cgit v1.2.3-54-g00ecf From e48878e55813200206a6939f7c50d0710b0504f9 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 25 Apr 2021 17:49:06 -0400 Subject: Rename "Title" to "Custom title", move it into advanced settings, and make whitespace title default to not setting a title --- desktop/src/onionshare/resources/locale/en.json | 2 +- .../onionshare/tab/mode/mode_settings_widget.py | 27 +++++++++++----------- 2 files changed, 15 insertions(+), 14 deletions(-) (limited to 'desktop') diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json index 679ff965..a3489698 100644 --- a/desktop/src/onionshare/resources/locale/en.json +++ b/desktop/src/onionshare/resources/locale/en.json @@ -165,7 +165,7 @@ "gui_quit_warning_cancel": "Cancel", "mode_settings_advanced_toggle_show": "Show advanced settings", "mode_settings_advanced_toggle_hide": "Hide advanced settings", - "mode_settings_title_label": "Title", + "mode_settings_title_label": "Custom title", "mode_settings_persistent_checkbox": "Save this tab, and automatically open it when I open OnionShare", "mode_settings_public_checkbox": "Don't use a password", "mode_settings_autostart_timer_checkbox": "Start onion service at scheduled time", diff --git a/desktop/src/onionshare/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py index 777987a8..ef59f37e 100644 --- a/desktop/src/onionshare/tab/mode/mode_settings_widget.py +++ b/desktop/src/onionshare/tab/mode/mode_settings_widget.py @@ -39,16 +39,6 @@ class ModeSettingsWidget(QtWidgets.QWidget): # Downstream Mode need to fill in this layout with its settings self.mode_specific_layout = QtWidgets.QVBoxLayout() - # Title - title_label = QtWidgets.QLabel(strings._("mode_settings_title_label")) - self.title_lineedit = QtWidgets.QLineEdit() - self.title_lineedit.editingFinished.connect(self.title_editing_finished) - if self.settings.get("general", "title"): - self.title_lineedit.setText(self.settings.get("general", "title")) - title_layout = QtWidgets.QHBoxLayout() - title_layout.addWidget(title_label) - title_layout.addWidget(self.title_lineedit) - # Persistent self.persistent_checkbox = QtWidgets.QCheckBox() self.persistent_checkbox.clicked.connect(self.persistent_checkbox_clicked) @@ -67,6 +57,16 @@ class ModeSettingsWidget(QtWidgets.QWidget): else: self.public_checkbox.setCheckState(QtCore.Qt.Unchecked) + # Title + title_label = QtWidgets.QLabel(strings._("mode_settings_title_label")) + self.title_lineedit = QtWidgets.QLineEdit() + self.title_lineedit.editingFinished.connect(self.title_editing_finished) + if self.settings.get("general", "title"): + self.title_lineedit.setText(self.settings.get("general", "title")) + title_layout = QtWidgets.QHBoxLayout() + title_layout.addWidget(title_label) + title_layout.addWidget(self.title_lineedit) + # Whether or not to use an auto-start timer self.autostart_timer_checkbox = QtWidgets.QCheckBox() self.autostart_timer_checkbox.clicked.connect( @@ -162,6 +162,7 @@ class ModeSettingsWidget(QtWidgets.QWidget): # Advanced group itself advanced_layout = QtWidgets.QVBoxLayout() advanced_layout.setContentsMargins(0, 0, 0, 0) + advanced_layout.addLayout(title_layout) advanced_layout.addLayout(autostart_timer_layout) advanced_layout.addLayout(autostop_timer_layout) advanced_layout.addWidget(self.legacy_checkbox) @@ -171,9 +172,8 @@ class ModeSettingsWidget(QtWidgets.QWidget): self.advanced_widget.hide() layout = QtWidgets.QVBoxLayout() - layout.addLayout(title_layout) - layout.addWidget(self.persistent_checkbox) layout.addLayout(self.mode_specific_layout) + layout.addWidget(self.persistent_checkbox) layout.addWidget(self.public_checkbox) layout.addWidget(self.advanced_widget) layout.addWidget(self.toggle_advanced_button) @@ -215,7 +215,8 @@ class ModeSettingsWidget(QtWidgets.QWidget): self.client_auth_checkbox.hide() def title_editing_finished(self): - if self.title_lineedit.text() == "": + if self.title_lineedit.text().strip() == "": + self.title_lineedit.setText("") self.settings.set("general", "title", None) if self.tab.mode == self.common.gui.MODE_SHARE: self.tab.change_title.emit( -- cgit v1.2.3-54-g00ecf