You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.3 KiB
126 lines
4.3 KiB
using System; |
|
using System.ComponentModel; |
|
using System.Diagnostics; |
|
using System.Drawing; |
|
using System.Linq; |
|
using System.Windows.Forms; |
|
using ArdupilotMega.Controls.BackstageView; |
|
using ArdupilotMega.Presenter; |
|
using Transitions; |
|
|
|
namespace ArdupilotMega.GCSViews.ConfigurationView |
|
{ |
|
public partial class ConfigCameraStab : UserControl, IActivate |
|
{ |
|
private ConfigCameraStabPresenter _presenter; |
|
private Transition[] _ErrorTransition; |
|
private Transition _NoErrorTransition; |
|
|
|
public ConfigCameraStab() |
|
{ |
|
InitializeComponent(); |
|
PBOX_WarningIcon.Opacity = 0.0F; |
|
LBL_Error.Opacity = 0.0F; |
|
} |
|
|
|
public void Activate() |
|
{ |
|
_presenter = new ConfigCameraStabPresenter(MainV2.comPort); |
|
presenterBindingSource.DataSource = _presenter; |
|
|
|
var delay = new Transition(new TransitionType_Linear(2000)); |
|
var fadeIn = new Transition(new TransitionType_Linear(800)); |
|
fadeIn.add(PBOX_WarningIcon, "Opacity", 1.0F); |
|
fadeIn.add(LBL_Error, "Opacity", 1.0F); |
|
|
|
_ErrorTransition = new[] { delay, fadeIn }; |
|
|
|
_NoErrorTransition = new Transition(new TransitionType_Linear(10)); |
|
_NoErrorTransition.add(PBOX_WarningIcon, "Opacity", 0.0F); |
|
_NoErrorTransition.add(LBL_Error, "Opacity", 0.0F); |
|
|
|
//setup button actions |
|
foreach (var btn in Controls.Cast<Control>().OfType<Button>()) |
|
btn.Click += HandleButtonClick; |
|
|
|
|
|
_presenter.PropertyChanged += (s, e) => |
|
{ |
|
if (e.PropertyName == "HasError") |
|
{ |
|
SetErrorMessageOpacity(); |
|
} |
|
}; |
|
|
|
_presenter.PropertyChanged += CheckCommandStates; |
|
LNK_wiki.MouseEnter += (s, e) => FadeLinkTo((LinkLabel)s, Color.CornflowerBlue); |
|
LNK_wiki.MouseLeave += (s, e) => FadeLinkTo((LinkLabel)s, Color.WhiteSmoke); |
|
|
|
SetErrorMessageOpacity(); |
|
|
|
// Fix for mono bug where binding sources do not respect INPC notifications on POCOs |
|
if (MainV2.MONO) |
|
{ |
|
_presenter.PropertyChanged += (s, e) => presenterBindingSource.ResetBindings(false); |
|
} |
|
|
|
_presenter.Load(); |
|
} |
|
|
|
private void SetErrorMessageOpacity() |
|
{ |
|
if (_presenter.HasError) |
|
{ |
|
// Todo - is this the prob? maybe single log trasition |
|
var t = new Transition(new TransitionType_Acceleration(1000)); |
|
t.add(PBOX_WarningIcon, "Opacity", 1.0F); |
|
t.add(LBL_Error, "Opacity", 1.0F); |
|
t.run(); |
|
|
|
//Transition.runChain(_ErrorTransition); |
|
} |
|
else |
|
{ |
|
_NoErrorTransition.run(); |
|
} |
|
} |
|
|
|
private static void FadeLinkTo(LinkLabel l, Color c) |
|
{ |
|
var changeColorTransition = new Transition(new TransitionType_Linear(300)); |
|
changeColorTransition.add(l, "LinkColor", c); |
|
changeColorTransition.run(); |
|
} |
|
|
|
// Common handler for all buttons |
|
// Will execute an ICommand if one is found on the button Tag |
|
private static void HandleButtonClick(object sender, EventArgs e) |
|
{ |
|
if (sender is Button) |
|
{ |
|
var cmd = (sender as Button).Tag as ICommand; |
|
|
|
if (cmd != null) |
|
if (cmd.CanExecute(null)) |
|
cmd.Execute(null); |
|
} |
|
} |
|
|
|
// Something has changed on the presenter - This may be an Icommand |
|
// enabled state, so update the buttons as appropriate |
|
void CheckCommandStates(object sender, PropertyChangedEventArgs propertyChangedEventArgs) |
|
{ |
|
foreach (var btn in Controls.Cast<Control>().OfType<Button>()) |
|
{ |
|
var cmd = btn.Tag as ICommand; |
|
if (cmd != null) |
|
btn.Enabled = cmd.CanExecute(null); |
|
} |
|
} |
|
|
|
private void LNK_Wiki_Clicked(object sender, LinkLabelLinkClickedEventArgs e) |
|
{ |
|
Process.Start(new ProcessStartInfo("http://code.google.com/p/arducopter/wiki/AC2_Camera")); |
|
} |
|
} |
|
} |