annotate widgets/ItemContainer.cpp @ 56:81921835ddf1

first layer list pre-version
author benoitrigolleau
date Wed, 23 May 2007 13:09:19 +0000
parents
children 57c85a9d9b4a
rev   line source
benoitrigolleau@56 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
benoitrigolleau@56 2
benoitrigolleau@56 3 /*
benoitrigolleau@56 4 Sound Access
benoitrigolleau@56 5 EASAIER client application.
benoitrigolleau@56 6 Silogic 2007. Benoit Rigolleau.
benoitrigolleau@56 7
benoitrigolleau@56 8 This program is free software; you can redistribute it and/or
benoitrigolleau@56 9 modify it under the terms of the GNU General Public License as
benoitrigolleau@56 10 published by the Free Software Foundation; either version 2 of the
benoitrigolleau@56 11 License, or (at your option) any later version. See the file
benoitrigolleau@56 12 COPYING included with this distribution for more information.
benoitrigolleau@56 13 */
benoitrigolleau@56 14
benoitrigolleau@56 15 #include "ItemContainer.h"
benoitrigolleau@56 16
benoitrigolleau@56 17 #include <QtAlgorithms>
benoitrigolleau@56 18 #include <iostream>
benoitrigolleau@56 19 #include <QList>
benoitrigolleau@56 20 #include <QPalette>
benoitrigolleau@56 21
benoitrigolleau@56 22 ItemContainer::ItemContainer(QWidget *parent) : QWidget(parent){
benoitrigolleau@56 23
benoitrigolleau@56 24 m_linkedList = new QLinkedList<int>();
benoitrigolleau@56 25 m_map = new QMap<int,GenericItemList*>();
benoitrigolleau@56 26
benoitrigolleau@56 27 m_cpt=0;
benoitrigolleau@56 28
benoitrigolleau@56 29 QVBoxLayout *mainlayout = new QVBoxLayout();
benoitrigolleau@56 30 m_itemLayout = new QVBoxLayout;
benoitrigolleau@56 31 mainlayout->addLayout(m_itemLayout);
benoitrigolleau@56 32 mainlayout->addStretch();
benoitrigolleau@56 33
benoitrigolleau@56 34 this->setLayout(mainlayout);
benoitrigolleau@56 35
benoitrigolleau@56 36 }
benoitrigolleau@56 37
benoitrigolleau@56 38 void ItemContainer::addItem(GenericItemList *item){
benoitrigolleau@56 39 m_map->insert(m_cpt,item);
benoitrigolleau@56 40 m_linkedList->append(m_cpt);
benoitrigolleau@56 41 item->setIndex(m_cpt);
benoitrigolleau@56 42
benoitrigolleau@56 43 std::cerr << "add Item" << std::endl;
benoitrigolleau@56 44 connect(item, SIGNAL(itemDropped(int, int)),
benoitrigolleau@56 45 this, SLOT(moveItem(int, int)));
benoitrigolleau@56 46 connect(item, SIGNAL(selected(int)),
benoitrigolleau@56 47 this, SLOT(newItemSelected(int)));
benoitrigolleau@56 48
benoitrigolleau@56 49 m_itemLayout->addWidget(item);
benoitrigolleau@56 50 m_cpt++;
benoitrigolleau@56 51 }
benoitrigolleau@56 52
benoitrigolleau@56 53 void ItemContainer::setSelectedItem(QVariant &data){
benoitrigolleau@56 54
benoitrigolleau@56 55 }
benoitrigolleau@56 56
benoitrigolleau@56 57 void ItemContainer::removeSelectedItem(){
benoitrigolleau@56 58 //QLindList<int>::iterator iter = m_linkedList->find(x);
benoitrigolleau@56 59
benoitrigolleau@56 60 }
benoitrigolleau@56 61
benoitrigolleau@56 62 void ItemContainer::reset()
benoitrigolleau@56 63 {
benoitrigolleau@56 64 QLayoutItem *child;
benoitrigolleau@56 65 while ((child = m_itemLayout->takeAt(0)) != 0) {
benoitrigolleau@56 66 delete child->widget();
benoitrigolleau@56 67 }
benoitrigolleau@56 68 }
benoitrigolleau@56 69
benoitrigolleau@56 70 void ItemContainer::removeAllItems(){
benoitrigolleau@56 71 m_linkedList->clear();
benoitrigolleau@56 72 reset();
benoitrigolleau@56 73 m_map->clear();
benoitrigolleau@56 74 m_cpt=0;
benoitrigolleau@56 75
benoitrigolleau@56 76 }
benoitrigolleau@56 77
benoitrigolleau@56 78 void ItemContainer::setCurrentIndex(int i){
benoitrigolleau@56 79
benoitrigolleau@56 80
benoitrigolleau@56 81 }
benoitrigolleau@56 82
benoitrigolleau@56 83 QLinkedList<int>::iterator ItemContainer::find(int value)
benoitrigolleau@56 84 {
benoitrigolleau@56 85 QLinkedList<int>::iterator iter;
benoitrigolleau@56 86 for(iter = m_linkedList->begin(); iter != m_linkedList->end(); iter++){
benoitrigolleau@56 87 if(*iter == value)
benoitrigolleau@56 88 return iter;
benoitrigolleau@56 89 }
benoitrigolleau@56 90 return m_linkedList->end();
benoitrigolleau@56 91 }
benoitrigolleau@56 92
benoitrigolleau@56 93 void ItemContainer::reorganize(){
benoitrigolleau@56 94 for (int i = 0; i < m_itemLayout->count(); ++i){
benoitrigolleau@56 95 m_itemLayout->removeItem(m_itemLayout->itemAt(i));
benoitrigolleau@56 96 }
benoitrigolleau@56 97 QLinkedList<int>::iterator iter;
benoitrigolleau@56 98 for(iter = m_linkedList->begin(); iter != m_linkedList->end(); iter++){
benoitrigolleau@56 99 m_itemLayout->addWidget(m_map->value(*iter));
benoitrigolleau@56 100 }
benoitrigolleau@56 101 }
benoitrigolleau@56 102
benoitrigolleau@56 103 /********* SLOTS **************/
benoitrigolleau@56 104 void ItemContainer::moveItem(int idItem1, int idItem2){
benoitrigolleau@56 105 m_linkedList->removeAll(idItem1);
benoitrigolleau@56 106 QLinkedList<int>::iterator iter = find( idItem2);
benoitrigolleau@56 107 m_linkedList->insert(iter,idItem1);
benoitrigolleau@56 108 reorganize();
benoitrigolleau@56 109 }
benoitrigolleau@56 110
benoitrigolleau@56 111 void ItemContainer::newItemSelected(int idItem){
benoitrigolleau@56 112
benoitrigolleau@56 113 GenericItemList* item = m_map->value(m_currentItem);
benoitrigolleau@56 114 if(item!=0){
benoitrigolleau@56 115 item->setBackgroundRole(QPalette::Window);
benoitrigolleau@56 116 item->setForegroundRole(QPalette::WindowText);
benoitrigolleau@56 117 }
benoitrigolleau@56 118
benoitrigolleau@56 119 m_currentItem=idItem;
benoitrigolleau@56 120
benoitrigolleau@56 121 item = m_map->value(m_currentItem);
benoitrigolleau@56 122 if(item!=0){
benoitrigolleau@56 123 item->setAutoFillBackground(true);
benoitrigolleau@56 124 item->setBackgroundRole(QPalette::Highlight);
benoitrigolleau@56 125 item->setForegroundRole(QPalette::HighlightedText);
benoitrigolleau@56 126 }
benoitrigolleau@56 127
benoitrigolleau@56 128 // il va faloir changer l'indice je pense.
benoitrigolleau@56 129 // si ça plante lorsque l'on supprime un item, ça peut etre ça
benoitrigolleau@56 130 emit currentChanged(m_currentItem);
benoitrigolleau@56 131 }
benoitrigolleau@56 132
benoitrigolleau@56 133 void ItemContainer::upCurrentItem(){
benoitrigolleau@56 134 //return if item count <=1
benoitrigolleau@56 135 if (m_linkedList->count()<= 1){
benoitrigolleau@56 136 return;
benoitrigolleau@56 137 }
benoitrigolleau@56 138 // return if current item is on top
benoitrigolleau@56 139 QLinkedList<int>::iterator iter;
benoitrigolleau@56 140 iter = m_linkedList->begin();
benoitrigolleau@56 141 if(*iter==m_currentItem){
benoitrigolleau@56 142 return;
benoitrigolleau@56 143 }
benoitrigolleau@56 144
benoitrigolleau@56 145 // move item
benoitrigolleau@56 146 for(iter = m_linkedList->begin()+1; iter != m_linkedList->end(); iter++){
benoitrigolleau@56 147 if(*iter == m_currentItem){
benoitrigolleau@56 148 int itemOnTop = *(iter-1);
benoitrigolleau@56 149 *(iter-1)=m_currentItem;
benoitrigolleau@56 150 *iter = itemOnTop;
benoitrigolleau@56 151 }
benoitrigolleau@56 152 }
benoitrigolleau@56 153 reorganize();
benoitrigolleau@56 154
benoitrigolleau@56 155 }
benoitrigolleau@56 156
benoitrigolleau@56 157 void ItemContainer::downCurrentItem(){
benoitrigolleau@56 158 //return if item count <=1
benoitrigolleau@56 159 if (m_linkedList->count()<= 1){
benoitrigolleau@56 160 return;
benoitrigolleau@56 161 }
benoitrigolleau@56 162 // return if current item is on bottom
benoitrigolleau@56 163 QLinkedList<int>::iterator iter;
benoitrigolleau@56 164 iter = m_linkedList->end();
benoitrigolleau@56 165 if(*iter==m_currentItem){
benoitrigolleau@56 166 return;
benoitrigolleau@56 167 }
benoitrigolleau@56 168
benoitrigolleau@56 169 //move item
benoitrigolleau@56 170 // It's crazy !!!!!! this line run ..... but, it's impossible !!!!
benoitrigolleau@56 171 // the good line is this one : for(iter = m_linkedList->end()-1; iter != m_linkedList->begin(); iter--){
benoitrigolleau@56 172 // but I don't handerstand why, it don't run.
benoitrigolleau@56 173 // @##*$$# QT4 or C++ !!!!!!!!!
benoitrigolleau@56 174 for(iter = m_linkedList->end()-2; iter != m_linkedList->begin()-1; iter--){
benoitrigolleau@56 175 if(*iter == m_currentItem){
benoitrigolleau@56 176 int itemOnBottom = *(iter+1);
benoitrigolleau@56 177 *(iter+1)=m_currentItem;
benoitrigolleau@56 178 *iter = itemOnBottom;
benoitrigolleau@56 179 }
benoitrigolleau@56 180 }
benoitrigolleau@56 181 reorganize();
benoitrigolleau@56 182 }
benoitrigolleau@56 183
benoitrigolleau@56 184 void ItemContainer::openConfigBoxForCurrentItem(){
benoitrigolleau@56 185 GenericItemList* item = m_map->value(m_currentItem);
benoitrigolleau@56 186 if(item!=0){
benoitrigolleau@56 187 item->configAction();
benoitrigolleau@56 188 }
benoitrigolleau@56 189 }