From 3fae8ec40f9dc16637fd9886592eeafdd8e96c79 Mon Sep 17 00:00:00 2001 From: Liu Zhangjian Date: Mon, 6 Jan 2025 13:25:13 +0800 Subject: [PATCH] fix: [session] Optimized the display of session name as title Log: fix bug Bug: https://pms.uniontech.com/bug-view-298387.html --- src/plugins/core/session/sessionmodel.cpp | 1 + .../recent/mainframe/sessionitemwidget.cpp | 26 +++++++++++++++++-- .../recent/mainframe/sessionitemwidget.h | 5 ++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/plugins/core/session/sessionmodel.cpp b/src/plugins/core/session/sessionmodel.cpp index 33cb61da6..1d5445146 100644 --- a/src/plugins/core/session/sessionmodel.cpp +++ b/src/plugins/core/session/sessionmodel.cpp @@ -42,6 +42,7 @@ QVariant SessionModel::data(const QModelIndex &index, int role) const const auto &sessionName = sessionList.at(index.row()); switch (role) { + case Qt::ToolTipRole: case Qt::DisplayRole: switch (index.column()) { case 0: diff --git a/src/plugins/recent/mainframe/sessionitemwidget.cpp b/src/plugins/recent/mainframe/sessionitemwidget.cpp index 153d19fc3..b084a31dd 100644 --- a/src/plugins/recent/mainframe/sessionitemwidget.cpp +++ b/src/plugins/recent/mainframe/sessionitemwidget.cpp @@ -58,12 +58,25 @@ void ArrowHeaderLine::setExpand(bool value) void ArrowHeaderLine::setTitle(const QString &title) { - titleLabel->setText(title); + titleText = title; + updateTitle(); } QString ArrowHeaderLine::title() const { - return titleLabel->text(); + return titleText; +} + +void ArrowHeaderLine::setTitleTip(const QString &tooltip) +{ + titleLabel->setToolTip(tooltip); +} + +void ArrowHeaderLine::resizeEvent(QResizeEvent *e) +{ + updateTitle(); + + return QWidget::resizeEvent(e); } void ArrowHeaderLine::changeEvent(QEvent *e) @@ -110,6 +123,13 @@ void ArrowHeaderLine::reverseArrowDirection() setExpand(!isExpanded); } +void ArrowHeaderLine::updateTitle() +{ + QFontMetrics fm = titleLabel->fontMetrics(); + auto displayText = fm.elidedText(titleText, Qt::ElideRight, titleLabel->width()); + titleLabel->setText(displayText); +} + class SessionItemWidgetPrivate : public QObject { public: @@ -307,6 +327,7 @@ void SessionItemWidgetPrivate::runInputDialog(const QString &title, const QStrin dlg.getButton(2)->setEnabled(!text.isEmpty()); }); dlg.addContent(lineEdit); + dlg.setFocusProxy(lineEdit); dlg.addButton(SessionItemWidget::tr("Cancel", "button")); dlg.addButton(actList[0]); @@ -391,6 +412,7 @@ void SessionItemWidget::updateSession() if (isCurrentSession && !isDefaultVirgin) title = tr("%1 (current session)").arg(title); d->headerLine->setTitle(title); + d->headerLine->setTitleTip(d->sessionName); const auto &sessionCfg = d->sessionSrv->sessionFile(d->sessionName); if (!QFile::exists(sessionCfg)) diff --git a/src/plugins/recent/mainframe/sessionitemwidget.h b/src/plugins/recent/mainframe/sessionitemwidget.h index 81abe8705..52a53a1ec 100644 --- a/src/plugins/recent/mainframe/sessionitemwidget.h +++ b/src/plugins/recent/mainframe/sessionitemwidget.h @@ -31,18 +31,23 @@ class ArrowHeaderLine : public QWidget void setExpand(bool value); void setTitle(const QString &title); QString title() const; + void setTitleTip(const QString &tooltip); Q_SIGNALS: void expandChanged(); void itemClicked(); protected: + void resizeEvent(QResizeEvent *e) override; void changeEvent(QEvent *e) override; bool eventFilter(QObject *obj, QEvent *e) override; private: void reverseArrowDirection(); + void updateTitle(); + bool isExpanded { false }; + QString titleText; DTK_WIDGET_NAMESPACE::DToolButton *arrowButton { nullptr }; DTK_WIDGET_NAMESPACE::DLabel *titleLabel { nullptr }; };