diff options
| author | 2010-09-01 11:03:05 +0000 | |
|---|---|---|
| committer | 2010-09-01 11:03:05 +0000 | |
| commit | 92e31b9510c8053d0a87fcf7c81e8331d6135001 (patch) | |
| tree | e66280645bc5c4619d3abc73fb142645af62267f | |
| parent | fix for #931 (diff) | |
| download | KVIrc-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
| -rw-r--r-- | src/kvirc/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_aliasmanager.h | 3 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp | 1 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_popupmanager.cpp | 11 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_popupmanager.h | 8 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_treenode_specialcommanddefpopup.cpp | 2 | ||||
| -rw-r--r-- | src/modules/popupeditor/popupeditor.cpp | 46 | ||||
| -rw-r--r-- | src/modules/popupeditor/popupeditor.h | 2 |
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); |
