Skip to content

Commit 6b1efe4

Browse files
authored
[216_30] File 页面简化为单一新建空白文档入口 (#3212)
1 parent adc1d23 commit 6b1efe4

5 files changed

Lines changed: 74 additions & 69 deletions

File tree

TeXmacs/misc/themes/liii-night.css

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,11 +1167,12 @@ QLabel#startup-tab-recent-path {
11671167
}
11681168

11691169
QWidget#style-card {
1170-
border: 1px solid #4b5560;
1170+
border: 1px solid #3c3c3c;
1171+
border-radius: 8px;
11711172
}
11721173

1173-
QWidget#style-card[selected="true"] {
1174-
border: 2px solid #2791ad;
1174+
QWidget#style-card:hover {
1175+
border: 1px solid #2791ad;
11751176
}
11761177

11771178
QLabel#style-card-icon {
@@ -1183,10 +1184,6 @@ QLabel#style-card-name {
11831184
color: #e2e8ee;
11841185
}
11851186

1186-
QLabel#style-card-badge {
1187-
color: #ffffff;
1188-
}
1189-
11901187
/****************************************************************************
11911188
* PDF Preview Widget 样式
11921189
****************************************************************************/

TeXmacs/misc/themes/liii.css

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,11 +1169,12 @@ QLabel#startup-tab-recent-path {
11691169
}
11701170

11711171
QWidget#style-card {
1172-
border: 1px solid #d4dde6;
1172+
border: 1px solid #cfcfcf;
1173+
border-radius: 8px;
11731174
}
11741175

1175-
QWidget#style-card[selected="true"] {
1176-
border: 2px solid #2791ad;
1176+
QWidget#style-card:hover {
1177+
border: 1px solid #2791ad;
11771178
}
11781179

11791180
QLabel#style-card-icon {
@@ -1185,10 +1186,6 @@ QLabel#style-card-name {
11851186
color: #2b3b45;
11861187
}
11871188

1188-
QLabel#style-card-badge {
1189-
color: #ffffff;
1190-
}
1191-
11921189
/****************************************************************************
11931190
* PDF Preview Widget 样式
11941191
****************************************************************************/

TeXmacs/plugins/lang/dic/en_US/zh_CN.scm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@
503503
("count lines" "统计行数")
504504
("count words" "统计单词数")
505505
("create" "创建")
506+
("Create a new blank document" "创建一个新的空白文档")
506507
("create a new document" "新建文档")
507508
("create context macro" "创建上下文宏")
508509
("create preamble" "生成导言")
@@ -1519,6 +1520,7 @@
15191520
("Network error, please log in later." "网络有误,请稍后登录")
15201521
("never" "从不")
15211522
("new account" "新建账号")
1523+
("New Blank Document" "新建空白文档")
15221524
("new buffer" "")
15231525
("new column" "添加一行")
15241526
("new document" "新建文档")

devel/216_30.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# 216_30 File 页面简化为单一新建空白文档入口
2+
3+
## 如何测试
4+
5+
1. 编译:`xmake b stem`
6+
2. 启动 Mogan,打开启动页 **File** 页面。
7+
3. 确认仅显示 **1 个** "New Blank Document" 卡片,不再显示 Beamer / Book 等旧卡片。
8+
4. 确认卡片尺寸变大,中央显示 **`+`** 号图标,无 "Default" 蓝色徽标。
9+
5. Hover 时边框变为青色(`#2791ad`),点击无选中边框,点击可正常新建空白文档。
10+
6. 分别验证亮色/暗色主题下卡片边框和 Hover 效果正常。
11+
7. 切换中文,确认显示 "新建空白文档"。
12+
13+
## 2026/04/23 实现说明
14+
15+
### What
16+
17+
将 File 页面的多类型文档卡片(Generic/Beamer/Book/Exam/Letter/Article)精简为单一 "New Blank Document" 入口,同时放大卡片尺寸、优化视觉层级,并将样式控制权从 C++ 收归 CSS 主题文件。
18+
19+
#### 修改文件
20+
21+
**src/Plugins/Qt/qt_file_page.cpp**
22+
- `styles_` 从 6 项缩减为 1 项,仅保留 `generic`
23+
- 卡片尺寸放大:`100×120``160×256`,图标 `64``96``+` 号字号 `48px`
24+
- 布局由 `AlignTop` 改为 `AlignCenter`
25+
- 移除 "Default" 徽标(`badgeLabel_`)和硬编码 `border-radius`
26+
- 简化 `paintEvent`,移除手动选中边框绘制,交互效果完全由 CSS 接管。
27+
28+
**TeXmacs/misc/themes/liii.css / liii-night.css**
29+
- `QWidget#style-card`:边框色改为 `#cfcfcf` / `#3c3c3c`,新增 `border-radius: 8px`
30+
- 移除 `[selected="true"]` 规则,改为 `:hover` 边框 `#2791ad`
31+
- 移除 `QLabel#style-card-badge` 选择器。
32+
33+
**TeXmacs/plugins/lang/dic/en_US/zh_CN.scm**
34+
- 新增 "New Blank Document" / "Create a new blank document" 中文翻译。
35+
36+
### Why
37+
38+
1. **功能重叠**:File 页面的多类型卡片与 Template Center 功能重叠,精简为单一入口职责更清晰。
39+
2. **视觉优化**:旧卡片 `100×120` 过小,放大后更符合首屏核心操作入口定位。
40+
3. **样式解耦**:移除 C++ 硬编码样式,改由 CSS 统一管理,便于主题维护。
41+
4. **交互轻量**:仅剩一个卡片时,"Default" 徽标和选中状态失去意义,统一为 Hover 反馈更简洁。
42+
43+
### How
44+
45+
- 缩减 `styles_` 列表为单一项,其他模板引导至 Template Center。
46+
- 等比放大卡片和图标,使用 `+` 号表达"新建"语义。
47+
- 移除 `setStyleSheet` 硬编码,CSS 统一控制边框、圆角、Hover 效果。
48+
- 删除 `badgeLabel_`,简化 `paintEvent` 仅保留背景绘制。

src/Plugins/Qt/qt_file_page.cpp

Lines changed: 16 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,18 @@ static const int MAX_GLOBAL_RECENT_DOCS= 25;
4646
namespace {
4747
constexpr int kMainMargin = 32; // 主内容区外边距
4848
constexpr int kMainSpacing = 24; // 主纵向布局间距
49-
constexpr int kStyleCardWidth = 100; // 样式卡片宽度
50-
constexpr int kStyleCardHeight = 120; // 样式卡片高度
51-
constexpr int kStyleIconSize = 64; // 样式卡片图标尺寸
49+
constexpr int kStyleCardWidth = 160; // 样式卡片宽度
50+
constexpr int kStyleCardHeight = 256; // 样式卡片高度
51+
constexpr int kStyleIconSize = 96; // 样式卡片图标尺寸
5252
constexpr int kStyleCardTopPadding= 12; // 样式卡片顶部内边距
5353
constexpr int kStyleCardMargin = 8; // 样式卡片内边距
5454
constexpr int kStyleCardSpacing = 4; // 样式卡片内部控件间距
5555
constexpr int kStyleCardsSpacing = 16; // 样式卡片横向间距
5656
constexpr int kStyleCardRadius = 8; // 样式卡片圆角
5757
constexpr int kStyleIconRadius = 8; // 样式图标圆角
5858
constexpr int kSectionTitleFontPx = 16; // 分区标题字号
59-
constexpr int kStyleIconFontPx = 18; // 样式图标字母字号
60-
constexpr int kStyleNameFontPx = 12; // 样式名称字号
59+
constexpr int kStyleIconFontPx = 48; // 样式图标字母字号
60+
constexpr int kStyleNameFontPx = 14; // 样式名称字号
6161
constexpr int kStyleBadgeFontPx = 10; // Default 徽标字号
6262
constexpr int kStyleBadgeRadius = 8; // Default 徽标圆角
6363
constexpr int kStyleBadgePadY = 1; // Default 徽标纵向内边距
@@ -89,8 +89,6 @@ StyleCard::StyleCard (const DocStyle& style, QWidget* parent)
8989
int iconSize= DpiUtils::scaled (kStyleIconSize);
9090

9191
setFixedSize (width, height);
92-
setStyleSheet (QString ("border-radius: %1px;")
93-
.arg (DpiUtils::scaled (kStyleCardRadius)));
9492
setCursor (Qt::PointingHandCursor);
9593
setFocusPolicy (Qt::NoFocus);
9694
setToolTip (style.description);
@@ -101,17 +99,20 @@ StyleCard::StyleCard (const DocStyle& style, QWidget* parent)
10199
DpiUtils::scaled (kStyleCardMargin),
102100
DpiUtils::scaled (kStyleCardMargin));
103101
layout->setSpacing (DpiUtils::scaled (kStyleCardSpacing));
104-
layout->setAlignment (Qt::AlignTop);
102+
layout->setAlignment (Qt::AlignCenter);
105103

106104
// 预览图占位(使用 QLabel 作为图标容器)
107105
iconLabel_= new QLabel (this);
108106
iconLabel_->setFixedSize (iconSize, iconSize);
109107
iconLabel_->setAlignment (Qt::AlignCenter);
110108
iconLabel_->setObjectName ("style-card-icon");
111-
iconLabel_->setStyleSheet (QString ("border-radius: %1px;")
112-
.arg (DpiUtils::scaled (kStyleIconRadius)));
113-
// 显示样式ID的首字母作为占位
114-
iconLabel_->setText (style.id.left (1).toUpper ());
109+
110+
if (style.id == "generic") {
111+
iconLabel_->setText ("+");
112+
}
113+
else {
114+
iconLabel_->setText (style.id.left (1).toUpper ());
115+
}
115116
QFont iconFont= DpiUtils::scaledFont (iconLabel_->font (), kStyleIconFontPx);
116117
iconFont.setBold (true);
117118
iconLabel_->setFont (iconFont);
@@ -124,23 +125,6 @@ StyleCard::StyleCard (const DocStyle& style, QWidget* parent)
124125
DpiUtils::applyScaledFont (nameLabel_, kStyleNameFontPx);
125126
layout->addWidget (nameLabel_, 0, Qt::AlignCenter);
126127

127-
// "默认"标签
128-
if (style.isDefault) {
129-
badgeLabel_= new QLabel (qt_translate ("Default"), this);
130-
badgeLabel_->setObjectName ("style-card-badge");
131-
badgeLabel_->setAttribute (Qt::WA_StyledBackground, true);
132-
badgeLabel_->setAlignment (Qt::AlignCenter);
133-
DpiUtils::applyScaledFont (badgeLabel_, kStyleBadgeFontPx);
134-
badgeLabel_->setStyleSheet (
135-
QString ("background-color: #2791ad; border: 1px solid transparent; "
136-
"border-radius: %1px; "
137-
"padding: %2px %3px;")
138-
.arg (DpiUtils::scaled (kStyleBadgeRadius))
139-
.arg (DpiUtils::scaled (kStyleBadgePadY))
140-
.arg (DpiUtils::scaled (kStyleBadgePadX)));
141-
layout->addWidget (badgeLabel_, 0, Qt::AlignCenter);
142-
}
143-
144128
setObjectName ("style-card");
145129
}
146130

@@ -157,7 +141,6 @@ StyleCard::setSelected (bool selected) {
157141

158142
void
159143
StyleCard::enterEvent (QEnterEvent* event) {
160-
// 悬停时选中
161144
emit hovered ();
162145
QWidget::enterEvent (event);
163146
}
@@ -175,21 +158,10 @@ StyleCard::paintEvent (QPaintEvent* event) {
175158
QPainter painter (this);
176159
painter.setRenderHint (QPainter::Antialiasing);
177160

178-
// 绘制背景
179161
QStyleOption opt;
180162
opt.initFrom (this);
181-
style ()->drawPrimitive (QStyle::PE_Widget, &opt, &painter, this);
182163

183-
// 绘制选中边框
184-
if (isSelected_) {
185-
painter.setPen (
186-
QPen (opt.palette.highlight (), DpiUtils::scaled (kSelectedBorderPx)));
187-
painter.setBrush (Qt::NoBrush);
188-
const int inset = DpiUtils::scaled (kSelectedInset);
189-
const int radius= DpiUtils::scaled (kSelectedRadius);
190-
painter.drawRoundedRect (rect ().adjusted (inset, inset, -inset, -inset),
191-
radius, radius);
192-
}
164+
style ()->drawPrimitive (QStyle::PE_Widget, &opt, &painter, this);
193165
}
194166

195167
/******************************************************************************
@@ -199,19 +171,8 @@ StyleCard::paintEvent (QPaintEvent* event) {
199171
QtFilePage::QtFilePage (QWidget* parent) : QWidget (parent) {
200172
eval_scheme ("(use-modules (startup-tab startup-tab-file))");
201173

202-
// 初始化样式列表
203-
styles_= {
204-
{"generic", qt_translate ("Generic"),
205-
qt_translate ("General purpose document"), true},
206-
{"beamer", qt_translate ("Beamer"), qt_translate ("Presentation slides"),
207-
false},
208-
{"book", qt_translate ("Book"), qt_translate ("Book format"), false},
209-
{"exam", qt_translate ("Exam"), qt_translate ("Examination paper"),
210-
false},
211-
{"letter", qt_translate ("Letter"), qt_translate ("Letter format"),
212-
false},
213-
{"article", qt_translate ("Article"), qt_translate ("Article format"),
214-
false}};
174+
styles_= {{"generic", qt_translate ("New Blank Document"),
175+
qt_translate ("Create a new blank document"), true}};
215176

216177
setupUI ();
217178
loadRecentDocs ();

0 commit comments

Comments
 (0)