UTKFloatStepper 추가. UTKFloatPropertyItem, UTKFloatPropertyItemView에 추가
This commit is contained in:
@@ -82,6 +82,16 @@ namespace UVC.Sample.UIToolkit
|
||||
Debug.Log($"Property Changed: {args.PropertyId} {args.PropertyName} ({args.PropertyType}) = {args.NewValue}");
|
||||
};
|
||||
|
||||
_propertyWindow.OnPropertyClicked += args =>
|
||||
{
|
||||
Debug.Log($"Property Clicked: {args.Id} {args.DisplayName} ({args.PropertyType})");
|
||||
};
|
||||
|
||||
_propertyWindow.OnPropertyButtonClicked += (id, actionName) =>
|
||||
{
|
||||
Debug.Log($"Button Clicked: {id} - Action: {actionName}");
|
||||
};
|
||||
|
||||
// 샘플 데이터 생성
|
||||
var entries = CreateSampleEntries();
|
||||
_propertyWindow.LoadMixedProperties(entries);
|
||||
@@ -94,17 +104,41 @@ namespace UVC.Sample.UIToolkit
|
||||
var entries = new List<IUTKPropertyEntry>();
|
||||
|
||||
// ===== Group에 속하지 않은 개별 아이템들 =====
|
||||
|
||||
|
||||
// String (편집 가능)
|
||||
entries.Add(new UTKStringPropertyItem("string", "String", "Editable text"));
|
||||
|
||||
|
||||
// String with Action Button
|
||||
var stringWithButton = new UTKStringPropertyItem("string_with_btn", "String Button", "Click the button");
|
||||
stringWithButton.ActionButton = new UTKButtonItem("btn_string_action", "string_action", "", UTKMaterialIcons.Search,
|
||||
UTKButton.ButtonVariant.OutlineNormal, UTKButton.ButtonSize.Small);
|
||||
stringWithButton.ActionButton.IconOnly = true;
|
||||
stringWithButton.ActionButton.IconSize = 14;
|
||||
entries.Add(stringWithButton);
|
||||
|
||||
var stringWithButton2 = new UTKStringPropertyItem("string_with_btn2", "String Button2", "Click the button");
|
||||
stringWithButton2.ActionButton = new UTKButtonItem("btn_string_action", "string_action", "Search", UTKMaterialIcons.Search,
|
||||
UTKButton.ButtonVariant.OutlineNormal, UTKButton.ButtonSize.Small);
|
||||
stringWithButton2.ActionButton.IconSize = 14;
|
||||
entries.Add(stringWithButton2);
|
||||
|
||||
// String (ShowLabel = false, 전체 너비)
|
||||
var stringNoLabel = new UTKStringPropertyItem("string_no_label", "No Label String", "Full width input");
|
||||
stringNoLabel.ShowLabel = false;
|
||||
entries.Add(stringNoLabel);
|
||||
|
||||
// String (읽기 전용)
|
||||
var roString = new UTKStringPropertyItem("string_ro", "String (RO)", "Read-only text", isReadOnly: true);
|
||||
entries.Add(roString);
|
||||
|
||||
// Bool (편집 가능)
|
||||
entries.Add(new UTKBoolPropertyItem("bool", "Bool", true));
|
||||
|
||||
|
||||
// Bool (ShowLabel = false)
|
||||
var boolNoLabel = new UTKBoolPropertyItem("bool_no_label", "No Label Bool", false);
|
||||
boolNoLabel.ShowLabel = false;
|
||||
entries.Add(boolNoLabel);
|
||||
|
||||
// Bool (읽기 전용)
|
||||
var roBool = new UTKBoolPropertyItem("bool_ro", "Bool (RO)", true);
|
||||
roBool.IsReadOnly = true;
|
||||
@@ -112,7 +146,12 @@ namespace UVC.Sample.UIToolkit
|
||||
|
||||
// Int (편집 가능)
|
||||
entries.Add(new UTKIntPropertyItem("int", "Int", 42, 0, 100));
|
||||
|
||||
|
||||
// Int (ShowLabel = false)
|
||||
var intNoLabel = new UTKIntPropertyItem("int_no_label", "No Label Int", 75, 0, 100);
|
||||
intNoLabel.ShowLabel = false;
|
||||
entries.Add(intNoLabel);
|
||||
|
||||
// Int (읽기 전용)
|
||||
entries.Add(new UTKIntPropertyItem("int_ro", "Int (RO)", 99, 0, 100, isReadOnly: true));
|
||||
|
||||
@@ -134,13 +173,24 @@ namespace UVC.Sample.UIToolkit
|
||||
// Int stepper (읽기 전용)
|
||||
entries.Add(new UTKIntPropertyItem("int3_ro", "Int3 (RO)", 99, 0, 100, true, true, isReadOnly: true));
|
||||
|
||||
// Float (편집 가능)
|
||||
entries.Add(new UTKFloatPropertyItem("float", "Float", 3.14f, 0f, 10f, true));
|
||||
|
||||
// Float (읽기 전용)
|
||||
var roFloat = new UTKFloatPropertyItem("float_ro", "Float (RO)", 2.71f, 0f, 10f, true);
|
||||
roFloat.IsReadOnly = true;
|
||||
entries.Add(roFloat);
|
||||
// Float (useSlider=true, useStepper=true)
|
||||
entries.Add(new UTKFloatPropertyItem("float1", "Float (Slider+Stepper)", 3.14f, 0f, 10f, useSlider: true, useStepper: true));
|
||||
|
||||
// Float (useSlider=true, useStepper=false)
|
||||
entries.Add(new UTKFloatPropertyItem("float2", "Float (Slider)", 5.0f, 0f, 10f, useSlider: true, useStepper: false));
|
||||
|
||||
// Float (useSlider=false, useStepper=true)
|
||||
var floatStepper = new UTKFloatPropertyItem("float3", "Float (Stepper)", 2.5f, 0f, 10f, useSlider: false, useStepper: true)
|
||||
{
|
||||
Step = 0.5f // 0.5씩 증감
|
||||
};
|
||||
entries.Add(floatStepper);
|
||||
|
||||
// Float (useSlider=false, useStepper=false)
|
||||
entries.Add(new UTKFloatPropertyItem("float4", "Float (Field)", 7.2f, 0f, 10f, useSlider: false, useStepper: false));
|
||||
|
||||
// Float (ReadOnly=true)
|
||||
entries.Add(new UTKFloatPropertyItem("float_ro", "Float (ReadOnly)", 2.71f, 0f, 10f, useSlider: true, useStepper: false, isReadOnly: true));
|
||||
|
||||
// Vector2 (편집 가능)
|
||||
entries.Add(new UTKVector2PropertyItem("vec2", "Vector2", new Vector2(1, 2)));
|
||||
@@ -217,15 +267,27 @@ namespace UVC.Sample.UIToolkit
|
||||
entries.Add(roEnum);
|
||||
|
||||
// Dropdown (편집 가능)
|
||||
entries.Add(new UTKDropdownPropertyItem("dropdown", "Dropdown",
|
||||
entries.Add(new UTKDropdownPropertyItem("dropdown", "Dropdown",
|
||||
new List<string> { "Option A", "Option B", "Option C" }, "Option A"));
|
||||
|
||||
|
||||
// Dropdown (읽기 전용)
|
||||
var roDropdown = new UTKDropdownPropertyItem("dropdown_ro", "Dropdown (RO)",
|
||||
var roDropdown = new UTKDropdownPropertyItem("dropdown_ro", "Dropdown (RO)",
|
||||
new List<string> { "Option X", "Option Y", "Option Z" }, "Option Y");
|
||||
roDropdown.IsReadOnly = true;
|
||||
entries.Add(roDropdown);
|
||||
|
||||
|
||||
// MultiSelectDropdown (편집 가능)
|
||||
entries.Add(new UTKMultiSelectDropdownPropertyItem("multiselect", "MultiSelect",
|
||||
new List<string> { "Tag1", "Tag2", "Tag3", "Tag4" },
|
||||
new List<string> { "Tag1", "Tag3" }));
|
||||
|
||||
// MultiSelectDropdown (읽기 전용)
|
||||
var roMultiSelect = new UTKMultiSelectDropdownPropertyItem("multiselect_ro", "MultiSelect (RO)",
|
||||
new List<string> { "Feature A", "Feature B", "Feature C", "Feature D" },
|
||||
new List<string> { "Feature B", "Feature C" });
|
||||
roMultiSelect.IsReadOnly = true;
|
||||
entries.Add(roMultiSelect);
|
||||
|
||||
// Radio (편집 가능)
|
||||
entries.Add(new UTKRadioPropertyItem("radio", "Radio",
|
||||
new List<string> { "Choice 1", "Choice 2", "Choice 3" }, 0));
|
||||
@@ -261,6 +323,15 @@ namespace UVC.Sample.UIToolkit
|
||||
// 기본 속성 그룹 (편집 가능)
|
||||
var basicGroup = new UTKPropertyGroup("basic", "Basic Properties (Editable)");
|
||||
basicGroup.AddItem(new UTKStringPropertyItem("name", "Name", "Sample Object"));
|
||||
|
||||
// String with Edit Button
|
||||
var pathItem = new UTKStringPropertyItem("path", "File Path", "C:/Users/Sample/file.txt");
|
||||
pathItem.ActionButton = new UTKButtonItem("btn_browse", "browse_file", "", UTKMaterialIcons.FolderOpen,
|
||||
UTKButton.ButtonVariant.OutlineNormal, UTKButton.ButtonSize.Small);
|
||||
pathItem.ActionButton.IconOnly = true;
|
||||
pathItem.ActionButton.IconSize = 14;
|
||||
basicGroup.AddItem(pathItem);
|
||||
|
||||
basicGroup.AddItem(new UTKStringPropertyItem("description", "Description", "This is a sample object") { IsMultiline = true });
|
||||
basicGroup.AddItem(new UTKBoolPropertyItem("active", "Is Active", true));
|
||||
basicGroup.AddItem(new UTKIntPropertyItem("count", "Count", 10, 0, 100, true));
|
||||
@@ -363,6 +434,9 @@ namespace UVC.Sample.UIToolkit
|
||||
selectionGroup.AddItem(new UTKEnumPropertyItem("layer", "Layer", SampleLayer.Default));
|
||||
selectionGroup.AddItem(new UTKDropdownPropertyItem("tag", "Tag",
|
||||
new List<string> { "Untagged", "Player", "Enemy", "Item", "Environment" }, "Player"));
|
||||
selectionGroup.AddItem(new UTKMultiSelectDropdownPropertyItem("categories", "Categories",
|
||||
new List<string> { "Physics", "Rendering", "Audio", "UI", "Network" },
|
||||
new List<string> { "Physics", "Rendering" }));
|
||||
selectionGroup.AddItem(new UTKRadioPropertyItem("quality", "Quality",
|
||||
new List<string> { "Low", "Medium", "High", "Ultra" }, 2));
|
||||
entries.Add(selectionGroup);
|
||||
@@ -376,6 +450,11 @@ namespace UVC.Sample.UIToolkit
|
||||
new List<string> { "Untagged", "Player", "Enemy", "Item", "Environment" }, "Enemy");
|
||||
roTag.IsReadOnly = true;
|
||||
selectionGroupRO.AddItem(roTag);
|
||||
var roCategories = new UTKMultiSelectDropdownPropertyItem("categories_ro", "Categories",
|
||||
new List<string> { "Physics", "Rendering", "Audio", "UI", "Network" },
|
||||
new List<string> { "Audio", "UI", "Network" });
|
||||
roCategories.IsReadOnly = true;
|
||||
selectionGroupRO.AddItem(roCategories);
|
||||
var roQuality = new UTKRadioPropertyItem("quality_ro", "Quality",
|
||||
new List<string> { "Low", "Medium", "High", "Ultra" }, 3);
|
||||
roQuality.IsReadOnly = true;
|
||||
@@ -398,6 +477,75 @@ namespace UVC.Sample.UIToolkit
|
||||
rangeGroupRO.AddItem(roDamageRange);
|
||||
entries.Add(rangeGroupRO);
|
||||
|
||||
// Button 그룹 (라벨 표시 - ShowLabel = true, 기본값)
|
||||
var buttonGroup = new UTKPropertyGroup("buttons", "Buttons (With Label)");
|
||||
|
||||
// Primary 버튼
|
||||
buttonGroup.AddItem(new UTKButtonItem("btn_save", "save", "Save", UTKMaterialIcons.Save,
|
||||
UTKButton.ButtonVariant.Primary, UTKButton.ButtonSize.Medium));
|
||||
|
||||
// Normal 버튼
|
||||
buttonGroup.AddItem(new UTKButtonItem("btn_load", "load", "Load", UTKMaterialIcons.Download,
|
||||
UTKButton.ButtonVariant.Normal, UTKButton.ButtonSize.Medium));
|
||||
|
||||
// Danger 버튼
|
||||
buttonGroup.AddItem(new UTKButtonItem("btn_delete", "delete", "Delete", UTKMaterialIcons.Delete,
|
||||
UTKButton.ButtonVariant.Danger, UTKButton.ButtonSize.Medium));
|
||||
|
||||
// Icon Only 버튼
|
||||
var iconOnlyBtn = new UTKButtonItem("btn_settings", "settings", "", UTKMaterialIcons.Settings,
|
||||
UTKButton.ButtonVariant.OutlinePrimary, UTKButton.ButtonSize.Medium);
|
||||
iconOnlyBtn.IconOnly = true;
|
||||
iconOnlyBtn.IconSize = 16;
|
||||
buttonGroup.AddItem(iconOnlyBtn);
|
||||
|
||||
// Text 버튼
|
||||
buttonGroup.AddItem(new UTKButtonItem("btn_help", "help", "Help", UTKMaterialIcons.Help,
|
||||
UTKButton.ButtonVariant.Text, UTKButton.ButtonSize.Medium));
|
||||
|
||||
entries.Add(buttonGroup);
|
||||
|
||||
// Button 그룹 (라벨 없음 - ShowLabel = false, 전체 너비 사용)
|
||||
var buttonGroupNoLabel = new UTKPropertyGroup("buttons_no_label", "Buttons (No Label)");
|
||||
|
||||
// Primary 버튼 (전체 너비)
|
||||
var btnSaveNoLabel = new UTKButtonItem("btn_save_no_label", "save_no_label", "Save Changes", UTKMaterialIcons.Save,
|
||||
UTKButton.ButtonVariant.Primary, UTKButton.ButtonSize.Medium);
|
||||
btnSaveNoLabel.ShowLabel = false;
|
||||
buttonGroupNoLabel.AddItem(btnSaveNoLabel);
|
||||
|
||||
// Normal 버튼 (전체 너비)
|
||||
var btnLoadNoLabel = new UTKButtonItem("btn_load_no_label", "load_no_label", "Load Data", UTKMaterialIcons.Download,
|
||||
UTKButton.ButtonVariant.Normal, UTKButton.ButtonSize.Medium);
|
||||
btnLoadNoLabel.ShowLabel = false;
|
||||
buttonGroupNoLabel.AddItem(btnLoadNoLabel);
|
||||
|
||||
// Danger 버튼 (전체 너비)
|
||||
var btnDeleteNoLabel = new UTKButtonItem("btn_delete_no_label", "delete_no_label", "Delete All", UTKMaterialIcons.Delete,
|
||||
UTKButton.ButtonVariant.Danger, UTKButton.ButtonSize.Medium);
|
||||
btnDeleteNoLabel.ShowLabel = false;
|
||||
buttonGroupNoLabel.AddItem(btnDeleteNoLabel);
|
||||
|
||||
entries.Add(buttonGroupNoLabel);
|
||||
|
||||
// Individual Button Items (라벨 표시)
|
||||
entries.Add(new UTKButtonItem("btn_apply", "apply", "Apply Changes", UTKMaterialIcons.Check,
|
||||
UTKButton.ButtonVariant.Primary, UTKButton.ButtonSize.Medium));
|
||||
|
||||
entries.Add(new UTKButtonItem("btn_reset", "reset", "Reset to Default", UTKMaterialIcons.Refresh,
|
||||
UTKButton.ButtonVariant.OutlineNormal, UTKButton.ButtonSize.Medium));
|
||||
|
||||
// Individual Button Items (라벨 없음 - 전체 너비)
|
||||
var btnConfirmNoLabel = new UTKButtonItem("btn_confirm_no_label", "confirm_no_label", "Confirm Action", UTKMaterialIcons.CheckCircle,
|
||||
UTKButton.ButtonVariant.Primary, UTKButton.ButtonSize.Medium);
|
||||
btnConfirmNoLabel.ShowLabel = false;
|
||||
entries.Add(btnConfirmNoLabel);
|
||||
|
||||
var btnCancelNoLabel = new UTKButtonItem("btn_cancel_no_label", "cancel_no_label", "Cancel Operation", UTKMaterialIcons.Cancel,
|
||||
UTKButton.ButtonVariant.OutlineNormal, UTKButton.ButtonSize.Medium);
|
||||
btnCancelNoLabel.ShowLabel = false;
|
||||
entries.Add(btnCancelNoLabel);
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ doubleField.IsEnabled = false;",
|
||||
var disabledRow = root.Q<VisualElement>("stepper-disabled-row");
|
||||
if (disabledRow != null)
|
||||
{
|
||||
var stepper = new UTKNumberStepper(0, 100, 30, 1);
|
||||
var stepper = new UTKIntStepper(0, 100, 30, 1);
|
||||
stepper.style.width = 150;
|
||||
stepper.SetEnabled(false);
|
||||
disabledRow.Add(stepper);
|
||||
@@ -195,18 +195,18 @@ doubleField.IsEnabled = false;",
|
||||
|
||||
SetCodeSamples(root,
|
||||
csharpCode: @"// 기본 사용법
|
||||
var stepper = new UTKNumberStepper(minValue: 0, maxValue: 100, value: 50, step: 1);
|
||||
var stepper = new UTKIntStepper(minValue: 0, maxValue: 100, value: 50, step: 1);
|
||||
stepper.OnValueChanged += (newValue) => Debug.Log($""Value: {newValue}"");
|
||||
|
||||
// Step 설정
|
||||
var stepper5 = new UTKNumberStepper(0, 100, 25, 5); // Step 5씩 증감
|
||||
var stepper5 = new UTKIntStepper(0, 100, 25, 5); // Step 5씩 증감
|
||||
|
||||
// Wrap Around (최소/최대값에서 순환)
|
||||
var wrapStepper = new UTKNumberStepper(0, 100, 0, 10);
|
||||
var wrapStepper = new UTKIntStepper(0, 100, 0, 10);
|
||||
wrapStepper.WrapAround = true; // 0 -> -10 시 100으로 순환
|
||||
|
||||
// 비활성화
|
||||
var disabledStepper = new UTKNumberStepper(0, 100, 30, 1);
|
||||
var disabledStepper = new UTKIntStepper(0, 100, 30, 1);
|
||||
disabledStepper.SetEnabled(false);
|
||||
|
||||
// 속성 변경
|
||||
@@ -218,19 +218,19 @@ stepper.Step = 2;",
|
||||
<ui:UXML xmlns:utk=""UVC.UIToolkit"">
|
||||
|
||||
<!-- Step 1 -->
|
||||
<utk:UTKNumberStepper min-value=""0"" max-value=""100"" value=""50"" step=""1"" />
|
||||
<utk:UTKIntStepper min-value=""0"" max-value=""100"" value=""50"" step=""1"" />
|
||||
|
||||
<!-- Step 5 -->
|
||||
<utk:UTKNumberStepper min-value=""0"" max-value=""100"" value=""25"" step=""5"" />
|
||||
<utk:UTKIntStepper min-value=""0"" max-value=""100"" value=""25"" step=""5"" />
|
||||
|
||||
<!-- Wrap Around -->
|
||||
<utk:UTKNumberStepper min-value=""0"" max-value=""100"" value=""0"" step=""10"" wrap-around=""true"" />
|
||||
<utk:UTKIntStepper min-value=""0"" max-value=""100"" value=""0"" step=""10"" wrap-around=""true"" />
|
||||
|
||||
<!-- 비활성화 -->
|
||||
<utk:UTKNumberStepper min-value=""0"" max-value=""100"" value=""30"" step=""1"" is-enabled=""false"" />
|
||||
<utk:UTKIntStepper min-value=""0"" max-value=""100"" value=""30"" step=""1"" is-enabled=""false"" />
|
||||
|
||||
<!-- 커스텀 스타일 -->
|
||||
<utk:UTKNumberStepper class=""custom-stepper"" style=""width: 150px;"" />
|
||||
<utk:UTKIntStepper class=""custom-stepper"" style=""width: 150px;"" />
|
||||
|
||||
</ui:UXML>");
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
|
||||
["UTKVector4Field"] = "UIToolkit/Sample/Input/UTKVector4FieldSample",
|
||||
["UTKRectField"] = "UIToolkit/Sample/Input/UTKRectFieldSample",
|
||||
["UTKBoundsField"] = "UIToolkit/Sample/Input/UTKBoundsFieldSample",
|
||||
["UTKNumberStepper"] = "UIToolkit/Sample/Input/UTKNumberStepperSample",
|
||||
["UTKIntStepper"] = "UIToolkit/Sample/Input/UTKIntStepperSample",
|
||||
// Slider
|
||||
["UTKSlider"] = "UIToolkit/Sample/Slider/UTKSliderSample",
|
||||
["UTKSliderInt"] = "UIToolkit/Sample/Slider/UTKSliderIntSample",
|
||||
@@ -111,7 +111,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
|
||||
{
|
||||
["Icon"] = new[] { "UTKMaterialIcons", "UTKImageIcons", "UTKImage" },
|
||||
["Button"] = new[] { "UTKButton", "UTKCheckBox", "UTKToggle", "UTKRadioButton", "UTKToggleButtonGroup" },
|
||||
["Input"] = new[] { "UTKInputField", "UTKIntegerField", "UTKLongField", "UTKFloatField", "UTKDoubleField", "UTKVector2Field", "UTKVector3Field", "UTKVector4Field", "UTKRectField", "UTKBoundsField", "UTKNumberStepper" },
|
||||
["Input"] = new[] { "UTKInputField", "UTKIntegerField", "UTKLongField", "UTKFloatField", "UTKDoubleField", "UTKVector2Field", "UTKVector3Field", "UTKVector4Field", "UTKRectField", "UTKBoundsField", "UTKIntStepper" },
|
||||
["Slider"] = new[] { "UTKSlider", "UTKSliderInt", "UTKMinMaxSlider", "UTKProgressBar" },
|
||||
["Dropdown"] = new[] { "UTKDropdown", "UTKEnumDropDown", "UTKMultiSelectDropdown" },
|
||||
["Label"] = new[] { "UTKLabel", "UTKHelpBox" },
|
||||
@@ -448,7 +448,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
|
||||
case "UTKDoubleField":
|
||||
InitializeDoubleFieldSample(root);
|
||||
break;
|
||||
case "UTKNumberStepper":
|
||||
case "UTKIntStepper":
|
||||
InitializeNumberStepperSample(root);
|
||||
break;
|
||||
case "UTKVector2Field":
|
||||
|
||||
Reference in New Issue
Block a user