From 1fac1cb9dd4b3d1a6a6ddb8a9d646f9f622c224e Mon Sep 17 00:00:00 2001 From: ronso0 Date: Wed, 25 Oct 2023 14:42:08 +0200 Subject: [PATCH] Track table header menu: don't close after toggling checkbox Pressing Return on a selected checkbox will toggle and close --- res/skins/Deere/style.qss | 12 ++-- res/skins/LateNight/style_classic.qss | 12 ++-- res/skins/LateNight/style_palemoon.qss | 12 ++-- res/skins/Shade/style.qss | 13 ++-- res/skins/Shade/style_dark.qss | 9 +-- res/skins/Shade/style_summer_sunset.qss | 11 ++-- res/skins/Tango/style.qss | 12 ++-- res/skins/default.qss | 8 +-- src/widget/wtracktableviewheader.cpp | 79 ++++++++++++++++--------- src/widget/wtracktableviewheader.h | 5 +- 10 files changed, 108 insertions(+), 65 deletions(-) diff --git a/res/skins/Deere/style.qss b/res/skins/Deere/style.qss index 293ec874de61..01700691d3ff 100644 --- a/res/skins/Deere/style.qss +++ b/res/skins/Deere/style.qss @@ -1960,7 +1960,7 @@ QToolTip, WLibrarySidebar QMenu, WLibrarySidebar QMenu::item, WTrackTableViewHeader QMenu, -WTrackTableViewHeader QMenu::item, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WLibraryTextBrowser QMenu::item, WTrackMenu, @@ -2015,8 +2015,9 @@ WSearchLineEdit QAbstractScrollArea, #MainMenu QMenu::indicator:unchecked:selected, WLibrarySidebar QMenu::item:selected, WLibrarySidebar QMenu::indicator:unchecked:selected, - WTrackTableViewHeader QMenu::item:selected, - WTrackTableViewHeader QMenu::indicator:unchecked:selected, + WTrackTableViewHeader QMenu QCheckBox:selected, + WTrackTableViewHeader QMenu QCheckBox:focus, + WTrackTableViewHeader QMenu QCheckBox:hover, WLibraryTextBrowser QMenu::item:selected, WTrackMenu::item:selected, WTrackMenu QMenu::item:selected, @@ -2225,7 +2226,7 @@ QPlainTextEdit QMenu::separator { } WLibrarySidebar QMenu::indicator, -WTrackTableViewHeader QMenu::indicator, +WTrackTableViewHeader QMenu QCheckBox::indicator, WTrackMenu QMenu QCheckBox::indicator { border: 1px solid #555; border-radius: 1px; @@ -2237,7 +2238,7 @@ WTrackMenu QMenu QCheckBox::indicator { QLineEdit QMenu::icon:selected, QPlainTextEdit QMenu::icon:selected, WLibrarySidebar QMenu::indicator:selected, -WTrackTableViewHeader QMenu::indicator:selected, +WTrackTableViewHeader QMenu QCheckBox::indicator:selected, WTrackMenu QMenu QCheckBox::indicator:selected { border: 1px solid #999; } @@ -2257,6 +2258,7 @@ WTrackMenu QMenu QCheckBox::indicator:disabled { background-color: #333; } WLibrarySidebar QMenu::indicator:checked, +WTrackTableViewHeader QMenu QCheckBox::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked { image: url(skin:/../Deere/icon/ic_library_checkmark_orange.svg); } diff --git a/res/skins/LateNight/style_classic.qss b/res/skins/LateNight/style_classic.qss index 8d419e0dbf4c..1d6f6eb59c0f 100644 --- a/res/skins/LateNight/style_classic.qss +++ b/res/skins/LateNight/style_classic.qss @@ -1110,6 +1110,7 @@ WLibrarySidebar, QToolTip, WLibrarySidebar QMenu, WTrackTableViewHeader QMenu, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WTrackMenu, WTrackMenu QMenu, @@ -2439,7 +2440,7 @@ QToolTip, WLibrarySidebar QMenu, WLibrarySidebar QMenu::item, WTrackTableViewHeader QMenu, -WTrackTableViewHeader QMenu::item, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WLibraryTextBrowser QMenu::item, WTrackMenu, @@ -2482,6 +2483,9 @@ WEffectSelector, #MainMenu QMenu::indicator:unchecked:selected, WLibrarySidebar QMenu::item:selected, WTrackTableViewHeader QMenu::item:selected, +WTrackTableViewHeader QMenu QCheckBox:selected, +WTrackTableViewHeader QMenu QCheckBox:focus, +WTrackTableViewHeader QMenu QCheckBox:hover, WTrackMenu::item:selected, WTrackMenu QMenu::item:selected, WTrackMenu QMenu QCheckBox:selected, @@ -2556,8 +2560,8 @@ QPlainTextEdit QMenu::item:disabled { } WLibrarySidebar QMenu::indicator:checked, + WTrackTableViewHeader QMenu QCheckBox::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked, - WTrackTableViewHeader QMenu::indicator:checked, WEffectSelector::indicator:checked, WEffectChainPresetSelector::indicator:checked, WEffectChainPresetButton QMenu QCheckBox::indicator:checked, @@ -2629,8 +2633,8 @@ QPlainTextEdit QMenu::item:disabled { selected, unchecked items would have a checkmark */ WLibrarySidebar QMenu::indicator:unchecked, WLibrarySidebar QMenu::indicator:unchecked:selected, -WTrackTableViewHeader QMenu::indicator:unchecked, -WTrackTableViewHeader QMenu::indicator:unchecked:selected, +WTrackTableViewHeader QMenu QCheckBox::indicator:unchecked, +WTrackTableViewHeader QMenu QCheckBox::indicator:unchecked:selected, WEffectSelector::indicator:unchecked, WEffectSelector::indicator:unchecked:selected, WEffectChainPresetSelector::indicator:unchecked, diff --git a/res/skins/LateNight/style_palemoon.qss b/res/skins/LateNight/style_palemoon.qss index c0d775092a1e..7d03027a6831 100644 --- a/res/skins/LateNight/style_palemoon.qss +++ b/res/skins/LateNight/style_palemoon.qss @@ -1202,6 +1202,7 @@ WLibrarySidebar, QToolTip, WLibrarySidebar QMenu, WTrackTableViewHeader QMenu, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WTrackMenu, WTrackMenu QMenu, @@ -2933,7 +2934,7 @@ QToolTip, WLibrarySidebar QMenu, WLibrarySidebar QMenu::item, WTrackTableViewHeader QMenu, -WTrackTableViewHeader QMenu::item, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WLibraryTextBrowser QMenu::item, WTrackMenu, @@ -2972,6 +2973,9 @@ WSearchLineEdit::item { #MainMenu QMenu::indicator:unchecked:selected, WLibrarySidebar QMenu::item:selected, WTrackTableViewHeader QMenu::item:selected, +WTrackTableViewHeader QMenu QCheckBox:selected, +WTrackTableViewHeader QMenu QCheckBox:focus, +WTrackTableViewHeader QMenu QCheckBox:hover, WTrackMenu::item:selected, WTrackMenu QMenu::item:selected, WTrackMenu QMenu QCheckBox:selected, @@ -3081,7 +3085,7 @@ QPlainTextEdit QMenu::item:disabled { image: url(skin:../LateNight/palemoon/buttons/btn__lib_checkbox.svg); } WLibrarySidebar QMenu::indicator:checked, - WTrackTableViewHeader QMenu::indicator:checked, + WTrackTableViewHeader QMenu QCheckBox::indicator:checked, WTrackTableView::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked, WEffectChainPresetButton QMenu QCheckBox::indicator:checked { @@ -3119,8 +3123,8 @@ QPlainTextEdit QMenu::item:disabled { selected, unchecked items would have a checkmark */ WLibrarySidebar QMenu::indicator:unchecked, WLibrarySidebar QMenu::indicator:unchecked:selected, -WTrackTableViewHeader QMenu::indicator:unchecked, -WTrackTableViewHeader QMenu::indicator:unchecked:selected, +WTrackTableViewHeader QMenu QCheckBox::indicator:unchecked, +WTrackTableViewHeader QMenu QCheckBox::indicator:unchecked:selected, WEffectSelector::indicator:unchecked, WEffectSelector::indicator:unchecked:selected, WEffectChainPresetSelector::indicator:unchecked, diff --git a/res/skins/Shade/style.qss b/res/skins/Shade/style.qss index 657f0b1e302a..be1267ff0627 100644 --- a/res/skins/Shade/style.qss +++ b/res/skins/Shade/style.qss @@ -31,6 +31,7 @@ WBeatSpinBox, QToolTip, WTrackTableViewHeader, WTrackTableViewHeader QMenu, +WTrackTableViewHeader QMenu QCheckBox, WTrackTableViewHeader::section, WLibrarySidebar QMenu, WLibraryTextBrowser, @@ -101,7 +102,7 @@ QToolTip, WLibrarySidebar QMenu, WLibrarySidebar QMenu::item, WTrackTableViewHeader QMenu, -WTrackTableViewHeader QMenu::item, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WTrackMenu, WTrackMenu::item, @@ -153,8 +154,9 @@ WBeatSpinBox, #MainMenu QMenu::indicator:unchecked:selected, WLibrarySidebar QMenu::item:selected, WLibrarySidebar QMenu::indicator:unchecked:selected, -WTrackTableViewHeader QMenu::item:selected, -WTrackTableViewHeader QMenu::indicator:unchecked:selected, +WTrackTableViewHeader QMenu QCheckBox:selected, +WTrackTableViewHeader QMenu QCheckBox:focus, +WTrackTableViewHeader QMenu QCheckBox:hover, WLibraryTextBrowser QMenu::item:selected, WTrackMenu::item:selected, WTrackMenu QMenu::item:selected, @@ -309,6 +311,7 @@ WEffectSelector QAbstractScrollArea, WSearchLineEdit::indicator, WSearchLineEdit::drop-down, WSearchLineEdit::indicator:unchecked, + WTrackTableViewHeader QMenu QCheckBox, #fadeModeCombobox::checked, #fadeModeCombobox::indicator, #fadeModeCombobox::drop-down, @@ -337,7 +340,7 @@ WEffectSelector QAbstractScrollArea, /* checked checkbox */ /* checkbox in Crate name context menu: "[ ] Auto DJ Track Source" */ WLibrarySidebar QMenu::indicator:checked, - WTrackTableViewHeader QMenu::indicator:checked, + WTrackTableViewHeader QMenu QCheckBox::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked, WEffectSelector::indicator:checked, #fadeModeCombobox::indicator:checked { @@ -389,7 +392,7 @@ WEffectSelector QAbstractScrollArea, } WLibrarySidebar QMenu::indicator, - WTrackTableViewHeader QMenu::indicator, + WTrackTableViewHeader QMenu QCheckBox::indicator, WTrackMenu QMenu QCheckBox::indicator { border-width: 1px; border-style: solid; diff --git a/res/skins/Shade/style_dark.qss b/res/skins/Shade/style_dark.qss index f981c2ec60d8..173a4c1f17ad 100644 --- a/res/skins/Shade/style_dark.qss +++ b/res/skins/Shade/style_dark.qss @@ -6,7 +6,7 @@ QToolTip, WLibrarySidebar QMenu, WLibrarySidebar QMenu::item, WTrackTableViewHeader QMenu, -WTrackTableViewHeader QMenu::item, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WLibraryTextBrowser QMenu::item, WTrackMenu, @@ -54,8 +54,9 @@ WEffectSelector::indicator:unchecked, #MainMenu QMenu::indicator:unchecked:selected, WLibrarySidebar QMenu::item:selected, WLibrarySidebar QMenu::indicator:unchecked:selected, -WTrackTableViewHeader QMenu::item:selected, -WTrackTableViewHeader QMenu::indicator:unchecked:selected, +WTrackTableViewHeader QMenu:selected, +WTrackTableViewHeader QMenu:focus, +WTrackTableViewHeader QMenu:hover, WLibraryTextBrowser QMenu::item:selected, WTrackMenu::item:selected, WTrackMenu QMenu::item:selected, @@ -101,7 +102,7 @@ WEffectSelector::indicator:unchecked:selected, /* checked checkbox */ /* checkbox in Crate name context menu: "[ ] Auto DJ Track Source" */ WLibrarySidebar QMenu::indicator:checked, - WTrackTableViewHeader QMenu::indicator:checked, + WTrackTableViewHeader QMenu QCheckBox::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked, WEffectSelector::indicator:checked, #fadeModeCombobox::indicator:checked { diff --git a/res/skins/Shade/style_summer_sunset.qss b/res/skins/Shade/style_summer_sunset.qss index 772e53cf6068..e33e3eb128a7 100644 --- a/res/skins/Shade/style_summer_sunset.qss +++ b/res/skins/Shade/style_summer_sunset.qss @@ -6,7 +6,7 @@ QToolTip, WLibrarySidebar QMenu, WLibrarySidebar QMenu::item, WTrackTableViewHeader QMenu, -WTrackTableViewHeader QMenu::item, +WTrackTableViewHeader QMenu QCheckBox, QTextBrowser QMenu, QTextBrowser QMenu::item, WTrackMenu, @@ -64,8 +64,9 @@ WBeatSpinBox, #MainMenu QMenu::indicator:unchecked:selected, WLibrarySidebar QMenu::item:selected, WLibrarySidebar QMenu::indicator:unchecked:selected, -WTrackTableViewHeader QMenu::item:selected, -WTrackTableViewHeader QMenu::indicator:unchecked:selected, +WTrackTableViewHeader QMenu QCheckBox:selected, +WTrackTableViewHeader QMenu QCheckBox:focus, +WTrackTableViewHeader QMenu QCheckBox:hover, QTextBrowser QMenu::item:selected, WTrackMenu::item:selected, WTrackMenu QMenu::item:selected, @@ -99,7 +100,7 @@ WEffectSelector::indicator:unchecked:selected, } /* unchecked menu checkbox */ WLibrarySidebar QMenu::indicator:unchecked, - WTrackTableViewHeader QMenu::indicator:unchecked, + WTrackTableViewHeader QMenu QCheckBox::indicator:unchecked, WTrackMenu QMenu QCheckBox::indicator:enabled:unchecked { border-color: #222; } @@ -107,7 +108,7 @@ WEffectSelector::indicator:unchecked:selected, /* checked checkbox */ /* checkbox in Crate name context menu: "[ ] Auto DJ Track Source" */ WLibrarySidebar QMenu::indicator:checked, - WTrackTableViewHeader QMenu::indicator:checked, + WTrackTableViewHeader QMenu QCheckBox::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked, WEffectSelector::indicator:checked, #fadeModeCombobox::indicator:checked { diff --git a/res/skins/Tango/style.qss b/res/skins/Tango/style.qss index 648fb73df724..22e0a285667f 100644 --- a/res/skins/Tango/style.qss +++ b/res/skins/Tango/style.qss @@ -45,6 +45,8 @@ QToolTip, WCueMenuPopup, WCueMenuPopup QLabel, WCueMenuPopup QLineEdit, +WTrackTableViewHeader QMenu, +WTrackTableViewHeader QMenu QCheckBox, WTrackMenu, WTrackMenu QMenu, WTrackMenu QMenu QCheckBox, @@ -2287,7 +2289,7 @@ QToolTip, WLibrarySidebar QMenu, WLibrarySidebar QMenu::item, WTrackTableViewHeader QMenu, -WTrackTableViewHeader QMenu::item, +WTrackTableViewHeader QMenu QCheckBox, WLibraryTextBrowser QMenu, WLibraryTextBrowser QMenu::item, WTrackMenu, @@ -2356,7 +2358,9 @@ WSearchLineEdit QAbstractScrollArea, /* ::indicator:!checked won't work. use 'unchecked' */ #MainMenu QMenu::indicator:unchecked:selected, WLibrarySidebar QMenu::item:selected, -WTrackTableViewHeader QMenu::item:selected, +WTrackTableViewHeader QMenu QCheckBox:selected, +WTrackTableViewHeader QMenu QCheckBox:focus, +WTrackTableViewHeader QMenu QCheckBox:hover, WTrackMenu::item:selected, WTrackMenu QMenu::item:selected, WTrackMenu QMenu QCheckBox:selected, @@ -2414,7 +2418,7 @@ QPlainTextEdit QMenu::item:disabled { } WLibrarySidebar QMenu::indicator, -WTrackTableViewHeader QMenu::indicator, +WTrackTableViewHeader QMenu QCheckBox::indicator, WEffectChainPresetButton QMenu QCheckBox::indicator, WTrackMenu QMenu QCheckBox::indicator { background-color: #0f0f0f; @@ -2422,7 +2426,7 @@ WTrackMenu QMenu QCheckBox::indicator { border-radius: 1px; } WLibrarySidebar QMenu::indicator:checked, - WTrackTableViewHeader QMenu::indicator:checked, + WTrackTableViewHeader QMenu QCheckBox::indicator:checked, WEffectChainPresetButton QMenu QCheckBox::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked { image: url(skin:/../Tango/buttons/btn_lib_checkmark.svg); diff --git a/res/skins/default.qss b/res/skins/default.qss index 668ca94e393c..97ef209c2509 100644 --- a/res/skins/default.qss +++ b/res/skins/default.qss @@ -143,9 +143,7 @@ QLineEdit QMenu::icon, WLibraryTextBrowser QMenu::icon, /* - checkbox in Crate name context menu "[ ] Auto DJ Track Source" */ -WLibrarySidebar QMenu::indicator, -/* Column checkboxes in the table header menu */ -WTrackTableViewHeader QMenu::indicator { +WLibrarySidebar QMenu::indicator { /* Qt 5.12.8: negative margin-right increases the overall item width but has no effect on the indicator itself. positive margin-right pushes icon to the right... @@ -155,13 +153,15 @@ WTrackTableViewHeader QMenu::indicator { } /* items in Crate sub menu */ +/* Column checkboxes in the table header menu */ +WTrackTableViewHeader QMenu QCheckBox, WTrackMenu QMenu QCheckBox, WEffectChainPresetButton QMenu QCheckBox { padding: 0.17em 0.6em 0.17em 0.25em; } WLibrarySidebar QMenu::indicator, -WTrackTableViewHeader QMenu::indicator, +WTrackTableViewHeader QMenu QCheckBox::indicator, WTrackMenu QMenu QCheckBox::indicator, WEffectChainPresetButton QMenu QCheckBox::indicator { width: 0.7em; diff --git a/src/widget/wtracktableviewheader.cpp b/src/widget/wtracktableviewheader.cpp index be428ad08ed6..f828f6f999ca 100644 --- a/src/widget/wtracktableviewheader.cpp +++ b/src/widget/wtracktableviewheader.cpp @@ -1,15 +1,17 @@ #include "widget/wtracktableviewheader.h" +#include #include +#include #include "library/trackmodel.h" #include "moc_wtracktableviewheader.cpp" #include "util/math.h" +#include "util/parented_ptr.h" #define WTTVH_MINIMUM_SECTION_SIZE 20 -HeaderViewState::HeaderViewState(const QHeaderView& headers) -{ +HeaderViewState::HeaderViewState(const QHeaderView& headers) { QAbstractItemModel* model = headers.model(); for (int vi = 0; vi < headers.count(); ++vi) { int li = headers.logicalIndex(vi); @@ -146,6 +148,14 @@ void WTrackTableViewHeader::setModel(QAbstractItemModel* model) { setMinimumSectionSize(WTTVH_MINIMUM_SECTION_SIZE); + // Create a checkbox for each column. + // We want to keep the menu open after un/ticking a box because that allows + // to toggle multiple columns in one go, i.e. without having to open the + // menu again and again. This does not work with regular QActions so we + // create QCheckboxes inside QWidgetAction. + // * toggle a box with mouse click or Space on a selected box (via keyboard, + // not just hovered by mouse pointer) + // * toggle and close by pressing Return on a selected box int columns = model->columnCount(); for (int i = 0; i < columns; ++i) { if (trackModel->isColumnInternal(i)) { @@ -153,27 +163,40 @@ void WTrackTableViewHeader::setModel(QAbstractItemModel* model) { } QString title = model->headerData(i, orientation()).toString(); - auto* action = new QAction(title, &m_menu); - action->setCheckable(true); - - /* If Mixxx starts the first time or the header states have been cleared - * due to database schema evolution we gonna hide all columns that may - * contain a potential large number of NULL values. Here we uncheck - * item in the context menu that are hidden by default (e.g., key - * column) - */ + + auto pCheckBox = make_parented(title, &m_menu); + connect(pCheckBox.get(), + &QCheckBox::toggled, + this, + [this, i] { + showOrHideColumn(i); + }); + // If Mixxx starts the first time or the header states have been cleared + // due to database schema evolution we gonna hide all columns that may + // contain a potential large number of NULL values. Here we uncheck + // the items that are hidden by default (e.g., key column). if (!hasPersistedHeaderState() && trackModel->isColumnHiddenByDefault(i)) { - action->setChecked(false); + pCheckBox->setChecked(false); } else { - action->setChecked(!isSectionHidden(i)); + pCheckBox->setChecked(!isSectionHidden(i)); } - // Map this action's signals - m_columnActions.insert(i, action); - connect(action, &QAction::triggered, - this, [this, i] { showOrHideColumn(i); }); - m_menu.addAction(action); + auto pAction = make_parented(this); + pAction->setDefaultWidget(pCheckBox.get()); + // Pressing Return triggers the action but that would not toggle the + // checkbox, we need to do this ourselves while the menu is being closed. + connect(pAction, + &QAction::triggered, + this, + [this, pCheckBox{pCheckBox.get()}, i] { + pCheckBox->toggle(); + showOrHideColumn(i); + }); + + // Keep a map of checkboxes and columns + m_columnCheckBoxes.insert(i, pCheckBox.get()); + m_menu.addAction(pAction); // force the section size to be a least WTTVH_MINIMUM_SECTION_SIZE if (sectionSize(i) < WTTVH_MINIMUM_SECTION_SIZE) { @@ -251,37 +274,37 @@ void WTrackTableViewHeader::clearActions() { // The QActions are parented to the menu, so clearing deletes them. Since // they are deleted we don't have to disconnect their signals from the // mapper. - m_columnActions.clear(); + m_columnCheckBoxes.clear(); m_menu.clear(); } void WTrackTableViewHeader::showOrHideColumn(int column) { - if (!m_columnActions.contains(column)) { - qDebug() << "WTrackTableViewHeader got invalid column" << column; + auto it = m_columnCheckBoxes.constFind(column); + if (it == m_columnCheckBoxes.constEnd()) { + qWarning() << "WTrackTableViewHeader got invalid column" << column; return; } - - QAction* action = m_columnActions[column]; - if (action->isChecked()) { + QCheckBox* pCheckBox = it.value(); + if (pCheckBox->isChecked()) { showSection(column); } else { // If the user hides every column then the table will disappear. This // guards against that. NB: hiddenCount reflects checked QAction's so // size-hiddenCount will be zero the moment they uncheck the last // section. - if (m_columnActions.size() - hiddenCount() > 0) { + if (m_columnCheckBoxes.size() - hiddenCount() > 0) { hideSection(column); } else { // Otherwise, ignore the request and re-check this QAction. - action->setChecked(true); + pCheckBox->setChecked(true); } } } int WTrackTableViewHeader::hiddenCount() { int count = 0; - for (const auto& pAction : std::as_const(m_columnActions)) { - if (!pAction->isChecked()) { + for (const auto& pCheckBox : std::as_const(m_columnCheckBoxes)) { + if (!pCheckBox->isChecked()) { count += 1; } } diff --git a/src/widget/wtracktableviewheader.h b/src/widget/wtracktableviewheader.h index b7556ac416a2..54d46c5495b2 100644 --- a/src/widget/wtracktableviewheader.h +++ b/src/widget/wtracktableviewheader.h @@ -8,8 +8,9 @@ class TrackModel; class QAction; -class QWidget; +class QCheckBox; class QContextMenuEvent; +class QWidget; // Thanks to StackOverflow http://stackoverflow.com/questions/1163030/qt-qtableview-and-horizontalheader-restorestate // answer with this code snippet: http://codepad.org/2gPIMPYU @@ -74,5 +75,5 @@ class WTrackTableViewHeader : public QHeaderView { TrackModel* getTrackModel(); QMenu m_menu; - QMap m_columnActions; + QMap m_columnCheckBoxes; };