Initial release
This commit is contained in:
Vendored
+226
@@ -0,0 +1,226 @@
|
||||
// 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
|
||||
Reference in New Issue
Block a user