//============================================================================= // // File : kvi_kvs_treenode_specialcommanddefpopup.cpp // Created on Fri 02 Jan 2004 14:09:00 by Szymon Stefanek // // This file is part of the KVIrc IRC client distribution // Copyright (C) 2004 Szymon Stefanek // // 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. // //============================================================================= #define __KVIRC__ #include "kvi_kvs_treenode_specialcommanddefpopup.h" #include "kvi_kvs_treenode_expression.h" #include "kvi_kvs_treenode_instruction.h" #include "kvi_kvs_runtimecontext.h" #include "kvi_locale.h" #include "kvi_kvs_popupmanager.h" #include "kvi_kvs_popupmenu.h" #include "kvi_kvs_script.h" void KviKvsTreeNodeSpecialCommandDefpopupLabelExtpopup::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Label \"extpopup\" For Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelExtpopup::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopupLabelExtpopup",prefix); TQString tmp = prefix; tmp.append(" "); TQString x = tmp; x += "CONDITION: "; x += m_szCondition; tqDebug("%s",x.utf8().data()); x = tmp; x += "TEXT: "; x += m_szText; tqDebug("%s",x.utf8().data()); x = tmp; x += "NAME: "; x += m_szName; tqDebug("%s",x.utf8().data()); x = tmp; x += "ICON: "; x += m_szIcon; tqDebug("%s",x.utf8().data()); #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelExtpopup::execute(KviKvsRunTimeContext * c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS p->addExtPopup(m_szItemName,m_szName,m_szText,m_szIcon,m_szCondition); #endif return true; } void KviKvsTreeNodeSpecialCommandDefpopupLabelItem::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Label \"item\" For Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelItem::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopupLabelItem",prefix); TQString tmp = prefix; tmp.append(" "); TQString x = tmp; x += "CONDITION: "; x += m_szCondition; tqDebug("%s",x.utf8().data()); x = tmp; x += "TEXT: "; x += m_szText; tqDebug("%s",x.utf8().data()); x = tmp; x += "ICON: "; x += m_szIcon; tqDebug("%s",x.utf8().data()); x = tmp; x += "INSTRUCTION: "; x += m_szInstruction; tqDebug("%s",x.utf8().data()); #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelItem::execute(KviKvsRunTimeContext * c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS p->addItem(m_szItemName,m_szInstruction,m_szText,m_szIcon,m_szCondition); #endif return true; } void KviKvsTreeNodeSpecialCommandDefpopupLabelLabel::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Label \"label\" For Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelLabel::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopupLabelLabel",prefix); TQString tmp = prefix; tmp.append(" "); TQString x = tmp; x += "CONDITION: "; x += m_szCondition; tqDebug("%s",x.utf8().data()); x = tmp; x += "TEXT: "; x += m_szText; tqDebug("%s",x.utf8().data()); x = tmp; x += "ICON: "; x += m_szIcon; tqDebug("%s",x.utf8().data()); #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelLabel::execute(KviKvsRunTimeContext * c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS p->addLabel(m_szItemName,m_szText,m_szIcon,m_szCondition); #endif return true; } void KviKvsTreeNodeSpecialCommandDefpopupLabelSeparator::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Label \"separator\" For Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelSeparator::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopupLabelSeparator",prefix); TQString tmp = prefix; tmp.append(" CONDITION:"); tmp.append(m_szCondition); tqDebug("%s",tmp.utf8().data()); #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelSeparator::execute(KviKvsRunTimeContext * c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS p->addSeparator(m_szItemName,m_szCondition); #endif return true; } void KviKvsTreeNodeSpecialCommandDefpopupLabelEpilogue::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Label \"epilogue\" For Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelEpilogue::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopupLabelEpilogue",prefix); TQString tmp = prefix; tmp.append(" INSTRUCTION: "); tmp += m_szInstruction; tqDebug("%s",tmp.utf8().data()); #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelEpilogue::execute(KviKvsRunTimeContext * c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS p->addEpilogue(m_szItemName,m_szInstruction); #endif return true; } void KviKvsTreeNodeSpecialCommandDefpopupLabelPrologue::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Label \"prologue\" For Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelPrologue::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopupLabelPrologue",prefix); TQString tmp = prefix; tmp.append(" INSTRUCTION: "); tmp += m_szInstruction; tqDebug("%s",tmp.utf8().data()); #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelPrologue::execute(KviKvsRunTimeContext * c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS p->addPrologue(m_szItemName,m_szInstruction); #endif return true; } KviKvsTreeNodeSpecialCommandDefpopupLabelPopup::KviKvsTreeNodeSpecialCommandDefpopupLabelPopup(const TQChar * pLocation) : KviKvsTreeNodeSpecialCommandDefpopupConditionalLabelWithTextAndIcon(pLocation,TQString(),TQString(),TQString(),TQString()) { #ifdef COMPILE_NEW_KVS m_pLabels = new KviPointerList; m_pLabels->setAutoDelete(true); #endif } KviKvsTreeNodeSpecialCommandDefpopupLabelPopup::~KviKvsTreeNodeSpecialCommandDefpopupLabelPopup() { #ifdef COMPILE_NEW_KVS delete m_pLabels; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelPopup::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Label \"popup\" For Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelPopup::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopupLabelPopup",prefix); TQString tmp = prefix; tmp.append(" "); TQString x = tmp; x += "CONDITION: "; x += m_szCondition; tqDebug("%s",x.utf8().data()); x = tmp; x += "TEXT: "; x += m_szText; tqDebug("%s",x.utf8().data()); x = tmp; x += "ICON: "; x += m_szIcon; tqDebug("%s",x.utf8().data()); for(KviKvsTreeNodeSpecialCommandDefpopupLabel * l = m_pLabels->first();l;l = m_pLabels->next()) l->dump(tmp.utf8().data()); #endif } void KviKvsTreeNodeSpecialCommandDefpopupLabelPopup::addLabel(KviKvsTreeNodeSpecialCommandDefpopupLabel * pLabel) { #ifdef COMPILE_NEW_KVS pLabel->setParent(this); m_pLabels->append(pLabel); #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelPopup::execute(KviKvsRunTimeContext * c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS // the name will be reset anyway KviKvsPopupMenu * pNew = p->addPopup(m_szItemName,m_szText,m_szIcon,m_szCondition); return fill(c,pNew); #else return false; #endif } bool KviKvsTreeNodeSpecialCommandDefpopupLabelPopup::fill(KviKvsRunTimeContext* c,KviKvsPopupMenu * p) { #ifdef COMPILE_NEW_KVS for(KviKvsTreeNodeSpecialCommandDefpopupLabel * l = m_pLabels->first();l;l = m_pLabels->next()) { if(!l->execute(c,p))return false; } #endif return true; } KviKvsTreeNodeSpecialCommandDefpopup::KviKvsTreeNodeSpecialCommandDefpopup(const TQChar * pLocation,KviKvsTreeNodeData * pPopupName,KviKvsTreeNodeSpecialCommandDefpopupLabelPopup * pMainPopup) : KviKvsTreeNodeSpecialCommand(pLocation,"defpopup") { #ifdef COMPILE_NEW_KVS m_pPopupName = pPopupName; m_pPopupName->setParent(this); m_pMainPopup = pMainPopup; m_pMainPopup->setParent(this); #endif } KviKvsTreeNodeSpecialCommandDefpopup::~KviKvsTreeNodeSpecialCommandDefpopup() { #ifdef COMPILE_NEW_KVS delete m_pPopupName; delete m_pMainPopup; #endif } void KviKvsTreeNodeSpecialCommandDefpopup::contextDescription(TQString &szBuffer) { #ifdef COMPILE_NEW_KVS szBuffer = "Special Command \"defpopup\""; #endif } void KviKvsTreeNodeSpecialCommandDefpopup::dump(const char * prefix) { #ifdef COMPILE_NEW_KVS tqDebug("%s SpecialCommandDefpopup",prefix); TQString tmp = prefix; tmp.append(" "); m_pPopupName->dump(tmp.utf8().data()); m_pMainPopup->dump(tmp.utf8().data()); #endif } bool KviKvsTreeNodeSpecialCommandDefpopup::execute(KviKvsRunTimeContext * c) { #ifdef COMPILE_NEW_KVS KviKvsVariant v; if(!m_pPopupName->evaluateReadOnly(c,&v))return false; TQString szName; v.asString(szName); KviKvsSwitchList swl; if(m_pSwitches) { if(!(m_pSwitches->evaluate(c,&swl)))return false; } KviKvsPopupMenu * pPopup = KviKvsPopupManager::instance()->lookup(szName); bool bWasAlreadyThere; if(!pPopup) { if(m_pMainPopup->isEmpty())return true; // we wanted to remove it anyway: exit silently // we want to create it pPopup = new KviKvsPopupMenu(szName); KviKvsPopupManager::instance()->add(szName,pPopup); bWasAlreadyThere = false; } else { bWasAlreadyThere = true; if(pPopup->isLocked()) { c->error(__tr2qs("The popup '%s' is actually locked: 'self-modifications' are not allowed"),&szName); return false; } if(m_pMainPopup->isEmpty()) { // we want to remove it KviKvsPopupManager::instance()->remove(szName); return true; } // we want to (re)create it if(!swl.find('m',"--merge"))pPopup->doClear(); } if(!m_pMainPopup->fill(c,pPopup)) { if(!bWasAlreadyThere)KviKvsPopupManager::instance()->remove(szName); return false; } #endif return true; }