void CStrategyInfoDlg::OnRclickListStrategyInfo(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here DWORD dwPos = GetMessagePos(); CPoint point1( LOWORD(dwPos), HIWORD(dwPos) ); CPoint point2( LOWORD(dwPos), HIWORD(dwPos) ); m_listStrategyInfo.ScreenToClient(&point2); m_nRSelItem = m_listStrategyInfo.HitTest(point2); if (point1.x == -1 && point1.y == -1) point1.Offset(5, 5); CMenu menu; VERIFY(menu.LoadMenu(IDR_POP_MENU)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); SetMenuState(m_nRSelItem, pPopup); pPopup-> TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, this); *pResult = 0; }
// Builds the GSiegeWindowClass main class and registers it HWND MainWindowClassBuilder() { WNDCLASSEX wc; RECT rc; // Load user settings UserSettings.MainWidth = MAINWIDTH; if ( UserSettings.EnableChat ) { TAB_CHAT_HEIGHT = TAB_STATIC_HEIGHT; UserSettings.MainHeight = (MAINHEIGHT + GetSystemMetrics(SM_CYMENU)) + TAB_CHAT_HEIGHT; } else { TAB_CHAT_HEIGHT = 0; UserSettings.MainHeight = MAINHEIGHT + GetSystemMetrics(SM_CYMENU); } // Define class properties and register. wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = MainWindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = GlobalSettings.hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); wc.lpszMenuName = GSIEGE_MENU_NAME; wc.lpszClassName = GSIEGE_MAIN_CLASS; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if( !RegisterClassEx(&wc) ) { MessageBox(NULL, "Failed to register g_szMainWindow class.", "Error", MB_ICONEXCLAMATION | MB_OK); return 0; } // Build main window. GlobalSettings.hMainWindow = CreateWindowEx( WS_EX_WINDOWEDGE, GSIEGE_MAIN_CLASS, GSIEGE_VERSION_STRING, WS_OVERLAPPEDWINDOW, (UserSettings.MainX ? UserSettings.MainX : CW_USEDEFAULT), (UserSettings.MainY ? UserSettings.MainY : CW_USEDEFAULT), UserSettings.MainWidth, UserSettings.MainHeight, NULL, NULL, GlobalSettings.hInstance, NULL); if( GlobalSettings.hMainWindow == NULL ) { MessageBox(NULL, "Failed to create g_hMainWindow.", "Error", MB_ICONEXCLAMATION | MB_OK); return 0; } // Load menu items GlobalSettings.hMenu = GetMenu(GlobalSettings.hMainWindow); // Set window position in z-order SetWindowState(); SetMenuState(); memset(&rc, 0, sizeof(rc)); GetClientRect(GlobalSettings.hMainWindow, &rc); UserSettings.ClientWidth = rc.right - rc.left; UserSettings.ClientHeight = rc.bottom - rc.top; // Draw main window. ShowWindow(GlobalSettings.hMainWindow, GlobalSettings.nCmdShow); UpdateWindow(GlobalSettings.hMainWindow); return GlobalSettings.hMainWindow; }
void AudacityProject::OnUpdateMenus(wxUpdateUIEvent & event) { if (mMenusDirtyCheck != gMenusDirty) { /* TODO! */ } /* #define AUDACITY_MENUS_COMMANDS_ACCELL_TABLE #include "commands.h" #undef AUDACITY_MENUS_COMMANDS_ACCELL_TABLE */ SetMenuState(mFileMenu, SaveID, mUndoManager.UnsavedChanges()); bool nonZeroRegionSelected = (mViewInfo.sel1 > mViewInfo.sel0); int numTracks = 0; int numTracksSelected = 0; int numWaveTracks = 0; int numWaveTracksSelected = 0; int numLabelTracks = 0; int numLabelTracksSelected = 0; TrackListIterator iter(mTracks); VTrack *t = iter.First(); while (t) { numTracks++; // JH: logically, we only want to count a stereo pair as one track. Right?? // I'm changing it and hoping I don't break anything if (t->GetKind() == VTrack::Wave && t->GetLinked() == false) numWaveTracks++; if (t->GetKind() == VTrack::Label) numLabelTracks++; if (t->GetSelected()) { numTracksSelected++; // JH: logically, we only want to count a stereo pair as one track. Right?? // I'm changing it and hoping I don't break anything if (t->GetKind() == VTrack::Wave && t->GetLinked() == false) numWaveTracksSelected++; else if(t->GetKind() == VTrack::Label) numLabelTracksSelected++; } t = iter.Next(); } SetMenuState(mEditMenu, PasteID, numTracksSelected > 0 && msClipLen > 0.0); //Calculate the ToolBarCheckSum (uniquely specifies state of all toolbars): int toolBarCheckSum = 0; toolBarCheckSum += gControlToolBarStub->GetWindowedStatus() ? 2 : 1; if (gEditToolBarStub) { if (gEditToolBarStub->GetLoadedStatus()) { if(gEditToolBarStub->GetWindowedStatus()) toolBarCheckSum += 6; else toolBarCheckSum += 3; } } // Get ahold of the clipboard status bool clipboardStatus = static_cast<bool>(GetActiveProject()->Clipboard()); // Return from this function if nothing's changed since // the last time we were here. if (!mFirstTimeUpdateMenus && mLastNonZeroRegionSelected == nonZeroRegionSelected && mLastNumTracks == numTracks && mLastNumTracksSelected == numTracksSelected && mLastNumWaveTracks == numWaveTracks && mLastNumWaveTracksSelected == numWaveTracksSelected && mLastNumLabelTracks == numLabelTracks && mLastZoomLevel == mViewInfo.zoom && mLastToolBarCheckSum == toolBarCheckSum && mLastUndoState == mUndoManager.UndoAvailable() && mLastRedoState == mUndoManager.RedoAvailable() && mLastClipboardState == clipboardStatus ) return; // Otherwise, save state and then update all of the menus mFirstTimeUpdateMenus = false; mLastNonZeroRegionSelected = nonZeroRegionSelected; mLastNumTracks = numTracks; mLastNumTracksSelected = numTracksSelected; mLastNumWaveTracks = numWaveTracks; mLastNumWaveTracksSelected = numWaveTracksSelected; mLastNumLabelTracks = numLabelTracks; mLastZoomLevel = mViewInfo.zoom; mLastToolBarCheckSum = toolBarCheckSum; mLastUndoState = mUndoManager.UndoAvailable(); mLastRedoState = mUndoManager.RedoAvailable(); mLastClipboardState = clipboardStatus; bool anySelection = numTracksSelected > 0 && nonZeroRegionSelected; SetMenuState(mFileMenu, ExportMixID, numTracks > 0); SetMenuState(mFileMenu, ExportSelectionID, anySelection); SetMenuState(mFileMenu, ExportLossyMixID, numTracks > 0); SetMenuState(mFileMenu, ExportLossySelectionID, anySelection); SetMenuState(mFileMenu, ExportLabelsID, numLabelTracks > 0); SetMenuState(mEditMenu, CutID, anySelection); SetMenuState(mEditMenu, CopyID, anySelection); SetMenuState(mEditMenu, TrimID, anySelection); SetMenuState(mEditMenu, DeleteID, anySelection); SetMenuState(mEditMenu, SilenceID, anySelection); SetMenuState(mEditMenu, InsertSilenceID, numTracksSelected > 0); SetMenuState(mEditMenu, SplitID, anySelection); SetMenuState(mEditMenu, SplitLabelsID, numLabelTracksSelected == 1 && numWaveTracksSelected == 1); SetMenuState(mEditMenu, DuplicateID, anySelection); SetMenuState(mEditMenu, SelectAllID, numTracks > 0); SetMenuState(mEditMenu, UndoID, mUndoManager.UndoAvailable()); SetMenuState(mEditMenu, RedoID, mUndoManager.RedoAvailable()); SetMenuState(mViewMenu, PlotSpectrumID, numWaveTracksSelected > 0 && nonZeroRegionSelected); #ifndef __WXMAC__ //Modify toolbar-specific Menus wxMenuItemBase *dock = mViewMenu->FindItem(FloatEditToolBarID); if (gEditToolBarStub) { // Loaded or unloaded? if (gEditToolBarStub->GetLoadedStatus()) { dock->Enable(true); } else { dock->Enable(false); } // Floating or docked? if (gEditToolBarStub->GetWindowedStatus()) dock->SetName(_("Dock Edit Toolbar")); else dock->SetName(_("Float Edit Toolbar")); } else { dock->Enable(false); } #endif SetMenuState(mProjectMenu, QuickMixID, numWaveTracksSelected > 1); SetMenuState(mProjectMenu, AlignID, numTracksSelected > 1); SetMenuState(mProjectMenu, AlignZeroID, numTracksSelected > 0); SetMenuState(mProjectMenu, RemoveTracksID, numTracksSelected > 0); //Enable the effects menu int e; for (e = 0; e < Effect::GetNumEffects(false); e++) { mEffectMenu->Enable(FirstEffectID + e, numWaveTracksSelected > 0 && nonZeroRegionSelected); } //STM: This makes sub-menus for the plugin menu. It might only work well //on wxGTK, so I'm doing conditional compilation. #if defined __WXGTK__ //Enable/disable the Plugins menu options. int numPlugins = Effect::GetNumEffects(true); //enable or disable each menu item based on whether there is a selection. for (e = 0; e < numPlugins; e++) { mPluginMenu->Enable(FirstPluginID + e, numWaveTracksSelected > 0 && nonZeroRegionSelected); } #else for (e = 0; e < Effect::GetNumEffects(true); e++) { mPluginMenu->Enable(FirstPluginID + e, numWaveTracksSelected > 0 && nonZeroRegionSelected); } #endif //Now, go through each toolbar, and and call EnableDisableButtons() unsigned int i; for (i = 0; i < mToolBarArray.GetCount(); i++) { mToolBarArray[i]->EnableDisableButtons(); } //Now, do the same thing for the (possibly invisible) floating toolbars gControlToolBarStub->GetToolBar()->EnableDisableButtons(); //gEditToolBarStub might be null: if(gEditToolBarStub){ gEditToolBarStub->GetToolBar()->EnableDisableButtons(); } }