Skip to content

Commit db4ddb4

Browse files
committed
Add Guide feature, new controls, and updates
- Introduce GuideView, GuideWindow, InfoOverlayWindow, and supporting files - Add HorizontalCard and TextMorphEffect custom controls with styles/templates - Implement UInt32Extension markup extension for XAML - Add InvokeCommandOnLoadedBehavior and ShowTeachingTipAction for interactivity - Create NameCultureInfoValue model and GuideViewModel (with State property) - Update project files to include new components and resources - Add resource files for fr, it, ja, ko, ru, zh-Hant with GuideWindowTitle translations - Update App.xaml with resource dictionary performance note - Bump NuGet package versions (WindowsAppSDK, WinUI, WebView2, etc.) - Update README with RAM/SSD recommendations and disk space notes - Apply minor XAML and code style/namespace improvements [actions skip]
1 parent 070fa38 commit db4ddb4

57 files changed

Lines changed: 4354 additions & 1060 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

OpenNet/App.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Card/TitleCard_ResourceDictionary.xaml" />
1515
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/HomePage/Header/HeaderTile_ResourceDictionary.xaml" />
1616

17+
<!-- Advice not add new ResourceDictionary here, instead, use ResourceDictionary in the file where it is used. It's good for performance, because ResourceDictionary in App.xaml will be loaded at the startup of the app, it will increase the startup time of the app. If you add new ResourceDictionary here, it will increase the startup time of the app, even if the ResourceDictionary is not used in the startup page. -->
1718
<!-- Other merged dictionaries here -->
1819
</ResourceDictionary.MergedDictionaries>
1920
<!-- Other app resources here -->
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include "pch.h"
2+
#include "NameCultureInfoValue.h"
3+
#if __has_include("Models/NameCultureInfoValue.g.cpp")
4+
#include "Models/NameCultureInfoValue.g.cpp"
5+
#endif
6+
7+
using namespace winrt;
8+
using namespace Microsoft::UI::Xaml;
9+
10+
namespace winrt::OpenNet::Models::implementation
11+
{
12+
NameCultureInfoValue::NameCultureInfoValue()
13+
{
14+
m_isMaintainedByMSTRDI = false;
15+
m_isMaintainedByCrowdin = false;
16+
}
17+
18+
winrt::hstring NameCultureInfoValue::Value()
19+
{
20+
return m_value;
21+
}
22+
23+
void NameCultureInfoValue::Value(winrt::hstring const& value)
24+
{
25+
m_value = value;
26+
}
27+
28+
bool NameCultureInfoValue::IsMaintainedByMSTRDI() const
29+
{
30+
return m_isMaintainedByMSTRDI;
31+
}
32+
33+
void NameCultureInfoValue::IsMaintainedByMSTRDI(bool value)
34+
{
35+
m_isMaintainedByMSTRDI = value;
36+
}
37+
38+
bool NameCultureInfoValue::IsMaintainedByCrowdin() const
39+
{
40+
return m_isMaintainedByCrowdin;
41+
}
42+
43+
void NameCultureInfoValue::IsMaintainedByCrowdin(bool value)
44+
{
45+
m_isMaintainedByCrowdin = value;
46+
}
47+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#pragma once
2+
3+
#include "Models/NameCultureInfoValue.g.h"
4+
5+
namespace winrt::OpenNet::Models::implementation
6+
{
7+
struct NameCultureInfoValue : NameCultureInfoValueT<NameCultureInfoValue>
8+
{
9+
NameCultureInfoValue();
10+
11+
winrt::hstring Value();
12+
void Value(winrt::hstring const& value);
13+
bool IsMaintainedByMSTRDI() const;
14+
void IsMaintainedByMSTRDI(bool value);
15+
bool IsMaintainedByCrowdin() const;
16+
void IsMaintainedByCrowdin(bool value);
17+
18+
private:
19+
winrt::hstring m_value;
20+
bool m_isMaintainedByMSTRDI{ false };
21+
bool m_isMaintainedByCrowdin{ false };
22+
};
23+
}
24+
25+
namespace winrt::OpenNet::Models::factory_implementation
26+
{
27+
struct NameCultureInfoValue : NameCultureInfoValueT<NameCultureInfoValue, implementation::NameCultureInfoValue>
28+
{
29+
};
30+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace OpenNet.Models
2+
{
3+
[default_interface]
4+
runtimeclass NameCultureInfoValue : Microsoft.UI.Xaml.Controls.Control
5+
{
6+
NameCultureInfoValue();
7+
8+
String Value;
9+
Boolean IsMaintainedByMSTRDI;
10+
Boolean IsMaintainedByCrowdin;
11+
}
12+
}

OpenNet/OpenNet.vcxproj

Lines changed: 191 additions & 56 deletions
Large diffs are not rendered by default.

OpenNet/OpenNet.vcxproj.filters

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,13 @@
123123
<Page Include="UI\Xaml\View\Windows\ExceptionWindow.xaml" />
124124
<Page Include="UI\Xaml\View\InfoBarView.xaml" />
125125
<Page Include="UI\Shell\NotifyIconXamlHostWindow.xaml" />
126+
<Page Include="UI\Xaml\View\Windows\InfoOverlayWindow.xaml" />
127+
<Page Include="UI\Xaml\View\Windows\GuideWindow.xaml" />
128+
<Page Include="UI\Xaml\View\GuideView.xaml" />
129+
<Page Include="UI\Xaml\Control\Card\HorizontalCard_ResourceDictionary.xaml" />
130+
<Page Include="UI\Xaml\Control\Effect\TextMorphEffect_ResourceDictionary.xaml" />
131+
<Page Include="UI\Xaml\Control\Theme\FontStyle.xaml" />
132+
<Page Include="UI\Xaml\Control\Theme\TransitionCollection.xaml" />
126133
</ItemGroup>
127134
<ItemGroup>
128135
<Midl Include="MainWindow.idl" />
@@ -224,6 +231,7 @@
224231
<Midl Include="ViewModels\RSSViewModel.idl">
225232
<Filter>ViewModels</Filter>
226233
</Midl>
234+
<Midl Include="UI\Xaml\Control\Effect\TextMorphEffect.idl" />
227235
</ItemGroup>
228236
<ItemGroup>
229237
<ClCompile Include="pch.cpp" />
@@ -436,6 +444,14 @@
436444
<ClCompile Include="Web\WebView2\WebView2Version.cpp" />
437445
<ClCompile Include="Core\ExceptionService\ExceptionHandling.ixx" />
438446
<ClCompile Include="Core\ExceptionService\CapturedException.ixx" />
447+
<ClCompile Include="UI\Xaml\Control\Card\HorizontalCard.cpp" />
448+
<ClCompile Include="UI\Xaml\Behavior\InvokeCommandOnLoadedBehavior.cpp" />
449+
<ClCompile Include="ViewModels\Guide\GuideViewModel.cpp" />
450+
<ClCompile Include="UI\Xaml\Control\Effect\TextMorphEffect.cpp" />
451+
<ClCompile Include="UI\Xaml\Markup\UInt32Extension.cpp" />
452+
<ClCompile Include="Models\NameCultureInfoValue.cpp" />
453+
<ClCompile Include="UI\Xaml\Behavior\Action\ShowTeachingTipAction.cpp" />
454+
<ClCompile Include="Service\CultureOptions.cpp" />
439455
</ItemGroup>
440456
<ItemGroup>
441457
<ClInclude Include="pch.h" />
@@ -736,6 +752,7 @@
736752
<ClInclude Include="Core\AppRuntime.h" />
737753
<ClInclude Include="Web\WebView2\WebView2Version.h" />
738754
<ClInclude Include="Helpers\ControlLengthHelper.h" />
755+
<ClInclude Include="UI\Xaml\Control\Effect\TextMorphEffect.h" />
739756
</ItemGroup>
740757
<ItemGroup>
741758
<Image Include="Assets\AppIcons\SmallTile.scale-100.png">
@@ -1130,6 +1147,12 @@
11301147
<PRIResource Include="Strings\en-US\Resources.resw">
11311148
<Filter>Strings</Filter>
11321149
</PRIResource>
1150+
<PRIResource Include="Strings\zh-Hant\Resources.resw" />
1151+
<PRIResource Include="Strings\ja\Resources.resw" />
1152+
<PRIResource Include="Strings\fr\Resources.resw" />
1153+
<PRIResource Include="Strings\it\Resources.resw" />
1154+
<PRIResource Include="Strings\ko\Resources.resw" />
1155+
<PRIResource Include="Strings\ru\Resources.resw" />
11331156
</ItemGroup>
11341157
<ItemGroup>
11351158
<ResourceCompile Include="Resource.rc" />

OpenNet/Service/CultureOptions.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include "pch.h"
2+
#include "CultureOptions.h"
3+
#if __has_include("Service\CultureOptions.g.cpp")
4+
#include "Service\CultureOptions.g.cpp"
5+
#endif
6+
7+
using namespace winrt;
8+
using namespace winrt::Microsoft::UI::Xaml;
9+
10+
namespace winrt::OpenNet::Service::implementation
11+
{
12+
13+
}

OpenNet/Service/CultureOptions.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include "Service\CultureOptions.g.h"
4+
5+
namespace winrt::OpenNet::Service::implementation
6+
{
7+
struct CultureOptions : CultureOptionsT<CultureOptions>
8+
{
9+
CultureOptions() = default;
10+
11+
};
12+
}
13+
14+
namespace winrt::OpenNet::Service::factory_implementation
15+
{
16+
struct CultureOptions : CultureOptionsT<CultureOptions, implementation::CultureOptions>
17+
{
18+
};
19+
}

OpenNet/Service/CultureOptions.idl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace OpenNet.Service
2+
{
3+
[default_interface]
4+
runtimeclass CultureOptions : Microsoft.UI.Xaml.Controls.Control
5+
{
6+
CultureOptions();
7+
8+
String CultureInfo;
9+
10+
}
11+
}

OpenNet/Strings/fr/Resources.resw

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<root>
3+
<!--
4+
Microsoft ResX Schema
5+
6+
Version 2.0
7+
8+
The primary goals of this format is to allow a simple XML format
9+
that is mostly human readable. The generation and parsing of the
10+
various data types are done through the TypeConverter classes
11+
associated with the data types.
12+
13+
Example:
14+
15+
... ado.net/XML headers & schema ...
16+
<resheader name="resmimetype">text/microsoft-resx</resheader>
17+
<resheader name="version">2.0</resheader>
18+
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19+
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20+
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21+
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22+
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23+
<value>[base64 mime encoded serialized .NET Framework object]</value>
24+
</data>
25+
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26+
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27+
<comment>This is a comment</comment>
28+
</data>
29+
30+
There are any number of "resheader" rows that contain simple
31+
name/value pairs.
32+
33+
Each data row contains a name, and value. The row also contains a
34+
type or mimetype. Type corresponds to a .NET class that support
35+
text/value conversion through the TypeConverter architecture.
36+
Classes that don't support this are serialized and stored with the
37+
mimetype set.
38+
39+
The mimetype is used for serialized objects, and tells the
40+
ResXResourceReader how to depersist the object. This is currently not
41+
extensible. For a given mimetype the value must be set accordingly:
42+
43+
Note - application/x-microsoft.net.object.binary.base64 is the format
44+
that the ResXResourceWriter will generate, however the reader can
45+
read any of the formats listed below.
46+
47+
mimetype: application/x-microsoft.net.object.binary.base64
48+
value : The object must be serialized with
49+
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
50+
: and then encoded with base64 encoding.
51+
52+
mimetype: application/x-microsoft.net.object.soap.base64
53+
value : The object must be serialized with
54+
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55+
: and then encoded with base64 encoding.
56+
57+
mimetype: application/x-microsoft.net.object.bytearray.base64
58+
value : The object must be serialized into a byte array
59+
: using a System.ComponentModel.TypeConverter
60+
: and then encoded with base64 encoding.
61+
-->
62+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
63+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
64+
<xsd:element name="root" msdata:IsDataSet="true">
65+
<xsd:complexType>
66+
<xsd:choice maxOccurs="unbounded">
67+
<xsd:element name="metadata">
68+
<xsd:complexType>
69+
<xsd:sequence>
70+
<xsd:element name="value" type="xsd:string" minOccurs="0" />
71+
</xsd:sequence>
72+
<xsd:attribute name="name" use="required" type="xsd:string" />
73+
<xsd:attribute name="type" type="xsd:string" />
74+
<xsd:attribute name="mimetype" type="xsd:string" />
75+
<xsd:attribute ref="xml:space" />
76+
</xsd:complexType>
77+
</xsd:element>
78+
<xsd:element name="assembly">
79+
<xsd:complexType>
80+
<xsd:attribute name="alias" type="xsd:string" />
81+
<xsd:attribute name="name" type="xsd:string" />
82+
</xsd:complexType>
83+
</xsd:element>
84+
<xsd:element name="data">
85+
<xsd:complexType>
86+
<xsd:sequence>
87+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
88+
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
89+
</xsd:sequence>
90+
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
91+
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
92+
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
93+
<xsd:attribute ref="xml:space" />
94+
</xsd:complexType>
95+
</xsd:element>
96+
<xsd:element name="resheader">
97+
<xsd:complexType>
98+
<xsd:sequence>
99+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
100+
</xsd:sequence>
101+
<xsd:attribute name="name" type="xsd:string" use="required" />
102+
</xsd:complexType>
103+
</xsd:element>
104+
</xsd:choice>
105+
</xsd:complexType>
106+
</xsd:element>
107+
</xsd:schema>
108+
<resheader name="resmimetype">
109+
<value>text/microsoft-resx</value>
110+
</resheader>
111+
<resheader name="version">
112+
<value>2.0</value>
113+
</resheader>
114+
<resheader name="reader">
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116+
</resheader>
117+
<resheader name="writer">
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119+
</resheader>
120+
<data name="GuideWindowTitle" xml:space="preserve">
121+
<value>Bienvenue</value>
122+
</data>
123+
</root>

0 commit comments

Comments
 (0)