Implement deleting of subpages

This commit is contained in:
G.K.MacGregor
2020-12-15 21:57:42 +00:00
parent 269500aeef
commit 19be00f4fe
6 changed files with 65 additions and 0 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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:

View File

@@ -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();

View File

@@ -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];