735 lines · 36.3 KB · C++
RawDownload
        UNSPECIFIED_POSITION, "Developer");     addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableCharacterController, 0, true,        avatar, SLOT(updateMotionBehaviorFromMenu()),        UNSPECIFIED_POSITION, "Developer");     // Developer > Hands >>>    MenuWrapper* handOptionsMenu = developerMenu->addMenu("Hands");    addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::DisplayHandTargets, 0, false,        avatar, SLOT(setEnableDebugDrawHandControllers(bool)));    addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::LowVelocityFilter, 0, true,        qApp, SLOT(setLowVelocityFilter(bool)));     MenuWrapper* leapOptionsMenu = handOptionsMenu->addMenu("Leap Motion");    addCheckableActionToQMenuAndActionHash(leapOptionsMenu, MenuOption::LeapMotionOnHMD, 0, false);     // Developer > Entities >>>    MenuWrapper* entitiesOptionsMenu = developerMenu->addMenu("Entities");    addActionToQMenuAndActionHash(entitiesOptionsMenu, MenuOption::OctreeStats, 0,        dialogsManager.data(), SLOT(octreeStatsDetails()));    addCheckableActionToQMenuAndActionHash(entitiesOptionsMenu, MenuOption::ShowRealtimeEntityStats);     // Developer > Network >>>    MenuWrapper* networkMenu = developerMenu->addMenu("Network");    addActionToQMenuAndActionHash(networkMenu, MenuOption::ReloadContent, 0, qApp, SLOT(reloadResourceCaches()));    addCheckableActionToQMenuAndActionHash(networkMenu,        MenuOption::DisableActivityLogger,        0,        false,        &UserActivityLogger::getInstance(),        SLOT(disable(bool)));    addActionToQMenuAndActionHash(networkMenu, MenuOption::CachesSize, 0,        dialogsManager.data(), SLOT(cachesSizeDialog()));    addActionToQMenuAndActionHash(networkMenu, MenuOption::DiskCacheEditor, 0,        dialogsManager.data(), SLOT(toggleDiskCacheEditor()));    addActionToQMenuAndActionHash(networkMenu, MenuOption::ShowDSConnectTable, 0,        dialogsManager.data(), SLOT(showDomainConnectionDialog()));    addActionToQMenuAndActionHash(networkMenu, MenuOption::BandwidthDetails, 0,        dialogsManager.data(), SLOT(bandwidthDetails()));     #if (PR_BUILD || DEV_BUILD)    addCheckableActionToQMenuAndActionHash(networkMenu, MenuOption::SendWrongProtocolVersion, 0, false,                qApp, SLOT(sendWrongProtocolVersionsSignature(bool)));     addCheckableActionToQMenuAndActionHash(networkMenu, MenuOption::SendWrongDSConnectVersion, 0, false,                                           nodeList.data(), SLOT(toggleSendNewerDSConnectVersion(bool)));    #endif           // Developer > Timing >>>    MenuWrapper* timingMenu = developerMenu->addMenu("Timing");    MenuWrapper* perfTimerMenu = timingMenu->addMenu("Performance Timer");    addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::DisplayDebugTimingDetails, 0, false);    addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::OnlyDisplayTopTen, 0, true);    addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::ExpandUpdateTiming, 0, false);    addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::ExpandMyAvatarTiming, 0, false);    addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::ExpandMyAvatarSimulateTiming, 0, false);    addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::ExpandOtherAvatarTiming, 0, false);    addCheckableActionToQMenuAndActionHash(perfTimerMenu, MenuOption::ExpandPaintGLTiming, 0, false);     addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::FrameTimer);    addActionToQMenuAndActionHash(timingMenu, MenuOption::RunTimingTests, 0, qApp, SLOT(runTests()));    addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::PipelineWarnings);    addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::LogExtraTimings);    addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SuppressShortTimings);      // Developer > Audio >>>    MenuWrapper* audioDebugMenu = developerMenu->addMenu("Audio");    addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::AudioNoiseReduction, 0, true,        audioIO.data(), SLOT(toggleAudioNoiseReduction()));    addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::EchoServerAudio, 0, false,        audioIO.data(), SLOT(toggleServerEcho()));    addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::EchoLocalAudio, 0, false,        audioIO.data(), SLOT(toggleLocalEcho()));    addActionToQMenuAndActionHash(audioDebugMenu, MenuOption::MuteEnvironment, 0,        audioIO.data(), SLOT(sendMuteEnvironmentPacket()));     auto scope = DependencyManager::get<AudioScope>();    MenuWrapper* audioScopeMenu = audioDebugMenu->addMenu("Audio Scope");    addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScope, Qt::CTRL | Qt::Key_P, false,        scope.data(), SLOT(toggle()));    addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScopePause, Qt::CTRL | Qt::SHIFT | Qt::Key_P, false,        scope.data(), SLOT(togglePause()));     addDisabledActionAndSeparator(audioScopeMenu, "Display Frames");    {        QAction* fiveFrames = addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScopeFiveFrames,            0, true, scope.data(), SLOT(selectAudioScopeFiveFrames()));         QAction* twentyFrames = addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScopeTwentyFrames,            0, false, scope.data(), SLOT(selectAudioScopeTwentyFrames()));         QAction* fiftyFrames = addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScopeFiftyFrames,            0, false, scope.data(), SLOT(selectAudioScopeFiftyFrames()));         QActionGroup* audioScopeFramesGroup = new QActionGroup(audioScopeMenu);        audioScopeFramesGroup->addAction(fiveFrames);        audioScopeFramesGroup->addAction(twentyFrames);        audioScopeFramesGroup->addAction(fiftyFrames);    }     // Developer > Audio > Audio Network Stats...    addActionToQMenuAndActionHash(audioDebugMenu, MenuOption::AudioNetworkStats, 0,        dialogsManager.data(), SLOT(audioStatsDetails()));     // Developer > Physics >>>    MenuWrapper* physicsOptionsMenu = developerMenu->addMenu("Physics");    {        auto drawStatusConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<render::DrawStatus>();        addCheckableActionToQMenuAndActionHash(physicsOptionsMenu, MenuOption::PhysicsShowOwned,            0, false, drawStatusConfig, SLOT(setShowNetwork(bool)));    }    addCheckableActionToQMenuAndActionHash(physicsOptionsMenu, MenuOption::PhysicsShowHulls);     // Developer > Ask to Reset Settings    addCheckableActionToQMenuAndActionHash(developerMenu, MenuOption::AskToResetSettings, 0, false);     // Developer > Display Crash Options    addCheckableActionToQMenuAndActionHash(developerMenu, MenuOption::DisplayCrashOptions, 0, true);     // Developer > Crash >>>    MenuWrapper* crashMenu = developerMenu->addMenu("Crash");     addActionToQMenuAndActionHash(crashMenu, MenuOption::DeadlockInterface, 0, qApp, SLOT(deadlockApplication()));     action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashPureVirtualFunction);    connect(action, &QAction::triggered, qApp, []() { crash::pureVirtualCall(); });    action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashPureVirtualFunctionThreaded);    connect(action, &QAction::triggered, qApp, []() { std::thread([]() { crash::pureVirtualCall(); }); });     action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashDoubleFree);    connect(action, &QAction::triggered, qApp, []() { crash::doubleFree(); });    action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashDoubleFreeThreaded);    connect(action, &QAction::triggered, qApp, []() { std::thread([]() { crash::doubleFree(); }); });     action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashAbort);    connect(action, &QAction::triggered, qApp, []() { crash::doAbort(); });    action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashAbortThreaded);    connect(action, &QAction::triggered, qApp, []() { std::thread([]() { crash::doAbort(); }); });     action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashNullDereference);    connect(action, &QAction::triggered, qApp, []() { crash::nullDeref(); });    action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashNullDereferenceThreaded);    connect(action, &QAction::triggered, qApp, []() { std::thread([]() { crash::nullDeref(); }); });     action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashOutOfBoundsVectorAccess);    connect(action, &QAction::triggered, qApp, []() { crash::outOfBoundsVectorCrash(); });    action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashOutOfBoundsVectorAccessThreaded);    connect(action, &QAction::triggered, qApp, []() { std::thread([]() { crash::outOfBoundsVectorCrash(); }); });     action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashNewFault);    connect(action, &QAction::triggered, qApp, []() { crash::newFault(); });    action = addActionToQMenuAndActionHash(crashMenu, MenuOption::CrashNewFaultThreaded);    connect(action, &QAction::triggered, qApp, []() { std::thread([]() { crash::newFault(); }); });     // Developer > Log...    addActionToQMenuAndActionHash(developerMenu, MenuOption::Log, Qt::CTRL | Qt::SHIFT | Qt::Key_L,         qApp, SLOT(toggleLogDialog()));     // Developer > Stats    addCheckableActionToQMenuAndActionHash(developerMenu, MenuOption::Stats);  #if 0 ///  -------------- REMOVED FOR NOW --------------    addDisabledActionAndSeparator(navigateMenu, "History");    QAction* backAction = addActionToQMenuAndActionHash(navigateMenu, MenuOption::Back, 0, addressManager.data(), SLOT(goBack()));    QAction* forwardAction = addActionToQMenuAndActionHash(navigateMenu, MenuOption::Forward, 0, addressManager.data(), SLOT(goForward()));     // connect to the AddressManager signal to enable and disable the back and forward menu items    connect(addressManager.data(), &AddressManager::goBackPossible, backAction, &QAction::setEnabled);    connect(addressManager.data(), &AddressManager::goForwardPossible, forwardAction, &QAction::setEnabled);     // set the two actions to start disabled since the stacks are clear on startup    backAction->setDisabled(true);    forwardAction->setDisabled(true);     MenuWrapper* toolsMenu = addMenu("Tools");    addActionToQMenuAndActionHash(toolsMenu,                                  MenuOption::ToolWindow,                                  Qt::CTRL | Qt::ALT | Qt::Key_T,                                  dialogsManager.data(),                                  SLOT(toggleToolWindow()),                                  QAction::NoRole, UNSPECIFIED_POSITION, "Advanced");      addCheckableActionToQMenuAndActionHash(avatarMenu, MenuOption::NamesAboveHeads, 0, true,                NULL, NULL, UNSPECIFIED_POSITION, "Advanced");#endif} void Menu::addMenuItem(const MenuItemProperties& properties) {    MenuWrapper* menuObj = getMenu(properties.menuName);    if (menuObj) {        QShortcut* shortcut = NULL;        if (!properties.shortcutKeySequence.isEmpty()) {            shortcut = new QShortcut(properties.shortcutKeySequence, this);            shortcut->setContext(Qt::WidgetWithChildrenShortcut);        }         // check for positioning requests        int requestedPosition = properties.position;        if (requestedPosition == UNSPECIFIED_POSITION && !properties.beforeItem.isEmpty()) {            requestedPosition = findPositionOfMenuItem(menuObj, properties.beforeItem);            // double check that the requested location wasn't a separator label            requestedPosition = positionBeforeSeparatorIfNeeded(menuObj, requestedPosition);        }        if (requestedPosition == UNSPECIFIED_POSITION && !properties.afterItem.isEmpty()) {            int afterPosition = findPositionOfMenuItem(menuObj, properties.afterItem);            if (afterPosition != UNSPECIFIED_POSITION) {                requestedPosition = afterPosition + 1;            }        }         QAction* menuItemAction = NULL;        if (properties.isSeparator) {            addDisabledActionAndSeparator(menuObj, properties.menuItemName, requestedPosition, properties.grouping);        } else if (properties.isCheckable) {            menuItemAction = addCheckableActionToQMenuAndActionHash(menuObj, properties.menuItemName,                                                                    properties.shortcutKeySequence, properties.isChecked,                                                                    MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()),                                                                    requestedPosition, properties.grouping);        } else {            menuItemAction = addActionToQMenuAndActionHash(menuObj, properties.menuItemName, properties.shortcutKeySequence,                                                           MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()),                                                           QAction::NoRole, requestedPosition, properties.grouping);        }        if (shortcut && menuItemAction) {            connect(shortcut, SIGNAL(activated()), menuItemAction, SLOT(trigger()));        }        QMenuBar::repaint();    }}

Lines 501–735 of 735. Previous lines