From 38619888c675214ed7a967c90f6573f320384e24 Mon Sep 17 00:00:00 2001 From: ShaopengLin Date: Thu, 29 Aug 2024 08:14:08 -0400 Subject: [PATCH] Fix text elide in suggestions --- src/searchbar.cpp | 1 + src/suggestionlistmodel.cpp | 19 +++++++++++++++++++ src/suggestiontreeview.cpp | 1 + 3 files changed, 21 insertions(+) diff --git a/src/searchbar.cpp b/src/searchbar.cpp index 18f57ea9..813c84b7 100644 --- a/src/searchbar.cpp +++ b/src/searchbar.cpp @@ -264,6 +264,7 @@ MultiZimButton::MultiZimButton(QWidget *parent) : QToolButton(parent), mp_button mp_buttonList = new QListWidget(this); auto popupAction = new QWidgetAction(menu()); popupAction->setDefaultWidget(mp_buttonList); + mp_buttonList->setTextElideMode(Qt::ElideNone); menu()->addAction(popupAction); mp_buttonList->setMinimumWidth(menu()->sizeHint().width()); mp_buttonList->setMinimumHeight(42 * 7); diff --git a/src/suggestionlistmodel.cpp b/src/suggestionlistmodel.cpp index c9b1ef7b..1712240f 100644 --- a/src/suggestionlistmodel.cpp +++ b/src/suggestionlistmodel.cpp @@ -39,6 +39,25 @@ QVariant SuggestionListModel::data(const QModelIndex &index, int role) const switch (role) { case Qt::DisplayRole: + { + if (row < m_suggestions.size()) + { + QString suggestionText = m_suggestions.at(row); + auto& searchBar = KiwixApp::instance()->getMainWindow()->getTopWidget()->getSearchBar(); + auto width = searchBar.getLineEdit().width() - 53; + + QFontMetrics metrics(QFont("Selawik", 16)); + QString elidedText = metrics.elidedText(suggestionText, Qt::ElideRight, width); + if (suggestionText != elidedText) + { + elidedText.chop(5); + KiwixApp::isRightToLeft() == elidedText.isRightToLeft() ? elidedText.append("(...)") : elidedText.prepend("(...)"); + return elidedText; + } + return suggestionText; + } + break; + } case Qt::EditRole: if (row < m_suggestions.size()) return m_suggestions.at(row); diff --git a/src/suggestiontreeview.cpp b/src/suggestiontreeview.cpp index e137fd49..982dacaf 100644 --- a/src/suggestiontreeview.cpp +++ b/src/suggestiontreeview.cpp @@ -20,6 +20,7 @@ void SuggestionTreeView::postSetPopUpInitialization() setRootIsDecorated(false); setStyleSheet(KiwixApp::instance()->parseStyleFromFile(":/css/popup.css")); setIconSize(QSize(32, 32)); + setTextElideMode(Qt::TextElideMode::ElideNone); connect(model(), &QAbstractItemModel::modelReset, [=](){ // auto& searchBar = KiwixApp::instance()->getMainWindow()->getTopWidget()->getSearchBar(); // //10 padding