X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=sms%2Fcontactwidget.cpp;fp=sms%2Fcontactwidget.cpp;h=6464865a237158b4014c088d3674fb616ef3d39d;hb=7f26d7b5e6ae5759bb11942a69a9ada134744e98;hp=0000000000000000000000000000000000000000;hpb=16b4a0a6faad751e05df97f44acef4990d87a39a;p=groupsms diff --git a/sms/contactwidget.cpp b/sms/contactwidget.cpp new file mode 100644 index 0000000..6464865 --- /dev/null +++ b/sms/contactwidget.cpp @@ -0,0 +1,451 @@ +#include +#include + +#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; + contact_items_selected = new QVector; +} + +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(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(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(contact_items->at(i)))->reSet(); + }else + { + contact_items->at(i)->reSet(); + } + } +} + +void ContactWidget::update() +{ + update( contact_items ); +} + +void ContactWidget::update(QVector *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(item))->move(x, y, this); + if( (static_cast(item))->m_isOpenContactList ) + { + x += CONTACT_ITEM_MARGE_WIDTH; + group_open = true; + //qDebug() << "group open is true. x =" << x; + } + (static_cast(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(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(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(contact_items->at(i)))->group_name ) + { + group = (static_cast(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* 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(); +} + + + + + + + +