void create() { resize(1000, 233); gridLayout = new QGridLayout(this); treeWidget = new QTreeWidget(this); gridLayout->addWidget(treeWidget, 0, 0, 2, 1); spinPrecision = new QSpinBox(this); gridLayout->addWidget(spinPrecision, 0, 1, 1, 1); verticalSpacer = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); gridLayout->addItem(verticalSpacer, 1, 1, 1, 1); QStringList itemInfo("Col1"); itemInfo.append("Col2"); itemInfo.append("Col3"); itemInfo.append("Dummy"); // Developer no. could also have been social security number og some other id. treeWidget->setHeaderLabels(itemInfo); QStringList sl1("This is Root Item"); sl1.append("i"); QTreeWidgetItem *rootitem = new QTreeWidgetItem(treeWidget, sl1); QStringList sl2("This is Child1 Item"); sl2.append("WW"); QTreeWidgetItem *child1 = new QTreeWidgetItem(rootitem, sl2); QString ii = QString::fromLatin1("ii"); QStringList is; const int rowCount = 3000; spinPrecision->setMinimum(-1); spinPrecision->setMaximum(rowCount + 5); for (int u = 0; u < rowCount; ++u) { if (u % 25 == 0) ii += QString::fromLatin1("i"); else ii[ii.length() - 1] = QChar::fromLatin1('a' + (u % 25)); ii[ii.length() - 2] = QChar::fromLatin1('i'); is.append(ii); } for (int u = 0; u < rowCount - 2; ++u) { // -2 since we have rootitem and child1 QString col1; col1 = QString::fromLatin1("This is child item %1").arg(u + 2); QStringList sl(col1); sl.append(is[u]); sl.append(is[rowCount - u - 1]); if (u > 500) new QTreeWidgetItem(rootitem, sl); else new QTreeWidgetItem(child1, sl); } treeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); treeWidget->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); treeWidget->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents); spinPrecision->setValue(treeWidget->header()->resizeContentsPrecision()); connect(spinPrecision, SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged(int))); } // setupUi
// a context menu action was selected void UserMenuTree::slotPopupActivated(int id) { KILE_DEBUG() << "popup activated with id: " << id; switch (id ) { case POPUP_INSERT_ABOVE: insertMenuItem (m_popupItem, false); break; case POPUP_INSERT_BELOW: insertMenuItem (m_popupItem, true); break; case POPUP_SEPARATOR_ABOVE: insertSeparator(m_popupItem, false); break; case POPUP_SEPARATOR_BELOW: insertSeparator(m_popupItem, true); break; case POPUP_SUBMENU_ABOVE: insertSubmenu (m_popupItem, false); break; case POPUP_SUBMENU_BELOW: insertSubmenu (m_popupItem, true); break; case POPUP_INTO_SUBMENU: insertIntoSubmenu(m_popupItem, UserMenuData::Text); break; case POPUP_SEPARATOR_INTO_SUBMENU: insertIntoSubmenu(m_popupItem, UserMenuData::Separator); break; case POPUP_SUBMENU_INTO_SUBMENU: insertIntoSubmenu(m_popupItem, UserMenuData::Submenu); break; case POPUP_DELETE_ITEM: itemDelete(m_popupItem); break; case POPUP_DELETE_TREE: deleteMenuTree(); break; case POPUP_COLLAPSE_ITEM: m_popupItem->setExpanded(false); break; case POPUP_EXPAND_ITEM: m_popupItem->setExpanded(true); break; case POPUP_COLLAPSE_TREE: collapseAll(); break; case POPUP_EXPAND_TREE: expandAll(); break; case POPUP_ITEM_INFO: itemInfo(m_popupItem); break; } }
/////////////////////////////////////////// // Dispatches Zone data packets based on the opCode void EQPacket::dispatchZoneData(const uint8_t *data, size_t len, uint8_t dir, uint16_t opCode) { #ifdef DEBUG_PACKET debug ("dispatchZoneData()"); #endif /* DEBUG_PACKET */ QString tempStr; bool unk = true; switch (opCode) { case OP_ClientUpdate: // old PlayerPosCode: { #ifdef PACKET_PAYLOAD_SIZE_DIAG if ((len != sizeof(playerSpawnPosStruct)) && (len != sizeof(playerSelfPosStruct))) { fprintf(stderr, "WARNING: OP_ClientUpdate (%04x) (dataLen: %d != sizeof(playerSpawnPosStruct):%d or sizeof(playerSpawnSelfStruct):%d)\n", OP_ClientUpdate, len, sizeof(playerSpawnPosStruct), sizeof(playerSelfPosStruct)); unk = true; } else unk = false; #else unk = false; #endif if (len == sizeof(playerSpawnPosStruct)) emit playerUpdate((const playerSpawnPosStruct*)data, len, dir); else if (len == sizeof(playerSelfPosStruct)) emit playerUpdate((const playerSelfPosStruct*)data, len, dir); else unk = true; break; } case OP_MobUpdate: // old MobUpdateCode: { unk = ! ValidatePayload(OP_MobUpdate, spawnPositionUpdate); emit updateSpawns((const spawnPositionUpdate *)data, len, dir); break; } case OP_WearChange: // old SpawnUpdateCode: { unk = ! ValidatePayload(OP_WearChange, SpawnUpdateStruct); SpawnUpdateStruct *su = (SpawnUpdateStruct*)data; // printf("SpawnUpdateCode(id=%d, sub=%d, arg1=%d, arg2=%d)\n", // su->spawnId, su->subcommand, // su->arg1, su->arg2); /* Belith - I believe this is depreciated no? Doesn't work anyway ;) */ switch(su->subcommand) { case 17: emit updateSpawnMaxHP(su, len, dir); break; } break; emit updateSpawnInfo(su, len, dir); } case OP_SpawnAppearance: // old SpawnAppearanceCode: { unk = false; emit spawnAppearance((const spawnAppearanceStruct*)data, len, dir); break; } case OP_CommonMessage: // old ChannelMessageCode: { unk = false; emit channelMessage((const channelMessageStruct*)data, len, dir); break; } case OP_FormattedMessage: // old FormattedMessageCode: { unk = false; emit formattedMessage((const formattedMessageStruct*)data, len, dir); break; } case OP_SimpleMessage: // old SimpleMessageCode: { unk = false; emit simpleMessage((const simpleMessageStruct*)data, len, dir); break; } case OP_SpecialMesg: { unk = false; emit specialMessage((const specialMessageStruct*)data, len, dir); break; } case OP_GuildMOTD: { unk = false; emit guildMOTD((const guildMOTDStruct*)data, len, dir); break; } case OP_Death: // old NewCorpseCode: { unk = ! ValidatePayload(OP_Death, newCorpseStruct); emit killSpawn((const newCorpseStruct*) data, len, dir); break; } /* end CorpseCode */ case OP_DeleteSpawn: // old DeleteSpawnCode: { unk = ! ValidatePayload(OP_DeleteSpawn, deleteSpawnStruct); emit deleteSpawn((const deleteSpawnStruct*)data, len, dir); break; } case OP_ItemLinkResponse: // old ItemInfoCode: { unk = false; if (dir == DIR_SERVER) emit itemInfo((const itemInfoStruct*)data, len, dir); else emit itemInfoReq((const itemInfoReqStruct*)data, len, dir); } case OP_ItemPacket: // old ItemCode: { unk = false; if (dir == DIR_SERVER) emit item((const itemPacketStruct*)data, len, dir); break; } case OP_ItemPlayerPacket: { unk = false; if (dir == DIR_SERVER) emit playerItem((const char*)data, len, dir); break; } case OP_NewSpawn: // old NewSpawnCode: { unk = ! ValidatePayload(OP_NewSpawn, newSpawnStruct); emit newSpawn((const newSpawnStruct*)data, len, dir); break; } case OP_ItemTextFile: // old BookTextCode: { unk = false; printf("BOOK: '%s'\n", ((const bookTextStruct *)data)->text); emit bookText((const bookTextStruct*)data, len, dir); break; } case OP_MoneyOnCorpse: // old MoneyOnCorpseCode: { unk = ! ValidatePayload(OP_MoneyOnCorpse, moneyOnCorpseStruct); emit moneyOnCorpse((const moneyOnCorpseStruct*)data, len, dir); break; } /* end MoneyOnCorpseCode */ case OP_RandomReply: // old RandomCode: { unk = ! ValidatePayload(OP_RandomReply, randomStruct); emit random((const randomStruct*)data, len, dir); break; } case OP_RandomReq: // RandomReqCode: { unk = ! ValidatePayload(OP_RandomReq, randomReqStruct); emit random((const randomReqStruct*)data, len, dir); break; } case OP_Emote: // old EmoteEmoteTextCode: { unk = false; emit emoteText((const emoteTextStruct*)data, len, dir); break; } case OP_CorpseLocResponse: // old CorpseLocCode: { unk = ! ValidatePayload(OP_CorpseLocResponse, corpseLocStruct); emit corpseLoc((const corpseLocStruct*)data, len, dir); break; } case OP_InspectAnswer: // old InspectDataCode: { unk = ! ValidatePayload(OP_InspectAnswer, inspectDataStruct); emit inspectData((const inspectDataStruct *)data, len, dir); break; } case OP_HPUpdate: // old NpcHpUpdateCode: { unk = ! ValidatePayload(OP_HPUpdate, hpNpcUpdateStruct); emit updateNpcHP((const hpNpcUpdateStruct*)data, len, dir); break; } case SPMesgCode: { unk = false; emit spMessage((const spMesgStruct *)data, len, dir); break; } case OP_MemorizeSpell: // old MemSpellCode: { unk = ! ValidatePayload(OP_MemorizeSpell, memSpellStruct); emit handleSpell((const memSpellStruct*)data, len, dir); break; } case OP_BeginCast: // old BeginCastCode { unk = ! ValidatePayload(OP_BeginCast, beginCastStruct); emit beginCast((const beginCastStruct*)data, len, dir); break; } case OP_CastSpell: // old StartCastCode: { unk = ! ValidatePayload(OP_CastSpell, startCastStruct); emit startCast((const startCastStruct*)data, len, dir); break; } case OP_BuffFadeMsg: // old SpellFadeCode: { unk = false; emit spellFaded((const spellFadedStruct*)data, len, dir); break; } case OP_ExpUpdate: // old ExpUpdateCode: { unk = ! ValidatePayload(OP_ExpUpdate, expUpdateStruct); emit updateExp((const expUpdateStruct*)data, len, dir); break; } case OP_LevelUpdate: // old LevelUpUpdateCode: { unk = ! ValidatePayload(OP_LevelUpdate, levelUpUpdateStruct); emit updateLevel((const levelUpUpdateStruct *)data, len, dir); break; } case OP_SkillUpdate: // old SkillIncCode { unk = ! ValidatePayload(OP_SkillUpdate, skillIncStruct); emit increaseSkill((const skillIncStruct *)data, len, dir); break; } case OP_MoveDoor: // old DoorOpenCode: { unk = false; emit doorOpen(data, len, dir); break; } case OP_Illusion: // old IllusionCode: { unk = false; emit illusion(data, len, dir); break; } case OP_ZoneChange: // old ZoneChangeCode: { unk = ! ValidatePayload(OP_ZoneChange, zoneChangeStruct); // in the process of zoning, server hasn't switched yet. emit zoneChange((const zoneChangeStruct*)data, len, dir); break; } case OP_ZoneEntry: // old ZoneEntryCode: { // We're only interested in the server version if (dir == DIR_CLIENT) { unk = ! ValidatePayload(OP_ZoneEntry, ClientZoneEntryStruct); emit zoneEntry((const ClientZoneEntryStruct*)data, len, dir); break; } unk = ! ValidatePayload(OP_ZoneEntry, ServerZoneEntryStruct); emit zoneEntry((const ServerZoneEntryStruct*)data, len, dir); break; } /* end ZoneEntryCode */ case OP_NewZone: // old - NewZoneCode: { unk = ! ValidatePayload(OP_NewZone, newZoneStruct); emit zoneNew((const newZoneStruct*)data, len, dir); if (m_vPacket) printf("New Zone at byte: %ld\n", m_vPacket->FilePos()); break; } case OP_PlayerProfile: // Character Profile server to client - old CharProfileCode { unk = false; ValidatePayload(OP_PlayerProfile, charProfileStruct); emit backfillPlayer((const charProfileStruct*)data, len, DIR_SERVER); break; } case OP_ZoneSpawns: // ZoneSpawnsCode: { unk = false; emit zoneSpawns((const zoneSpawnsStruct*)data, len, dir); break; } case OP_TimeOfDay: // old TimeOfDayCode: { unk = ! ValidatePayload(OP_TimeOfDay, timeOfDayStruct); emit timeOfDay((const timeOfDayStruct*)data, len, dir); break; } case WearChangeCode: { unk = ! ValidatePayload(WearChangeCode, wearChangeStruct); emit spawnWearingUpdate ((const wearChangeStruct*)data, len, dir); break; } case OP_Action: { unk = ! ValidatePayload(OP_Action, actionStruct); emit action((const actionStruct*)data, len, dir); break; } case OP_CastBuff: // old ActionCode: { unk = false; emit action2Message ((const action2Struct *)data, len, dir); break; } case OP_Stamina: /// old StaminaCode: { unk = ! ValidatePayload(OP_Stamina, staminaStruct); emit updateStamina((const staminaStruct *)data, len, dir); break; } case OP_GroundSpawn: // old MakeDropCode: { #ifdef PACKET_PAYLOAD_SIZE_DIAG if ((len != sizeof(makeDropStruct)) && (len != 0)) { fprintf(stderr, "WARNING: OP_GroundSpawn (%04x) (dataLen: %d != sizeof(makeDropStruct):%d or 0)\n", OP_GroundSpawn, len, sizeof(makeDropStruct)); unk = true; } else unk = false; #else unk = false; #endif emit newGroundItem((const makeDropStruct*)data, len, dir); break; } case OP_ClickObject: // Old RemDropCode: { unk = ! ValidatePayload(OP_ClickObject, remDropStruct); emit removeGroundItem((const remDropStruct *)data, len, dir); break; } case OP_ShopRequest: // old OpenVendorCode: { unk = false; emit openVendor(data, len, dir); break; } case OP_ShopEnd: // old CloseVendorCode: { unk = false; emit closeVendor(data, len, dir); break; } case OP_GMTraining: // old OpenGMCode: { unk = false; emit openGM(data, len, dir); break; } case OP_GMEndTrainingResponse: // old CloseGMCode: { unk = false; emit closeGM(data, len, dir); break; } case OP_Consider: // old ConsiderCode: { unk = false; ValidatePayload(OP_Consider, considerStruct); emit consMessage((const considerStruct*)data, len, dir); break; } case OP_TargetMouse: // old ClientTargetCode: { unk = ! ValidatePayload(OP_TargetMouse, clientTargetStruct); emit clientTarget((const clientTargetStruct*) data, len, dir); break; } case OP_SpawnDoor: // old DoorSpawnsCode: { unk = false; #ifdef PACKET_PAYLOAD_SIZE_DIAG // verify size if (len % sizeof(doorStruct) != 0) { printf("WARNING: OP_SpawnDoor (%.04x) (dataLen:%d " "%% sizeof(doorStruct):%d) != 0!\n", OP_SpawnDoor, len, sizeof(doorStruct)); unk = true; break; } #endif int nDoors = len / sizeof(doorStruct); const DoorSpawnsStruct *doorsStruct = (const DoorSpawnsStruct *)data; for (int i = 0; i < nDoors; i++) { emit newDoorSpawn(&doorsStruct->doors[i], len, dir); } emit newDoorSpawns(doorsStruct, len, dir); break; } case OP_Buff: // old BuffDropCode: { unk = ! ValidatePayload(OP_Buff, buffStruct); emit buff((const buffStruct*)data, len, dir); // this is the server 'buff fading' AND the client 'cancel buff' break; } case OP_Logout: // no contents { unk = false; emit logOut(data, len, dir); break; } case OP_SendZonePoints: { unk = false; #ifdef PACKET_PAYLOAD_SIZE_DIAG const zonePointsStruct* zp = (const zonePointsStruct*)data; // verify size if (((len - sizeof(zp->count) - sizeof(zp->unknown0xxx)) % sizeof(zonePointStruct)) != 0) { fprintf(stderr, "WARNING: OP_SendZonePoints (%04x) (dataLen: %d %% sizeof(zonePointStruct):%d) != 0!\n", OP_SendZonePoints, len, sizeof(zonePointStruct)); unk = true; break; } #endif emit zonePoints((const zonePointsStruct*)data, len, dir); break; } case OP_GuildMemberList: // old GuildMemberListCode { unk = false; break; } case OP_GuildMemberUpdate: // old GuildMemberUpdateCode: { unk = false; break; } case OP_SetRunMode: // old cRunToggleCode: { //unk = ! ValidatePayload(cRunToggleCode, cRunToggleStruct); //emit cRunToggle((const cRunToggleStruct*)data, len, dir); unk = false; break; } case OP_Jump: // old cJumpCode: { //no data unk = false; break; } case OP_Camp: // old cStartCampingCode: { //no data unk = false; break; } case OP_SenseHeading: // old cSenseHeadingCode: { //no data unk = false; break; } case OP_Forage: // old ForageCode: { //no data unk = false; break; } #if 0 // ZBTEMP : If we don't bother setting unk, don't bother processing case OP_ConsiderCorpse: //unknown contents // old cConCorpseCode: { //unk = ! ValidatePayload(cConCorpseCode, cConCorpseStruct); //emit cConCorpse((const cConCorpseStruct*)data, len, dir); break; } case OP_LootRequest: //unknown contents - old cLootCorpseCode { //unk = ! ValidatePayload(cLootCorpseCode, cLootCorpseStruct); //emit cLootCorpse((const cLootCorpseStruct*)data, len, dir); break; } case OP_EndLootRequest: //unknown contents - old cDoneLootingCode { //unk = ! ValidatePayload(cDoneLootingCode, cDoneLootingStruct); //emit cDoneLooting((const cDoneLootingStruct*)data, len, dir); break; } case OP_LootComplete: //unknown contents - old sDoneLootingCode { //unk = ! ValidatePayload(sDoneLootingCode, sDoneLootingStruct); //emit sDoneLooting((const sDoneLootingStruct*)data, len, dir); break; } case OP_WhoAllRequest: //unknown contents - old WhoAllReqCode { //unk = ! ValidatePayload(cWhoAllCode, cWhoAllStruct); //emit cWhoAll((const cWhoAllStruct*)data, len, dir); break; } case OP_WhoAllResponse: // old sWhoAllOutputCode: unknown contents { //unk = ! ValidatePayload(sWhoAllOutputCode, sWhoAllOutputStruct); //emit sWhoAllOutput((const sWhoAllOutputStruct*)data, len, dir); break; } case OP_ShopPlayerBuy: //unknown contents - old BuyItemCode { //unk = ! ValidatePayload(xBuyItemCode, xBuyItemStruct); //emit xBuyItem((const xBuyItemStruct*)data, len, dir); //both the client command and the server acknowledgement when buying break; } #endif // ZBTEMP #if 0 // ZBTEMP: OPCode Graveyard case CastOnCode: { unk = false; emit castOn((castOnStruct*)data, len, dir); break; } case ManaDecrementCode: { unk = ! ValidatePayload(ManaDecrementCode, manaDecrementStruct); emit manaChange((struct manaDecrementStruct *)data, len, dir); break; } case BadCastCode: { unk = false; //! ValidatePayload(BadCastCode, badCastStruct); emit interruptSpellCast((const badCastStruct*)data, len, dir); break; } case SysMsgCode: { unk = false; emit systemMessage((const sysMsgStruct*)data, len, dir); break; } case AltExpUpdateCode: { unk = ! ValidatePayload(AltExpUpdateCode, altExpUpdateStruct); emit updateAltExp((const altExpUpdateStruct*)data, len, dir); break; } case Attack2Code: { unk = false; emit attack2Hand1 ((const attack2Struct *)data, len, dir); break; } case NewGuildInZoneCode: { unk = false; break; } case MoneyUpdateCode: { unk = false; emit moneyUpdate((const moneyUpdateStruct*)data, len, dir); break; } case MoneyThingCode: { unk = false; emit moneyThing((const moneyThingStruct*)data, len, dir); break; } case BindWoundCode: { unk = false; emit bindWound((bindWoundStruct*)data, len, dir); break; } case GroupInfoCode: { // Too much still unknown. unk = ! ValidatePayload(GroupInfoCode, groupMemberStruct); emit groupInfo((const groupMemberStruct*)data, len, dir); break; } case GroupInviteCode: { unk = ! ValidatePayload(GroupInviteCode, groupInviteStruct); emit groupInvite((const groupInviteStruct*)data, len, dir); break; } case GroupDeclineCode: { unk = ! ValidatePayload(GroupDeclineCode, groupDeclineStruct); emit groupDecline((const groupDeclineStruct*)data, len, dir); break; } case GroupAcceptCode: { unk = ! ValidatePayload(GroupAcceptCode, groupAcceptStruct); emit groupAccept((const groupAcceptStruct*)data, len, dir); break; } case GroupDeleteCode: { unk = ! ValidatePayload(GroupDeleteCode, groupDeleteStruct); emit groupDelete((const groupDeleteStruct*)data, len, dir); break; } case CharUpdateCode: { break; } case cChatFiltersCode: { //unk = ! ValidatePayload(cChatFiltersCode, cChatFiltersStruct); //emit cChatFilters((const cChatFiltersStruct*)data, len, dir); unk = false; break; } case cOpenSpellBookCode: { //unk = ! ValidatePayload(cOpenSpellBookCode, cOpenSpellBookStruct); //emit cOpenSpellBook((const cOpenSpellBookStruct*)data, len, dir); unk = false; break; } case OP_SwapSpell: // old TradeSpellBookSlotsCode: { unk = ! ValidatePayload(OP_SwapSpell, tradeSpellBookSlotsStruct); emit tradeSpellBookSlots((const tradeSpellBookSlotsStruct*)data, len, dir); break; } case sSpellFizzleRegainCode: //unknown contents, also comes when you Forage { //unk = ! ValidatePayload(sSpellFizzleRegainCode, sSpellFizzleRegainStruct); //emit sSpellFizzleRegain((const sSpellFizzleRegainStruct*)data, len, dir); break; } case sSpellInterruptedCode: //unknown contents { //unk = ! ValidatePayload(sSpellInterruptedCode, sSpellInterruptedStruct); //emit sSpellInterrupted((const sSpellInterruptedStruct*)data, len, dir); break; } case cHideCode: { //no data unk = false; break; } case cSneakCode: { //no data unk = false; break; } case cTrackCode: { //no data unk = false; break; } #endif // ZBTEMP // Currently dead opcodes default: { } } /* end switch(opCode) */ emit decodedZonePacket(data, len, dir, opCode, unk); }
void KonqOperations::doDropFileCopy() { assert(m_info); // setDropInfo - and asyncDrop - should have been called before asyncDrop const KUrl::List lst = m_info->urls; Qt::DropAction action = m_info->action; bool allItemsAreFromTrash = true; KUrl::List mlst; // list of items that can be moved for (KUrl::List::ConstIterator it = lst.begin(); it != lst.end(); ++it) { bool local = (*it).isLocalFile(); if ( KProtocolManager::supportsDeleting( *it ) ) { if (!local) { mlst.append(*it); } else { QFileInfo itemInfo((*it).toLocalFile()); QFileInfo dirInfo(itemInfo.absolutePath()); // Posix does not permit the movement of a read-only folder, regardless of the permissions of its parent if (dirInfo.isWritable() && (!itemInfo.isDir() || itemInfo.isWritable())) { mlst.append(*it); } } } if ( local || (*it).protocol() != "trash" ) allItemsAreFromTrash = false; } bool linkOnly = false; // if true, we'll show a popup menu, but with only "link" in it (for confirmation) if ( allItemsAreFromTrash && lst.first().path() == "/" ) { // Dropping a link to the trash: don't move the full contents, just make a link (#319660) linkOnly = true; } if ( !mlst.isEmpty() && m_destUrl.protocol() == "trash" ) { m_method = TRASH; if ( askDeleteConfirmation( mlst, TRASH, DEFAULT_CONFIRMATION, parentWidget() ) ) action = Qt::MoveAction; else { deleteLater(); return; } } else if (!linkOnly && (allItemsAreFromTrash || m_destUrl.protocol() == "trash")) { // No point in asking copy/move/link when using dnd from or to the trash. action = Qt::MoveAction; } else if ( ( ((m_info->keyboardModifiers & Qt::ControlModifier) == 0) && ((m_info->keyboardModifiers & Qt::ShiftModifier) == 0) && ((m_info->keyboardModifiers & Qt::AltModifier) == 0) ) || linkOnly ) { // Neither control, shift or alt are pressed => show popup menu // TODO move this code out somehow. Allow user of KonqOperations to add his own actions... #if 0 KonqIconViewWidget *iconView = dynamic_cast<KonqIconViewWidget*>(parent()); bool bSetWallpaper = false; if ( iconView && iconView->maySetWallpaper() && lst.count() == 1 ) { KUrl url = lst.first(); KMimeType::Ptr mime = KMimeType::findByUrl( url ); if ( mime && ( ( KImageIO::isSupported(mime->name(), KImageIO::Reading) ) || mime->is( "image/svg+xml" ) ) ) { bSetWallpaper = true; } } #endif // Check what the source can do // we'll assume it's the same for all URLs (hack) // TODO: if we had a KFileItemList instead of a KUrl::List, // we could use KFileItemsCapabilities const KUrl url = lst.first(); bool sReading = KProtocolManager::supportsReading( url ); bool sDeleting = KProtocolManager::supportsDeleting( url ); bool sMoving = KProtocolManager::supportsMoving( url ); // Check what the destination can do bool dWriting = KProtocolManager::supportsWriting( m_destUrl ); if ( !dWriting ) { deleteLater(); return; } bool enableLinking = true; // for now, but see below // We don't want to offer "move" for temp files. They might come from // kmail using a tempfile for attachments, or ark using a tempdir for // extracting an archive -- in all cases, we can't implement a real move, // it's just a copy of the tempfile [and the source app will delete it later]. // https://www.intevation.de/roundup/kolab/issue2026 // // Similarly, linking to a temp file is pointless. if (url.isLocalFile() && url.toLocalFile().startsWith(KStandardDirs::locateLocal("tmp", QString()))) { sMoving = false; sDeleting = false; enableLinking = false; } QMenu popup; QString seq = QKeySequence( Qt::ShiftModifier ).toString(); seq.chop(1); // chop superfluous '+' QAction* popupMoveAction = new QAction(i18n( "&Move Here" ) + '\t' + seq, this); popupMoveAction->setIcon(KIcon("go-jump")); seq = QKeySequence( Qt::ControlModifier ).toString(); seq.chop(1); QAction* popupCopyAction = new QAction(i18n( "&Copy Here" ) + '\t' + seq, this); popupCopyAction->setIcon(KIcon("edit-copy")); seq = QKeySequence( Qt::ControlModifier + Qt::ShiftModifier ).toString(); seq.chop(1); QAction* popupLinkAction = new QAction(i18n( "&Link Here" ) + '\t' + seq, this); popupLinkAction->setIcon(KIcon("edit-link")); QAction* popupWallAction = new QAction( i18n( "Set as &Wallpaper" ), this ); popupWallAction->setIcon(KIcon("preferences-desktop-wallpaper")); QAction* popupCancelAction = new QAction(i18n( "C&ancel" ) + '\t' + QKeySequence( Qt::Key_Escape ).toString(), this); popupCancelAction->setIcon(KIcon("process-stop")); if (!mlst.isEmpty() && (sMoving || (sReading && sDeleting)) && !linkOnly ) { bool equalDestination = true; foreach ( const KUrl & src, lst ) { const bool equalProtocol = ( m_destUrl.protocol() == src.protocol() ); if ( !equalProtocol || m_destUrl.path(KUrl::RemoveTrailingSlash) != src.directory() ) { equalDestination = false; break; } } if ( !equalDestination ) popup.addAction(popupMoveAction); }