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.
203 lines
5.3 KiB
203 lines
5.3 KiB
/***************************************************************************
|
|
tabmanager.cpp - description
|
|
-------------------
|
|
begin : Sat Sep 14 2002
|
|
copyright : (C) 2003 by Troy Corbin Jr.
|
|
email : tcorbin@users.sf.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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "tabmanager.moc"
|
|
#include "resource.h"
|
|
#include <kdebug.h>
|
|
|
|
static TQString myConfigGroup( "TabManager" );
|
|
|
|
TabManager::TabManager( resource *rsrc ) : TQObject()
|
|
{
|
|
myResource = rsrc;
|
|
appConfig = kapp->config();
|
|
}
|
|
|
|
TabManager::~TabManager()
|
|
{
|
|
}
|
|
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::addTab
|
|
//
|
|
///////////////////////////////////////
|
|
void TabManager::addTab( TQWidget *child, const TQString &caption )
|
|
{
|
|
TabBox *boxPtr;
|
|
|
|
if( myList.count() == 0 )
|
|
{
|
|
/* First Tab always generates a new TabBox */
|
|
boxPtr = new TabBox( myResource );
|
|
manageNewBox( boxPtr );
|
|
boxPtr->addTab( child, caption );
|
|
|
|
/* Get Geometry from Saved Config */
|
|
appConfig->setGroup( myConfigGroup );
|
|
TQSize defaultSize( 420, 360 );
|
|
TQSize newSize = appConfig->readSizeEntry( TQString( child->className() ), &defaultSize );
|
|
boxPtr->resize( newSize );
|
|
boxPtr->show();
|
|
}
|
|
else
|
|
{
|
|
boxPtr = myList.at(0);
|
|
boxPtr->addTab( child, caption );
|
|
}
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::changeCaption
|
|
//
|
|
///////////////////////////////////////
|
|
void TabManager::changeCaption( TQWidget *child, const TQString &caption )
|
|
{
|
|
TabBox *boxPtr = getParentBox( child );
|
|
|
|
if( boxPtr != NULL )
|
|
{
|
|
boxPtr->changeCaption( child, caption );
|
|
}
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::removeTab
|
|
//
|
|
///////////////////////////////////////
|
|
void TabManager::removeTab( TQObject *child )
|
|
{
|
|
/* Make sure this is a TQWidget we can manipulate */
|
|
if( !child->isWidgetType() )
|
|
{
|
|
kdError() << "TabManager::removeTab: Can not remove non-widget class " << child->className() << endl;
|
|
return;
|
|
}
|
|
|
|
if( myList.find( ((TabBox*)child) ) != -1 )
|
|
{
|
|
/* Remove Child Directly */
|
|
myList.remove( ((TabBox*)child) );
|
|
return;
|
|
}
|
|
|
|
TQString childName( ((TQWidget*)child)->className() );
|
|
TabBox *boxPtr = getParentBox( ((TQWidget*)child) );
|
|
|
|
/* Remove this Child's Parent, the TabPage */
|
|
if( boxPtr != NULL )
|
|
{
|
|
kdDebug() << "Removing child: " << childName << endl;
|
|
boxPtr->removeTab( ((TQWidget*)child), TRUE );
|
|
if( boxPtr->count() == 0 )
|
|
{
|
|
myList.remove( boxPtr );
|
|
delete boxPtr;
|
|
}
|
|
return;
|
|
}
|
|
kdWarning() << "Could not find child: " << childName << endl;
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::showTab
|
|
//
|
|
///////////////////////////////////////
|
|
void TabManager::showTab( TQWidget *child )
|
|
{
|
|
TabBox *boxPtr = getParentBox( child );
|
|
if( boxPtr != NULL )
|
|
{
|
|
boxPtr->showTab( child );
|
|
}
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::isTab
|
|
//
|
|
///////////////////////////////////////
|
|
bool TabManager::isTab( TQWidget *child )
|
|
{
|
|
if( getParentBox( child ) == NULL )
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::saveTabGeometry
|
|
//
|
|
///////////////////////////////////////
|
|
void TabManager::saveTabGeometry( const TQString &childName, const TQSize &childSize )
|
|
{
|
|
/* Save This Widget's Size For Later */
|
|
appConfig->setGroup( myConfigGroup );
|
|
appConfig->writeEntry( childName, childSize );
|
|
appConfig->sync();
|
|
|
|
kdDebug() << "Saved geometry for Widget: " << childName << endl;
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::childEvent
|
|
//
|
|
///////////////////////////////////////
|
|
void TabManager::childEvent( TQChildEvent *event )
|
|
{
|
|
if( event->inserted() )
|
|
{
|
|
/* New Child */
|
|
if( TQString( event->child()->className() ) == "TabBox" )
|
|
{
|
|
manageNewBox( ((TabBox*)event->child()) );
|
|
return;
|
|
}
|
|
addTab( ((TQWidget*)event->child()), TQString( "Untitled" ) );
|
|
}
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::manageNewBox
|
|
//
|
|
///////////////////////////////////////
|
|
void TabManager::manageNewBox( TabBox *newBox )
|
|
{
|
|
myList.append( newBox );
|
|
connect( newBox, TQ_SIGNAL( destroyed( TQObject* ) ), this, TQ_SLOT( removeTab( TQObject* ) ) );
|
|
connect( newBox, TQ_SIGNAL( saveTabGeometry( const TQString&, const TQSize& ) ), this, TQ_SLOT( saveTabGeometry( const TQString&, const TQSize& ) ) );
|
|
connect( newBox, TQ_SIGNAL( newTabBox( TabBox* ) ), this, TQ_SLOT( manageNewBox( TabBox* ) ) );
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabManager::getParentBox
|
|
//
|
|
///////////////////////////////////////
|
|
TabBox* TabManager::getParentBox( TQWidget *child )
|
|
{
|
|
TabBox *boxPtr;
|
|
for( unsigned int index=0; index < myList.count(); index++ )
|
|
{
|
|
boxPtr = myList.at(index);
|
|
if( boxPtr->isChild( child ) )
|
|
{
|
|
return boxPtr;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|