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.
209 lines
5.6 KiB
209 lines
5.6 KiB
/***************************************************************************
|
|
tabbox.cpp - description
|
|
-------------------
|
|
begin : Fri Sep 13 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 "tabbox.moc"
|
|
#include "tabpage.h"
|
|
#include "resource.h"
|
|
#include "accel.h"
|
|
#include <klocale.h>
|
|
#include <tqstyle.h>
|
|
#include <tqtabwidget.h>
|
|
|
|
TabBox::TabBox( resource *rsrc ) : TQVBox(0,"TabBox",TQt::WDestructiveClose)
|
|
{
|
|
myResource = rsrc;
|
|
setMargin( TQApplication::tqstyle().defaultFrameWidth() );
|
|
|
|
myTabs = new TQTabWidget( this, "myTabs" );
|
|
myTabs->setTabShape( TQTabWidget::Rounded );
|
|
myTabs->setTabPosition( TQTabWidget::Top );
|
|
|
|
myAccel = new Accel( this, myResource->myAccel );
|
|
|
|
connect( myTabs, TQT_SIGNAL( currentChanged( TQWidget* ) ), this, TQT_SLOT( changeMyCaption( TQWidget* ) ) );
|
|
connect( this, TQT_SIGNAL( focus( const TQChar& ) ), myResource->myAccel, TQT_SIGNAL( focus( const TQChar& ) ) );
|
|
}
|
|
TabBox::~TabBox()
|
|
{
|
|
while( myTabs->count() )
|
|
{
|
|
removeTab( myTabs->page(0), TRUE );
|
|
}
|
|
delete myAccel;
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::keyPressEvent
|
|
//
|
|
///////////////////////////////////////
|
|
void TabBox::keyPressEvent( TQKeyEvent *e )
|
|
{
|
|
TQChar input;
|
|
|
|
if( ( e->state() | TQt::ShiftButton ) == TQt::ShiftButton )
|
|
{
|
|
input = e->text().at(0);
|
|
if( input.isLetterOrNumber() )
|
|
{
|
|
emit focus( input );
|
|
e->accept();
|
|
return;
|
|
}
|
|
}
|
|
e->ignore();
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::addTab
|
|
//
|
|
///////////////////////////////////////
|
|
void TabBox::addTab( TQWidget *child, const TQString &caption )
|
|
{
|
|
if( TQString( child->className() ) == "TabPage" )
|
|
{
|
|
myTabs->addTab( child, caption );
|
|
myTabs->showPage( child );
|
|
changeMyCaption( child );
|
|
connect( child, TQT_SIGNAL( newParent( TabBox* ) ), this, TQT_SIGNAL( newTabBox( TabBox* ) ) );
|
|
connect( child, TQT_SIGNAL( requestDestruction() ), this, TQT_SLOT( destroyChild() ) );
|
|
}
|
|
else
|
|
{
|
|
TabPage *newPage = new TabPage( (TQWidget*)this, child, myResource );
|
|
newPage->setCaption( caption );
|
|
|
|
myTabs->addTab( newPage, caption );
|
|
myTabs->showPage( newPage );
|
|
changeMyCaption( newPage );
|
|
connect( newPage, TQT_SIGNAL( newParent( TabBox* ) ), this, TQT_SIGNAL( newTabBox( TabBox* ) ) );
|
|
connect( newPage, TQT_SIGNAL( requestDestruction() ), this, TQT_SLOT( destroyChild() ) );
|
|
}
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::removeTab
|
|
//
|
|
///////////////////////////////////////
|
|
void TabBox::removeTab( TQWidget *child, bool deleteChild )
|
|
{
|
|
if( TQString( child->className() ) == "TabPage" )
|
|
{
|
|
emit saveTabGeometry( TQString( ((TabPage*)child)->getChild()->className() ), size() );
|
|
myTabs->removePage( child );
|
|
}
|
|
else
|
|
{
|
|
emit saveTabGeometry( TQString( child->className() ), size() );
|
|
myTabs->removePage( child->parentWidget() );
|
|
}
|
|
|
|
/* Delete it if requested */
|
|
if( deleteChild )
|
|
{
|
|
delete child;
|
|
}
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::showTab
|
|
//
|
|
///////////////////////////////////////
|
|
void TabBox::showTab( TQWidget *child )
|
|
{
|
|
if( isChild( child ) )
|
|
myTabs->showPage( child->parentWidget() );
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::destroyChild
|
|
//
|
|
///////////////////////////////////////
|
|
void TabBox::destroyChild( void )
|
|
{
|
|
TQObject *child = ((TQObject*)sender());
|
|
|
|
/* Be careful... make sure we have a valid child calling us */
|
|
if( child == NULL )
|
|
return;
|
|
if( !child->isWidgetType() )
|
|
return;
|
|
if( !isChild( ((TQWidget*)child) ) )
|
|
return;
|
|
|
|
/* Nuke it */
|
|
removeTab( ((TQWidget*)child), TRUE );
|
|
|
|
if( count() == 0 )
|
|
{
|
|
/* TabManager will be notified of the delete via TQObject::destroyed(TQObject*) */
|
|
delete this;
|
|
}
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::changeMyCaption
|
|
//
|
|
///////////////////////////////////////
|
|
void TabBox::changeMyCaption( TQWidget *child )
|
|
{
|
|
setCaption( i18n("%1 - Knights").tqarg( myTabs->tabLabel( child ) ) );
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::count
|
|
//
|
|
///////////////////////////////////////
|
|
int TabBox::count( void )
|
|
{
|
|
return myTabs->count();
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::isChild
|
|
//
|
|
///////////////////////////////////////
|
|
bool TabBox::isChild( TQWidget *child )
|
|
{
|
|
for( int tmp=0; tmp < myTabs->count(); tmp++ )
|
|
{
|
|
if( myTabs->page(tmp) == child )
|
|
return TRUE;
|
|
if( ((TabPage*)myTabs->page(tmp))->getChild() == child )
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
///////////////////////////////////////
|
|
//
|
|
// TabBox::changeCaption
|
|
//
|
|
///////////////////////////////////////
|
|
void TabBox::changeCaption( TQWidget *child, const TQString &caption )
|
|
{
|
|
if( TQString( child->className() ) == "TabPage" )
|
|
{
|
|
((TabPage*)child)->setCaption( caption );
|
|
myTabs->setTabLabel( child, caption );
|
|
}
|
|
else if( isChild( child ) )
|
|
{
|
|
((TabPage*)child->parentWidget())->setCaption( caption );
|
|
myTabs->setTabLabel( child->parentWidget(), caption );
|
|
}
|
|
changeMyCaption( myTabs->currentPage() );
|
|
}
|