TextEditor: menu for pasting from clipboard history.

Add new action to show a menu of recent clipboard history. When an item
is selected, the item is pasted.

Change-Id: Id7e1a90730404fb63762bf1f20678484ec34cd2b
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
This commit is contained in:
Francois Ferrand
2012-03-12 17:38:54 +01:00
committed by Leandro Melo
parent 80180ba714
commit 6defb83d03
9 changed files with 218 additions and 45 deletions

View File

@@ -42,7 +42,6 @@ CircularClipboard::CircularClipboard()
CircularClipboard::~CircularClipboard()
{
qDeleteAll(m_items);
}
CircularClipboard *CircularClipboard::instance()
@@ -52,28 +51,29 @@ CircularClipboard *CircularClipboard::instance()
}
void CircularClipboard::collect(const QMimeData *mimeData)
{
collect(QSharedPointer<const QMimeData>(mimeData));
}
void CircularClipboard::collect(const QSharedPointer<const QMimeData> &mimeData)
{
//Avoid duplicates
const QString text = mimeData->text();
for (QList<const QMimeData *>::iterator i = m_items.begin(); i != m_items.end(); ++i) {
for (QList< QSharedPointer<const QMimeData> >::iterator i = m_items.begin(); i != m_items.end(); ++i) {
if (mimeData == *i || text == (*i)->text()) {
if (mimeData != *i)
delete *i;
m_items.erase(i);
break;
}
}
if (m_items.size() > kMaxSize) {
delete m_items.last();
if (m_items.size() >= kMaxSize)
m_items.removeLast();
}
m_items.prepend(mimeData);
}
const QMimeData *CircularClipboard::next() const
QSharedPointer<const QMimeData> CircularClipboard::next() const
{
if (m_items.isEmpty())
return 0;
return QSharedPointer<const QMimeData>();
if (m_current == m_items.length() - 1)
m_current = 0;
@@ -87,3 +87,8 @@ void CircularClipboard::toLastCollect()
{
m_current = -1;
}
int CircularClipboard::size() const
{
return m_items.size();
}