summaryrefslogtreecommitdiffstats
path: root/src/modules/aliaseditor
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-24 02:13:59 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-24 02:13:59 +0000
commita6d58bb6052ac8cb01805a48c4ad2f129126116f (patch)
treedd867a099fcbb263a8009a9fb22695b87855dad6 /src/modules/aliaseditor
downloadkvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.tar.gz
kvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.zip
Added KDE3 version of kvirc
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1095341 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/modules/aliaseditor')
-rw-r--r--src/modules/aliaseditor/Makefile.am21
-rw-r--r--src/modules/aliaseditor/aliaseditor.cpp1408
-rw-r--r--src/modules/aliaseditor/aliaseditor.h197
-rw-r--r--src/modules/aliaseditor/libkvialiaseditor.cpp90
4 files changed, 1716 insertions, 0 deletions
diff --git a/src/modules/aliaseditor/Makefile.am b/src/modules/aliaseditor/Makefile.am
new file mode 100644
index 00000000..60845dbc
--- /dev/null
+++ b/src/modules/aliaseditor/Makefile.am
@@ -0,0 +1,21 @@
+###############################################################################
+# KVirc IRC client Makealiaseditor - 10.03.2000 Szymon Stefanek <stefanek@tin.it>
+###############################################################################
+
+AM_CPPFLAGS = -I$(SS_TOPSRCDIR)/src/kvilib/include/ -I$(SS_TOPSRCDIR)/src/kvirc/include/ \
+$(SS_INCDIRS) $(SS_CPPFLAGS) -DGLOBAL_KVIRC_DIR=\"$(globalkvircdir)\"
+
+pluglib_LTLIBRARIES = libkvialiaseditor.la
+
+libkvialiaseditor_la_LDFLAGS = -module -avoid-version $(SS_LDFLAGS) $(SS_LIBDIRS)
+
+libkvialiaseditor_la_SOURCES = libkvialiaseditor.cpp aliaseditor.cpp
+nodist_libkvialiaseditor_la_SOURCES = moc_aliaseditor.cpp
+
+noinst_HEADERS = aliaseditor.h
+libkvialiaseditor_la_LIBADD = $(SS_LIBLINK) ../../kvilib/build/libkvilib.la
+
+# noinst_HEADERS=
+
+moc_aliaseditor.cpp: aliaseditor.h
+ $(SS_QT_MOC) $< -o $@
diff --git a/src/modules/aliaseditor/aliaseditor.cpp b/src/modules/aliaseditor/aliaseditor.cpp
new file mode 100644
index 00000000..3317fd3f
--- /dev/null
+++ b/src/modules/aliaseditor/aliaseditor.cpp
@@ -0,0 +1,1408 @@
+//=====================================================================================
+//
+// File : aliaseditor.cpp
+// Creation date : Mon Dec 23 2002 14:36:18 by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2002-2005 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the linkss of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=====================================================================================
+
+#include "aliaseditor.h"
+
+#include "kvi_iconmanager.h"
+#include "kvi_options.h"
+#include "kvi_locale.h"
+#include "kvi_imagedialog.h"
+#include "kvi_config.h"
+#include "kvi_filedialog.h"
+#include "kvi_fileutils.h"
+#include "kvi_scripteditor.h"
+#include "kvi_debug.h"
+#include "kvi_app.h"
+#include "kvi_qstring.h"
+#include "kvi_kvs_aliasmanager.h"
+#include "kvi_filedialog.h"
+#include "kvi_cmdformatter.h"
+#include "kvi_module.h"
+#include "kvi_valuelist.h"
+
+#include <qsplitter.h>
+#include <qlayout.h>
+#include "kvi_tal_vbox.h"
+#include <qtooltip.h>
+#include <qpushbutton.h>
+#include <qdir.h>
+#include <qmessagebox.h>
+#include <qinputdialog.h>
+#include <qregexp.h>
+
+extern KviAliasEditorWindow * g_pAliasEditorWindow;
+extern KviModule * g_pAliasEditorModule;
+
+KviAliasEditorListViewItem::KviAliasEditorListViewItem(KviTalListView * pListView,Type eType,const QString &szName)
+: KviTalListViewItem(pListView), m_eType(eType), m_pParentNamespaceItem(0)
+{
+ setName(szName);
+}
+
+KviAliasEditorListViewItem::KviAliasEditorListViewItem(KviAliasNamespaceListViewItem * pParentNamespaceItem,Type eType,const QString &szName)
+: KviTalListViewItem(pParentNamespaceItem), m_eType(eType), m_pParentNamespaceItem(pParentNamespaceItem)
+{
+ setName(szName);
+}
+
+QString KviAliasEditorListViewItem::key(int column,bool bAsc) const
+{
+ QString ret;
+ if(m_eType == Namespace)ret = "1";
+ else ret = "2";
+ ret += m_szName;
+ return ret;
+}
+
+
+void KviAliasEditorListViewItem::setName(const QString &szName)
+{
+ m_szName = szName;
+ setText(0,m_szName);
+}
+
+KviAliasListViewItem::KviAliasListViewItem(KviAliasNamespaceListViewItem * pParentNamespaceItem,const QString &szName)
+: KviAliasEditorListViewItem(pParentNamespaceItem,KviAliasEditorListViewItem::Alias,szName)
+{
+ setPixmap(0,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ALIAS)));
+ m_cPos=QPoint(0,0);
+}
+
+KviAliasListViewItem::KviAliasListViewItem(KviTalListView * pListView,const QString &szName)
+: KviAliasEditorListViewItem(pListView,KviAliasEditorListViewItem::Alias,szName)
+{
+ setPixmap(0,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ALIAS)));
+ m_cPos=QPoint(0,0);
+}
+
+
+KviAliasNamespaceListViewItem::KviAliasNamespaceListViewItem(KviTalListView * pListView,const QString &szName)
+: KviAliasEditorListViewItem(pListView,KviAliasEditorListViewItem::Namespace,szName)
+{
+ setPixmap(0,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_NAMESPACE)));
+}
+
+KviAliasNamespaceListViewItem::KviAliasNamespaceListViewItem(KviAliasNamespaceListViewItem * pParentNamespaceItem,const QString &szName)
+: KviAliasEditorListViewItem(pParentNamespaceItem,KviAliasEditorListViewItem::Namespace,szName)
+{
+ setPixmap(0,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_NAMESPACE)));
+}
+
+
+KviAliasNamespaceListViewItem * KviAliasNamespaceListViewItem::findNamespaceItem(const QString &szName)
+{
+ KviAliasEditorListViewItem * it = (KviAliasEditorListViewItem *)firstChild();
+ while(it)
+ {
+ if(it->isNamespace())
+ {
+ if(KviQString::equalCI(szName,it->name()))return (KviAliasNamespaceListViewItem *)it;
+ }
+ it = (KviAliasEditorListViewItem *)it->nextSibling();
+ }
+ return 0;
+}
+
+KviAliasNamespaceListViewItem * KviAliasNamespaceListViewItem::getNamespaceItem(const QString &szName)
+{
+ KviAliasNamespaceListViewItem * it = findNamespaceItem(szName);
+ if(it)return it;
+ it = new KviAliasNamespaceListViewItem(this,szName);
+ return it;
+}
+
+KviAliasListViewItem * KviAliasNamespaceListViewItem::findAliasItem(const QString &szName)
+{
+ KviAliasEditorListViewItem * it = (KviAliasEditorListViewItem *)firstChild();
+ while(it)
+ {
+ if(it->isAlias())
+ {
+ if(KviQString::equalCI(szName,it->name()))return (KviAliasListViewItem *)it;
+ }
+ it = (KviAliasEditorListViewItem *)it->nextSibling();
+ }
+ return 0;
+}
+
+KviAliasListViewItem * KviAliasNamespaceListViewItem::getAliasItem(const QString &szName)
+{
+ KviAliasListViewItem * it = findAliasItem(szName);
+ if(it)return it;
+ it = new KviAliasListViewItem(this,szName);
+ return it;
+}
+
+
+KviAliasListViewItem * KviAliasNamespaceListViewItem::createFullAliasItem(const QString &szFullName)
+{
+ QStringList lNamespaces;
+ QString szName;
+ KviAliasEditor::splitFullAliasOrNamespaceName(szFullName,lNamespaces,szName);
+
+ if(lNamespaces.isEmpty())
+ return getAliasItem(szName);
+
+ QStringList::Iterator it = lNamespaces.begin();
+
+ KviAliasNamespaceListViewItem * nit = getNamespaceItem(*it);
+ ++it;
+ while(it != lNamespaces.end())
+ {
+ nit = nit->getNamespaceItem(*it);
+ ++it;
+ }
+
+ return nit->getAliasItem(szName);
+}
+
+KviAliasNamespaceListViewItem * KviAliasNamespaceListViewItem::createFullNamespaceItem(const QString &szFullName)
+{
+ QStringList lNamespaces;
+ QString szName;
+ KviAliasEditor::splitFullAliasOrNamespaceName(szFullName,lNamespaces,szName);
+
+ if(lNamespaces.isEmpty())
+ return getNamespaceItem(szName);
+
+ QStringList::Iterator it = lNamespaces.begin();
+
+ KviAliasNamespaceListViewItem * nit = getNamespaceItem(*it);
+ ++it;
+ while(it != lNamespaces.end())
+ {
+ nit = nit->getNamespaceItem(*it);
+ ++it;
+ }
+
+ return nit->getNamespaceItem(szName);
+}
+
+
+KviAliasEditor::KviAliasEditor(QWidget * par)
+: QWidget(par)
+{
+ m_pLastEditedItem = 0;
+ m_pLastClickedItem = 0;
+ m_szDir = QDir::homeDirPath();
+
+
+ QGridLayout * l = new QGridLayout(this,1,1,2,2);
+
+#ifdef COMPILE_USE_QT4
+ m_pSplitter = new QSplitter(Qt::Horizontal,this);
+ m_pSplitter->setOpaqueResize(false);
+#else
+ m_pSplitter = new QSplitter(QSplitter::Horizontal,this);
+#endif
+
+ l->addWidget(m_pSplitter,0,0);
+
+ KviTalVBox * box = new KviTalVBox(m_pSplitter);
+ m_pListView = new KviTalListView(box);
+ m_pListView->addColumn(__tr2qs("Alias"));
+ m_pListView->setSelectionMode(KviTalListView::Extended);
+ m_pListView->setShowSortIndicator(true);
+ m_pListView->setRootIsDecorated(true);
+
+ box = new KviTalVBox(m_pSplitter);
+ KviTalHBox * hbox = new KviTalHBox(box);
+ m_pNameLabel = new QLabel(__tr2qs("No item selected"),hbox);
+ m_pRenameButton = new QPushButton(__tr2qs("Rename"),hbox);
+ m_pRenameButton->setEnabled(false);
+ connect(m_pRenameButton,SIGNAL(clicked()),this,SLOT(renameItem()));
+ hbox->setStretchFactor(m_pNameLabel,2);
+ QToolTip::add(m_pRenameButton,__tr2qs("Edit the alias or namespace name"));
+ m_pEditor = KviScriptEditor::createInstance(box);
+ m_pEditor->setFocus();
+ connect(m_pEditor,SIGNAL(find(const QString &)),this,SLOT(slotFindWord(const QString &)));
+ connect(m_pEditor,SIGNAL(replaceAll(const QString &,const QString &)),this,SLOT(slotReplaceAll(const QString &,const QString &)));
+
+ m_pContextPopup = new KviTalPopupMenu(this);
+
+ oneTimeSetup();
+
+ currentItemChanged(0);
+}
+
+KviAliasEditor::~KviAliasEditor()
+{
+ KviScriptEditor::destroyInstance(m_pEditor);
+}
+
+KviAliasNamespaceListViewItem * KviAliasEditor::findNamespaceItem(const QString &szName)
+{
+ KviAliasNamespaceListViewItem * it = (KviAliasNamespaceListViewItem *)m_pListView->firstChild();
+ while(it)
+ {
+ if(KviQString::equalCI(szName,it->name()))return it;
+ it = (KviAliasNamespaceListViewItem *)it->nextSibling();
+ }
+ return 0;
+}
+
+KviAliasNamespaceListViewItem * KviAliasEditor::getNamespaceItem(const QString &szName)
+{
+ KviAliasNamespaceListViewItem * it = findNamespaceItem(szName);
+ if(it)return it;
+ it = new KviAliasNamespaceListViewItem(m_pListView,szName);
+ return it;
+}
+
+KviAliasListViewItem * KviAliasEditor::findAliasItem(const QString &szName)
+{
+ KviAliasEditorListViewItem * it = (KviAliasEditorListViewItem *)m_pListView->firstChild();
+ while(it)
+ {
+ if(it->isAlias())
+ {
+ if(KviQString::equalCI(szName,it->name()))return (KviAliasListViewItem *)it;
+ }
+ it = (KviAliasEditorListViewItem *)it->nextSibling();
+ }
+ return 0;
+}
+
+KviAliasListViewItem * KviAliasEditor::getAliasItem(const QString &szName)
+{
+ KviAliasListViewItem * it = findAliasItem(szName);
+ if(it)return it;
+ it = new KviAliasListViewItem(m_pListView,szName);
+ return it;
+}
+
+
+void KviAliasEditor::splitFullAliasOrNamespaceName(const QString &szFullName,QStringList &lNamespaces,QString &szName)
+{
+ lNamespaces = QStringList::split("::",szFullName);
+ if(lNamespaces.count() < 1)
+ {
+ szName = "unnamed";
+ lNamespaces.append(QString(""));
+ return;
+ }
+ szName = *(lNamespaces.fromLast());
+ lNamespaces.remove(lNamespaces.fromLast());
+}
+
+QString KviAliasEditor::buildFullItemName(KviAliasEditorListViewItem * it)
+{
+ if(!it) return QString::null;
+ QString szName = it->name();
+ KviAliasNamespaceListViewItem * nit = it->parentNamespaceItem();
+ while(nit)
+ {
+ QString tmp = nit->name();
+ if(!tmp.isEmpty())
+ {
+ szName.prepend("::");
+ szName.prepend(tmp);
+ }
+ nit = nit->parentNamespaceItem();
+ }
+ return szName;
+}
+
+
+KviAliasListViewItem * KviAliasEditor::createFullAliasItem(const QString &szFullName)
+{
+ QStringList lNamespaces;
+ QString szName;
+ splitFullAliasOrNamespaceName(szFullName,lNamespaces,szName);
+
+ if(lNamespaces.isEmpty())
+ return getAliasItem(szName);
+
+ QStringList::Iterator it = lNamespaces.begin();
+
+ KviAliasNamespaceListViewItem * nit = getNamespaceItem(*it);
+ ++it;
+ while(it != lNamespaces.end())
+ {
+ nit = nit->getNamespaceItem(*it);
+ ++it;
+ }
+
+ return nit->getAliasItem(szName);
+}
+
+KviAliasNamespaceListViewItem * KviAliasEditor::createFullNamespaceItem(const QString &szFullName)
+{
+ QStringList lNamespaces;
+ QString szName;
+ splitFullAliasOrNamespaceName(szFullName,lNamespaces,szName);
+
+ if(lNamespaces.isEmpty())
+ return getNamespaceItem(szName);
+
+ QStringList::Iterator it = lNamespaces.begin();
+
+ KviAliasNamespaceListViewItem * nit = getNamespaceItem(*it);
+ ++it;
+ while(it != lNamespaces.end())
+ {
+ nit = nit->getNamespaceItem(*it);
+ ++it;
+ }
+
+ return nit->getNamespaceItem(szName);
+}
+
+void KviAliasEditor::oneTimeSetup()
+{
+ KviPointerHashTable<QString,KviKvsScript> * a = KviKvsAliasManager::instance()->aliasDict();
+ if(!a)return;
+
+ KviPointerHashTableIterator<QString,KviKvsScript> it(*a);
+
+ KviAliasListViewItem * item;
+ while(it.current())
+ {
+ KviKvsScript * alias = it.current();
+ item = createFullAliasItem(alias->name());
+ item->setBuffer(alias->code());
+ ++it;
+ }
+
+ connect(m_pListView,SIGNAL(currentChanged(KviTalListViewItem *)),this,SLOT(currentItemChanged(KviTalListViewItem *)));
+ connect(m_pListView,SIGNAL(rightButtonPressed(KviTalListViewItem *,const QPoint &,int)),
+ this,SLOT(itemPressed(KviTalListViewItem *,const QPoint &,int)));
+}
+
+bool KviAliasEditor::hasSelectedItems(KviTalListViewItem * it)
+{
+ if(!it)return false;
+ if(it->isSelected())return true;
+ if(it->isOpen())
+ {
+ if(hasSelectedItems(it->firstChild()))return true;
+ }
+ return hasSelectedItems(it->nextSibling());
+}
+
+bool KviAliasEditor::itemExists(KviTalListViewItem *pSearchFor,KviTalListViewItem * pSearchAt)
+{
+ if(!pSearchFor)return false;
+ if(!pSearchAt)return false;
+ if(pSearchFor == pSearchAt)return true;
+ if(itemExists(pSearchFor,pSearchAt->firstChild()))return true;
+ return itemExists(pSearchFor,pSearchAt->nextSibling());
+}
+
+
+void KviAliasEditor::itemPressed(KviTalListViewItem *it,const QPoint &pnt,int col)
+{
+ m_pContextPopup->clear();
+
+ m_pLastClickedItem = (KviAliasEditorListViewItem *)it;
+
+ int id;
+
+ m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_ALIAS)),
+ __tr2qs("Add Alias"),
+ this,SLOT(newAlias()));
+
+ m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_ALIAS)),
+ __tr2qs("Add Namespace"),
+ this,SLOT(newNamespace()));
+
+
+ bool bHasItems = m_pListView->firstChild() != 0;
+ bool bHasSelected = hasSelectedItems(m_pListView->firstChild());
+
+ m_pContextPopup->insertSeparator();
+
+ id = m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_QUIT)),
+ __tr2qs("Remove Selected"),
+ this,SLOT(removeSelectedItems()));
+ m_pContextPopup->setItemEnabled(id,bHasSelected);
+
+
+ m_pContextPopup->insertSeparator();
+
+ m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_FOLDER)),
+ __tr2qs("Export Selected..."),
+ this,SLOT(exportSelected()));
+ m_pContextPopup->setItemEnabled(id,bHasSelected);
+
+ m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_FOLDER)),
+ __tr2qs("Export Selected in singles files..."),
+ this,SLOT(exportSelectedSepFiles()));
+
+ m_pContextPopup->setItemEnabled(id,bHasSelected);
+
+ m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_FOLDER)),
+ __tr2qs("Export All..."),
+ this,SLOT(exportAll()));
+ m_pContextPopup->setItemEnabled(id,bHasItems);
+
+ m_pContextPopup->insertSeparator();
+
+ m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_SEARCH)),
+ __tr2qs("Find In Aliases..."),
+ this,SLOT(slotFind()));
+ m_pContextPopup->setItemEnabled(id,bHasItems);
+
+ m_pContextPopup->insertItem(
+ *(g_pIconManager->getSmallIcon(KVI_SMALLICON_NAMESPACE)),
+ __tr2qs("Collapse All Namespaces"),
+ this,SLOT(slotCollapseNamespaces()));
+
+ m_pContextPopup->setItemEnabled(id,bHasItems);
+
+
+ m_pContextPopup->popup(pnt);
+}
+
+void KviAliasEditor::recursiveSearchReplace(const QString &szSearch,KviAliasEditorListViewItem * it,bool bReplace,const QString &szReplace)
+{
+ if(!it)return;
+ if(it->isAlias())
+ {
+ if(((KviAliasListViewItem *)it)->buffer().find(szSearch,0,false) != -1)
+ {
+ it->setPixmap(0,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ALIASHIGHLIGHTED)));
+ if (bReplace) ((QString &)((KviAliasListViewItem *)it)->buffer()).replace(szSearch,szReplace,false);
+ openParentItems(it);
+ } else
+ it->setPixmap(0,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ALIAS)));
+ } else {
+ recursiveSearchReplace(szSearch,(KviAliasEditorListViewItem *)(it->firstChild()),bReplace,szReplace);
+ }
+ recursiveSearchReplace(szSearch,(KviAliasEditorListViewItem *)(it->nextSibling()),bReplace,szReplace);
+}
+
+void KviAliasEditor::slotFind()
+{
+ g_pAliasEditorModule->lock();
+ bool bOk;
+ QString szSearch = QInputDialog::getText(
+ __tr2qs("Find In Aliases"),
+ __tr2qs("Please enter the text to be searched for. The matching aliases will be highlighted."),
+ QLineEdit::Normal,
+ "",
+ &bOk,
+ this);
+ g_pAliasEditorModule->unlock();
+ if(!bOk)return;
+ if(szSearch.isEmpty())return;
+ m_pEditor->setFindText(szSearch);
+
+ recursiveSearchReplace(szSearch,(KviAliasEditorListViewItem *)m_pListView->firstChild());
+}
+void KviAliasEditor::slotFindWord(const QString &szSearch)
+{
+ m_pEditor->setFindText(szSearch);
+
+ recursiveSearchReplace(szSearch,(KviAliasEditorListViewItem *)m_pListView->firstChild());
+
+}
+void KviAliasEditor::recursiveCollapseNamespaces(KviAliasEditorListViewItem * it)
+{
+ if(!it)return;
+ if(it->isNamespace())
+ {
+ recursiveCollapseNamespaces((KviAliasEditorListViewItem *)(it->firstChild()));
+ }
+ recursiveCollapseNamespaces((KviAliasEditorListViewItem *)(it->nextSibling()));
+ it->setOpen(false);
+}
+
+void KviAliasEditor::slotCollapseNamespaces()
+{
+ recursiveCollapseNamespaces((KviAliasEditorListViewItem *)m_pListView->firstChild());
+}
+
+
+void KviAliasEditor::slotReplaceAll(const QString &before,const QString &after)
+{
+ recursiveSearchReplace(before,(KviAliasEditorListViewItem *)m_pListView->firstChild(),true,after);
+}
+
+
+
+void KviAliasEditor::getExportAliasBuffer(QString &buffer,KviAliasListViewItem * it)
+{
+ QString szBuf = it->buffer();
+ KviCommandFormatter::blockFromBuffer(szBuf);
+ QString szNam = buildFullItemName(it);
+
+ buffer = "alias(";
+ buffer += szNam;
+ buffer += ")\n";
+ buffer += szBuf;
+ buffer += "\n";
+}
+
+
+void KviAliasEditor::exportAll()
+{
+ exportAliases(false);
+}
+
+void KviAliasEditor::exportSelectedSepFiles()
+{
+ exportAliases (true,true);
+}
+void KviAliasEditor::exportSelected()
+{
+ exportAliases(true);
+}
+
+void KviAliasEditor::exportSelectionInSinglesFiles(KviPointerList<KviAliasListViewItem> *l)
+{
+ if(!m_szDir.endsWith(QString(KVI_PATH_SEPARATOR)))m_szDir += KVI_PATH_SEPARATOR;
+ debug ("dir %s",m_szDir.latin1());
+ if (!l->first())
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::warning(this,__tr2qs("Alias Export"),__tr2qs("There is not selection!"),__tr2qs("Ok"));
+ g_pAliasEditorModule->unlock();
+ return;
+ }
+ g_pAliasEditorModule->lock();
+
+ if(!KviFileDialog::askForDirectoryName(m_szDir,__tr2qs("Choose a Directory - KVIrc"),m_szDir)){
+ g_pAliasEditorModule->unlock();
+ return;
+ }
+
+ if(!m_szDir.endsWith(QString(KVI_PATH_SEPARATOR)))m_szDir += KVI_PATH_SEPARATOR;
+ debug ("dir changed in %s",m_szDir.latin1());
+
+ bool bReplaceAll=false;
+
+ for(KviAliasListViewItem * it = l->first();it;it = l->next())
+ {
+ QString tmp;
+ getExportAliasBuffer(tmp,it);
+ QString szFileName=buildFullItemName(it);
+ szFileName += ".kvs";
+ szFileName.replace("::","_");
+ QString szCompletePath=m_szDir+szFileName;
+
+ if (KviFileUtils::fileExists(szCompletePath) && !bReplaceAll)
+ {
+ QString szMsg;
+ KviQString::sprintf(szMsg,__tr2qs("The file \"%Q\" exists. Do you want to replace it ?"),&szFileName);
+ int ret = QMessageBox::question(this,__tr2qs("Replace file"),szMsg,__tr2qs("Yes"),__tr2qs("Yes to All"),__tr2qs("No"));
+ if (ret!=2){
+ KviFileUtils::writeFile(szCompletePath,tmp);
+ if (ret==1) bReplaceAll=true;
+ }
+
+ }
+ else
+ KviFileUtils::writeFile(szCompletePath,tmp);
+
+ }
+ g_pAliasEditorModule->unlock();
+
+}
+void KviAliasEditor::exportAliases(bool bSelectedOnly,bool bSingleFiles)
+{
+ saveLastEditedItem();
+
+ KviPointerList<KviAliasListViewItem> l;
+ l.setAutoDelete(false);
+
+ QString out;
+
+ appendAliasItems(&l,(KviAliasEditorListViewItem *)(m_pListView->firstChild()),bSelectedOnly);
+ if (bSingleFiles)
+ {
+ exportSelectionInSinglesFiles(&l);
+ return;
+
+ }
+ int count=0;
+ KviAliasListViewItem * tempitem=0;
+ for(KviAliasListViewItem * it = l.first();it;it = l.next())
+ {
+ tempitem=it;
+ count ++;
+ QString tmp;
+ getExportAliasBuffer(tmp,it);
+ out += tmp;
+ out += "\n";
+ }
+ QString szNameFile;
+ if(out.isEmpty())
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::warning(this,__tr2qs("Alias Export"),__tr2qs("There exported file would be empty: cowardly refusing to write it"),__tr2qs("Ok"));
+ g_pAliasEditorModule->unlock();
+ return;
+ }
+
+ QString szName = m_szDir;
+
+ if(!szName.endsWith(QString(KVI_PATH_SEPARATOR)))szName += KVI_PATH_SEPARATOR;
+ QString szFile;
+ g_pAliasEditorModule->lock();
+
+ if (count==1)
+ {
+ QString tmp=buildFullItemName(tempitem);
+ szNameFile = tmp.replace("::","_");
+ }
+ else szNameFile="aliases";
+ szName += szNameFile;
+ szName += ".kvs";
+ if(!KviFileDialog::askForSaveFileName(szFile,__tr2qs("Choose a Filename - KVIrc"),szName,"*.kvs",false,true,true))
+ {
+ g_pAliasEditorModule->unlock();
+ return;
+ }
+ m_szDir=QFileInfo(szFile).dirPath(TRUE);
+ g_pAliasEditorModule->unlock();
+
+ if(!KviFileUtils::writeFile(szFile,out))
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::warning(this,__tr2qs("Write Failed - KVIrc"),__tr2qs("Unable to write to the alias file."),__tr2qs("Ok"));
+ g_pAliasEditorModule->unlock();
+ }
+}
+
+void KviAliasEditor::saveProperties(KviConfig *cfg)
+{
+ cfg->writeEntry("Sizes",m_pSplitter->sizes());
+ QString szName;
+ if(m_pLastEditedItem)
+ szName = buildFullItemName(m_pLastEditedItem);
+ cfg->writeEntry("LastAlias",szName);
+}
+
+void KviAliasEditor::loadProperties(KviConfig *cfg)
+{
+ KviValueList<int> def;
+ def.append(20);
+ def.append(80);
+ m_pSplitter->setSizes(cfg->readIntListEntry("Sizes",def));
+ QString tmp = cfg->readEntry("LastAlias",QString::null);
+
+ KviAliasEditorListViewItem * it = findAliasItem(tmp);
+ if(!it)it = findNamespaceItem(tmp);
+ if(it)activateItem(it);
+}
+
+void KviAliasEditor::appendAliasItems(KviPointerList<KviAliasListViewItem> * l,KviAliasEditorListViewItem * pStartFrom,bool bSelectedOnly)
+{
+ if(!pStartFrom)return;
+ if(pStartFrom->isAlias())
+ {
+ if(bSelectedOnly)
+ {
+ if(pStartFrom->isSelected())
+ l->append((KviAliasListViewItem *)pStartFrom);
+ } else {
+ l->append((KviAliasListViewItem *)pStartFrom);
+ }
+ } else {
+ if(bSelectedOnly)
+ {
+ if(pStartFrom->isSelected())
+ appendAliasItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),false); // ALL the items below the selected namespace
+ else
+ appendAliasItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),true); // only the selected items below
+ } else {
+ appendAliasItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),false);
+ }
+ }
+ appendAliasItems(l,(KviAliasEditorListViewItem *)(pStartFrom->nextSibling()),bSelectedOnly);
+}
+
+void KviAliasEditor::appendNamespaceItems(KviPointerList<KviAliasListViewItem> * l,KviAliasEditorListViewItem * pStartFrom,bool bSelectedOnly)
+{
+ if(!pStartFrom)return;
+ if(pStartFrom->isNamespace())
+ {
+ if(bSelectedOnly)
+ {
+ if(pStartFrom->isSelected())
+ l->append((KviAliasListViewItem *)pStartFrom);
+ } else {
+ l->append((KviAliasListViewItem *)pStartFrom);
+ }
+ } else {
+ if(bSelectedOnly)
+ {
+ if(pStartFrom->isSelected())
+ appendNamespaceItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),false); // ALL the items below the selected namespace
+ else
+ appendNamespaceItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),true); // only the selected items below
+ } else {
+ appendNamespaceItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),false);
+ }
+ }
+ appendNamespaceItems(l,(KviAliasEditorListViewItem *)(pStartFrom->nextSibling()),bSelectedOnly);
+}
+
+void KviAliasEditor::appendSelectedItems(KviPointerList<KviAliasEditorListViewItem> * l,KviAliasEditorListViewItem * pStartFrom,bool bIncludeChildrenOfSelected)
+{
+ if(!pStartFrom)return;
+ if(pStartFrom->isSelected())
+ {
+ l->append(pStartFrom);
+ if(bIncludeChildrenOfSelected)
+ appendSelectedItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),bIncludeChildrenOfSelected);
+ } else {
+ appendSelectedItems(l,(KviAliasEditorListViewItem *)(pStartFrom->firstChild()),bIncludeChildrenOfSelected);
+ }
+ appendSelectedItems(l,(KviAliasEditorListViewItem *)(pStartFrom->nextSibling()),bIncludeChildrenOfSelected);
+}
+
+bool KviAliasEditor::removeItem(KviAliasEditorListViewItem *it,bool * pbYesToAll,bool bDeleteEmptyTree)
+{
+ if(!it)return true;
+ QString szMsg;
+ QString szName = it->name();
+
+ if(!*pbYesToAll)
+ {
+ if(it->isAlias())
+ KviQString::sprintf(szMsg,__tr2qs("Do you really want to remove the alias \"%Q\" ?"),&szName);
+ else {
+ KviQString::sprintf(szMsg,__tr2qs("Do you really want to remove the namespace \"%Q\" ?"),&szName);
+ szMsg += "<br>";
+ szMsg += __tr2qs("Please note that all the children items will be deleted too.");
+ }
+
+ g_pAliasEditorModule->lock();
+ int ret = QMessageBox::question(this,__tr2qs("Remove item"),szMsg,__tr2qs("Yes"),__tr2qs("Yes to All"),__tr2qs("No"));
+ g_pAliasEditorModule->unlock();
+ switch(ret)
+ {
+ case 0:
+ // nothing
+ break;
+ case 1:
+ *pbYesToAll = true;
+ break;
+ default:
+ return false;
+ break;
+ }
+ }
+
+ if(it == m_pLastEditedItem)
+ m_pLastEditedItem = 0;
+ if(it == m_pLastClickedItem)
+ m_pLastClickedItem = 0;
+ if(bDeleteEmptyTree)
+ {
+ while(it)
+ {
+ KviAliasEditorListViewItem * par = (KviAliasEditorListViewItem *)(it->parent());
+ delete it;
+ if(par)
+ {
+ if(!par->firstChild())it = par;
+ else it = 0;
+ } else {
+ it = 0;
+ }
+ }
+ } else {
+ delete it;
+ }
+ return true;
+}
+
+void KviAliasEditor::removeSelectedItems()
+{
+ KviPointerList<KviAliasEditorListViewItem> l;
+ l.setAutoDelete(false);
+ appendSelectedItems(&l,(KviAliasEditorListViewItem *)(m_pListView->firstChild()),false);
+
+ bool bYesToAll = false;
+
+ for(KviAliasEditorListViewItem *it = l.first();it;it = l.next())
+ {
+ if(!removeItem(it,&bYesToAll,false))return;
+ }
+}
+
+QString KviAliasEditor::askForAliasName(const QString &szAction,const QString &szText,const QString &szInitialText)
+{
+ bool bOk = false;
+ QString szNewName;
+ while(szNewName.isEmpty())
+ {
+ g_pAliasEditorModule->lock();
+ szNewName = QInputDialog::getText(
+ szAction,
+ szText,
+ QLineEdit::Normal,
+ szInitialText,
+ &bOk,
+ this);
+ g_pAliasEditorModule->unlock();
+ if(!bOk)return QString::null;
+ if(szNewName.isEmpty())
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::warning(this,
+ __tr2qs("Missing Alias Name"),
+ __tr2qs("You must specify a valid name for the alias"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ continue;
+ }
+
+ // we allow only [\w:]+
+ QRegExp re("[\\w:]+");
+ if(!re.exactMatch(szNewName))
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Bad Alias Name"),
+ __tr2qs("Alias names can contain only letters, digits, underscores and '::' namespace separators"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ szNewName = "";
+ continue;
+ }
+ // make sure that we have only doubled "::" and not ":" or ":::..."
+ QString tmp = szNewName;
+ tmp.replace("::","@"); // @ is not allowed by the rule above
+ if(tmp.find(":") != -1)
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Bad Alias Name"),
+ __tr2qs("Stray ':' character in alias name: did you mean ...<namespace>::<name> ?"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ szNewName = "";
+ continue;
+ }
+ if(tmp.find("@@") != -1)
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Bad Alias Name"),
+ __tr2qs("Found an empty namespace in alias name"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ szNewName = "";
+ continue;
+ }
+ }
+ return szNewName;
+}
+
+QString KviAliasEditor::askForNamespaceName(const QString &szAction,const QString &szText,const QString &szInitialText)
+{
+ bool bOk = false;
+ QString szNewName;
+ while(szNewName.isEmpty())
+ {
+ g_pAliasEditorModule->lock();
+ szNewName = QInputDialog::getText(
+ szAction,
+ szText,
+ QLineEdit::Normal,
+ szInitialText,
+ &bOk,
+ this);
+ g_pAliasEditorModule->unlock();
+ if(!bOk)return QString::null;
+ if(szNewName.isEmpty())
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::warning(this,
+ __tr2qs("Missing Namespace Name"),
+ __tr2qs("You must specify a valid name for the namespace"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ continue;
+ }
+
+ // we allow only [\w:]+
+ QRegExp re("[\\w:]+");
+ if(!re.exactMatch(szNewName))
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Bad Namespace Name"),
+ __tr2qs("Namespace names can contain only letters, digits, underscores and '::' namespace separators"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ szNewName = "";
+ continue;
+ }
+ // make sure that we have only doubled "::" and not ":" or ":::..."
+ QString tmp = szNewName;
+ tmp.replace("::","@"); // @ is not allowed by the rule above
+ if(tmp.find(":") != -1)
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Bad Namespace Name"),
+ __tr2qs("Stray ':' character in namespace name: did you mean ...<namespace>::<name> ?"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ szNewName = "";
+ continue;
+ }
+ if(tmp.find("@@") != -1)
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Bad Namespace Name"),
+ __tr2qs("Found an empty namespace in namespace name"),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ szNewName = "";
+ continue;
+ }
+ }
+ return szNewName;
+}
+
+void KviAliasEditor::openParentItems(KviTalListViewItem * it)
+{
+ if(it->parent())
+ {
+ it->parent()->setOpen(true);
+ openParentItems(it->parent());
+ }
+}
+
+
+void KviAliasEditor::selectOneItem(KviTalListViewItem * it,KviTalListViewItem *pStartFrom)
+{
+ if(!pStartFrom)return;
+ if(pStartFrom == it)pStartFrom->setSelected(true);
+ else pStartFrom->setSelected(false);
+ selectOneItem(it,pStartFrom->firstChild());
+ selectOneItem(it,pStartFrom->nextSibling());
+}
+
+
+void KviAliasEditor::activateItem(KviTalListViewItem * it)
+{
+ openParentItems(it);
+ selectOneItem(it,m_pListView->firstChild());
+ m_pListView->setCurrentItem(it);
+}
+
+
+void KviAliasEditor::newAlias()
+{
+ if(m_pLastClickedItem)
+ {
+ if(!itemExists(m_pLastClickedItem,m_pListView->firstChild()))return; // dead ?
+ if(m_pLastClickedItem->isAlias())
+ m_pLastClickedItem = m_pLastClickedItem->parentNamespaceItem();
+ }
+
+ QString szNewName = askForAliasName(__tr2qs("Add Alias"),__tr2qs("Please enter the name for the new alias"),"myfunction");
+ if(szNewName.isEmpty())return;
+
+ getUniqueItemName(m_pLastClickedItem,szNewName,KviAliasEditorListViewItem::Alias);
+
+ KviAliasListViewItem * it;
+
+ if(m_pLastClickedItem)
+ it = ((KviAliasNamespaceListViewItem *)m_pLastClickedItem)->createFullAliasItem(szNewName);
+ else
+ it = createFullAliasItem(szNewName);
+
+ activateItem(it);
+}
+
+void KviAliasEditor::newNamespace()
+{
+ if(m_pLastClickedItem)
+ {
+ if(!itemExists(m_pLastClickedItem,m_pListView->firstChild()))return; // dead ?
+ if(m_pLastClickedItem->isAlias())
+ m_pLastClickedItem = m_pLastClickedItem->parentNamespaceItem();
+ }
+
+
+ QString szNewName = askForNamespaceName(__tr2qs("Add Namespace"),__tr2qs("Please enter the name for the new namespace"),"mynamespace");
+ if(szNewName.isEmpty())return;
+
+ getUniqueItemName(m_pLastClickedItem,szNewName,KviAliasEditorListViewItem::Namespace);
+
+ KviAliasNamespaceListViewItem * it;
+
+ if(m_pLastClickedItem)
+ it = ((KviAliasNamespaceListViewItem *)m_pLastClickedItem)->createFullNamespaceItem(szNewName);
+ else
+ it = createFullNamespaceItem(szNewName);
+
+ activateItem(it);
+}
+
+bool KviAliasEditor::aliasExists(QString &szFullItemName)
+{
+ KviPointerList<KviAliasListViewItem> l;
+ l.setAutoDelete(false);
+
+ appendAliasItems(&l,(KviAliasEditorListViewItem *)(m_pListView->firstChild()),false);
+ for(KviAliasListViewItem * it = l.first();it;it = l.next())
+ {
+ if (KviQString::equalCI(buildFullItemName(it),szFullItemName))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool KviAliasEditor::namespaceExists(QString &szFullItemName)
+{
+ KviPointerList<KviAliasListViewItem> l;
+ l.setAutoDelete(false);
+
+ appendNamespaceItems(&l,(KviAliasEditorListViewItem *)(m_pListView->firstChild()),false);
+ for(KviAliasListViewItem * it = l.first();it;it = l.next())
+ {
+ if (KviQString::equalCI(buildFullItemName(it),szFullItemName))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+void KviAliasEditor::renameItem()
+{
+ if(!m_pLastEditedItem)return;
+ if(!itemExists(m_pLastEditedItem,m_pListView->firstChild()))return; // dead ?
+
+ QString szName = buildFullItemName(m_pLastEditedItem);
+ QString szNewName;
+
+ bool bAlias = m_pLastEditedItem->isAlias();
+
+ if(bAlias)
+ szNewName = askForAliasName(__tr2qs("Rename Alias"),__tr2qs("Please enter the new name for the alias"),szName);
+ else
+ szNewName = askForNamespaceName(__tr2qs("Rename Namespace"),__tr2qs("Please enter the new name for the namespace"),szName);
+ if(szNewName.isEmpty())return;
+
+ if(szName == szNewName)return;
+
+ // check if there is already an alias with this name
+ if (bAlias)
+ {
+ if (aliasExists(szNewName))
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Alias already exists"),
+ __tr2qs("This name is already in use. Please choose another one."),
+ __tr2qs("Ok, Let me try again..."));
+ g_pAliasEditorModule->unlock();
+ return;
+ }
+ } else {
+ // check if there is already a anmespace with this name
+ if (namespaceExists(szNewName))
+ {
+ g_pAliasEditorModule->lock();
+ QMessageBox::information(this,
+ __tr2qs("Namespace already exists"),
+ __tr2qs("This name is already in use. Please choose another one."),
+ __tr2qs("Ok, let me try again..."));
+ g_pAliasEditorModule->unlock();
+ return;
+ }
+ }
+
+ QString szCode;
+ QPoint pntCursor;
+ if(bAlias)
+ {
+ m_pEditor->getText(szCode);
+ pntCursor = m_pEditor->getCursor();
+ }
+
+ // take child items, if any
+ KviPointerList<KviTalListViewItem> lChildren;
+ lChildren.setAutoDelete(false);
+ KviTalListViewItem * it = m_pLastEditedItem->firstChild();
+ while(it)
+ {
+ lChildren.append(it);
+ it = it->nextSibling();
+ }
+ for(it = lChildren.first();it;it = lChildren.next())
+ m_pLastEditedItem->takeItem(it);
+
+ bool bYesToAll = true;
+ removeItem(m_pLastEditedItem,&bYesToAll,true);
+
+ m_pLastEditedItem = 0; // make sure it's true (but it already should be because of removeItem())
+ m_pLastClickedItem = 0; // make sure it's true (but it already should be because of removeItem())
+
+ if(bAlias)
+ {
+ KviAliasListViewItem * ait = createFullAliasItem(szNewName);
+ ait->setBuffer(szCode);
+ ait->setCursorPosition(pntCursor);
+ activateItem(ait);
+
+ for(it = lChildren.first();it;it = lChildren.next())
+ ait->insertItem(it);
+ } else {
+ KviAliasNamespaceListViewItem * nit = createFullNamespaceItem(szNewName);
+ activateItem(nit);
+
+ for(it = lChildren.first();it;it = lChildren.next())
+ {
+ ((KviAliasEditorListViewItem*)it)->setParentNamespaceItem(nit);
+ nit->insertItem(it);
+ }
+ }
+}
+
+// warning: this saves ONLY the body, not the name!
+// the name is changed explicitly with renameItem(), when needed
+void KviAliasEditor::saveLastEditedItem()
+{
+ if(!m_pLastEditedItem)return;
+ if(!m_pEditor->isModified())return; // nothing to save
+ if(!itemExists(m_pLastEditedItem,m_pListView->firstChild()))return; // dead ?
+
+ if(m_pLastEditedItem->isNamespace())return;
+
+ QString newCode;
+ m_pEditor->getText(newCode);
+ ((KviAliasListViewItem *)m_pLastEditedItem)->setBuffer(newCode);
+ ((KviAliasListViewItem *)m_pLastEditedItem)->setCursorPosition(m_pEditor->getCursor());
+}
+
+void KviAliasEditor::currentItemChanged(KviTalListViewItem *it)
+{
+ saveLastEditedItem();
+
+ m_pLastEditedItem = (KviAliasEditorListViewItem *)it;
+
+ if(!m_pLastEditedItem)
+ {
+ m_pNameLabel->setText(__tr2qs("No item selected"));
+ m_pRenameButton->setEnabled(false);
+ m_pEditor->setText("");
+ m_pEditor->setEnabled(false);
+ return;
+ }
+
+ QString szNam = buildFullItemName(m_pLastEditedItem);
+ if(m_pLastEditedItem->isNamespace())
+ {
+ QString szLabelText = __tr2qs("Namespace");
+ szLabelText += ": <b>";
+ szLabelText += szNam;
+ szLabelText += "</b>";
+ m_pNameLabel->setText(szLabelText);
+ m_pRenameButton->setEnabled(true);
+ m_pEditor->setText("");
+ m_pEditor->setEnabled(false);
+ return;
+ }
+
+ QString szLabelText = __tr2qs("Alias");
+ szLabelText += ": <b>";
+ szLabelText += szNam;
+ szLabelText += "</b>";
+ m_pNameLabel->setText(szLabelText);
+ m_pRenameButton->setEnabled(true);
+ m_pEditor->setText(((KviAliasListViewItem *)it)->buffer());
+ m_pEditor->setCursorPosition(((KviAliasListViewItem *)it)->cursorPosition());
+ m_pEditor->setEnabled(true);
+}
+
+void KviAliasEditor::recursiveCommit(KviAliasEditorListViewItem * it)
+{
+ if(!it)return;
+ if(it->isAlias())
+ {
+ QString szName = buildFullItemName(it);
+ //debug("ADDING %s",szName.latin1());
+ // WARNING: On MSVC operator new here is valid ONLY because
+ // KviKvsScript has a non virtual detructor!
+ KviKvsScript * a = new KviKvsScript(szName,((KviAliasListViewItem *)it)->buffer());
+ KviKvsAliasManager::instance()->add(szName,a);
+ } else {
+ recursiveCommit((KviAliasEditorListViewItem *)(it->firstChild()));
+ }
+ recursiveCommit((KviAliasEditorListViewItem *)(it->nextSibling()));
+}
+
+
+void KviAliasEditor::commit()
+{
+ saveLastEditedItem();
+ KviKvsAliasManager::instance()->clear();
+
+ recursiveCommit((KviAliasEditorListViewItem *)(m_pListView->firstChild()));
+
+ g_pApp->saveAliases();
+}
+
+
+void KviAliasEditor::getUniqueItemName(KviAliasEditorListViewItem *item,QString &buffer,KviAliasEditorListViewItem::Type eType)
+{
+ QString ret;
+
+ int idx = 0;
+ KviAliasEditorListViewItem * found;
+
+ for(;;)
+ {
+ ret = buffer;
+ if(idx > 0)
+ {
+ QString tmp;
+ tmp.setNum(idx);
+ ret.append(tmp);
+ }
+
+ if(item)
+ {
+ if(!item->isNamespace())
+ {
+ buffer = ret;
+ return;
+ }
+
+ if(eType == KviAliasEditorListViewItem::Namespace)
+ found = ((KviAliasNamespaceListViewItem *)item)->findNamespaceItem(ret);
+ else
+ found = ((KviAliasNamespaceListViewItem *)item)->findAliasItem(ret);
+ } else {
+ if(eType == KviAliasEditorListViewItem::Namespace)
+ found = findNamespaceItem(ret);
+ else
+ found = findAliasItem(ret);
+ }
+
+ if(!found)
+ {
+ buffer = ret;
+ return;
+ }
+
+ idx++;
+ }
+}
+
+
+
+
+KviAliasEditorWindow::KviAliasEditorWindow(KviFrame * lpFrm)
+: KviWindow(KVI_WINDOW_TYPE_SCRIPTEDITOR,lpFrm,"aliaseditor",0)
+{
+ g_pAliasEditorWindow = this;
+
+ setFixedCaption(__tr2qs("Alias Editor"));
+
+ m_pEditor = new KviAliasEditor(this);
+
+ m_pBase = new QWidget(this);
+ QGridLayout * g = new QGridLayout(m_pBase,1,4,4,4);
+
+ QPushButton * btn = new QPushButton(__tr2qs("&OK"),m_pBase);
+ connect(btn,SIGNAL(clicked()),this,SLOT(okClicked()));
+ btn->setIconSet(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ACCEPT)));
+ g->addWidget(btn,0,1);
+
+ btn = new QPushButton(__tr2qs("&Apply"),m_pBase);
+ connect(btn,SIGNAL(clicked()),this,SLOT(applyClicked()));
+ btn->setIconSet(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_ACCEPT)));
+ g->addWidget(btn,0,2);
+
+ btn = new QPushButton(__tr2qs("Cancel"),m_pBase);
+ connect(btn,SIGNAL(clicked()),this,SLOT(cancelClicked()));
+ btn->setIconSet(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_DISCARD)));
+ g->addWidget(btn,0,3);
+
+ g->setColStretch(0,1);
+}
+
+KviAliasEditorWindow::~KviAliasEditorWindow()
+{
+ g_pAliasEditorWindow = 0;
+}
+
+void KviAliasEditorWindow::okClicked()
+{
+ m_pEditor->commit();
+ close();
+}
+
+void KviAliasEditorWindow::applyClicked()
+{
+ m_pEditor->commit();
+}
+
+void KviAliasEditorWindow::cancelClicked()
+{
+ close();
+}
+
+
+QPixmap * KviAliasEditorWindow::myIconPtr()
+{
+ return g_pIconManager->getSmallIcon(KVI_SMALLICON_ALIAS);
+}
+
+void KviAliasEditorWindow::resizeEvent(QResizeEvent *e)
+{
+ int hght = m_pBase->sizeHint().height();
+ m_pEditor->setGeometry(0,0,width(),height()- hght);
+ m_pBase->setGeometry(0,height() - hght,width(),hght);
+}
+
+
+void KviAliasEditorWindow::getConfigGroupName(KviStr &szName)
+{
+ szName = "aliaseditor";
+}
+
+
+void KviAliasEditorWindow::saveProperties(KviConfig *cfg)
+{
+ m_pEditor->saveProperties(cfg);
+}
+
+
+
+void KviAliasEditorWindow::loadProperties(KviConfig *cfg)
+{
+ m_pEditor->loadProperties(cfg);
+}
diff --git a/src/modules/aliaseditor/aliaseditor.h b/src/modules/aliaseditor/aliaseditor.h
new file mode 100644
index 00000000..fa49fc96
--- /dev/null
+++ b/src/modules/aliaseditor/aliaseditor.h
@@ -0,0 +1,197 @@
+#ifndef _ALIASEDITOR_H_
+#define _ALIASEDITOR_H_
+//=====================================================================================
+//
+// File : aliaseditor.h
+// Creation date : Mon Dec 23 2002 14:35:55 CEST by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2002-2005 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the linkss of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=====================================================================================
+
+#include "kvi_window.h"
+#include "kvi_string.h"
+#include "kvi_pointerlist.h"
+
+
+#include <qwidget.h>
+#include "kvi_tal_listview.h"
+#include <qlineedit.h>
+#include "kvi_tal_popupmenu.h"
+#include <qstringlist.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+
+class KviScriptEditor;
+class KviAliasNamespaceListViewItem;
+
+
+class KviAliasEditorListViewItem : public KviTalListViewItem
+{
+public:
+ enum Type { Alias, Namespace };
+public:
+ KviAliasEditorListViewItem(KviTalListView * pListView,Type eType,const QString &szName);
+ KviAliasEditorListViewItem(KviAliasNamespaceListViewItem * pParentNamespaceItem,Type eType,const QString &szName);
+ ~KviAliasEditorListViewItem(){};
+protected:
+ Type m_eType;
+ KviAliasNamespaceListViewItem * m_pParentNamespaceItem;
+ QString m_szName;
+public:
+ const QString & name(){ return m_szName; };
+ void setName(const QString &szName);
+ Type type(){ return m_eType; };
+ bool isAlias(){ return m_eType == Alias; };
+ bool isNamespace(){ return m_eType == Namespace; };
+ void setParentNamespaceItem(KviAliasNamespaceListViewItem* it){ m_pParentNamespaceItem=it; };
+ KviAliasNamespaceListViewItem * parentNamespaceItem(){ return m_pParentNamespaceItem; };
+ virtual QString key(int column,bool bAsc) const;
+};
+
+class KviAliasListViewItem;
+
+class KviAliasNamespaceListViewItem : public KviAliasEditorListViewItem
+{
+public:
+ KviAliasNamespaceListViewItem(KviTalListView * pListView,const QString &szName);
+ KviAliasNamespaceListViewItem(KviAliasNamespaceListViewItem * pParentNamespace,const QString &szName);
+ ~KviAliasNamespaceListViewItem(){};
+public:
+ KviAliasNamespaceListViewItem * findNamespaceItem(const QString &szName);
+ KviAliasNamespaceListViewItem * getNamespaceItem(const QString &szName);
+ KviAliasListViewItem * findAliasItem(const QString &szName);
+ KviAliasListViewItem * getAliasItem(const QString &szName);
+ KviAliasListViewItem * createFullAliasItem(const QString &szFullName);
+ KviAliasNamespaceListViewItem * createFullNamespaceItem(const QString &szFullName);
+};
+
+
+class KviAliasListViewItem : public KviAliasEditorListViewItem
+{
+public:
+ KviAliasListViewItem(KviAliasNamespaceListViewItem * pParentNamespace,const QString &szName);
+ KviAliasListViewItem(KviTalListView *pListView,const QString &szName);
+ ~KviAliasListViewItem(){};
+public:
+ QString m_szBuffer;
+ QPoint m_cPos;
+public:
+ const QString & buffer(){ return m_szBuffer; };
+ const QPoint & cursorPosition(){ return m_cPos; };
+ void setBuffer(const QString &szBuffer){ m_szBuffer = szBuffer; };
+ void setCursorPosition(const QPoint &cPos){ m_cPos = cPos; };
+};
+
+class QSplitter;
+
+class KviAliasEditor : public QWidget
+{
+ Q_OBJECT
+public:
+ KviAliasEditor(QWidget * par);
+ ~KviAliasEditor();
+public:
+ KviScriptEditor * m_pEditor;
+ KviTalListView * m_pListView;
+ QLabel * m_pNameLabel;
+ QPushButton * m_pRenameButton;
+ KviAliasEditorListViewItem * m_pLastEditedItem;
+ KviAliasEditorListViewItem * m_pLastClickedItem;
+ //KviAliasListViewItem * m_pLastEditedItem;
+ KviTalPopupMenu * m_pContextPopup;
+ QSplitter * m_pSplitter;
+ QString m_szDir;
+public:
+ //bool modified(){ return m_bModified; };
+ void commit();
+ void exportAliases(bool,bool=false);
+ void exportSelectionInSinglesFiles(KviPointerList<KviAliasListViewItem> *l);
+
+ void saveProperties(KviConfig *);
+ void loadProperties(KviConfig *);
+ static void splitFullAliasOrNamespaceName(const QString &szFullName,QStringList &lNamespaces,QString &szName);
+protected slots:
+ void currentItemChanged(KviTalListViewItem *it);
+ void newAlias();
+ void newNamespace();
+ void exportAll();
+ void exportSelectedSepFiles();
+ void exportSelected();
+ void removeSelectedItems();
+ void itemPressed(KviTalListViewItem *it,const QPoint &pnt,int col);
+ void renameItem();
+ void slotFind();
+ void slotCollapseNamespaces();
+ void slotFindWord(const QString &);
+ void slotReplaceAll(const QString &before,const QString &after);
+protected:
+// QString const & findWord(const QString &txt,bool);
+ void recursiveCollapseNamespaces(KviAliasEditorListViewItem * it);
+ void recursiveSearchReplace(const QString &szSearch,KviAliasEditorListViewItem * it,bool bReplace=false,const QString &szReplace="n");
+
+ void recursiveCommit(KviAliasEditorListViewItem * it);
+ void getExportAliasBuffer(QString &buffer,KviAliasListViewItem * it);
+ void oneTimeSetup();
+ void selectOneItem(KviTalListViewItem * it,KviTalListViewItem *pStartFrom);
+ void saveLastEditedItem();
+ void getUniqueItemName(KviAliasEditorListViewItem *item,QString &buffer,KviAliasEditorListViewItem::Type eType);
+ void appendSelectedItems(KviPointerList<KviAliasEditorListViewItem> * l,KviAliasEditorListViewItem * pStartFrom,bool bIncludeChildrenOfSelected = false);
+ void appendAliasItems(KviPointerList<KviAliasListViewItem> * l,KviAliasEditorListViewItem * pStartFrom,bool bSelectedOnly);
+ void appendNamespaceItems(KviPointerList<KviAliasListViewItem> * l,KviAliasEditorListViewItem * pStartFrom,bool bSelectedOnly);
+ bool removeItem(KviAliasEditorListViewItem *it,bool * pbYesToAll,bool bDeleteEmptyTree);
+ void openParentItems(KviTalListViewItem * it);
+ void activateItem(KviTalListViewItem * it);
+ QString askForAliasName(const QString &szAction,const QString &szText,const QString &szInitialText);
+ QString askForNamespaceName(const QString &szAction,const QString &szText,const QString &szInitialText);
+ bool itemExists(KviTalListViewItem *pSearchFor,KviTalListViewItem * pSearchAt);
+ bool namespaceExists(QString &szFullItemName);
+ bool aliasExists(QString &szFullItemName);
+ bool hasSelectedItems(KviTalListViewItem * it);
+ KviAliasNamespaceListViewItem * findNamespaceItem(const QString &szName);
+ KviAliasNamespaceListViewItem * getNamespaceItem(const QString &szName);
+ KviAliasListViewItem * findAliasItem(const QString &szName);
+ KviAliasListViewItem * getAliasItem(const QString &szName);
+ KviAliasListViewItem * createFullAliasItem(const QString &szFullName);
+ KviAliasNamespaceListViewItem * createFullNamespaceItem(const QString &szFullName);
+ QString buildFullItemName(KviAliasEditorListViewItem * it);
+};
+
+
+class KviAliasEditorWindow : public KviWindow
+{
+ Q_OBJECT
+public:
+ KviAliasEditorWindow(KviFrame * lpFrm);
+ ~KviAliasEditorWindow();
+protected:
+ KviAliasEditor * m_pEditor;
+ QWidget * m_pBase;
+protected:
+ virtual QPixmap * myIconPtr();
+ virtual void resizeEvent(QResizeEvent *e);
+ virtual void getConfigGroupName(KviStr &szName);
+ virtual void saveProperties(KviConfig *);
+ virtual void loadProperties(KviConfig *);
+protected slots:
+ void cancelClicked();
+ void okClicked();
+ void applyClicked();
+};
+
+#endif //_ALIASEDITOR_H_
diff --git a/src/modules/aliaseditor/libkvialiaseditor.cpp b/src/modules/aliaseditor/libkvialiaseditor.cpp
new file mode 100644
index 00000000..079197c7
--- /dev/null
+++ b/src/modules/aliaseditor/libkvialiaseditor.cpp
@@ -0,0 +1,90 @@
+//==========================================================================================
+//
+// File : libkvialiaseditor.cpp
+// Creation date : Mon 23 Dec 2002 14:30:59 2002 GMT by Szymon Stefanek
+//
+// This toolbar is part of the KVirc irc client distribution
+// Copyright (C) 2002-2005 Szymon Stefanek (pragma at kvirc dot 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 opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//==========================================================================================
+
+#include "kvi_module.h"
+#include "kvi_locale.h"
+#include "kvi_frame.h"
+
+#include "aliaseditor.h"
+KviAliasEditorWindow * g_pAliasEditorWindow = 0;
+KviModule * g_pAliasEditorModule = 0;
+
+
+/*
+ @doc: aliaseditor.open
+ @type:
+ command
+ @title:
+ aliaseditor.open
+ @short:
+ Shows the alias editor
+ @syntax:
+ aliaseditor.open
+ @description:
+ Opens the script alias editor dialog.
+*/
+
+static bool aliaseditor_kvs_cmd_open(KviKvsModuleCommandCall * c)
+{
+ if(!g_pAliasEditorWindow)
+ {
+ g_pAliasEditorWindow = new KviAliasEditorWindow(c->window()->frame());
+ c->window()->frame()->addWindow(g_pAliasEditorWindow);
+ }
+
+ g_pAliasEditorWindow->setFocus();
+
+ return true;
+}
+
+static bool aliaseditor_module_init(KviModule * m)
+{
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"open",aliaseditor_kvs_cmd_open);
+ g_pAliasEditorWindow = 0;
+ g_pAliasEditorModule = m;
+ return true;
+}
+
+static bool aliaseditor_module_can_unload(KviModule * m)
+{
+ return (g_pAliasEditorWindow == 0);
+}
+
+static bool aliaseditor_module_cleanup(KviModule *m)
+{
+ if(g_pAliasEditorWindow)delete g_pAliasEditorWindow;
+ g_pAliasEditorWindow = 0;
+ return true;
+}
+
+KVIRC_MODULE(
+ "AliasEditor", // module name
+ "2.0.0", // module version
+ "Copyright (C) 2002-2005 Szymon Stefanek (pragma at kvirc dot net)", // author & (C)
+ "Editor for the script aliases",
+ aliaseditor_module_init,
+ aliaseditor_module_can_unload,
+ 0,
+ aliaseditor_module_cleanup
+)