int InputDevice::GetAxisIndex(const Axis* axis) const { for (int i = 0; i < GetAxisCount(); ++i) { if (GetAxis(i) == axis) { return i; } } return -1; }
// Take the result of the popup menu selection, figure out // what the user wanted, and take the appropriate action int CXYChart::InterpretPopupMenuItem( int result ) { int whichAxis, returnVal; if( result >= kMinimumPopupValue ) return result; if( result <= 0 ) return kPopupError; if( result <= kMenuMinorVertGrids ) { switch( result ) { case kMenuMajorHorizGrids: m_UseMajorHorizontalGrids = !m_UseMajorHorizontalGrids; break; case kMenuMajorVertGrids: m_UseMajorVerticalGrids = !m_UseMajorVerticalGrids; break; case kMenuMinorHorizGrids: m_UseMinorHorizontalGrids = !m_UseMinorHorizontalGrids; break; case kMenuMinorVertGrids: m_UseMinorVerticalGrids = !m_UseMinorVerticalGrids; break; default: break; } return kPopupUpdate; } if( result >= kMenuTitleFont && result < kMenuTitleFont + nFontSizes ) { m_TitleFont.lfHeight = fontSizes[result-kMenuTitleFont]; return kPopupUpdate; } if( result == kMenuPlotSettings ) { if( PlotSettings() ) return kPopupUpdate; else return kPopupNoAction; } if( result >= kMenuAxisMinimum && result < kMenuAxisMinimum + (kMaxAxes*kMenuAxisRange) ) { // These must be axis sets whichAxis = (result-kMenuAxisMinimum) / kMenuAxisRange; if( whichAxis < 0 || whichAxis > GetAxisCount() ) return kPopupError; if( result % kMenuAxisRange == kMenuAxisRange-1 ) // have to do this one manually if( AxisSettings(whichAxis) ) return kPopupUpdate; else return kPopupNoAction; if( (returnVal = GetAxis(whichAxis)->InterpretAxisPopupMenuItem( (result-kMenuAxisMinimum) % kMenuAxisRange ) ) == kPopupError ) return result; else return returnVal; } if( result >= kMenuDataMinimum && result < kMenuDataMinimum + kMaxDataSets*kMenuDataRange ) { int whichDataSet; whichDataSet = (result-kMenuDataMinimum) / kMenuDataRange; if( whichDataSet < 0 || whichDataSet > GetDataSetCount() ) return kPopupError; if( (result-kMenuDataMinimum) % kMenuDataRange == kMenuDataRange-1 ) // have to do this one manually if( DataSettings(whichDataSet) ) return kPopupUpdate; else return kPopupNoAction; if( (returnVal = InterpretDataSetPopupMenuItem( whichDataSet, (result-kMenuDataMinimum) % kMenuDataRange ) ) == kPopupError ) return result; else return returnVal; } return kPopupError; }
// Show the contextual menu (shortcut menu) for an XY Chart. If passedMenu // is not NULL, the menu is appended to passedMenu, otherwise a new // menu is created int CXYChart::ShowPopupMenu( CMenu *passedMenu, CWnd *window, UINT nFlags, CPoint point ) { CMenu menu, *menuPtr; CMenu axisMenus[kMaxAxes]; int result, i; UINT flag; if( window == NULL ) return FALSE; if( passedMenu == NULL || (!::IsMenu(passedMenu->m_hMenu)) ) { menuPtr = &menu; menuPtr->CreatePopupMenu(); } else menuPtr = passedMenu; // Grids sub-menu { CMenu gridSubMenu; gridSubMenu.CreatePopupMenu(); flag = GetPopupCheckedFlag(this->m_UseMajorHorizontalGrids); gridSubMenu.AppendMenu( MF_STRING | flag, kMenuMajorHorizGrids, _T("Major Horizontal Grids")); flag = GetPopupCheckedFlag(this->m_UseMajorVerticalGrids); gridSubMenu.AppendMenu( MF_STRING | flag, kMenuMajorVertGrids, _T("Major Vertical Grids")); flag = GetPopupCheckedFlag(this->m_UseMinorHorizontalGrids); gridSubMenu.AppendMenu( MF_STRING | flag, kMenuMinorHorizGrids, _T("Minor Horizontal Grids")); flag = GetPopupCheckedFlag(this->m_UseMinorVerticalGrids); gridSubMenu.AppendMenu( MF_STRING | flag, kMenuMinorVertGrids, _T("Minor Vertical Grids")); menuPtr->AppendMenu( MF_POPUP | MF_STRING, (UINT) gridSubMenu.GetSafeHmenu(), _T("Grids")); } // Separator menuPtr->AppendMenu( MF_SEPARATOR); // Check for a title, and put in title size if needed if( this->m_Title != "" ) { AddFontSizePopup( menuPtr, _T("Title size"), this->m_TitleFont.lfHeight, kMenuTitleFont ); // Separator menuPtr->AppendMenu( MF_SEPARATOR); } // Axes for( i = 0; i < GetAxisCount(); i++ ) { GetAxis(i)->AddAxisPopupMenus( menuPtr, (kMenuAxisRange*i)+kMenuAxisMinimum ); } // Separator if( GetAxisCount() > 0 ) menuPtr->AppendMenu( MF_SEPARATOR); // Data sets for( i = 0; i < GetDataSetCount(); i++ ) { AddDataPopupMenus( i, menuPtr, (kMenuDataRange*i) + kMenuDataMinimum ); } // Separator if( GetDataSetCount() > 0 ) menuPtr->AppendMenu( MF_SEPARATOR); // Settings... menuPtr->AppendMenu( MF_STRING, kMenuPlotSettings, _T("Settings...")); result = menuPtr->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, point.x, point.y, window ); return InterpretPopupMenuItem( result ); }