bool SpellScript::TargetHook::CheckEffect(SpellInfo const* spellEntry, uint8 effIndex) { if (!targetType) return false; if (spellEntry->Effects[effIndex].TargetA.GetTarget() != targetType && spellEntry->Effects[effIndex].TargetB.GetTarget() != targetType) return false; SpellImplicitTargetInfo targetInfo(targetType); switch (targetInfo.GetSelectionCategory()) { case TARGET_SELECT_CATEGORY_CHANNEL: // SINGLE return !area; case TARGET_SELECT_CATEGORY_NEARBY: // BOTH return true; case TARGET_SELECT_CATEGORY_CONE: // AREA case TARGET_SELECT_CATEGORY_AREA: // AREA return area; case TARGET_SELECT_CATEGORY_DEFAULT: switch (targetInfo.GetObjectType()) { case TARGET_OBJECT_TYPE_SRC: // EMPTY case TARGET_OBJECT_TYPE_DEST: // EMPTY return false; default: switch (targetInfo.GetReferenceType()) { case TARGET_REFERENCE_TYPE_CASTER: // SINGLE return !area; case TARGET_REFERENCE_TYPE_TARGET: // BOTH return true; default: break; } break; } break; default: break; } return false; }
QIcon WinIconProvider::icon(const QFileInfo& info) const { QIcon retIcon; QString fileExtension = info.suffix().toLower(); if (fileExtension == "png" || fileExtension == "bmp" || fileExtension == "jpg" || fileExtension == "jpeg") { retIcon = QIcon(info.filePath()); } else if (fileExtension == "cpl") { HICON hIcon; QString filePath = QDir::toNativeSeparators(info.filePath()); ExtractIconEx((LPCWSTR)filePath.utf16(), 0, &hIcon, NULL, 1); retIcon = QIcon(QtWin::fromHICON(hIcon)); DestroyIcon(hIcon); } else { // This 64 bit mapping needs to go away if we produce a 64 bit build of launchy QString filePath = wicon_aliasTo64(QDir::toNativeSeparators(info.filePath())); // Get the icon index using SHGetFileInfo SHFILEINFO sfi = {0}; QRegExp re("\\\\\\\\([a-z0-9\\-]+\\\\?)?$", Qt::CaseInsensitive); if (re.exactMatch(filePath)) { // To avoid network hangs, explicitly fetch the My Computer icon for UNCs LPITEMIDLIST pidl; if (SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &pidl) == S_OK) { SHGetFileInfo((LPCTSTR)pidl, 0, &sfi, sizeof(sfi), SHGFI_PIDL | SHGFI_SYSICONINDEX); // Set the file path to the My Computer GUID for any later fetches filePath = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"; } } if (sfi.iIcon == 0) { SHGetFileInfo((LPCWSTR)filePath.utf16(), 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX); } // An icon index of 3 is the generic file icon if (sfi.iIcon > 0 && sfi.iIcon != 3) { // Retrieve the system image list. // To get the 48x48 icons, use SHIL_EXTRALARGE // To get the 256x256 icons (Vista only), use SHIL_JUMBO int imageListIndex; if (preferredSize <= 16) imageListIndex = SHIL_SMALL; else if (preferredSize <= 32) imageListIndex = SHIL_LARGE; else if (preferredSize <= 48) imageListIndex = SHIL_EXTRALARGE; else imageListIndex = SHIL_JUMBO; // If the OS supports SHCreateItemFromParsingName, get a 256x256 icon if (!addIconFromShellFactory(filePath, retIcon)) { // otherwise get the largest appropriate size if (!addIconFromImageList(imageListIndex, sfi.iIcon, retIcon) && imageListIndex == SHIL_JUMBO) addIconFromImageList(SHIL_EXTRALARGE, sfi.iIcon, retIcon); } // Ensure there's also a 32x32 icon - extralarge and above often only contain // a large frame with the 32x32 icon in the middle or looks blurry if (imageListIndex == SHIL_EXTRALARGE || imageListIndex == SHIL_JUMBO) addIconFromImageList(SHIL_LARGE, sfi.iIcon, retIcon); } else if (info.isSymLink() || fileExtension == "lnk") // isSymLink is case sensitive when it perhaps shouldn't be { QFileInfo targetInfo(info.symLinkTarget()); retIcon = icon(targetInfo); } else { retIcon = QFileIconProvider::icon(info); } } return retIcon; }