using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Tango.BL.Entities;
using Tango.Integration.ExternalBridge;
namespace Tango.MachineStudio.Common.StudioApplication
{
///
/// Represents the Machine Studio application manager.
///
public interface IStudioApplicationManager : INotifyPropertyChanged
{
///
/// Occurs when the application is ready.
///
event EventHandler ApplicationReady;
///
/// Occurs when the connected machine session has been lost and an automatic reconnection with the last machine is required.
///
event EventHandler ReconnectionRequired;
///
/// Occurs when the connected machine property has changed.
///
event EventHandler ConnectedMachineChanged;
///
/// Gets a value indicating whether Machine Studio is shutting down.
///
bool IsShuttingDown { get; }
///
/// Shutdown the application.
///
void ShutDown();
///
/// Gets or sets the currently connected machine if any.
///
IExternalBridgeClient ConnectedMachine { get; }
///
/// Gets or sets the machine.
///
Machine Machine { get; }
///
/// Gets a value indicating whether the is valid.
///
bool IsMachineConnected { get; }
///
/// Gets a value indicating whether the is valid and connected through TCP/IP.
///
bool IsMachineConnectedViaTCP { get; }
///
/// Gets the machine studio application version.
///
Version Version { get; }
///
/// Gets the core libraries version.
///
Version CoreVersion { get; }
///
/// Gets the build date.
///
String BuildDate { get; }
///
/// Gets the change log.
///
String ChangeLog { get; }
///
/// Notify the application manager about an external opened window.
/// When application exists. All registered windows will be closed.
///
/// The window.
void RegisterOpenedWindow(Window window);
///
/// Raises the application ready event.
///
void NotifyApplicationReady();
///
/// Sets the connected machine.
///
/// The connected machine.
void SetConnectedMachine(IExternalBridgeClient connectedMachine);
}
}