//============================================================================= // // File : kvi_irctoolbar.cpp // Creation date : Thu Oct 29 2000 14:13:13 CEST by Szymon Stefanek // // This file is part of the KVirc irc client distribution // Copyright (C) 2000-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_irctoolbar.h" #include "kvi_console.h" #include "kvi_frame.h" #include "kvi_locale.h" #include "kvi_iconmanager.h" #include "kvi_settings.h" #include "kvi_options.h" #include "kvi_frame.h" #include "kvi_app.h" #include "kvi_dynamictooltip.h" #include "kvi_ircurl.h" #include "kvi_internalcmd.h" #include "kvi_pointerlist.h" #include "kvi_ircconnection.h" #include "kvi_ircconnectionuserinfo.h" #include "kvi_irccontext.h" #include "kvi_lagmeter.h" #include #include #include "kvi_tal_popupmenu.h" #include #ifdef COMPILE_USE_QT4 #include #endif #ifdef COMPILE_PSEUDO_TRANSPARENCY extern TQPixmap * g_pShadedChildGlobalDesktopBackground; #endif static TQPixmap * g_pIccMemBuffer = 0; static KviPointerList * g_pToolBarGraphicalAppletList = 0; KviToolBarGraphicalApplet::KviToolBarGraphicalApplet(TQWidget * par,const char * name) : TQToolButton(par,name) { if(!g_pToolBarGraphicalAppletList) { g_pToolBarGraphicalAppletList = new KviPointerList(); g_pToolBarGraphicalAppletList->setAutoDelete(false); g_pIccMemBuffer = new TQPixmap(1,1); } g_pToolBarGraphicalAppletList->append(this); #ifdef COMPILE_USE_QT4 setAutoFillBackground(false); #else setBackgroundMode(TQWidget::NoBackground); #endif setMouseTracking(true); m_bResizeMode = false; m_tqsizeHint = TQSize(180,32); m_bSizeLoaded = false; } unsigned int KviToolBarGraphicalApplet::loadAppletWidth() { if(KVI_OPTION_UINT(KviOption_uintIrcContextAppletWidth) < 32) KVI_OPTION_UINT(KviOption_uintIrcContextAppletWidth) = 32; return KVI_OPTION_UINT(KviOption_uintIrcContextAppletWidth); } void KviToolBarGraphicalApplet::saveAppletWidth(unsigned int uWidth) { KVI_OPTION_UINT(KviOption_uintIrcContextAppletWidth) = uWidth; } void KviToolBarGraphicalApplet::setupSizeHint() { m_tqsizeHint = TQSize(loadAppletWidth(),22); m_bSizeLoaded = true; } TQSize KviToolBarGraphicalApplet::tqsizeHint() const { // forget constness :( KviToolBarGraphicalApplet * that = (KviToolBarGraphicalApplet *)this; if(!m_bSizeLoaded)that->setupSizeHint(); return m_tqsizeHint; } /* toolbar.define(default) { applet(thisandthat); applet(thisandthat); applet(thisandthat); applet(thisandthat); } */ void KviToolBarGraphicalApplet::mouseMoveEvent(TQMouseEvent * e) { if(e->state() & Qt::LeftButton) { if(m_bResizeMode) { int w = e->pos().x(); if(w < 32)w = 32; if(w > 480)w = 480; m_tqsizeHint = TQSize(w,22); resize(w,height()); g_pApp->postEvent(parentWidget(),new TQEvent(TQEvent::LayoutHint)); } } else { if(e->pos().x() > width() - 4) setCursor(TQt::sizeHorCursor); else setCursor(TQt::arrowCursor); } } void KviToolBarGraphicalApplet::mousePressEvent(TQMouseEvent * e) { if(e->button() & Qt::LeftButton) { m_bResizeMode = (e->pos().x() > (width() - 4)); } } void KviToolBarGraphicalApplet::mouseReleaseEvent(TQMouseEvent * e) { m_bResizeMode = false; } KviToolBarGraphicalApplet::~KviToolBarGraphicalApplet() { saveAppletWidth(m_tqsizeHint.width()); g_pToolBarGraphicalAppletList->removeRef(this); if(g_pToolBarGraphicalAppletList->isEmpty()) { delete g_pToolBarGraphicalAppletList; g_pToolBarGraphicalAppletList = 0; delete g_pIccMemBuffer; g_pIccMemBuffer = 0; } else { // resize the mem buffer to match the maximum width / height of the applets resizeMemBuffer(); } } void KviToolBarGraphicalApplet::resizeMemBuffer() { int uMaxW = 0; int uMaxH = 0; for(KviToolBarGraphicalApplet * a = g_pToolBarGraphicalAppletList->first();a;a = g_pToolBarGraphicalAppletList->next()) { if(uMaxW < a->width())uMaxW = a->width(); if(uMaxH < a->height())uMaxH = a->height(); } g_pIccMemBuffer->resize(uMaxW,uMaxH); } void KviToolBarGraphicalApplet::paintEvent(TQPaintEvent *e) { if(!isVisible())return; TQPainter pa(g_pIccMemBuffer); #ifdef COMPILE_PSEUDO_TRANSPARENCY if(g_pShadedChildGlobalDesktopBackground) { TQPoint pnt = mapToGlobal(TQPoint(0,0)); pa.drawTiledPixmap(e->rect().left(),e->rect().top(),e->rect().width(),e->rect().height(),*g_pShadedChildGlobalDesktopBackground,pnt.x(),pnt.y()); } else { #endif if(KVI_OPTION_PIXMAP(KviOption_pixmapIrcToolBarAppletBackground).pixmap()) { TQPoint pnt = mapToGlobal(TQPoint(0,0)); pa.drawTiledPixmap(e->rect().left(),e->rect().top(),e->rect().width(),e->rect().height(),*(KVI_OPTION_PIXMAP(KviOption_pixmapIrcToolBarAppletBackground).pixmap()),pnt.x(),pnt.y()); } else { pa.fillRect(e->rect().left(),e->rect().top(),e->rect().width(),e->rect().height(),KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletBackground)); } #ifdef COMPILE_PSEUDO_TRANSPARENCY } #endif drawContents(&pa); //Need to draw the sunken rect around the view now... pa.setPen(tqcolorGroup().dark()); pa.drawLine(0,0,width(),0); pa.drawLine(0,0,0,width()); pa.setPen(tqcolorGroup().light()); pa.drawLine(1,height() - 1,width() - 1,height() - 1); pa.drawLine(width() - 1,1,width() - 1,height()); #ifdef COMPILE_USE_QT4 TQPainter qt4SucksBecauseItNeedsAnAdditionalTQPainter(this); qt4SucksBecauseItNeedsAnAdditionalTQPainter.drawPixmap(e->rect().left(),e->rect().top(),e->rect().width(),e->rect().height(),*g_pIccMemBuffer,e->rect().left(),e->rect().top(),e->rect().width(),e->rect().height()); #else bitBlt(this,e->rect().left(),e->rect().top(),g_pIccMemBuffer,e->rect().left(),e->rect().top(),e->rect().width(),e->rect().height(),TQt::CopyROP); #endif } void KviToolBarGraphicalApplet::drawContents(TQPainter *) { // nothing here } void KviToolBarGraphicalApplet::resizeEvent(TQResizeEvent *e) { unsigned int uBufferW = g_pIccMemBuffer->width(); unsigned int uBufferH = g_pIccMemBuffer->height(); unsigned int uW = width(); unsigned int uH = height(); if((uBufferW != uW) || (uBufferH != uH)) { if((uBufferW < uW) && (uBufferH < uH))g_pIccMemBuffer->resize(uW,uH); else resizeMemBuffer(); } } ////////////////////////////////////////////////////////////////////////////// // // KviIrcContextDisplay // // Main applet of all irc contexts // Displays the server connection status, server name // nickname, user mode and the graphical indication of the context // ////////////////////////////////////////////////////////////////////////////// KviIrcContextDisplay::KviIrcContextDisplay(TQWidget * par,const char * name) : KviToolBarGraphicalApplet(par,name) { KviDynamicToolTip * tip = new KviDynamicToolTip(this); connect(tip,TQT_SIGNAL(tipRequest(KviDynamicToolTip *,const TQPoint &)),this,TQT_SLOT(tipRequest(KviDynamicToolTip *,const TQPoint &))); } KviIrcContextDisplay::~KviIrcContextDisplay() { } void KviIrcContextDisplay::tipRequest(KviDynamicToolTip * tip,const TQPoint &) { TQString txt; KviConsole * c = g_pActiveWindow->console(); static TQString b = ""; static TQString nb = ""; static TQString br = "
"; if(c) { KviIrcConnection * ic = c->connection(); txt = b; if(!ic) { txt += __tr2qs("No connection"); txt += nb; txt += br; } else { KviStr nickAndMode = ic->userInfo()->nickName(); if(!(ic->userInfo()->userMode().isEmpty()))nickAndMode.append(KviStr::Format," (+%s)",ic->userInfo()->userMode().utf8().data()); txt += ic->currentServerName(); txt += nb; txt += br; txt += nickAndMode.ptr(); txt += br; } TQString szNum; szNum.setNum(c->ircContextId()); TQString szIrcContext = TQChar('('); szIrcContext += __tr2qs("IRC Context"); szIrcContext += TQChar(' '); szIrcContext += szNum; szIrcContext += TQChar(')'); txt += szIrcContext; if(ic && ic->lagMeter() && (KVI_OPTION_BOOL(KviOption_boolShowLagOnContextDisplay))) { txt += br; int lll; if((lll = ic->lagMeter()->lag()) > 0) { int llls = lll / 1000; int llld = (lll % 1000) / 100; int lllc = (lll % 100) / 10; KviTQString::appendFormatted(txt,__tr2qs("Lag: %d.%d%d"),llls,llld,lllc); } else { txt += __tr2qs("Lag: ?.??"); } } } else { txt = b; txt += __tr2qs("No IRC context"); txt += nb; } tip->tip(rect(),txt); } /* TQSize KviIrcContextDisplay::tqsizeHint() const { return TQSize(160,22); } */ #define KVI_APPLETIRCCONTEXTINDICATORWIDTH 12 void KviIrcContextDisplay::drawContents(TQPainter * p) { // The context indicator KviWindow * wnd = g_pActiveWindow; KviConsole * c = wnd ? wnd->console() : 0; if(c) { TQString serv,nick; TQString tmp; if(!c->connection()) { serv = __tr2qs("Not connected"); } else { if(c->isConnected()) { KviIrcConnection * ic = c->connection(); nick = ic->currentNickName(); if(!ic->userInfo()->userMode().isEmpty()) { static TQString spp(" (+"); nick += spp; nick += ic->userInfo()->userMode(); if(ic->userInfo()->isAway()) { nick += TQChar(' '); nick += __tr2qs("away"); } nick += TQChar(')'); } else { if(ic->userInfo()->isAway()) { static TQString ugly(" ("); nick += ugly; nick += __tr2qs("away"); nick += TQChar(')'); } } serv = ic->currentServerName(); if(ic->lagMeter() && (KVI_OPTION_BOOL(KviOption_boolShowLagOnContextDisplay))) { nick += " "; int lll; if((lll = ic->lagMeter()->lag()) > 0) { int llls = lll / 1000; int llld = (lll % 1000) / 100; int lllc = (lll % 100) / 10; KviTQString::appendFormatted(nick,__tr2qs("Lag: %d.%d%d"),llls,llld,lllc); } else { nick += __tr2qs("Lag: ?.??"); } } } else { serv = __tr2qs("In progress..."); } } p->setPen(KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundHighContrastActive1)); p->setClipRect(KVI_APPLETIRCCONTEXTINDICATORWIDTH + 2,2,width() - (KVI_APPLETIRCCONTEXTINDICATORWIDTH + 4),height() - 4); if(height() < 30) { static TQString xxx(" ["); serv += xxx; serv += nick; serv += TQChar(']'); p->drawText(KVI_APPLETIRCCONTEXTINDICATORWIDTH + 4,16,serv,serv.length()); } else { p->drawText(KVI_APPLETIRCCONTEXTINDICATORWIDTH + 4,16,serv,serv.length()); p->drawText(KVI_APPLETIRCCONTEXTINDICATORWIDTH + 4,30,nick,nick.length()); } p->setClipping(false); TQColor base = tqcolorGroup().background(); TQColor cntx = KVI_OPTION_ICCOLOR(c->ircContextId() % KVI_NUM_ICCOLOR_OPTIONS); base.setRgb((base.red() + cntx.red()) >> 1,(base.green() + cntx.green()) >> 1, (base.blue() + cntx.blue()) >> 1); p->fillRect(2,2, KVI_APPLETIRCCONTEXTINDICATORWIDTH - 2,height() - 4,base); } p->setPen(KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundMidContrast)); p->drawLine(1,1,width() - 1,1); p->drawLine(1,1,1,height() - 1); p->drawLine(2,height() - 2,width() - 1,height() - 2); p->drawLine(width() - 2,1,width() - 2,height()); p->drawLine(KVI_APPLETIRCCONTEXTINDICATORWIDTH,2,KVI_APPLETIRCCONTEXTINDICATORWIDTH,height() - 2); } #ifdef Bool #undef Bool #endif #include "kvi_irctoolbar.moc"