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.2 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, TQWidget *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, TQT_SIGNAL( selectionChanged(TQListViewItem *) ),
this, TQT_SLOT( slot_lvSnippetsSelectionChanged(TQListViewItem *) )
);
connect (
lvSnippets, TQT_SIGNAL( doubleClicked (TQListViewItem *) ),
this, TQT_SLOT( slot_lvSnippetsClicked(TQListViewItem *) )
);
connect (
lvSnippets, TQT_SIGNAL( itemRenamed(TQListViewItem *, int, const TQString &) ),
this, TQT_SLOT( slot_lvSnippetsItemRenamed(TQListViewItem *, int, const TQString &) )
);
connect (
btnNew, TQT_SIGNAL( clicked () ),
this, TQT_SLOT( slot_btnNewClicked() )
);
connect (
btnSave, TQT_SIGNAL( clicked () ),
this, TQT_SLOT( slot_btnSaveClicked() )
);
connect (
btnDelete, TQT_SIGNAL( clicked () ),
this, TQT_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( TQObject* parent, const char* name, const TQStringList& )
: Kate::Plugin ( (Kate::Application*)parent, name ) {}
/**
* dtor KatePluginSnippets
* @return
*/
KatePluginSnippets::~KatePluginSnippets() {}
/**
*
* @param win
*/
void KatePluginSnippets::addView(Kate::MainWindow *win)
{
TQWidget *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(TQListViewItem * item) {
CSnippet *snippet;
if ( (snippet = findSnippetByListViewItem(item))!= NULL ) {
teSnippetText->setText(snippet->getValue());
}
}
/**
* Special meaning of <mark/> and <cursor/> ...
* @param item
*/
void KatePluginSnippetsView::slot_lvSnippetsClicked (TQListViewItem * item) {
Kate::View *kv = win->viewManager()->activeView();
CSnippet *snippet;
if (kv) {
if ( (snippet = findSnippetByListViewItem(item))!= NULL ) {
TQString sText = snippet->getValue();
TQString sSelection = "";
if ( kv->getDoc()->hasSelection() ) {
sSelection = kv->getDoc()->selection();
// clear selection
kv->keyDelete();
}
sText.replace( TQRegExp("<mark/>"), sSelection );
sText.replace( TQRegExp("<date/>"), TQDate::currentDate().toString(Qt::LocalDate) );
sText.replace( TQRegExp("<time/>"), TQTime::currentTime().toString(Qt::LocalDate) );
kv->insertText ( sText );
}
kv->setFocus();
}
}
/**
*
* @param lvi
* @param
* @param text
*/
void KatePluginSnippetsView::slot_lvSnippetsItemRenamed(TQListViewItem *lvi,int /*col*/, const TQString& text) {
CSnippet *snippet;
if ( (snippet = findSnippetByListViewItem(lvi)) != NULL ) {
snippet->setKey( text );
writeConfig();
}
}
/**
*
*/
void KatePluginSnippetsView::slot_btnNewClicked() {
TQString sKey = "New Snippet";
TQString sValue = "";
TQListViewItem *lvi = insertItem(sKey, true);
lSnippets.append( new CSnippet(sKey, sValue, lvi) );
}
/**
*
*/
void KatePluginSnippetsView::slot_btnSaveClicked() {
CSnippet *snippet;
TQListViewItem *lvi = lvSnippets->selectedItem();
if ( (snippet = findSnippetByListViewItem(lvi)) != NULL ) {
snippet->setValue(teSnippetText->text() );
writeConfig();
}
}
/**
*
*/
void KatePluginSnippetsView::slot_btnDeleteClicked() {
CSnippet *snippet;
TQListViewItem *lvi = lvSnippets->selectedItem();
if ( (snippet = findSnippetByListViewItem(lvi)) != NULL ) {
lvSnippets->takeItem(lvi);
lSnippets.remove(snippet);
}
}
/**
*
*/
void KatePluginSnippetsView::readConfig() {
TQString sKey, sValue;
TQListViewItem *lvi;
config->setGroup("Snippets");
int iNrOfSnippets = config->readEntry("NumberOfSnippets", "0").toInt() ;
for (int i=0; i < iNrOfSnippets; i++) {
TQStringList slFields;
slFields = config->readListEntry ( TQString::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() ) {
TQStringList slFields;
slFields.append( snippet->getKey() );
slFields.append( snippet->getValue() );
config->writeEntry ( TQString::number(i), slFields, ',' );
i++;
}
// sync to disc ...
config->sync();
}
/**
*
* @param item
* @return
*/
CSnippet* KatePluginSnippetsView::findSnippetByListViewItem(TQListViewItem *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"