From 5887e75e4e7276fb19877832a6c697ae82b82480 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 | 21 ++++++++++++++++++++- src/suggestiontreeview.cpp | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) 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..1302b9f2 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); @@ -88,7 +107,7 @@ void SuggestionListModel::resetSuggestions(const QStringList &suggestions) { beginResetModel(); m_suggestions.clear(); - for (const auto suggestion : suggestions) + for (const auto& suggestion : suggestions) m_suggestions.append(suggestion); endResetModel(); } 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