Configurator.Net: Combined some tabs, refactored Vms (disabling tests for now)
git-svn-id: https://arducopter.googlecode.com/svn/trunk@1634 f9c3cf11-9bcb-44bc-f272-b75c42450872
This commit is contained in:
parent
a445baaad4
commit
ede88898e7
@ -46,15 +46,32 @@
|
||||
<Compile Include="PresentationModels\AltitudeHoldConfigVm.cs" />
|
||||
<Compile Include="PresentationModels\ConfigWithPidsBase.cs" />
|
||||
<Compile Include="Core\DelegateCommand.cs" />
|
||||
<Compile Include="PresentationModels\DoubleVm.cs" />
|
||||
<Compile Include="PresentationModels\PositionAltitudePidsVm.cs" />
|
||||
<Compile Include="PresentationModels\FlightControlPidsVm.cs" />
|
||||
<Compile Include="PresentationModels\ItalksToApm.cs" />
|
||||
<Compile Include="PresentationModels\MonitorVm.cs" />
|
||||
<Compile Include="PresentationModels\MainVm.cs" />
|
||||
<Compile Include="PresentationModels\FlightDataMonitorVm.cs" />
|
||||
<Compile Include="PresentationModels\VmBase.cs" />
|
||||
<Compile Include="Views\controls\LinearIndicatorControl.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Views\controls\LinearIndicatorControl.Designer.cs">
|
||||
<DependentUpon>LinearIndicatorControl.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\PositionAltitudePidsView.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Views\PositionAltitudePidsView.Designer.cs">
|
||||
<DependentUpon>PositionAltitudePidsView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\FlightControlPidsView.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Views\FlightControlPidsView.Designer.cs">
|
||||
<DependentUpon>FlightControlPidsView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\mainForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@ -186,11 +203,19 @@
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Views\PositionAltitudePidsView.resx">
|
||||
<DependentUpon>PositionAltitudePidsView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Views\FlightControlPidsView.resx">
|
||||
<DependentUpon>FlightControlPidsView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Views\icons\refresh.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\icons\arrow_up.png" />
|
||||
<Content Include="Views\icons\connect.ico" />
|
||||
<Content Include="Views\icons\disconnect.ico" />
|
||||
<Content Include="Views\icons\saveIcon.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
|
@ -1,7 +1,13 @@
|
||||
using System;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
public interface IPresentationModel
|
||||
public interface IPresentationModel : ItalksToApm
|
||||
{
|
||||
string Name { get; }
|
||||
void Activate();
|
||||
void DeActivate();
|
||||
|
||||
event EventHandler updatedByApm;
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ namespace ArducopterConfigurator
|
||||
{
|
||||
public interface IView<Tmodel> where Tmodel : IPresentationModel
|
||||
{
|
||||
void SetDataContext(Tmodel model);
|
||||
void SetDataContext(Tmodel vm);
|
||||
Control Control { get; }
|
||||
}
|
||||
}
|
@ -44,6 +44,23 @@ namespace ArducopterConfigurator
|
||||
|
||||
if (stringSent == "!")
|
||||
ReturnData("Fake");
|
||||
|
||||
if (stringSent == "D") // position
|
||||
ReturnData("0.015,0.005,0.010,0.015,0.005,0.010,22.000,0.870");
|
||||
if (stringSent == "B") // stable
|
||||
ReturnData("1.950,0.100,0.200,1.950,0.300,0.400,3.200,0.500,0.600,0.320,1.00");
|
||||
if (stringSent == "P") // acro
|
||||
ReturnData("3.950,0.100,0.000,0.000,0.300,0.400,3.200,0.500,0.600,0.320");
|
||||
if (stringSent == "F") // alti
|
||||
ReturnData("0.800,0.200,0.300");
|
||||
if (stringSent == "J") // calib
|
||||
ReturnData("0.100,0.200,0.300,0.400,0.500,0.600");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (stringSent == "S")
|
||||
{
|
||||
// Loop Time = 2
|
||||
|
@ -2,9 +2,9 @@ using System;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class AcroModeConfigVm : ConfigWithPidsBase
|
||||
public class AcroModeConfigVm : ConfigWithPidsBase, IPresentationModel, ItalksToApm
|
||||
{
|
||||
public AcroModeConfigVm(IComms sp) : base(sp)
|
||||
public AcroModeConfigVm()
|
||||
{
|
||||
PropsInUpdateOrder = new[]
|
||||
{
|
||||
@ -29,25 +29,45 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
public ICommand RefreshCommand { get; private set; }
|
||||
|
||||
public ICommand UpdateCommand { get; private set; }
|
||||
|
||||
|
||||
protected override void OnActivated()
|
||||
public void UpdateValues()
|
||||
{
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs(ComposePropsWithCommand("O")));
|
||||
}
|
||||
|
||||
public void RefreshValues()
|
||||
{
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("P"));
|
||||
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Acro Mode"; }
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
RefreshValues();
|
||||
}
|
||||
|
||||
private void RefreshValues()
|
||||
public void DeActivate()
|
||||
{
|
||||
SendString("P");
|
||||
|
||||
}
|
||||
|
||||
public void UpdateValues()
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
SendPropsWithCommand("O");
|
||||
PopulatePropsFromUpdate(strRx,true);
|
||||
if (updatedByApm != null)
|
||||
updatedByApm(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
public override string Name
|
||||
{
|
||||
get { return "Acro Mode"; }
|
||||
}
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
}
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
using System;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
/// <summary>
|
||||
@ -8,10 +10,9 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
/// in a different order
|
||||
/// There is a unit test to cover it but it will need fixing.
|
||||
/// </remarks>
|
||||
public class AltitudeHoldConfigVm : MonitorVm
|
||||
public class AltitudeHoldConfigVm : VmBase, IPresentationModel, ItalksToApm
|
||||
{
|
||||
public AltitudeHoldConfigVm(IComms sp)
|
||||
: base(sp)
|
||||
public AltitudeHoldConfigVm()
|
||||
{
|
||||
PropsInUpdateOrder = new[] { "P", "I", "D", };
|
||||
|
||||
@ -29,27 +30,38 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
|
||||
private void RefreshValues()
|
||||
{
|
||||
SendString("F");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("F"));
|
||||
}
|
||||
|
||||
public void UpdateValues()
|
||||
{
|
||||
SendPropsWithCommand("E");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs(ComposePropsWithCommand("E")));
|
||||
}
|
||||
|
||||
protected override void OnActivated()
|
||||
public string Name
|
||||
{
|
||||
get { return "Altitude Hold"; }
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
RefreshValues();
|
||||
}
|
||||
|
||||
protected override void OnStringReceived(string strReceived)
|
||||
public void DeActivate()
|
||||
{
|
||||
PopulatePropsFromUpdate(strReceived,true);
|
||||
}
|
||||
|
||||
public override string Name
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
get { return "Altitude Hold"; }
|
||||
PopulatePropsFromUpdate(strRx, true);
|
||||
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
}
|
||||
}
|
@ -4,9 +4,9 @@ using System.Diagnostics;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class CalibrationOffsetsDataVm : MonitorVm
|
||||
public class CalibrationOffsetsDataVm : VmBase, IPresentationModel, ItalksToApm
|
||||
{
|
||||
public CalibrationOffsetsDataVm(IComms sp) : base(sp)
|
||||
public CalibrationOffsetsDataVm()
|
||||
{
|
||||
PropsInUpdateOrder = new[]
|
||||
{
|
||||
@ -26,8 +26,6 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
|
||||
public ICommand UpdateCommand { get; private set; }
|
||||
|
||||
|
||||
|
||||
public float GyroRollOffset { get; set; }
|
||||
public float GyroPitchOffset { get; set; }
|
||||
public float GyroYawOffset { get; set; }
|
||||
@ -36,30 +34,39 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
public float AccelPitchOffset { get; set; }
|
||||
public float AccelZOffset { get; set; }
|
||||
|
||||
protected override void OnActivated()
|
||||
{
|
||||
RefreshValues();
|
||||
}
|
||||
|
||||
private void RefreshValues()
|
||||
{
|
||||
SendString("J");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("J"));
|
||||
}
|
||||
|
||||
public void UpdateValues()
|
||||
{
|
||||
SendPropsWithCommand("I");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs(ComposePropsWithCommand("I")));
|
||||
}
|
||||
|
||||
|
||||
protected override void OnStringReceived(string strReceived)
|
||||
{
|
||||
PopulatePropsFromUpdate(strReceived,true);
|
||||
}
|
||||
|
||||
public override string Name
|
||||
public string Name
|
||||
{
|
||||
get { return "Calibration"; }
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
RefreshValues();
|
||||
}
|
||||
|
||||
public void DeActivate()
|
||||
{
|
||||
}
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
PopulatePropsFromUpdate(strRx, true);
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ using System.Diagnostics;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public abstract class ConfigWithPidsBase : MonitorVm
|
||||
public abstract class ConfigWithPidsBase : VmBase
|
||||
{
|
||||
|
||||
public float RollP { get; set; }
|
||||
@ -18,15 +18,5 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
public float YawP { get; set; }
|
||||
public float YawI { get; set; }
|
||||
public float YawD { get; set; }
|
||||
|
||||
|
||||
public ConfigWithPidsBase(IComms sp) : base(sp)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnStringReceived(string strRx)
|
||||
{
|
||||
PopulatePropsFromUpdate(strRx,true);
|
||||
}
|
||||
}
|
||||
}
|
87
Configurator/Configurator.Net/PresentationModels/DoubleVm.cs
Normal file
87
Configurator/Configurator.Net/PresentationModels/DoubleVm.cs
Normal file
@ -0,0 +1,87 @@
|
||||
using System;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public abstract class DoubleVm<Tvm1,Tvm2> : NotifyProperyChangedBase, IPresentationModel
|
||||
where Tvm1 : IPresentationModel
|
||||
where Tvm2 : IPresentationModel
|
||||
{
|
||||
protected Tvm1 _vm1;
|
||||
protected Tvm2 _vm2;
|
||||
protected IPresentationModel _activeVm;
|
||||
|
||||
|
||||
protected DoubleVm(Tvm1 _vm1, Tvm2 _vm2)
|
||||
{
|
||||
this._vm1 = _vm1;
|
||||
this._vm2 = _vm2;
|
||||
|
||||
_vm1.sendTextToApm += proxyApmTx;
|
||||
_vm2.sendTextToApm += proxyApmTx;
|
||||
}
|
||||
|
||||
private void proxyApmTx(object sender, sendTextToApmEventArgs e)
|
||||
{
|
||||
_activeVm = sender as IPresentationModel;
|
||||
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, e);
|
||||
}
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
_activeVm.handleLineOfText(strRx);
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
|
||||
|
||||
public abstract string Name { get; }
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
_vm1.updatedByApm += _vm1_updatedByApm;
|
||||
_vm1.Activate();
|
||||
}
|
||||
|
||||
void _vm1_updatedByApm(object sender, EventArgs e)
|
||||
{
|
||||
// This is a response to the refresh event being completed on the first
|
||||
// vm, so refresh the second. Unsubscribe so that the vms respond
|
||||
// individually to refresh commands henceforth
|
||||
_vm1.updatedByApm -= _vm1_updatedByApm;
|
||||
_vm2.Activate();
|
||||
}
|
||||
|
||||
|
||||
public void DeActivate()
|
||||
{
|
||||
_vm1.DeActivate();
|
||||
_vm2.DeActivate();
|
||||
}
|
||||
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
public Tvm1 Vm1
|
||||
{
|
||||
get { return _vm1; }
|
||||
set
|
||||
{
|
||||
_vm1 = value;
|
||||
FirePropertyChanged("Vm1");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Tvm2 Vm2
|
||||
{
|
||||
get { return _vm2; }
|
||||
set
|
||||
{
|
||||
_vm2 = value;
|
||||
FirePropertyChanged("Vm2");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class FlightControlPidsVm : DoubleVm<AcroModeConfigVm, StableModeConfigVm>
|
||||
{
|
||||
public FlightControlPidsVm() : base(new AcroModeConfigVm(), new StableModeConfigVm())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override string Name
|
||||
{
|
||||
get { return "Flight Control"; }
|
||||
}
|
||||
}
|
||||
}
|
@ -5,13 +5,38 @@ using System.IO.Ports;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class FlightDataVm : MonitorVm
|
||||
public class FlightDataVm : VmBase, IPresentationModel, ItalksToApm
|
||||
{
|
||||
public FlightDataVm(IComms _sp) : base(_sp)
|
||||
public string Name
|
||||
{
|
||||
|
||||
get { return "Flight Data"; }
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
if (sendTextToApm!=null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("S"));
|
||||
|
||||
}
|
||||
|
||||
public void DeActivate()
|
||||
{
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("X"));
|
||||
|
||||
}
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
OnStringReceived(strRx);
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
|
||||
|
||||
// 2,-10,3,-2,1011,1012,1002,1000,1001,1003,1002,1004
|
||||
// Loop Time = 2
|
||||
// Roll Gyro Rate = -10
|
||||
@ -26,7 +51,7 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
// Right Motor Command = 1002
|
||||
// Left Motor Command = 1004
|
||||
// then adc 4,3, and 5
|
||||
protected override void OnStringReceived(string data)
|
||||
private void OnStringReceived(string data)
|
||||
{
|
||||
var strs = data.Split(',');
|
||||
var ints = new List<int>();
|
||||
@ -192,21 +217,5 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
FirePropertyChanged("AccelZ");
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDeactivated()
|
||||
{
|
||||
SendString("X");
|
||||
}
|
||||
|
||||
|
||||
protected override void OnActivated()
|
||||
{
|
||||
SendString("S");
|
||||
}
|
||||
|
||||
public override string Name
|
||||
{
|
||||
get { return "Flight Data"; }
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
public interface ItalksToApm
|
||||
{
|
||||
void handleLineOfText(string strRx);
|
||||
event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
|
||||
}
|
||||
|
||||
public class sendTextToApmEventArgs : EventArgs
|
||||
{
|
||||
public string textToSend;
|
||||
|
||||
public sendTextToApmEventArgs(string textToSend)
|
||||
{
|
||||
this.textToSend = textToSend;
|
||||
}
|
||||
}
|
||||
}
|
@ -8,7 +8,7 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
private readonly IComms _comms;
|
||||
private bool _isConnected;
|
||||
private MonitorVm _selectedVm;
|
||||
private IPresentationModel _selectedVm;
|
||||
private string _selectedPort;
|
||||
private string _apmVersion;
|
||||
private Timer _connectionAttemptsTimer;
|
||||
@ -21,19 +21,23 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
_comms = session;
|
||||
_comms.LineOfDataReceived += _session_LineOfDataReceived;
|
||||
|
||||
MonitorVms = new BindingList<MonitorVm>
|
||||
MonitorVms = new BindingList<IPresentationModel>
|
||||
{
|
||||
new FlightDataVm(session),
|
||||
new TransmitterChannelsVm(session),
|
||||
new MotorCommandsVm(session),
|
||||
new CalibrationOffsetsDataVm(session),
|
||||
new AcroModeConfigVm(session),
|
||||
new StableModeConfigVm(session),
|
||||
new PositionHoldConfigVm(session),
|
||||
new AltitudeHoldConfigVm(session),
|
||||
new FlightDataVm(),
|
||||
new TransmitterChannelsVm(),
|
||||
new FlightControlPidsVm(),
|
||||
new PositionAltitudePidsVm(),
|
||||
//new MotorCommandsVm(session),
|
||||
new CalibrationOffsetsDataVm(),
|
||||
new SerialMonitorVm(session)
|
||||
};
|
||||
|
||||
foreach (var vm in MonitorVms)
|
||||
{
|
||||
if (vm is ItalksToApm)
|
||||
(vm as ItalksToApm).sendTextToApm += MainVm_sendTextToApm;
|
||||
}
|
||||
|
||||
ConnectCommand = new DelegateCommand(
|
||||
_ => Connect(),
|
||||
_ => _connectionState==SessionStates.Disconnected && AvailablePorts.Contains(SelectedPort));
|
||||
@ -56,6 +60,19 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
SelectedPort = AvailablePorts[AvailablePorts.Count-1];
|
||||
}
|
||||
|
||||
void MainVm_sendTextToApm(object sender, sendTextToApmEventArgs e)
|
||||
{
|
||||
if (sender.Equals(_selectedVm)==false)
|
||||
{
|
||||
Console.WriteLine("Non selected vm wants to send something to the APM");
|
||||
return;
|
||||
}
|
||||
|
||||
if (_comms.IsConnected)
|
||||
_comms.Send(e.textToSend);
|
||||
|
||||
}
|
||||
|
||||
private void RefreshPorts()
|
||||
{
|
||||
AvailablePorts.Clear();
|
||||
@ -76,6 +93,11 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
ConnectionState = SessionStates.Connected;
|
||||
_selectedVm.Activate();
|
||||
}
|
||||
else if (ConnectionState == SessionStates.Connected)
|
||||
{
|
||||
if (_selectedVm is ItalksToApm)
|
||||
(_selectedVm as ItalksToApm).handleLineOfText(strRx);
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand ConnectCommand { get; private set; }
|
||||
@ -182,24 +204,45 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
}
|
||||
}
|
||||
|
||||
public BindingList<MonitorVm> MonitorVms { get; private set; }
|
||||
public BindingList<IPresentationModel> MonitorVms { get; private set; }
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Arducopter Config"; }
|
||||
}
|
||||
|
||||
public void Select(MonitorVm vm)
|
||||
public void Activate()
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public void DeActivate()
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
public void Select(IPresentationModel vm)
|
||||
{
|
||||
if (_selectedVm==vm)
|
||||
return;
|
||||
|
||||
if (vm == null)
|
||||
throw new ArgumentNullException("vm");
|
||||
|
||||
if (_selectedVm!=null)
|
||||
_selectedVm.DeActivate();
|
||||
|
||||
_selectedVm = vm;
|
||||
|
||||
_selectedVm.Activate();
|
||||
}
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
}
|
||||
}
|
@ -4,6 +4,8 @@ using System.Text;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
// Vm base has functionality for populating properties using reflection
|
||||
|
||||
/// <summary>
|
||||
/// Monitor VM base class
|
||||
/// </summary>
|
||||
@ -48,6 +50,8 @@ namespace ArducopterConfigurator
|
||||
OnDeactivated();
|
||||
}
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
protected virtual void OnDeactivated()
|
||||
{
|
||||
|
||||
@ -92,7 +96,7 @@ namespace ArducopterConfigurator
|
||||
|
||||
if (PropsInUpdateOrder.Length!=strs.Length)
|
||||
{
|
||||
Console.WriteLine("Processing update with " + strs.Length
|
||||
Console.WriteLine(Name + ": Processing update with " + strs.Length
|
||||
+ " values, but have " + PropsInUpdateOrder.Length
|
||||
+ " properties to populate. Ignoring this update");
|
||||
return;
|
||||
@ -169,5 +173,12 @@ namespace ArducopterConfigurator
|
||||
var sentence = commandChar + string.Join(";", strings);
|
||||
SendString(sentence);
|
||||
}
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class PositionAltitudePidsVm : DoubleVm<PositionHoldConfigVm,AltitudeHoldConfigVm>
|
||||
{
|
||||
public PositionAltitudePidsVm() : base(new PositionHoldConfigVm(), new AltitudeHoldConfigVm())
|
||||
{
|
||||
}
|
||||
|
||||
public override string Name
|
||||
{
|
||||
get { return "Position & Altitude"; }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,9 +1,10 @@
|
||||
using System;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class PositionHoldConfigVm : ConfigWithPidsBase
|
||||
public class PositionHoldConfigVm : ConfigWithPidsBase, IPresentationModel, ItalksToApm
|
||||
{
|
||||
public PositionHoldConfigVm(IComms sp)
|
||||
: base(sp)
|
||||
public PositionHoldConfigVm()
|
||||
{
|
||||
PropsInUpdateOrder = new[]
|
||||
{
|
||||
@ -33,22 +34,41 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
//C[P GPS ROLL];[I GPS ROLL];[D GPS ROLL];[P GPS PITCH];[I GPS PITCH];[D GPS PITCH];[GPS MAX ANGLE];[GEOG Correction factor]
|
||||
public void UpdateValues()
|
||||
{
|
||||
SendPropsWithCommand("C");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this,new sendTextToApmEventArgs(ComposePropsWithCommand("C")));
|
||||
}
|
||||
|
||||
public void RefreshValues()
|
||||
{
|
||||
SendString("D");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this,new sendTextToApmEventArgs("D"));
|
||||
}
|
||||
|
||||
protected override void OnActivated()
|
||||
public string Name
|
||||
{
|
||||
get { return "Position Hold"; }
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
RefreshValues();
|
||||
}
|
||||
|
||||
public override string Name
|
||||
public void DeActivate()
|
||||
{
|
||||
get { return "Position Hold"; }
|
||||
|
||||
}
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
PopulatePropsFromUpdate(strRx,true);
|
||||
if (updatedByApm != null)
|
||||
updatedByApm(this,EventArgs.Empty);
|
||||
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
}
|
||||
}
|
@ -1,9 +1,10 @@
|
||||
using System;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class StableModeConfigVm : ConfigWithPidsBase
|
||||
public class StableModeConfigVm : ConfigWithPidsBase, IPresentationModel, ItalksToApm
|
||||
{
|
||||
public StableModeConfigVm(IComms sp)
|
||||
: base(sp)
|
||||
public StableModeConfigVm()
|
||||
{
|
||||
PropsInUpdateOrder = new[]
|
||||
{
|
||||
@ -39,22 +40,39 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
|
||||
private void RefreshValues()
|
||||
{
|
||||
SendString("B");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("B"));
|
||||
|
||||
}
|
||||
|
||||
public void UpdateValues()
|
||||
{
|
||||
SendPropsWithCommand("A");
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this,new sendTextToApmEventArgs(ComposePropsWithCommand("A")));
|
||||
}
|
||||
|
||||
protected override void OnActivated()
|
||||
public string Name
|
||||
{
|
||||
get { return "Stable Mode"; }
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
RefreshValues();
|
||||
}
|
||||
|
||||
public override string Name
|
||||
public void DeActivate()
|
||||
{
|
||||
get { return "Stable Mode"; }
|
||||
|
||||
}
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
PopulatePropsFromUpdate(strRx,true);
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
}
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace ArducopterConfigurator.PresentationModels
|
||||
{
|
||||
public class TransmitterChannelsVm : MonitorVm
|
||||
public class TransmitterChannelsVm : VmBase, ItalksToApm, IPresentationModel
|
||||
{
|
||||
public TransmitterChannelsVm(IComms sp) : base(sp)
|
||||
public TransmitterChannelsVm()
|
||||
{
|
||||
PropsInUpdateOrder = new[]
|
||||
{
|
||||
@ -36,6 +37,11 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
|
||||
public ICommand ResetCommand { get; private set; }
|
||||
|
||||
public int RollMidValue { get; set; }
|
||||
public int PitchMidValue { get; set; }
|
||||
public int YawMidValue { get; set; }
|
||||
|
||||
|
||||
private int _roll;
|
||||
public int Roll
|
||||
{
|
||||
@ -281,25 +287,33 @@ namespace ArducopterConfigurator.PresentationModels
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected override void OnActivated()
|
||||
{
|
||||
SendString("U");
|
||||
}
|
||||
|
||||
protected override void OnDeactivated()
|
||||
{
|
||||
SendString("X");
|
||||
}
|
||||
|
||||
protected override void OnStringReceived(string strReceived)
|
||||
{
|
||||
PopulatePropsFromUpdate(strReceived,false);
|
||||
}
|
||||
|
||||
public override string Name
|
||||
public string Name
|
||||
{
|
||||
get { return "Transmitter Channels"; }
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("U"));
|
||||
|
||||
}
|
||||
|
||||
public void DeActivate()
|
||||
{
|
||||
if (sendTextToApm != null)
|
||||
sendTextToApm(this, new sendTextToApmEventArgs("X"));
|
||||
|
||||
}
|
||||
|
||||
public event EventHandler updatedByApm;
|
||||
|
||||
public void handleLineOfText(string strRx)
|
||||
{
|
||||
PopulatePropsFromUpdate(strRx, false);
|
||||
|
||||
}
|
||||
|
||||
public event EventHandler<sendTextToApmEventArgs> sendTextToApm;
|
||||
}
|
||||
}
|
96
Configurator/Configurator.Net/PresentationModels/VmBase.cs
Normal file
96
Configurator/Configurator.Net/PresentationModels/VmBase.cs
Normal file
@ -0,0 +1,96 @@
|
||||
using System;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
public abstract class VmBase : NotifyProperyChangedBase
|
||||
{
|
||||
protected string[] PropsInUpdateOrder;
|
||||
|
||||
// Common method for creating the update data
|
||||
// sentence sent to APM is the commandChar followed by the property
|
||||
// vals in the correct order, seperated by semicolons
|
||||
protected string ComposePropsWithCommand(string commandChar)
|
||||
{
|
||||
var strings = new string[PropsInUpdateOrder.Length];
|
||||
for (int i = 0; i < PropsInUpdateOrder.Length; i++)
|
||||
{
|
||||
var prop = this.GetType().GetProperty(PropsInUpdateOrder[i]);
|
||||
|
||||
if (prop.PropertyType == typeof(bool))
|
||||
strings[i] = ((bool)prop.GetValue(this, null)) ? "1" : "0";
|
||||
else
|
||||
strings[i] = prop.GetValue(this, null).ToString();
|
||||
|
||||
}
|
||||
|
||||
return commandChar + string.Join(";", strings);
|
||||
}
|
||||
|
||||
// Common method for populating properties, using a hardcoded
|
||||
// property update order, and reflection to get the property type
|
||||
protected void PopulatePropsFromUpdate(string strRx, bool fireInpc)
|
||||
{
|
||||
|
||||
var strs = strRx.Split(',');
|
||||
|
||||
if (PropsInUpdateOrder.Length != strs.Length)
|
||||
{
|
||||
Console.WriteLine("Processing update with " + strs.Length
|
||||
+ " values, but have " + PropsInUpdateOrder.Length
|
||||
+ " properties to populate. Ignoring this update");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < PropsInUpdateOrder.Length; i++)
|
||||
{
|
||||
var prop = this.GetType().GetProperty(PropsInUpdateOrder[i]);
|
||||
var s = strs[i];
|
||||
object value = null;
|
||||
|
||||
if (prop == null)
|
||||
{
|
||||
Console.WriteLine("Trying to set non existant property: " + PropsInUpdateOrder[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
if (prop.PropertyType == typeof(float))
|
||||
{
|
||||
float val;
|
||||
if (!float.TryParse(s, out val))
|
||||
{
|
||||
Console.WriteLine("Error parsing float: {0}, VM: {1}" + s, "TODO");
|
||||
break;
|
||||
}
|
||||
value = val;
|
||||
}
|
||||
if (prop.PropertyType == typeof(bool))
|
||||
{
|
||||
float val;
|
||||
if (!float.TryParse(s, out val))
|
||||
{
|
||||
Console.WriteLine("Error parsing float (bool): {0}, VM: {1}" + s, "TODO");
|
||||
break;
|
||||
}
|
||||
value = val != 0.0;
|
||||
}
|
||||
|
||||
if (prop.PropertyType == typeof(int))
|
||||
{
|
||||
int val;
|
||||
if (!int.TryParse(s, out val))
|
||||
{
|
||||
Console.WriteLine("Error parsing int:{0}, VM: {1}" + s, "TODO");
|
||||
break;
|
||||
}
|
||||
value = val;
|
||||
}
|
||||
|
||||
prop.SetValue(this, value, null);
|
||||
|
||||
if (fireInpc)
|
||||
FirePropertyChanged(PropsInUpdateOrder[i]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,43 +1,43 @@
|
||||
using ArducopterConfigurator.PresentationModels;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ArducopterConfiguratorTest
|
||||
{
|
||||
[TestFixture]
|
||||
public class AcroModeConfigVmTest : VmTestBase<AcroModeConfigVm>
|
||||
{
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
sampleLineOfData = "1.950,0.100,0.200,1.950,0.300,0.400,3.200,0.500,0.600,0.320";
|
||||
getCommand = "P";
|
||||
setCommand = "O";
|
||||
|
||||
_mockComms = new MockComms();
|
||||
_mockComms.Connect();
|
||||
_vm = new AcroModeConfigVm(_mockComms);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void UpdateStringSentIsCorrect()
|
||||
{
|
||||
_vm.PitchP = 1.0F;
|
||||
_vm.PitchI = 2.0F;
|
||||
_vm.PitchD = 3.0F;
|
||||
_vm.RollP = 5.0F;
|
||||
_vm.RollI = 6.0F;
|
||||
_vm.RollD = 7.0F;
|
||||
_vm.YawP = 8.0F;
|
||||
_vm.YawI = 9.0F;
|
||||
_vm.YawD = 10.0F;
|
||||
_vm.TransmitterFactor = 4.0F;
|
||||
|
||||
_vm.UpdateCommand.Execute(null);
|
||||
|
||||
Assert.AreEqual(1, _mockComms.SentItems.Count);
|
||||
Assert.AreEqual("O5;6;7;1;2;3;8;9;10;4", _mockComms.SentItems[0]);
|
||||
}
|
||||
}
|
||||
//namespace ArducopterConfiguratorTest
|
||||
//{
|
||||
// [TestFixture]
|
||||
// public class AcroModeConfigVmTest : VmTestBase<AcroModeConfigVm>
|
||||
// {
|
||||
// [SetUp]
|
||||
// public void Setup()
|
||||
// {
|
||||
// sampleLineOfData = "1.950,0.100,0.200,1.950,0.300,0.400,3.200,0.500,0.600,0.320";
|
||||
// getCommand = "P";
|
||||
// setCommand = "O";
|
||||
//
|
||||
// _mockComms = new MockComms();
|
||||
// _mockComms.Connect();
|
||||
// _vm = new AcroModeConfigVm(_mockComms);
|
||||
// }
|
||||
//
|
||||
// [Test]
|
||||
// public void UpdateStringSentIsCorrect()
|
||||
// {
|
||||
// _vm.PitchP = 1.0F;
|
||||
// _vm.PitchI = 2.0F;
|
||||
// _vm.PitchD = 3.0F;
|
||||
// _vm.RollP = 5.0F;
|
||||
// _vm.RollI = 6.0F;
|
||||
// _vm.RollD = 7.0F;
|
||||
// _vm.YawP = 8.0F;
|
||||
// _vm.YawI = 9.0F;
|
||||
// _vm.YawD = 10.0F;
|
||||
// _vm.TransmitterFactor = 4.0F;
|
||||
//
|
||||
// _vm.UpdateCommand.Execute(null);
|
||||
//
|
||||
// Assert.AreEqual(1, _mockComms.SentItems.Count);
|
||||
// Assert.AreEqual("O5;6;7;1;2;3;8;9;10;4", _mockComms.SentItems[0]);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
//}
|
||||
|
@ -3,51 +3,51 @@ using NUnit.Framework;
|
||||
|
||||
namespace ArducopterConfiguratorTest
|
||||
{
|
||||
[TestFixture]
|
||||
public class AltitudeHoldVmTest : VmTestBase<AltitudeHoldConfigVm>
|
||||
{
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
sampleLineOfData = "0.800,0.200,0.300";
|
||||
getCommand = "F";
|
||||
setCommand = "E";
|
||||
|
||||
_mockComms = new MockComms();
|
||||
_mockComms.Connect();
|
||||
_vm = new AltitudeHoldConfigVm(_mockComms);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
// For whatever reason, for Altitude the properties are sent in P, D ,I
|
||||
// order, but received in P,I,D order
|
||||
public void UpdateStringSentIsCorrect()
|
||||
{
|
||||
_vm.P = 1.0F;
|
||||
_vm.I = 2.0F;
|
||||
_vm.D = 3.0F;
|
||||
|
||||
_vm.UpdateCommand.Execute(null);
|
||||
|
||||
Assert.AreEqual(1, _mockComms.SentItems.Count);
|
||||
Assert.AreEqual("E1;3;2", _mockComms.SentItems[0]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
// For whatever reason, for Altitude the properties are sent in P, D ,I
|
||||
// order, but received in P,I,D order
|
||||
public void UpdateStringReceivedPopulatesValuesCorrectly()
|
||||
{
|
||||
_vm.Activate();
|
||||
_mockComms.FireLineRecieve(sampleLineOfData);
|
||||
|
||||
Assert.AreEqual(0.8f, _vm.P);
|
||||
Assert.AreEqual(0.2f, _vm.I);
|
||||
Assert.AreEqual(0.3f, _vm.D);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// [TestFixture]
|
||||
// public class AltitudeHoldVmTest : VmTestBase<AltitudeHoldConfigVm>
|
||||
// {
|
||||
//
|
||||
// [SetUp]
|
||||
// public void Setup()
|
||||
// {
|
||||
// sampleLineOfData = "0.800,0.200,0.300";
|
||||
// getCommand = "F";
|
||||
// setCommand = "E";
|
||||
//
|
||||
// _mockComms = new MockComms();
|
||||
// _mockComms.Connect();
|
||||
// _vm = new AltitudeHoldConfigVm(_mockComms);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// [Test]
|
||||
// // For whatever reason, for Altitude the properties are sent in P, D ,I
|
||||
// // order, but received in P,I,D order
|
||||
// public void UpdateStringSentIsCorrect()
|
||||
// {
|
||||
// _vm.P = 1.0F;
|
||||
// _vm.I = 2.0F;
|
||||
// _vm.D = 3.0F;
|
||||
//
|
||||
// _vm.UpdateCommand.Execute(null);
|
||||
//
|
||||
// Assert.AreEqual(1, _mockComms.SentItems.Count);
|
||||
// Assert.AreEqual("E1;3;2", _mockComms.SentItems[0]);
|
||||
// }
|
||||
//
|
||||
// [Test]
|
||||
// // For whatever reason, for Altitude the properties are sent in P, D ,I
|
||||
// // order, but received in P,I,D order
|
||||
// public void UpdateStringReceivedPopulatesValuesCorrectly()
|
||||
// {
|
||||
// _vm.Activate();
|
||||
// _mockComms.FireLineRecieve(sampleLineOfData);
|
||||
//
|
||||
// Assert.AreEqual(0.8f, _vm.P);
|
||||
// Assert.AreEqual(0.2f, _vm.I);
|
||||
// Assert.AreEqual(0.3f, _vm.D);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
@ -3,21 +3,21 @@ using NUnit.Framework;
|
||||
|
||||
namespace ArducopterConfiguratorTest
|
||||
{
|
||||
[TestFixture]
|
||||
public class CalibrationOffsetsDataVmTest : VmTestBase<CalibrationOffsetsDataVm>
|
||||
{
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
sampleLineOfData = "0.100,0.200,0.300,0.400,0.500,0.600";
|
||||
getCommand = "J";
|
||||
setCommand = "I";
|
||||
|
||||
_mockComms = new MockComms();
|
||||
_mockComms.Connect();
|
||||
_vm = new CalibrationOffsetsDataVm(_mockComms);
|
||||
}
|
||||
|
||||
}
|
||||
// [TestFixture]
|
||||
// public class CalibrationOffsetsDataVmTest : VmTestBase<CalibrationOffsetsDataVm>
|
||||
// {
|
||||
//
|
||||
// [SetUp]
|
||||
// public void Setup()
|
||||
// {
|
||||
// sampleLineOfData = "0.100,0.200,0.300,0.400,0.500,0.600";
|
||||
// getCommand = "J";
|
||||
// setCommand = "I";
|
||||
//
|
||||
// _mockComms = new MockComms();
|
||||
// _mockComms.Connect();
|
||||
// _vm = new CalibrationOffsetsDataVm(_mockComms);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
}
|
@ -3,21 +3,21 @@ using NUnit.Framework;
|
||||
|
||||
namespace ArducopterConfiguratorTest
|
||||
{
|
||||
[TestFixture]
|
||||
public class PositionHoldConfigVmTest : VmTestBase<PositionHoldConfigVm>
|
||||
{
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
sampleLineOfData = "0.015,0.005,0.010,0.015,0.005,0.010,22.000,0.870";
|
||||
getCommand = "D";
|
||||
setCommand = "C";
|
||||
|
||||
_mockComms = new MockComms();
|
||||
_mockComms.Connect();
|
||||
_vm = new PositionHoldConfigVm(_mockComms);
|
||||
}
|
||||
|
||||
}
|
||||
// [TestFixture]
|
||||
// public class PositionHoldConfigVmTest : VmTestBase<PositionHoldConfigVm>
|
||||
// {
|
||||
//
|
||||
// [SetUp]
|
||||
// public void Setup()
|
||||
// {
|
||||
// sampleLineOfData = "0.015,0.005,0.010,0.015,0.005,0.010,22.000,0.870";
|
||||
// getCommand = "D";
|
||||
// setCommand = "C";
|
||||
//
|
||||
// _mockComms = new MockComms();
|
||||
// _mockComms.Connect();
|
||||
// _vm = new PositionHoldConfigVm(_mockComms);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
}
|
@ -3,73 +3,73 @@ using NUnit.Framework;
|
||||
|
||||
namespace ArducopterConfiguratorTest
|
||||
{
|
||||
[TestFixture]
|
||||
public class StableModeConfigVmTest : VmTestBase<StableModeConfigVm>
|
||||
{
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
sampleLineOfData = "1.950,0.100,0.200,1.950,0.300,0.400,3.200,0.500,0.600,0.320,1.00";
|
||||
getCommand = "B";
|
||||
setCommand = "A";
|
||||
|
||||
_mockComms = new MockComms();
|
||||
_mockComms.Connect();
|
||||
_vm = new StableModeConfigVm(_mockComms);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void UpdateStringSentIsCorrect()
|
||||
{
|
||||
_vm.PitchP = 1.0F;
|
||||
_vm.PitchI = 2.0F;
|
||||
_vm.PitchD = 3.0F;
|
||||
_vm.RollP = 5.0F;
|
||||
_vm.RollI = 6.0F;
|
||||
_vm.RollD = 7.0F;
|
||||
_vm.YawP = 8.0F;
|
||||
_vm.YawI = 9.0F;
|
||||
_vm.YawD = 10.0F;
|
||||
_vm.MagnetometerEnable = true;
|
||||
_vm.KPrate = 4.0F;
|
||||
|
||||
_vm.UpdateCommand.Execute(null);
|
||||
|
||||
|
||||
Assert.AreEqual(1, _mockComms.SentItems.Count);
|
||||
|
||||
//A[KP Quad Roll];[KI Quad Roll];[KP RATE ROLL];
|
||||
// [KP Quad Pitch];[KI Quad Pitch];[KP RATE PITCH];
|
||||
// [KP Quad Yaw];[KI Quad Yaw];[KP Rate Yaw];
|
||||
// [KP Rate];[Magneto]
|
||||
Assert.AreEqual("A5;6;7;1;2;3;8;9;10;4;1", _mockComms.SentItems[0]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public void UpdateStringReceivedPopulatesValuesCorrectly()
|
||||
{
|
||||
_vm.Activate();
|
||||
_mockComms.FireLineRecieve(sampleLineOfData);
|
||||
|
||||
Assert.AreEqual(1.95f, _vm.RollP);
|
||||
Assert.AreEqual(0.1f, _vm.RollI);
|
||||
Assert.AreEqual(0.2f, _vm.RollD);
|
||||
|
||||
Assert.AreEqual(1.95f, _vm.PitchP);
|
||||
Assert.AreEqual(0.3f, _vm.PitchI);
|
||||
Assert.AreEqual(0.4f, _vm.PitchD);
|
||||
|
||||
Assert.AreEqual(3.2f, _vm.YawP);
|
||||
Assert.AreEqual(0.5f, _vm.YawI);
|
||||
Assert.AreEqual(0.6f, _vm.YawD);
|
||||
|
||||
Assert.AreEqual(0.32f, _vm.KPrate);
|
||||
|
||||
Assert.AreEqual(true, _vm.MagnetometerEnable);
|
||||
|
||||
}
|
||||
}
|
||||
// [TestFixture]
|
||||
// public class StableModeConfigVmTest : VmTestBase<StableModeConfigVm>
|
||||
// {
|
||||
//
|
||||
// [SetUp]
|
||||
// public void Setup()
|
||||
// {
|
||||
// sampleLineOfData = "1.950,0.100,0.200,1.950,0.300,0.400,3.200,0.500,0.600,0.320,1.00";
|
||||
// getCommand = "B";
|
||||
// setCommand = "A";
|
||||
//
|
||||
// _mockComms = new MockComms();
|
||||
// _mockComms.Connect();
|
||||
// _vm = new StableModeConfigVm(_mockComms);
|
||||
// }
|
||||
//
|
||||
// [Test]
|
||||
// public void UpdateStringSentIsCorrect()
|
||||
// {
|
||||
// _vm.PitchP = 1.0F;
|
||||
// _vm.PitchI = 2.0F;
|
||||
// _vm.PitchD = 3.0F;
|
||||
// _vm.RollP = 5.0F;
|
||||
// _vm.RollI = 6.0F;
|
||||
// _vm.RollD = 7.0F;
|
||||
// _vm.YawP = 8.0F;
|
||||
// _vm.YawI = 9.0F;
|
||||
// _vm.YawD = 10.0F;
|
||||
// _vm.MagnetometerEnable = true;
|
||||
// _vm.KPrate = 4.0F;
|
||||
//
|
||||
// _vm.UpdateCommand.Execute(null);
|
||||
//
|
||||
//
|
||||
// Assert.AreEqual(1, _mockComms.SentItems.Count);
|
||||
//
|
||||
// //A[KP Quad Roll];[KI Quad Roll];[KP RATE ROLL];
|
||||
// // [KP Quad Pitch];[KI Quad Pitch];[KP RATE PITCH];
|
||||
// // [KP Quad Yaw];[KI Quad Yaw];[KP Rate Yaw];
|
||||
// // [KP Rate];[Magneto]
|
||||
// Assert.AreEqual("A5;6;7;1;2;3;8;9;10;4;1", _mockComms.SentItems[0]);
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
// [Test]
|
||||
// public void UpdateStringReceivedPopulatesValuesCorrectly()
|
||||
// {
|
||||
// _vm.Activate();
|
||||
// _mockComms.FireLineRecieve(sampleLineOfData);
|
||||
//
|
||||
// Assert.AreEqual(1.95f, _vm.RollP);
|
||||
// Assert.AreEqual(0.1f, _vm.RollI);
|
||||
// Assert.AreEqual(0.2f, _vm.RollD);
|
||||
//
|
||||
// Assert.AreEqual(1.95f, _vm.PitchP);
|
||||
// Assert.AreEqual(0.3f, _vm.PitchI);
|
||||
// Assert.AreEqual(0.4f, _vm.PitchD);
|
||||
//
|
||||
// Assert.AreEqual(3.2f, _vm.YawP);
|
||||
// Assert.AreEqual(0.5f, _vm.YawI);
|
||||
// Assert.AreEqual(0.6f, _vm.YawD);
|
||||
//
|
||||
// Assert.AreEqual(0.32f, _vm.KPrate);
|
||||
//
|
||||
// Assert.AreEqual(true, _vm.MagnetometerEnable);
|
||||
//
|
||||
// }
|
||||
// }
|
||||
}
|
@ -3,75 +3,85 @@ using NUnit.Framework;
|
||||
|
||||
namespace ArducopterConfiguratorTest
|
||||
{
|
||||
[TestFixture]
|
||||
public class TransmitterChannelsVmTests
|
||||
{
|
||||
private MockComms _mockComms;
|
||||
private TransmitterChannelsVm _vm;
|
||||
// [TestFixture]
|
||||
// public class TransmitterChannelsVmTests
|
||||
// {
|
||||
// private MockComms _mockComms;
|
||||
// private TransmitterChannelsVm _vm;
|
||||
//
|
||||
// [SetUp]
|
||||
// public void Setup()
|
||||
// {
|
||||
// _mockComms = new MockComms();
|
||||
// _mockComms.Connect();
|
||||
// _vm = new TransmitterChannelsVm(_mockComms);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// [Test]
|
||||
// public void SendsCorrectCommandOnActivate()
|
||||
// {
|
||||
// _vm.Activate();
|
||||
// Assert.AreEqual(1,_mockComms.SentItems.Count);
|
||||
// Assert.AreEqual("U",_mockComms.SentItems[0]);
|
||||
// }
|
||||
//
|
||||
// [Test]
|
||||
// public void SendsCorrectCommandOnDeActivate()
|
||||
// {
|
||||
// _vm.Activate();
|
||||
// _vm.DeActivate();
|
||||
//
|
||||
// Assert.AreEqual(2, _mockComms.SentItems.Count);
|
||||
// Assert.AreEqual("X", _mockComms.SentItems[1]);
|
||||
// }
|
||||
//
|
||||
// [Test]
|
||||
// public void ValuesAreSet()
|
||||
// {
|
||||
// _vm.Activate();
|
||||
// // What do the MID values do?
|
||||
// //1403,1620,1523,1501,1900,1950,0,0,0
|
||||
// // Aileron,Elevator,Yaw,Throttle,AUX1 (Mode),AUX2 ,Roll MID value,Pitch MID value,Yaw MID Value
|
||||
//
|
||||
// var sampleData = "1403,1620,1523,1501,1900,1950,0,0,0";
|
||||
// _mockComms.FireLineRecieve(sampleData);
|
||||
// Assert.AreEqual(1403, _vm.Roll);
|
||||
// Assert.AreEqual(1620, _vm.Pitch);
|
||||
// Assert.AreEqual(1523, _vm.Yaw);
|
||||
// Assert.AreEqual(1501, _vm.Throttle);
|
||||
// Assert.AreEqual(1900, _vm.Mode);
|
||||
// Assert.AreEqual(1950, _vm.Aux);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// [Test]
|
||||
// public void MaximumsAndMinimumsAreSet()
|
||||
// {
|
||||
// _vm.Activate();
|
||||
// // What do the MID values do?
|
||||
// //1403,1620,1523,1501,1900,1950,0,0,0
|
||||
// // Aileron,Elevator,Yaw,Throttle,AUX1 (Mode),AUX2 ,Roll MID value,Pitch MID value,Yaw MID Value
|
||||
//
|
||||
// var sampleData = "1403,1620,1523,1501,1900,1950,0,0,0";
|
||||
// _mockComms.FireLineRecieve(sampleData);
|
||||
// _vm.ResetCommand.Execute(null);
|
||||
// _mockComms.FireLineRecieve(sampleData);
|
||||
//
|
||||
// Assert.AreEqual(1403,_vm.Roll);
|
||||
// Assert.AreEqual(1403,_vm.RollMin);
|
||||
// Assert.AreEqual(1403,_vm.RollMax);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
}
|
||||
/*
|
||||
roll_slope,ch_roll_offset,
|
||||
ch_pitch_slope,ch_pitch_offset
|
||||
ch_yaw_slope,ch_yaw_offset,
|
||||
ch_throttle_slope,ch_throttle_offset
|
||||
ch_aux_slope,ch_aux_offset
|
||||
ch_aux2_slope,ch_aux2_offset
|
||||
*/
|
||||
// 1.20,-327.73,1.20,-328.92,1.21,-344.66,1.21,-343.83,1.79,-1225.81,1.79,-1227.60
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_mockComms = new MockComms();
|
||||
_mockComms.Connect();
|
||||
_vm = new TransmitterChannelsVm(_mockComms);
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SendsCorrectCommandOnActivate()
|
||||
{
|
||||
_vm.Activate();
|
||||
Assert.AreEqual(1,_mockComms.SentItems.Count);
|
||||
Assert.AreEqual("U",_mockComms.SentItems[0]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SendsCorrectCommandOnDeActivate()
|
||||
{
|
||||
_vm.Activate();
|
||||
_vm.DeActivate();
|
||||
|
||||
Assert.AreEqual(2, _mockComms.SentItems.Count);
|
||||
Assert.AreEqual("X", _mockComms.SentItems[1]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValuesAreSet()
|
||||
{
|
||||
_vm.Activate();
|
||||
// What do the MID values do?
|
||||
//1403,1620,1523,1501,1900,1950,0,0,0
|
||||
// Aileron,Elevator,Yaw,Throttle,AUX1 (Mode),AUX2 ,Roll MID value,Pitch MID value,Yaw MID Value
|
||||
|
||||
var sampleData = "1403,1620,1523,1501,1900,1950,0,0,0";
|
||||
_mockComms.FireLineRecieve(sampleData);
|
||||
Assert.AreEqual(1403, _vm.Roll);
|
||||
Assert.AreEqual(1620, _vm.Pitch);
|
||||
Assert.AreEqual(1523, _vm.Yaw);
|
||||
Assert.AreEqual(1501, _vm.Throttle);
|
||||
Assert.AreEqual(1900, _vm.Mode);
|
||||
Assert.AreEqual(1950, _vm.Aux);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void MaximumsAndMinimumsAreSet()
|
||||
{
|
||||
_vm.Activate();
|
||||
// What do the MID values do?
|
||||
//1403,1620,1523,1501,1900,1950,0,0,0
|
||||
// Aileron,Elevator,Yaw,Throttle,AUX1 (Mode),AUX2 ,Roll MID value,Pitch MID value,Yaw MID Value
|
||||
|
||||
var sampleData = "1403,1620,1523,1501,1900,1950,0,0,0";
|
||||
_mockComms.FireLineRecieve(sampleData);
|
||||
_vm.ResetCommand.Execute(null);
|
||||
_mockComms.FireLineRecieve(sampleData);
|
||||
|
||||
Assert.AreEqual(1403,_vm.Roll);
|
||||
Assert.AreEqual(1403,_vm.RollMin);
|
||||
Assert.AreEqual(1403,_vm.RollMax);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -30,12 +30,12 @@
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
this.AcroModeConfigVmBindingSource = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.groupBox4 = new System.Windows.Forms.GroupBox();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.textBox7 = new System.Windows.Forms.TextBox();
|
||||
this.AcroModeConfigVmBindingSource = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.textBox8 = new System.Windows.Forms.TextBox();
|
||||
this.textBox9 = new System.Windows.Forms.TextBox();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
@ -55,23 +55,27 @@
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.textBox10 = new System.Windows.Forms.TextBox();
|
||||
this.label10 = new System.Windows.Forms.Label();
|
||||
this.groupBox4.SuspendLayout();
|
||||
this.toolTips = new System.Windows.Forms.ToolTip(this.components);
|
||||
((System.ComponentModel.ISupportInitialize)(this.AcroModeConfigVmBindingSource)).BeginInit();
|
||||
this.groupBox4.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.groupBox3.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// button2
|
||||
//
|
||||
this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AcroModeConfigVmBindingSource, "RefreshCommand", true));
|
||||
this.button2.Location = new System.Drawing.Point(198, 135);
|
||||
this.button2.Location = new System.Drawing.Point(125, 109);
|
||||
this.button2.Name = "button2";
|
||||
this.button2.Size = new System.Drawing.Size(74, 23);
|
||||
this.button2.Size = new System.Drawing.Size(65, 23);
|
||||
this.button2.TabIndex = 12;
|
||||
this.button2.Text = "Refresh";
|
||||
this.button2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// AcroModeConfigVmBindingSource
|
||||
//
|
||||
this.AcroModeConfigVmBindingSource.DataSource = typeof(ArducopterConfigurator.PresentationModels.AcroModeConfigVm);
|
||||
//
|
||||
// groupBox4
|
||||
//
|
||||
this.groupBox4.Controls.Add(this.label7);
|
||||
@ -80,9 +84,9 @@
|
||||
this.groupBox4.Controls.Add(this.textBox7);
|
||||
this.groupBox4.Controls.Add(this.textBox8);
|
||||
this.groupBox4.Controls.Add(this.textBox9);
|
||||
this.groupBox4.Location = new System.Drawing.Point(234, 6);
|
||||
this.groupBox4.Location = new System.Drawing.Point(181, 6);
|
||||
this.groupBox4.Name = "groupBox4";
|
||||
this.groupBox4.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox4.Size = new System.Drawing.Size(80, 101);
|
||||
this.groupBox4.TabIndex = 11;
|
||||
this.groupBox4.TabStop = false;
|
||||
this.groupBox4.Text = "Yaw";
|
||||
@ -119,19 +123,15 @@
|
||||
this.textBox7.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "YawD", true));
|
||||
this.textBox7.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox7.Name = "textBox7";
|
||||
this.textBox7.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox7.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox7.TabIndex = 2;
|
||||
//
|
||||
// AcroModeConfigVmBindingSource
|
||||
//
|
||||
this.AcroModeConfigVmBindingSource.DataSource = typeof(ArducopterConfigurator.PresentationModels.AcroModeConfigVm);
|
||||
//
|
||||
// textBox8
|
||||
//
|
||||
this.textBox8.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "YawI", true));
|
||||
this.textBox8.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox8.Name = "textBox8";
|
||||
this.textBox8.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox8.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox8.TabIndex = 1;
|
||||
//
|
||||
// textBox9
|
||||
@ -139,7 +139,7 @@
|
||||
this.textBox9.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "YawP", true));
|
||||
this.textBox9.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox9.Name = "textBox9";
|
||||
this.textBox9.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox9.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox9.TabIndex = 0;
|
||||
//
|
||||
// groupBox2
|
||||
@ -150,9 +150,9 @@
|
||||
this.groupBox2.Controls.Add(this.textBox4);
|
||||
this.groupBox2.Controls.Add(this.textBox5);
|
||||
this.groupBox2.Controls.Add(this.textBox6);
|
||||
this.groupBox2.Location = new System.Drawing.Point(120, 6);
|
||||
this.groupBox2.Location = new System.Drawing.Point(94, 6);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox2.Size = new System.Drawing.Size(81, 101);
|
||||
this.groupBox2.TabIndex = 10;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Pitch";
|
||||
@ -189,7 +189,7 @@
|
||||
this.textBox4.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "PitchD", true));
|
||||
this.textBox4.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox4.Name = "textBox4";
|
||||
this.textBox4.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox4.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox4.TabIndex = 2;
|
||||
//
|
||||
// textBox5
|
||||
@ -197,7 +197,7 @@
|
||||
this.textBox5.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "PitchI", true));
|
||||
this.textBox5.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox5.Name = "textBox5";
|
||||
this.textBox5.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox5.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox5.TabIndex = 1;
|
||||
//
|
||||
// textBox6
|
||||
@ -205,7 +205,7 @@
|
||||
this.textBox6.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "PitchP", true));
|
||||
this.textBox6.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox6.Name = "textBox6";
|
||||
this.textBox6.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox6.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox6.TabIndex = 0;
|
||||
//
|
||||
// groupBox3
|
||||
@ -218,7 +218,7 @@
|
||||
this.groupBox3.Controls.Add(this.textBox1);
|
||||
this.groupBox3.Location = new System.Drawing.Point(6, 5);
|
||||
this.groupBox3.Name = "groupBox3";
|
||||
this.groupBox3.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox3.Size = new System.Drawing.Size(82, 101);
|
||||
this.groupBox3.TabIndex = 9;
|
||||
this.groupBox3.TabStop = false;
|
||||
this.groupBox3.Text = "Roll";
|
||||
@ -255,7 +255,7 @@
|
||||
this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "RollD", true));
|
||||
this.textBox3.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox3.Name = "textBox3";
|
||||
this.textBox3.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox3.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox3.TabIndex = 2;
|
||||
//
|
||||
// textBox2
|
||||
@ -263,7 +263,7 @@
|
||||
this.textBox2.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "RollI", true));
|
||||
this.textBox2.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox2.Name = "textBox2";
|
||||
this.textBox2.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox2.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox2.TabIndex = 1;
|
||||
//
|
||||
// textBox1
|
||||
@ -271,16 +271,15 @@
|
||||
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "RollP", true));
|
||||
this.textBox1.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox1.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox1.TabIndex = 0;
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.AcroModeConfigVmBindingSource, "UpdateCommand", true));
|
||||
this.button1.Location = new System.Drawing.Point(278, 135);
|
||||
this.button1.Location = new System.Drawing.Point(196, 109);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(74, 23);
|
||||
this.button1.Size = new System.Drawing.Size(65, 23);
|
||||
this.button1.TabIndex = 8;
|
||||
this.button1.Text = "Update";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
@ -288,19 +287,21 @@
|
||||
// textBox10
|
||||
//
|
||||
this.textBox10.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.AcroModeConfigVmBindingSource, "TransmitterFactor", true));
|
||||
this.textBox10.Location = new System.Drawing.Point(70, 128);
|
||||
this.textBox10.Location = new System.Drawing.Point(64, 112);
|
||||
this.textBox10.Name = "textBox10";
|
||||
this.textBox10.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox10.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox10.TabIndex = 6;
|
||||
//
|
||||
// label10
|
||||
//
|
||||
this.label10.AutoSize = true;
|
||||
this.label10.Location = new System.Drawing.Point(13, 130);
|
||||
this.label10.Location = new System.Drawing.Point(7, 114);
|
||||
this.label10.Name = "label10";
|
||||
this.label10.Size = new System.Drawing.Size(55, 13);
|
||||
this.label10.TabIndex = 6;
|
||||
this.label10.Text = "Tx Factor:";
|
||||
this.toolTips.SetToolTip(this.label10, " A higher number will cause a change in a transmitter stick position to have a st" +
|
||||
"ronger effect on the ArduPirate");
|
||||
//
|
||||
// AcroConfigView
|
||||
//
|
||||
@ -314,10 +315,10 @@
|
||||
this.Controls.Add(this.groupBox3);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Name = "AcroConfigView";
|
||||
this.Size = new System.Drawing.Size(355, 161);
|
||||
this.Size = new System.Drawing.Size(271, 136);
|
||||
((System.ComponentModel.ISupportInitialize)(this.AcroModeConfigVmBindingSource)).EndInit();
|
||||
this.groupBox4.ResumeLayout(false);
|
||||
this.groupBox4.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.AcroModeConfigVmBindingSource)).EndInit();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.groupBox3.ResumeLayout(false);
|
||||
@ -355,5 +356,6 @@
|
||||
private System.Windows.Forms.TextBox textBox10;
|
||||
private System.Windows.Forms.Label label10;
|
||||
private System.Windows.Forms.BindingSource AcroModeConfigVmBindingSource;
|
||||
private System.Windows.Forms.ToolTip toolTips;
|
||||
}
|
||||
}
|
||||
|
@ -17,12 +17,12 @@ namespace ArducopterConfigurator.Views
|
||||
BindButtons();
|
||||
}
|
||||
|
||||
public override void SetDataContext(AcroModeConfigVm model)
|
||||
public override void SetDataContext(AcroModeConfigVm vm)
|
||||
{
|
||||
AcroModeConfigVmBindingSource.DataSource = model;
|
||||
AcroModeConfigVmBindingSource.DataSource = vm;
|
||||
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => AcroModeConfigVmBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => AcroModeConfigVmBindingSource.ResetBindings(false));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -120,4 +120,7 @@
|
||||
<metadata name="AcroModeConfigVmBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>259, 17</value>
|
||||
</metadata>
|
||||
</root>
|
@ -17,12 +17,12 @@ namespace ArducopterConfigurator.Views
|
||||
BindButtons();
|
||||
}
|
||||
|
||||
public override void SetDataContext(AltitudeHoldConfigVm model)
|
||||
public override void SetDataContext(AltitudeHoldConfigVm vm)
|
||||
{
|
||||
AltitudeHoldConfigBindingSource.DataSource = model;
|
||||
AltitudeHoldConfigBindingSource.DataSource = vm;
|
||||
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => AltitudeHoldConfigBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => AltitudeHoldConfigBindingSource.ResetBindings(false));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,13 +17,13 @@ namespace ArducopterConfigurator.Views
|
||||
BindButtons();
|
||||
}
|
||||
|
||||
public override void SetDataContext(CalibrationOffsetsDataVm model)
|
||||
public override void SetDataContext(CalibrationOffsetsDataVm vm)
|
||||
{
|
||||
calibrationOffsetsDataVmBindingSource.DataSource = model;
|
||||
calibrationOffsetsDataVmBindingSource.DataSource = vm;
|
||||
|
||||
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => calibrationOffsetsDataVmBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => calibrationOffsetsDataVmBindingSource.ResetBindings(false));
|
||||
}
|
||||
}
|
||||
|
||||
|
131
Configurator/Configurator.Net/Views/FlightControlPidsView.Designer.cs
generated
Normal file
131
Configurator/Configurator.Net/Views/FlightControlPidsView.Designer.cs
generated
Normal file
@ -0,0 +1,131 @@
|
||||
using ArducopterConfigurator.PresentationModels;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
partial class FlightControlPidsView
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.txtSend = new System.Windows.Forms.TextBox();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.FlightControlPidsBindingSource = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.stableConfigView1 = new ArducopterConfigurator.Views.StableConfigView();
|
||||
this.acroConfigView1 = new ArducopterConfigurator.Views.AcroConfigView();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.FlightControlPidsBindingSource)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// txtSend
|
||||
//
|
||||
this.txtSend.Location = new System.Drawing.Point(-167, 167);
|
||||
this.txtSend.Name = "txtSend";
|
||||
this.txtSend.Size = new System.Drawing.Size(10, 20);
|
||||
this.txtSend.TabIndex = 4;
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.button1.Location = new System.Drawing.Point(838, 753);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(104, 23);
|
||||
this.button1.TabIndex = 6;
|
||||
this.button1.Text = "Send Command";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.stableConfigView1);
|
||||
this.groupBox1.Location = new System.Drawing.Point(7, 9);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(283, 162);
|
||||
this.groupBox1.TabIndex = 9;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Stable Mode";
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.acroConfigView1);
|
||||
this.groupBox2.Location = new System.Drawing.Point(7, 177);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(283, 167);
|
||||
this.groupBox2.TabIndex = 10;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Acro Mode";
|
||||
//
|
||||
// FlightControlPidsBindingSource
|
||||
//
|
||||
this.FlightControlPidsBindingSource.DataSource = typeof(ArducopterConfigurator.PresentationModels.FlightControlPidsVm);
|
||||
//
|
||||
// stableConfigView1
|
||||
//
|
||||
this.stableConfigView1.Location = new System.Drawing.Point(7, 20);
|
||||
this.stableConfigView1.Name = "stableConfigView1";
|
||||
this.stableConfigView1.Size = new System.Drawing.Size(271, 135);
|
||||
this.stableConfigView1.TabIndex = 0;
|
||||
//
|
||||
// acroConfigView1
|
||||
//
|
||||
this.acroConfigView1.Location = new System.Drawing.Point(7, 20);
|
||||
this.acroConfigView1.Name = "acroConfigView1";
|
||||
this.acroConfigView1.Size = new System.Drawing.Size(271, 136);
|
||||
this.acroConfigView1.TabIndex = 0;
|
||||
//
|
||||
// FlightControlPidsView
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSize = true;
|
||||
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Controls.Add(this.txtSend);
|
||||
this.Name = "FlightControlPidsView";
|
||||
this.Size = new System.Drawing.Size(400, 300);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.FlightControlPidsBindingSource)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox txtSend;
|
||||
private System.Windows.Forms.BindingSource FlightControlPidsBindingSource;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private ArducopterConfigurator.Views.StableConfigView stableConfigView1;
|
||||
private ArducopterConfigurator.Views.AcroConfigView acroConfigView1;
|
||||
}
|
||||
}
|
38
Configurator/Configurator.Net/Views/FlightControlPidsView.cs
Normal file
38
Configurator/Configurator.Net/Views/FlightControlPidsView.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using ArducopterConfigurator.PresentationModels;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
public partial class FlightControlPidsView : UserControl, IView<FlightControlPidsVm>
|
||||
{
|
||||
private IPresentationModel _vm;
|
||||
|
||||
public FlightControlPidsView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void SetDataContext(FlightControlPidsVm vm)
|
||||
{
|
||||
FlightControlPidsBindingSource.DataSource = vm;
|
||||
_vm = vm;
|
||||
|
||||
stableConfigView1.SetDataContext(vm.Vm2);
|
||||
acroConfigView1.SetDataContext(vm.Vm1);
|
||||
}
|
||||
|
||||
|
||||
public Control Control
|
||||
{
|
||||
get { return this; }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
123
Configurator/Configurator.Net/Views/FlightControlPidsView.resx
Normal file
123
Configurator/Configurator.Net/Views/FlightControlPidsView.resx
Normal file
@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="FlightControlPidsBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
@ -17,12 +17,12 @@ namespace ArducopterConfigurator.views
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public override void SetDataContext(FlightDataVm model)
|
||||
public override void SetDataContext(FlightDataVm vm)
|
||||
{
|
||||
FlightDataVmBindingSource.DataSource = model;
|
||||
FlightDataVmBindingSource.DataSource = vm;
|
||||
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => FlightDataVmBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => FlightDataVmBindingSource.ResetBindings(false));
|
||||
}
|
||||
}
|
||||
// Required for VS2008 designer. No functional value
|
||||
|
@ -16,7 +16,7 @@ namespace ArducopterConfigurator.Views
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public override void SetDataContext(MotorCommandsVm model)
|
||||
public override void SetDataContext(MotorCommandsVm vm)
|
||||
{
|
||||
|
||||
}
|
||||
|
131
Configurator/Configurator.Net/Views/PositionAltitudePidsView.Designer.cs
generated
Normal file
131
Configurator/Configurator.Net/Views/PositionAltitudePidsView.Designer.cs
generated
Normal file
@ -0,0 +1,131 @@
|
||||
using ArducopterConfigurator.PresentationModels;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
partial class PositionAltitudePidsView
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.txtSend = new System.Windows.Forms.TextBox();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.altitudeHoldConfigView1 = new ArducopterConfigurator.Views.AltitudeHoldConfigView();
|
||||
this.PositionAltitudePidsBindingSource = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.positionHoldConfigView1 = new ArducopterConfigurator.Views.PositionHoldConfigView();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.PositionAltitudePidsBindingSource)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// txtSend
|
||||
//
|
||||
this.txtSend.Location = new System.Drawing.Point(-167, 167);
|
||||
this.txtSend.Name = "txtSend";
|
||||
this.txtSend.Size = new System.Drawing.Size(10, 20);
|
||||
this.txtSend.TabIndex = 4;
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.button1.Location = new System.Drawing.Point(980, 929);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(104, 23);
|
||||
this.button1.TabIndex = 6;
|
||||
this.button1.Text = "Send Command";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.positionHoldConfigView1);
|
||||
this.groupBox1.Location = new System.Drawing.Point(7, 9);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(283, 162);
|
||||
this.groupBox1.TabIndex = 9;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Position Hold";
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.altitudeHoldConfigView1);
|
||||
this.groupBox2.Location = new System.Drawing.Point(7, 177);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(283, 167);
|
||||
this.groupBox2.TabIndex = 10;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Altitude Hold";
|
||||
//
|
||||
// altitudeHoldConfigView1
|
||||
//
|
||||
this.altitudeHoldConfigView1.Location = new System.Drawing.Point(7, 20);
|
||||
this.altitudeHoldConfigView1.Name = "altitudeHoldConfigView1";
|
||||
this.altitudeHoldConfigView1.Size = new System.Drawing.Size(276, 122);
|
||||
this.altitudeHoldConfigView1.TabIndex = 0;
|
||||
//
|
||||
// PositionAltitudePidsBindingSource
|
||||
//
|
||||
this.PositionAltitudePidsBindingSource.DataSource = typeof(ArducopterConfigurator.PresentationModels.FlightControlPidsVm);
|
||||
//
|
||||
// positionHoldConfigView1
|
||||
//
|
||||
this.positionHoldConfigView1.Location = new System.Drawing.Point(7, 20);
|
||||
this.positionHoldConfigView1.Name = "positionHoldConfigView1";
|
||||
this.positionHoldConfigView1.Size = new System.Drawing.Size(259, 139);
|
||||
this.positionHoldConfigView1.TabIndex = 0;
|
||||
//
|
||||
// PositionAltitudePidsView
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSize = true;
|
||||
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Controls.Add(this.txtSend);
|
||||
this.Name = "PositionAltitudePidsView";
|
||||
this.Size = new System.Drawing.Size(400, 476);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.PositionAltitudePidsBindingSource)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox txtSend;
|
||||
private System.Windows.Forms.BindingSource PositionAltitudePidsBindingSource;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private ArducopterConfigurator.Views.AltitudeHoldConfigView altitudeHoldConfigView1;
|
||||
private ArducopterConfigurator.Views.PositionHoldConfigView positionHoldConfigView1;
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using ArducopterConfigurator.PresentationModels;
|
||||
|
||||
namespace ArducopterConfigurator
|
||||
{
|
||||
public partial class PositionAltitudePidsView : UserControl, IView<PositionAltitudePidsVm>
|
||||
{
|
||||
private IPresentationModel _vm;
|
||||
|
||||
public PositionAltitudePidsView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void SetDataContext(PositionAltitudePidsVm vm)
|
||||
{
|
||||
PositionAltitudePidsBindingSource.DataSource = vm;
|
||||
_vm = vm;
|
||||
|
||||
positionHoldConfigView1.SetDataContext(vm.Vm1);
|
||||
altitudeHoldConfigView1.SetDataContext(vm.Vm2);
|
||||
}
|
||||
|
||||
|
||||
public Control Control
|
||||
{
|
||||
get { return this; }
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="FlightControlPidsBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
@ -63,9 +63,9 @@
|
||||
this.groupBox2.Controls.Add(this.textBox4);
|
||||
this.groupBox2.Controls.Add(this.textBox5);
|
||||
this.groupBox2.Controls.Add(this.textBox6);
|
||||
this.groupBox2.Location = new System.Drawing.Point(117, 4);
|
||||
this.groupBox2.Location = new System.Drawing.Point(91, 3);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox2.Size = new System.Drawing.Size(83, 101);
|
||||
this.groupBox2.TabIndex = 12;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Pitch";
|
||||
@ -102,7 +102,7 @@
|
||||
this.textBox4.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "PitchD", true));
|
||||
this.textBox4.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox4.Name = "textBox4";
|
||||
this.textBox4.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox4.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox4.TabIndex = 2;
|
||||
//
|
||||
// PositionHoldConfigBindingSource
|
||||
@ -115,7 +115,7 @@
|
||||
this.textBox5.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "PitchI", true));
|
||||
this.textBox5.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox5.Name = "textBox5";
|
||||
this.textBox5.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox5.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox5.TabIndex = 1;
|
||||
//
|
||||
// textBox6
|
||||
@ -123,7 +123,7 @@
|
||||
this.textBox6.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "PitchP", true));
|
||||
this.textBox6.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox6.Name = "textBox6";
|
||||
this.textBox6.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox6.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox6.TabIndex = 0;
|
||||
//
|
||||
// groupBox3
|
||||
@ -136,7 +136,7 @@
|
||||
this.groupBox3.Controls.Add(this.textBox1);
|
||||
this.groupBox3.Location = new System.Drawing.Point(3, 3);
|
||||
this.groupBox3.Name = "groupBox3";
|
||||
this.groupBox3.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox3.Size = new System.Drawing.Size(82, 101);
|
||||
this.groupBox3.TabIndex = 11;
|
||||
this.groupBox3.TabStop = false;
|
||||
this.groupBox3.Text = "Roll";
|
||||
@ -173,7 +173,7 @@
|
||||
this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "RollD", true));
|
||||
this.textBox3.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox3.Name = "textBox3";
|
||||
this.textBox3.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox3.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox3.TabIndex = 2;
|
||||
//
|
||||
// textBox2
|
||||
@ -181,7 +181,7 @@
|
||||
this.textBox2.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "RollI", true));
|
||||
this.textBox2.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox2.Name = "textBox2";
|
||||
this.textBox2.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox2.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox2.TabIndex = 1;
|
||||
//
|
||||
// textBox1
|
||||
@ -189,29 +189,29 @@
|
||||
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "RollP", true));
|
||||
this.textBox1.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox1.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox1.TabIndex = 0;
|
||||
//
|
||||
// textBox7
|
||||
//
|
||||
this.textBox7.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "MaximumAngle", true));
|
||||
this.textBox7.Location = new System.Drawing.Point(238, 22);
|
||||
this.textBox7.Location = new System.Drawing.Point(179, 22);
|
||||
this.textBox7.Name = "textBox7";
|
||||
this.textBox7.Size = new System.Drawing.Size(100, 20);
|
||||
this.textBox7.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox7.TabIndex = 13;
|
||||
//
|
||||
// textBox8
|
||||
//
|
||||
this.textBox8.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.PositionHoldConfigBindingSource, "GeoCorrectionFactor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.textBox8.Location = new System.Drawing.Point(238, 78);
|
||||
this.textBox8.Location = new System.Drawing.Point(179, 75);
|
||||
this.textBox8.Name = "textBox8";
|
||||
this.textBox8.Size = new System.Drawing.Size(100, 20);
|
||||
this.textBox8.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox8.TabIndex = 14;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Location = new System.Drawing.Point(251, 6);
|
||||
this.label7.Location = new System.Drawing.Point(180, 6);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(60, 13);
|
||||
this.label7.TabIndex = 15;
|
||||
@ -220,17 +220,17 @@
|
||||
// label8
|
||||
//
|
||||
this.label8.AutoSize = true;
|
||||
this.label8.Location = new System.Drawing.Point(235, 62);
|
||||
this.label8.Location = new System.Drawing.Point(176, 48);
|
||||
this.label8.Name = "label8";
|
||||
this.label8.Size = new System.Drawing.Size(114, 13);
|
||||
this.label8.Size = new System.Drawing.Size(81, 26);
|
||||
this.label8.TabIndex = 16;
|
||||
this.label8.Text = "Geo Correction Factor:";
|
||||
this.label8.Text = "Geo Correction \r\nFactor:";
|
||||
this.label8.Click += new System.EventHandler(this.label8_Click);
|
||||
//
|
||||
// btnRefresh
|
||||
//
|
||||
this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnRefresh.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.PositionHoldConfigBindingSource, "RefreshCommand", true));
|
||||
this.btnRefresh.Location = new System.Drawing.Point(195, 126);
|
||||
this.btnRefresh.Location = new System.Drawing.Point(86, 110);
|
||||
this.btnRefresh.Name = "btnRefresh";
|
||||
this.btnRefresh.Size = new System.Drawing.Size(74, 23);
|
||||
this.btnRefresh.TabIndex = 18;
|
||||
@ -239,9 +239,8 @@
|
||||
//
|
||||
// btnUpdate
|
||||
//
|
||||
this.btnUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnUpdate.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.PositionHoldConfigBindingSource, "UpdateCommand", true));
|
||||
this.btnUpdate.Location = new System.Drawing.Point(275, 126);
|
||||
this.btnUpdate.Location = new System.Drawing.Point(166, 110);
|
||||
this.btnUpdate.Name = "btnUpdate";
|
||||
this.btnUpdate.Size = new System.Drawing.Size(74, 23);
|
||||
this.btnUpdate.TabIndex = 17;
|
||||
@ -261,7 +260,7 @@
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.groupBox3);
|
||||
this.Name = "PositionHoldConfigView";
|
||||
this.Size = new System.Drawing.Size(352, 152);
|
||||
this.Size = new System.Drawing.Size(259, 139);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.PositionHoldConfigBindingSource)).EndInit();
|
||||
|
@ -15,12 +15,17 @@ namespace ArducopterConfigurator.Views
|
||||
BindButtons();
|
||||
}
|
||||
|
||||
public override void SetDataContext(PositionHoldConfigVm model)
|
||||
public override void SetDataContext(PositionHoldConfigVm vm)
|
||||
{
|
||||
PositionHoldConfigBindingSource.DataSource = model;
|
||||
PositionHoldConfigBindingSource.DataSource = vm;
|
||||
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => PositionHoldConfigBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => PositionHoldConfigBindingSource.ResetBindings(false));
|
||||
}
|
||||
|
||||
private void label8_Click(object sender, System.EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
// Required for VS2008 designer. No functional value
|
||||
|
@ -18,10 +18,10 @@ namespace ArducopterConfigurator
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void SetDataContext(SerialMonitorVm mode)
|
||||
public void SetDataContext(SerialMonitorVm vm)
|
||||
{
|
||||
serialMonitorVmBindingSource.DataSource = mode;
|
||||
_vm = mode;
|
||||
serialMonitorVmBindingSource.DataSource = vm;
|
||||
_vm = vm;
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,13 +29,14 @@
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StableConfigView));
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
this.StableModeConfigVmBindingSource = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.groupBox4 = new System.Windows.Forms.GroupBox();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.textBox7 = new System.Windows.Forms.TextBox();
|
||||
this.StableModeConfigVmBindingSource = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.textBox8 = new System.Windows.Forms.TextBox();
|
||||
this.textBox9 = new System.Windows.Forms.TextBox();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
@ -54,8 +55,9 @@
|
||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.checkBox1 = new System.Windows.Forms.CheckBox();
|
||||
this.groupBox4.SuspendLayout();
|
||||
this.toolTips = new System.Windows.Forms.ToolTip(this.components);
|
||||
((System.ComponentModel.ISupportInitialize)(this.StableModeConfigVmBindingSource)).BeginInit();
|
||||
this.groupBox4.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.groupBox3.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
@ -64,13 +66,18 @@
|
||||
//
|
||||
this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.StableModeConfigVmBindingSource, "RefreshCommand", true));
|
||||
this.button2.Location = new System.Drawing.Point(187, 134);
|
||||
this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image")));
|
||||
this.button2.Location = new System.Drawing.Point(207, 109);
|
||||
this.button2.Name = "button2";
|
||||
this.button2.Size = new System.Drawing.Size(74, 23);
|
||||
this.button2.Size = new System.Drawing.Size(26, 26);
|
||||
this.button2.TabIndex = 12;
|
||||
this.button2.Text = "Refresh";
|
||||
this.toolTips.SetToolTip(this.button2, "Refresh");
|
||||
this.button2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// StableModeConfigVmBindingSource
|
||||
//
|
||||
this.StableModeConfigVmBindingSource.DataSource = typeof(ArducopterConfigurator.PresentationModels.StableModeConfigVm);
|
||||
//
|
||||
// groupBox4
|
||||
//
|
||||
this.groupBox4.Controls.Add(this.label7);
|
||||
@ -79,9 +86,9 @@
|
||||
this.groupBox4.Controls.Add(this.textBox7);
|
||||
this.groupBox4.Controls.Add(this.textBox8);
|
||||
this.groupBox4.Controls.Add(this.textBox9);
|
||||
this.groupBox4.Location = new System.Drawing.Point(234, 6);
|
||||
this.groupBox4.Location = new System.Drawing.Point(184, 6);
|
||||
this.groupBox4.Name = "groupBox4";
|
||||
this.groupBox4.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox4.Size = new System.Drawing.Size(82, 101);
|
||||
this.groupBox4.TabIndex = 11;
|
||||
this.groupBox4.TabStop = false;
|
||||
this.groupBox4.Text = "Yaw";
|
||||
@ -118,19 +125,15 @@
|
||||
this.textBox7.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "YawD", true));
|
||||
this.textBox7.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox7.Name = "textBox7";
|
||||
this.textBox7.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox7.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox7.TabIndex = 2;
|
||||
//
|
||||
// StableModeConfigVmBindingSource
|
||||
//
|
||||
this.StableModeConfigVmBindingSource.DataSource = typeof(ArducopterConfigurator.PresentationModels.StableModeConfigVm);
|
||||
//
|
||||
// textBox8
|
||||
//
|
||||
this.textBox8.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "YawI", true));
|
||||
this.textBox8.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox8.Name = "textBox8";
|
||||
this.textBox8.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox8.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox8.TabIndex = 1;
|
||||
//
|
||||
// textBox9
|
||||
@ -138,7 +141,7 @@
|
||||
this.textBox9.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "YawP", true));
|
||||
this.textBox9.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox9.Name = "textBox9";
|
||||
this.textBox9.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox9.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox9.TabIndex = 0;
|
||||
//
|
||||
// groupBox2
|
||||
@ -149,9 +152,9 @@
|
||||
this.groupBox2.Controls.Add(this.textBox4);
|
||||
this.groupBox2.Controls.Add(this.textBox5);
|
||||
this.groupBox2.Controls.Add(this.textBox6);
|
||||
this.groupBox2.Location = new System.Drawing.Point(120, 6);
|
||||
this.groupBox2.Location = new System.Drawing.Point(95, 6);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox2.Size = new System.Drawing.Size(83, 101);
|
||||
this.groupBox2.TabIndex = 10;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Pitch";
|
||||
@ -188,7 +191,7 @@
|
||||
this.textBox4.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "PitchD", true));
|
||||
this.textBox4.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox4.Name = "textBox4";
|
||||
this.textBox4.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox4.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox4.TabIndex = 2;
|
||||
//
|
||||
// textBox5
|
||||
@ -196,7 +199,7 @@
|
||||
this.textBox5.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "PitchI", true));
|
||||
this.textBox5.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox5.Name = "textBox5";
|
||||
this.textBox5.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox5.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox5.TabIndex = 1;
|
||||
//
|
||||
// textBox6
|
||||
@ -204,7 +207,7 @@
|
||||
this.textBox6.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "PitchP", true));
|
||||
this.textBox6.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox6.Name = "textBox6";
|
||||
this.textBox6.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox6.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox6.TabIndex = 0;
|
||||
//
|
||||
// groupBox3
|
||||
@ -217,7 +220,7 @@
|
||||
this.groupBox3.Controls.Add(this.textBox1);
|
||||
this.groupBox3.Location = new System.Drawing.Point(6, 5);
|
||||
this.groupBox3.Name = "groupBox3";
|
||||
this.groupBox3.Size = new System.Drawing.Size(108, 101);
|
||||
this.groupBox3.Size = new System.Drawing.Size(83, 101);
|
||||
this.groupBox3.TabIndex = 9;
|
||||
this.groupBox3.TabStop = false;
|
||||
this.groupBox3.Text = "Roll";
|
||||
@ -254,7 +257,7 @@
|
||||
this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "RollD", true));
|
||||
this.textBox3.Location = new System.Drawing.Point(23, 71);
|
||||
this.textBox3.Name = "textBox3";
|
||||
this.textBox3.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox3.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox3.TabIndex = 2;
|
||||
//
|
||||
// textBox2
|
||||
@ -262,7 +265,7 @@
|
||||
this.textBox2.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "RollI", true));
|
||||
this.textBox2.Location = new System.Drawing.Point(23, 45);
|
||||
this.textBox2.Name = "textBox2";
|
||||
this.textBox2.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox2.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox2.TabIndex = 1;
|
||||
//
|
||||
// textBox1
|
||||
@ -270,18 +273,19 @@
|
||||
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.StableModeConfigVmBindingSource, "RollP", true));
|
||||
this.textBox1.Location = new System.Drawing.Point(23, 19);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Size = new System.Drawing.Size(78, 20);
|
||||
this.textBox1.Size = new System.Drawing.Size(50, 20);
|
||||
this.textBox1.TabIndex = 0;
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.StableModeConfigVmBindingSource, "UpdateCommand", true));
|
||||
this.button1.Location = new System.Drawing.Point(267, 134);
|
||||
this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
|
||||
this.button1.Location = new System.Drawing.Point(239, 109);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(74, 23);
|
||||
this.button1.Size = new System.Drawing.Size(26, 26);
|
||||
this.button1.TabIndex = 8;
|
||||
this.button1.Text = "Update";
|
||||
this.toolTips.SetToolTip(this.button1, "Update");
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBox1
|
||||
@ -290,9 +294,10 @@
|
||||
this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", this.StableModeConfigVmBindingSource, "MagnetometerEnable", true));
|
||||
this.checkBox1.Location = new System.Drawing.Point(14, 112);
|
||||
this.checkBox1.Name = "checkBox1";
|
||||
this.checkBox1.Size = new System.Drawing.Size(100, 17);
|
||||
this.checkBox1.Size = new System.Drawing.Size(94, 17);
|
||||
this.checkBox1.TabIndex = 13;
|
||||
this.checkBox1.Text = "Magnetomoeter";
|
||||
this.checkBox1.Text = "Magnetometer";
|
||||
this.toolTips.SetToolTip(this.checkBox1, "Enable the use of the Magnetometer, if present");
|
||||
this.checkBox1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// StableConfigView
|
||||
@ -306,10 +311,10 @@
|
||||
this.Controls.Add(this.groupBox3);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Name = "StableConfigView";
|
||||
this.Size = new System.Drawing.Size(344, 160);
|
||||
this.Size = new System.Drawing.Size(271, 135);
|
||||
((System.ComponentModel.ISupportInitialize)(this.StableModeConfigVmBindingSource)).EndInit();
|
||||
this.groupBox4.ResumeLayout(false);
|
||||
this.groupBox4.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.StableModeConfigVmBindingSource)).EndInit();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.groupBox3.ResumeLayout(false);
|
||||
@ -346,5 +351,6 @@
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.BindingSource StableModeConfigVmBindingSource;
|
||||
private System.Windows.Forms.CheckBox checkBox1;
|
||||
private System.Windows.Forms.ToolTip toolTips;
|
||||
}
|
||||
}
|
||||
|
@ -17,12 +17,12 @@ namespace ArducopterConfigurator.Views
|
||||
BindButtons();
|
||||
}
|
||||
|
||||
public override void SetDataContext(StableModeConfigVm model)
|
||||
public override void SetDataContext(StableModeConfigVm vm)
|
||||
{
|
||||
StableModeConfigVmBindingSource.DataSource = model;
|
||||
StableModeConfigVmBindingSource.DataSource = vm;
|
||||
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => StableModeConfigVmBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => StableModeConfigVmBindingSource.ResetBindings(false));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -120,4 +120,91 @@
|
||||
<metadata name="StableModeConfigVmBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="button2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAALVSURBVDhPY2CgGojfz8Hgd0SKIXC/DBiD2CAxYoFW3fnE
|
||||
yHl37sUvufskFogj591+KF92NhGkXzDjqI5GzdlyqawjBjjNk8g6GpK35t7XGeff/p8OxJ0Hn/3RqjyZ
|
||||
yhC4Uyx8xrXDc0++/l+x4cEF3bLjngwM9UyoBlms5LRvOzOncfeT/73HXv7vP/Hqf+GaO+9ks/bbMPiv
|
||||
F/DqPTeza9fDz+uuvv9fs/HeVbA4MpBL2eGTv+rWh66Dz/7Hzrx0r2TN7S+xMy7eYXBbLgtWZzyTSyVr
|
||||
b2Hp6hsf5p569T94wpntDPbzBaBmpLE61R2cWb/94f/U+ZfeiEVv8DMr2VNmVbZ7CoNFLyfCono248Kd
|
||||
rR077/+tWHvzo3zyRg+InFK3mH/HoVPVm+79927av41BvZMXaCMrg8tMfvQAE/Ceq58w/fSr2g13/qsk
|
||||
rS6HyKvUy1iW7bgVMOXCf930NdMZGEKZcYa0Vb+6VdXu54FTzv+XjVjUCHVBsZh6ypoTetVH/qvELVnO
|
||||
wBCPGvcWvUI8tl3BQIv4xDwnR+kU7f6uU7r3t4jX1GSYRczygTMm6JXu/6+RvPo+p36VGbILhBy73IzS
|
||||
Vz5T8J82XSly/gn1koP/NVNXP+W2aNKFqxMwrbbTSlrxSit/938538kHuVRyDWFekXDuqtXK3flfIXXz
|
||||
H4X07f/Usnf8l/PqB3rVmBXJImNWCYfmOs3ktd+0snb8142ed0fMtCqQgcGVWyVg6laxxB3/2SJ3/BdO
|
||||
2PFf0X/aLVbVLIwUycjAby8gZl7aqR0x75NuyJRrfCrhbgwitkYawdMeKyVt/i8ZswEY8pv+6wRPfcKp
|
||||
EGOO7E1GIIcdiMUYGPiNOMVt8lh51FKAfC8GJu4IbjnPqbwqEct5VCMX86nFLBBUj2piFdTTgeoB6QUD
|
||||
UNoGhT4vEAsCsSgQSwKxFBBLQPnCQFoAiLmhmsH5AQAEwRbllcrpQwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>268, 17</value>
|
||||
</metadata>
|
||||
<data name="button1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
||||
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
|
||||
bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE
|
||||
sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs
|
||||
AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4
|
||||
JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR
|
||||
3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd
|
||||
li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF
|
||||
ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX
|
||||
wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF
|
||||
hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55
|
||||
4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ
|
||||
VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB
|
||||
5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC
|
||||
qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE
|
||||
j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I
|
||||
1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9
|
||||
rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG
|
||||
fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp
|
||||
B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ
|
||||
yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC
|
||||
YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln
|
||||
yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v
|
||||
vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp
|
||||
vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L
|
||||
Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA
|
||||
bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z
|
||||
llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW
|
||||
ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s
|
||||
xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6
|
||||
eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw
|
||||
YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR
|
||||
XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm
|
||||
WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl
|
||||
xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2
|
||||
dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8
|
||||
V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za
|
||||
Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v
|
||||
Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb
|
||||
PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/
|
||||
0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h
|
||||
/HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr
|
||||
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
|
||||
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
|
||||
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
|
||||
6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEgAACxIB0t1+/AAAA11JREFUOE8tkYtTVHUU
|
||||
x+8fU5PCUjjlMDT42JB4qcSjoumxk00FG6USapngOrvuDg+BSlYmZQKFxWZyyiBRHBChKMCw5e6CzYag
|
||||
su+9+4gWVxb49NulO/d353vO/X7P+Z7zk87/uICm7nvKdcM0X/wV0yWZxss2mjplmnptNPdYOdM9TUOP
|
||||
wL3zGDrsFNf+wgHdBB39i0hv1o2g7fRwuHueGP8/q4/hSQKvsyq+ImJD4LggxAU+1D3LwU4Hr33+A9Le
|
||||
oz9RdcVNlcXJCmtJycamVgjjIpNUCyTUIsfGKtre+2gtS5Qdv4FUeqyP97vmqLgYSDZ94P2XwZkAN60x
|
||||
rt2L0C+HGbaLnC3EootkQY1wW9n7kPzqfqTiqhtUfuOi8oJDdIiKDrGkzc0RErGQxJ8kUNIJ6zHe6/ib
|
||||
D8z32X9sAKnok2E0ZheadgdrwuJfnjhX70W5Lke4PhukzxblZ1lhdNrDgivGmqj3zrcPeLdlnvxPryCp
|
||||
K76j+JxM+dkZUX098W52E51Y+ydpOWFm8yR2Eqf47BQfti6Sre1BytZcZl/rAiUtM1y1K4K2klxUcmEC
|
||||
r4jlJadhmaiYbcD+mDcaZygxybx0QNxCztuXeNk4TaHBwT6TlULdHUrFz4LTMjkmO4UNVor0s+QZJilu
|
||||
tJNjnCS3aY699XfY+VY3UlbZBfbofydXP4VakLKFUH1yFnWtzO5TVgp0IxTUTZCnnyD/5G/k1N0lq/Yu
|
||||
ebpJdrzehZRZ1kXWF1Pk1/wpROOMzM2zrISIB7x4gg9ZCiooyiPcvgh/yH627DpNYa0N9WdTZLzSiZRW
|
||||
0E7mUSsvHpHZXj2KKxwi/VUL6fst+PwhQoEois9JNODE6w6gUhvYXjNGxvEJnk8UyCz5igztGNuqx0mr
|
||||
GScYdvJ0mYWUcguegAMlGEYJLeFVgrgDYZ5RN/Ls4VukHxlFlWtGOnWmj5S8Zl74aAjVx7cJesNsKe0i
|
||||
teg8YW+EZf8KTk8In+LC5/Og2tHCtkMjgiv42V8jifuRdK23Sd3VhkorCvjcOMMBYd9FRHR1ej34I4/w
|
||||
B9yERLw180tSBO+pipuk7hEOEgUS50STsKU+iPHcKCbzLYzmQRrahzC1DVLfNkR9+wCGtjHSdurZmlXP
|
||||
c7uNnGi8xn9S4RHZGLiTUQAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
@ -17,12 +17,12 @@ namespace ArducopterConfigurator.Views
|
||||
BindButtons();
|
||||
}
|
||||
|
||||
public override void SetDataContext(TransmitterChannelsVm model)
|
||||
public override void SetDataContext(TransmitterChannelsVm vm)
|
||||
{
|
||||
TransmitterChannelsBindingSource.DataSource = model;
|
||||
TransmitterChannelsBindingSource.DataSource = vm;
|
||||
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => TransmitterChannelsBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => TransmitterChannelsBindingSource.ResetBindings(false));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ namespace ArducopterConfigurator.Views
|
||||
// cannot be abstract due to vs2008 designer
|
||||
public class ViewCommon<T> : UserControl, IView<T> where T : IPresentationModel
|
||||
{
|
||||
public virtual void SetDataContext(T model)
|
||||
public virtual void SetDataContext(T vm)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,8 @@ namespace ArducopterConfigurator
|
||||
{typeof (PositionHoldConfigVm), typeof (PositionHoldConfigView)},
|
||||
{typeof (AltitudeHoldConfigVm), typeof (AltitudeHoldConfigView)},
|
||||
{typeof (SerialMonitorVm), typeof (SerialMonitorView)},
|
||||
{typeof (FlightControlPidsVm), typeof (FlightControlPidsView)},
|
||||
{typeof (PositionAltitudePidsVm), typeof (PositionAltitudePidsView)},
|
||||
};
|
||||
|
||||
|
||||
@ -45,6 +47,10 @@ namespace ArducopterConfigurator
|
||||
var closedBindViewMethod = methodInfo.MakeGenericMethod(model.GetType());
|
||||
return closedBindViewMethod.Invoke(this, new[] { model, view }) as Control;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("model","Cannot find entry in view map for type: " + model.GetType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -89,12 +95,12 @@ namespace ArducopterConfigurator
|
||||
|
||||
#region Implementation of IView
|
||||
|
||||
public void SetDataContext(MainVm model)
|
||||
public void SetDataContext(MainVm vm)
|
||||
{
|
||||
_vm = model;
|
||||
mainVmBindingSource.DataSource = model;
|
||||
_vm = vm;
|
||||
mainVmBindingSource.DataSource = vm;
|
||||
|
||||
availablePortsBindingSource.DataSource = model.AvailablePorts;
|
||||
availablePortsBindingSource.DataSource = vm.AvailablePorts;
|
||||
|
||||
|
||||
foreach (var monitorVm in _vm.MonitorVms)
|
||||
@ -109,7 +115,7 @@ namespace ArducopterConfigurator
|
||||
tabCtrlMonitorVms.TabPages.Add(tp);
|
||||
}
|
||||
|
||||
var tabVm = tabCtrlMonitorVms.SelectedTab.Tag as MonitorVm;
|
||||
var tabVm = tabCtrlMonitorVms.SelectedTab.Tag as IPresentationModel;
|
||||
_vm.Select(tabVm);
|
||||
|
||||
UpdateConnectionStatusLabel();
|
||||
@ -117,7 +123,7 @@ namespace ArducopterConfigurator
|
||||
|
||||
// hack for INPC subscribe bug in Mono
|
||||
if (Program.IsMonoRuntime)
|
||||
model.PropertyChanged += ((sender, e) => mainVmBindingSource.ResetBindings(false));
|
||||
vm.PropertyChanged += ((sender, e) => mainVmBindingSource.ResetBindings(false));
|
||||
|
||||
}
|
||||
|
||||
@ -132,7 +138,7 @@ namespace ArducopterConfigurator
|
||||
{
|
||||
var control = e.TabPage.Controls[0];
|
||||
control.Size = e.TabPage.ClientRectangle.Size;
|
||||
var tabVm = e.TabPage.Tag as MonitorVm;
|
||||
var tabVm = e.TabPage.Tag as IPresentationModel;
|
||||
_vm.Select(tabVm);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user