Commit bca3ea01 authored by 潘栩锋's avatar 潘栩锋 🚴

风环添加 看到撤销记录的时间

parent cfc5fe73
...@@ -51,7 +51,7 @@ using System.Windows; ...@@ -51,7 +51,7 @@ using System.Windows;
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: // 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("4.1.0.0")] [assembly: AssemblyVersion("4.2.0.0")]
[assembly: AssemblyFileVersion("4.1.0.0")] [assembly: AssemblyFileVersion("4.2.0.0")]
[assembly: Guid("18607932-ECBC-4292-A3DE-5864B7FB14DB")] [assembly: Guid("18607932-ECBC-4292-A3DE-5864B7FB14DB")]
...@@ -63,11 +63,14 @@ ...@@ -63,11 +63,14 @@
<Style TargetType="Image"> <Style TargetType="Image">
<Setter Property="Height" Value="50"/> <Setter Property="Height" Value="50"/>
</Style> </Style>
<Style TargetType="TextBlock" >
<Style TargetType="TextBlock" x:Key="TitleStyle">
<Setter Property="FontWeight" Value="Bold"/> <Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontFamily" Value="YouYuan"/> <Setter Property="FontFamily" Value="YouYuan"/>
<Setter Property="HorizontalAlignment" Value="Center"/> <Setter Property="HorizontalAlignment" Value="Center"/>
</Style> </Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource TitleStyle}"/>
</ResourceDictionary> </ResourceDictionary>
</Grid.Resources> </Grid.Resources>
...@@ -130,7 +133,18 @@ ...@@ -130,7 +133,18 @@
<TextBlock Text="{Binding UndoIdx}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontFamily="Arial" FontSize="10"/> <TextBlock Text="{Binding UndoIdx}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontFamily="Arial" FontSize="10"/>
</Grid> </Grid>
</Grid> </Grid>
<TextBlock Text="撤销" /> <TextBlock >
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource TitleStyle}">
<Setter Property="Text" Value="撤销"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsInUndo}" Value="True">
<Setter Property="Text" Value="{Binding UndoTime,StringFormat={}{0:HH:mm}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel> </StackPanel>
</Button> </Button>
<Button x:Name="button_clear_h" Click="button_clear_h_click" Template="{StaticResource picture_button}" > <Button x:Name="button_clear_h" Click="button_clear_h_click" Template="{StaticResource picture_button}" >
......
...@@ -79,11 +79,6 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule ...@@ -79,11 +79,6 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule
grid_longpress.DataContext = lpress; grid_longpress.DataContext = lpress;
} }
private void Sysparam_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
throw new NotImplementedException();
}
void InitializeChart() void InitializeChart()
{ {
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
...@@ -713,58 +708,25 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule ...@@ -713,58 +708,25 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule
public class LongPress : INotifyPropertyChanged public class LongPress : INotifyPropertyChanged
{ {
private int progress = 0;
/// <summary> /// <summary>
/// 满9 /// 满9
/// </summary> /// </summary>
public int Progress public int Progress { get; set; }
{
get { return progress; } public bool IsOK => (Progress == Max);
set
{ public bool IsRunning => (Progress > 0);
if (progress != value)
{
progress = value;
NotifyPropertyChanged("Progress");
NotifyPropertyChanged("IsOK");
NotifyPropertyChanged("IsRunning");
}
}
}
private int max = 360;
/// <summary> /// <summary>
/// Progress 最大值 /// Progress 最大值
/// </summary> /// </summary>
public int Max public int Max { get; set; } = 360;
{
get { return max; }
set
{
if (max != value)
{
max = value;
NotifyPropertyChanged("Max");
}
}
}
private int intervalMs = 2000;
/// <summary> /// <summary>
/// 时间间隔 /// 时间间隔
/// </summary> /// </summary>
public int IntervalMs public int IntervalMs { get; set; } = 2000;
{
get { return intervalMs; }
set
{
if (intervalMs != value)
{
intervalMs = value;
NotifyPropertyChanged("IntervalMs");
}
}
}
public RoutedEventHandler LongClick; public RoutedEventHandler LongClick;
...@@ -829,20 +791,8 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule ...@@ -829,20 +791,8 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule
} }
} }
public bool IsOK
{
get
{
return (Progress == Max);
}
}
public bool IsRunning
{
get
{
return (Progress > 0);
}
}
public void Reset() public void Reset()
{ {
Progress = 0; Progress = 0;
...@@ -851,13 +801,6 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule ...@@ -851,13 +801,6 @@ namespace FLY.FeedbackRenZiJia.UI.Client.UIModule
#region INotifyPropertyChanged 成员 #region INotifyPropertyChanged 成员
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyname)
{
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyname));
}
}
#endregion #endregion
} }
......
...@@ -51,7 +51,7 @@ using System.Windows; ...@@ -51,7 +51,7 @@ using System.Windows;
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: // 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("4.1.0.0")] [assembly: AssemblyVersion("4.2.0.0")]
[assembly: AssemblyFileVersion("4.1.0.0")] [assembly: AssemblyFileVersion("4.2.0.0")]
[assembly: Guid("32104657-86E9-4380-9113-606589E6D812")] [assembly: Guid("32104657-86E9-4380-9113-606589E6D812")]
...@@ -123,16 +123,18 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -123,16 +123,18 @@ namespace FLY.FeedbackRenZiJia.Client
#region IFeedbackHeat 函数 #region IFeedbackHeat 函数
public void Apply() public void Apply()
{ {
var p = new FEEDBACK_OBJ_INTERFACE.Pack_Params()
{
step = Step,
delay = Delay,
hasCheck = HasCheck,
HasCheckFilmVelocity = HasCheckFilmVelocity
};
string json = Newtonsoft.Json.JsonConvert.SerializeObject(p);
FObjSys.Current.SetValueEx( FObjSys.Current.SetValueEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.SET_PARAMS, FEEDBACK_OBJ_INTERFACE.SET_PARAMS,
new FEEDBACK_OBJ_INTERFACE.Pack_Params() Misc.Converter.StringToBytes(json));
{
step = Step,
delay = Delay,
hasCheck = HasCheck,
HasCheckFilmVelocity = HasCheckFilmVelocity
}.ToBytes());
} }
/// <summary> /// <summary>
/// 保存当前加热量 /// 保存当前加热量
...@@ -140,11 +142,10 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -140,11 +142,10 @@ namespace FLY.FeedbackRenZiJia.Client
/// <param name="productname"></param> /// <param name="productname"></param>
public void SaveHeats(string productname) public void SaveHeats(string productname)
{ {
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String(); string json = Newtonsoft.Json.JsonConvert.SerializeObject(productname);
p.data = productname;
FObjSys.Current.CallFunctionEx( FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_SAVEHEATS, p.ToBytes()); FEEDBACK_OBJ_INTERFACE.CALL_SAVEHEATS, Misc.Converter.StringToBytes(json));
} }
/// <summary> /// <summary>
/// 获取保存的加热量文件列表 返回类型为 List&lt;string&gt; /// 获取保存的加热量文件列表 返回类型为 List&lt;string&gt;
...@@ -165,11 +166,11 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -165,11 +166,11 @@ namespace FLY.FeedbackRenZiJia.Client
/// <param name="productname"></param> /// <param name="productname"></param>
public void DelHeatsFile(string productname) public void DelHeatsFile(string productname)
{ {
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String(); string json = Newtonsoft.Json.JsonConvert.SerializeObject(productname);
p.data = productname;
FObjSys.Current.CallFunctionEx( FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_DEL, p.ToBytes()); FEEDBACK_OBJ_INTERFACE.CALL_DEL, Misc.Converter.StringToBytes(json));
} }
/// <summary> /// <summary>
...@@ -178,11 +179,10 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -178,11 +179,10 @@ namespace FLY.FeedbackRenZiJia.Client
/// <param name="filename"></param> /// <param name="filename"></param>
public void LoadHeatsFile(string productname) public void LoadHeatsFile(string productname)
{ {
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String(); string json = Newtonsoft.Json.JsonConvert.SerializeObject(productname);
p.data = productname;
FObjSys.Current.CallFunctionEx( FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_LOADHEATS, p.ToBytes()); FEEDBACK_OBJ_INTERFACE.CALL_LOADHEATS, Misc.Converter.StringToBytes(json));
} }
...@@ -190,24 +190,20 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -190,24 +190,20 @@ namespace FLY.FeedbackRenZiJia.Client
public void SetCheckEnable(bool enable) public void SetCheckEnable(bool enable)
{ {
CheckEnable = enable; CheckEnable = enable;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(enable);
FObjSys.Current.SetValueEx( FObjSys.Current.SetValueEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.SET_CHECKENABLE, FEEDBACK_OBJ_INTERFACE.SET_CHECKENABLE,
new FEEDBACK_OBJ_INTERFACE.Pack_Enable() Misc.Converter.StringToBytes(json));
{
enable = enable
}.ToBytes());
} }
public void SetEnable(bool enable) public void SetEnable(bool enable)
{ {
IsAuto = enable; IsAuto = enable;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(enable);
FObjSys.Current.SetValueEx( FObjSys.Current.SetValueEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.SET_ENABLE, FEEDBACK_OBJ_INTERFACE.SET_ENABLE,
new FEEDBACK_OBJ_INTERFACE.Pack_Enable() Misc.Converter.StringToBytes(json));
{
enable = enable
}.ToBytes());
} }
#endregion #endregion
...@@ -243,10 +239,8 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -243,10 +239,8 @@ namespace FLY.FeedbackRenZiJia.Client
{ {
case FEEDBACK_OBJ_INTERFACE.GET_PARAMS: case FEEDBACK_OBJ_INTERFACE.GET_PARAMS:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Params p = new FEEDBACK_OBJ_INTERFACE.Pack_Params(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<FEEDBACK_OBJ_INTERFACE.Pack_Params>(json);
return;
Step = p.step; Step = p.step;
Delay = p.delay; Delay = p.delay;
...@@ -256,9 +250,9 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -256,9 +250,9 @@ namespace FLY.FeedbackRenZiJia.Client
} break; } break;
case FEEDBACK_OBJ_INTERFACE.GET_STATE: case FEEDBACK_OBJ_INTERFACE.GET_STATE:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Status p = new FEEDBACK_OBJ_INTERFACE.Pack_Status(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<FEEDBACK_OBJ_INTERFACE.Pack_Status>(json);
return;
IsConnectedWithPLC = p.isConnected; IsConnectedWithPLC = p.isConnected;
ChannelCnt = p.channelcnt; ChannelCnt = p.channelcnt;
NBolts = p.nbolts; NBolts = p.nbolts;
...@@ -266,28 +260,23 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -266,28 +260,23 @@ namespace FLY.FeedbackRenZiJia.Client
} break; } break;
case FEEDBACK_OBJ_INTERFACE.GET_CHECKENABLE: case FEEDBACK_OBJ_INTERFACE.GET_CHECKENABLE:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Enable p = new FEEDBACK_OBJ_INTERFACE.Pack_Enable(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<bool>(json);
return; CheckEnable = p;
CheckEnable = p.enable;
}break; }break;
case FEEDBACK_OBJ_INTERFACE.GET_ENABLE: case FEEDBACK_OBJ_INTERFACE.GET_ENABLE:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Enable p = new FEEDBACK_OBJ_INTERFACE.Pack_Enable(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<bool>(json);
return; IsAuto = p;
IsAuto = p.enable;
} break; } break;
case FEEDBACK_OBJ_INTERFACE.GET_ERROR: case FEEDBACK_OBJ_INTERFACE.GET_ERROR:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Error p = new FEEDBACK_OBJ_INTERFACE.Pack_Error(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<FEEDBACK_OBJ_INTERFACE.Pack_Error>(json);
return;
HasFan = p.hasFan; HasFan = p.hasFan;
HasElectricity = p.hasEletric; HasElectricity = p.hasEletric;
CheckNo = p.checkno; CheckNo = p.checkno;
...@@ -299,18 +288,20 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -299,18 +288,20 @@ namespace FLY.FeedbackRenZiJia.Client
case FEEDBACK_OBJ_INTERFACE.GET_PRODUCTNAME: case FEEDBACK_OBJ_INTERFACE.GET_PRODUCTNAME:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(json);
return; HeatsProductName = p;
HeatsProductName = p.data;
}break; }break;
case FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX: case FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Undo p = new FEEDBACK_OBJ_INTERFACE.Pack_Undo(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata))
return; var p = Newtonsoft.Json.JsonConvert.DeserializeObject<FEEDBACK_OBJ_INTERFACE.Pack_Undo>(json);
UndoIdx = p.undo_idx;
UndoIdx = p.undoIdx;
IsInUndo = p.isInUndo;
UndoTime = p.undoTime;
} }
break; break;
} }
...@@ -321,10 +312,10 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -321,10 +312,10 @@ namespace FLY.FeedbackRenZiJia.Client
{ {
case FEEDBACK_OBJ_INTERFACE.CALL_GETLIST: case FEEDBACK_OBJ_INTERFACE.CALL_GETLIST:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_StringList p = new FEEDBACK_OBJ_INTERFACE.Pack_StringList(); string json = Misc.Converter.BytesToString(retdata);
if (!p.TryParse(retdata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(json);
return;
((AsyncCBHandler)AsyncDelegate)(AsyncState, p.list); ((AsyncCBHandler)AsyncDelegate)(AsyncState, p);
} break; } break;
} }
...@@ -358,26 +349,21 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -358,26 +349,21 @@ namespace FLY.FeedbackRenZiJia.Client
#region 撤销 #region 撤销
private int undoidx = 0;
/// <summary> /// <summary>
/// undo 的序号 /// undo 的序号
/// </summary> /// </summary>
public int UndoIdx public int UndoIdx { get; private set; }
{ /// <summary>
get /// 在撤销中
{ /// </summary>
return undoidx; public bool IsInUndo { get; private set; }
}
protected set /// <summary>
{ /// 这次撤销动作的时间
if (undoidx != value) /// </summary>
{ public DateTime UndoTime { get; private set; }
undoidx = value; //UndoIdx--
NotifyPropertyChanged("UndoIdx");
}
}
}
//读取 UndoIdx 的 加热
public void Undo() public void Undo()
{ {
FObjSys.Current.CallFunctionEx( FObjSys.Current.CallFunctionEx(
...@@ -386,6 +372,14 @@ namespace FLY.FeedbackRenZiJia.Client ...@@ -386,6 +372,14 @@ namespace FLY.FeedbackRenZiJia.Client
); );
} }
//UndoIdx++
public void Redo()
{
FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_REDO, null
);
}
#endregion #endregion
......
...@@ -140,14 +140,28 @@ namespace FLY.FeedbackRenZiJia.IService ...@@ -140,14 +140,28 @@ namespace FLY.FeedbackRenZiJia.IService
/// <param name="filename"></param> /// <param name="filename"></param>
void LoadHeatsFile(string productname); void LoadHeatsFile(string productname);
#region 撤销
/// <summary> /// <summary>
/// undo 的序号 /// 撤销的序号
/// </summary> /// </summary>
int UndoIdx { int UndoIdx { get; }
get; /// <summary>
} /// 撤销中
//读取 UndoIdx 的 加热 /// </summary>
bool IsInUndo { get; }
/// <summary>
/// 这次撤销动作的时间
/// </summary>
DateTime UndoTime { get; }
//UndoIdx--
void Undo(); void Undo();
/// <summary>
/// UndoIdx++
/// </summary>
void Redo();
#endregion
} }
......
...@@ -13,71 +13,15 @@ namespace FLY.FeedbackRenZiJia.OBJ_INTERFACE ...@@ -13,71 +13,15 @@ namespace FLY.FeedbackRenZiJia.OBJ_INTERFACE
public class FEEDBACK_OBJ_INTERFACE public class FEEDBACK_OBJ_INTERFACE
{ {
#region pack #region pack
public class Pack_Params : IPack public class Pack_Params
{ {
public int step; public int step;
public int delay; public int delay;
public bool hasCheck; public bool hasCheck;
public bool HasCheckFilmVelocity; public bool HasCheckFilmVelocity;
#region IPack 成员
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
buf.AddRange(BitConverter.GetBytes(step));
buf.AddRange(BitConverter.GetBytes(delay));
buf.AddRange(BitConverter.GetBytes(hasCheck));
buf.AddRange(BitConverter.GetBytes(HasCheckFilmVelocity));
return buf.ToArray();
}
public bool TryParse(byte[] value)
{
if (value.Length < (4+4+1))
return false;
int idx = 0;
step = BitConverter.ToInt32(value, idx);
idx += 4;
delay = BitConverter.ToInt32(value, idx);
idx += 4;
hasCheck = BitConverter.ToBoolean(value, idx);
idx += 1;
HasCheckFilmVelocity = BitConverter.ToBoolean(value, idx);
idx += 1;
return true;
}
#endregion
} }
public class Pack_CallSmoothRequest:IPack
{
public double thresholdHeatSigma;
#region IPack 成员
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
buf.AddRange(BitConverter.GetBytes(thresholdHeatSigma));
return buf.ToArray();
}
public bool TryParse(byte[] value)
{
if (value.Length < ( 8 ))
return false;
int idx = 0; public class Pack_Status
thresholdHeatSigma = BitConverter.ToDouble(value, idx);
idx += 8;
return true;
}
#endregion
}
public class Pack_Status : IPack
{ {
public int channelcnt; public int channelcnt;
public int nbolts; public int nbolts;
...@@ -85,281 +29,21 @@ namespace FLY.FeedbackRenZiJia.OBJ_INTERFACE ...@@ -85,281 +29,21 @@ namespace FLY.FeedbackRenZiJia.OBJ_INTERFACE
public bool isConnected; public bool isConnected;
public DateTime lastChangedTime; public DateTime lastChangedTime;
#region IPack 成员
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
buf.AddRange(BitConverter.GetBytes(channelcnt));
buf.AddRange(BitConverter.GetBytes(nbolts));
buf.AddRange(BitConverter.GetBytes(isConnected));
buf.AddRange(BitConverter.GetBytes(lastChangedTime.Ticks));
return buf.ToArray();
}
public bool TryParse(byte[] value)
{
if (value.Length < (4+4+1+8))
return false;
int idx = 0;
channelcnt = BitConverter.ToInt32(value, idx);
idx += 4;
nbolts = BitConverter.ToInt32(value, idx);
idx += 4;
isConnected = BitConverter.ToBoolean(value, idx);
idx += 1;
lastChangedTime = new DateTime(BitConverter.ToInt64(value, idx));
idx += 8;
return true;
}
#endregion
} }
public class Pack_Enable : IPack public class Pack_Error
{
public bool enable;
#region IPack 成员
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
buf.AddRange(BitConverter.GetBytes(enable));
return buf.ToArray();
}
public bool TryParse(byte[] value)
{
if (value.Length < 1)
return false;
int idx = 0;
enable = BitConverter.ToBoolean(value, idx);
idx += 1;
return true;
}
#endregion
}
public class Pack_Error : IPack
{ {
public bool hasFan; public bool hasFan;
public bool hasEletric; public bool hasEletric;
public int checkno; public int checkno;
public bool[] bads = null; public bool[] bads = null;
#region IPack 成员
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
buf.AddRange(BitConverter.GetBytes(hasFan));
buf.AddRange(BitConverter.GetBytes(hasEletric));
buf.AddRange(BitConverter.GetBytes(checkno));
if (bads != null)
{
buf.AddRange(BitConverter.GetBytes(bads.Length));
for (int i = 0; i < bads.Length; i++)
{
buf.AddRange(BitConverter.GetBytes(bads[i]));
}
}
else
{
int len = 0;
buf.AddRange(BitConverter.GetBytes(len));
}
return buf.ToArray();
}
public bool TryParse(byte[] value)
{
int cnt = 1*2+4*2;
if (value.Length < cnt)
return false;
int idx = 0;
hasFan = BitConverter.ToBoolean(value, idx);
idx += 1;
hasEletric = BitConverter.ToBoolean(value, idx);
idx += 1;
checkno = BitConverter.ToInt32(value, idx);
idx += 4;
int len = BitConverter.ToInt32(value, idx);
idx += 4;
cnt+=len;
if (value.Length < cnt)
return false;
if (len == 0)
{
bads = null;
}
else
{
bads = new bool[len];
for (int i = 0; i < len; i++)
{
bads[i] = BitConverter.ToBoolean(value, idx);
idx++;
}
}
return true;
}
#endregion
} }
public class Pack_StringList : IPack public class Pack_Undo
{ {
public List<string> list; public int undoIdx;
#region IPack 成员 public bool isInUndo;
public DateTime undoTime;
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
byte[] bs;
buf.AddRange(BitConverter.GetBytes(list.Count()));
for (int i = 0; i < list.Count(); i++)
{
bs = Misc.Converter.StringToBytes(list[i]);
buf.AddRange(BitConverter.GetBytes(bs.Count()));
buf.AddRange(bs);
}
return buf.ToArray();
}
/// <summary>
/// 返回由字节数组中指定位置的9个字节转换来的数据。
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public bool TryParse(byte[] value)
{
int cnt = 4;
if (value.Length < cnt)
return false;
int idx = 0;
int len = BitConverter.ToInt32(value, idx);
idx += 4;
cnt += len * 4;
if (value.Length < cnt)
return false;
if (list == null)
list = new List<string>();
list.Clear();
for (int i = 0; i < len; i++)
{
int l = BitConverter.ToInt32(value, idx);
idx += 4;
cnt += l;
if (value.Length < cnt)
return false;
string s = Misc.Converter.BytesToString(value, idx, l);
idx += l;
list.Add(s);
}
return true;
}
#endregion
}
public class Pack_String
{
public string data;
#region IPack 成员
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
if (data != null)
{
byte[] bs = Misc.Converter.StringToBytes(data);
buf.AddRange(BitConverter.GetBytes(bs.Length));
buf.AddRange(bs);
}
else
{
buf.AddRange(BitConverter.GetBytes(0));
}
return buf.ToArray();
}
/// <summary>
/// 返回由字节数组中指定位置的9个字节转换来的数据。
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public bool TryParse(byte[] value, int index, int count)
{
int cnt = 4;
if (value.Length < cnt)
return false;
int idx = 0;
int len = BitConverter.ToInt32(value, idx);
idx += 4;
cnt += len;
if (value.Length < cnt)
return false;
if (len <= 0)
data = null;
else
{
data = Misc.Converter.BytesToString(value, idx, len);
idx += len;
}
return true;
}
public bool TryParse(byte[] value)
{
return TryParse(value, 0, value.Length);
}
#endregion
}
public class Pack_Undo : IPack
{
public int undo_idx;
#region IPack 成员
public byte[] ToBytes()
{
List<byte> buf = new List<byte>();
buf.AddRange(BitConverter.GetBytes(undo_idx));
return buf.ToArray();
}
public bool TryParse(byte[] value)
{
if (value.Length < 4)
return false;
int idx = 0;
undo_idx = BitConverter.ToInt32(value, idx);
idx += 4;
return true;
}
#endregion
} }
#endregion #endregion
...@@ -449,6 +133,11 @@ namespace FLY.FeedbackRenZiJia.OBJ_INTERFACE ...@@ -449,6 +133,11 @@ namespace FLY.FeedbackRenZiJia.OBJ_INTERFACE
/// </summary> /// </summary>
public const UInt16 CALL_UNDO = 13; public const UInt16 CALL_UNDO = 13;
/// <summary>
/// request:null
/// reponse:null
/// </summary>
public const UInt16 CALL_REDO = 14;
#endregion #endregion
#region Push #region Push
......
...@@ -29,5 +29,5 @@ using System.Runtime.InteropServices; ...@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// 内部版本号 // 内部版本号
// 修订号 // 修订号
// //
[assembly: AssemblyVersion("4.1.0.0")] [assembly: AssemblyVersion("4.2.0.0")]
[assembly: AssemblyFileVersion("4.1.0.0")] [assembly: AssemblyFileVersion("4.2.0.0")]
...@@ -111,7 +111,9 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy ...@@ -111,7 +111,9 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy
this, FEEDBACK_OBJ_INTERFACE.PUSH_PRODUCTNAME, this, FEEDBACK_OBJ_INTERFACE.PUSH_PRODUCTNAME,
buf); buf);
} }
else if (e.PropertyName == "UndoIdx") else if ((e.PropertyName == "UndoIdx")
|| (e.PropertyName == "IsInUndo")
|| (e.PropertyName == "UndoTime"))
{ {
byte[] buf; byte[] buf;
GetValue(null, 0, FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX, out buf); GetValue(null, 0, FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX, out buf);
...@@ -130,64 +132,69 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy ...@@ -130,64 +132,69 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy
{ {
case FEEDBACK_OBJ_INTERFACE.GET_PARAMS: case FEEDBACK_OBJ_INTERFACE.GET_PARAMS:
{ {
infodata = new FEEDBACK_OBJ_INTERFACE.Pack_Params() var p = new FEEDBACK_OBJ_INTERFACE.Pack_Params()
{ {
delay = data.Delay, delay = data.Delay,
hasCheck = data.HasCheck, hasCheck = data.HasCheck,
step = data.Step, step = data.Step,
HasCheckFilmVelocity = data.HasCheckFilmVelocity HasCheckFilmVelocity = data.HasCheckFilmVelocity
}.ToBytes(); };
}break; string json = Newtonsoft.Json.JsonConvert.SerializeObject(p);
infodata = Misc.Converter.StringToBytes(json);
}
break;
case FEEDBACK_OBJ_INTERFACE.GET_STATE: case FEEDBACK_OBJ_INTERFACE.GET_STATE:
{ {
infodata = new FEEDBACK_OBJ_INTERFACE.Pack_Status() var p = new FEEDBACK_OBJ_INTERFACE.Pack_Status()
{ {
channelcnt = data.ChannelCnt, channelcnt = data.ChannelCnt,
nbolts = data.NBolts, nbolts = data.NBolts,
isConnected = data.IsConnectedWithPLC, isConnected = data.IsConnectedWithPLC,
lastChangedTime = data.LastChangedTime lastChangedTime = data.LastChangedTime
};
}.ToBytes(); string json = Newtonsoft.Json.JsonConvert.SerializeObject(p);
}break; infodata = Misc.Converter.StringToBytes(json);
}
break;
case FEEDBACK_OBJ_INTERFACE.GET_ERROR: case FEEDBACK_OBJ_INTERFACE.GET_ERROR:
{ {
infodata = new FEEDBACK_OBJ_INTERFACE.Pack_Error() var p = new FEEDBACK_OBJ_INTERFACE.Pack_Error()
{ {
hasFan = data.HasFan, hasFan = data.HasFan,
hasEletric = data.HasElectricity, hasEletric = data.HasElectricity,
checkno = data.CheckNo, checkno = data.CheckNo,
bads = data.Bads bads = data.Bads
}.ToBytes(); };
string json = Newtonsoft.Json.JsonConvert.SerializeObject(p);
infodata = Misc.Converter.StringToBytes(json);
} break; } break;
case FEEDBACK_OBJ_INTERFACE.GET_CHECKENABLE: case FEEDBACK_OBJ_INTERFACE.GET_CHECKENABLE:
{ {
infodata = new FEEDBACK_OBJ_INTERFACE.Pack_Enable string json = Newtonsoft.Json.JsonConvert.SerializeObject(data.CheckEnable);
{ infodata = Misc.Converter.StringToBytes(json);
enable = data.CheckEnable }
}.ToBytes(); break;
}break;
case FEEDBACK_OBJ_INTERFACE.GET_ENABLE: case FEEDBACK_OBJ_INTERFACE.GET_ENABLE:
{ {
infodata = new FEEDBACK_OBJ_INTERFACE.Pack_Enable string json = Newtonsoft.Json.JsonConvert.SerializeObject(data.IsAuto);
{ infodata = Misc.Converter.StringToBytes(json);
enable = data.IsAuto
}.ToBytes();
} break; } break;
case FEEDBACK_OBJ_INTERFACE.GET_PRODUCTNAME: case FEEDBACK_OBJ_INTERFACE.GET_PRODUCTNAME:
{ {
infodata = new FEEDBACK_OBJ_INTERFACE.Pack_String string json = Newtonsoft.Json.JsonConvert.SerializeObject(data.HeatsProductName);
{ infodata = Misc.Converter.StringToBytes(json);
data = data.HeatsProductName
}.ToBytes();
}break; }break;
case FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX: case FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX:
{ {
infodata = new FEEDBACK_OBJ_INTERFACE.Pack_Undo var p = new FEEDBACK_OBJ_INTERFACE.Pack_Undo
{ {
undo_idx = data.UndoIdx undoIdx = data.UndoIdx,
}.ToBytes(); isInUndo = data.IsInUndo,
undoTime = data.UndoTime
};
string json = Newtonsoft.Json.JsonConvert.SerializeObject(p);
infodata = Misc.Converter.StringToBytes(json);
} }
break; break;
} }
...@@ -198,10 +205,10 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy ...@@ -198,10 +205,10 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy
{ {
case FEEDBACK_OBJ_INTERFACE.SET_PARAMS: case FEEDBACK_OBJ_INTERFACE.SET_PARAMS:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Params p = new FEEDBACK_OBJ_INTERFACE.Pack_Params();
if (!p.TryParse(infodata)) string json = Misc.Converter.BytesToString(infodata);
return; var p = Newtonsoft.Json.JsonConvert.DeserializeObject<FEEDBACK_OBJ_INTERFACE.Pack_Params>(json);
data.Step = p.step; data.Step = p.step;
data.Delay = p.delay; data.Delay = p.delay;
data.HasCheck = p.hasCheck; data.HasCheck = p.hasCheck;
...@@ -210,17 +217,15 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy ...@@ -210,17 +217,15 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy
}break; }break;
case FEEDBACK_OBJ_INTERFACE.SET_CHECKENABLE: case FEEDBACK_OBJ_INTERFACE.SET_CHECKENABLE:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Enable p = new FEEDBACK_OBJ_INTERFACE.Pack_Enable(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<bool>(json);
return; data.CheckEnable = p;
data.CheckEnable = p.enable;
}break; }break;
case FEEDBACK_OBJ_INTERFACE.SET_ENABLE: case FEEDBACK_OBJ_INTERFACE.SET_ENABLE:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_Enable p = new FEEDBACK_OBJ_INTERFACE.Pack_Enable(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<bool>(json);
return; data.IsAuto = p;
data.IsAuto = p.enable;
} break; } break;
} }
} }
...@@ -231,24 +236,21 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy ...@@ -231,24 +236,21 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy
{ {
case FEEDBACK_OBJ_INTERFACE.CALL_SAVEHEATS: case FEEDBACK_OBJ_INTERFACE.CALL_SAVEHEATS:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(json);
return; data.SaveHeats(p);
data.SaveHeats(p.data);
}break; }break;
case FEEDBACK_OBJ_INTERFACE.CALL_LOADHEATS: case FEEDBACK_OBJ_INTERFACE.CALL_LOADHEATS:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(json);
return; data.LoadHeatsFile(p);
data.LoadHeatsFile(p.data);
}break; }break;
case FEEDBACK_OBJ_INTERFACE.CALL_DEL: case FEEDBACK_OBJ_INTERFACE.CALL_DEL:
{ {
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String(); string json = Misc.Converter.BytesToString(infodata);
if (!p.TryParse(infodata)) var p = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(json);
return; data.DelHeatsFile(p);
data.DelHeatsFile(p.data);
}break; }break;
case FEEDBACK_OBJ_INTERFACE.CALL_GETLIST: case FEEDBACK_OBJ_INTERFACE.CALL_GETLIST:
{ {
...@@ -256,8 +258,7 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy ...@@ -256,8 +258,7 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy
new AsyncCBHandler(delegate(object AsyncState, object retdata) new AsyncCBHandler(delegate(object AsyncState, object retdata)
{ {
ConnContext context = (ConnContext)AsyncState; ConnContext context = (ConnContext)AsyncState;
FEEDBACK_OBJ_INTERFACE.Pack_StringList p = new FEEDBACK_OBJ_INTERFACE.Pack_StringList(); string json = Newtonsoft.Json.JsonConvert.SerializeObject(retdata);
p.list = (List<string>)retdata;
CurrObjSys.PushCallFunctionEx( CurrObjSys.PushCallFunctionEx(
context.from, context.from,
...@@ -265,7 +266,7 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy ...@@ -265,7 +266,7 @@ namespace FLY.FeedbackRenZiJia.Server.OBJProxy
ID, ID,
context.magic, context.magic,
FEEDBACK_OBJ_INTERFACE.CALL_GETLIST, FEEDBACK_OBJ_INTERFACE.CALL_GETLIST,
p.ToBytes()); Misc.Converter.StringToBytes(json));
}), new ConnContext(from, srcid, magic)); }), new ConnContext(from, srcid, magic));
} break; } break;
......
...@@ -215,8 +215,8 @@ namespace FLY.FeedbackRenZiJia.Server ...@@ -215,8 +215,8 @@ namespace FLY.FeedbackRenZiJia.Server
//记录改变!!!! //记录改变!!!!
mHeatChanged.Add(mHeatCell.Heats); mHeatChanged.Add(mHeatCell.Heats);
UndoIdx = mHeatChanged.mItem.Count() - 1; //复位undo模块
resetUndo();
//记录到数据库 //记录到数据库
if (lastLcThickHeat != null) if (lastLcThickHeat != null)
...@@ -230,7 +230,8 @@ namespace FLY.FeedbackRenZiJia.Server ...@@ -230,7 +230,8 @@ namespace FLY.FeedbackRenZiJia.Server
}; };
mHeatCell.AfterClearOffsetsEvent += (c) => { mHeatCell.AfterClearOffsetsEvent += (c) => {
UndoIdx = mHeatChanged.mItem.Count() - 1; //复位undo模块
resetUndo();
}; };
...@@ -406,7 +407,8 @@ namespace FLY.FeedbackRenZiJia.Server ...@@ -406,7 +407,8 @@ namespace FLY.FeedbackRenZiJia.Server
mHeatBuf.Init(NBolts, ChannelCnt); mHeatBuf.Init(NBolts, ChannelCnt);
mHeatCell.Init2(NBolts, ChannelCnt); mHeatCell.Init2(NBolts, ChannelCnt);
UndoIdx = mHeatChanged.mItem.Count() - 1; //复位undo模块
resetUndo();
mSnapShotBuf.Init(NBolts, ChannelCnt); mSnapShotBuf.Init(NBolts, ChannelCnt);
} }
...@@ -824,19 +826,42 @@ namespace FLY.FeedbackRenZiJia.Server ...@@ -824,19 +826,42 @@ namespace FLY.FeedbackRenZiJia.Server
/// <summary> /// <summary>
/// undo 的序号 /// undo 的序号
/// </summary> /// </summary>
public int UndoIdx { get; protected set; } public int UndoIdx { get; private set; }
/// <summary>
/// 在撤销中
/// </summary>
public bool IsInUndo { get; private set; }
/// <summary>
/// 这次撤销动作的时间
/// </summary>
public DateTime UndoTime { get; private set; }
//读取 UndoIdx 的 加热 //读取 UndoIdx 的 加热
public void Undo() public void Undo()
{ {
int idx = UndoIdx - 1; updateUodo(UndoIdx - 1);
}
public void Redo()
{
updateUodo(UndoIdx + 1);
}
void updateUodo(int idx)
{
if (idx < 0) if (idx < 0)
return; return;
else if (idx >= mHeatChanged.mItem.Count()) else if (idx >= mHeatChanged.mItem.Count())
return; return;
mHeatCell.ModifyPreHeats(mHeatChanged.mItem[idx].Heats); mHeatCell.ModifyPreHeats(mHeatChanged.mItem[idx].Heats);
UndoIdx--; UndoTime = mHeatChanged.mItem[idx].Time;
IsInUndo = idx <= mHeatChanged.mItem.Count() - 1;
UndoIdx = idx;
}
void resetUndo()
{
UndoIdx = mHeatChanged.mItem.Count() - 1;
UndoTime = DateTime.MinValue;
IsInUndo = false;
} }
#endregion #endregion
......
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