git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 13 Aug 2018 14:08:58 +0000 (14:08 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 13 Aug 2018 14:08:58 +0000 (14:08 +0000)
25 files changed:
client/AudioRecorder/MetadataSelectorForm.cs
client/DxPlay/Configuration/dxplay.en
client/DxPlay/Controls/PlayerControls.Designer.cs
client/DxPlay/DxPlayer.cs
client/DxPlay/DxPlayerx.cs
client/DxPlay/Integration/Traffic.cs
client/DxPlay/Model/DxPlayModel.cs
client/DxPlay/PlayerForm.Designer.cs
client/DxPlay/PlayerForm.cs
client/DxPlay/PlayerForm.resx
client/DxPlay/Program.cs
client/Maestro/MaestroForm.Source.cs
client/Maestro/MaestroForm.resx
client/MaestroShared/MaestroShared.csproj
client/MaestroShared/Properties/Resources.Designer.cs
client/MaestroShared/Properties/Resources.resx
client/MaestroShared/Resources/baseline_backup_black_24dp.png [new file with mode: 0644]
client/MaestroShared/Resources/outline_backup_black_24dp.png [new file with mode: 0644]
client/MaestroShared/Resources/sharp_keyboard_arrow_left_black_48dp.png [new file with mode: 0644]
client/MaestroShared/Resources/sharp_keyboard_arrow_right_black_48dp.png [new file with mode: 0644]
client/MediaCube.sln
client/PlanAIRClient/Properties/AssemblyInfo.cs
client/PlanAIRClient/TrafficIDSelector.cs
client/PlanAIRClient/Workers/MaterialWorker.cs
docs/mediacube-dxplay.md [new file with mode: 0644]

index 63d461aee3c713a0e3af89c6c345991b6c430847..76b36271977e479ed69dfefdadd56d6827a87980 100644 (file)
@@ -38,7 +38,7 @@ namespace AudioRecorder {
 \r
         private void OctopusIDChangedEvent(string id, string name, string text) {\r
             if (name == null)\r
-                SelectedMetadata = null;\r
+                SelectedMetadata = new Metadata();\r
             else\r
                 SelectedMetadata = new Metadata() {\r
                     ID = name,\r
@@ -48,7 +48,7 @@ namespace AudioRecorder {
 \r
         private void TrafficIDChangedEvent(string id, int variantID, string text) {\r
             if (id == null)\r
-                SelectedMetadata = null;\r
+                SelectedMetadata = new Metadata();\r
             else\r
                 SelectedMetadata = new Metadata() {\r
                     ID = id,\r
@@ -65,5 +65,6 @@ namespace AudioRecorder {
             DialogResult = DialogResult.OK;\r
             Close();\r
         }\r
+\r
     }\r
 }\r
index 3f488e8cfe9f5077ecd4be04ca845502973994b8..03ae8ad3bfcd0460205bbfaf73117cfbd4b969b8 100644 (file)
@@ -1,27 +1,29 @@
 {\r
-  "define-segment": "Define segment",\r
-  "break-segment": "Break segment",\r
-  "position-as-tcin": "Current position as TC in",\r
-  "position-as-tcout": "Current position as TC out",\r
-  "delete-segment": "Delete segment",\r
-  "segments": "Segments",\r
-  "no-input": "NO INPUT",\r
-  "start": "START",\r
-  "length": "LENGTH",\r
-  "tc-in": "TC in",\r
-  "tc-out": "TC out",\r
-  "optional": "Optional",\r
-  "comment": "Comment",\r
-  "starting": "STARTING",\r
-  "exiting": "EXITING",\r
-  "paused": "PAUSED",\r
-  "playing": "PLAYING",\r
-  "stopped": "STOPPED",\r
-  "completed": "COMPLETED",\r
-  "pause": "Pause",\r
-  "play": "Play",\r
-  "stop": "Stop",\r
-  "missing-traffic-configuration": "Missing PlanAir connection configuration.",\r
-  "error-traffic-connect": "Could not connect to PlanAir system, using: {0}",\r
-  "missing-traffic-variant": "Missing metadata for {0} in PlanAir system."\r
+  "APPROVE": "Approve",\r
+  "COMMENT": "Comment",\r
+  "COMPLETED": "COMPLETED",\r
+  "DEFINESEGMENT": "Define segment",\r
+  "DELETESEGMENT": "Delete segment",\r
+  "ERRORTRAFFICCONNECT": "Could not connect to PlanAir system, using: {0}",\r
+  "EXITING": "EXITING",\r
+  "LENGTH": "LENGTH",\r
+  "METADATA": "Metadata",\r
+  "MISSINGTRAFFICCONFIGURATION": "Missing PlanAir connection configuration.",\r
+  "MISSINGTRAFFICVARIANT": "Missing metadata for {0} in PlanAir system.",\r
+  "NOINPUT": "NO INPUT",\r
+  "OPEN": "Open",\r
+  "OPTIONAL": "Optional",\r
+  "PAUSE": "Pause",\r
+  "PAUSED": "PAUSED",\r
+  "PLAY": "Play",\r
+  "PLAYING": "PLAYING",\r
+  "POSITIONASTCIN": "Current position as TC in",\r
+  "POSITIONASTCOUT": "Current position as TC out",\r
+  "SEGMENTS": "Segments",\r
+  "SPLITSEGMENT": "Split segment",\r
+  "START": "START",\r
+  "STOP": "Stop",\r
+  "STOPPED": "STOPPED",\r
+  "TCIN": "TC in",\r
+  "TCOUT": "TC out"\r
 }\r
index 9ca08ea19d9afc96cc79e27a53a4c5c742770bc5..6d68cf4416f3300dab83c4458001a4e83d5ffcba 100644 (file)
             // \r
             // lbCurrentTC\r
             // \r
-            this.lbCurrentTC.BackColor = System.Drawing.SystemColors.Control;\r
+            this.lbCurrentTC.BackColor = System.Drawing.Color.Transparent;\r
             this.lbCurrentTC.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.lbCurrentTC.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.lbCurrentTC.Location = new System.Drawing.Point(170, 13);\r
             // \r
             // lbStartTC\r
             // \r
-            this.lbStartTC.BackColor = System.Drawing.SystemColors.Control;\r
+            this.lbStartTC.BackColor = System.Drawing.Color.Transparent;\r
             this.lbStartTC.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.lbStartTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.lbStartTC.ForeColor = System.Drawing.SystemColors.WindowText;\r
             // \r
             // lbStart\r
             // \r
+            this.lbStart.BackColor = System.Drawing.Color.Transparent;\r
             this.lbStart.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.lbStart.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.lbStart.Location = new System.Drawing.Point(3, 0);\r
             // \r
             // lbStatus\r
             // \r
+            this.lbStatus.BackColor = System.Drawing.Color.Transparent;\r
             this.lbStatus.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.lbStatus.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.lbStatus.Location = new System.Drawing.Point(170, 0);\r
             // \r
             // lbDuration\r
             // \r
+            this.lbDuration.BackColor = System.Drawing.Color.Transparent;\r
             this.lbDuration.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.lbDuration.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.lbDuration.Location = new System.Drawing.Point(671, 0);\r
             // \r
             // lbEndTC\r
             // \r
-            this.lbEndTC.BackColor = System.Drawing.SystemColors.Control;\r
+            this.lbEndTC.BackColor = System.Drawing.Color.Transparent;\r
             this.lbEndTC.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.lbEndTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.lbEndTC.ForeColor = System.Drawing.SystemColors.WindowText;\r
index c8dbab6999bedf771d8cf1a23ba8e0ccc4bbec61..5ca269c04a245c1fc41813146fb4ed756525cec5 100644 (file)
@@ -58,11 +58,11 @@ namespace DxPlay {
         // Play an avi file into a window.  Allow for snapshots.\r
         // (Control to show video in, Avi file to play\r
         public DxPlayer(Control hWin, ref MediaDescription mediaDesc, UISettings properties) {\r
-            stringValues.Add(GraphState.Exiting, properties.Resource("exiting", Resources.KILEPES));\r
-            stringValues.Add(GraphState.Paused, properties.Resource("paused", Resources.SZUNETELTETETT));\r
-            stringValues.Add(GraphState.Playing, properties.Resource("playing", Resources.LEJATSZAS));\r
-            stringValues.Add(GraphState.Stopped, properties.Resource("stopped", Resources.MEGALLITVA));\r
-            stringValues.Add(GraphState.Completed, properties.Resource("completed", Resources.VEGE));\r
+            stringValues.Add(GraphState.Exiting, properties.Resource("EXITING", Resources.EXITING));\r
+            stringValues.Add(GraphState.Paused, properties.Resource("PAUSED", Resources.PAUSED));\r
+            stringValues.Add(GraphState.Playing, properties.Resource("PLAYING", Resources.PLAYING));\r
+            stringValues.Add(GraphState.Stopped, properties.Resource("STOPPED", Resources.STOPPED));\r
+            stringValues.Add(GraphState.Completed, properties.Resource("COMPLETED", Resources.COMPLETED));\r
             State = GraphState.Stopped;\r
             try {\r
                 int hr;\r
@@ -165,16 +165,13 @@ namespace DxPlay {
         // Pause the capture graph.\r
         public void Stop() {\r
             //// Can only Stop when playing or paused\r
-            //if (State == GraphState.Playing || State == GraphState.Paused || State == GraphState.Completed) {\r
-            //    int hr = graph.MediaControl.Stop();\r
-            //    DsError.ThrowExceptionForHR(hr);\r
-            //    State = GraphState.Stopped;\r
-            //}\r
-            //Rewind();\r
-            //PlayEvent?.Invoke();\r
-\r
-            Pause();\r
             Rewind();\r
+            Pause();\r
+            if (State == GraphState.Playing || State == GraphState.Paused || State == GraphState.Completed) {\r
+                int hr = graph.MediaControl.StopWhenReady();\r
+                DsError.ThrowExceptionForHR(hr);\r
+                State = GraphState.Stopped;\r
+            }\r
         }\r
 \r
         // Reset the clip back to the beginning\r
index f20725fba653cfe26eb4deee7f6572f0c11b1c48..acf852b114606ce37c09b06de1b69ff0a1fbf7db 100644 (file)
@@ -127,11 +127,11 @@ namespace DxPlay {
         }\r
 \r
         private void FillTheHunStringvalues() {\r
-            stateHunStringValues.Add(GraphState.Exiting, Resources.KILEPES);\r
-            stateHunStringValues.Add(GraphState.Paused, Resources.SZUNETELTETETT);\r
-            stateHunStringValues.Add(GraphState.Playing, Resources.LEJATSZAS);\r
-            stateHunStringValues.Add(GraphState.Stopped, Resources.MEGALLITVA);\r
-            stateHunStringValues.Add(GraphState.Completed, Resources.VEGE);\r
+            stateHunStringValues.Add(GraphState.Exiting, Resources.EXITING);\r
+            stateHunStringValues.Add(GraphState.Paused, Resources.PAUSED);\r
+            stateHunStringValues.Add(GraphState.Playing, Resources.PLAYING);\r
+            stateHunStringValues.Add(GraphState.Stopped, Resources.STOPPED);\r
+            stateHunStringValues.Add(GraphState.Completed, Resources.COMPLETED);\r
         }\r
 \r
         private void TcWorker_DoWork(object sender, DoWorkEventArgs e) {\r
index f2bfd2ec353946e222dc605fe3fd8994533e41d6..d2548cef80898d64cbb283dabaff771ff90e784f 100644 (file)
@@ -1,54 +1,61 @@
 \r
 using LinkDotNet.MessageHandling.Contracts;\r
 using TrafficClient;\r
-using MaestroShared.Configuration;\r
-using System;\r
 using System.Linq;\r
 using MaestroShared.Metadata;\r
 using System.Collections.Generic;\r
 using NLog;\r
-using DxPlay.Properties;\r
+using MaestroShared.Targets;\r
 \r
 namespace DxPlay.Integration {\r
     public class Traffic {\r
         private static readonly Logger logger = LogManager.GetCurrentClassLogger();\r
-        private readonly DxPlaySettings settings;\r
-        private readonly string id;\r
-        private readonly Connection connection;\r
-        public TrafficAPI Api { get; private set; }\r
+        private readonly TrafficIDSelector selector;\r
 \r
-        public Traffic(DxPlaySettings settings, string id, IMessageBus messageBus) {\r
-            connection = settings?.Metadata?.Server;\r
-            if (connection == null)\r
-                throw new Exception(settings.Resource("missing-traffic-configuration", Resources.MISSING_TRAFFIC_CONFIGURATION));\r
-            Api = new TrafficAPI(connection.Address.OriginalString, connection.UserName, connection.Password, connection.Timeout, messageBus);\r
-            this.settings = settings;\r
-            this.id = id;\r
+        public Traffic(TrafficIDSelector selector, IMessageBus messageBus) {\r
+            this.selector = selector;\r
         }\r
 \r
-        public List<MovieSegment> LoadSegments() {\r
+        public void Lookup(string id) {\r
             var metadataType = MetadataTypeUtil.Guess(id);\r
+            switch (metadataType) {\r
+                case MetadataType.TrafficMaterial:\r
+                    selector.LookupByMaterialID(id);\r
+                    break;\r
+                case MetadataType.TrafficPromo:\r
+                    selector.LookupByPromoID(id);\r
+                    break;\r
+                case MetadataType.TrafficAD:\r
+                    selector.LookupByADID(id);\r
+                    break;\r
+            }\r
+        }\r
+\r
+        public List<MovieSegment> LoadSegments(string id, MetadataType metadataType) {\r
             List<MovieSegment> result = null;\r
 \r
             switch (metadataType) {\r
                 case MetadataType.TrafficMaterial: {\r
-                        var trafficItem = Api.GetMaterials(id, false).FirstOrDefault();\r
-                        if (trafficItem == null)\r
-                            throw new Exception(string.Format(settings.Resource("missing-traffic-variant", Resources.MISSING_TRAFFIC_VARIANT), id));\r
-                        result = Api.GetMaterialSegments(trafficItem.VariantID);\r
+                        var trafficItem = selector.trafficAPI.GetMaterials(id, false).FirstOrDefault();\r
+                        if (trafficItem != null)\r
+                            result = selector.trafficAPI.GetMaterialSegments(trafficItem.VariantID);\r
                         break;\r
                     }\r
                 case MetadataType.TrafficPromo: {\r
-                        result = Api.GetPromoSegments(id);\r
+                        result = selector.trafficAPI.GetPromoSegments(id);\r
                         break;\r
                     }\r
                 case MetadataType.TrafficAD: {\r
-                        result = Api.GetADSegments(id);\r
+                        result = selector.trafficAPI.GetADSegments(id);\r
                         break;\r
                     }\r
             }\r
             return result;\r
         }\r
 \r
+        public void OnTargetUpdateTrafficMessage(TargetUpdateTrafficMessage message) {\r
+            logger.Info("Now update!!!!!!!!!");\r
+            //selector.trafficAPI.UpdateTrafficInformation(message.VariantID, message.Ready, message.MetadataType, message.Segments);\r
+        }\r
     }\r
 }\r
index ea78f644551482b1ef4e07f4d13d6373df0ecb21..74951964539d1467bdedc56f74efe45d1bd3d884 100644 (file)
@@ -7,43 +7,62 @@ using System.Runtime.CompilerServices;
 using LinkDotNet.MessageHandling;\r
 using LinkDotNet.MessageHandling.Contracts;\r
 using TrafficClient;\r
-using DxPlay.Properties;\r
+using NLog;\r
+using System.IO;\r
+using MaestroShared.Targets;\r
+using System.Linq;\r
 \r
 namespace DxPlay.Model {\r
-    public class DxPlayModel {\r
+    public class DxPlayModel : INotifyPropertyChanged {\r
+        private static Logger logger = LogManager.GetCurrentClassLogger();\r
         public event PropertyChangedEventHandler PropertyChanged;\r
         private readonly DxPlaySettings settings;\r
+\r
         private Traffic traffic;\r
 \r
+        public void InitializeTrafficIntegration(TrafficIDSelector selector) {\r
+            traffic = new Traffic(selector, MessageBus);\r
+            selector.Parameters = new TrafficParameters {\r
+                Configuration = settings.Metadata,\r
+                MessageBus = MessageBus\r
+            };\r
+            MessageBus.Subscribe<TargetUpdateTrafficMessage>(m => traffic.OnTargetUpdateTrafficMessage(m));\r
+        }\r
+\r
         public DxPlayModel(DxPlaySettings settings) {\r
             this.settings = settings;\r
-            IsSegmentEditorEnabled = true.Equals(settings?.Player?.SegmentEditor);\r
+            IsSegmentEditorVisible = true.Equals(settings?.Player?.SegmentEditor);\r
             IsMenuVisible = true.Equals(settings?.IsStandalone);\r
             Segments = settings.Segments ?? new BindingList<MovieSegment>();\r
             messageBus.Subscribe<TrafficAPIMessage>(OnMessage);\r
         }\r
 \r
+\r
         private void OnMessage(IMessage message) {\r
-            string msg = string.Format(settings.Resource("error-traffic-connect", Resources.ERROR_TRAFFIC_CONNECT), settings?.Metadata?.Server?.Address?.OriginalString);\r
-            throw new Exception(msg);\r
+            if (message is TrafficAPIMessage) {\r
+                TrafficAPIMessage msg = message as TrafficAPIMessage;\r
+                throw new Exception(msg.Content);\r
+            }\r
+            //string msg = string.Format(settings.Resource("ERRORTRAFFICCONNECT", Resources.ERRORTRAFFICCONNECT), settings?.Metadata?.Server?.Address?.OriginalString);\r
             //MessageBox.Show(msg, "Connection error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
         }\r
 \r
         private void Notify([CallerMemberName] String propertyName = "") {\r
+            logger.Info(propertyName);\r
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\r
         }\r
 \r
         private IMessageBus messageBus = new MessageBus();\r
         public IMessageBus MessageBus { get => messageBus; }\r
 \r
-        private bool isSegmentEditorEnabled;\r
-        public bool IsSegmentEditorEnabled {\r
+        private bool isSegmentEditorVisible;\r
+        public bool IsSegmentEditorVisible {\r
             get {\r
-                return isSegmentEditorEnabled;\r
+                return isSegmentEditorVisible;\r
             }\r
             set {\r
-                if (value != isSegmentEditorEnabled) {\r
-                    isSegmentEditorEnabled = value;\r
+                if (value != isSegmentEditorVisible) {\r
+                    isSegmentEditorVisible = value;\r
                     Notify();\r
                 }\r
             }\r
@@ -62,32 +81,68 @@ namespace DxPlay.Model {
             }\r
         }\r
 \r
-        private bool isApproveEnabled;\r
         public bool IsApproveEnabled {\r
             get {\r
-                return isApproveEnabled;\r
+                return id != null && id.Length != 0 && CurrentFile != null && CurrentFile.Exists;\r
+            }\r
+        }\r
+\r
+        private string id;\r
+        public string ID {\r
+            get { return id; }\r
+            set {\r
+                if (value != id) {\r
+                    id = value;\r
+                    Notify();\r
+                    Notify("IsApproveEnabled");\r
+                    MetadataType = MetadataTypeUtil.Guess(id);\r
+                    InitializeSegments();\r
+                }\r
             }\r
+        }\r
+\r
+        public int VariantID { get; set; }\r
+        public MetadataType MetadataType { get; set; }\r
+\r
+        private FileInfo currentFile;\r
+\r
+        public FileInfo CurrentFile {\r
+            get { return currentFile; }\r
             set {\r
-                if (value != isApproveEnabled) {\r
-                    isApproveEnabled = value;\r
+                if (currentFile != value) {\r
+                    currentFile = value;\r
                     Notify();\r
+                    Notify("IsApproveEnabled");\r
                 }\r
             }\r
         }\r
 \r
+\r
         public BindingList<MovieSegment> Segments { get; private set; }\r
 \r
-        internal void InitializeSegments(string id) {\r
+        private void InitializeSegments() {\r
             Segments.Clear();\r
             try {\r
-                traffic = new Traffic(settings, id, MessageBus);\r
-                List<MovieSegment> segments = traffic.LoadSegments();\r
+                List<MovieSegment> segments = traffic.LoadSegments(id, MetadataType);\r
                 if (segments != null)\r
                     segments.ForEach(s => Segments.Add(s));\r
             } catch (Exception) {\r
-                IsSegmentEditorEnabled = false;\r
                 throw;\r
             }\r
         }\r
+\r
+        public void Lookup(string id) {\r
+            traffic.Lookup(id);\r
+        }\r
+\r
+        public void Approve() {\r
+            TargetUpdateTrafficMessage message = new TargetUpdateTrafficMessage {\r
+                VariantID = VariantID,\r
+                Ready = true,\r
+                MetadataType = MetadataType,\r
+                Segments = Segments.ToList()\r
+            };\r
+            MessageBus.Send(message);\r
+        }\r
     }\r
 }\r
index 5fdb198b6512b253a5c619628b6ba03983c90657..fe261c6bb8e45851ee731e4da4dc5b3127a2f12d 100644 (file)
@@ -32,16 +32,9 @@ namespace DxPlay {
             System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayerForm));\r
             this.pVideo = new System.Windows.Forms.Panel();\r
-            this.menuButtonSegmentActions = new DxPlay.MenuButton();\r
-            this.ctxmSegmentActions = new System.Windows.Forms.ContextMenuStrip(this.components);\r
-            this.defineOneSegmentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.splitSegmentAtCurrentPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.deleteSegmentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.actualPositionToIntroToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.actualPositionToOutroToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
             this.mainSplit = new System.Windows.Forms.SplitContainer();\r
             this.panelPlayer = new System.Windows.Forms.Panel();\r
-            this.marginPanel = new System.Windows.Forms.Panel();\r
+            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\r
             this.tabEditor = new System.Windows.Forms.TabControl();\r
             this.tpMetadata = new System.Windows.Forms.TabPage();\r
             this.trafficBrowser = new TrafficClient.TrafficIDSelector();\r
@@ -49,110 +42,56 @@ namespace DxPlay {
             this.dgSegments = new System.Windows.Forms.DataGridView();\r
             this.bsSegments = new System.Windows.Forms.BindingSource(this.components);\r
             this.segmentActions = new System.Windows.Forms.ToolStrip();\r
-            this.toolStripButton5 = new System.Windows.Forms.ToolStripButton();\r
+            this.tbDefineSegment = new System.Windows.Forms.ToolStripButton();\r
             this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\r
-            this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();\r
-            this.toolStripButton4 = new System.Windows.Forms.ToolStripButton();\r
-            this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();\r
+            this.tbPositionAsTCIn = new System.Windows.Forms.ToolStripButton();\r
+            this.tbSplitSegment = new System.Windows.Forms.ToolStripButton();\r
+            this.tbPositionAsTCOut = new System.Windows.Forms.ToolStripButton();\r
             this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
-            this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();\r
+            this.tbDeleteSegment = new System.Windows.Forms.ToolStripButton();\r
             this.imagesTabEdit = new System.Windows.Forms.ImageList(this.components);\r
+            this.btnToggleSegmentEditor = new MaestroShared.Controls.NoFocusCueButton();\r
+            this.pMetadataDisplay = new System.Windows.Forms.TableLayoutPanel();\r
+            this.btnApprove = new MaestroShared.Controls.NoFocusCueButton();\r
+            this.labelSelectedMetadata = new System.Windows.Forms.Label();\r
+            this.txtSelectedID = new System.Windows.Forms.TextBox();\r
             this.mainMenu = new System.Windows.Forms.MenuStrip();\r
             this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
             this.menuOpenFile = new DxPlay.Controls.BindableToolStripMenuItem();\r
             this.menuApprove = new DxPlay.Controls.BindableToolStripMenuItem();\r
             this.playerControls = new DxPlay.Controls.PlayerControls();\r
-            this.pVideo.SuspendLayout();\r
-            this.ctxmSegmentActions.SuspendLayout();\r
             ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).BeginInit();\r
             this.mainSplit.Panel1.SuspendLayout();\r
             this.mainSplit.Panel2.SuspendLayout();\r
             this.mainSplit.SuspendLayout();\r
             this.panelPlayer.SuspendLayout();\r
-            this.marginPanel.SuspendLayout();\r
+            this.tableLayoutPanel1.SuspendLayout();\r
             this.tabEditor.SuspendLayout();\r
             this.tpMetadata.SuspendLayout();\r
             this.tpSegments.SuspendLayout();\r
             ((System.ComponentModel.ISupportInitialize)(this.dgSegments)).BeginInit();\r
             ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).BeginInit();\r
             this.segmentActions.SuspendLayout();\r
+            this.pMetadataDisplay.SuspendLayout();\r
             this.mainMenu.SuspendLayout();\r
             this.SuspendLayout();\r
             // \r
             // pVideo\r
             // \r
             this.pVideo.BackColor = System.Drawing.Color.Black;\r
-            this.pVideo.Controls.Add(this.menuButtonSegmentActions);\r
             this.pVideo.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.pVideo.Location = new System.Drawing.Point(0, 0);\r
             this.pVideo.Name = "pVideo";\r
-            this.pVideo.Size = new System.Drawing.Size(689, 489);\r
-            this.pVideo.TabIndex = 10;\r
+            this.pVideo.Size = new System.Drawing.Size(741, 487);\r
+            this.pVideo.TabIndex = 0;\r
             this.pVideo.TabStop = true;\r
             this.pVideo.SizeChanged += new System.EventHandler(this.panel1_SizeChanged);\r
             this.pVideo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);\r
             // \r
-            // menuButtonSegmentActions\r
-            // \r
-            this.menuButtonSegmentActions.BackColor = System.Drawing.Color.White;\r
-            this.menuButtonSegmentActions.Location = new System.Drawing.Point(389, 462);\r
-            this.menuButtonSegmentActions.Menu = this.ctxmSegmentActions;\r
-            this.menuButtonSegmentActions.Name = "menuButtonSegmentActions";\r
-            this.menuButtonSegmentActions.Size = new System.Drawing.Size(297, 23);\r
-            this.menuButtonSegmentActions.TabIndex = 0;\r
-            this.menuButtonSegmentActions.Text = "Segment actions";\r
-            this.menuButtonSegmentActions.UseVisualStyleBackColor = false;\r
-            this.menuButtonSegmentActions.Visible = false;\r
-            // \r
-            // ctxmSegmentActions\r
-            // \r
-            this.ctxmSegmentActions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
-            this.defineOneSegmentToolStripMenuItem,\r
-            this.splitSegmentAtCurrentPositionToolStripMenuItem,\r
-            this.deleteSegmentToolStripMenuItem,\r
-            this.actualPositionToIntroToolStripMenuItem,\r
-            this.actualPositionToOutroToolStripMenuItem});\r
-            this.ctxmSegmentActions.Name = "ctxmSegmentActions";\r
-            this.ctxmSegmentActions.Size = new System.Drawing.Size(247, 114);\r
-            // \r
-            // defineOneSegmentToolStripMenuItem\r
-            // \r
-            this.defineOneSegmentToolStripMenuItem.Name = "defineOneSegmentToolStripMenuItem";\r
-            this.defineOneSegmentToolStripMenuItem.Size = new System.Drawing.Size(246, 22);\r
-            this.defineOneSegmentToolStripMenuItem.Text = "Define one segment for movie";\r
-            this.defineOneSegmentToolStripMenuItem.Click += new System.EventHandler(this.OnDefineOneSegmentClick);\r
-            // \r
-            // splitSegmentAtCurrentPositionToolStripMenuItem\r
-            // \r
-            this.splitSegmentAtCurrentPositionToolStripMenuItem.Name = "splitSegmentAtCurrentPositionToolStripMenuItem";\r
-            this.splitSegmentAtCurrentPositionToolStripMenuItem.Size = new System.Drawing.Size(246, 22);\r
-            this.splitSegmentAtCurrentPositionToolStripMenuItem.Text = "Split segment at current position";\r
-            this.splitSegmentAtCurrentPositionToolStripMenuItem.Click += new System.EventHandler(this.OnSplitSegmentAtCurrentPositionClick);\r
-            // \r
-            // deleteSegmentToolStripMenuItem\r
-            // \r
-            this.deleteSegmentToolStripMenuItem.Name = "deleteSegmentToolStripMenuItem";\r
-            this.deleteSegmentToolStripMenuItem.Size = new System.Drawing.Size(246, 22);\r
-            this.deleteSegmentToolStripMenuItem.Text = "Delete segment";\r
-            this.deleteSegmentToolStripMenuItem.Click += new System.EventHandler(this.OnDeleteSegmentClick);\r
-            // \r
-            // actualPositionToIntroToolStripMenuItem\r
-            // \r
-            this.actualPositionToIntroToolStripMenuItem.Name = "actualPositionToIntroToolStripMenuItem";\r
-            this.actualPositionToIntroToolStripMenuItem.Size = new System.Drawing.Size(246, 22);\r
-            this.actualPositionToIntroToolStripMenuItem.Text = "Actual position to TCIn";\r
-            this.actualPositionToIntroToolStripMenuItem.Click += new System.EventHandler(this.OnActualPositionToTCInToolStripMenuItem1Click);\r
-            // \r
-            // actualPositionToOutroToolStripMenuItem\r
-            // \r
-            this.actualPositionToOutroToolStripMenuItem.Name = "actualPositionToOutroToolStripMenuItem";\r
-            this.actualPositionToOutroToolStripMenuItem.Size = new System.Drawing.Size(246, 22);\r
-            this.actualPositionToOutroToolStripMenuItem.Text = "Actual position to TCOut";\r
-            this.actualPositionToOutroToolStripMenuItem.Click += new System.EventHandler(this.OnActualPositionToTCOutToolStripMenuItem1Click);\r
-            // \r
             // mainSplit\r
             // \r
-            this.mainSplit.BackColor = System.Drawing.Color.DimGray;\r
+            this.mainSplit.BackColor = System.Drawing.Color.Black;\r
+            this.mainSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
             this.mainSplit.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.mainSplit.Location = new System.Drawing.Point(0, 24);\r
             this.mainSplit.Name = "mainSplit";\r
@@ -163,9 +102,11 @@ namespace DxPlay {
             // \r
             // mainSplit.Panel2\r
             // \r
-            this.mainSplit.Panel2.Controls.Add(this.marginPanel);\r
-            this.mainSplit.Size = new System.Drawing.Size(990, 489);\r
-            this.mainSplit.SplitterDistance = 689;\r
+            this.mainSplit.Panel2.Controls.Add(this.tableLayoutPanel1);\r
+            this.mainSplit.Panel2.Controls.Add(this.pMetadataDisplay);\r
+            this.mainSplit.Panel2MinSize = 300;\r
+            this.mainSplit.Size = new System.Drawing.Size(1068, 489);\r
+            this.mainSplit.SplitterDistance = 743;\r
             this.mainSplit.TabIndex = 20;\r
             // \r
             // panelPlayer\r
@@ -174,19 +115,24 @@ namespace DxPlay {
             this.panelPlayer.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.panelPlayer.Location = new System.Drawing.Point(0, 0);\r
             this.panelPlayer.Name = "panelPlayer";\r
-            this.panelPlayer.Size = new System.Drawing.Size(689, 489);\r
+            this.panelPlayer.Size = new System.Drawing.Size(741, 487);\r
             this.panelPlayer.TabIndex = 0;\r
             // \r
-            // marginPanel\r
-            // \r
-            this.marginPanel.BackColor = System.Drawing.SystemColors.ControlDark;\r
-            this.marginPanel.Controls.Add(this.tabEditor);\r
-            this.marginPanel.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.marginPanel.Location = new System.Drawing.Point(0, 0);\r
-            this.marginPanel.Name = "marginPanel";\r
-            this.marginPanel.Padding = new System.Windows.Forms.Padding(4);\r
-            this.marginPanel.Size = new System.Drawing.Size(297, 489);\r
-            this.marginPanel.TabIndex = 3;\r
+            // tableLayoutPanel1\r
+            // \r
+            this.tableLayoutPanel1.ColumnCount = 2;\r
+            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
+            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+            this.tableLayoutPanel1.Controls.Add(this.tabEditor, 1, 0);\r
+            this.tableLayoutPanel1.Controls.Add(this.btnToggleSegmentEditor, 0, 0);\r
+            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\r
+            this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);\r
+            this.tableLayoutPanel1.Name = "tableLayoutPanel1";\r
+            this.tableLayoutPanel1.RowCount = 1;\r
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+            this.tableLayoutPanel1.Size = new System.Drawing.Size(319, 424);\r
+            this.tableLayoutPanel1.TabIndex = 4;\r
             // \r
             // tabEditor\r
             // \r
@@ -194,14 +140,15 @@ namespace DxPlay {
             this.tabEditor.Controls.Add(this.tpMetadata);\r
             this.tabEditor.Controls.Add(this.tpSegments);\r
             this.tabEditor.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.tabEditor.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.tabEditor.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.tabEditor.ImageList = this.imagesTabEdit;\r
-            this.tabEditor.Location = new System.Drawing.Point(4, 4);\r
+            this.tabEditor.Location = new System.Drawing.Point(23, 4);\r
+            this.tabEditor.Margin = new System.Windows.Forms.Padding(0, 4, 4, 4);\r
             this.tabEditor.Multiline = true;\r
             this.tabEditor.Name = "tabEditor";\r
             this.tabEditor.Padding = new System.Drawing.Point(10, 5);\r
             this.tabEditor.SelectedIndex = 0;\r
-            this.tabEditor.Size = new System.Drawing.Size(289, 481);\r
+            this.tabEditor.Size = new System.Drawing.Size(292, 416);\r
             this.tabEditor.TabIndex = 2;\r
             // \r
             // tpMetadata\r
@@ -213,7 +160,7 @@ namespace DxPlay {
             this.tpMetadata.Location = new System.Drawing.Point(4, 4);\r
             this.tpMetadata.Name = "tpMetadata";\r
             this.tpMetadata.Padding = new System.Windows.Forms.Padding(3);\r
-            this.tpMetadata.Size = new System.Drawing.Size(281, 442);\r
+            this.tpMetadata.Size = new System.Drawing.Size(284, 377);\r
             this.tpMetadata.TabIndex = 0;\r
             this.tpMetadata.Text = "Metadata";\r
             // \r
@@ -225,7 +172,7 @@ namespace DxPlay {
             this.trafficBrowser.Location = new System.Drawing.Point(3, 3);\r
             this.trafficBrowser.Margin = new System.Windows.Forms.Padding(0);\r
             this.trafficBrowser.Name = "trafficBrowser";\r
-            this.trafficBrowser.Size = new System.Drawing.Size(275, 436);\r
+            this.trafficBrowser.Size = new System.Drawing.Size(278, 371);\r
             this.trafficBrowser.TabIndex = 0;\r
             // \r
             // tpSegments\r
@@ -237,7 +184,7 @@ namespace DxPlay {
             this.tpSegments.Location = new System.Drawing.Point(4, 4);\r
             this.tpSegments.Name = "tpSegments";\r
             this.tpSegments.Padding = new System.Windows.Forms.Padding(3);\r
-            this.tpSegments.Size = new System.Drawing.Size(192, 30);\r
+            this.tpSegments.Size = new System.Drawing.Size(284, 377);\r
             this.tpSegments.TabIndex = 1;\r
             this.tpSegments.Text = "Segments";\r
             this.tpSegments.UseVisualStyleBackColor = true;\r
@@ -267,7 +214,7 @@ namespace DxPlay {
             this.dgSegments.Name = "dgSegments";\r
             this.dgSegments.RowHeadersVisible = false;\r
             this.dgSegments.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
-            this.dgSegments.Size = new System.Drawing.Size(186, 0);\r
+            this.dgSegments.Size = new System.Drawing.Size(278, 346);\r
             this.dgSegments.TabIndex = 1;\r
             this.dgSegments.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgSegments_CellContentClick);\r
             this.dgSegments.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgSegments_CellMouseDoubleClick);\r
@@ -278,79 +225,84 @@ namespace DxPlay {
             this.segmentActions.AutoSize = false;\r
             this.segmentActions.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
             this.segmentActions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
-            this.toolStripButton5,\r
+            this.tbDefineSegment,\r
             this.toolStripSeparator2,\r
-            this.toolStripButton1,\r
-            this.toolStripButton4,\r
-            this.toolStripButton2,\r
+            this.tbPositionAsTCIn,\r
+            this.tbSplitSegment,\r
+            this.tbPositionAsTCOut,\r
             this.toolStripSeparator1,\r
-            this.toolStripButton3});\r
+            this.tbDeleteSegment});\r
             this.segmentActions.Location = new System.Drawing.Point(3, 3);\r
             this.segmentActions.Name = "segmentActions";\r
             this.segmentActions.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;\r
-            this.segmentActions.Size = new System.Drawing.Size(186, 25);\r
+            this.segmentActions.Size = new System.Drawing.Size(278, 25);\r
             this.segmentActions.TabIndex = 0;\r
             this.segmentActions.Text = "toolStrip1";\r
             // \r
-            // toolStripButton5\r
+            // tbDefineSegment\r
             // \r
-            this.toolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
-            this.toolStripButton5.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton5.Image")));\r
-            this.toolStripButton5.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
-            this.toolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta;\r
-            this.toolStripButton5.Name = "toolStripButton5";\r
-            this.toolStripButton5.Size = new System.Drawing.Size(23, 22);\r
-            this.toolStripButton5.Text = "toolStripButton5";\r
+            this.tbDefineSegment.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+            this.tbDefineSegment.Image = ((System.Drawing.Image)(resources.GetObject("tbDefineSegment.Image")));\r
+            this.tbDefineSegment.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+            this.tbDefineSegment.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tbDefineSegment.Name = "tbDefineSegment";\r
+            this.tbDefineSegment.Size = new System.Drawing.Size(23, 22);\r
+            this.tbDefineSegment.Text = "toolStripButton5";\r
+            this.tbDefineSegment.Click += new System.EventHandler(this.OnDefineOneSegmentClick);\r
             // \r
             // toolStripSeparator2\r
             // \r
             this.toolStripSeparator2.Name = "toolStripSeparator2";\r
             this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\r
             // \r
-            // toolStripButton1\r
-            // \r
-            this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
-            this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));\r
-            this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
-            this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;\r
-            this.toolStripButton1.Name = "toolStripButton1";\r
-            this.toolStripButton1.Size = new System.Drawing.Size(23, 22);\r
-            this.toolStripButton1.Text = "toolStripButton1";\r
-            // \r
-            // toolStripButton4\r
-            // \r
-            this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
-            this.toolStripButton4.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton4.Image")));\r
-            this.toolStripButton4.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
-            this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta;\r
-            this.toolStripButton4.Name = "toolStripButton4";\r
-            this.toolStripButton4.Size = new System.Drawing.Size(23, 22);\r
-            this.toolStripButton4.Text = "toolStripButton4";\r
-            // \r
-            // toolStripButton2\r
-            // \r
-            this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
-            this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));\r
-            this.toolStripButton2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
-            this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;\r
-            this.toolStripButton2.Name = "toolStripButton2";\r
-            this.toolStripButton2.Size = new System.Drawing.Size(23, 22);\r
-            this.toolStripButton2.Text = "toolStripButton2";\r
+            // tbPositionAsTCIn\r
+            // \r
+            this.tbPositionAsTCIn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+            this.tbPositionAsTCIn.Image = ((System.Drawing.Image)(resources.GetObject("tbPositionAsTCIn.Image")));\r
+            this.tbPositionAsTCIn.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+            this.tbPositionAsTCIn.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tbPositionAsTCIn.Name = "tbPositionAsTCIn";\r
+            this.tbPositionAsTCIn.Size = new System.Drawing.Size(23, 22);\r
+            this.tbPositionAsTCIn.Text = "toolStripButton1";\r
+            this.tbPositionAsTCIn.Click += new System.EventHandler(this.OnActualPositionToTCInToolStripMenuItem1Click);\r
+            // \r
+            // tbSplitSegment\r
+            // \r
+            this.tbSplitSegment.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+            this.tbSplitSegment.Image = ((System.Drawing.Image)(resources.GetObject("tbSplitSegment.Image")));\r
+            this.tbSplitSegment.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+            this.tbSplitSegment.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tbSplitSegment.Name = "tbSplitSegment";\r
+            this.tbSplitSegment.Size = new System.Drawing.Size(23, 22);\r
+            this.tbSplitSegment.Text = "toolStripButton4";\r
+            this.tbSplitSegment.Click += new System.EventHandler(this.OnSplitSegmentAtCurrentPositionClick);\r
+            // \r
+            // tbPositionAsTCOut\r
+            // \r
+            this.tbPositionAsTCOut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+            this.tbPositionAsTCOut.Image = ((System.Drawing.Image)(resources.GetObject("tbPositionAsTCOut.Image")));\r
+            this.tbPositionAsTCOut.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+            this.tbPositionAsTCOut.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tbPositionAsTCOut.Name = "tbPositionAsTCOut";\r
+            this.tbPositionAsTCOut.Size = new System.Drawing.Size(23, 22);\r
+            this.tbPositionAsTCOut.Text = "toolStripButton2";\r
+            this.tbPositionAsTCOut.Click += new System.EventHandler(this.OnActualPositionToTCOutToolStripMenuItem1Click);\r
             // \r
             // toolStripSeparator1\r
             // \r
             this.toolStripSeparator1.Name = "toolStripSeparator1";\r
             this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\r
             // \r
-            // toolStripButton3\r
+            // tbDeleteSegment\r
             // \r
-            this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
-            this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));\r
-            this.toolStripButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
-            this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;\r
-            this.toolStripButton3.Name = "toolStripButton3";\r
-            this.toolStripButton3.Size = new System.Drawing.Size(23, 22);\r
-            this.toolStripButton3.Text = "toolStripButton3";\r
+            this.tbDeleteSegment.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+            this.tbDeleteSegment.Image = ((System.Drawing.Image)(resources.GetObject("tbDeleteSegment.Image")));\r
+            this.tbDeleteSegment.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+            this.tbDeleteSegment.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tbDeleteSegment.Name = "tbDeleteSegment";\r
+            this.tbDeleteSegment.Size = new System.Drawing.Size(23, 22);\r
+            this.tbDeleteSegment.Text = "toolStripButton3";\r
+            this.tbDeleteSegment.Click += new System.EventHandler(this.OnDeleteSegmentClick);\r
             // \r
             // imagesTabEdit\r
             // \r
@@ -359,13 +311,91 @@ namespace DxPlay {
             this.imagesTabEdit.Images.SetKeyName(0, "round_publish_black_24dp.png");\r
             this.imagesTabEdit.Images.SetKeyName(1, "ic_playlist_add_check_black_24dp_1x.png");\r
             // \r
+            // btnToggleSegmentEditor\r
+            // \r
+            this.btnToggleSegmentEditor.BackColor = System.Drawing.Color.White;\r
+            this.btnToggleSegmentEditor.FlatAppearance.BorderSize = 0;\r
+            this.btnToggleSegmentEditor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnToggleSegmentEditor.Image = ((System.Drawing.Image)(resources.GetObject("btnToggleSegmentEditor.Image")));\r
+            this.btnToggleSegmentEditor.Location = new System.Drawing.Point(0, 4);\r
+            this.btnToggleSegmentEditor.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);\r
+            this.btnToggleSegmentEditor.Name = "btnToggleSegmentEditor";\r
+            this.btnToggleSegmentEditor.Size = new System.Drawing.Size(23, 63);\r
+            this.btnToggleSegmentEditor.TabIndex = 0;\r
+            this.btnToggleSegmentEditor.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnToggleSegmentEditor.UseVisualStyleBackColor = false;\r
+            this.btnToggleSegmentEditor.Visible = false;\r
+            this.btnToggleSegmentEditor.Click += new System.EventHandler(this.OnToggleSegmentEditor);\r
+            // \r
+            // pMetadataDisplay\r
+            // \r
+            this.pMetadataDisplay.AutoSize = true;\r
+            this.pMetadataDisplay.ColumnCount = 2;\r
+            this.pMetadataDisplay.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+            this.pMetadataDisplay.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
+            this.pMetadataDisplay.Controls.Add(this.btnApprove, 1, 1);\r
+            this.pMetadataDisplay.Controls.Add(this.labelSelectedMetadata, 0, 0);\r
+            this.pMetadataDisplay.Controls.Add(this.txtSelectedID, 0, 1);\r
+            this.pMetadataDisplay.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+            this.pMetadataDisplay.Location = new System.Drawing.Point(0, 424);\r
+            this.pMetadataDisplay.Margin = new System.Windows.Forms.Padding(0);\r
+            this.pMetadataDisplay.Name = "pMetadataDisplay";\r
+            this.pMetadataDisplay.RowCount = 2;\r
+            this.pMetadataDisplay.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pMetadataDisplay.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pMetadataDisplay.Size = new System.Drawing.Size(319, 63);\r
+            this.pMetadataDisplay.TabIndex = 5;\r
+            // \r
+            // btnApprove\r
+            // \r
+            this.btnApprove.AutoSize = true;\r
+            this.btnApprove.BackColor = System.Drawing.Color.White;\r
+            this.btnApprove.FlatAppearance.BorderSize = 0;\r
+            this.btnApprove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnApprove.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.btnApprove.Image = ((System.Drawing.Image)(resources.GetObject("btnApprove.Image")));\r
+            this.btnApprove.Location = new System.Drawing.Point(217, 29);\r
+            this.btnApprove.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);\r
+            this.btnApprove.Name = "btnApprove";\r
+            this.btnApprove.Size = new System.Drawing.Size(102, 30);\r
+            this.btnApprove.TabIndex = 17;\r
+            this.btnApprove.Text = "Approve";\r
+            this.btnApprove.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnApprove.UseVisualStyleBackColor = false;\r
+            this.btnApprove.Click += new System.EventHandler(this.OnApprove);\r
+            // \r
+            // labelSelectedMetadata\r
+            // \r
+            this.labelSelectedMetadata.AutoSize = true;\r
+            this.labelSelectedMetadata.BackColor = System.Drawing.Color.Transparent;\r
+            this.labelSelectedMetadata.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.labelSelectedMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.labelSelectedMetadata.ForeColor = System.Drawing.SystemColors.ActiveCaption;\r
+            this.labelSelectedMetadata.Location = new System.Drawing.Point(3, 0);\r
+            this.labelSelectedMetadata.Name = "labelSelectedMetadata";\r
+            this.labelSelectedMetadata.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);\r
+            this.labelSelectedMetadata.Size = new System.Drawing.Size(211, 25);\r
+            this.labelSelectedMetadata.TabIndex = 13;\r
+            this.labelSelectedMetadata.Text = "Selected metadata";\r
+            // \r
+            // txtSelectedID\r
+            // \r
+            this.txtSelectedID.BackColor = System.Drawing.SystemColors.ActiveCaption;\r
+            this.txtSelectedID.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+            this.txtSelectedID.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.txtSelectedID.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.txtSelectedID.Location = new System.Drawing.Point(3, 28);\r
+            this.txtSelectedID.Name = "txtSelectedID";\r
+            this.txtSelectedID.Size = new System.Drawing.Size(211, 32);\r
+            this.txtSelectedID.TabIndex = 12;\r
+            // \r
             // mainMenu\r
             // \r
             this.mainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
             this.fileToolStripMenuItem});\r
             this.mainMenu.Location = new System.Drawing.Point(0, 0);\r
             this.mainMenu.Name = "mainMenu";\r
-            this.mainMenu.Size = new System.Drawing.Size(990, 24);\r
+            this.mainMenu.Size = new System.Drawing.Size(1068, 24);\r
             this.mainMenu.TabIndex = 21;\r
             this.mainMenu.Text = "menuStrip1";\r
             // \r
@@ -392,7 +422,7 @@ namespace DxPlay {
             this.menuApprove.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));\r
             this.menuApprove.Size = new System.Drawing.Size(165, 22);\r
             this.menuApprove.Text = "Approve";\r
-            this.menuApprove.Click += new System.EventHandler(this.OnClick_menuApprove);\r
+            this.menuApprove.Click += new System.EventHandler(this.OnApprove);\r
             // \r
             // playerControls\r
             // \r
@@ -401,7 +431,7 @@ namespace DxPlay {
             this.playerControls.Location = new System.Drawing.Point(0, 513);\r
             this.playerControls.Margin = new System.Windows.Forms.Padding(0);\r
             this.playerControls.Name = "playerControls";\r
-            this.playerControls.Size = new System.Drawing.Size(990, 116);\r
+            this.playerControls.Size = new System.Drawing.Size(1068, 116);\r
             this.playerControls.TabIndex = 22;\r
             // \r
             // PlayerForm\r
@@ -409,7 +439,7 @@ namespace DxPlay {
             this.AllowDrop = true;\r
             this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\r
             this.BackColor = System.Drawing.Color.White;\r
-            this.ClientSize = new System.Drawing.Size(990, 629);\r
+            this.ClientSize = new System.Drawing.Size(1068, 629);\r
             this.Controls.Add(this.mainSplit);\r
             this.Controls.Add(this.mainMenu);\r
             this.Controls.Add(this.playerControls);\r
@@ -427,14 +457,13 @@ namespace DxPlay {
             this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);\r
             this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PlayerForm_KeyDown);\r
             this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.PlayerForm_PreviewKeyDown);\r
-            this.pVideo.ResumeLayout(false);\r
-            this.ctxmSegmentActions.ResumeLayout(false);\r
             this.mainSplit.Panel1.ResumeLayout(false);\r
             this.mainSplit.Panel2.ResumeLayout(false);\r
+            this.mainSplit.Panel2.PerformLayout();\r
             ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).EndInit();\r
             this.mainSplit.ResumeLayout(false);\r
             this.panelPlayer.ResumeLayout(false);\r
-            this.marginPanel.ResumeLayout(false);\r
+            this.tableLayoutPanel1.ResumeLayout(false);\r
             this.tabEditor.ResumeLayout(false);\r
             this.tpMetadata.ResumeLayout(false);\r
             this.tpSegments.ResumeLayout(false);\r
@@ -442,6 +471,8 @@ namespace DxPlay {
             ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).EndInit();\r
             this.segmentActions.ResumeLayout(false);\r
             this.segmentActions.PerformLayout();\r
+            this.pMetadataDisplay.ResumeLayout(false);\r
+            this.pMetadataDisplay.PerformLayout();\r
             this.mainMenu.ResumeLayout(false);\r
             this.mainMenu.PerformLayout();\r
             this.ResumeLayout(false);\r
@@ -451,16 +482,9 @@ namespace DxPlay {
         #endregion\r
         private SplitContainer mainSplit;\r
         private Panel panelPlayer;\r
-        private MenuButton menuButtonSegmentActions;\r
-        private ContextMenuStrip ctxmSegmentActions;\r
         private System.ComponentModel.IContainer components;\r
-        private ToolStripMenuItem defineOneSegmentToolStripMenuItem;\r
-        private ToolStripMenuItem splitSegmentAtCurrentPositionToolStripMenuItem;\r
         private DataGridView dgSegments;\r
         private BindingSource bsSegments;\r
-        private ToolStripMenuItem deleteSegmentToolStripMenuItem;\r
-        private ToolStripMenuItem actualPositionToIntroToolStripMenuItem;\r
-        private ToolStripMenuItem actualPositionToOutroToolStripMenuItem;\r
         private MenuStrip mainMenu;\r
         private ToolStripMenuItem fileToolStripMenuItem;\r
         private DxPlay.Controls.BindableToolStripMenuItem menuOpenFile;\r
@@ -470,16 +494,21 @@ namespace DxPlay {
         private TabPage tpMetadata;\r
         private TabPage tpSegments;\r
         private ToolStrip segmentActions;\r
-        private ToolStripButton toolStripButton1;\r
-        private ToolStripButton toolStripButton2;\r
-        private ToolStripButton toolStripButton3;\r
-        private ToolStripButton toolStripButton4;\r
-        private ToolStripButton toolStripButton5;\r
+        private ToolStripButton tbPositionAsTCIn;\r
+        private ToolStripButton tbPositionAsTCOut;\r
+        private ToolStripButton tbDeleteSegment;\r
+        private ToolStripButton tbSplitSegment;\r
+        private ToolStripButton tbDefineSegment;\r
         private ImageList imagesTabEdit;\r
-        private Panel marginPanel;\r
         private TrafficClient.TrafficIDSelector trafficBrowser;\r
         private ToolStripSeparator toolStripSeparator2;\r
         private ToolStripSeparator toolStripSeparator1;\r
+        private TableLayoutPanel tableLayoutPanel1;\r
+        private NoFocusCueButton btnToggleSegmentEditor;\r
+        private TableLayoutPanel pMetadataDisplay;\r
+        private NoFocusCueButton btnApprove;\r
+        private Label labelSelectedMetadata;\r
+        private TextBox txtSelectedID;\r
     }\r
 }\r
 \r
index 5a9f246d696c899b9a3c162c6cdefae4b26a5b91..0f3aaeabc46c9ff28eb0826d7b32f272f997b080 100644 (file)
@@ -5,9 +5,9 @@ using System.Linq;
 using MaestroShared.Metadata;\r
 using NLog;\r
 using DxPlay.Model;\r
-using TrafficClient;\r
 using MaestroShared.Commons;\r
 using DxPlay.Properties;\r
+using MaestroShared.Targets;\r
 \r
 namespace DxPlay {\r
 \r
@@ -54,10 +54,12 @@ namespace DxPlay {
         private void ApplyModel() {\r
             bsSegments.DataSource = model.Segments;\r
             dgSegments.AutoGenerateColumns = true;\r
-            mainMenu.DataBindings.Add(new Binding("Visible", model, "IsMenuVisible"));\r
-            menuOpenFile.DataBindings.Add(new Binding("Enabled", model, "IsMenuVisible"));\r
-            menuApprove.DataBindings.Add(new Binding("Enabled", model, "IsApproveEnabled"));\r
-            Binding segmentEditorPanelBinding = new Binding("Panel2Collapsed", model, "IsSegmentEditorEnabled");\r
+            mainMenu.DataBindings.Add(new Binding("Visible", model, "IsMenuVisible", false, DataSourceUpdateMode.Never));\r
+            menuOpenFile.DataBindings.Add(new Binding("Enabled", model, "IsMenuVisible", false, DataSourceUpdateMode.Never));\r
+            menuApprove.DataBindings.Add(new Binding("Enabled", model, "IsApproveEnabled", false, DataSourceUpdateMode.Never));\r
+            btnApprove.DataBindings.Add(new Binding("Enabled", model, "IsApproveEnabled", false, DataSourceUpdateMode.Never));\r
+            tpSegments.DataBindings.Add(new Binding("Enabled", model, "IsApproveEnabled", false, DataSourceUpdateMode.Never));\r
+            Binding segmentEditorPanelBinding = new Binding("Panel2Collapsed", model, "IsSegmentEditorVisible", true, DataSourceUpdateMode.Never);\r
             segmentEditorPanelBinding.Format += (s, e) => {\r
                 bool enabled = (bool)e.Value;\r
                 e.Value = !enabled;\r
@@ -67,9 +69,21 @@ namespace DxPlay {
                     mainSplit.Panel2.Hide();\r
             };\r
             mainSplit.DataBindings.Add(segmentEditorPanelBinding);\r
-            trafficBrowser.Parameters = new TrafficParameters {\r
-                Configuration = Settings.Metadata, MessageBus = model.MessageBus\r
-            };\r
+            txtSelectedID.DataBindings.Add(new Binding("Text", model, "ID", false, DataSourceUpdateMode.Never));\r
+\r
+            trafficBrowser.IDChangedEvent += OnSelectedIDChanged;\r
+            model.InitializeTrafficIntegration(trafficBrowser);\r
+        }\r
+\r
+        private void OnSelectedIDChanged(string ID, int variantID, string text) {\r
+            //logger.Info("Selected ID: " + ID);\r
+            try {\r
+                model.ID = ID;\r
+                model.VariantID = variantID;\r
+            } catch (Exception e) {\r
+                MsgBox.Error(e.Message);\r
+                logger.Error(e);\r
+            }\r
         }\r
 \r
         public PlayerForm() {\r
@@ -84,21 +98,24 @@ namespace DxPlay {
         }\r
 \r
         private void InitializeTexts() {\r
-\r
-            defineOneSegmentToolStripMenuItem.Text = Settings.Resource("define-segment", Resources.SZEGMENS_DEFINIALASA);\r
-            splitSegmentAtCurrentPositionToolStripMenuItem.Text = Settings.Resource("break-segment", Resources.SZEGMENS_SZETVAGASA);\r
-            actualPositionToIntroToolStripMenuItem.Text = Settings.Resource("position-as-tcin", Resources.AKTUALIS_POZICIO_BELEPO);\r
-            actualPositionToOutroToolStripMenuItem.Text = Settings.Resource("position-as-tcout", Resources.AKTUALIS_POZICIO_KILEPO);\r
-            deleteSegmentToolStripMenuItem.Text = Settings.Resource("delete-segment", Resources.SZEGMENS_TORLESE);\r
-            menuButtonSegmentActions.Text = Settings.Resource("segments", Resources.SZEGMENSEK);\r
+            tpMetadata.Text = Settings.Resource("METADATA", Resources.METADATA);\r
+            tpSegments.Text = Settings.Resource("SEGMENTS", Resources.SEGMENTS);\r
+            tbPositionAsTCIn.Text = Settings.Resource("POSITIONASTCIN", Resources.POSITIONASTCIN);\r
+            tbPositionAsTCOut.Text = Settings.Resource("POSITIONASTCOUT", Resources.POSITIONASTCOUT);\r
+            tbDefineSegment.Text = Settings.Resource("DEFINESEGMENT", Resources.DEFINESEGMENT);\r
+            tbDeleteSegment.Text = Settings.Resource("DELETESEGMENT", Resources.DELETESEGMENT);\r
+            tbSplitSegment.Text = Settings.Resource("SPLITSEGMENT", Resources.SPLITSEGMENT);\r
+            menuOpenFile.Text = Settings.Resource("OPEN", Resources.OPEN);\r
+            menuApprove.Text = Settings.Resource("APPROVE", Resources.APPROVE);\r
+            btnApprove.Text = Settings.Resource("APPROVE", Resources.APPROVE);\r
 \r
             ToolTip tt = new ToolTip();\r
-            tt.SetToolTip(playerControls.Pause, Settings.Resource("pause", Resources.SZUNET));\r
-            tt.SetToolTip(playerControls.Play, Settings.Resource("play", Resources.LEJATSZAS));\r
-            tt.SetToolTip(playerControls.Stop, Settings.Resource("stop", Resources.LEALLITAS));\r
-            playerControls.Status.Text = Settings.Resource("no-input", Resources.NINCS_BEMENET);\r
-            playerControls.Start.Text = Settings.Resource("start", Resources.INDULASI_PONT);\r
-            playerControls.Duration.Text = Settings.Resource("length", Resources.HOSSZ);\r
+            tt.SetToolTip(playerControls.Pause, Settings.Resource("PAUSE", Resources.PAUSE));\r
+            tt.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY));\r
+            tt.SetToolTip(playerControls.Stop, Settings.Resource("STOP", Resources.STOP));\r
+            playerControls.Status.Text = Settings.Resource("NOINPUT", Resources.NOINPUT);\r
+            playerControls.Start.Text = Settings.Resource("START", Resources.START);\r
+            playerControls.Duration.Text = Settings.Resource("LENGTH", Resources.LENGTH);\r
         }\r
 \r
         private void Cueue() {\r
@@ -149,20 +166,26 @@ namespace DxPlay {
             }\r
         }\r
 \r
-        public void Open(FileInfo fileInfo) {\r
+        public void OpenFile(FileInfo fileInfo) {\r
             logger.Debug("Open");\r
+            if (model.IsMenuVisible) {\r
+                model.ID = null;\r
+                model.CurrentFile = null;\r
+            }\r
+\r
             if (m_play != null)\r
                 m_play.Dispose();\r
             this.Text = fileInfo.Name;\r
             selectedFile = fileInfo.FullName;\r
-            \r
+\r
             Cueue();\r
 \r
             if (model.IsMenuVisible) {\r
+                model.CurrentFile = fileInfo;\r
                 openFileDialog.InitialDirectory = fileInfo.Directory.FullName;\r
                 string id = fileInfo.Name.Replace(fileInfo.Extension, "");\r
                 try {\r
-                    model.InitializeSegments(id);\r
+                    model.Lookup(id);\r
                 } catch (Exception e) {\r
                     MsgBox.Error(e.Message);\r
                     logger.Error(e);\r
@@ -174,7 +197,7 @@ namespace DxPlay {
         private void Form1_DragDrop(object sender, DragEventArgs e) {\r
             string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);\r
             FileInfo fileInfo = new FileInfo(files[0]);\r
-            Open(fileInfo);\r
+            OpenFile(fileInfo);\r
         }\r
 \r
         private void panel1_MouseDown(object sender, MouseEventArgs e) {\r
@@ -362,6 +385,8 @@ namespace DxPlay {
         }\r
 \r
         private void OnDefineOneSegmentClick(object sender, EventArgs e) {\r
+            if (m_play == null)\r
+                return;\r
             MovieSegment segment = null;\r
             if (model.Segments.Count == 0) {\r
                 segment = new MovieSegment() {\r
@@ -389,6 +414,8 @@ namespace DxPlay {
         }\r
 \r
         private void SetActualPositionAsIn() {\r
+            if (m_play == null)\r
+                return;\r
             MovieSegment currentSegment = bsSegments.Current as MovieSegment;\r
             if (currentSegment == null || bsSegments.Count == 0) {\r
                 MovieSegment newSegment = new MovieSegment() {\r
@@ -425,6 +452,8 @@ namespace DxPlay {
 \r
 \r
         private void SetActualPositionAsOut() {\r
+            if (m_play == null)\r
+                return;\r
             MovieSegment currentSegment = bsSegments.Current as MovieSegment;\r
             if (currentSegment == null || bsSegments.Count == 0) {\r
                 MovieSegment newSegment = new MovieSegment() {\r
@@ -474,18 +503,18 @@ namespace DxPlay {
             int index = e.Column.Index;\r
             switch (index) {\r
                 case 0:\r
-                    e.Column.HeaderText = Settings.Resource("tc-in", Resources.BELEPO);\r
+                    e.Column.HeaderText = Settings.Resource("TCIN", Resources.TCIN);\r
                     e.Column.ReadOnly = true;\r
                     break;\r
                 case 1:\r
-                    e.Column.HeaderText = Settings.Resource("tc-out", Resources.KILEPO);\r
+                    e.Column.HeaderText = Settings.Resource("TCOUT", Resources.TCOUT);\r
                     e.Column.ReadOnly = true;\r
                     break;\r
                 case 2:\r
-                    e.Column.HeaderText = Settings.Resource("optional", Resources.ELHAGYHATO);\r
+                    e.Column.HeaderText = Settings.Resource("OPTIONAL", Resources.OPTIONAL);\r
                     break;\r
                 case 3:\r
-                    e.Column.HeaderText = Settings.Resource("comment", Resources.MEGJEGYZES);\r
+                    e.Column.HeaderText = Settings.Resource("COMMENT", Resources.COMMENT);\r
                     break;\r
             }\r
         }\r
@@ -525,11 +554,15 @@ namespace DxPlay {
 \r
         private void menuOpenFile_Click(object sender, EventArgs e) {\r
             if (openFileDialog.ShowDialog() == DialogResult.OK)\r
-                Open(new FileInfo(openFileDialog.FileName));\r
+                OpenFile(new FileInfo(openFileDialog.FileName));\r
+        }\r
+\r
+        private void OnApprove(object sender, EventArgs e) {\r
+            model.Approve();\r
         }\r
 \r
-        private void OnClick_menuApprove(object sender, EventArgs e) {\r
-            MessageBox.Show("approve");\r
+        private void OnToggleSegmentEditor(object sender, EventArgs e) {\r
+\r
         }\r
     }\r
 }\r
index b5dcd9baac8dfe212806e3a65736891840b2ed22..0bbfdd1b27b18c574f0041847e6f282a5a8c4b27 100644 (file)
   <resheader name="writer">\r
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
   </resheader>\r
-  <metadata name="ctxmSegmentActions.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
-    <value>17, 17</value>\r
-  </metadata>\r
   <metadata name="bsSegments.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
     <value>184, 17</value>\r
   </metadata>\r
     <value>412, 17</value>\r
   </metadata>\r
   <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
-  <data name="toolStripButton5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+  <data name="tbDefineSegment.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
     <value>\r
         iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
         YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC8SURBVDhP1ZO9DcIwFISfqKGjpaENG4S/GZiEOiWMkR2Y\r
         joA3SmCG2RrIDDz6jTEwy46gBfBPi4WIn2M2K/9fKX8hkQ9xw2LrlhXH8QAAAABJRU5ErkJggg==\r
 </value>\r
   </data>\r
-  <data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+  <data name="tbPositionAsTCIn.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
     <value>\r
         iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
         YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhPYxgFVAWOUJoiUALE/4HYB8wjE8AMmQbmkQmo\r
         RK5CYII=\r
 </value>\r
   </data>\r
-  <data name="toolStripButton4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+  <data name="tbSplitSegment.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
     <value>\r
         iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
         YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhPYxjZ4AAUUwxGDUIFFUDcD2HCATaDQGoKIEzs\r
         UGzIkAUMDABv+SVD4UMwTwAAAABJRU5ErkJggg==\r
 </value>\r
   </data>\r
-  <data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+  <data name="tbPositionAsTCOut.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
     <value>\r
         iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
         YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhPYxgFFAMnKE0R8APi/0BcAuZRCKYBMdUMmwfE\r
         RK5CYII=\r
 </value>\r
   </data>\r
-  <data name="toolStripButton3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+  <data name="tbDeleteSegment.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
     <value>\r
         iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
         YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABvSURBVDhPYxhZwBVK4wOOUBoncAPi/0DcDuZhByA5kBon\r
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo\r
-        CAAAAk1TRnQBSQFMAgEBAgEAAWgBAAFoAQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
+        CAAAAk1TRnQBSQFMAgEBAgEAAUABAQFAAQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
         AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r
         AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r
         AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r
         Av8B+AEfBgAB/wGBAv8B8AEPBgAB/wGBAf8BwAEhAYcGAAH/AYEB/wHAATMBwwYAAfwBAAE/Av8B4QYA\r
         AfwBAAE/Av8B8QYAAf4BAAF/AcABAwH7BgAB/wEAAf8BwAEDAf8GAAH/AYEE/wYAAf8BwwT/BgAB/wHn\r
         Af8BwAEDAf8GAAP/AcABAwH/BgAB+AEAAR8D/wYAAfgBAAEfA/8GAAb/BgAG/wYABv8GAAb/BgAL\r
+</value>\r
+  </data>\r
+  <data name="btnToggleSegmentEditor.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAJpJREFUaEPt\r
+        1zEKwzAAQ1Efp0uWnq17UujWm3YIgR6gkWi92VtDLPgPBCGTBAE7BQAAAH/zUObvY56n8vnl5hdJ7kot\r
+        HzniorwURpzNI1YlesSkMGIEHrEp0SOuCiNG4BFvJXZEb8CiDK/3CfnuNDzKn6V3BsSUb53ClD9a7yYa\r
+        U771LxBR3nwgxZavXDi2fOXiseUBAACylLIDyDZ2w7cTLqQAAAAASUVORK5CYII=\r
+</value>\r
+  </data>\r
+  <data name="btnApprove.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAVJJREFUSEvt\r
+        008rBVEYx/FJ6i5QFG7CG7AnL0A2bNS9W0VWLCiXhSwUindgK/begJWNmw0pWd0FKzellJX/3980z22c\r
+        Zg5z3QV1f/VZPOecec7MnJmgmX+RIezhEk/4wD12MIhfZQlqmOYZJdSVFajJOw4xjm50YhgHsI32kSlj\r
+        UOMXFDSQkiJskzkN+NKCaZzhFbpoHd9lG1pbCauU9OICdjdyg1bEsxGJpw12+CMacKMF19CCW8ygHW7U\r
+        2DZ3N7HzeMQRdF61rEKTesQODSQk3tzEN5mHO7+LMOfQQNphJjU37pN0QZ/2GzQ/ivBbVpFX4Ym+d2u8\r
+        rAFPFqF1el21AxpQ4UmWDXSzWldVUY4KHa4vWTbog9bp5oPZqHiAJhqRNajniQr9YKfRwB0m0YN60o9N\r
+        qJdMIIwmrmATjbCFL8lhAfofki74qWNMoZk/kSD4BI3xj2R8oQqYAAAAAElFTkSuQmCC\r
 </value>\r
   </data>\r
   <metadata name="mainMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
index b53f777b2676631df488c18451de0ffdaef94960..0a67593da9c88fb095c6a659b1494da9ffa44418 100644 (file)
@@ -30,7 +30,7 @@ namespace Maestro {
             if (arguments.Length > 1) {\r
                 FileInfo fi = new FileInfo(arguments[1]);\r
                 if (fi.Exists)\r
-                    playerForm.Open(fi);\r
+                    playerForm.OpenFile(fi);\r
             }\r
             return playerForm.IsDisposed;\r
         }\r
index 4cc4969d10790bc59ef9f86783b67e5e4c9c9d3f..b05e5817ffc56acdd6c246ecad3ad7d78c6fd49f 100644 (file)
@@ -138,7 +138,7 @@ namespace Maestro {
                         },\r
                         Segments = movieSegments\r
                     };\r
-                    player.Open(fileInfo);\r
+                    player.OpenFile(fileInfo);\r
                     if (!player.IsDisposed)\r
                         player.ShowDialog();\r
                 } else {\r
index c0d65f6c371f319deb4e4607f7eac368d31bef98..13a772d0210605067f10be930c1f3d50bcc17f8f 100644 (file)
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS\r
-        CAAAAk1TRnQBSQFMAgEBAgEAAWgBAQFoAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
+        CAAAAk1TRnQBSQFMAgEBAgEAAXgBAQF4AQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
         AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r
         AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r
         AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r
index 4169050f9c1a3c1719befe87122070e1c8c08bcf..2527002deb04070ed027ac5a8df8751a81797350 100644 (file)
   <ItemGroup>\r
     <None Include="Resources\round_publish_black_24dp.png" />\r
   </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="Resources\sharp_keyboard_arrow_left_black_48dp.png" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="Resources\sharp_keyboard_arrow_right_black_48dp.png" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="Resources\baseline_backup_black_24dp.png" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="Resources\outline_backup_black_24dp.png" />\r
+  </ItemGroup>\r
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
 </Project>
\ No newline at end of file
index 15edbb2a8a1847a02f9b7cd586b32587df5ee52c..7142c5d5a423bfd008edac6a5ad5007053281fb7 100644 (file)
@@ -240,6 +240,16 @@ namespace MaestroShared.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
+        /// </summary>\r
+        public static System.Drawing.Bitmap outline_backup_black_24dp {\r
+            get {\r
+                object obj = ResourceManager.GetObject("outline_backup_black_24dp", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
         /// </summary>\r
@@ -249,5 +259,25 @@ namespace MaestroShared.Properties {
                 return ((System.Drawing.Bitmap)(obj));\r
             }\r
         }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
+        /// </summary>\r
+        public static System.Drawing.Bitmap sharp_keyboard_arrow_left_black_48dp {\r
+            get {\r
+                object obj = ResourceManager.GetObject("sharp_keyboard_arrow_left_black_48dp", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
+        /// </summary>\r
+        public static System.Drawing.Bitmap sharp_keyboard_arrow_right_black_48dp {\r
+            get {\r
+                object obj = ResourceManager.GetObject("sharp_keyboard_arrow_right_black_48dp", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
     }\r
 }\r
index c11d6ca0fef91684a179b6d0861606fc815b5275..e7450e91987cd3af32c22c2f9f5bc3d94d5537d6 100644 (file)
   <data name="round_publish_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
     <value>..\Resources\round_publish_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
+  <data name="sharp_keyboard_arrow_left_black_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\sharp_keyboard_arrow_left_black_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
+  <data name="sharp_keyboard_arrow_right_black_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\sharp_keyboard_arrow_right_black_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
+  <data name="outline_backup_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\outline_backup_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
 </root>
\ No newline at end of file
diff --git a/client/MaestroShared/Resources/baseline_backup_black_24dp.png b/client/MaestroShared/Resources/baseline_backup_black_24dp.png
new file mode 100644 (file)
index 0000000..57d8362
Binary files /dev/null and b/client/MaestroShared/Resources/baseline_backup_black_24dp.png differ
diff --git a/client/MaestroShared/Resources/outline_backup_black_24dp.png b/client/MaestroShared/Resources/outline_backup_black_24dp.png
new file mode 100644 (file)
index 0000000..154c556
Binary files /dev/null and b/client/MaestroShared/Resources/outline_backup_black_24dp.png differ
diff --git a/client/MaestroShared/Resources/sharp_keyboard_arrow_left_black_48dp.png b/client/MaestroShared/Resources/sharp_keyboard_arrow_left_black_48dp.png
new file mode 100644 (file)
index 0000000..f3535b1
Binary files /dev/null and b/client/MaestroShared/Resources/sharp_keyboard_arrow_left_black_48dp.png differ
diff --git a/client/MaestroShared/Resources/sharp_keyboard_arrow_right_black_48dp.png b/client/MaestroShared/Resources/sharp_keyboard_arrow_right_black_48dp.png
new file mode 100644 (file)
index 0000000..e6a35c1
Binary files /dev/null and b/client/MaestroShared/Resources/sharp_keyboard_arrow_right_black_48dp.png differ
index 4698632c7561f50118beb5d5b8b884ad65c5b044..dfff9b9153ea59c9a3a9c8a3f0ff0691ae3b8593 100644 (file)
@@ -26,6 +26,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MetadataSelector", "Metadat
 EndProject\r
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MCTool", "MCTool\MCTool.csproj", "{A64ADB88-2CC4-4E46-BC53-643E2C49E179}"\r
 EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{B29016BD-2E82-407B-B0DB-628EC92C7751}"\r
+       ProjectSection(SolutionItems) = preProject\r
+               ..\docs\mediacube-dxplay.md = ..\docs\mediacube-dxplay.md\r
+       EndProjectSection\r
+EndProject\r
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                Debug|Any CPU = Debug|Any CPU\r
index ba5e13fb0fd027d11b601813ccc2df8d799b6c63..f8176cc3c69984617ee40d263933441d05f2c01c 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers\r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("1.0.0.0")]\r
-[assembly: AssemblyFileVersion("1.0.0.0")]\r
+[assembly: AssemblyVersion("1.0.0.1")]\r
+[assembly: AssemblyFileVersion("1.0.0.1")]\r
index c58c43660b6d37ab35dd2594bc02adcc1b5d74b1..87f85fb556c73acd4598f35d849c4d3eb228bbdf 100644 (file)
@@ -106,6 +106,23 @@ namespace TrafficClient {
 \r
         private void OnSelectionChanged(DataGridViewRow actualRow) {\r
             TrafficItem trafficItem = actualRow.DataBoundItem as TrafficItem;\r
+            DataGridViewCheckBoxCell actualCell = actualRow.Cells[0] as DataGridViewCheckBoxCell;\r
+            if (!actualCell.Equals(selectedCell)) {\r
+                ClearSelection();\r
+                selectedCell = actualRow.Cells[0] as DataGridViewCheckBoxCell;\r
+            }\r
+            selectedCell.Value = !(bool)selectedCell.Value;\r
+            bool selected = (bool)selectedCell.Value;\r
+\r
+            if (selected) {\r
+                CreateVersionIfMissing(trafficItem);\r
+                IDChangedEvent?.Invoke(trafficItem.MediaID, trafficItem.VariantID, trafficItem.Title);\r
+            }\r
+            else\r
+                IDChangedEvent?.Invoke(null, 0, null);\r
+        }\r
+\r
+        private void CreateVersionIfMissing(TrafficItem trafficItem) {\r
             if (String.IsNullOrEmpty(trafficItem.MediaID)) {\r
                 var currentVersion = trafficAPI.GetMaterials(trafficItem.EpisodeID, false)?.FirstOrDefault();\r
                 if (currentVersion == null || String.IsNullOrEmpty(currentVersion.MediaID)) {\r
@@ -121,18 +138,13 @@ namespace TrafficClient {
 \r
                 if (trafficItem.VariantID == 0 || String.IsNullOrEmpty(trafficItem.MediaID))\r
                     return;\r
+            } else if (ModifierKeys.HasFlag(Keys.Shift)) {\r
+                var currentVersion = trafficAPI.GetMaterials(trafficItem.EpisodeID, false)?.FirstOrDefault();\r
+                TrafficVersion newVersion = trafficAPI.CreateMaterialVersion(trafficItem.EpisodeID, true);\r
+                if (newVersion != null) {\r
+                    RefreshResults();\r
+                }\r
             }\r
-            DataGridViewCheckBoxCell actualCell = actualRow.Cells[0] as DataGridViewCheckBoxCell;\r
-            if (!actualCell.Equals(selectedCell)) {\r
-                ClearSelection();\r
-                selectedCell = actualRow.Cells[0] as DataGridViewCheckBoxCell;\r
-            }\r
-            selectedCell.Value = !(bool)selectedCell.Value;\r
-            bool selected = (bool)selectedCell.Value;\r
-            if (actualRow.Selected)\r
-                IDChangedEvent?.Invoke(trafficItem.MediaID, trafficItem.VariantID, trafficItem.Title);\r
-            else\r
-                IDChangedEvent?.Invoke(null, 0, null);\r
         }\r
 \r
         public void ClearSelection() {\r
index fa0b043e13f9ebeaf0e08eacb420f53d6609b7eb..3c516c76ba8fed1afc58e16d212568cdbaf190ac 100644 (file)
@@ -3,7 +3,6 @@ using System.Collections.Generic;
 using System.Data;\r
 using System.Data.SqlClient;\r
 using NLog;\r
-using System.Diagnostics;\r
 using LinkDotNet.MessageHandling.Contracts;\r
 \r
 namespace TrafficClient.Workers {\r
@@ -28,6 +27,7 @@ namespace TrafficClient.Workers {
                 NextBroadcastDate = data.v_NextBroadcastDate,\r
                 FirstBroadcastDate = data.v_FirstBroadcastDate,\r
                 EpisodeID = data.v_EpisodeID,\r
+                SegmentCount = (short)data.v_VariantNrSegments,\r
                 OK = data.v_OkForAir != null && true.Equals(data.v_OkForAir)\r
             };\r
         }\r
diff --git a/docs/mediacube-dxplay.md b/docs/mediacube-dxplay.md
new file mode 100644 (file)
index 0000000..3f56d9e
--- /dev/null
@@ -0,0 +1,35 @@
+# MediaCube Maestro DxPlay\r
+> *Verzió: 1.0 - 2018.08.13*\r
+\r
+A DxPlay alkalmazás lehetővé teszi a nagyfelbontású MXF fájlok lejátszását, és a megnyitott anyaghoz PlanAir szegmens adatok hozzárendelését.\r
+\r
+## MediaCube server\r
+* Platformfüggetlen Java OSGi alkalmazás média állományok és metaadataik kezeléséhez.\r
+* Magas rendelkezésreállású Linux cluster környezet.\r
+* Tetszőlegesen ütemezhető, könnyen konfigurálható és bővíthető folyamatkezelés.\r
+* A támogatott folyamatok: TSM archiválás/visszatöltés on-demand és automatizált módon, média másolás/mozgatás tárhelyek között, tárhely felszabadítás lejárati feltételek teljesülésekor, média transzkódolás.\r
+* A tárhely kezeléshez beépített API: tsm, ftp, smb, filesystem támogatással.\r
+* Konfigurálható metaadat kezelés, Full-Text keresési lehetőséggel.\r
+* Webes HTML5 kliens: keresés, kisfelbontású videók megtekintése, on-demand visszatöltés, folyamatok kézi indítása, folyamatok monitorozása, média mozgatási folyamatok megtekintése idővonalon.\r
+* REST API az adatok lekérdezéséhez, módosításához.\r
+\r
+## MediaCube Maestro\r
+* Windows .NET vastag kliens a média állományok és metaadataik felhasználói kezeléséhez.\r
+* Tálca alkalmazásként vagy ablakban futva több forrásmappa változás-monitorozása lehetséges, változás esetén felhasználói értesítés.\r
+* Beépített videólejátszó a nagyfelbontású anyagok megtekintéséhez és szegmentáláshoz.\r
+* Beépített hangrögzítő a hangalámondás és a telefonos interjúk felvételéhez.\r
+* Támogatott források: smb, ftp, filesystem\r
+* Társrendszerekből érkező metaadat hozzárendelése videó állományhoz, a cél állományok fájlnév képzése sablonokkal konfigurálva.\r
+* Egy vagy több forrásfájlra tetszőleges számú célba történő másolási/mozgatási folyamat elindítása.\r
+* Konfigurációban engedélyezhető munkafolyamat segítő funkciók: lejárati dátumok beállítása, jelzés küldése emailben, metaadatok exportálása specifikus formátumokba.\r
+* Televíziós munkahelyekre kihegyezett médiakezelési sablonok: szerkesztő, szerkesztő-riporter, vágó, adásmegtekintő, adáslebonyolító.\r
+* FXP alapú átvitel támogatása a forrás és a cél tárolók között.\r
+\r
+## Beállítások\r
+![Dxplay Main](dxplay-main.png)\r
+\r
+* Octopus hírrendszer: metaadat forrásként REST API-n keresztül.\r
+* PlanAir adástervező rendszer: lekérdezés, adásinformáció visszatöltése SQL tárolt eljáráson keresztül (adáskész, szegmensadatok, új kópiák létrehozása).\r
+* Morpheus adáskijátszó rendszer: XML alapú metaadat betöltés.\r
+* NEXIO videóserver: API-n keresztül a MediaBase lekérdezése, metaadatok feltöltése.\r
+* TSM: API-n keresztül anyag betöltés/visszatöltés.\r