diff options
Diffstat (limited to 'src/kbfxplasmacanvasgroup.cpp')
-rw-r--r-- | src/kbfxplasmacanvasgroup.cpp | 330 |
1 files changed, 330 insertions, 0 deletions
diff --git a/src/kbfxplasmacanvasgroup.cpp b/src/kbfxplasmacanvasgroup.cpp new file mode 100644 index 0000000..044fc18 --- /dev/null +++ b/src/kbfxplasmacanvasgroup.cpp @@ -0,0 +1,330 @@ +/* + * Copyright (C) 2006 + * Siraj Razick <siraj@kdemail.net> + * PhobosK <phobosk@mail.kbfx.org> + * see Also AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License version 2 as + * published by the Free Software Foundation + * + * 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 Library 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 "kbfxplasmacanvasgroup.h" + +KbfxPlasmaCanvasGroup::KbfxPlasmaCanvasGroup () +{ + + m_height = 0; + m_id = 0; +// m_count = 0; + m_name = QString ( "Unknown" ); +// bool m_visible = true; + m_shaded = false; +} + +KbfxPlasmaCanvasGroup::~KbfxPlasmaCanvasGroup () +{ + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { +//qDebug("Trying to delete Item from Rgoup================"); +// if(*it) +// delete (*it); +// itemListMap ().remove (*it); + if ( ( *it ) != 0 ) + if ( deleteItem ( ( *it ) ) == false ) + { + qDebug ( "Deleting failed" ); + } + } + + +} + +KbfxPlasmaCanvasGroup::ItemListMap & KbfxPlasmaCanvasGroup::itemListMap () +{ + static ItemListMap * + map = 0; + if ( !map ) + map = new ItemListMap (); + return *map; +} + +bool +KbfxPlasmaCanvasGroup::deleteItem ( KbfxPlasmaCanvasAbstractItem * it ) +{ +//qDebug("Removing Item from Group"); +// itemListMap ().remove (it); + //delete it; +//return true; + for ( ItemListIter iti ( m_itemList ); *iti; ++iti ) + { + if ( iti == it ) + { + itemListMap ().remove ( *iti ); + if ( m_itemList.removeRef ( it ) ) + { + if ( m_itemList.isEmpty () ) + delete this; + return true; + } + else + { + qDebug ( "deleting Item failed" ); + return false; + } + } + } + return false; +} + +bool +KbfxPlasmaCanvasGroup::addItem ( KbfxPlasmaCanvasAbstractItem * it ) +{ + + if ( it->name().isEmpty() ) + { + qDebug ( "Adding Failed bcos Name Missing" ); + return false; + } + ItemListMap::ConstIterator itn = itemListMap ().find ( it ); + if ( itn != itemListMap ().end () ) + { + qDebug ( "Adding Failed Due to Item not end" ); + return false; + } + for ( ItemListIter itr ( m_itemList ); *itr; ++itr ) + { + if ( ( *itr )->lookup ( it->name() ) == true ) + { + qDebug ( "Adding Failed Due to Item already exisits" ); + return false; + } + } + + + int _x = 0; + int _y = this->boundingRect ().height (); + KbfxPlasmaCanvasGroup *&group = itemListMap () [it]; + if ( group ) + { + if ( group == this ) + return true; + group->m_itemList.removeRef ( it ); + if ( group->m_itemList.isEmpty () ) + delete group; + } + m_itemList.prepend ( it ); + m_height += it->height(); + m_width = it->width(); + it->move ( _x, _y ); + group = this; + + if ( it->type() == KbfxPlasmaCanvasAbstractItem::SEPARATOR ) + m_sepheight = it->height(); + m_count++; + return true; +} + + +void +KbfxPlasmaCanvasGroup::move ( int x, int y ) +{ + + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + ( *it )->move ( ( *it )->x () + x, ( *it )->y () + y ); + } + + +} + +void +KbfxPlasmaCanvasGroup::moveBy ( int x, int y ) +{ + + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + ( *it )->move ( x, y ); + } +} + +void +KbfxPlasmaCanvasGroup::hide() +{ + + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { +// if(*it) + ( *it )->hide(); + } + m_visible = false; + + +} + +void +KbfxPlasmaCanvasGroup::setGroupName ( QString name ) +{ + m_name = name; + delete [] name; +} + +QString +KbfxPlasmaCanvasGroup::name() +{ + return m_name; +} + +void +KbfxPlasmaCanvasGroup::showAll() +{ + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + if ( ( *it )->type() == KbfxPlasmaCanvasAbstractItem::SEPARATOR || m_shaded == false ) + ( *it )->show(); + } + +} + +void +KbfxPlasmaCanvasGroup::show() +{ + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + if ( ( *it )->type() == KbfxPlasmaCanvasAbstractItem::SEPARATOR || m_shaded == false ) + ( *it )->show(); + } + m_visible = true; +} + +void +KbfxPlasmaCanvasGroup::shade () +{ + if ( m_shaded == false ) + { + emit this->groupShade ( this->groupID() ); + + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + // (*it)->move ((*it)->x (), 0); + if ( ( *it )->type() != KbfxPlasmaCanvasAbstractItem::SEPARATOR ) + ( *it )->hide(); + } + m_shaded = true; + return; + } + else if ( m_shaded == true ) + { + int _shadeby = 0; + int _firstItemHeight=0; + + emit this->groupUnShade ( this->groupID() ); + + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + if ( ( *it )->type() != KbfxPlasmaCanvasAbstractItem::SEPARATOR ) + { +// (*it)->move ((*it)->x (), _shadeby); + ( *it )->show(); + _shadeby += ( *it )->height (); + } + else + { + _shadeby = ( *it )->height (); + _firstItemHeight = _shadeby; + + } + } + m_shaded = false; + } +} + +void +KbfxPlasmaCanvasGroup::moveUp ( int y ) +{ + + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + ( *it )->move ( ( *it )->x (), ( ( *it )->y () +m_sepheight ) - y ); + } + + +} + +void +KbfxPlasmaCanvasGroup::moveDown ( int y ) +{ + + for ( ItemListIter it ( m_itemList ); *it; ++it ) + { + ( *it )->move ( ( *it )->x (), ( ( *it )->y () - m_sepheight ) + y ); + } +} + +QRect +KbfxPlasmaCanvasGroup::boundingRect () +{ + if ( this->count () == 0 ) + return QRect ( 0, 0, 0, 0 ); + + QRect r; + for ( ItemListIter it ( m_itemList ); *it; ++it ) + r |= ( *it )->boundingRect (); + return r; +} + +int +KbfxPlasmaCanvasGroup::count () +{ + + return m_itemList.count(); +} + +int +KbfxPlasmaCanvasGroup::height () +{ + + return m_height ; +} + +int +KbfxPlasmaCanvasGroup::width () +{ + + return m_width; +} + + +KbfxPlasmaCanvasGroup * +KbfxPlasmaCanvasGroup::groupContaining ( KbfxPlasmaCanvasAbstractItem * item ) +{ + ItemListMap::ConstIterator it = itemListMap ().find ( item ); + if ( it == itemListMap ().end () ) + return 0; + else + return *it; +} + +uint +KbfxPlasmaCanvasGroup::groupID() +{ + return m_id; +} + + +void KbfxPlasmaCanvasGroup::setGroupID ( uint e_id ) +{ + m_id = e_id; +} + +#include "kbfxplasmacanvasgroup.moc" |