Added initial clipboard support.

This commit is contained in:
Jim Evins
2016-04-24 16:52:14 -04:00
parent 4a0fff3f33
commit 6045b9e6b6
8 changed files with 231 additions and 35 deletions
+96
View File
@@ -23,10 +23,21 @@
#include <QFileInfo>
#include <algorithm>
#include <cmath>
#include <QApplication>
#include <QClipboard>
#include <QMimeData>
#include <QtDebug>
#include "LabelModelObject.h"
#include "LabelRegion.h"
#include "XmlLabelCreator.h"
#include "XmlLabelParser.h"
namespace
{
const QString MIME_TYPE = "application/x-glabels-objects";
}
///
@@ -1081,6 +1092,91 @@ void LabelModel::setSelectionFillColorNode( ColorNode fillColorNode )
}
///
/// Copy selection to clipboard
///
void LabelModel::copySelection()
{
if ( !isSelectionEmpty() )
{
QClipboard *clipboard = QApplication::clipboard();
QString buffer;
XmlLabelCreator::serializeObjects( getSelection(), buffer );
QMimeData *mimeData = new QMimeData;
mimeData->setData( MIME_TYPE, buffer.toUtf8() );
clipboard->setMimeData( mimeData );
}
}
///
/// Cut selection to clipboard
///
void LabelModel::cutSelection()
{
copySelection();
deleteSelection();
}
///
/// Can we paste?
///
bool LabelModel::canPaste()
{
const QClipboard *clipboard = QApplication::clipboard();
const QMimeData *mimeData = clipboard->mimeData();
if ( mimeData->hasFormat( MIME_TYPE ) )
{
return true;
}
else if ( mimeData->hasImage() )
{
// TODO: return true
}
else if ( mimeData->hasText() )
{
// TODO: return true
}
return false;
}
///
/// Paste from clipboard
///
void LabelModel::paste()
{
const QClipboard *clipboard = QApplication::clipboard();
const QMimeData *mimeData = clipboard->mimeData();
if ( mimeData->hasFormat( MIME_TYPE ) )
{
QByteArray buffer = mimeData->data( MIME_TYPE );
QList <LabelModelObject*> objects = XmlLabelParser::deserializeObjects( QString(buffer) );
unselectAll();
foreach ( LabelModelObject* object, objects )
{
addObject( object );
selectObject( object );
}
}
else if ( mimeData->hasImage() )
{
// TODO: create an image object from image
}
else if ( mimeData->hasText() )
{
// TODO: create a text object from text
}
}
///
/// Draw label objects
///