You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeaddons/kate/snippets/plugin_katesnippets.cpp

322 lines
7.1 KiB

/*
* Copyright (C) 2004 Stephan Möres <Erdling@gmx.net>
*/
#include "plugin_katesnippets.h"
#include <kaction.h>
#include <klocale.h>
#include <kstandarddirs.h>
#include <kgenericfactory.h>
// let the world know ...
K_EXPORT_COMPONENT_FACTORY(katesnippetsplugin, KGenericFactory<KatePluginSnippets>( "katesnippets" ) )
// < IMPLEMENTAIONS for KatePluginSnippetsView >
//
//
/**
* ctor KatePluginSnippetsView
* @param w
* @return
*/
KatePluginSnippetsView::KatePluginSnippetsView(Kate::MainWindow *w, QWidget *dock) : CWidgetSnippets(dock,"snippetswidget")
, dock (dock)
{
setInstance (new KInstance("kate"));
setXMLFile("plugins/katesnippets/plugin_katesnippets.rc");
w->guiFactory()->addClient (this);
win = w;
//<make connections>
connect (
lvSnippets, SIGNAL( selectionChanged(QListViewItem *) ),
this, SLOT( slot_lvSnippetsSelectionChanged(QListViewItem *) )
);
connect (
lvSnippets, SIGNAL( doubleClicked (QListViewItem *) ),
this, SLOT( slot_lvSnippetsClicked(QListViewItem *) )
);
connect (
lvSnippets, SIGNAL( itemRenamed(QListViewItem *, int, const QString &) ),
this, SLOT( slot_lvSnippetsItemRenamed(QListViewItem *, int, const QString &) )
);
connect (
btnNew, SIGNAL( clicked () ),
this, SLOT( slot_btnNewClicked() )
);
connect (
btnSave, SIGNAL( clicked () ),
this, SLOT( slot_btnSaveClicked() )
);
connect (
btnDelete, SIGNAL( clicked () ),
this, SLOT( slot_btnDeleteClicked() )
);
//</make connections>
lSnippets.setAutoDelete( TRUE ); // the list owns the objects
config = new KConfig("katesnippetspluginrc");
readConfig();
// set text of selected item at startup
slot_lvSnippetsSelectionChanged(lvSnippets->selectedItem() );
}
/**
* dtor KatePluginSnippetsView
* @return
*/
KatePluginSnippetsView::~ KatePluginSnippetsView() {
writeConfig();
win->guiFactory()->removeClient(this);
}
//
//
// < IMPLEMENTAIONS for KatePluginSnippetsView >
// < IMPLEMENTAIONS for KatePluginSnippets >
//
//
/**
* ctor KatePluginSnippets
* @param parent
* @param name
* @return
*/
KatePluginSnippets::KatePluginSnippets( QObject* parent, const char* name, const QStringList& )
: Kate::Plugin ( (Kate::Application*)parent, name ) {}
/**
* dtor KatePluginSnippets
* @return
*/
KatePluginSnippets::~KatePluginSnippets() {}
/**
*
* @param win
*/
void KatePluginSnippets::addView(Kate::MainWindow *win)
{
QWidget *dock = win->toolViewManager()->createToolView(
"kate_plugin_snippets",
Kate::ToolViewManager::Left,
SmallIcon("contents"),
i18n("Snippets"));
KatePluginSnippetsView *view = new KatePluginSnippetsView (win,dock);
m_views.append(view);
}
/**
*
* @param win
*/
void KatePluginSnippets::removeView(Kate::MainWindow *win) {
for (uint z=0; z < m_views.count(); z++)
if (m_views.at(z)->win == win) {
KatePluginSnippetsView *view = m_views.at(z);
m_views.remove (view);
delete view->dock;
}
}
/**
*
* @param item
*/
void KatePluginSnippetsView::slot_lvSnippetsSelectionChanged(QListViewItem * item) {
CSnippet *snippet;
if ( (snippet = findSnippetByListViewItem(item))!= NULL ) {
teSnippetText->setText(snippet->getValue());
}
}
/**
* Special meaning of <mark/> and <cursor/> ...
* @param item
*/
void KatePluginSnippetsView::slot_lvSnippetsClicked (QListViewItem * item) {
Kate::View *kv = win->viewManager()->activeView();
CSnippet *snippet;
if (kv) {
if ( (snippet = findSnippetByListViewItem(item))!= NULL ) {
QString sText = snippet->getValue();
QString sSelection = "";
if ( kv->getDoc()->hasSelection() ) {
sSelection = kv->getDoc()->selection();
// clear selection
kv->keyDelete();
}
sText.replace( QRegExp("<mark/>"), sSelection );
sText.replace( QRegExp("<date/>"), QDate::currentDate().toString(Qt::LocalDate) );
sText.replace( QRegExp("<time/>"), QTime::currentTime().toString(Qt::LocalDate) );
kv->insertText ( sText );
}
kv->setFocus();
}
}
/**
*
* @param lvi
* @param
* @param text
*/
void KatePluginSnippetsView::slot_lvSnippetsItemRenamed(QListViewItem *lvi,int /*col*/, const QString& text) {
CSnippet *snippet;
if ( (snippet = findSnippetByListViewItem(lvi)) != NULL ) {
snippet->setKey( text );
writeConfig();
}
}
/**
*
*/
void KatePluginSnippetsView::slot_btnNewClicked() {
QString sKey = "New Snippet";
QString sValue = "";
QListViewItem *lvi = insertItem(sKey, true);
lSnippets.append( new CSnippet(sKey, sValue, lvi) );
}
/**
*
*/
void KatePluginSnippetsView::slot_btnSaveClicked() {
CSnippet *snippet;
QListViewItem *lvi = lvSnippets->selectedItem();
if ( (snippet = findSnippetByListViewItem(lvi)) != NULL ) {
snippet->setValue(teSnippetText->text() );
writeConfig();
}
}
/**
*
*/
void KatePluginSnippetsView::slot_btnDeleteClicked() {
CSnippet *snippet;
QListViewItem *lvi = lvSnippets->selectedItem();
if ( (snippet = findSnippetByListViewItem(lvi)) != NULL ) {
lvSnippets->takeItem(lvi);
lSnippets.remove(snippet);
}
}
/**
*
*/
void KatePluginSnippetsView::readConfig() {
QString sKey, sValue;
QListViewItem *lvi;
config->setGroup("Snippets");
int iNrOfSnippets = config->readEntry("NumberOfSnippets", "0").toInt() ;
for (int i=0; i < iNrOfSnippets; i++) {
QStringList slFields;
slFields = config->readListEntry ( QString::number(i) );
sKey = slFields[0];
sValue = slFields[1];
lvi = insertItem(sKey, false);
lSnippets.append( new CSnippet(sKey, sValue, lvi, this) );
}
// <defaults>
if ( iNrOfSnippets == 0 ) {
sKey = "DEBUG variable";
sValue = "## < DEBUG >\nout \"<pre>\\$<mark/> : \\\"$<mark/>\\\"\\n</pre>\"\n## </DEBUG >\n";
lvi = insertItem(sKey, false);
lSnippets.append( new CSnippet(sKey, sValue, lvi, this) );
sKey = "proc-header";
sValue = "## [created : <date/>, <time/>]\n## Description:\n## ============\n## The function \"<mark/>\" ...\n##\n##\n##\n##\n## Input:\n## ======\n##\n##\n##\nproc <mark/> {args} {\n\n ## add your code here\n\n return \"\"\n}\n";
lvi = insertItem(sKey, false);
lSnippets.append( new CSnippet(sKey, sValue, lvi, this) );
}
// </defaults>
}
/**
*
*/
void KatePluginSnippetsView::writeConfig() {
config->setGroup("Snippets");
int iNrOfSnippets = lSnippets.count();
config->writeEntry("NumberOfSnippets", iNrOfSnippets );
int i=0;
CSnippet *snippet;
for ( snippet = lSnippets.first(); snippet; snippet = lSnippets.next() ) {
QStringList slFields;
slFields.append( snippet->getKey() );
slFields.append( snippet->getValue() );
config->writeEntry ( QString::number(i), slFields, ',' );
i++;
}
// sync to disc ...
config->sync();
}
/**
*
* @param item
* @return
*/
CSnippet* KatePluginSnippetsView::findSnippetByListViewItem(QListViewItem *item) {
CSnippet *snippet = NULL;
for ( snippet = lSnippets.first(); snippet; snippet = lSnippets.next() ) {
if ( snippet->getListViewItem() == item)
break;
}
return snippet;
}
//
//
// < IMPLEMENTAIONS for KatePluginSnippets >
#include "plugin_katesnippets.moc"