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.
kvirc/src/modules/term/termwidget.cpp

180 lines
4.9 KiB

//
// File : termwidget.cpp
// Creation date : Thu Aug 10 2000 17:42:12 by Szymon Stefanek
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 2000-2005 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.
//
#include "termwidget.h"
#include "termwindow.h"
#include "kvi_module.h"
#include "kvi_frame.h"
#include "kvi_iconmanager.h"
#include "kvi_locale.h"
#include <tqlabel.h>
#include "kvi_pointerlist.h"
#include <tqtooltip.h>
#include <tqtimer.h>
#ifdef COMPILE_KDE_SUPPORT
#include "klibloader.h"
#include "kparts/part.h"
#include "kparts/factory.h"
extern KviModule * g_pTermModule;
extern KviPointerList<KviTermWidget> * g_pTermWidgetList;
extern KviPointerList<KviTermWindow> * g_pTermWindowList;
extern KviStr g_szKonsoleLibraryName;
KviTermWidget::KviTermWidget(TQWidget * par,KviFrame * lpFrm,bool bIsStandalone)
: TQFrame(par,"term_widget")
{
if(bIsStandalone)g_pTermWidgetList->append(this);
m_bIsStandalone = bIsStandalone;
m_pKonsolePart = 0;
m_pKonsoleWidget = 0;
if(bIsStandalone)
{
m_pHBox = new KviTalHBox(this);
m_pTitleLabel = new TQLabel(__tr2qs("Terminal emulator"),m_pHBox);
m_pTitleLabel->setFrameStyle(TQFrame::Raised | TQFrame::WinPanel);
m_pCloseButton = new TQPushButton("",m_pHBox);
m_pCloseButton->setPixmap(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CLOSE)));
TQToolTip::add(m_pCloseButton,__tr2qs("Close this window"));
m_pHBox->setStretchFactor(m_pTitleLabel,2);
connect(m_pCloseButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(closeClicked()));
} else {
m_pHBox = 0;
m_pTitleLabel = 0;
m_pCloseButton = 0;
}
setFrameStyle(TQFrame::Sunken | TQFrame::Panel);
KParts::Factory * pKonsoleFactory = static_cast<KParts::Factory *>(
KLibLoader::self()->factory(g_szKonsoleLibraryName.ptr()));
if(pKonsoleFactory)
{
// debug("FACTORY %d",pKonsoleFactory);
m_pKonsolePart = static_cast<KParts::Part *>(pKonsoleFactory->createPart(
this,"terminal emulator",this,"the konsole part"));
if(m_pKonsolePart)
{
// debug("PART %d",m_pKonsolePart);
m_pKonsoleWidget = m_pKonsolePart->widget();
connect(m_pKonsoleWidget,TQT_SIGNAL(destroyed()),this,TQT_SLOT(konsoleDestroyed()));
// debug("Widget %d",m_pKonsoleWidget);
} else {
m_pKonsoleWidget = new TQLabel(this,
__tr2qs("Can't create the terminal emulation part"));
}
} else {
m_pKonsoleWidget = new TQLabel(this,
__tr2qs("Can't retrieve the terminal emulation factory"));
}
}
KviTermWidget::~KviTermWidget()
{
if(m_pKonsoleWidget)
disconnect(m_pKonsoleWidget,TQT_SIGNAL(destroyed()),this,TQT_SLOT(konsoleDestroyed()));
if(m_bIsStandalone)g_pTermWidgetList->removeRef(this);
if(g_pTermWindowList->isEmpty() && g_pTermWidgetList->isEmpty())g_pTermModule->unlock();
// debug("DELETING KONSOLE WIDGET");
// if(m_pKonsoleWidget)delete m_pKonsoleWidget; <--// TQt will delete it
// debug("DELETING KONSOLE PART");
// if(m_pKonsolePart)delete m_pKonsolePart; <--// the part will delete self when the widget will die
// debug("KONSOLE PART DELETED");
}
void KviTermWidget::resizeEvent(TQResizeEvent *e)
{
int hght = 0;
if(m_bIsStandalone)
{
hght = m_pCloseButton->tqsizeHint().height();
m_pHBox->setGeometry(1,1,width() - 2,hght + 1);
}
if(m_pKonsoleWidget)m_pKonsoleWidget->setGeometry(1,hght + 1,width() - 2,height() - (hght + 2));
}
void KviTermWidget::closeClicked()
{
// this is called only in standalone mode
delete this;
}
void KviTermWidget::konsoleDestroyed()
{
m_pKonsoleWidget = 0;
m_pKonsolePart = 0;
hide();
TQTimer::singleShot(0,this,TQT_SLOT(autoClose()));
}
void KviTermWidget::autoClose()
{
if(m_bIsStandalone)delete this;
else ((KviWindow *)parent())->close();
}
void KviTermWidget::changeTitle(int i,const TQString& str)
{
if(m_bIsStandalone)m_pTitleLabel->setText(str);
}
void KviTermWidget::notifySize(int,int)
{
}
void KviTermWidget::changeColumns(int)
{
}
TQSize KviTermWidget::tqsizeHint() const
{
int hght = 0;
int wdth = 0;
if(m_pKonsoleWidget)
{
hght += m_pKonsoleWidget->tqsizeHint().height();
wdth = m_pKonsoleWidget->tqsizeHint().width();
}
if(m_pCloseButton)
{
hght += m_pCloseButton->tqsizeHint().height();
}
return TQSize(wdth + 2,hght + 2);
}
#include "termwidget.moc"
#endif //COMPILE_KDE_SUPPORT