Placefile URL readability updates

This commit is contained in:
Dan Paulat 2023-07-23 00:36:08 -05:00
parent 014ea9d39e
commit 36dd2945b0
5 changed files with 92 additions and 3 deletions

View file

@ -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

View file

@ -3,6 +3,9 @@
#include <scwx/qt/types/qt_types.hpp>
#include <scwx/util/logger.hpp>
#include <QApplication>
#include <QFontMetrics>
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<int>(Column::Url):
contentsSize = fontMetrics.size(0, QString(15, 'W'));
break;
default:
break;
}
if (contentsSize != QSize {})
{
return contentsSize;
}
}
return QVariant();
}

View file

@ -0,0 +1,28 @@
#include <scwx/qt/ui/left_elided_item_delegate.hpp>
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

View file

@ -0,0 +1,25 @@
#pragma once
#include <QStyledItemDelegate>
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

View file

@ -3,6 +3,7 @@
#include <scwx/qt/model/placefile_model.hpp>
#include <scwx/qt/types/qt_types.hpp>
#include <scwx/qt/ui/left_elided_item_delegate.hpp>
#include <scwx/qt/ui/open_url_dialog.hpp>
#include <scwx/util/logger.hpp>
@ -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);
@ -41,6 +43,7 @@ public:
model::PlacefileModel* placefileModel_;
QSortFilterProxyModel* placefileProxyModel_;
LeftElidedItemDelegate* leftElidedItemDelegate_;
};
PlacefileSettingsWidget::PlacefileSettingsWidget(QWidget* parent) :
@ -58,6 +61,12 @@ PlacefileSettingsWidget::PlacefileSettingsWidget(QWidget* parent) :
static_cast<int>(model::PlacefileModel::Column::Enabled));
ui->placefileView->resizeColumnToContents(
static_cast<int>(model::PlacefileModel::Column::Thresholds));
ui->placefileView->resizeColumnToContents(
static_cast<int>(model::PlacefileModel::Column::Url));
ui->placefileView->setItemDelegateForColumn(
static_cast<int>(model::PlacefileModel::Column::Url),
p->leftElidedItemDelegate_);
p->ConnectSignals();
}