|
|
|
/* -*- c++ -*-
|
|
|
|
kwidgetlister.cpp
|
|
|
|
|
|
|
|
This file is part of libkdenetwork.
|
|
|
|
Copyright (c) 2001 Marc Mutz <mutz@kde.org>
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU General Public License,
|
|
|
|
version 2, as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
This library 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 library; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
|
|
|
In addition, as a special exception, the copyright holders give
|
|
|
|
permission to link the code of this library with any edition of
|
|
|
|
the TQt library by Trolltech AS, Norway (or with modified versions
|
|
|
|
of TQt that use the same license as TQt), and distribute linked
|
|
|
|
combinations including the two. You must obey the GNU General
|
|
|
|
Public License in all respects for all of the code used other than
|
|
|
|
TQt. If you modify this file, you may extend this exception to
|
|
|
|
your version of the file, but you are not obligated to do so. If
|
|
|
|
you do not wish to do so, delete this exception statement from
|
|
|
|
your version.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "kwidgetlister.h"
|
|
|
|
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
|
|
|
|
#include <tqpushbutton.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tqhbox.h>
|
|
|
|
|
|
|
|
#include <assert.h>
|
|
|
|
#include <kguiitem.h>
|
|
|
|
#include <kpushbutton.h>
|
|
|
|
#include <kdialog.h>
|
|
|
|
|
|
|
|
KWidgetLister::KWidgetLister( int minWidgets, int maxWidgets, TQWidget *tqparent, const char* name )
|
|
|
|
: TQWidget( tqparent, name )
|
|
|
|
{
|
|
|
|
mWidgetList.setAutoDelete(TRUE);
|
|
|
|
|
|
|
|
mMinWidgets = TQMAX( minWidgets, 1 );
|
|
|
|
mMaxWidgets = TQMAX( maxWidgets, mMinWidgets + 1 );
|
|
|
|
|
|
|
|
//--------- the button box
|
|
|
|
mLayout = new TQVBoxLayout(this, 0, 4);
|
|
|
|
mButtonBox = new TQHBox(this);
|
|
|
|
mButtonBox->setSpacing( KDialog::spacingHint() );
|
|
|
|
mLayout->addWidget( mButtonBox );
|
|
|
|
|
|
|
|
mBtnMore = new KPushButton( KGuiItem( i18n( "more widgets", "More" ), "button_more" ), mButtonBox );
|
|
|
|
mButtonBox->setStretchFactor( mBtnMore, 0 );
|
|
|
|
|
|
|
|
mBtnFewer = new KPushButton( KGuiItem( i18n( "fewer widgets", "Fewer" ), "button_fewer" ), mButtonBox );
|
|
|
|
mButtonBox->setStretchFactor( mBtnFewer, 0 );
|
|
|
|
|
|
|
|
TQWidget *spacer = new TQWidget( mButtonBox );
|
|
|
|
mButtonBox->setStretchFactor( spacer, 1 );
|
|
|
|
|
|
|
|
// FIXME: We need a KStdGuiItem::clear here and in other locations to be automagically RTL aware - Martijn
|
|
|
|
mBtnClear = new KPushButton( KGuiItem( i18n( "clear widgets", "Clear" ), "locationbar_erase" ), mButtonBox );
|
|
|
|
mButtonBox->setStretchFactor( mBtnClear, 0 );
|
|
|
|
|
|
|
|
//---------- connect everything
|
|
|
|
connect( mBtnMore, TQT_SIGNAL(clicked()),
|
|
|
|
this, TQT_SLOT(slotMore()) );
|
|
|
|
connect( mBtnFewer, TQT_SIGNAL(clicked()),
|
|
|
|
this, TQT_SLOT(slotFewer()) );
|
|
|
|
connect( mBtnClear, TQT_SIGNAL(clicked()),
|
|
|
|
this, TQT_SLOT(slotClear()) );
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
KWidgetLister::~KWidgetLister()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::slotMore()
|
|
|
|
{
|
|
|
|
// the class should make certain that slotMore can't
|
|
|
|
// be called when mMaxWidgets are on screen.
|
|
|
|
assert( (int)mWidgetList.count() < mMaxWidgets );
|
|
|
|
|
|
|
|
addWidgetAtEnd();
|
|
|
|
// adjustSize();
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::slotFewer()
|
|
|
|
{
|
|
|
|
// the class should make certain that slotFewer can't
|
|
|
|
// be called when mMinWidgets are on screen.
|
|
|
|
assert( (int)mWidgetList.count() > mMinWidgets );
|
|
|
|
|
|
|
|
removeLastWidget();
|
|
|
|
// adjustSize();
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::slotClear()
|
|
|
|
{
|
|
|
|
setNumberOfShownWidgetsTo( mMinWidgets );
|
|
|
|
|
|
|
|
// clear remaining widgets
|
|
|
|
TQPtrListIterator<TQWidget> it( mWidgetList );
|
|
|
|
for ( it.toFirst() ; it.current() ; ++it )
|
|
|
|
clearWidget( (*it) );
|
|
|
|
|
|
|
|
// adjustSize();
|
|
|
|
enableControls();
|
|
|
|
emit clearWidgets();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::addWidgetAtEnd(TQWidget *w)
|
|
|
|
{
|
|
|
|
if (!w) w = this->createWidget(this);
|
|
|
|
|
|
|
|
mLayout->insertWidget( mLayout->findWidget( mButtonBox ), w );
|
|
|
|
mWidgetList.append( w );
|
|
|
|
w->show();
|
|
|
|
enableControls();
|
|
|
|
emit widgetAdded();
|
|
|
|
emit widgetAdded(w);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::removeLastWidget()
|
|
|
|
{
|
|
|
|
// The tqlayout will take care that the
|
|
|
|
// widget is removed from screen, too.
|
|
|
|
mWidgetList.removeLast();
|
|
|
|
enableControls();
|
|
|
|
emit widgetRemoved();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::clearWidget( TQWidget* /*aWidget*/ )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
TQWidget* KWidgetLister::createWidget( TQWidget* tqparent )
|
|
|
|
{
|
|
|
|
return new TQWidget( tqparent );
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::setNumberOfShownWidgetsTo( int aNum )
|
|
|
|
{
|
|
|
|
int superfluousWidgets = TQMAX( (int)mWidgetList.count() - aNum, 0 );
|
|
|
|
int missingWidgets = TQMAX( aNum - (int)mWidgetList.count(), 0 );
|
|
|
|
|
|
|
|
// remove superfluous widgets
|
|
|
|
for ( ; superfluousWidgets ; superfluousWidgets-- )
|
|
|
|
removeLastWidget();
|
|
|
|
|
|
|
|
// add missing widgets
|
|
|
|
for ( ; missingWidgets ; missingWidgets-- )
|
|
|
|
addWidgetAtEnd();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KWidgetLister::enableControls()
|
|
|
|
{
|
|
|
|
int count = mWidgetList.count();
|
|
|
|
bool isMaxWidgets = ( count >= mMaxWidgets );
|
|
|
|
bool isMinWidgets = ( count <= mMinWidgets );
|
|
|
|
|
|
|
|
mBtnMore->setEnabled( !isMaxWidgets );
|
|
|
|
mBtnFewer->setEnabled( !isMinWidgets );
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "kwidgetlister.moc"
|