--- /dev/null
+#include <QtGui>
+#include <QDebug>
+
+#include "contactwidget.h"
+#include "contactwidgetitem.h"
+#include "groupwidgetitem.h"
+#include "contactinterface.h"
+#include "utility.h"
+
+
+ContactWidget::ContactWidget(QWidget *parent) :
+ QWidget(parent)
+{
+ //qDebug() << "ContactWidget::ContactWidget(QWidget *parent), Entry";
+ contact_items = new QVector<ContactWidgetItem*>;
+ contact_items_selected = new QVector<ContactWidgetItem*>;
+}
+
+ContactWidget::~ContactWidget()
+{
+ //qDebug() << "ContactWidget::~ContactWidget(), Entry";
+ destroyContactWidget();
+}
+
+void ContactWidget::setItemObserver()
+{
+ ContactInterface::getInstance()->setItemObserver( this );
+}
+
+void ContactWidget::initContactWidget()
+{
+ //qDebug() << "ContactWidget::initContactWidget(), Entry";
+
+ setItemObserver();
+ ContactInterface::getInstance()->getAllContactsFromXml();
+}
+
+void ContactWidget::destroyContactWidget()
+{
+ //qDebug() << ("ContactWidget::destroyContactWidget(), Entry");
+
+ for (int i = 0; i < contact_items->size(); ++i)
+ {
+ contact_items->remove(i);
+ }
+ contact_items->clear();
+ delete contact_items;
+ contact_items = NULL;
+
+ for (int i = 0; i < contact_items_selected->size(); ++i)
+ {
+ contact_items_selected->remove(i);
+ }
+ contact_items_selected->clear();
+ delete contact_items_selected;
+ contact_items_selected = NULL;
+
+ //qDebug() << ("ContactWidget::destroyContactWidget(), Exit");
+}
+
+int ContactWidget::findGroup(const QString &groupname)
+{
+ for( int i = 0; i < contact_items->size(); i++ )
+ {
+ if( contact_items->at(i)->m_isGroup )
+ {
+ if( groupname == (static_cast<GroupWidgetItem*>(contact_items->at(i)))->group_name )
+ return i;
+ }
+ }
+ return -1;
+}
+
+// from ItemObserver
+void ContactWidget::refreshContactsList()
+{
+ update();
+}
+
+// from ItemObserver
+void ContactWidget::removeContact(Item *contact)
+{
+ for (int i = 0; i < contact_items->size(); ++i)
+ {
+ if( contact->uid == contact_items->at(i)->uid && contact->group_owner == contact_items->at(i)->group_owner )
+ {
+ disconnect( contact_items->at(i), SIGNAL( itemUpdate() ), this, SLOT( update() ) );
+ disconnect( contact_items->at(i), SIGNAL( itemSelected( ContactWidgetItem*, bool) ), this, SLOT( contactItemSelected( ContactWidgetItem*, bool ) ) );
+ contact_items->remove(i);
+ break;
+ }
+ }
+}
+
+// from ItemObserver
+void ContactWidget::removeAllContacts()
+{
+ for (int i = 0; i < contact_items->size(); ++i)
+ {
+ delete contact_items->at(i);
+ }
+ contact_items->clear();
+}
+
+// from ItemObserver
+void ContactWidget::addGroup( Item *item )
+{
+ //qDebug() << "ContactWidget::addGroup( Item *item ), Entry";
+ GroupWidgetItem *group = new GroupWidgetItem(this);
+ group->group_name = item->group_name;
+ group->label_group_name->setText( item->group_name );
+
+ contact_items->append( group );
+
+ connect( group, SIGNAL( itemUpdate() ), this, SLOT( update() ) );
+ connect( group, SIGNAL( itemSelected( ContactWidgetItem*, bool) ), this, SLOT( contactItemSelected( ContactWidgetItem*, bool ) ) );
+
+ update();
+}
+
+// from ItemObserver
+void ContactWidget::addContact( Item *item )
+{
+ addContact(item, -1);
+}
+
+void ContactWidget::addContact(ContactWidgetItem *contact, int index)
+{
+ //qDebug() << ("ContactWidget::addContact(ContactWidgetItem *contact), Entry");
+ //qDebug() << "contact is" << (int)contact;
+ if( -1 == index || index >= contact_items->size() )
+ {
+ contact_items->append(contact);
+ }else
+ {
+ contact_items->insert( ++index, contact);
+ }
+
+ connect( contact, SIGNAL( itemUpdate() ), this, SLOT( update() ) );
+ connect( contact, SIGNAL( itemSelected( ContactWidgetItem*, bool) ), this, SLOT( contactItemSelected( ContactWidgetItem*, bool ) ) );
+}
+
+void ContactWidget::addContact( Item *item, int groupindex )
+{
+ //qDebug() << "ContactWidget::addContact( Item *item, int groupindex ), Entry";
+ if( item->m_isGroup )
+ {
+ GroupWidgetItem *contact = new GroupWidgetItem(this);
+
+ contact->label_group_name->setText( item->group_name );
+ contact->group_name = item->group_name;
+
+ addContact( (static_cast<ContactWidgetItem*>(contact)), groupindex );
+ }else
+ {
+ ContactWidgetItem *contact = new ContactWidgetItem(this);
+
+ contact->label_fullname->setText( item->full_name );
+ contact->full_name = item->full_name;
+
+ contact->label_mobile_number->setText( item->mobile_number );
+ contact->mobile_number = item->mobile_number;
+
+ contact->group_owner = item->group_owner;
+
+ contact->uid = item->uid;
+
+ addContact(contact, groupindex);
+ }
+}
+
+// from ItemObserver
+void ContactWidget::addContact( Item *item, const QString &groupname )
+{
+ int groupindex = findGroup( groupname );
+ addContact( item, groupindex);
+}
+
+// from ItemObserver
+void ContactWidget::addContact( ItemListPtr items, const QString &groupname )
+{
+ //qDebug() << "addContact(const QString &groupname, Item &item)";
+ int groupindex = findGroup( groupname );
+
+ for( int i = 0; i < items.size(); i++ )
+ {
+ Item *item = items.at(i);
+
+ addContact( item, groupindex);
+ }
+ update();
+}
+
+// from ItemObserver
+void ContactWidget::addContact( ItemList items, const QString &groupname )
+{
+ //qDebug() << "addContact(const QString &groupname, Item &item)";
+ int groupindex = findGroup( groupname );
+
+ for( int i = 0; i < items.size(); i++ )
+ {
+ Item item = items.at(i);
+
+ addContact( &item, groupindex);
+ }
+ update();
+}
+
+void ContactWidget::cleanContactList()
+{
+ for (int i = 0; i < contact_items->size(); ++i)
+ {
+ disconnect( contact_items->at(i), SIGNAL( itemUpdate() ), this, SLOT( update() ) );
+ disconnect( contact_items->at(i), SIGNAL( itemSelected( ContactWidgetItem*, bool) ), this, SLOT( contactItemSelected( ContactWidgetItem*, bool ) ) );
+ }
+ contact_items->clear();
+}
+
+void ContactWidget::cleanSelectedContactList()
+{
+ contact_items_selected->clear();
+
+ resetContacts();
+ update();
+}
+
+void ContactWidget::refreshContactList()
+{
+ //qDebug() << "ContactWidget::refreshContactList()";
+ cleanContactList();
+
+ ContactInterface::getInstance()->getAllContactsFromXml();
+ for (int i = 0; i < contact_items->size(); ++i)
+ {
+ connect( contact_items->at(i), SIGNAL( itemUpdate() ), this, SLOT( update() ) );
+ connect( contact_items->at(i), SIGNAL( itemSelected( ContactWidgetItem*, bool) ), this, SLOT( contactItemSelected( ContactWidgetItem*, bool ) ) );
+ }
+
+ update();
+}
+
+void ContactWidget::resetContacts()
+{
+ //qDebug() << ("ContactWidget::resetContacts(), Entry");
+ for (int i = 0; i < contact_items->size(); ++i)
+ {
+ if( contact_items->at(i)->m_isGroup )
+ {
+ (static_cast<GroupWidgetItem*>(contact_items->at(i)))->reSet();
+ }else
+ {
+ contact_items->at(i)->reSet();
+ }
+ }
+}
+
+void ContactWidget::update()
+{
+ update( contact_items );
+}
+
+void ContactWidget::update(QVector<ContactWidgetItem *> *items)
+{
+ //qDebug() << ("ContactWidget::update(), Entry");
+
+ bool group_open = false;
+ int size = items->size();
+ //qDebug() << "size is" << items->size();
+ int x = 0;
+ int y = 0;
+ for( int i = 0; i < size; i++ )
+ {
+ ContactWidgetItem *item = items->at(i);
+ if( item->m_isGroup )
+ {
+ //qDebug() << "ContactWidget::update(), item is group";
+ group_open = false;
+ x = 0;
+ y = (static_cast<GroupWidgetItem*>(item))->move(x, y, this);
+ if( (static_cast<GroupWidgetItem*>(item))->m_isOpenContactList )
+ {
+ x += CONTACT_ITEM_MARGE_WIDTH;
+ group_open = true;
+ //qDebug() << "group open is true. x =" << x;
+ }
+ (static_cast<GroupWidgetItem*>(item))->showAll();
+ y += MARGE_HEIGH;
+ }else
+ {
+ //qDebug() << "ContactWidget::update(), item is contact";
+ if( group_open )
+ {
+ y = item->move(x, y, this);
+ item->showAll();
+ y += MARGE_HEIGH;
+ }else
+ {
+ item->hideAll();
+ }
+ }
+ }
+ resize( qApp->desktop()->rect().width(), y );
+
+ //qDebug() << ("ContactWidget::update(), Exit");
+}
+
+void ContactWidget::paintEvent(QPaintEvent *event)
+{
+ //qDebug() << "ContactWidget::paintEvent(QPaintEvent *event), Entry";
+
+ QPainter painter(this);
+ for (int i = 0; i < contact_items->size(); i++) {
+ //ContactWidgetItem *item = contact_items->at(i);
+ //painter.fillRect(0, item->m_x, width(), item->m_height, QBrush(item->m_color));
+ //qDebug() << "paint item at:" << i << "m_x=" << item->m_x << "m_height=" << item->m_height;
+ }
+ event->accept();
+}
+
+void ContactWidget::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED( event )
+ //qDebug() << ("ContactWidget::resizeEvent(QResizeEvent *event), Entry");
+}
+
+void ContactWidget::contactItemSelected( ContactWidgetItem *item, bool selected )
+{
+ //qDebug() << ("ContactWidget::contactItemSelected( ContactWidgetItem *item, bool selected ), Entry");
+ //qDebug() << "item is" << (int)item;
+
+ if( selected )
+ {
+ //qDebug() << "contact_items_selected->append(item)" << item->full_name;
+ if( item->m_isGroup )
+ {
+ QString str = (static_cast<GroupWidgetItem*>(item))->group_name;
+ for( int i = 0; i < contact_items->size(); i++ )
+ {
+ if( contact_items->at(i)->group_owner == str )
+ {
+ contact_items_selected->append( contact_items->at(i) );
+ contact_items->at(i)->setSelected(true);
+ }
+ }
+ }else
+ {
+ contact_items_selected->append(item);
+ checkGroupPartOfSelected(item);
+ }
+ }else
+ {
+ if( item->m_isGroup )
+ {
+ QString str = (static_cast<GroupWidgetItem*>(item))->group_name;
+ for( int i = 0; i < contact_items_selected->size(); i++ )
+ {
+ if( contact_items_selected->at(i)->group_owner == str )
+ {
+ contact_items_selected->remove( i );
+ contact_items->at(i)->setSelected(false);
+ }
+ }
+ }else
+ {
+ for( int i = 0; i < contact_items_selected->size(); i++ )
+ {
+ if( contact_items_selected->at(i)->uid == item->uid )
+ {
+ contact_items_selected->remove( i );
+ checkGroupPartOfSelected( item );
+ break;
+ }
+ }
+ }
+ }
+ Q_EMIT validRecycle( isValidRecycle() );
+}
+
+void ContactWidget::checkGroupPartOfSelected(ContactWidgetItem* item)
+{
+ bool partselected = false;
+ GroupWidgetItem* group = NULL;
+ QString str = item->group_owner;
+ for( int i = 0; i < contact_items->size(); i++ )
+ {
+ if( contact_items->at(i)->m_isGroup && str == (static_cast<GroupWidgetItem*>(contact_items->at(i)))->group_name )
+ {
+ group = (static_cast<GroupWidgetItem*>(contact_items->at(i)));
+ break;
+ }
+ }
+
+ for( int i = 0; i < contact_items_selected->size(); i++ )
+ {
+ if( group->group_name == contact_items_selected->at(i)->group_owner )
+ {
+ partselected = true;
+ break;
+ }
+ }
+ if( partselected )
+ {
+ group->partOfAllSeleted();
+ }else
+ {
+ group->setSelected(false);
+ }
+}
+
+QVector<ContactWidgetItem*>* ContactWidget::getSelectedContacts()
+{
+ return contact_items_selected;
+}
+
+bool ContactWidget::isValidRecycle()
+{
+ if( contact_items_selected->size() > 0 )
+ return true;
+ return false;
+}
+
+void ContactWidget::removeSelectedContact()
+{
+ ItemListPtr list;
+ for( int i = 0; i < contact_items_selected->size(); i++ )
+ {
+ ContactWidgetItem *contact = contact_items_selected->at(i);
+ if( contact->m_isGroup )
+ {
+ continue;
+ }
+
+ Item *item = new Item();
+ item->uid = contact->uid;
+ item->full_name = contact->full_name;
+ item->mobile_number = contact->mobile_number;
+ item->group_owner = contact->group_owner;
+
+ list.append(item);
+ }
+ ContactInterface::getInstance()->removeContactToGroup(list);
+ contact_items_selected->clear();
+}
+
+
+
+
+
+
+
+