Files
hot-step-cpp-ROCm/engine/vendor/vst3sdk/vstgui4/vstgui/uidescription/editing/uifocussettingscontroller.cpp
T
2026-08-16 18:24:52 +07:00

145 lines
4.4 KiB
C++

// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
#include "uifocussettingscontroller.h"
#if VSTGUI_LIVE_EDITING
#include "uidialogcontroller.h"
#include "uieditcontroller.h"
#include "uiactions.h"
#include "../uiattributes.h"
#include "../../lib/controls/ctextedit.h"
#include "../../lib/controls/coptionmenu.h"
#include <sstream>
namespace VSTGUI {
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
UIFocusSettingsController::UIFocusSettingsController (UIDescription* description, IActionPerformer* actionPerformer)
: editDescription (description)
, actionPerformer (actionPerformer)
{
originalSettings = editDescription->getFocusDrawingSettings ();
for (auto& control : controls)
control = nullptr;
}
//------------------------------------------------------------------------
void UIFocusSettingsController::onDialogButton1Clicked (UIDialogController*)
{
FocusDrawingSettings fd;
if (controls[kEnabledTag])
fd.enabled =
(controls[kEnabledTag]->getValue () == controls[kEnabledTag]->getMax ()) ? true : false;
if (controls[kColorTag])
{
COptionMenu* menu = dynamic_cast<COptionMenu*> (controls[kColorTag]);
CMenuItem* item = menu->getCurrent ();
if (item)
fd.colorName = item->getTitle ();
}
if (controls[kWidthTag])
fd.width = controls[kWidthTag]->getValue ();
if (originalSettings != fd)
actionPerformer->performChangeFocusDrawingSettings (fd);
}
//------------------------------------------------------------------------
void UIFocusSettingsController::onDialogButton2Clicked (UIDialogController*)
{
}
//------------------------------------------------------------------------
void UIFocusSettingsController::onDialogShow (UIDialogController*)
{
}
//----------------------------------------------------------------------------------------------------
CView* UIFocusSettingsController::verifyView (CView* view, const UIAttributes& attributes, const IUIDescription* description)
{
auto* control = dynamic_cast<CControl*>(view);
if (control)
{
switch (control->getTag ())
{
case kEnabledTag:
{
control->setValue (originalSettings.enabled ? control->getMax () : control->getMin ());
controls[kEnabledTag] = control;
break;
}
case kColorTag:
{
auto* menu = dynamic_cast<COptionMenu*>(control);
if (menu)
{
controls[kColorTag] = control;
std::list<const std::string*> names;
editDescription->collectColorNames (names);
names.sort (UIEditController::std__stringCompare);
int32_t index = 0;
for (auto& name : names)
{
menu->addEntry (new CMenuItem (name->c_str ()));
if (originalSettings.colorName == *name)
{
menu->setValue ((float)index);
}
index++;
}
}
break;
}
case kWidthTag:
{
controls[kWidthTag] = control;
auto* edit = dynamic_cast<CTextEdit*>(control);
if (edit)
{
edit->setStringToValueFunction (stringToValue);
edit->setValueToStringFunction (valueToString);
}
control->setValue (static_cast<float> (originalSettings.width));
break;
}
}
}
return view;
}
//----------------------------------------------------------------------------------------------------
void UIFocusSettingsController::valueChanged (CControl* control)
{
}
//----------------------------------------------------------------------------------------------------
bool UIFocusSettingsController::valueToString (float value, char utf8String[256], CParamDisplay::ValueToStringUserData* userData)
{
int32_t intValue = (int32_t)value;
std::stringstream str;
str << (value == intValue ? intValue : value);
std::strcpy (utf8String, str.str ().c_str ());
return true;
}
//----------------------------------------------------------------------------------------------------
bool UIFocusSettingsController::stringToValue (UTF8StringPtr txt, float& result, CTextEdit::StringToValueUserData* userData)
{
if (txt)
{
float value = UTF8StringView (txt).toFloat ();
result = value;
return true;
}
return false;
}
} // VSTGUI
#endif // VSTGUI_LIVE_EDITING