Commit bff93f07 by liulongfei

控制对象本地保存,控制对象上本地版子

parent a92137ec
......@@ -20,5 +20,11 @@ namespace VIZ.TVP.Domain
/// VIZ层枚举
/// </summary>
public readonly static List<string> VIZ_LAYERS = new List<string> { "FRONT_LAYER", "MAIN_LAYER", "BACK_LAYER" };
/// <summary>
/// VIZ控制对象真假选择
/// </summary>
public readonly static List<string> VIZ_CONTROL_OBJECT_BOOLEAN = new List<string> { "true", "false" };
}
}
......@@ -30,7 +30,7 @@ namespace VIZ.TVP.Domain
/// <summary>
/// 行数据模板
/// </summary>
public DataTemplate CellTemplate { get; set; }
public DataTemplate CellEditTemplate { get; set; }
/// <summary>
/// 宽度
......@@ -38,16 +38,6 @@ namespace VIZ.TVP.Domain
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; }
......
......@@ -209,5 +209,29 @@ namespace VIZ.TVP.Domain
}
#endregion
// ===========================================================
// Public Function
// ===========================================================
/// <summary>
/// 由实体填充属性
/// </summary>
public void PropertyFromEntity()
{
this._value = this.Entity.Value;
}
/// <summary>
/// 将属性填充至实体
/// </summary>
public void PropertryToEntity()
{
this.Entity.ItemID = this.ProgramListItemModel.ItemID;
this.Entity.TreeNodePath = this.TreeNodePath;
this.Entity.FieldIdentifier = this.FieldIdentifier;
this.Entity.Value = this.Value;
this.Entity.Type = this.Type;
}
}
}
......@@ -14,20 +14,6 @@ namespace VIZ.TVP.Domain
/// </summary>
public class VizControlObjectModel : ModelBase
{
/// <summary>
/// Viz控制对象模型
/// </summary>
/// <param name="entity">实体</param>
public VizControlObjectModel(VizControlObjectEntity entity)
{
this.Entity = entity;
}
/// <summary>
/// 实体
/// </summary>
public VizControlObjectEntity Entity { get; private set; }
#region TreeNodeName -- 所在场景节点名称
private string treeNodeName;
......
......@@ -30,10 +30,19 @@ namespace VIZ.TVP.Domain
/// </summary>
public ProgramListItemEntity Entity { get; private set; }
#region ItemID -- 节目单项ID
private string itemID = Guid.NewGuid().ToString();
/// <summary>
/// 对象ID
/// 节目单项ID
/// </summary>
public string ObjectID { get; private set; } = Guid.NewGuid().ToString();
public string ItemID
{
get { return itemID; }
set { itemID = value; this.RaisePropertyChanged(nameof(ItemID)); }
}
#endregion
#region TemplateID -- 模板ID
......@@ -270,6 +279,7 @@ namespace VIZ.TVP.Domain
/// </summary>
public void PropertyFromEntity()
{
this.ItemID = this.Entity.ItemID;
this.TemplateID = this.Entity.TemplateID;
this.ListID = this.Entity.ListID;
this.TemplateType = this.Entity.TemplateType;
......@@ -280,6 +290,8 @@ namespace VIZ.TVP.Domain
this.Layer = this.Entity.Layer;
this.EngineType = this.Entity.EngineType;
this.PluginID = this.Entity.PluginID;
// 控制对象值每次先从VIZ引擎中获取
}
/// <summary>
......@@ -287,6 +299,7 @@ namespace VIZ.TVP.Domain
/// </summary>
public void PropertyToEntity()
{
this.Entity.ItemID = this.ItemID;
this.Entity.TemplateID = this.TemplateID;
this.Entity.ListID = this.ListID;
this.Entity.TemplateType = this.TemplateType;
......@@ -297,6 +310,18 @@ namespace VIZ.TVP.Domain
this.Entity.Layer = this.Layer;
this.Entity.EngineType = this.EngineType;
this.Entity.PluginID = this.PluginID;
// 控制对象值
VizControlObjectModel main = this.ControlObjectList.FirstOrDefault();
if (main == null)
return;
this.Entity.Fields.Clear();
foreach (VizControlObjectFieldModel item in main.Fields)
{
item.PropertryToEntity();
this.Entity.Fields.Add(item.Entity);
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using VIZ.Framework.Core;
using VIZ.TVP.Domain;
using VIZ.TVP.Service;
using VIZ.TVP.Storage;
namespace VIZ.TVP.Module
{
/// <summary>
/// 控制对象控制器
/// </summary>
public class ControlObjectController
{
/// <summary>
/// 控制对象控制器
/// </summary>
/// <param name="support">支持</param>
public ControlObjectController(IControlObjectSupport support)
{
this.Support = support;
}
public IControlObjectSupport Support { get; private set; }
/// <summary>
/// ControlObject命令服务
/// </summary>
private IVizCommandControlObjectService vizCommandControlObjectService = new VizCommandControlObjectService();
/// <summary>
/// 从本地信息中更新控制对象字段
/// </summary>
/// <param name="programListItemModel">节目单项</param>
/// <param name="fields">控制对象字段</param>
public void UpdateControlObjectFieldFromLocal(ProgramListItemModel programListItemModel, IList<VizControlObjectFieldModel> fields)
{
if (programListItemModel == null || fields == null)
return;
foreach (VizControlObjectFieldEntity entity in programListItemModel.Entity.Fields)
{
VizControlObjectFieldModel field = fields.FirstOrDefault(p => p.TreeNodePath == entity.TreeNodePath && p.FieldIdentifier == entity.FieldIdentifier);
if (field == null)
continue;
field._value = entity.Value;
}
}
/// <summary>
/// 从VIZ中获取控制对象
/// </summary>
/// <param name="programListItemModel">节目单项模型</param>
/// <param name="isUseLocalField">是否使用本地字段数据</param>
public void GetControlObjectFromViz(ProgramListItemModel programListItemModel, bool isUseLocalField)
{
this.Support.IsLoading = true;
// 清理属性改变事件
this.CancelListValuePropertyChanged();
// 否则加载控制对象列表
ThreadHelper.SafeRun(() =>
{
// 从VIZ中获取控制对象列表
var result = this.vizCommandControlObjectService.GetControlObjectList(ApplicationDomainEx.TVPConnectionManager.LocalConnection, programListItemModel, VizSceneLayerEnum.MAIN_SCENE);
// 从本地数据更新控制对象字段
if (isUseLocalField)
{
this.UpdateControlObjectFieldFromLocal(programListItemModel, result.FirstOrDefault()?.Fields);
}
WPFHelper.BeginInvoke(() =>
{
programListItemModel.ControlObjectList.Clear();
foreach (var item in result)
{
programListItemModel.ControlObjectList.Add(item);
}
if (ApplicationDomainEx.SelectionManager.ProgramListItemModel == programListItemModel)
{
this.Support.SelectedControlObject = programListItemModel.ControlObjectList.FirstOrDefault();
}
programListItemModel.IsLoadedControlObjectList = true;
this.Support.IsLoading = false;
// 推送属性值至
this.vizCommandControlObjectService.SetControlObjectValue(ApplicationDomainEx.TVPConnectionManager.LocalConnection, VizSceneLayerEnum.MAIN_SCENE, this.Support.SelectedControlObject);
});
});
}
/// <summary>
/// 更新选中的控制对象字段
/// </summary>
/// <param name="view">视图</param>
public void UpdateSelectedControlObjectField(FrameworkElement view)
{
VizControlObjectFieldModel field = this.Support.SelectedControlObjectField;
if (field == null || field.Type != Storage.VizControlObjectFieldType.list)
{
this.Support.ListValueColumns = null;
// 注销属性改变事件
this.CancelListValuePropertyChanged();
this.Support.ListValue = null;
return;
}
if (!field.IsXmlValueLoaded)
{
this.CancelListValuePropertyChanged();
List<GridColumnDefinition> columns;
List<ExpandoObject> items;
vizCommandControlObjectService.GetControlObjectXmlData(field.Value, out columns, out items);
field.ListValueColumns = columns;
field.ListValue = items;
}
foreach (var node in field.FieldSchema.Schema.Fields)
{
GridColumnDefinition column = field.ListValueColumns.FirstOrDefault(p => p.FieldName == node.Name);
if (column == null)
continue;
VizControlObjectFieldType columnType = this.vizCommandControlObjectService.GetControlObjectFieldType(node.Type);
switch (columnType)
{
case VizControlObjectFieldType.none:
break;
case VizControlObjectFieldType.text:
column.CellEditTemplate = view.FindResource("ColumnTemplate_Text") as DataTemplate;
break;
case VizControlObjectFieldType.boolean:
column.CellEditTemplate = view.FindResource("ColumnTemplate_Boolean") as DataTemplate;
column.Width = new DevExpress.Xpf.Grid.GridColumnWidth(80);
break;
case VizControlObjectFieldType.richtext:
column.CellEditTemplate = view.FindResource("ColumnTemplate_Text") as DataTemplate;
break;
case VizControlObjectFieldType.image:
column.CellEditTemplate = view.FindResource("ColumnTemplate_Text") as DataTemplate;
break;
case VizControlObjectFieldType.list:
break;
}
}
// 绑定属性
foreach (INotifyPropertyChanged item in field.ListValue)
{
item.PropertyChanged -= this.Item_PropertyChanged;
item.PropertyChanged += this.Item_PropertyChanged;
}
this.Support.ListValueColumns = field.ListValueColumns;
this.Support.ListValue = field.ListValue;
}
/// <summary>
/// 取消ListValue属性改变事件
/// </summary>
public void CancelListValuePropertyChanged()
{
// 注销属性改变事件
if (this.Support.ListValue != null)
{
foreach (INotifyPropertyChanged item in this.Support.ListValue)
{
item.PropertyChanged -= this.Item_PropertyChanged;
}
}
}
/// <summary>
/// 动态数据项属性改变时触发
/// </summary>
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (this.Support.SelectedControlObjectField.Type != VizControlObjectFieldType.list)
return;
this.Support.SelectedControlObjectField.Value = this.vizCommandControlObjectService.GetControlObjectXml(this.Support.ListValue);
}
}
}
using DevExpress.Mvvm.POCO;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using VIZ.TVP.Domain;
using VIZ.TVP.Service;
using VIZ.TVP.Storage;
namespace VIZ.TVP.Module
{
/// <summary>
/// 控制对象支持
/// </summary>
public interface IControlObjectSupport
{
/// <summary>
/// 是否正在加载
/// </summary>
bool IsLoading { get; set; }
/// <summary>
/// 控制对象列表
/// </summary>
ObservableCollection<VizControlObjectModel> ControlObjectList { get; set; }
/// <summary>
/// 当前选中的控制对象
/// </summary>
VizControlObjectModel SelectedControlObject { get; set; }
/// <summary>
/// 当前选中的控制对象字段
/// </summary>
VizControlObjectFieldModel SelectedControlObjectField { get; set; }
/// <summary>
/// List类型数据列表
/// </summary>
List<ExpandoObject> ListValue { get; set; }
/// <summary>
/// List类型数据列信息
/// </summary>
List<GridColumnDefinition> ListValueColumns { get; set; }
}
}
......@@ -8,40 +8,34 @@
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:domain="clr-namespace:VIZ.TVP.Domain;assembly=VIZ.TVP.Domain"
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>
</local:ControlListValueDataTemplateSelecter>
<DataTemplate x:Key="ColumnTemplate_TextEdit">
<!-- 文本编辑 -->
<DataTemplate x:Key="ColumnTemplate_Text">
<dxe:TextEdit Name="PART_Editor" />
</DataTemplate>
<DataTemplate x:Key="ColumnTemplate_CheckEdit">
<dxe:CheckEdit Name="PART_Editor" HorizontalAlignment="Left" />
<!-- Boolean编辑 -->
<DataTemplate x:Key="ColumnTemplate_Boolean">
<dxe:ComboBoxEdit Name="PART_Editor" IsTextEditable="False"
ItemsSource="{Binding Source={x:Static domain:ApplicationConstants.VIZ_CONTROL_OBJECT_BOOLEAN}}"></dxe:ComboBoxEdit>
</DataTemplate>
<local:ControlListValueDataTemplateSelecter x:Key="ControlListValueDataTemplateSelecter"
TextDataTemplate="{StaticResource ColumnTemplate_Text}"
BooleanDataTemplate="{StaticResource ColumnTemplate_Boolean}">
</local:ControlListValueDataTemplateSelecter>
<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}" />
<dxg:GridColumn FieldName="{Binding FieldName}" Width="{Binding Width}" Header="{Binding Header}" ReadOnly="{Binding ReadOnly}"
CellEditTemplate="{Binding CellEditTemplate}" AllowSorting="False" AllowColumnFiltering="False" />
</ContentControl>
</DataTemplate>
......@@ -79,9 +73,11 @@
<!-- 控制对象编辑器 -->
<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.ContextMenu>
<ContextMenu>
<MenuItem Header="刷新" Command="{Binding Path=PlacementTarget.DataContext.RefreshControlObjectFieldListCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
</ContextMenu>
</dxg:GridControl.ContextMenu>
<dxg:GridControl.View>
<dxg:TableView AllowEditing="True" ShowIndicator="True"
NavigationStyle="Cell"
......
using System;
using DevExpress.Mvvm.POCO;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
......@@ -18,10 +19,13 @@ namespace VIZ.TVP.Module
/// <summary>
/// Control List视图模型
/// </summary>
public class ControlListViewModel : PluginViewModelBase
public class ControlListViewModel : PluginViewModelBase, IControlObjectSupport
{
public ControlListViewModel()
{
// 初始化控制器
this.initController();
// 初始化命令
this.initCommand();
......@@ -35,6 +39,16 @@ namespace VIZ.TVP.Module
private void initCommand()
{
this.LoadedCommand = new VCommand(this.Loaded);
this.RefreshControlObjectFieldListCommand = new VCommand(this.RefreshControlObjectFieldList);
this.RefreshControlObjectFromVizCommand = new VCommand(this.RefreshControlObjectFromViz);
}
/// <summary>
/// 初始化控制器
/// </summary>
private void initController()
{
this.controlObjectController = new ControlObjectController(this);
}
/// <summary>
......@@ -56,6 +70,11 @@ namespace VIZ.TVP.Module
/// </summary>
private IVizCommandControlObjectService vizCommandControlObjectService = new VizCommandControlObjectService();
/// <summary>
/// 控制对象控制器
/// </summary>
private ControlObjectController controlObjectController;
// ==================================================================================
// Property
// ==================================================================================
......@@ -115,93 +134,8 @@ namespace VIZ.TVP.Module
{
selectedControlObjectField = value;
this.RaisePropertyChanged(nameof(SelectedControlObjectField));
this.UpdateSlectedControlObjectField();
}
}
/// <summary>
/// 更新当前选中的控制对象字段
/// </summary>
private void UpdateSlectedControlObjectField()
{
VizControlObjectFieldModel field = this.SelectedControlObjectField;
if (field == null || field.Type != Storage.VizControlObjectFieldType.list)
{
this.ListValueColumns = null;
// 注销属性改变事件
if (this.ListValue != null)
{
foreach (INotifyPropertyChanged item in this.ListValue)
{
item.PropertyChanged -= Item_PropertyChanged;
}
}
this.ListValue = null;
return;
this.controlObjectController.UpdateSelectedControlObjectField(this.GetView<ControlListView>());
}
if (!field.IsXmlValueLoaded)
{
List<GridColumnDefinition> columns;
List<ExpandoObject> items;
vizCommandControlObjectService.GetControlObjectXmlData(field.Value, out columns, out items);
field.ListValueColumns = columns;
field.ListValue = items;
}
// 设置模板
ControlListView view = this.GetView<ControlListView>();
foreach (var node in field.FieldSchema.Schema.Fields)
{
GridColumnDefinition column = field.ListValueColumns.FirstOrDefault(p => p.FieldName == node.Name);
if (column == null)
continue;
VizControlObjectFieldType columnType = this.vizCommandControlObjectService.GetControlObjectFieldType(node.Type);
switch (columnType)
{
case VizControlObjectFieldType.none:
break;
case VizControlObjectFieldType.text:
column.CellTemplate = view.FindResource("ColumnTemplate_TextEdit") as DataTemplate;
break;
case VizControlObjectFieldType.boolean:
column.CellTemplate = view.FindResource("ColumnTemplate_CheckEdit") as DataTemplate;
column.Width = new DevExpress.Xpf.Grid.GridColumnWidth(80);
break;
case VizControlObjectFieldType.richtext:
column.CellTemplate = view.FindResource("ColumnTemplate_TextEdit") as DataTemplate;
break;
case VizControlObjectFieldType.image:
column.CellTemplate = view.FindResource("ColumnTemplate_TextEdit") as DataTemplate;
break;
case VizControlObjectFieldType.list:
break;
}
}
// 绑定属性
foreach (INotifyPropertyChanged item in field.ListValue)
{
item.PropertyChanged -= Item_PropertyChanged;
item.PropertyChanged += Item_PropertyChanged;
}
this.ListValueColumns = field.ListValueColumns;
this.ListValue = field.ListValue;
}
/// <summary>
/// 动态数据项属性改变时触发
/// </summary>
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (this.SelectedControlObjectField.Type != VizControlObjectFieldType.list)
return;
this.SelectedControlObjectField.Value = this.vizCommandControlObjectService.GetControlObjectXml(this.ListValue);
}
#endregion
......@@ -255,6 +189,48 @@ namespace VIZ.TVP.Module
#endregion
#region RefreshControlObjectFieldListCommand -- 刷新控制对象字段列表命令
/// <summary>
/// 刷新控制对象字段列表命令
/// </summary>
public VCommand RefreshControlObjectFieldListCommand { get; set; }
/// <summary>
/// 刷新控制对象字段列表
/// </summary>
private void RefreshControlObjectFieldList()
{
if (this.SelectedControlObjectField == null || this.SelectedControlObjectField.Type != VizControlObjectFieldType.list)
return;
this.SelectedControlObjectField.IsXmlValueLoaded = false;
this.controlObjectController.UpdateSelectedControlObjectField(this.GetView<ControlListView>());
}
#endregion
#region RefreshControlObjectFromVizCommand -- VIZ中获取控制对象命令
/// <summary>
/// 从VIZ中获取控制对象命令
/// </summary>
public VCommand RefreshControlObjectFromVizCommand { get; set; }
/// <summary>
/// 从VIZ中获取控制对象
/// </summary>
private void RefreshControlObjectFromViz()
{
if (ApplicationDomainEx.SelectionManager.ProgramListItemModel == null)
return;
// 从Viz中获取控制对象
this.controlObjectController.GetControlObjectFromViz(ApplicationDomainEx.SelectionManager.ProgramListItemModel, false);
}
#endregion
// ==================================================================================
// Message
// ==================================================================================
......@@ -286,28 +262,8 @@ namespace VIZ.TVP.Module
if (msg.ProgramListItemModel.IsLoadedControlObjectList)
return;
this.IsLoading = true;
// 否则加载控制对象列表
ThreadHelper.SafeRun(() =>
{
// 获取
var result = this.vizCommandControlObjectService.GetControlObjectList(ApplicationDomainEx.TVPConnectionManager.LocalConnection, msg.ProgramListItemModel, Storage.VizSceneLayerEnum.MAIN_SCENE);
WPFHelper.BeginInvoke(() =>
{
msg.ProgramListItemModel.ControlObjectList.Clear();
foreach (var item in result)
{
msg.ProgramListItemModel.ControlObjectList.Add(item);
}
msg.ProgramListItemModel.IsLoadedControlObjectList = true;
this.IsLoading = false;
});
});
// 从Viz中获取控制对象
this.controlObjectController.GetControlObjectFromViz(msg.ProgramListItemModel, true);
}
/// <summary>
......
......@@ -94,7 +94,7 @@ namespace VIZ.TVP.Module
}
// 该节目单项对应的插件已经被实例化过
NavigationConfig config = this.ItemsSource.FirstOrDefault(p => p.Key == msg.ProgramListItemModel.ObjectID);
NavigationConfig config = this.ItemsSource.FirstOrDefault(p => p.Key == msg.ProgramListItemModel.ItemID);
if (config != null)
{
this.SelectedItem = config;
......@@ -110,7 +110,7 @@ namespace VIZ.TVP.Module
}
config = new NavigationConfig();
config.Key = msg.ProgramListItemModel.ObjectID;
config.Key = msg.ProgramListItemModel.ItemID;
config.ViewType = pluginInfo.ViewInfo.ViewType;
config.ViewModelType = pluginInfo.ViewInfo.ViewModelType;
......@@ -137,7 +137,7 @@ namespace VIZ.TVP.Module
continue;
// 未找到相关插件视图
NavigationConfig config = this.ItemsSource.FirstOrDefault(p => p.Key == item.ObjectID);
NavigationConfig config = this.ItemsSource.FirstOrDefault(p => p.Key == item.ItemID);
// 尝试移除导航配置
this.tryRemoveItem(config);
......@@ -161,7 +161,7 @@ namespace VIZ.TVP.Module
return;
// 未找到相关插件视图
NavigationConfig config = this.ItemsSource.FirstOrDefault(p => p.Key == msg.DeletedProgramListItemModel.ObjectID);
NavigationConfig config = this.ItemsSource.FirstOrDefault(p => p.Key == msg.DeletedProgramListItemModel.ItemID);
// 尝试移除导航配置
this.tryRemoveItem(config);
......
......@@ -109,7 +109,7 @@
<MenuItem Header="刷新" Command="{Binding Path=PlacementTarget.DataContext.RefreshFileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
<Separator/>
<MenuItem Header="添加至场景模板" Command="{Binding Path=PlacementTarget.DataContext.AddProgramTemplateCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
<MenuItem Header="复制路径" Command="{Binding Path=PlacementTarget.DataContext.CopyFilePathCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
</ContextMenu>
</dxg:GridControl.ContextMenu>
<dxg:GridControl.Columns>
......
......@@ -2,6 +2,7 @@
using DevExpress.Mvvm.UI.Native.ViewGenerator;
using DevExpress.Mvvm.Xpf;
using DevExpress.Xpf.Core.Native;
using DevExpress.XtraPrinting.Native;
using log4net;
using System;
using System.Collections.Generic;
......@@ -9,6 +10,7 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using VIZ.Framework.Core;
using VIZ.Framework.Plugin;
using VIZ.TVP.Domain;
......@@ -50,6 +52,8 @@ namespace VIZ.TVP.Module
this.FileContextMenuOpendCommand = new VCommand(this.FileContextMenuOpend);
this.AddProgramTemplateCommand = new VCommand(this.AddProgramTemplate, this.CanAddProgramTemplate);
this.CopyFilePathCommand = new VCommand(this.CopyFilePath, this.CanCopyFilePath);
}
/// <summary>
......@@ -333,6 +337,7 @@ namespace VIZ.TVP.Module
private void FileContextMenuOpend()
{
this.AddProgramTemplateCommand.RaiseCanExecute();
this.CopyFilePathCommand.RaiseCanExecute();
}
#endregion
......@@ -401,6 +406,35 @@ namespace VIZ.TVP.Module
#endregion
#region CopyFilePathCommand -- 拷贝文件路径命令
/// <summary>
/// 拷贝文件路径命令
/// </summary>
public VCommand CopyFilePathCommand { get; set; }
/// <summary>
/// 是否可以执行拷贝文件路径
/// </summary>
/// <returns>是否可以执行拷贝文件路径</returns>
private bool CanCopyFilePath()
{
return this.SelectedFileModel != null;
}
/// <summary>
/// 拷贝文件路径
/// </summary>
private void CopyFilePath()
{
if (this.SelectedFileModel == null)
return;
Clipboard.SetText($"{this.SelectedFileModel.FileType}*{this.SelectedFileModel.Path}");
}
#endregion
// ==================================================================================
// Public Function
// ==================================================================================
......
......@@ -188,6 +188,8 @@
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Control\ControlList\Controller\ControlObject\ControlObjectController.cs" />
<Compile Include="Control\ControlList\Controller\ControlObject\IControlObjectSupport.cs" />
<Compile Include="Control\ControlList\Core\ControlListDynamicValueDataTemplateSelecter.cs" />
<Compile Include="Control\ControlList\Core\ControlListValueDataTemplateSelecter.cs" />
<Compile Include="Program\View\ProgramItemCreateWindow.xaml.cs">
......@@ -387,7 +389,6 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Common\ViewModel\" />
<Folder Include="Control\ControlList\Controller\" />
<Folder Include="Login\Service\" />
<Folder Include="PluginPanel\Controller\" />
<Folder Include="Program\Controller\" />
......
......@@ -19,7 +19,7 @@ namespace VIZ.TVP.Service
/// <summary>
/// 获取控制对象XML数据
/// </summary>
/// <param name="xml">xml内容</param>
/// <param name="xml">xml内容</param>
/// <param name="columns">列信息</param>
/// <param name="items">数据源</param>
/// <returns></returns>
......@@ -151,7 +151,7 @@ namespace VIZ.TVP.Service
if (string.IsNullOrWhiteSpace(id))
continue;
VizControlObjectModel obj = new VizControlObjectModel(new VizControlObjectEntity());
VizControlObjectModel obj = new VizControlObjectModel();
obj.ProgramListItemModel = programListItemModel;
VizTreeNodeInfo info = treeNodeList.FirstOrDefault(p => id == $"#{p.NodeNum}");
if (info == null)
......@@ -279,6 +279,24 @@ namespace VIZ.TVP.Service
}
/// <summary>
/// 设置控制对象值
/// </summary>
/// <param name="connection">连接</param>
/// <param name="layer">场景图层</param>
/// <param name="obj">控制对象</param>
public void SetControlObjectValue(TVPConnectionModel connection, VizSceneLayerEnum layer, VizControlObjectModel obj)
{
StringBuilder sb = new StringBuilder();
sb.Append($"{layer}*TREE*{obj.TreeNodePath}*FUNCTION*ControlObject*in SET ON ");
foreach (VizControlObjectFieldModel field in obj.Fields)
{
sb.Append($"{field.FieldIdentifier} SET {field.Value}\\0");
}
connection.EndpointManager.Send(sb.ToString());
}
/// <summary>
/// 设置列表控制对象的值
/// </summary>
/// <param name="connection">连接</param>
......
......@@ -58,6 +58,14 @@ namespace VIZ.TVP.Service
void SetControlObjectValue(TVPConnectionModel connection, VizSceneLayerEnum layer, string treeNodePath, string fieldIdentifier, string value);
/// <summary>
/// 设置控制对象值
/// </summary>
/// <param name="connection">连接</param>
/// <param name="layer">场景图层</param>
/// <param name="obj">控制对象</param>
void SetControlObjectValue(TVPConnectionModel connection, VizSceneLayerEnum layer, VizControlObjectModel obj);
/// <summary>
/// 获取控制对象字段类型
/// </summary>
/// <param name="type">字段类型</param>
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.TVP.Storage
{
/// <summary>
/// Viz控制对象实体
/// </summary>
public class VizControlObjectEntity
{
/// <summary>
/// 编号
/// </summary>
[LiteDB.BsonId(true)]
public int Id { get; set; }
/// <summary>
/// 所在场景节点名称
/// </summary>
public string TreeNodeName { get; set; }
/// <summary>
/// 所在场景节点路径
/// </summary>
public string TreeNodePath { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
}
}
......@@ -17,7 +17,10 @@ namespace VIZ.TVP.Storage
[LiteDB.BsonId(true)]
public int Id { get; set; }
/// <summary>
/// 节目单项ID
/// </summary>
public string ItemID { get; set; }
/// <summary>
/// 所在场景节点路径
......@@ -30,21 +33,11 @@ namespace VIZ.TVP.Storage
public string FieldIdentifier { get; set; }
/// <summary>
/// 属性路径
/// </summary>
public string PropertyPath { get; set; }
/// <summary>
/// 字段值
/// </summary>
public string Value { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 字段类型
/// </summary>
public VizControlObjectFieldType Type { get; set; }
......
......@@ -22,6 +22,11 @@ namespace VIZ.TVP.Storage
public string ListID { get; set; }
/// <summary>
/// 节目单项ID
/// </summary>
public string ItemID { get; set; } = Guid.NewGuid().ToString();
/// <summary>
/// 模板类型
/// </summary>
public ProgramTemplateType TemplateType { get; set; }
......@@ -64,6 +69,6 @@ namespace VIZ.TVP.Storage
/// <summary>
/// 控制对象字段集合
/// </summary>
public List<VizControlObjectFieldEntity> ControlObjectFields { get; set; }
public List<VizControlObjectFieldEntity> Fields { get; set; } = new List<VizControlObjectFieldEntity>();
}
}
......@@ -110,12 +110,11 @@
<Compile Include="LiteDB\Project\Program\ProgramListEntity.cs" />
<Compile Include="LiteDB\Project\Program\ProgramTemplateEntity.cs" />
<Compile Include="LiteDB\Project\ProjectContext.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="LiteDB\Project\ControlObject\Enum\VizControlObjectFieldType.cs" />
<Compile Include="LiteDB\Project\ControlObject\Enum\VizControlObjectParameters.cs" />
<Compile Include="LiteDB\Project\ControlObject\Enum\VizLayerEnum.cs" />
<Compile Include="LiteDB\Project\ControlObject\Enum\VizSceneLayerEnum.cs" />
<Compile Include="LiteDB\Project\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" />
......
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