Update release

This commit is contained in:
vczh
2026-03-27 21:45:56 -07:00
parent fc04573686
commit e0eac29f90
17 changed files with 3108 additions and 1550 deletions
+2 -20
View File
@@ -541,26 +541,7 @@ UnitTestSnapshotViewerAppWindow
{
labelLoading->SetVisible(true);
scRendering->SetVisible(false);
struct LoadingContext
{
vint version;
Ptr<EventHandler> handler;
};
auto context = Ptr(new LoadingContext);
context->version = ++loadingFrameVersion;
context->handler = frame->DomChanged.Add([=, this]()
{
if (context->version == loadingFrameVersion)
{
loadDom();
GetApplication()->InvokeInMainThread(GetApplication()->GetMainWindow(), [=]()
{
frame->DomChanged.Remove(context->handler);
context->handler = {};
});
}
});
__vwsn::EventAttachOnce(frame->DomChanged, loadDom, loadingFrameVersion);
}
}
}
@@ -677,6 +658,7 @@ UnitTestSnapshotViewerAppWindow
UnitTestSnapshotViewerAppWindow::UnitTestSnapshotViewerAppWindow(Ptr<UnitTestSnapshotViewerViewModel> viewModel)
: UnitTestSnapshotViewerWindow(viewModel)
, loadingFrameVersion(Ptr(new reflection::description::Versioning))
{
textListFrames->SelectionChanged.AttachMethod(this, &UnitTestSnapshotViewerAppWindow::textListFrames_SelectionChanged);
treeViewDom->SelectionChanged.AttachMethod(this, &UnitTestSnapshotViewerAppWindow::treeViewDom_SelectionChanged);
+1 -1
View File
@@ -619,7 +619,7 @@ namespace gaclib_controls
vl::presentation::compositions::GuiBoundsComposition* rootComposition = nullptr;
vl::presentation::compositions::GuiBoundsComposition* selectedComposition = nullptr;
vl::presentation::compositions::GuiBoundsComposition* highlightComposition = nullptr;
vl::vint loadingFrameVersion = 0;
vl::Ptr<vl::presentation::description::Versioning> loadingFrameVersion;
void Highlight(vl::presentation::compositions::GuiBoundsComposition*& target, vl::presentation::remoteprotocol::RenderingDom& renderingDom, vl::presentation::Color color);
void textListFrames_SelectionChanged(vl::presentation::compositions::GuiGraphicsComposition* sender, vl::presentation::compositions::GuiEventArgs& arguments);
+156 -52
View File
@@ -19141,6 +19141,13 @@ GuiDocumentCommonInterface
SelectionChanged.Execute(documentControl->GetNotifyEventArguments());
}
void GuiDocumentCommonInterface::EnsureCaretVisible()
{
auto end = documentElement->GetCaretEnd();
auto frontSide = documentElement->IsCaretEndPreferFrontSide();
EnsureDocumentRectVisible(documentElement->GetCaretBounds(end, frontSide));
}
TextPos GuiDocumentCommonInterface::CalculateCaretFromPoint(Point point)
{
return documentElement->CalculateCaretFromPoint(point);
@@ -37082,7 +37089,13 @@ GuiRemoteGraphicsParagraph
{
auto response = messages.RetrieveRendererUpdateElement_DocumentParagraph(requestId);
cachedSize = response.documentSize;
cachedInlineObjectBounds.Clear();
if (desc.removedInlineObjects)
{
for (auto callbackId : *desc.removedInlineObjects.Obj())
{
cachedInlineObjectBounds.Remove(callbackId);
}
}
}
committedRuns = std::move(stagedRuns);
needUpdate = false;
@@ -43969,15 +43982,15 @@ namespace vl::presentation::remote_renderer
void GuiRemoteRendererSingle::RequestRendererEndRendering(vint id)
{
events->RespondRendererEndRendering(id, elementMeasurings);
elementMeasurings = {};
fontHeightMeasurings.Clear();
supressRefresh = false;
if (needRefresh)
{
needRefresh = false;
ForceRender();
}
events->RespondRendererEndRendering(id, elementMeasurings);
elementMeasurings = {};
fontHeightMeasurings.Clear();
}
void GuiRemoteRendererSingle::RequestRendererIdle()
@@ -44568,6 +44581,8 @@ namespace vl::presentation::remote_renderer
[&](const remoteprotocol::DocumentInlineObjectRunProperty& inlineProp)
{
CHECK_ERROR(elements::AddInlineObjectRun(inlineObjectRuns, range, inlineProp), ERROR_MESSAGE_PREFIX L"arguments.runsDiff updated an inline object run incorrectly.");
inlineObjectProps.Set(inlineProp.callbackId, inlineProp);
inlineObjectRanges.Set(inlineProp.callbackId, range);
}
));
}
@@ -47052,6 +47067,22 @@ Clone the current run with its children
namespace document_editor
{
bool CompareStyleProperties(Ptr<DocumentStyleProperties> a, Ptr<DocumentStyleProperties> b)
{
if (!a && !b) return true;
if (!a || !b) return false;
return a->face == b->face
&& a->size == b->size
&& a->color == b->color
&& a->backgroundColor == b->backgroundColor
&& a->bold == b->bold
&& a->italic == b->italic
&& a->underline == b->underline
&& a->strikeline == b->strikeline
&& a->antialias == b->antialias
&& a->verticalAntialias == b->verticalAntialias;
}
Ptr<DocumentStyleProperties> CopyStyle(Ptr<DocumentStyleProperties> style)
{
if (!style) return nullptr;
@@ -48552,6 +48583,10 @@ DocumentModel::EditRangeOperations
WString styleName=styleNames[i];
if(!newDocument->styles.Keys().Contains(styleName))
{
if (!styles.Keys().Contains(styleName))
{
continue;
}
Ptr<DocumentStyle> style=styles[styleName];
if(deepCopy)
{
@@ -48704,6 +48739,13 @@ DocumentModel::EditRun
WString name=newNames[i];
if((name.Length()==0 || name[0]!=L'#') && styles.Keys().Contains(name))
{
auto existingStyle = styles[name];
auto incomingStyle = model->styles[name];
if (existingStyle->parentStyleName == incomingStyle->parentStyleName
&& document_editor::CompareStyleProperties(existingStyle->styles, incomingStyle->styles))
{
continue;
}
vint index=2;
while(true)
{
@@ -53663,7 +53705,20 @@ View Model (IFileDialogViewModel)
if (!extensionFromFilter && defaultExtension != WString::Empty)
{
extension = defaultExtension;
// Only use the dialog default extension if it matches the current filter
if (selectedFilter && selectedFilter->regexFilter)
{
auto testName = WString::Unmanaged(L"x.") + defaultExtension;
auto match = selectedFilter->regexFilter->MatchHead(testName);
if (match && match->Result().Length() == testName.Length())
{
extension = defaultExtension;
}
}
else
{
extension = defaultExtension;
}
}
auto normalized = [&](filesystem::FilePath path)
@@ -53674,20 +53729,18 @@ View Model (IFileDialogViewModel)
vint lExt = sExt.Length();
auto full = path.GetFullPath();
if (extensionFromFilter)
auto selectedFileName = path.GetName();
if (selectedFilter && selectedFilter->regexFilter)
{
if (full.Length() >= lExt && full.Right(lExt) == sExt)
auto match = selectedFilter->regexFilter->MatchHead(selectedFileName);
if (match && match->Result().Length() == selectedFileName.Length())
{
return path;
}
}
else
if (INVLOC.FindFirst(selectedFileName, WString::Unmanaged(L"."), Locale::None).key != -1)
{
auto selectedFileName = path.GetName();
if (INVLOC.FindFirst(selectedFileName, WString::Unmanaged(L"."), Locale::None).key != -1)
{
return path;
}
return path;
}
return filesystem::FilePath(full + sExt);
};
@@ -53902,30 +53955,53 @@ View Model (IFileDialogViewModel)
FakeDialogServiceBase
***********************************************************************/
bool FakeDialogServiceBase::ShowFileDialog(
INativeWindow* window,
collections::List<WString>& selectionFileNames,
vint& selectionFilterIndex,
FileDialogTypes dialogType,
const WString& title,
const WString& initialFileName,
const WString& initialDirectory,
const WString& defaultExtension,
const WString& filter,
FileDialogOptions options
)
void FakeDialogServiceBase::ParseFileDialogFilter(const WString& filter, collections::List<FilterDesc>& descs)
{
auto vm = Ptr(new FileDialogViewModel);
vm->dialogService = this;
vm->title = title;
vm->enabledMultipleSelection = (options & INativeDialogService::FileDialogAllowMultipleSelection) != 0;
vm->fileMustExist = (options & INativeDialogService::FileDialogFileMustExist) != 0;
vm->folderMustExist = (options & INativeDialogService::FileDialogDirectoryMustExist) != 0;
vm->promptCreateFile = (options & INativeDialogService::FileDialogPromptCreateFile) != 0;
vm->promptOverriteFile = (options & INativeDialogService::FileDialogPromptOverwriteFile) != 0;
vm->defaultExtension = defaultExtension;
auto GetSingleWildcardDefaultExtension = [](const WString& wildcard) -> Nullable<WString>
{
// Accept only "*.<ext>" where <ext> is non-empty and contains no '*', '?', or ';'.
if (wildcard.Length() < 3) return {};
if (wildcard[0] != L'*' || wildcard[1] != L'.') return {};
auto ext = wildcard.Right(wildcard.Length() - 2);
for (vint i = 0; i < ext.Length(); i++)
{
switch (ext[i])
{
case L'*':
case L'?':
case L';':
return {};
}
}
return Nullable<WString>(ext);
};
auto GetFilterDefaultExtension = [&](const WString& wildcardExpr) -> Nullable<WString>
{
// Split by ';' and return the first qualifying extension
vint start = 0;
while (start <= wildcardExpr.Length())
{
vint semicolonPos = -1;
for (vint i = start; i < wildcardExpr.Length(); i++)
{
if (wildcardExpr[i] == L';')
{
semicolonPos = i;
break;
}
}
auto part = (semicolonPos == -1)
? wildcardExpr.Right(wildcardExpr.Length() - start)
: wildcardExpr.Sub(start, semicolonPos - start);
auto ext = GetSingleWildcardDefaultExtension(part);
if (ext) return ext;
if (semicolonPos == -1) break;
start = semicolonPos + 1;
}
return {};
};
Regex regexFilterExt(L"/*.[^*?]+");
Regex regexWildcard(L"[*?;]");
vint filterStart = 0;
while (true)
@@ -53953,23 +54029,15 @@ FakeDialogServiceBase
}
}
auto filterItem = Ptr(new FileDialogFilter);
filterItem->name = filter.Sub(filterStart, first - filterStart);
filterItem->filter = filter.Sub(first + 1, (second == -1 ? count : second) - first - 1);
if (auto match = regexFilterExt.MatchHead(filterItem->filter))
{
if (match->Result().Length() == filterItem->filter.Length())
{
filterItem->defaultExtension = filterItem->filter.Right(filterItem->filter.Length() - 2);
}
}
auto regexFilter = stream::GenerateToStream([&](stream::TextWriter& writer)
FilterDesc desc;
desc.name = filter.Sub(filterStart, first - filterStart);
desc.filter = filter.Sub(first + 1, (second == -1 ? count : second) - first - 1);
desc.defaultExtensionOverride = GetFilterDefaultExtension(desc.filter);
desc.regexFilterCode = stream::GenerateToStream([&](stream::TextWriter& writer)
{
writer.WriteString(L"^(");
List<Ptr<RegexMatch>> matches;
regexWildcard.Cut(filterItem->filter, false, matches);
regexWildcard.Cut(desc.filter, false, matches);
for (auto match : matches)
{
if (match->Success())
@@ -53995,13 +54063,48 @@ FakeDialogServiceBase
}
writer.WriteString(L")$");
});
filterItem->regexFilter = Ptr(new Regex(regexFilter));
vm->filters.Add(filterItem);
desc.regexFilter = Ptr(new Regex(desc.regexFilterCode));
descs.Add(std::move(desc));
if (second == -1) break;
filterStart = second + 1;
}
}
bool FakeDialogServiceBase::ShowFileDialog(
INativeWindow* window,
collections::List<WString>& selectionFileNames,
vint& selectionFilterIndex,
FileDialogTypes dialogType,
const WString& title,
const WString& initialFileName,
const WString& initialDirectory,
const WString& defaultExtension,
const WString& filter,
FileDialogOptions options
)
{
auto vm = Ptr(new FileDialogViewModel);
vm->dialogService = this;
vm->title = title;
vm->enabledMultipleSelection = (options & INativeDialogService::FileDialogAllowMultipleSelection) != 0;
vm->fileMustExist = (options & INativeDialogService::FileDialogFileMustExist) != 0;
vm->folderMustExist = (options & INativeDialogService::FileDialogDirectoryMustExist) != 0;
vm->promptCreateFile = (options & INativeDialogService::FileDialogPromptCreateFile) != 0;
vm->promptOverriteFile = (options & INativeDialogService::FileDialogPromptOverwriteFile) != 0;
vm->defaultExtension = defaultExtension;
List<FilterDesc> filterDescs;
ParseFileDialogFilter(filter, filterDescs);
for (auto&& desc : filterDescs)
{
auto filterItem = Ptr(new FileDialogFilter);
filterItem->name = desc.name;
filterItem->filter = desc.filter;
filterItem->defaultExtension = desc.defaultExtensionOverride;
filterItem->regexFilter = desc.regexFilter;
vm->filters.Add(filterItem);
}
if (vm->filters.Count() > 0)
{
@@ -54052,6 +54155,7 @@ FakeDialogServiceBase
}
}
/***********************************************************************
.\UTILITIES\FAKESERVICES\GUIFAKEDIALOGSERVICEBASE_FONTDIALOG.CPP
***********************************************************************/
+46 -2
View File
@@ -10889,6 +10889,38 @@ Helper Functions
extern GuiApplication* GetApplication();
}
}
/***********************************************************************
Workflow to C++ Codegen Helpers
***********************************************************************/
namespace __vwsn
{
template<typename T>
void EventAttachOnce(T& e, typename EventHelper<T>::Handler handler, Ptr<reflection::description::Versioning> versioning = {})
{
struct LoadingContext
{
vint version;
Ptr<reflection::description::IEventHandler> handler;
};
auto context = Ptr(new LoadingContext);
context->version = versioning ? versioning->AllocateVersion() : -1;
context->handler = EventAttach(e, [=, &e]<typename ...TArgs>(TArgs&& ...args)
{
if (!versioning || context->version == versioning->GetVersion())
{
handler(std::forward<TArgs&&>(args)...);
auto app = presentation::controls::GetApplication();
app->InvokeInMainThread(app->GetMainWindow(), [=, &e]()
{
EventDetach(e, context->handler);
context->handler = {};
});
}
});
}
}
}
extern void GuiApplicationMain();
@@ -19964,8 +19996,8 @@ GuiDocumentCommonInterface
/// </summary>
/// <param name="begin">The begin position of the selection area.</param>
/// <param name="end">The end position of the selection area.</param>
void SetCaret(TextPos begin, TextPos end);
/// <summary>Calculate a caret using a specified point.</summary>
void SetCaret(TextPos begin, TextPos end); /// <summary>Ensure the caret is visible by scrolling the view if necessary.</summary>
void EnsureCaretVisible(); /// <summary>Calculate a caret using a specified point.</summary>
/// <returns>The calculated caret.</returns>
/// <param name="point">The specified point.</param>
TextPos CalculateCaretFromPoint(Point point);
@@ -24270,6 +24302,7 @@ namespace vl
extern void GetRunRange(DocumentParagraphRun* run, RunRangeMap& runRanges);
extern void LocateStyle(DocumentParagraphRun* run, RunRangeMap& runRanges, vint position, bool frontSide, collections::List<DocumentContainerRun*>& locatedRuns);
extern Ptr<DocumentHyperlinkRun::Package> LocateHyperlink(DocumentParagraphRun* run, RunRangeMap& runRanges, vint row, vint start, vint end);
extern bool CompareStyleProperties(Ptr<DocumentStyleProperties> a, Ptr<DocumentStyleProperties> b);
extern Ptr<DocumentStyleProperties> CopyStyle(Ptr<DocumentStyleProperties> style);
extern Ptr<DocumentRun> CopyRun(DocumentRun* run);
extern Ptr<DocumentRun> CopyStyledText(collections::List<DocumentContainerRun*>& styleRuns, const WString& text);
@@ -25039,6 +25072,17 @@ FakeDialogServiceBase
void ShowModalDialogAndDelete(Ptr<IDescriptable> viewModel, controls::GuiWindow* owner, controls::GuiWindow* dialog);
public:
struct FilterDesc
{
WString name;
WString filter;
WString regexFilterCode;
Ptr<regex::Regex> regexFilter;
Nullable<WString> defaultExtensionOverride;
};
static void ParseFileDialogFilter(const WString& filter, collections::List<FilterDesc>& descs);
FakeDialogServiceBase();
~FakeDialogServiceBase();
+1
View File
@@ -2976,6 +2976,7 @@ Type Declaration (Class)
CLASS_MEMBER_PROPERTY_GUIEVENT_READONLY_FAST(Modified)
CLASS_MEMBER_METHOD(SetCaret, {L"begin" _ L"end" _ L"frontSide"})
CLASS_MEMBER_METHOD(EnsureCaretVisible, NO_PARAMETER)
CLASS_MEMBER_METHOD(CalculateCaretFromPoint, {L"point"})
CLASS_MEMBER_METHOD(GetCaretBounds, {L"caret" _ L"frontSide"})
CLASS_MEMBER_METHOD(NotifyParagraphUpdated, {L"index" _ L"oldCount" _ L"newCount" _ L"updatedText" _ L"skipFormatting"})
+29
View File
@@ -966,6 +966,28 @@ Localization
{
return locale.FormatCurrency(number);
}
/***********************************************************************
Versioning
***********************************************************************/
Versioning::Versioning()
{
}
Versioning::~Versioning()
{
}
vint Versioning::AllocateVersion()
{
return ++version;
}
vint Versioning::GetVersion()
{
return version;
}
}
}
}
@@ -1010,6 +1032,7 @@ TypeName
IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncCoroutine::IImpl, system::AsyncCoroutine::IImpl)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncCoroutine, system::AsyncCoroutine)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::StateMachine, system::StateMachine)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::Versioning, system::Versioning)
#endif
@@ -1214,6 +1237,12 @@ WfLoadLibraryTypes
CLASS_MEMBER_PROPERTY_READONLY_FAST(StateMachineStatus)
END_CLASS_MEMBER(StateMachine)
BEGIN_CLASS_MEMBER(Versioning)
CLASS_MEMBER_CONSTRUCTOR(Ptr<Versioning>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(AllocateVersion, NO_PARAMETER)
CLASS_MEMBER_PROPERTY_READONLY_FAST(Version)
END_CLASS_MEMBER(Versioning)
#undef _
class WfLibraryTypeLoader : public Object, public ITypeLoader
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,179 @@
<Folder>
<Instance name="EmbeddedControlsSubTabPageResource">
<Instance ref.CodeBehind="false" ref.Class="demo::EmbeddedControlsSubTabPage">
<TabPage ref.Name="self" Text="Embedded Controls">
<MessageDialog ref.Name="dialogStart"
Title="RemotingTest_Core.exe"
Text="Pretend to be starting!"
/>
<DocumentViewer ref.Name="docViewer" EditMode="Selectable" Document-uri="res://SideDocuments/MainDocument" HorizontalAlwaysVisible="false" VerticalAlwaysVisible="false">
<att.BoundsComposition-set AlignmentToParent="left:5 top:5 right:5 bottom:5"/>
<DocumentItem Name="CommandTable">
<Table CellPadding="5" BorderVisible="false" MinSizeLimitation="LimitToElementAndChildren" PreferredMinSize="x:400">
<att.Rows>
<_>composeType:MinSize</_>
<_>composeType:MinSize</_>
<_>composeType:MinSize</_>
<_>composeType:MinSize</_>
<_>composeType:MinSize</_>
</att.Rows>
<att.Columns>
<_>composeType:MinSize</_>
<_>composeType:Percentage percentage:0.5</_>
<_>composeType:Percentage percentage:0.5</_>
</att.Columns>
<Cell Site="row:0 column:0">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/CellHArg" Behavior="wrapLine:false">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:0 column:1">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/CellHDesc">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:0 column:2">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/CellHReq">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:1 column:0">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell0Arg" Behavior="wrapLine:false">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:1 column:1">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell0Desc">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:1 column:2">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell0Req">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:2 column:0">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell1Arg" Behavior="wrapLine:false">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:2 column:1">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell1Desc">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:2 column:2">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell1Req">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:3 column:0">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell2Arg" Behavior="wrapLine:false">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:3 column:1">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell2Desc">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:3 column:2">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell2Req">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:4 column:0">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell3Arg" Behavior="wrapLine:false">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:4 column:1">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell3Desc">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
<Cell Site="row:4 column:2">
<Bounds AlignmentToParent="left:0 top:0 right:0 bottom:0" MinSizeLimitation="LimitToElementAndChildren">
<SolidBorder Color="#000000"/>
<DocumentLabel EditMode="ViewOnly" Document-uri="res://SideDocuments/Cell3Req">
<att.BoundsComposition-set AlignmentToParent="left:1 top:1 right:1 bottom:1"/>
</DocumentLabel>
</Bounds>
</Cell>
</Table>
</DocumentItem>
<DocumentItem Name="ComboBox">
<ComboBox ref.Name="comboRun" SelectedIndex="0">
<att.BoundsComposition-set PreferredMinSize="x:160"/>
<att.ListControl>
<TextList HorizontalAlwaysVisible="false" VerticalAlwaysVisible="false">
<att.Items>
<TextItem Text="FullControlTest"/>
<TextItem Text="RemoteProtocolTest"/>
</att.Items>
</TextList>
</att.ListControl>
</ComboBox>
</DocumentItem>
<DocumentItem Name="StartButton">
<Button Text="RIGHT NOW">
<ev.Clicked-eval><![CDATA[{
dialogStart.ShowDialog();
}]]></ev.Clicked-eval>
</Button>
</DocumentItem>
</DocumentViewer>
</TabPage>
</Instance>
</Instance>
</Folder>
@@ -147,6 +147,7 @@
</demo:DocumentEditorToolstrip>
</TabPage>
<demo:TextBoxTabPage Alt="T"/>
<demo:EmbeddedControlsSubTabPage Alt="E"/>
</att.Pages>
</Tab>
</TabPage>
@@ -232,6 +233,8 @@
<Folder name="DocumentEditorBase" content="Link">DocumentEditorBase.xml</Folder>
<Folder name="DocumentEditorRibbon" content="Link">DocumentEditorRibbon.xml</Folder>
<Folder name="DocumentEditorToolstrip" content="Link">DocumentEditorToolstrip.xml</Folder>
<Folder name="SideDocuments" content="Link">SideDocuments.xml</Folder>
<Folder name="EmbeddedControlsSubTabPage" content="Link">EmbeddedControlsSubTabPage.xml</Folder>
<Instance name="ElementTabPageResource" content="File">ElementTabPage.xml</Instance>
<Folder name="AnimationTabPage" content="Link">AnimationTabPage.xml</Folder>
@@ -0,0 +1,95 @@
<Folder>
<Doc name="MainDocument">
<Doc>
<Content>
<p>
<div style="Title">
<nop>RemotingTest_Core.exe</nop>
</div>
</p>
<p>
<div style="Body">
<nop>RemotingTest_Core.exe is a test application for the GacUI remote protocol. It hosts a GacUI application and serves its UI over HTTP, enabling browser-based rendering and interaction through the GacJS website.</nop>
</div>
</p>
<p>
<div style="Body">
<object name="CommandTable"/>
</div>
</p>
<p>
<div style="Body">
<nop>Run </nop>
<object name="ComboBox"/>
<nop>? Start </nop>
<object name="StartButton"/>
<nop>!</nop>
</div>
</p>
</Content>
<Styles>
<Style name="Content">
<face>Segoe UI</face>
</Style>
<Style name="Title" parent="Content">
<size>24</size>
<b>true</b>
<color>#0000FF</color>
</Style>
<Style name="Body" parent="Content">
<size>14</size>
</Style>
</Styles>
</Doc>
</Doc>
<Doc name="CellHArg">
<Doc><Content><p><b>Argument</b></p></Content></Doc>
</Doc>
<Doc name="CellHDesc">
<Doc><Content><p><b>Description</b></p></Content></Doc>
</Doc>
<Doc name="CellHReq">
<Doc><Content><p><b>Required</b></p></Content></Doc>
</Doc>
<Doc name="Cell0Arg">
<Doc><Content><p><nop>/Http</nop></p></Content></Doc>
</Doc>
<Doc name="Cell0Desc">
<Doc><Content><p><nop>Use HTTP transport (port 8888)</nop></p></Content></Doc>
</Doc>
<Doc name="Cell0Req">
<Doc><Content><p><b>Yes</b><nop> — /Http is required for GacJS testing</nop></p></Content></Doc>
</Doc>
<Doc name="Cell1Arg">
<Doc><Content><p><nop>/Pipe</nop></p></Content></Doc>
</Doc>
<Doc name="Cell1Desc">
<Doc><Content><p><nop>Use named-pipe transport</nop></p></Content></Doc>
</Doc>
<Doc name="Cell1Req">
<Doc><Content><p><nop>Not used by GacJS</nop></p></Content></Doc>
</Doc>
<Doc name="Cell2Arg">
<Doc><Content><p><nop>/FCT</nop></p></Content></Doc>
</Doc>
<Doc name="Cell2Desc">
<Doc><Content><p><nop>Run FullControlTest (index 0)</nop></p></Content></Doc>
</Doc>
<Doc name="Cell2Req">
<Doc><Content><p><nop>Optional (default if neither is specified)</nop></p></Content></Doc>
</Doc>
<Doc name="Cell3Arg">
<Doc><Content><p><nop>/RPT</nop></p></Content></Doc>
</Doc>
<Doc name="Cell3Desc">
<Doc><Content><p><nop>Run RemoteProtocolTest (index 1)</nop></p></Content></Doc>
</Doc>
<Doc name="Cell3Req">
<Doc><Content><p><nop>Optional</nop></p></Content></Doc>
</Doc>
</Folder>
@@ -61,6 +61,8 @@ 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::EmbeddedControlsSubTabPage)
IMPL_CPP_TYPE_INFO(demo::EmbeddedControlsSubTabPageConstructor)
IMPL_CPP_TYPE_INFO(demo::EnglishNumbersController)
IMPL_CPP_TYPE_INFO(demo::EnglishNumbersControllerConstructor)
IMPL_CPP_TYPE_INFO(demo::EnglishNumbersControllerTabPage)
@@ -864,6 +866,107 @@ namespace vl
CLASS_MEMBER_FIELD(self)
END_CLASS_MEMBER(::demo::ElementTabPageConstructor)
BEGIN_CLASS_MEMBER(::demo::EmbeddedControlsSubTabPage)
CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage)
CLASS_MEMBER_BASE(::demo::EmbeddedControlsSubTabPageConstructor)
CLASS_MEMBER_CONSTRUCTOR(::demo::EmbeddedControlsSubTabPage*(), NO_PARAMETER)
END_CLASS_MEMBER(::demo::EmbeddedControlsSubTabPage)
BEGIN_CLASS_MEMBER(::demo::EmbeddedControlsSubTabPageConstructor)
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EmbeddedControlsSubTabPageConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_demo_EmbeddedControlsSubTabPage_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_19)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
CLASS_MEMBER_FIELD(__vwsn_precompile_20)
CLASS_MEMBER_FIELD(__vwsn_precompile_21)
CLASS_MEMBER_FIELD(__vwsn_precompile_22)
CLASS_MEMBER_FIELD(__vwsn_precompile_23)
CLASS_MEMBER_FIELD(__vwsn_precompile_24)
CLASS_MEMBER_FIELD(__vwsn_precompile_25)
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_35)
CLASS_MEMBER_FIELD(__vwsn_precompile_36)
CLASS_MEMBER_FIELD(__vwsn_precompile_37)
CLASS_MEMBER_FIELD(__vwsn_precompile_38)
CLASS_MEMBER_FIELD(__vwsn_precompile_39)
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_43)
CLASS_MEMBER_FIELD(__vwsn_precompile_44)
CLASS_MEMBER_FIELD(__vwsn_precompile_45)
CLASS_MEMBER_FIELD(__vwsn_precompile_46)
CLASS_MEMBER_FIELD(__vwsn_precompile_47)
CLASS_MEMBER_FIELD(__vwsn_precompile_48)
CLASS_MEMBER_FIELD(__vwsn_precompile_49)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
CLASS_MEMBER_FIELD(__vwsn_precompile_50)
CLASS_MEMBER_FIELD(__vwsn_precompile_51)
CLASS_MEMBER_FIELD(__vwsn_precompile_52)
CLASS_MEMBER_FIELD(__vwsn_precompile_53)
CLASS_MEMBER_FIELD(__vwsn_precompile_54)
CLASS_MEMBER_FIELD(__vwsn_precompile_55)
CLASS_MEMBER_FIELD(__vwsn_precompile_56)
CLASS_MEMBER_FIELD(__vwsn_precompile_57)
CLASS_MEMBER_FIELD(__vwsn_precompile_58)
CLASS_MEMBER_FIELD(__vwsn_precompile_59)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
CLASS_MEMBER_FIELD(__vwsn_precompile_60)
CLASS_MEMBER_FIELD(__vwsn_precompile_61)
CLASS_MEMBER_FIELD(__vwsn_precompile_62)
CLASS_MEMBER_FIELD(__vwsn_precompile_63)
CLASS_MEMBER_FIELD(__vwsn_precompile_64)
CLASS_MEMBER_FIELD(__vwsn_precompile_65)
CLASS_MEMBER_FIELD(__vwsn_precompile_66)
CLASS_MEMBER_FIELD(__vwsn_precompile_67)
CLASS_MEMBER_FIELD(__vwsn_precompile_68)
CLASS_MEMBER_FIELD(__vwsn_precompile_69)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
CLASS_MEMBER_FIELD(__vwsn_precompile_70)
CLASS_MEMBER_FIELD(__vwsn_precompile_71)
CLASS_MEMBER_FIELD(__vwsn_precompile_72)
CLASS_MEMBER_FIELD(__vwsn_precompile_73)
CLASS_MEMBER_FIELD(__vwsn_precompile_74)
CLASS_MEMBER_FIELD(__vwsn_precompile_75)
CLASS_MEMBER_FIELD(__vwsn_precompile_76)
CLASS_MEMBER_FIELD(__vwsn_precompile_77)
CLASS_MEMBER_FIELD(__vwsn_precompile_78)
CLASS_MEMBER_FIELD(__vwsn_precompile_79)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
CLASS_MEMBER_FIELD(__vwsn_precompile_80)
CLASS_MEMBER_FIELD(__vwsn_precompile_81)
CLASS_MEMBER_FIELD(__vwsn_precompile_82)
CLASS_MEMBER_FIELD(__vwsn_precompile_83)
CLASS_MEMBER_FIELD(__vwsn_precompile_84)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
CLASS_MEMBER_FIELD(comboRun)
CLASS_MEMBER_FIELD(dialogStart)
CLASS_MEMBER_FIELD(docViewer)
CLASS_MEMBER_FIELD(self)
END_CLASS_MEMBER(::demo::EmbeddedControlsSubTabPageConstructor)
BEGIN_CLASS_MEMBER(::demo::EnglishNumbersController)
CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl)
CLASS_MEMBER_BASE(::demo::EnglishNumbersControllerConstructor)
@@ -1436,6 +1539,7 @@ namespace vl
CLASS_MEMBER_FIELD(__vwsn_precompile_65)
CLASS_MEMBER_FIELD(__vwsn_precompile_66)
CLASS_MEMBER_FIELD(__vwsn_precompile_67)
CLASS_MEMBER_FIELD(__vwsn_precompile_68)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
@@ -2446,6 +2550,8 @@ namespace vl
ADD_TYPE_INFO(::demo::DocumentEditorToolstripConstructor)
ADD_TYPE_INFO(::demo::ElementTabPage)
ADD_TYPE_INFO(::demo::ElementTabPageConstructor)
ADD_TYPE_INFO(::demo::EmbeddedControlsSubTabPage)
ADD_TYPE_INFO(::demo::EmbeddedControlsSubTabPageConstructor)
ADD_TYPE_INFO(::demo::EnglishNumbersController)
ADD_TYPE_INFO(::demo::EnglishNumbersControllerConstructor)
ADD_TYPE_INFO(::demo::EnglishNumbersControllerTabPage)
@@ -64,6 +64,8 @@ namespace vl
DECL_TYPE_INFO(::demo::DocumentEditorToolstripConstructor)
DECL_TYPE_INFO(::demo::ElementTabPage)
DECL_TYPE_INFO(::demo::ElementTabPageConstructor)
DECL_TYPE_INFO(::demo::EmbeddedControlsSubTabPage)
DECL_TYPE_INFO(::demo::EmbeddedControlsSubTabPageConstructor)
DECL_TYPE_INFO(::demo::EnglishNumbersController)
DECL_TYPE_INFO(::demo::EnglishNumbersControllerConstructor)
DECL_TYPE_INFO(::demo::EnglishNumbersControllerTabPage)
Binary file not shown.