/** * This file is part of the System Settings package * Copyright (C) 2005 Benjamin C Meyer (ben+systempreferences at meyerhome 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 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "modulesview.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "kcmsearch.h" #include "moduleiconitem.h" #include "kcmodulemenu.h" ModulesView::ModulesView( KCModuleMenu *rootMenu, const TQString &menuPath, TQWidget *tqparent, const char *name ) : TQWidget( tqparent, name ), rootMenu( NULL ) { this->rootMenu = rootMenu; this->menuPath = menuPath; TQVBoxLayout *tqlayout = new TQVBoxLayout( this, 11, 6, "tqlayout" ); displayName = this->rootMenu->caption; TQValueList subMenus = rootMenu->menuList(menuPath); TQValueList::iterator it; for ( it = subMenus.begin(); it != subMenus.end(); ++it ){ if( !(*it).menu ) continue; // After the first time around add a line if( it != subMenus.begin() ){ TQFrame *line = new TQFrame( this, "line"); line->setFrameShadow( TQFrame::Sunken ); line->setFrameShape( TQFrame::HLine ); tqlayout->addWidget( line ); } // Build the row of modules/icons createRow( (*it).subMenu, tqlayout ); } tqlayout->addStretch(1); // Make empty iconView for the search widget if( groups.count()==0 ) { RowIconView *iconView = new RowIconView( this, "groupiconview" ); iconView->setLineWidth( 0 ); groups.append( iconView ); } setPaletteBackgroundColor( groups[0]->paletteBackgroundColor() ); // Align them up! { uint most = 0; TQValueList::iterator it; for ( it = groups.begin(); it != groups.end(); ++it ){ TQIconViewItem *item = (*it)->firstItem(); while( item ) { if(item->width() > most) most = item->width(); item = item->nextItem(); } } for ( it = groups.begin(); it != groups.end(); ++it ) (*it)->setGridX(most); } } ModulesView::~ModulesView() { } void ModulesView::createRow( const TQString &tqparentPath, TQBoxLayout *boxLayout ) { KServiceGroup::Ptr group = KServiceGroup::group( tqparentPath ); if ( !group ){ kdDebug() << "Invalid Group \"" << tqparentPath << "\". Check your installation."<< endl; return; } // Make header TQHBoxLayout *rowLayout = new TQHBoxLayout( 0, 0, 6, "rowLayout" ); // Heaer Icon TQLabel *icon = new TQLabel( this, "groupicon" ); icon->setPixmap( SmallIcon( group->icon() ) ); icon->tqsetSizePolicy( TQSizePolicy( (TQSizePolicy::SizeType)1, (TQSizePolicy::SizeType)5, 0, 0, icon->sizePolicy().hasHeightForWidth() ) ); rowLayout->addWidget( icon ); // Header Name TQLabel *textLabel = new TQLabel( this, "groupcaption" ); textLabel->setText( group->caption() ); textLabel->tqsetSizePolicy( TQSizePolicy( (TQSizePolicy::SizeType)7, (TQSizePolicy::SizeType)5, 0, 0, textLabel->sizePolicy().hasHeightForWidth())); TQFont textLabel_font( textLabel->font() ); textLabel_font.setBold( true ); textLabel->setFont( textLabel_font ); rowLayout->addWidget( textLabel ); boxLayout->addLayout( rowLayout ); // Make IconView RowIconView *iconView = new RowIconView( this, "groupiconview" ); iconView->setFrameShape( RowIconView::StyledPanel ); iconView->setLineWidth( 0 ); iconView->setSpacing( 0 ); iconView->setMargin( 0 ); iconView->setItemsMovable( false ); iconView->setSelectionMode(TQIconView::NoSelection); groups.append( iconView ); connect(iconView, TQT_SIGNAL( clicked( TQIconViewItem* ) ), this, TQT_SIGNAL( itemSelected( TQIconViewItem* ) ) ); boxLayout->addWidget( iconView ); // Add all the items in their proper order TQValueList list = rootMenu->menuList( tqparentPath ); TQValueList::iterator it; for ( it = list.begin(); it != list.end(); ++it ){ if( !(*it).menu ) (void)new ModuleIconItem( iconView, (*it).item ); else { TQString path = (*it).subMenu; KServiceGroup::Ptr group = KServiceGroup::group( path ); if ( group ) { ModuleIconItem *item = new ModuleIconItem( ((KIconView*)iconView), group->caption(), group->icon() ); item->modules = rootMenu->modules( path ); } } } // Force the height for those items that have two words. iconView->setMinimumHeight( iconView->tqminimumSizeHint().height() ); } void ModulesView::clearSelection() { TQValueList::iterator it; for ( it = groups.begin(); it != groups.end(); ++it ) { (*it)->clearSelection(); } } #include "modulesview.moc"