//============================================================================= // // 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-2010 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 option) 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 "KviModule.h" #include "KviMainWindow.h" #include "KviIconManager.h" #include "KviLocale.h" #include "KviPointerList.h" #include #include #include #ifdef COMPILE_KDE4_SUPPORT #include "klibloader.h" #include "kparts/part.h" #include "kparts/factory.h" #include extern KviModule * g_pTermModule; extern KviPointerList * g_pTermWidgetList; extern KviPointerList * g_pTermWindowList; TermWidget::TermWidget(QWidget * par,bool bIsStandalone) : QFrame(par) { setObjectName("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 QLabel(__tr2qs("Terminal emulator"),m_pHBox); m_pTitleLabel->setFrameStyle(QFrame::Raised | QFrame::StyledPanel); m_pCloseButton = new QPushButton("",m_pHBox); m_pCloseButton->setIcon(*(g_pIconManager->getSmallIcon(KviIconManager::Close))); m_pCloseButton->setToolTip(__tr2qs("Close this window")); m_pHBox->setStretchFactor(m_pTitleLabel,2); connect(m_pCloseButton,SIGNAL(clicked()),this,SLOT(closeClicked())); } else { m_pHBox = 0; m_pTitleLabel = 0; m_pCloseButton = 0; } setFrameStyle(QFrame::Sunken | QFrame::Panel); KPluginFactory *pKonsoleFactory = KPluginLoader("libkonsolepart").factory(); if(pKonsoleFactory) { m_pKonsolePart = static_cast(pKonsoleFactory->create(this, this)); if(m_pKonsolePart) { // start the terminal qobject_cast(m_pKonsolePart)->showShellInDir( QString() ); m_pKonsoleWidget = m_pKonsolePart->widget(); setFocusProxy(m_pKonsoleWidget); m_pKonsoleWidget->show(); connect ( m_pKonsolePart, SIGNAL(destroyed()), this, SLOT(konsoleDestroyed()) ); } else { m_pKonsoleWidget = new QLabel(__tr2qs("Can't create the terminal emulation part"), this); } } else { m_pKonsoleWidget = new QLabel(__tr2qs("Can't retrieve the terminal emulation factory"), this); } } TermWidget::~TermWidget() { if(m_pKonsoleWidget) disconnect(m_pKonsoleWidget,SIGNAL(destroyed()),this,SLOT(konsoleDestroyed())); if(m_bIsStandalone)g_pTermWidgetList->removeRef(this); if(g_pTermWindowList->isEmpty() && g_pTermWidgetList->isEmpty())g_pTermModule->unlock(); } void TermWidget::resizeEvent(QResizeEvent *) { int hght = 0; if(m_bIsStandalone) { hght = m_pCloseButton->sizeHint().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 TermWidget::closeClicked() { // this is called only in standalone mode delete this; } void TermWidget::konsoleDestroyed() { m_pKonsoleWidget = 0; m_pKonsolePart = 0; hide(); QTimer::singleShot(0,this,SLOT(autoClose())); } void TermWidget::autoClose() { if(m_bIsStandalone)delete this; else ((KviWindow *)parent())->close(); } void TermWidget::changeTitle(int,const QString& str) { if(m_bIsStandalone)m_pTitleLabel->setText(str); } void TermWidget::notifySize(int,int) { } void TermWidget::changeColumns(int) { } QSize TermWidget::sizeHint() const { int hght = 0; int wdth = 0; if(m_pKonsoleWidget) { hght += m_pKonsoleWidget->sizeHint().height(); wdth = m_pKonsoleWidget->sizeHint().width(); } if(m_pCloseButton) { hght += m_pCloseButton->sizeHint().height(); } return QSize(wdth + 2,hght + 2); } #endif //COMPILE_KDE4_SUPPORT