Skip to content

Commit

Permalink
Issue #228: [feature] reverse pages order
Browse files Browse the repository at this point in the history
  • Loading branch information
JakubMelka committed Dec 22, 2024
1 parent c1fd0cd commit 50dd7ad
Show file tree
Hide file tree
Showing 8 changed files with 143 additions and 9 deletions.
14 changes: 13 additions & 1 deletion Pdf4QtPageMaster/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ MainWindow::MainWindow(QWidget* parent) :
ui->actionAbout->setData(int(Operation::About));
ui->actionInvert_Selection->setData(int(Operation::InvertSelection));
ui->actionRegroup_Even_Odd->setData(int(Operation::RegroupEvenOdd));
ui->actionRegroup_Reverse->setData(int(Operation::RegroupReversed));
ui->actionRegroup_by_Page_Pairs->setData(int(Operation::RegroupPaired));
ui->actionRegroup_by_Outline->setData(int(Operation::RegroupOutline));
ui->actionRegroup_by_Alternating_Pages->setData(int(Operation::RegroupAlternatingPages));
Expand Down Expand Up @@ -164,7 +165,7 @@ MainWindow::MainWindow(QWidget* parent) :
selectToolbar->addActions({ ui->actionSelect_None, ui->actionSelect_All, ui->actionSelect_Even, ui->actionSelect_Odd, ui->actionSelect_Portrait, ui->actionSelect_Landscape, ui->actionInvert_Selection });
QToolBar* regroupToolbar = addToolBar(tr("&Regroup"));
regroupToolbar->setObjectName("regroup_toolbar");
regroupToolbar->addActions({ ui->actionRegroup_Even_Odd, ui->actionRegroup_by_Page_Pairs, ui->actionRegroup_by_Outline, ui->actionRegroup_by_Alternating_Pages, ui->actionRegroup_by_Alternating_Pages_Reversed_Order });
regroupToolbar->addActions({ ui->actionRegroup_Even_Odd, ui->actionRegroup_by_Page_Pairs, ui->actionRegroup_by_Outline, ui->actionRegroup_by_Alternating_Pages, ui->actionRegroup_by_Alternating_Pages_Reversed_Order, ui->actionRegroup_Reverse });
QToolBar* zoomToolbar = addToolBar(tr("&Zoom"));
zoomToolbar->setObjectName("zoom_toolbar");
zoomToolbar->addActions({ ui->actionZoom_In, ui->actionZoom_Out });
Expand Down Expand Up @@ -290,6 +291,7 @@ void MainWindow::onWorkspaceCustomContextMenuRequested(const QPoint& point)
regroupMenu->addAction(ui->actionRegroup_by_Alternating_Pages_Reversed_Order);
regroupMenu->addAction(ui->actionRegroup_by_Page_Pairs);
regroupMenu->addAction(ui->actionRegroup_by_Outline);
regroupMenu->addAction(ui->actionRegroup_Reverse);
contextMenu->addSeparator();
contextMenu->addAction(ui->actionGroup);
contextMenu->addAction(ui->actionUngroup);
Expand Down Expand Up @@ -485,6 +487,9 @@ bool MainWindow::canPerformOperation(Operation operation) const
return info.isDocumentOnly();
}

case Operation::RegroupReversed:
return !isModelEmpty && !selection.isEmpty();

case Operation::RegroupPaired:
return !isModelEmpty && !selection.isEmpty();

Expand Down Expand Up @@ -908,6 +913,13 @@ void MainWindow::performOperation(Operation operation)
break;
}

case Operation::RegroupReversed:
{
QModelIndexList indexes = ui->documentItemsView->selectionModel()->selection().indexes();
m_model->regroupReversed(indexes);
break;
}

case Operation::RegroupEvenOdd:
{
QModelIndexList indexes = ui->documentItemsView->selectionModel()->selection().indexes();
Expand Down
1 change: 1 addition & 0 deletions Pdf4QtPageMaster/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ class MainWindow : public QMainWindow
RegroupOutline,
RegroupAlternatingPages,
RegroupAlternatingPagesReversed,
RegroupReversed,

GetSource,
BecomeSponsor,
Expand Down
26 changes: 18 additions & 8 deletions Pdf4QtPageMaster/mainwindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,28 @@
<item>
<widget class="QListView" name="documentItemsView">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
<enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDrop</enum>
<enum>QAbstractItemView::DragDropMode::DragDrop</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::MoveAction</enum>
<enum>Qt::DropAction::MoveAction</enum>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
<enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
</property>
<property name="flow">
<enum>QListView::LeftToRight</enum>
<enum>QListView::Flow::LeftToRight</enum>
</property>
<property name="viewMode">
<enum>QListView::IconMode</enum>
<enum>QListView::ViewMode::IconMode</enum>
</property>
<property name="itemAlignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
Expand All @@ -54,7 +54,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>21</height>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
Expand Down Expand Up @@ -141,6 +141,7 @@
<addaction name="actionRegroup_by_Outline"/>
<addaction name="actionRegroup_by_Alternating_Pages"/>
<addaction name="actionRegroup_by_Alternating_Pages_Reversed_Order"/>
<addaction name="actionRegroup_Reverse"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuEdit"/>
Expand Down Expand Up @@ -524,6 +525,15 @@
<string>Regroup by &amp;Even/Odd Pages</string>
</property>
</action>
<action name="actionRegroup_Reverse">
<property name="icon">
<iconset resource="resources.qrc">
<normaloff>:/pdfpagemaster/resources/regroup-reverse.svg</normaloff>:/pdfpagemaster/resources/regroup-reverse.svg</iconset>
</property>
<property name="text">
<string>Regroup by Re&amp;verse</string>
</property>
</action>
<action name="actionRegroup_by_Page_Pairs">
<property name="icon">
<iconset resource="resources.qrc">
Expand Down
29 changes: 29 additions & 0 deletions Pdf4QtPageMaster/pageitemmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -583,6 +583,35 @@ void PageItemModel::rotateRight(const QModelIndexList& list)
Q_EMIT dataChanged(index(rowMin, 0, QModelIndex()), index(rowMax, 0, QModelIndex()));
}

void PageItemModel::regroupReversed(const QModelIndexList& list)
{
if (list.empty())
{
return;
}

Modifier modifier(this);

std::vector<PageGroupItem> pageGroupItems = m_pageGroupItems;
std::vector<PageGroupItem::GroupItem> extractedItems = extractItems(pageGroupItems, list);
std::reverse(extractedItems.begin(), extractedItems.end());

if (!extractedItems.empty())
{
PageGroupItem item;
item.groups = std::move(extractedItems);
updateItemCaptionAndTags(item);
pageGroupItems.emplace_back(std::move(item));
}

if (pageGroupItems != m_pageGroupItems)
{
beginResetModel();
m_pageGroupItems = std::move(pageGroupItems);
endResetModel();
}
}

PageItemModel::SelectionInfo PageItemModel::getSelectionInfo(const QModelIndexList& list) const
{
SelectionInfo info;
Expand Down
1 change: 1 addition & 0 deletions Pdf4QtPageMaster/pageitemmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ class PageItemModel : public QAbstractItemModel

SelectionInfo getSelectionInfo(const QModelIndexList& list) const;

void regroupReversed(const QModelIndexList& list);
void regroupEvenOdd(const QModelIndexList& list);
void regroupPaired(const QModelIndexList& list);
void regroupOutline(const QModelIndexList& list, const std::vector<pdf::PDFInteger>& indices);
Expand Down
1 change: 1 addition & 0 deletions Pdf4QtPageMaster/resources.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,6 @@
<file>resources/bookmark.svg</file>
<file>resources/wallet.svg</file>
<file>resources/regroup-outline.svg</file>
<file>resources/regroup-reverse.svg</file>
</qresource>
</RCC>
79 changes: 79 additions & 0 deletions Pdf4QtPageMaster/resources/regroup-reverse.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions RELEASES.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
CURRENT:
- Issue #228: [feature] reverse pages order
- Issue #222: UnitTests fails several tests
- Issue #207: Zoom to Cursor (Zoom Anchoring)
- Issue #206: Name of the executable / command
Expand Down

0 comments on commit 50dd7ad

Please sign in to comment.