diff --git a/sources/titleblock/templatecommands.cpp b/sources/titleblock/templatecommands.cpp index b7e3db26b..faf7d03f5 100644 --- a/sources/titleblock/templatecommands.cpp +++ b/sources/titleblock/templatecommands.cpp @@ -849,6 +849,59 @@ void ChangeTemplateInformationsCommand::redo() { tbtemplate_ -> setInformation(new_information_); } +/** + Constructor +*/ +CutTemplateCellsCommand::CutTemplateCellsCommand(TitleBlockTemplate *tb_template, QUndoCommand *parent) : + TitleBlockTemplateCommand(tb_template, parent) +{ +} + +/** + Destructor +*/ +CutTemplateCellsCommand::~CutTemplateCellsCommand() { +} + +/** + Undo a cut operation +*/ +void CutTemplateCellsCommand::undo() { + foreach (TitleBlockCell *cell, cut_cells_.keys()) { + cell -> cell_type = cut_cells_.value(cell); + } + if (view_) { + view_ -> refresh(); + } +} + +/** + Redo a cut operation +*/ +void CutTemplateCellsCommand::redo() { + foreach (TitleBlockCell *cell, cut_cells_.keys()) { + cell -> cell_type = TitleBlockCell::EmptyCell; + } + if (view_) { + view_ -> refresh(); + } +} + +void CutTemplateCellsCommand::setCutCells(const QList &cells) { + foreach (TitleBlockCell *cell, cells) { + cut_cells_.insert(cell, cell -> cell_type); + } + updateText(); +} + +/** + Update the label describing this command +*/ +void CutTemplateCellsCommand::updateText() { + setText(QObject::tr("Couper %n cellule(s)", "undo caption", cut_cells_.count())); +} + + /** Constructor @param tb_template Changed title block template diff --git a/sources/titleblock/templatecommands.h b/sources/titleblock/templatecommands.h index 57c8c2702..896bd7fbc 100644 --- a/sources/titleblock/templatecommands.h +++ b/sources/titleblock/templatecommands.h @@ -22,8 +22,8 @@ #include #include "dimension.h" #include "templatecellsset.h" +#include "titleblockcell.h" class TitleBlockTemplateView; -class TitleBlockCell; class TitleBlockTemplate; /** @@ -251,6 +251,30 @@ class ChangeTemplateInformationsCommand : public QUndoCommand { QString new_information_; }; +/** + This class represents the action of cutting a cells set. +*/ +class CutTemplateCellsCommand : public TitleBlockTemplateCommand { + // constructors, destructor + public: + CutTemplateCellsCommand(TitleBlockTemplate *, QUndoCommand * = 0); + virtual ~CutTemplateCellsCommand(); + private: + CutTemplateCellsCommand(const CutTemplateCellsCommand &); + + // methods + public: + virtual void undo(); + virtual void redo(); + virtual void setCutCells(const QList &); + protected: + virtual void updateText(); + + // attributes + public: + /// Cut cells + QHash cut_cells_; +}; /** This class represents the action of pasting a cells set. diff --git a/sources/titleblock/templateview.cpp b/sources/titleblock/templateview.cpp index 158da677a..eced55200 100644 --- a/sources/titleblock/templateview.cpp +++ b/sources/titleblock/templateview.cpp @@ -133,26 +133,39 @@ void TitleBlockTemplateView::zoomReset() { /** Export currently selected cells to the clipboard before setting them as empty. + @return the list of cells copied to the clipboard */ -void TitleBlockTemplateView::cut() { - /// TODO +QList TitleBlockTemplateView::cut() { + if (!tbtemplate_) return(QList()); + QList copied_cells = copy(); + + if (!copied_cells.isEmpty()) { + CutTemplateCellsCommand *cut_command = new CutTemplateCellsCommand(tbtemplate_); + cut_command -> setCutCells(copied_cells); + requestGridModification(cut_command); + } + return(copied_cells); } /** Export currently selected cells to the clipboard. + @return the list of cells copied to the clipboard */ -void TitleBlockTemplateView::copy() { - if (!tbtemplate_) return; +QList TitleBlockTemplateView::copy() { + if (!tbtemplate_) return(QList()); + QList copied_cells = selectedCells(); QDomDocument xml_export; QDomElement tbtpartial = xml_export.createElement("titleblocktemplate-partial"); xml_export.appendChild(tbtpartial); - foreach (TitleBlockCell *cell, selectedCells()) { + foreach (TitleBlockCell *cell, copied_cells) { tbtemplate_ -> exportCellToXml(cell, tbtpartial); } QClipboard *clipboard = QApplication::clipboard(); clipboard -> setText(xml_export.toString()); + + return(copied_cells); } /** diff --git a/sources/titleblock/templateview.h b/sources/titleblock/templateview.h index b72968a98..f71b837db 100644 --- a/sources/titleblock/templateview.h +++ b/sources/titleblock/templateview.h @@ -58,8 +58,8 @@ class TitleBlockTemplateView : public QGraphicsView { void zoomOut(); void zoomFit(); void zoomReset(); - void cut(); - void copy(); + QList cut(); + QList copy(); void paste(); void addColumnBefore(); void addRowBefore();