summaryrefslogtreecommitdiffstats
path: root/src/kvirc/ui/kvi_ircviewtools.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kvirc/ui/kvi_ircviewtools.cpp')
-rw-r--r--src/kvirc/ui/kvi_ircviewtools.cpp348
1 files changed, 348 insertions, 0 deletions
diff --git a/src/kvirc/ui/kvi_ircviewtools.cpp b/src/kvirc/ui/kvi_ircviewtools.cpp
new file mode 100644
index 0000000..ea47310
--- /dev/null
+++ b/src/kvirc/ui/kvi_ircviewtools.cpp
@@ -0,0 +1,348 @@
+//=============================================================================
+//
+// File : kvi_ircviewtools.cpp
+// Creation date : Sat Oct 9 2004 16:03:01 by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2004 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_ircviewtools.h"
+#include "kvi_ircview.h"
+#include "kvi_styled_controls.h"
+#include "kvi_iconmanager.h"
+#include "kvi_options.h"
+#include "kvi_locale.h"
+#include "kvi_malloc.h"
+#include "kvi_msgbox.h"
+#include "kvi_filedialog.h"
+#include "kvi_app.h"
+#include "kvi_memmove.h"
+
+#include <qtoolbutton.h>
+#include <qtabwidget.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#ifdef COMPILE_USE_QT4
+ #include <q3header.h>
+#else
+ #include <qheader.h>
+#endif
+#include <qlineedit.h>
+#include <qcursor.h>
+#include "kvi_accel.h"
+#include <qevent.h>
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// Tool widget implementation
+//
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+KviIrcMessageCheckListItem::KviIrcMessageCheckListItem(KviTalListView * par,KviIrcViewToolWidget * w,int id)
+: KviTalCheckListItem(par,QString::null,KviTalCheckListItem::CheckBox)
+{
+ m_iId = id;
+ m_pToolWidget = 0;
+ setPixmap(0,*(g_pIconManager->getSmallIcon(KVI_OPTION_MSGTYPE(id).pixId())));
+ setOn(true);
+ m_pToolWidget = w;
+}
+
+KviIrcMessageCheckListItem::~KviIrcMessageCheckListItem()
+{
+}
+
+void KviIrcMessageCheckListItem::stateChange(bool bOn)
+{
+ KviTalCheckListItem::stateChange(bOn);
+ if(!m_pToolWidget)return;
+ m_pToolWidget->forceRepaint();
+}
+
+
+
+KviIrcViewToolWidget::KviIrcViewToolWidget(KviIrcView * par)
+: QFrame(par)
+{
+ m_pIrcView = par;
+ setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
+
+ QGridLayout * gl = new QGridLayout(this,2,2,4,2);
+
+ QLabel * l = new QLabel(__tr2qs("<b><font color=\"#EAEAEA\" size=\"-1\">Find Text</font></b>"),this);
+ l->setMaximumHeight(14);
+ l->setBackgroundColor(Qt::black);
+ gl->addWidget(l,0,0);
+
+ QToolButton *tb = new QToolButton(Qt::DownArrow,this,"down_arrow");
+ tb->setFixedSize(14,14);
+ tb->setAutoRepeat(false);
+ connect(tb,SIGNAL(clicked()),m_pIrcView,SLOT(toggleToolWidget()));
+ gl->addWidget(tb,0,1);
+
+
+ QTabWidget * tw = new QTabWidget(this);
+
+
+
+ // Find tab
+ QWidget * w = new QWidget(tw);
+
+ QGridLayout * g = new QGridLayout(w,6,2,2,1);
+
+ m_pStringToFind = new QLineEdit(w);
+ g->addMultiCellWidget(m_pStringToFind,0,0,0,2);
+ connect(m_pStringToFind,SIGNAL(returnPressed()),this,SLOT(findNext()));
+
+ m_pRegExp = new KviStyledCheckBox(__tr2qs("&Regular expression"),w);
+ g->addMultiCellWidget(m_pRegExp,1,1,0,2);
+
+ m_pExtendedRegExp = new KviStyledCheckBox(__tr2qs("E&xtended regexp."),w);
+ g->addMultiCellWidget(m_pExtendedRegExp,2,2,0,2);
+ m_pExtendedRegExp->setEnabled(false);
+ connect(m_pRegExp,SIGNAL(toggled(bool)),m_pExtendedRegExp,SLOT(setEnabled(bool)));
+
+ m_pCaseSensitive = new KviStyledCheckBox(__tr2qs("C&ase sensitive"),w);
+ g->addMultiCellWidget(m_pCaseSensitive,3,3,0,2);
+
+ QPushButton * pb = new QPushButton(__tr2qs("Find &Prev."),w);
+ connect(pb,SIGNAL(clicked()),this,SLOT(findPrev()));
+ g->addWidget(pb,4,0);
+
+ pb = new QPushButton(__tr2qs("&Find Next"),w);
+ pb->setDefault(true);
+ connect(pb,SIGNAL(clicked()),this,SLOT(findNext()));
+ g->addMultiCellWidget(pb,4,4,1,2);
+
+ m_pFindResult = new QLabel(w);
+ m_pFindResult->setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
+ g->addMultiCellWidget(m_pFindResult,5,5,0,2);
+
+ //g->setResizeMode(QGridLayout::Fixed);
+
+ tw->addTab(w,__tr2qs("Find"));
+
+ // Filter tab
+ QWidget * w1 = new QWidget(tw);
+
+ g = new QGridLayout(w1,5,2,2,1);
+
+ m_pFilterView = new KviTalListView(w1);
+ m_pFilterView->addColumn(__tr2qs("Type"));
+ m_pFilterView->header()->hide();
+ m_pFilterView->setMinimumSize(QSize(10,10));
+
+ g->addMultiCellWidget(m_pFilterView,0,4,0,0);
+
+
+ m_pFilterItems = (KviIrcMessageCheckListItem **)kvi_malloc(KVI_NUM_MSGTYPE_OPTIONS * sizeof(KviIrcMessageCheckListItem *));
+
+ for(int i=0;i<KVI_NUM_MSGTYPE_OPTIONS;i++)
+ {
+ m_pFilterItems[i] = new KviIrcMessageCheckListItem(m_pFilterView,this,i);
+ }
+
+ pb = new QPushButton(__tr2qs("Set &All"),w1);
+ connect(pb,SIGNAL(clicked()),this,SLOT(filterEnableAll()));
+ g->addWidget(pb,0,1);
+
+ pb = new QPushButton(__tr2qs("Set &None"),w1);
+ connect(pb,SIGNAL(clicked()),this,SLOT(filterEnableNone()));
+ g->addWidget(pb,1,1);
+
+ pb = new QPushButton(__tr2qs("&Load From..."),w1);
+ connect(pb,SIGNAL(clicked()),this,SLOT(filterLoad()));
+ g->addWidget(pb,2,1);
+
+ pb = new QPushButton(__tr2qs("&Save As..."),w1);
+ connect(pb,SIGNAL(clicked()),this,SLOT(filterSave()));
+ g->addWidget(pb,3,1);
+
+ tw->addTab(w1,__tr2qs("Filter"));
+
+ gl->addMultiCellWidget(tw,1,1,0,1);
+
+ gl->setResizeMode(QGridLayout::Fixed);
+ m_pStringToFind->setFocus();
+ tw->showPage(w);
+ KviAccel *a = new KviAccel( this );
+ a->connectItem( a->insertItem(Qt::Key_Escape), this,SLOT(close()) );
+}
+
+KviIrcViewToolWidget::~KviIrcViewToolWidget()
+{
+ kvi_free((void *)m_pFilterItems);
+}
+
+void KviIrcViewToolWidget::filterEnableAll()
+{
+ for(int i=0;i<KVI_NUM_MSGTYPE_OPTIONS;i++)
+ {
+ m_pFilterItems[i]->setToolWidget(0);
+ m_pFilterItems[i]->setOn(true);
+ m_pFilterItems[i]->setToolWidget(this);
+ }
+ forceRepaint();
+}
+
+void KviIrcViewToolWidget::filterEnableNone()
+{
+ for(int i=0;i<KVI_NUM_MSGTYPE_OPTIONS;i++)
+ {
+ m_pFilterItems[i]->setToolWidget(0);
+ m_pFilterItems[i]->setOn(false);
+ m_pFilterItems[i]->setToolWidget(this);
+ }
+ forceRepaint();
+}
+
+void KviIrcViewToolWidget::hideEvent ( QHideEvent * ){
+ m_pIrcView->toggleToolWidget();
+}
+
+void KviIrcViewToolWidget::closeEvent ( QCloseEvent * e ){
+ m_pIrcView->toggleToolWidget();
+}
+
+void KviIrcViewToolWidget::filterLoad()
+{
+ QString szFile;
+ QString szInit;
+ g_pApp->getLocalKvircDirectory(szInit,KviApp::Filters);
+
+ if(KviFileDialog::askForOpenFileName(szFile,__tr2qs("Select a Filter File"),szInit))
+ {
+ QFile f(szFile);
+ if(f.open(IO_ReadOnly))
+ {
+ char buffer[KVI_NUM_MSGTYPE_OPTIONS];
+ kvi_memset(buffer,0,KVI_NUM_MSGTYPE_OPTIONS);
+ f.readBlock(buffer,KVI_NUM_MSGTYPE_OPTIONS);
+ f.close();
+ for(int i=0;i<KVI_NUM_MSGTYPE_OPTIONS;i++)
+ {
+ m_pFilterItems[i]->setToolWidget(0);
+ m_pFilterItems[i]->setOn(buffer[i]);
+ m_pFilterItems[i]->setToolWidget(this);
+ }
+ forceRepaint();
+ } else {
+ KviMessageBox::warning(__tr2qs("Can't open the filter file %s for reading."),&szFile);
+ }
+ }
+}
+
+void KviIrcViewToolWidget::filterSave()
+{
+ QString szFile;
+ QString szInit;
+ g_pApp->getLocalKvircDirectory(szInit,KviApp::Filters,"filter.kvf");
+ if(KviFileDialog::askForSaveFileName(szFile,__tr2qs("Select a Name for the Filter File"),szInit,0,false,true))
+ {
+ QFile f(szFile);
+ if(f.open(IO_WriteOnly))
+ {
+ char buffer[KVI_NUM_MSGTYPE_OPTIONS];
+ for(int i=0;i<KVI_NUM_MSGTYPE_OPTIONS;i++)
+ {
+ buffer[i] = messageEnabled(i) ? 1 : 0;
+ }
+ if(f.writeBlock(buffer,KVI_NUM_MSGTYPE_OPTIONS) < KVI_NUM_MSGTYPE_OPTIONS)
+ KviMessageBox::warning(__tr2qs("Failed to write the filter file %Q (IO Error)"),&szFile);
+ f.close();
+ } else KviMessageBox::warning(__tr2qs("Can't open the filter file %Q for writing"),&szFile);
+ }
+}
+
+void KviIrcViewToolWidget::forceRepaint()
+{
+ #if defined(COMPILE_USE_QT4) && defined(COMPILE_ON_WINDOWS)
+ m_pIrcView->repaint();
+ #else
+ m_pIrcView->paintEvent(0);
+ #endif
+
+}
+
+void KviIrcViewToolWidget::setFindResult(const QString & text)
+{
+ m_pFindResult->setText(text);
+}
+
+void KviIrcViewToolWidget::findPrev()
+{
+ bool bRegExp = m_pRegExp->isChecked();
+ m_pIrcView->findPrev(m_pStringToFind->text(),m_pCaseSensitive->isChecked(),bRegExp,bRegExp && m_pExtendedRegExp->isChecked());
+}
+
+void KviIrcViewToolWidget::findNext()
+{
+ bool bRegExp = m_pRegExp->isChecked();
+ m_pIrcView->findNext(m_pStringToFind->text(),m_pCaseSensitive->isChecked(),bRegExp,bRegExp && m_pExtendedRegExp->isChecked());
+}
+
+
+void KviIrcViewToolWidget::mousePressEvent(QMouseEvent *e)
+{
+ m_pressPoint = e->pos();
+}
+
+void KviIrcViewToolWidget::mouseMoveEvent(QMouseEvent *)
+{
+ QPoint p=m_pIrcView->mapFromGlobal(QCursor::pos());
+ p-=m_pressPoint;
+ if(p.x() < 1)p.setX(1);
+ else {
+ int www = (m_pIrcView->width() - (m_pIrcView->m_pScrollBar->width() + 1));
+ if((p.x() + width()) > www)p.setX(www - width());
+ }
+ if(p.y() < 1)p.setY(1);
+ else {
+ int hhh = (m_pIrcView->height() - 1);
+ if((p.y() + height()) > hhh)p.setY(hhh - height());
+ }
+ move(p);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// Link tip label implementation
+//
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+KviIrcViewToolTip::KviIrcViewToolTip(KviIrcView * pView)
+: KviTalToolTip(pView)
+{
+ m_pView = pView;
+}
+
+KviIrcViewToolTip::~KviIrcViewToolTip()
+{
+}
+
+void KviIrcViewToolTip::maybeTip(const QPoint &pnt)
+{
+ m_pView->maybeTip(pnt);
+}
+