Implement deleting of subpages
This commit is contained in:
15
document.cpp
15
document.cpp
@@ -41,6 +41,8 @@ TeletextDocument::~TeletextDocument()
|
|||||||
{
|
{
|
||||||
for (auto &subPage : m_subPages)
|
for (auto &subPage : m_subPages)
|
||||||
delete(subPage);
|
delete(subPage);
|
||||||
|
for (auto &recycleSubPage : m_recycleSubPages)
|
||||||
|
delete(recycleSubPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TeletextDocument::isEmpty() const
|
bool TeletextDocument::isEmpty() const
|
||||||
@@ -101,6 +103,7 @@ void TeletextDocument::insertSubPage(int beforeSubPageIndex, bool copySubPage)
|
|||||||
insertedSubPage = new LevelOnePage(*m_subPages.at(beforeSubPageIndex));
|
insertedSubPage = new LevelOnePage(*m_subPages.at(beforeSubPageIndex));
|
||||||
else
|
else
|
||||||
insertedSubPage = new LevelOnePage;
|
insertedSubPage = new LevelOnePage;
|
||||||
|
|
||||||
if (beforeSubPageIndex == m_subPages.size())
|
if (beforeSubPageIndex == m_subPages.size())
|
||||||
m_subPages.push_back(insertedSubPage);
|
m_subPages.push_back(insertedSubPage);
|
||||||
else
|
else
|
||||||
@@ -113,6 +116,18 @@ void TeletextDocument::deleteSubPage(int subPageToDelete)
|
|||||||
m_subPages.erase(m_subPages.begin()+subPageToDelete);
|
m_subPages.erase(m_subPages.begin()+subPageToDelete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TeletextDocument::deleteSubPageToRecycle(int subPageToRecycle)
|
||||||
|
{
|
||||||
|
m_recycleSubPages.push_back(m_subPages[subPageToRecycle]);
|
||||||
|
m_subPages.erase(m_subPages.begin()+subPageToRecycle);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TeletextDocument::unDeleteSubPageFromRecycle(int subPage)
|
||||||
|
{
|
||||||
|
m_subPages.insert(m_subPages.begin()+subPage, m_recycleSubPages.back());
|
||||||
|
m_recycleSubPages.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
void TeletextDocument::setPageNumber(QString pageNumberString)
|
void TeletextDocument::setPageNumber(QString pageNumberString)
|
||||||
{
|
{
|
||||||
bool pageNumberOk;
|
bool pageNumberOk;
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ public:
|
|||||||
void selectSubPagePrevious();
|
void selectSubPagePrevious();
|
||||||
void insertSubPage(int, bool);
|
void insertSubPage(int, bool);
|
||||||
void deleteSubPage(int);
|
void deleteSubPage(int);
|
||||||
|
void deleteSubPageToRecycle(int);
|
||||||
|
void unDeleteSubPageFromRecycle(int);
|
||||||
int pageNumber() const { return m_pageNumber; }
|
int pageNumber() const { return m_pageNumber; }
|
||||||
void setPageNumber(QString);
|
void setPageNumber(QString);
|
||||||
QString description() const { return m_description; }
|
QString description() const { return m_description; }
|
||||||
@@ -94,6 +96,7 @@ private:
|
|||||||
PageFunctionEnum m_pageFunction;
|
PageFunctionEnum m_pageFunction;
|
||||||
PacketCodingEnum m_packetCoding;
|
PacketCodingEnum m_packetCoding;
|
||||||
std::vector<LevelOnePage *> m_subPages;
|
std::vector<LevelOnePage *> m_subPages;
|
||||||
|
std::vector<LevelOnePage *> m_recycleSubPages;
|
||||||
QUndoStack *m_undoStack;
|
QUndoStack *m_undoStack;
|
||||||
int m_cursorRow, m_cursorColumn, m_selectionTopRow, m_selectionBottomRow, m_selectionLeftColumn, m_selectionRightColumn;
|
int m_cursorRow, m_cursorColumn, m_selectionTopRow, m_selectionBottomRow, m_selectionLeftColumn, m_selectionRightColumn;
|
||||||
LevelOnePage *m_selectionSubPage;
|
LevelOnePage *m_selectionSubPage;
|
||||||
|
|||||||
@@ -241,6 +241,25 @@ void InsertSubPageCommand::undo()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DeleteSubPageCommand::DeleteSubPageCommand(TeletextDocument *teletextDocument, QUndoCommand *parent) : QUndoCommand(parent)
|
||||||
|
{
|
||||||
|
m_teletextDocument = teletextDocument;
|
||||||
|
m_subPageToDelete = teletextDocument->currentSubPageIndex();
|
||||||
|
setText(QObject::tr("delete subpage"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeleteSubPageCommand::redo()
|
||||||
|
{
|
||||||
|
m_teletextDocument->deleteSubPageToRecycle(m_subPageToDelete);
|
||||||
|
m_teletextDocument->selectSubPageIndex(qMin(m_subPageToDelete, m_teletextDocument->numberOfSubPages()-1), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeleteSubPageCommand::undo()
|
||||||
|
{
|
||||||
|
m_teletextDocument->unDeleteSubPageFromRecycle(m_subPageToDelete);
|
||||||
|
m_teletextDocument->selectSubPageIndex(m_subPageToDelete, true);
|
||||||
|
}
|
||||||
|
|
||||||
SetColourCommand::SetColourCommand(TeletextDocument *teletextDocument, int colourIndex, int newColour, QUndoCommand *parent) : QUndoCommand(parent)
|
SetColourCommand::SetColourCommand(TeletextDocument *teletextDocument, int colourIndex, int newColour, QUndoCommand *parent) : QUndoCommand(parent)
|
||||||
{
|
{
|
||||||
m_teletextDocument = teletextDocument;
|
m_teletextDocument = teletextDocument;
|
||||||
|
|||||||
@@ -84,6 +84,19 @@ private:
|
|||||||
bool m_copySubPage;
|
bool m_copySubPage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class DeleteSubPageCommand : public QUndoCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DeleteSubPageCommand(TeletextDocument *, QUndoCommand *parent = 0);
|
||||||
|
|
||||||
|
void redo() override;
|
||||||
|
void undo() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
TeletextDocument *m_teletextDocument;
|
||||||
|
int m_subPageToDelete;
|
||||||
|
};
|
||||||
|
|
||||||
class InsertRowCommand : public QUndoCommand
|
class InsertRowCommand : public QUndoCommand
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -343,6 +343,10 @@ void MainWindow::createActions()
|
|||||||
insertCopyAct->setStatusTip(tr("Insert a subpage that's a copy of this subpage"));
|
insertCopyAct->setStatusTip(tr("Insert a subpage that's a copy of this subpage"));
|
||||||
connect(insertCopyAct, &QAction::triggered, [=]() { insertSubPage(false, true); });
|
connect(insertCopyAct, &QAction::triggered, [=]() { insertSubPage(false, true); });
|
||||||
|
|
||||||
|
m_deleteSubPageAction = editMenu->addAction(tr("Delete subpage"));
|
||||||
|
m_deleteSubPageAction->setStatusTip(tr("Delete this subpage"));
|
||||||
|
connect(m_deleteSubPageAction, &QAction::triggered, this, &MainWindow::deleteSubPage);
|
||||||
|
|
||||||
QMenu *viewMenu = menuBar()->addMenu(tr("&View"));
|
QMenu *viewMenu = menuBar()->addMenu(tr("&View"));
|
||||||
|
|
||||||
QAction *revealAct = viewMenu->addAction(tr("&Reveal"));
|
QAction *revealAct = viewMenu->addAction(tr("&Reveal"));
|
||||||
@@ -556,6 +560,14 @@ void MainWindow::insertSubPage(bool afterCurrentSubPage, bool copyCurrentSubPage
|
|||||||
m_textWidget->document()->undoStack()->push(insertSubPageCommand);
|
m_textWidget->document()->undoStack()->push(insertSubPageCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::deleteSubPage()
|
||||||
|
{
|
||||||
|
if (m_textWidget->document()->numberOfSubPages() == 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_textWidget->document()->undoStack()->push(new DeleteSubPageCommand(m_textWidget->document()));
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::setBorder(int newViewBorder)
|
void MainWindow::setBorder(int newViewBorder)
|
||||||
{
|
{
|
||||||
m_viewBorder = newViewBorder;
|
m_viewBorder = newViewBorder;
|
||||||
@@ -869,6 +881,7 @@ void MainWindow::updatePageWidgets()
|
|||||||
m_subPageLabel->setText(QString("%1/%2").arg(m_textWidget->document()->currentSubPageIndex()+1).arg(m_textWidget->document()->numberOfSubPages()));
|
m_subPageLabel->setText(QString("%1/%2").arg(m_textWidget->document()->currentSubPageIndex()+1).arg(m_textWidget->document()->numberOfSubPages()));
|
||||||
m_previousSubPageButton->setEnabled(!(m_textWidget->document()->currentSubPageIndex() == 0));
|
m_previousSubPageButton->setEnabled(!(m_textWidget->document()->currentSubPageIndex() == 0));
|
||||||
m_nextSubPageButton->setEnabled(!(m_textWidget->document()->currentSubPageIndex() == (m_textWidget->document()->numberOfSubPages()) - 1));
|
m_nextSubPageButton->setEnabled(!(m_textWidget->document()->currentSubPageIndex() == (m_textWidget->document()->numberOfSubPages()) - 1));
|
||||||
|
m_deleteSubPageAction->setEnabled(m_textWidget->document()->numberOfSubPages() > 1);
|
||||||
m_pageOptionsDockWidget->updateWidgets();
|
m_pageOptionsDockWidget->updateWidgets();
|
||||||
m_pageEnhancementsDockWidget->updateWidgets();
|
m_pageEnhancementsDockWidget->updateWidgets();
|
||||||
m_x26DockWidget->loadX26List();
|
m_x26DockWidget->loadX26List();
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ private slots:
|
|||||||
void insertRow(bool);
|
void insertRow(bool);
|
||||||
void deleteRow();
|
void deleteRow();
|
||||||
void insertSubPage(bool, bool);
|
void insertSubPage(bool, bool);
|
||||||
|
void deleteSubPage();
|
||||||
|
|
||||||
void setSceneDimensions();
|
void setSceneDimensions();
|
||||||
void setBorder(int);
|
void setBorder(int);
|
||||||
@@ -108,6 +109,7 @@ private:
|
|||||||
QAction *m_recentFileActs[m_MaxRecentFiles];
|
QAction *m_recentFileActs[m_MaxRecentFiles];
|
||||||
QAction *m_recentFileSeparator;
|
QAction *m_recentFileSeparator;
|
||||||
QAction *m_recentFileSubMenuAct;
|
QAction *m_recentFileSubMenuAct;
|
||||||
|
QAction *m_deleteSubPageAction;
|
||||||
QAction *m_borderActs[3];
|
QAction *m_borderActs[3];
|
||||||
QAction *m_aspectRatioActs[4];
|
QAction *m_aspectRatioActs[4];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user