From 36dd2945b031f354c75fdf6d0acc5c61bd54dc81 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 23 Jul 2023 00:36:08 -0500 Subject: [PATCH] Placefile URL readability updates --- scwx-qt/scwx-qt.cmake | 2 ++ .../source/scwx/qt/model/placefile_model.cpp | 25 +++++++++++++++++ .../scwx/qt/ui/left_elided_item_delegate.cpp | 28 +++++++++++++++++++ .../scwx/qt/ui/left_elided_item_delegate.hpp | 25 +++++++++++++++++ .../scwx/qt/ui/placefile_settings_widget.cpp | 15 ++++++++-- 5 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.cpp create mode 100644 scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.hpp diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 745cd8a2..ebf8ca16 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -159,6 +159,7 @@ set(HDR_UI source/scwx/qt/ui/about_dialog.hpp source/scwx/qt/ui/flow_layout.hpp source/scwx/qt/ui/imgui_debug_dialog.hpp source/scwx/qt/ui/imgui_debug_widget.hpp + source/scwx/qt/ui/left_elided_item_delegate.hpp source/scwx/qt/ui/level2_products_widget.hpp source/scwx/qt/ui/level2_settings_widget.hpp source/scwx/qt/ui/level3_products_widget.hpp @@ -175,6 +176,7 @@ set(SRC_UI source/scwx/qt/ui/about_dialog.cpp source/scwx/qt/ui/flow_layout.cpp source/scwx/qt/ui/imgui_debug_dialog.cpp source/scwx/qt/ui/imgui_debug_widget.cpp + source/scwx/qt/ui/left_elided_item_delegate.cpp source/scwx/qt/ui/level2_products_widget.cpp source/scwx/qt/ui/level2_settings_widget.cpp source/scwx/qt/ui/level3_products_widget.cpp diff --git a/scwx-qt/source/scwx/qt/model/placefile_model.cpp b/scwx-qt/source/scwx/qt/model/placefile_model.cpp index 5975547e..6cfbe807 100644 --- a/scwx-qt/source/scwx/qt/model/placefile_model.cpp +++ b/scwx-qt/source/scwx/qt/model/placefile_model.cpp @@ -3,6 +3,9 @@ #include #include +#include +#include + namespace scwx { namespace qt @@ -79,6 +82,7 @@ QVariant PlacefileModel::data(const QModelIndex& index, int role) const const auto& placefileName = p->placefileNames_.at(index.row()); if (role == Qt::ItemDataRole::DisplayRole || + role == Qt::ItemDataRole::ToolTipRole || role == types::ItemDataRole::SortRole) { switch (index.column()) @@ -152,6 +156,27 @@ QVariant PlacefileModel::headerData(int section, } } } + else if (role == Qt::ItemDataRole::SizeHintRole) + { + static const QFontMetrics fontMetrics(QApplication::font()); + + QSize contentsSize {}; + + switch (section) + { + case static_cast(Column::Url): + contentsSize = fontMetrics.size(0, QString(15, 'W')); + break; + + default: + break; + } + + if (contentsSize != QSize {}) + { + return contentsSize; + } + } return QVariant(); } diff --git a/scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.cpp b/scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.cpp new file mode 100644 index 00000000..a102e052 --- /dev/null +++ b/scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.cpp @@ -0,0 +1,28 @@ +#include + +namespace scwx +{ +namespace qt +{ +namespace ui +{ + +LeftElidedItemDelegate::LeftElidedItemDelegate(QObject* parent) : + QStyledItemDelegate(parent) +{ +} + +LeftElidedItemDelegate::~LeftElidedItemDelegate() {} + +void LeftElidedItemDelegate::paint(QPainter* painter, + const QStyleOptionViewItem& option, + const QModelIndex& index) const +{ + QStyleOptionViewItem newOption = option; + newOption.textElideMode = Qt::TextElideMode::ElideLeft; + QStyledItemDelegate::paint(painter, newOption, index); +} + +} // namespace ui +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.hpp b/scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.hpp new file mode 100644 index 00000000..9b8223a1 --- /dev/null +++ b/scwx-qt/source/scwx/qt/ui/left_elided_item_delegate.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +namespace scwx +{ +namespace qt +{ +namespace ui +{ + +class LeftElidedItemDelegate : public QStyledItemDelegate +{ +public: + explicit LeftElidedItemDelegate(QObject* parent = nullptr); + ~LeftElidedItemDelegate(); + + void paint(QPainter* painter, + const QStyleOptionViewItem& option, + const QModelIndex& index) const override; +}; + +} // namespace ui +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.cpp b/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.cpp index f75522a7..01612320 100644 --- a/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -25,7 +26,8 @@ public: self_ {self}, openUrlDialog_ {new OpenUrlDialog(QObject::tr("Add Placefile"), self_)}, placefileModel_ {new model::PlacefileModel(self_)}, - placefileProxyModel_ {new QSortFilterProxyModel(self_)} + placefileProxyModel_ {new QSortFilterProxyModel(self_)}, + leftElidedItemDelegate_ {new LeftElidedItemDelegate(self_)} { placefileProxyModel_->setSourceModel(placefileModel_); placefileProxyModel_->setSortRole(types::SortRole); @@ -39,8 +41,9 @@ public: PlacefileSettingsWidget* self_; OpenUrlDialog* openUrlDialog_; - model::PlacefileModel* placefileModel_; - QSortFilterProxyModel* placefileProxyModel_; + model::PlacefileModel* placefileModel_; + QSortFilterProxyModel* placefileProxyModel_; + LeftElidedItemDelegate* leftElidedItemDelegate_; }; PlacefileSettingsWidget::PlacefileSettingsWidget(QWidget* parent) : @@ -58,6 +61,12 @@ PlacefileSettingsWidget::PlacefileSettingsWidget(QWidget* parent) : static_cast(model::PlacefileModel::Column::Enabled)); ui->placefileView->resizeColumnToContents( static_cast(model::PlacefileModel::Column::Thresholds)); + ui->placefileView->resizeColumnToContents( + static_cast(model::PlacefileModel::Column::Url)); + + ui->placefileView->setItemDelegateForColumn( + static_cast(model::PlacefileModel::Column::Url), + p->leftElidedItemDelegate_); p->ConnectSignals(); }