ChatListWidget::ChatListWidget(QWidget *parent)
{
    this->m_pChatListTreeWidget = new QTreeWidget(parent);
    this->m_pMapTWI_QuickWidget = new QMap<QTreeWidgetItem*, QQuickWidget*>();
    this->m_pTimerChangeItemBgColor = new QTimer(this);
    this->m_pListHavingNewMsgTwi = new QList<QTreeWidgetItem*>();
    this->m_pCurrentShowQuickWidget = NULL;
    emit signalCurrentShowQuickWidgetChanged(NULL, NULL);

    //初始化ChatListTreeWidget
    this->m_pChatListTreeWidget->setColumnCount(1);
    this->m_pChatListTreeWidget->setHeaderLabel("会话列表");
    this->m_pChatListTreeWidget->setGeometry(QRect(0, 0, 160, 560));

    this->m_ptwiVoice = createTreeWidgetItem(this->m_pChatListTreeWidget,QStringList (QString("语音通话")));
    this->m_ptwiVoice->setIcon(0, QIcon("res/telephone.png"));
    this->m_ptwiWeChat = createTreeWidgetItem(this->m_pChatListTreeWidget, QStringList(QString("微信")));
    this->m_ptwiWeChat->setIcon(0, QIcon("res/wechat.png"));
    this->m_ptwiApp = createTreeWidgetItem(this->m_pChatListTreeWidget, QStringList(QString("手机APP")));
    this->m_ptwiApp->setIcon(0, QIcon("res/app.png"));
    connect(this->m_pChatListTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)),
            this, SLOT(treeWidgetItemClicked(QTreeWidgetItem*,int)));
    connect(this->m_pChatListTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
            this, SLOT(currentTreeWidgetItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
    //初始化定时器
    this->m_pTimerChangeItemBgColor->setInterval(300);
    connect(this->m_pTimerChangeItemBgColor, SIGNAL(timeout()), this, SLOT(treeWidgetItemBgColorChange()));
    this->m_pTimerChangeItemBgColor->start(300);

}
void chanFileSystemDockWidget::createFile() {

    QList<QTreeWidgetItem*> items = m_fileSystemTree->selectedItems();

    if (items.isEmpty()) return;

    QTreeWidgetItem* parent = items.front();

    QString fileName = QFileDialog::getSaveFileName(this, tr("edit name"), ".",
                       tr("c/c++ header file(*.h)\n"
                          "c/c++ header file(*.hpp)\n"
                          "c source file(*.c)\n"
                          "c++ source file(*.cpp)"
                         ));

    if (!QFile(fileName).open(QIODevice::WriteOnly)) {
        QMessageBox::warning(this, "error",
                             tr("create the file %1 failed").arg(fileName));

        return;
    }

    createTreeWidgetItem(fileName, parent);

    emit createdFile(fileName);
}
void chanFileSystemDockWidget::importFile() {

    QList<QTreeWidgetItem*> items = m_fileSystemTree->selectedItems();

    if (items.empty() || (items.front()->data(0, ITEM_TYPE_KEY).toInt() == File))
        return;

    QString fileName = QFileDialog::getOpenFileName(this, tr("open"), ".", tr(
                           "c/c++ header file(*.h)\n"
                           "c/c++ header file(*.hpp)\n"
                           "c source file(*.c)\n"
                           "c++ source file(*.cpp)"));

    if (fileName.isEmpty()) return;

    createTreeWidgetItem(fileName, items.front());

    emit importedFile(fileName);
}
void ChatListWidget::createNewTreeWidgetItem(UserInfo *userInfo)
{
    QTreeWidgetItem* parent, *newChildItem;

    QString via = userInfo->via;
    QString sessionid = userInfo->sessionid;

    if (0 == via.compare("XRobot", Qt::CaseInsensitive))
    {
        parent = this->m_ptwiApp;
    }
    else
    {
        parent = this->m_ptwiWeChat;
    }
    newChildItem = createTreeWidgetItem(parent, QStringList(QString (sessionid)), sessionid);

    if (parent == this->m_ptwiApp)
    {
        newChildItem->setIcon(0,QIcon("res/app_2.png"));
    }
    else if (parent == this->m_ptwiWeChat)
    {
        newChildItem->setIcon(0, QIcon("res/wechat_2.png"));
    }
    parent->addChild(newChildItem);

    this->m_pChatListTreeWidget->expandItem(parent);
    newChildItem->setSelected(true);

    QQuickWidget* previousShowCurrentWidget = this->m_pCurrentShowQuickWidget;
    if (NULL != this->m_pCurrentShowQuickWidget)
    {
        this->m_pCurrentShowQuickWidget->hide();
    }
    this->m_pCurrentShowQuickWidget = this->m_pMapTWI_QuickWidget->value(newChildItem);
    this->m_pCurrentShowQuickWidget->show();
    emit signalCurrentShowQuickWidgetChanged(previousShowCurrentWidget, this->m_pCurrentShowQuickWidget);
}