Commit a92137ec by liulongfei

control object 开发

parent b4551ab3
<?xml version="1.0"?>
<?xml version="1.0"?>
<field name="MD1" type="list" description="MD1">
<mincount>0</mincount>
<maxcount>3</maxcount>
<schema>
<field name="GROUP" type="text" charlimit="-1" description="GROUP" />
<field name="PLAYER1" type="text" charlimit="-1" description="PLAYER1" />
<field name="PLAYER2" type="text" charlimit="-1" description="PLAYER2" />
<field name="PLAYERPHOTOLEFT" type="image" description="PLAYERPHOTO" />
<field name="PLAYERPHOTORIGHT" type="image" description="PLAYERPHOTO" />
</schema>
</field>
\ No newline at end of file
<?xml version="1.0"?>
<?xml version="1.0"?>
<entry>
<element description="">
<entry name="data">
<entry name="D2">-23</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">1</entry>
<entry name="TEAMNAME">长江商学院高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">-2</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">2</entry>
<entry name="TEAMNAME">北京大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+10</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">3</entry>
<entry name="TEAMNAME">清华EMBA球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+13</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">4</entry>
<entry name="TEAMNAME">华南理工大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+16</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">5</entry>
<entry name="TEAMNAME">中欧国际工商总队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+16</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER" />
<entry name="TEAMNAME">复旦大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+29</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">7</entry>
<entry name="TEAMNAME">西南财经大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+38</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">8</entry>
<entry name="TEAMNAME">哈尔滨工业大学EMBA高尔夫</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+41</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">9</entry>
<entry name="TEAMNAME">上海交通大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+46</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">10</entry>
<entry name="TEAMNAME">四川大学高尔夫球队</entry>
</entry>
</element>
</entry>
\ No newline at end of file
<?xml version="1.0"?>
<?xml version="1.0"?>
<entry>
<element description="">
<entry name="data">
<entry name="D2">-23</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">1</entry>
<entry name="TEAMNAME">长江商学院高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">-2</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">2</entry>
<entry name="TEAMNAME">北京大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+10</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">3</entry>
<entry name="TEAMNAME">清华EMBA球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+13</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">4</entry>
<entry name="TEAMNAME">华南理工大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+16</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">5</entry>
<entry name="TEAMNAME">中欧国际工商总队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+16</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER" />
<entry name="TEAMNAME">复旦大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+29</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">7</entry>
<entry name="TEAMNAME">西南财经大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+38</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">8</entry>
<entry name="TEAMNAME">哈尔滨工业大学EMBA高尔夫</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+41</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">9</entry>
<entry name="TEAMNAME">上海交通大学高尔夫球队</entry>
</entry>
</element>
<element description="">
<entry name="data">
<entry name="D2">+46</entry>
<entry name="FLAGE">IMAGE*/MyTestProject/Images/1</entry>
<entry name="KG.active">true</entry>
<entry name="NUMBER">10</entry>
<entry name="TEAMNAME">四川大学高尔夫球队</entry>
</entry>
</element>
</entry>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using DevExpress.Xpf.Editors.Settings;
using DevExpress.Xpf.Grid;
namespace VIZ.TVP.Domain
{
/// <summary>
/// DEV控件列定义对象
/// </summary>
public class GridColumnDefinition
{
/// <summary>
/// DEV控件列定义对象
/// </summary>
public GridColumnDefinition()
{
Width = double.NaN;
}
/// <summary>
/// 绑定字段
/// </summary>
public string FieldName { get; set; }
/// <summary>
/// 行数据模板
/// </summary>
public DataTemplate CellTemplate { get; set; }
/// <summary>
/// 宽度
/// </summary>
public GridColumnWidth Width { get; set; }
/// <summary>
/// 固定宽度
/// </summary>
public bool FixedWidth { get; set; }
/// <summary>
/// 编辑器设置
/// </summary>
public BaseEditSettings EditSettings { get; set; }
/// <summary>
/// 头部
/// </summary>
public object Header { get; set; }
/// <summary>
/// 是否只读
/// </summary>
public bool ReadOnly { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.TVP.Domain
{
/// <summary>
/// 控制对象字段值改变消息
/// </summary>
public class VizControlObjectFieldValueChangedMessage
{
/// <summary>
/// 字段模型
/// </summary>
public VizControlObjectFieldModel FieldModel { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.TVP.Domain
{
/// <summary>
/// 节目单项初始化完成消息
/// </summary>
public class ProgramListItemInitedMessage
{
/// <summary>
/// 节目单项模型
/// </summary>
public ProgramListItemModel ProgramListItemModel { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
......@@ -71,14 +72,24 @@ namespace VIZ.TVP.Domain
#region Value --
private string _value;
public string _value;
/// <summary>
/// 值
/// </summary>
public string Value
{
get { return _value; }
set { _value = value; this.RaisePropertyChanged(nameof(Value)); }
set
{
_value = value;
this.RaisePropertyChanged(nameof(Value));
// 发送值改变消息
VizControlObjectFieldValueChangedMessage msg = new VizControlObjectFieldValueChangedMessage();
msg.FieldModel = this;
ApplicationDomainEx.MessageManager.Send(msg);
}
}
#endregion
......@@ -110,5 +121,93 @@ namespace VIZ.TVP.Domain
}
#endregion
#region FieldSchema -- 字段定义
private ControlObject_Field_node fieldSchema;
/// <summary>
/// 字段定义
/// </summary>
public ControlObject_Field_node FieldSchema
{
get { return fieldSchema; }
set { fieldSchema = value; this.RaisePropertyChanged(nameof(FieldSchema)); }
}
#endregion
// ===========================================================
// 扩展属性
// ===========================================================
#region ProgramListItemModel -- 所在节目单项模型
private ProgramListItemModel programListItemModel;
/// <summary>
/// 所在节目单项模型
/// </summary>
public ProgramListItemModel ProgramListItemModel
{
get { return programListItemModel; }
set { programListItemModel = value; this.RaisePropertyChanged(nameof(ProgramListItemModel)); }
}
#endregion
#region VizControlObjectModel -- 所属控制对象
private VizControlObjectModel vizControlObjectModel;
/// <summary>
/// 所属控制对象
/// </summary>
public VizControlObjectModel VizControlObjectModel
{
get { return vizControlObjectModel; }
set { vizControlObjectModel = value; this.RaisePropertyChanged(nameof(VizControlObjectModel)); }
}
#endregion
#region IsXmlValueLoaded -- Xml类型数据是否已经加载
private bool isXmlValueLoaded;
/// <summary>
/// Xml类型数据是否已经加载
/// </summary>
public bool IsXmlValueLoaded
{
get { return isXmlValueLoaded; }
set { isXmlValueLoaded = value; this.RaisePropertyChanged(nameof(IsXmlValueLoaded)); }
}
#endregion
#region ListValue -- list类型数据列表
private List<ExpandoObject> listValue;
/// <summary>
/// list类型数据列表
/// </summary>
public List<ExpandoObject> ListValue
{
get { return listValue; }
set { listValue = value; this.RaisePropertyChanged(nameof(ListValue)); }
}
#endregion
#region ListValueColumns -- List类型数据列信息
private List<GridColumnDefinition> listValueColumns;
/// <summary>
/// List类型数据列信息
/// </summary>
public List<GridColumnDefinition> ListValueColumns
{
get { return listValueColumns; }
set { listValueColumns = value; this.RaisePropertyChanged(nameof(ListValueColumns)); }
}
#endregion
}
}
......@@ -74,6 +74,20 @@ namespace VIZ.TVP.Domain
// 扩展属性
// ======================================================================
#region ProgramListItemModel -- 所在节目单项模型
private ProgramListItemModel programListItemModel;
/// <summary>
/// 所在节目单项模型
/// </summary>
public ProgramListItemModel ProgramListItemModel
{
get { return programListItemModel; }
set { programListItemModel = value; this.RaisePropertyChanged(nameof(ProgramListItemModel)); }
}
#endregion
#region VizTreeNodeInfo -- 场景树节点信息
private VizTreeNodeInfo treeNodeInfo;
......
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using System.Reflection;
......@@ -202,16 +203,16 @@ namespace VIZ.TVP.Domain
#endregion
#region OrderIndex -- 排序索引
#region ControlObjectList -- 控制对象列表
private int orderIndex;
private ObservableCollection<VizControlObjectModel> controlObjectList = new ObservableCollection<VizControlObjectModel>();
/// <summary>
/// 排序索引
/// 控制对象列表
/// </summary>
public int OrderIndex
public ObservableCollection<VizControlObjectModel> ControlObjectList
{
get { return orderIndex; }
set { orderIndex = value; this.RaisePropertyChanged(nameof(OrderIndex)); }
get { return controlObjectList; }
set { controlObjectList = value; this.RaisePropertyChanged(nameof(ControlObjectList)); }
}
#endregion
......@@ -233,6 +234,20 @@ namespace VIZ.TVP.Domain
#endregion
#region IsLoadedControlObjectList -- 是否已经加载过控制对象列表
private bool isLoadedControlObjectList;
/// <summary>
/// 是否已经加载过控制对象列表
/// </summary>
public bool IsLoadedControlObjectList
{
get { return isLoadedControlObjectList; }
set { isLoadedControlObjectList = value; this.RaisePropertyChanged(nameof(IsLoadedControlObjectList)); }
}
#endregion
/// <summary>
/// 从模板中获取数据
/// </summary>
......@@ -265,7 +280,6 @@ namespace VIZ.TVP.Domain
this.Layer = this.Entity.Layer;
this.EngineType = this.Entity.EngineType;
this.PluginID = this.Entity.PluginID;
this.OrderIndex = this.Entity.OrderIndex;
}
/// <summary>
......@@ -283,7 +297,6 @@ namespace VIZ.TVP.Domain
this.Entity.Layer = this.Layer;
this.Entity.EngineType = this.EngineType;
this.Entity.PluginID = this.PluginID;
this.Entity.OrderIndex = this.OrderIndex;
}
}
}
......@@ -117,6 +117,15 @@ namespace VIZ.TVP.Domain
this.ListID = this.Entity.ListID;
this.Name = this.Entity.Name;
this.OrderIndex = this.Entity.OrderIndex;
foreach (var item in this.Entity.Items)
{
ProgramListItemModel model = new ProgramListItemModel(item);
model.PropertyFromEntity();
model.ProgramListModel = this;
this.Items.Add(model);
}
}
/// <summary>
......@@ -127,6 +136,14 @@ namespace VIZ.TVP.Domain
this.Entity.ListID = this.ListID;
this.Entity.Name = this.Name;
this.Entity.OrderIndex = this.OrderIndex;
this.Entity.Items.Clear();
foreach (var model in this.Items)
{
model.PropertyToEntity();
this.Entity.Items.Add(model.Entity);
}
}
}
}
......@@ -49,6 +49,8 @@
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Xpf.Core.v22.1, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Xpf.Grid.v22.1.Core, Version=22.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="log4net, Version=2.0.14.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.14\lib\net45\log4net.dll</HintPath>
</Reference>
......@@ -74,6 +76,9 @@
<Compile Include="ApplicationDomainEx.cs" />
<Compile Include="Enum\PluginIDs.cs" />
<Compile Include="Enum\ServiceKeys.cs" />
<Compile Include="Info\GridColumnDefinition.cs" />
<Compile Include="Message\ControlObject\VizControlObjectFieldValueChangedMessage.cs" />
<Compile Include="Message\Program\ProgramListItemInitedMessage.cs" />
<Compile Include="Model\ControlObject\VizControlObjectFieldModel.cs" />
<Compile Include="Info\ControlObject\VizTreeNodeInfo.cs" />
<Compile Include="Manager\DataBaseManager.cs" />
......
using DevExpress.Xpf.Grid;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows;
using VIZ.TVP.Storage;
using VIZ.TVP.Domain;
namespace VIZ.TVP.Module
{
/// <summary>
/// 控制列表值数据模板选择器
/// </summary>
public class ControlListDynamicValueDataTemplateSelecter : DataTemplateSelector
{
/// <summary>
/// 文本模板
/// </summary>
public DataTemplate TextDataTemplate { get; set; }
/// <summary>
/// Bool类型的模板
/// </summary>
public DataTemplate BooleanDataTemplate { get; set; }
/// <summary>
/// 筛选模板
/// </summary>
/// <param name="item">项</param>
/// <param name="container">容器</param>
/// <returns>数据模板</returns>
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
GridCellData data = (GridCellData)item;
VizControlObjectFieldModel model = data.RowData.Row as VizControlObjectFieldModel;
if (model == null)
return null;
switch (model.Type)
{
case VizControlObjectFieldType.none: return null;
case VizControlObjectFieldType.text: return this.TextDataTemplate;
case VizControlObjectFieldType.boolean: return this.BooleanDataTemplate;
case VizControlObjectFieldType.richtext: return this.TextDataTemplate;
case VizControlObjectFieldType.image: return this.TextDataTemplate;
case VizControlObjectFieldType.list: return this.TextDataTemplate;
default: return null;
}
}
}
}
using DevExpress.Xpf.Grid;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows;
using VIZ.TVP.Storage;
using VIZ.TVP.Domain;
namespace VIZ.TVP.Module
{
/// <summary>
/// 控制列表值数据模板选择器
/// </summary>
public class ControlListValueDataTemplateSelecter : DataTemplateSelector
{
/// <summary>
/// 文本模板
/// </summary>
public DataTemplate TextDataTemplate { get; set; }
/// <summary>
/// Bool类型的模板
/// </summary>
public DataTemplate BooleanDataTemplate { get; set; }
/// <summary>
/// 筛选模板
/// </summary>
/// <param name="item">项</param>
/// <param name="container">容器</param>
/// <returns>数据模板</returns>
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
GridCellData data = (GridCellData)item;
VizControlObjectFieldModel model = data.RowData.Row as VizControlObjectFieldModel;
if (model == null)
return null;
switch (model.Type)
{
case VizControlObjectFieldType.none: return null;
case VizControlObjectFieldType.text: return this.TextDataTemplate;
case VizControlObjectFieldType.boolean: return this.BooleanDataTemplate;
case VizControlObjectFieldType.richtext: return this.TextDataTemplate;
case VizControlObjectFieldType.image: return this.TextDataTemplate;
case VizControlObjectFieldType.list: return this.TextDataTemplate;
default: return null;
}
}
}
}
......@@ -7,13 +7,95 @@
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:fcore="clr-namespace:VIZ.Framework.Core;assembly=VIZ.Framework.Core"
xmlns:local="clr-namespace:VIZ.TVP.Module"
d:DataContext="{d:DesignInstance Type=local:ControlListViewModel}"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<local:ControlListValueDataTemplateSelecter x:Key="ControlListValueDataTemplateSelecter">
<!-- 文本编辑 -->
<local:ControlListValueDataTemplateSelecter.TextDataTemplate>
<DataTemplate>
<dxe:TextEdit Name="PART_Editor" />
</DataTemplate>
</local:ControlListValueDataTemplateSelecter.TextDataTemplate>
<!-- Boolean编辑 -->
<local:ControlListValueDataTemplateSelecter.BooleanDataTemplate>
<DataTemplate>
<dxe:CheckEdit Name="PART_Editor" HorizontalAlignment="Left" />
</DataTemplate>
</local:ControlListValueDataTemplateSelecter.BooleanDataTemplate>
<Grid>
<TextBlock Text="Control列表" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="36" Foreground="Red"></TextBlock>
<Button Command="{Binding Path=LoadedCommand}"></Button>
</local:ControlListValueDataTemplateSelecter>
<DataTemplate x:Key="ColumnTemplate_TextEdit">
<dxe:TextEdit Name="PART_Editor" />
</DataTemplate>
<DataTemplate x:Key="ColumnTemplate_CheckEdit">
<dxe:CheckEdit Name="PART_Editor" HorizontalAlignment="Left" />
</DataTemplate>
<DataTemplate x:Key="ColumnTemplate">
<ContentControl>
<dxg:GridColumn FieldName="{Binding FieldName}" Width="{Binding Width}" FixedWidth="{Binding FixedWidth}" Header="{Binding Header}" ReadOnly="{Binding ReadOnly}"
CellTemplate="{Binding CellTemplate}" />
</ContentControl>
</DataTemplate>
<fcore:Bool2BoolConverter x:Key="Bool2BoolConverter"></fcore:Bool2BoolConverter>
</ResourceDictionary>
</UserControl.Resources>
<Grid IsEnabled="{Binding Path=IsLoading,Converter={StaticResource Bool2BoolConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="200" Width="*"></ColumnDefinition>
<ColumnDefinition MinWidth="200" Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<!-- 控制对象字段 -->
<dxg:GridControl ItemsSource="{Binding Path=SelectedControlObject.Fields}" ShowBorder="False" Grid.Column="0"
SelectedItem="{Binding Path=SelectedControlObjectField,Mode=TwoWay}" Margin="0,0,6,0">
<dxg:GridControl.Columns>
<dxg:GridColumn Header="字段" FieldName="FieldIdentifier" ReadOnly="True" AllowSorting="False" AllowColumnFiltering="False" Width="150" AllowResizing="True"></dxg:GridColumn>
<dxg:GridColumn Header="类型" FieldName="Type" ReadOnly="True" AllowSorting="False" AllowColumnFiltering="False" Width="100" AllowResizing="True"></dxg:GridColumn>
<dxg:GridColumn Header="值" FieldName="Value" AllowSorting="False" AllowColumnFiltering="False" Width="*" AllowResizing="True" CellEditTemplateSelector="{StaticResource ControlListValueDataTemplateSelecter}"></dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AllowEditing="True" ShowIndicator="True"
NavigationStyle="Cell"
ShowGroupPanel="False"
AllowDragDrop="True"
ShowBandsPanel="False"
ShowTotalSummary="False"
ShowFixedTotalSummary="False"
ShowDragDropHint="False"
ShowTargetInfoInDragDropHint="false">
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
<GridSplitter VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="6" Grid.Column="0"></GridSplitter>
<!-- 控制对象编辑器 -->
<dxg:GridControl ItemsSource="{Binding Path=ListValue}" ShowBorder="False" Grid.Column="1"
ColumnsSource="{Binding Path=ListValueColumns}" ColumnGeneratorTemplate="{StaticResource ColumnTemplate}">
<dxg:GridControl.Columns>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AllowEditing="True" ShowIndicator="True"
NavigationStyle="Cell"
ShowGroupPanel="False"
AllowDragDrop="True"
ShowBandsPanel="False"
ShowTotalSummary="False"
ShowFixedTotalSummary="False"
ShowDragDropHint="False"
ShowTargetInfoInDragDropHint="false">
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
<!-- Loading -->
<dx:WaitIndicator DeferedVisibility="{Binding IsLoading}" Content="Loading..." Grid.ColumnSpan="2" />
</Grid>
</UserControl>
......@@ -188,6 +188,8 @@
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Control\ControlList\Core\ControlListDynamicValueDataTemplateSelecter.cs" />
<Compile Include="Control\ControlList\Core\ControlListValueDataTemplateSelecter.cs" />
<Compile Include="Program\View\ProgramItemCreateWindow.xaml.cs">
<DependentUpon>ProgramItemCreateWindow.xaml</DependentUpon>
</Compile>
......
......@@ -490,6 +490,15 @@ namespace VIZ.TVP.Module
TVPConnectionModel conn = ApplicationDomainEx.TVPConnectionManager.LocalConnection;
this.vizCommandService.SetObject(conn, msg.ProgramListItemModel.Path, VizLayerEnum.MAIN_LAYER);
// 发送节目单项初始化完成消息
WPFHelper.BeginInvoke(() =>
{
ProgramListItemInitedMessage message = new ProgramListItemInitedMessage();
message.ProgramListItemModel = msg.ProgramListItemModel;
ApplicationDomainEx.MessageManager.Send(message);
});
}
// ================================================================================
......
......@@ -77,26 +77,6 @@ namespace VIZ.TVP.Service
list.Add(model);
}
Dictionary<string, ProgramListModel> dic = list.ToDictionary(p => p.ListID, p => p);
foreach (var entity in ApplicationDomainEx.CurrentProjectDomain.ProjectContext.ProgramListItem.FindAll())
{
ProgramListItemModel model = new ProgramListItemModel(entity);
model.PropertyFromEntity();
model.PluginName = ApplicationDomainEx.PluginManager.TemplatePlugins.FirstOrDefault(p => p.ID == model.PluginID)?.DisplayName;
if (!dic.TryGetValue(model.ListID, out ProgramListModel owner))
continue;
model.ProgramListModel = owner;
owner.Items.Add(model);
}
foreach (var model in list)
{
model.Items = model.Items.OrderBy(p => p.OrderIndex).ToObservableCollection();
}
return list.OrderBy(p => p.OrderIndex).ToObservableCollection();
}
......@@ -109,7 +89,6 @@ namespace VIZ.TVP.Service
lock (lock_object)
{
List<ProgramListEntity> listEntitys = new List<ProgramListEntity>();
List<ProgramListItemEntity> listItemEntitys = new List<ProgramListItemEntity>();
for (int i = 0; i < models.Count; i++)
{
......@@ -117,19 +96,9 @@ namespace VIZ.TVP.Service
listModel.OrderIndex = i;
listModel.PropertyToEntity();
listEntitys.Add(listModel.Entity);
for (int j = 0; j < listModel.Items.Count; j++)
{
ProgramListItemModel listItemModel = listModel.Items[j];
listItemModel.OrderIndex = j;
listItemModel.PropertyToEntity();
listItemEntitys.Add(listItemModel.Entity);
}
}
ApplicationDomainEx.CurrentProjectDomain.ProjectContext.ProgramListItem.DeleteAll();
ApplicationDomainEx.CurrentProjectDomain.ProjectContext.ProgramList.DeleteAll();
ApplicationDomainEx.CurrentProjectDomain.ProjectContext.ProgramListItem.Insert(listItemEntitys);
ApplicationDomainEx.CurrentProjectDomain.ProjectContext.ProgramList.Insert(listEntitys);
}
}
......
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using VIZ.TVP.Domain;
using VIZ.TVP.Storage;
......@@ -15,6 +17,84 @@ namespace VIZ.TVP.Service
public class VizCommandControlObjectService : IVizCommandControlObjectService
{
/// <summary>
/// 获取控制对象XML数据
/// </summary>
/// <param name="xml">xml内容</param>
/// <param name="columns">列信息</param>
/// <param name="items">数据源</param>
/// <returns></returns>
public void GetControlObjectXmlData(string xml, out List<GridColumnDefinition> columns, out List<ExpandoObject> items)
{
columns = new List<GridColumnDefinition>();
items = new List<ExpandoObject>();
bool isCreatedColumns = false;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml)))
{
XElement element = XElement.Load(ms);
ControlObject_Entry_Node root = new ControlObject_Entry_Node();
root.FromXmlElement(element);
foreach (var row in root.Elements)
{
IDictionary<string, object> obj = new ExpandoObject();
ControlObject_Entry_Node data = row.Entrys.FirstOrDefault(p => p.Name == "data");
if (data == null)
continue;
foreach (var cell in data.Entrys)
{
obj[cell.Name] = cell.Value;
if (!isCreatedColumns)
{
GridColumnDefinition column = new GridColumnDefinition();
column.FieldName = cell.Name;
column.Header = cell.Name;
columns.Add(column);
}
}
isCreatedColumns = true;
items.Add(obj as ExpandoObject);
}
}
}
/// <summary>
/// 获取控制对象XML数据
/// </summary>
/// <param name="items">控制对象数据</param>
/// <returns>XML数据</returns>
public string GetControlObjectXml(List<ExpandoObject> items)
{
ControlObject_Entry_Node root = new ControlObject_Entry_Node();
foreach (IDictionary<string, object> row in items)
{
ControlObject_Element_Node element = new ControlObject_Element_Node();
ControlObject_Entry_Node data = new ControlObject_Entry_Node();
data.Name = "data";
foreach (var kv in row)
{
ControlObject_Entry_Node cell = new ControlObject_Entry_Node();
cell.Name = kv.Key;
cell.Value = kv.Value == null ? string.Empty : kv.Value.ToString();
data.Entrys.Add(cell);
}
element.Entrys.Add(data);
root.Elements.Add(element);
}
XElement root_element = root.ToXmlElement();
return $"<?xml version=\"1.0\"?>{root_element.ToString(SaveOptions.DisableFormatting)}";
}
/// <summary>
/// 获取场景树节点信息
/// </summary>
/// <param name="connection">连接</param>
......@@ -52,9 +132,10 @@ namespace VIZ.TVP.Service
/// 获取控制对象列表
/// </summary>
/// <param name="connection">连接</param>
/// <param name="programListItemModel">节目单项模型</param>
/// <param name="layer">场景图层</param>
/// <returns>控制对象列表</returns>
public List<VizControlObjectModel> GetControlObjectList(TVPConnectionModel connection, VizSceneLayerEnum layer)
public List<VizControlObjectModel> GetControlObjectList(TVPConnectionModel connection, ProgramListItemModel programListItemModel, VizSceneLayerEnum layer)
{
List<VizControlObjectModel> list = new List<VizControlObjectModel>();
......@@ -64,10 +145,14 @@ namespace VIZ.TVP.Service
// Step 2. 获取控制对象ID集合
List<string> ids = this.GetControlObjectIds(connection, layer);
// Step 3. 获取控制对象信息
foreach (string id in ids)
// Step 3. 获取控制对象信息, 只获取第一个控制对象
foreach (string id in new string[] { ids.FirstOrDefault() })
{
if (string.IsNullOrWhiteSpace(id))
continue;
VizControlObjectModel obj = new VizControlObjectModel(new VizControlObjectEntity());
obj.ProgramListItemModel = programListItemModel;
VizTreeNodeInfo info = treeNodeList.FirstOrDefault(p => id == $"#{p.NodeNum}");
if (info == null)
continue;
......@@ -87,11 +172,23 @@ namespace VIZ.TVP.Service
string[] pars = line.Split(':');
VizControlObjectFieldModel field = new VizControlObjectFieldModel(new VizControlObjectFieldEntity());
field.ProgramListItemModel = programListItemModel;
field.VizControlObjectModel = obj;
field.FieldIdentifier = pars[0];
field.TreeNodePath = obj.TreeNodePath;
field.PropertyPath = pars[1];
field.Type = this.getControlObjectFieldType(pars[2]);
field.Value = this.GetControlObjectFieldValue(connection, layer, info.NodeNum, field.FieldIdentifier);
field.Type = this.GetControlObjectFieldType(pars[2]);
if (field.Type == VizControlObjectFieldType.list)
{
field.FieldSchema = new ControlObject_Field_node();
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(pars[2])))
{
XElement root = XElement.Load(ms);
field.FieldSchema.FromXmlElement(root);
}
}
// 不触发值改变消息
field._value = this.GetControlObjectFieldValue(connection, layer, info.NodeNum, field.FieldIdentifier);
obj.Fields.Add(field);
}
......@@ -163,7 +260,7 @@ namespace VIZ.TVP.Service
public string GetControlObjectFieldValue(TVPConnectionModel connection, VizSceneLayerEnum layer, string nodeNum, string fieldIdentifier)
{
connection.EndpointManager.Send($"{layer}*TREE*#{nodeNum}*FUNCTION*ControlObject*in SET ON {fieldIdentifier} GET");
string result = connection.EndpointManager.Request($"{layer}*TREE*#{nodeNum}**FUNCTION*ControlObject*result GET");
string result = connection.EndpointManager.Request($"{layer}*TREE*#{nodeNum}*FUNCTION*ControlObject*result GET");
return result;
}
......@@ -173,11 +270,12 @@ namespace VIZ.TVP.Service
/// </summary>
/// <param name="connection">连接</param>
/// <param name="layer">场景图层</param>
/// <param name="treeNodePath">场景节点路径</param>
/// <param name="fieldIdentifier">字段</param>
/// <param name="value">值</param>
public void SetControlObjectValue(TVPConnectionModel connection, VizSceneLayerEnum layer, string fieldIdentifier, string value)
public void SetControlObjectValue(TVPConnectionModel connection, VizSceneLayerEnum layer, string treeNodePath, string fieldIdentifier, string value)
{
connection.EndpointManager.Send($"{layer}*TREE*$object*FUNCTION*ControlObject*in SET ON {fieldIdentifier} SET {value}");
connection.EndpointManager.Send($"{layer}*TREE*{treeNodePath}*FUNCTION*ControlObject*in SET ON {fieldIdentifier} SET {value}");
}
/// <summary>
......@@ -199,11 +297,14 @@ namespace VIZ.TVP.Service
/// </summary>
/// <param name="type">字段类型</param>
/// <returns>控制对象字段类型</returns>
private VizControlObjectFieldType getControlObjectFieldType(string type)
public VizControlObjectFieldType GetControlObjectFieldType(string type)
{
if (type == "text")
return VizControlObjectFieldType.text;
if (type == "bool")
return VizControlObjectFieldType.boolean;
if (type == "image")
return VizControlObjectFieldType.image;
......@@ -211,7 +312,7 @@ namespace VIZ.TVP.Service
return VizControlObjectFieldType.richtext;
if (type.StartsWith("<?xml"))
return VizControlObjectFieldType.xml;
return VizControlObjectFieldType.list;
return VizControlObjectFieldType.none;
}
......
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
......@@ -14,6 +15,22 @@ namespace VIZ.TVP.Service
public interface IVizCommandControlObjectService
{
/// <summary>
/// 获取控制对象XML数据
/// </summary>
/// <param name="xml">xml内容</param>
/// <param name="columns">列信息</param>
/// <param name="items">数据源</param>
/// <returns></returns>
void GetControlObjectXmlData(string xml, out List<GridColumnDefinition> columns, out List<ExpandoObject> items);
/// <summary>
/// 获取控制对象XML数据
/// </summary>
/// <param name="items">控制对象数据</param>
/// <returns>XML数据</returns>
string GetControlObjectXml(List<ExpandoObject> items);
/// <summary>
/// 获取场景树节点信息
/// </summary>
/// <param name="connection">连接</param>
......@@ -25,8 +42,26 @@ namespace VIZ.TVP.Service
/// 获取控制对象列表
/// </summary>
/// <param name="connection">连接</param>
/// <param name="programListItemModel">节目单项模型</param>
/// <param name="layer">场景图层</param>
/// <returns>控制对象列表</returns>
List<VizControlObjectModel> GetControlObjectList(TVPConnectionModel connection, VizSceneLayerEnum layer);
List<VizControlObjectModel> GetControlObjectList(TVPConnectionModel connection, ProgramListItemModel programListItemModel, VizSceneLayerEnum layer);
/// <summary>
/// 设置控制对象值
/// </summary>
/// <param name="connection">连接</param>
/// <param name="layer">场景图层</param>
/// <param name="treeNodePath">场景节点路径</param>
/// <param name="fieldIdentifier">字段</param>
/// <param name="value">值</param>
void SetControlObjectValue(TVPConnectionModel connection, VizSceneLayerEnum layer, string treeNodePath, string fieldIdentifier, string value);
/// <summary>
/// 获取控制对象字段类型
/// </summary>
/// <param name="type">字段类型</param>
/// <returns>控制对象字段类型</returns>
VizControlObjectFieldType GetControlObjectFieldType(string type);
}
}
\ No newline at end of file
......@@ -22,6 +22,11 @@ namespace VIZ.TVP.Storage
text,
/// <summary>
/// Bool值
/// </summary>
boolean,
/// <summary>
/// 富文本
/// </summary>
richtext,
......@@ -32,8 +37,8 @@ namespace VIZ.TVP.Storage
image,
/// <summary>
/// XML
/// 列表
/// </summary>
xml
list
}
}
......@@ -17,6 +17,8 @@ namespace VIZ.TVP.Storage
[LiteDB.BsonId(true)]
public int Id { get; set; }
/// <summary>
/// 所在场景节点路径
/// </summary>
......
......@@ -31,5 +31,10 @@ namespace VIZ.TVP.Storage
/// 排序索引
/// </summary>
public int OrderIndex { get; set; }
/// <summary>
/// 子项集合
/// </summary>
public List<ProgramListItemEntity> Items { get; set; } = new List<ProgramListItemEntity>();
}
}
......@@ -12,12 +12,6 @@ namespace VIZ.TVP.Storage
public class ProgramListItemEntity
{
/// <summary>
/// 编号
/// </summary>
[LiteDB.BsonId(true)]
public int Id { get; set; }
/// <summary>
/// 模板ID
/// </summary>
public string TemplateID { get; set; }
......@@ -68,8 +62,8 @@ namespace VIZ.TVP.Storage
public string PluginID { get; set; }
/// <summary>
/// 排序索引
/// 控制对象字段集合
/// </summary>
public int OrderIndex { get; set; }
public List<VizControlObjectFieldEntity> ControlObjectFields { get; set; }
}
}
......@@ -35,7 +35,6 @@ namespace VIZ.TVP.Storage
this.ProgramTemplate = this.Database.GetCollection<ProgramTemplateEntity>();
this.ProgramList = this.Database.GetCollection<ProgramListEntity>();
this.ProgramListItem = this.Database.GetCollection<ProgramListItemEntity>();
}
/// <summary>
......@@ -54,11 +53,6 @@ namespace VIZ.TVP.Storage
public ILiteCollection<ProgramListEntity> ProgramList { get; private set; }
/// <summary>
/// 节目单项
/// </summary>
public ILiteCollection<ProgramListItemEntity> ProgramListItem { get; private set; }
/// <summary>
/// 销毁
/// </summary>
public void Dispose()
......
......@@ -110,20 +110,24 @@
<Compile Include="LiteDB\Project\Program\ProgramListEntity.cs" />
<Compile Include="LiteDB\Project\Program\ProgramTemplateEntity.cs" />
<Compile Include="LiteDB\Project\ProjectContext.cs" />
<Compile Include="LiteDB\VIZ\Enum\VizControlObjectFieldType.cs" />
<Compile Include="LiteDB\VIZ\VizControlObjectEntity.cs" />
<Compile Include="LiteDB\VIZ\Enum\VizControlObjectParameters.cs" />
<Compile Include="LiteDB\VIZ\Enum\VizLayerEnum.cs" />
<Compile Include="LiteDB\VIZ\Enum\VizSceneLayerEnum.cs" />
<Compile Include="LiteDB\VIZ\VizControlObjectFieldEntity.cs" />
<Compile Include="LiteDB\ControlObject\Enum\VizControlObjectFieldType.cs" />
<Compile Include="LiteDB\ControlObject\VizControlObjectEntity.cs" />
<Compile Include="LiteDB\ControlObject\Enum\VizControlObjectParameters.cs" />
<Compile Include="LiteDB\ControlObject\Enum\VizLayerEnum.cs" />
<Compile Include="LiteDB\ControlObject\Enum\VizSceneLayerEnum.cs" />
<Compile Include="LiteDB\ControlObject\VizControlObjectFieldEntity.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="XML\ControlObject\Node\ControlObject_Element_Node.cs" />
<Compile Include="XML\ControlObject\Node\ControlObject_Entry_Node.cs" />
<Compile Include="XML\ControlObject\Node\ControlObject_Field_node.cs" />
<Compile Include="XML\ControlObject\Node\ControlObject_Schema_Node.cs" />
<Compile Include="XML\GH\Enum\GH_Category_Term_Enums.cs" />
<Compile Include="XML\GH\Enum\GH_Content_Type_Enums.cs" />
<Compile Include="XML\GH\Enum\GH_Link_Rel_Enums.cs" />
<Compile Include="XML\GH\Enum\GH_Link_Type_Enums.cs" />
<Compile Include="XML\GH\Enum\GH_Xmlns_Enums.cs" />
<Compile Include="XML\GH\GH_NodeHelper.cs" />
<Compile Include="XML\GH\GH_Thumbnail_Node.cs" />
<Compile Include="XML\GH\Node\GH_Thumbnail_Node.cs" />
<Compile Include="XML\GH\Node\GH_Author_Node.cs" />
<Compile Include="XML\GH\Node\GH_Category_Node.cs" />
<Compile Include="XML\GH\Node\GH_Content_Node.cs" />
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using VIZ.Framework.Core;
namespace VIZ.TVP.Storage
{
/// <summary>
/// 控制对象元素节点
/// </summary>
public class ControlObject_Element_Node : IXmlSerialize
{
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 实体集合
/// </summary>
public List<ControlObject_Entry_Node> Entrys { get; set; } = new List<ControlObject_Entry_Node>();
/// <summary>
/// 从XElement节点获取数据
/// </summary>
/// <param name="element">XElement节点</param>
public void FromXmlElement(XElement element)
{
this.Description = element.GetAttributeValue<string>("description");
foreach (var item in element.Elements("entry"))
{
ControlObject_Entry_Node entry = new ControlObject_Entry_Node();
entry.FromXmlElement(item);
this.Entrys.Add(entry);
}
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
XElement element = new XElement("element");
element.SetAttributeValue("description", this.Description);
foreach (var item in this.Entrys)
{
element.Add(item.ToXmlElement());
}
return element;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using VIZ.Framework.Core;
namespace VIZ.TVP.Storage
{
/// <summary>
/// 控制对象实体节点
/// </summary>
public class ControlObject_Entry_Node : IXmlSerialize
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 值
/// </summary>
public string Value { get; set; }
/// <summary>
/// 子项集合
/// </summary>
public List<ControlObject_Entry_Node> Entrys { get; set; } = new List<ControlObject_Entry_Node>();
/// <summary>
/// 子项元素集合
/// </summary>
public List<ControlObject_Element_Node> Elements { get; set; } = new List<ControlObject_Element_Node>();
/// <summary>
/// 从XElement节点获取数据
/// </summary>
/// <param name="element">XElement节点</param>
public void FromXmlElement(XElement element)
{
this.Name = element.GetAttributeValue<string>("name");
if (!element.HasElements)
{
this.Value = element.Value;
}
foreach (var item in element.Elements("entry"))
{
ControlObject_Entry_Node entry = new ControlObject_Entry_Node();
entry.FromXmlElement(item);
this.Entrys.Add(entry);
}
foreach (var item in element.Elements("element"))
{
ControlObject_Element_Node el = new ControlObject_Element_Node();
el.FromXmlElement(item);
this.Elements.Add(el);
}
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
XElement entry = new XElement("entry");
if (!string.IsNullOrWhiteSpace(this.Name))
{
entry.SetAttributeValue("name", this.Name);
}
if (this.Value != null)
{
entry.Value = this.Value;
}
foreach (var item in this.Entrys)
{
entry.Add(item.ToXmlElement());
}
foreach (var item in this.Elements)
{
entry.Add(item.ToXmlElement());
}
return entry;
}
}
}
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using VIZ.Framework.Core;
namespace VIZ.TVP.Storage
{
/// <summary>
/// 控制对象列节点
/// </summary>
public class ControlObject_Field_node : IXmlSerialize
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 定义
/// </summary>
public ControlObject_Schema_Node Schema { get; set; }
/// <summary>
/// 从XElement节点获取数据
/// </summary>
/// <param name="element">XElement节点</param>
public void FromXmlElement(XElement element)
{
this.Name = element.GetAttributeValue<string>("name");
this.Type = element.GetAttributeValue<string>("type");
this.Description = element.GetAttributeValue<string>("description");
var schema = element.Element("schema");
if (schema == null)
return;
this.Schema = new ControlObject_Schema_Node();
this.Schema.FromXmlElement(schema);
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotImplementedException();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace VIZ.TVP.Storage
{
/// <summary>
/// 控制对象定义节点
/// </summary>
public class ControlObject_Schema_Node : IXmlSerialize
{
/// <summary>
/// 字段集合
/// </summary>
public List<ControlObject_Field_node> Fields { get; set; } = new List<ControlObject_Field_node>();
/// <summary>
/// 从XElement节点获取数据
/// </summary>
/// <param name="element">XElement节点</param>
public void FromXmlElement(XElement element)
{
foreach (var item in element.Elements("field"))
{
ControlObject_Field_node field = new ControlObject_Field_node();
field.FromXmlElement(item);
this.Fields.Add(field);
}
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotImplementedException();
}
}
}
......@@ -29,5 +29,13 @@ namespace VIZ.TVP.Storage
this.name = element.Element(XName.Get("name", GH_Xmlns_Enums.xmlns))?.Value;
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotSupportedException();
}
}
}
......@@ -36,5 +36,13 @@ namespace VIZ.TVP.Storage
this.scheme = element.GetAttributeValue<string>("scheme");
this.term = element.GetAttributeValue<string>("term");
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotSupportedException();
}
}
}
......@@ -36,5 +36,13 @@ namespace VIZ.TVP.Storage
this.src = element.GetAttributeValue<string>("src");
this.type = element.GetAttributeValue<string>("type");
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotSupportedException();
}
}
}
......@@ -83,5 +83,13 @@ namespace VIZ.TVP.Storage
// 缩略图
this.thumbnail.FromXmlElement(element.Element(XName.Get("thumbnail", GH_Xmlns_Enums.media)));
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotSupportedException();
}
}
}
......@@ -72,5 +72,13 @@ namespace VIZ.TVP.Storage
this.entries.Add(entry_Node);
}
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotSupportedException();
}
}
}
......@@ -44,5 +44,13 @@ namespace VIZ.TVP.Storage
this.type = element.GetAttributeValue<string>("type");
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotSupportedException();
}
}
}
......@@ -41,5 +41,13 @@ namespace VIZ.TVP.Storage
this.width = element.GetAttributeValue<string>("width");
this.height = element.GetAttributeValue<string>("height");
}
/// <summary>
/// 转化为XElement节点
/// </summary>
public XElement ToXmlElement()
{
throw new NotSupportedException();
}
}
}
......@@ -17,5 +17,10 @@ namespace VIZ.TVP.Storage
/// </summary>
/// <param name="element">XElement节点</param>
void FromXmlElement(XElement element);
/// <summary>
/// 转化为XElement节点
/// </summary>
XElement ToXmlElement();
}
}
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Xml.Linq;
using VIZ.TVP.Service;
using VIZ.TVP.Storage;
namespace VIZ.TVP.UnitTest
{
/// <summary>
/// GH 服务测试
/// </summary>
[TestClass]
public class ControlObjectTest
{
[TestMethod]
public void FromXmlTest()
{
IVizCommandControlObjectService service = new VizCommandControlObjectService();
string path = @"E:\Projects\VIZ.TVP\Doc\ControlObject_xml数据格式.xml";
using (System.IO.StreamReader sr = new System.IO.StreamReader(path))
{
string xml = sr.ReadToEnd();
service.GetControlObjectXmlData(xml, out var columns, out var items);
string output = service.GetControlObjectXml(items);
}
}
[TestMethod]
public void ToXmlTest()
{
string path = @"E:\Projects\VIZ.TVP\Doc\ControlObject_xml数据格式.xml";
using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
XElement element = XElement.Load(fs);
ControlObject_Entry_Node root = new ControlObject_Entry_Node();
root.FromXmlElement(element);
XElement output = root.ToXmlElement();
}
}
[TestMethod]
public void XmlDefineTest()
{
string path = @"E:\Projects\VIZ.TVP\Doc\ControlObject_xml列定义.xml";
using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
XElement element = XElement.Load(fs);
ControlObject_Field_node root = new ControlObject_Field_node();
root.FromXmlElement(element);
}
}
}
}
......@@ -73,8 +73,11 @@
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="ControlObjectTest.cs" />
<Compile Include="GHTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
......
......@@ -5,6 +5,9 @@ VisualStudioVersion = 17.3.32825.248
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Doc", "00-Doc", "{751737B7-0297-4966-9978-CF1442765BD0}"
ProjectSection(SolutionItems) = preProject
Doc\ControlObject_xml列定义.xml = Doc\ControlObject_xml列定义.xml
Doc\ControlObject_xml数据格式.xml = Doc\ControlObject_xml数据格式.xml
Doc\ControlObject_xml数据格式_对照.xml = Doc\ControlObject_xml数据格式_对照.xml
Doc\GH资源接口返回结果_文件.xml = Doc\GH资源接口返回结果_文件.xml
Doc\GH资源接口返回结果_文件夹或项目.xml = Doc\GH资源接口返回结果_文件夹或项目.xml
Doc\plugin_config.csv = Doc\plugin_config.csv
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment