kde-playground/kdepim/kmail/editor/snippetwidget.cpp
2015-04-14 21:49:29 +00:00

93 lines
3.4 KiB
C++

/***************************************************************************
* snippet feature from kdevelop/plugins/snippet/ *
* *
* Copyright (C) 2007 by Robert Gruber *
* rgruber@users.sourceforge.net *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "snippetwidget.h"
#include "editor/kmcomposereditor.h"
#include <mailcommon/snippets/snippetsmanager.h>
#include <kactioncollection.h>
#include <klocale.h>
#include <kmenu.h>
#include <QContextMenuEvent>
#include <QHeaderView>
SnippetWidget::SnippetWidget( KMComposerEditor *editor, KActionCollection *actionCollection, QWidget *parent )
: QTreeView( parent )
{
header()->hide();
setAcceptDrops( true );
setDragEnabled( true );
setRootIsDecorated( true );
setAlternatingRowColors( true );
mSnippetsManager = new MailCommon::SnippetsManager( actionCollection, this, this );
mSnippetsManager->setEditor( editor, "insertPlainText", SIGNAL(insertSnippet()) );
setModel( mSnippetsManager->model() );
setSelectionModel( mSnippetsManager->selectionModel() );
connect( this, SIGNAL(activated(QModelIndex)),
mSnippetsManager->editSnippetAction(), SLOT(trigger()) );
connect( mSnippetsManager->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(expandAll()) );
connect( mSnippetsManager->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(expandAll()) );
expandAll();
}
SnippetWidget::~SnippetWidget()
{
}
void SnippetWidget::contextMenuEvent( QContextMenuEvent *event )
{
KMenu popup;
const bool itemSelected = mSnippetsManager->selectionModel()->hasSelection();
bool canAddSnippet = true;
if ( itemSelected ) {
popup.addTitle( mSnippetsManager->selectedName() );
if ( mSnippetsManager->snippetGroupSelected() ) {
popup.addAction( mSnippetsManager->editSnippetGroupAction() );
popup.addAction( mSnippetsManager->deleteSnippetGroupAction() );
} else {
canAddSnippet = false; // subsnippets are not permitted
popup.addAction( mSnippetsManager->addSnippetAction() );
popup.addAction( mSnippetsManager->editSnippetAction() );
popup.addAction( mSnippetsManager->deleteSnippetAction() );
popup.addAction( mSnippetsManager->insertSnippetAction() );
}
popup.addSeparator();
} else {
popup.addTitle( i18n( "Text Snippets" ) );
}
if ( canAddSnippet ) {
popup.addAction( mSnippetsManager->addSnippetAction() );
}
popup.addAction( mSnippetsManager->addSnippetGroupAction() );
popup.exec( event->globalPos() );
}
void SnippetWidget::dropEvent ( QDropEvent * event )
{
if ( event->source() == this ) {
event->setDropAction( Qt::MoveAction );
}
QTreeView::dropEvent( event );
}