From c1012a86666e3f25b576c3c745b33f97020dbac4 Mon Sep 17 00:00:00 2001 From: vczh Date: Thu, 6 Jul 2023 01:50:42 -0700 Subject: [PATCH] Update release --- Import/GacUI.Windows.cpp | 76 +- Import/GacUI.cpp | 3148 +++++++++-------- Import/GacUI.h | 743 ++-- Import/GacUICompiler.cpp | 55 + Import/GacUIReflection.cpp | 49 +- Import/GacUIReflection.h | 5 +- Import/Skins/DarkSkin/DarkSkin.cpp | 361 +- Import/Skins/DarkSkin/DarkSkin.h | 34 +- Import/Skins/DarkSkin/DarkSkinReflection.cpp | 8 + Import/VlppGlrParser.cpp | 2 + Import/VlppGlrParserCompiler.cpp | 34 +- Import/VlppOS.Linux.cpp | 1 + Import/VlppOS.Windows.cpp | 1 + Import/VlppOS.cpp | 1 + Import/VlppReflection.cpp | 17 + Import/VlppRegex.cpp | 27 + Tools/Reflection32.bin | Bin 936690 -> 935078 bytes Tools/Reflection64.bin | Bin 936690 -> 935078 bytes .../UI/FullControlTest/AnimationTabPage.xml | 8 +- .../UI/FullControlTest/DataGridTabPage.xml | 2 +- .../UI/FullControlTest/DatePickerTabPage.xml | 2 +- .../UI/FullControlTest/DocumentComponents.xml | 2 +- .../UI/FullControlTest/DocumentEditorBase.xml | 2 +- .../FullControlTest/DocumentEditorRibbon.xml | 4 +- .../UI/FullControlTest/ElementTabPage.xml | 2 +- .../UI/FullControlTest/ListViewTabPage.xml | 2 +- .../LocalizedDialogsTabPage.xml | 10 +- .../LocalizedStringsTabPage.xml | 2 +- .../UI/FullControlTest/RepeatComponents.xml | 3 +- .../UI/FullControlTest/RepeatTabPage.xml | 2 +- .../UI/FullControlTest/ResponsiveTabPage.xml | 12 +- .../Source/DemoPartialClasses.cpp | 116 +- .../Source/DemoPartialClasses.h | 6 +- .../FullControlTest/Source/DemoReflection.cpp | 2 - .../UI/FullControlTest/TextBoxTabPage.xml | 6 +- .../UI/FullControlTest/TextListTabPage.xml | 5 +- .../UI/FullControlTest/TreeViewTabPage.xml | 2 +- .../UI/Source/EditorBasePartialClasses.cpp | 6 + .../UI/Source/EditorRibbonPartialClasses.cpp | 5 +- Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 | Bin 25176 -> 25176 bytes Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 | Bin 25176 -> 25176 bytes 41 files changed, 2626 insertions(+), 2137 deletions(-) diff --git a/Import/GacUI.Windows.cpp b/Import/GacUI.Windows.cpp index 09d70630..7a89d957 100644 --- a/Import/GacUI.Windows.cpp +++ b/Import/GacUI.Windows.cpp @@ -388,6 +388,7 @@ WindowsForm static void ClosePopupsOf(WindowsForm* owner, SortedList& exceptions) { + // TODO: (enumerable) foreach for (vint i = 0; i < owner->childWindows.Count(); i++) { auto popup = owner->childWindows[i]; @@ -456,6 +457,7 @@ WindowsForm List allRootWindows; GetAllCreatedWindows(allRootWindows, true); + // TODO: (enumerable) foreach for (vint i = 0; i < allRootWindows.Count(); i++) { if (auto windowsForm = dynamic_cast(allRootWindows[i])) @@ -475,6 +477,7 @@ WindowsForm { LPRECT rawBounds=(LPRECT)lParam; NativeRect bounds(rawBounds->left, rawBounds->top, rawBounds->right, rawBounds->bottom); + // TODO: (enumerable) foreach for(vint i=0;iMoving(bounds, false, (uMsg == WM_SIZING)); @@ -494,6 +497,7 @@ WindowsForm break; case WM_MOVE:case WM_SIZE: { + // TODO: (enumerable) foreach for(vint i=0;iMoved(); @@ -508,11 +512,13 @@ WindowsForm auto newRect = (RECT*)lParam; MoveWindow(handle, newRect->left, newRect->top, (newRect->right - newRect->left), (newRect->bottom - newRect->top), FALSE); + // TODO: (enumerable) foreach for (vint i = 0; i < listeners.Count(); i++) { listeners[i]->DpiChanged(true); } + // TODO: (enumerable) foreach for (vint i = 0; i < listeners.Count(); i++) { listeners[i]->DpiChanged(false); @@ -522,6 +528,7 @@ WindowsForm // ************************************** state case WM_ENABLE: { + // TODO: (enumerable) foreach for(vint i=0;iOpened(); @@ -571,6 +580,7 @@ WindowsForm } else { + // TODO: (enumerable) foreach for (vint i = 0; i < listeners.Count(); i++) { listeners[i]->Closed(); @@ -581,12 +591,14 @@ WindowsForm case WM_CLOSE: { bool cancel = false; + // TODO: (enumerable) foreach for (vint i = 0; i < listeners.Count(); i++) { listeners[i]->BeforeClosing(cancel); } if (!cancel) { + // TODO: (enumerable) foreach for (vint i = 0; i < listeners.Count(); i++) { listeners[i]->AfterClosing(); @@ -602,6 +614,7 @@ WindowsForm case WM_LBUTTONDOWN: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iLeftButtonDown(info); @@ -614,6 +627,7 @@ WindowsForm case WM_LBUTTONUP: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iLeftButtonUp(info); @@ -626,6 +640,7 @@ WindowsForm case WM_LBUTTONDBLCLK: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iLeftButtonDoubleClick(info); @@ -638,6 +653,7 @@ WindowsForm case WM_RBUTTONDOWN: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iRightButtonDown(info); @@ -650,6 +666,7 @@ WindowsForm case WM_RBUTTONUP: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iRightButtonUp(info); @@ -662,6 +679,7 @@ WindowsForm case WM_RBUTTONDBLCLK: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iRightButtonDoubleClick(info); @@ -674,6 +692,7 @@ WindowsForm case WM_MBUTTONDOWN: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iMiddleButtonDown(info); @@ -686,6 +705,7 @@ WindowsForm case WM_MBUTTONUP: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iMiddleButtonUp(info); @@ -698,6 +718,7 @@ WindowsForm case WM_MBUTTONDBLCLK: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, false, nonClient); + // TODO: (enumerable) foreach for(vint i=0;iMiddleButtonDoubleClick(info); @@ -715,12 +736,14 @@ WindowsForm if(!mouseHoving) { mouseHoving=true; + // TODO: (enumerable) foreach for(vint i=0;iMouseEntered(); } TrackMouse(true); } + // TODO: (enumerable) foreach for(vint i=0;iMouseMoving(info); @@ -732,6 +755,7 @@ WindowsForm case WM_MOUSEHWHEEL: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, true, false); + // TODO: (enumerable) foreach for(vint i=0;iHorizontalWheel(info); @@ -741,6 +765,7 @@ WindowsForm case WM_MOUSEWHEEL: { NativeWindowMouseInfo info=ConvertMouse(wParam, lParam, true, false); + // TODO: (enumerable) foreach for(vint i=0;iVerticalWheel(info); @@ -756,6 +781,7 @@ WindowsForm mouseLastX=-1; mouseLastY=-1; mouseHoving=false; + // TODO: (enumerable) foreach for(vint i=0;iMouseLeaved(); @@ -773,6 +799,7 @@ WindowsForm { NativeWindowKeyInfo info=ConvertKey(wParam, lParam); info.autoRepeatKeyDown = false; + // TODO: (enumerable) foreach for(vint i=0;iKeyUp(info); @@ -782,6 +809,7 @@ WindowsForm case WM_KEYDOWN: { NativeWindowKeyInfo info=ConvertKey(wParam, lParam); + // TODO: (enumerable) foreach for(vint i=0;iKeyDown(info); @@ -810,6 +838,7 @@ WindowsForm { break; } + // TODO: (enumerable) foreach for(vint i=0;iKeyDown(info); @@ -819,6 +848,7 @@ WindowsForm case WM_CHAR: { NativeWindowCharInfo info=ConvertChar(wParam); + // TODO: (enumerable) foreach for(vint i=0;iChar(info); @@ -828,6 +858,7 @@ WindowsForm // ************************************** painting case WM_PAINT: { + // TODO: (enumerable) foreach for(vint i=0;iPaint(); @@ -971,6 +1002,7 @@ WindowsForm case WM_LBUTTONUP: { POINTS location = MAKEPOINTS(lParam); + // TODO: (enumerable) this for-loop needs to be removed, because it is not looping, just leave the body for (vint i = 0; i < listeners.Count(); i++) { switch (PerformHitTest(From(listeners), { location.x,location.y })) @@ -1065,6 +1097,7 @@ WindowsForm { parentWindow->childWindows.Remove(this); } + // TODO: (enumerable) foreach for (vint i = childWindows.Count() - 1; i >= 0; i--) { childWindows[i]->SetParent(parentWindow); @@ -1073,6 +1106,7 @@ WindowsForm *flagDisposed.Obj() = true; List copiedListeners; CopyFrom(copiedListeners, listeners); + // TODO: (enumerable) foreach for (vint i = 0; i < copiedListeners.Count(); i++) { INativeWindowListener* listener = copiedListeners[i]; @@ -1091,6 +1125,7 @@ WindowsForm void InvokeDestroying() { + // TODO: (enumerable) foreach for(vint i=0;iDestroying(); @@ -1220,6 +1255,7 @@ WindowsForm void SetBounds(const NativeRect& bounds)override { NativeRect newBounds=bounds; + // TODO: (enumerable) foreach for(vint i=0;iMoving(newBounds, true, false); @@ -1926,6 +1962,7 @@ WindowsController { DestroyNativeWindow(window); } + // TODO: (enumerable) foreach:reversed for (vint i = windows.Count() - 1; i >= 0; i--) { auto window = windows.Values()[i]; @@ -2466,7 +2503,7 @@ WindowListener 1.1 if (size.x <= 1) size.x = 1; if (size.y <= 1) size.y = 1; - if(!d2dDeviceContext) + if (!d2dDeviceContext) { if (!dxgiDevice) { @@ -2479,8 +2516,6 @@ WindowListener 1.1 } d2dDeviceContext = CreateDeviceContext(dxgiDevice.Obj()); - auto d2dBitmap = CreateBitmap(dxgiSwapChain.Obj(), d2dDeviceContext.Obj()); - d2dDeviceContext->SetTarget(d2dBitmap.Obj()); IWindowsForm* form = GetWindowsForm(window); { UINT dpiX = 0; @@ -2488,18 +2523,26 @@ WindowListener 1.1 DpiAwared_GetDpiForWindow(form->GetWindowHandle(), &dpiX, &dpiY); d2dDeviceContext->SetDpi((FLOAT)dpiX, (FLOAT)dpiY); } + previousSize = { 0,0 }; } - else if(previousSize!=size) + + if (previousSize != size) { + previousSize = size; d2dDeviceContext->SetTarget(nullptr); - HRESULT hr = dxgiSwapChain->ResizeBuffers(0, 0, 0, DXGI_FORMAT_UNKNOWN, 0); + HRESULT hr = dxgiSwapChain->ResizeBuffers( + 0, + (UINT)size.x.value, + (UINT)size.y.value, + DXGI_FORMAT_UNKNOWN, + 0 + ); if (SUCCEEDED(hr)) { auto d2dBitmap = CreateBitmap(dxgiSwapChain.Obj(), d2dDeviceContext.Obj()); d2dDeviceContext->SetTarget(d2dBitmap.Obj()); } } - previousSize=size; } public: Direct2DWindowsNativeWindowListener_1_1(INativeWindow* _window, ComPtr _d2dFactory1, ID3D11Device* _d3d11Device) @@ -2578,6 +2621,7 @@ ControllerListener ~Direct2DWindowsNativeControllerListener() { + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < nativeWindowListeners.Count(); i++) { auto window = nativeWindowListeners.Keys()[i]; @@ -3133,6 +3177,7 @@ WindowsDirect2DParagraph (Ranges) void CutMap(Dictionary& map, vint start, vint length) { vint end=start+length; + // TODO: (enumerable) foreach:alterable(reversed) on group for(vint i=map.Count()-1;i>=0;i--) { TextRange key=map.Keys()[i]; @@ -3166,6 +3211,7 @@ WindowsDirect2DParagraph (Ranges) void UpdateOverlappedMap(Dictionary& map, vint start, vint length, const T& value) { vint end=start+length; + // TODO: (enumerable) foreach:alterable(reversed)) on dictionary for(vint i=map.Count()-1;i>=0;i--) { TextRange key=map.Keys()[i]; @@ -3181,6 +3227,7 @@ WindowsDirect2DParagraph (Ranges) { vint lastIndex=map.Count()-1; T lastValue=map.Values()[lastIndex]; + // TODO: (enumerable) foreach:indexed(alterable(reversed)) on dictionary for(vint i=map.Count()-2;i>=-1;i--) { if(i==-1 || map.Values()[i]!=lastValue) @@ -3262,6 +3309,7 @@ WindowsDirect2DParagraph (Layout Retriving) lineTops.Resize(lineCount); vint start=0; FLOAT top=0; + // TODO: (enumerable) foreach for(vint i=0;i inlineObject=inlineElements.Values().Get(i); @@ -3695,6 +3746,7 @@ WindowsDirect2DParagraph (Rendering) BackgroundRenderer backgroundRenderer; backgroundRenderer.renderTarget = renderTarget; + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < backgroundColors.Count(); i++) { TextRange key = backgroundColors.Keys()[i]; @@ -5216,6 +5268,7 @@ GuiPolygonElementRenderer p.x = (FLOAT)(oldPoints[0].x + offset.x) + 0.5f; p.y = (FLOAT)(oldPoints[0].y + offset.y) + 0.5f; pgs->BeginFigure(p, D2D1_FIGURE_BEGIN_FILLED); + // TODO: (enumerable) foreach for (vint i = 1; i < oldPoints.Count(); i++) { p.x = (FLOAT)(oldPoints[i].x + offset.x) + 0.5f; @@ -5319,6 +5372,7 @@ GuiPolygonElementRenderer } else { + // TODO: (enumerable) foreach for(vint i=0;iGetPoint(i)) @@ -5344,6 +5398,7 @@ GuiColorizedTextElementRenderer if(_renderTarget) { colors.Resize(element->GetColors().Count()); + // TODO: (enumerable) foreach:indexed for(vint i=0;iGetColors().Get(i); @@ -5370,6 +5425,7 @@ GuiColorizedTextElementRenderer { if(_renderTarget) { + // TODO: (enumerable) foreach for(vint i=0;iDestroyDirect2DBrush(colors[i].normal.text); @@ -8442,6 +8498,7 @@ namespace vl ~GdiWindowsNativeControllerListener() { + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < nativeWindowListeners.Count(); i++) { auto window = nativeWindowListeners.Keys()[i]; @@ -9774,6 +9831,7 @@ GuiColorizedTextElementRenderer void GuiColorizedTextElementRenderer::DestroyColors() { auto resourceManager=GetWindowsGDIResourceManager(); + // TODO: (enumerable) foreach for(vint i=0;iDestroyGdiBrush(colors[i].normal.background); @@ -9787,6 +9845,7 @@ GuiColorizedTextElementRenderer auto resourceManager=GetWindowsGDIResourceManager(); ColorArray newColors; newColors.Resize(element->GetColors().Count()); + // TODO: (enumerable) foreach:indexed for(vint i=0;iGetColors().Get(i); @@ -13481,6 +13540,7 @@ WindowsDialogService Array filterBuffer(filter.Length()+2); vint index=0; + // TODO: (enumerable) foreach for(vint i=0;iOnDetach(this); @@ -13919,6 +13980,7 @@ WindowsImage { if ((vint)actualCount > colorContexts.Count()) { + // TODO: (enumerable) foreach for (vint i = 0; i < colorContexts.Count(); i++) colorContexts[i]->Release(); colorContexts.Resize((vint)actualCount); bitmapDecoder->GetColorContexts(actualCount, &colorContexts[0], &actualCount); @@ -14639,6 +14701,7 @@ WindowsScreenService void WindowsScreenService::RefreshScreenInformation() { + // TODO: (enumerable) foreach for(vint i=0;imonitor=NULL; @@ -14670,6 +14733,7 @@ WindowsScreenService HMONITOR monitor=MonitorFromWindow(hwnd, MONITOR_DEFAULTTONULL); if(monitor!=NULL) { + // TODO: (enumerable) foreach for(vint i=0;imonitor==monitor) diff --git a/Import/GacUI.cpp b/Import/GacUI.cpp index f6a813bf..2c7252a0 100644 --- a/Import/GacUI.cpp +++ b/Import/GacUI.cpp @@ -156,6 +156,7 @@ External Functions (Compositions) { Group group; host->CollectAltActions(group); + // TODO: (enumerable) Linq:SelectMany for (vint i = 0; i < group.Count(); i++) { CopyFrom(actions, group.GetByIndex(i), true); @@ -407,6 +408,7 @@ GuiApplication INativeWindow* nativeWindow = GetCurrentController()->WindowService()->GetWindow(location); if (nativeWindow) { + // TODO: (enumerable) foreach for (vint i = 0; i < windows.Count(); i++) { GuiWindow* window = windows[i]; @@ -554,7 +556,8 @@ GuiApplication Helpers ***********************************************************************/ - GuiApplication* application=0; + GuiApplication* application = nullptr; + bool GACUI_UNITTEST_ONLY_SKIP_THREAD_LOCAL_STORAGE_DISPOSE_STORAGES = false; GuiApplication* GetApplication() { @@ -628,7 +631,10 @@ GuiApplicationMain DestroyPluginManager(); theme::FinalizeTheme(); - ThreadLocalStorage::DisposeStorages(); + if (!GACUI_UNITTEST_ONLY_SKIP_THREAD_LOCAL_STORAGE_DISPOSE_STORAGES) + { + ThreadLocalStorage::DisposeStorages(); + } FinalizeGlobalStorage(); #ifndef VCZH_DEBUG_NO_REFLECTION ResetGlobalTypeManager(); @@ -793,6 +799,7 @@ GuiControl arguments.controlSignal = ControlSignal::ParentLineChanged; ControlSignalTrigerred.Execute(arguments); } + // TODO: (enumerable) foreach for(vint i=0;iOnParentLineChanged(); @@ -806,6 +813,7 @@ GuiControl arguments.controlSignal = ControlSignal::ServiceAdded; ControlSignalTrigerred.Execute(arguments); } + // TODO: (enumerable) foreach for(vint i=0;iOnParentLineChanged(); @@ -821,6 +829,7 @@ GuiControl void GuiControl::OnBeforeReleaseGraphicsHost() { + // TODO: (enumerable) foreach for(vint i=0;iOnBeforeReleaseGraphicsHost(); @@ -839,6 +848,7 @@ GuiControl } VisuallyEnabledChanged.Execute(GetNotifyEventArguments()); + // TODO: (enumerable) foreach for (vint i = 0; i < children.Count(); i++) { children[i]->UpdateVisuallyEnabled(); @@ -862,6 +872,7 @@ GuiControl } DisplayFontChanged.Execute(GetNotifyEventArguments()); + // TODO: (enumerable) foreach for (vint i = 0; i < children.Count(); i++) { children[i]->UpdateDisplayFont(); @@ -989,8 +1000,12 @@ GuiControl GuiControl::GuiControl(theme::ThemeName themeName) :controlThemeName(themeName) - , displayFont(GetCurrentController()->ResourceService()->GetDefaultFont()) { + if (auto controller = GetCurrentController()) + { + displayFont = controller->ResourceService()->GetDefaultFont(); + } + { boundsComposition = new GuiBoundsComposition; boundsComposition->SetAssociatedControl(this); @@ -1042,6 +1057,7 @@ GuiControl delete tooltipControl; } + // TODO: (enumerable) foreach for (vint i = 0; i < children.Count(); i++) { delete children[i]; @@ -1502,6 +1518,7 @@ GuiInstanceRootObject { if (alive) { + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = rootObject->runningAnimations.Count() - 1; i >= 0; i--) { auto animation = rootObject->runningAnimations[i]; @@ -1600,6 +1617,7 @@ GuiInstanceRootObject } subscriptions.Clear(); + // TODO: (enumerable) foreach for (vint i = 0; iGetBoundsComposition()->GetBounds().GetSize()); + Rect bounds(Point(0, 0), control->GetBoundsComposition()->GetCachedBounds().GetSize()); return CalculatePopupPosition(windowSize, control, controlWindow, bounds, preferredTopBottomSide); } @@ -3227,7 +3245,7 @@ GuiPopup /*********************************************************************** -.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSBASICCOMPOSITION.CPP +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSBOUNDSCOMPOSITION.CPP ***********************************************************************/ namespace vl @@ -3243,109 +3261,125 @@ namespace vl GuiBoundsComposition ***********************************************************************/ - Rect GuiBoundsComposition::GetPreferredBoundsInternal(bool considerPreferredMinSize) + Size GuiBoundsComposition::Layout_CalculateMinSize() { - Rect result = GetBoundsInternal(compositionBounds, considerPreferredMinSize); - if (GetParent() && IsAlignedToParent()) + Size minSize = Layout_CalculateMinSizeHelper(); + if (minSize.x < expectedBounds.Width()) minSize.x = expectedBounds.Width(); + if (minSize.y < expectedBounds.Height()) minSize.y = expectedBounds.Height(); + return minSize; + } + + Size GuiBoundsComposition::Layout_CalculateMinClientSizeForParent(Margin parentInternalMargin) + { + vint offsetW = 0; + vint offsetH = 0; + + if (alignmentToParent.left == -1 && alignmentToParent.right == -1) { - if (alignmentToParent.left >= 0) + offsetW = expectedBounds.x1; + } + else + { + if (alignmentToParent.left != -1) { - vint offset = alignmentToParent.left - result.x1; - result.x1 += offset; - result.x2 += offset; + offsetW += alignmentToParent.left - parentInternalMargin.left; } - if (alignmentToParent.top >= 0) + if (alignmentToParent.right != -1) { - vint offset = alignmentToParent.top - result.y1; - result.y1 += offset; - result.y2 += offset; - } - if (alignmentToParent.right >= 0) - { - result.x2 += alignmentToParent.right; - } - if (alignmentToParent.bottom >= 0) - { - result.y2 += alignmentToParent.bottom; + offsetW += alignmentToParent.right - parentInternalMargin.right; } } - return result; - } - GuiBoundsComposition::GuiBoundsComposition() - { - } - - GuiBoundsComposition::~GuiBoundsComposition() - { - } - - bool GuiBoundsComposition::GetSizeAffectParent() - { - return sizeAffectParent; - } - - void GuiBoundsComposition::SetSizeAffectParent(bool value) - { - sizeAffectParent = value; - } - - bool GuiBoundsComposition::IsSizeAffectParent() - { - return sizeAffectParent; - } - - Rect GuiBoundsComposition::GetBounds() - { - Rect result = GetPreferredBounds(); - if (GetParent() && IsAlignedToParent()) + if (alignmentToParent.top == -1 && alignmentToParent.bottom == -1) { - Size clientSize = GetParent()->GetClientArea().GetSize(); - if (alignmentToParent.left >= 0 && alignmentToParent.right >= 0) + offsetH = expectedBounds.y1; + } + else + { + if (alignmentToParent.top != -1) { - result.x1 = alignmentToParent.left; - result.x2 = clientSize.x - alignmentToParent.right; + offsetH += alignmentToParent.top - parentInternalMargin.top; } - else if (alignmentToParent.left >= 0) + if (alignmentToParent.bottom != -1) { - vint width = result.Width(); - result.x1 = alignmentToParent.left; - result.x2 = result.x1 + width; - } - else if (alignmentToParent.right >= 0) - { - vint width = result.Width(); - result.x2 = clientSize.x - alignmentToParent.right; - result.x1 = result.x2 - width; - } - - if (alignmentToParent.top >= 0 && alignmentToParent.bottom >= 0) - { - result.y1 = alignmentToParent.top; - result.y2 = clientSize.y - alignmentToParent.bottom; - } - else if (alignmentToParent.top >= 0) - { - vint height = result.Height(); - result.y1 = alignmentToParent.top; - result.y2 = result.y1 + height; - } - else if (alignmentToParent.bottom >= 0) - { - vint height = result.Height(); - result.y2 = clientSize.y - alignmentToParent.bottom; - result.y1 = result.y2 - height; + offsetH += alignmentToParent.bottom - parentInternalMargin.bottom; } } - UpdatePreviousBounds(result); - return result; + + return { cachedMinSize.x + offsetW,cachedMinSize.y + offsetH }; } - void GuiBoundsComposition::SetBounds(Rect value) + Rect GuiBoundsComposition::Layout_CalculateBounds(Size parentSize) { - if (compositionBounds != value) + if (auto parent = GetParent()) { - compositionBounds = value; + Rect result; + Rect parentBounds({}, parentSize); + Margin parentInternalMargin = parent->GetInternalMargin(); + + if (alignmentToParent.left != -1 && alignmentToParent.right != -1) + { + result.x1 = parentBounds.x1 + alignmentToParent.left; + result.x2 = parentBounds.x2 - alignmentToParent.right; + } + else if (alignmentToParent.left != -1) + { + result.x1 = parentBounds.x1 + alignmentToParent.left; + result.x2 = result.x1 + cachedMinSize.x; + } + else if (alignmentToParent.right != -1) + { + result.x2 = parentBounds.x2 - alignmentToParent.right; + result.x1 = result.x2 - cachedMinSize.x; + } + else + { + result.x1 = expectedBounds.x1 + parentInternalMargin.left; + result.x2 = result.x1 + cachedMinSize.x; + } + + if (alignmentToParent.top != -1 && alignmentToParent.bottom != -1) + { + result.y1 = parentBounds.y1 + alignmentToParent.top; + result.y2 = parentBounds.y2 - alignmentToParent.bottom; + } + else if (alignmentToParent.top != -1) + { + result.y1 = parentBounds.y1 + alignmentToParent.top; + result.y2 = result.y1 + cachedMinSize.y; + } + else if (alignmentToParent.bottom != -1) + { + result.y2 = parentBounds.y2 - alignmentToParent.bottom; + result.y1 = result.y2 - cachedMinSize.y; + } + else + { + result.y1 = expectedBounds.y1 + parentInternalMargin.top; + result.y2 = result.y1 + cachedMinSize.y; + } + + return result; + } + else + { + return Rect(expectedBounds.LeftTop(), cachedMinSize); + } + } + + Rect GuiBoundsComposition::GetExpectedBounds() + { + return expectedBounds; + } + + void GuiBoundsComposition::SetExpectedBounds(Rect value) + { + if (value.x2 < value.x1) value.x2 = value.x1; + if (value.y2 < value.y1) value.y2 = value.y1; + + if (expectedBounds != value) + { + expectedBounds = value; InvokeOnCompositionStateChanged(); } } @@ -3373,7 +3407,7 @@ GuiBoundsComposition } /*********************************************************************** -.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSCOMPOSITIONBASE.CPP +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSCOMPOSITION.CPP ***********************************************************************/ namespace vl @@ -3382,8 +3416,6 @@ namespace vl { namespace compositions { - using namespace collections; - using namespace controls; using namespace elements; void InvokeOnCompositionStateChanged(compositions::GuiGraphicsComposition* composition) @@ -3391,73 +3423,28 @@ namespace vl composition->InvokeOnCompositionStateChanged(); } - Size InvokeGetMinPreferredClientSizeInternal(GuiGraphicsComposition* composition, bool considerPreferredMinSize) - { - return composition->GetMinPreferredClientSizeInternal(considerPreferredMinSize); - } - - Rect InvokeGetPreferredBoundsInternal(GuiGraphicsComposition* composition, bool considerPreferredMinSize) - { - return composition->GetPreferredBoundsInternal(considerPreferredMinSize); - } - - Rect InvokeGetBoundsInternal(GuiGraphicsSite* composition, Rect expectedBounds, bool considerPreferredMinSize) - { - return composition->GetBoundsInternal(expectedBounds, considerPreferredMinSize); - } - -/*********************************************************************** -GuiWindowComposition -***********************************************************************/ - - GuiWindowComposition::GuiWindowComposition() - { - } - - GuiWindowComposition::~GuiWindowComposition() - { - } - - Rect GuiWindowComposition::GetBounds() - { - Rect bounds; - if (relatedHostRecord) - { - if (auto window = relatedHostRecord->host->GetNativeWindow()) - { - bounds = Rect(Point(0, 0), window->Convert(window->GetClientSize())); - } - } - UpdatePreviousBounds(bounds); - return bounds; - } - - void GuiWindowComposition::SetMargin(Margin value) - { - } - /*********************************************************************** GuiGraphicsComposition ***********************************************************************/ void GuiGraphicsComposition::OnControlParentChanged(controls::GuiControl* control) { - if(associatedControl && associatedControl!=control) + if (associatedControl && associatedControl != control) { - if(associatedControl->GetParent()) + if (associatedControl->GetParent()) { associatedControl->GetParent()->OnChildRemoved(associatedControl); } - if(control) + if (control) { control->OnChildInserted(associatedControl); } } else { - for(vint i=0;iOnControlParentChanged(control); + child->OnControlParentChanged(control); } } } @@ -3469,7 +3456,7 @@ GuiGraphicsComposition void GuiGraphicsComposition::OnChildRemoved(GuiGraphicsComposition* child) { - child->OnControlParentChanged(0); + child->OnControlParentChanged(nullptr); } void GuiGraphicsComposition::OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent) @@ -3479,12 +3466,16 @@ GuiGraphicsComposition void GuiGraphicsComposition::OnParentLineChanged() { - for (vint i = 0; i < children.Count(); i++) + for (auto child : children) { - children[i]->OnParentLineChanged(); + child->OnParentLineChanged(); } } + void GuiGraphicsComposition::OnCompositionStateChanged() + { + } + void GuiGraphicsComposition::OnRenderContextChanged() { } @@ -3502,9 +3493,9 @@ GuiGraphicsComposition } } - for (vint i = 0; i < children.Count(); i++) + for (auto child : children) { - children[i]->UpdateRelatedHostRecord(record); + child->UpdateRelatedHostRecord(record); } if (HasEventReceiver()) @@ -3523,23 +3514,24 @@ GuiGraphicsComposition { if (associatedControl) { - for (vint i = 0; i < children.Count(); i++) + for (auto child : children) { - children[i]->OnControlParentChanged(0); + child->OnControlParentChanged(nullptr); } } associatedControl = control; if (associatedControl) { - for (vint i = 0; i < children.Count(); i++) + for (auto child : children) { - children[i]->OnControlParentChanged(associatedControl); + child->OnControlParentChanged(associatedControl); } } } void GuiGraphicsComposition::InvokeOnCompositionStateChanged() { + OnCompositionStateChanged(); if (relatedHostRecord && GetEventuallyVisible()) { relatedHostRecord->host->RequestRender(); @@ -3560,13 +3552,15 @@ GuiGraphicsComposition GuiGraphicsComposition::GuiGraphicsComposition() { sharedPtrDestructorProc = &GuiGraphicsComposition::SharedPtrDestructorProc; + CachedMinSizeChanged.SetAssociatedComposition(this); + CachedBoundsChanged.SetAssociatedComposition(this); } GuiGraphicsComposition::~GuiGraphicsComposition() { - for(vint i=0;iIsClipperCoverWholeTarget()) { - Rect bounds = GetBounds(); - bounds.x1 += margin.left; - bounds.y1 += margin.top; - bounds.x2 -= margin.right; - bounds.y2 -= margin.bottom; - + Rect bounds = GetCachedBounds(); if (bounds.x1 <= bounds.x2 && bounds.y1 <= bounds.y2) { bounds.x1 += offset.x; @@ -3742,25 +3731,18 @@ GuiGraphicsComposition renderer->Render(bounds); } } + if (children.Count() > 0) { - bounds.x1 += internalMargin.left; - bounds.y1 += internalMargin.top; - bounds.x2 -= internalMargin.right; - bounds.y2 -= internalMargin.bottom; - if (bounds.x1 <= bounds.x2 && bounds.y1 <= bounds.y2) + renderTarget->PushClipper(bounds); + if (!renderTarget->IsClipperCoverWholeTarget()) { - offset = bounds.GetSize(); - renderTarget->PushClipper(bounds); - if (!renderTarget->IsClipperCoverWholeTarget()) + for (auto child : children) { - for (vint i = 0; i < children.Count(); i++) - { - children[i]->Render(Size(bounds.x1, bounds.y1)); - } + child->Render(Size(bounds.x1, bounds.y1)); } - renderTarget->PopClipper(); } + renderTarget->PopClipper(); } isRendering = false; } @@ -3784,18 +3766,16 @@ GuiGraphicsComposition GuiGraphicsComposition* GuiGraphicsComposition::FindComposition(Point location, bool forMouseEvent) { if (!visible) return 0; - Rect bounds = GetBounds(); + Rect bounds = GetCachedBounds(); Rect relativeBounds = Rect(Point(0, 0), bounds.GetSize()); if (relativeBounds.Contains(location)) { - Rect clientArea = GetClientArea(); + // TODO: (enumerable) foreach:reversed for (vint i = children.Count() - 1; i >= 0; i--) { GuiGraphicsComposition* child = children[i]; - Rect childBounds = child->GetBounds(); - vint offsetX = childBounds.x1 + (clientArea.x1 - bounds.x1); - vint offsetY = childBounds.y1 + (clientArea.y1 - bounds.y1); - Point newLocation = location - Size(offsetX, offsetY); + Rect childBounds = child->GetCachedBounds(); + Point newLocation = location - Size(childBounds.x1, childBounds.y1); GuiGraphicsComposition* childResult = child->FindComposition(newLocation, forMouseEvent); if (childResult) { @@ -3821,23 +3801,6 @@ GuiGraphicsComposition transparentToMouse = value; } - Rect GuiGraphicsComposition::GetGlobalBounds() - { - Rect bounds = GetBounds(); - GuiGraphicsComposition* composition = parent; - while (composition) - { - Rect clientArea = composition->GetClientArea(); - Rect parentBounds = composition->GetBounds(); - bounds.x1 += clientArea.x1; - bounds.x2 += clientArea.x1; - bounds.y1 += clientArea.y1; - bounds.y2 += clientArea.y1; - composition = composition->parent; - } - return bounds; - } - controls::GuiControl* GuiGraphicsComposition::GetAssociatedControl() { return associatedControl; @@ -3923,20 +3886,6 @@ GuiGraphicsComposition return nullptr; } - Margin GuiGraphicsComposition::GetMargin() - { - return margin; - } - - void GuiGraphicsComposition::SetMargin(Margin value) - { - if (margin != value) - { - margin = value; - InvokeOnCompositionStateChanged(); - } - } - Margin GuiGraphicsComposition::GetInternalMargin() { return internalMargin; @@ -3944,6 +3893,11 @@ GuiGraphicsComposition void GuiGraphicsComposition::SetInternalMargin(Margin value) { + if (value.left < 0) value.left = 0; + if (value.top < 0) value.top = 0; + if (value.right < 0) value.right = 0; + if (value.bottom < 0) value.bottom = 0; + if (internalMargin != value) { internalMargin = value; @@ -3958,130 +3912,30 @@ GuiGraphicsComposition void GuiGraphicsComposition::SetPreferredMinSize(Size value) { + if (value.x < 0) value.x = 0; + if (value.y < 0) value.y = 0; + if (preferredMinSize != value) { preferredMinSize = value; InvokeOnCompositionStateChanged(); } } - - Rect GuiGraphicsComposition::GetClientArea() - { - Rect bounds=GetBounds(); - bounds.x1+=margin.left+internalMargin.left; - bounds.y1+=margin.top+internalMargin.top; - bounds.x2-=margin.right+internalMargin.right; - bounds.y2-=margin.bottom+internalMargin.bottom; - return bounds; - } - - void GuiGraphicsComposition::ForceCalculateSizeImmediately() - { - isRendering = true; - for (vint i = 0; i < children.Count(); i++) - { - children[i]->ForceCalculateSizeImmediately(); - } - isRendering = false; - InvokeOnCompositionStateChanged(); - } - - Size GuiGraphicsComposition::GetMinPreferredClientSize() - { - return GetMinPreferredClientSizeInternal(true); - } - - Rect GuiGraphicsComposition::GetPreferredBounds() - { - return GetPreferredBoundsInternal(true); - } + } + } +} /*********************************************************************** -GuiGraphicsSite +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSCOMPOSITION_HELPERS.CPP ***********************************************************************/ - Rect GuiGraphicsSite::GetBoundsInternal(Rect expectedBounds, bool considerPreferredMinSize) - { - Size minSize = GetMinPreferredClientSizeInternal(considerPreferredMinSize); - if (considerPreferredMinSize) - { - if (minSize.x < preferredMinSize.x) minSize.x = preferredMinSize.x; - if (minSize.y < preferredMinSize.y) minSize.y = preferredMinSize.y; - } - - minSize.x += margin.left + margin.right + internalMargin.left + internalMargin.right; - minSize.y += margin.top + margin.bottom + internalMargin.top + internalMargin.bottom; - vint w = expectedBounds.Width(); - vint h = expectedBounds.Height(); - if (minSize.x < w) minSize.x = w; - if (minSize.y < h) minSize.y = h; - return Rect(expectedBounds.LeftTop(), minSize); - } - - void GuiGraphicsSite::UpdatePreviousBounds(Rect bounds) - { - if (previousBounds != bounds) - { - previousBounds = bounds; - BoundsChanged.Execute(GuiEventArgs(this)); - InvokeOnCompositionStateChanged(); - } - } - - Size GuiGraphicsSite::GetMinPreferredClientSizeInternal(bool considerPreferredMinSize) - { - Size minSize; - if (minSizeLimitation != GuiGraphicsComposition::NoLimit) - { - if (ownedElement) - { - IGuiGraphicsRenderer* renderer = ownedElement->GetRenderer(); - if (renderer) - { - minSize = renderer->GetMinSize(); - } - } - } - if (minSizeLimitation == GuiGraphicsComposition::LimitToElementAndChildren) - { - vint childCount = Children().Count(); - for (vint i = 0; i < childCount; i++) - { - GuiGraphicsComposition* child = children[i]; - if (child->IsSizeAffectParent()) - { - Rect childBounds = InvokeGetPreferredBoundsInternal(child, considerPreferredMinSize); - if (minSize.x < childBounds.x2) minSize.x = childBounds.x2; - if (minSize.y < childBounds.y2) minSize.y = childBounds.y2; - } - } - } - return minSize; - } - - Rect GuiGraphicsSite::GetPreferredBoundsInternal(bool considerPreferredMinSize) - { - return GetBoundsInternal(Rect(Point(0, 0), GetMinPreferredClientSize()), considerPreferredMinSize); - } - - GuiGraphicsSite::GuiGraphicsSite() - { - BoundsChanged.SetAssociatedComposition(this); - } - - GuiGraphicsSite::~GuiGraphicsSite() - { - } - - bool GuiGraphicsSite::IsSizeAffectParent() - { - return true; - } - - Rect GuiGraphicsSite::GetPreviousCalculatedBounds() - { - return previousBounds; - } +namespace vl +{ + namespace presentation + { + namespace compositions + { + using namespace controls; /*********************************************************************** Helper Functions @@ -4129,10 +3983,9 @@ Helper Functions if (!finalized) { - vint count = value->Children().Count(); - for (vint i = 0; i < count; i++) + for (auto child : value->Children()) { - NotifyFinalizeInstance(value->Children()[i]); + NotifyFinalizeInstance(child); } } } @@ -4169,6 +4022,7 @@ Helper Functions } else { + // TODO: (enumerable) foreach:reversed for (vint i = value->Children().Count() - 1; i >= 0; i--) { SafeDeleteCompositionInternal(value->Children().Get(i)); @@ -4200,6 +4054,166 @@ Helper Functions } } +/*********************************************************************** +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSCOMPOSITION_LAYOUT.CPP +***********************************************************************/ + +namespace vl +{ + namespace presentation + { + namespace compositions + { + using namespace elements; + +/*********************************************************************** +GuiGraphicsComposition +***********************************************************************/ + + Size GuiGraphicsComposition::Layout_CalculateMinSizeHelper() + { + Size minSize; + if (minSize.x < preferredMinSize.x) minSize.x = preferredMinSize.x; + if (minSize.y < preferredMinSize.y) minSize.y = preferredMinSize.y; + + if (minSizeLimitation != GuiGraphicsComposition::NoLimit) + { + if (ownedElement) + { + IGuiGraphicsRenderer* renderer = ownedElement->GetRenderer(); + if (renderer) + { + auto elementSize = renderer->GetMinSize(); + if (minSize.x < elementSize.x) minSize.x = elementSize.x; + if (minSize.y < elementSize.y) minSize.y = elementSize.y; + } + } + } + + vint offsetW = internalMargin.left + internalMargin.right; + vint offsetH = internalMargin.top + internalMargin.bottom; + minSize.x += offsetW; + minSize.y += offsetH; + + for (auto child : children) + { + child->Layout_UpdateMinSize(); + } + + if (minSizeLimitation == GuiGraphicsComposition::LimitToElementAndChildren) + { + for (auto child : children) + { + Size minClientSize = child->Layout_CalculateMinClientSizeForParent(internalMargin); + Size minBoundsSize(minClientSize.x + offsetW, minClientSize.y + offsetH); + if (minSize.x < minBoundsSize.x) minSize.x = minBoundsSize.x; + if (minSize.y < minBoundsSize.y) minSize.y = minBoundsSize.y; + } + } + return minSize; + } + + void GuiGraphicsComposition::Layout_SetCachedMinSize(Size value) + { + if (value.x < 0) value.x = 0; + if (value.y < 0) value.y = 0; + + if (cachedMinSize != value) + { + cachedMinSize = value; + CachedMinSizeChanged.Execute(GuiEventArgs(this)); + InvokeOnCompositionStateChanged(); + } + } + + void GuiGraphicsComposition::Layout_SetCachedBounds(Rect value) + { + if (value.x2 < value.x1) value.x2 = value.x1; + if (value.y2 < value.y1) value.y2 = value.y1; + + if (cachedBounds != value) + { + cachedBounds = value; + CachedBoundsChanged.Execute(GuiEventArgs(this)); + InvokeOnCompositionStateChanged(); + } + } + + void GuiGraphicsComposition::Layout_UpdateMinSize() + { + Layout_SetCachedMinSize(Layout_CalculateMinSize()); + } + + void GuiGraphicsComposition::Layout_UpdateBounds(Size parentSize) + { + Layout_SetCachedBounds(Layout_CalculateBounds(parentSize)); + for (auto child : children) + { + child->Layout_UpdateBounds(cachedBounds.GetSize()); + } + } + + Size GuiGraphicsComposition::GetCachedMinSize() + { + return cachedMinSize; + } + + Size GuiGraphicsComposition::GetCachedMinClientSize() + { + auto minSize = cachedMinSize; + minSize.x -= internalMargin.left + internalMargin.right; + minSize.y -= internalMargin.top + internalMargin.bottom; + return minSize; + } + + Rect GuiGraphicsComposition::GetCachedBounds() + { + return cachedBounds; + } + + Rect GuiGraphicsComposition::GetCachedClientArea() + { + Rect bounds = cachedBounds; + bounds.x1 += internalMargin.left; + bounds.y1 += internalMargin.top; + bounds.x2 -= internalMargin.right; + bounds.y2 -= internalMargin.bottom; + if (bounds.x2 < bounds.x1) bounds.x2 = bounds.x1; + if (bounds.y2 < bounds.y1) bounds.y2 = bounds.y1; + return bounds; + } + + Rect GuiGraphicsComposition::GetGlobalBounds() + { + Rect bounds = cachedBounds; + GuiGraphicsComposition* composition = parent; + while (composition) + { + Rect clientArea = composition->GetCachedClientArea(); + bounds.x1 += clientArea.x1; + bounds.x2 += clientArea.x1; + bounds.y1 += clientArea.y1; + bounds.y2 += clientArea.y1; + composition = composition->parent; + } + return bounds; + } + + void GuiGraphicsComposition::ForceCalculateSizeImmediately() + { + Size parentSize; + if (parent) + { + parentSize = parent->cachedBounds.GetSize(); + } + + Layout_UpdateMinSize(); + Layout_UpdateBounds(parentSize); + } + } + } +} + /*********************************************************************** .\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSEVENTRECEIVER.CPP ***********************************************************************/ @@ -4255,6 +4269,37 @@ Event Receiver } } +/*********************************************************************** +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSWINDOWCOMPOSITION.CPP +***********************************************************************/ + +namespace vl +{ + namespace presentation + { + namespace compositions + { + +/*********************************************************************** +GuiWindowComposition +***********************************************************************/ + + Rect GuiWindowComposition::Layout_CalculateBounds(Size parentSize) + { + Rect bounds; + if (relatedHostRecord) + { + if (auto window = relatedHostRecord->host->GetNativeWindow()) + { + bounds = Rect(Point(0, 0), window->Convert(window->GetClientSize())); + } + } + return bounds; + } + } + } +} + /*********************************************************************** .\APPLICATION\GRAPHICSHOST\GUIGRAPHICSHOST.CPP ***********************************************************************/ @@ -4288,6 +4333,7 @@ GuiGraphicsTimerManager void GuiGraphicsTimerManager::Play() { + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = callbacks.Count() - 1; i >= 0; i--) { auto callback = callbacks[i]; @@ -4311,6 +4357,7 @@ GuiGraphicsHost void GuiGraphicsHost::DisconnectCompositionInternal(GuiGraphicsComposition* composition) { + // TODO: (enumerable) foreach for(vint i=0;iChildren().Count();i++) { DisconnectCompositionInternal(composition->Children().Get(i)); @@ -4367,6 +4414,7 @@ GuiGraphicsHost GuiCharEventArgs arguments(composition); (NativeWindowCharInfo&)arguments=info; + // TODO: (enumerable) foreach:reversed for(vint i=compositions.Count()-1;i>=0;i--) { compositions[i]->GetEventReceiver()->previewCharInput.Execute(arguments); @@ -4376,6 +4424,7 @@ GuiGraphicsHost } } + // TODO: (enumerable) foreach for(vint i=0;iGetEventReceiver()->*eventReceiverEvent).Execute(arguments); @@ -4404,6 +4453,7 @@ GuiGraphicsHost GuiKeyEventArgs arguments(composition); (NativeWindowKeyInfo&)arguments = info; + // TODO: (enumerable) foreach:reversed for (vint i = compositions.Count() - 1; i >= 0; i--) { compositions[i]->GetEventReceiver()->previewKey.Execute(arguments); @@ -4413,6 +4463,7 @@ GuiGraphicsHost } } + // TODO: (enumerable) foreach for (vint i = 0; i < compositions.Count(); i++) { (compositions[i]->GetEventReceiver()->*eventReceiverEvent).Execute(arguments); @@ -4449,9 +4500,9 @@ GuiGraphicsHost GuiGraphicsComposition* parent=composition->GetParent(); if(parent) { - Rect parentBounds=parent->GetBounds(); - Rect clientArea=parent->GetClientArea(); - Rect childBounds=composition->GetBounds(); + Rect parentBounds=parent->GetCachedBounds(); + Rect clientArea=parent->GetCachedClientArea(); + Rect childBounds=composition->GetCachedBounds(); x+=childBounds.x1+(clientArea.x1-parentBounds.x1); y+=childBounds.y1+(clientArea.y1-parentBounds.y1); @@ -4531,7 +4582,7 @@ GuiGraphicsHost void GuiGraphicsHost::Moving(NativeRect& bounds, bool fixSizeOnly, bool draggingBorder) { NativeRect oldBounds = hostRecord.nativeWindow->GetBounds(); - minSize = windowComposition->GetPreferredBounds().GetSize(); + minSize = windowComposition->GetCachedMinSize(); NativeSize minWindowSize = hostRecord.nativeWindow->Convert(minSize) + (oldBounds.GetSize() - hostRecord.nativeWindow->GetClientSize()); if (bounds.Width() < minWindowSize.x) { @@ -4577,7 +4628,9 @@ GuiGraphicsHost if (previousClientSize != size) { previousClientSize = size; - minSize = windowComposition->GetPreferredBounds().GetSize(); + windowComposition->Layout_UpdateMinSize(); + windowComposition->Layout_UpdateBounds(hostRecord.nativeWindow->Convert(size)); + minSize = windowComposition->GetCachedMinSize(); needRender = true; } } @@ -4678,6 +4731,7 @@ GuiGraphicsHost } vint firstDifferentIndex = mouseEnterCompositions.Count(); + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < mouseEnterCompositions.Count(); i++) { if (i == newCompositions.Count()) @@ -4692,6 +4746,7 @@ GuiGraphicsHost } } + // TODO: (enumerable) foreach:reversed Linq:Take for (vint i = mouseEnterCompositions.Count() - 1; i >= firstDifferentIndex; i--) { GuiGraphicsComposition* composition = mouseEnterCompositions[i]; @@ -4702,6 +4757,7 @@ GuiGraphicsHost } CopyFrom(mouseEnterCompositions, newCompositions); + // TODO: (enumerable) foreach Linq:Skip for (vint i = firstDifferentIndex; i < mouseEnterCompositions.Count(); i++) { GuiGraphicsComposition* composition = mouseEnterCompositions[i]; @@ -4734,6 +4790,7 @@ GuiGraphicsHost void GuiGraphicsHost::MouseLeaved() { + // TODO: (enumerable) foreach:reversed for(vint i=mouseEnterCompositions.Count()-1;i>=0;i--) { GuiGraphicsComposition* composition=mouseEnterCompositions[i]; @@ -4883,11 +4940,13 @@ GuiGraphicsHost default: { supressPaint = true; - auto bounds = windowComposition->GetBounds(); - auto preferred = windowComposition->GetPreferredBounds(); - auto width = bounds.Width() > preferred.Width() ? bounds.Width() : preferred.Width(); - auto height = bounds.Height() > preferred.Height() ? bounds.Height() : preferred.Height(); - controlHost->UpdateClientSizeAfterRendering(preferred.GetSize(), Size(width, height)); + auto bounds = windowComposition->GetCachedBounds(); + windowComposition->Layout_UpdateMinSize(); + auto preferred = windowComposition->GetCachedMinSize(); + auto width = bounds.Width() > preferred.x ? bounds.Width() : preferred.x; + auto height = bounds.Height() > preferred.y ? bounds.Height() : preferred.y; + controlHost->UpdateClientSizeAfterRendering(preferred, Size(width, height)); + windowComposition->Layout_UpdateBounds({ width,height }); supressPaint = false; } } @@ -4899,6 +4958,7 @@ GuiGraphicsHost ProcList procs; CopyFrom(procs, afterRenderProcs); afterRenderProcs.Clear(); + // TODO: (enumerable) foreach for (vint i = 0; i < procs.Count(); i++) { procs[i](); @@ -4908,6 +4968,7 @@ GuiGraphicsHost ProcMap procs; CopyFrom(procs, afterRenderKeyedProcs); afterRenderKeyedProcs.Clear(); + // TODO: (enumerable) foreach for (vint i = 0; i < procs.Count(); i++) { procs.Values()[i](); @@ -4966,7 +5027,7 @@ GuiGraphicsHost _nativeWindow->InstallListener(this); GetCurrentController()->CallbackService()->InstallListener(this); previousClientSize = _nativeWindow->GetClientSize(); - minSize = windowComposition->GetPreferredBounds().GetSize(); + minSize = windowComposition->GetCachedMinSize(); _nativeWindow->SetCaretPoint(_nativeWindow->Convert(caretPoint)); needRender = true; } @@ -5018,6 +5079,10 @@ GuiGraphicsHost { return false; } + if(focusedComposition == composition) + { + return true; + } if(focusedComposition && focusedComposition->HasEventReceiver()) { GuiEventArgs arguments; @@ -5281,6 +5346,7 @@ GuiAltActionManager { if (currentAltHost) { + // TODO: (enumerable) foreach on group (key, value[]) vint count = actions.Count(); for (vint i = 0; i < count; i++) { @@ -5324,6 +5390,7 @@ GuiAltActionManager } } + // TODO: (enumerable) foreach on dictionary count = currentActiveAltActions.Count(); auto window = dynamic_cast(currentAltHost->GetAltComposition()->GetRelatedControlHost()); for (vint i = 0; i < count; i++) @@ -5347,6 +5414,7 @@ GuiAltActionManager vint GuiAltActionManager::FilterTitles() { + // TODO: (enumerable) foreach on dictionary vint count = currentActiveAltTitles.Count(); vint visibles = 0; for (vint i = 0; i < count; i++) @@ -5715,6 +5783,7 @@ GuiTabActionManager void InsertPrioritized(List& controls, vint index, Group& prioritized) { + // TODO: (enumerable) Linq:SelectMany vint count = prioritized.Count(); for (vint i = 0; i < count; i++) { @@ -5737,6 +5806,7 @@ GuiTabActionManager InsertPrioritized(controlsInOrder, 0, prioritized); } + // TODO: (enumerable) foreach for (vint i = 0; i < controlsInOrder.Count(); i++) { Group prioritized; @@ -6094,6 +6164,7 @@ GuiSelectableButton::GroupController GuiSelectableButton::GroupController::~GroupController() { + // TODO: (enumerable) foreach:reversed for(vint i=buttons.Count()-1;i>=0;i--) { buttons[i]->SetGroupController(0); @@ -6131,6 +6202,7 @@ GuiSelectableButton::MutexGroupController if(!suppress) { suppress=true; + // TODO: (enumerable) foreach for(vint i=0;iSetSelected(buttons[i]==button); @@ -6485,13 +6557,13 @@ GuiScrollView } ct->GetEventReceiver()->horizontalWheel.Detach(hWheelHandler); ct->GetEventReceiver()->verticalWheel.Detach(vWheelHandler); - ct->BoundsChanged.Detach(containerBoundsChangedHandler); + ct->CachedBoundsChanged.Detach(containerCachedBoundsChangedHandler); hScrollHandler = nullptr; vScrollHandler = nullptr; hWheelHandler = nullptr; vWheelHandler = nullptr; - containerBoundsChangedHandler = nullptr; + containerCachedBoundsChangedHandler = nullptr; supressScrolling = false; } @@ -6508,7 +6580,7 @@ GuiScrollView } hWheelHandler = ct->GetEventReceiver()->horizontalWheel.AttachMethod(this, &GuiScrollView::OnHorizontalWheel); vWheelHandler = ct->GetEventReceiver()->verticalWheel.AttachMethod(this, &GuiScrollView::OnVerticalWheel); - containerBoundsChangedHandler = ct->BoundsChanged.AttachMethod(this, &GuiScrollView::OnContainerBoundsChanged); + containerCachedBoundsChangedHandler = ct->CachedBoundsChanged.AttachMethod(this, &GuiScrollView::OnContainerCachedBoundsChanged); CalculateView(); } @@ -6518,7 +6590,7 @@ GuiScrollView CalculateView(); } - void GuiScrollView::OnContainerBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void GuiScrollView::OnContainerCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { CalculateView(); } @@ -6584,7 +6656,7 @@ GuiScrollView auto ct = TypedControlTemplateObject(true); auto hScroll = ct->GetHorizontalScroll(); auto vScroll = ct->GetVerticalScroll(); - Size viewSize = ct->GetContainerComposition()->GetBounds().GetSize(); + Size viewSize = ct->GetContainerComposition()->GetCachedBounds().GetSize(); auto hVisible = hScroll ? hScroll->GetVisible() : false; auto vVisible = vScroll ? vScroll->GetVisible() : false; @@ -6631,7 +6703,7 @@ GuiScrollView GuiScrollView::GuiScrollView(theme::ThemeName themeName) :GuiControl(themeName) { - containerComposition->BoundsChanged.AttachMethod(this, &GuiScrollView::OnContainerBoundsChanged); + containerComposition->CachedBoundsChanged.AttachMethod(this, &GuiScrollView::OnContainerCachedBoundsChanged); } vint GuiScrollView::GetSmallMove() @@ -6709,7 +6781,7 @@ GuiScrollView Size GuiScrollView::GetViewSize() { - Size viewSize = TypedControlTemplateObject(true)->GetContainerComposition()->GetBounds().GetSize(); + Size viewSize = TypedControlTemplateObject(true)->GetContainerComposition()->GetCachedBounds().GetSize(); return viewSize; } @@ -6783,13 +6855,13 @@ GuiScrollContainer Size GuiScrollContainer::QueryFullSize() { - return containerComposition->GetBounds().GetSize(); + return containerComposition->GetCachedBounds().GetSize(); } void GuiScrollContainer::UpdateView(Rect viewBounds) { auto leftTop = Point(-viewBounds.x1, -viewBounds.y1); - containerComposition->SetBounds(Rect(leftTop, Size(0, 0))); + containerComposition->SetExpectedBounds(Rect(leftTop, Size(0, 0))); } GuiScrollContainer::GuiScrollContainer(theme::ThemeName themeName) @@ -7944,6 +8016,7 @@ DataMultipleFilter void DataMultipleFilter::SetCallback(IDataProcessorCallback* value) { DataFilterBase::SetCallback(value); + // TODO: (enumerable) foreach for (vint i = 0; i < filters.Count(); i++) { filters[i]->SetCallback(value); @@ -8698,6 +8771,7 @@ DataProvider currentSorter = nullptr; } + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < columns.Count(); i++) { columns[i]->sortingState = @@ -8712,6 +8786,7 @@ DataProvider vint DataProvider::GetSortedColumn() { + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < columns.Count(); i++) { auto state = columns[i]->sortingState; @@ -8725,6 +8800,7 @@ DataProvider bool DataProvider::IsSortOrderAscending() { + // TODO: (enumerable) foreach for (vint i = 0; i < columns.Count(); i++) { auto state = columns[i]->sortingState; @@ -9191,6 +9267,7 @@ GuiBindableListView::ItemSource void GuiBindableListView::ItemSource::NotifyAllColumnsUpdate() { + // TODO: (enumerable) foreach for (vint i = 0; i < columnItemViewCallbacks.Count(); i++) { columnItemViewCallbacks[i]->OnColumnChanged(); @@ -9845,10 +9922,10 @@ GuiComboBoxBase return IGuiMenuService::Horizontal; } - void GuiComboBoxBase::OnBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void GuiComboBoxBase::OnCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { Size size=GetPreferredMenuClientSize(); - size.x=boundsComposition->GetBounds().Width(); + size.x=boundsComposition->GetCachedBounds().Width(); SetPreferredMenuClientSize(size); } @@ -9858,7 +9935,7 @@ GuiComboBoxBase CreateSubMenu(); SetCascadeAction(false); - boundsComposition->BoundsChanged.AttachMethod(this, &GuiComboBoxBase::OnBoundsChanged); + boundsComposition->CachedBoundsChanged.AttachMethod(this, &GuiComboBoxBase::OnCachedBoundsChanged); } GuiComboBoxBase::~GuiComboBoxBase() @@ -9968,7 +10045,7 @@ GuiComboBoxListControl Size adoptedSize = containedListControl->GetAdoptedSize(expectedSize); Size clientSize = GetPreferredMenuClientSize(); - vint height = adoptedSize.y + subMenu->GetClientSize().y - containedListControl->GetBoundsComposition()->GetBounds().Height(); + vint height = adoptedSize.y + subMenu->GetClientSize().y - containedListControl->GetBoundsComposition()->GetCachedBounds().Height(); if (clientSize.y != height) { clientSize.y = height; @@ -10013,7 +10090,7 @@ GuiComboBoxListControl AdoptSubMenuSize(); } - void GuiComboBoxListControl::OnListControlBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void GuiComboBoxListControl::OnListControlCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { auto flag = GetDisposedFlag(); GetApplication()->InvokeLambdaInMainThread(GetRelatedControlHost(), [=]() @@ -10083,7 +10160,7 @@ GuiComboBoxListControl containedListControl->AdoptedSizeInvalidated.AttachMethod(this, &GuiComboBoxListControl::OnListControlAdoptedSizeInvalidated); containedListControl->ItemLeftButtonDown.AttachMethod(this, &GuiComboBoxListControl::OnListControlItemMouseDown); containedListControl->ItemRightButtonDown.AttachMethod(this, &GuiComboBoxListControl::OnListControlItemMouseDown); - boundsChangedHandler = containedListControl->GetBoundsComposition()->BoundsChanged.AttachMethod(this, &GuiComboBoxListControl::OnListControlBoundsChanged); + boundsChangedHandler = containedListControl->GetBoundsComposition()->CachedBoundsChanged.AttachMethod(this, &GuiComboBoxListControl::OnListControlCachedBoundsChanged); boundsComposition->GetEventReceiver()->keyDown.AttachMethod(this, &GuiComboBoxListControl::OnKeyDown); auto itemProvider = containedListControl->GetItemProvider(); @@ -10098,7 +10175,7 @@ GuiComboBoxListControl GuiComboBoxListControl::~GuiComboBoxListControl() { containedListControl->GetItemProvider()->DetachCallback(this); - containedListControl->GetBoundsComposition()->BoundsChanged.Detach(boundsChangedHandler); + containedListControl->GetBoundsComposition()->CachedBoundsChanged.Detach(boundsChangedHandler); boundsChangedHandler = nullptr; } @@ -10310,6 +10387,7 @@ DefaultDataGridItemTemplate DefaultListViewItemTemplate::OnInitialize(); { textTable = new GuiTableComposition; + textTable->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); textTable->SetAlignmentToParent(Margin(0, 0, 0, 0)); textTable->SetRowsAndColumns(1, 1); textTable->SetRowOption(0, GuiCellOption::MinSizeOption()); @@ -10345,6 +10423,7 @@ DefaultDataGridItemTemplate cell->AddChild(composition); } + // TODO: (enumerable) foreach for (vint i = 0; i < dataVisualizers.Count(); i++) { dataVisualizers[i]->BeforeVisualizeCell(dataGrid->GetItemProvider(), itemIndex, i); @@ -10446,7 +10525,6 @@ DefaultDataGridItemTemplate { textTable->SetColumnOption(i, GuiCellOption::AbsoluteOption(dataGrid->columnItemView->GetColumnSize(i))); } - textTable->UpdateCellBounds(); } } @@ -11181,12 +11259,16 @@ MainColumnVisualizerTemplate GuiCellComposition* cell = new GuiCellComposition; table->AddChild(cell); cell->SetSite(0, 1, 3, 1); - cell->SetMargin(Margin(0, 0, 8, 0)); + + auto textBounds = new GuiBoundsComposition; + cell->AddChild(textBounds); + textBounds->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElement); + textBounds->SetAlignmentToParent(Margin(0, 0, 8, 0)); text = GuiSolidLabelElement::Create(); text->SetAlignments(Alignment::Left, Alignment::Center); text->SetEllipse(true); - cell->SetOwnedElement(Ptr(text)); + textBounds->SetOwnedElement(Ptr(text)); } table->SetAlignmentToParent(Margin(0, 0, 0, 0)); @@ -11229,13 +11311,18 @@ SubColumnVisualizerTemplate void SubColumnVisualizerTemplate::Initialize(bool fixTextColor) { + + SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); + + auto textBounds = new GuiBoundsComposition; + AddChild(textBounds); + textBounds->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElement); + textBounds->SetAlignmentToParent(Margin(8, 0, 8, 0)); + text = GuiSolidLabelElement::Create(); text->SetVerticalAlignment(Alignment::Center); text->SetEllipse(true); - - SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); - SetMargin(Margin(8, 0, 8, 0)); - SetOwnedElement(Ptr(text)); + textBounds->SetOwnedElement(Ptr(text)); TextChanged.AttachMethod(this, &SubColumnVisualizerTemplate::OnTextChanged); FontChanged.AttachMethod(this, &SubColumnVisualizerTemplate::OnFontChanged); @@ -11480,6 +11567,7 @@ RangedItemArrangerBase startIndex = 0; if (callback) { + // TODO: (enumerable) foreach for (vint i = 0; i < visibleStyles.Count(); i++) { DeleteStyle(visibleStyles[i]); @@ -11521,6 +11609,7 @@ RangedItemArrangerBase } vint newEndIndex = newStartIndex + newVisibleStyles.Count() - 1; + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < visibleStyles.Count(); i++) { vint index = startIndex + i; @@ -11543,6 +11632,7 @@ RangedItemArrangerBase { vint newStartIndex = startIndex; BeginPlaceItem(false, viewBounds, newStartIndex); + // TODO: (enumerable) foreach for (vint i = 0; i < visibleStyles.Count(); i++) { auto style = visibleStyles[i]; @@ -11634,6 +11724,7 @@ RangedItemArrangerBase } visibleStyles.RemoveRange(0, visibleCount); + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < visibleStyles.Count(); i++) { visibleStyles[i].key->SetIndex(startIndex + i); @@ -11698,6 +11789,7 @@ RangedItemArrangerBase vint RangedItemArrangerBase::GetVisibleIndex(GuiListControl::ItemStyle* style) { + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < visibleStyles.Count(); i++) { if (visibleStyles[i].key == style) @@ -11755,6 +11847,7 @@ FreeHeightItemArranger EnsureOffsetForItem(heights.Count() - 1); if (forMoving) { + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < heights.Count(); i++) { if (offsets[i] + heights[i] >= newBounds.Top()) @@ -12369,9 +12462,13 @@ FixedHeightMultiColumnItemArranger void FixedHeightMultiColumnItemArranger::CalculateRange(vint itemHeight, Rect bounds, vint& rows, vint& startColumn) { - rows = bounds.Height() / itemHeight; + vint w = bounds.Width(); + vint h = bounds.Height(); + if (w <= 0) w = 1; + + rows = h / itemHeight; if (rows < 1) rows = 1; - startColumn = bounds.Left() / bounds.Width(); + startColumn = bounds.Left() / w; } void FixedHeightMultiColumnItemArranger::BeginPlaceItem(bool forMoving, Rect newBounds, vint& newStartIndex) @@ -12380,10 +12477,14 @@ FixedHeightMultiColumnItemArranger pi_totalWidth = 0; if (forMoving) { + vint w = newBounds.Width(); + vint h = newBounds.Height(); + if (w <= 0) w = 1; + pim_itemHeight = itemHeight; - vint rows = newBounds.Height() / itemHeight; + vint rows = h / itemHeight; if (rows < 1) rows = 1; - vint columns = newBounds.Left() / newBounds.Width(); + vint columns = newBounds.Left() / w; newStartIndex = rows * columns; } } @@ -12442,7 +12543,6 @@ FixedHeightMultiColumnItemArranger } FixedHeightMultiColumnItemArranger::FixedHeightMultiColumnItemArranger() - :itemHeight(1) { } @@ -12585,7 +12685,7 @@ GuiListControl::ItemCallback Ptr GuiListControl::ItemCallback::InstallStyle(ItemStyle* style, vint itemIndex, compositions::GuiBoundsComposition* itemComposition) { - auto handler = style->BoundsChanged.AttachMethod(this, &ItemCallback::OnStyleBoundsChanged); + auto handler = style->CachedBoundsChanged.AttachMethod(this, &ItemCallback::OnStyleCachedBoundsChanged); listControl->GetContainerComposition()->AddChild(itemComposition ? itemComposition : style); listControl->OnStyleInstalled(itemIndex, style); return handler; @@ -12597,11 +12697,11 @@ GuiListControl::ItemCallback auto handler = installedStyles.Values()[index]; listControl->OnStyleUninstalled(style); listControl->GetContainerComposition()->RemoveChild(style); - style->BoundsChanged.Detach(handler); + style->CachedBoundsChanged.Detach(handler); return style; } - void GuiListControl::ItemCallback::OnStyleBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void GuiListControl::ItemCallback::OnStyleCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { listControl->CalculateView(); } @@ -12618,6 +12718,7 @@ GuiListControl::ItemCallback void GuiListControl::ItemCallback::ClearCache() { + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < installedStyles.Count(); i++) { auto style = UninstallStyle(i); @@ -12667,7 +12768,7 @@ GuiListControl::ItemCallback Size GuiListControl::ItemCallback::GetStylePreferredSize(compositions::GuiBoundsComposition* style) { - Size size = style->GetPreferredBounds().GetSize(); + Size size = style->GetCachedMinSize(); return listControl->axis->RealSizeToVirtualSize(size); } @@ -12679,14 +12780,14 @@ GuiListControl::ItemCallback Rect GuiListControl::ItemCallback::GetStyleBounds(compositions::GuiBoundsComposition* style) { - Rect bounds = style->GetBounds(); + Rect bounds = style->GetCachedBounds(); return listControl->axis->RealRectToVirtualRect(listControl->GetViewSize(), bounds); } void GuiListControl::ItemCallback::SetStyleBounds(compositions::GuiBoundsComposition* style, Rect bounds) { Rect newBounds = listControl->axis->VirtualRectToRealRect(listControl->GetViewSize(), bounds); - return style->SetBounds(newBounds); + return style->SetExpectedBounds(newBounds); } compositions::GuiGraphicsComposition* GuiListControl::ItemCallback::GetContainerComposition() @@ -12813,7 +12914,7 @@ GuiListControl } } - void GuiListControl::OnClientBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void GuiListControl::OnClientCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { auto args = GetNotifyEventArguments(); AdoptedSizeInvalidated.Execute(args); @@ -12944,7 +13045,7 @@ GuiListControl { ContextChanged.AttachMethod(this, &GuiListControl::OnContextChanged); VisuallyEnabledChanged.AttachMethod(this, &GuiListControl::OnVisuallyEnabledChanged); - containerComposition->BoundsChanged.AttachMethod(this, &GuiListControl::OnClientBoundsChanged); + containerComposition->CachedBoundsChanged.AttachMethod(this, &GuiListControl::OnClientCachedBoundsChanged); ItemTemplateChanged.SetAssociatedComposition(boundsComposition); ArrangerChanged.SetAssociatedComposition(boundsComposition); @@ -13058,8 +13159,8 @@ GuiListControl { if (itemArranger) { - Size controlSize = boundsComposition->GetPreviousCalculatedBounds().GetSize(); - Size viewSize = containerComposition->GetPreviousCalculatedBounds().GetSize(); + Size controlSize = boundsComposition->GetCachedBounds().GetSize(); + Size viewSize = containerComposition->GetCachedBounds().GetSize(); vint x = controlSize.x - viewSize.x; vint y = controlSize.y - viewSize.y; @@ -13405,6 +13506,8 @@ GuiSelectableListControl if(selectedItems.Count()>0) { selectedItems.Clear(); + selectedItemIndexStart = -1; + selectedItemIndexEnd = -1; OnItemSelectionCleared(); NotifySelectionChanged(); } @@ -13421,6 +13524,7 @@ ItemProviderBase { CHECK_ERROR(!callingOnItemModified, L"ItemProviderBase::InvokeOnItemModified(vint, vint, vint)#Canning modify the observable data source during its item modified event, which will cause this event to be executed recursively."); callingOnItemModified = true; + // TODO: (enumerable) foreach for (vint i = 0; i < callbacks.Count(); i++) { callbacks[i]->OnItemModified(start, count, newCount); @@ -13434,6 +13538,7 @@ ItemProviderBase ItemProviderBase::~ItemProviderBase() { + // TODO: (enumerable) foreach for(vint i=0;iOnAttached(0); @@ -13611,10 +13716,10 @@ ListViewColumnItemArranger listView->ColumnClicked.Execute(args); } - void ListViewColumnItemArranger::ColumnBoundsChanged(vint index, compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void ListViewColumnItemArranger::ColumnCachedBoundsChanged(vint index, compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { GuiBoundsComposition* buttonBounds=columnHeaderButtons[index]->GetBoundsComposition(); - vint size=buttonBounds->GetBounds().Width(); + vint size=buttonBounds->GetCachedBounds().Width(); if(size>columnItemView->GetColumnSize(index)) { columnItemView->SetColumnSize(index, size); @@ -13650,11 +13755,11 @@ ListViewColumnItemArranger if(index!=-1) { GuiBoundsComposition* buttonBounds=columnHeaderButtons[index]->GetBoundsComposition(); - Rect bounds=buttonBounds->GetBounds(); + Rect bounds=buttonBounds->GetCachedBounds(); Rect newBounds(bounds.LeftTop(), Size(bounds.Width()+offset, bounds.Height())); - buttonBounds->SetBounds(newBounds); + buttonBounds->SetExpectedBounds(newBounds); - vint finalSize=buttonBounds->GetBounds().Width(); + vint finalSize=buttonBounds->GetCachedBounds().Width(); columnItemView->SetColumnSize(index, finalSize); } } @@ -13665,12 +13770,12 @@ ListViewColumnItemArranger FixedHeightItemArranger::RearrangeItemBounds(); vint count = columnHeaders->GetParent()->Children().Count(); columnHeaders->GetParent()->MoveChild(columnHeaders, count - 1); - columnHeaders->SetBounds(Rect(Point(-viewBounds.Left(), 0), Size(0, 0))); + columnHeaders->SetExpectedBounds(Rect(Point(-viewBounds.Left(), 0), Size(0, 0))); } vint ListViewColumnItemArranger::GetWidth() { - vint width=columnHeaders->GetBounds().Width()-SplitterWidth; + vint width=columnHeaders->GetCachedBounds().Width()-SplitterWidth; if(widthGetBounds().Height(); + return columnHeaders->GetCachedBounds().Height(); } Size ListViewColumnItemArranger::OnCalculateTotalSize() @@ -13692,6 +13797,7 @@ ListViewColumnItemArranger void ListViewColumnItemArranger::DeleteColumnButtons() { + // TODO: (enumerable) foreach:reversed for(vint i=columnHeaders->GetStackItems().Count()-1;i>=0;i--) { GuiStackItemComposition* item=columnHeaders->GetStackItems().Get(i); @@ -13719,7 +13825,7 @@ ListViewColumnItemArranger button->SetText(listViewItemView->GetColumnText(i)); button->SetSubMenu(columnItemView->GetDropdownPopup(i), false); button->SetColumnSortingState(columnItemView->GetSortingState(i)); - button->GetBoundsComposition()->SetBounds(Rect(Point(0, 0), Size(columnItemView->GetColumnSize(i), 0))); + button->GetBoundsComposition()->SetExpectedBounds(Rect(Point(0, 0), Size(columnItemView->GetColumnSize(i), 0))); } } else @@ -13748,9 +13854,9 @@ ListViewColumnItemArranger button->SetText(listViewItemView->GetColumnText(i)); button->SetSubMenu(columnItemView->GetDropdownPopup(i), false); button->SetColumnSortingState(columnItemView->GetSortingState(i)); - button->GetBoundsComposition()->SetBounds(Rect(Point(0, 0), Size(columnItemView->GetColumnSize(i), 0))); + button->GetBoundsComposition()->SetExpectedBounds(Rect(Point(0, 0), Size(columnItemView->GetColumnSize(i), 0))); button->Clicked.AttachLambda([this, i](GuiGraphicsComposition* sender, GuiEventArgs& args) { ColumnClicked(i, sender, args); }); - button->GetBoundsComposition()->BoundsChanged.AttachLambda([this, i](GuiGraphicsComposition* sender, GuiEventArgs& args) { ColumnBoundsChanged(i, sender, args); }); + button->GetBoundsComposition()->CachedBoundsChanged.AttachLambda([this, i](GuiGraphicsComposition* sender, GuiEventArgs& args) { ColumnCachedBoundsChanged(i, sender, args); }); columnHeaderButtons.Add(button); if (i > 0) { @@ -14088,6 +14194,7 @@ ListViewItemProvider void ListViewItemProvider::NotifyAllColumnsUpdate() { + // TODO: (enumerable) foreach for (vint i = 0; i < columnItemViewCallbacks.Count(); i++) { columnItemViewCallbacks[i]->OnColumnChanged(); @@ -14421,6 +14528,7 @@ BigIconListViewItemTemplate { auto table = new GuiTableComposition; AddChild(table); + table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); table->SetRowsAndColumns(2, 3); table->SetRowOption(0, GuiCellOption::MinSizeOption()); table->SetRowOption(1, GuiCellOption::MinSizeOption()); @@ -14501,6 +14609,7 @@ SmallIconListViewItemTemplate { auto table = new GuiTableComposition; AddChild(table); + table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); table->SetRowsAndColumns(3, 2); table->SetRowOption(0, GuiCellOption::PercentageOption(0.5)); table->SetRowOption(1, GuiCellOption::MinSizeOption()); @@ -14579,6 +14688,7 @@ ListListViewItemTemplate { auto table = new GuiTableComposition; AddChild(table); + table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); table->SetRowsAndColumns(3, 2); table->SetRowOption(0, GuiCellOption::PercentageOption(0.5)); table->SetRowOption(1, GuiCellOption::MinSizeOption()); @@ -14601,11 +14711,15 @@ ListListViewItemTemplate auto cell = new GuiCellComposition; table->AddChild(cell); cell->SetSite(0, 1, 3, 1); - cell->SetMargin(Margin(0, 0, 16, 0)); + + auto textBounds = new GuiBoundsComposition; + cell->AddChild(textBounds); + textBounds->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElement); + textBounds->SetAlignmentToParent(Margin(0, 0, 16, 0)); text = GuiSolidLabelElement::Create(); text->SetAlignments(Alignment::Left, Alignment::Center); - cell->SetOwnedElement(Ptr(text)); + textBounds->SetOwnedElement(Ptr(text)); } } @@ -14790,6 +14904,7 @@ InformationListViewItemTemplate auto table = new GuiTableComposition; AddChild(table); + table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); table->SetRowsAndColumns(3, 3); table->SetRowOption(0, GuiCellOption::PercentageOption(0.5)); table->SetRowOption(1, GuiCellOption::MinSizeOption()); @@ -14797,7 +14912,6 @@ InformationListViewItemTemplate table->SetColumnOption(0, GuiCellOption::MinSizeOption()); table->SetColumnOption(1, GuiCellOption::PercentageOption(1.0)); table->SetColumnOption(2, GuiCellOption::MinSizeOption()); - table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); table->SetAlignmentToParent(Margin(0, 0, 0, 0)); table->SetCellPadding(4); { @@ -14871,11 +14985,11 @@ InformationListViewItemTemplate cell->SetSite(i + 1, 0, 1, 1); auto dataTable = new GuiTableComposition; + dataTable->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); dataTable->SetRowsAndColumns(1, 2); dataTable->SetRowOption(0, GuiCellOption::MinSizeOption()); dataTable->SetColumnOption(0, GuiCellOption::MinSizeOption()); dataTable->SetColumnOption(1, GuiCellOption::PercentageOption(1.0)); - dataTable->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); dataTable->SetAlignmentToParent(Margin(0, 0, 0, 0)); cell->AddChild(dataTable); { @@ -14945,6 +15059,7 @@ DetailListViewItemTemplate { textTable = new GuiTableComposition; + textTable->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); textTable->SetAlignmentToParent(Margin(0, 0, 0, 0)); textTable->SetRowsAndColumns(1, 1); textTable->SetRowOption(0, GuiCellOption::MinSizeOption()); @@ -14957,6 +15072,7 @@ DetailListViewItemTemplate auto table = new GuiTableComposition; cell->AddChild(table); + table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); table->SetRowsAndColumns(3, 2); table->SetRowOption(0, GuiCellOption::PercentageOption(0.5)); table->SetRowOption(1, GuiCellOption::MinSizeOption()); @@ -14979,12 +15095,16 @@ DetailListViewItemTemplate auto cell = new GuiCellComposition; table->AddChild(cell); cell->SetSite(0, 1, 3, 1); - cell->SetMargin(Margin(0, 0, 8, 0)); + + auto textBounds = new GuiBoundsComposition; + cell->AddChild(textBounds); + textBounds->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElement); + textBounds->SetAlignmentToParent(Margin(0, 0, 8, 0)); text = GuiSolidLabelElement::Create(); text->SetAlignments(Alignment::Left, Alignment::Center); text->SetEllipse(true); - cell->SetOwnedElement(Ptr(text)); + textBounds->SetOwnedElement(Ptr(text)); } } } @@ -15014,7 +15134,11 @@ DetailListViewItemTemplate auto cell = new GuiCellComposition; textTable->AddChild(cell); cell->SetSite(0, i + 1, 1, 1); - cell->SetMargin(Margin(8, 0, 8, 0)); + + auto textBounds = new GuiBoundsComposition; + cell->AddChild(textBounds); + textBounds->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElement); + textBounds->SetAlignmentToParent(Margin(8, 0, 8, 0)); subItems[i] = GuiSolidLabelElement::Create(); subItems[i]->SetAlignments(Alignment::Left, Alignment::Center); @@ -15022,7 +15146,7 @@ DetailListViewItemTemplate subItems[i]->SetEllipse(true); subItems[i]->SetText(view->GetSubItem(itemIndex, i)); subItems[i]->SetColor(listView->TypedControlTemplateObject(true)->GetSecondaryTextColor()); - cell->SetOwnedElement(Ptr(subItems[i])); + textBounds->SetOwnedElement(Ptr(subItems[i])); } OnColumnChanged(); } @@ -15048,7 +15172,6 @@ DetailListViewItemTemplate { textTable->SetColumnOption(i, GuiCellOption::AbsoluteOption(columnItemView->GetColumnSize(i))); } - textTable->UpdateCellBounds(); } } } @@ -15923,6 +16046,7 @@ NodeRootProviderBase void NodeRootProviderBase::OnBeforeItemModified(INodeProvider* parentNode, vint start, vint count, vint newCount) { + // TODO: (enumerable) foreach for(vint i=0;iOnBeforeItemModified(parentNode, start, count, newCount); @@ -15931,6 +16055,7 @@ NodeRootProviderBase void NodeRootProviderBase::OnAfterItemModified(INodeProvider* parentNode, vint start, vint count, vint newCount) { + // TODO: (enumerable) foreach for(vint i=0;iOnAfterItemModified(parentNode, start, count, newCount); @@ -15939,6 +16064,7 @@ NodeRootProviderBase void NodeRootProviderBase::OnItemExpanded(INodeProvider* node) { + // TODO: (enumerable) foreach for(vint i=0;iOnItemExpanded(node); @@ -15947,6 +16073,7 @@ NodeRootProviderBase void NodeRootProviderBase::OnItemCollapsed(INodeProvider* node) { + // TODO: (enumerable) foreach for(vint i=0;iOnItemCollapsed(node); @@ -16466,6 +16593,7 @@ DefaultTreeItemTemplate table = new GuiTableComposition; AddChild(table); + table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); table->SetRowsAndColumns(3, 4); table->SetRowOption(0, GuiCellOption::PercentageOption(0.5)); table->SetRowOption(1, GuiCellOption::MinSizeOption()); @@ -16824,6 +16952,7 @@ IGuiAnimationCoroutine { waitingAnimation->Pause(); } + // TODO: (enumerable) foreach on group for (vint i = 0; i < groupAnimations.Count(); i++) { for (auto animation : groupAnimations.GetByIndex(i)) @@ -16839,6 +16968,7 @@ IGuiAnimationCoroutine { waitingAnimation->Resume(); } + // TODO: (enumerable) foreach on group for (vint i = 0; i < groupAnimations.Count(); i++) { for (auto animation : groupAnimations.GetByIndex(i)) @@ -16861,6 +16991,7 @@ IGuiAnimationCoroutine } } + // TODO: (enumerable) foreach:reversed on group for (vint i = groupAnimations.Count() - 1; i >= 0; i--) { auto& animations = groupAnimations.GetByIndex(i); @@ -17099,6 +17230,7 @@ GuiCommonDatePickerLook void GuiCommonDatePickerLook::SelectDay(vint day) { + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < dateDays.Count(); i++) { const DateTime& dt = dateDays[i]; @@ -17385,8 +17517,6 @@ GuiCommonScrollViewLook { tableComposition->SetColumnOption(1, GuiCellOption::AbsoluteOption(0)); } - - tableComposition->UpdateCellBounds(); } void GuiCommonScrollViewLook::hScroll_OnVisibleChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) @@ -17415,6 +17545,7 @@ GuiCommonScrollViewLook tableComposition = new GuiTableComposition; AddChild(tableComposition); + tableComposition->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); tableComposition->SetAlignmentToParent(Margin(0, 0, 0, 0)); tableComposition->SetRowsAndColumns(2, 2); tableComposition->SetRowOption(0, GuiCellOption::PercentageOption(1.0)); @@ -17573,11 +17704,11 @@ GuiCommonScrollBehavior { if (scrollTemplate->GetVisuallyEnabled()) { - if (arguments.x < partialView->GetBounds().x1) + if (arguments.x < partialView->GetCachedBounds().x1) { scrollTemplate->GetCommands()->BigDecrease(); } - else if (arguments.x >= partialView->GetBounds().x2) + else if (arguments.x >= partialView->GetCachedBounds().x2) { scrollTemplate->GetCommands()->BigIncrease(); } @@ -17593,11 +17724,11 @@ GuiCommonScrollBehavior { if (scrollTemplate->GetVisuallyEnabled()) { - if (arguments.y < partialView->GetBounds().y1) + if (arguments.y < partialView->GetCachedBounds().y1) { scrollTemplate->GetCommands()->BigDecrease(); } - else if (arguments.y >= partialView->GetBounds().y2) + else if (arguments.y >= partialView->GetCachedBounds().y2) { scrollTemplate->GetCommands()->BigIncrease(); } @@ -17613,9 +17744,9 @@ GuiCommonScrollBehavior { if (dragging) { - auto bounds = partialView->GetParent()->GetBounds(); + auto bounds = partialView->GetParent()->GetCachedBounds(); vint totalPixels = bounds.x2 - bounds.x1; - vint currentOffset = partialView->GetBounds().x1; + vint currentOffset = partialView->GetCachedBounds().x1; vint newOffset = currentOffset + (arguments.x - location.x); SetScroll(totalPixels, newOffset); } @@ -17630,9 +17761,9 @@ GuiCommonScrollBehavior { if (dragging) { - auto bounds = partialView->GetParent()->GetBounds(); + auto bounds = partialView->GetParent()->GetCachedBounds(); vint totalPixels = bounds.y2 - bounds.y1; - vint currentOffset = partialView->GetBounds().y1; + vint currentOffset = partialView->GetCachedBounds().y1; vint newOffset = currentOffset + (arguments.y - location.y); SetScroll(totalPixels, newOffset); } @@ -17643,14 +17774,14 @@ GuiCommonScrollBehavior vint GuiCommonScrollBehavior::GetHorizontalTrackerHandlerPosition(compositions::GuiBoundsComposition* handle, vint totalSize, vint pageSize, vint position) { - vint width = handle->GetParent()->GetBounds().Width() - handle->GetBounds().Width(); + vint width = handle->GetParent()->GetCachedBounds().Width() - handle->GetCachedBounds().Width(); vint max = totalSize - pageSize; return max == 0 ? 0 : width * position / max; } vint GuiCommonScrollBehavior::GetVerticalTrackerHandlerPosition(compositions::GuiBoundsComposition* handle, vint totalSize, vint pageSize, vint position) { - vint height = handle->GetParent()->GetBounds().Height() - handle->GetBounds().Height(); + vint height = handle->GetParent()->GetCachedBounds().Height() - handle->GetCachedBounds().Height(); vint max = totalSize - pageSize; return max == 0 ? 0 : height * position / max; } @@ -18549,8 +18680,8 @@ GuiDocumentCommonInterface if (index != -1) { auto item = documentItems.Values()[index]; - auto size = item->container->GetBounds().GetSize(); - item->container->SetBounds(Rect(location.LeftTop(), Size(0, 0))); + auto size = item->container->GetCachedBounds().GetSize(); + item->container->SetExpectedBounds(Rect(location.LeftTop(), Size(0, 0))); item->visible = true; return size; } @@ -19276,7 +19407,7 @@ GuiTextBoxCommonInterface::DefaultCallback vint GuiTextBoxCommonInterface::DefaultCallback::GetPageRows() { - return textComposition->GetBounds().Height()/textElement->GetLines().GetRowHeight(); + return textComposition->GetCachedBounds().Height()/textElement->GetLines().GetRowHeight(); } bool GuiTextBoxCommonInterface::DefaultCallback::BeforeModify(TextPos start, TextPos end, const WString& originalText, WString& inputText) @@ -19353,7 +19484,7 @@ GuiTextBoxCommonInterface } Rect bounds = textElement->GetLines().GetRectFromTextPos(pos); - Rect view = Rect(textElement->GetViewPosition(), textComposition->GetBounds().GetSize()); + Rect view = Rect(textElement->GetViewPosition(), textComposition->GetCachedBounds().GetSize()); Point viewPoint = view.LeftTop(); if (view.x2 > view.x1 && view.y2 > view.y1) @@ -19389,6 +19520,7 @@ GuiTextBoxCommonInterface arguments.newBegin = newBegin; arguments.newEnd = newEnd; arguments.editVersion = editVersion; + // TODO: (enumerable) foreach for (vint i = 0; i < textEditCallbacks.Count(); i++) { textEditCallbacks[i]->TextCaretChanged(arguments); @@ -19419,6 +19551,7 @@ GuiTextBoxCommonInterface arguments.inputText=inputText; arguments.editVersion=editVersion; arguments.keyInput=asKeyInput; + // TODO: (enumerable) foreach for(vint i=0;iTextEditPreview(arguments); @@ -19452,6 +19585,7 @@ GuiTextBoxCommonInterface arguments.inputText=inputText; arguments.editVersion=editVersion; arguments.keyInput=asKeyInput; + // TODO: (enumerable) foreach for(vint i=0;iTextEditNotify(arguments); @@ -19460,6 +19594,7 @@ GuiTextBoxCommonInterface Move(end, false); + // TODO: (enumerable) foreach for(vint i=0;iTextEditFinished(editVersion); @@ -19768,6 +19903,7 @@ GuiTextBoxCommonInterface focusableComposition->GetEventReceiver()->keyDown.AttachMethod(this, &GuiTextBoxCommonInterface::OnKeyDown); focusableComposition->GetEventReceiver()->charInput.AttachMethod(this, &GuiTextBoxCommonInterface::OnCharInput); + // TODO: (enumerable) foreach for(vint i=0;iAttach(textElement, elementModifyLock, textComposition ,editVersion); @@ -19877,6 +20013,7 @@ GuiTextBoxCommonInterface undoRedoProcessor=0; } + // TODO: (enumerable) foreach for(vint i=0;iDetach(); @@ -20451,7 +20588,7 @@ GuiSinglelineTextBox::DefaultTextElementOperatorCallback newX+=marginX; vint minX=-TextMargin; - vint maxX=textElement->GetLines().GetMaxWidth()+TextMargin-textComposition->GetBounds().Width(); + vint maxX=textElement->GetLines().GetMaxWidth()+TextMargin-textComposition->GetCachedBounds().Width(); if(newX>=maxX) { newX=maxX-1; @@ -24251,9 +24388,9 @@ GuiRibbonGroup } } - void GuiRibbonGroup::OnBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void GuiRibbonGroup::OnCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { - dropdownMenu->GetBoundsComposition()->SetPreferredMinSize(Size(0, containerComposition->GetBounds().Height())); + dropdownMenu->GetBoundsComposition()->SetPreferredMinSize(Size(0, containerComposition->GetCachedBounds().Height())); } void GuiRibbonGroup::OnTextChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) @@ -24344,7 +24481,7 @@ GuiRibbonGroup LargeImageChanged.SetAssociatedComposition(boundsComposition); TextChanged.AttachMethod(this, &GuiRibbonGroup::OnTextChanged); - boundsComposition->BoundsChanged.AttachMethod(this, &GuiRibbonGroup::OnBoundsChanged); + boundsComposition->CachedBoundsChanged.AttachMethod(this, &GuiRibbonGroup::OnCachedBoundsChanged); responsiveView->BeforeSwitchingView.AttachMethod(this, &GuiRibbonGroup::OnBeforeSwitchingView); dropdownButton->BeforeSubMenuOpening.AttachMethod(this, &GuiRibbonGroup::OnBeforeSubMenuOpening); } @@ -24710,6 +24847,7 @@ GuiRibbonToolstripsGroupCollection GuiRibbonToolstrips ***********************************************************************/ +// TODO: (enumerable) foreach #define ARRLEN(X) sizeof(X) / sizeof(*X) void GuiRibbonToolstrips::BeforeControlTemplateUninstalled_() @@ -24754,6 +24892,7 @@ GuiRibbonToolstrips if (groups.Count() <= count) { auto containers = viewIndex == 0 ? longContainers : shortContainers; + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < groups.Count(); i++) { containers[i]->GetToolstripItems().Add(groups[i]); @@ -24814,6 +24953,7 @@ GuiRibbonToolstrips vint minMiddle = firstGroupCount; vint maxMiddle = groups.Count() - lastGroupCount - 1; + // TODO: (enumerable) foreach:indexed for (vint j = 0; j < groups.Count(); j++) { shortContainers[ @@ -24837,6 +24977,7 @@ GuiRibbonToolstrips .Aggregate([](vint a, vint b) {return a + b; }); vint delta = abs(count2 - count1); + // TODO: (enumerable) foreach for (vint i = 0; i < groups.Count(); i++) { auto groupCount = groups[i]->GetToolstripItems().Count(); @@ -24856,6 +24997,7 @@ GuiRibbonToolstrips } } + // TODO: (enumerable) foreach:indexed for (vint j = 0; j < groups.Count(); j++) { longContainers[j < firstGroupCount ? 0 : 1]->GetToolstripItems().Add(groups[j]); @@ -24873,6 +25015,7 @@ GuiRibbonToolstrips responsiveView->BeforeSwitchingView.AttachMethod(this, &GuiRibbonToolstrips::OnBeforeSwitchingView); vint toolbarIndex = 0; + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < sizeof(views) / sizeof(*views); i++) { auto containers = i == 0 ? longContainers : shortContainers; @@ -25349,8 +25492,8 @@ GuiBindableRibbonGalleryList void GuiBindableRibbonGalleryList::UpdateLayoutSizeOffset() { - auto cSize = itemList->GetContainerComposition()->GetBounds(); - auto bSize = itemList->GetBoundsComposition()->GetBounds(); + auto cSize = itemList->GetContainerComposition()->GetCachedBounds(); + auto bSize = itemList->GetBoundsComposition()->GetCachedBounds(); layout->SetSizeOffset(Size(bSize.Width() - cSize.Width(), bSize.Height() - cSize.Height())); if (layout->GetItemWidth() > 0) @@ -25358,7 +25501,7 @@ GuiBindableRibbonGalleryList vint columns = layout->GetVisibleItemCount(); if (columns == 0) columns = 1; vint rows = (visibleItemCount + columns - 1) / columns; - vint height = (vint)(layout->GetBounds().Height()*(rows + 0.5)); + vint height = (vint)(layout->GetCachedBounds().Height()*(rows + 0.5)); groupContainer->GetBoundsComposition()->SetPreferredMinSize(Size(0, height)); } else @@ -25372,6 +25515,7 @@ GuiBindableRibbonGalleryList auto pos = IndexToGalleryPos(itemList->GetSelectedItemIndex()); if (pos.group != -1 && pos.item != -1) { + // TODO: (enumerable) foreach for (vint i = 0; i < groupedItemSource.Count(); i++) { auto group = groupedItemSource[i]; @@ -25406,13 +25550,14 @@ GuiBindableRibbonGalleryList StopPreview(arguments.itemIndex); } - void GuiBindableRibbonGalleryList::OnBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) + void GuiBindableRibbonGalleryList::OnCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments) { UpdateLayoutSizeOffset(); - auto bounds = boundsComposition->GetBounds(); + auto bounds = boundsComposition->GetCachedBounds(); subMenu->GetBoundsComposition()->SetPreferredMinSize(Size(bounds.Width() + 20, 1)); + // TODO: (enumerable) foreach for (vint i = 0; i < groupedItemSource.Count(); i++) { auto group = groupedItemSource[i]; @@ -25637,7 +25782,7 @@ GuiBindableRibbonGalleryList RequestedScrollUp.AttachMethod(this, &GuiBindableRibbonGalleryList::OnRequestedScrollUp); RequestedScrollDown.AttachMethod(this, &GuiBindableRibbonGalleryList::OnRequestedScrollDown); RequestedDropdown.AttachMethod(this, &GuiBindableRibbonGalleryList::OnRequestedDropdown); - boundsComposition->BoundsChanged.AttachMethod(this, &GuiBindableRibbonGalleryList::OnBoundsChanged); + boundsComposition->CachedBoundsChanged.AttachMethod(this, &GuiBindableRibbonGalleryList::OnCachedBoundsChanged); itemListArranger->UnblockScrollUpdate(); } @@ -27479,148 +27624,143 @@ namespace vl GuiFlowComposition ***********************************************************************/ - void GuiFlowComposition::UpdateFlowItemBounds(bool forceUpdate) + void GuiFlowComposition::Layout_UpdateFlowItemLayout(vint maxVirtualWidth) { - if (forceUpdate || needUpdate) + for (auto item : layout_flowItems) { - needUpdate = false; - InvokeOnCompositionStateChanged(); - - auto clientMargin = axis->RealMarginToVirtualMargin(extraMargin); - if (clientMargin.left < 0) clientMargin.left = 0; - if (clientMargin.top < 0) clientMargin.top = 0; - if (clientMargin.right < 0) clientMargin.right = 0; - if (clientMargin.bottom < 0) clientMargin.bottom = 0; - - auto realFullSize = previousBounds.GetSize(); - auto clientSize = axis->RealSizeToVirtualSize(realFullSize); - clientSize.x -= (clientMargin.left + clientMargin.right); - clientSize.y -= (clientMargin.top + clientMargin.bottom); - - flowItemBounds.Resize(flowItems.Count()); - for (vint i = 0; i < flowItems.Count(); i++) - { - flowItemBounds[i] = Rect(Point(0, 0), flowItems[i]->GetMinSize()); - } - - vint currentIndex = 0; - vint rowTop = 0; - - while (currentIndex < flowItems.Count()) - { - auto itemSize = axis->RealSizeToVirtualSize(flowItemBounds[currentIndex].GetSize()); - vint rowWidth = itemSize.x; - vint rowHeight = itemSize.y; - vint rowItemCount = 1; - - for (vint i = currentIndex + 1; i < flowItems.Count(); i++) - { - itemSize = axis->RealSizeToVirtualSize(flowItemBounds[i].GetSize()); - vint itemWidth = itemSize.x + columnPadding; - if (rowWidth + itemWidth > clientSize.x) - { - break; - } - rowWidth += itemWidth; - if (rowHeight < itemSize.y) - { - rowHeight = itemSize.y; - } - rowItemCount++; - } - - vint baseLine = 0; - Array itemBaseLines(rowItemCount); - for (vint i = 0; i < rowItemCount; i++) - { - vint index = currentIndex + i; - vint itemBaseLine = 0; - itemSize = axis->RealSizeToVirtualSize(flowItemBounds[index].GetSize()); - - auto option = flowItems[index]->GetFlowOption(); - switch (option.baseline) - { - case GuiFlowOption::FromTop: - itemBaseLine = option.distance; - break; - case GuiFlowOption::FromBottom: - itemBaseLine = itemSize.y - option.distance; - break; - case GuiFlowOption::Percentage: - itemBaseLine = (vint)(itemSize.y*option.percentage); - break; - } - - itemBaseLines[i] = itemBaseLine; - if (baseLine < itemBaseLine) - { - baseLine = itemBaseLine; - } - } - - vint rowUsedWidth = 0; - for (vint i = 0; i < rowItemCount; i++) - { - vint index = currentIndex + i; - itemSize = axis->RealSizeToVirtualSize(flowItemBounds[index].GetSize()); - - vint itemLeft = 0; - vint itemTop = rowTop + baseLine - itemBaseLines[i]; - - switch (alignment) - { - case FlowAlignment::Left: - itemLeft = rowUsedWidth + i * columnPadding; - break; - case FlowAlignment::Center: - itemLeft = rowUsedWidth + i * columnPadding + (clientSize.x - rowWidth) / 2; - break; - case FlowAlignment::Extend: - if (i == 0) - { - itemLeft = rowUsedWidth; - } - else - { - itemLeft = rowUsedWidth + (vint)((double)(clientSize.x - rowWidth) * i / (rowItemCount - 1)) + i * columnPadding; - } - break; - } - - flowItemBounds[index] = axis->VirtualRectToRealRect( - realFullSize, - Rect( - Point( - itemLeft + clientMargin.left, - itemTop + clientMargin.top - ), - itemSize - ) - ); - rowUsedWidth += itemSize.x; - } - - rowTop += rowHeight + rowPadding; - currentIndex += rowItemCount; - } - - minHeight = rowTop == 0 ? 0 : rowTop - rowPadding; + item->Layout_SetCachedMinSize(item->Layout_CalculateMinSizeHelper()); } + + if (layout_lastVirtualWidth != maxVirtualWidth) + { + layout_invalid = true; + layout_lastVirtualWidth = maxVirtualWidth; + } + + if (!layout_invalid) return; + layout_invalid = false; + + vint currentIndex = 0; + vint rowTop = 0; + + while (currentIndex < layout_flowItems.Count()) + { + auto currentItemVirtualMinSize = axis->RealSizeToVirtualSize(layout_flowItems[currentIndex]->GetCachedMinSize()); + vint rowWidth = currentItemVirtualMinSize.x; + vint rowHeight = currentItemVirtualMinSize.y; + vint rowItemCount = 1; + + for (vint i = currentIndex + 1; i < layout_flowItems.Count(); i++) + { + auto itemSize = axis->RealSizeToVirtualSize(layout_flowItems[i]->GetCachedMinSize()); + vint itemWidth = itemSize.x + columnPadding; + if (rowWidth + itemWidth > maxVirtualWidth) + { + break; + } + rowWidth += itemWidth; + if (rowHeight < itemSize.y) + { + rowHeight = itemSize.y; + } + rowItemCount++; + } + + vint baseLine = 0; + Array itemBaseLines(rowItemCount); + for (vint i = 0; i < rowItemCount; i++) + { + vint index = currentIndex + i; + vint itemBaseLine = 0; + auto itemSize = axis->RealSizeToVirtualSize(layout_flowItems[index]->GetCachedMinSize()); + + auto option = layout_flowItems[index]->GetFlowOption(); + switch (option.baseline) + { + case GuiFlowOption::FromTop: + itemBaseLine = option.distance; + break; + case GuiFlowOption::FromBottom: + itemBaseLine = itemSize.y - option.distance; + break; + case GuiFlowOption::Percentage: + itemBaseLine = (vint)(itemSize.y*option.percentage); + break; + } + + itemBaseLines[i] = itemBaseLine; + if (baseLine < itemBaseLine) + { + baseLine = itemBaseLine; + } + } + + vint rowUsedWidth = 0; + for (vint i = 0; i < rowItemCount; i++) + { + vint index = currentIndex + i; + auto itemSize = axis->RealSizeToVirtualSize(layout_flowItems[index]->GetCachedMinSize()); + + vint itemLeft = 0; + vint itemTop = rowTop + baseLine - itemBaseLines[i]; + + switch (alignment) + { + case FlowAlignment::Left: + itemLeft = rowUsedWidth + i * columnPadding; + break; + case FlowAlignment::Center: + itemLeft = rowUsedWidth + i * columnPadding + (maxVirtualWidth - rowWidth) / 2; + break; + case FlowAlignment::Right: + itemLeft = rowUsedWidth + i * columnPadding + (maxVirtualWidth - rowWidth); + break; + case FlowAlignment::Extend: + if (i == 0) + { + itemLeft = rowUsedWidth; + } + else + { + itemLeft = rowUsedWidth + (vint)((double)(maxVirtualWidth - rowWidth) * i / (rowItemCount - 1)) + i * columnPadding; + } + break; + } + + layout_flowItems[index]->layout_virtualBounds = Rect({ itemLeft,itemTop }, itemSize); + rowUsedWidth += itemSize.x; + } + + rowTop += rowHeight + rowPadding; + currentIndex += rowItemCount; + } + + layout_minVirtualHeight = rowTop == 0 ? 0 : rowTop - rowPadding; } - void GuiFlowComposition::OnBoundsChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments) + Size GuiFlowComposition::Layout_UpdateFlowItemLayoutByConstraint(Size constraintSize) { - UpdateFlowItemBounds(true); + Size extraSize( + extraMargin.left + extraMargin.right, + extraMargin.top + extraMargin.bottom + ); + constraintSize.x -= extraSize.x; + constraintSize.y -= extraSize.y; + if (constraintSize.x < 0) constraintSize.x = 0; + if (constraintSize.y < 0) constraintSize.y = 0; + + vint maxVirtualWidth = axis->RealSizeToVirtualSize(constraintSize).x; + Layout_UpdateFlowItemLayout(maxVirtualWidth); + return extraSize; } void GuiFlowComposition::OnChildInserted(GuiGraphicsComposition* child) { GuiBoundsComposition::OnChildInserted(child); auto item = dynamic_cast(child); - if (item && !flowItems.Contains(item)) + if (item && !layout_flowItems.Contains(item)) { - flowItems.Add(item); - needUpdate = true; + layout_flowItems.Add(item); } } @@ -27630,64 +27770,69 @@ GuiFlowComposition auto item = dynamic_cast(child); if (item) { - flowItems.Remove(item); - needUpdate = true; + layout_flowItems.Remove(item); } } - - Size GuiFlowComposition::GetMinPreferredClientSizeInternal(bool considerPreferredMinSize) + + void GuiFlowComposition::OnCompositionStateChanged() { - Size minSize = GuiBoundsComposition::GetMinPreferredClientSizeInternal(considerPreferredMinSize); - if (GetMinSizeLimitation() == GuiGraphicsComposition::LimitToElementAndChildren) + GuiBoundsComposition::OnCompositionStateChanged(); + layout_invalid = true; + } + + Size GuiFlowComposition::Layout_CalculateMinSize() + { + Size minSize = GuiBoundsComposition::Layout_CalculateMinSize(); + + if (GetMinSizeLimitation() == GuiGraphicsComposition::LimitToElementAndChildren && layout_flowItems.Count() > 0) { - auto clientSize = axis->VirtualSizeToRealSize(Size(0, minHeight)); - for (auto item : flowItems) - { - auto itemSize = InvokeGetPreferredBoundsInternal(item, considerPreferredMinSize).GetSize(); - if (clientSize.x < itemSize.x) clientSize.x = itemSize.x; - if (clientSize.y < itemSize.y) clientSize.y = itemSize.y; - } - if (minSize.x < clientSize.x) minSize.x = clientSize.x; - if (minSize.y < clientSize.y) minSize.y = clientSize.y; + Size cachedSize = cachedBounds.GetSize(); + Size constraintSize( + minSize.x > cachedSize.x ? minSize.x : cachedSize.x, + minSize.y > cachedSize.y ? minSize.y : cachedSize.y + ); + + Size extraSize = Layout_UpdateFlowItemLayoutByConstraint(constraintSize); + Size minFlowSize = axis->VirtualSizeToRealSize(Size(0, layout_minVirtualHeight)); + minFlowSize.x += extraSize.x; + minFlowSize.y += extraSize.y; + + if (minSize.x < minFlowSize.x) minSize.x = minFlowSize.x; + if (minSize.y < minFlowSize.y) minSize.y = minFlowSize.y; } - vint x = 0; - vint y = 0; - if (extraMargin.left > 0) x += extraMargin.left; - if (extraMargin.right > 0) x += extraMargin.right; - if (extraMargin.top > 0) y += extraMargin.top; - if (extraMargin.bottom > 0) y += extraMargin.bottom; - return minSize + Size(x, y); + return minSize; } - GuiFlowComposition::GuiFlowComposition() - :axis(new GuiDefaultAxis) - { - BoundsChanged.AttachMethod(this, &GuiFlowComposition::OnBoundsChanged); - } - - GuiFlowComposition::~GuiFlowComposition() + Rect GuiFlowComposition::Layout_CalculateBounds(Size parentSize) { + Rect bounds = GuiBoundsComposition::Layout_CalculateBounds(parentSize); + Size extraSize = Layout_UpdateFlowItemLayoutByConstraint(bounds.GetSize()); + Size contentSize( + bounds.Width() - extraSize.x, + bounds.Height() - extraSize.y + ); + for (auto item : layout_flowItems) + { + item->Layout_SetFlowItemBounds(contentSize, item->layout_virtualBounds); + } + return bounds; } const GuiFlowComposition::ItemCompositionList& GuiFlowComposition::GetFlowItems() { - return flowItems; + return layout_flowItems; } bool GuiFlowComposition::InsertFlowItem(vint index, GuiFlowItemComposition* item) { - index = flowItems.Insert(index, item); - if (!AddChild(item)) + index = layout_flowItems.Insert(index, item); + if (AddChild(item)) { - flowItems.RemoveAt(index); - return false; - } - else - { - needUpdate = true; return true; } + layout_flowItems.RemoveAt(index); + return false; } @@ -27701,7 +27846,6 @@ GuiFlowComposition if (extraMargin != value) { extraMargin = value; - needUpdate = true; InvokeOnCompositionStateChanged(); } } @@ -27716,7 +27860,6 @@ GuiFlowComposition if (rowPadding != value) { rowPadding = value; - needUpdate = true; InvokeOnCompositionStateChanged(); } } @@ -27731,7 +27874,6 @@ GuiFlowComposition if (columnPadding != value) { columnPadding = value; - needUpdate = true; InvokeOnCompositionStateChanged(); } } @@ -27746,7 +27888,6 @@ GuiFlowComposition if (value) { axis = value; - needUpdate = true; InvokeOnCompositionStateChanged(); } } @@ -27761,99 +27902,44 @@ GuiFlowComposition if (alignment != value) { alignment = value; - needUpdate = true; InvokeOnCompositionStateChanged(); } } - void GuiFlowComposition::ForceCalculateSizeImmediately() - { - GuiBoundsComposition::ForceCalculateSizeImmediately(); - UpdateFlowItemBounds(true); - } - - Rect GuiFlowComposition::GetBounds() - { - if (!needUpdate) - { - for (vint i = 0; i < flowItems.Count(); i++) - { - if (flowItemBounds[i].GetSize() != flowItems[i]->GetMinSize()) - { - needUpdate = true; - break; - } - } - } - - if (needUpdate) - { - UpdateFlowItemBounds(true); - } - - bounds = GuiBoundsComposition::GetBounds(); - return bounds; - } - /*********************************************************************** GuiFlowItemComposition ***********************************************************************/ - void GuiFlowItemComposition::OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent) + void GuiFlowItemComposition::Layout_SetFlowItemBounds(Size contentSize, Rect virtualBounds) { - GuiGraphicsSite::OnParentChanged(oldParent, newParent); - flowParent = newParent == 0 ? 0 : dynamic_cast(newParent); + Rect result = layout_flowParent->axis->VirtualRectToRealRect(contentSize, virtualBounds); + + result.x1 += layout_flowParent->extraMargin.left; + result.x2 += layout_flowParent->extraMargin.left; + result.y1 += layout_flowParent->extraMargin.top; + result.y2 += layout_flowParent->extraMargin.top; + + result.x1 -= extraMargin.left; + result.y1 -= extraMargin.top; + result.x2 += extraMargin.right; + result.y2 += extraMargin.bottom; + + Layout_SetCachedBounds(result); } - Size GuiFlowItemComposition::GetMinSize() + void GuiFlowItemComposition::OnParentLineChanged() { - return GetBoundsInternal(bounds, true).GetSize(); + layout_flowParent = dynamic_cast(GetParent()); + GuiGraphicsComposition::OnParentLineChanged(); } GuiFlowItemComposition::GuiFlowItemComposition() { SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); - } - - GuiFlowItemComposition::~GuiFlowItemComposition() - { - } - - bool GuiFlowItemComposition::IsSizeAffectParent() - { - return false; - } - - Rect GuiFlowItemComposition::GetBounds() - { - Rect result = bounds; - if(flowParent) + CachedMinSizeChanged.AttachLambda([this](GuiGraphicsComposition* sender, GuiEventArgs& arguments) { - flowParent->UpdateFlowItemBounds(false); - vint index = flowParent->flowItems.IndexOf(this); - if (index != -1) - { - result = flowParent->flowItemBounds[index]; - } - - result = Rect( - result.Left() - extraMargin.left, - result.Top() - extraMargin.top, - result.Right() + extraMargin.right, - result.Bottom() + extraMargin.bottom - ); - } - UpdatePreviousBounds(result); - return result; - } - - void GuiFlowItemComposition::SetBounds(Rect value) - { - if (bounds != value) - { - bounds = value; - InvokeOnCompositionStateChanged(); - } + if (layout_flowParent) layout_flowParent->layout_invalid = true; + }); } Margin GuiFlowItemComposition::GetExtraMargin() @@ -27880,11 +27966,8 @@ GuiFlowItemComposition if (option != value) { option = value; - if (flowParent) - { - flowParent->needUpdate = true; - InvokeOnCompositionStateChanged(); - } + if (layout_flowParent) layout_flowParent->layout_invalid = true; + InvokeOnCompositionStateChanged(); } } } @@ -27943,6 +28026,7 @@ GuiRepeatCompositionBase auto item = InsertRepeatComposition(index); templateItem->SetAlignmentToParent(Margin(0, 0, 0, 0)); + templateItem->SetContext(itemContext); item->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); item->AddChild(templateItem); @@ -27953,7 +28037,8 @@ GuiRepeatCompositionBase void GuiRepeatCompositionBase::ClearItems() { - for (vint i = GetRepeatCompositionCount() - 1; i >= 0; i--) + vint count = GetRepeatCompositionCount(); + for (vint i = count - 1; i >= 0; i--) { RemoveItem(i); } @@ -28030,23 +28115,46 @@ GuiRepeatCompositionBase } } + description::Value GuiRepeatCompositionBase::GetContext() + { + return itemContext; + } + + void GuiRepeatCompositionBase::SetContext(const description::Value& value) + { + if (itemContext != value) + { + itemContext = value; + vint count = GetRepeatCompositionCount(); + for (vint i = 0; i < count; i++) + { + auto rc = GetRepeatComposition(i); + auto it = dynamic_cast(rc->Children()[0]); + it->SetContext(itemContext); + } + + GuiEventArgs arguments(dynamic_cast(this)); + ContextChanged.Execute(arguments); + } + } + /*********************************************************************** GuiRepeatStackComposition ***********************************************************************/ vint GuiRepeatStackComposition::GetRepeatCompositionCount() { - return stackItems.Count(); + return GetStackItems().Count(); } GuiGraphicsComposition* GuiRepeatStackComposition::GetRepeatComposition(vint index) { - return stackItems[index]; + return GetStackItems()[index]; } GuiGraphicsComposition* GuiRepeatStackComposition::InsertRepeatComposition(vint index) { - CHECK_ERROR(0 <= index && index <= stackItems.Count(), L"GuiRepeatStackComposition::InsertRepeatComposition(vint)#Index out of range."); + CHECK_ERROR(0 <= index && index <= GetStackItems().Count(), L"GuiRepeatStackComposition::InsertRepeatComposition(vint)#Index out of range."); auto item = new GuiStackItemComposition; InsertStackItem(index, item); return item; @@ -28054,28 +28162,39 @@ GuiRepeatStackComposition GuiGraphicsComposition* GuiRepeatStackComposition::RemoveRepeatComposition(vint index) { - auto item = stackItems[index]; + auto item = GetStackItems()[index]; RemoveChild(item); return item; } + GuiRepeatStackComposition::GuiRepeatStackComposition() + { + ItemInserted.SetAssociatedComposition(this); + ItemRemoved.SetAssociatedComposition(this); + ContextChanged.SetAssociatedComposition(this); + } + + GuiRepeatStackComposition::~GuiRepeatStackComposition() + { + } + /*********************************************************************** GuiRepeatFlowComposition ***********************************************************************/ vint GuiRepeatFlowComposition::GetRepeatCompositionCount() { - return flowItems.Count(); + return GetFlowItems().Count(); } GuiGraphicsComposition* GuiRepeatFlowComposition::GetRepeatComposition(vint index) { - return flowItems[index]; + return GetFlowItems()[index]; } GuiGraphicsComposition* GuiRepeatFlowComposition::InsertRepeatComposition(vint index) { - CHECK_ERROR(0 <= index && index <= flowItems.Count(), L"GuiRepeatStackComposition::InsertRepeatComposition(vint)#Index out of range."); + CHECK_ERROR(0 <= index && index <= GetFlowItems().Count(), L"GuiRepeatStackComposition::InsertRepeatComposition(vint)#Index out of range."); auto item = new GuiFlowItemComposition; InsertFlowItem(index, item); return item; @@ -28083,10 +28202,21 @@ GuiRepeatFlowComposition GuiGraphicsComposition* GuiRepeatFlowComposition::RemoveRepeatComposition(vint index) { - auto item = flowItems[index]; + auto item = GetFlowItems()[index]; RemoveChild(item); return item; } + + GuiRepeatFlowComposition::GuiRepeatFlowComposition() + { + ItemInserted.SetAssociatedComposition(this); + ItemRemoved.SetAssociatedComposition(this); + ContextChanged.SetAssociatedComposition(this); + } + + GuiRepeatFlowComposition::~GuiRepeatFlowComposition() + { + } } } } @@ -28169,10 +28299,6 @@ GuiResponsiveCompositionBase CurrentLevelChanged.SetAssociatedComposition(this); } - GuiResponsiveCompositionBase::~GuiResponsiveCompositionBase() - { - } - ResponsiveDirection GuiResponsiveCompositionBase::GetDirection() { return direction; @@ -28216,10 +28342,6 @@ GuiResponsiveSharedCollection { } - GuiResponsiveSharedCollection::~GuiResponsiveSharedCollection() - { - } - /*********************************************************************** GuiResponsiveViewCollection ***********************************************************************/ @@ -28257,10 +28379,6 @@ GuiResponsiveViewCollection { } - GuiResponsiveViewCollection::~GuiResponsiveViewCollection() - { - } - /*********************************************************************** GuiResponsiveSharedComposition ***********************************************************************/ @@ -28318,10 +28436,6 @@ GuiResponsiveSharedComposition SetMinSizeLimitation(LimitToElementAndChildren); } - GuiResponsiveSharedComposition::~GuiResponsiveSharedComposition() - { - } - controls::GuiControl* GuiResponsiveSharedComposition::GetShared() { return shared; @@ -28351,6 +28465,7 @@ GuiResponsiveViewComposition else { levelCount = 0; + // TODO: (enumerable) foreach for (vint i = 0; i < views.Count(); i++) { auto view = views[i]; @@ -28377,6 +28492,7 @@ GuiResponsiveViewComposition { vint old = currentLevel; currentLevel = 0; + // TODO: (enumerable) foreach:reversed for (vint i = views.Count() - 1; i >= 0; i--) { auto view = views[i]; @@ -28532,14 +28648,6 @@ GuiResponsiveFixedComposition InvokeOnCompositionStateChanged(); } - GuiResponsiveFixedComposition::GuiResponsiveFixedComposition() - { - } - - GuiResponsiveFixedComposition::~GuiResponsiveFixedComposition() - { - } - vint GuiResponsiveFixedComposition::GetLevelCount() { return 1; @@ -28660,7 +28768,7 @@ GuiResponsiveStackComposition { if (!ignored.Contains(child)) { - Size childSize = child->GetPreferredBounds().GetSize(); + Size childSize = child->GetCachedBounds().GetSize(); vint childSizeToCompare = direction == ResponsiveDirection::Horizontal ? childSize.x : direction == ResponsiveDirection::Vertical ? childSize.y : @@ -28693,14 +28801,6 @@ GuiResponsiveStackComposition return true; } - GuiResponsiveStackComposition::GuiResponsiveStackComposition() - { - } - - GuiResponsiveStackComposition::~GuiResponsiveStackComposition() - { - } - vint GuiResponsiveStackComposition::GetLevelCount() { return levelCount; @@ -28794,14 +28894,6 @@ GuiResponsiveGroupComposition GuiResponsiveCompositionBase::OnResponsiveChildLevelUpdated(); } - GuiResponsiveGroupComposition::GuiResponsiveGroupComposition() - { - } - - GuiResponsiveGroupComposition::~GuiResponsiveGroupComposition() - { - } - vint GuiResponsiveGroupComposition::GetLevelCount() { return levelCount; @@ -28858,99 +28950,112 @@ GuiResponsiveGroupComposition GuiResponsiveContainerComposition ***********************************************************************/ -#define RESPONSIVE_INVALID_SIZE Size(-1, -1) - - void GuiResponsiveContainerComposition::AdjustLevel() + std::strong_ordering GuiResponsiveContainerComposition::Layout_CompareSize(Size first, Size second) { - if (!responsiveTarget) return; - const Size containerSize = GetBounds().GetSize(); - const Size responsiveOriginalSize = responsiveTarget->GetPreferredBounds().GetSize(); - const bool testX = (vint)responsiveTarget->GetDirection() & (vint)ResponsiveDirection::Horizontal; - const bool testY = (vint)responsiveTarget->GetDirection() & (vint)ResponsiveDirection::Vertical; + auto ordX = testX ? first.x <=> second.x : std::strong_ordering::equivalent; + auto ordY = testY ? first.y <=> second.y : std::strong_ordering::equivalent; -#define RESPONSIVE_IF_CONTAINER(OP, SIZE) ((testX && (containerSize).x OP SIZE.x) || (testY && (containerSize).y OP SIZE.y)) - - if (upperLevelSize != RESPONSIVE_INVALID_SIZE && RESPONSIVE_IF_CONTAINER(>=, upperLevelSize)) + if (ordX == std::strong_ordering::less || ordY == std::strong_ordering::less) { - upperLevelSize = RESPONSIVE_INVALID_SIZE; + return std::strong_ordering::less; } - - if (upperLevelSize == RESPONSIVE_INVALID_SIZE && RESPONSIVE_IF_CONTAINER(>=, responsiveOriginalSize)) + if (ordX == std::strong_ordering::greater || ordY == std::strong_ordering::greater) { - while (true) - { - if (responsiveTarget->GetCurrentLevel() == responsiveTarget->GetLevelCount() - 1) - { - break; - } - else if (responsiveTarget->LevelUp()) - { - responsiveTarget->ForceCalculateSizeImmediately(); - auto currentSize = responsiveTarget->GetPreferredBounds().GetSize(); - if (RESPONSIVE_IF_CONTAINER(<, currentSize)) - { - upperLevelSize = currentSize; - responsiveTarget->LevelDown(); - break; - } - } - else - { - break; - } - } + return std::strong_ordering::greater; } - else - { - while (true) - { - responsiveTarget->ForceCalculateSizeImmediately(); - auto currentSize = responsiveTarget->GetPreferredBounds().GetSize(); - if (RESPONSIVE_IF_CONTAINER(>=, currentSize)) - { - break; - } - - if (responsiveTarget->GetCurrentLevel() == 0) - { - break; - } - else if(responsiveTarget->LevelDown()) - { - upperLevelSize = currentSize; - } - else - { - break; - } - } - } - -#undef RESPONSIVE_IF_CONTAINER + return std::strong_ordering::equivalent; } - void GuiResponsiveContainerComposition::OnBoundsChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments) + void GuiResponsiveContainerComposition::Layout_AdjustLevelUp(Size containerSize) { - if (auto control = GetRelatedControl()) + while (true) { - control->TryDelayExecuteIfNotDeleted([=]() + if (responsiveTarget->GetCurrentLevel() == responsiveTarget->GetLevelCount() - 1) break; + if (Layout_CompareSize(minSizeLowerBound, minSizeUpperBound) == std::strong_ordering::less) { - AdjustLevel(); - }); + if (Layout_CompareSize(containerSize, minSizeUpperBound) == std::strong_ordering::less) break; + } + else + { + if (Layout_CompareSize(containerSize, minSizeUpperBound) != std::strong_ordering::greater) break; + } + + if (!responsiveTarget->LevelUp()) break; + responsiveTarget->Layout_UpdateMinSize(); + minSizeUpperBound = responsiveTarget->GetCachedMinSize(); + if (Layout_CompareSize(containerSize, minSizeUpperBound) == std::strong_ordering::less) + { + responsiveTarget->LevelDown(); + responsiveTarget->Layout_UpdateMinSize(); + break; + } + minSizeLowerBound = minSizeUpperBound; } - else + } + + void GuiResponsiveContainerComposition::Layout_AdjustLevelDown(Size containerSize) + { + while (true) { - AdjustLevel(); + if (responsiveTarget->GetCurrentLevel() == 0) break; + if (Layout_CompareSize(containerSize, minSizeLowerBound) != std::strong_ordering::less) break; + + if (!responsiveTarget->LevelDown()) break; + responsiveTarget->Layout_UpdateMinSize(); + minSizeUpperBound = minSizeLowerBound; + minSizeLowerBound = responsiveTarget->GetCachedMinSize(); } } + Rect GuiResponsiveContainerComposition::Layout_CalculateBounds(Size parentSize) + { + auto bounds = GuiBoundsComposition::Layout_CalculateBounds(parentSize); + + if (responsiveTarget) + { + bool needAdjust = false; + auto containerSize = bounds.GetSize(); + auto ordering = std::strong_ordering::equivalent; + + if (containerSize != cachedBounds.GetSize()) + { + ordering = Layout_CompareSize(containerSize, cachedBounds.GetSize()); + needAdjust = true; + } + + if (responsiveTarget) + { + if (responsiveTarget->GetCachedMinSize() != minSizeLowerBound) + { + minSizeLowerBound = responsiveTarget->GetCachedMinSize(); + if (minSizeUpperBound.x < minSizeLowerBound.x) minSizeUpperBound.x = minSizeLowerBound.x; + if (minSizeUpperBound.y < minSizeLowerBound.y) minSizeUpperBound.y = minSizeLowerBound.y; + } + + if (Layout_CompareSize(containerSize, minSizeLowerBound) == std::strong_ordering::less) + { + ordering = std::strong_ordering::less; + needAdjust = true; + } + } + + if (needAdjust) + { + if (ordering == std::strong_ordering::less) + { + Layout_AdjustLevelDown(containerSize); + } + else if (ordering == std::strong_ordering::greater) + { + Layout_AdjustLevelUp(containerSize); + } + } + } + + return bounds; + } + GuiResponsiveContainerComposition::GuiResponsiveContainerComposition() - :upperLevelSize(RESPONSIVE_INVALID_SIZE) - { - BoundsChanged.AttachMethod(this, &GuiResponsiveContainerComposition::OnBoundsChanged); - } - - GuiResponsiveContainerComposition::~GuiResponsiveContainerComposition() { } @@ -28969,7 +29074,6 @@ GuiResponsiveContainerComposition } responsiveTarget = value; - upperLevelSize = RESPONSIVE_INVALID_SIZE; if (responsiveTarget) { @@ -28977,13 +29081,22 @@ GuiResponsiveContainerComposition while (responsiveTarget->LevelUp()); AddChild(responsiveTarget); - GuiEventArgs arguments(this); - OnBoundsChanged(this, arguments); + responsiveTarget->Layout_UpdateMinSize(); + minSizeUpperBound = responsiveTarget->GetCachedMinSize(); + minSizeLowerBound = responsiveTarget->GetCachedMinSize(); + testX = (vint)responsiveTarget->GetDirection() & (vint)ResponsiveDirection::Horizontal; + testY = (vint)responsiveTarget->GetDirection() & (vint)ResponsiveDirection::Vertical; + Layout_AdjustLevelDown(cachedBounds.GetSize()); + } + else + { + minSizeUpperBound = {}; + minSizeLowerBound = {}; + testX = false; + testY = false; } } } - -#undef RESPONSIVE_INVALID_SIZE } } } @@ -29008,15 +29121,6 @@ namespace vl GuiSharedSizeItemComposition ***********************************************************************/ - void GuiSharedSizeItemComposition::Update() - { - if (parentRoot) - { - parentRoot->ForceCalculateSizeImmediately(); - } - InvokeOnCompositionStateChanged(); - } - void GuiSharedSizeItemComposition::OnParentLineChanged() { GuiBoundsComposition::OnParentLineChanged(); @@ -29065,15 +29169,28 @@ GuiSharedSizeItemComposition } } + Size GuiSharedSizeItemComposition::Layout_CalculateMinSize() + { + if (parentRoot) + { + return cachedMinSize; + } + else + { + return GuiBoundsComposition::Layout_CalculateMinSize(); + } + } + + Size GuiSharedSizeItemComposition::Layout_CalculateOriginalMinSize() + { + return GuiBoundsComposition::Layout_CalculateMinSize(); + } + GuiSharedSizeItemComposition::GuiSharedSizeItemComposition() { SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); } - GuiSharedSizeItemComposition::~GuiSharedSizeItemComposition() - { - } - const WString& GuiSharedSizeItemComposition::GetGroup() { return group; @@ -29084,7 +29201,7 @@ GuiSharedSizeItemComposition if (group != value) { group = value; - Update(); + InvokeOnCompositionStateChanged(); } } @@ -29098,7 +29215,7 @@ GuiSharedSizeItemComposition if (sharedWidth != value) { sharedWidth = value; - Update(); + InvokeOnCompositionStateChanged(); } } @@ -29112,7 +29229,7 @@ GuiSharedSizeItemComposition if (sharedHeight != value) { sharedHeight = value; - Update(); + InvokeOnCompositionStateChanged(); } } @@ -29133,24 +29250,27 @@ GuiSharedSizeRootComposition } } + void GuiSharedSizeRootComposition::CalculateOriginalMinSizes() + { + for (auto item : childItems) + { + item->originalMinSize = item->Layout_CalculateOriginalMinSize(); + } + } + void GuiSharedSizeRootComposition::CollectSizes(collections::Dictionary& widths, collections::Dictionary& heights) { for (auto item : childItems) { auto group = item->GetGroup(); - auto minSize = item->GetPreferredMinSize(); - auto size = InvokeGetPreferredBoundsInternal(item, false).GetSize(); - if (item->GetSharedWidth()) { - AddSizeComponent(widths, group, size.x); + AddSizeComponent(widths, group, item->originalMinSize.x); } if (item->GetSharedHeight()) { - AddSizeComponent(heights, group, size.y); + AddSizeComponent(heights, group, item->originalMinSize.y); } - - item->SetPreferredMinSize(minSize); } } @@ -29159,7 +29279,7 @@ GuiSharedSizeRootComposition for (auto item : childItems) { auto group = item->GetGroup(); - auto size = item->GetPreferredMinSize(); + auto size = item->originalMinSize; if (item->GetSharedWidth()) { @@ -29170,42 +29290,18 @@ GuiSharedSizeRootComposition size.y = heights[group]; } - item->SetPreferredMinSize(size); + item->Layout_SetCachedMinSize(size); } } - GuiSharedSizeRootComposition::GuiSharedSizeRootComposition() - { - } - - GuiSharedSizeRootComposition::~GuiSharedSizeRootComposition() - { - } - - void GuiSharedSizeRootComposition::ForceCalculateSizeImmediately() + Size GuiSharedSizeRootComposition::Layout_CalculateMinSize() { itemWidths.Clear(); itemHeights.Clear(); - + CalculateOriginalMinSizes(); CollectSizes(itemWidths, itemHeights); AlignSizes(itemWidths, itemHeights); - GuiBoundsComposition::ForceCalculateSizeImmediately(); - } - - Rect GuiSharedSizeRootComposition::GetBounds() - { - Dictionary widths, heights; - CollectSizes(widths, heights); - bool minSizeModified = CompareEnumerable(itemWidths, widths) != 0 || CompareEnumerable(itemHeights, heights) != 0; - - if (minSizeModified) - { - CopyFrom(itemWidths, widths); - CopyFrom(itemHeights, heights); - AlignSizes(itemWidths, itemHeights); - GuiBoundsComposition::ForceCalculateSizeImmediately(); - } - return GuiBoundsComposition::GetBounds(); + return GuiBoundsComposition::Layout_CalculateMinSize(); } } } @@ -29226,15 +29322,42 @@ namespace vl GuiSideAlignedComposition ***********************************************************************/ - GuiSideAlignedComposition::GuiSideAlignedComposition() - :direction(Top) - ,maxLength(10) - ,maxRatio(1.0) - { - } - - GuiSideAlignedComposition::~GuiSideAlignedComposition() + Rect GuiSideAlignedComposition::Layout_CalculateBounds(Size parentSize) { + Rect result; + if (auto parent = GetParent()) + { + Rect bounds({}, parentSize); + vint w = (vint)(bounds.Width() * maxRatio); + vint h = (vint)(bounds.Height() * maxRatio); + if (w > maxLength) w = maxLength; + if (h > maxLength) h = maxLength; + switch (direction) + { + case Left: + { + bounds.x2 = bounds.x1 + w; + } + break; + case Top: + { + bounds.y2 = bounds.y1 + h; + } + break; + case Right: + { + bounds.x1 = bounds.x2 - w; + } + break; + case Bottom: + { + bounds.y1 = bounds.y2 - h; + } + break; + } + result = bounds; + } + return result; } GuiSideAlignedComposition::Direction GuiSideAlignedComposition::GetDirection() @@ -29281,65 +29404,34 @@ GuiSideAlignedComposition } } - bool GuiSideAlignedComposition::IsSizeAffectParent() - { - return false; - } - - Rect GuiSideAlignedComposition::GetBounds() - { - Rect result; - GuiGraphicsComposition* parent = GetParent(); - if (parent) - { - Rect bounds = parent->GetBounds(); - vint w = (vint)(bounds.Width()*maxRatio); - vint h = (vint)(bounds.Height()*maxRatio); - if (w > maxLength) w = maxLength; - if (h > maxLength) h = maxLength; - switch (direction) - { - case Left: - { - bounds.x2 = bounds.x1 + w; - } - break; - case Top: - { - bounds.y2 = bounds.y1 + h; - } - break; - case Right: - { - bounds.x1 = bounds.x2 - w; - } - break; - case Bottom: - { - bounds.y1 = bounds.y2 - h; - } - break; - } - result = bounds; - } - UpdatePreviousBounds(result); - return result; - } - /*********************************************************************** GuiPartialViewComposition ***********************************************************************/ - GuiPartialViewComposition::GuiPartialViewComposition() - :wRatio(0.0) - ,wPageSize(1.0) - ,hRatio(0.0) - ,hPageSize(1.0) + Rect GuiPartialViewComposition::Layout_CalculateBounds(Size parentSize) { - } + Rect result; + if (auto parent = GetParent()) + { + Rect bounds({}, parentSize); + vint w = bounds.Width(); + vint h = bounds.Height(); + vint pw = (vint)(wPageSize * w); + vint ph = (vint)(hPageSize * h); - GuiPartialViewComposition::~GuiPartialViewComposition() - { + vint ow = preferredMinSize.x - pw; + if (ow < 0) ow = 0; + vint oh = preferredMinSize.y - ph; + if (oh < 0) oh = 0; + + w -= ow; + h -= oh; + pw += ow; + ph += oh; + + result = Rect(Point((vint)(wRatio * w), (vint)(hRatio * h)), Size(pw, ph)); + } + return result; } double GuiPartialViewComposition::GetWidthRatio() @@ -29397,39 +29489,6 @@ GuiPartialViewComposition InvokeOnCompositionStateChanged(); } } - - bool GuiPartialViewComposition::IsSizeAffectParent() - { - return false; - } - - Rect GuiPartialViewComposition::GetBounds() - { - Rect result; - GuiGraphicsComposition* parent = GetParent(); - if (parent) - { - Rect bounds = parent->GetBounds(); - vint w = bounds.Width(); - vint h = bounds.Height(); - vint pw = (vint)(wPageSize*w); - vint ph = (vint)(hPageSize*h); - - vint ow = preferredMinSize.x - pw; - if (ow < 0) ow = 0; - vint oh = preferredMinSize.y - ph; - if (oh < 0) oh = 0; - - w -= ow; - h -= oh; - pw += ow; - ph += oh; - - result = Rect(Point((vint)(wRatio*w), (vint)(hRatio*h)), Size(pw, ph)); - } - UpdatePreviousBounds(result); - return result; - } } } } @@ -29450,93 +29509,108 @@ namespace vl GuiStackComposition ***********************************************************************/ - void GuiStackComposition::UpdateStackItemBounds() + void GuiStackComposition::Layout_UpdateStackItemMinSizes() { - if (stackItemBounds.Count() != stackItems.Count()) + for (auto item : layout_stackItems) { - stackItemBounds.Resize(stackItems.Count()); + item->Layout_SetCachedMinSize(item->Layout_CalculateMinSizeHelper()); } - stackItemTotalSize = Size(0, 0); - Point offset; - for (vint i = 0; i < stackItems.Count(); i++) - { - vint offsetX = 0; - vint offsetY = 0; - Size itemSize = stackItems[i]->GetMinSize(); - stackItemBounds[i] = Rect(offset, itemSize); + if (!layout_invalid) return; + layout_invalid = false; -#define ACCUMULATE(U, V) \ - { \ - if (stackItemTotalSize.V < itemSize.V) \ - { \ - stackItemTotalSize.V = itemSize.V; \ - } \ - if (i > 0) \ - { \ - stackItemTotalSize.U += padding; \ - } \ - stackItemTotalSize.U += itemSize.U; \ - } \ + Point virtualOffset; + layout_stackItemTotalSize = Size(0, 0); + for (auto [item, index] : indexed(layout_stackItems)) + { + Size itemSize = item->GetCachedMinSize(); switch (direction) { case GuiStackComposition::Horizontal: case GuiStackComposition::ReversedHorizontal: - ACCUMULATE(x, y) + { + if (layout_stackItemTotalSize.y < itemSize.y) + { + layout_stackItemTotalSize.y = itemSize.y; + } + if (index > 0) + { + layout_stackItemTotalSize.x += padding; + } + layout_stackItemTotalSize.x += itemSize.x; + } break; case GuiStackComposition::Vertical: case GuiStackComposition::ReversedVertical: - ACCUMULATE(y, x) + { + if (layout_stackItemTotalSize.x < itemSize.x) + { + layout_stackItemTotalSize.x = itemSize.x; + } + if (index > 0) + { + layout_stackItemTotalSize.y += padding; + } + layout_stackItemTotalSize.y += itemSize.y; + } break; } -#undef ACCUMULATE - offset.x += itemSize.x + padding; - offset.y += itemSize.y + padding; + item->layout_virtualOffset = virtualOffset; + virtualOffset.x += itemSize.x + padding; + virtualOffset.y += itemSize.y + padding; } - EnsureStackItemVisible(); } - void GuiStackComposition::EnsureStackItemVisible() + void GuiStackComposition::Layout_UpdateStackItemBounds(Rect contentBounds) { -#define ADJUSTMENT(U, V) \ - if (itemBounds.U() <= 0) \ - { \ - adjustment -= itemBounds.U(); \ - InvokeOnCompositionStateChanged(); \ - } \ - else \ - { \ - vint overflow = itemBounds.V() - previousBounds.V(); \ - if (overflow > 0) \ - { \ - adjustment -= overflow; \ - InvokeOnCompositionStateChanged(); \ - } \ - } \ - - if (ensuringVisibleStackItem) + if (layout_ensuringVisibleStackItem) { - Rect itemBounds = ensuringVisibleStackItem->GetBounds(); + Rect itemBounds( + layout_ensuringVisibleStackItem->layout_virtualOffset, + layout_ensuringVisibleStackItem->GetCachedMinSize() + ); + switch (direction) { case Horizontal: case ReversedHorizontal: - ADJUSTMENT(Left, Right) + if (itemBounds.x1 <= 0) + { + layout_adjustment = -itemBounds.x1; + } + else + { + vint overflow = itemBounds.x2 - contentBounds.x2; + if (overflow > 0) + { + layout_adjustment = -overflow; + } + } break; case Vertical: case ReversedVertical: - ADJUSTMENT(Top, Bottom) + if (itemBounds.y1 <= 0) + { + layout_adjustment = -itemBounds.y1; + } + else + { + vint overflow = itemBounds.y2 - contentBounds.y2; + if (overflow > 0) + { + layout_adjustment = -overflow; + } + } break; } } -#undef ADJUSTMENT - } - void GuiStackComposition::OnBoundsChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments) - { - EnsureStackItemVisible(); + for (auto item : layout_stackItems) + { + item->Layout_SetStackItemBounds(contentBounds, item->layout_virtualOffset); + } } void GuiStackComposition::OnChildInserted(GuiGraphicsComposition* child) @@ -29545,11 +29619,10 @@ GuiStackComposition GuiStackItemComposition* item = dynamic_cast(child); if (item) { - if (!stackItems.Contains(item)) + if (!layout_stackItems.Contains(item)) { - stackItems.Add(item); + layout_stackItems.Add(item); } - UpdateStackItemBounds(); } } @@ -29559,71 +29632,77 @@ GuiStackComposition GuiStackItemComposition* item = dynamic_cast(child); if (item) { - stackItems.Remove(item); - if (item == ensuringVisibleStackItem) + layout_stackItems.Remove(item); + if (item == layout_ensuringVisibleStackItem) { - ensuringVisibleStackItem = 0; + layout_ensuringVisibleStackItem = nullptr; } - UpdateStackItemBounds(); } } - - Size GuiStackComposition::GetMinPreferredClientSizeInternal(bool considerPreferredMinSize) + + void GuiStackComposition::OnCompositionStateChanged() { - Size minSize = GuiBoundsComposition::GetMinPreferredClientSizeInternal(considerPreferredMinSize); + GuiBoundsComposition::OnCompositionStateChanged(); + layout_invalid = true; + } + + Size GuiStackComposition::Layout_CalculateMinSize() + { + Layout_UpdateStackItemMinSizes(); + + Size minStackSize; if (GetMinSizeLimitation() == GuiGraphicsComposition::LimitToElementAndChildren) { - if (!ensuringVisibleStackItem || direction == Vertical || direction == ReversedVertical) + if (!layout_ensuringVisibleStackItem || direction == Vertical || direction == ReversedVertical) { - if (minSize.x < stackItemTotalSize.x) - { - minSize.x = stackItemTotalSize.x; - } + minStackSize.x = layout_stackItemTotalSize.x; } - if (!ensuringVisibleStackItem || direction == Horizontal || direction == ReversedHorizontal) + if (!layout_ensuringVisibleStackItem || direction == Horizontal || direction == ReversedHorizontal) { - if (minSize.y < stackItemTotalSize.y) - { - minSize.y = stackItemTotalSize.y; - } + minStackSize.y = layout_stackItemTotalSize.y; } } - vint x = 0; - vint y = 0; - if (extraMargin.left > 0) x += extraMargin.left; - if (extraMargin.right > 0) x += extraMargin.right; - if (extraMargin.top > 0) y += extraMargin.top; - if (extraMargin.bottom > 0) y += extraMargin.bottom; - return minSize + Size(x, y); + minStackSize.x += extraMargin.left; + minStackSize.x += extraMargin.right; + minStackSize.y += extraMargin.top; + minStackSize.y += extraMargin.bottom; + + Size minClientSize = GuiBoundsComposition::Layout_CalculateMinSize(); + return Size( + minStackSize.x > minClientSize.x ? minStackSize.x : minClientSize.x, + minStackSize.y > minClientSize.y ? minStackSize.y : minClientSize.y + ); + return minStackSize; } - GuiStackComposition::GuiStackComposition() - { - BoundsChanged.AttachMethod(this, &GuiStackComposition::OnBoundsChanged); - } - - GuiStackComposition::~GuiStackComposition() + Rect GuiStackComposition::Layout_CalculateBounds(Size parentSize) { + Rect bounds = GuiBoundsComposition::Layout_CalculateBounds(parentSize); + Rect contentBounds( + extraMargin.left, + extraMargin.top, + bounds.Width() - extraMargin.right, + bounds.Height() - extraMargin.bottom + ); + Layout_UpdateStackItemBounds(contentBounds); + return bounds; } const GuiStackComposition::ItemCompositionList& GuiStackComposition::GetStackItems() { - return stackItems; + return layout_stackItems; } bool GuiStackComposition::InsertStackItem(vint index, GuiStackItemComposition* item) { - index = stackItems.Insert(index, item); - if (!AddChild(item)) - { - stackItems.RemoveAt(index); - return false; - } - else + index = layout_stackItems.Insert(index, item); + if (AddChild(item)) { return true; } + layout_stackItems.RemoveAt(index); + return false; } GuiStackComposition::Direction GuiStackComposition::GetDirection() @@ -29633,8 +29712,11 @@ GuiStackComposition void GuiStackComposition::SetDirection(Direction value) { - direction = value; - EnsureStackItemVisible(); + if (direction != value) + { + direction = value; + InvokeOnCompositionStateChanged(); + } } vint GuiStackComposition::GetPadding() @@ -29644,31 +29726,11 @@ GuiStackComposition void GuiStackComposition::SetPadding(vint value) { - padding = value; - EnsureStackItemVisible(); - } - - void GuiStackComposition::ForceCalculateSizeImmediately() - { - GuiBoundsComposition::ForceCalculateSizeImmediately(); - UpdateStackItemBounds(); - } - - Rect GuiStackComposition::GetBounds() - { - for (vint i = 0; i < stackItems.Count(); i++) + if (padding != value) { - if (stackItemBounds[i].GetSize() != stackItems[i]->GetMinSize()) - { - UpdateStackItemBounds(); - break; - } + padding = value; + InvokeOnCompositionStateChanged(); } - - Rect bounds = GuiBoundsComposition::GetBounds(); - previousBounds = bounds; - UpdatePreviousBounds(previousBounds); - return bounds; } Margin GuiStackComposition::GetExtraMargin() @@ -29678,32 +29740,34 @@ GuiStackComposition void GuiStackComposition::SetExtraMargin(Margin value) { - extraMargin=value; - EnsureStackItemVisible(); + if (value.left < 0) value.left = 0; + if (value.top < 0) value.top = 0; + if (value.right < 0) value.right = 0; + if (value.bottom < 0) value.bottom = 0; + + if (extraMargin != value) + { + extraMargin = value; + InvokeOnCompositionStateChanged(); + } } bool GuiStackComposition::IsStackItemClipped() { - Rect clientArea = GetClientArea(); + Rect clientArea = GetCachedClientArea(); switch(direction) { case Horizontal: case ReversedHorizontal: { - vint width = stackItemTotalSize.x - + (extraMargin.left > 0 ? extraMargin.left : 0) - + (extraMargin.right > 0 ? extraMargin.right : 0) - ; + vint width = layout_stackItemTotalSize.x + extraMargin.left + extraMargin.right; return width > clientArea.Width(); } break; case Vertical: case ReversedVertical: { - vint height = stackItemTotalSize.y - + (extraMargin.top > 0 ? extraMargin.top : 0) - + (extraMargin.bottom > 0 ? extraMargin.bottom : 0) - ; + vint height = layout_stackItemTotalSize.y + extraMargin.top + extraMargin.bottom; return height > clientArea.Height(); } break; @@ -29713,113 +29777,99 @@ GuiStackComposition bool GuiStackComposition::EnsureVisible(vint index) { - if (0 <= index && index < stackItems.Count()) + if (0 <= index && index < layout_stackItems.Count()) { - ensuringVisibleStackItem = stackItems[index]; + layout_ensuringVisibleStackItem = layout_stackItems[index]; } else { - ensuringVisibleStackItem = 0; + layout_ensuringVisibleStackItem = nullptr; } - EnsureStackItemVisible(); - return ensuringVisibleStackItem != 0; + InvokeOnCompositionStateChanged(); + return layout_ensuringVisibleStackItem != nullptr; } /*********************************************************************** GuiStackItemComposition ***********************************************************************/ - void GuiStackItemComposition::OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent) + void GuiStackItemComposition::Layout_SetStackItemBounds(Rect contentBounds, Point virtualOffset) { - GuiGraphicsSite::OnParentChanged(oldParent, newParent); - stackParent = newParent == 0 ? 0 : dynamic_cast(newParent); + vint x = 0; + vint y = 0; + switch (layout_stackParent->direction) + { + case GuiStackComposition::Horizontal: + x = contentBounds.x1 + virtualOffset.x; + y = contentBounds.y1; + break; + case GuiStackComposition::ReversedHorizontal: + x = contentBounds.x2 - virtualOffset.x - cachedMinSize.x; + y = contentBounds.y1; + break; + case GuiStackComposition::Vertical: + x = contentBounds.x1; + y = contentBounds.y1 + virtualOffset.y; + break; + case GuiStackComposition::ReversedVertical: + x = contentBounds.x1; + y = contentBounds.y2 - virtualOffset.y - cachedMinSize.y; + break; + } + switch (layout_stackParent->direction) + { + case GuiStackComposition::Horizontal: + x += layout_stackParent->layout_adjustment; + break; + case GuiStackComposition::ReversedHorizontal: + x -= layout_stackParent->layout_adjustment; + break; + case GuiStackComposition::Vertical: + y += layout_stackParent->layout_adjustment; + break; + case GuiStackComposition::ReversedVertical: + y -= layout_stackParent->layout_adjustment; + break; + } + + vint w = 0; + vint h = 0; + switch (layout_stackParent->direction) + { + case GuiStackComposition::Horizontal: + case GuiStackComposition::ReversedHorizontal: + w = cachedMinSize.x; + h = contentBounds.Height(); + break; + case GuiStackComposition::Vertical: + case GuiStackComposition::ReversedVertical: + w = contentBounds.Width(); + h = cachedMinSize.y; + break; + } + + Rect result( + x - extraMargin.left, + y - extraMargin.top, + x + w + extraMargin.right, + y + h + extraMargin.bottom + ); + Layout_SetCachedBounds(result); } - Size GuiStackItemComposition::GetMinSize() + void GuiStackItemComposition::OnParentLineChanged() { - return GetBoundsInternal(bounds, true).GetSize(); + layout_stackParent = dynamic_cast(GetParent()); + GuiGraphicsComposition::OnParentLineChanged(); } GuiStackItemComposition::GuiStackItemComposition() - :stackParent(0) { SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); - } - - GuiStackItemComposition::~GuiStackItemComposition() - { - } - - bool GuiStackItemComposition::IsSizeAffectParent() - { - return false; - } - - Rect GuiStackItemComposition::GetBounds() - { - Rect result = bounds; - if(stackParent) + CachedMinSizeChanged.AttachLambda([this](GuiGraphicsComposition* sender, GuiEventArgs& arguments) { - vint index = stackParent->stackItems.IndexOf(this); - if (index != -1) - { - result = stackParent->stackItemBounds[index]; - } - - Rect parentBounds = stackParent->previousBounds; - Margin margin = stackParent->extraMargin; - if (margin.left <= 0) margin.left = 0; - if (margin.top <= 0) margin.top = 0; - if (margin.right <= 0) margin.right = 0; - if (margin.bottom <= 0) margin.bottom = 0; - - auto x = result.Left(); - auto y = result.Top(); - auto w = result.Width(); - auto h = result.Height(); - - switch (stackParent->direction) - { - case GuiStackComposition::Horizontal: - x += margin.left + stackParent->adjustment; - y = margin.top; - h = parentBounds.Height() - margin.top - margin.bottom; - break; - case GuiStackComposition::ReversedHorizontal: - x = parentBounds.Width() - margin.right - x - w + stackParent->adjustment; - y = margin.top; - h = parentBounds.Height() - margin.top - margin.bottom; - break; - case GuiStackComposition::Vertical: - x = margin.left; - y += margin.top + stackParent->adjustment; - w = parentBounds.Width() - margin.left - margin.right; - break; - case GuiStackComposition::ReversedVertical: - x = margin.left; - y = parentBounds.Height() - margin.bottom - y - h + stackParent->adjustment; - w = parentBounds.Width() - margin.left - margin.right; - break; - } - - result = Rect( - x - extraMargin.left, - y - extraMargin.top, - x + w + extraMargin.right, - y + h + extraMargin.bottom - ); - } - UpdatePreviousBounds(result); - return result; - } - - void GuiStackItemComposition::SetBounds(Rect value) - { - if (bounds != value) - { - bounds = value; - InvokeOnCompositionStateChanged(); - } + if (layout_stackParent) layout_stackParent->layout_invalid = true; + }); } Margin GuiStackItemComposition::GetExtraMargin() @@ -29902,17 +29952,20 @@ GuiTableComposition } using namespace update_cell_bounds_helpers; - vint GuiTableComposition::GetSiteIndex(vint _rows, vint _columns, vint _row, vint _column) + Rect GuiTableComposition::Layout_CalculateCellArea(Rect tableBounds) { - return _row*_columns + _column; + Rect bounds(Point(0, 0), tableBounds.GetSize()); + vint borderThickness = borderVisible ? cellPadding : 0; + bounds.x1 += borderThickness; + bounds.y1 += borderThickness; + bounds.x2 -= borderThickness; + bounds.y2 -= borderThickness; + if (bounds.x2 < bounds.x1) bounds.x2 = bounds.x1; + if (bounds.y2 < bounds.y1) bounds.y2 = bounds.y1; + return bounds; } - void GuiTableComposition::SetSitedCell(vint _row, vint _column, GuiCellComposition* cell) - { - cellCompositions[GetSiteIndex(rows, columns, _row, _column)] = cell; - } - - void GuiTableComposition::UpdateCellBoundsInternal( + void GuiTableComposition::Layout_UpdateCellBoundsInternal( collections::Array& dimSizes, vint& dimSize, vint& dimSizeWithPercentage, @@ -29923,113 +29976,38 @@ GuiTableComposition vint(*getLocation)(GuiCellComposition*), vint(*getSpan)(GuiCellComposition*), vint(*getRow)(vint, vint), - vint(*getCol)(vint, vint), - vint maxPass + vint(*getCol)(vint, vint) ) { - for (vint pass = 0; pass < maxPass; pass++) + for (vint i = 0; i < this->*dim1; i++) { - for (vint i = 0; i < this->*dim1; i++) - { - GuiCellOption option = dimOptions[i]; - if (pass == 0) - { - dimSizes[i] = 0; - } - switch (option.composeType) - { - case GuiCellOption::Absolute: - { - dimSizes[i] = option.absolute; - } - break; - case GuiCellOption::MinSize: - { - for (vint j = 0; j < this->*dim2; j++) - { - GuiCellComposition* cell = GetSitedCell(getRow(i, j), getCol(i, j)); - if (cell) - { - bool accept = false; - if (pass == 0) - { - accept = getSpan(cell) == 1; - } - else - { - accept = getLocation(cell) + getSpan(cell) == i + 1; - } - if (accept) - { - vint size = getSize(cell->GetPreferredBounds().GetSize()); - vint span = getSpan(cell); - for (vint k = 1; k < span; k++) - { - size -= dimSizes[i - k] + cellPadding; - } - if (dimSizes[i] < size) - { - dimSizes[i] = size; - } - } - } - } - } - break; - default:; - } - } + dimSizes[i] = 0; } - bool percentageExists = false; for (vint i = 0; i < this->*dim1; i++) { GuiCellOption option = dimOptions[i]; - if (option.composeType == GuiCellOption::Percentage) + switch (option.composeType) { - if (0.001 < option.percentage) + case GuiCellOption::Absolute: { - percentageExists = true; + dimSizes[i] = option.absolute; } - } - } - - if (percentageExists) - { - for (vint i = 0; i < this->*dim1; i++) - { - GuiCellOption option = dimOptions[i]; - if (option.composeType == GuiCellOption::Percentage) + break; + case GuiCellOption::MinSize: { - if (0.001 < option.percentage) + for (vint j = 0; j < this->*dim2; j++) { - for (vint j = 0; j < this->*dim2; j++) + if (auto cell = GetSitedCell(getRow(i, j), getCol(i, j))) { - GuiCellComposition* cell = GetSitedCell(getRow(i, j), getCol(i, j)); - if (cell) + if (getSpan(cell) == 1) { - vint size = getSize(cell->GetPreferredBounds().GetSize()); - vint start = getLocation(cell); + vint size = getSize(cell->GetCachedMinSize()); vint span = getSpan(cell); - size -= (span - 1)*cellPadding; - double totalPercentage = 0; - - for (vint k = start; k < start + span; k++) + for (vint k = 1; k < span; k++) { - if (dimOptions[k].composeType == GuiCellOption::Percentage) - { - if (0.001 < dimOptions[k].percentage) - { - totalPercentage += dimOptions[k].percentage; - } - } - else - { - size -= dimSizes[k]; - } + size -= dimSizes[i - k] + cellPadding; } - - size = (vint)ceil(size*option.percentage / totalPercentage); if (dimSizes[i] < size) { dimSizes[i] = size; @@ -30038,20 +30016,45 @@ GuiTableComposition } } } + break; + default:; } + } - vint percentageTotalSize = 0; + { for (vint i = 0; i < this->*dim1; i++) { GuiCellOption option = dimOptions[i]; if (option.composeType == GuiCellOption::Percentage) { - if (0.001 < option.percentage) + for (vint j = 0; j < this->*dim2; j++) { - vint size = (vint)ceil(dimSizes[i] / option.percentage); - if (percentageTotalSize < size) + GuiCellComposition* cell = GetSitedCell(getRow(i, j), getCol(i, j)); + if (cell) { - percentageTotalSize = size; + vint size = getSize(cell->GetCachedMinSize()); + vint start = getLocation(cell); + vint span = getSpan(cell); + size -= (span - 1)*cellPadding; + double totalPercentage = 0; + + for (vint k = start; k < start + span; k++) + { + if (dimOptions[k].composeType == GuiCellOption::Percentage) + { + totalPercentage += dimOptions[k].percentage; + } + else + { + size -= dimSizes[k]; + } + } + + size = (vint)ceil(size*option.percentage / totalPercentage); + if (dimSizes[i] < size) + { + dimSizes[i] = size; + } } } } @@ -30063,9 +30066,20 @@ GuiTableComposition GuiCellOption option = dimOptions[i]; if (option.composeType == GuiCellOption::Percentage) { - if (0.001 < option.percentage) + totalPercentage += option.percentage; + } + } + + vint percentageTotalSize = 0; + for (vint i = 0; i < this->*dim1; i++) + { + GuiCellOption option = dimOptions[i]; + if (option.composeType == GuiCellOption::Percentage) + { + vint size = (vint)ceil(dimSizes[i] * totalPercentage / option.percentage); + if (percentageTotalSize < size) { - totalPercentage += option.percentage; + percentageTotalSize = size; } } } @@ -30075,13 +30089,10 @@ GuiTableComposition GuiCellOption option = dimOptions[i]; if (option.composeType == GuiCellOption::Percentage) { - if (0.001 < option.percentage) + vint size = (vint)ceil(percentageTotalSize * option.percentage / totalPercentage); + if (dimSizes[i] < size) { - vint size = (vint)ceil(percentageTotalSize*option.percentage / totalPercentage); - if (dimSizes[i] < size) - { - dimSizes[i] = size; - } + dimSizes[i] = size; } } } @@ -30097,7 +30108,7 @@ GuiTableComposition } } - void GuiTableComposition::UpdateCellBoundsPercentages( + void GuiTableComposition::Layout_UpdateCellBoundsPercentages( collections::Array& dimSizes, vint dimSize, vint maxDimSize, @@ -30108,6 +30119,7 @@ GuiTableComposition { double totalPercentage = 0; vint percentageCount = 0; + // TODO: (enumerable) foreach for (vint i = 0; i < dimOptions.Count(); i++) { GuiCellOption option = dimOptions[i]; @@ -30117,8 +30129,9 @@ GuiTableComposition percentageCount++; } } - if (percentageCount > 0 && totalPercentage > 0.001) + if (percentageCount > 0 && totalPercentage > 0) { + // TODO: (enumerable) foreach for (vint i = 0; i < dimOptions.Count(); i++) { GuiCellOption option = dimOptions[i]; @@ -30131,7 +30144,144 @@ GuiTableComposition } } - vint GuiTableComposition::UpdateCellBoundsOffsets( + vint GuiTableComposition::GetSiteIndex(vint _rows, vint _columns, vint _row, vint _column) + { + return _row * _columns + _column; + } + + void GuiTableComposition::SetSitedCell(vint _row, vint _column, GuiCellComposition* cell) + { + layout_cellCompositions[GetSiteIndex(rows, columns, _row, _column)] = cell; + layout_invalid = true; + } + + void GuiTableComposition::OnCompositionStateChanged() + { + GuiBoundsComposition::OnCompositionStateChanged(); + ConfigChanged.Execute(GuiEventArgs(this)); + layout_invalid = true; + } + + Size GuiTableComposition::Layout_CalculateMinSize() + { + for (auto child : Children()) + { + if (auto cell = dynamic_cast(child)) + { + cell->Layout_SetCachedMinSize(cell->Layout_CalculateMinSizeHelper()); + } + } + + if (layout_invalid) + { + layout_invalid = false; + layout_invalidCellBounds = true; + + layout_rowOffsets.Resize(rows); + layout_rowSizes.Resize(rows); + layout_columnOffsets.Resize(columns); + layout_columnSizes.Resize(columns); + layout_rowTotal = (rows - 1) * cellPadding; + layout_columnTotal = (columns - 1) * cellPadding; + layout_rowTotalWithPercentage = layout_rowTotal; + layout_columnTotalWithPercentage = layout_columnTotal; + + Layout_UpdateCellBoundsInternal( + layout_rowSizes, + layout_rowTotal, + layout_rowTotalWithPercentage, + rowOptions, + &GuiTableComposition::rows, + &GuiTableComposition::columns, + &Y, + &RL, + &RS, + &First, + &Second + ); + Layout_UpdateCellBoundsInternal( + layout_columnSizes, + layout_columnTotal, + layout_columnTotalWithPercentage, + columnOptions, + &GuiTableComposition::columns, + &GuiTableComposition::rows, + &X, + &CL, + &CS, + &Second, + &First + ); + } + + Size minTableSize; + if (GetMinSizeLimitation() == GuiGraphicsComposition::LimitToElementAndChildren) + { + vint offset = (borderVisible ? 2 * cellPadding : 0); + minTableSize.x = layout_columnTotalWithPercentage + offset; + minTableSize.y = layout_rowTotalWithPercentage + offset; + } + + Size minClientSize = GuiBoundsComposition::Layout_CalculateMinSize(); + return Size( + minTableSize.x > minClientSize.x ? minTableSize.x : minClientSize.x, + minTableSize.y > minClientSize.y ? minTableSize.y : minClientSize.y + ); + } + + Rect GuiTableComposition::Layout_CalculateBounds(Size parentSize) + { + Rect bounds = GuiBoundsComposition::Layout_CalculateBounds(parentSize); + + if (layout_lastTableSize != bounds.GetSize()) + { + layout_invalidCellBounds = true; + layout_lastTableSize = bounds.GetSize(); + } + + if (layout_invalidCellBounds) + { + layout_invalidCellBounds = false; + + Size area = Layout_CalculateCellArea(bounds).GetSize(); + Layout_UpdateCellBoundsPercentages( + layout_rowSizes, + layout_rowTotal, + area.y, + rowOptions + ); + Layout_UpdateCellBoundsPercentages( + layout_columnSizes, + layout_columnTotal, + area.x, + columnOptions + ); + + layout_rowExtending = Layout_UpdateCellBoundsOffsets(layout_rowOffsets, layout_rowSizes, area.y); + layout_columnExtending = Layout_UpdateCellBoundsOffsets(layout_columnOffsets, layout_columnSizes, area.x); + + for (vint i = 0; i < rows; i++) + { + for (vint j = 0; j < columns; j++) + { + vint index = GetSiteIndex(rows, columns, i, j); + layout_cellBounds[index] = Rect(Point(layout_columnOffsets[j], layout_rowOffsets[i]), Size(layout_columnSizes[j], layout_rowSizes[i])); + } + } + + for (auto child : Children()) + { + if (auto cell = dynamic_cast(child)) + { + cell->Layout_SetCellBounds(); + } + } + } + + return bounds; + } + + vint GuiTableComposition::Layout_UpdateCellBoundsOffsets( collections::Array& offsets, collections::Array& sizes, vint max @@ -30145,39 +30295,15 @@ GuiTableComposition vint last = offsets.Count() - 1; vint right = offsets[last] + sizes[last]; - return max - right; - } - - void GuiTableComposition::OnRenderContextChanged() - { - if(GetRenderTarget()) - { - UpdateCellBounds(); - } - } - - Size GuiTableComposition::GetMinPreferredClientSizeInternal(bool considerPreferredMinSize) - { - vint offset = (borderVisible ? 2 * cellPadding : 0); - return Size(tableContentMinSize.x + offset, tableContentMinSize.y + offset); + return max > right ? max - right : 0; } GuiTableComposition::GuiTableComposition() - :rows(0) - , columns(0) - , cellPadding(0) - , borderVisible(true) - , rowExtending(0) - , columnExtending(0) { ConfigChanged.SetAssociatedComposition(this); SetRowsAndColumns(1, 1); } - GuiTableComposition::~GuiTableComposition() - { - } - vint GuiTableComposition::GetRows() { return rows; @@ -30193,15 +30319,16 @@ GuiTableComposition if (_rows <= 0 || _columns <= 0) return false; rowOptions.Resize(_rows); columnOptions.Resize(_columns); - cellCompositions.Resize(_rows*_columns); - cellBounds.Resize(_rows*_columns); + layout_cellCompositions.Resize(_rows*_columns); + layout_cellBounds.Resize(_rows*_columns); for (vint i = 0; i < _rows*_columns; i++) { - cellCompositions[i] = 0; - cellBounds[i] = Rect(); + layout_cellCompositions[i] = nullptr; + layout_cellBounds[i] = Rect(); } rows = _rows; columns = _columns; + // TODO: (enumerable) foreach vint childCount = Children().Count(); for (vint i = 0; i < childCount; i++) { @@ -30211,14 +30338,13 @@ GuiTableComposition cell->OnTableRowsAndColumnsChanged(); } } - ConfigChanged.Execute(GuiEventArgs(this)); - UpdateCellBounds(); + InvokeOnCompositionStateChanged(); return true; } GuiCellComposition* GuiTableComposition::GetSitedCell(vint _row, vint _column) { - return cellCompositions[GetSiteIndex(rows, columns, _row, _column)]; + return layout_cellCompositions[GetSiteIndex(rows, columns, _row, _column)]; } GuiCellOption GuiTableComposition::GetRowOption(vint _row) @@ -30228,11 +30354,15 @@ GuiTableComposition void GuiTableComposition::SetRowOption(vint _row, GuiCellOption option) { + if (option.composeType == GuiCellOption::Percentage && option.percentage < 0.001) + { + option.percentage = 0; + } + if (rowOptions[_row] != option) { rowOptions[_row] = option; - UpdateCellBounds(); - ConfigChanged.Execute(GuiEventArgs(this)); + InvokeOnCompositionStateChanged(); } } @@ -30243,11 +30373,15 @@ GuiTableComposition void GuiTableComposition::SetColumnOption(vint _column, GuiCellOption option) { + if (option.composeType == GuiCellOption::Percentage && option.percentage < 0.001) + { + option.percentage = 0; + } + if (columnOptions[_column] != option) { columnOptions[_column] = option; - UpdateCellBounds(); - ConfigChanged.Execute(GuiEventArgs(this)); + InvokeOnCompositionStateChanged(); } } @@ -30259,8 +30393,11 @@ GuiTableComposition void GuiTableComposition::SetCellPadding(vint value) { if (value < 0) value = 0; - cellPadding = value; - UpdateCellBounds(); + if (cellPadding != value) + { + cellPadding = value; + InvokeOnCompositionStateChanged(); + } } bool GuiTableComposition::GetBorderVisible() @@ -30273,118 +30410,10 @@ GuiTableComposition if (borderVisible != value) { borderVisible = value; - UpdateCellBounds(); + InvokeOnCompositionStateChanged(); } } - Rect GuiTableComposition::GetCellArea() - { - Rect bounds(Point(0, 0), GuiBoundsComposition::GetBounds().GetSize()); - vint borderThickness = borderVisible ? cellPadding : 0; - bounds.x1 += margin.left + internalMargin.left + borderThickness; - bounds.y1 += margin.top + internalMargin.top + borderThickness; - bounds.x2 -= margin.right + internalMargin.right + borderThickness; - bounds.y2 -= margin.bottom + internalMargin.bottom + borderThickness; - if (bounds.x2 < bounds.x1) bounds.x2 = bounds.x1; - if (bounds.y2 < bounds.y1) bounds.y2 = bounds.y1; - return bounds; - } - - void GuiTableComposition::UpdateCellBounds() - { - rowOffsets.Resize(rows); - rowSizes.Resize(rows); - columnOffsets.Resize(columns); - columnSizes.Resize(columns); - - vint rowTotal = (rows - 1) * cellPadding; - vint columnTotal = (columns - 1) * cellPadding; - vint rowTotalWithPercentage = rowTotal; - vint columnTotalWithPercentage = columnTotal; - - UpdateCellBoundsInternal( - rowSizes, - rowTotal, - rowTotalWithPercentage, - rowOptions, - &GuiTableComposition::rows, - &GuiTableComposition::columns, - &Y, - &RL, - &RS, - &First, - &Second, - 1 - ); - UpdateCellBoundsInternal( - columnSizes, - columnTotal, - columnTotalWithPercentage, - columnOptions, - &GuiTableComposition::columns, - &GuiTableComposition::rows, - &X, - &CL, - &CS, - &Second, - &First, - 1 - ); - - Rect area = GetCellArea(); - UpdateCellBoundsPercentages(rowSizes, rowTotal, area.Height(), rowOptions); - UpdateCellBoundsPercentages(columnSizes, columnTotal, area.Width(), columnOptions); - rowExtending = UpdateCellBoundsOffsets(rowOffsets, rowSizes, area.Height()); - columnExtending = UpdateCellBoundsOffsets(columnOffsets, columnSizes, area.Width()); - - for (vint i = 0; i < rows; i++) - { - for (vint j = 0; j < columns; j++) - { - vint index = GetSiteIndex(rows, columns, i, j); - cellBounds[index] = Rect(Point(columnOffsets[j], rowOffsets[i]), Size(columnSizes[j], rowSizes[i])); - } - } - - tableContentMinSize = Size(columnTotalWithPercentage, rowTotalWithPercentage); - InvokeOnCompositionStateChanged(); - } - - void GuiTableComposition::ForceCalculateSizeImmediately() - { - GuiBoundsComposition::ForceCalculateSizeImmediately(); - UpdateCellBounds(); - UpdateCellBounds(); - } - - Rect GuiTableComposition::GetBounds() - { - Rect cached = previousBounds; - Rect result = GuiBoundsComposition::GetBounds(); - - bool cellMinSizeModified = false; - SortedList cells; - for (auto cell : cellCompositions) - { - if (cell && !cells.Contains(cell)) - { - cells.Add(cell); - Size newSize = cell->GetPreferredBounds().GetSize(); - if (cell->lastPreferredSize != newSize) - { - cell->lastPreferredSize = newSize; - cellMinSizeModified = true; - } - } - } - - if (cached != result || cellMinSizeModified) - { - UpdateCellBounds(); - } - return result; - } - /*********************************************************************** GuiCellComposition ***********************************************************************/ @@ -30397,7 +30426,7 @@ GuiCellComposition { for (vint c = 0; c < columnSpan; c++) { - table->SetSitedCell(row + r, column + c, 0); + table->SetSitedCell(row + r, column + c, nullptr); } } } @@ -30424,23 +30453,23 @@ GuiCellComposition bool GuiCellComposition::SetSiteInternal(vint _row, vint _column, vint _rowSpan, vint _columnSpan) { - if (tableParent) + if (layout_tableParent) { - if (_row < 0 || _row >= tableParent->rows || _column < 0 || _column >= tableParent->columns) return false; - if (_rowSpan<1 || _row + _rowSpan>tableParent->rows || _columnSpan<1 || _column + _columnSpan>tableParent->columns) return false; + if (_row < 0 || _row >= layout_tableParent->rows || _column < 0 || _column >= layout_tableParent->columns) return false; + if (_rowSpan<1 || _row + _rowSpan>layout_tableParent->rows || _columnSpan<1 || _column + _columnSpan>layout_tableParent->columns) return false; for (vint r = 0; r < _rowSpan; r++) { for (vint c = 0; c < _columnSpan; c++) { - GuiCellComposition* cell = tableParent->GetSitedCell(_row + r, _column + c); + GuiCellComposition* cell = layout_tableParent->GetSitedCell(_row + r, _column + c); if (cell && cell != this) { return false; } } } - ClearSitedCells(tableParent); + ClearSitedCells(layout_tableParent); } row = _row; @@ -30448,32 +30477,31 @@ GuiCellComposition rowSpan = _rowSpan; columnSpan = _columnSpan; - if (tableParent) + if (layout_tableParent) { - SetSitedCells(tableParent); + SetSitedCells(layout_tableParent); } return true; } void GuiCellComposition::OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent) { - GuiGraphicsSite::OnParentChanged(oldParent, newParent); - if (tableParent) + GuiGraphicsComposition::OnParentChanged(oldParent, newParent); + if (layout_tableParent) { - ClearSitedCells(tableParent); + ClearSitedCells(layout_tableParent); } - tableParent = dynamic_cast(newParent); - if (!tableParent || !SetSiteInternal(row, column, rowSpan, columnSpan)) + layout_tableParent = dynamic_cast(newParent); + if (!layout_tableParent || !SetSiteInternal(row, column, rowSpan, columnSpan)) { ResetSiteInternal(); } - if (tableParent) + if (layout_tableParent) { if (row != -1 && column != -1) { SetSiteInternal(row, column, rowSpan, columnSpan); } - tableParent->UpdateCellBounds(); } } @@ -30485,23 +30513,51 @@ GuiCellComposition } } - GuiCellComposition::GuiCellComposition() - :row(-1) - ,column(-1) - ,rowSpan(1) - ,columnSpan(1) - ,tableParent(0) + void GuiCellComposition::Layout_SetCellBounds() { - SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); + Rect result; + if (layout_tableParent && row != -1 && column != -1) + { + Rect bounds1, bounds2; + { + vint index = layout_tableParent->GetSiteIndex(layout_tableParent->rows, layout_tableParent->columns, row, column); + bounds1 = layout_tableParent->layout_cellBounds[index]; + } + { + vint index = layout_tableParent->GetSiteIndex(layout_tableParent->rows, layout_tableParent->columns, row + rowSpan - 1, column + columnSpan - 1); + bounds2 = layout_tableParent->layout_cellBounds[index]; + + if (row + rowSpan == layout_tableParent->rows) + { + bounds2.y2 += layout_tableParent->layout_rowExtending; + } + if (column + columnSpan == layout_tableParent->columns) + { + bounds2.x2 += layout_tableParent->layout_columnExtending; + } + } + vint offset = layout_tableParent->borderVisible ? layout_tableParent->cellPadding : 0; + result = Rect(bounds1.x1 + offset, bounds1.y1 + offset, bounds2.x2 + offset, bounds2.y2 + offset); + } + else + { + result = Rect(); + } + Layout_SetCachedBounds(result); } - GuiCellComposition::~GuiCellComposition() + GuiCellComposition::GuiCellComposition() { + SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren); + CachedMinSizeChanged.AttachLambda([this](GuiGraphicsComposition* sender, GuiEventArgs& arguments) + { + if (layout_tableParent) layout_tableParent->layout_invalid = true; + }); } GuiTableComposition* GuiCellComposition::GetTableParent() { - return tableParent; + return layout_tableParent; } vint GuiCellComposition::GetRow() @@ -30531,56 +30587,17 @@ GuiCellComposition return false; } - if (tableParent) - { - tableParent->UpdateCellBounds(); - } + InvokeOnCompositionStateChanged(); return true; } - Rect GuiCellComposition::GetBounds() - { - Rect result; - if(tableParent && row!=-1 && column!=-1) - { - Rect bounds1, bounds2; - { - vint index=tableParent->GetSiteIndex(tableParent->rows, tableParent->columns, row, column); - bounds1=tableParent->cellBounds[index]; - } - { - vint index=tableParent->GetSiteIndex(tableParent->rows, tableParent->columns, row+rowSpan-1, column+columnSpan-1); - bounds2=tableParent->cellBounds[index]; - if(tableParent->GetMinSizeLimitation()==GuiGraphicsComposition::NoLimit) - { - if(row+rowSpan==tableParent->rows) - { - bounds2.y2+=tableParent->rowExtending; - } - if(column+columnSpan==tableParent->columns) - { - bounds2.x2+=tableParent->columnExtending; - } - } - } - vint offset = tableParent->borderVisible ? tableParent->cellPadding : 0; - result = Rect(bounds1.x1 + offset, bounds1.y1 + offset, bounds2.x2 + offset, bounds2.y2 + offset); - } - else - { - result = Rect(); - } - UpdatePreviousBounds(result); - return result; - } - /*********************************************************************** GuiTableSplitterCompositionBase ***********************************************************************/ void GuiTableSplitterCompositionBase::OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent) { - GuiGraphicsSite::OnParentChanged(oldParent, newParent); + GuiGraphicsComposition::OnParentChanged(oldParent, newParent); tableParent = dynamic_cast(newParent); } @@ -30705,35 +30722,27 @@ GuiTableSplitterCompositionBase vint Rect::* dimV2 ) { - Rect result(0, 0, 0, 0); + Rect result; if (tableParent) { if (0 < cellsBefore && cellsBefore < tableParent->*cells) { vint offset = tableParent->borderVisible ? tableParent->cellPadding : 0; result.*dimU1 = offset; - result.*dimU2 = offset + (tableParent->GetCellArea().*dimSize)(); + result.*dimU2 = offset + (tableParent->Layout_CalculateCellArea(tableParent->GetCachedBounds()).*dimSize)(); result.*dimV1 = offset + cellOffsets[cellsBefore] - tableParent->cellPadding; result.*dimV2 = (result.*dimV1) + tableParent->cellPadding; } } - UpdatePreviousBounds(result); return result; } GuiTableSplitterCompositionBase::GuiTableSplitterCompositionBase() - :tableParent(0) - , dragging(false) { - SetAssociatedCursor(GetCurrentController()->ResourceService()->GetSystemCursor(INativeCursor::SizeNS)); GetEventReceiver()->leftButtonDown.AttachMethod(this, &GuiTableSplitterCompositionBase::OnLeftButtonDown); GetEventReceiver()->leftButtonUp.AttachMethod(this, &GuiTableSplitterCompositionBase::OnLeftButtonUp); } - GuiTableSplitterCompositionBase::~GuiTableSplitterCompositionBase() - { - } - GuiTableComposition* GuiTableSplitterCompositionBase::GetTableParent() { return tableParent; @@ -30748,24 +30757,36 @@ GuiRowSplitterComposition OnMouseMoveHelper( rowsToTheTop, &GuiTableComposition::rows, - tableParent->rowSizes, + tableParent->layout_rowSizes, arguments.y - draggingPoint.y, &GuiTableComposition::GetRowOption, &GuiTableComposition::SetRowOption ); } + + Rect GuiRowSplitterComposition::Layout_CalculateBounds(Size parentSize) + { + return GetBoundsHelper( + rowsToTheTop, + &GuiTableComposition::rows, + &Rect::Width, + tableParent->layout_rowOffsets, + &Rect::x1, + &Rect::x2, + &Rect::y1, + &Rect::y2 + ); + } GuiRowSplitterComposition::GuiRowSplitterComposition() - :rowsToTheTop(0) { - SetAssociatedCursor(GetCurrentController()->ResourceService()->GetSystemCursor(INativeCursor::SizeNS)); + if (auto controller = GetCurrentController()) + { + SetAssociatedCursor(controller->ResourceService()->GetSystemCursor(INativeCursor::SizeNS)); + } GetEventReceiver()->mouseMove.AttachMethod(this, &GuiRowSplitterComposition::OnMouseMove); } - GuiRowSplitterComposition::~GuiRowSplitterComposition() - { - } - vint GuiRowSplitterComposition::GetRowsToTheTop() { return rowsToTheTop; @@ -30780,20 +30801,6 @@ GuiRowSplitterComposition } } - Rect GuiRowSplitterComposition::GetBounds() - { - return GetBoundsHelper( - rowsToTheTop, - &GuiTableComposition::rows, - &Rect::Width, - tableParent->rowOffsets, - &Rect::x1, - &Rect::x2, - &Rect::y1, - &Rect::y2 - ); - } - /*********************************************************************** GuiColumnSplitterComposition ***********************************************************************/ @@ -30803,24 +30810,36 @@ GuiColumnSplitterComposition OnMouseMoveHelper( columnsToTheLeft, &GuiTableComposition::columns, - tableParent->columnSizes, + tableParent->layout_columnSizes, arguments.x - draggingPoint.x, &GuiTableComposition::GetColumnOption, &GuiTableComposition::SetColumnOption ); } + + Rect GuiColumnSplitterComposition::Layout_CalculateBounds(Size parentSize) + { + return GetBoundsHelper( + columnsToTheLeft, + &GuiTableComposition::columns, + &Rect::Height, + tableParent->layout_columnOffsets, + &Rect::y1, + &Rect::y2, + &Rect::x1, + &Rect::x2 + ); + } GuiColumnSplitterComposition::GuiColumnSplitterComposition() - :columnsToTheLeft(0) { - SetAssociatedCursor(GetCurrentController()->ResourceService()->GetSystemCursor(INativeCursor::SizeWE)); + if (auto controller = GetCurrentController()) + { + SetAssociatedCursor(controller->ResourceService()->GetSystemCursor(INativeCursor::SizeWE)); + } GetEventReceiver()->mouseMove.AttachMethod(this, &GuiColumnSplitterComposition::OnMouseMove); } - GuiColumnSplitterComposition::~GuiColumnSplitterComposition() - { - } - vint GuiColumnSplitterComposition::GetColumnsToTheLeft() { return columnsToTheLeft; @@ -30834,20 +30853,6 @@ GuiColumnSplitterComposition InvokeOnCompositionStateChanged(); } } - - Rect GuiColumnSplitterComposition::GetBounds() - { - return GetBoundsHelper( - columnsToTheLeft, - &GuiTableComposition::columns, - &Rect::Height, - tableParent->columnOffsets, - &Rect::y1, - &Rect::y2, - &Rect::x1, - &Rect::x2 - ); - } } } } @@ -31114,6 +31119,7 @@ GuiDocumentElement::GuiDocumentElementRenderer void GuiDocumentElement::GuiDocumentElementRenderer::RenderTargetChangedInternal(IGuiGraphicsRenderTarget* oldRenderTarget, IGuiGraphicsRenderTarget* newRenderTarget) { + // TODO: (enumerable) foreach for(vint i=0;iembeddedObjects.Count(); j++) { auto eo = cache->embeddedObjects.Values()[j]; @@ -31372,6 +31381,7 @@ GuiDocumentElement::GuiDocumentElementRenderer { if (auto cache = oldCaches[index + i]) { + // TODO: (enumerable) foreach on dictionary for (vint j = 0; j < cache->embeddedObjects.Count(); j++) { auto id = cache->embeddedObjects.Keys()[j]; @@ -31453,6 +31463,7 @@ GuiDocumentElement::GuiDocumentElementRenderer } if (!renderTarget) return; + // TODO: (enumerable) foreach:indexed for(vint i=0;iSetBounds({ {},clientSize }); } + + for (auto listener : mainWindow->listeners) + { + listener->Moved(); + } } } @@ -35001,9 +35017,9 @@ GuiHostedController::INativeControllerListener return; } - for (auto hostedWindow : createdWindows) + for (auto visibleWindow : From(wmManager->ordinaryWindowsInOrder).Concat(wmManager->topMostedWindowsInOrder)) { - for (auto listener : hostedWindow->listeners) + for (auto listener : visibleWindow->id->listeners) { if (listener->NeedRefresh()) { @@ -35028,6 +35044,7 @@ GuiHostedController::INativeControllerListener bool failureByResized = false; bool failureByLostDevice = false; + // TODO: (enumerable) foreach:reversed for (vint i = wmManager->ordinaryWindowsInOrder.Count() - 1; i >= 0; i--) { auto hostedWindow = wmManager->ordinaryWindowsInOrder[i]->id; @@ -35042,6 +35059,7 @@ GuiHostedController::INativeControllerListener } } } + // TODO: (enumerable) foreach:reversed for (vint i = wmManager->topMostedWindowsInOrder.Count() - 1; i >= 0; i--) { auto hostedWindow = wmManager->topMostedWindowsInOrder[i]->id; @@ -35321,6 +35339,7 @@ GuiHostedController::INativeWindowService { wmManager->Stop(); + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = createdWindows.Count() - 1; i >= 0; i--) { auto hostedWindow = createdWindows[i]; @@ -36962,6 +36981,7 @@ DocumentModel void DocumentModel::GetText(stream::TextWriter& writer, bool skipNonTextContent) { + // TODO: (enumerable) Linq:Aggregate for(vint i=0;i paragraph=paragraphs[i]; @@ -37046,6 +37066,7 @@ namespace vl void VisitContainer(DocumentContainerRun* run)override { + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = run->runs.Count() - 1; i >= 0; i--) { auto childRun = run->runs[i]; @@ -37417,6 +37438,7 @@ namespace vl StreamWriter writer(encoderStream); GenerateHtmlVisitor visitor(model.Obj(), writer); + // TODO: (enumerable) foreach for (auto paragraph : model->paragraphs) { writer.WriteString(L"

runs.Count() - 1; i >= 0; i--) { Ptr subRun = run->runs[i]; @@ -37934,6 +37957,7 @@ Clear all runs that have an empty length void VisitContainer(DocumentContainerRun* run) { + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = run->runs.Count() - 1; i >= 0; i--) { vint oldStart = start; @@ -38018,6 +38042,7 @@ Remove DocumentStylePropertiesRun if it is empty or contains no text run void VisitContainer(DocumentContainerRun* run) { + // TODO: (enumerable) foreach:indexed(alterable) for (vint i = 0; i < run->runs.Count(); i++) { Ptr subRun = run->runs[i]; @@ -38026,6 +38051,7 @@ Remove DocumentStylePropertiesRun if it is empty or contains no text run if (replacedRuns.Count() > 0) { run->runs.RemoveAt(i); + // TODO: (enumerable) foreach for (vint j = 0; j < replacedRuns.Count(); j++) { run->runs.Insert(i + j, replacedRuns[j]); @@ -38242,6 +38268,7 @@ Merge sibling runs if they are exactly the same void VisitContainer(DocumentContainerRun* run) { + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = 0; i < run->runs.Count() - 1; i++) { auto currentRun = run->runs[i]; @@ -38259,6 +38286,7 @@ Merge sibling runs if they are exactly the same } } + // TODO: (enumerable) foreach for (vint i = 0; i < run->runs.Count() - 1; i++) { run->runs[i]->Accept(this); @@ -38591,6 +38619,7 @@ Clone the current run with its children textRun->text = text; CloneRunVisitor visitor(textRun); + // TODO: (enumerable) foreach:reversed for (vint i = styleRuns.Count() - 1; i >= 0; i--) { styleRuns[i]->Accept(&visitor); @@ -38768,6 +38797,7 @@ If a run decides that itself should be cut, then leftRun and rightRun contains n Ptr leftContainer = CopyRun(run).Cast(); Ptr rightContainer = CopyRun(run).Cast(); + // TODO: (enumerable) foreach for (vint i = 0; iruns.Count(); i++) { (iruns.Add(run->runs[i]); @@ -39240,6 +39270,7 @@ ClearStyleVisitor : Remove all styles that intersect with the specified range void VisitContainer(DocumentContainerRun* run) { + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = run->runs.Count() - 1; i >= 0; i--) { Ptr subRun = run->runs[i]; @@ -39251,6 +39282,7 @@ ClearStyleVisitor : Remove all styles that intersect with the specified range if (replacedRuns.Count() != 1 || replacedRuns[0] != subRun) { run->runs.RemoveAt(i); + // TODO: (enumerable) foreach for (vint j = 0; jruns.Insert(i + j, replacedRuns[j]); @@ -39416,6 +39448,7 @@ If a run decides that itself should be removed, then replacedRuns contains all r void VisitContainer(DocumentContainerRun* run) { if (start == end) return; + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = run->runs.Count() - 1; i >= 0; i--) { Ptr subRun = run->runs[i]; @@ -39429,6 +39462,7 @@ If a run decides that itself should be removed, then replacedRuns contains all r if (replacedRuns.Count() == 0 || subRun != replacedRuns[0]) { run->runs.RemoveAt(i); + // TODO: (enumerable) foreach for (vint j = 0; jruns.Insert(i + j, replacedRuns[j]); @@ -39708,6 +39742,7 @@ Calculate if all text in the specified range has some common styles void VisitContainer(DocumentContainerRun* run) { + // TODO: (enumerable) foreach:reversed for (vint i = run->runs.Count() - 1; i >= 0; i--) { Ptr subRun = run->runs[i]; @@ -39830,6 +39865,7 @@ Calculate if all text in the specified range has a common style name void VisitContainer(DocumentContainerRun* run) { + // TODO: (enumerable) foreach:reversed for (vint i = run->runs.Count() - 1; i >= 0; i--) { Ptr subRun = run->runs[i]; @@ -40014,6 +40050,7 @@ DocumentModel::EditRangeOperations CollectStyleName(paragraph.Obj(), styleNames); } + // TODO: (enumerable) foreach:alterable for(vint i=0;i oldNames, newNames; CopyFrom(oldNames, model->styles.Keys()); CopyFrom(newNames, model->styles.Keys()); + // TODO: (enumerable) foreach:indexed(allow-set) for(vint i=0;ialignment = newEndRuns->alignment; } + + // TODO: (enumerable) foreach for(vint i=0;iruns.Count();i++) { endParagraph->runs.Insert(i, newEndRuns->runs[i]); } + // TODO: (enumerable) foreach:indexed for(vint i=1;i> runs(text.Count()); + // TODO: (enumerable) foreach:indexed for(vint i=0;i paragraph=CopyStyledText(styleRuns, text[i]); @@ -41418,6 +41460,7 @@ DocumentModel stylesElement->name.value=L"Styles"; doc->subNodes.Add(stylesElement); + // TODO: (enumerable) foreach for(vint i=0;i= 0; i--) { loading.Remove(loading.Keys()[i], name); @@ -44781,6 +44826,7 @@ View Model (IFileDialogViewModel) } auto folder = rootFolder; + // TODO: (enumerable) foreach:reversed for (vint i = fragments.Count() - 1; i >= 0; i--) { auto fragment = fragments[i]; @@ -45045,6 +45091,7 @@ View Model (IFileDialogViewModel) } } + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = folderOfUnexistings.Count() - 1; i >= 0; i--) { if (filesystem::Folder(folderOfUnexistings[i]).Exists()) @@ -45142,6 +45189,7 @@ View Model (IFileDialogViewModel) auto&& sExt = WString::Unmanaged(L".") + extension.Value(); vint lExt = sExt.Length(); + // TODO: (enumerable) foreach for (vint i = 0; i < confirmedSelection.Count(); i++) { WString& selection = confirmedSelection[i]; @@ -54583,6 +54631,7 @@ SharedAsyncService { CopyFrom(items, taskItems); taskItems.RemoveRange(0, items.Count()); + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for(vint i=delayItems.Count()-1;i>=0;i--) { Ptr item=delayItems[i]; @@ -54743,6 +54792,7 @@ SharedCallbackService void SharedCallbackService::InvokeGlobalTimer() { + // TODO: (enumerable) foreach for(vint i=0;iGlobalTimer(); @@ -54751,6 +54801,7 @@ SharedCallbackService void SharedCallbackService::InvokeClipboardUpdated() { + // TODO: (enumerable) foreach for(vint i=0;iClipboardUpdated(); @@ -54759,6 +54810,7 @@ SharedCallbackService void SharedCallbackService::InvokeGlobalShortcutKeyActivated(vint id) { + // TODO: (enumerable) foreach for (vint i = 0; i < listeners.Count(); i++) { listeners[i]->GlobalShortcutKeyActivated(id); @@ -54767,6 +54819,7 @@ SharedCallbackService void SharedCallbackService::InvokeNativeWindowCreated(INativeWindow* window) { + // TODO: (enumerable) foreach for(vint i=0;iNativeWindowCreated(window); @@ -54775,6 +54828,7 @@ SharedCallbackService void SharedCallbackService::InvokeNativeWindowDestroying(INativeWindow* window) { + // TODO: (enumerable) foreach for(vint i=0;iNativeWindowDestroying(window); diff --git a/Import/GacUI.h b/Import/GacUI.h index b3cb1c49..305a2386 100644 --- a/Import/GacUI.h +++ b/Import/GacUI.h @@ -1072,8 +1072,6 @@ namespace vl namespace compositions { class GuiGraphicsComposition; - - extern void InvokeOnCompositionStateChanged(compositions::GuiGraphicsComposition* composition); } namespace elements @@ -3945,7 +3943,7 @@ Workflow to C++ Codegen Helpers #endif /*********************************************************************** -.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSCOMPOSITIONBASE.H +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSCOMPOSITION.H ***********************************************************************/ /*********************************************************************** Vczh Library++ 3.0 @@ -3955,8 +3953,8 @@ GacUI::Composition System Interfaces: ***********************************************************************/ -#ifndef VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSCOMPOSITIONBASE -#define VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSCOMPOSITIONBASE +#ifndef VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSCOMPOSITION +#define VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSCOMPOSITION namespace vl @@ -3985,8 +3983,14 @@ namespace vl namespace compositions { + class GuiGraphicsComposition_Trivial; + class GuiGraphicsComposition_Controlled; + class GuiGraphicsComposition_Specialized; + class GuiWindowComposition; class GuiGraphicsHost; + extern void InvokeOnCompositionStateChanged(compositions::GuiGraphicsComposition* composition); + /*********************************************************************** Basic Construction ***********************************************************************/ @@ -3999,11 +4003,14 @@ Basic Construction { typedef collections::List CompositionList; + friend class GuiGraphicsComposition_Trivial; + friend class GuiGraphicsComposition_Controlled; + friend class GuiGraphicsComposition_Specialized; + friend class GuiWindowComposition; friend class controls::GuiControl; friend class GuiGraphicsHost; - friend void InvokeOnCompositionStateChanged(GuiGraphicsComposition* composition); - friend Size InvokeGetMinPreferredClientSizeInternal(GuiGraphicsComposition* composition, bool considerPreferredMinSize); - friend Rect InvokeGetPreferredBoundsInternal(GuiGraphicsComposition* composition, bool considerPreferredMinSize); + + friend void InvokeOnCompositionStateChanged(compositions::GuiGraphicsComposition* composition); public: ///

/// Minimum size limitation. @@ -4027,7 +4034,9 @@ Basic Construction INativeWindow* nativeWindow = nullptr; }; - protected: + private: + bool isRendering = false; + CompositionList children; GuiGraphicsComposition* parent = nullptr; Ptr ownedElement; @@ -4041,29 +4050,27 @@ Basic Construction INativeCursor* associatedCursor = nullptr; INativeWindowListener::HitTestResult associatedHitTestResult = INativeWindowListener::NoDecision; - Margin margin; + protected: Margin internalMargin; Size preferredMinSize; - bool isRendering = false; - virtual void OnControlParentChanged(controls::GuiControl* control); virtual void OnChildInserted(GuiGraphicsComposition* child); virtual void OnChildRemoved(GuiGraphicsComposition* child); virtual void OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent); virtual void OnParentLineChanged(); + virtual void OnCompositionStateChanged(); virtual void OnRenderContextChanged(); void UpdateRelatedHostRecord(GraphicsHostRecord* record); void SetAssociatedControl(controls::GuiControl* control); void InvokeOnCompositionStateChanged(); - virtual Size GetMinPreferredClientSizeInternal(bool considerPreferredMinSize) = 0; - virtual Rect GetPreferredBoundsInternal(bool considerPreferredMinSize) = 0; - + private: static bool SharedPtrDestructorProc(DescriptableObject* obj, bool forceDisposing); - public: + GuiGraphicsComposition(); + public: ~GuiGraphicsComposition(); bool IsRendering(); @@ -4138,9 +4145,6 @@ Basic Construction /// Set is the composition transparent to mouse events. /// Set to true to make this composition transparent to mouse events. void SetTransparentToMouse(bool value); - /// Get the bounds in the top composition space. - /// The bounds in the top composition space. - Rect GetGlobalBounds(); /// Get the associated control. A control is associated to a composition only when the composition represents the bounds of this control. Such a composition usually comes from a control template. /// The associated control. @@ -4174,87 +4178,157 @@ Basic Construction /// The related cursor. INativeCursor* GetRelatedCursor(); - /// Get the margin. - /// The margin. - virtual Margin GetMargin(); - /// Set the margin. - /// The margin. - virtual void SetMargin(Margin value); /// Get the internal margin. /// The internal margin. - virtual Margin GetInternalMargin(); + Margin GetInternalMargin(); /// Set the internal margin. /// The internal margin. - virtual void SetInternalMargin(Margin value); + void SetInternalMargin(Margin value); /// Get the preferred minimum size. /// The preferred minimum size. - virtual Size GetPreferredMinSize(); + Size GetPreferredMinSize(); /// Set the preferred minimum size. /// The preferred minimum size. - virtual void SetPreferredMinSize(Size value); - /// Get the client area. - /// The client area. - virtual Rect GetClientArea(); - /// Force to calculate layout and size immediately - virtual void ForceCalculateSizeImmediately(); + void SetPreferredMinSize(Size value); - /// Get the preferred minimum client size. - /// The preferred minimum client size. - Size GetMinPreferredClientSize(); - /// Get the preferred bounds. - /// The preferred bounds. - Rect GetPreferredBounds(); - - /// Test is the size calculation affected by the parent. - /// Returns true if the size calculation is affected by the parent. - virtual bool IsSizeAffectParent()=0; - /// Get the bounds. - /// The bounds. - virtual Rect GetBounds()=0; - }; - - /// - /// A general implementation for . - /// - class GuiGraphicsSite : public GuiGraphicsComposition, public Description - { - friend Rect InvokeGetBoundsInternal(GuiGraphicsSite* composition, Rect expectedBounds, bool considerPreferredMinSize); protected: - Rect previousBounds; + Size cachedMinSize; + Rect cachedBounds; - /// Calculate the final bounds from an expected bounds. - /// The final bounds according to some configuration like margin, minimum size, etc.. - /// The expected bounds. - virtual Rect GetBoundsInternal(Rect expectedBounds, bool considerPreferredMinSize); + virtual Size Layout_CalculateMinSize() = 0; + virtual Size Layout_CalculateMinClientSizeForParent(Margin parentInternalMargin) = 0; + virtual Rect Layout_CalculateBounds(Size parentSize) = 0; - void UpdatePreviousBounds(Rect bounds); - Size GetMinPreferredClientSizeInternal(bool considerPreferredMinSize)override; - Rect GetPreferredBoundsInternal(bool considerPreferredMinSize)override; + /// + /// Calculate a proper minimum size using all configurations in this class. + /// All children's will be called. + /// All children's will be called. + /// + /// + Size Layout_CalculateMinSizeHelper(); + + /// + /// Update a size that affects and . + /// + /// The minimum size to update + void Layout_SetCachedMinSize(Size value); + + /// + /// Update a bounds that affects and and . + /// + /// The minimum size to update + void Layout_SetCachedBounds(Rect value); + + /// + /// Call and . + /// + void Layout_UpdateMinSize(); + + /// + /// Call and and all children's . + /// + /// + void Layout_UpdateBounds(Size parentSize); public: - GuiGraphicsSite(); - ~GuiGraphicsSite(); - /// Event that will be raised when the final bounds is changed. - compositions::GuiNotifyEvent BoundsChanged; - - bool IsSizeAffectParent()override; + /// Event that will be raised when the minimum size is updated. + compositions::GuiNotifyEvent CachedMinSizeChanged; - /// Get the previous calculated bounds, ignoring any surrounding changes that could affect the bounds. - /// The previous calculated bounds. - Rect GetPreviousCalculatedBounds(); + /// Event that will be raised when the bounds is updated. + compositions::GuiNotifyEvent CachedBoundsChanged; + + /// Get the updated minimum size. + /// The updated minimum size. + Size GetCachedMinSize(); + + /// Get the updated minimum client size. It is the minimum size removing the internal margin. + /// The updated minimum client size. + Size GetCachedMinClientSize(); + + /// Get the updated bounds. + /// The updated bounds. + Rect GetCachedBounds(); + + /// Get the updated client bounds. It is the bounds removing the internal margin. + /// The updated client bounds. + Rect GetCachedClientArea(); + + /// Get the bounds in the top composition space. + /// The bounds in the top composition space. + Rect GetGlobalBounds(); + + /// + /// Force this composition calculate its layout. + /// + void ForceCalculateSizeImmediately(); }; - - /// - /// Represents a composition for the client area in an . - /// - class GuiWindowComposition : public GuiGraphicsSite, public Description - { - public: - GuiWindowComposition(); - ~GuiWindowComposition(); - Rect GetBounds()override; - void SetMargin(Margin value)override; +/*********************************************************************** +Categories +***********************************************************************/ + + /// + /// A trivial composition is a composition that can be placed anywhere needed. + /// This class is not reflectable, it is for classification only. + /// All controlled children's minimum sizes are supposed to be done in . + /// All controlled children's bounds are supposed to be done in . + /// + class GuiGraphicsComposition_Trivial : public GuiGraphicsComposition + { + protected: + GuiGraphicsComposition_Trivial() = default; + }; + + /// + /// A controlled composition is a composition that must be placed inside a certain type of parent composition. + /// Its layout calculation are taken over by its parent. + /// This class is not reflectable, it is for classification only. + /// + class GuiGraphicsComposition_Controlled : public GuiGraphicsComposition + { + protected: + GuiGraphicsComposition_Controlled() = default; + + Size Layout_CalculateMinSize()override + { + // Making Layout_UpdateMinSize does nothing + return cachedMinSize; + } + + Size Layout_CalculateMinClientSizeForParent(Margin parentInternalMargin) override + { + // A controlled composition could affect its parent's layout + // but it is done inside the parent + return { 0,0 }; + } + + Rect Layout_CalculateBounds(Size parentSize) override + { + // Making Layout_UpdateBounds does nothing + return cachedBounds; + } + }; + + /// + /// A specialized composition is a composition that can be placed anywhere needed. + /// But its layout calculation are designed for special purposes. + /// This class is not reflectable, it is for classification only. + /// + class GuiGraphicsComposition_Specialized : public GuiGraphicsComposition + { + protected: + GuiGraphicsComposition_Specialized() = default; + + Size Layout_CalculateMinSize()override + { + return Layout_CalculateMinSizeHelper(); + } + + Size Layout_CalculateMinClientSizeForParent(Margin parentInternalMargin) override + { + // A controlled composition could not affect its parent's layout + return { 0,0 }; + } }; /*********************************************************************** @@ -4283,7 +4357,7 @@ Helper Functions #endif /*********************************************************************** -.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSBASICCOMPOSITION.H +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSBOUNDSCOMPOSITION.H ***********************************************************************/ /*********************************************************************** Vczh Library++ 3.0 @@ -4293,8 +4367,8 @@ GacUI::Composition System Interfaces: ***********************************************************************/ -#ifndef VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSBASICCOMPOSITION -#define VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSBASICCOMPOSITION +#ifndef VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSBOUNDSCOMPOSITION +#define VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSBOUNDSCOMPOSITION namespace vl @@ -4311,30 +4385,25 @@ Basic Compositions /// /// Represents a composition that is free to change the expected bounds. /// - class GuiBoundsComposition : public GuiGraphicsSite, public Description + class GuiBoundsComposition : public GuiGraphicsComposition_Trivial, public Description { protected: - bool sizeAffectParent = true; - Rect compositionBounds; + Rect expectedBounds; Margin alignmentToParent{ -1,-1,-1,-1 }; - Rect GetPreferredBoundsInternal(bool considerPreferredMinSize)override; + Size Layout_CalculateMinSize() override; + Size Layout_CalculateMinClientSizeForParent(Margin parentInternalMargin) override; + Rect Layout_CalculateBounds(Size parentSize) override; public: - GuiBoundsComposition(); - ~GuiBoundsComposition(); + GuiBoundsComposition() = default; + ~GuiBoundsComposition() = default; - /// Get if the parent composition's size calculation is aware of the configuration of this composition. If you want to bind Bounds, PreferredMinSize, AlignmentToParent or other similar properties to some properties of parent compositions, this property should be set to false to prevent from infinite size glowing. - /// Returns true if it is awared. - bool GetSizeAffectParent(); - /// Set if the parent composition's size calculation is aware of the configuration of this composition. - /// Set to true to be awared. - void SetSizeAffectParent(bool value); - - bool IsSizeAffectParent()override; - Rect GetBounds()override; + /// Get the expected bounds. + /// The expected bounds. + Rect GetExpectedBounds(); /// Set the expected bounds. /// The expected bounds. - void SetBounds(Rect value); + void SetExpectedBounds(Rect value); /// Get the alignment to its parent. -1 in each alignment component means that the corressponding side is not aligned to its parent. /// The alignment to its parent. @@ -4352,6 +4421,48 @@ Basic Compositions #endif +/*********************************************************************** +.\APPLICATION\GRAPHICSCOMPOSITIONS\GUIGRAPHICSWINDOWCOMPOSITION.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +GacUI::Composition System + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSCOMPOSITIONBASE +#define VCZH_PRESENTATION_COMPOSITION_GUIGRAPHICSCOMPOSITIONBASE + + +namespace vl +{ + namespace presentation + { + namespace compositions + { + class GuiGraphicsHost; + + /// + /// Represents a composition for the client area in an . + /// + class GuiWindowComposition : public GuiGraphicsComposition_Specialized, public Description + { + friend class GuiGraphicsHost; + protected: + Rect Layout_CalculateBounds(Size parentSize) override; + + public: + GuiWindowComposition() = default; + ~GuiWindowComposition() = default; + }; + } + } +} + +#endif + /*********************************************************************** .\APPLICATION\GRAPHICSHOST\GUIGRAPHICSHOST_ALT.H ***********************************************************************/ @@ -4934,6 +5045,8 @@ namespace vl { namespace compositions { + class GuiWindowComposition; + class GuiTableComposition; class GuiCellComposition; class GuiTableSplitterCompositionBase; @@ -5002,6 +5115,8 @@ Flow Compositions Left, /// Align to the center. Center, + /// Align to the Right. + Right, /// Extend to the entire row. Extend, }; @@ -5014,27 +5129,30 @@ Flow Compositions friend class GuiFlowItemComposition; typedef collections::List ItemCompositionList; + private: + bool layout_invalid = true; + vint layout_lastVirtualWidth = 0; + ItemCompositionList layout_flowItems; + vint layout_minVirtualHeight = 0; + + void Layout_UpdateFlowItemLayout(vint maxVirtualWidth); + Size Layout_UpdateFlowItemLayoutByConstraint(Size constraintSize); + protected: Margin extraMargin; vint rowPadding = 0; vint columnPadding = 0; FlowAlignment alignment = FlowAlignment::Left; - Ptr axis; + Ptr axis = Ptr(new GuiDefaultAxis); - ItemCompositionList flowItems; - collections::Array flowItemBounds; - Rect bounds; - vint minHeight = 0; - bool needUpdate = false; - - void UpdateFlowItemBounds(bool forceUpdate); - void OnBoundsChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments); - void OnChildInserted(GuiGraphicsComposition* child)override; - void OnChildRemoved(GuiGraphicsComposition* child)override; - Size GetMinPreferredClientSizeInternal(bool considerPreferredMinSize)override; + void OnChildInserted(GuiGraphicsComposition* child) override; + void OnChildRemoved(GuiGraphicsComposition* child) override; + void OnCompositionStateChanged() override; + Size Layout_CalculateMinSize() override; + Rect Layout_CalculateBounds(Size parentSize) override; public: - GuiFlowComposition(); - ~GuiFlowComposition(); + GuiFlowComposition() = default; + ~GuiFlowComposition() = default; /// Get all flow items inside the flow composition. /// All flow items inside the flow composition. @@ -5079,9 +5197,6 @@ Flow Compositions /// Set the alignment for rows. /// The alignment. void SetAlignment(FlowAlignment value); - - void ForceCalculateSizeImmediately()override; - Rect GetBounds()override; }; /// @@ -5089,14 +5204,17 @@ Flow Compositions /// struct GuiFlowOption { - /// Base line calculation algorithm + /// + /// Specify the the relationship between this item and the baseline of the row that this item currently belongs to. + /// The height of a row is the maximum value of minimum heights of all items in it. + /// enum BaselineType { - /// By percentage of the height from the top. + /// Top of this item is "percentage" times of the item height above the baseline. Percentage, - /// By a distance from the top. + /// Top of this item is "distance" above the baseline. FromTop, - /// By a distance from the bottom. + /// Bottom of this item is "distance" below the baseline. FromBottom, }; @@ -5113,24 +5231,23 @@ Flow Compositions /// /// Represents a flow item composition of a . /// - class GuiFlowItemComposition : public GuiGraphicsSite, public Description + class GuiFlowItemComposition : public GuiGraphicsComposition_Controlled, public Description { friend class GuiFlowComposition; + private: + GuiFlowComposition* layout_flowParent = nullptr; + Rect layout_virtualBounds; + + void Layout_SetFlowItemBounds(Size contentSize, Rect virtualBounds); protected: - GuiFlowComposition* flowParent; - Rect bounds; Margin extraMargin; GuiFlowOption option; - void OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent)override; - Size GetMinSize(); + void OnParentLineChanged() override; + public: GuiFlowItemComposition(); - ~GuiFlowItemComposition(); - - bool IsSizeAffectParent()override; - Rect GetBounds()override; - void SetBounds(Rect value); + ~GuiFlowItemComposition() = default; /// Get the extra margin for this flow item. An extra margin is used to enlarge the bounds of the flow item, but only the non-extra part will be used for deciding the flow item layout. /// The extra margin for this flow item. @@ -5189,6 +5306,7 @@ GuiResponsiveCompositionBase /// Base class for responsive layout compositions. class GuiResponsiveCompositionBase abstract : public GuiBoundsComposition, public Description { + friend class GuiResponsiveContainerComposition; protected: GuiResponsiveCompositionBase* responsiveParent = nullptr; ResponsiveDirection direction = ResponsiveDirection::Both; @@ -5200,7 +5318,7 @@ GuiResponsiveCompositionBase public: GuiResponsiveCompositionBase(); - ~GuiResponsiveCompositionBase(); + ~GuiResponsiveCompositionBase() = default; /// LevelCount changed event. GuiNotifyEvent LevelCountChanged; @@ -5244,7 +5362,7 @@ GuiResponsiveViewComposition public: GuiResponsiveSharedCollection(GuiResponsiveViewComposition* _view); - ~GuiResponsiveSharedCollection(); + ~GuiResponsiveSharedCollection() = default; }; class GuiResponsiveViewCollection : public collections::ObservableListBase @@ -5259,7 +5377,7 @@ GuiResponsiveViewComposition public: GuiResponsiveViewCollection(GuiResponsiveViewComposition* _view); - ~GuiResponsiveViewCollection(); + ~GuiResponsiveViewCollection() = default; }; /// Represents a composition, which will pick up a shared control and install inside it, when it is displayed by a [T:vl.presentation.compositions.GuiResponsiveViewComposition] @@ -5274,7 +5392,7 @@ GuiResponsiveViewComposition public: GuiResponsiveSharedComposition(); - ~GuiResponsiveSharedComposition(); + ~GuiResponsiveSharedComposition() = default; /// Get the selected shared control. /// The selected shared control. @@ -5342,8 +5460,8 @@ Others void OnResponsiveChildLevelUpdated()override; public: - GuiResponsiveFixedComposition(); - ~GuiResponsiveFixedComposition(); + GuiResponsiveFixedComposition() = default; + ~GuiResponsiveFixedComposition() = default; vint GetLevelCount()override; vint GetCurrentLevel()override; @@ -5368,8 +5486,8 @@ Others bool ChangeLevel(bool levelDown); public: - GuiResponsiveStackComposition(); - ~GuiResponsiveStackComposition(); + GuiResponsiveStackComposition() = default; + ~GuiResponsiveStackComposition() = default; vint GetLevelCount()override; vint GetCurrentLevel()override; @@ -5393,8 +5511,8 @@ Others void OnResponsiveChildLevelUpdated()override; public: - GuiResponsiveGroupComposition(); - ~GuiResponsiveGroupComposition(); + GuiResponsiveGroupComposition() = default; + ~GuiResponsiveGroupComposition() = default; vint GetLevelCount()override; vint GetCurrentLevel()override; @@ -5409,16 +5527,22 @@ GuiResponsiveContainerComposition /// A composition which will automatically tell its target responsive composition to switch between views according to its size. class GuiResponsiveContainerComposition : public GuiBoundsComposition, public Description { - protected: + private: GuiResponsiveCompositionBase* responsiveTarget = nullptr; - Size upperLevelSize; + Size minSizeUpperBound; + Size minSizeLowerBound; + bool testX = false; + bool testY = false; - void AdjustLevel(); - void OnBoundsChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments); + std::strong_ordering Layout_CompareSize(Size first, Size second); + void Layout_AdjustLevelUp(Size containerSize); + void Layout_AdjustLevelDown(Size containerSize); + public: + Rect Layout_CalculateBounds(Size parentSize) override; public: GuiResponsiveContainerComposition(); - ~GuiResponsiveContainerComposition(); + ~GuiResponsiveContainerComposition() = default; /// Get the responsive composition to control. /// The responsive composition to control. @@ -5458,17 +5582,20 @@ namespace vl /// A shared size composition that shares the same size with all other that has a same group name. class GuiSharedSizeItemComposition : public GuiBoundsComposition, public Description { + friend class GuiSharedSizeRootComposition; protected: GuiSharedSizeRootComposition* parentRoot = nullptr; WString group; bool sharedWidth = false; bool sharedHeight = false; + Size originalMinSize; - void Update(); - void OnParentLineChanged()override; + void OnParentLineChanged() override; + Size Layout_CalculateMinSize() override; + Size Layout_CalculateOriginalMinSize(); public: GuiSharedSizeItemComposition(); - ~GuiSharedSizeItemComposition(); + ~GuiSharedSizeItemComposition() = default; /// Get the group name of this item. /// The group name. @@ -5500,14 +5627,14 @@ namespace vl collections::List childItems; void AddSizeComponent(collections::Dictionary& sizes, const WString& group, vint sizeComponent); + void CalculateOriginalMinSizes(); void CollectSizes(collections::Dictionary& widths, collections::Dictionary& heights); void AlignSizes(collections::Dictionary& widths, collections::Dictionary& heights); - public: - GuiSharedSizeRootComposition(); - ~GuiSharedSizeRootComposition(); - void ForceCalculateSizeImmediately()override; - Rect GetBounds()override; + Size Layout_CalculateMinSize() override; + public: + GuiSharedSizeRootComposition() = default; + ~GuiSharedSizeRootComposition() = default; }; } } @@ -5544,7 +5671,7 @@ Specialized Compositions /// /// Represents a composition that is aligned to one border of the parent composition. /// - class GuiSideAlignedComposition : public GuiGraphicsSite, public Description + class GuiSideAlignedComposition : public GuiGraphicsComposition_Specialized, public Description { public: /// The border to align. @@ -5560,12 +5687,15 @@ Specialized Compositions Bottom, }; protected: - Direction direction; - vint maxLength; - double maxRatio; + Direction direction = Top; + vint maxLength = 10; + double maxRatio = 1.0; + + Rect Layout_CalculateBounds(Size parentSize) override; + public: - GuiSideAlignedComposition(); - ~GuiSideAlignedComposition(); + GuiSideAlignedComposition() = default; + ~GuiSideAlignedComposition() = default; /// Get the border to align. /// The border to align. @@ -5585,25 +5715,24 @@ Specialized Compositions /// Set the maximum ratio to limit the size according to the size of the parent. /// The maximum ratio to limit the size according to the size of the parent. void SetMaxRatio(double value); - - bool IsSizeAffectParent()override; - Rect GetBounds()override; }; /// /// Represents a composition that its location and size are decided by the client area of the parent composition by setting ratios. /// - class GuiPartialViewComposition : public GuiGraphicsSite, public Description + class GuiPartialViewComposition : public GuiGraphicsComposition_Specialized, public Description { protected: - double wRatio; - double wPageSize; - double hRatio; - double hPageSize; + double wRatio = 0.0; + double wPageSize = 1.0; + double hRatio = 0.0; + double hPageSize = 1.0; + + Rect Layout_CalculateBounds(Size parentSize) override; public: - GuiPartialViewComposition(); - ~GuiPartialViewComposition(); + GuiPartialViewComposition() = default; + ~GuiPartialViewComposition() = default; /// Get the width ratio to decided the horizontal location. Value in [0, 1-pageSize]. /// The width ratio to decided the horizontal location. @@ -5629,9 +5758,6 @@ Specialized Compositions /// Set the page size to decide the vertical size. Value in [0, 1]. /// The page size to decide the vertical size. void SetHeightPageSize(double value); - - bool IsSizeAffectParent()override; - Rect GetBounds()override; }; } } @@ -5686,28 +5812,30 @@ Stack Compositions /// Stack items is layouted from bottom to top. ReversedVertical, }; + + private: + bool layout_invalid = true; + ItemCompositionList layout_stackItems; + GuiStackItemComposition* layout_ensuringVisibleStackItem = nullptr; + vint layout_adjustment = 0; + Size layout_stackItemTotalSize; + + void Layout_UpdateStackItemMinSizes(); + void Layout_UpdateStackItemBounds(Rect contentBounds); protected: + Direction direction = Horizontal; - ItemCompositionList stackItems; - GuiStackItemComposition* ensuringVisibleStackItem = nullptr; - vint padding = 0; - vint adjustment = 0; Margin extraMargin; - collections::Array stackItemBounds; - Size stackItemTotalSize; - Rect previousBounds; - - void UpdateStackItemBounds(); - void EnsureStackItemVisible(); - void OnBoundsChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments); - void OnChildInserted(GuiGraphicsComposition* child)override; - void OnChildRemoved(GuiGraphicsComposition* child)override; - Size GetMinPreferredClientSizeInternal(bool considerPreferredMinSize)override; + void OnChildInserted(GuiGraphicsComposition* child) override; + void OnChildRemoved(GuiGraphicsComposition* child) override; + void OnCompositionStateChanged() override; + Size Layout_CalculateMinSize() override; + Rect Layout_CalculateBounds(Size parentSize) override; public: - GuiStackComposition(); - ~GuiStackComposition(); + GuiStackComposition() = default; + ~GuiStackComposition() = default; /// Get all stack items inside the stack composition. /// All stack items inside the stack composition. @@ -5731,9 +5859,6 @@ Stack Compositions /// The stack item padding. void SetPadding(vint value); - void ForceCalculateSizeImmediately()override; - Rect GetBounds()override; - /// Get the extra margin inside the stack composition. /// The extra margin inside the stack composition. Margin GetExtraMargin(); @@ -5752,25 +5877,22 @@ Stack Compositions /// /// Represents a stack item composition of a . /// - class GuiStackItemComposition : public GuiGraphicsSite, public Description + class GuiStackItemComposition : public GuiGraphicsComposition_Controlled, public Description { friend class GuiStackComposition; + private: + GuiStackComposition* layout_stackParent = nullptr; + Point layout_virtualOffset; + + void Layout_SetStackItemBounds(Rect contentBounds, Point virtualOffset); + protected: - GuiStackComposition* stackParent; - Rect bounds; Margin extraMargin; - void OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent)override; - Size GetMinSize(); + void OnParentLineChanged() override; public: GuiStackItemComposition(); - ~GuiStackItemComposition(); - - bool IsSizeAffectParent()override; - Rect GetBounds()override; - /// Set the expected bounds of a stack item. In most of the cases only the size of the bounds is used. - /// The expected bounds of a stack item. - void SetBounds(Rect value); + ~GuiStackItemComposition() = default; /// Get the extra margin for this stack item. An extra margin is used to enlarge the bounds of the stack item, but only the non-extra part will be used for deciding the stack item layout. /// The extra margin for this stack item. @@ -5815,6 +5937,7 @@ namespace vl protected: ItemStyleProperty itemTemplate; Ptr itemSource; + description::Value itemContext; Ptr itemChangedHandler; virtual vint GetRepeatCompositionCount() = 0; @@ -5835,6 +5958,8 @@ namespace vl GuiItemNotifyEvent ItemInserted; /// An event called before a new item is removed. GuiItemNotifyEvent ItemRemoved; + /// Context changed event. This event raises when the font of the control is changed. + GuiNotifyEvent ContextChanged; /// Get the item style provider. /// The item style provider. @@ -5849,6 +5974,13 @@ namespace vl /// Set the item source. /// The item source. Null is acceptable if you want to clear all data. void SetItemSource(Ptr value); + + /// Get the context of this composition. The all item templates (if it has) will see this context property. + /// The context of this composition. + description::Value GetContext(); + /// Set the context of this composition. + /// The context of this composition. + void SetContext(const description::Value& value); }; /// Bindable stack composition. @@ -5859,7 +5991,10 @@ namespace vl GuiGraphicsComposition* GetRepeatComposition(vint index)override; GuiGraphicsComposition* InsertRepeatComposition(vint index)override; GuiGraphicsComposition* RemoveRepeatComposition(vint index)override; + public: + GuiRepeatStackComposition(); + ~GuiRepeatStackComposition(); }; /// Bindable flow composition. @@ -5870,7 +6005,10 @@ namespace vl GuiGraphicsComposition* GetRepeatComposition(vint index)override; GuiGraphicsComposition* InsertRepeatComposition(vint index)override; GuiGraphicsComposition* RemoveRepeatComposition(vint index)override; + public: + GuiRepeatFlowComposition(); + ~GuiRepeatFlowComposition(); }; } } @@ -5909,14 +6047,22 @@ Table Compositions /// struct GuiCellOption { - /// Sizing algorithm + /// Size configuration enum ComposeType { - /// Set the size to an absolute value. + /// + /// Set the size to an absolute value. + /// The size will not change even if affected cell's minimum size is bigger that this. + /// Absolute, - /// Set the size to a percentage number of the whole table. + /// + /// Set the size to a percentage number of the whole table. + /// Percentage, - /// Set the size to the minimum size of the cell element. + /// + /// Set the size to the minimum size of the cell element. + /// Only cells that take one row or column at this position are considered. + /// MinSize, }; @@ -5977,59 +6123,65 @@ Table Compositions friend class GuiTableSplitterCompositionBase; friend class GuiRowSplitterComposition; friend class GuiColumnSplitterComposition; + private: + bool layout_invalid = true; + bool layout_invalidCellBounds = false; + Size layout_lastTableSize; + + collections::Array layout_cellCompositions; + collections::Array layout_cellBounds; + collections::Array layout_rowOffsets; + collections::Array layout_columnOffsets; + collections::Array layout_rowSizes; + collections::Array layout_columnSizes; + vint layout_rowTotal = 0; + vint layout_columnTotal = 0; + vint layout_rowTotalWithPercentage = 0; + vint layout_columnTotalWithPercentage = 0; + vint layout_rowExtending = 0; + vint layout_columnExtending = 0; + + Rect Layout_CalculateCellArea(Rect tableBounds); + void Layout_UpdateCellBoundsInternal( + collections::Array& dimSizes, + vint& dimSize, + vint& dimSizeWithPercentage, + collections::Array& dimOptions, + vint GuiTableComposition::* dim1, + vint GuiTableComposition::* dim2, + vint (*getSize)(Size), + vint (*getLocation)(GuiCellComposition*), + vint (*getSpan)(GuiCellComposition*), + vint (*getRow)(vint, vint), + vint (*getCol)(vint, vint) + ); + void Layout_UpdateCellBoundsPercentages( + collections::Array& dimSizes, + vint dimSize, + vint maxDimSize, + collections::Array& dimOptions + ); + vint Layout_UpdateCellBoundsOffsets( + collections::Array& offsets, + collections::Array& sizes, + vint max + ); protected: - vint rows; - vint columns; - vint cellPadding; - bool borderVisible; - vint rowExtending; - vint columnExtending; + vint rows = 0; + vint columns = 0; + vint cellPadding = 0; + bool borderVisible = true; collections::Array rowOptions; collections::Array columnOptions; - collections::Array cellCompositions; - - collections::Array cellBounds; - collections::Array rowOffsets; - collections::Array columnOffsets; - collections::Array rowSizes; - collections::Array columnSizes; - Size tableContentMinSize; - - vint GetSiteIndex(vint _rows, vint _columns, vint _row, vint _column); - void SetSitedCell(vint _row, vint _column, GuiCellComposition* cell); - - void UpdateCellBoundsInternal( - collections::Array& dimSizes, - vint& dimSize, - vint& dimSizeWithPercentage, - collections::Array& dimOptions, - vint GuiTableComposition::* dim1, - vint GuiTableComposition::* dim2, - vint (*getSize)(Size), - vint (*getLocation)(GuiCellComposition*), - vint (*getSpan)(GuiCellComposition*), - vint (*getRow)(vint, vint), - vint (*getCol)(vint, vint), - vint maxPass - ); - void UpdateCellBoundsPercentages( - collections::Array& dimSizes, - vint dimSize, - vint maxDimSize, - collections::Array& dimOptions - ); - vint UpdateCellBoundsOffsets( - collections::Array& offsets, - collections::Array& sizes, - vint max - ); - - void OnRenderContextChanged()override; - Size GetMinPreferredClientSizeInternal(bool considerPreferredMinSize)override; + vint GetSiteIndex(vint _rows, vint _columns, vint _row, vint _column); + void SetSitedCell(vint _row, vint _column, GuiCellComposition* cell); + void OnCompositionStateChanged() override; + Size Layout_CalculateMinSize() override; + Rect Layout_CalculateBounds(Size parentSize) override; public: GuiTableComposition(); - ~GuiTableComposition(); + ~GuiTableComposition() = default; /// Event that will be raised with row numbers, column numbers or options are changed. compositions::GuiNotifyEvent ConfigChanged; @@ -6080,29 +6232,21 @@ Table Compositions /// Set the border visibility. /// Set to true to let the border thickness equal to the cell padding, otherwise zero. void SetBorderVisible(bool value); - /// Get the cell area in the space of the table's parent composition's client area. - /// The cell area. - Rect GetCellArea(); - /// Update the sizing of the table and cells after all rows' and columns' sizing options are prepared. - void UpdateCellBounds(); - - void ForceCalculateSizeImmediately()override; - Rect GetBounds()override; }; /// /// Represents a cell composition of a . /// - class GuiCellComposition : public GuiGraphicsSite, public Description + class GuiCellComposition : public GuiGraphicsComposition_Controlled, public Description { friend class GuiTableComposition; + private: + GuiTableComposition* layout_tableParent = nullptr; protected: - vint row; - vint rowSpan; - vint column; - vint columnSpan; - GuiTableComposition* tableParent; - Size lastPreferredSize; + vint row = -1; + vint rowSpan = 1; + vint column = -1; + vint columnSpan = 1; void ClearSitedCells(GuiTableComposition* table); void SetSitedCells(GuiTableComposition* table); @@ -6110,9 +6254,10 @@ Table Compositions bool SetSiteInternal(vint _row, vint _column, vint _rowSpan, vint _columnSpan); void OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent)override; void OnTableRowsAndColumnsChanged(); + void Layout_SetCellBounds(); public: GuiCellComposition(); - ~GuiCellComposition(); + ~GuiCellComposition() = default; /// Get the owner table composition. /// The owner table composition. @@ -6137,16 +6282,14 @@ Table Compositions /// The total numbers of acrossed rows for this cell composition. /// The total numbers of acrossed columns for this cell composition. bool SetSite(vint _row, vint _column, vint _rowSpan, vint _columnSpan); - - Rect GetBounds()override; }; - class GuiTableSplitterCompositionBase : public GuiGraphicsSite, public Description + class GuiTableSplitterCompositionBase : public GuiGraphicsComposition_Specialized, public Description { protected: - GuiTableComposition* tableParent; + GuiTableComposition* tableParent = nullptr; - bool dragging; + bool dragging = false; Point draggingPoint; void OnParentChanged(GuiGraphicsComposition* oldParent, GuiGraphicsComposition* newParent)override; @@ -6174,7 +6317,7 @@ Table Compositions ); public: GuiTableSplitterCompositionBase(); - ~GuiTableSplitterCompositionBase(); + ~GuiTableSplitterCompositionBase() = default; /// Get the owner table composition. /// The owner table composition. @@ -6187,12 +6330,13 @@ Table Compositions class GuiRowSplitterComposition : public GuiTableSplitterCompositionBase, public Description { protected: - vint rowsToTheTop; + vint rowsToTheTop = 0; void OnMouseMove(GuiGraphicsComposition* sender, GuiMouseEventArgs& arguments); + Rect Layout_CalculateBounds(Size parentSize) override; public: GuiRowSplitterComposition(); - ~GuiRowSplitterComposition(); + ~GuiRowSplitterComposition() = default; /// Get the number of rows that above the splitter. /// The number of rows that above the splitter. @@ -6200,8 +6344,6 @@ Table Compositions /// Set the number of rows that above the splitter. /// The number of rows that above the splitter void SetRowsToTheTop(vint value); - - Rect GetBounds()override; }; /// @@ -6210,12 +6352,13 @@ Table Compositions class GuiColumnSplitterComposition : public GuiTableSplitterCompositionBase, public Description { protected: - vint columnsToTheLeft; + vint columnsToTheLeft = 0; void OnMouseMove(GuiGraphicsComposition* sender, GuiMouseEventArgs& arguments); + Rect Layout_CalculateBounds(Size parentSize) override; public: GuiColumnSplitterComposition(); - ~GuiColumnSplitterComposition(); + ~GuiColumnSplitterComposition() = default; /// Get the number of columns that before the splitter. /// The number of columns that before the splitter. @@ -6223,8 +6366,6 @@ Table Compositions /// Set the number of columns that before the splitter. /// The number of columns that before the splitter void SetColumnsToTheLeft(vint value); - - Rect GetBounds()override; }; } } @@ -6268,6 +6409,11 @@ namespace vl { namespace presentation { + namespace compositions + { + extern void InvokeOnCompositionStateChanged(compositions::GuiGraphicsComposition* composition); + } + namespace elements { @@ -6986,6 +7132,7 @@ Window CopyFrom(remainings, orderedWindows); orderedWindows.Clear(); + // TODO: (enumerable) foreach:reversed for (vint i = windows.Count() - 1; i >= 0; i--) { orderedWindows.Add(windows[i]); @@ -9096,7 +9243,7 @@ Basic Construction /// The font to render the text. virtual const FontProperties& GetDisplayFont(); /// Get the context of this control. The control template and all item templates (if it has) will see this context property. - /// The context of this context. + /// The context of this control. virtual description::Value GetContext(); /// Set the context of this control. /// The context of this control. @@ -13280,13 +13427,13 @@ Scroll View Ptr vScrollHandler; Ptr hWheelHandler; Ptr vWheelHandler; - Ptr containerBoundsChangedHandler; + Ptr containerCachedBoundsChangedHandler; bool horizontalAlwaysVisible = true; bool verticalAlwaysVisible = true; void UpdateDisplayFont()override; - void OnContainerBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void OnContainerCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnHorizontalScroll(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnVerticalScroll(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnHorizontalWheel(compositions::GuiGraphicsComposition* sender, compositions::GuiMouseEventArgs& arguments); @@ -13688,7 +13835,7 @@ List Control Ptr InstallStyle(ItemStyle* style, vint itemIndex, compositions::GuiBoundsComposition* itemComposition); ItemStyle* UninstallStyle(vint index); - void OnStyleBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void OnStyleCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); public: ItemCallback(GuiListControl* _listControl); ~ItemCallback(); @@ -13757,7 +13904,7 @@ List Control collections::Dictionary> visibleStyles; void UpdateDisplayFont()override; - void OnClientBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void OnClientCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnVisuallyEnabledChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnContextChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnItemMouseEvent(compositions::GuiItemMouseEvent& itemEvent, ItemStyle* style, compositions::GuiGraphicsComposition* sender, compositions::GuiMouseEventArgs& arguments); @@ -14146,7 +14293,7 @@ Predefined ItemArranger vint pim_itemHeight = 0; protected: - vint itemHeight; + vint itemHeight = 1; void CalculateRange(vint itemHeight, Rect bounds, vint& rows, vint& startColumn); @@ -17438,7 +17585,7 @@ ComboBox Base protected: IGuiMenuService::Direction GetSubMenuDirection()override; - void OnBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void OnCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); public: /// Create a control with a specified default theme. /// The theme name for retriving a default control template. @@ -17498,7 +17645,7 @@ ComboBox with GuiListControl void OnVisuallyEnabledChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnAfterSubMenuOpening(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnListControlAdoptedSizeInvalidated(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); - void OnListControlBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void OnListControlCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnListControlItemMouseDown(compositions::GuiGraphicsComposition* sender, compositions::GuiItemMouseEventArgs& arguments); void OnKeyDown(compositions::GuiGraphicsComposition* sender, compositions::GuiKeyEventArgs& arguments); @@ -17873,7 +18020,7 @@ ListViewColumnItemArranger vint splitterLatestX = 0; void ColumnClicked(vint index, compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); - void ColumnBoundsChanged(vint index, compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void ColumnCachedBoundsChanged(vint index, compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void ColumnHeaderSplitterLeftButtonDown(compositions::GuiGraphicsComposition* sender, compositions::GuiMouseEventArgs& arguments); void ColumnHeaderSplitterLeftButtonUp(compositions::GuiGraphicsComposition* sender, compositions::GuiMouseEventArgs& arguments); void ColumnHeaderSplitterMouseMove(compositions::GuiGraphicsComposition* sender, compositions::GuiMouseEventArgs& arguments); @@ -20243,7 +20390,7 @@ Ribbon Containers bool IsAltAvailable()override; compositions::IGuiAltActionHost* GetActivatingAltHost()override; - void OnBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void OnCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnTextChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnBeforeSwitchingView(compositions::GuiGraphicsComposition* sender, compositions::GuiItemEventArgs& arguments); void OnBeforeSubMenuOpening(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); @@ -20671,7 +20818,7 @@ Ribbon Gallery List void OnItemListSelectionChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnItemListItemMouseEnter(compositions::GuiGraphicsComposition* sender, compositions::GuiItemEventArgs& arguments); void OnItemListItemMouseLeave(compositions::GuiGraphicsComposition* sender, compositions::GuiItemEventArgs& arguments); - void OnBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); + void OnCachedBoundsChanged(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnRequestedDropdown(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnRequestedScrollUp(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); void OnRequestedScrollDown(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments); diff --git a/Import/GacUICompiler.cpp b/Import/GacUICompiler.cpp index 0fb005e5..d6208adf 100644 --- a/Import/GacUICompiler.cpp +++ b/Import/GacUICompiler.cpp @@ -96,6 +96,7 @@ namespace vl return nullptr; } + // TODO: (enumerable) foreach on dictionary for (auto [fileName, index] : indexed(output->cppFiles.Keys())) { WString code = output->cppFiles.Values()[index]; @@ -658,6 +659,7 @@ GuiInstanceGradientAnimation::InitStruct tds.Add(td); auto ref = Ptr(new WfConstructorExpression); + // TODO: (enumerable) foreach:alterable for (vint i = 0; i < tds.Count(); i++) { auto currentTd = tds[i]; @@ -2167,6 +2169,7 @@ GuiDefaultInstanceLoader block->statements.Add(stat); } + // TODO: (enumerable) foreach for (vint i = 0; i < values.Count(); i++) { auto refCollection = Ptr(new WfReferenceExpression); @@ -2549,6 +2552,7 @@ GuiInstanceLoaderManager void GetVirtualTypes(collections::List& typeNames)override { + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < typeInfos.Count(); i++) { if (typeInfos.Values()[i]->parentTypeName != GlobalStringKey::Empty) @@ -3973,6 +3977,7 @@ GuiDataProcessorDeserializer inferExpr->type = funcType; funcType->result = CopyType(decl->returnType); + // TODO: (enumerable) Linq:Select for (vint i = 0; i < decl->arguments.Count(); i++) { funcType->arguments.Add(CopyType(itemType)); @@ -4180,6 +4185,7 @@ namespace vl codes.Add(code); }; + // TODO: (enumerable) Linq:Select for (vint i = 0; i < compiled->modules.Count(); i++) { manager->AddModule(compiled->modules[i].module); @@ -4203,6 +4209,7 @@ namespace vl } else { + // TODO: (enumerable) foreach for (vint i = 0; i < compiled->modules.Count(); i++) { auto module = compiled->modules[i]; @@ -4212,6 +4219,7 @@ namespace vl } auto sp = Workflow_GetScriptPosition(context); + // TODO: (enumerable) foreach for (vint i = 0; i < manager->errors.Count(); i++) { auto error = manager->errors[i]; @@ -4312,6 +4320,7 @@ Shared Script Type Resolver (Script) Workflow_GenerateAssembly(context, Path_Shared, errors, false, context.compilerCallback); if (auto compiled = Workflow_GetModule(context, Path_Shared, {})) { + // TODO: (enumerable) foreach for (vint i = 0; i < compiled->modules.Count(); i++) { auto& module = compiled->modules[i]; @@ -4474,6 +4483,7 @@ Instance Type Resolver (Instance) L"\" should have the class name specified in the ref.Class attribute.")); } + // TODO: (enumerable) Linq:Take for (auto [localized, index] : indexed(From(obj->localizeds).Where([](Ptr ls) {return ls->defaultStrings; })) ) @@ -5290,6 +5300,7 @@ GuiInstanceLocalizedStringsBase } else { + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < textDesc->parameters.Count(); i++) { auto defaultParameter = defaultDesc->parameters[defaultDesc->positions[i]]; @@ -5369,6 +5380,7 @@ GuiInstanceLocalizedStringsBase func->anonymity = WfFunctionAnonymity::Named; func->name.value = functionName; func->returnType = GetTypeFromTypeInfo(TypeInfoRetriver::CreateTypeInfo().Obj()); + // TODO: (enumerable) foreach for (vint i = 0; i < textDesc->positions.Count(); i++) { auto type = textDesc->parameters[textDesc->positions[i]]; @@ -5506,6 +5518,7 @@ GuiInstanceLocalizedStringsBase auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < textDesc->parameters.Count(); i++) { auto varDesc = Ptr(new WfVariableDeclaration); @@ -5523,6 +5536,7 @@ GuiInstanceLocalizedStringsBase { Ptr resultExpr; + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < textDesc->texts.Count(); i++) { if (textDesc->texts[i] != L"") @@ -6342,6 +6356,7 @@ GuiAttSetterRepr { GuiValueRepr::CloneBody(repr); + // TODO: (enumerable) foreach on dictionary for (auto [name, index] : indexed(setters.Keys())) { auto src = setters.Values()[index]; @@ -6357,6 +6372,7 @@ GuiAttSetterRepr repr->setters.Add(name, dst); } + // TODO: (enumerable) foreach on dictionary for (auto [name, index] : indexed(eventHandlers.Keys())) { auto src = eventHandlers.Values()[index]; @@ -6371,6 +6387,7 @@ GuiAttSetterRepr repr->eventHandlers.Add(name, dst); } + // TODO: (enumerable) foreach on dictionary for (auto [name, index] : indexed(environmentVariables.Keys())) { auto src = environmentVariables.Values()[index]; @@ -6407,6 +6424,7 @@ GuiAttSetterRepr xml->attributes.Add(attName); } + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < setters.Count(); i++) { auto key = setters.Keys()[i]; @@ -6468,6 +6486,7 @@ GuiAttSetterRepr } } + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < eventHandlers.Count(); i++) { auto key = eventHandlers.Keys()[i]; @@ -6488,6 +6507,7 @@ GuiAttSetterRepr } } + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < environmentVariables.Count(); i++) { auto key = environmentVariables.Keys()[i]; @@ -7047,6 +7067,7 @@ GuiInstanceContext attClass->value.value = className; xmlInstance->attributes.Add(attClass); + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < namespaces.Count(); i++) { auto key = namespaces.Keys()[i]; @@ -7060,6 +7081,7 @@ GuiInstanceContext } xmlInstance->attributes.Add(xmlns); + // TODO: (enumerable) Linq:Aggregate for (vint j = 0; j < value->namespaces.Count(); j++) { auto ns = value->namespaces[j]; @@ -7133,6 +7155,7 @@ GuiInstanceContext attStyles->name.value = L"ref.Styles"; xmlInstance->attributes.Add(attStyles); + // TODO: (enumerable) Linq:Aggregate for (vint j = 0; j < stylePaths.Count(); j++) { if (j != 0) @@ -7511,6 +7534,7 @@ GuiCompositionInstanceLoader { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { const auto& values = arguments.GetByIndex(index); @@ -7669,6 +7693,7 @@ GuiTableCompositionInstanceLoader { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { if (prop == _Rows) @@ -7703,6 +7728,7 @@ GuiTableCompositionInstanceLoader block->statements.Add(stat); } + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < rows.Count(); i++) { auto refComposition = Ptr(new WfReferenceExpression); @@ -7725,6 +7751,7 @@ GuiTableCompositionInstanceLoader block->statements.Add(stat); } + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < columns.Count(); i++) { auto refComposition = Ptr(new WfReferenceExpression); @@ -7798,6 +7825,7 @@ GuiCellCompositionInstanceLoader { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { if (prop == _Site) @@ -8028,6 +8056,7 @@ GuiDocumentItemInstanceLoader { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { const auto& values = arguments.GetByIndex(index); @@ -8119,6 +8148,7 @@ GuiDocumentInstanceLoaderBase { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { const auto& values = arguments.GetByIndex(index); @@ -8384,6 +8414,7 @@ GuiTreeViewInstanceLoader { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { if (prop == _Nodes) @@ -8560,6 +8591,7 @@ GuiTreeNodeInstanceLoader { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { if (prop == GlobalStringKey::Empty) @@ -8793,6 +8825,7 @@ GuiControlInstanceLoader { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { const auto& values = arguments.GetByIndex(index); @@ -9258,6 +9291,7 @@ namespace vl { auto block = Ptr(new WfBlockStatement); + // TODO: (enumerable) foreach on group for (auto [prop, index] : indexed(arguments.Keys())) { const auto& values = arguments.GetByIndex(index); @@ -9640,6 +9674,7 @@ ExecuteQueryVisitor { if (setter) { + // TODO: (enumerable) foreach on group for (auto [attribute, index] : indexed(setter->setters.Keys())) { auto setterValue = setter->setters.Values()[index]; @@ -9751,6 +9786,7 @@ ApplyStyle void ApplyStyleInternal(Ptr src, Ptr dst) { + // TODO: (enumerable) foreach on dictionary for (auto [attribute, srcIndex] : indexed(src->setters.Keys())) { auto srcValue = src->setters.Values()[srcIndex]; @@ -9776,6 +9812,7 @@ ApplyStyle } } + // TODO: (enumerable) foreach for (auto [eventName, srcIndex] : indexed(src->eventHandlers.Keys())) { if (!dst->eventHandlers.Keys().Contains(eventName)) @@ -9785,6 +9822,7 @@ ApplyStyle } } + // TODO: (enumerable) foreach for (auto [varName, srcIndex] : indexed(src->environmentVariables.Keys())) { if (!dst->environmentVariables.Keys().Contains(varName)) @@ -10601,6 +10639,7 @@ WorkflowEventNamesVisitor void Visit(GuiAttSetterRepr* repr)override { + // TODO: (enumerable) foreach on dictionary for (auto [setter, index] : indexed(repr->setters.Values())) { auto loader = GetInstanceLoaderManager()->GetLoader(resolvedTypeInfo.typeName); @@ -10639,6 +10678,7 @@ WorkflowEventNamesVisitor } } + // TODO: (enumerable) foreach on dictionary for (auto [handler, index] : indexed(repr->eventHandlers.Values())) { if (handler->binding == GlobalStringKey::Empty) @@ -10994,6 +11034,7 @@ Workflow_GenerateInstanceClass CopyFrom(unprocessed, memberDecls); ReplaceDeclImplVisitor visitor(notImplemented, unprocessed); + // TODO: (enumerable) foreach for (vint i = 0; i < unprocessed.Count(); i++) { unprocessed[i]->Accept(&visitor); @@ -11019,6 +11060,7 @@ Workflow_GenerateInstanceClass call->type = CopyType(instanceClass->baseTypes[0]); baseTypeContext = baseTypeResourceItem->GetContent().Cast(); + // TODO: (enumerable) foreach for (auto parameter : baseTypeContext->parameters) { auto parameterTypeInfoTuple = getDefaultType(parameter->className.ToString()); @@ -11839,6 +11881,7 @@ WorkflowReferenceNamesVisitor auto loader = GetInstanceLoaderManager()->GetLoader(resolvedTypeInfo.typeName); + // TODO: (enumerable) foreach on dictionary for (auto [setter, index] : indexed(repr->setters.Values())) { List possibleInfos; @@ -12130,6 +12173,7 @@ WorkflowReferenceNamesVisitor for (vint i = 0; i < candidatePropertyTypeInfos.Count(); i++) { const auto& typeInfos = candidatePropertyTypeInfos[i].info->acceptableTypes; + // TODO: (enumerable) foreach for (vint j = 0; j < typeInfos.Count(); j++) { if (resolvedTypeInfo.typeInfo->GetTypeDescriptor()->CanConvertTo(typeInfos[j]->GetTypeDescriptor())) @@ -12153,9 +12197,11 @@ WorkflowReferenceNamesVisitor + resolvedTypeInfo.typeName.ToString() + L"\" because it only accepts value of the following types: "; + // TODO: (enumerable) foreach for (vint i = 0; i < candidatePropertyTypeInfos.Count(); i++) { const auto& typeInfos = candidatePropertyTypeInfos[i].info->acceptableTypes; + // TODO: (enumerable) LinqLAggregate for (vint j = 0; j < typeInfos.Count(); j++) { if (i != 0 || j != 0) @@ -12218,6 +12264,7 @@ WorkflowReferenceNamesVisitor { List propertyNames; loader->GetPropertyNames(precompileContext, resolvedTypeInfo, propertyNames); + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = propertyNames.Count() - 1; i >= 0; i--) { auto info = loader->GetPropertyType(precompileContext, { resolvedTypeInfo, propertyNames[i] }); @@ -12498,6 +12545,7 @@ WorkflowGenerateBindingVisitor { WORKFLOW_ENVIRONMENT_VARIABLE_ADD + // TODO: (enumerable) foreach on dictionary for (auto [setter, index] : indexed(repr->setters.Values())) { auto propertyName = repr->setters.Keys()[index]; @@ -12518,6 +12566,7 @@ WorkflowGenerateBindingVisitor } } + // TODO: (enumerable) foreach on dictionary for (auto [handler, index] : indexed(repr->eventHandlers.Values())) { if (reprTypeInfo.typeInfo) @@ -12789,6 +12838,7 @@ WorkflowGenerateCreatingVisitor else if (errorCount == errors.Count()) { WString propNames; + // TODO: (enumerable) Linq:Aggregate for (auto [pairedProp, propIndex] : indexed(pairedProps)) { if (propIndex > 0)propNames += L", "; @@ -12819,6 +12869,7 @@ WorkflowGenerateCreatingVisitor WORKFLOW_ENVIRONMENT_VARIABLE_ADD Group usedProps; + // TODO: (enumerable) foreach:reversed on dictionary for (auto prop : From(repr->setters.Keys()).Reverse()) { auto setter = repr->setters[prop]; @@ -12869,6 +12920,7 @@ WorkflowGenerateCreatingVisitor { WORKFLOW_ENVIRONMENT_VARIABLE_ADD + // TODO: (enumerable) foreach on dictionary for (auto [prop, index] : indexed(repr->setters.Keys())) { auto setter = repr->setters.Values()[index]; @@ -13394,6 +13446,7 @@ Workflow_GenerateEventHandler auto expectedType = GetTypeDescriptor(); List types; types.Add(argumentType); + // TODO: (enumerable) foreach for (vint i = 0; i < types.Count(); i++) { auto type = types[i]; @@ -13708,6 +13761,7 @@ Variable void Workflow_CreateVariablesForReferenceValues(Ptr ctorClass, types::ResolvingResult& resolvingResult) { const auto& typeInfos = resolvingResult.typeInfos; + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < typeInfos.Count(); i++) { auto key = typeInfos.Keys()[i]; @@ -13744,6 +13798,7 @@ Parser if (availableAfter.row != 0 || availableAfter.column != 0) { + // TODO: (enumerable) Linq:Skip for (vint i = errorCount; i < errors.Count(); i++) { auto& error = errors[i]; diff --git a/Import/GacUIReflection.cpp b/Import/GacUIReflection.cpp index 33df9a91..1ad41c62 100644 --- a/Import/GacUIReflection.cpp +++ b/Import/GacUIReflection.cpp @@ -1187,6 +1187,7 @@ Type Declaration (Extra) BEGIN_ENUM_ITEM(FlowAlignment) ENUM_CLASS_ITEM(Left) ENUM_CLASS_ITEM(Center) + ENUM_CLASS_ITEM(Right) ENUM_CLASS_ITEM(Extend) END_ENUM_ITEM(FlowAlignment) @@ -1269,7 +1270,6 @@ Type Declaration (Class) ***********************************************************************/ BEGIN_CLASS_MEMBER(GuiGraphicsComposition) - CLASS_MEMBER_EXTERNALMETHOD(SafeDelete, NO_PARAMETER, void(GuiGraphicsComposition::*)(), vl::presentation::compositions::SafeDeleteComposition) CLASS_MEMBER_GUIEVENT_COMPOSITION(leftButtonDown) @@ -1303,7 +1303,6 @@ Type Declaration (Class) CLASS_MEMBER_PROPERTY_FAST(Visible) CLASS_MEMBER_PROPERTY_READONLY_FAST(EventuallyVisible) CLASS_MEMBER_PROPERTY_FAST(MinSizeLimitation) - CLASS_MEMBER_PROPERTY_READONLY_FAST(GlobalBounds) CLASS_MEMBER_PROPERTY_FAST(TransparentToMouse) CLASS_MEMBER_PROPERTY_READONLY_FAST(AssociatedControl) CLASS_MEMBER_PROPERTY_FAST(AssociatedCursor) @@ -1311,13 +1310,8 @@ Type Declaration (Class) CLASS_MEMBER_PROPERTY_READONLY_FAST(RelatedControl) CLASS_MEMBER_PROPERTY_READONLY_FAST(RelatedControlHost) CLASS_MEMBER_PROPERTY_READONLY_FAST(RelatedCursor) - CLASS_MEMBER_PROPERTY_FAST(Margin) CLASS_MEMBER_PROPERTY_FAST(InternalMargin) CLASS_MEMBER_PROPERTY_FAST(PreferredMinSize) - CLASS_MEMBER_PROPERTY_READONLY_FAST(ClientArea) - CLASS_MEMBER_PROPERTY_READONLY_FAST(MinPreferredClientSize) - CLASS_MEMBER_PROPERTY_READONLY_FAST(PreferredBounds) - CLASS_MEMBER_PROPERTY_READONLY_FAST(Bounds) CLASS_MEMBER_METHOD_RENAME(GetChildren, Children, NO_PARAMETER) CLASS_MEMBER_PROPERTY_READONLY(Children, GetChildren) @@ -1328,28 +1322,26 @@ Type Declaration (Class) CLASS_MEMBER_METHOD(MoveChild, {L"child" _ L"newIndex"}) CLASS_MEMBER_METHOD(Render, {L"size"}) CLASS_MEMBER_METHOD(FindComposition, {L"location" _ L"forMouseEvent"}) - CLASS_MEMBER_METHOD(ForceCalculateSizeImmediately, NO_PARAMETER) - CLASS_MEMBER_METHOD(IsSizeAffectParent, NO_PARAMETER) + + CLASS_MEMBER_GUIEVENT(CachedMinSizeChanged) + CLASS_MEMBER_GUIEVENT(CachedBoundsChanged) + CLASS_MEMBER_PROPERTY_EVENT_READONLY_FAST(CachedMinSize, CachedMinSizeChanged) + CLASS_MEMBER_PROPERTY_EVENT_READONLY_FAST(CachedMinClientSize, CachedMinSizeChanged) + CLASS_MEMBER_PROPERTY_EVENT_READONLY_FAST(CachedBounds, CachedBoundsChanged) + CLASS_MEMBER_PROPERTY_EVENT_READONLY_FAST(CachedClientArea, CachedBoundsChanged) + CLASS_MEMBER_PROPERTY_READONLY_FAST(GlobalBounds) END_CLASS_MEMBER(GuiGraphicsComposition) - BEGIN_CLASS_MEMBER(GuiGraphicsSite) - CLASS_MEMBER_BASE(GuiGraphicsComposition) - - CLASS_MEMBER_PROPERTY_GUIEVENT_READONLY_FAST(Bounds) - CLASS_MEMBER_PROPERTY_READONLY_FAST(PreviousCalculatedBounds) - END_CLASS_MEMBER(GuiGraphicsSite) - BEGIN_CLASS_MEMBER(GuiWindowComposition) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_CONSTRUCTOR(GuiWindowComposition*(), NO_PARAMETER) END_CLASS_MEMBER(GuiWindowComposition) BEGIN_CLASS_MEMBER(GuiBoundsComposition) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_CONSTRUCTOR(GuiBoundsComposition*(), NO_PARAMETER) - CLASS_MEMBER_PROPERTY_FAST(SizeAffectParent) - CLASS_MEMBER_PROPERTY_EVENT_FAST(Bounds, BoundsChanged) + CLASS_MEMBER_PROPERTY_FAST(ExpectedBounds) CLASS_MEMBER_PROPERTY_FAST(AlignmentToParent) CLASS_MEMBER_METHOD(IsAlignedToParent, NO_PARAMETER) @@ -1371,10 +1363,9 @@ Type Declaration (Class) END_CLASS_MEMBER(GuiStackComposition) BEGIN_CLASS_MEMBER(GuiStackItemComposition) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_CONSTRUCTOR(GuiStackItemComposition*(), NO_PARAMETER) - CLASS_MEMBER_PROPERTY_EVENT_FAST(Bounds, BoundsChanged) CLASS_MEMBER_PROPERTY_FAST(ExtraMargin) END_CLASS_MEMBER(GuiStackItemComposition) @@ -1400,12 +1391,10 @@ Type Declaration (Class) CLASS_MEMBER_METHOD(SetRowOption, {L"row" _ L"option"}) CLASS_MEMBER_METHOD(GetColumnOption, {L"column"}) CLASS_MEMBER_METHOD(SetColumnOption, {L"column" _ L"option"}) - CLASS_MEMBER_METHOD(GetCellArea, NO_PARAMETER) - CLASS_MEMBER_METHOD(UpdateCellBounds, NO_PARAMETER) END_CLASS_MEMBER(GuiTableComposition) BEGIN_CLASS_MEMBER(GuiCellComposition) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_CONSTRUCTOR(GuiCellComposition*(), NO_PARAMETER) CLASS_MEMBER_PROPERTY_READONLY_FAST(TableParent) @@ -1418,7 +1407,7 @@ Type Declaration (Class) END_CLASS_MEMBER(GuiCellComposition) BEGIN_CLASS_MEMBER(GuiTableSplitterCompositionBase) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_PROPERTY_READONLY_FAST(TableParent) END_CLASS_MEMBER(GuiRowSplitterComposition) @@ -1452,16 +1441,15 @@ Type Declaration (Class) END_CLASS_MEMBER(GuiFlowComposition) BEGIN_CLASS_MEMBER(GuiFlowItemComposition) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_CONSTRUCTOR(GuiFlowItemComposition*(), NO_PARAMETER) - CLASS_MEMBER_PROPERTY_EVENT_FAST(Bounds, BoundsChanged) CLASS_MEMBER_PROPERTY_FAST(ExtraMargin) CLASS_MEMBER_PROPERTY_FAST(FlowOption) END_CLASS_MEMBER(GuiFlowItemComposition) BEGIN_CLASS_MEMBER(GuiSideAlignedComposition) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_CONSTRUCTOR(GuiSideAlignedComposition*(), NO_PARAMETER) CLASS_MEMBER_PROPERTY_FAST(Direction) @@ -1470,7 +1458,7 @@ Type Declaration (Class) END_CLASS_MEMBER(GuiSideAlignedComposition) BEGIN_CLASS_MEMBER(GuiPartialViewComposition) - CLASS_MEMBER_BASE(GuiGraphicsSite) + CLASS_MEMBER_BASE(GuiGraphicsComposition) CLASS_MEMBER_CONSTRUCTOR(GuiPartialViewComposition*(), NO_PARAMETER) CLASS_MEMBER_PROPERTY_FAST(WidthRatio) @@ -1498,6 +1486,7 @@ Type Declaration (Class) CLASS_MEMBER_GUIEVENT(ItemRemoved) CLASS_MEMBER_PROPERTY_FAST(ItemTemplate) CLASS_MEMBER_PROPERTY_FAST(ItemSource) + CLASS_MEMBER_PROPERTY_GUIEVENT_FAST(Context) END_CLASS_MEMBER(GuiRepeatCompositionBase) BEGIN_CLASS_MEMBER(GuiRepeatStackComposition) diff --git a/Import/GacUIReflection.h b/Import/GacUIReflection.h index 33910604..6bfe0b9d 100644 --- a/Import/GacUIReflection.h +++ b/Import/GacUIReflection.h @@ -260,10 +260,10 @@ Type List (Compositions) F(presentation::compositions::IGuiAltActionContainer)\ F(presentation::compositions::IGuiAltActionHost)\ F(presentation::compositions::IGuiTabAction)\ + F(presentation::compositions::GuiRepeatCompositionBase)\ #define GUIREFLECTIONCOMPOSITION_CLASS_TYPELIST(F)\ F(presentation::compositions::GuiGraphicsComposition)\ - F(presentation::compositions::GuiGraphicsSite)\ F(presentation::compositions::GuiWindowComposition)\ F(presentation::compositions::GuiBoundsComposition)\ F(presentation::compositions::GuiStackComposition)\ @@ -279,7 +279,6 @@ Type List (Compositions) F(presentation::compositions::GuiPartialViewComposition)\ F(presentation::compositions::GuiSharedSizeItemComposition)\ F(presentation::compositions::GuiSharedSizeRootComposition)\ - F(presentation::compositions::GuiRepeatCompositionBase)\ F(presentation::compositions::GuiRepeatStackComposition)\ F(presentation::compositions::GuiRepeatFlowComposition)\ F(presentation::compositions::GuiResponsiveCompositionBase)\ @@ -359,6 +358,7 @@ Type List (Controls) F(presentation::theme::ThemeName)\ F(presentation::theme::ITheme)\ F(presentation::theme::ThemeTemplates)\ + F(presentation::controls::GuiDisposedFlag)\ F(presentation::controls::GuiDialogBase)\ F(presentation::controls::GuiMessageDialog)\ F(presentation::controls::GuiColorDialog)\ @@ -439,7 +439,6 @@ Type List (Controls) F(presentation::controls::list::DataProvider)\ #define GUIREFLECTIONCONTROLS_CLASS_TYPELIST(F)\ - F(presentation::controls::GuiDisposedFlag)\ F(presentation::controls::GuiControl)\ F(presentation::controls::GuiCustomControl)\ F(presentation::controls::GuiLabel)\ diff --git a/Import/Skins/DarkSkin/DarkSkin.cpp b/Import/Skins/DarkSkin/DarkSkin.cpp index 8dcab760..5484c495 100644 --- a/Import/Skins/DarkSkin/DarkSkin.cpp +++ b/Import/Skins/DarkSkin/DarkSkin.cpp @@ -1571,13 +1571,13 @@ Closures void __vwsnf185_DarkSkin_darkskin_RibbonIconLabelTemplateConstructor___vwsn_darkskin_RibbonIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetImage(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->GetImage(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::Ptr<::vl::presentation::INativeImage>>(__vwsn_value_); if ((__vwsn_old_.Obj() == __vwsn_new_.Obj())) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetImage(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->SetImage(__vwsn_new_); } //------------------------------------------------------------------- @@ -1589,13 +1589,13 @@ Closures void __vwsnf186_DarkSkin_darkskin_RibbonIconLabelTemplateConstructor___vwsn_darkskin_RibbonIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetEnabled(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->GetEnabled(); auto __vwsn_new_ = ::vl::__vwsn::Unbox(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetEnabled(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->SetEnabled(__vwsn_new_); } //------------------------------------------------------------------- @@ -1607,13 +1607,13 @@ Closures void __vwsnf187_DarkSkin_darkskin_RibbonIconLabelTemplateConstructor___vwsn_darkskin_RibbonIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetFrameIndex(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->GetFrameIndex(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::vint>(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetFrameIndex(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->SetFrameIndex(__vwsn_new_); } //------------------------------------------------------------------- @@ -2603,13 +2603,13 @@ Closures void __vwsnf239_DarkSkin_darkskin_RibbonSmallIconLabelTemplateConstructor___vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetImage(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->GetImage(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::Ptr<::vl::presentation::INativeImage>>(__vwsn_value_); if ((__vwsn_old_.Obj() == __vwsn_new_.Obj())) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetImage(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->SetImage(__vwsn_new_); } //------------------------------------------------------------------- @@ -2635,13 +2635,13 @@ Closures void __vwsnf240_DarkSkin_darkskin_RibbonSmallIconLabelTemplateConstructor___vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetEnabled(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->GetEnabled(); auto __vwsn_new_ = ::vl::__vwsn::Unbox(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetEnabled(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->SetEnabled(__vwsn_new_); } //------------------------------------------------------------------- @@ -2653,13 +2653,13 @@ Closures void __vwsnf241_DarkSkin_darkskin_RibbonSmallIconLabelTemplateConstructor___vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetFrameIndex(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->GetFrameIndex(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::vint>(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetFrameIndex(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_3.Obj())->SetFrameIndex(__vwsn_new_); } //------------------------------------------------------------------- @@ -2671,13 +2671,13 @@ Closures void __vwsnf242_DarkSkin_darkskin_RibbonSmallIconLabelTemplateConstructor___vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_5.Obj())->GetText(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_6.Obj())->GetText(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::WString>(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_5.Obj())->SetText(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_6.Obj())->SetText(__vwsn_new_); } //------------------------------------------------------------------- @@ -2689,13 +2689,13 @@ Closures void __vwsnf243_DarkSkin_darkskin_RibbonSmallIconLabelTemplateConstructor___vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_5.Obj())->GetColor(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_6.Obj())->GetColor(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::presentation::Color>(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_5.Obj())->SetColor(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_6.Obj())->SetColor(__vwsn_new_); } //------------------------------------------------------------------- @@ -2707,13 +2707,13 @@ Closures void __vwsnf244_DarkSkin_darkskin_RibbonSmallIconLabelTemplateConstructor___vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_5.Obj())->GetFont(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_6.Obj())->GetFont(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::presentation::FontProperties>(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_5.Obj())->SetFont(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_6.Obj())->SetFont(__vwsn_new_); } //------------------------------------------------------------------- @@ -3962,13 +3962,13 @@ Closures void __vwsnf312_DarkSkin_darkskin_SinglelineTextBoxTemplateConstructor___vwsn_darkskin_SinglelineTextBoxTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_1.Obj())->GetColor(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetColor(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::presentation::Color>(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_1.Obj())->SetColor(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetColor(__vwsn_new_); } //------------------------------------------------------------------- @@ -6137,13 +6137,13 @@ Closures void __vwsnf80_DarkSkin_darkskin_DocumentTextBoxTemplateConstructor___vwsn_darkskin_DocumentTextBoxTemplate_Initialize_::operator()(const ::vl::reflection::description::Value& __vwsn_value_) const { - auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_1.Obj())->GetColor(); + auto __vwsn_old_ = ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->GetColor(); auto __vwsn_new_ = ::vl::__vwsn::Unbox<::vl::presentation::Color>(__vwsn_value_); if ((__vwsn_old_ == __vwsn_new_)) { return; } - ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_1.Obj())->SetColor(__vwsn_new_); + ::vl::__vwsn::This(__vwsnthis_0->__vwsn_precompile_2.Obj())->SetColor(__vwsn_new_); } //------------------------------------------------------------------- @@ -21953,7 +21953,7 @@ Closures void __vwsnc64_DarkSkin_darkskin_GroupBoxTemplateConstructor___vwsn_darkskin_GroupBoxTemplate_Initialize__vl_reflection_description_IValueSubscription::__vwsn_bind_activator_() { - auto __vwsn_bind_activator_result_ = [&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = (static_cast<::vl::vint>(1) + (::vl::__vwsn::This(__vwsn_bind_cache_0)->GetBounds().y2 / static_cast<::vl::vint>(2))); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }(); + auto __vwsn_bind_activator_result_ = [&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = (static_cast<::vl::vint>(1) + (::vl::__vwsn::This(__vwsn_bind_cache_0)->GetCachedBounds().y2 / static_cast<::vl::vint>(2))); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }(); ::vl::__vwsn::EventInvoke(this->ValueChanged)(::vl::__vwsn::Box(__vwsn_bind_activator_result_)); } @@ -21968,7 +21968,7 @@ Closures { (__vwsn_bind_opened_ = true); (__vwsn_bind_cache_0 = [&](){ try{ return __vwsnthis_0->titleBounds; } catch(...){ return static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr); } }()); - (__vwsn_bind_handler_0_0 = [&](){ try{ return ::vl::__vwsn::EventAttach(::vl::__vwsn::This(__vwsn_bind_cache_0)->BoundsChanged, ::vl::Func(this, &__vwsnc64_DarkSkin_darkskin_GroupBoxTemplateConstructor___vwsn_darkskin_GroupBoxTemplate_Initialize__vl_reflection_description_IValueSubscription::__vwsn_bind_callback_0_0)); } catch(...){ return ::vl::Ptr<::vl::reflection::description::IEventHandler>(); } }()); + (__vwsn_bind_handler_0_0 = [&](){ try{ return ::vl::__vwsn::EventAttach(::vl::__vwsn::This(__vwsn_bind_cache_0)->CachedBoundsChanged, ::vl::Func(this, &__vwsnc64_DarkSkin_darkskin_GroupBoxTemplateConstructor___vwsn_darkskin_GroupBoxTemplate_Initialize__vl_reflection_description_IValueSubscription::__vwsn_bind_callback_0_0)); } catch(...){ return ::vl::Ptr<::vl::reflection::description::IEventHandler>(); } }()); return true; } return false; @@ -21991,7 +21991,7 @@ Closures (__vwsn_bind_closed_ = true); if (static_cast(__vwsn_bind_handler_0_0)) { - ::vl::__vwsn::EventDetach(::vl::__vwsn::This(__vwsn_bind_cache_0)->BoundsChanged, __vwsn_bind_handler_0_0); + ::vl::__vwsn::EventDetach(::vl::__vwsn::This(__vwsn_bind_cache_0)->CachedBoundsChanged, __vwsn_bind_handler_0_0); (__vwsn_bind_handler_0_0 = ::vl::Ptr<::vl::reflection::description::IEventHandler>()); } (__vwsn_bind_cache_0 = static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)); @@ -22014,7 +22014,7 @@ Closures void __vwsnc65_DarkSkin_darkskin_GroupBoxTemplateConstructor___vwsn_darkskin_GroupBoxTemplate_Initialize__vl_reflection_description_IValueSubscription::__vwsn_bind_activator_() { - auto __vwsn_bind_activator_result_ = [&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = (::vl::__vwsn::This(__vwsn_bind_cache_0)->GetBounds().y2 / static_cast<::vl::vint>(2)); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }(); + auto __vwsn_bind_activator_result_ = [&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = (::vl::__vwsn::This(__vwsn_bind_cache_0)->GetCachedBounds().y2 / static_cast<::vl::vint>(2)); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }(); ::vl::__vwsn::EventInvoke(this->ValueChanged)(::vl::__vwsn::Box(__vwsn_bind_activator_result_)); } @@ -22029,7 +22029,7 @@ Closures { (__vwsn_bind_opened_ = true); (__vwsn_bind_cache_0 = [&](){ try{ return __vwsnthis_0->titleBounds; } catch(...){ return static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr); } }()); - (__vwsn_bind_handler_0_0 = [&](){ try{ return ::vl::__vwsn::EventAttach(::vl::__vwsn::This(__vwsn_bind_cache_0)->BoundsChanged, ::vl::Func(this, &__vwsnc65_DarkSkin_darkskin_GroupBoxTemplateConstructor___vwsn_darkskin_GroupBoxTemplate_Initialize__vl_reflection_description_IValueSubscription::__vwsn_bind_callback_0_0)); } catch(...){ return ::vl::Ptr<::vl::reflection::description::IEventHandler>(); } }()); + (__vwsn_bind_handler_0_0 = [&](){ try{ return ::vl::__vwsn::EventAttach(::vl::__vwsn::This(__vwsn_bind_cache_0)->CachedBoundsChanged, ::vl::Func(this, &__vwsnc65_DarkSkin_darkskin_GroupBoxTemplateConstructor___vwsn_darkskin_GroupBoxTemplate_Initialize__vl_reflection_description_IValueSubscription::__vwsn_bind_callback_0_0)); } catch(...){ return ::vl::Ptr<::vl::reflection::description::IEventHandler>(); } }()); return true; } return false; @@ -22052,7 +22052,7 @@ Closures (__vwsn_bind_closed_ = true); if (static_cast(__vwsn_bind_handler_0_0)) { - ::vl::__vwsn::EventDetach(::vl::__vwsn::This(__vwsn_bind_cache_0)->BoundsChanged, __vwsn_bind_handler_0_0); + ::vl::__vwsn::EventDetach(::vl::__vwsn::This(__vwsn_bind_cache_0)->CachedBoundsChanged, __vwsn_bind_handler_0_0); (__vwsn_bind_handler_0_0 = ::vl::Ptr<::vl::reflection::description::IEventHandler>()); } (__vwsn_bind_cache_0 = static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)); @@ -26183,22 +26183,29 @@ Class (::darkskin::DocumentTextBoxTemplateConstructor) { ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } - (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); { - ::vl::__vwsn::This(this->container)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } + (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_2)); + } + (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + { + ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->container)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } - (this->__vwsn_precompile_1 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); { - ::vl::__vwsn::This(this->container)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_1)); + ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); } { - ::vl::__vwsn::This(this->self)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); + ::vl::__vwsn::This(this->self)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_1)); } { auto __vwsn_created_subscription_ = ::vl::Ptr<::vl::reflection::description::IValueSubscription>(new ::vl_workflow_global::__vwsnc24_DarkSkin_darkskin_DocumentTextBoxTemplateConstructor___vwsn_darkskin_DocumentTextBoxTemplate_Initialize__vl_reflection_description_IValueSubscription(this)); @@ -26217,7 +26224,8 @@ Class (::darkskin::DocumentTextBoxTemplateConstructor) : container(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , self(static_cast<::darkskin::DocumentTextBoxTemplate*>(nullptr)) , __vwsn_precompile_0(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) - , __vwsn_precompile_1(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) + , __vwsn_precompile_1(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_2(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) { } @@ -26259,9 +26267,6 @@ Class (::darkskin::DocumentViewerTemplateConstructor) ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -26280,7 +26285,7 @@ Class (::darkskin::DocumentViewerTemplateConstructor) ::vl::__vwsn::This(this->look)->SetHScrollTemplate(vl::Func(::vl_workflow_global::__vwsnf82_DarkSkin_darkskin_DocumentViewerTemplateConstructor___vwsn_darkskin_DocumentViewerTemplate_Initialize_(this))); } { - ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->look)); @@ -27492,9 +27497,6 @@ Class (::darkskin::ListViewTemplateConstructor) ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -27513,7 +27515,7 @@ Class (::darkskin::ListViewTemplateConstructor) ::vl::__vwsn::This(this->look)->SetHScrollTemplate(vl::Func(::vl_workflow_global::__vwsnf119_DarkSkin_darkskin_ListViewTemplateConstructor___vwsn_darkskin_ListViewTemplate_Initialize_(this))); } { - ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->look)); @@ -27969,9 +27971,6 @@ Class (::darkskin::MultilineTextBoxTemplateConstructor) ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -27990,7 +27989,7 @@ Class (::darkskin::MultilineTextBoxTemplateConstructor) ::vl::__vwsn::This(this->look)->SetHScrollTemplate(vl::Func(::vl_workflow_global::__vwsnf310_DarkSkin_darkskin_MultilineTextBoxTemplateConstructor___vwsn_darkskin_MultilineTextBoxTemplate_Initialize_(this))); } { - ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->look)); @@ -28827,25 +28826,32 @@ Class (::darkskin::RibbonGroupMenuTemplateConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_1)); } - (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiBoundsComposition()); { - ::vl::__vwsn::This(this->container)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(3); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } + (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#333337"))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_3)); + } + (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + { + ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(3); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->container)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } - (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); { - ::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#333337"))); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); } { - ::vl::__vwsn::This(this->container)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_2)); - } - { - ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_2)); } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetContainerComposition(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); @@ -28856,7 +28862,8 @@ Class (::darkskin::RibbonGroupMenuTemplateConstructor) : container(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , __vwsn_precompile_0(static_cast<::darkskin::RibbonGroupMenuTemplate*>(nullptr)) , __vwsn_precompile_1(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) - , __vwsn_precompile_2(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) + , __vwsn_precompile_2(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_3(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) { } @@ -28928,9 +28935,6 @@ Class (::darkskin::RibbonGroupTemplateConstructor) ::vl::__vwsn::This(this->table)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_1)); } (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiCellComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetPreferredMinSize([&](){ ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(5); __vwsn_temp__.y = static_cast<::vl::vint>(5); return __vwsn_temp__; }()); } @@ -28939,7 +28943,7 @@ Class (::darkskin::RibbonGroupTemplateConstructor) } (this->__vwsn_precompile_3 = new ::vl::presentation::compositions::GuiBoundsComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(2); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(2); __vwsn_temp__.bottom = static_cast<::vl::vint>(2); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); @@ -29076,21 +29080,28 @@ Class (::darkskin::RibbonIconLabelTemplateConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(1), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Percentage; __vwsn_temp__.percentage = static_cast(1.0); return __vwsn_temp__; }()); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiCellComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); } - (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiImageFrameElement>())); + (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiBoundsComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->SetHorizontalAlignment(::vl::presentation::Alignment::Center); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } + (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiImageFrameElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); } { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_2)); + ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetHorizontalAlignment(::vl::presentation::Alignment::Center); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_3)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_2)); } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_1)); @@ -29130,7 +29141,8 @@ Class (::darkskin::RibbonIconLabelTemplateConstructor) , self(static_cast<::darkskin::RibbonIconLabelTemplate*>(nullptr)) , __vwsn_precompile_0(static_cast<::vl::presentation::compositions::GuiTableComposition*>(nullptr)) , __vwsn_precompile_1(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) - , __vwsn_precompile_2(::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>()) + , __vwsn_precompile_2(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_3(::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>()) { } @@ -30167,54 +30179,58 @@ Class (::darkskin::RibbonSmallIconLabelTemplateConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(2), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Percentage; __vwsn_temp__.percentage = static_cast(1.0); return __vwsn_temp__; }()); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiCellComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); } - (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiImageFrameElement>())); + (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiBoundsComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->SetHorizontalAlignment(::vl::presentation::Alignment::Center); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } + (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiImageFrameElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); } { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_2)); + ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetHorizontalAlignment(::vl::presentation::Alignment::Center); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_3)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_2)); } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_1)); } - (this->__vwsn_precompile_3 = new ::vl::presentation::compositions::GuiCellComposition()); + (this->__vwsn_precompile_4 = new ::vl::presentation::compositions::GuiCellComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_5 = new ::vl::presentation::compositions::GuiSharedSizeItemComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetSharedWidth(true); } { - ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); - } - (this->__vwsn_precompile_4 = new ::vl::presentation::compositions::GuiSharedSizeItemComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetSharedWidth(true); + ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetGroup(::vl::WString::Unmanaged(L"MenuItem-Text")); } { - ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetGroup(::vl::WString::Unmanaged(L"MenuItem-Text")); + ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); + } + (this->__vwsn_precompile_6 = ::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidLabelElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_6.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); } { - ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); - } - (this->__vwsn_precompile_5 = ::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidLabelElement>())); - { - ::vl::__vwsn::This(this->__vwsn_precompile_5.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); + ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_6)); } { - ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_5)); + ::vl::__vwsn::This(this->__vwsn_precompile_4)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_5)); } { - ::vl::__vwsn::This(this->__vwsn_precompile_3)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_4)); - } - { - ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_3)); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_4)); } (this->container = new ::vl::presentation::compositions::GuiCellComposition()); { @@ -30266,10 +30282,11 @@ Class (::darkskin::RibbonSmallIconLabelTemplateConstructor) , self(static_cast<::darkskin::RibbonSmallIconLabelTemplate*>(nullptr)) , __vwsn_precompile_0(static_cast<::vl::presentation::compositions::GuiTableComposition*>(nullptr)) , __vwsn_precompile_1(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) - , __vwsn_precompile_2(::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>()) - , __vwsn_precompile_3(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) - , __vwsn_precompile_4(static_cast<::vl::presentation::compositions::GuiSharedSizeItemComposition*>(nullptr)) - , __vwsn_precompile_5(::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement>()) + , __vwsn_precompile_2(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_3(::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement>()) + , __vwsn_precompile_4(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) + , __vwsn_precompile_5(static_cast<::vl::presentation::compositions::GuiSharedSizeItemComposition*>(nullptr)) + , __vwsn_precompile_6(::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement>()) { } @@ -30801,49 +30818,56 @@ Class (::darkskin::RibbonToolstripMenuTemplateConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_4)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_5)); } - (this->container = new ::vl::presentation::compositions::GuiCellComposition()); - { - ::vl::__vwsn::This(this->container)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(3); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); - } - { - ::vl::__vwsn::This(this->container)->SetSite(static_cast<::vl::vint>(2), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(2)); - } - { - ::vl::__vwsn::This(this->__vwsn_precompile_4)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); - } (this->__vwsn_precompile_8 = new ::vl::presentation::compositions::GuiCellComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_8)->SetAssociatedHitTestResult(::vl::presentation::INativeWindowListener::HitTestResult::BorderBottom); + ::vl::__vwsn::This(this->__vwsn_precompile_8)->SetSite(static_cast<::vl::vint>(2), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(2)); + } + (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + { + ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(3); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->__vwsn_precompile_8)->SetSite(static_cast<::vl::vint>(3), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); - } - (this->__vwsn_precompile_9 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); - { - ::vl::__vwsn::This(this->__vwsn_precompile_9.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#007ACC"))); + ::vl::__vwsn::This(this->container)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } { - ::vl::__vwsn::This(this->__vwsn_precompile_8)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_9)); + ::vl::__vwsn::This(this->__vwsn_precompile_8)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); } { ::vl::__vwsn::This(this->__vwsn_precompile_4)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_8)); } - (this->__vwsn_precompile_10 = new ::vl::presentation::compositions::GuiCellComposition()); + (this->__vwsn_precompile_9 = new ::vl::presentation::compositions::GuiCellComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_10)->SetAssociatedHitTestResult(::vl::presentation::INativeWindowListener::HitTestResult::BorderRightBottom); + ::vl::__vwsn::This(this->__vwsn_precompile_9)->SetAssociatedHitTestResult(::vl::presentation::INativeWindowListener::HitTestResult::BorderBottom); } { - ::vl::__vwsn::This(this->__vwsn_precompile_10)->SetSite(static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + ::vl::__vwsn::This(this->__vwsn_precompile_9)->SetSite(static_cast<::vl::vint>(3), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); } - (this->__vwsn_precompile_11 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); + (this->__vwsn_precompile_10 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); { - ::vl::__vwsn::This(this->__vwsn_precompile_11.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#007ACC"))); + ::vl::__vwsn::This(this->__vwsn_precompile_10.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#007ACC"))); } { - ::vl::__vwsn::This(this->__vwsn_precompile_10)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_11)); + ::vl::__vwsn::This(this->__vwsn_precompile_9)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_10)); } { - ::vl::__vwsn::This(this->__vwsn_precompile_4)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_10)); + ::vl::__vwsn::This(this->__vwsn_precompile_4)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_9)); + } + (this->__vwsn_precompile_11 = new ::vl::presentation::compositions::GuiCellComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetAssociatedHitTestResult(::vl::presentation::INativeWindowListener::HitTestResult::BorderRightBottom); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetSite(static_cast<::vl::vint>(3), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + } + (this->__vwsn_precompile_12 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBackgroundElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_12.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#007ACC"))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_12)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_4)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_11)); } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_4)); @@ -30860,7 +30884,7 @@ Class (::darkskin::RibbonToolstripMenuTemplateConstructor) } RibbonToolstripMenuTemplateConstructor::RibbonToolstripMenuTemplateConstructor() - : container(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) + : container(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , content(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) , __vwsn_precompile_0(static_cast<::darkskin::RibbonToolstripMenuTemplate*>(nullptr)) , __vwsn_precompile_1(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) @@ -30871,9 +30895,10 @@ Class (::darkskin::RibbonToolstripMenuTemplateConstructor) , __vwsn_precompile_6(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , __vwsn_precompile_7(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) , __vwsn_precompile_8(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) - , __vwsn_precompile_9(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) - , __vwsn_precompile_10(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) - , __vwsn_precompile_11(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) + , __vwsn_precompile_9(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) + , __vwsn_precompile_10(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) + , __vwsn_precompile_11(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) + , __vwsn_precompile_12(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) { } @@ -31029,9 +31054,6 @@ Class (::darkskin::ScrollViewTemplateConstructor) ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -31053,7 +31075,7 @@ Class (::darkskin::ScrollViewTemplateConstructor) ::vl::__vwsn::This(this->look)->SetHScrollTemplate(vl::Func(::vl_workflow_global::__vwsnf277_DarkSkin_darkskin_ScrollViewTemplateConstructor___vwsn_darkskin_ScrollViewTemplate_Initialize_(this))); } { - ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->look)); @@ -31216,22 +31238,29 @@ Class (::darkskin::SinglelineTextBoxTemplateConstructor) { ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } - (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); { - ::vl::__vwsn::This(this->container)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } + (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_2)); + } + (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + { + ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->container)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } - (this->__vwsn_precompile_1 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); { - ::vl::__vwsn::This(this->container)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_1)); + ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); } { - ::vl::__vwsn::This(this->self)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); + ::vl::__vwsn::This(this->self)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_1)); } { auto __vwsn_created_subscription_ = ::vl::Ptr<::vl::reflection::description::IValueSubscription>(new ::vl_workflow_global::__vwsnc192_DarkSkin_darkskin_SinglelineTextBoxTemplateConstructor___vwsn_darkskin_SinglelineTextBoxTemplate_Initialize__vl_reflection_description_IValueSubscription(this)); @@ -31247,7 +31276,8 @@ Class (::darkskin::SinglelineTextBoxTemplateConstructor) : container(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , self(static_cast<::darkskin::SinglelineTextBoxTemplate*>(nullptr)) , __vwsn_precompile_0(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) - , __vwsn_precompile_1(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) + , __vwsn_precompile_1(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_2(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) { } @@ -31817,9 +31847,6 @@ Class (::darkskin::TextListTemplateConstructor) ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -31838,7 +31865,7 @@ Class (::darkskin::TextListTemplateConstructor) ::vl::__vwsn::This(this->look)->SetHScrollTemplate(vl::Func(::vl_workflow_global::__vwsnf125_DarkSkin_darkskin_TextListTemplateConstructor___vwsn_darkskin_TextListTemplate_Initialize_(this))); } { - ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->look)); @@ -32398,25 +32425,32 @@ Class (::darkskin::ToolstripMenuTemplateConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_1)); } - (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiBoundsComposition()); { - ::vl::__vwsn::This(this->container)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(3); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } + (this->__vwsn_precompile_3 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); + { + ::vl::__vwsn::This(this->__vwsn_precompile_3.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#333337"))); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_3)); + } + (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + { + ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(3); __vwsn_temp__.top = static_cast<::vl::vint>(3); __vwsn_temp__.right = static_cast<::vl::vint>(3); __vwsn_temp__.bottom = static_cast<::vl::vint>(3); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->container)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } - (this->__vwsn_precompile_2 = ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidBorderElement>())); { - ::vl::__vwsn::This(this->__vwsn_precompile_2.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#333337"))); + ::vl::__vwsn::This(this->__vwsn_precompile_2)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); } { - ::vl::__vwsn::This(this->container)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_2)); - } - { - ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_2)); } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetContainerComposition(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); @@ -32427,7 +32461,8 @@ Class (::darkskin::ToolstripMenuTemplateConstructor) : container(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , __vwsn_precompile_0(static_cast<::darkskin::ToolstripMenuTemplate*>(nullptr)) , __vwsn_precompile_1(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) - , __vwsn_precompile_2(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) + , __vwsn_precompile_2(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_3(::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement>()) { } @@ -32789,9 +32824,6 @@ Class (::darkskin::ToolstripTemplateConstructor) void ToolstripTemplateConstructor::__vwsn_darkskin_ToolstripTemplate_Initialize(::darkskin::ToolstripTemplate* __vwsn_this_) { (this->__vwsn_precompile_0 = __vwsn_this_); - { - ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(2); __vwsn_temp__.top = static_cast<::vl::vint>(2); __vwsn_temp__.right = static_cast<::vl::vint>(2); __vwsn_temp__.bottom = static_cast<::vl::vint>(2); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } @@ -32802,10 +32834,24 @@ Class (::darkskin::ToolstripTemplateConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_1)); } + (this->container = new ::vl::presentation::compositions::GuiBoundsComposition()); + { + ::vl::__vwsn::This(this->container)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(2); __vwsn_temp__.top = static_cast<::vl::vint>(2); __vwsn_temp__.right = static_cast<::vl::vint>(2); __vwsn_temp__.bottom = static_cast<::vl::vint>(2); return __vwsn_temp__; }()); + } + { + ::vl::__vwsn::This(this->container)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); + } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetContainerComposition(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->container)); + } } ToolstripTemplateConstructor::ToolstripTemplateConstructor() - : __vwsn_precompile_0(static_cast<::darkskin::ToolstripTemplate*>(nullptr)) + : container(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_0(static_cast<::darkskin::ToolstripTemplate*>(nullptr)) , __vwsn_precompile_1(::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement>()) { } @@ -33012,9 +33058,6 @@ Class (::darkskin::TreeViewTemplateConstructor) ::vl::__vwsn::This(this->self)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_0)); } (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -33033,7 +33076,7 @@ Class (::darkskin::TreeViewTemplateConstructor) ::vl::__vwsn::This(this->look)->SetHScrollTemplate(vl::Func(::vl_workflow_global::__vwsnf130_DarkSkin_darkskin_TreeViewTemplateConstructor___vwsn_darkskin_TreeViewTemplate_Initialize_(this))); } { - ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->look)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->look)); diff --git a/Import/Skins/DarkSkin/DarkSkin.h b/Import/Skins/DarkSkin/DarkSkin.h index 13982c96..17762781 100644 --- a/Import/Skins/DarkSkin/DarkSkin.h +++ b/Import/Skins/DarkSkin/DarkSkin.h @@ -1370,7 +1370,8 @@ namespace darkskin ::vl::presentation::compositions::GuiBoundsComposition* container; ::darkskin::DocumentTextBoxTemplate* self; ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_0; - ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_1; + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_1; + ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_2; void __vwsn_darkskin_DocumentTextBoxTemplate_Initialize(::darkskin::DocumentTextBoxTemplate* __vwsn_this_); public: DocumentTextBoxTemplateConstructor(); @@ -2381,7 +2382,8 @@ namespace darkskin ::vl::presentation::compositions::GuiBoundsComposition* container; ::darkskin::RibbonGroupMenuTemplate* __vwsn_precompile_0; ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_1; - ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_2; + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_2; + ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_3; void __vwsn_darkskin_RibbonGroupMenuTemplate_Initialize(::darkskin::RibbonGroupMenuTemplate* __vwsn_this_); public: RibbonGroupMenuTemplateConstructor(); @@ -2467,7 +2469,8 @@ namespace darkskin ::darkskin::RibbonIconLabelTemplate* self; ::vl::presentation::compositions::GuiTableComposition* __vwsn_precompile_0; ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_1; - ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement> __vwsn_precompile_2; + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_2; + ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement> __vwsn_precompile_3; void __vwsn_darkskin_RibbonIconLabelTemplate_Initialize(::darkskin::RibbonIconLabelTemplate* __vwsn_this_); public: RibbonIconLabelTemplateConstructor(); @@ -2877,10 +2880,11 @@ namespace darkskin ::darkskin::RibbonSmallIconLabelTemplate* self; ::vl::presentation::compositions::GuiTableComposition* __vwsn_precompile_0; ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_1; - ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement> __vwsn_precompile_2; - ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_3; - ::vl::presentation::compositions::GuiSharedSizeItemComposition* __vwsn_precompile_4; - ::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement> __vwsn_precompile_5; + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_2; + ::vl::Ptr<::vl::presentation::elements::GuiImageFrameElement> __vwsn_precompile_3; + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_4; + ::vl::presentation::compositions::GuiSharedSizeItemComposition* __vwsn_precompile_5; + ::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement> __vwsn_precompile_6; void __vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize(::darkskin::RibbonSmallIconLabelTemplate* __vwsn_this_); public: RibbonSmallIconLabelTemplateConstructor(); @@ -3083,7 +3087,7 @@ namespace darkskin friend struct ::vl::reflection::description::CustomTypeDescriptorSelector; #endif protected: - ::vl::presentation::compositions::GuiCellComposition* container; + ::vl::presentation::compositions::GuiBoundsComposition* container; ::vl::presentation::compositions::GuiCellComposition* content; ::darkskin::RibbonToolstripMenuTemplate* __vwsn_precompile_0; ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_1; @@ -3094,9 +3098,10 @@ namespace darkskin ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_6; ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_7; ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_8; - ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_9; - ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_10; - ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_11; + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_9; + ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_10; + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_11; + ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_12; void __vwsn_darkskin_RibbonToolstripMenuTemplate_Initialize(::darkskin::RibbonToolstripMenuTemplate* __vwsn_this_); public: RibbonToolstripMenuTemplateConstructor(); @@ -3252,7 +3257,8 @@ namespace darkskin ::vl::presentation::compositions::GuiBoundsComposition* container; ::darkskin::SinglelineTextBoxTemplate* self; ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_0; - ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_1; + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_1; + ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_2; void __vwsn_darkskin_SinglelineTextBoxTemplate_Initialize(::darkskin::SinglelineTextBoxTemplate* __vwsn_this_); public: SinglelineTextBoxTemplateConstructor(); @@ -3770,7 +3776,8 @@ namespace darkskin ::vl::presentation::compositions::GuiBoundsComposition* container; ::darkskin::ToolstripMenuTemplate* __vwsn_precompile_0; ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_1; - ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_2; + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_2; + ::vl::Ptr<::vl::presentation::elements::GuiSolidBorderElement> __vwsn_precompile_3; void __vwsn_darkskin_ToolstripMenuTemplate_Initialize(::darkskin::ToolstripMenuTemplate* __vwsn_this_); public: ToolstripMenuTemplateConstructor(); @@ -3924,6 +3931,7 @@ namespace darkskin friend struct ::vl::reflection::description::CustomTypeDescriptorSelector; #endif protected: + ::vl::presentation::compositions::GuiBoundsComposition* container; ::darkskin::ToolstripTemplate* __vwsn_precompile_0; ::vl::Ptr<::vl::presentation::elements::GuiSolidBackgroundElement> __vwsn_precompile_1; void __vwsn_darkskin_ToolstripTemplate_Initialize(::darkskin::ToolstripTemplate* __vwsn_this_); diff --git a/Import/Skins/DarkSkin/DarkSkinReflection.cpp b/Import/Skins/DarkSkin/DarkSkinReflection.cpp index 2f976733..c72d4912 100644 --- a/Import/Skins/DarkSkin/DarkSkinReflection.cpp +++ b/Import/Skins/DarkSkin/DarkSkinReflection.cpp @@ -391,6 +391,7 @@ namespace vl CLASS_MEMBER_METHOD(__vwsn_darkskin_DocumentTextBoxTemplate_Initialize, { L"__vwsn_this_" }) CLASS_MEMBER_FIELD(__vwsn_precompile_0) CLASS_MEMBER_FIELD(__vwsn_precompile_1) + CLASS_MEMBER_FIELD(__vwsn_precompile_2) CLASS_MEMBER_FIELD(container) CLASS_MEMBER_FIELD(self) END_CLASS_MEMBER(::darkskin::DocumentTextBoxTemplateConstructor) @@ -831,6 +832,7 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_0) CLASS_MEMBER_FIELD(__vwsn_precompile_1) CLASS_MEMBER_FIELD(__vwsn_precompile_2) + CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(container) END_CLASS_MEMBER(::darkskin::RibbonGroupMenuTemplateConstructor) @@ -870,6 +872,7 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_0) CLASS_MEMBER_FIELD(__vwsn_precompile_1) CLASS_MEMBER_FIELD(__vwsn_precompile_2) + CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(container) CLASS_MEMBER_FIELD(self) END_CLASS_MEMBER(::darkskin::RibbonIconLabelTemplateConstructor) @@ -1013,6 +1016,7 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(__vwsn_precompile_4) CLASS_MEMBER_FIELD(__vwsn_precompile_5) + CLASS_MEMBER_FIELD(__vwsn_precompile_6) CLASS_MEMBER_FIELD(container) CLASS_MEMBER_FIELD(self) END_CLASS_MEMBER(::darkskin::RibbonSmallIconLabelTemplateConstructor) @@ -1093,6 +1097,7 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_1) CLASS_MEMBER_FIELD(__vwsn_precompile_10) CLASS_MEMBER_FIELD(__vwsn_precompile_11) + CLASS_MEMBER_FIELD(__vwsn_precompile_12) CLASS_MEMBER_FIELD(__vwsn_precompile_2) CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(__vwsn_precompile_4) @@ -1181,6 +1186,7 @@ namespace vl CLASS_MEMBER_METHOD(__vwsn_darkskin_SinglelineTextBoxTemplate_Initialize, { L"__vwsn_this_" }) CLASS_MEMBER_FIELD(__vwsn_precompile_0) CLASS_MEMBER_FIELD(__vwsn_precompile_1) + CLASS_MEMBER_FIELD(__vwsn_precompile_2) CLASS_MEMBER_FIELD(container) CLASS_MEMBER_FIELD(self) END_CLASS_MEMBER(::darkskin::SinglelineTextBoxTemplateConstructor) @@ -1367,6 +1373,7 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_0) CLASS_MEMBER_FIELD(__vwsn_precompile_1) CLASS_MEMBER_FIELD(__vwsn_precompile_2) + CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(container) END_CLASS_MEMBER(::darkskin::ToolstripMenuTemplateConstructor) @@ -1439,6 +1446,7 @@ namespace vl CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripTemplate_Initialize, { L"__vwsn_this_" }) CLASS_MEMBER_FIELD(__vwsn_precompile_0) CLASS_MEMBER_FIELD(__vwsn_precompile_1) + CLASS_MEMBER_FIELD(container) END_CLASS_MEMBER(::darkskin::ToolstripTemplateConstructor) BEGIN_CLASS_MEMBER(::darkskin::TooltipTemplate) diff --git a/Import/VlppGlrParser.cpp b/Import/VlppGlrParser.cpp index 22e6276e..d0023eea 100644 --- a/Import/VlppGlrParser.cpp +++ b/Import/VlppGlrParser.cpp @@ -4363,6 +4363,7 @@ MergeInsExecContext { // check if all stack objects are the same bool sameStackObject = true; + // TODO: (enumerable) Linq:Skip for (vint index = 1; index < stacks.Count(); index++) { if (stacks[0] != stacks[index]) @@ -4388,6 +4389,7 @@ MergeInsExecContext // call this macro to create a one-time set for InsExec* NEW_MERGE_STACK_MAGIC_COUNTER; auto magicPush = MergeStack_MagicCounter; + // TODO: (enumerable) foreach for (vint index = 0; index < stacks.Count(); index++) { // do not visit the same stack object repeatly diff --git a/Import/VlppGlrParserCompiler.cpp b/Import/VlppGlrParserCompiler.cpp index 87ea5d77..5823e38e 100644 --- a/Import/VlppGlrParserCompiler.cpp +++ b/Import/VlppGlrParserCompiler.cpp @@ -2644,6 +2644,7 @@ AstClassSymbol List visited; visited.Add(newBaseClass); + // TODO: (enumerable) foreach:alterable for (vint i = 0; i < visited.Count(); i++) { auto currentSymbol = visited[i]; @@ -2828,6 +2829,7 @@ AstDefFile List visited; visited.Add(dependency); + // TODO: (enumerable) foreach for (vint i = 0; i < visited.Count(); i++) { auto currentName = visited[i]; @@ -2842,6 +2844,7 @@ AstDefFile return false; } auto current = ownerManager->Files()[currentName]; + // TODO: (enumerable) foreach for (vint j = 0; j < current->dependencies.Count(); j++) { auto dep = current->dependencies[j]; @@ -4210,6 +4213,7 @@ CalculateFirstSet while (true) { vint offset = 0; + // TODO: (enumerable) foreach:alterable for (auto [rule, index] : indexed(indirect.Keys())) { auto&& startRules1 = indirect.GetByIndex(index); @@ -5586,6 +5590,7 @@ FillMissingPrefixMergeClauses if (index != -1) { auto&& values = const_cast&>(references.GetByIndex(index)); + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = values.Count() - 1; i >= 0; i--) { if (values[i].clause == clause) @@ -5777,6 +5782,7 @@ CreateRewrittenRules originRule->name.value += L"_LRI_Original"; } + // TODO: (enumerable) foreach for (auto [ruleSymbol, index] : indexed(rContext.extractPrefixClauses.Keys())) { auto originRule = vContext.astRules[ruleSymbol]; @@ -6149,6 +6155,7 @@ RewriteRules (Unaffected) SortedList& knownOptionalStartRules ) { + // TODO: (enumerable) foreach on group for (auto [pmName, pmIndex] : indexed(pmClauses.Keys())) { // if originRule is not left recursive @@ -6245,6 +6252,7 @@ RewriteRules (Affected) } } + // TODO: (enumerable) foreach on group for (auto [pmName, pmIndex] : indexed(pmClauses.Keys())) { // if originRule is not left recursive @@ -6359,6 +6367,7 @@ RewriteRules (Affected) SortedList& knownOptionalStartRules ) { + // TODO: (enumerable) foreach on group for (auto [conflictedClause, conflictedIndex] : indexed(conflict->conflictedClauses.Keys())) { auto conflictedRuleSymbol = vContext.simpleUseClauseToReferencedRules[conflictedClause]; @@ -6410,6 +6419,7 @@ RewriteRules auto cont1 = c1->continuation; auto cont2 = c2->continuation; if (cont1->flags.Count() != cont2->flags.Count()) return false; + // TODO: (enumerable) foreach:indexed, flag not used, considering Linq:Zip, Any for (auto [flag, i] : indexed(cont1->flags)) { if (cont1->flags[i]->flag.value != cont2->flags[i]->flag.value) return false; @@ -6438,6 +6448,7 @@ RewriteRules { auto candidate = candidates[candidates.Count() - 1]; candidates.RemoveAt(candidates.Count() - 1); + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = candidates.Count() - 1; i >= 0; i--) { auto compare = candidates[i]; @@ -7175,6 +7186,7 @@ ExpandClauseVisitor auto alt = Ptr(new GlrAlternativeSyntax); alt->first = items[0]; alt->second = items[1]; + // TODO: (enumerable) Linq:Skip for (vint i = 2; i < items.Count(); i++) { auto newAlt = Ptr(new GlrAlternativeSyntax); @@ -7528,6 +7540,7 @@ RewriteSyntax void CreateRuleSymbols(SyntaxSymbolManager& syntaxManager, Group>& expandedRules) { + // TODO: (enumerable) foreach on group, sort pairs instead of calling Get for (auto ruleSymbol : From(expandedRules.Keys()) .OrderByKey([](auto&& a) { return a->Name(); }) ) @@ -8265,6 +8278,7 @@ ValidatePrefixMerge SortedList visited; CopyFrom(visiting, context.clauseToStartRules.GetByIndex(index)); + // TODO: (enumerable) visiting/visited for (vint i = 0; i < visiting.Count(); i++) { auto visitingRule = visiting[i]; @@ -9138,6 +9152,7 @@ CollectRuleAffectedSwitchesSecondPassVisitor vint indexSwitch = sContext.ruleAffectedSwitches.Keys().IndexOf(refRuleSymbol); if (indexSwitch != -1) { + // TODO: (enumerable) operate on GetByIndex returned list object directly for (auto&& name : sContext.ruleAffectedSwitches.GetByIndex(indexSwitch)) { if (!pushedSwitches.Contains(name)) @@ -15242,6 +15257,7 @@ SyntaxSymbolManager if (!visited.Contains(startState)) { vint startIndex = visited.Add(startState); + // TODO: (enumerable) Linq:Skip for (vint i = startIndex; i < visited.Count(); i++) { auto state = visited[i]; @@ -15503,6 +15519,7 @@ AutomatonBuilder (Syntax) */ CHECK_ERROR(elements.Count() > 0, L"vl::glr::parsergen::AutomatonBuilder::BuildSequenceSyntax(List&)#Elements must not be empty."); auto pair = elements[0](); + // TODO: (enumerable) Linq:Skip for (vint i = 1; i < elements.Count(); i++) { clauseDisplayText += L" "; @@ -15528,6 +15545,7 @@ AutomatonBuilder (Syntax) startPoses.Add(pair.begin, clauseDisplayText.Length()); clauseDisplayText += L"( "; + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < elements.Count(); i++) { if (i > 0) clauseDisplayText += L" | "; @@ -15647,6 +15665,7 @@ AutomatonBuilder (Clause) } clauseDisplayText += L"lrp:("; + // TODO: (enumerable) Linq:Aggregate for (vint i = 0; i < flags.Count(); i++) { if (i > 0) clauseDisplayText += L","; @@ -15674,6 +15693,7 @@ AutomatonBuilder (Clause) } clauseDisplayText += L"lri:("; + // TODO: (enumerable) Linq:Aggregate for (vint i = 0; i < flags.Count(); i++) { if (i > 0) clauseDisplayText += L","; @@ -16550,6 +16570,7 @@ SyntaxSymbolManager::BuildLeftRecEdge CopyFrom(newEdge->insBeforeInput, lrecPrefixEdge->insBeforeInput, true); CopyFrom(newEdge->insAfterInput, lrecPrefixEdge->insAfterInput, true); + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = newEdge->insBeforeInput.Count() - 1; i >= 0; i--) { if (newEdge->insBeforeInput[i].type == AstInsType::BeginObject) @@ -16558,6 +16579,7 @@ SyntaxSymbolManager::BuildLeftRecEdge newEdge->insBeforeInput.Insert(i + 2, { AstInsType::LriFetch }); } } + // TODO: (enumerable) foreach:indexed(alterable(reversed)) for (vint i = newEdge->insAfterInput.Count() - 1; i >= 0; i--) { if (newEdge->insAfterInput[i].type == AstInsType::BeginObject) @@ -16672,6 +16694,7 @@ SyntaxSymbolManager::EliminateSingleRulePrefix } } + // TODO: (enumerable) foreach on group for (auto [ruleSymbol, prefixIndex] : indexed(prefixEdges.Keys())) { auto&& prefixEdgesOfRule = prefixEdges.GetByIndex(prefixIndex); @@ -16693,6 +16716,7 @@ SyntaxSymbolManager::EliminateSingleRulePrefix // if their insBeforeInput are different // move prefixEdge's insBeforeInput to insAfterInput with help from LriStore and LriFetch SortedList compatibleInsBeforeInputPrefixRules; + // TODO: (enumerable) foreach on group for (auto [ruleSymbol, prefixIndex] : indexed(prefixEdges.Keys())) { // see if all prefixEdges are compatible @@ -16725,6 +16749,7 @@ SyntaxSymbolManager::EliminateSingleRulePrefix // for all prefixEdge that fails the above test // combine insBeforeInput with insAfterInput with the help from LriStore and LriFetch // properly move instructions from prefixEdge to endingEdge + // TODO: (enumerable) foreach on group for (auto [ruleSymbol, prefixIndex] : indexed(prefixEdges.Keys())) { bool compatible = compatibleInsBeforeInputPrefixRules.Contains(ruleSymbol); @@ -16849,6 +16874,7 @@ SyntaxSymbolManager::EliminateEpsilonEdges // all epsilon-NFAs of its clauses become one connected epsilon-NFA of this rule // we can build the compact-NFA out of this epsilon-NFA starting from the start state + // TODO: (enumerable) foreach:alterable for (vint i = 0; i < visited.Count(); i++) { auto current = visited[i]; @@ -17080,6 +17106,7 @@ SyntaxSymbolManager::FixLeftRecursionInjectEdge auto& endingStates = endingStatesArray[index]; auto& returnEdges = returnEdgesArray[index]; + // TODO: (enumerable) foreach:indexed(reversed) for (vint i = returnEdges.Count() - 1; i >= 0; i--) { auto endingState = endingStates[i]; @@ -17122,6 +17149,7 @@ SyntaxSymbolManager::FixLeftRecursionInjectEdge } } + // TODO: (enumerable) foreach on group for (auto [input, inputIndex] : indexed(acceptableInputs.Keys())) { auto [inputToken, returnEdgeCount] = input; @@ -17160,6 +17188,7 @@ SyntaxSymbolManager::FixLeftRecursionInjectEdge Group simpleUseRecords; // search for placeholder edges where their excluded return edges are all reuse edges + // TODO: (enumerable) foreach on group for (vint recordIndex = 0; recordIndex < placeholderRecords.Count(); recordIndex++) { auto [placeholderIndex, lrEdge, tokenEdge] = placeholderRecords[recordIndex]; @@ -17176,6 +17205,7 @@ SyntaxSymbolManager::FixLeftRecursionInjectEdge // for each group, if there are more than one placeholder edges // mark them as deleted except the first one SortedList recordsToRemove; + // TODO: (enumerable) foreach on group for (vint recordGroup = 0; recordGroup < simpleUseRecords.Count(); recordGroup++) { auto&& records = simpleUseRecords.GetByIndex(recordGroup); @@ -17187,6 +17217,7 @@ SyntaxSymbolManager::FixLeftRecursionInjectEdge // delete them in Group // this way is not recommended but the group is going to be discarded very soon + // TODO: (enumerable) foreach:reversed for (vint i = recordsToRemove.Count() - 1; i >= 0; i--) { const_cast&>(placeholderRecords).RemoveAt(recordsToRemove[i]); @@ -17222,7 +17253,8 @@ SyntaxSymbolManager::FixLeftRecursionInjectEdge CopyFrom(instructionPrefix, placeholderEdge->insBeforeInput, true); instructionPrefix.Add({ AstInsType::LriFetch }); - for (vint i = returnEdges.Count() - 1; i >= returnEdgeCount;i --) + // TODO: (enumerable) foreach:reversed + for (vint i = returnEdges.Count() - 1; i >= returnEdgeCount; i--) { auto endingState = endingStates[i]; auto returnEdge = returnEdges[i]; diff --git a/Import/VlppOS.Linux.cpp b/Import/VlppOS.Linux.cpp index 73bdd3bb..5df8a392 100644 --- a/Import/VlppOS.Linux.cpp +++ b/Import/VlppOS.Linux.cpp @@ -1298,6 +1298,7 @@ ThreadPoolLite } threadPoolData->taskFinishEvent.Wait(); + // TODO: (enumerable) foreach for (vint i = 0; i < threadPoolData->taskThreads.Count(); i++) { auto thread = threadPoolData->taskThreads[i]; diff --git a/Import/VlppOS.Windows.cpp b/Import/VlppOS.Windows.cpp index 1f610a49..ca0b5cc4 100644 --- a/Import/VlppOS.Windows.cpp +++ b/Import/VlppOS.Windows.cpp @@ -431,6 +431,7 @@ Utilities if (!connectedInternet) goto CLEANUP; // open request + // TODO: (enumerable) Linq:Select for (vint i = 0; i < request.acceptTypes.Count(); i++) { acceptTypes.Add(request.acceptTypes.Get(i).Buffer()); diff --git a/Import/VlppOS.cpp b/Import/VlppOS.cpp index db48ab7f..f5af9494 100644 --- a/Import/VlppOS.cpp +++ b/Import/VlppOS.cpp @@ -1082,6 +1082,7 @@ BroadcastStream vint BroadcastStream::Write(void* _buffer, vint _size) { + // TODO: (enumerable) foreach for(vint i=0;iWrite(_buffer, _size); diff --git a/Import/VlppReflection.cpp b/Import/VlppReflection.cpp index a4bb87ec..7e44bdcc 100644 --- a/Import/VlppReflection.cpp +++ b/Import/VlppReflection.cpp @@ -137,6 +137,7 @@ description::TypeManager { loaded = true; auto oldTypeVersion = typeVersion; + // TODO: (enumerable) foreach for (vint i = 0; i < typeLoaders.Count(); i++) { typeLoaders[i]->Load(this); @@ -157,6 +158,7 @@ description::TypeManager loaded = false; rootType = 0; auto oldTypeVersion = typeVersion; + // TODO: (enumerable) foreach for (vint i = 0; i < typeLoaders.Count(); i++) { typeLoaders[i]->Unload(this); @@ -865,6 +867,7 @@ MetaonlyTypeInfo default:; } WString result = elementType->GetTypeFriendlyName() + L"<"; + // TODO: (enumerable) Linq:Aggregate for (auto [type, i] : indexed(genericArguments)) { if (i > 0) result += L", "; @@ -1107,6 +1110,7 @@ IMethodInfo : context(_context) , metadata(_metadata) { + // TODO: (enumerable) foreach for (vint i = 0; i < metadata->parameters.Count(); i++) { parameters.Add(Ptr(new MetaonlyParameterInfo(context, metadata->parameters[i], metadata->ownerTypeDescriptor, this))); @@ -1443,6 +1447,7 @@ ITypeDescriptor serializableType = context->serializableTypes[metadata->typeName].Obj(); } + // TODO: (enumerable) foreach for (vint i = 0; i < metadata->methodGroups.Count(); i++) { methodGroups.Add(Ptr(new MetaonlyMethodGroupInfo(context, metadata, metadata->methodGroups[i]))); @@ -1659,6 +1664,7 @@ ITypeDescriptor IMethodGroupInfo* GetMethodGroupByName(const WString& name, bool inheritable) override { + // TODO: (enumerable) foreach for (vint i = 0; i < methodGroups.Count(); i++) { auto info = methodGroups[i].Obj(); @@ -1932,6 +1938,7 @@ LoadMetaonlyTypes void Load(ITypeManager* manager) override { + // TODO: (enumerable) foreach for (vint i = 0; i < context->tds.Count(); i++) { auto td = context->tds[i]; @@ -2533,6 +2540,7 @@ description::Value } else { + // TODO: (enumerable) foreach for(vint i=0;iGetType())) @@ -3430,6 +3439,7 @@ MethodInfoImpl bool MethodInfoImpl::AddParameter(Ptr parameter) { + // TODO: (enumerable) foreach for(vint i=0;iGetName()==parameter->GetName()) @@ -3969,6 +3979,7 @@ TypeDescriptorImpl { Load(); if (this == targetType) return true; + // TODO: (enumerable) foreach for (vint i = 0; i < baseTypeDescriptors.Count(); i++) { if (baseTypeDescriptors[i]->CanConvertTo(targetType)) return true; @@ -4004,6 +4015,7 @@ TypeDescriptorImpl } if(inheritable) { + // TODO: (enumerable) foreach for(vint i=0;iIsPropertyExists(name, true)) @@ -4025,6 +4037,7 @@ TypeDescriptorImpl } if(inheritable) { + // TODO: (enumerable) foreach for(vint i=0;iGetPropertyByName(name, true); @@ -4065,6 +4078,7 @@ TypeDescriptorImpl } if(inheritable) { + // TODO: (enumerable) foreach for(vint i=0;iIsEventExists(name, true)) @@ -4086,6 +4100,7 @@ TypeDescriptorImpl } if(inheritable) { + // TODO: (enumerable) foreach for(vint i=0;iGetEventByName(name, true); @@ -4126,6 +4141,7 @@ TypeDescriptorImpl } if(inheritable) { + // TODO: (enumerable) foreach for(vint i=0;iIsMethodGroupExists(name, true)) @@ -4147,6 +4163,7 @@ TypeDescriptorImpl } if(inheritable) { + // TODO: (enumerable) foreach for(vint i=0;iGetMethodGroupByName(name, true); diff --git a/Import/VlppRegex.cpp b/Import/VlppRegex.cpp index 6c1a7940..b28fad0b 100644 --- a/Import/VlppRegex.cpp +++ b/Import/VlppRegex.cpp @@ -79,6 +79,7 @@ RegexMatch_ : success(true) , result(_string, _result->start, _result->length) { + // TODO: (enumerable) foreach for (vint i = 0; i < _result->captures.Count(); i++) { CaptureRecord& capture = _result->captures[i]; @@ -994,6 +995,7 @@ RegexLexer_ expression->CollectCharSet(subsets); expressions.Add(expression); } + // TODO: (enumerable) foreach for (vint i = 0; i < expressions.Count(); i++) { Dictionary nfaStateMap; @@ -1006,9 +1008,11 @@ RegexLexer_ } // Mark all states in DFAs + // TODO: (enumerable) foreach for (vint i = 0; i < dfas.Count(); i++) { Ptr dfa = dfas[i]; + // TODO: (enumerable) foreach for (vint j = 0; j < dfa->states.Count(); j++) { if (dfa->states[j]->finalState) @@ -1024,12 +1028,14 @@ RegexLexer_ // Connect all DFAs to an e-NFA auto bigEnfa = Ptr(new Automaton); + // TODO: (enumerable) foreach for (vint i = 0; i < dfas.Count(); i++) { CopyFrom(bigEnfa->states, dfas[i]->states, true); CopyFrom(bigEnfa->transitions, dfas[i]->transitions, true); } bigEnfa->startState = bigEnfa->NewState(); + // TODO: (enumerable) foreach for (vint i = 0; i < dfas.Count(); i++) { bigEnfa->NewEpsilon(bigEnfa->startState, dfas[i]->startState); @@ -1039,12 +1045,14 @@ RegexLexer_ Dictionary nfaStateMap; Group dfaStateMap; auto bigNfa = EpsilonNfaToNfa(bigEnfa, PureEpsilonChecker, nfaStateMap); + // TODO: (enumerable) foreach on dictionary for (vint i = 0; i < nfaStateMap.Keys().Count(); i++) { void* userData = nfaStateMap.Values().Get(i)->userData; nfaStateMap.Keys()[i]->userData = userData; } auto bigDfa = NfaToDfa(bigNfa, dfaStateMap); + // TODO: (enumerable) foreach on group for (vint i = 0; i < dfaStateMap.Keys().Count(); i++) { void* userData = dfaStateMap.GetByIndex(i).Get(0)->userData; @@ -1346,6 +1354,7 @@ PureInterpretor { charMap[i] = charSetCount - 1; } + // TODO: (enumerable) foreach for (vint i = 0; i < charRanges.Count(); i++) { CharRange range = charRanges[i]; @@ -1377,6 +1386,7 @@ PureInterpretor } State* state = dfa->states[i].Obj(); + // TODO: (enumerable) foreach for (vint j = 0; j < state->transitions.Count(); j++) { Transition* dfaTransition = state->transitions[j]; @@ -1717,12 +1727,14 @@ RichInterpretor { datas = new UserData[dfa->states.Count()]; + // TODO: (enumerable) foreach for (vint i = 0; i < dfa->states.Count(); i++) { State* state = dfa->states[i].Obj(); vint charEdges = 0; vint nonCharEdges = 0; bool mustSave = false; + // TODO: (enumerable) foreach for (vint j = 0; j < state->transitions.Count(); j++) { if (state->transitions[j]->type == Transition::Chars) @@ -1762,6 +1774,7 @@ RichInterpretor bool found = false; // true means at least one transition matches the input StateSaver oldState = currentState; // Iterate through all transitions from the current state + // TODO: (enumerable) foreach:reversed for (vint i = currentState.minTransition; i < currentState.currentState->transitions.Count(); i++) { Transition* transition = currentState.currentState->transitions[i]; @@ -1972,6 +1985,7 @@ RichInterpretor // Find the next NegativeFail transition // Because when a negative lookahead regex failed to match, it is actually succeeded // Since a negative lookahead means we don't want to match this regex + // TODO: (enumerable) foreach:reversed for (vint i = 0; i < currentState.currentState->transitions.Count(); i++) { Transition* transition = currentState.currentState->transitions[i]; @@ -2185,6 +2199,7 @@ CharSetExpression range.begin = range.end; range.end = t; } + // TODO: (enumerable) foreach for (vint i = 0; i < ranges.Count(); i++) { if (!(rangeranges[i])) @@ -2389,6 +2404,7 @@ CharSetAlgorithm if (expression->reverse) { char32_t begin = 1; + // TODO: (enumerable) foreach for (vint i = 0; i < ranges.Count(); i++) { CharRange range = ranges[i]; @@ -2405,6 +2421,7 @@ CharSetAlgorithm } else { + // TODO: (enumerable) foreach for (vint i = 0; i < ranges.Count(); i++) { Process(expression, target, ranges[i]); @@ -2535,6 +2552,7 @@ SetNormalizedCharSetAlgorithm public: void Process(CharSetExpression* expression, NormalizedCharSet* target, CharRange range) { + // TODO: (enumerable) foreach for (vint j = 0; j < target->ranges.Count(); j++) { CharRange targetRange = target->ranges[j]; @@ -2643,6 +2661,7 @@ EpsilonNfaAlgorithm EpsilonNfa nfa; nfa.start = target->NewState(); nfa.end = target->NewState(); + // TODO: (enumerable) foreach for (vint i = 0; i < expression->ranges.Count(); i++) { target->NewChars(nfa.start, nfa.end, expression->ranges[i]); @@ -2949,6 +2968,7 @@ IsEqualAlgorithm { if (expression->reverse != expected->reverse)return false; if (expression->ranges.Count() != expected->ranges.Count())return false; + // TODO: (enumerable) foreach:indexed for (vint i = 0; i < expression->ranges.Count(); i++) { if (expression->ranges[i] != expected->ranges[i])return false; @@ -3881,6 +3901,7 @@ RegexNode auto target = Ptr(new CharSetExpression); target->reverse = false; CopyFrom(target->ranges, left->ranges); + // TODO: (enumerable) foreach for (vint i = 0; i < right->ranges.Count(); i++) { if (!target->AddRangeWithConflict(right->ranges[i])) @@ -4142,6 +4163,7 @@ Helpers if (!epsilonStates.Contains(sourceState)) { epsilonStates.Add(sourceState); + // TODO: (enumerable) foreach:alterable for (vint i = 0; i < sourceState->transitions.Count(); i++) { Transition* transition = sourceState->transitions[i]; @@ -4176,6 +4198,7 @@ Helpers target->startState = target->states[0].Obj(); CopyFrom(target->captureNames, source->captureNames); + // TODO: (enumerable) foreach for (vint i = 0; i < target->states.Count(); i++) { // Clear cache @@ -4192,6 +4215,7 @@ Helpers CollectEpsilon(targetState, sourceState, epsilonChecker, epsilonStates, transitions); // Iterate through all non-epsilon transitions + // TODO: (enumerable) foreach for (vint j = 0; j < transitions.Count(); j++) { Transition* transition = transitions[j]; @@ -4244,6 +4268,7 @@ Helpers if (transitionClass == nullptr) { + // TODO: (enumerable) foreach for (vint l = 0; l < orderedTransitionClasses.Count(); l++) { Transition* key = orderedTransitionClasses[l]; @@ -4283,6 +4308,7 @@ Helpers // Check if these NFA states represent a created DFA state State* dfaState = 0; + // TODO: (enumerable) foreach on dictionary for (vint k = 0; k < dfaStateMap.Count(); k++) { // Compare two NFA states set @@ -4295,6 +4321,7 @@ Helpers if (!dfaState) { dfaState = target->NewState(); + // TODO: (enumerable) foreach for (vint k = 0; k < transitionTargets.Count(); k++) { dfaStateMap.Add(dfaState, transitionTargets[k]); diff --git a/Tools/Reflection32.bin b/Tools/Reflection32.bin index 1032d10cc0b7ca25213849e4cd8ee1643aa5ff1a..8b29d2672c714a28971b689d09566946ef1bb5dd 100644 GIT binary patch literal 935078 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 literal 936690 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 z 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 diff --git a/Tools/Reflection64.bin b/Tools/Reflection64.bin index 4f40d9bc6166806eec3a549cbd860e149ea5f50e..7799ca778f6757f747595e1a3f4103ec5c93fe5c 100644 GIT binary patch literal 935078 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%0AWl=*M@EeUPx&Cp5Kz}BPeKa|5_k{p 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 literal 936690 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 - +
<_>composeType:MinSize <_>composeType:MinSize diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml index 95619cb0..bb61b386 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DataGridTabPage.xml @@ -27,7 +27,7 @@ ]]> -
+
<_>composeType:MinSize <_>composeType:MinSize diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DatePickerTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DatePickerTabPage.xml index 07579004..9fe2fb04 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DatePickerTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DatePickerTabPage.xml @@ -2,7 +2,7 @@ -
+
<_>composeType:MinSize <_>composeType:MinSize diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentComponents.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentComponents.xml index 06aafd09..3d6d3daa 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentComponents.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentComponents.xml @@ -8,7 +8,7 @@ -
+
<_>composeType:MinSize <_>composeType:Percentage percentage:1.0 diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorBase.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorBase.xml index 82a94379..f1df7d54 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorBase.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorBase.xml @@ -168,7 +168,7 @@ Text="The document has been changed since the last time it was saved as a Private Format file. Do you want to save this file?" /> -
+
<_>composeType:MinSize <_>composeType:MinSize diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorRibbon.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorRibbon.xml index 5cc61734..062f84e9 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorRibbon.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/DocumentEditorRibbon.xml @@ -237,8 +237,8 @@ - - + + diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ElementTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ElementTabPage.xml index f4c4004e..61b250bd 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ElementTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ElementTabPage.xml @@ -1,6 +1,6 @@ -
+
<_>composeType:Absolute absolute:45 <_>composeType:Absolute absolute:45 diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ListViewTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ListViewTabPage.xml index 32f0f4ea..8c74b2fe 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ListViewTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ListViewTabPage.xml @@ -21,7 +21,7 @@ ]]> -
+
<_>composeType:MinSize <_>composeType:MinSize diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedDialogsTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedDialogsTabPage.xml index cc85417d..6a84a32d 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedDialogsTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedDialogsTabPage.xml @@ -52,7 +52,7 @@ -
+
<_>composeType:MinSize <_>composeType:Percentage percentage:1.0 @@ -169,7 +169,7 @@ ]]> -
+
<_>composeType:MinSize <_>composeType:MinSize @@ -259,7 +259,7 @@ -
+
<_>composeType:Absolute absolute:30 <_>composeType:MinSize @@ -295,7 +295,7 @@ -
+
<_>composeType:MinSize <_>composeType:MinSize @@ -365,7 +365,7 @@ -
+
<_>composeType:MinSize <_>composeType:MinSize diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedStringsTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedStringsTabPage.xml index d6a12d53..72044660 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedStringsTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/LocalizedStringsTabPage.xml @@ -44,7 +44,7 @@ -
+
<_>composeType:MinSize <_>composeType:Percentage percentage:1.0 diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/RepeatComponents.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/RepeatComponents.xml index 310bd216..cb072c0c 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/RepeatComponents.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/RepeatComponents.xml @@ -117,8 +117,7 @@ - - +
+
<_>composeType:Percentage percentage:1.0 <_>composeType:Absolute absolute:20 diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ResponsiveTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ResponsiveTabPage.xml index 90619309..7aa9a77c 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ResponsiveTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/ResponsiveTabPage.xml @@ -17,9 +17,9 @@ - + - + @@ -106,9 +106,9 @@ - + - + @@ -186,9 +186,9 @@ - + - + diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp index c5e76bd2..dc541b1d 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.cpp @@ -487,9 +487,9 @@ Closures auto angle = (((circleRatio * ::vl::reflection::description::Math::Pi()) * static_cast(static_cast<::vl::vint>(2))) + (::vl::reflection::description::Math::Pi() * static_cast(1.5))); auto sin = ::vl::reflection::description::Math::Sin(angle); auto cos = ::vl::reflection::description::Math::Cos(angle); - auto cx = ((::vl::__vwsn::This(container)->GetBounds().x2 - ::vl::__vwsn::This(container)->GetBounds().x1) / static_cast<::vl::vint>(2)); - auto cy = ((::vl::__vwsn::This(container)->GetBounds().y2 - ::vl::__vwsn::This(container)->GetBounds().y1) / static_cast<::vl::vint>(2)); - auto radiusBall = ((::vl::__vwsn::This(ball)->GetBounds().x2 - ::vl::__vwsn::This(ball)->GetBounds().x1) / static_cast<::vl::vint>(2)); + auto cx = ((::vl::__vwsn::This(container)->GetCachedBounds().x2 - ::vl::__vwsn::This(container)->GetCachedBounds().x1) / static_cast<::vl::vint>(2)); + auto cy = ((::vl::__vwsn::This(container)->GetCachedBounds().y2 - ::vl::__vwsn::This(container)->GetCachedBounds().y1) / static_cast<::vl::vint>(2)); + auto radiusBall = ((::vl::__vwsn::This(ball)->GetCachedBounds().x2 - ::vl::__vwsn::This(ball)->GetCachedBounds().x1) / static_cast<::vl::vint>(2)); auto radiusOrbit = (::vl::reflection::description::Math::Min(cx, cy) - radiusBall); auto x = static_cast<::vl::vint>(::vl::reflection::description::Math::Round(((cos * static_cast(radiusOrbit)) + static_cast(cx)))); auto y = static_cast<::vl::vint>(::vl::reflection::description::Math::Round(((sin * static_cast(radiusOrbit)) + static_cast(cx)))); @@ -14891,6 +14891,9 @@ namespace demo { ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_3)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -15754,6 +15757,9 @@ Class (::demo::DataGridTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -16389,6 +16395,9 @@ Class (::demo::DatePickerTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -16664,6 +16673,9 @@ Class (::demo::DocumentBoxSubTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -16909,6 +16921,9 @@ Class (::demo::DocumentEditorBaseConstructor) ::vl::__vwsn::This(this->self)->AddComponent(static_cast<::vl::presentation::controls::GuiComponent*>(this->dialogQueryClose)); } (this->__vwsn_precompile_0 = new ::vl::presentation::compositions::GuiTableComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -17677,9 +17692,6 @@ Class (::demo::DocumentEditorRibbonConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_90)->SetDirection(::vl::presentation::compositions::GuiStackComposition::Direction::Horizontal); } (this->__vwsn_precompile_91 = new ::vl::presentation::compositions::GuiStackItemComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_91)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(10); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); - } (this->__vwsn_precompile_92 = ::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidLabelElement>())); { ::vl::__vwsn::This(this->__vwsn_precompile_92.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#FFFFFF"))); @@ -17691,7 +17703,7 @@ Class (::demo::DocumentEditorRibbonConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_92.Obj())->SetHorizontalAlignment(::vl::presentation::Alignment::Center); } { - ::vl::__vwsn::This(this->__vwsn_precompile_92.Obj())->SetText(::vl::WString::Unmanaged(L"Search:")); + ::vl::__vwsn::This(this->__vwsn_precompile_92.Obj())->SetText(::vl::WString::Unmanaged(L"Search: ")); } { ::vl::__vwsn::This(this->__vwsn_precompile_91)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_92)); @@ -19812,6 +19824,9 @@ Class (::demo::ElementTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(10)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -20411,10 +20426,6 @@ Class (::demo::EnglishNumbersControllerConstructor) { (this->__vwsn_precompile_0 = new ::vl::presentation::controls::GuiControl(::vl::presentation::theme::ThemeName::GroupBox)); } - (this->__vwsn_precompile_18 = ::vl::__vwsn::This(this->__vwsn_precompile_0)->GetContainerComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_18)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(5); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(5); __vwsn_temp__.bottom = static_cast<::vl::vint>(5); return __vwsn_temp__; }()); - } (this->__vwsn_precompile_17 = ::vl::__vwsn::This(this->__vwsn_precompile_0)->GetBoundsComposition()); { ::vl::__vwsn::This(this->__vwsn_precompile_17)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = (- static_cast<::vl::vint>(1)); return __vwsn_temp__; }()); @@ -20427,7 +20438,7 @@ Class (::demo::EnglishNumbersControllerConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetPadding(static_cast<::vl::vint>(5)); } { - ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(5); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(5); __vwsn_temp__.bottom = static_cast<::vl::vint>(5); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetDirection(::vl::presentation::compositions::GuiStackComposition::Direction::Vertical); @@ -20585,7 +20596,6 @@ Class (::demo::EnglishNumbersControllerConstructor) , __vwsn_precompile_15(static_cast<::vl::presentation::controls::GuiButton*>(nullptr)) , __vwsn_precompile_16(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , __vwsn_precompile_17(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) - , __vwsn_precompile_18(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(nullptr)) { } @@ -21168,6 +21178,9 @@ Class (::demo::HyperlinkWindowConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -21361,6 +21374,9 @@ Class (::demo::ListViewTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -21831,6 +21847,9 @@ Class (::demo::LocalizedColorDialogTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -21923,6 +21942,9 @@ Class (::demo::LocalizedDialogsTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -22103,6 +22125,9 @@ Class (::demo::LocalizedFileDialogTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -22738,6 +22763,9 @@ Class (::demo::LocalizedFontDialogTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -22865,6 +22893,9 @@ Class (::demo::LocalizedMessageDialogTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -23237,6 +23268,9 @@ Class (::demo::LocalizedStringsTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -24263,6 +24297,9 @@ Class (::demo::RepeatTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -24738,9 +24775,6 @@ Class (::demo::ResponsiveGroupControlConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(0), static_cast<::vl::vint>(5), static_cast<::vl::vint>(1)); } (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } @@ -24752,6 +24786,9 @@ Class (::demo::ResponsiveGroupControlConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_3)); } (this->responsive = new ::vl::presentation::compositions::GuiResponsiveGroupComposition()); + { + ::vl::__vwsn::This(this->responsive)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); + } (this->__vwsn_precompile_4 = new ::vl::presentation::compositions::GuiStackComposition()); { ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); @@ -25130,9 +25167,6 @@ Class (::demo::ResponsiveStackControlConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(0), static_cast<::vl::vint>(5), static_cast<::vl::vint>(1)); } (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } @@ -25144,6 +25178,9 @@ Class (::demo::ResponsiveStackControlConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_3)); } (this->responsive = new ::vl::presentation::compositions::GuiResponsiveStackComposition()); + { + ::vl::__vwsn::This(this->responsive)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); + } (this->__vwsn_precompile_4 = new ::vl::presentation::compositions::GuiStackComposition()); { ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); @@ -25675,9 +25712,6 @@ Class (::demo::ResponsiveViewControlConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(0), static_cast<::vl::vint>(5), static_cast<::vl::vint>(1)); } (this->__vwsn_precompile_2 = new ::vl::presentation::compositions::GuiBoundsComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); - } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } @@ -25870,6 +25904,9 @@ Class (::demo::ResponsiveViewControlConstructor) auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->responsive)->GetSharedControls()); ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->documentBox)); } + { + ::vl::__vwsn::This(this->responsive)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(1); __vwsn_temp__.top = static_cast<::vl::vint>(1); __vwsn_temp__.right = static_cast<::vl::vint>(1); __vwsn_temp__.bottom = static_cast<::vl::vint>(1); return __vwsn_temp__; }()); + } { ::vl::__vwsn::This(this->__vwsn_precompile_2)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->responsive)); } @@ -26776,6 +26813,9 @@ Class (::demo::TextBoxSubTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -26910,6 +26950,9 @@ Class (::demo::TextBoxTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -27171,6 +27214,9 @@ Class (::demo::TextListTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -27271,10 +27317,6 @@ Class (::demo::TextListTabPageConstructor) { (this->__vwsn_precompile_10 = new ::vl::presentation::controls::GuiControl(::vl::presentation::theme::ThemeName::GroupBox)); } - (this->__vwsn_precompile_40 = ::vl::__vwsn::This(this->__vwsn_precompile_10)->GetContainerComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_40)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(5); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(5); __vwsn_temp__.bottom = static_cast<::vl::vint>(5); return __vwsn_temp__; }()); - } (this->__vwsn_precompile_39 = ::vl::__vwsn::This(this->__vwsn_precompile_10)->GetBoundsComposition()); { ::vl::__vwsn::This(this->__vwsn_precompile_39)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = (- static_cast<::vl::vint>(1)); return __vwsn_temp__; }()); @@ -27290,7 +27332,7 @@ Class (::demo::TextListTabPageConstructor) ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetPadding(static_cast<::vl::vint>(5)); } { - ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(5); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(5); __vwsn_temp__.bottom = static_cast<::vl::vint>(5); return __vwsn_temp__; }()); } { ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetDirection(::vl::presentation::compositions::GuiStackComposition::Direction::Vertical); @@ -27472,9 +27514,9 @@ Class (::demo::TextListTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_9)); } - (this->__vwsn_precompile_41 = new ::vl::presentation::compositions::GuiCellComposition()); + (this->__vwsn_precompile_40 = new ::vl::presentation::compositions::GuiCellComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_41)->SetSite(static_cast<::vl::vint>(1), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); + ::vl::__vwsn::This(this->__vwsn_precompile_40)->SetSite(static_cast<::vl::vint>(1), static_cast<::vl::vint>(2), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1)); } { (this->bindableTextList = new ::vl::presentation::controls::GuiBindableTextList(::vl::presentation::theme::ThemeName::TextList)); @@ -27494,15 +27536,15 @@ Class (::demo::TextListTabPageConstructor) { ::vl::__vwsn::This(this->bindableTextList)->SetAlt(::vl::WString::Unmanaged(L"B")); } - (this->__vwsn_precompile_42 = ::vl::__vwsn::This(this->bindableTextList)->GetBoundsComposition()); + (this->__vwsn_precompile_41 = ::vl::__vwsn::This(this->bindableTextList)->GetBoundsComposition()); { - ::vl::__vwsn::This(this->__vwsn_precompile_42)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); + ::vl::__vwsn::This(this->__vwsn_precompile_41)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } { - ::vl::__vwsn::This(this->__vwsn_precompile_41)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(::vl::__vwsn::This(this->bindableTextList)->GetBoundsComposition())); + ::vl::__vwsn::This(this->__vwsn_precompile_40)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(::vl::__vwsn::This(this->bindableTextList)->GetBoundsComposition())); } { - ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_41)); + ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_40)); } { ::vl::__vwsn::This(::vl::__vwsn::This(this->self)->GetContainerComposition())->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_0)); @@ -27588,9 +27630,8 @@ Class (::demo::TextListTabPageConstructor) , __vwsn_precompile_37(static_cast<::vl::presentation::controls::GuiSelectableButton*>(nullptr)) , __vwsn_precompile_38(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) , __vwsn_precompile_39(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) - , __vwsn_precompile_40(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(nullptr)) - , __vwsn_precompile_41(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) - , __vwsn_precompile_42(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) + , __vwsn_precompile_40(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr)) + , __vwsn_precompile_41(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr)) { } @@ -27720,6 +27761,9 @@ Class (::demo::TreeViewTabPageConstructor) { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetCellPadding(static_cast<::vl::vint>(5)); } + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h index ced01994..9c1001b5 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoPartialClasses.h @@ -1728,7 +1728,6 @@ namespace demo ::vl::presentation::controls::GuiButton* __vwsn_precompile_15; ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_16; ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_17; - ::vl::presentation::compositions::GuiGraphicsComposition* __vwsn_precompile_18; void __vwsn_demo_EnglishNumbersController_Initialize(::demo::EnglishNumbersController* __vwsn_this_); public: EnglishNumbersControllerConstructor(); @@ -3483,9 +3482,8 @@ namespace demo ::vl::presentation::controls::GuiSelectableButton* __vwsn_precompile_37; ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_38; ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_39; - ::vl::presentation::compositions::GuiGraphicsComposition* __vwsn_precompile_40; - ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_41; - ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_42; + ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_40; + ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_41; void __vwsn_demo_TextListTabPage_Initialize(::demo::TextListTabPage* __vwsn_this_); public: TextListTabPageConstructor(); diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp index f015ac17..0be72f05 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp @@ -874,7 +874,6 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_15) CLASS_MEMBER_FIELD(__vwsn_precompile_16) CLASS_MEMBER_FIELD(__vwsn_precompile_17) - CLASS_MEMBER_FIELD(__vwsn_precompile_18) CLASS_MEMBER_FIELD(__vwsn_precompile_2) CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(__vwsn_precompile_4) @@ -1967,7 +1966,6 @@ namespace vl CLASS_MEMBER_FIELD(__vwsn_precompile_4) CLASS_MEMBER_FIELD(__vwsn_precompile_40) CLASS_MEMBER_FIELD(__vwsn_precompile_41) - CLASS_MEMBER_FIELD(__vwsn_precompile_42) CLASS_MEMBER_FIELD(__vwsn_precompile_5) CLASS_MEMBER_FIELD(__vwsn_precompile_6) CLASS_MEMBER_FIELD(__vwsn_precompile_7) diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextBoxTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextBoxTabPage.xml index db22314d..7af870be 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextBoxTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextBoxTabPage.xml @@ -83,7 +83,7 @@ So as I pray, unlimited blade works.]]> ]]> -
+
composeType:MinSize composeType:Percentage percentage:1.0 @@ -116,7 +116,7 @@ So as I pray, unlimited blade works.]]> ]]> -
+
composeType:MinSize composeType:Percentage percentage:1.0 @@ -179,7 +179,7 @@ So as I pray, unlimited blade works.]]> ]]> -
+
composeType:Percentage percentage:1.0 composeType:MinSize diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextListTabPage.xml b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextListTabPage.xml index ea151f9f..d3a10d6b 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextListTabPage.xml +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/TextListTabPage.xml @@ -7,7 +7,7 @@ -
+
<_>composeType:MinSize <_>composeType:Percentage percentage:1.0 @@ -66,8 +66,7 @@ - - +
+
<_>composeType:MinSize <_>composeType:Percentage percentage:1.0 diff --git a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBasePartialClasses.cpp b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBasePartialClasses.cpp index 7e903435..3b4b7845 100644 --- a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBasePartialClasses.cpp +++ b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBasePartialClasses.cpp @@ -2982,6 +2982,9 @@ namespace demo ::vl::__vwsn::This(this->self)->AddComponent(static_cast<::vl::presentation::controls::GuiComponent*>(this->dialogQueryClose)); } (this->__vwsn_precompile_0 = new ::vl::presentation::compositions::GuiTableComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } @@ -3757,6 +3760,9 @@ Class (::demo::HyperlinkWindowConstructor) ::vl::__vwsn::This(this->self)->SetText(::vl::WString::Unmanaged(L"Hyperlink")); } (this->__vwsn_precompile_0 = new ::vl::presentation::compositions::GuiTableComposition()); + { + ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); + } { ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); } diff --git a/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonPartialClasses.cpp b/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonPartialClasses.cpp index 23b1e8ad..77846f9e 100644 --- a/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonPartialClasses.cpp +++ b/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonPartialClasses.cpp @@ -1920,9 +1920,6 @@ namespace demo ::vl::__vwsn::This(this->__vwsn_precompile_13)->SetMinSizeLimitation(::vl::presentation::compositions::GuiGraphicsComposition::MinSizeLimitation::LimitToElementAndChildren); } (this->__vwsn_precompile_14 = new ::vl::presentation::compositions::GuiStackItemComposition()); - { - ::vl::__vwsn::This(this->__vwsn_precompile_14)->SetInternalMargin([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(10); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }()); - } (this->__vwsn_precompile_15 = ::vl::Ptr<::vl::presentation::elements::GuiSolidLabelElement>(::vl::reflection::description::Element_Constructor<::vl::presentation::elements::GuiSolidLabelElement>())); { ::vl::__vwsn::This(this->__vwsn_precompile_15.Obj())->SetVerticalAlignment(::vl::presentation::Alignment::Center); @@ -1934,7 +1931,7 @@ namespace demo ::vl::__vwsn::This(this->__vwsn_precompile_15.Obj())->SetColor(::vl::__vwsn::Parse<::vl::presentation::Color>(::vl::WString::Unmanaged(L"#FFFFFF"))); } { - ::vl::__vwsn::This(this->__vwsn_precompile_15.Obj())->SetText(::vl::WString::Unmanaged(L"Search:")); + ::vl::__vwsn::This(this->__vwsn_precompile_15.Obj())->SetText(::vl::WString::Unmanaged(L"Search: ")); } { ::vl::__vwsn::This(this->__vwsn_precompile_14)->SetOwnedElement(::vl::Ptr<::vl::presentation::elements::IGuiGraphicsElement>(this->__vwsn_precompile_15)); diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 index aeed856403df53b22b2279de8aca81a6b8c3fce3..84671534f10cd296ff05d5c1f1834c0d84c19d0e 100644 GIT binary patch delta 807 zcma)4O=uHA7|moio7qilrWBgBhO+))kTyvxG&Z2NJt%?(ytLHpX0u|1K$A^L(Z)l? z9|RHU;dw07lLrqH5DK2!LoOb~YlU7sh?lfS!GhFp^HXwkVZQI1nfK*PV3<= z&dWXAyj!}DtYl(OO5lSui79y+nmk4#<4nS~6NOMxOkh@V@zxgDQL@;Ga0~~xSOi~# z(-;T}j5-`uZIJoV&@NGYrj4@@uJQyMpg4@1s!r8&b)KETCY|YF!+6KfQY`aHiof_7 z+SAlH)lI4e9L-=pM0f&zEl*xXLb0^eZ9(hH58TSib*Effs`qx~?yi?>rN>1L%gT_y z-cD>4PeXGw3~A!Xk2^~A(_ZNBEga?qvW`H@(pBE&`;f9OAZBy4@*I9sXBu|QC@Ln$ zt3?4hFYt|OZ~l2vkjIpj#Fx7QFY-EK#L-OgADnB1sak0a=4N4A0uP-Id)?wp!RuTa z-|5V>WwgDRegWtSUV>I=z7BGo^6t=-hEL4Re7ka%%y9$o#>vNU=Td zh#D-2EBPoI3dapAjwwQ|lcgkyjNao|D{yLAAZ%A@=yWkgZ=I~Zv6E<#y+_2L%T(iC z?FjbmWpFZBA-+n@yewSC0oB{4fvtkT@4^gSr%tRm^0ZE^;|Yy^?T?N@zsQV54?qal I>UWm;2lNW+CjbBd delta 868 zcma)4Pe>GD6!+Udv)}BlyPs~jW0_4`$r7%+R%k4Q+93);jKDHyW@p4LHgs3pJtzbf zR1hH%Kkr>SLA*o${oPpir!nY1 zLiBsF>`&ll@GMg>pj22CFBB7<%^We#(H>f00en{XU@{cNw@@qAY|i3%%M-XB-p3eK zEqKN?=EuBxjN+7fh+-m~qWE4-F(1CFX%?ipF1jhsb*jJf;m2PDT6in&g)P?Twgtv{ zh6&{OaTWuM?5B7jl5DSUsd_uf?38OIXQJd(8!)XTd^2uhv$zw{S+|V19ZC7NeYl_` zUw(@GIS-@2amLZGX>$A;5wL85UQ1|5MV5`43X<9A_R6`whux36mPT)-p>S!PTxpka!O`jO=%;(jG+m)(chUS`x$^v? diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 index d6e30cbb0e25f5646de7f524ca0f382a56e32cb8..f3666050a7e7aa9aabcf5d8e41d8007affdf31d0 100644 GIT binary patch delta 725 zcmYjPOK1~87|!f-cGH>-MY7vQo7Ad{V2u%q29aX*;Gqwprqt|iv&EtXn-tQD_0r-+ z1hMGnsYpEt9z;q-kDeqDyy&$jJ&70baVt_1|D@B>f%(6gWxmHhvzt}6S!EkF34>CP zk&f()G~Qn8#oq%q`s5T!MUKnL3A~npvT_o`vWMri|E6>~?Sj$7%3@`HdN!B4Qkp-L zMVH!%e@fbJ6DOLudm>++xq(&nG#1pO7*bu5?ZkJr18aH)u4dt@&J9Hn>-epAV@u88 zvu-hla+tuVc84`k(+a#H2L5Oc26cx?@bz;{gUGtIJR5J~95v5E ziIO~=ScVd$VA6j7_lfJv=nriq1CABnM!awp&n7J_(fSeLYQZ&3;lPB0)lz>S*m&Vn zyIvBU?)wY5l*lztGox{{(YqIH!yBhoxqlPC_N*3!jfLUR!cX7ACAy?Fol`suw@JKA z5mxB?DKa@c#b1617`?`vpJ*}+SE$F(&=alb$>K%W6r}mD<*Cg9jUJ&`#4FuGy?Brm#+oARNW9sqBB9LDUNX delta 719 zcmZWmL1+^}6zyzwH?y0honSGWHchutF$iiJkV=puBIIHk1+g^U-RzbY8%Yx-741cH z(14(byqgFfDjucMtAa|=ir`IbFM>xwsuw{-h=0=*3J%PF%+CAozc;(F#x~a2$~y_` zY8bzy5hUCcHkpAV0TU->3(Wv95y;|$GJtj9ev%P$5EHxJA z7IL{$^?G&AtD#>R!5?|R2zNO??r<*DE3;Tu(zu}Mrmolkl4F#TngTD#p3V+Gyz~c)PpsQj6oM z=TjRjg5gjs8R`1gcA-~Wta#Om*NA|HhFA}-sC%UA+pyGz7xHzz(6E&4!0MY&u>i*v z7_&_zD1$}2mviWrfT?ndEKsvJ?o2hYMe&>T?WQgMyPqmG$@gV@4AJRx&`Kum+Z=bx z0uQItke!_g0+MA=fLB%wkBO195@=Zl%`ouRHIPxc-rnC$#IRyb5}Df0~el>SSpwL}T>RW>_D} n-a)k7d7AUX&117<5F?E(?>L@$CX%F`C!L7^N8L7dY3BX`?c&_9