diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-24 02:13:59 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-24 02:13:59 +0000 |
commit | a6d58bb6052ac8cb01805a48c4ad2f129126116f (patch) | |
tree | dd867a099fcbb263a8009a9fb22695b87855dad6 /src/kvirc/ui/kvi_modeeditor.cpp | |
download | kvirc-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/kvirc/ui/kvi_modeeditor.cpp')
-rw-r--r-- | src/kvirc/ui/kvi_modeeditor.cpp | 336 |
1 files changed, 336 insertions, 0 deletions
diff --git a/src/kvirc/ui/kvi_modeeditor.cpp b/src/kvirc/ui/kvi_modeeditor.cpp new file mode 100644 index 0000000..f72d0a2 --- /dev/null +++ b/src/kvirc/ui/kvi_modeeditor.cpp @@ -0,0 +1,336 @@ +// +// File : kvi_modeeditor.cpp +// Creation date : Sat Apr 14 2001 13:52:11 by Szymon Stefanek +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 2001 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. +// +#define __KVIRC__ +#include "kvi_modeeditor.h" +#include "kvi_iconmanager.h" +#include "kvi_locale.h" +#include "kvi_qstring.h" +#include "kvi_console.h" +#include "kvi_ircconnection.h" +#include "kvi_ircconnectionserverinfo.h" +#include "kvi_channel.h" +#include "kvi_ircconnectionuserinfo.h" +#include "kvi_styled_controls.h" +#include "kvi_toolwindows_container.h" +#include "kvi_tal_scrollview.h" + +#include <qlayout.h> +#include <qlabel.h> + + +////////////////////////////////////////////////////////////////////// +// class KviModeEditor +// +////////////////////////////////////////////////////////////////////// + +//static char checkable_modes_table[KVI_NUM_CHECKABLE_MODES] = { 'p','s','t','n','m','i'}; + +// FIXME: This widget should use a KviTalScrollView! + +KviModeEditor::KviModeEditor(QWidget * par,KviWindowToolPageButton* button,const char * nam,KviConsole * c,const char * mode,const char * key,const char * limit) +: KviWindowToolWidget(par,button) +{ + m_szMode = mode; + m_szKey = key; + m_szLimit = limit; + bool isEnabled=1; + + QObject * w = parent(); + while(w) + { + if(w->inherits("KviChannel")) + { + KviChannel *chan = ((KviChannel *)w); + if(!( chan->isMeHalfOp() || chan->isMeOp() || chan->isMeChanOwner() || chan->isMeChanAdmin() || chan->connection()->userInfo()->hasUserMode('o') || chan->connection()->userInfo()->hasUserMode('O') ) ) isEnabled=0; + break; + } + w = w->parent(); + } + + QGridLayout *pMasterLayout = new QGridLayout(this,2,1,2,2); + +#ifdef COMPILE_USE_QT4 + setFocusPolicy(Qt::ClickFocus); +#else + setFocusPolicy(QWidget::ClickFocus); +#endif + + KviTalScrollView *pScrollView = new KviTalScrollView(this); +#ifdef COMPILE_USE_QT4 + pScrollView->viewport()->setBackgroundRole(QPalette::Background); +#else + pScrollView->viewport()->setBackgroundMode(QWidget::PaletteBackground); +#endif + + pMasterLayout->addWidget(pScrollView,0,0); + + pMasterLayout->setRowStretch(1,1); + QPushButton * b; + if(isEnabled) b = new QPushButton(__tr2qs("&Apply"),this); + else b = new QPushButton(__tr2qs("Close"),this); + + pMasterLayout->addWidget(b,1,0); + connect(b,SIGNAL(clicked()),this,SLOT(commit())); + + QWidget * pBackground = new QWidget(pScrollView->viewport()); + + QGridLayout *g = new QGridLayout(pBackground,20,3,2,2); + + QLabel * l = new QLabel("",pBackground); + l->setPixmap(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_MODE))); + g->addWidget(l,0,0); + + l = new QLabel(__tr2qs("Channel Modes"),pBackground); + g->addMultiCellWidget(l,0,0,1,2); + + QFrame * f = new QFrame(pBackground); + f->setFrameStyle(QFrame::HLine | QFrame::Sunken); + g->addMultiCellWidget(f,1,1,0,2); + + int i = 1; + QString tmp; + + m_pCheckBoxes = new KviPointerList<KviStyledCheckBox>; + m_pCheckBoxes->setAutoDelete(false); + + + // first che basic checkable modes pstnmi + QString szModes = "pstnmi"; + + while(!szModes.isEmpty()) + { + QChar ccc = szModes[0]; + szModes.remove(0,1); + + KviQString::sprintf(tmp,"%c: %Q",ccc.unicode(),&(c->connection()->serverInfo()->getChannelModeDescription(ccc))); + KviStyledCheckBox * cb = new KviStyledCheckBox(tmp,pBackground); + cb->setEnabled(isEnabled); + m_pCheckBoxes->append(cb); + cb->setChecked(m_szMode.contains((char)ccc.unicode())); + i++; + g->addMultiCellWidget(cb,i,i,0,2); + } + + KviQString::sprintf(tmp,"l: %Q",&(c->connection()->serverInfo()->getChannelModeDescription('l'))); + m_pLimitBox = new KviStyledCheckBox(tmp,pBackground); + m_pLimitBox->setEnabled(isEnabled); + i++; + g->addMultiCellWidget(m_pLimitBox,i,i,0,2); + connect(m_pLimitBox,SIGNAL(toggled(bool)),this,SLOT(limitBoxToggled(bool))); + m_pLimitEdit = new QLineEdit(pBackground); + m_pLimitEdit->setEnabled(isEnabled); + i++; + g->addMultiCellWidget(m_pLimitEdit,i,i,1,2); + if(m_szLimit.hasData()) + { + m_pLimitBox->setChecked(true); +// m_pLimitEdit->setEnabled(true); + m_pLimitEdit->setText(m_szLimit.ptr()); + } else { + m_pLimitEdit->setEnabled(false); + } + + KviQString::sprintf(tmp,"k: %Q",&(c->connection()->serverInfo()->getChannelModeDescription('k'))); + m_pKeyBox = new KviStyledCheckBox(tmp,pBackground); + m_pKeyBox->setEnabled(isEnabled); + i++; + g->addMultiCellWidget(m_pKeyBox,i,i,0,2); + connect(m_pKeyBox,SIGNAL(toggled(bool)),this,SLOT(keyBoxToggled(bool))); + m_pKeyEdit = new QLineEdit(pBackground); + m_pKeyEdit->setEnabled(isEnabled); + i++; + g->addMultiCellWidget(m_pKeyEdit,i,i,1,2); + if(m_szKey.hasData()) + { + m_pKeyBox->setChecked(true); +// m_pLimitEdit->setEnabled(true); + m_pKeyEdit->setText(m_szKey.ptr()); + } else { + m_pKeyEdit->setEnabled(false); + } + + if(c->connection()) + { + if(c->connection()->serverInfo()) + szModes = c->connection()->serverInfo()->supportedChannelModes(); + } + + int idx = szModes.findRev(','); + if(idx != -1)szModes.remove(0,idx+1); + + szModes.replace("p",""); + szModes.replace("s",""); + szModes.replace("t",""); + szModes.replace("n",""); + szModes.replace("m",""); + szModes.replace("i",""); + szModes.replace(",",""); + szModes.replace("b",""); + szModes.replace("k",""); + szModes.replace("l",""); + + while(!szModes.isEmpty()) + { + QChar ccc = szModes[0]; + szModes.remove(0,1); + + KviQString::sprintf(tmp,"%c: %Q",(char)ccc.unicode(),&(c->connection()->serverInfo()->getChannelModeDescription(ccc))); + KviStyledCheckBox * cb = new KviStyledCheckBox(tmp,pBackground); + cb->setEnabled(isEnabled); + m_pCheckBoxes->append(cb); + cb->setChecked(m_szMode.contains((char)ccc.unicode())); + i++; + g->addMultiCellWidget(cb,i,i,0,2); + } + + i++; + + g->setRowStretch(i,1); + g->setColStretch(2,1); + + pScrollView->addChild(pBackground,0,0); + registerSelf(); +} + +KviModeEditor::~KviModeEditor() +{ + delete m_pCheckBoxes; +} + +void KviModeEditor::limitBoxToggled(bool bChecked) +{ + m_pLimitEdit->setEnabled(bChecked); +} + +void KviModeEditor::keyBoxToggled(bool bChecked) +{ + m_pKeyEdit->setEnabled(bChecked); +} + +void KviModeEditor::commit() +{ + KviStr szPlusModes; + KviStr szMinusModes; + + if(m_szKey.hasData()) + { + // had a key before + if(m_pKeyBox->isChecked()) + { + // still have it + KviStr tmp = m_pKeyEdit->text(); + tmp.stripWhiteSpace(); + if(tmp.hasData()) + { + if(!kvi_strEqualCI(tmp.ptr(),m_szKey.ptr())) + { + // not the same key! + // set the new one + KviStr mode(KviStr::Format,"-k %s",m_szKey.ptr()); + emit setMode(mode.ptr()); + mode.sprintf("+k %s",tmp.ptr()); + emit setMode(mode.ptr()); + } + } + } else { + // no key now! reset + KviStr mode(KviStr::Format,"-k %s",m_szKey.ptr()); + emit setMode(mode.ptr()); + } + } else { + // there was no key before + if(m_pKeyBox->isChecked()) + { + KviStr tmp = m_pKeyEdit->text(); + tmp.stripWhiteSpace(); + if(tmp.hasData()) + { + // new key to be set + KviStr mode(KviStr::Format,"+k %s",tmp.ptr()); + emit setMode(mode.ptr()); + } + } + } + + if(m_szLimit.hasData()) + { + // had a limit before + if(m_pLimitBox->isChecked()) + { + // still have it + KviStr tmp = m_pLimitEdit->text(); + tmp.stripWhiteSpace(); + if(tmp.hasData() && tmp.isUnsignedNum()) + { + if(!kvi_strEqualCI(tmp.ptr(),m_szLimit.ptr())) + { + // not the same limit! + KviStr mode(KviStr::Format,"+l %s",tmp.ptr()); + emit setMode(mode.ptr()); + } + } + } else { + // no limit now! reset + szMinusModes.append('l'); + } + } else { + // there was no limit before + if(m_pLimitBox->isChecked()) + { + KviStr tmp = m_pLimitEdit->text(); + tmp.stripWhiteSpace(); + if(tmp.hasData() && tmp.isUnsignedNum()) + { + // new limit to be set + KviStr mode(KviStr::Format,"+l %s",tmp.ptr()); + emit setMode(mode.ptr()); + } + } + } + + + for(KviStyledCheckBox * cb = m_pCheckBoxes->first();cb;cb = m_pCheckBoxes->next()) + { + QString sz = cb->text(); + sz.replace("&",""); + if(sz.length() > 0) + { + QChar ccc = sz[0]; + if(cb->isChecked()) + { + if(!m_szMode.contains((char)ccc.unicode()))szPlusModes.append((char)ccc.unicode()); + } else { + if(m_szMode.contains((char)ccc.unicode()))szMinusModes.append((char)ccc.unicode()); + } + } + } + + KviStr szModes; + + if(szMinusModes.hasData())szModes.sprintf("-%s",szMinusModes.ptr()); + if(szPlusModes.hasData())szModes.append(KviStr::Format,"+%s",szPlusModes.ptr()); + if(szModes.hasData())emit setMode(szModes.ptr()); + + emit done(); +} + +#include "kvi_modeeditor.moc" |