fix article previewer toolbar behavior for many labels + experimentally disable some SQL to make performance impact check

This commit is contained in:
Martin Rotter 2023-05-15 09:18:56 +02:00
parent daf0ca4636
commit fadd29ecd9
3 changed files with 31 additions and 17 deletions

View File

@ -37,10 +37,14 @@ QMap<int, QString> DatabaseQueries::messageTableAttributes(bool only_msg_table)
"THEN 'true' " "THEN 'true' "
"ELSE 'false' " "ELSE 'false' "
"END AS has_enclosures"); "END AS has_enclosures");
field_names[MSG_DB_LABELS] = QSL("1 as msg_labels");
/*
field_names[MSG_DB_LABELS] = field_names[MSG_DB_LABELS] =
QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.custom_id IN (SELECT " QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.custom_id IN (SELECT "
"LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = " "LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = "
"Messages.account_id AND LabelsInMessages.message = Messages.custom_id)) as msg_labels"); "Messages.account_id AND LabelsInMessages.message = Messages.custom_id)) as msg_labels");
*/
return field_names; return field_names;
} }

View File

@ -49,12 +49,12 @@ void MessagePreviewer::createConnections() {
MessagePreviewer::MessagePreviewer(QWidget* parent) MessagePreviewer::MessagePreviewer(QWidget* parent)
: QWidget(parent), m_mainLayout(new QGridLayout(this)), m_viewerLayout(new QStackedLayout()), : QWidget(parent), m_mainLayout(new QGridLayout(this)), m_viewerLayout(new QStackedLayout()),
m_toolBar(new QToolBar(this)), m_msgBrowser(new WebBrowser(nullptr, this)), m_separator(nullptr), m_toolBar(new QToolBar(this)), m_msgBrowser(new WebBrowser(nullptr, this)), m_separator(nullptr),
m_btnLabels(QList<QPair<LabelButton*, QAction*>>()), m_itemDetails(new ItemDetails(this)), m_toolbarVisible(true) { m_btnLabels(QList<LabelToolbarAction*>()), m_itemDetails(new ItemDetails(this)), m_toolbarVisible(true) {
m_toolBar->setOrientation(Qt::Orientation::Vertical); m_toolBar->setOrientation(Qt::Orientation::Vertical);
// NOTE: To make sure that if we have many labels and short message // NOTE: To make sure that if we have many labels and short message
// that whole toolbar is visible. // that whole toolbar is visible.
m_toolBar->setSizePolicy(m_toolBar->sizePolicy().horizontalPolicy(), QSizePolicy::Policy::MinimumExpanding); // m_toolBar->setSizePolicy(m_toolBar->sizePolicy().horizontalPolicy(), QSizePolicy::Policy::MinimumExpanding);
// This layout holds standard article browser on index 0 // This layout holds standard article browser on index 0
// and optional custom browser on index 1. // and optional custom browser on index 1.
@ -183,7 +183,7 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) {
} }
void MessagePreviewer::switchLabel(bool assign) { void MessagePreviewer::switchLabel(bool assign) {
auto lbl = qobject_cast<LabelButton*>(sender())->label(); auto lbl = qobject_cast<LabelToolbarAction*>(sender())->label();
if (lbl == nullptr) { if (lbl == nullptr) {
return; return;
@ -260,9 +260,8 @@ void MessagePreviewer::updateButtons() {
void MessagePreviewer::updateLabels(bool only_clear) { void MessagePreviewer::updateLabels(bool only_clear) {
for (auto& lbl : m_btnLabels) { for (auto& lbl : m_btnLabels) {
m_toolBar->removeAction(lbl.second); m_toolBar->removeAction(lbl);
lbl.second->deleteLater(); lbl->deleteLater();
lbl.first->deleteLater();
} }
m_btnLabels.clear(); m_btnLabels.clear();
@ -281,24 +280,35 @@ void MessagePreviewer::updateLabels(bool only_clear) {
auto lbls = m_root.data()->getParentServiceRoot()->labelsNode()->labels(); auto lbls = m_root.data()->getParentServiceRoot()->labelsNode()->labels();
for (auto* label : lbls) { for (auto* label : lbls) {
/*
LabelButton* btn_label = new LabelButton(this); LabelButton* btn_label = new LabelButton(this);
btn_label->setLabel(label); btn_label->setLabel(label);
btn_label->setCheckable(true); btn_label->setCheckable(true);
btn_label->setIcon(Label::generateIcon(label->color())); btn_label->setIcon(Label::generateIcon(label->color()));
btn_label->setAutoRaise(false); btn_label->setAutoRaise(false);
btn_label->setText(QSL(" ") + label->title()); btn_label->setText();
btn_label->setToolButtonStyle(Qt::ToolButtonStyle(qApp->settings() btn_label->setToolButtonStyle(Qt::ToolButtonStyle(qApp->settings()
->value(GROUP(GUI), SETTING(GUI::ToolbarStyle)) ->value(GROUP(GUI), SETTING(GUI::ToolbarStyle))
.toInt())); .toInt()));
btn_label->setToolTip(label->title()); btn_label->setToolTip(label->title());
btn_label->setChecked(DatabaseQueries::isLabelAssignedToMessage(database, label, m_message)); btn_label->setChecked();
*/
QAction* act_label = m_toolBar->addWidget(btn_label); LabelToolbarAction* act_label = new LabelToolbarAction(this);
connect(btn_label, &QToolButton::toggled, this, &MessagePreviewer::switchLabel); act_label->setIcon(Label::generateIcon(label->color()));
act_label->setText(QSL(" ") + label->title());
act_label->setCheckable(true);
act_label->setChecked(DatabaseQueries::isLabelAssignedToMessage(database, label, m_message));
act_label->setToolTip(label->title());
act_label->setLabel(label);
m_btnLabels.append({btn_label, act_label}); m_toolBar->addAction(act_label);
connect(act_label, &QAction::toggled, this, &MessagePreviewer::switchLabel);
m_btnLabels.append(act_label);
} }
} }
} }
@ -319,12 +329,12 @@ void MessagePreviewer::ensureDefaultBrowserVisible() {
m_viewerLayout->setCurrentIndex(INDEX_DEFAULT); m_viewerLayout->setCurrentIndex(INDEX_DEFAULT);
} }
LabelButton::LabelButton(QWidget* parent) : QToolButton(parent), m_label(nullptr) {} LabelToolbarAction::LabelToolbarAction(QObject* parent) : QAction(parent), m_label(nullptr) {}
Label* LabelButton::label() const { Label* LabelToolbarAction::label() const {
return m_label.data(); return m_label.data();
} }
void LabelButton::setLabel(Label* label) { void LabelToolbarAction::setLabel(Label* label) {
m_label = label; m_label = label;
} }

View File

@ -18,11 +18,11 @@ class QToolBar;
class WebBrowser; class WebBrowser;
class ItemDetails; class ItemDetails;
class LabelButton : public QToolButton { class LabelToolbarAction : public QAction {
Q_OBJECT Q_OBJECT
public: public:
explicit LabelButton(QWidget* parent = nullptr); explicit LabelToolbarAction(QObject* parent = nullptr);
Label* label() const; Label* label() const;
void setLabel(Label* label); void setLabel(Label* label);
@ -79,7 +79,7 @@ class MessagePreviewer : public QWidget {
QAction* m_actionMarkUnread; QAction* m_actionMarkUnread;
QAction* m_actionSwitchImportance; QAction* m_actionSwitchImportance;
QAction* m_separator; QAction* m_separator;
QList<QPair<LabelButton*, QAction*>> m_btnLabels; QList<LabelToolbarAction*> m_btnLabels;
ItemDetails* m_itemDetails; ItemDetails* m_itemDetails;
bool m_toolbarVisible; bool m_toolbarVisible;