Implement cut, copy and paste

This commit is contained in:
G.K.MacGregor
2021-05-03 22:17:51 +01:00
parent 551172aed3
commit 9fa86f8c4c
6 changed files with 286 additions and 11 deletions

View File

@@ -17,7 +17,9 @@
* along with QTeletextMaker. If not, see <https://www.gnu.org/licenses/>.
*/
#include <QApplication>
#include <QBitmap>
#include <QClipboard>
#include <QFrame>
#include <QGraphicsItem>
#include <QGraphicsItemGroup>
@@ -25,6 +27,7 @@
#include <QGraphicsScene>
#include <QKeyEvent>
#include <QMenu>
#include <QMimeData>
#include <QPainter>
#include <QPair>
#include <QUndoCommand>
@@ -387,6 +390,48 @@ void TeletextWidget::toggleCharacterBit(unsigned char bitToToggle)
m_teletextDocument->undoStack()->push(new ToggleMosaicBitCommand(m_teletextDocument, bitToToggle));
}
void TeletextWidget::selectionToClipboard()
{
QByteArray nativeData;
QClipboard *clipboard = QApplication::clipboard();
nativeData.resize(2 + m_teletextDocument->selectionWidth() * m_teletextDocument->selectionHeight());
nativeData[0] = m_teletextDocument->selectionHeight();
nativeData[1] = m_teletextDocument->selectionWidth();
int i=2;
for (int r=m_teletextDocument->selectionTopRow(); r<=m_teletextDocument->selectionBottomRow(); r++)
for (int c=m_teletextDocument->selectionLeftColumn(); c<=m_teletextDocument->selectionRightColumn(); c++)
nativeData[i++] = m_teletextDocument->currentSubPage()->character(r, c);
QMimeData *mimeData = new QMimeData();
mimeData->setData("application/x-teletext", nativeData);
clipboard->setMimeData(mimeData);
}
void TeletextWidget::cut()
{
if (!m_teletextDocument->selectionActive())
return;
selectionToClipboard();
m_teletextDocument->undoStack()->push(new CutCommand(m_teletextDocument));
}
void TeletextWidget::copy()
{
if (!m_teletextDocument->selectionActive())
return;
selectionToClipboard();
}
void TeletextWidget::paste()
{
m_teletextDocument->undoStack()->push(new PasteCommand(m_teletextDocument));
}
QPair<int, int> TeletextWidget::mouseToRowAndColumn(const QPoint &mousePosition)
{
int row = mousePosition.y() / 10;