aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Fabio Bas2010-09-01 11:03:05 +0000
committerGravatar Fabio Bas2010-09-01 11:03:05 +0000
commit92e31b9510c8053d0a87fcf7c81e8331d6135001 (patch)
treee66280645bc5c4619d3abc73fb142645af62267f /src
parentfix for #931 (diff)
downloadKVIrc-92e31b9510c8053d0a87fcf7c81e8331d6135001.tar.gz
KVIrc-92e31b9510c8053d0a87fcf7c81e8331d6135001.tar.bz2
KVIrc-92e31b9510c8053d0a87fcf7c81e8331d6135001.zip
implemented #929
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@4965 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
-rw-r--r--src/kvirc/CMakeLists.txt1
-rw-r--r--src/kvirc/kvs/kvi_kvs_aliasmanager.h3
-rw-r--r--src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp1
-rw-r--r--src/kvirc/kvs/kvi_kvs_popupmanager.cpp11
-rw-r--r--src/kvirc/kvs/kvi_kvs_popupmanager.h8
-rw-r--r--src/kvirc/kvs/kvi_kvs_treenode_specialcommanddefpopup.cpp2
-rw-r--r--src/modules/popupeditor/popupeditor.cpp46
-rw-r--r--src/modules/popupeditor/popupeditor.h2
8 files changed, 70 insertions, 4 deletions
diff --git a/src/kvirc/CMakeLists.txt b/src/kvirc/CMakeLists.txt
index 7a697f108..45499c41b 100644
--- a/src/kvirc/CMakeLists.txt
+++ b/src/kvirc/CMakeLists.txt
@@ -74,6 +74,7 @@ SET(kvirc_MOC_HDRS
kvs/kvi_kvs_dnsmanager.h
kvs/kvi_kvs_object.h
kvs/kvi_kvs_popupmenu.h
+ kvs/kvi_kvs_popupmanager.h
kvs/kvi_kvs_processmanager.h
kvs/kvi_kvs_timermanager.h
kvs/kvi_kvs_useraction.h
diff --git a/src/kvirc/kvs/kvi_kvs_aliasmanager.h b/src/kvirc/kvs/kvi_kvs_aliasmanager.h
index ee142d272..833725f6a 100644
--- a/src/kvirc/kvs/kvi_kvs_aliasmanager.h
+++ b/src/kvirc/kvs/kvi_kvs_aliasmanager.h
@@ -34,7 +34,7 @@
class KVIRC_API KviKvsAliasManager : public QObject
{
- Q_OBJECT
+ Q_OBJECT
protected: // it only can be created and destroyed by KviKvsAliasManager::init()/done()
KviKvsAliasManager();
~KviKvsAliasManager();
@@ -61,7 +61,6 @@ public:
void completeCommand(const QString &word,KviPointerList<QString> * matches);
signals:
-
void aliasRefresh(const QString &);
};
// namespaces are handled completly in the editing!
diff --git a/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp b/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp
index 91490d7cf..f646c58dc 100644
--- a/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp
+++ b/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp
@@ -965,6 +965,7 @@ namespace KviKvsCoreSimpleCommands
KVSCSC_pContext->warning(__tr2qs_ctx("The menu item with id \"%Q\" does not exist in popup \"%Q\"","kvs"),&szItemId,&szPopupName);
}
+ KviKvsPopupManager::instance()->emitRefresh(szPopupName);
return true;
}
diff --git a/src/kvirc/kvs/kvi_kvs_popupmanager.cpp b/src/kvirc/kvs/kvi_kvs_popupmanager.cpp
index 23aa45b77..45a4a7756 100644
--- a/src/kvirc/kvs/kvi_kvs_popupmanager.cpp
+++ b/src/kvirc/kvs/kvi_kvs_popupmanager.cpp
@@ -71,6 +71,17 @@ KviKvsPopupMenu * KviKvsPopupManager::get(const QString &szPopupName)
return m;
}
+void KviKvsPopupManager::add(const QString &szPopupName,KviKvsPopupMenu * pPopup)
+{
+ m_pPopupDict->replace(szPopupName,pPopup);
+ emit popupRefresh(szPopupName);
+};
+
+void KviKvsPopupManager::emitRefresh(const QString &szPopupName)
+{
+ emit popupRefresh(szPopupName);
+}
+
void KviKvsPopupManager::load(const QString &szFileName)
{
m_pPopupDict->clear();
diff --git a/src/kvirc/kvs/kvi_kvs_popupmanager.h b/src/kvirc/kvs/kvi_kvs_popupmanager.h
index 526d9dd39..7661583ff 100644
--- a/src/kvirc/kvs/kvi_kvs_popupmanager.h
+++ b/src/kvirc/kvs/kvi_kvs_popupmanager.h
@@ -27,8 +27,9 @@
#include "kvi_settings.h"
#include "kvi_kvs_popupmenu.h"
-class KVIRC_API KviKvsPopupManager
+class KVIRC_API KviKvsPopupManager : public QObject
{
+ Q_OBJECT
protected: // can only be created by init/done
KviKvsPopupManager();
~KviKvsPopupManager();
@@ -45,12 +46,15 @@ public:
KviKvsPopupMenu * lookup(const QString &szPopupName){ return m_pPopupDict->find(szPopupName); };
KviKvsPopupMenu * get(const QString &szPopupName);
- void add(const QString &szPopupName,KviKvsPopupMenu * pPopup){ m_pPopupDict->replace(szPopupName,pPopup); };
+ void add(const QString &szPopupName,KviKvsPopupMenu * pPopup);
void remove(const QString &szPopupName){ m_pPopupDict->remove(szPopupName); };
void clear(){ m_pPopupDict->clear(); };
void save(const QString & filename);
void load(const QString & filename);
+ void emitRefresh(const QString &szPopupName);
+signals:
+ void popupRefresh(const QString &szPopupName);
};
diff --git a/src/kvirc/kvs/kvi_kvs_treenode_specialcommanddefpopup.cpp b/src/kvirc/kvs/kvi_kvs_treenode_specialcommanddefpopup.cpp
index 11ab294f3..3168c7ef4 100644
--- a/src/kvirc/kvs/kvi_kvs_treenode_specialcommanddefpopup.cpp
+++ b/src/kvirc/kvs/kvi_kvs_treenode_specialcommanddefpopup.cpp
@@ -341,5 +341,7 @@ bool KviKvsTreeNodeSpecialCommandDefpopup::execute(KviKvsRunTimeContext * c)
if(!bWasAlreadyThere)KviKvsPopupManager::instance()->remove(szName);
return false;
}
+
+ KviKvsPopupManager::instance()->emitRefresh(szName);
return true;
}
diff --git a/src/modules/popupeditor/popupeditor.cpp b/src/modules/popupeditor/popupeditor.cpp
index b7ab9bb5a..02ad0f26d 100644
--- a/src/modules/popupeditor/popupeditor.cpp
+++ b/src/modules/popupeditor/popupeditor.cpp
@@ -1003,6 +1003,8 @@ void KviMenuTreeWidgetItem::replacePopup(KviKvsPopupMenu * popup)
KviPopupEditor::KviPopupEditor(QWidget * par)
: QWidget(par)
{
+ m_bSaving = false;
+
QGridLayout * l = new QGridLayout(this);
QSplitter * spl = new QSplitter(Qt::Horizontal,this);
spl->setObjectName("popupeditor_horizontal_splitter");
@@ -1064,6 +1066,48 @@ void KviPopupEditor::oneTimeSetup()
connect(m_pTreeWidget,SIGNAL(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)),this,SLOT(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)));
connect(m_pTreeWidget,SIGNAL(customContextMenuRequested(const QPoint &)),
this,SLOT(customContextMenuRequested(const QPoint &)));
+ connect(KviKvsPopupManager::instance(),SIGNAL(popupRefresh(const QString &)),this,SLOT(popupRefresh(const QString &)));
+}
+
+void KviPopupEditor::popupRefresh(const QString &szName)
+{
+ if(m_bSaving)
+ return;
+
+ KviPointerHashTable<QString,KviKvsPopupMenu> * pTable = KviKvsPopupManager::instance()->popupDict();
+ if(!pTable) return;
+ KviKvsPopupMenu * pPopup = pTable->find(szName);
+ if(!pPopup) return;
+
+ // if it already exists, replace its popup
+ for(int i=0; i<m_pTreeWidget->topLevelItemCount();i++)
+ {
+ KviMenuTreeWidgetItem * ch = (KviMenuTreeWidgetItem *)m_pTreeWidget->topLevelItem(i);
+
+ if(KviQString::equalCI(szName,ch->m_pPopup->popupName()))
+ {
+ if(ch==m_pLastEditedItem)
+ {
+ if(
+ QMessageBox::warning(0,__tr2qs_ctx("OverWrite Current Popup","editor"),
+ __tr2qs_ctx("An external script has changed the popup you are currently editing. Do you want to accept the external changes?","editor"),
+ QMessageBox::Yes,QMessageBox::No|QMessageBox::Default|QMessageBox::Escape) != QMessageBox::Yes
+ ) return;
+ }
+ KviKvsPopupMenu * pCopy = new KviKvsPopupMenu(szName);
+ pCopy->copyFrom(pPopup);
+ ch->replacePopup(pCopy);
+
+ //refresh current item
+ if(ch==m_pLastEditedItem)
+ m_pEditor->edit(m_pLastEditedItem);
+ return;
+ }
+ }
+ // create it
+ KviKvsPopupMenu * pCopy = new KviKvsPopupMenu(szName);
+ pCopy->copyFrom(pPopup);
+ new KviMenuTreeWidgetItem(m_pTreeWidget,pCopy);
}
void KviPopupEditor::customContextMenuRequested(const QPoint &pos)
@@ -1228,6 +1272,7 @@ void KviPopupEditor::showEvent(QShowEvent *e)
void KviPopupEditor::commit()
{
+ m_bSaving = true;
if(!m_bOneTimeSetupDone)return;
saveLastEditedItem();
@@ -1262,6 +1307,7 @@ void KviPopupEditor::commit()
g_pApp->savePopups();
+ m_bSaving = false;
}
void KviPopupEditor::getUniquePopupName(KviMenuTreeWidgetItem *item,QString &buffer)
diff --git a/src/modules/popupeditor/popupeditor.h b/src/modules/popupeditor/popupeditor.h
index 102d321e3..f6a172be7 100644
--- a/src/modules/popupeditor/popupeditor.h
+++ b/src/modules/popupeditor/popupeditor.h
@@ -158,6 +158,7 @@ public:
bool m_bOneTimeSetupDone;
KviTalPopupMenu * m_pContextPopup;
KviTalPopupMenu * m_pEmptyContextPopup;
+ bool m_bSaving;
public:
void commit();
void exportPopups(bool);
@@ -169,6 +170,7 @@ protected slots:
void exportSelected();
void exportCurrentPopup();
void removeCurrentPopup();
+ void popupRefresh(const QString &szName);
protected:
void showEvent(QShowEvent *e);
void getExportPopupBuffer(QString &buffer,KviMenuTreeWidgetItem * it);