mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2025-02-09 00:08:53 +01:00
Issue #228: [feature] reverse pages order
This commit is contained in:
parent
c1fd0cdd4a
commit
50dd7ad828
@ -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));
|
||||
@ -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 });
|
||||
@ -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);
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
@ -94,6 +94,7 @@ public:
|
||||
RegroupOutline,
|
||||
RegroupAlternatingPages,
|
||||
RegroupAlternatingPagesReversed,
|
||||
RegroupReversed,
|
||||
|
||||
GetSource,
|
||||
BecomeSponsor,
|
||||
|
@ -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>
|
||||
@ -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">
|
||||
@ -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"/>
|
||||
@ -524,6 +525,15 @@
|
||||
<string>Regroup by &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&verse</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRegroup_by_Page_Pairs">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
|
@ -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;
|
||||
|
@ -190,6 +190,7 @@ public:
|
||||
|
||||
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);
|
||||
|
@ -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
Pdf4QtPageMaster/resources/regroup-reverse.svg
Normal file
79
Pdf4QtPageMaster/resources/regroup-reverse.svg
Normal file
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
sodipodi:docname="regroup-reverse.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata18">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs16" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2035"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="75.52"
|
||||
inkscape:cx="16.066795"
|
||||
inkscape:cy="14.361849"
|
||||
inkscape:window-x="-13"
|
||||
inkscape:window-y="-13"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg12" />
|
||||
<!-- Základní stránky -->
|
||||
<!-- Šipka obrácení -->
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.40000001"
|
||||
x="10.29036"
|
||||
y="5.7347455"
|
||||
width="8"
|
||||
height="12"
|
||||
id="rect2" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.40000001"
|
||||
x="11.29036"
|
||||
y="6.7347455"
|
||||
width="8"
|
||||
height="12"
|
||||
id="rect4" />
|
||||
<path
|
||||
style="fill:#000000;stroke-width:0.2"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 7.0652542,15.734746 q -2,-4 0,-8.0000003 h -1 l 2,-3 1.9999998,3 H 9.0652542 q -2,4.0000003 0,8.0000003 z"
|
||||
id="path6" />
|
||||
<g
|
||||
id="g10">
|
||||
<path
|
||||
d="m 22.077,17.182 c 0.128,-0.621 0.193,-1.346 0.203,-2.216 V 9.031 C 22.268,8.141 22.204,7.438 22.076,6.821 21.824,5.428 21.317,4.36 20.526,3.55 19.936,2.931 19.137,2.458 18.149,2.145 17.244,1.864 16.128,1.72 14.838,1.72 l -5.68,0.002 c -5.146,0 -7.439,2.293 -7.439,7.438 v 5.689 c 0,5.14 2.295,7.431 7.439,7.431 h 5.681 c 1.291,0 2.403,-0.146 3.312,-0.425 0.98,-0.307 1.762,-0.764 2.379,-1.397 0.785,-0.808 1.291,-1.878 1.547,-3.276 z m -3.857,2.952 c -0.643,0.284 -1.443,0.446 -2.451,0.496 -0.304,0.021 -0.604,0.031 -0.927,0.031 H 9.161 c -4.354,0 -5.821,-1.466 -5.821,-5.812 v -5.69 c 0,-4.323 1.439,-5.79 5.714,-5.811 l 0.108,-0.02 h 5.68 c 0.33,0 0.646,0.011 0.938,0.03 1.016,0.062 1.818,0.228 2.453,0.509 1.193,0.507 1.901,1.432 2.228,2.911 0.131,0.631 0.196,1.367 0.205,2.252 v 5.937 c -0.009,0.889 -0.074,1.624 -0.205,2.254 -0.326,1.481 -1.038,2.407 -2.241,2.913 z"
|
||||
id="path8"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#292d32" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user