Add context menu to pick what columns are visible in the classic comics view

This commit is contained in:
Luis Ángel San Martín 2023-10-09 19:27:47 +02:00
parent e6e5208001
commit 3747c71c66
2 changed files with 59 additions and 30 deletions

View File

@ -60,10 +60,7 @@ ClassicComicsView::ClassicComicsView(QWidget *parent)
sVertical->addWidget(comics);
tableView->setContextMenuPolicy(Qt::CustomContextMenu);
// config--------------------------------------------------
if (settings->contains(COMICS_VIEW_HEADERS))
tableView->horizontalHeader()->restoreState(settings->value(COMICS_VIEW_HEADERS).toByteArray());
tableView->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu);
// connections---------------------------------------------
connect(tableView, &QAbstractItemView::clicked, this, &ClassicComicsView::centerComicFlow);
@ -75,6 +72,7 @@ ClassicComicsView::ClassicComicsView(QWidget *parent)
connect(tableView->horizontalHeader(), &QHeaderView::sectionResized, this, &ClassicComicsView::saveTableHeadersStatus);
connect(comicFlow, &QWidget::customContextMenuRequested, this, &ClassicComicsView::requestedViewContextMenu);
connect(tableView, &QWidget::customContextMenuRequested, this, &ClassicComicsView::requestedItemContextMenu);
connect(tableView->horizontalHeader(), &QWidget::customContextMenuRequested, this, &ClassicComicsView::requestedHeaderContextMenu);
layout->addWidget(sVertical);
setLayout(layout);
@ -84,8 +82,13 @@ ClassicComicsView::ClassicComicsView(QWidget *parent)
sVertical->setCollapsible(1, false);
#endif
if (settings->contains(COMICS_VIEW_FLOW_SPLITTER_STATUS))
sVertical->restoreState(settings->value(COMICS_VIEW_FLOW_SPLITTER_STATUS).toByteArray());
if (settings->contains(COMICS_VIEW_FLOW_SPLITTER_STATUS)) {
try {
sVertical->restoreState(settings->value(COMICS_VIEW_FLOW_SPLITTER_STATUS).toByteArray());
} catch (...) {
// do nothing
}
}
// hide flow widgets
hideFlowViewAction = new QAction(this);
@ -150,34 +153,38 @@ void ClassicComicsView::setModel(ComicModel *model)
#else
tableView->horizontalHeader()->setMovable(true);
#endif
// TODO parametrizar la configuración de las columnas
/*if(!settings->contains(COMICS_VIEW_HEADERS))
{*/
for (int i = 0; i < tableView->horizontalHeader()->count(); i++)
tableView->horizontalHeader()->hideSection(i);
tableView->horizontalHeader()->showSection(ComicModel::Number);
tableView->horizontalHeader()->showSection(ComicModel::Title);
tableView->horizontalHeader()->showSection(ComicModel::FileName);
tableView->horizontalHeader()->showSection(ComicModel::NumPages);
tableView->horizontalHeader()->showSection(ComicModel::Hash); // Size is part of the Hash...TODO add Columns::Size to Columns
tableView->horizontalHeader()->showSection(ComicModel::ReadColumn);
tableView->horizontalHeader()->showSection(ComicModel::CurrentPage);
tableView->horizontalHeader()->showSection(ComicModel::PublicationDate);
tableView->horizontalHeader()->showSection(ComicModel::Rating);
//}
// debido a un bug, qt4 no es capaz de ajustar el ancho teniendo en cuenta todas la filas (no sólo las visibles)
// así que se ecala la primera vez y después se deja el control al usuario.
// if(!settings->contains(COMICS_VIEW_HEADERS))
QStringList paths = model->getPaths(model->getCurrentPath()); // TODO ComicsView: get currentpath from somewhere currentPath());
comicFlow->setImagePaths(paths);
comicFlow->setMarks(model->getReadList());
// comicFlow->setFocus(Qt::OtherFocusReason);
if (settings->contains(COMICS_VIEW_HEADERS))
tableView->horizontalHeader()->restoreState(settings->value(COMICS_VIEW_HEADERS).toByteArray());
bool loadDefaults = false;
if (settings->contains(COMICS_VIEW_HEADERS)) {
try {
loadDefaults = !tableView->horizontalHeader()->restoreState(settings->value(COMICS_VIEW_HEADERS).toByteArray());
} catch (...) {
loadDefaults = true;
}
}
if (loadDefaults) {
// default columns and order
for (int i = 0; i < tableView->horizontalHeader()->count(); i++)
tableView->horizontalHeader()->hideSection(i);
tableView->horizontalHeader()->showSection(ComicModel::Number);
tableView->horizontalHeader()->showSection(ComicModel::Title);
tableView->horizontalHeader()->showSection(ComicModel::FileName);
tableView->horizontalHeader()->showSection(ComicModel::NumPages);
tableView->horizontalHeader()->showSection(ComicModel::Size);
tableView->horizontalHeader()->showSection(ComicModel::ReadColumn);
tableView->horizontalHeader()->showSection(ComicModel::CurrentPage);
tableView->horizontalHeader()->showSection(ComicModel::PublicationDate);
tableView->horizontalHeader()->showSection(ComicModel::Rating);
tableView->horizontalHeader()->moveSection(ComicModel::CurrentPage, 3);
tableView->horizontalHeader()->moveSection(ComicModel::Rating, 12);
tableView->horizontalHeader()->moveSection(ComicModel::Size, 5);
}
tableView->resizeColumnsToContents();
@ -290,6 +297,27 @@ void ClassicComicsView::requestedItemContextMenu(const QPoint &point)
emit customContextMenuItemRequested(tableView->mapTo(this, point));
}
void ClassicComicsView::requestedHeaderContextMenu(const QPoint &point)
{
QMenu menu;
for (int i = 0; i < tableView->model()->columnCount(); ++i) {
auto title = tableView->model()->headerData(i, Qt::Horizontal).toString();
if (!title.isEmpty()) {
auto action = menu.addAction(tableView->model()->headerData(i, Qt::Horizontal).toString());
action->setCheckable(true);
action->setChecked(!tableView->isColumnHidden(i));
connect(action, &QAction::toggled, tableView, [this, i](bool checked) {
tableView->horizontalHeader()->setSectionHidden(i, !checked);
});
connect(action, &QAction::toggled, this, &ClassicComicsView::saveTableHeadersStatus);
}
}
menu.exec(this->tableView->horizontalHeader()->mapToGlobal(point));
}
void ClassicComicsView::setShowMarks(bool show)
{
comicFlow->setShowMarks(show);

View File

@ -52,6 +52,7 @@ protected slots:
void hideComicFlow(bool hide);
void requestedViewContextMenu(const QPoint &point);
void requestedItemContextMenu(const QPoint &point);
void requestedHeaderContextMenu(const QPoint &point);
private:
YACReaderTableView *tableView;