Beispiel #1
0
QVariant RostersView::rosterData(int AOrder, const IRosterIndex *AIndex, int ARole) const
{
    QVariant data;
    if (AOrder == RDHO_ROSTERSVIEW)
    {
        IRosterIndex *index = const_cast<IRosterIndex *>(AIndex);
        if (ARole == RDR_LABEL_ITEMS)
        {
            AdvancedDelegateItems labelItems;

            for (QMultiMap<int, IRostersLabelHolder *>::const_iterator holder_it=FLabelHolders.constBegin(); holder_it!=FLabelHolders.constEnd(); ++holder_it)
            {
                QList<quint32> labels = holder_it.value()->rosterLabels(holder_it.key(),index);
                for (QList<quint32>::const_iterator label_it = labels.constBegin(); label_it!=labels.constEnd(); ++label_it)
                {
                    quint32 labelId = *label_it;
                    if (!labelItems.contains(labelId))
                        labelItems.insert(labelId,holder_it.value()->rosterLabel(holder_it.key(),labelId,index));
                }
            }

            for (QMultiMap<IRosterIndex *, quint32>::const_iterator it = FIndexLabels.constFind(index); it!=FIndexLabels.constEnd() && it.key()==index; ++it)
                if (!labelItems.contains(it.value()))
                    labelItems.insert(it.value(),FLabelItems.value(it.value()));

            data.setValue(labelItems);
        }
    }
    else if (AOrder == RDHO_ROSTERSVIEW_NOTIFY)
    {
        IRosterIndex *index = const_cast<IRosterIndex *>(AIndex);
        if (FActiveNotifies.contains(index))
        {
            const IRostersNotify &notify = FNotifyItems.value(FActiveNotifies.value(index));
            if (ARole == RDR_FORCE_VISIBLE)
            {
                if ((notify.flags & IRostersNotify::AllwaysVisible) > 0)
                    data = 1;
            }
            else if (ARole == Qt::DecorationRole)
            {
                data = !notify.icon.isNull() ? notify.icon : data;
            }
            else if (ARole == Qt::BackgroundColorRole)
            {
                data = notify.background;
            }
        }
    }
    return data;
}
void SetupPluginsDialog::updatePlugins()
{
	FModel.clear();

	int errorsCount = 0;
	int disableCount = 0;
	QDomElement pluginElem = FPluginsSetup.documentElement().firstChildElement();
	while (!pluginElem.isNull())
	{
		QUuid uuid = pluginElem.attribute("uuid");
		QString file = pluginElem.tagName();
		QString name = pluginElem.firstChildElement("name").text();
		QString version = pluginElem.firstChildElement("version").text();
		QString error = pluginElem.firstChildElement("error").text();
		QString descr = pluginElem.firstChildElement("desc").text();
		bool isEnabled = pluginElem.attribute("enabled","true") == "true";

		const IPluginInfo *info = FPluginManager->pluginInfo(uuid);
		bool isLoaded = info!=NULL;
		QString homePage = info!=NULL ? info->homePage.toString() : QString::null;

		QStringList dependsOn, dependsFor;
		if (info != NULL)
		{
			foreach(const QUuid &dependUid, FPluginManager->pluginDependencesOn(uuid))
				dependsOn.append(dependUid.toString());
			foreach(const QUuid &dependUid, FPluginManager->pluginDependencesFor(uuid))
				dependsFor.append(dependUid.toString());
		}

		QStandardItem *pluginItem = new QStandardItem(name);
		pluginItem->setData(uuid.toString(), PDR_UUID);
		pluginItem->setData(file, PDR_FILE);
		pluginItem->setData(name.isEmpty() ? file : name, PDR_NAME);
		pluginItem->setData(error.isEmpty() ? descr : error, PDR_DESCR);
		pluginItem->setData(version, PDR_VERSION);
		pluginItem->setData(homePage, PDR_HOMEPAGE);
		pluginItem->setData(isLoaded, PDR_ISLOADED);
		pluginItem->setData(isEnabled, PDR_ISENABLED);
		pluginItem->setData(dependsOn, PDR_DEPENDS_ON);
		pluginItem->setData(dependsFor, PDR_DEPENDS_FOR);
		pluginItem->setData(file+" "+name+" "+descr+" "+error, PDR_FILTER);
		pluginItem->setData(pluginItem->data(PDR_DESCR), Qt::ToolTipRole);
		
		AdvancedDelegateItem nameLabel(AdvancedDelegateItem::DisplayId);
		nameLabel.d->kind = AdvancedDelegateItem::Display;
		nameLabel.d->data = pluginItem->data(PDR_NAME);
		nameLabel.d->hints.insert(AdvancedDelegateItem::FontWeight,QFont::Bold);

		AdvancedDelegateItem versionLabel(AdvancedDelegateItem::DisplayId+1);
		versionLabel.d->kind = AdvancedDelegateItem::CustomData;
		versionLabel.d->data = pluginItem->data(PDR_VERSION);

		AdvancedDelegateItem descrLabel(AdvancedDelegateItem::makeId(AdvancedDelegateItem::Bottom,129,10));
		descrLabel.d->kind = AdvancedDelegateItem::CustomData;
		descrLabel.d->data = pluginItem->data(PDR_DESCR);

		AdvancedDelegateItems labels;
		labels.insert(nameLabel.d->id, nameLabel);
		labels.insert(versionLabel.d->id, versionLabel);
		labels.insert(descrLabel.d->id, descrLabel);
		pluginItem->setData(QVariant::fromValue<AdvancedDelegateItems>(labels), PDR_LABELS);

		if (!isEnabled)
		{
			disableCount++;
			nameLabel.d->hints.insert(AdvancedDelegateItem::Foreground, ui.tbvPlugins->palette().color(QPalette::Disabled, QPalette::Text));
		}
		else if (!isLoaded)
		{
			errorsCount++;
//			descrLabel.d->hints.insert(AdvancedDelegateItem::Foreground, Qt::red);
			descrLabel.d->hints.insert(AdvancedDelegateItem::Foreground, QColor(Qt::red));
			nameLabel.d->hints.insert(AdvancedDelegateItem::Foreground, ui.tbvPlugins->palette().color(QPalette::Disabled, QPalette::Text));
		}

		pluginItem->setCheckable(true);
		pluginItem->setCheckState(isEnabled ? Qt::Checked : Qt::Unchecked);

		FModel.appendRow(pluginItem);
		FPluginItem.insert(uuid, pluginItem);
		FItemElement.insert(pluginItem, pluginElem);

		pluginElem = pluginElem.nextSiblingElement();
	}