benoitrigolleau@56: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ benoitrigolleau@56: benoitrigolleau@56: /* benoitrigolleau@56: Sound Access benoitrigolleau@56: EASAIER client application. benoitrigolleau@56: Silogic 2007. Benoit Rigolleau. benoitrigolleau@56: benoitrigolleau@56: This program is free software; you can redistribute it and/or benoitrigolleau@56: modify it under the terms of the GNU General Public License as benoitrigolleau@56: published by the Free Software Foundation; either version 2 of the benoitrigolleau@56: License, or (at your option) any later version. See the file benoitrigolleau@56: COPYING included with this distribution for more information. benoitrigolleau@56: */ benoitrigolleau@56: benoitrigolleau@56: #include "ItemContainer.h" benoitrigolleau@56: benoitrigolleau@56: #include benoitrigolleau@56: #include benoitrigolleau@56: #include benoitrigolleau@56: #include benoitrigolleau@56: benoitrigolleau@56: ItemContainer::ItemContainer(QWidget *parent) : QWidget(parent){ benoitrigolleau@56: benoitrigolleau@56: m_linkedList = new QLinkedList(); benoitrigolleau@56: m_map = new QMap(); benoitrigolleau@56: benoitrigolleau@56: m_cpt=0; benoitrigolleau@56: benoitrigolleau@56: QVBoxLayout *mainlayout = new QVBoxLayout(); benoitrigolleau@56: m_itemLayout = new QVBoxLayout; benoitrigolleau@56: mainlayout->addLayout(m_itemLayout); benoitrigolleau@56: mainlayout->addStretch(); benoitrigolleau@56: benoitrigolleau@56: this->setLayout(mainlayout); benoitrigolleau@56: benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::addItem(GenericItemList *item){ benoitrigolleau@56: m_map->insert(m_cpt,item); benoitrigolleau@56: m_linkedList->append(m_cpt); benoitrigolleau@56: item->setIndex(m_cpt); benoitrigolleau@56: benoitrigolleau@56: std::cerr << "add Item" << std::endl; benoitrigolleau@56: connect(item, SIGNAL(itemDropped(int, int)), benoitrigolleau@56: this, SLOT(moveItem(int, int))); benoitrigolleau@56: connect(item, SIGNAL(selected(int)), benoitrigolleau@56: this, SLOT(newItemSelected(int))); benoitrigolleau@56: benoitrigolleau@56: m_itemLayout->addWidget(item); benoitrigolleau@56: m_cpt++; benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::setSelectedItem(QVariant &data){ benoitrigolleau@56: benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::removeSelectedItem(){ benoitrigolleau@56: //QLindList::iterator iter = m_linkedList->find(x); benoitrigolleau@56: benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::reset() benoitrigolleau@56: { benoitrigolleau@56: QLayoutItem *child; benoitrigolleau@56: while ((child = m_itemLayout->takeAt(0)) != 0) { benoitrigolleau@56: delete child->widget(); benoitrigolleau@56: } benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::removeAllItems(){ benoitrigolleau@56: m_linkedList->clear(); benoitrigolleau@56: reset(); benoitrigolleau@56: m_map->clear(); benoitrigolleau@56: m_cpt=0; benoitrigolleau@56: benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::setCurrentIndex(int i){ benoitrigolleau@56: benoitrigolleau@56: benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: QLinkedList::iterator ItemContainer::find(int value) benoitrigolleau@56: { benoitrigolleau@56: QLinkedList::iterator iter; benoitrigolleau@56: for(iter = m_linkedList->begin(); iter != m_linkedList->end(); iter++){ benoitrigolleau@56: if(*iter == value) benoitrigolleau@56: return iter; benoitrigolleau@56: } benoitrigolleau@56: return m_linkedList->end(); benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::reorganize(){ benoitrigolleau@56: for (int i = 0; i < m_itemLayout->count(); ++i){ benoitrigolleau@56: m_itemLayout->removeItem(m_itemLayout->itemAt(i)); benoitrigolleau@56: } benoitrigolleau@56: QLinkedList::iterator iter; benoitrigolleau@56: for(iter = m_linkedList->begin(); iter != m_linkedList->end(); iter++){ benoitrigolleau@56: m_itemLayout->addWidget(m_map->value(*iter)); benoitrigolleau@56: } benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: /********* SLOTS **************/ benoitrigolleau@56: void ItemContainer::moveItem(int idItem1, int idItem2){ benoitrigolleau@56: m_linkedList->removeAll(idItem1); benoitrigolleau@56: QLinkedList::iterator iter = find( idItem2); benoitrigolleau@56: m_linkedList->insert(iter,idItem1); benoitrigolleau@56: reorganize(); benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::newItemSelected(int idItem){ benoitrigolleau@56: benoitrigolleau@56: GenericItemList* item = m_map->value(m_currentItem); benoitrigolleau@56: if(item!=0){ benoitrigolleau@56: item->setBackgroundRole(QPalette::Window); benoitrigolleau@56: item->setForegroundRole(QPalette::WindowText); benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: m_currentItem=idItem; benoitrigolleau@56: benoitrigolleau@56: item = m_map->value(m_currentItem); benoitrigolleau@56: if(item!=0){ benoitrigolleau@56: item->setAutoFillBackground(true); benoitrigolleau@56: item->setBackgroundRole(QPalette::Highlight); benoitrigolleau@56: item->setForegroundRole(QPalette::HighlightedText); benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: // il va faloir changer l'indice je pense. benoitrigolleau@56: // si ça plante lorsque l'on supprime un item, ça peut etre ça benoitrigolleau@56: emit currentChanged(m_currentItem); benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::upCurrentItem(){ benoitrigolleau@56: //return if item count <=1 benoitrigolleau@56: if (m_linkedList->count()<= 1){ benoitrigolleau@56: return; benoitrigolleau@56: } benoitrigolleau@56: // return if current item is on top benoitrigolleau@56: QLinkedList::iterator iter; benoitrigolleau@56: iter = m_linkedList->begin(); benoitrigolleau@56: if(*iter==m_currentItem){ benoitrigolleau@56: return; benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: // move item benoitrigolleau@56: for(iter = m_linkedList->begin()+1; iter != m_linkedList->end(); iter++){ benoitrigolleau@56: if(*iter == m_currentItem){ benoitrigolleau@56: int itemOnTop = *(iter-1); benoitrigolleau@56: *(iter-1)=m_currentItem; benoitrigolleau@56: *iter = itemOnTop; benoitrigolleau@56: } benoitrigolleau@56: } benoitrigolleau@56: reorganize(); benoitrigolleau@56: benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::downCurrentItem(){ benoitrigolleau@56: //return if item count <=1 benoitrigolleau@56: if (m_linkedList->count()<= 1){ benoitrigolleau@56: return; benoitrigolleau@56: } benoitrigolleau@56: // return if current item is on bottom benoitrigolleau@56: QLinkedList::iterator iter; benoitrigolleau@56: iter = m_linkedList->end(); benoitrigolleau@56: if(*iter==m_currentItem){ benoitrigolleau@56: return; benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: //move item benoitrigolleau@56: // It's crazy !!!!!! this line run ..... but, it's impossible !!!! benoitrigolleau@56: // the good line is this one : for(iter = m_linkedList->end()-1; iter != m_linkedList->begin(); iter--){ benoitrigolleau@56: // but I don't handerstand why, it don't run. benoitrigolleau@56: // @##*$$# QT4 or C++ !!!!!!!!! benoitrigolleau@56: for(iter = m_linkedList->end()-2; iter != m_linkedList->begin()-1; iter--){ benoitrigolleau@56: if(*iter == m_currentItem){ benoitrigolleau@56: int itemOnBottom = *(iter+1); benoitrigolleau@56: *(iter+1)=m_currentItem; benoitrigolleau@56: *iter = itemOnBottom; benoitrigolleau@56: } benoitrigolleau@56: } benoitrigolleau@56: reorganize(); benoitrigolleau@56: } benoitrigolleau@56: benoitrigolleau@56: void ItemContainer::openConfigBoxForCurrentItem(){ benoitrigolleau@56: GenericItemList* item = m_map->value(m_currentItem); benoitrigolleau@56: if(item!=0){ benoitrigolleau@56: item->configAction(); benoitrigolleau@56: } benoitrigolleau@56: }