void HighlightFiles::FillMenu(VMenu *HiMenu,int MenuPos) { MenuItemEx HiMenuItem; const int Count[4][2] = { {0, FirstCount}, {FirstCount, FirstCount+UpperCount}, {FirstCount+UpperCount, FirstCount+UpperCount+LowerCount}, {FirstCount+UpperCount+LowerCount,FirstCount+UpperCount+LowerCount+LastCount} }; HiMenu->DeleteItems(); HiMenuItem.Clear(); for (int j=0; j<4; j++) { for (int i=Count[j][0]; i<Count[j][1]; i++) { MenuString(HiMenuItem.strName,HiData.getItem(i),true); HiMenu->AddItem(&HiMenuItem); } HiMenuItem.strName.Clear(); HiMenu->AddItem(&HiMenuItem); if (j<3) { if (!j) HiMenuItem.strName = MSG(MHighlightUpperSortGroup); else if (j==1) HiMenuItem.strName = MSG(MHighlightLowerSortGroup); else HiMenuItem.strName = MSG(MHighlightLastGroup); HiMenuItem.Flags|=LIF_SEPARATOR; HiMenu->AddItem(&HiMenuItem); HiMenuItem.Flags=0; } } HiMenu->SetSelectPos(MenuPos,1); }
bool FileFilter::FilterEdit() { if (bMenuOpen) return false; Changed = true; bMenuOpen = true; int ExitCode; bool bNeedUpdate=false; const auto FilterList = VMenu2::create(MSG(MFilterTitle), nullptr, 0, ScrY - 6); FilterList->SetHelp(L"FiltersMenu"); FilterList->SetPosition(-1,-1,0,0); FilterList->SetBottomTitle(MSG(MFilterBottom)); FilterList->SetMenuFlags(/*VMENU_SHOWAMPERSAND|*/VMENU_WRAPMODE); FilterList->SetId(FiltersMenuId); std::for_each(RANGE(FilterData(), i) { MenuItemEx ListItem(MenuString(&i)); ListItem.SetCheck(GetCheck(i)); FilterList->AddItem(ListItem); });
void DisplayTrip(const int BORDER, string username, Trip &trip) { const int NUM_OF_OPTIONS = trip.getDestinations().size(); //Data Structures ListNode<tripNode>* selected[NUM_OF_OPTIONS]; int parentAr [NUM_OF_OPTIONS]; int dist [NUM_OF_OPTIONS]; List<tripNode> destinations; avltree<User> users; //Input-Output stringstream ss; stringstream ss2; //Variables int input; int option; int index; int distance; int totalDistance; string tripStr; string tripName; ifstream inFile; ofstream outFile; User tempUser; tripNode tempTrip; tripNode lastTrip; tripNode source; ListNode<tripNode> *node; DWORD mode; //Initialize Variables input = 0; option = 1; index = 0; distance = 0; totalDistance = 0; destinations = trip.getDestinations(); destinations.to_front(); CenterStrings(ss, "Press Enter to Select a Trip", BORDER); CenterStrings(ss, "Use Up or Down Arrow Keys to Navigate list", BORDER); CenterStrings(ss, "Press Ctrl-S to Save and Exit \n\n", BORDER); if(destinations.currentNode(source)){ destinations.to_front(); source = trip.getSource(); fastRoute(destinations, source, parentAr, dist, NUM_OF_OPTIONS); } //Initialize all indices of currentTrip[] to 0 (All options unselected) for(int pos = 0; pos < NUM_OF_OPTIONS; pos++){ selected[pos] = NULL; } //Main Loop while(input != -1) { // Clear Console. system("CLS"); //Reset Index index = 0; //PrintInput("MainMenu.txt"); cout << (MenuString()); cout << ss.str() << '\n'; destinations.to_front(); // Prints Selection. Passes parameter based on // current value of option. node = destinations.currentNode(); while(node != NULL){ if(index == 0) { distance = 0; } else { distance = node->getData().s.getLocation().distanceTo (lastTrip.s.getLocation()); } totalDistance += distance; lastTrip = node->getData(); ss2 << node->getData().s.getStadiumName().str << " | " << node->getData().s.getCity() << ", " << node->getData().s.getState() << " | " << distance << " miles"; tripStr = NumberedLine(ss2.str(), 5, index + 1, BORDER); tripStr += '\n'; if(selected[index] != NULL || index == option - 1) { PrintSelection(tripStr); } else { cout << tripStr; } destinations.next(tempTrip); node = destinations.currentNode(); index++; ss2.str(""); } cout << "TOTAL DISTANCE: " << totalDistance << " miles\n"; totalDistance = 0; // Get user's key stroke. input = PressAnyKey("", mode); // If user makes selection (Presses Enter Key) tripNode newStop; if(input == VK_RETURN) { if(selected[option - 1] == NULL){ selected[option - 1] = node; } else{ selected[option - 1] = NULL; } }else if((input == 0x53 && (mode & LEFT_CTRL_PRESSED)) || (input == 0x53 && (mode & RIGHT_CTRL_PRESSED))) { input = -1; } else { if(input == VK_UP){ ChangeSelection(VK_LEFT, option, NUM_OF_OPTIONS); } else if(input == VK_DOWN){ ChangeSelection(VK_RIGHT, option, NUM_OF_OPTIONS); } } } }
/* This function intercepts messages for the out-basket list box window * so that we can handle the right mouse button. */ LRESULT EXPORT FAR PASCAL OutBaskListProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_ERASEBKGND: { RECT rc; GetClientRect( hwnd, &rc ); FillRect( (HDC)wParam, &rc, hbrOutBaskWnd ); return( TRUE ); } case WM_CONTEXTMENU: /*!!SM!!*/ case WM_RBUTTONDOWN: { POINT pt; LPOB lpob; HWND hwndOpen; HMENU hPopupMenu; int index; AEPOPUP aep; /* Make sure this window is active and select the item * at the cursor. */ if( hwndActive != GetParent( hwnd ) ) SendMessage( hwndMDIClient, WM_MDIACTIVATE, (WPARAM)hwndOutBasket, 0L ); /* Select the item under the cursor only if nothing is * currently selected. */ index = ItemFromPoint( hwnd, (short)LOWORD(lParam), (short)HIWORD(lParam) ); if( ListBox_GetSel( hwnd, index ) == 0 ) { CallWindowProc( lpProcListCtl, hwnd, WM_LBUTTONDOWN, wParam, lParam ); CallWindowProc( lpProcListCtl, hwnd, WM_LBUTTONUP, wParam, lParam ); } /* Get the out-basket menu. */ hPopupMenu = GetSubMenu( hPopupMenus, IPOP_OBASKWINDOW ); hwndOpen = GetDlgItem( GetParent( hwnd ), IDOK ); MenuEnable( hPopupMenu, IDOK, IsWindowEnabled( hwndOpen ) ); /* If we have any selected items, use the attributes * of the first item to determine the menu items. */ if( ListBox_GetSelCount( hwnd ) > 0 ) { OBINFO obinfo; ListBox_GetSelItems( hwnd, 1, &index ); lpob = (LPOB)ListBox_GetItemData( hwnd, index ); Amob_GetObInfo( lpob, &obinfo ); if( TestF(obinfo.obHdr.wFlags, OBF_HOLD) ) MenuString( hPopupMenu, IDD_HOLD, GS(IDS_STR275) ); else MenuString( hPopupMenu, IDD_HOLD, GS(IDS_STR277) ); if( TestF(obinfo.obHdr.wFlags, OBF_KEEP) ) MenuString( hPopupMenu, IDD_KEEP, GS(IDS_STR440) ); else MenuString( hPopupMenu, IDD_KEEP, GS(IDS_STR439) ); MenuEnable( hPopupMenu, IDOK, !fInitiatingBlink && Amob_IsEditable( obinfo.obHdr.clsid ) && !TestF(obinfo.obHdr.wFlags, OBF_PENDING) && !TestF(obinfo.obHdr.wFlags, OBF_ACTIVE ) ); MenuEnable( hPopupMenu, IDD_DELETE, !fInitiatingBlink && !TestF(obinfo.obHdr.wFlags, OBF_PENDING ) && !TestF(obinfo.obHdr.wFlags, OBF_ACTIVE ) ); MenuEnable( hPopupMenu, IDD_KEEP, !fInitiatingBlink && !TestF(obinfo.obHdr.wFlags, OBF_PENDING ) && !TestF(obinfo.obHdr.wFlags, OBF_ACTIVE ) ); MenuEnable( hPopupMenu, IDD_HOLD, !fInitiatingBlink && !TestF(obinfo.obHdr.wFlags, OBF_PENDING ) && !TestF(obinfo.obHdr.wFlags, OBF_ACTIVE ) ); } else { MenuEnable( hPopupMenu, IDOK, FALSE ); MenuEnable( hPopupMenu, IDD_KEEP, FALSE ); MenuEnable( hPopupMenu, IDD_HOLD, FALSE ); MenuEnable( hPopupMenu, IDD_DELETE, FALSE ); } /* Call the AE_POPUP event. */ aep.wType = WIN_OUTBASK; aep.pFolder = NULL; aep.pSelectedText = NULL; aep.cchSelectedText = 0; aep.hMenu = hPopupMenu; aep.nInsertPos = 2; Amuser_CallRegistered( AE_POPUP, (LPARAM)(LPSTR)&aep, 0L ); GetCursorPos( &pt ); TrackPopupMenu( hPopupMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwndFrame, NULL ); return( 0 ); } case WM_KEYDOWN: /* Trap the Delete and Shift+Delete key in the outbasket * list box to handle the Delete command. */ if( wParam == VK_DELETE ) { PostDlgCommand( GetParent( hwnd ), IDD_DELETE, 0 ); return( 0 ); } /* Trap the Pause and Shift+Pause key in the outbasket * list box to handle the Hold command. */ if( wParam == VK_PAUSE ) { PostDlgCommand( GetParent( hwnd ), IDD_HOLD, 1 ); return( 0 ); } break; } return( CallWindowProc( lpProcListCtl, hwnd, msg, wParam, lParam ) ); }
void CMainMenu::FillOutMenu ( HMENU hMenu ) { CGuard Guard(m_CS); MENU_ITEM Item; //Get all flags bool inBasicMode = g_Settings->LoadBool(UserInterface_BasicMode); bool CPURunning = g_Settings->LoadBool(GameRunning_CPU_Running); bool RomLoading = g_Settings->LoadBool(GameRunning_LoadingInProgress); bool RomLoaded = g_Settings->LoadString(Game_GameName).length() > 0; bool RomList = g_Settings->LoadBool(RomBrowser_Enabled) && !CPURunning; CMenuShortCutKey::ACCESS_MODE AccessLevel = CMenuShortCutKey::GAME_NOT_RUNNING; if (g_Settings->LoadBool(GameRunning_CPU_Running)) { AccessLevel = g_Settings->LoadBool(UserInterface_InFullScreen) ? CMenuShortCutKey::GAME_RUNNING_FULLSCREEN : CMenuShortCutKey::GAME_RUNNING_WINDOW; } //Get the system information to make the menu LanguageList LangList = g_Lang->GetLangList(); MenuItemList LangMenu; int Offset = 0; for (LanguageList::iterator Language = LangList.begin(); Language != LangList.end(); Language++) { Item.Reset(ID_LANG_START + Offset++,EMPTY_STRING,EMPTY_STDSTR,NULL,Language->LanguageName.c_str()); if (g_Lang->IsCurrentLang(*Language)) { Item.SetItemTicked(true); } LangMenu.push_back(Item); } //Go through the settings to create a list of Recent Roms MenuItemList RecentRomMenu; DWORD count, RomsToRemember = g_Settings->LoadDword(File_RecentGameFileCount); for (count = 0; count < RomsToRemember; count++) { stdstr LastRom = g_Settings->LoadStringIndex(File_RecentGameFileIndex,count); if (LastRom.empty()) { break; } stdstr_f MenuString("&%d %s",(count + 1) % 10,LastRom.c_str()); RecentRomMenu.push_back(MENU_ITEM(ID_RECENT_ROM_START + count,EMPTY_STRING,EMPTY_STDSTR,NULL,MenuString.ToUTF16().c_str())); } /* Recent Dir ****************/ MenuItemList RecentDirMenu; DWORD DirsToRemember = g_Settings->LoadDword(Directory_RecentGameDirCount); for (count = 0; count < DirsToRemember; count++) { stdstr LastDir = g_Settings->LoadStringIndex(Directory_RecentGameDirIndex,count); if (LastDir.empty()) { break; } stdstr_f MenuString("&%d %s",(count + 1) % 10,LastDir.c_str()); RecentDirMenu.push_back(MENU_ITEM(ID_RECENT_DIR_START + count,EMPTY_STRING,EMPTY_STDSTR,NULL,MenuString.ToUTF16().c_str())); } /* File Menu ****************/ MenuItemList FileMenu; Item.Reset(ID_FILE_OPEN_ROM, MENU_OPEN, m_ShortCuts.ShortCutString(ID_FILE_OPEN_ROM,AccessLevel)); FileMenu.push_back(Item); if (!inBasicMode) { Item.Reset(ID_FILE_ROM_INFO, MENU_ROM_INFO,m_ShortCuts.ShortCutString(ID_FILE_ROM_INFO,AccessLevel)); Item.SetItemEnabled(RomLoaded); FileMenu.push_back(Item); FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_FILE_STARTEMULATION,MENU_START, m_ShortCuts.ShortCutString(ID_FILE_STARTEMULATION,AccessLevel) ); Item.SetItemEnabled(RomLoaded && !CPURunning); FileMenu.push_back(Item); } Item.Reset(ID_FILE_ENDEMULATION, MENU_END, m_ShortCuts.ShortCutString(ID_FILE_ENDEMULATION,AccessLevel) ); Item.SetItemEnabled(CPURunning); FileMenu.push_back(Item); FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(SUB_MENU, MENU_LANGUAGE, EMPTY_STDSTR, &LangMenu ); FileMenu.push_back(Item); if (RomList) { FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_FILE_ROMDIRECTORY, MENU_CHOOSE_ROM,m_ShortCuts.ShortCutString(ID_FILE_ROMDIRECTORY,AccessLevel) ); FileMenu.push_back(Item); Item.Reset(ID_FILE_REFRESHROMLIST,MENU_REFRESH,m_ShortCuts.ShortCutString(ID_FILE_REFRESHROMLIST,AccessLevel) ); FileMenu.push_back(Item); } if (!inBasicMode && RomList) { FileMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(SUB_MENU, MENU_RECENT_ROM,EMPTY_STDSTR, &RecentRomMenu); if (RecentRomMenu.size() == 0) { RecentRomMenu.push_back(MENU_ITEM(SPLITER)); Item.SetItemEnabled(false); } FileMenu.push_back(Item); Item.Reset(SUB_MENU, MENU_RECENT_DIR,EMPTY_STDSTR, &RecentDirMenu); if (RecentDirMenu.size() == 0) { RecentDirMenu.push_back(MENU_ITEM(SPLITER)); Item.SetItemEnabled(false); } FileMenu.push_back(Item); } else { if (RecentRomMenu.size() != 0) { FileMenu.push_back(MENU_ITEM(SPLITER)); for (MenuItemList::iterator MenuItem = RecentRomMenu.begin(); MenuItem != RecentRomMenu.end(); MenuItem++) { FileMenu.push_back(*MenuItem); } } } FileMenu.push_back(MENU_ITEM(SPLITER)); FileMenu.push_back(MENU_ITEM(ID_FILE_EXIT, MENU_EXIT,m_ShortCuts.ShortCutString(ID_FILE_EXIT,AccessLevel))); /* Current Save ****************/ MenuItemList CurrentSaveMenu; DWORD _CurrentSaveState = g_Settings->LoadDword(Game_CurrentSaveState); Item.Reset(ID_CURRENT_SAVE_DEFAULT, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_DEFAULT,AccessLevel),NULL,GetSaveSlotString(0)); if (_CurrentSaveState == 0) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); CurrentSaveMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_CURRENT_SAVE_1, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_1,AccessLevel),NULL,GetSaveSlotString(1)); if (_CurrentSaveState == 1) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_2, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_2,AccessLevel),NULL,GetSaveSlotString(2)); if (_CurrentSaveState == 2) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_3, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_3,AccessLevel),NULL,GetSaveSlotString(3)); if (_CurrentSaveState == 3) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_4, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_4,AccessLevel),NULL,GetSaveSlotString(4)); if (_CurrentSaveState == 4) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_5, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_5,AccessLevel),NULL,GetSaveSlotString(5)); if (_CurrentSaveState == 5) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_6, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_6,AccessLevel),NULL,GetSaveSlotString(6)); if (_CurrentSaveState == 6) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_7, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_7,AccessLevel),NULL,GetSaveSlotString(7)); if (_CurrentSaveState == 7) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_8, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_8,AccessLevel),NULL,GetSaveSlotString(8)); if (_CurrentSaveState == 8) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_9, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_9,AccessLevel),NULL,GetSaveSlotString(9)); if (_CurrentSaveState == 9) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); Item.Reset(ID_CURRENT_SAVE_10, EMPTY_STRING,m_ShortCuts.ShortCutString(ID_CURRENT_SAVE_10,AccessLevel),NULL,GetSaveSlotString(10)); if (_CurrentSaveState == 10) { Item.SetItemTicked(true); } CurrentSaveMenu.push_back(Item); /* System Menu ****************/ MenuItemList SystemMenu; MenuItemList ResetMenu; if (inBasicMode) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_RESET_SOFT, MENU_RESET, m_ShortCuts.ShortCutString(ID_SYSTEM_RESET_SOFT,AccessLevel) )); } else { ResetMenu.push_back(MENU_ITEM(ID_SYSTEM_RESET_SOFT, MENU_RESET_SOFT, m_ShortCuts.ShortCutString(ID_SYSTEM_RESET_SOFT,AccessLevel) )); ResetMenu.push_back(MENU_ITEM(ID_SYSTEM_RESET_HARD, MENU_RESET_HARD, m_ShortCuts.ShortCutString(ID_SYSTEM_RESET_HARD,AccessLevel))); SystemMenu.push_back(MENU_ITEM(SUB_MENU,MENU_RESET,EMPTY_STDSTR,&ResetMenu)); } if (g_Settings->LoadBool(GameRunning_CPU_Paused)) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_PAUSE, MENU_RESUME, m_ShortCuts.ShortCutString(ID_SYSTEM_PAUSE,AccessLevel))); } else { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_PAUSE, MENU_PAUSE, m_ShortCuts.ShortCutString(ID_SYSTEM_PAUSE,AccessLevel))); } SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_BITMAP, MENU_BITMAP, m_ShortCuts.ShortCutString(ID_SYSTEM_BITMAP,AccessLevel))); SystemMenu.push_back(MENU_ITEM(SPLITER)); if (!inBasicMode) { Item.Reset(ID_SYSTEM_LIMITFPS, MENU_LIMIT_FPS,m_ShortCuts.ShortCutString(ID_SYSTEM_LIMITFPS,AccessLevel) ); if (g_Settings->LoadBool(GameRunning_LimitFPS)) { Item.SetItemTicked(true); } SystemMenu.push_back(Item); SystemMenu.push_back(MENU_ITEM(SPLITER)); } SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_SAVE, MENU_SAVE, m_ShortCuts.ShortCutString(ID_SYSTEM_SAVE,AccessLevel))); if (!inBasicMode) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_SAVEAS, MENU_SAVE_AS, m_ShortCuts.ShortCutString(ID_SYSTEM_SAVEAS,AccessLevel))); } SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_RESTORE, MENU_RESTORE, m_ShortCuts.ShortCutString(ID_SYSTEM_RESTORE,AccessLevel))); if (!inBasicMode) { SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_LOAD, MENU_LOAD, m_ShortCuts.ShortCutString(ID_SYSTEM_LOAD,AccessLevel))); } SystemMenu.push_back(MENU_ITEM(SPLITER)); SystemMenu.push_back(MENU_ITEM(SUB_MENU, MENU_CURRENT_SAVE, EMPTY_STDSTR, &CurrentSaveMenu )); SystemMenu.push_back(MENU_ITEM(SPLITER)); SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_CHEAT, MENU_CHEAT, m_ShortCuts.ShortCutString(ID_SYSTEM_CHEAT,AccessLevel))); SystemMenu.push_back(MENU_ITEM(ID_SYSTEM_GSBUTTON, MENU_GS_BUTTON, m_ShortCuts.ShortCutString(ID_SYSTEM_GSBUTTON,AccessLevel) )); /* Option Menu ****************/ MenuItemList OptionMenu; Item.Reset(ID_OPTIONS_FULLSCREEN, MENU_FULL_SCREEN,m_ShortCuts.ShortCutString(ID_OPTIONS_FULLSCREEN,AccessLevel) ); Item.SetItemEnabled(CPURunning); if (g_Plugins->Gfx() && g_Plugins->Gfx()->ChangeWindow == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); if (!inBasicMode) { Item.Reset(ID_OPTIONS_ALWAYSONTOP, MENU_ON_TOP,m_ShortCuts.ShortCutString(ID_OPTIONS_ALWAYSONTOP,AccessLevel) ); if (g_Settings->LoadDword(UserInterface_AlwaysOnTop)) { Item.SetItemTicked(true); } Item.SetItemEnabled(CPURunning); OptionMenu.push_back(Item); } OptionMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_OPTIONS_CONFIG_GFX, MENU_CONFG_GFX,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_GFX,AccessLevel)); if (g_Plugins->Gfx() == NULL || g_Plugins->Gfx()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); Item.Reset(ID_OPTIONS_CONFIG_AUDIO, MENU_CONFG_AUDIO,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_AUDIO,AccessLevel)); if (g_Plugins->Audio() == NULL || g_Plugins->Audio()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); if (!inBasicMode) { Item.Reset(ID_OPTIONS_CONFIG_RSP, MENU_CONFG_RSP,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_RSP,AccessLevel)); if (g_Plugins->RSP() == NULL || g_Plugins->RSP()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); } Item.Reset(ID_OPTIONS_CONFIG_CONT, MENU_CONFG_CTRL,m_ShortCuts.ShortCutString(ID_OPTIONS_CONFIG_CONT,AccessLevel)); if (g_Plugins->Control() == NULL || g_Plugins->Control()->DllConfig == NULL) { Item.SetItemEnabled(false); } OptionMenu.push_back(Item); OptionMenu.push_back(MENU_ITEM(SPLITER)); if (!inBasicMode) { Item.Reset(ID_OPTIONS_CPU_USAGE, MENU_SHOW_CPU,m_ShortCuts.ShortCutString(ID_OPTIONS_CPU_USAGE,AccessLevel)); if (g_Settings->LoadDword(UserInterface_ShowCPUPer)) { Item.SetItemTicked(true); } OptionMenu.push_back(Item); } OptionMenu.push_back(MENU_ITEM(ID_OPTIONS_SETTINGS, MENU_SETTINGS,m_ShortCuts.ShortCutString(ID_OPTIONS_SETTINGS,AccessLevel) )); /* Profile Menu ****************/ MenuItemList DebugProfileMenu; if (bHaveDebugger()) { Item.Reset(ID_PROFILE_PROFILE,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Profile Code"); if (g_Settings->LoadBool(Debugger_ProfileCode)) { Item.SetItemTicked(true); } DebugProfileMenu.push_back(Item); Item.Reset(ID_PROFILE_RESETCOUNTER,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Reset Counters"); if (!CPURunning) { Item.SetItemEnabled(false); } DebugProfileMenu.push_back(Item); Item.Reset(ID_PROFILE_GENERATELOG,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Generate Log File"); if (!CPURunning) { Item.SetItemEnabled(false); } DebugProfileMenu.push_back(Item); } /* Debugger Menu ****************/ MenuItemList DebugMenu; MenuItemList DebugLoggingMenu; MenuItemList DebugAppLoggingMenu; MenuItemList DebugR4300Menu; MenuItemList DebugMemoryMenu; MenuItemList DebugInterrupt; MenuItemList DebugNotificationMenu; if (bHaveDebugger()) { /* Debug - Interrupt *******************/ Item.Reset(ID_DEBUGGER_INTERRUPT_SP,EMPTY_STRING,EMPTY_STDSTR,NULL,L"SP Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_SI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"SI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_AI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"AI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_VI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"VI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_PI,EMPTY_STRING,EMPTY_STDSTR,NULL,L"PI Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); Item.Reset(ID_DEBUGGER_INTERRUPT_DP,EMPTY_STRING,EMPTY_STDSTR,NULL,L"DP Interrupt"); Item.SetItemEnabled(CPURunning); DebugInterrupt.push_back(Item); /* Debug - R4300i *******************/ Item.Reset(ID_DEBUGGER_LOGOPTIONS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"R4300i &Commands..."); Item.SetItemEnabled(false); DebugR4300Menu.push_back(Item); Item.Reset(ID_DEBUGGER_R4300REGISTERS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"R4300i &Registers..."); Item.SetItemEnabled(true); DebugR4300Menu.push_back(Item); Item.Reset(ID_DEBUG_DISABLE_GAMEFIX,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Disable Game Fixes"); if (g_Settings->LoadBool(Debugger_DisableGameFixes)) { Item.SetItemTicked(true); } DebugR4300Menu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugInterrupt,L"&Generate Interrupt"); DebugR4300Menu.push_back(Item); /* Debug - Memory ****************/ Item.Reset(ID_DEBUGGER_MEMORY,EMPTY_STRING,EMPTY_STDSTR,NULL,L"View..."); DebugMemoryMenu.push_back(Item); Item.Reset(ID_DEBUGGER_SEARCHMEMORY,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Search..."); DebugMemoryMenu.push_back(Item); Item.Reset(ID_DEBUGGER_DUMPMEMORY,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Dump..."); DebugMemoryMenu.push_back(Item); Item.Reset(ID_DEBUGGER_TLBENTRIES,EMPTY_STRING,EMPTY_STDSTR,NULL,L"TLB Entries..."); DebugMemoryMenu.push_back(Item); /* Debug - App logging *******************/ { DWORD LogLevel = g_Settings->LoadDword(Debugger_AppLogLevel); Item.Reset(ID_DEBUGGER_APPLOG_ERRORS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Error Messages"); if ((LogLevel & TraceError) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_SETTINGS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Settings"); if ((LogLevel & TraceSettings) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_RECOMPILER,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Recompiler"); if ((LogLevel & TraceRecompiler) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_RSP,EMPTY_STRING,EMPTY_STDSTR,NULL,L"RSP"); if ((LogLevel & TraceRSP) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_TLB,EMPTY_STRING,EMPTY_STDSTR,NULL,L"TLB"); if ((LogLevel & TraceTLB) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_GFX_PLUGIN,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Gfx Plugin"); if ((LogLevel & TraceGfxPlugin) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_AUDIO_EMU,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Audio Emulation"); if ((LogLevel & TraceAudio) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_APPLOG_DEBUG,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Debug Messages"); if ((LogLevel & TraceDebug) != 0) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); DebugAppLoggingMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_DEBUGGER_APPLOG_FLUSH,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Auto flush file"); if (g_Settings->LoadBool(Debugger_AppLogFlush)) { Item.SetItemTicked(true); } DebugAppLoggingMenu.push_back(Item); } /* Debug - Logging *******************/ Item.Reset(ID_DEBUGGER_LOGOPTIONS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Log Options..."); DebugLoggingMenu.push_back(Item); Item.Reset(ID_DEBUGGER_GENERATELOG,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Generate Log"); if (g_Settings->LoadBool(Debugger_GenerateDebugLog)) { Item.SetItemTicked(true); } DebugLoggingMenu.push_back(Item); /* Debugger Main Menu ****************/ Item.Reset(ID_DEBUGGER_BREAKPOINTS, EMPTY_STRING,EMPTY_STDSTR, NULL,L"Breakpoint..."); Item.SetItemEnabled(CPURunning); DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); /* Debug - RSP *******************/ if (g_Plugins->RSP() != NULL && IsMenu((HMENU)g_Plugins->RSP()->GetDebugMenu())) { Item.Reset(ID_PLUGIN_MENU,EMPTY_STRING,EMPTY_STDSTR,g_Plugins->RSP()->GetDebugMenu(),L"&RSP"); DebugMenu.push_back(Item); } /* Debug - RDP *******************/ if (g_Plugins->Gfx() != NULL && IsMenu((HMENU)g_Plugins->Gfx()->GetDebugMenu())) { Item.Reset(ID_PLUGIN_MENU,EMPTY_STRING,EMPTY_STDSTR,g_Plugins->Gfx()->GetDebugMenu(),L"&RDP"); DebugMenu.push_back(Item); } /* Notification Menu *******************/ Item.Reset(ID_DEBUG_SHOW_UNHANDLED_MEM,EMPTY_STRING,EMPTY_STDSTR,NULL,L"On Unhandled Memory Actions"); if (g_Settings->LoadBool(Debugger_ShowUnhandledMemory)) { Item.SetItemTicked(true); } DebugNotificationMenu.push_back(Item); Item.Reset(ID_DEBUG_SHOW_PIF_ERRORS,EMPTY_STRING,EMPTY_STDSTR,NULL,L"On PIF Errors"); if (g_Settings->LoadBool(Debugger_ShowPifErrors)) { Item.SetItemTicked(true); } DebugNotificationMenu.push_back(Item); Item.Reset(ID_DEBUG_SHOW_DIV_BY_ZERO,EMPTY_STRING,EMPTY_STDSTR,NULL,L"On Div By Zero"); if (g_Settings->LoadBool(Debugger_ShowDivByZero)) { Item.SetItemTicked(true); } DebugNotificationMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugR4300Menu,L"&R4300i"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugMemoryMenu,L"Memory"); Item.SetItemEnabled(CPURunning); DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugProfileMenu,L"Profile"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugAppLoggingMenu,L"App Logging"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugLoggingMenu,L"Logging"); DebugMenu.push_back(Item); Item.Reset(SUB_MENU, EMPTY_STRING,EMPTY_STDSTR, &DebugNotificationMenu,L"Notification"); DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_DEBUG_SHOW_TLB_MISSES,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Show TLB Misses"); if (g_Settings->LoadBool(Debugger_ShowTLBMisses)) { Item.SetItemTicked(true); } Item.Reset(ID_DEBUG_SHOW_DLIST_COUNT,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Display Alist/Dlist Count"); if (g_Settings->LoadBool(Debugger_ShowDListAListCount)) { Item.SetItemTicked(true); } DebugMenu.push_back(Item); Item.Reset(ID_DEBUG_SHOW_RECOMP_MEM_SIZE,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Display Recompiler Code Buffer Size"); if (g_Settings->LoadBool(Debugger_ShowRecompMemSize)) { Item.SetItemTicked(true); } DebugMenu.push_back(Item); DebugMenu.push_back(MENU_ITEM(SPLITER)); Item.Reset(ID_DEBUG_GENERATE_LOG_FILES,EMPTY_STRING,EMPTY_STDSTR,NULL,L"Generate Log Files"); if (g_Settings->LoadBool(Debugger_GenerateLogFiles)) { Item.SetItemTicked(true); } DebugMenu.push_back(Item); } /* Help Menu ****************/ MenuItemList HelpMenu; HelpMenu.push_back(MENU_ITEM(ID_HELP_SUPPORTFORUM, MENU_FORUM)); HelpMenu.push_back(MENU_ITEM(ID_HELP_HOMEPAGE, MENU_HOMEPAGE)); HelpMenu.push_back(MENU_ITEM(SPLITER)); if (!inBasicMode) { HelpMenu.push_back(MENU_ITEM(ID_HELP_ABOUTSETTINGFILES, MENU_ABOUT_INI)); } HelpMenu.push_back(MENU_ITEM(ID_HELP_ABOUT, MENU_ABOUT_PJ64)); /* Main Title bar Menu ***********************/ MenuItemList MainTitleMenu; Item.Reset(SUB_MENU, MENU_FILE, EMPTY_STDSTR, &FileMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); if (CPURunning) { Item.Reset(SUB_MENU, MENU_SYSTEM, EMPTY_STDSTR, &SystemMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); } Item.Reset(SUB_MENU, MENU_OPTIONS, EMPTY_STDSTR, &OptionMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); if (!inBasicMode) { if (bHaveDebugger()) { Item.Reset(SUB_MENU, MENU_DEBUGGER, EMPTY_STDSTR, &DebugMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); } } Item.Reset(SUB_MENU, MENU_HELP, EMPTY_STDSTR, &HelpMenu); if (RomLoading) { Item.SetItemEnabled(false); } MainTitleMenu.push_back(Item); AddMenu(hMenu,MainTitleMenu); }
bool FileFilter::FilterEdit() { if (bMenuOpen) return false; Changed = true; bMenuOpen = true; MenuItemEx ListItem; int ExitCode; bool bNeedUpdate=false; VMenu FilterList(MSG(MFilterTitle),nullptr,0,ScrY-6); FilterList.SetHelp(L"FiltersMenu"); FilterList.SetPosition(-1,-1,0,0); FilterList.SetBottomTitle(MSG(MFilterBottom)); FilterList.SetFlags(/*VMENU_SHOWAMPERSAND|*/VMENU_WRAPMODE); for (size_t i=0; i<FilterData.getCount(); i++) { ListItem.Clear(); MenuString(ListItem.strName,FilterData.getItem(i)); if (!i) ListItem.Flags|=LIF_SELECTED; int Check = GetCheck(FilterData.getItem(i)); if (Check) ListItem.SetCheck(Check); FilterList.AddItem(&ListItem); } ListItem.Clear(); if (!FilterData.getCount()) ListItem.Flags|=LIF_SELECTED; FilterList.AddItem(&ListItem); if (m_FilterType != FFT_CUSTOM) { wchar_t *ExtPtr=nullptr; int ExtCount=0; { enumFileFilterFlagsType FFFT = GetFFFT(); for (size_t i=0; i<TempFilterData.getCount(); i++) { //AY: Будем показывать только те выбранные авто фильтры //(для которых нету файлов на панели) которые выбраны в области данного меню if (!TempFilterData.getItem(i)->GetFlags(FFFT)) continue; const wchar_t *FMask; TempFilterData.getItem(i)->GetMask(&FMask); string strMask = FMask; Unquote(strMask); if (!ParseAndAddMasks(&ExtPtr,strMask,0,ExtCount,GetCheck(TempFilterData.getItem(i)))) break; } } ListItem.Clear(); ListItem.Flags|=LIF_SEPARATOR; FilterList.AddItem(&ListItem); ListItem.Clear(); FoldersFilter.SetTitle(MSG(MFolderFileType)); MenuString(ListItem.strName,&FoldersFilter,false,L'0'); int Check = GetCheck(&FoldersFilter); if (Check) ListItem.SetCheck(Check); FilterList.AddItem(&ListItem); if (GetHostPanel()->GetMode()==NORMAL_PANEL) { string strCurDir, strFileName; FAR_FIND_DATA_EX fdata; GetHostPanel()->GetCurDir(strCurDir); ScanTree ScTree(FALSE,FALSE); ScTree.SetFindPath(strCurDir,L"*"); while (ScTree.GetNextName(&fdata,strFileName)) if (!ParseAndAddMasks(&ExtPtr,fdata.strFileName,fdata.dwFileAttributes,ExtCount,0)) break; } else { string strFileName; DWORD FileAttr; for (int i=0; GetHostPanel()->GetFileName(strFileName,i,FileAttr); i++) if (!ParseAndAddMasks(&ExtPtr,strFileName,FileAttr,ExtCount,0)) break; } far_qsort((void *)ExtPtr,ExtCount,MAX_PATH*sizeof(wchar_t),ExtSort); ListItem.Clear(); for (int i=0, h=L'1'; i<ExtCount; i++, (h==L'9'?h=L'A':(h==L'Z'||h?h++:h=0))) { wchar_t *CurExtPtr=ExtPtr+i*MAX_PATH; MenuString(ListItem.strName,nullptr,false,h,true,CurExtPtr,MSG(MPanelFileType)); int Length = StrLength(CurExtPtr)+1; ListItem.SetCheck(CurExtPtr[Length]); FilterList.SetUserData(CurExtPtr, Length*sizeof(wchar_t), FilterList.AddItem(&ListItem)); } xf_free(ExtPtr); } FilterList.Show(); while (!FilterList.Done()) { int Key=FilterList.ReadInput(); if (Key==KEY_ADD) Key=L'+'; else if (Key==KEY_SUBTRACT) Key=L'-'; else if (Key==L'i') Key=L'I'; else if (Key==L'x') Key=L'X'; switch (Key) { case L'+': case L'-': case L'I': case L'X': case KEY_SPACE: case KEY_BS: { int SelPos=FilterList.GetSelectPos(); if (SelPos<0 || SelPos==(int)FilterData.getCount()) break; int Check=FilterList.GetCheck(SelPos); int NewCheck; if (Key==KEY_BS) NewCheck = 0; else if (Key==KEY_SPACE) NewCheck = Check ? 0 : L'+'; else NewCheck = (Check == Key) ? 0 : Key; FilterList.SetCheck(NewCheck,SelPos); FilterList.SetSelectPos(SelPos,1); FilterList.SetUpdateRequired(TRUE); FilterList.FastShow(); FilterList.ProcessKey(KEY_DOWN); bNeedUpdate=true; break; } case KEY_SHIFTBS: { for (int I=0; I < FilterList.GetItemCount(); I++) { FilterList.SetCheck(FALSE, I); } FilterList.SetUpdateRequired(TRUE); FilterList.FastShow(); break; } case KEY_F4: { int SelPos=FilterList.GetSelectPos(); if (SelPos<0) break; if (SelPos<(int)FilterData.getCount()) { if (FileFilterConfig(FilterData.getItem(SelPos))) { ListItem.Clear(); MenuString(ListItem.strName,FilterData.getItem(SelPos)); int Check = GetCheck(FilterData.getItem(SelPos)); if (Check) ListItem.SetCheck(Check); FilterList.DeleteItem(SelPos); FilterList.AddItem(&ListItem,SelPos); FilterList.SetSelectPos(SelPos,1); FilterList.SetUpdateRequired(TRUE); FilterList.FastShow(); bNeedUpdate=true; } } else if (SelPos>(int)FilterData.getCount()) { Message(MSG_WARNING,1,MSG(MFilterTitle),MSG(MCanEditCustomFilterOnly),MSG(MOk)); } break; } case KEY_NUMPAD0: case KEY_INS: case KEY_F5: { int pos=FilterList.GetSelectPos(); if (pos<0) break; size_t SelPos=pos; size_t SelPos2=pos+1; SelPos = Min(FilterData.getCount(), SelPos); FileFilterParams *NewFilter = FilterData.insertItem(SelPos); if (!NewFilter) break; if (Key==KEY_F5) { if (SelPos2 < FilterData.getCount()) { *NewFilter = *FilterData.getItem(SelPos2); NewFilter->SetTitle(L""); NewFilter->ClearAllFlags(); } else if (SelPos2 == FilterData.getCount()+2) { *NewFilter = FoldersFilter; NewFilter->SetTitle(L""); NewFilter->ClearAllFlags(); } else if (SelPos2 > FilterData.getCount()+2) { NewFilter->SetMask(1,static_cast<const wchar_t*>(FilterList.GetUserData(nullptr, 0, static_cast<int>(SelPos2-1)))); //Авто фильтры они только для файлов, папки не должны к ним подходить NewFilter->SetAttr(1,0,FILE_ATTRIBUTE_DIRECTORY); } else { FilterData.deleteItem(SelPos); break; } } else { //AY: Раз создаём новый фильтр то думаю будет логично если он будет только для файлов NewFilter->SetAttr(1,0,FILE_ATTRIBUTE_DIRECTORY); } if (FileFilterConfig(NewFilter)) { ListItem.Clear(); MenuString(ListItem.strName,NewFilter); FilterList.AddItem(&ListItem,static_cast<int>(SelPos)); FilterList.SetSelectPos(static_cast<int>(SelPos),1); FilterList.SetPosition(-1,-1,0,0); FilterList.Show(); bNeedUpdate=true; } else FilterData.deleteItem(SelPos); break; } case KEY_NUMDEL: case KEY_DEL: { int SelPos=FilterList.GetSelectPos(); if (SelPos<0) break; if (SelPos<(int)FilterData.getCount()) { string strQuotedTitle=FilterData.getItem(SelPos)->GetTitle(); InsertQuote(strQuotedTitle); if (!Message(0,2,MSG(MFilterTitle),MSG(MAskDeleteFilter), strQuotedTitle,MSG(MDelete),MSG(MCancel))) { FilterData.deleteItem(SelPos); FilterList.DeleteItem(SelPos); FilterList.SetSelectPos(SelPos,1); FilterList.SetPosition(-1,-1,0,0); FilterList.Show(); bNeedUpdate=true; } } else if (SelPos>(int)FilterData.getCount()) { Message(MSG_WARNING,1,MSG(MFilterTitle),MSG(MCanDeleteCustomFilterOnly),MSG(MOk)); } break; } case KEY_CTRLUP: case KEY_RCTRLUP: case KEY_CTRLDOWN: case KEY_RCTRLDOWN: { int SelPos=FilterList.GetSelectPos(); if (SelPos<0) break; if (SelPos<(int)FilterData.getCount() && !((Key==KEY_CTRLUP || Key==KEY_RCTRLUP) && !SelPos) && !((Key==KEY_CTRLDOWN || Key==KEY_RCTRLDOWN) && SelPos==(int)(FilterData.getCount()-1))) { int NewPos = SelPos + ((Key == KEY_CTRLDOWN || Key == KEY_RCTRLDOWN) ? 1 : -1); MenuItemEx CurItem = *FilterList.GetItemPtr(SelPos); MenuItemEx NextItem = *FilterList.GetItemPtr(NewPos); FilterData.swapItems(NewPos,SelPos); if (NewPos<SelPos) { FilterList.DeleteItem(NewPos,2); FilterList.AddItem(&CurItem,NewPos); FilterList.AddItem(&NextItem,SelPos); } else { FilterList.DeleteItem(SelPos,2); FilterList.AddItem(&NextItem,SelPos); FilterList.AddItem(&CurItem,NewPos); } FilterList.SetSelectPos(NewPos,1); FilterList.SetUpdateRequired(TRUE); FilterList.FastShow(); bNeedUpdate=true; } break; } default: { FilterList.ProcessInput(); //заставляем хоткеи позиционировать курсор на пункте но не закрывать меню if (Key!=KEY_NUMENTER && Key!=KEY_ENTER && Key!=KEY_ESC && Key!=KEY_F10 && (IsAlphaNum(Key) || Key&(KEY_ALT|KEY_RALT))) FilterList.ClearDone(); } } } FilterList.Hide(); ExitCode=FilterList.Modal::GetExitCode(); if (ExitCode!=-1) ProcessSelection(&FilterList); if (Opt.AutoSaveSetup) SaveFilters(); if (ExitCode!=-1 || bNeedUpdate) { if (m_FilterType == FFT_PANEL) { GetHostPanel()->Update(UPDATE_KEEP_SELECTION); GetHostPanel()->Redraw(); } } bMenuOpen = false; return (ExitCode!=-1); }