Update release

This commit is contained in:
Zihan Chen
2018-07-09 05:09:09 -07:00
parent 032c06a5ea
commit 8d629f60ff
22 changed files with 4452 additions and 2883 deletions
+102 -53
View File
@@ -3692,8 +3692,7 @@ text::CharMeasurer
***********************************************************************/
CharMeasurer::CharMeasurer(vint _rowHeight)
:oldRenderTarget(0)
,rowHeight(_rowHeight)
:rowHeight(_rowHeight)
{
memset(widths, 0, sizeof(widths));
}
@@ -3712,15 +3711,27 @@ text::CharMeasurer
}
}
vint CharMeasurer::MeasureWidth(wchar_t character)
vint CharMeasurer::MeasureWidth(UnicodeCodePoint codePoint)
{
vint w=widths[character];
if(w==0)
vuint32_t index = codePoint.GetCodePoint();
if (0 <= index && index < 65536)
{
widths[character]=w=MeasureWidthInternal(character, oldRenderTarget);
vint w = widths[index];
if (w == 0)
{
widths[index] = w = MeasureWidthInternal(codePoint, oldRenderTarget);
}
return w;
}
else if (index < 0x110000)
{
return MeasureWidthInternal(codePoint, oldRenderTarget);
}
else
{
return 0;
}
}
vint CharMeasurer::GetRowHeight()
{
@@ -4014,7 +4025,7 @@ text::TextLines
lines[i].availableOffsetCount = 0;
}
tabWidth = tabSpaceCount * (charMeasurer ? charMeasurer->MeasureWidth(L' ') : 1);
tabWidth = tabSpaceCount * (charMeasurer ? charMeasurer->MeasureWidth({ L' ' }) : 1);
if (tabWidth == 0)
{
tabWidth = 1;
@@ -4043,33 +4054,46 @@ text::TextLines
void TextLines::MeasureRow(vint row)
{
TextLine& line=lines[row];
vint offset=0;
if(line.availableOffsetCount)
TextLine& line = lines[row];
vint offset = 0;
if (line.availableOffsetCount)
{
offset=line.att[line.availableOffsetCount-1].rightOffset;
offset = line.att[line.availableOffsetCount - 1].rightOffset;
}
for(vint i=line.availableOffsetCount;i<line.dataLength;i++)
for (vint i = line.availableOffsetCount; i < line.dataLength; i++)
{
CharAtt& att=line.att[i];
wchar_t c=line.text[i];
vint width=0;
if(passwordChar)
CharAtt& att = line.att[i];
wchar_t c = line.text[i];
vint width = 0;
vint passwordWidth = 0;
if (passwordChar)
{
width = charMeasurer ? charMeasurer->MeasureWidth(passwordChar) : 1;
passwordWidth = charMeasurer ? charMeasurer->MeasureWidth({ passwordChar }) : 1;
}
else if(c==L'\t')
if (c == L'\t')
{
width=tabWidth-offset%tabWidth;
width = tabWidth - offset % tabWidth;
}
#if defined VCZH_MSVC
else if (UTF16SPFirst(c) && (i + 1 < line.dataLength) && UTF16SPSecond(line.text[i + 1]))
{
width = passwordChar ? passwordWidth : (charMeasurer ? charMeasurer->MeasureWidth({ c, line.text[i + 1] }) : 1);
offset += width;
att.rightOffset = (int)offset;
line.att[i + 1].rightOffset = (int)offset;
i++;
continue;
}
#endif
else
{
width = charMeasurer ? charMeasurer->MeasureWidth(line.text[i]) : 1;
width = passwordChar ? passwordWidth : (charMeasurer ? charMeasurer->MeasureWidth({ c }) : 1);
}
offset+=width;
att.rightOffset=(int)offset;
offset += width;
att.rightOffset = (int)offset;
}
line.availableOffsetCount=line.dataLength;
line.availableOffsetCount = line.dataLength;
}
vint TextLines::GetRowWidth(vint row)
@@ -4151,6 +4175,12 @@ text::TextLines
p1=p;
}
}
#if defined VCZH_MSVC
if (UTF16SPSecond(line.text[i1]) && i1 > 0 && UTF16SPFirst(line.text[i1 - 1]))
{
i1--;
}
#endif
return TextPos(row, i1);
}
@@ -4397,6 +4427,7 @@ GuiColorizedTextElement
}
}
/***********************************************************************
.\NATIVEWINDOW\GUINATIVEWINDOW.CPP
***********************************************************************/
@@ -24263,65 +24294,83 @@ GuiTextBoxCommonInterface
void GuiTextBoxCommonInterface::Move(TextPos pos, bool shift)
{
TextPos oldBegin=textElement->GetCaretBegin();
TextPos oldEnd=textElement->GetCaretEnd();
TextPos oldBegin = textElement->GetCaretBegin();
TextPos oldEnd = textElement->GetCaretEnd();
pos=textElement->GetLines().Normalize(pos);
if(!shift)
#if defined VCZH_MSVC
if (0 <= pos.row && pos.row < textElement->GetLines().GetCount())
{
TextLine& line = textElement->GetLines().GetLine(pos.row);
if (pos.column > 0 && UTF16SPFirst(line.text[pos.column - 1]) && UTF16SPSecond(line.text[pos.column]))
{
if (pos < oldBegin)
{
pos.column--;
}
else if (pos > oldBegin)
{
pos.column++;
}
}
}
#endif
pos = textElement->GetLines().Normalize(pos);
if (!shift)
{
textElement->SetCaretBegin(pos);
}
textElement->SetCaretEnd(pos);
if(textControl)
if (textControl)
{
GuiGraphicsHost* host=textComposition->GetRelatedGraphicsHost();
if(host)
GuiGraphicsHost* host = textComposition->GetRelatedGraphicsHost();
if (host)
{
if(host->GetFocusedComposition()==textControl->GetFocusableComposition())
if (host->GetFocusedComposition() == textControl->GetFocusableComposition())
{
textElement->SetCaretVisible(true);
}
}
}
Rect bounds=textElement->GetLines().GetRectFromTextPos(pos);
Rect view=Rect(textElement->GetViewPosition(), textComposition->GetBounds().GetSize());
Point viewPoint=view.LeftTop();
Rect bounds = textElement->GetLines().GetRectFromTextPos(pos);
Rect view = Rect(textElement->GetViewPosition(), textComposition->GetBounds().GetSize());
Point viewPoint = view.LeftTop();
if(view.x2>view.x1 && view.y2>view.y1)
if (view.x2 > view.x1 && view.y2 > view.y1)
{
if(bounds.x1<view.x1)
if (bounds.x1 < view.x1)
{
viewPoint.x=bounds.x1;
viewPoint.x = bounds.x1;
}
else if(bounds.x2>view.x2)
else if (bounds.x2 > view.x2)
{
viewPoint.x=bounds.x2-view.Width();
viewPoint.x = bounds.x2 - view.Width();
}
if(bounds.y1<view.y1)
if (bounds.y1 < view.y1)
{
viewPoint.y=bounds.y1;
viewPoint.y = bounds.y1;
}
else if(bounds.y2>view.y2)
else if (bounds.y2 > view.y2)
{
viewPoint.y=bounds.y2-view.Height();
viewPoint.y = bounds.y2 - view.Height();
}
}
callback->ScrollToView(viewPoint);
UpdateCaretPoint();
TextPos newBegin=textElement->GetCaretBegin();
TextPos newEnd=textElement->GetCaretEnd();
if(oldBegin!=newBegin || oldEnd!=newEnd)
TextPos newBegin = textElement->GetCaretBegin();
TextPos newEnd = textElement->GetCaretEnd();
if (oldBegin != newBegin || oldEnd != newEnd)
{
ICommonTextEditCallback::TextCaretChangedStruct arguments;
arguments.oldBegin=oldBegin;
arguments.oldEnd=oldEnd;
arguments.newBegin=newBegin;
arguments.newEnd=newEnd;
arguments.editVersion=editVersion;
for(vint i=0;i<textEditCallbacks.Count();i++)
arguments.oldBegin = oldBegin;
arguments.oldEnd = oldEnd;
arguments.newBegin = newBegin;
arguments.newEnd = newEnd;
arguments.editVersion = editVersion;
for (vint i = 0; i < textEditCallbacks.Count(); i++)
{
textEditCallbacks[i]->TextCaretChanged(arguments);
}
@@ -35337,7 +35386,7 @@ IGuiInstanceResourceManager
return instanceResources.Values()[index];
}
void UnloadResource(const WString& name)
void UnloadResource(const WString& name)override
{
vint index = resources.Keys().IndexOf(name);
if (index != -1)
+56 -7
View File
@@ -1385,7 +1385,8 @@ Image Object
/// <summary>
/// Save the image to a stream.
/// </summary>
/// <param name="stream">The stream</param>
/// <param name="stream">The stream.</param>
/// <param name="formatType">The format of the image.</param>
virtual void SaveToStream(stream::IStream& stream, FormatType formatType = FormatType::Unknown) = 0;
};
@@ -6100,13 +6101,62 @@ Colorized Plain Text (model)
void AppendAndFinalize(TextLine& line);
};
#if defined VCZH_MSVC
/// <summary>Test if a wchar_t is the first character of a surrogate pair.</summary>
inline bool UTF16SPFirst(wchar_t c)
{
return 0xD800 <= c && c < 0xDC00;
}
/// <summary>Test if a wchar_t is the second character of a surrogate pair.</summary>
inline bool UTF16SPSecond(wchar_t c)
{
return 0xDC00 <= c && c < 0xDFFF;
}
#endif
/// <summary>
/// A unicode code point.
/// In Windows, when the first character is not the leading character of a surrogate pair, the second character is ignored.
/// In other platforms which treat wchar_t as a UTF-32 character, the second character is ignored.
/// </summary>
struct UnicodeCodePoint
{
#if defined VCZH_MSVC
wchar_t characters[2];
UnicodeCodePoint(wchar_t c) :characters{ c,0 } {}
UnicodeCodePoint(wchar_t c1, wchar_t c2) :characters{ c1,c2 } {}
#elif defined VCZH_GCC
wchar_t character;
UnicodeCodePoint(wchar_t c) :character(c) {}
#endif
vuint32_t GetCodePoint()const
{
#if defined VCZH_MSVC
if (UTF16SPFirst(characters[0]) && UTF16SPSecond(characters[1]))
{
return (wchar_t)(characters[0] - 0xD800) * 0x400 + (wchar_t)(characters[1] - 0xDC00) + 0x10000;
}
else
{
return (vuint32_t)characters[0];
}
#elif defined VCZH_GCC
return (vuint32_t)character;
#endif
}
};
/// <summary>
/// An abstract class for character size measuring in differect rendering technology.
/// </summary>
class CharMeasurer : public virtual IDescriptable
{
protected:
IGuiGraphicsRenderTarget* oldRenderTarget;
IGuiGraphicsRenderTarget* oldRenderTarget = nullptr;
vint rowHeight;
vint widths[65536];
@@ -6114,9 +6164,9 @@ Colorized Plain Text (model)
/// Measure the width of a character.
/// </summary>
/// <returns>The width in pixel.</returns>
/// <param name="character">The character to measure. This is a pure virtual member function to be overrided.</param>
/// <param name="codePoint">The unicode code point to measure.</param>
/// <param name="renderTarget">The render target which the character is going to be rendered. This is a pure virtual member function to be overrided.</param>
virtual vint MeasureWidthInternal(wchar_t character, IGuiGraphicsRenderTarget* renderTarget)=0;
virtual vint MeasureWidthInternal(UnicodeCodePoint codePoint, IGuiGraphicsRenderTarget* renderTarget)=0;
/// <summary>
/// Measure the height of a character.
/// </summary>
@@ -6141,8 +6191,8 @@ Colorized Plain Text (model)
/// Measure the width of a character using the binded render target.
/// </summary>
/// <returns>The width of a character, in pixel.</returns>
/// <param name="character">The character to measure.</param>
vint MeasureWidth(wchar_t character);
/// <param name="codePoint">The unicode code point to measure.</param>
vint MeasureWidth(UnicodeCodePoint codePoint);
/// <summary>
/// Measure the height of a character.
/// </summary>
@@ -9332,7 +9382,6 @@ namespace vl
extern void FinalizeTheme();
/// <summary>Register a control template collection object.</summary>
/// <returns>Returns true if this operation succeeded.</returns>
/// <param name="name">The name of the theme.</param>
/// <param name="theme">The control template collection object.</param>
extern bool RegisterTheme(Ptr<ThemeTemplates> theme);
/// <summary>Unregister a control template collection object.</summary>
+1 -1
View File
@@ -6930,7 +6930,7 @@ GuiDefaultInstanceLoader
GetInstanceConstructor(typeInfo.typeInfo->GetTypeDescriptor()) != nullptr;
}
Ptr<workflow::WfBaseConstructorCall> CreateRootInstance(GuiResourcePrecompileContext& precompileContext, types::ResolvingResult& resolvingResult, const TypeInfo& typeInfo, ArgumentMap& arguments, GuiResourceError::List& errors)
Ptr<workflow::WfBaseConstructorCall> CreateRootInstance(GuiResourcePrecompileContext& precompileContext, types::ResolvingResult& resolvingResult, const TypeInfo& typeInfo, ArgumentMap& arguments, GuiResourceError::List& errors)override
{
CTOR_PARAM_PREFIX
+147 -128
View File
@@ -2440,17 +2440,18 @@ GuiColorizedTextElementRenderer
void GuiColorizedTextElementRenderer::FontChanged()
{
IWindowsDirect2DResourceManager* resourceManager=GetWindowsDirect2DResourceManager();
if(textFormat)
IWindowsDirect2DResourceManager* resourceManager = GetWindowsDirect2DResourceManager();
if (textFormat)
{
element->GetLines().SetCharMeasurer(nullptr);
resourceManager->DestroyDirect2DTextFormat(oldFont);
resourceManager->DestroyDirect2DCharMeasurer(oldFont);
}
oldFont=element->GetFont();
oldFont = element->GetFont();
if (oldFont.fontFamily == L"") oldFont.fontFamily = GetCurrentController()->ResourceService()->GetDefaultFont().fontFamily;
if (oldFont.size == 0) oldFont.size = 12;
textFormat=resourceManager->CreateDirect2DTextFormat(oldFont);
textFormat = resourceManager->CreateDirect2DTextFormat(oldFont);
element->GetLines().SetCharMeasurer(resourceManager->CreateDirect2DCharMeasurer(oldFont).Obj());
}
@@ -2490,97 +2491,104 @@ GuiColorizedTextElementRenderer
void GuiColorizedTextElementRenderer::Render(Rect bounds)
{
if(renderTarget)
if (renderTarget)
{
ID2D1RenderTarget* d2dRenderTarget=renderTarget->GetDirect2DRenderTarget();
wchar_t passwordChar=element->GetPasswordChar();
Point viewPosition=element->GetViewPosition();
ID2D1RenderTarget* d2dRenderTarget = renderTarget->GetDirect2DRenderTarget();
wchar_t passwordChar = element->GetPasswordChar();
Point viewPosition = element->GetViewPosition();
Rect viewBounds(viewPosition, bounds.GetSize());
vint startRow=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, viewBounds.y1)).row;
vint endRow=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, viewBounds.y2)).row;
TextPos selectionBegin=element->GetCaretBegin()<element->GetCaretEnd()?element->GetCaretBegin():element->GetCaretEnd();
TextPos selectionEnd=element->GetCaretBegin()>element->GetCaretEnd()?element->GetCaretBegin():element->GetCaretEnd();
bool focused=element->GetFocused();
vint startRow = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, viewBounds.y1)).row;
vint endRow = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, viewBounds.y2)).row;
TextPos selectionBegin = element->GetCaretBegin() < element->GetCaretEnd() ? element->GetCaretBegin() : element->GetCaretEnd();
TextPos selectionEnd = element->GetCaretBegin() > element->GetCaretEnd() ? element->GetCaretBegin() : element->GetCaretEnd();
bool focused = element->GetFocused();
renderTarget->SetTextAntialias(oldFont.antialias, oldFont.verticalAntialias);
for(vint row=startRow;row<=endRow;row++)
for (vint row = startRow; row <= endRow; row++)
{
Rect startRect=element->GetLines().GetRectFromTextPos(TextPos(row, 0));
Point startPoint=startRect.LeftTop();
vint startColumn=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, startPoint.y)).column;
vint endColumn=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, startPoint.y)).column;
text::TextLine& line=element->GetLines().GetLine(row);
Rect startRect = element->GetLines().GetRectFromTextPos(TextPos(row, 0));
Point startPoint = startRect.LeftTop();
vint startColumn = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, startPoint.y)).column;
vint endColumn = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, startPoint.y)).column;
vint x=startColumn==0?0:line.att[startColumn-1].rightOffset;
for(vint column=startColumn; column<=endColumn; column++)
text::TextLine& line = element->GetLines().GetLine(row);
if (endColumn + 1 < line.dataLength && text::UTF16SPFirst(line.text[endColumn]) && text::UTF16SPSecond(line.text[startColumn + 1]))
{
bool inSelection=false;
if(selectionBegin.row==selectionEnd.row)
{
inSelection=(row==selectionBegin.row && selectionBegin.column<=column && column<selectionEnd.column);
endColumn++;
}
else if(row==selectionBegin.row)
vint x = startColumn == 0 ? 0 : line.att[startColumn - 1].rightOffset;
for (vint column = startColumn; column <= endColumn; column++)
{
inSelection=selectionBegin.column<=column;
bool inSelection = false;
if (selectionBegin.row == selectionEnd.row)
{
inSelection = (row == selectionBegin.row && selectionBegin.column <= column && column < selectionEnd.column);
}
else if(row==selectionEnd.row)
else if (row == selectionBegin.row)
{
inSelection=column<selectionEnd.column;
inSelection = selectionBegin.column <= column;
}
else if (row == selectionEnd.row)
{
inSelection = column < selectionEnd.column;
}
else
{
inSelection=selectionBegin.row<row && row<selectionEnd.row;
inSelection = selectionBegin.row < row && row < selectionEnd.row;
}
bool crlf=column==line.dataLength;
vint colorIndex=crlf?0:line.att[column].colorIndex;
if(colorIndex>=colors.Count())
bool crlf = column == line.dataLength;
vint colorIndex = crlf ? 0 : line.att[column].colorIndex;
if (colorIndex >= colors.Count())
{
colorIndex=0;
colorIndex = 0;
}
ColorItemResource& color=
!inSelection?colors[colorIndex].normal:
focused?colors[colorIndex].selectedFocused:
ColorItemResource& color =
!inSelection ? colors[colorIndex].normal :
focused ? colors[colorIndex].selectedFocused :
colors[colorIndex].selectedUnfocused;
vint x2=crlf?x+startRect.Height()/2:line.att[column].rightOffset;
vint tx=x-viewPosition.x+bounds.x1;
vint ty=startPoint.y-viewPosition.y+bounds.y1;
vint x2 = crlf ? x + startRect.Height() / 2 : line.att[column].rightOffset;
vint tx = x - viewPosition.x + bounds.x1;
vint ty = startPoint.y - viewPosition.y + bounds.y1;
if(color.background.a>0)
if (color.background.a > 0)
{
d2dRenderTarget->FillRectangle(D2D1::RectF((FLOAT)tx, (FLOAT)ty, (FLOAT)(tx+(x2-x)), (FLOAT)(ty+startRect.Height())), color.backgroundBrush);
d2dRenderTarget->FillRectangle(D2D1::RectF((FLOAT)tx, (FLOAT)ty, (FLOAT)(tx + (x2 - x)), (FLOAT)(ty + startRect.Height())), color.backgroundBrush);
}
if(!crlf)
if (!crlf)
{
UINT32 count = text::UTF16SPFirst(line.text[column]) && column + 1 < line.dataLength && text::UTF16SPSecond(line.text[column + 1]) ? 2 : 1;
d2dRenderTarget->DrawText(
(passwordChar?&passwordChar:&line.text[column]),
1,
(passwordChar ? &passwordChar : &line.text[column]),
count,
textFormat->textFormat.Obj(),
D2D1::RectF((FLOAT)tx, (FLOAT)ty, (FLOAT)tx+1, (FLOAT)ty+1),
D2D1::RectF((FLOAT)tx, (FLOAT)ty, (FLOAT)tx + 1, (FLOAT)ty + 1),
color.textBrush,
D2D1_DRAW_TEXT_OPTIONS_NO_SNAP,
DWRITE_MEASURING_MODE_GDI_NATURAL
);
if (count == 2) column++;
}
x=x2;
x = x2;
}
}
if(element->GetCaretVisible() && element->GetLines().IsAvailable(element->GetCaretEnd()))
if (element->GetCaretVisible() && element->GetLines().IsAvailable(element->GetCaretEnd()))
{
Point caretPoint=element->GetLines().GetPointFromTextPos(element->GetCaretEnd());
vint height=element->GetLines().GetRowHeight();
Point p1(caretPoint.x-viewPosition.x+bounds.x1, caretPoint.y-viewPosition.y+bounds.y1+1);
Point p2(caretPoint.x-viewPosition.x+bounds.x1, caretPoint.y+height-viewPosition.y+bounds.y1-1);
Point caretPoint = element->GetLines().GetPointFromTextPos(element->GetCaretEnd());
vint height = element->GetLines().GetRowHeight();
Point p1(caretPoint.x - viewPosition.x + bounds.x1, caretPoint.y - viewPosition.y + bounds.y1 + 1);
Point p2(caretPoint.x - viewPosition.x + bounds.x1, caretPoint.y + height - viewPosition.y + bounds.y1 - 1);
d2dRenderTarget->DrawLine(
D2D1::Point2F((FLOAT)p1.x+0.5f, (FLOAT)p1.y),
D2D1::Point2F((FLOAT)p2.x+0.5f, (FLOAT)p2.y),
D2D1::Point2F((FLOAT)p1.x + 0.5f, (FLOAT)p1.y),
D2D1::Point2F((FLOAT)p2.x + 0.5f, (FLOAT)p2.y),
caretBrush
);
d2dRenderTarget->DrawLine(
D2D1::Point2F((FLOAT)p1.x-0.5f, (FLOAT)p1.y),
D2D1::Point2F((FLOAT)p2.x-0.5f, (FLOAT)p2.y),
D2D1::Point2F((FLOAT)p1.x - 0.5f, (FLOAT)p1.y),
D2D1::Point2F((FLOAT)p2.x - 0.5f, (FLOAT)p2.y),
caretBrush
);
}
@@ -3493,13 +3501,15 @@ CachedResourceAllocator
ComPtr<IDWriteTextFormat> font;
vint size;
Size MeasureInternal(wchar_t character, IGuiGraphicsRenderTarget* renderTarget)
Size MeasureInternal(text::UnicodeCodePoint codePoint, IGuiGraphicsRenderTarget* renderTarget)
{
Size charSize(0, 0);
IDWriteTextLayout* textLayout = 0;
UINT32 count = text::UTF16SPFirst(codePoint.characters[0]) && text::UTF16SPSecond(codePoint.characters[1]) ? 2 : 1;
HRESULT hr = GetWindowsDirect2DObjectProvider()->GetDirectWriteFactory()->CreateTextLayout(
&character,
1,
codePoint.characters,
count,
font.Obj(),
0,
0,
@@ -3516,14 +3526,14 @@ CachedResourceAllocator
return charSize;
}
vint MeasureWidthInternal(wchar_t character, IGuiGraphicsRenderTarget* renderTarget)
vint MeasureWidthInternal(text::UnicodeCodePoint codePoint, IGuiGraphicsRenderTarget* renderTarget)
{
return MeasureInternal(character, renderTarget).x;
return MeasureInternal(codePoint, renderTarget).x;
}
vint GetRowHeightInternal(IGuiGraphicsRenderTarget* renderTarget)
{
return MeasureInternal(L' ', renderTarget).y;
return MeasureInternal({ L' ' }, renderTarget).y;
}
public:
Direct2DCharMeasurer(ComPtr<IDWriteTextFormat> _font, vint _size)
@@ -10275,16 +10285,16 @@ GuiColorizedTextElementRenderer
void GuiColorizedTextElementRenderer::FontChanged()
{
IWindowsGDIResourceManager* resourceManager=GetWindowsGDIResourceManager();
if(font)
IWindowsGDIResourceManager* resourceManager = GetWindowsGDIResourceManager();
if (font)
{
element->GetLines().SetCharMeasurer(0);
element->GetLines().SetCharMeasurer(nullptr);
resourceManager->DestroyGdiFont(oldFont);
resourceManager->DestroyCharMeasurer(oldFont);
font=0;
font = nullptr;
}
oldFont=element->GetFont();
font=resourceManager->CreateGdiFont(oldFont);
oldFont = element->GetFont();
font = resourceManager->CreateGdiFont(oldFont);
element->GetLines().SetCharMeasurer(resourceManager->CreateCharMeasurer(oldFont).Obj());
}
@@ -10315,94 +10325,101 @@ GuiColorizedTextElementRenderer
void GuiColorizedTextElementRenderer::Render(Rect bounds)
{
if(renderTarget)
if (renderTarget)
{
WinDC* dc=renderTarget->GetDC();
WinDC* dc = renderTarget->GetDC();
dc->SetFont(font);
wchar_t passwordChar=element->GetPasswordChar();
Point viewPosition=element->GetViewPosition();
wchar_t passwordChar = element->GetPasswordChar();
Point viewPosition = element->GetViewPosition();
Rect viewBounds(viewPosition, bounds.GetSize());
vint startRow=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, viewBounds.y1)).row;
vint endRow=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, viewBounds.y2)).row;
TextPos selectionBegin=element->GetCaretBegin()<element->GetCaretEnd()?element->GetCaretBegin():element->GetCaretEnd();
TextPos selectionEnd=element->GetCaretBegin()>element->GetCaretEnd()?element->GetCaretBegin():element->GetCaretEnd();
bool focused=element->GetFocused();
Ptr<windows::WinBrush> lastBrush=0;
vint startRow = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, viewBounds.y1)).row;
vint endRow = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, viewBounds.y2)).row;
TextPos selectionBegin = element->GetCaretBegin() < element->GetCaretEnd() ? element->GetCaretBegin() : element->GetCaretEnd();
TextPos selectionEnd = element->GetCaretBegin() > element->GetCaretEnd() ? element->GetCaretBegin() : element->GetCaretEnd();
bool focused = element->GetFocused();
Ptr<windows::WinBrush> lastBrush = 0;
for(vint row=startRow;row<=endRow;row++)
for (vint row = startRow; row <= endRow; row++)
{
Rect startRect=element->GetLines().GetRectFromTextPos(TextPos(row, 0));
Point startPoint=startRect.LeftTop();
vint startColumn=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, startPoint.y)).column;
vint endColumn=element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, startPoint.y)).column;
text::TextLine& line=element->GetLines().GetLine(row);
Rect startRect = element->GetLines().GetRectFromTextPos(TextPos(row, 0));
Point startPoint = startRect.LeftTop();
vint startColumn = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x1, startPoint.y)).column;
vint endColumn = element->GetLines().GetTextPosFromPoint(Point(viewBounds.x2, startPoint.y)).column;
vint x=startColumn==0?0:line.att[startColumn-1].rightOffset;
for(vint column=startColumn; column<=endColumn; column++)
text::TextLine& line = element->GetLines().GetLine(row);
if (text::UTF16SPFirst(line.text[endColumn]) && endColumn + 1 < line.dataLength && text::UTF16SPSecond(line.text[startColumn + 1]))
{
bool inSelection=false;
if(selectionBegin.row==selectionEnd.row)
{
inSelection=(row==selectionBegin.row && selectionBegin.column<=column && column<selectionEnd.column);
endColumn++;
}
else if(row==selectionBegin.row)
vint x = startColumn == 0 ? 0 : line.att[startColumn - 1].rightOffset;
for (vint column = startColumn; column <= endColumn; column++)
{
inSelection=selectionBegin.column<=column;
bool inSelection = false;
if (selectionBegin.row == selectionEnd.row)
{
inSelection = (row == selectionBegin.row && selectionBegin.column <= column && column < selectionEnd.column);
}
else if(row==selectionEnd.row)
else if (row == selectionBegin.row)
{
inSelection=column<selectionEnd.column;
inSelection = selectionBegin.column <= column;
}
else if (row == selectionEnd.row)
{
inSelection = column < selectionEnd.column;
}
else
{
inSelection=selectionBegin.row<row && row<selectionEnd.row;
inSelection = selectionBegin.row < row && row < selectionEnd.row;
}
bool crlf=column==line.dataLength;
vint colorIndex=crlf?0:line.att[column].colorIndex;
if(colorIndex>=colors.Count())
bool crlf = column == line.dataLength;
vint colorIndex = crlf ? 0 : line.att[column].colorIndex;
if (colorIndex >= colors.Count())
{
colorIndex=0;
colorIndex = 0;
}
ColorItemResource& color=
!inSelection?colors[colorIndex].normal:
focused?colors[colorIndex].selectedFocused:
ColorItemResource& color =
!inSelection ? colors[colorIndex].normal :
focused ? colors[colorIndex].selectedFocused :
colors[colorIndex].selectedUnfocused;
vint x2=crlf?x+startRect.Height()/2:line.att[column].rightOffset;
vint tx=x-viewPosition.x+bounds.x1;
vint ty=startPoint.y-viewPosition.y+bounds.y1;
vint x2 = crlf ? x + startRect.Height() / 2 : line.att[column].rightOffset;
vint tx = x - viewPosition.x + bounds.x1;
vint ty = startPoint.y - viewPosition.y + bounds.y1;
if(color.background.a)
if (color.background.a)
{
if(lastBrush!=color.backgroundBrush)
if (lastBrush != color.backgroundBrush)
{
lastBrush=color.backgroundBrush;
lastBrush = color.backgroundBrush;
dc->SetBrush(lastBrush);
}
dc->FillRect(tx, ty, tx+(x2-x), ty+startRect.Height());
dc->FillRect(tx, ty, tx + (x2 - x), ty + startRect.Height());
}
if(!crlf)
if (!crlf)
{
if(color.text.a)
vint count = text::UTF16SPFirst(line.text[column]) && column + 1 < line.dataLength && text::UTF16SPSecond(line.text[column + 1]) ? 2 : 1;
if (color.text.a)
{
dc->SetTextColor(RGB(color.text.r, color.text.g, color.text.b));
dc->DrawBuffer(tx, ty, (passwordChar?&passwordChar:&line.text[column]), 1);
dc->DrawBuffer(tx, ty, (passwordChar ? &passwordChar : &line.text[column]), count);
}
if (count == 2) column++;
}
x=x2;
x = x2;
}
}
if(element->GetCaretVisible() && element->GetLines().IsAvailable(element->GetCaretEnd()))
if (element->GetCaretVisible() && element->GetLines().IsAvailable(element->GetCaretEnd()))
{
Point caretPoint=element->GetLines().GetPointFromTextPos(element->GetCaretEnd());
vint height=element->GetLines().GetRowHeight();
Point caretPoint = element->GetLines().GetPointFromTextPos(element->GetCaretEnd());
vint height = element->GetLines().GetRowHeight();
dc->SetPen(caretPen);
dc->MoveTo(caretPoint.x-viewPosition.x+bounds.x1, caretPoint.y-viewPosition.y+bounds.y1+1);
dc->LineTo(caretPoint.x-viewPosition.x+bounds.x1, caretPoint.y+height-viewPosition.y+bounds.y1-1);
dc->MoveTo(caretPoint.x-1-viewPosition.x+bounds.x1, caretPoint.y-viewPosition.y+bounds.y1+1);
dc->LineTo(caretPoint.x-1-viewPosition.x+bounds.x1, caretPoint.y+height-viewPosition.y+bounds.y1-1);
dc->MoveTo(caretPoint.x - viewPosition.x + bounds.x1, caretPoint.y - viewPosition.y + bounds.y1 + 1);
dc->LineTo(caretPoint.x - viewPosition.x + bounds.x1, caretPoint.y + height - viewPosition.y + bounds.y1 - 1);
dc->MoveTo(caretPoint.x - 1 - viewPosition.x + bounds.x1, caretPoint.y - viewPosition.y + bounds.y1 + 1);
dc->LineTo(caretPoint.x - 1 - viewPosition.x + bounds.x1, caretPoint.y + height - viewPosition.y + bounds.y1 - 1);
}
}
}
@@ -10655,14 +10672,16 @@ CachedResourceAllocator
Ptr<WinFont> font;
vint size;
Size MeasureInternal(wchar_t character, IGuiGraphicsRenderTarget* renderTarget)
Size MeasureInternal(text::UnicodeCodePoint codePoint, IGuiGraphicsRenderTarget* renderTarget)
{
if(renderTarget)
if (renderTarget)
{
WindowsGDIRenderTarget* gdiRenderTarget=dynamic_cast<WindowsGDIRenderTarget*>(renderTarget);
WinDC* dc=gdiRenderTarget->GetDC();
WindowsGDIRenderTarget* gdiRenderTarget = dynamic_cast<WindowsGDIRenderTarget*>(renderTarget);
WinDC* dc = gdiRenderTarget->GetDC();
dc->SetFont(font);
SIZE size=dc->MeasureBuffer(&character, 1, -1);
vint count = text::UTF16SPFirst(codePoint.characters[0]) && text::UTF16SPSecond(codePoint.characters[1]) ? 2 : 1;
SIZE size = dc->MeasureBuffer(codePoint.characters, count, -1);
return Size(size.cx, size.cy);
}
else
@@ -10671,16 +10690,16 @@ CachedResourceAllocator
}
}
vint MeasureWidthInternal(wchar_t character, IGuiGraphicsRenderTarget* renderTarget)
vint MeasureWidthInternal(text::UnicodeCodePoint codePoint, IGuiGraphicsRenderTarget* renderTarget)
{
return MeasureInternal(character, renderTarget).x;
return MeasureInternal(codePoint, renderTarget).x;
}
vint GetRowHeightInternal(IGuiGraphicsRenderTarget* renderTarget)
{
if(renderTarget)
{
return MeasureInternal(L' ', renderTarget).y;
return MeasureInternal({ L' ' }, renderTarget).y;
}
else
{
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -9,4 +9,234 @@
</ControlTemplate>
</Instance>
</Instance>
<Instance name="SharedSizeItemTemplateResource">
<Instance ref.CodeBehind="false" ref.Class="demo::SharedSizeItemTemplate">
<ref.Parameter Name="ViewModel" Class="demo::MyTextItem"/>
<ControlTemplate MinSizeLimitation="LimitToElementAndChildren">
<SharedSizeItem Group="EnglishNumber" SharedWidth="true" AlignmentToParent="left:0 top:0 right:0 bottom:0">
<Button Text-bind="ViewModel.Name">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</Button>
</SharedSizeItem>
</ControlTemplate>
</Instance>
</Instance>
<Instance name="SharedSizeTextItemTemplateResource">
<Instance ref.CodeBehind="false" ref.Class="demo::SharedSizeTextItemTemplate">
<ref.Parameter Name="ViewModel" Class="demo::MyTextItem"/>
<TextListItemTemplate ref.Name="self" MinSizeLimitation="LimitToElementAndChildren">
<SharedSizeItem Group="EnglishNumber" SharedWidth="true" AlignmentToParent="left:-1 top:5 right:5 bottom:5">
<SolidLabel Text-bind="ViewModel.Name" Font-bind="self.Font" Color-bind="self.TextColor"/>
</SharedSizeItem>
</TextListItemTemplate>
</Instance>
</Instance>
<Instance name="EnglishNumbersControllerResource">
<Instance ref.CodeBehind="false" ref.Class="demo::EnglishNumbersController">
<ref.Members>
<![CDATA[
@cpp:Private
var counter : int = 0;
prop ItemsToBind : observe MyTextItem^[] = {} {const, not observe}
@cpp:Private
func ToText_1to9(i : int) : string
{
switch (i)
{
case 1: { return "one"; }
case 2: { return "two"; }
case 3: { return "three"; }
case 4: { return "four"; }
case 5: { return "five"; }
case 6: { return "six"; }
case 7: { return "seven"; }
case 8: { return "eight"; }
case 9: { return "nine"; }
}
raise "ToText_1to9: Number out of range.";
}
@cpp:Private
func ToText_11to19(i : int) : string
{
switch (i)
{
case 1: { return "eleven"; }
case 2: { return "twelve"; }
case 3: { return "thirteen"; }
case 4: { return "fourteen"; }
case 5: { return "fifteen"; }
case 6: { return "sixteen"; }
case 7: { return "seventeen"; }
case 8: { return "eightteen"; }
case 9: { return "nineteen"; }
}
raise "ToText_11to19: Number out of range.";
}
@cpp:Private
func NumberToText_1To99(i : int) : string
{
switch (i / 10)
{
case 0: { return ToText_1to9(i % 10); }
case 1: { return i == 10 ? "ten" : ToText_11to19(i % 10); }
case 2: { return i % 10 == 0 ? "twenty" : "twenty-" & ToText_1to9(i % 10); }
case 3: { return i % 10 == 0 ? "thirty" : "thirty-" & ToText_1to9(i % 10); }
case 4: { return i % 10 == 0 ? "fourty" : "fourty-" & ToText_1to9(i % 10); }
case 5: { return i % 10 == 0 ? "fifty" : "fifty-" & ToText_1to9(i % 10); }
case 6: { return i % 10 == 0 ? "sixty" : "sixty-" & ToText_1to9(i % 10); }
case 7: { return i % 10 == 0 ? "seventy" : "seventy-" & ToText_1to9(i % 10); }
case 8: { return i % 10 == 0 ? "eighty" : "eighty-" & ToText_1to9(i % 10); }
case 9: { return i % 10 == 0 ? "ninety" : "ninety-" & ToText_1to9(i % 10); }
}
raise "NumberToText_1To99: Number out of range.";
}
@cpp:Private
func NumberToText_0to999(i : int) : string
{
if (i < 100) { return NumberToText_1To99(i); }
return ToText_1to9(i / 100) & " hundred" & (i % 100 == 0 ? "" : " and " & NumberToText_1To99(i % 100));
}
@cpp:Private
func NumberToText(i : int) : string
{
if (i == 0) { return "zero"; }
if (i < 1000) { return NumberToText_0to999(i); }
return "Number too large: " & i;
}
]]>
</ref.Members>
<CustomControl ref.Name="self">
<GroupBox Text-bind="self.Text">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:-1"/>
<att.ContainerComposition-set InternalMargin="left:5 top:0 right:5 bottom:5"/>
<Stack Direction="Vertical" Padding="5" AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<StackItem>
<Button Alt="A" Text="Add 10 items">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
for (i in range [0, 9])
{
var textItem = new demo::MyTextItem^();
textItem.Name = self.NumberToText(self.counter + i);
self.ItemsToBind.Add(textItem);
}
self.counter = self.counter + 10;
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
<StackItem>
<Button Alt="O" Text="Remove odd items">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
var i = 0;
while (i < self.ItemsToBind.Count)
{
self.ItemsToBind.RemoveAt(i);
i = i + 1;
}
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
<StackItem>
<Button Alt="E" Text="Remove even items">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
var i = 1;
while (i < self.ItemsToBind.Count)
{
self.ItemsToBind.RemoveAt(i);
i = i + 1;
}
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
<StackItem>
<Button Alt="C" Text="Clear">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
self.ItemsToBind.Clear();
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
<StackItem>
<Button Alt="R" Text="Reset Counter">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
self.counter = 0;
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
</Stack>
</GroupBox>
</CustomControl>
</Instance>
</Instance>
<Instance name="EnglishNumbersControllerTabPageResource">
<Instance ref.CodeBehind="false" ref.Class="demo::EnglishNumbersControllerTabPage" xmlns:demo="demo::*">
<ref.Members>
<![CDATA[
prop ItemsToBind : observe MyTextItem^[] = {} {const, not observe}
prop ContentComposition: GuiGraphicsComposition* = null {const, not observe}
]]>
</ref.Members>
<ref.Ctor>
<![CDATA[
{
SetItemsToBind(controller.ItemsToBind);
SetContentComposition(content);
}
]]>
</ref.Ctor>
<TabPage>
<Table AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<att.Rows>
<_>composeType:Percentage percentage:1.0</_>
</att.Rows>
<att.Columns>
<_>composeType:Percentage percentage:1.0</_>
<_>composeType:MinSize</_>
</att.Columns>
<Cell ref.Name="content" Site="row:0 column:0">
</Cell>
<Cell Site="row:0 column:1">
<demo:EnglishNumbersController ref.Name="controller" Text="Operations">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</demo:EnglishNumbersController>
</Cell>
</Table>
</TabPage>
</Instance>
</Instance>
</Folder>
@@ -1,75 +1,4 @@
<Instance ref.CodeBehind="false" ref.Class="demo::RepeatTabPage">
<ref.Members>
<![CDATA[
var counter : int = 0;
var itemsToBind : observe MyTextItem^[] = {};
func ToText_1to9(i : int) : string
{
switch (i)
{
case 1: { return "one"; }
case 2: { return "two"; }
case 3: { return "three"; }
case 4: { return "four"; }
case 5: { return "five"; }
case 6: { return "six"; }
case 7: { return "seven"; }
case 8: { return "eight"; }
case 9: { return "nine"; }
}
raise "ToText_1to9: Number out of range.";
}
func ToText_11to19(i : int) : string
{
switch (i)
{
case 1: { return "eleven"; }
case 2: { return "twelve"; }
case 3: { return "thirteen"; }
case 4: { return "fourteen"; }
case 5: { return "fifteen"; }
case 6: { return "sixteen"; }
case 7: { return "seventeen"; }
case 8: { return "eightteen"; }
case 9: { return "nineteen"; }
}
raise "ToText_11to19: Number out of range.";
}
func NumberToText_1To99(i : int) : string
{
switch (i / 10)
{
case 0: { return ToText_1to9(i % 10); }
case 1: { return i == 10 ? "ten" : ToText_11to19(i % 10); }
case 2: { return i % 10 == 0 ? "twenty" : "twenty-" & ToText_1to9(i % 10); }
case 3: { return i % 10 == 0 ? "thirty" : "thirty-" & ToText_1to9(i % 10); }
case 4: { return i % 10 == 0 ? "fourty" : "fourty-" & ToText_1to9(i % 10); }
case 5: { return i % 10 == 0 ? "fifty" : "fifty-" & ToText_1to9(i % 10); }
case 6: { return i % 10 == 0 ? "sixty" : "sixty-" & ToText_1to9(i % 10); }
case 7: { return i % 10 == 0 ? "seventy" : "seventy-" & ToText_1to9(i % 10); }
case 8: { return i % 10 == 0 ? "eighty" : "eighty-" & ToText_1to9(i % 10); }
case 9: { return i % 10 == 0 ? "ninety" : "ninety-" & ToText_1to9(i % 10); }
}
raise "NumberToText_1To99: Number out of range.";
}
func NumberToText_0to999(i : int) : string
{
if (i < 100) { return NumberToText_1To99(i); }
return ToText_1to9(i / 100) & " hundred" & (i % 100 == 0 ? "" : " and " & NumberToText_1To99(i % 100));
}
func NumberToText(i : int) : string
{
if (i == 0) { return "zero"; }
if (i < 1000) { return NumberToText_0to999(i); }
return "Number too large: " & i;
}
]]>
</ref.Members>
<Instance ref.CodeBehind="false" ref.Class="demo::RepeatTabPage" xmlns:demo="demo::*">
<TabPage ref.Name="self" Text="Repeat">
<Table AlignmentToParent="left:0 top:0 right:0 bottom:0" CellPadding="5">
<att.Rows>
@@ -78,8 +7,7 @@
<_>composeType:Absolute absolute:20</_>
</att.Rows>
<att.Columns>
<_>composeType:Percentage percentage:0.5</_>
<_>composeType:MinSize</_>
<_>composeType:Percentage percentage:1.0</_>
<_>composeType:Absolute absolute:20</_>
</att.Columns>
@@ -87,121 +15,82 @@
<Tab>
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<att.Pages>
<TabPage Text="RepeatStack" Alt="S">
<demo:EnglishNumbersControllerTabPage ref.Name="repeatStackTabPage" Text="RepeatStack" Alt="S">
<att.ContentComposition-set>
<ScrollContainer ExtendToFullWidth="true" HorizontalAlwaysVisible="false">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<RepeatStack ref.Name="repeatStack" AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<RepeatStack AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<att.Direction>Vertical</att.Direction>
<att.Padding>5</att.Padding>
<att.ExtraMargin>left:5 top:5 right:5 bottom:5</att.ExtraMargin>
<att.ItemTemplate>demo::RepeatItemTemplate</att.ItemTemplate>
<att.ItemSource-eval>self.itemsToBind</att.ItemSource-eval>
<att.ItemSource-eval>repeatStackTabPage.ItemsToBind</att.ItemSource-eval>
</RepeatStack>
</ScrollContainer>
</TabPage>
<TabPage Text="RepeatFlow" Alt="F">
</att.ContentComposition-set>
</demo:EnglishNumbersControllerTabPage>
<demo:EnglishNumbersControllerTabPage ref.Name="repeatFlowTabPage" Text="RepeatFlow" Alt="F">
<att.ContentComposition-set>
<ScrollContainer ExtendToFullWidth="true" HorizontalAlwaysVisible="false">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<RepeatFlow ref.Name="repeatFlow" AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<RepeatFlow AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<att.RowPadding>5</att.RowPadding>
<att.ColumnPadding>5</att.ColumnPadding>
<att.ExtraMargin>left:5 top:5 right:5 bottom:5</att.ExtraMargin>
<att.ItemTemplate>demo::RepeatItemTemplate</att.ItemTemplate>
<att.ItemSource-eval>self.itemsToBind</att.ItemSource-eval>
<att.ItemSource-eval>repeatFlowTabPage.ItemsToBind</att.ItemSource-eval>
</RepeatFlow>
</ScrollContainer>
</TabPage>
</att.ContentComposition-set>
</demo:EnglishNumbersControllerTabPage>
<demo:EnglishNumbersControllerTabPage ref.Name="sharedSizeFlowTabPage" Text="SharedSize (RepeatFlow)" Alt="F">
<att.ContentComposition-set>
<ScrollContainer ExtendToFullWidth="true" HorizontalAlwaysVisible="false">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<SharedSizeRoot AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<RepeatFlow AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<att.RowPadding>5</att.RowPadding>
<att.ColumnPadding>5</att.ColumnPadding>
<att.ExtraMargin>left:5 top:5 right:5 bottom:5</att.ExtraMargin>
<att.ItemTemplate>demo::SharedSizeItemTemplate</att.ItemTemplate>
<att.ItemSource-eval>sharedSizeFlowTabPage.ItemsToBind</att.ItemSource-eval>
</RepeatFlow>
</SharedSizeRoot>
</ScrollContainer>
</att.ContentComposition-set>
</demo:EnglishNumbersControllerTabPage>
<demo:EnglishNumbersControllerTabPage ref.Name="sharedSizeListTabPage" Text="SharedSize (TextList)" Alt="L">
<att.ContentComposition-set>
<SharedSizeRoot AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<BindableTextList HorizontalAlwaysVisible="false" VerticalAlwaysVisible="false" env.ItemType="demo::MyTextItem^">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<att.ItemTemplate>demo::SharedSizeTextItemTemplate</att.ItemTemplate>
<att.TextProperty>Name</att.TextProperty>
<att.ItemSource-eval>sharedSizeListTabPage.ItemsToBind</att.ItemSource-eval>
</BindableTextList>
</SharedSizeRoot>
</att.ContentComposition-set>
</demo:EnglishNumbersControllerTabPage>
</att.Pages>
</Tab>
</Cell>
<Cell Site="row:0 column:1">
<GroupBox Text="Operations">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:-1"/>
<att.ContainerComposition-set InternalMargin="left:5 top:0 right:5 bottom:5"/>
<Stack Direction="Vertical" Padding="5" AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<StackItem>
<Button Alt="A" Text="Add 10 items">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
for (i in range [0, 9])
{
var textItem = new demo::MyTextItem^();
textItem.Name = self.NumberToText(self.counter + i);
self.itemsToBind.Add(textItem);
}
self.counter = self.counter + 10;
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
<StackItem>
<Button Alt="O" Text="Remove odd items">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
var i = 0;
while (i < self.itemsToBind.Count)
{
self.itemsToBind.RemoveAt(i);
i = i + 1;
}
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
<StackItem>
<Button Alt="E" Text="Remove even items">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
var i = 1;
while (i < self.itemsToBind.Count)
{
self.itemsToBind.RemoveAt(i);
i = i + 1;
}
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
<StackItem>
<Button Alt="C" Text="Clear">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<ev.Clicked-eval>
<![CDATA[
{
self.itemsToBind.Clear();
}
]]>
</ev.Clicked-eval>
</Button>
</StackItem>
</Stack>
</GroupBox>
</Cell>
<Cell Site="row:1 column:0 columnSpan:2">
<Cell Site="row:1 column:0">
<HTracker ref.Name="hTracker" TotalSize="10">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</HTracker>
</Cell>
<Cell Site="row:2 column:0 columnSpan:2">
<Cell Site="row:2 column:0">
<ProgressBar TotalSize="10" Position-bind="hTracker.Position">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</ProgressBar>
</Cell>
<Cell Site="row:0 column:2">
<Cell Site="row:0 column:1">
<VTracker TotalSize="5">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</VTracker>
File diff suppressed because it is too large Load Diff
@@ -57,6 +57,10 @@ namespace vl
IMPL_CPP_TYPE_INFO(demo::DocumentEditorToolstripConstructor)
IMPL_CPP_TYPE_INFO(demo::ElementTabPage)
IMPL_CPP_TYPE_INFO(demo::ElementTabPageConstructor)
IMPL_CPP_TYPE_INFO(demo::EnglishNumbersController)
IMPL_CPP_TYPE_INFO(demo::EnglishNumbersControllerConstructor)
IMPL_CPP_TYPE_INFO(demo::EnglishNumbersControllerTabPage)
IMPL_CPP_TYPE_INFO(demo::EnglishNumbersControllerTabPageConstructor)
IMPL_CPP_TYPE_INFO(demo::GenderDisplayer)
IMPL_CPP_TYPE_INFO(demo::GenderDisplayerConstructor)
IMPL_CPP_TYPE_INFO(demo::GenderEditor)
@@ -90,6 +94,10 @@ namespace vl
IMPL_CPP_TYPE_INFO(demo::ResponsiveTabPageConstructor)
IMPL_CPP_TYPE_INFO(demo::ResponsiveViewControl)
IMPL_CPP_TYPE_INFO(demo::ResponsiveViewControlConstructor)
IMPL_CPP_TYPE_INFO(demo::SharedSizeItemTemplate)
IMPL_CPP_TYPE_INFO(demo::SharedSizeItemTemplateConstructor)
IMPL_CPP_TYPE_INFO(demo::SharedSizeTextItemTemplate)
IMPL_CPP_TYPE_INFO(demo::SharedSizeTextItemTemplateConstructor)
IMPL_CPP_TYPE_INFO(demo::StringResource)
IMPL_CPP_TYPE_INFO(demo::StyleGroup)
IMPL_CPP_TYPE_INFO(demo::StyleItem)
@@ -726,6 +734,75 @@ namespace vl
CLASS_MEMBER_FIELD(self)
END_CLASS_MEMBER(::demo::ElementTabPageConstructor)
BEGIN_CLASS_MEMBER(::demo::EnglishNumbersController)
CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl)
CLASS_MEMBER_BASE(::demo::EnglishNumbersControllerConstructor)
CLASS_MEMBER_CONSTRUCTOR(::demo::EnglishNumbersController*(), NO_PARAMETER)
CLASS_MEMBER_METHOD(GetItemsToBind, NO_PARAMETER)
CLASS_MEMBER_METHOD(NumberToText, { L"i" })
CLASS_MEMBER_METHOD(NumberToText_0to999, { L"i" })
CLASS_MEMBER_METHOD(NumberToText_1To99, { L"i" })
CLASS_MEMBER_METHOD(SetItemsToBind, { L"__vwsn_value_" })
CLASS_MEMBER_METHOD(ToText_11to19, { L"i" })
CLASS_MEMBER_METHOD(ToText_1to9, { L"i" })
CLASS_MEMBER_FIELD(__vwsn_prop_ItemsToBind)
CLASS_MEMBER_PROPERTY_READONLY(ItemsToBind, GetItemsToBind)
CLASS_MEMBER_FIELD(counter)
END_CLASS_MEMBER(::demo::EnglishNumbersController)
BEGIN_CLASS_MEMBER(::demo::EnglishNumbersControllerConstructor)
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EnglishNumbersControllerConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_demo_EnglishNumbersController_Initialize, { L"__vwsn_this_" })
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
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_13)
CLASS_MEMBER_FIELD(__vwsn_precompile_14)
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)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
CLASS_MEMBER_FIELD(self)
END_CLASS_MEMBER(::demo::EnglishNumbersControllerConstructor)
BEGIN_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPage)
CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage)
CLASS_MEMBER_BASE(::demo::EnglishNumbersControllerTabPageConstructor)
CLASS_MEMBER_CONSTRUCTOR(::demo::EnglishNumbersControllerTabPage*(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER)
CLASS_MEMBER_METHOD(GetContentComposition, NO_PARAMETER)
CLASS_MEMBER_METHOD(GetItemsToBind, NO_PARAMETER)
CLASS_MEMBER_METHOD(SetContentComposition, { L"__vwsn_value_" })
CLASS_MEMBER_METHOD(SetItemsToBind, { L"__vwsn_value_" })
CLASS_MEMBER_FIELD(__vwsn_prop_ContentComposition)
CLASS_MEMBER_FIELD(__vwsn_prop_ItemsToBind)
CLASS_MEMBER_PROPERTY_READONLY(ContentComposition, GetContentComposition)
CLASS_MEMBER_PROPERTY_READONLY(ItemsToBind, GetItemsToBind)
END_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPage)
BEGIN_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPageConstructor)
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EnglishNumbersControllerTabPageConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_demo_EnglishNumbersControllerTabPage_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(__vwsn_precompile_3)
CLASS_MEMBER_FIELD(content)
CLASS_MEMBER_FIELD(controller)
END_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPageConstructor)
BEGIN_CLASS_MEMBER(::demo::GenderDisplayer)
CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl)
CLASS_MEMBER_BASE(::demo::GenderDisplayerConstructor)
@@ -1058,13 +1135,6 @@ namespace vl
CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage)
CLASS_MEMBER_BASE(::demo::RepeatTabPageConstructor)
CLASS_MEMBER_CONSTRUCTOR(::demo::RepeatTabPage*(), NO_PARAMETER)
CLASS_MEMBER_METHOD(NumberToText, { L"i" })
CLASS_MEMBER_METHOD(NumberToText_0to999, { L"i" })
CLASS_MEMBER_METHOD(NumberToText_1To99, { L"i" })
CLASS_MEMBER_METHOD(ToText_11to19, { L"i" })
CLASS_MEMBER_METHOD(ToText_1to9, { L"i" })
CLASS_MEMBER_FIELD(counter)
CLASS_MEMBER_FIELD(itemsToBind)
END_CLASS_MEMBER(::demo::RepeatTabPage)
BEGIN_CLASS_MEMBER(::demo::RepeatTabPageConstructor)
@@ -1093,13 +1163,7 @@ namespace vl
CLASS_MEMBER_FIELD(__vwsn_precompile_26)
CLASS_MEMBER_FIELD(__vwsn_precompile_27)
CLASS_MEMBER_FIELD(__vwsn_precompile_28)
CLASS_MEMBER_FIELD(__vwsn_precompile_29)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
CLASS_MEMBER_FIELD(__vwsn_precompile_30)
CLASS_MEMBER_FIELD(__vwsn_precompile_31)
CLASS_MEMBER_FIELD(__vwsn_precompile_32)
CLASS_MEMBER_FIELD(__vwsn_precompile_33)
CLASS_MEMBER_FIELD(__vwsn_precompile_34)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
@@ -1107,9 +1171,11 @@ namespace vl
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
CLASS_MEMBER_FIELD(hTracker)
CLASS_MEMBER_FIELD(repeatFlow)
CLASS_MEMBER_FIELD(repeatStack)
CLASS_MEMBER_FIELD(repeatFlowTabPage)
CLASS_MEMBER_FIELD(repeatStackTabPage)
CLASS_MEMBER_FIELD(self)
CLASS_MEMBER_FIELD(sharedSizeFlowTabPage)
CLASS_MEMBER_FIELD(sharedSizeListTabPage)
END_CLASS_MEMBER(::demo::RepeatTabPageConstructor)
BEGIN_CLASS_MEMBER(::demo::ResponsiveGroupControl)
@@ -1302,6 +1368,45 @@ namespace vl
CLASS_MEMBER_FIELD(self)
END_CLASS_MEMBER(::demo::ResponsiveViewControlConstructor)
BEGIN_CLASS_MEMBER(::demo::SharedSizeItemTemplate)
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::demo::SharedSizeItemTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::demo::SharedSizeItemTemplate*(::vl::Ptr<::demo::MyTextItem>), { L"__vwsn_ctor_parameter_ViewModel" })
CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER)
CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel)
CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel)
END_CLASS_MEMBER(::demo::SharedSizeItemTemplate)
BEGIN_CLASS_MEMBER(::demo::SharedSizeItemTemplateConstructor)
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::SharedSizeItemTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_demo_SharedSizeItemTemplate_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(__vwsn_precompile_3)
CLASS_MEMBER_FIELD(ViewModel)
END_CLASS_MEMBER(::demo::SharedSizeItemTemplateConstructor)
BEGIN_CLASS_MEMBER(::demo::SharedSizeTextItemTemplate)
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate)
CLASS_MEMBER_BASE(::demo::SharedSizeTextItemTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::demo::SharedSizeTextItemTemplate*(::vl::Ptr<::demo::MyTextItem>), { L"__vwsn_ctor_parameter_ViewModel" })
CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER)
CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel)
CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel)
END_CLASS_MEMBER(::demo::SharedSizeTextItemTemplate)
BEGIN_CLASS_MEMBER(::demo::SharedSizeTextItemTemplateConstructor)
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::SharedSizeTextItemTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_demo_SharedSizeTextItemTemplate_Initialize, { L"__vwsn_this_" })
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
CLASS_MEMBER_FIELD(ViewModel)
CLASS_MEMBER_FIELD(self)
END_CLASS_MEMBER(::demo::SharedSizeTextItemTemplateConstructor)
BEGIN_CLASS_MEMBER(::demo::StringResource)
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::StringResource>(), NO_PARAMETER)
@@ -1555,6 +1660,10 @@ namespace vl
ADD_TYPE_INFO(::demo::DocumentEditorToolstripConstructor)
ADD_TYPE_INFO(::demo::ElementTabPage)
ADD_TYPE_INFO(::demo::ElementTabPageConstructor)
ADD_TYPE_INFO(::demo::EnglishNumbersController)
ADD_TYPE_INFO(::demo::EnglishNumbersControllerConstructor)
ADD_TYPE_INFO(::demo::EnglishNumbersControllerTabPage)
ADD_TYPE_INFO(::demo::EnglishNumbersControllerTabPageConstructor)
ADD_TYPE_INFO(::demo::GenderDisplayer)
ADD_TYPE_INFO(::demo::GenderDisplayerConstructor)
ADD_TYPE_INFO(::demo::GenderEditor)
@@ -1588,6 +1697,10 @@ namespace vl
ADD_TYPE_INFO(::demo::ResponsiveTabPageConstructor)
ADD_TYPE_INFO(::demo::ResponsiveViewControl)
ADD_TYPE_INFO(::demo::ResponsiveViewControlConstructor)
ADD_TYPE_INFO(::demo::SharedSizeItemTemplate)
ADD_TYPE_INFO(::demo::SharedSizeItemTemplateConstructor)
ADD_TYPE_INFO(::demo::SharedSizeTextItemTemplate)
ADD_TYPE_INFO(::demo::SharedSizeTextItemTemplateConstructor)
ADD_TYPE_INFO(::demo::StringResource)
ADD_TYPE_INFO(::demo::StyleGroup)
ADD_TYPE_INFO(::demo::StyleItem)
@@ -60,6 +60,10 @@ namespace vl
DECL_TYPE_INFO(::demo::DocumentEditorToolstripConstructor)
DECL_TYPE_INFO(::demo::ElementTabPage)
DECL_TYPE_INFO(::demo::ElementTabPageConstructor)
DECL_TYPE_INFO(::demo::EnglishNumbersController)
DECL_TYPE_INFO(::demo::EnglishNumbersControllerConstructor)
DECL_TYPE_INFO(::demo::EnglishNumbersControllerTabPage)
DECL_TYPE_INFO(::demo::EnglishNumbersControllerTabPageConstructor)
DECL_TYPE_INFO(::demo::GenderDisplayer)
DECL_TYPE_INFO(::demo::GenderDisplayerConstructor)
DECL_TYPE_INFO(::demo::GenderEditor)
@@ -93,6 +97,10 @@ namespace vl
DECL_TYPE_INFO(::demo::ResponsiveTabPageConstructor)
DECL_TYPE_INFO(::demo::ResponsiveViewControl)
DECL_TYPE_INFO(::demo::ResponsiveViewControlConstructor)
DECL_TYPE_INFO(::demo::SharedSizeItemTemplate)
DECL_TYPE_INFO(::demo::SharedSizeItemTemplateConstructor)
DECL_TYPE_INFO(::demo::SharedSizeTextItemTemplate)
DECL_TYPE_INFO(::demo::SharedSizeTextItemTemplateConstructor)
DECL_TYPE_INFO(::demo::StringResource)
DECL_TYPE_INFO(::demo::StyleGroup)
DECL_TYPE_INFO(::demo::StyleItem)
@@ -150,16 +150,16 @@ namespace demo
if (::vl::__vwsn::This(this->dialogSaveDoc)->ShowDialog())
{
{
auto __vwsn_switch_6 = ::vl::__vwsn::This(this->dialogSaveDoc)->GetFilterIndex();
if ((__vwsn_switch_6 == static_cast<::vl::vint>(0)))
auto __vwsn_switch_3 = ::vl::__vwsn::This(this->dialogSaveDoc)->GetFilterIndex();
if ((__vwsn_switch_3 == static_cast<::vl::vint>(0)))
{
::vl::__vwsn::This(this->self)->SaveAsPrivateFormat(::vl::__vwsn::This(this->dialogSaveDoc)->GetFileName());
}
else if ((__vwsn_switch_6 == static_cast<::vl::vint>(1)))
else if ((__vwsn_switch_3 == static_cast<::vl::vint>(1)))
{
::vl::__vwsn::This(this->self)->SaveAsRTF(::vl::__vwsn::This(this->dialogSaveDoc)->GetFileName());
}
else if ((__vwsn_switch_6 == static_cast<::vl::vint>(2)))
else if ((__vwsn_switch_3 == static_cast<::vl::vint>(2)))
{
::vl::__vwsn::This(this->self)->SaveAsHTML(::vl::__vwsn::This(this->dialogSaveDoc)->GetFileName());
}
@@ -78,8 +78,8 @@ namespace demo
friend struct ::vl_workflow_global::__vwsnf117_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf118_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf119_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf120_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf121_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__;
friend struct ::vl_workflow_global::__vwsnf120_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__;
friend struct ::vl_workflow_global::__vwsnf121_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf122_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf123_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf124_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
@@ -114,7 +114,7 @@ namespace demo
friend struct ::vl_workflow_global::__vwsnf153_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf154_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf155_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf156_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf97_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf98_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf99_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
#ifndef VCZH_DEBUG_NO_REFLECTION
@@ -181,7 +181,7 @@ namespace demo
void DocumentEditorRibbon::__vwsn_instance_ctor_()
{
this->SetStyleGroups(this->GenerateStyleGroups());
::vl::__vwsn::EventAttach(::vl::__vwsn::This(this->document)->SelectionChanged, LAMBDA(::vl_workflow_global::__vwsnf172_Demo_demo_DocumentEditorRibbon___vwsn_instance_ctor__(this)));
::vl::__vwsn::EventAttach(::vl::__vwsn::This(this->document)->SelectionChanged, LAMBDA(::vl_workflow_global::__vwsnf171_Demo_demo_DocumentEditorRibbon___vwsn_instance_ctor__(this)));
}
DocumentEditorRibbon::~DocumentEditorRibbon()
@@ -28,7 +28,7 @@ namespace demo
{
class DocumentEditorRibbon : public ::demo::DocumentEditorBase, public ::demo::DocumentEditorRibbonConstructor, public ::vl::reflection::Description<DocumentEditorRibbon>
{
friend struct ::vl_workflow_global::__vwsnf172_Demo_demo_DocumentEditorRibbon___vwsn_instance_ctor__;
friend struct ::vl_workflow_global::__vwsnf171_Demo_demo_DocumentEditorRibbon___vwsn_instance_ctor__;
friend class ::demo::DocumentEditorRibbonConstructor;
friend class ::vl_workflow_global::__vwsnc64_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc65_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
@@ -39,6 +39,7 @@ namespace demo
friend class ::vl_workflow_global::__vwsnc70_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc71_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc72_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend struct ::vl_workflow_global::__vwsnf156_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf157_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf158_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf159_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
@@ -53,7 +54,6 @@ namespace demo
friend struct ::vl_workflow_global::__vwsnf168_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf169_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf170_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf171_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
#ifndef VCZH_DEBUG_NO_REFLECTION
friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorRibbon>;
#endif
@@ -31,8 +31,8 @@ namespace demo
friend class ::demo::DocumentEditorToolstripConstructor;
friend class ::vl_workflow_global::__vwsnc76_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc77_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize__vl_reflection_description_IValueSubscription;
friend struct ::vl_workflow_global::__vwsnf175_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize_;
friend struct ::vl_workflow_global::__vwsnf176_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize_;
friend struct ::vl_workflow_global::__vwsnf177_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize_;
#ifndef VCZH_DEBUG_NO_REFLECTION
friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorToolstrip>;
#endif
@@ -168,7 +168,7 @@
<Cell Site="row:1 column:2">
<BindableTextList ref.Name="bindableTextList" Alt="B" env.ItemType="demo::MyTextItem^" HorizontalAlwaysVisible="false" VerticalAlwaysVisible="false">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<att.ItemSource-eval>self.self.itemsToBind</att.ItemSource-eval>
<att.ItemSource-eval>self.itemsToBind</att.ItemSource-eval>
<att.TextProperty>Name</att.TextProperty>
<att.CheckedProperty>Checked</att.CheckedProperty>
</BindableTextList>
Binary file not shown.
Binary file not shown.
Binary file not shown.