当前位置: 首页>>代码示例>>C++>>正文


C++ ExtraIcon::applyIcons方法代码示例

本文整理汇总了C++中ExtraIcon::applyIcons方法的典型用法代码示例。如果您正苦于以下问题:C++ ExtraIcon::applyIcons方法的具体用法?C++ ExtraIcon::applyIcons怎么用?C++ ExtraIcon::applyIcons使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ExtraIcon的用法示例。


在下文中一共展示了ExtraIcon::applyIcons方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: OnApply


//.........这里部分代码省略.........
				// Remove old slot for groups to re-set images
				oldSlots[i] = -1;
			lastUsedSlot = MAX(lastUsedSlot, registeredExtraIcons[i]->getSlot());
		}
		lastUsedSlot = MIN(lastUsedSlot, GetNumberOfSlots());

		// Get user data and create new groups
		LIST<ExtraIconGroup> groups(1);

		BYTE pos = 0;
		int firstEmptySlot = 0;
		HTREEITEM ht = m_tree.GetRoot();
		TVITEMEX tvi;
		tvi.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_STATE;
		tvi.stateMask = TVIS_STATEIMAGEMASK;
		while (ht) {
			tvi.hItem = ht;
			m_tree.GetItem(&tvi);

			intlist*ids = (intlist*)tvi.lParam;
			if (ids == NULL || ids->count < 1)
				continue; // ???

			bool enabled = ((tvi.state & INDEXTOSTATEIMAGEMASK(3)) == INDEXTOSTATEIMAGEMASK(2));
			int slot = (enabled ? firstEmptySlot++ : -1);
			if (slot >= GetNumberOfSlots())
				slot = -1;

			if (ids->count == 1) {
				BaseExtraIcon *extra = registeredExtraIcons[ids->data[0] - 1];
				extra->setPosition(pos++);
				extra->setSlot(slot);
			}
			else {
				char name[128];
				mir_snprintf(name, "__group_%d", groups.getCount());

				ExtraIconGroup *group = new ExtraIconGroup(name);

				for (int i = 0; i < ids->count; i++) {
					BaseExtraIcon *extra = registeredExtraIcons[ids->data[i] - 1];
					extra->setPosition(pos++);

					group->addExtraIcon(extra);
				}

				group->setSlot(slot);
				groups.insert(group);
			}

			ht = m_tree.GetNextSibling(ht);
		}

		// Store data
		for (int i = 0; i < registeredExtraIcons.getCount(); i++) {
			BaseExtraIcon *extra = registeredExtraIcons[i];

			char setting[512];
			mir_snprintf(setting, "Position_%s", extra->getName());
			db_set_w(NULL, MODULE_NAME, setting, extra->getPosition());

			mir_snprintf(setting, "Slot_%s", extra->getName());
			db_set_w(NULL, MODULE_NAME, setting, extra->getSlot());
		}

		CallService(MS_DB_MODULE_DELETE, 0, (LPARAM)MODULE_NAME "Groups");
		db_set_w(NULL, MODULE_NAME "Groups", "Count", groups.getCount());
		for (int k = 0; k < groups.getCount(); k++) {
			ExtraIconGroup *group = groups[k];

			char setting[512];
			mir_snprintf(setting, "%d_count", k);
			db_set_w(NULL, MODULE_NAME "Groups", setting, (WORD)group->m_items.getCount());

			for (int j = 0; j < group->m_items.getCount(); j++) {
				BaseExtraIcon *extra = group->m_items[j];

				mir_snprintf(setting, "%d_%d", k, j);
				db_set_s(NULL, MODULE_NAME "Groups", setting, extra->getName());
			}
		}

		// Clean removed slots
		for (int j = firstEmptySlot; j <= lastUsedSlot; j++)
			RemoveExtraIcons(j);

		// Apply icons to new slots
		RebuildListsBasedOnGroups(groups);
		for (int n = 0; n < extraIconsBySlot.getCount(); n++) {
			ExtraIcon *extra = extraIconsBySlot[n];
			if (extra->getType() != EXTRAICON_TYPE_GROUP)
				if (oldSlots[((BaseExtraIcon *)extra)->getID() - 1] == extra->getSlot())
					continue;

			if (extra->isEnabled())
				extra->applyIcons();
		}

		delete[] oldSlots;
	}
开发者ID:kxepal,项目名称:miranda-ng,代码行数:101,代码来源:options_ei.cpp


注:本文中的ExtraIcon::applyIcons方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。