Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions TeXmacs/misc/themes/liii-night.css
Original file line number Diff line number Diff line change
Expand Up @@ -430,18 +430,25 @@ QToolButton#pdf-screenshot-btn {
qproperty-icon: url(":/pdf-reader/screenshot-white.svg");
}

QToolButton#pdf-toggle-outline-btn {
QToolButton#pdf-toggle-outline-btn,
QToolButton#editor-page-outline-btn {
qproperty-icon: url(":/pdf-reader/sidebar-white.svg");
border: 1px solid transparent;
border-radius: 4px;
}

QToolButton#editor-page-outline-btn {
padding: 2px 6px;
color: #ffffff;
}

QWidget#centralWidget QToolButton#pdf-zoom-out-btn:hover,
QWidget#centralWidget QToolButton#pdf-zoom-in-btn:hover,
QWidget#centralWidget QToolButton#pdf-prev-btn:hover,
QWidget#centralWidget QToolButton#pdf-next-btn:hover,
QWidget#centralWidget QToolButton#pdf-screenshot-btn:hover,
QWidget#centralWidget QToolButton#pdf-toggle-outline-btn:hover {
QWidget#centralWidget QToolButton#pdf-toggle-outline-btn:hover,
QStatusBar QToolButton#editor-page-outline-btn:hover {
background-color: rgba(255, 255, 255, 0.06);
}

Expand All @@ -451,11 +458,13 @@ QWidget#centralWidget QToolButton#pdf-prev-btn:pressed,
QWidget#centralWidget QToolButton#pdf-next-btn:pressed,
QWidget#centralWidget QToolButton#pdf-screenshot-btn:pressed,
QWidget#centralWidget QToolButton#pdf-screenshot-btn:checked,
QWidget#centralWidget QToolButton#pdf-toggle-outline-btn:pressed {
QWidget#centralWidget QToolButton#pdf-toggle-outline-btn:pressed,
QStatusBar QToolButton#editor-page-outline-btn:pressed {
background-color: rgba(255, 255, 255, 0.10);
}

QWidget#centralWidget QToolButton#pdf-toggle-outline-btn:checked {
QWidget#centralWidget QToolButton#pdf-toggle-outline-btn:checked,
QStatusBar QToolButton#editor-page-outline-btn:checked {
background-color: rgba(255, 255, 255, 0.16);
border: 1px solid rgba(255, 255, 255, 0.25);
}
Expand Down
17 changes: 13 additions & 4 deletions TeXmacs/misc/themes/liii.css
Original file line number Diff line number Diff line change
Expand Up @@ -419,18 +419,25 @@ QToolButton#pdf-screenshot-btn {
qproperty-icon: url(":/pdf-reader/screenshot.svg");
}

QToolButton#pdf-toggle-outline-btn {
QToolButton#pdf-toggle-outline-btn,
QToolButton#editor-page-outline-btn {
qproperty-icon: url(":/pdf-reader/sidebar.svg");
border: 1px solid transparent;
border-radius: 4px;
}

QToolButton#editor-page-outline-btn {
padding: 2px 6px;
color: #2c2c2c;
}

QToolButton#pdf-zoom-out-btn:hover,
QToolButton#pdf-zoom-in-btn:hover,
QToolButton#pdf-prev-btn:hover,
QToolButton#pdf-next-btn:hover,
QToolButton#pdf-screenshot-btn:hover,
QToolButton#pdf-toggle-outline-btn:hover {
QToolButton#pdf-toggle-outline-btn:hover,
QToolButton#editor-page-outline-btn:hover {
background-color: rgba(0, 0, 0, 0.08);
}

Expand All @@ -440,11 +447,13 @@ QToolButton#pdf-prev-btn:pressed,
QToolButton#pdf-next-btn:pressed,
QToolButton#pdf-screenshot-btn:pressed,
QToolButton#pdf-screenshot-btn:checked,
QToolButton#pdf-toggle-outline-btn:pressed {
QToolButton#pdf-toggle-outline-btn:pressed,
QToolButton#editor-page-outline-btn:pressed {
background-color: rgba(0, 0, 0, 0.12);
}

QToolButton#pdf-toggle-outline-btn:checked {
QToolButton#pdf-toggle-outline-btn:checked,
QToolButton#editor-page-outline-btn:checked {
background-color: rgba(0, 0, 0, 0.12);
border: 1px solid rgba(0, 0, 0, 0.20);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Edit/Interface/edit_footer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ edit_interface_rep::set_middle_footer () {
current_page_num > 0 ? as_string (current_page_num) : "?";

// 显示页码:当前页 / 总页数(如果总页数未知,显示 ?)
string page_display= current_page * string (" / ") * total_pages * " ";
string page_display= current_page * string (" / ") * total_pages;

SERVER (set_middle_footer (
serialize (tree_translate (tree (page_display), "english", "english"))));
Expand Down
62 changes: 51 additions & 11 deletions src/Plugins/Qt/qt_tm_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,10 @@ qt_tm_widget_rep::qt_tm_widget_rep (int mask, command _quit)
startupTabMode (false), startupChromePending_ (false),
pdfViewerWidget (nullptr), pdfTabMode (false), currentPdfPath (""),
chatContentWidget (nullptr), chatTabMode (false), chatSideDock (nullptr),
pdfOutlineDock (nullptr), chatSidebarToggleBtn (nullptr),
chatSidebarMode (false), chatSidebarModeMemory_ (false),
centralWidgetUpdatesFrozen_ (false), centralUnfreezeGeneration_ (0) {
pdfOutlineDock (nullptr), pageOutlineBtn (nullptr),
chatSidebarToggleBtn (nullptr), chatSidebarMode (false),
chatSidebarModeMemory_ (false), centralWidgetUpdatesFrozen_ (false),
centralUnfreezeGeneration_ (0) {
type= texmacs_widget;

main_widget= concrete (::glue_widget (true, true, 1, 1));
Expand Down Expand Up @@ -606,6 +607,22 @@ qt_tm_widget_rep::qt_tm_widget_rep (int mask, command _quit)

QStatusBar* bar= new QStatusBar (mw);
bar->setObjectName ("statusBar");

pagePrefix = qt_translate ("Page") + ": ";
pageOutlineBtn= new QToolButton (bar);
pageOutlineBtn->setObjectName ("editor-page-outline-btn");
pageOutlineBtn->setToolButtonStyle (Qt::ToolButtonTextBesideIcon);
pageOutlineBtn->setAutoRaise (true);
pageOutlineBtn->setCheckable (true);
pageOutlineBtn->setIcon (QIcon (":/pdf-reader/sidebar.svg"));
pageOutlineBtn->setIconSize (
QSize (DpiUtils::scaled (16), DpiUtils::scaled (16)));
pageOutlineBtn->setText (pagePrefix + "1 / 1");
pageOutlineBtn->setToolTip (qt_translate ("Outline"));

QObject::connect (pageOutlineBtn, &QToolButton::clicked,
[this] () { toggle_outline_sidebar (); });

leftLabel = new QLabel (qt_translate ("Welcome to TeXmacs"), bar);
middleLabel= new QLabel ("", bar);
rightLabel = new QLabel (qt_translate ("Booting"), bar);
Expand All @@ -619,8 +636,8 @@ qt_tm_widget_rep::qt_tm_widget_rep (int mask, command _quit)
leftLabel->setAlignment (Qt::AlignLeft | Qt::AlignVCenter);
rightLabel->setAlignment (Qt::AlignRight | Qt::AlignVCenter);

// Add all three labels with equal stretch factors for equal width
// distribution
// Add widgets: pageOutlineBtn at the left, then labels
bar->addWidget (pageOutlineBtn);
bar->addWidget (leftLabel, 1);
bar->addWidget (middleLabel, 1);
bar->addPermanentWidget (rightLabel, 1);
Expand Down Expand Up @@ -744,10 +761,8 @@ qt_tm_widget_rep::qt_tm_widget_rep (int mask, command _quit)
.arg (h));
pdfToolBar->setVisible (false);

QObject::connect (pdfToolBar, &PdfToolBar::toggleOutlineClicked, [this] () {
call ("toggle-outline-sidebar");
update_visibility ();
});
QObject::connect (pdfToolBar, &PdfToolBar::toggleOutlineClicked,
[this] () { toggle_outline_sidebar (); });
}

QWidget* cw= new QWidget ();
Expand Down Expand Up @@ -961,6 +976,9 @@ qt_tm_widget_rep::qt_tm_widget_rep (int mask, command _quit)
pdfToolBar->setOutlineEnabled (hasContent);
pdfToolBar->setOutlineChecked (visible && hasContent);
}
if (pageOutlineBtn && is_editor_tab_mode ()) {
pageOutlineBtn->setChecked (visible);
}
});

QObject::connect (pdfOutlineDock, &OutlineWidget::outlineActivated,
Expand Down Expand Up @@ -1640,6 +1658,17 @@ native_menubar_pref_on () {
#endif
}

void
qt_tm_widget_rep::toggle_outline_sidebar () {
call ("toggle-outline-sidebar");
update_visibility ();
}

bool
qt_tm_widget_rep::is_editor_tab_mode () const {
return !startupTabMode && !pdfTabMode && !chatTabMode;
}

void
qt_tm_widget_rep::update_visibility () {
#define XOR(exp1, exp2) (((!exp1) && (exp2)) || ((exp1) && (!exp2)))
Expand Down Expand Up @@ -1791,6 +1820,12 @@ qt_tm_widget_rep::update_visibility () {
pdfToolBar->setOutlineChecked (new_pdfOutlineVisibility);
}

if (pageOutlineBtn) {
bool shouldShow= is_editor_tab_mode ();
pageOutlineBtn->setVisible (shouldShow);
if (shouldShow) pageOutlineBtn->setChecked (new_pdfOutlineVisibility);
}

// AI 聊天侧边栏浮动按钮可见性(community 版无 AI Chat,始终隐藏)
if (chatSidebarToggleBtn) {
bool shouldShow= !is_community_stem () && !chatTabMode &&
Expand Down Expand Up @@ -2011,8 +2046,7 @@ qt_tm_widget_rep::send (slot s, blackbox val) {
case SLOT_MIDDLE_FOOTER: {
check_type<string> (val, s);
string msg= open_box<string> (val);
middleLabel->setText (to_qstring (msg));
middleLabel->update ();
if (pageOutlineBtn) pageOutlineBtn->setText (pagePrefix + to_qstring (msg));
} break;
case SLOT_RIGHT_FOOTER: {
check_type<string> (val, s);
Expand All @@ -2029,6 +2063,8 @@ qt_tm_widget_rep::send (slot s, blackbox val) {

if (open_box<bool> (val) == true) {
prompt= new QTMInteractivePrompt (int_prompt, int_input);
if (pageOutlineBtn)
mainwindow ()->statusBar ()->removeWidget (pageOutlineBtn);
mainwindow ()->statusBar ()->removeWidget (leftLabel);
mainwindow ()->statusBar ()->removeWidget (middleLabel);
mainwindow ()->statusBar ()->removeWidget (rightLabel);
Expand All @@ -2038,6 +2074,10 @@ qt_tm_widget_rep::send (slot s, blackbox val) {
else {
if (prompt) prompt->end ();
mainwindow ()->statusBar ()->removeWidget (prompt);
if (pageOutlineBtn) {
mainwindow ()->statusBar ()->addWidget (pageOutlineBtn);
pageOutlineBtn->setVisible (is_editor_tab_mode ());
}
mainwindow ()->statusBar ()->addWidget (leftLabel, 1);
mainwindow ()->statusBar ()->addWidget (middleLabel, 1);
mainwindow ()->statusBar ()->addPermanentWidget (rightLabel, 1);
Expand Down
41 changes: 24 additions & 17 deletions src/Plugins/Qt/qt_tm_widget.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@

class QLabel;
class QToolBar;
class QToolButton;
class QTMInteractivePrompt;
class PDFReaderWidget;
class PdfToolBar;
Expand Down Expand Up @@ -70,21 +71,23 @@ class qt_tm_widget_rep : public qt_window_widget_rep {
tab_tools_visibility = 1024
} visibility_t;
*/
QLabel* rightLabel;
QLabel* leftLabel;
QLabel* middleLabel;
QToolBar* menuToolBar;
QToolBar* mainToolBar;
QToolBar* modeToolBar;
QToolBar* focusToolBar;
QToolBar* userToolBar;
PdfToolBar* pdfToolBar; ///< PDF 阅读器工具栏
QDockWidget* sideTools;
QDockWidget* leftTools;
QDockWidget* bottomTools;
QDockWidget* extraTools;
QDockWidget* chatSideDock; ///< AI 聊天侧边栏 Dock
OutlineWidget* pdfOutlineDock; ///< PDF 目录(大纲)侧边栏 Dock
QLabel* rightLabel;
QLabel* leftLabel;
QLabel* middleLabel;
QToolButton* pageOutlineBtn; ///< 文档编辑界面左下角展示/隐藏目录的页码按钮
QString pagePrefix; ///< 页码按钮文本前缀(构造时翻译一次)
QToolBar* menuToolBar;
QToolBar* mainToolBar;
QToolBar* modeToolBar;
QToolBar* focusToolBar;
QToolBar* userToolBar;
PdfToolBar* pdfToolBar; ///< PDF 阅读器工具栏
QDockWidget* sideTools;
QDockWidget* leftTools;
QDockWidget* bottomTools;
QDockWidget* extraTools;
QDockWidget* chatSideDock; ///< AI 聊天侧边栏 Dock
OutlineWidget* pdfOutlineDock; ///< PDF 目录(大纲)侧边栏 Dock
QTMTabPageContainer* tabPageContainer;
QTMAuxiliaryWidget* auxiliaryWidget;
QWK::WidgetWindowAgent* windowAgent;
Expand Down Expand Up @@ -289,8 +292,12 @@ class qt_tm_widget_rep : public qt_window_widget_rep {
virtual widget read (slot s, blackbox index);
virtual void write (slot s, blackbox index, widget w);

void set_full_screen (bool flag);
void update_visibility ();
void set_full_screen (bool flag);
void update_visibility ();
/// 当前是否为普通文档编辑标签页(非启动页/PDF/聊天模式)。
bool is_editor_tab_mode () const;
/// 切换目录侧边栏并刷新可见性(页码按钮与 PDF 工具栏共用)。
void toggle_outline_sidebar ();
void install_main_menu ();
void apply_notification_bar_content ();
void flush_startup_deferred_chrome ();
Expand Down
Loading