pair<int,int> getAction(const Commands& commands) { while ( true ) { displayMenu(commands); int choice = getNumber(0,commands.size()); int subChoice = 0; if (choice == 0) return make_pair(-1,0); if (!commands[choice-1].params.empty()) { displaySubMenu(commands[choice-1].params); subChoice = getNumber(0,commands[choice-1].params.size()); if (subChoice == 0) continue; } return make_pair(choice-1, subChoice-1); } }
/** The command handler functions. */ bool cmdGetItem( Command& command ) { const QueueGetItemPacket* packet = command.get< QueueGetItemPacket >(); Commands commands; queue.tryPop( packet->itemsRequested, commands ); for( CommandsCIter i = commands.begin(); i != commands.end(); ++i ) { Command* item = *i; ObjectPacket* reply = item->getModifiable< ObjectPacket >(); reply->instanceID = packet->slaveInstanceID; command.getNode()->send( *reply ); item->release(); } if( packet->itemsRequested > commands.size( )) { QueueEmptyPacket reply( packet ); command.getNode()->send( reply ); } return true; }
void VDDialogEditAccelerators::OnItemSelectionChanged(VDUIProxyListView *source, int index) { if (index < 0 || mbBlockCommandUpdate) return; const BoundCommand& bcmd = *mBoundCommands[index]; if (mpHotKeyControl) mpHotKeyControl->SetAccelerator(bcmd.mAccel); uint32 n = mFilteredCommands.size(); int cmdSelIndex = -1; for(uint32 i=0; i<n; ++i) { const VDAccelToCommandEntry& cent = *mFilteredCommands[i]; if (!_stricmp(cent.mpName, bcmd.mpCommand)) { cmdSelIndex = i; break; } } LBSetSelectedIndex(IDC_AVAILCOMMANDS, cmdSelIndex); }
bool VDDialogEditAccelerators::OnCommand(uint32 id, uint32 extcode) { if (id == IDC_FILTER) { if (extcode == EN_CHANGE) { VDStringA s("*"); s += VDTextWToA(GetControlValueString(id)).c_str(); s += '*'; RefilterCommands(s.c_str()); return true; } } else if (id == IDC_ADD) { VDUIAccelerator accel; int selIdx = LBGetSelectedIndex(IDC_AVAILCOMMANDS); if ((size_t)selIdx < mFilteredCommands.size()) { const VDAccelToCommandEntry *ace = mFilteredCommands[selIdx]; if (mpHotKeyControl) { mpHotKeyControl->GetAccelerator(accel); // Look for a conflicting command. for(BoundCommands::iterator it(mBoundCommands.begin()), itEnd(mBoundCommands.end()); it != itEnd; ++it) { BoundCommand *obc = *it; if (obc->mAccel == accel) { VDStringW keyName; VDUIGetAcceleratorString(accel, keyName); VDStringA msg; msg.sprintf("The key %ls is already bound to %hs. Rebind it to %hs?", keyName.c_str(), obc->mpCommand, ace->mpName); if (IDOK != MessageBox(mhdlg, msg.c_str(), g_szWarning, MB_OKCANCEL | MB_ICONEXCLAMATION)) return true; mBoundCommands.erase(it); obc->Release(); } } vdrefptr<BoundCommand> bc(new_nothrow BoundCommand); if (bc) { bc->mpCommand = ace->mpName; bc->mCommandId = ace->mId; bc->mAccel = accel; mBoundCommands.push_back(bc.release()); RefreshBoundList(); } } } return true; } else if (id == IDC_REMOVE) { int selIdx = mListViewBoundCommands.GetSelectedIndex(); if ((unsigned)selIdx < mBoundCommands.size()) { BoundCommand *bc = mBoundCommands[selIdx]; mBoundCommands.erase(mBoundCommands.begin() + selIdx); bc->Release(); RefreshBoundList(); } return true; } else if (id == IDC_RESET) { if (IDOK == MessageBox(mhdlg, "Really reset?", g_szWarning, MB_OKCANCEL | MB_ICONEXCLAMATION)) LoadTable(mBoundCommandsDefault); return true; } return false; }