You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1504 lines
38 KiB
1504 lines
38 KiB
//=============================================================================
|
|
//
|
|
// File : kvi_window.cpp
|
|
// Creation date : Tue Jul 6 1999 14:52:11 by Szymon Stefanek
|
|
//
|
|
// This file is part of the KVirc irc client distribution
|
|
// Copyright (C) 1999-2007 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__
|
|
#define KVI_WINDOW_MIN_WIDTH 100
|
|
#define KVI_WINDOW_MIN_HEIGHT 100
|
|
|
|
#define _KVI_WINDOW_CPP_
|
|
|
|
#define _KVI_DEBUG_CHECK_RANGE_
|
|
|
|
#include "kvi_debug.h"
|
|
#include "kvi_app.h"
|
|
#include "kvi_window.h"
|
|
#include "kvi_frame.h"
|
|
#include "kvi_taskbar.h"
|
|
#include "kvi_iconmanager.h"
|
|
#include "kvi_mdichild.h"
|
|
#include "kvi_locale.h"
|
|
#include "kvi_ircview.h"
|
|
#include "kvi_out.h"
|
|
#include "kvi_malloc.h"
|
|
#include "kvi_input.h"
|
|
#include "kvi_fileutils.h"
|
|
#include "kvi_options.h"
|
|
#include "kvi_config.h"
|
|
#include "kvi_irccontext.h"
|
|
#include "kvi_console.h"
|
|
#include "kvi_ircconnectionserverinfo.h"
|
|
#include "kvi_mirccntrl.h"
|
|
#include "kvi_toolwindows_container.h"
|
|
#include "kvi_styled_controls.h"
|
|
#include "kvi_kvs_script.h"
|
|
|
|
#include <tqpixmap.h>
|
|
#include "kvi_tal_popupmenu.h"
|
|
#include <tqcursor.h>
|
|
#include <tqtimer.h>
|
|
#include <tqsplitter.h>
|
|
#include <tqmetaobject.h>
|
|
#include <tqdatetime.h>
|
|
#include <tqtextcodec.h>
|
|
#include <tqevent.h>
|
|
|
|
// it looks they can't decide :D
|
|
#ifdef COMPILE_USE_QT4
|
|
#include <TQPushButton>
|
|
#include <tqdesktopwidget.h>
|
|
#else
|
|
#include <tqobjectlist.h>
|
|
#endif
|
|
|
|
|
|
#include <tqvariant.h>
|
|
#include <tqtoolbutton.h>
|
|
#include "kvi_tal_tooltip.h"
|
|
#include <tqmessagebox.h>
|
|
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
#include "kvi_crypt.h"
|
|
#include "kvi_cryptcontroller.h"
|
|
#endif
|
|
|
|
#ifdef COMPILE_TDE_SUPPORT
|
|
#include <twin.h>
|
|
#include <tdeversion.h>
|
|
#endif
|
|
|
|
#ifdef COMPILE_ON_WINDOWS
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
KVIRC_API KviWindow * g_pActiveWindow = 0;
|
|
|
|
static KviTalPopupMenu * g_pMdiWindowSystemMainPopup = 0;
|
|
static KviTalPopupMenu * g_pMdiWindowSystemTextEncodingPopup = 0;
|
|
static KviTalPopupMenu * g_pMdiWindowSystemTextEncodingPopupStandard = 0;
|
|
static KviTalPopupMenu * g_pMdiWindowSystemTextEncodingPopupSmart = 0;
|
|
static KviTalPopupMenu * g_pMdiWindowSystemTextEncodingPopupSmartUtf8 = 0;
|
|
|
|
unsigned long int g_uUniqueWindowId = 1;
|
|
|
|
// FIXME: #warning "Mouse wheel support"
|
|
KviWindow::KviWindow(int type,KviFrame * lpFrm,const TQString &name,KviConsole * lpConsole)
|
|
: TQWidget(0)
|
|
{
|
|
m_uId = g_uUniqueWindowId;
|
|
g_uUniqueWindowId++;
|
|
|
|
|
|
// FIXME: REMOVE THIS
|
|
setName(name);
|
|
// END FIXME
|
|
m_szName = name;
|
|
|
|
g_pApp->registerWindow(this);
|
|
|
|
m_iType = type;
|
|
m_pFocusHandler = 0;
|
|
|
|
m_pFrm = lpFrm; // FIXME: Should disappear!
|
|
m_pIrcView = 0;
|
|
m_pInput = 0;
|
|
m_pSplitter = 0;
|
|
m_pButtonBox = 0;
|
|
m_pConsole = lpConsole;
|
|
m_pContext = lpConsole ? lpConsole->context() : 0;
|
|
m_pLastFocusedChild = 0;
|
|
m_pTextCodec = 0; // will be set by loadProperties
|
|
m_pTextEncodingButton = 0;
|
|
m_pHideToolsButton = 0;
|
|
// m_pEditorsContainer = 0;
|
|
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
|
|
m_pCryptControllerButton = 0;
|
|
m_pCryptController = 0;
|
|
m_pCryptSessionInfo = 0;
|
|
#endif
|
|
|
|
m_pAccel = 0;
|
|
|
|
m_pTaskBarItem = 0;
|
|
|
|
setMinimumSize(KVI_WINDOW_MIN_WIDTH,KVI_WINDOW_MIN_HEIGHT);
|
|
#ifdef COMPILE_USE_QT4
|
|
//setAutoFillBackground(false);
|
|
setFocusPolicy(TQ_StrongFocus);
|
|
#else
|
|
setBackgroundMode(NoBackground);
|
|
setFocusPolicy(TQ_StrongFocus);
|
|
#endif
|
|
|
|
connect(g_pApp,TQT_SIGNAL(reloadImages()),this,TQT_SLOT(reloadImages()));
|
|
}
|
|
|
|
KviWindow::~KviWindow()
|
|
{
|
|
//g_pFrame->childWindowDestroyed(this);
|
|
destroyTaskBarItem();
|
|
g_pApp->unregisterWindow(this);
|
|
if(g_pApp->windowCount() == 0)
|
|
{
|
|
// this is the last window!
|
|
if(g_pMdiWindowSystemMainPopup)
|
|
delete g_pMdiWindowSystemMainPopup;
|
|
if(g_pMdiWindowSystemTextEncodingPopup)
|
|
delete g_pMdiWindowSystemTextEncodingPopup;
|
|
if(g_pMdiWindowSystemTextEncodingPopupStandard)
|
|
delete g_pMdiWindowSystemTextEncodingPopupStandard;
|
|
if(g_pMdiWindowSystemTextEncodingPopupSmart)
|
|
delete g_pMdiWindowSystemTextEncodingPopupSmart;
|
|
if(g_pMdiWindowSystemTextEncodingPopupSmartUtf8)
|
|
delete g_pMdiWindowSystemTextEncodingPopupSmartUtf8;
|
|
}
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
if(m_pCryptSessionInfo)
|
|
KviCryptController::destroyCryptSessionInfo(&m_pCryptSessionInfo);
|
|
#endif
|
|
}
|
|
|
|
void KviWindow::setWindowName(const TQString &szName)
|
|
{
|
|
m_szName = szName;
|
|
emit windowNameChanged();
|
|
}
|
|
|
|
void KviWindow::toggleButtonContainer()
|
|
{
|
|
TQFrame *pContainer=buttonContainer();
|
|
if(pContainer)
|
|
{
|
|
pContainer->setHidden(!pContainer->isHidden());
|
|
}
|
|
}
|
|
|
|
void KviWindow::setName(const char * name)
|
|
{
|
|
m_szName = name;
|
|
TQWidget::setName(name);
|
|
}
|
|
|
|
KviIrcConnection * KviWindow::connection()
|
|
{
|
|
return m_pContext ? m_pContext->connection() : 0;
|
|
}
|
|
|
|
void KviWindow::reloadImages()
|
|
{
|
|
updateIcon();
|
|
}
|
|
|
|
bool KviWindow::hasAttention()
|
|
{
|
|
if(((TQApplication *)g_pApp)->activeWindow() == 0)return false; // no application window has the focus atm
|
|
|
|
if(mdiParent())
|
|
{
|
|
if(frame()->isActiveWindow())return true;
|
|
// This frame is not the active window but the
|
|
// active window still belongs to KVIrc.
|
|
// When the active window is derived from TQDialog
|
|
// then it is probably a KVIrc's option dialog
|
|
// or something similar.
|
|
// In this case we assume that the user has the
|
|
// KVIrc window just below and can see it.
|
|
|
|
// Handle the special case of the dialogs then
|
|
TQWidget * w = TQT_TQWIDGET(((TQApplication *)g_pApp)->activeWindow());
|
|
if(w->inherits("TQDialog"))
|
|
{
|
|
// but make sure that the frame is visible at all!
|
|
if(!frame()->isVisible())return false;
|
|
return true;
|
|
}
|
|
// any other class is so unfrequent that we ignore it
|
|
} else {
|
|
// when the window is undocked, instead
|
|
// it is likely to be covered by KVIrc or other windows...
|
|
if(isActiveWindow())return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void KviWindow::demandAttention()
|
|
{
|
|
if(mdiParent())
|
|
{
|
|
if(frame()->isActiveWindow())return;
|
|
#ifdef COMPILE_ON_WINDOWS
|
|
FLASHWINFO fwi;
|
|
fwi.cbSize = sizeof(fwi);
|
|
fwi.hwnd = (HWND)(frame()->winId());
|
|
fwi.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;
|
|
fwi.uCount = 20;
|
|
fwi.dwTimeout = 500;
|
|
FlashWindowEx(&fwi);
|
|
#else
|
|
#ifdef COMPILE_TDE_SUPPORT
|
|
#if (TDE_VERSION_MAJOR >= 3) && (TDE_VERSION_MINOR >= 2)
|
|
KWin::demandAttention(frame()->winId(),true);
|
|
#endif
|
|
#endif
|
|
#endif
|
|
} else {
|
|
if(isActiveWindow())return;
|
|
#ifdef COMPILE_ON_WINDOWS
|
|
FLASHWINFO fwi;
|
|
fwi.cbSize = sizeof(fwi);
|
|
fwi.hwnd = (HWND)winId();
|
|
fwi.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;
|
|
fwi.uCount = 20;
|
|
fwi.dwTimeout = 500;
|
|
FlashWindowEx(&fwi);
|
|
#else
|
|
#ifdef COMPILE_TDE_SUPPORT
|
|
#if (TDE_VERSION_MAJOR >= 3) && (TDE_VERSION_MINOR >= 2)
|
|
KWin::demandAttention(winId(),true);
|
|
#endif
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
bool KviWindow::focusNextPrevChild(bool next)
|
|
{
|
|
TQWidget * w = focusWidget();
|
|
if(w)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
if(w->focusPolicy() == TQ_StrongFocus)return false;
|
|
#else
|
|
if(w->focusPolicy() == TQ_StrongFocus)return false;
|
|
#endif
|
|
//TQVariant v = w->property("KviProperty_FocusOwner");
|
|
//if(v.isValid())return false; // Do NOT change the focus widget!
|
|
|
|
if(w->parent())
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
if(w->parent()->metaObject()->indexOfProperty("KviProperty_ChildFocusOwner") == -1)
|
|
#else
|
|
if(w->parent()->metaObject()->findProperty("KviProperty_ChildFocusOwner") == -1)
|
|
#endif
|
|
return false; // Do NOT change the focus widget!
|
|
}
|
|
}
|
|
|
|
return TQWidget::focusNextPrevChild(next);
|
|
}
|
|
|
|
void KviWindow::forceTextCodec(TQTextCodec * c)
|
|
{
|
|
if(!c)return;
|
|
m_pTextCodec = c;
|
|
TQTextCodec * dc = defaultTextCodec();
|
|
if(dc != c)
|
|
m_szTextEncoding = c->name();
|
|
else
|
|
m_szTextEncoding = ""; // this is the default anyway
|
|
}
|
|
|
|
bool KviWindow::setTextEncoding(const TQString &szTextEncoding)
|
|
{
|
|
if(!szTextEncoding.isEmpty())
|
|
{
|
|
m_pTextCodec = KviLocale::codecForName(szTextEncoding.latin1());
|
|
if(m_pTextCodec)
|
|
{
|
|
m_szTextEncoding = szTextEncoding;
|
|
return true;
|
|
}
|
|
// this is an error because we specified an encoding
|
|
// and we couldn't find a codec for this
|
|
} // else it is empty : this means : guess from locale
|
|
// either empty or not found...
|
|
m_pTextCodec = 0;
|
|
m_szTextEncoding = ""; // empty: we're using the default
|
|
return false;
|
|
}
|
|
|
|
TQTextCodec * KviWindow::defaultTextCodec()
|
|
{
|
|
// if we have a connection try to inherit from there...
|
|
if(connection())
|
|
{
|
|
TQTextCodec * c = connection()->textCodec();
|
|
if(c)return c;
|
|
}
|
|
return KviApp::defaultTextCodec();
|
|
}
|
|
|
|
KviTQCString KviWindow::encodeText(const TQString &szText)
|
|
{
|
|
if(!m_pTextCodec)return defaultTextCodec()->fromUnicode(szText);
|
|
return m_pTextCodec->fromUnicode(szText);
|
|
}
|
|
|
|
TQString KviWindow::decodeText(const char * szText)
|
|
{
|
|
if(!m_pTextCodec)return defaultTextCodec()->toUnicode(szText);
|
|
return m_pTextCodec->toUnicode(szText);
|
|
}
|
|
|
|
bool KviWindow::activityMeter(unsigned int *,unsigned int *)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
|
|
const char * KviWindow::m_typeTable[KVI_WINDOW_NUM_TYPES + 1]=
|
|
{
|
|
"console",
|
|
"channel",
|
|
"query",
|
|
"help",
|
|
"terminal",
|
|
"editor",
|
|
"dccchat",
|
|
"dccsend",
|
|
"socketspy",
|
|
"links",
|
|
"tool",
|
|
"gnutella",
|
|
"dirbrowser",
|
|
"dcccanvas",
|
|
"dccvoice",
|
|
"list",
|
|
"offer",
|
|
"logview",
|
|
"deadchannel",
|
|
"deadquery",
|
|
"scripteditor",
|
|
"scriptobject",
|
|
"userwindow",
|
|
"debug",
|
|
// <------ NEW TYPES GO HERE!
|
|
"unknown"
|
|
};
|
|
|
|
const char * KviWindow::typeString()
|
|
{
|
|
if(m_iType < KVI_WINDOW_NUM_TYPES)
|
|
{
|
|
return m_typeTable[m_iType];
|
|
}
|
|
return m_typeTable[KVI_WINDOW_NUM_TYPES];
|
|
}
|
|
|
|
void KviWindow::setType(int iType)
|
|
{
|
|
m_iType = iType;
|
|
}
|
|
|
|
|
|
void KviWindow::createTaskBarItem()
|
|
{
|
|
if(m_pTaskBarItem)return;
|
|
m_pTaskBarItem = g_pFrame->m_pTaskBar->addItem(this);
|
|
}
|
|
|
|
void KviWindow::destroyTaskBarItem()
|
|
{
|
|
if(!m_pTaskBarItem)return;
|
|
g_pFrame->m_pTaskBar->removeItem(m_pTaskBarItem);
|
|
// m_pTaskBarItem = 0; // actually the taskBarItem destructor sets it
|
|
}
|
|
|
|
BUTTON_CLASS * KviWindow::createToolButton(TQWidget * par,const char * nam,int pixon,int pixoff,const TQString & tooltip,bool bOn)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
BUTTON_CLASS * b = new BUTTON_CLASS(par);
|
|
b->setObjectName(nam);
|
|
b->setFlat(true);
|
|
b->setIcon(TQIcon(*(g_pIconManager->getSmallIcon(pixon))));
|
|
#else
|
|
BUTTON_CLASS * b = new BUTTON_CLASS(par,nam);
|
|
b->setToggleButton(true);
|
|
b->setUsesBigPixmap(false);
|
|
TQIconSet is1;
|
|
is1.setPixmap(*(g_pIconManager->getSmallIcon(pixon)),TQIconSet::Small,TQIconSet::Normal,TQIconSet::On);
|
|
is1.setPixmap(*(g_pIconManager->getSmallIcon(pixoff)),TQIconSet::Small,TQIconSet::Normal,TQIconSet::Off);
|
|
b->setIconSet(is1);
|
|
#endif
|
|
|
|
|
|
KviTalToolTip::add
|
|
(b,tooltip);
|
|
b->setOn(bOn);
|
|
return b;
|
|
}
|
|
|
|
// This is always defined...
|
|
void KviWindow::createCryptControllerButton(TQWidget * par)
|
|
{
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
m_pCryptControllerButton = new KviWindowToolPageButton(KVI_SMALLICON_UNLOCKEDOFF,KVI_SMALLICON_UNLOCKED,__tr2qs("Crypting"),buttonContainer(),false,"crypt_controller_button");
|
|
connect(m_pCryptControllerButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(toggleCryptController()));
|
|
#endif // COMPILE_CRYPT_SUPPORT
|
|
}
|
|
|
|
void KviWindow::createTextEncodingButton(TQWidget * par)
|
|
{
|
|
if(m_pTextEncodingButton)delete m_pTextEncodingButton;
|
|
m_pTextEncodingButton = createToolButton(par,"text_encoding_button",KVI_SMALLICON_TEXTENCODING,KVI_SMALLICON_TEXTENCODING,__tr2qs("Private Text Encoding"),false);
|
|
connect(m_pTextEncodingButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(textEncodingButtonClicked()));
|
|
}
|
|
|
|
void KviWindow::textEncodingButtonClicked()
|
|
{
|
|
createSystemTextEncodingPopup();
|
|
g_pMdiWindowSystemTextEncodingPopup->popup(m_pTextEncodingButton->mapToGlobal(TQPoint(0,m_pTextEncodingButton->height())));
|
|
m_pTextEncodingButton->setOn(false);
|
|
}
|
|
|
|
const TQString & KviWindow::lastLineOfText()
|
|
{
|
|
if(m_pIrcView)
|
|
return m_pIrcView->lastLineOfText();
|
|
return KviTQString::empty;
|
|
}
|
|
|
|
const TQString & KviWindow::lastMessageText()
|
|
{
|
|
if(m_pIrcView)
|
|
return m_pIrcView->lastMessageText();
|
|
return KviTQString::empty;
|
|
}
|
|
|
|
// The following three have to be here even if the crypt support is disabled...moc does not support conditional compilations
|
|
void KviWindow::toggleCryptController()
|
|
{
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
if(!m_pCryptControllerButton->isOn())
|
|
{
|
|
if(m_pCryptController)
|
|
{
|
|
delete m_pCryptController;
|
|
m_pCryptController = 0;
|
|
if(!m_pCryptControllerButton)
|
|
return;
|
|
if(m_pCryptControllerButton->isOn())
|
|
m_pCryptControllerButton->setOn(false);
|
|
}
|
|
} else {
|
|
if(m_pSplitter && m_pInput)
|
|
{
|
|
m_pCryptController = new KviCryptController(m_pSplitter,m_pCryptControllerButton,"crypt_controller",this,m_pCryptSessionInfo);
|
|
connect(m_pCryptController,TQT_SIGNAL(done()),this,TQT_SLOT(cryptControllerFinished()));
|
|
//setFocusHandlerNoClass(m_pInput,m_pCryptController,"TQLineEdit"); //link it!
|
|
m_pCryptController->show();
|
|
if(!m_pCryptControllerButton)
|
|
return;
|
|
if(!(m_pCryptControllerButton->isOn()))
|
|
m_pCryptControllerButton->setOn(true);
|
|
}
|
|
}
|
|
#endif // COMPILE_CRYPT_SUPPORT
|
|
}
|
|
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
void KviWindow::setCryptSessionInfo(KviCryptSessionInfo * inf)
|
|
{
|
|
if(m_pCryptSessionInfo)
|
|
KviCryptController::destroyCryptSessionInfo(&m_pCryptSessionInfo);
|
|
m_pCryptSessionInfo = inf;
|
|
if(m_pCryptSessionInfo)
|
|
{
|
|
connect(m_pCryptSessionInfo->pEngine,TQT_SIGNAL(destroyed()),this,TQT_SLOT(cryptSessionInfoDestroyed()));
|
|
}
|
|
if(m_pCryptControllerButton)
|
|
{
|
|
TQIconSet is;
|
|
is.setPixmap(*(g_pIconManager->getSmallIcon(m_pCryptSessionInfo ? KVI_SMALLICON_LOCKEDOFF : KVI_SMALLICON_UNLOCKEDOFF)),TQIconSet::Small,TQIconSet::Normal,TQIconSet::Off);
|
|
is.setPixmap(*(g_pIconManager->getSmallIcon(m_pCryptSessionInfo ? KVI_SMALLICON_LOCKED : KVI_SMALLICON_UNLOCKED)),TQIconSet::Small,TQIconSet::Normal,TQIconSet::On);
|
|
m_pCryptControllerButton->setIconSet(is);
|
|
|
|
if(m_pCryptControllerButton->isOn())
|
|
m_pCryptControllerButton->setOn(false);
|
|
}
|
|
}
|
|
#endif // COMPILE_CRYPT_SUPPORT
|
|
|
|
void KviWindow::cryptControllerFinished()
|
|
{
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
KviCryptSessionInfo * inf = m_pCryptController->getNewSessionInfo();
|
|
setCryptSessionInfo(inf);
|
|
delete m_pCryptController;
|
|
m_pCryptController = 0;
|
|
#endif
|
|
}
|
|
|
|
void KviWindow::cryptSessionInfoDestroyed()
|
|
{
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
output(KVI_OUT_SYSTEMERROR,__tr2qs("Ops...I've accidentally lost the crypting engine..."));
|
|
m_pCryptSessionInfo->pEngine = 0;
|
|
delete m_pCryptSessionInfo;
|
|
m_pCryptSessionInfo = 0;
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
void KviWindow::setProgress(int progress)
|
|
{
|
|
m_pTaskBarItem->setProgress(progress);
|
|
}
|
|
|
|
void KviWindow::listWindowTypes()
|
|
{
|
|
outputNoFmt(KVI_OUT_SYSTEMMESSAGE,__tr2qs("List of window types available in this release of KVIrc:"));
|
|
for(int i=0;i< KVI_WINDOW_NUM_TYPES;i++)
|
|
outputNoFmt(KVI_OUT_SYSTEMMESSAGE,m_typeTable[i]);
|
|
}
|
|
|
|
void KviWindow::getConfigGroupName(TQString &buf)
|
|
{
|
|
buf = typeString();
|
|
}
|
|
|
|
|
|
void KviWindow::getDefaultLogFileName(TQString &buffer)
|
|
{
|
|
// FIXME: #warning "Make it configurable ?"
|
|
TQString date;
|
|
TQDate dt(TQDate::currentDate());
|
|
date=dt.toString("yyyy.MM.dd");
|
|
TQString base;
|
|
getBaseLogFileName(base);
|
|
kvi_encodeFileName(base);
|
|
base.replace("%%2e","%2e");
|
|
base=base.lower();
|
|
TQString tmp;
|
|
if(KVI_OPTION_BOOL(KviOption_boolGzipLogs))
|
|
KviTQString::sprintf(tmp,"%s_%s_%s.log.gz",typeString(),base.utf8().data(),date.utf8().data());
|
|
else
|
|
KviTQString::sprintf(tmp,"%s_%s_%s.log",typeString(),base.utf8().data(),date.utf8().data());
|
|
g_pApp->getLocalKvircDirectory(buffer,KviApp::Log,tmp);
|
|
}
|
|
|
|
/*void KviWindow::getBaseLogFileName(KviStr &buffer)
|
|
{
|
|
buffer = m_szName;
|
|
}*/
|
|
|
|
void KviWindow::getBaseLogFileName(TQString &buffer)
|
|
{
|
|
buffer = m_szName;
|
|
}
|
|
|
|
|
|
void KviWindow::saveProperties(KviConfig *cfg)
|
|
{
|
|
// store only the non-default text encoding.
|
|
TQString szCodec = m_szTextEncoding;
|
|
TQTextCodec * c = defaultTextCodec();
|
|
if(c && m_pTextCodec)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
if(KviTQString::equalCI(szCodec,c->name().data()))szCodec = KviTQString::empty; // store "default"
|
|
#else
|
|
if(KviTQString::equalCI(szCodec,c->name()))szCodec = KviTQString::empty; // store "default"
|
|
#endif
|
|
}
|
|
TQString szKey = "TextEncoding_";
|
|
szKey += m_szName;
|
|
cfg->writeEntry(szKey,szCodec);
|
|
if(m_pInput) {
|
|
cfg->writeEntry("inputToolButtonsHidden",m_pInput->isButtonsHidden());
|
|
cfg->writeEntry("commandLineIsUserFriendly",m_pInput->isUserFriendly());
|
|
}
|
|
|
|
//
|
|
|
|
/*if(m_pIrcView && m_iType==KVI_WINDOW_TYPE_CHANNEL)
|
|
if(m_pIrcView->isLogging())
|
|
cfg->writeEntry("LoggingEnabled",m_pIrcView->isLogging());*/
|
|
}
|
|
|
|
void KviWindow::loadProperties(KviConfig *cfg)
|
|
{
|
|
TQString szKey = "TextEncoding_";
|
|
szKey += m_szName;
|
|
setTextEncoding(cfg->readTQStringEntry(szKey,KviTQString::empty).utf8().data());
|
|
if(m_pInput) {
|
|
m_pInput->setButtonsHidden(cfg->readBoolEntry("inputToolButtonsHidden",KVI_OPTION_BOOL(KviOption_boolHideInputToolButtons)));
|
|
m_pInput->setUserFriendly(cfg->readBoolEntry("commandLineIsUserFriendly",KVI_OPTION_BOOL(KviOption_boolCommandlineInUserFriendlyModeByDefault)));
|
|
}
|
|
/* if(m_pIrcView && m_iType==KVI_WINDOW_TYPE_CHANNEL)
|
|
{
|
|
bool bEnableLogs=cfg->readBoolEntry("LoggingEnabled",0);
|
|
if(!m_pIrcView->isLogging() && bEnableLogs)
|
|
{
|
|
TQString szTmp;
|
|
getBaseLogFileName(szTmp);
|
|
m_pIrcView->startLogging();
|
|
}
|
|
}*/
|
|
}
|
|
|
|
TQPixmap * KviWindow::myIconPtr()
|
|
{
|
|
return g_pIconManager->getSmallIcon(KVI_SMALLICON_DEFAULTICON);
|
|
}
|
|
|
|
void KviWindow::getTaskBarTipText(TQString &buffer)
|
|
{
|
|
buffer = m_szPlainTextCaption;
|
|
}
|
|
|
|
void KviWindow::setFixedCaption(const TQString &szCaption)
|
|
{
|
|
m_szPlainTextCaption = szCaption;
|
|
}
|
|
|
|
void KviWindow::fillCaptionBuffers()
|
|
{
|
|
TQString szCaption = m_szPlainTextCaption;
|
|
if(szCaption.isEmpty())
|
|
szCaption = m_szName;
|
|
|
|
fillSingleColorCaptionBuffers(szCaption);
|
|
}
|
|
|
|
void KviWindow::fillSingleColorCaptionBuffers(const TQString &szName)
|
|
{
|
|
static TQString p1("<nobr><font color=\"");
|
|
static TQString p2("\"><b>");
|
|
static TQString p3("</b></font></nobr>");
|
|
|
|
m_szPlainTextCaption = szName;
|
|
|
|
m_szHtmlActiveCaption = p1;
|
|
m_szHtmlActiveCaption += KVI_OPTION_COLOR(KviOption_colorCaptionTextActive).name();
|
|
m_szHtmlActiveCaption += p2;
|
|
m_szHtmlActiveCaption += szName;
|
|
m_szHtmlActiveCaption += p3;
|
|
|
|
m_szHtmlInactiveCaption = p1;
|
|
m_szHtmlInactiveCaption += KVI_OPTION_COLOR(KviOption_colorCaptionTextInactive).name();
|
|
m_szHtmlInactiveCaption += p2;
|
|
m_szHtmlInactiveCaption += szName;
|
|
m_szHtmlInactiveCaption += p3;
|
|
}
|
|
|
|
void KviWindow::updateCaption()
|
|
{
|
|
fillCaptionBuffers();
|
|
if(mdiParent())
|
|
mdiParent()->setCaption(plainTextCaption(),htmlActiveCaption(),htmlInactiveCaption());
|
|
else
|
|
setCaption(plainTextCaption());
|
|
if(m_pTaskBarItem)m_pTaskBarItem->captionChanged();
|
|
if(mdiParent() && isMaximized() && (g_pActiveWindow == this))
|
|
g_pFrame->updateCaption();
|
|
}
|
|
|
|
void KviWindow::createSystemTextEncodingPopup()
|
|
{
|
|
if(!g_pMdiWindowSystemTextEncodingPopup)
|
|
g_pMdiWindowSystemTextEncodingPopup = new KviTalPopupMenu();
|
|
else
|
|
{
|
|
g_pMdiWindowSystemTextEncodingPopup->clear();
|
|
}
|
|
|
|
if(!g_pMdiWindowSystemTextEncodingPopupStandard)
|
|
g_pMdiWindowSystemTextEncodingPopupStandard = new KviTalPopupMenu();
|
|
else
|
|
{
|
|
g_pMdiWindowSystemTextEncodingPopupStandard->clear();
|
|
disconnect(g_pMdiWindowSystemTextEncodingPopupStandard,TQT_SIGNAL(activated(int)),0,0);
|
|
}
|
|
|
|
if(!g_pMdiWindowSystemTextEncodingPopupSmart)
|
|
g_pMdiWindowSystemTextEncodingPopupSmart = new KviTalPopupMenu();
|
|
else
|
|
{
|
|
g_pMdiWindowSystemTextEncodingPopupSmart->clear();
|
|
disconnect(g_pMdiWindowSystemTextEncodingPopupSmart,TQT_SIGNAL(activated(int)),0,0);
|
|
}
|
|
|
|
if(!g_pMdiWindowSystemTextEncodingPopupSmartUtf8)
|
|
g_pMdiWindowSystemTextEncodingPopupSmartUtf8 = new KviTalPopupMenu();
|
|
else
|
|
{
|
|
g_pMdiWindowSystemTextEncodingPopupSmartUtf8->clear();
|
|
disconnect(g_pMdiWindowSystemTextEncodingPopupSmartUtf8,TQT_SIGNAL(activated(int)),0,0);
|
|
}
|
|
|
|
TQTextCodec * c = defaultTextCodec();
|
|
TQString tmp = __tr2qs("Use Default Encoding");
|
|
if(c)
|
|
{
|
|
tmp += " (";
|
|
tmp += c->name();
|
|
tmp += ")";
|
|
}
|
|
|
|
int id = g_pMdiWindowSystemTextEncodingPopup->insertItem(tmp,this,TQT_SLOT(systemTextEncodingPopupDefault()));
|
|
if(m_szTextEncoding.isEmpty())g_pMdiWindowSystemTextEncodingPopup->setItemChecked(id,true);
|
|
g_pMdiWindowSystemTextEncodingPopup->insertSeparator();
|
|
|
|
g_pMdiWindowSystemTextEncodingPopup->insertItem(__tr2qs("Standard"),g_pMdiWindowSystemTextEncodingPopupStandard);
|
|
g_pMdiWindowSystemTextEncodingPopup->insertItem(__tr2qs("Smart (Send Local)"),g_pMdiWindowSystemTextEncodingPopupSmart);
|
|
g_pMdiWindowSystemTextEncodingPopup->insertItem(__tr2qs("Smart (Send UTF-8)"),g_pMdiWindowSystemTextEncodingPopupSmartUtf8);
|
|
|
|
int i = 0;
|
|
KviLocale::EncodingDescription * d = KviLocale::encodingDescription(i);
|
|
while(d->szName)
|
|
{
|
|
KviTQString::sprintf(tmp,"%s (%s)",d->szName,d->szDescription);
|
|
KviTalPopupMenu * ppp = d->bSmart ? (d->bSendUtf8 ? g_pMdiWindowSystemTextEncodingPopupSmartUtf8 : g_pMdiWindowSystemTextEncodingPopupSmart) : g_pMdiWindowSystemTextEncodingPopupStandard;
|
|
id = ppp->insertItem(tmp);
|
|
if(KviTQString::equalCI(m_szTextEncoding,d->szName))
|
|
ppp->setItemChecked(id,true);
|
|
i = i + 1;
|
|
d = KviLocale::encodingDescription(i);
|
|
}
|
|
|
|
connect(g_pMdiWindowSystemTextEncodingPopupSmart,TQT_SIGNAL(activated(int)),this,TQT_SLOT(systemTextEncodingPopupSmartActivated(int)));
|
|
connect(g_pMdiWindowSystemTextEncodingPopupSmartUtf8,TQT_SIGNAL(activated(int)),this,TQT_SLOT(systemTextEncodingPopupSmartUtf8Activated(int)));
|
|
connect(g_pMdiWindowSystemTextEncodingPopupStandard,TQT_SIGNAL(activated(int)),this,TQT_SLOT(systemTextEncodingPopupStandardActivated(int)));
|
|
}
|
|
|
|
|
|
void KviWindow::systemPopupRequest(const TQPoint &pnt)
|
|
{
|
|
if(!g_pMdiWindowSystemMainPopup)
|
|
g_pMdiWindowSystemMainPopup = new KviTalPopupMenu();
|
|
else
|
|
{
|
|
g_pMdiWindowSystemMainPopup->clear();
|
|
g_pMdiWindowSystemMainPopup->disconnect();
|
|
}
|
|
|
|
if(mdiParent())
|
|
g_pMdiWindowSystemMainPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_UNDOCK)),
|
|
__tr2qs("&Undock"),this,TQT_SLOT(undock()));
|
|
else
|
|
g_pMdiWindowSystemMainPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_DOCK)),
|
|
__tr2qs("&Dock"),this,TQT_SLOT(dock()));
|
|
|
|
g_pMdiWindowSystemMainPopup->insertSeparator();
|
|
|
|
int id = g_pMdiWindowSystemMainPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_MINIMIZE)),
|
|
__tr2qs("Mi&nimize"),this,TQT_SLOT(minimize()));
|
|
g_pMdiWindowSystemMainPopup->setItemEnabled(id,!isMinimized());
|
|
id = g_pMdiWindowSystemMainPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_MAXIMIZE)),
|
|
__tr2qs("Ma&ximize"),this,TQT_SLOT(maximize()));
|
|
g_pMdiWindowSystemMainPopup->setItemEnabled(id,!isMaximized());
|
|
id = g_pMdiWindowSystemMainPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_RESTORE)),
|
|
__tr2qs("&Restore"),this,TQT_SLOT(restore()));
|
|
g_pMdiWindowSystemMainPopup->setItemEnabled(id,isMinimized()||isMaximized());
|
|
|
|
g_pMdiWindowSystemMainPopup->insertSeparator();
|
|
|
|
g_pMdiWindowSystemMainPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CLOSE)),
|
|
__tr2qs("Close"),this,TQT_SLOT(close()));
|
|
|
|
g_pMdiWindowSystemMainPopup->insertSeparator();
|
|
|
|
if(m_pTextEncodingButton)
|
|
{
|
|
createSystemTextEncodingPopup();
|
|
g_pMdiWindowSystemMainPopup->insertItem(__tr2qs("Text &Encoding"),g_pMdiWindowSystemTextEncodingPopup);
|
|
} // else we don't support setting private encoding anyway
|
|
|
|
|
|
g_pMdiWindowSystemMainPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_XY)),
|
|
__tr2qs("Sa&ve Window Properties"),this,TQT_SLOT(savePropertiesAsDefault()));
|
|
|
|
fillContextPopup(g_pMdiWindowSystemMainPopup);
|
|
|
|
g_pMdiWindowSystemMainPopup->popup(pnt);
|
|
}
|
|
|
|
void KviWindow::systemTextEncodingPopupDefault()
|
|
{
|
|
// default
|
|
setTextEncoding("");
|
|
}
|
|
|
|
void KviWindow::systemTextEncodingPopupSmartActivated(int id)
|
|
{
|
|
if(!g_pMdiWindowSystemTextEncodingPopupSmart)
|
|
return;
|
|
TQString tmp = g_pMdiWindowSystemTextEncodingPopupSmart->text(id);
|
|
KviTQString::cutFromFirst(tmp," (");
|
|
setTextEncoding(tmp);
|
|
}
|
|
|
|
void KviWindow::systemTextEncodingPopupSmartUtf8Activated(int id)
|
|
{
|
|
if(!g_pMdiWindowSystemTextEncodingPopupSmartUtf8)
|
|
return;
|
|
TQString tmp = g_pMdiWindowSystemTextEncodingPopupSmartUtf8->text(id);
|
|
KviTQString::cutFromFirst(tmp," (");
|
|
setTextEncoding(tmp);
|
|
}
|
|
|
|
void KviWindow::systemTextEncodingPopupStandardActivated(int id)
|
|
{
|
|
if(!g_pMdiWindowSystemTextEncodingPopupStandard)
|
|
return;
|
|
TQString tmp = g_pMdiWindowSystemTextEncodingPopupStandard->text(id);
|
|
KviTQString::cutFromFirst(tmp," (");
|
|
setTextEncoding(tmp);
|
|
}
|
|
|
|
void KviWindow::savePropertiesAsDefault()
|
|
{
|
|
TQString group;
|
|
getConfigGroupName(group);
|
|
|
|
if(!kvi_strEqualCI(group,typeString()))
|
|
{
|
|
// save also the settings for THIS specialized window
|
|
g_pFrame->saveWindowProperties(this,group);
|
|
}
|
|
|
|
g_pFrame->saveWindowProperties(this,typeString());
|
|
}
|
|
|
|
void KviWindow::contextPopup()
|
|
{
|
|
systemPopupRequest(TQCursor::pos());
|
|
}
|
|
|
|
void KviWindow::fillContextPopup(KviTalPopupMenu *)
|
|
{
|
|
// nothing here
|
|
}
|
|
|
|
void KviWindow::undock()
|
|
{
|
|
g_pFrame->undockWindow(this);
|
|
}
|
|
|
|
void KviWindow::dock()
|
|
{
|
|
g_pFrame->dockWindow(this);
|
|
}
|
|
|
|
void KviWindow::delayedAutoRaise()
|
|
{
|
|
TQTimer::singleShot(0,this,TQT_SLOT(autoRaise()));
|
|
}
|
|
|
|
void KviWindow::autoRaise()
|
|
{
|
|
if(!mdiParent())
|
|
{
|
|
raise();
|
|
setActiveWindow();
|
|
}
|
|
if(m_pFocusHandler)
|
|
m_pFocusHandler->setFocus();
|
|
else
|
|
setFocus();
|
|
}
|
|
|
|
void KviWindow::delayedClose()
|
|
{
|
|
TQTimer::singleShot(0,this,TQT_SLOT(close()));
|
|
}
|
|
|
|
void KviWindow::closeEvent(TQCloseEvent *e)
|
|
{
|
|
e->ignore();
|
|
g_pFrame->childWindowCloseRequest(this);
|
|
}
|
|
|
|
void KviWindow::updateIcon()
|
|
{
|
|
if(parent())
|
|
{
|
|
((KviMdiChild *)parent())->setIcon(*myIconPtr());
|
|
} else {
|
|
setIcon(*myIconPtr());
|
|
}
|
|
}
|
|
|
|
void KviWindow::youAreDocked()
|
|
{
|
|
if(m_pAccel)
|
|
{
|
|
delete m_pAccel;
|
|
m_pAccel = 0;
|
|
}
|
|
((KviMdiChild *)parent())->setIcon(*myIconPtr());
|
|
updateCaption();
|
|
connect(((KviMdiChild *)parent()),TQT_SIGNAL(systemPopupRequest(const TQPoint &)),this,TQT_SLOT(systemPopupRequest(const TQPoint &)));
|
|
}
|
|
|
|
void KviWindow::youAreUndocked()
|
|
{
|
|
m_pAccel = g_pFrame->installAccelerators(this);
|
|
setIcon(*myIconPtr());
|
|
updateCaption();
|
|
}
|
|
|
|
#ifdef FocusIn
|
|
// Hack for X.h
|
|
#undef FocusIn
|
|
#endif
|
|
|
|
void KviWindow::activateSelf()
|
|
{
|
|
if(mdiParent())
|
|
mdiParent()->activate(false);
|
|
|
|
g_pFrame->childWindowActivated(this);
|
|
// this is now done by KviFrame in childWindowActivated
|
|
//g_pFrame->m_pTaskBar->setActiveItem(m_pTaskBarItem);
|
|
}
|
|
|
|
void KviWindow::setFocus()
|
|
{
|
|
// don't trigger the whole TQt focus mechanism..
|
|
// just trigger directly our focusInEvent
|
|
// so we'll redirect the focus to the m_pFocusHandler
|
|
focusInEvent(0);
|
|
}
|
|
|
|
void KviWindow::focusInEvent(TQFocusEvent *)
|
|
{
|
|
if(m_pLastFocusedChild)
|
|
{
|
|
if(m_pLastFocusedChild->hasFocus() && m_pLastFocusedChild->isVisible())
|
|
{
|
|
// the last focused child still has focus (ehm ???)
|
|
if(g_pActiveWindow != this)activateSelf();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(!m_pFocusHandler)
|
|
{
|
|
// must find one NOW
|
|
// we probably have no KviInput since it would have been grabbed anyway
|
|
|
|
if(m_pIrcView)m_pFocusHandler = m_pIrcView;
|
|
else {
|
|
#ifdef COMPILE_USE_QT4
|
|
TQPtrList<TQObject *> list = children();
|
|
for(TQPtrList<TQObject *>::Iterator it = list.begin();it != list.end();++it)
|
|
{
|
|
TQObject * c = *it;
|
|
if(c->isWidgetType())
|
|
{
|
|
m_pFocusHandler = (TQWidget *)c;
|
|
break;
|
|
}
|
|
}
|
|
#else
|
|
TQObjectList list = childrenListObject();
|
|
if(!list.isEmpty())
|
|
{
|
|
for(TQObject * c = list.first();c;c = list.next())
|
|
{
|
|
if(c->isWidgetType())
|
|
{
|
|
m_pFocusHandler = (TQWidget *)c;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
if(m_pFocusHandler)m_pFocusHandler->setFocus();
|
|
else {
|
|
// else too bad :/
|
|
tqDebug("No widget able to handle focus for window %s",name());
|
|
return;
|
|
}
|
|
} else {
|
|
m_pFocusHandler->setFocus();
|
|
}
|
|
|
|
// Setting the focus to the focus handler usually
|
|
// triggers our filter for the children's focusInEvent.
|
|
// This should call activateSelf() and thus
|
|
// we should be already the active window at this point.
|
|
// If we're not, then run activateSelf() to fix this.
|
|
if(g_pActiveWindow != this)activateSelf();
|
|
//else tqDebug("ACTIVE WINDOW IS ALREADY THIS");
|
|
updateCaption();
|
|
}
|
|
|
|
bool KviWindow::eventFilter(TQObject *o,TQEvent *e)
|
|
{
|
|
switch(e->type())
|
|
{
|
|
case TQEvent::FocusIn:
|
|
m_pLastFocusedChild = (TQWidget *)o;
|
|
if(g_pActiveWindow != this)activateSelf();
|
|
break;
|
|
case TQEvent::Enter:
|
|
// this is a handler moved here from KviMdiChild::eventFilter
|
|
if(TQApplication::overrideCursor())
|
|
TQApplication::restoreOverrideCursor();
|
|
break;
|
|
case TQEvent::MouseButtonPress:
|
|
#ifdef COMPILE_USE_QT4
|
|
if( (((TQWidget *)o)->focusPolicy() == TQ_NoFocus) ||
|
|
(((TQWidget *)o)->focusPolicy() == TQ_TabFocus))
|
|
#else
|
|
if( (((TQWidget *)o)->focusPolicy() == TQ_NoFocus) ||
|
|
(((TQWidget *)o)->focusPolicy() == TQ_TabFocus))
|
|
#endif
|
|
{
|
|
// this will not focus our window
|
|
// set the focus to the focus handler
|
|
if(m_pLastFocusedChild)
|
|
{
|
|
if(m_pLastFocusedChild->hasFocus() && m_pLastFocusedChild->isVisible())
|
|
return false;
|
|
}
|
|
|
|
if(m_pFocusHandler)
|
|
{
|
|
m_pFocusHandler->setFocus();
|
|
} else {
|
|
setFocus(); // we grab the focus (someone must do it , damn :D)
|
|
}
|
|
}
|
|
break;
|
|
case TQEvent::ChildInserted:
|
|
if(((TQChildEvent *)e)->child()->isWidgetType())
|
|
childInserted((TQWidget *)((TQChildEvent *)e)->child());
|
|
break;
|
|
case TQEvent::ChildRemoved:
|
|
if(((TQChildEvent *)e)->child()->isWidgetType())
|
|
childRemoved((TQWidget *)((TQChildEvent *)e)->child());
|
|
break;
|
|
default: /* make gcc happy */ break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
void KviWindow::childInserted(TQWidget * o)
|
|
{
|
|
o->removeEventFilter(this); // ensure that we don't filter twice
|
|
o->installEventFilter(this); // we filter its events
|
|
connect(o,TQT_SIGNAL(destroyed()),this,TQT_SLOT(childDestroyed()));
|
|
|
|
if(o->inherits("KviInput"))
|
|
m_pFocusHandler = o;
|
|
else
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
if(!m_pFocusHandler && (o->focusPolicy() == TQ_StrongFocus))
|
|
#else
|
|
if(!m_pFocusHandler && (o->focusPolicy() == TQ_StrongFocus))
|
|
#endif
|
|
{
|
|
m_pFocusHandler = o;
|
|
}
|
|
}
|
|
|
|
#ifdef COMPILE_USE_QT4
|
|
TQPtrList<TQObject *> list = o->children();
|
|
for(TQPtrList<TQObject *>::Iterator it = list.begin();it != list.end();++it)
|
|
{
|
|
TQObject * c = *it;
|
|
if(c->isWidgetType())
|
|
{
|
|
childInserted((TQWidget *)c);
|
|
}
|
|
}
|
|
#else
|
|
TQObjectList list = o->childrenListObject();
|
|
if(!list.isEmpty())
|
|
{
|
|
for(TQObject * c = list.first();c;c = list.next())
|
|
{
|
|
if(c->isWidgetType())
|
|
childInserted((TQWidget *)c);
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void KviWindow::childDestroyed()
|
|
{
|
|
TQWidget * s = (TQWidget *)sender();
|
|
childRemoved(s);
|
|
}
|
|
|
|
void KviWindow::childRemoved(TQWidget * o)
|
|
{
|
|
//tqDebug("CHILD REMOVED %d",o);
|
|
o->removeEventFilter(this);
|
|
if(o == m_pFocusHandler)
|
|
m_pFocusHandler = 0;
|
|
if(o == m_pLastFocusedChild)
|
|
m_pLastFocusedChild = 0;
|
|
|
|
#ifdef COMPILE_USE_QT4
|
|
TQPtrList<TQObject *> list = o->children();
|
|
for(TQPtrList<TQObject *>::Iterator it = list.begin();it != list.end();++it)
|
|
{
|
|
TQObject * c = *it;
|
|
if(c->isWidgetType())
|
|
{
|
|
childRemoved((TQWidget *)c);
|
|
}
|
|
}
|
|
#else
|
|
TQObjectList list = o->childrenListObject();
|
|
if(!list.isEmpty())
|
|
{
|
|
for(TQObject * c = list.first();c;c = list.next())
|
|
{
|
|
if(c->isWidgetType())
|
|
childRemoved((TQWidget *)c);
|
|
}
|
|
} //else tqDebug("The removed object has no children");
|
|
#endif
|
|
}
|
|
|
|
void KviWindow::childEvent(TQChildEvent *e)
|
|
{
|
|
if(e->child()->isWidgetType())
|
|
{
|
|
if(e->removed())
|
|
childRemoved((TQWidget *)(e->child()));
|
|
else
|
|
childInserted((TQWidget *)(e->child()));
|
|
}
|
|
TQWidget::childEvent(e);
|
|
}
|
|
|
|
void KviWindow::wheelEvent(TQWheelEvent *e)
|
|
{
|
|
/* NOTHING HERE FOR NOW (FIXME) */
|
|
}
|
|
|
|
|
|
void KviWindow::childrenTreeChanged(TQWidget * widgetAdded)
|
|
{
|
|
// if(widgetAdded && m_pFocusHandler)setFocusHandler(m_pFocusHandler,widgetAdded);
|
|
// FIXME: This might be useless
|
|
TQResizeEvent * e = new TQResizeEvent(size(),size());
|
|
resizeEvent(e);
|
|
delete e;
|
|
}
|
|
|
|
|
|
void KviWindow::updateBackgrounds(TQObject * obj)
|
|
{
|
|
if(!obj)
|
|
obj = TQT_TQOBJECT(this);
|
|
#ifdef COMPILE_USE_QT4
|
|
TQPtrList<TQObject *> list = obj->children();
|
|
if (list.count())
|
|
{
|
|
|
|
for(TQPtrList<TQObject *>::Iterator it = list.begin();it != list.end();++it)
|
|
{
|
|
TQObject * child = *it;
|
|
if(child->metaObject()->indexOfProperty("TransparencyCapable") != -1){
|
|
// if (child->isWidgetType())
|
|
((TQWidget *)child)->update();
|
|
}
|
|
updateBackgrounds(child);
|
|
}
|
|
}
|
|
#else
|
|
TQObjectList list = obj->childrenListObject();
|
|
if(!list.isEmpty())
|
|
{
|
|
for(unsigned int i=0;i<list.count();i++)
|
|
{
|
|
TQObject * child = list.at(i);
|
|
// FIXME: check if this code can work with qt < 3.0.0 too
|
|
if(child->metaObject()->findProperty("TransparencyCapable",true) != -1)
|
|
((TQWidget *)child)->update();
|
|
|
|
updateBackgrounds(child);
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void KviWindow::moveEvent(TQMoveEvent *e)
|
|
{
|
|
#ifdef COMPILE_PSEUDO_TRANSPARENCY
|
|
updateBackgrounds();
|
|
#endif
|
|
|
|
TQWidget::moveEvent(e);
|
|
}
|
|
|
|
void KviWindow::minimize()
|
|
{
|
|
if(mdiParent())
|
|
{
|
|
if(!isMinimized())
|
|
mdiParent()->minimize();
|
|
}
|
|
else
|
|
showMinimized();
|
|
}
|
|
|
|
void KviWindow::maximize()
|
|
{
|
|
if(mdiParent())
|
|
{
|
|
if(!isMaximized())
|
|
mdiParent()->maximize();
|
|
}
|
|
else
|
|
showMaximized();
|
|
autoRaise();
|
|
}
|
|
|
|
bool KviWindow::isMinimized()
|
|
{
|
|
if(mdiParent())
|
|
return (mdiParent()->state() == KviMdiChild::Minimized);
|
|
else
|
|
return TQWidget::isMinimized();
|
|
}
|
|
|
|
bool KviWindow::isMaximized()
|
|
{
|
|
if(mdiParent())
|
|
return (mdiParent()->state() == KviMdiChild::Maximized);
|
|
// Heh...how to check it ?
|
|
// Empirical check
|
|
int wdth = (g_pApp->desktop()->width() * 75) / 100;
|
|
int hght = (g_pApp->desktop()->height() * 75) / 100;
|
|
|
|
return ((x() <= 1)&&(y() <= 1)&&(width() >= wdth)&&(height() >= hght));
|
|
}
|
|
|
|
void KviWindow::restore()
|
|
{
|
|
if(mdiParent())
|
|
{
|
|
if(isMinimized()||isMaximized())
|
|
mdiParent()->restore();
|
|
}
|
|
else
|
|
showNormal();
|
|
autoRaise();
|
|
}
|
|
|
|
TQRect KviWindow::externalGeometry()
|
|
{
|
|
#ifndef Q_OS_MACX
|
|
return mdiParent() ? mdiParent()->restoredGeometry() : frameGeometry();
|
|
#else
|
|
return mdiParent() ? mdiParent()->restoredGeometry() : geometry();
|
|
#endif
|
|
}
|
|
|
|
void KviWindow::applyOptions()
|
|
{
|
|
updateCaption();
|
|
if(m_pIrcView)m_pIrcView->applyOptions();
|
|
if(m_pInput)m_pInput->applyOptions();
|
|
|
|
// trick: relayout
|
|
resize(width() - 1,height() - 1);
|
|
resize(width() + 1,height() + 1);
|
|
}
|
|
|
|
KviWindow * KviWindow::outputProxy()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void KviWindow::lostUserFocus()
|
|
{
|
|
if(!m_pIrcView)return;
|
|
if(m_pIrcView->hasLineMark())m_pIrcView->clearLineMark(true);
|
|
}
|
|
|
|
|
|
void KviWindow::internalOutput(KviIrcView * pView,int msg_type,const kvi_wchar_t * pText,int iFlags)
|
|
{
|
|
// all roads lead to Rome :)
|
|
|
|
if(pView)
|
|
{
|
|
if((this != g_pActiveWindow) || (!isActiveWindow()))
|
|
{
|
|
if(!pView->hasLineMark())
|
|
{
|
|
iFlags |= KviIrcView::SetLineMark;
|
|
}
|
|
}
|
|
pView->appendText(msg_type,pText,iFlags);
|
|
} else {
|
|
// Redirect to the output proxy
|
|
KviWindow *wnd = outputProxy();
|
|
if(wnd)wnd->outputNoFmt(msg_type,pText,iFlags);
|
|
}
|
|
|
|
if(!m_pTaskBarItem) {
|
|
return;
|
|
}
|
|
|
|
// if this option is checked we dont highlight other than channel msg
|
|
if(KVI_OPTION_BOOL(KviOption_boolHighlightOnlyNormalMsg))
|
|
{
|
|
if((msg_type != KVI_OUT_CHANPRIVMSG) && (msg_type != KVI_OUT_CHANPRIVMSGCRYPTED))
|
|
{
|
|
if(!(
|
|
(
|
|
KVI_OPTION_BOOL(KviOption_boolHighlightOnlyNormalMsgQueryToo) &&
|
|
(
|
|
(msg_type == KVI_OUT_QUERYPRIVMSG) || (msg_type == KVI_OUT_QUERYTRACE) ||
|
|
(msg_type == KVI_OUT_QUERYPRIVMSGCRYPTED) || (msg_type == KVI_OUT_QUERYNOTICE) || (msg_type == KVI_OUT_QUERYNOTICECRYPTED)
|
|
)
|
|
)
|
|
||
|
|
(
|
|
KVI_OPTION_BOOL(KviOption_boolHighlightOnlyNormalMsgHighlightInChanToo) && (msg_type == KVI_OUT_HIGHLIGHT)
|
|
)
|
|
)
|
|
)
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(KVI_OPTION_BOOL(KviOption_boolHighlightOnlyAtCostumHighlightLevel) &&
|
|
(KVI_OPTION_MSGTYPE(msg_type).level() < ((int)(KVI_OPTION_UINT(KviOption_uintMinHighlightLevel)))))
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_pTaskBarItem->highlight(KVI_OPTION_MSGTYPE(msg_type).level());
|
|
}
|
|
|
|
void KviWindow::output(int msg_type,const char *format,...)
|
|
{
|
|
TQString szFmt(format);
|
|
kvi_va_list l;
|
|
kvi_va_start(l,format);
|
|
TQString szBuf;
|
|
KviTQString::vsprintf(szBuf,szFmt,l);
|
|
kvi_va_end(l);
|
|
preprocessMessage(szBuf);
|
|
const TQChar * pC = KviTQString::nullTerminatedArray(szBuf);
|
|
if(!pC)return;
|
|
internalOutput(m_pIrcView,msg_type,(kvi_wchar_t *)pC);
|
|
}
|
|
|
|
void KviWindow::output(int msg_type,const TQString &szFmt,...)
|
|
{
|
|
kvi_va_list l;
|
|
kvi_va_start_by_reference(l,szFmt);
|
|
TQString szBuf;
|
|
KviTQString::vsprintf(szBuf,szFmt,l);
|
|
kvi_va_end(l);
|
|
preprocessMessage(szBuf);
|
|
const TQChar * pC = KviTQString::nullTerminatedArray(szBuf);
|
|
if(!pC)return;
|
|
internalOutput(m_pIrcView,msg_type,(kvi_wchar_t *)pC);
|
|
}
|
|
|
|
void KviWindow::output(int msg_type,const kvi_wchar_t *format,...)
|
|
{
|
|
TQString szFmt=TQString::fromUtf8(KviStr(format).ptr());
|
|
kvi_va_list l;
|
|
kvi_va_start(l,format);
|
|
TQString szBuf;
|
|
KviTQString::vsprintf(szBuf,szFmt,l);
|
|
kvi_va_end(l);
|
|
preprocessMessage(szBuf);
|
|
const TQChar * pC = KviTQString::nullTerminatedArray(szBuf);
|
|
if(!pC)return;
|
|
internalOutput(m_pIrcView,msg_type,(kvi_wchar_t *)pC);
|
|
}
|
|
|
|
void KviWindow::outputNoFmt(int msg_type,const char * text,int iFlags)
|
|
{
|
|
TQString szText(text);
|
|
preprocessMessage(szText);
|
|
const TQChar * pC = KviTQString::nullTerminatedArray(szText);
|
|
if(!pC)return;
|
|
internalOutput(m_pIrcView,msg_type,(kvi_wchar_t *)pC,iFlags);
|
|
}
|
|
|
|
void KviWindow::outputNoFmt(int msg_type,const TQString &szText,int iFlags)
|
|
{
|
|
TQString szBuf(szText);
|
|
preprocessMessage(szBuf);
|
|
const TQChar * pC = KviTQString::nullTerminatedArray(szBuf);
|
|
if(!pC)return;
|
|
internalOutput(m_pIrcView,msg_type,(kvi_wchar_t *)pC,iFlags);
|
|
}
|
|
|
|
void KviWindow::unhighlight()
|
|
{
|
|
if(!m_pTaskBarItem)return;
|
|
m_pTaskBarItem->unhighlight();
|
|
}
|
|
|
|
/* This messes up a bit: for example it breaks the WHOIS output where
|
|
escapes are already present (checking for them here would be an overkill).
|
|
This should be eventually done ONLY for remote user message texts
|
|
in the server parser.
|
|
|
|
Fixed
|
|
*/
|
|
|
|
void KviWindow::preprocessMessage(TQString & szMessage)
|
|
{
|
|
// slow
|
|
#ifdef COMPILE_USE_QT4
|
|
TQStringList strings = szMessage.split(" ");
|
|
#else
|
|
TQStringList strings = TQStringList::split(" ",szMessage, TRUE);
|
|
#endif
|
|
for ( TQStringList::Iterator it = strings.begin(); it != strings.end(); ++it ) {
|
|
TQString tmp(*it);
|
|
if(tmp.contains('\r')) continue;
|
|
tmp = KviMircCntrl::stripControlBytes(tmp);
|
|
tmp.stripWhiteSpace();
|
|
if(m_pConsole)
|
|
if(m_pConsole->connection())
|
|
if(m_pConsole->connection()->serverInfo()->supportedChannelTypes().contains(tmp[0]))
|
|
if((*it)==tmp)
|
|
*it=TQString("\r!c\r%1\r").arg(*it);
|
|
else
|
|
{
|
|
*it=TQString("\r!c%1\r%2\r").arg(tmp).arg(*it);
|
|
}
|
|
}
|
|
szMessage=strings.join(" ");
|
|
}
|
|
|
|
|
|
#include "kvi_window.moc"
|