Example #1
0
int Menu::update(sf::Vector2i mousePos)
{
    if (isBinding)
    {
        bindKey();
    }
    else
    {
        for(unsigned int i = 0; i < mainMenu.size(); ++i)
        {
            if(mainMenu[i]->update(mousePos))
            {
                switch(i)
                {
                    case 0: //single player
                        for (unsigned int a = 0; a < mainMenu.size(); ++a)
                        {
                            mainMenu[a]->setVisible(false);
                        }
                        for (unsigned int a = 0; a < singleMenu.size(); ++a)
                        {
                            singleMenu[a]->setVisible(true);
                        }
                        break;
                    case 1: //multi player
                        return 5;
                        break;
                    case 2: //go to settings
                        for (unsigned int a = 0; a < mainMenu.size(); ++a)
                        {
                            mainMenu[a]->setVisible(false);
                        }
                        for (unsigned int a = 0; a < settingsMenu.size(); ++a)
                        {
                            settingsMenu[a]->setVisible(true);
                        }

                        background.setTexture(&settingsBackgroundTexture);
                        isBinding = false;
                        break;
                    case 3: //exit
                        return 10;
                        break;
                }
            }
        }

        for(unsigned int i = 0; i < settingsMenu.size(); ++i)
        {
            if (settingsMenu[i]->update(mousePos))
            {
                switch(i)
                {
                    case 0: //back
                        for (unsigned int a = 0; a < mainMenu.size(); ++a)
                        {
                            mainMenu[a]->setVisible(true);
                        }
                        for (unsigned int a = 0; a < settingsMenu.size(); ++a)
                        {
                            settingsMenu[a]->setVisible(false);
                        }
                        updateTips();
                        background.setTexture(&mainBackgroundTexture);
                        writeSettings();
                        break;
                    case 1:     //music down
                        settings.musicVolume--;
                        if (settings.musicVolume < 0)
                        {
                            settings.musicVolume = 0;
                        }
                        updateSettings();
                        break;
                    case 2:     //music up
                        settings.musicVolume++;
                        if (settings.musicVolume > 10)
                        {
                            settings.musicVolume = 10;
                        }
                        updateSettings();
                        break;
                    case 3:     //effects down
                        settings.effectVolume--;
                        if (settings.effectVolume < 0)
                        {
                            settings.effectVolume = 0;
                        }
                        updateSettings();
                        break;
                    case 4:     //effects up
                        settings.effectVolume++;
                        if (settings.effectVolume > 10)
                        {
                            settings.effectVolume = 10;
                        }
                        updateSettings();
                        break;
                    case 5:     //enable mouse
                        settings.enableMouse = !settings.enableMouse;
                        updateSettings();
                        break;
                    case 6:     //select after upgrade
                        settings.selectAfterUpgrade = !settings.selectAfterUpgrade;
                        updateSettings();
                        break;
                    default:
                        sprintf(bindMessage, "Press the escape key to exit.\n\nPress the new key for %s", hotkeyNames[i - 7]);
                        isBinding = true;
                        currentKey = i;
                        updateSettings();
                        break;
                }
            }
        }

        for (unsigned int i = 0; i < singleMenu.size(); ++i)
        {
            if(singleMenu[i]->update(mousePos))
            {
                switch(i)
                {
                    case 0: //back button
                        for (unsigned int a = 0; a < mainMenu.size(); ++a)
                        {
                            mainMenu[a]->setVisible(true);
                        }
                        for (unsigned int a = 0; a < singleMenu.size(); ++a)
                        {
                            singleMenu[a]->setVisible(false);
                        }
                        updateTips();
                        break;
                    case 1: //mission 1
                        return 1;
                        break;
                    case 2: //mission 2
                        return 2;
                        break;
                    case 3: //mission 3
                        return 3;
                        break;
                    case 4: //mission 4
                        return 4;
                        break;
                }
            }
        }
    }

    return 0;
}
ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
{
    m_config = new Ui_InputWidget();
    m_config->setupUi(this);

    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
    UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();

	// First of all, put all the channel widgets into lists, so that we can
    // manipulate those:


	inMaxLabels << m_config->ch0Max
			<< m_config->ch1Max
			<< m_config->ch2Max
			<< m_config->ch3Max
			<< m_config->ch4Max
			<< m_config->ch5Max
			<< m_config->ch6Max
			<< m_config->ch7Max;

	inMinLabels << m_config->ch0Min
			<< m_config->ch1Min
			<< m_config->ch2Min
			<< m_config->ch3Min
			<< m_config->ch4Min
			<< m_config->ch5Min
			<< m_config->ch6Min
			<< m_config->ch7Min;

	inSliders << m_config->inSlider0
			  << m_config->inSlider1
			  << m_config->inSlider2
			  << m_config->inSlider3
			  << m_config->inSlider4
			  << m_config->inSlider5
			  << m_config->inSlider6
			  << m_config->inSlider7;

        inRevCheckboxes << m_config->ch0Rev
                        << m_config->ch1Rev
                        << m_config->ch2Rev
                        << m_config->ch3Rev
                        << m_config->ch4Rev
                        << m_config->ch5Rev
                        << m_config->ch6Rev
                        << m_config->ch7Rev;

        inChannelAssign << m_config->ch0Assign
                        << m_config->ch1Assign
                        << m_config->ch2Assign
                        << m_config->ch3Assign
                        << m_config->ch4Assign
                        << m_config->ch5Assign
                        << m_config->ch6Assign
                        << m_config->ch7Assign;

    // Now connect the widget to the ManualControlCommand / Channel UAVObject
    UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ManualControlCommand")));
    connect(obj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(updateChannels(UAVObject*)));

    // Register for ManualControlSettings changes:
    obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ManualControlSettings")));
    connect(obj,SIGNAL(objectUpdated(UAVObject*)),this,SLOT(refreshValues()));


    // Get the receiver types supported by OpenPilot and fill the corresponding
    // dropdown menu:
    obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("ManualControlSettings")));
    UAVObjectField * field;
    // Fill in the dropdown menus for the channel RC Input assignement.
    QStringList channelsList;
        channelsList << "None";
    QList<UAVObjectField*> fieldList = obj->getFields();
    foreach (UAVObjectField* field, fieldList) {
        if (field->getUnits().contains("channel")) {
            channelsList.append(field->getName());
        }
    }

    m_config->ch0Assign->addItems(channelsList);
    m_config->ch1Assign->addItems(channelsList);
    m_config->ch2Assign->addItems(channelsList);
    m_config->ch3Assign->addItems(channelsList);
    m_config->ch4Assign->addItems(channelsList);
    m_config->ch5Assign->addItems(channelsList);
    m_config->ch6Assign->addItems(channelsList);
    m_config->ch7Assign->addItems(channelsList);

    // And the flight mode settings:
    field = obj->getField(QString("FlightModePosition"));
    m_config->fmsModePos1->addItems(field->getOptions());
    m_config->fmsModePos2->addItems(field->getOptions());
    m_config->fmsModePos3->addItems(field->getOptions());
    field = obj->getField(QString("Stabilization1Settings"));
    channelsList.clear();
    channelsList.append(field->getOptions());
    m_config->fmsSsPos1Roll->addItems(channelsList);
    m_config->fmsSsPos1Pitch->addItems(channelsList);
    m_config->fmsSsPos1Yaw->addItems(channelsList);
    m_config->fmsSsPos2Roll->addItems(channelsList);
    m_config->fmsSsPos2Pitch->addItems(channelsList);
    m_config->fmsSsPos2Yaw->addItems(channelsList);
    m_config->fmsSsPos3Roll->addItems(channelsList);
    m_config->fmsSsPos3Pitch->addItems(channelsList);
    m_config->fmsSsPos3Yaw->addItems(channelsList);

    // And the Armin configurations:
    field = obj->getField(QString("Arming"));
    m_config->armControl->clear();
    m_config->armControl->addItems(field->getOptions());


    connect(m_config->saveRCInputToSD, SIGNAL(clicked()), this, SLOT(saveRCInputObject()));
    connect(m_config->saveRCInputToRAM, SIGNAL(clicked()), this, SLOT(sendRCInputUpdate()));

    enableControls(false);
    refreshValues();
    connect(parent, SIGNAL(autopilotConnected()),this, SLOT(onAutopilotConnect()));
    connect(parent, SIGNAL(autopilotDisconnected()), this, SLOT(onAutopilotDisconnect()));

    connect(m_config->ch0Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->ch1Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->ch2Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->ch3Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->ch4Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->ch5Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->ch6Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->ch7Rev, SIGNAL(toggled(bool)), this, SLOT(reverseCheckboxClicked(bool)));
    connect(m_config->doRCInputCalibration,SIGNAL(stateChanged(int)),this,SLOT(updateTips(int)));
    firstUpdate = true;

    // Connect the help button
    connect(m_config->inputHelp, SIGNAL(clicked()), this, SLOT(openHelp()));
    updateTips(Qt::Unchecked);

}