//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
void imaphone_component::color_radios_clear(ToggleButton* exclude=nullptr) {
	if (exclude != nullptr) {
		exclude->setToggleState(true, NotificationType::dontSendNotification);
	}
	for (std::vector<ToggleButton*>::iterator it = color_radios->begin(); it != color_radios->end(); ++it) {
		ToggleButton* current = (*it);
		if (current == exclude) {
			continue;
		}
		else {
			current->setToggleState(false, NotificationType::dontSendNotification);
		}
	}
}
EngineParameterComponent::EngineParameterComponent(EngineParameter &param)
	: Component(param.name), type(param.type), parameter(param)
{
	if (param.type == EngineParameter::BOOL)
	{
		ToggleButton* but = new ToggleButton();
		but->setToggleState(param.boolParam.value,dontSendNotification);
		but->setBounds(120,0,20,20);
		addAndMakeVisible(but);
		control = but;
	}
	else
	{
		Label* lab = new Label();
		lab->setFont(Font("Small Text",10,Font::plain));
		switch (param.type)
		{
		case EngineParameter::INT:
			lab->setText(String(param.intParam.value),dontSendNotification);
			lab->setBounds(120,0,50,20);
			break;
		case EngineParameter::FLOAT:
			lab->setText(String(param.floatParam.value),dontSendNotification);
			lab->setBounds(120,0,50,20);
			break;
		case EngineParameter::STR:
			lab->setText(String(param.strParam.value),dontSendNotification);
			lab->setBounds(120,0,150,20);
		}
		lab->setEditable(true);
		lab->setColour(Label::ColourIds::backgroundColourId,Colours::lightgrey);
		lab->setColour(Label::ColourIds::outlineColourId,Colours::black);
		lab->addListener(this);
		addAndMakeVisible(lab);
		control = lab;
	}
}
void
SettingsWindow::setUpStandardFields(int & widthSoFar,
                                    int & heightSoFar)
{
    ODL_OBJENTER(); //####
    ODL_P2("widthSoFar = ", &widthSoFar, "heightSoFar = ", &heightSoFar); //####
    Component * content = getContentComponent();
    int         buttonHeight = GetButtonHeight();
    Point<int>  dimensions;
    size_t      numDescriptors = _descriptors.size();

    widthSoFar = heightSoFar = 0;
    _topText.setFont(_regularFont);
    if ((0 < numDescriptors) || _canSetEndpoint || _canSetPort || _canSetTag || _canUseModifier)
    {
        _topText.setText(String("The ") + _execType + " has one or more arguments, that need to be "
                         "provided before it can be launched.", dontSendNotification);
    }
    else
    {
        _topText.setText(String("The ") + _execType + " has no arguments or options, so it can be "
                         "launched right now.", dontSendNotification);
    }
    CommonVisuals::CalculateTextArea(dimensions, _regularFont, _topText.getText());
    _topText.setBounds(FormField::kButtonGap, FormField::kButtonGap + getTitleBarHeight(),
                       dimensions.getX() + FormField::kButtonGap, dimensions.getY());
    content->addAndMakeVisible(&_topText, 0);
    heightSoFar = _topText.getY() + _topText.getHeight() + FormField::kButtonGap;
    widthSoFar = jmax(widthSoFar, _topText.getX() + _topText.getWidth());
    if (_canSetEndpoint)
    {
        _endpointField = new CaptionedTextField(*this, _regularFont, _errorFont, 0,
                                                "(Optional) Endpoint to use", heightSoFar, false,
                                                false, NULL,
                                                new TextValidator(*_endpointDescriptor),
                                                kEndpointFieldName);

        _endpointField->addToComponent(content);
        widthSoFar = jmax(widthSoFar, _endpointField->getMinimumWidth());
        heightSoFar = (_endpointField->getY() + _endpointField->getHeight() +
                       (FormField::kButtonGap / 2));
    }
    if (_canSetPort)
    {
        _portField = new CaptionedTextField(*this, _regularFont, _errorFont, 0,
                                            "(Optional) Network port to use", heightSoFar, false,
                                            false, NULL, new TextValidator(*_portDescriptor),
                                            kPortFieldName);

        _portField->addToComponent(content);
        widthSoFar = jmax(widthSoFar, _portField->getMinimumWidth());
        heightSoFar = _portField->getY() + _portField->getHeight() + (FormField::kButtonGap / 2);
    }
    if (_canSetTag)
    {
        _tagField = new CaptionedTextField(*this, _regularFont, _errorFont, 0,
                                           String("(Optional) Tag for the ") + _execType,
                                           heightSoFar, false, false, NULL, NULL, kTagFieldName);

        _tagField->addToComponent(content);
        widthSoFar = jmax(widthSoFar, _tagField->getMinimumWidth());
        heightSoFar = _tagField->getY() + _tagField->getHeight() + (FormField::kButtonGap / 2);
    }
    if (_canUseModifier)
    {
        _tagModifierGroup = new GroupComponent("", "(Optional) Tag modifier");
        _tagModifierGroup->setBounds(FormField::kFieldInset, heightSoFar,
                                        widthSoFar - (FormField::kButtonGap +
                                                      FormField::kFieldInset),
                                        static_cast<int>(2 * _regularFont.getHeight()) +
                                        FormField::kButtonGap);
        for (int ii = 0; 4 >= ii; ++ii)
        {
            ToggleButton * tb = new ToggleButton(String(ii) + ((1 == ii) ? " byte" : " bytes"));

            _tagModifierGroup->addAndMakeVisible(tb);
            _tagModifierButtons.add(tb);
            tb->setComponentID(String(ii));
            tb->setRadioGroupId(kTagModifierGroupId);
            tb->setBounds(FormField::kFieldInset + (kTagModifierButtonWidth * ii),
                          FormField::kButtonGap + static_cast<int>(_regularFont.getHeight() / 2),
                          kTagModifierButtonWidth, static_cast<int>(_regularFont.getHeight()));
            tb->setTooltip("Modify tag with " + String(ii) + ((1 == ii) ?
                                                              " byte of the IP address" :
                                                              " bytes of the IP address"));
            if (0 == ii)
            {
                tb->setToggleState(true, dontSendNotification);
            }
        }
        content->addAndMakeVisible(_tagModifierGroup);
        heightSoFar = (_tagModifierGroup->getY() + _tagModifierGroup->getHeight() +
                       (FormField::kButtonGap / 2));
        widthSoFar = jmax(widthSoFar, _tagModifierGroup->getX() +
                          _tagModifierGroup->getWidth());
    }
    // Check for one or more file descriptors.
    for (size_t ii = 0; numDescriptors > ii; ++ii)
    {
        bool                                forOutput;
        Utilities::BaseArgumentDescriptor * aDescriptor = _descriptors[ii];

        if (aDescriptor && aDescriptor->isForFiles(forOutput))
        {
            _hasFileField = true;
            break;
        }

    }
    for (size_t ii = 0; numDescriptors > ii; ++ii)
    {
        Utilities::BaseArgumentDescriptor * aDescriptor = _descriptors[ii];

        if (aDescriptor)
        {
            String argName(aDescriptor->argumentName().c_str());
            String argDescription(aDescriptor->argumentDescription().c_str());

            if (aDescriptor->isExtra())
            {
                if (! _hasExtraArguments)
                {
                    _hasExtraArguments = true;
                    _extraArgRootName = argName;
                    _extraArgumentsGroup = new GroupComponent("", argDescription);
                    _extraArgumentsGroup->setBounds(FormField::kFieldInset, heightSoFar,
                                                    widthSoFar - (FormField::kButtonGap +
                                                                  FormField::kFieldInset),
                                                    static_cast<int>(_regularFont.getHeight()) +
                                                    FormField::kButtonGap);
                    content->addAndMakeVisible(_extraArgumentsGroup);
                    heightSoFar = (_extraArgumentsGroup->getY() +
                                   _extraArgumentsGroup->getHeight() +
                                   (FormField::kButtonGap / 2));
                    widthSoFar = jmax(widthSoFar, _extraArgumentsGroup->getX() +
                                      _extraArgumentsGroup->getWidth());
                    _addArgumentsButton = new TextButton(String("+ ") + argName);
                    _addArgumentsButton->setWantsKeyboardFocus(true);
                    _addArgumentsButton->setMouseClickGrabsKeyboardFocus(false);
                    _addArgumentsButton->setCommandToTrigger(NULL, kConfigurationAddField, false);
                    _addArgumentsButton->addListener(this);
                    _addArgumentsButton->changeWidthToFitText(buttonHeight);
                    content->addAndMakeVisible(_addArgumentsButton, 0);
                    _removeArgumentsButton = new TextButton(String("- ") + argName);
                    _removeArgumentsButton->setWantsKeyboardFocus(true);
                    _removeArgumentsButton->setMouseClickGrabsKeyboardFocus(false);
                    _removeArgumentsButton->setCommandToTrigger(NULL, kConfigurationRemoveField,
                                                                false);
                    _removeArgumentsButton->addListener(this);
                    _removeArgumentsButton->changeWidthToFitText(buttonHeight);
                    content->addChildComponent(_removeArgumentsButton);
                }
            }
            else if (aDescriptor->isBoolean())
            {
                String          descriptionPrefix(aDescriptor->isOptional() ? "(Optional) " :
                                                  "");
                CheckboxField * newField = new CheckboxField(_regularFont, ii,
                                                             descriptionPrefix +
                                                             argDescription, heightSoFar, argName);

                newField->setText(aDescriptor->getDefaultValue().c_str());
                _standardFields.add(newField);
                newField->addToComponent(content);
                widthSoFar = jmax(widthSoFar, newField->getMinimumWidth());
                heightSoFar = (newField->getY() + newField->getHeight() +
                               (FormField::kButtonGap / 2));
            }
            else
            {
                bool forFilePath;
                bool forOutput;

                if (aDescriptor->isForFiles(forOutput))
                {
                    forFilePath = true;
                }
                else
                {
                    forFilePath = false;
                }
                String               descriptionPrefix(aDescriptor->isOptional() ? "(Optional) " :
                                                       "");
                CaptionedTextField * newField = new CaptionedTextField(*this, _regularFont,
                                                                       _errorFont, ii,
                                                                       descriptionPrefix +
                                                                       argDescription, heightSoFar,
                                                                       false, forFilePath, this,
                                                                   new TextValidator(*aDescriptor),
                                                                       argName,
                                                                       aDescriptor->isPassword() ?
                                                                       CHAR_TO_USE_FOR_PASSWORD_ :
                                                                       0);

                newField->setText(aDescriptor->getDefaultValue().c_str());
                _standardFields.add(newField);
                newField->addToComponent(content);
                widthSoFar = jmax(widthSoFar, newField->getMinimumWidth());
                heightSoFar = (newField->getY() + newField->getHeight() +
                               (FormField::kButtonGap / 2));
            }
        }
    }
    _cancelButton.setWantsKeyboardFocus(true);
    _cancelButton.setMouseClickGrabsKeyboardFocus(false);
    _cancelButton.setCommandToTrigger(NULL, kConfigurationCancel, false);
    _cancelButton.addListener(this);
    _cancelButton.changeWidthToFitText(buttonHeight);
    _cancelButton.setTopLeftPosition(0, heightSoFar + FormField::kButtonGap);
    content->addAndMakeVisible(&_cancelButton, 0);
    _okButton.setWantsKeyboardFocus(true);
    _okButton.setMouseClickGrabsKeyboardFocus(false);
    _okButton.setCommandToTrigger(NULL, kConfigurationOK, false);
    _okButton.addListener(this);
    _okButton.changeWidthToFitText(buttonHeight);
    _okButton.setTopLeftPosition(0, heightSoFar + FormField::kButtonGap);
    content->addAndMakeVisible(&_okButton, 0);
    heightSoFar += buttonHeight;
    ODL_OBJEXIT(); //####
} // SettingsWindow::setUpStandardFields
Beispiel #4
0
 void initialiseToggle (ToggleButton& b, const char* name, bool on)
 {
     addAndMakeVisible (b);
     b.setButtonText (name);
     b.setToggleState (on, dontSendNotification);
 }