Files
2026-08-16 18:24:52 +07:00

227 lines
6.3 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 "uitemplatesettingscontroller.h"
#if VSTGUI_LIVE_EDITING
#include "uidialogcontroller.h"
#include "../uiattributes.h"
#include "../../lib/controls/ctextedit.h"
#include <sstream>
namespace VSTGUI {
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
UITemplateSettingsController::UITemplateSettingsController (const std::string& templateName, UIDescription* description, IActionPerformer* actionPerformer)
: description (description)
, templateName (templateName)
, newTemplateName (templateName)
, actionPerformer (actionPerformer)
{
const UIAttributes* attr = description->getViewAttributes (templateName.data ());
if (attr)
{
if (attr->getPointAttribute (kTemplateAttributeMinSize, minSize) == false)
{
minSize.x = -1.;
minSize.y = -1.;
}
if (attr->getPointAttribute (kTemplateAttributeMaxSize, maxSize) == false)
{
maxSize.x = -1.;
maxSize.y = -1.;
}
}
originalMinSize = minSize;
originalMaxSize = maxSize;
for (auto& control : controls)
control = nullptr;
}
//------------------------------------------------------------------------
void UITemplateSettingsController::onDialogButton1Clicked (UIDialogController*)
{
actionPerformer->beginGroupAction ("Change Template Settings");
if (templateName != newTemplateName)
{
actionPerformer->performTemplateNameChange (templateName.data (), newTemplateName.data ());
}
if (minSize != originalMinSize || maxSize != originalMaxSize)
{
actionPerformer->performTemplateMinMaxSizeChange (newTemplateName.data (), minSize,
maxSize);
}
actionPerformer->finishGroupAction ();
}
//------------------------------------------------------------------------
void UITemplateSettingsController::onDialogButton2Clicked (UIDialogController*)
{
}
//------------------------------------------------------------------------
void UITemplateSettingsController::onDialogShow (UIDialogController*)
{
}
//----------------------------------------------------------------------------------------------------
CView* UITemplateSettingsController::verifyView (CView* view, const UIAttributes& attributes, const IUIDescription*)
{
CTextEdit* control = dynamic_cast<CTextEdit*>(view);
if (control)
{
switch (control->getTag ())
{
case kNameTag:
{
controls[kNameTag] = control;
control->setText (templateName.data ());
break;
}
case kMinWidthTag:
{
controls[kMinWidthTag] = control;
control->setStringToValueFunction (stringToValue);
control->setValueToStringFunction (valueToString);
control->setValue ((float)minSize.x);
break;
}
case kMinHeightTag:
{
controls[kMinHeightTag] = control;
control->setStringToValueFunction (stringToValue);
control->setValueToStringFunction (valueToString);
control->setValue ((float)minSize.y);
break;
}
case kMaxWidthTag:
{
controls[kMaxWidthTag] = control;
control->setStringToValueFunction (stringToValue);
control->setValueToStringFunction (valueToString);
control->setValue ((float)maxSize.x);
break;
}
case kMaxHeightTag:
{
controls[kMaxHeightTag] = control;
control->setStringToValueFunction (stringToValue);
control->setValueToStringFunction (valueToString);
control->setValue ((float)maxSize.y);
break;
}
}
}
return view;
}
//----------------------------------------------------------------------------------------------------
void UITemplateSettingsController::valueChanged (CControl* control)
{
switch (control->getTag ())
{
case kNameTag:
{
CTextEdit* edit = dynamic_cast<CTextEdit*>(control);
if (edit)
{
if (!edit->getText ().empty ())
newTemplateName = edit->getText ();
else
edit->setText (newTemplateName.data ());
}
break;
}
case kMinWidthTag:
{
minSize.x = control->getValue ();
break;
}
case kMinHeightTag:
{
minSize.y = control->getValue ();
break;
}
case kMaxWidthTag:
{
maxSize.x = control->getValue ();
break;
}
case kMaxHeightTag:
{
maxSize.y = control->getValue ();
break;
}
case kMinUseCurrentTag:
case kMaxUseCurrentTag:
{
if (control->getValue() == control->getMax())
{
const UIAttributes* attr = description->getViewAttributes (templateName.data ());
if (attr)
{
CPoint currentSize;
if (attr->getPointAttribute ("size", currentSize))
{
if (control->getTag () == kMinUseCurrentTag)
{
minSize = currentSize;
if (controls[kMinWidthTag])
{
controls[kMinWidthTag]->setValue ((float)minSize.x);
controls[kMinWidthTag]->invalid ();
}
if (controls[kMinHeightTag])
{
controls[kMinHeightTag]->setValue ((float)minSize.y);
controls[kMinHeightTag]->invalid ();
}
}
else
{
maxSize = currentSize;
if (controls[kMaxWidthTag])
{
controls[kMaxWidthTag]->setValue ((float)maxSize.x);
controls[kMaxWidthTag]->invalid ();
}
if (controls[kMaxHeightTag])
{
controls[kMaxHeightTag]->setValue ((float)maxSize.y);
controls[kMaxHeightTag]->invalid ();
}
}
}
}
}
break;
}
}
}
//----------------------------------------------------------------------------------------------------
bool UITemplateSettingsController::valueToString (float value, char utf8String[256], CParamDisplay::ValueToStringUserData* userData)
{
int32_t intValue = (int32_t)value;
std::stringstream str;
str << intValue;
std::strcpy (utf8String, str.str ().data ());
return true;
}
//----------------------------------------------------------------------------------------------------
bool UITemplateSettingsController::stringToValue (UTF8StringPtr txt, float& result, CTextEdit::StringToValueUserData* userData)
{
int32_t value = txt ? (int32_t)strtol (txt, nullptr, 10) : 0;
result = (float)value;
return true;
}
} // VSTGUI
#endif // VSTGUI_LIVE_EDITING