Initial commit

This commit is contained in:
alexpete
2021-03-05 11:26:34 -08:00
commit a10351f38d
27091 changed files with 5521199 additions and 0 deletions
@@ -0,0 +1,89 @@
Universal Remote Console
------------------------
Important: for the tool to work properly, the configuration files
* filters.xml
* params.xml
need to be in the same directoy where the .exe is found.
The build process will copy these files in the correct directory. In case you accidentally delete them,
you can find these files in RemoteConsole/config-files.
Feel free to modify this files to your requirements.
================================ Overview ======================================
In a nutshell, this tool allows you to:
* connect remotely to the game (multiple platforms) and the editor
* process and filter the game's console output
* execute a macro or OS command when certain log is received
* execute CVars and macros, take videos, snapshots, ...
* process (offline) existing log files (drag & drop) [new!]
* modify in-game parameters while the game is running using sliders
* MIDI input devices supported (KORG at the moment) to execute macros and sliders
* MIDI input has the extra advantage of not requiring a change of focus in the application
* fully customisable via XML files that you can change the tool parameters on-the-fly.
* get some statistics
Any comments/questions/requests, just let me know (Dario [dariop])
================ Filter Configuration Quick Guide =======================================
File: filters.xml
It needs to be located in the SAME DIRECTORY as the application.
This file allows you to define your own filters and associated accions.
Feel free to add/remove/modify the contents of this file to suit your needs.
The initial content is intended to be an example of usage.
How does this work?
* <Filter Name="Example">
This attribute is used to specify the filter. In this example, any log that
contains the word "Example" will be added to this filter's tab.
* <Label>My Example</Label>
This parameter is optional. If included it will be used to label the filter Tab.
Otherwise, the "Name" attribute in Filter will be used.
* <Color>FF0000</Color>
Optional. Specifies the color of the text in the filter. Format R8G8B8.
* <RegExp>\!(\w*)\]</RegExp>
Optional. Specifies a regular expression to be used as filter. The given example
would would added to this filter's tab any log that contains something of the
kind "...!....]", i.e. has an exclamation mark and at certain point later a "]"
* <Exec Type="DosCmd">dir c:</Exec>
Optional. Specifies an action to be taken if a particular filter is activated.
It can be used for instance to trigger a snapshot or a video when certain log
message is sent (e.g. a debugging message).
It can be very useful for debugging and QA.
There are two types of actions that can be executed:
+ <Exec Type="Macro">ScreenShot</Exec>
Executes a Macro (in this case ScreenShot, defined in this file)
+ <Exec Type="DosCmd">dir c:</Exec>
Executes a dos command (in this case "dir c:")
================ Menu Configuration Quick Guide =======================================
File: params.xml
It needs to be located in the SAME DIRECTORY as the application.
This file defines the menu of the applciation. You can add:
* Targets (IPs of the devices you want to connect to)
* Macros (set of CVars you want to sent at once to the game)
* GamePlay-specific commands (e.g. SetViewMode:FlyOn)
* Buttons (Macros that are places as separate buttons)
* Sliders (Macros whose parameters change with the slider value)
You can assign MIDI codes to each entry so they can be controlled via an external MIDI input.
All this data will become part of your menu so you can customize what you really need.
... and some more stuff to be discovered :-)
Cheers
Dario
@@ -0,0 +1,41 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RemoteConsole", "RemoteConsole\RemoteConsole.csproj", "{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|Any CPU.ActiveCfg = Debug|x86
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|Any CPU.Build.0 = Debug|x86
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|Mixed Platforms.Build.0 = Debug|x86
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|x64.ActiveCfg = Debug|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|x64.Build.0 = Debug|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|x86.ActiveCfg = Debug|x86
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Debug|x86.Build.0 = Debug|x86
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|Any CPU.ActiveCfg = Release|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|Any CPU.Build.0 = Release|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|Mixed Platforms.ActiveCfg = Release|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|Mixed Platforms.Build.0 = Release|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|x64.ActiveCfg = Release|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|x64.Build.0 = Release|x64
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|x86.ActiveCfg = Release|x86
{1C86D237-2FDE-4303-835F-4A4E1F17E0C5}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = RemoteConsole\RemoteConsole.csproj
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
@@ -0,0 +1,128 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
using System;
using System.Collections.Generic;
using System.Text;
namespace RemoteConsole
{
public static class Common
{
public static readonly string FiltersFileFullPath = System.IO.Path.Combine( System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), "filters.xml");
public static readonly string MenusFileFullPath = System.IO.Path.Combine( System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), "params.xml");
public static readonly string IconsPath = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + System.IO.Path.PathSeparator + "Icons" + System.IO.Path.PathSeparator;
public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
{
Comparer<T> comp = Comparer<T>.Default;
if (comp.Compare(val, min) <= 0) return min;
else if (comp.Compare(val, max) >= 0) return max;
else return val;
}
public static int AddImageFileToImageList(string path, System.Windows.Forms.ImageList imgList)
{
if (path != null)
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(path);
if (fileInfo.Exists)
{
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
imgList.Images.Add(img);
return imgList.Images.Count - 1;
}
}
return -1;
}
public static bool IsRunningOnMono ()
{
return Type.GetType ("Mono.Runtime") != null;
}
}
public class CSettings
{
public enum EMode
{
eM_Full = 0, // Normal mode (connected to target)
eM_CommandsOnly, // Connected to target but not reading the log
eM_FileOnly, // Parse a file (not connected to target)
}
public bool DebugMidi = false;
public EMode Mode = EMode.eM_Full;
}
}
#if __MonoCS__
/**
* As of 2014/11/28, Mono lacks an implementation of System.Windows.Forms.DataVisualization.Charting.Chart.
* This code functions as a proxy to work around that.
*/
namespace System.Windows.Forms.DataVisualization.Charting
{
/**
* Various System.Windows.Forms.DataVisualization.Charting.*Collection member methods throw NotImplemented on use.
* JunkCollection provides the same method interface with implicit conversion operators to avoid complicating code.
*/
public class JunkCollection<T> : List<T>
{
public static implicit operator ChartAreaCollection(JunkCollection<T> list)
{
return new ChartAreaCollection ();
}
public static implicit operator LegendCollection(JunkCollection<T> list)
{
return new LegendCollection ();
}
public static implicit operator SeriesCollection(JunkCollection<T> list)
{
return new SeriesCollection ();
}
static T s_value;
public T this[string key]
{
get { return s_value; }
set { }
}
public void Add(string ignore)
{
}
}
public class Chart : System.Windows.Forms.Control, System.ComponentModel.ISupportInitialize
{
public ChartDashStyle BorderlineDashStyle;
public JunkCollection< ChartArea > ChartAreas = new JunkCollection< ChartArea > ();
public JunkCollection< Legend > Legends = new JunkCollection< Legend > ();
public JunkCollection< Series > Series = new JunkCollection< Series > ();
#region System.ComponentModel.ISupportInitialize
public void BeginInit()
{
}
public void EndInit()
{
}
#endregion
}
}
#endif
@@ -0,0 +1,139 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace RemoteConsole
{
class FilterData
{
public string Tag { get; private set; } // tag to search for in the log string
public string RegExpText; // customize reg exp search
public string Label; // tab label
public EMessageType MsgType { get; private set; } // text type (error, warning, message...)
public List<Exec> Execute { get; private set; } // Commands to Execute
public int TextColor = Convert.ToInt32("FFFFFF", 16); // White color by default
public class Exec
{
public enum EExecType
{
eET_None = 0,
eET_Macro,
eET_DosCmd
}
public Exec(string typeStr_, string cmd_)
{
string s = typeStr_.ToLower();
if (s == "macro")
Type = EExecType.eET_Macro;
else if (s == "doscmd")
Type = EExecType.eET_DosCmd;
else
Type = EExecType.eET_None;
Command = cmd_;
}
public EExecType Type { get; private set; }
public string Command { get; private set; }
}
public FilterData(string tabName_, EMessageType type)
{
this.Tag = tabName_;
this.Label = tabName_;
this.MsgType = type;
Execute = new List<Exec>();
}
public void AddExecCommand(Exec e)
{
if (e != null)
{
if (Execute.Find(x => x.Command.ToLower() == e.Command.ToLower()) == null)
{
Execute.Add(e);
}
}
}
}
class FilterFileReader
{
public List<FilterData> CreateStandardFilters()
{
List<FilterData> filterDataList = new List<FilterData>();
FilterData data = new FilterData("[*Error*]", EMessageType.eMT_Error);
data.Label = "Errors";
data.TextColor = Convert.ToInt32("FF0000", 16);
filterDataList.Add(data);
data = new FilterData("[*Warnings*]", EMessageType.eMT_Warning);
data.Label = "Warnings";
data.TextColor = Convert.ToInt32("0000FF", 16);
filterDataList.Add(data);
return filterDataList;
}
private int ExtractColor(string text)
{
Regex rx = new Regex("#?([0-9A-Fa-f]{6})");
Match match = rx.Match(text);
if (match.Success && match.Groups.Count == 2)
{
string hexColor = match.Groups[1].Value;
return Convert.ToInt32(hexColor, 16);
}
return 0;
}
public List<FilterData> GetXmlFilters(string path)
{
if (System.IO.File.Exists(path) == false)
{
return null;
}
List<FilterData> filterDataList = new List<FilterData>();
System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
xd.Load(path);
System.Xml.XmlNodeList nodelist = xd.SelectNodes("/Filters/Filter");
foreach (System.Xml.XmlNode node in nodelist) // for each <Filter> node
{
FilterData filter = new FilterData(node.Attributes.GetNamedItem("Name").Value, EMessageType.eMT_Message);
System.Xml.XmlNode n = node.SelectSingleNode("Label");
if (n != null) { filter.Label = n.InnerText; }
n = node.SelectSingleNode("Color");
if (n != null) { filter.TextColor = ExtractColor(n.InnerText); }
n = node.SelectSingleNode("RegExp");
if (n != null) { filter.RegExpText = n.InnerText; }
n = node.SelectSingleNode("Exec");
if (n != null)
{
filter.AddExecCommand(
new FilterData.Exec(n.Attributes.GetNamedItem("Type").Value,
n.InnerText)
);
}
filterDataList.Add(filter);
}
return filterDataList;
}
}
}
@@ -0,0 +1,845 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
namespace RemoteConsole
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
this.topToolStrip = new System.Windows.Forms.ToolStrip();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.cmsGraph = new System.Windows.Forms.ContextMenuStrip(this.components);
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
this.logPanel = new System.Windows.Forms.Panel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.tabControlTop = new System.Windows.Forms.TabControl();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.logChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.contextMenuHistoryChart = new System.Windows.Forms.ContextMenuStrip(this.components);
this.historyChartViewMenu = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.historyChartClear = new System.Windows.Forms.ToolStripMenuItem();
this.tabFullLog = new System.Windows.Forms.TabPage();
this.fullLogConsole = new System.Windows.Forms.RichTextBox();
this.contextMenuTabs = new System.Windows.Forms.ContextMenuStrip(this.components);
this.actionSelectAll = new System.Windows.Forms.ToolStripMenuItem();
this.actionCopy = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.actionClear = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.actionClearAll = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.actionEditFiltersFile = new System.Windows.Forms.ToolStripMenuItem();
this.lalala = new System.Windows.Forms.ToolStripTextBox();
this.lalala2 = new System.Windows.Forms.ToolStripTextBox();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.panelHelp = new System.Windows.Forms.Panel();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.tabPageMidi = new System.Windows.Forms.TabPage();
this.lvMidiLog = new System.Windows.Forms.ListView();
this.cHNum = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.cHLog = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.cHChannel = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chMode = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chCode = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chVelocity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.tabControlFilters = new System.Windows.Forms.TabControl();
this.commandPanel = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
this.editInput = new System.Windows.Forms.TextBox();
this.imgList = new System.Windows.Forms.ImageList(this.components);
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.statusLabelTarget = new System.Windows.Forms.ToolStripStatusLabel();
this.statusLabelIp = new System.Windows.Forms.ToolStripStatusLabel();
this.labelSeparator = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel();
this.statusLabelMode = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel5 = new System.Windows.Forms.ToolStripStatusLabel();
this.statusLabelMidi = new System.Windows.Forms.ToolStripStatusLabel();
this.forceRightAlignment = new System.Windows.Forms.ToolStripStatusLabel();
this.statusMenuLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.menuStatusText = new System.Windows.Forms.ToolStripStatusLabel();
this.statusLabelFilters = new System.Windows.Forms.ToolStripStatusLabel();
this.filtersTextStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel();
this.statusConnectedImg = new System.Windows.Forms.ToolStripStatusLabel();
this.statusLabelConnected = new System.Windows.Forms.ToolStripStatusLabel();
this.bottomPanel = new System.Windows.Forms.Panel();
this.bodyPanel = new System.Windows.Forms.Panel();
this.imgList32 = new System.Windows.Forms.ImageList(this.components);
this.topToolStrip.SuspendLayout();
this.cmsGraph.SuspendLayout();
this.logPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.tabControlTop.SuspendLayout();
this.tabPage2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.logChart)).BeginInit();
this.contextMenuHistoryChart.SuspendLayout();
this.tabFullLog.SuspendLayout();
this.contextMenuTabs.SuspendLayout();
this.tabPage1.SuspendLayout();
this.panelHelp.SuspendLayout();
this.tabPageMidi.SuspendLayout();
this.commandPanel.SuspendLayout();
this.statusStrip1.SuspendLayout();
this.bottomPanel.SuspendLayout();
this.bodyPanel.SuspendLayout();
this.SuspendLayout();
//
// topToolStrip
//
this.topToolStrip.Dock = System.Windows.Forms.DockStyle.None;
this.topToolStrip.ImageScalingSize = new System.Drawing.Size(32, 32);
this.topToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripSeparator1});
this.topToolStrip.Location = new System.Drawing.Point(3, 9);
this.topToolStrip.Name = "topToolStrip";
this.topToolStrip.Size = new System.Drawing.Size(18, 25);
this.topToolStrip.TabIndex = 0;
this.topToolStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.topToolStrip_ItemClicked);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// cmsGraph
//
this.cmsGraph.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripMenuItem3});
this.cmsGraph.Name = "contextMenuStrip1";
this.cmsGraph.Size = new System.Drawing.Size(134, 26);
//
// toolStripMenuItem3
//
this.toolStripMenuItem3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem3.Image")));
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
this.toolStripMenuItem3.Size = new System.Drawing.Size(133, 22);
this.toolStripMenuItem3.Text = "Next Graph";
//
// logPanel
//
this.logPanel.AutoSize = true;
this.logPanel.Controls.Add(this.splitContainer1);
this.logPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.logPanel.Location = new System.Drawing.Point(0, 0);
this.logPanel.Name = "logPanel";
this.logPanel.Padding = new System.Windows.Forms.Padding(3);
this.logPanel.Size = new System.Drawing.Size(884, 503);
this.logPanel.TabIndex = 1;
//
// splitContainer1
//
this.splitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(3, 3);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.tabControlTop);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.tabControlFilters);
this.splitContainer1.Size = new System.Drawing.Size(878, 497);
this.splitContainer1.SplitterDistance = 204;
this.splitContainer1.TabIndex = 2;
//
// tabControlTop
//
this.tabControlTop.Controls.Add(this.tabPage2);
this.tabControlTop.Controls.Add(this.tabFullLog);
this.tabControlTop.Controls.Add(this.tabPage1);
this.tabControlTop.Controls.Add(this.tabPageMidi);
this.tabControlTop.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControlTop.Location = new System.Drawing.Point(0, 0);
this.tabControlTop.Name = "tabControlTop";
this.tabControlTop.SelectedIndex = 0;
this.tabControlTop.Size = new System.Drawing.Size(874, 200);
this.tabControlTop.TabIndex = 2;
//
// tabPage2
//
this.tabPage2.Controls.Add(this.logChart);
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(866, 174);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "Chart";
this.tabPage2.UseVisualStyleBackColor = true;
//
// logChart
//
this.logChart.BorderlineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
chartArea1.Name = "ChartArea1";
this.logChart.ChartAreas.Add(chartArea1);
this.logChart.ContextMenuStrip = this.contextMenuHistoryChart;
this.logChart.Dock = System.Windows.Forms.DockStyle.Fill;
legend1.Name = "Legend1";
this.logChart.Legends.Add(legend1);
this.logChart.Location = new System.Drawing.Point(3, 3);
this.logChart.Name = "logChart";
this.logChart.Size = new System.Drawing.Size(860, 168);
this.logChart.TabIndex = 16;
//
// contextMenuHistoryChart
//
this.contextMenuHistoryChart.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.historyChartViewMenu,
this.toolStripSeparator3,
this.historyChartClear});
this.contextMenuHistoryChart.Name = "contextMenuStrip1";
this.contextMenuHistoryChart.Size = new System.Drawing.Size(102, 54);
this.contextMenuHistoryChart.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuHistoryChart_Opening);
//
// historyChartViewMenu
//
this.historyChartViewMenu.Image = ((System.Drawing.Image)(resources.GetObject("historyChartViewMenu.Image")));
this.historyChartViewMenu.Name = "historyChartViewMenu";
this.historyChartViewMenu.Size = new System.Drawing.Size(101, 22);
this.historyChartViewMenu.Text = "View";
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(98, 6);
//
// historyChartClear
//
this.historyChartClear.Image = ((System.Drawing.Image)(resources.GetObject("historyChartClear.Image")));
this.historyChartClear.Name = "historyChartClear";
this.historyChartClear.Size = new System.Drawing.Size(101, 22);
this.historyChartClear.Text = "Clear";
this.historyChartClear.Click += new System.EventHandler(this.historyChartClear_Click);
//
// tabFullLog
//
this.tabFullLog.Controls.Add(this.fullLogConsole);
this.tabFullLog.Location = new System.Drawing.Point(4, 22);
this.tabFullLog.Name = "tabFullLog";
this.tabFullLog.Padding = new System.Windows.Forms.Padding(3);
this.tabFullLog.Size = new System.Drawing.Size(866, 174);
this.tabFullLog.TabIndex = 0;
this.tabFullLog.Text = "Full Log";
this.tabFullLog.UseVisualStyleBackColor = true;
//
// fullLogConsole
//
this.fullLogConsole.BackColor = System.Drawing.SystemColors.WindowText;
this.fullLogConsole.ContextMenuStrip = this.contextMenuTabs;
this.fullLogConsole.Dock = System.Windows.Forms.DockStyle.Fill;
this.fullLogConsole.ForeColor = System.Drawing.Color.Silver;
this.fullLogConsole.Location = new System.Drawing.Point(3, 3);
this.fullLogConsole.Name = "fullLogConsole";
this.fullLogConsole.ReadOnly = true;
this.fullLogConsole.Size = new System.Drawing.Size(860, 168);
this.fullLogConsole.TabIndex = 0;
this.fullLogConsole.Text = "";
//
// contextMenuTabs
//
this.contextMenuTabs.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.actionSelectAll,
this.actionCopy,
this.toolStripSeparator2,
this.actionClear,
this.toolStripSeparator4,
this.actionClearAll,
this.toolStripSeparator5,
this.actionEditFiltersFile,
this.lalala,
this.lalala2,
this.toolStripSeparator6});
this.contextMenuTabs.Name = "contextMenuStrip1";
this.contextMenuTabs.Size = new System.Drawing.Size(176, 188);
//
// actionSelectAll
//
this.actionSelectAll.Name = "actionSelectAll";
this.actionSelectAll.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A)));
this.actionSelectAll.Size = new System.Drawing.Size(175, 22);
this.actionSelectAll.Text = "Select All";
this.actionSelectAll.Click += new System.EventHandler(this.actionSelectAll_Click);
//
// actionCopy
//
this.actionCopy.Image = ((System.Drawing.Image)(resources.GetObject("actionCopy.Image")));
this.actionCopy.Name = "actionCopy";
this.actionCopy.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C)));
this.actionCopy.Size = new System.Drawing.Size(175, 22);
this.actionCopy.Text = "Copy";
this.actionCopy.Click += new System.EventHandler(this.actionCopy_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(172, 6);
//
// actionClear
//
this.actionClear.Image = ((System.Drawing.Image)(resources.GetObject("actionClear.Image")));
this.actionClear.Name = "actionClear";
this.actionClear.ShortcutKeys = System.Windows.Forms.Keys.Delete;
this.actionClear.Size = new System.Drawing.Size(175, 22);
this.actionClear.Text = "Clear";
this.actionClear.Click += new System.EventHandler(this.actionClear_Click);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(172, 6);
//
// actionClearAll
//
this.actionClearAll.Image = ((System.Drawing.Image)(resources.GetObject("actionClearAll.Image")));
this.actionClearAll.Name = "actionClearAll";
this.actionClearAll.Size = new System.Drawing.Size(175, 22);
this.actionClearAll.Text = "Clear ALL Filters";
this.actionClearAll.Click += new System.EventHandler(this.actionClearAll_Click);
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(172, 6);
//
// actionEditFiltersFile
//
this.actionEditFiltersFile.Image = ((System.Drawing.Image)(resources.GetObject("actionEditFiltersFile.Image")));
this.actionEditFiltersFile.Name = "actionEditFiltersFile";
this.actionEditFiltersFile.Size = new System.Drawing.Size(175, 22);
this.actionEditFiltersFile.Text = "-- Edit Filters File --";
this.actionEditFiltersFile.Click += new System.EventHandler(this.actionEditFiltersFile_Click);
//
// lalala
//
this.lalala.Enabled = false;
this.lalala.Name = "lalala";
this.lalala.Size = new System.Drawing.Size(100, 23);
this.lalala.Text = "PORT";
//
// lalala2
//
this.lalala2.Name = "lalala2";
this.lalala2.Size = new System.Drawing.Size(100, 23);
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(172, 6);
//
// tabPage1
//
this.tabPage1.Controls.Add(this.panelHelp);
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(866, 174);
this.tabPage1.TabIndex = 2;
this.tabPage1.Text = "About/Help";
this.tabPage1.UseVisualStyleBackColor = true;
//
// panelHelp
//
this.panelHelp.Controls.Add(this.richTextBox1);
this.panelHelp.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelHelp.Location = new System.Drawing.Point(3, 3);
this.panelHelp.Name = "panelHelp";
this.panelHelp.Size = new System.Drawing.Size(860, 168);
this.panelHelp.TabIndex = 0;
//
// richTextBox1
//
this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBox1.Location = new System.Drawing.Point(0, 0);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.ReadOnly = true;
this.richTextBox1.Size = new System.Drawing.Size(860, 168);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = resources.GetString("richTextBox1.Text");
//
// tabPageMidi
//
this.tabPageMidi.Controls.Add(this.lvMidiLog);
this.tabPageMidi.Location = new System.Drawing.Point(4, 22);
this.tabPageMidi.Name = "tabPageMidi";
this.tabPageMidi.Padding = new System.Windows.Forms.Padding(3);
this.tabPageMidi.Size = new System.Drawing.Size(866, 174);
this.tabPageMidi.TabIndex = 3;
this.tabPageMidi.Text = "Midi Debug";
this.tabPageMidi.UseVisualStyleBackColor = true;
//
// lvMidiLog
//
this.lvMidiLog.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.cHNum,
this.cHLog,
this.cHChannel,
this.chMode,
this.chCode,
this.chVelocity});
this.lvMidiLog.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvMidiLog.Location = new System.Drawing.Point(3, 3);
this.lvMidiLog.Name = "lvMidiLog";
this.lvMidiLog.Size = new System.Drawing.Size(860, 168);
this.lvMidiLog.TabIndex = 0;
this.lvMidiLog.UseCompatibleStateImageBehavior = false;
this.lvMidiLog.View = System.Windows.Forms.View.Details;
//
// cHNum
//
this.cHNum.Text = "#";
//
// cHLog
//
this.cHLog.Text = "Log";
this.cHLog.Width = 278;
//
// cHChannel
//
this.cHChannel.Text = "Channel";
//
// chMode
//
this.chMode.Text = "Mode";
//
// chCode
//
this.chCode.Text = "Code";
//
// chVelocity
//
this.chVelocity.Text = "Vel";
//
// tabControlFilters
//
this.tabControlFilters.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControlFilters.Location = new System.Drawing.Point(0, 0);
this.tabControlFilters.Name = "tabControlFilters";
this.tabControlFilters.SelectedIndex = 0;
this.tabControlFilters.Size = new System.Drawing.Size(874, 285);
this.tabControlFilters.TabIndex = 1;
//
// commandPanel
//
this.commandPanel.AutoSize = true;
this.commandPanel.Controls.Add(this.label1);
this.commandPanel.Controls.Add(this.editInput);
this.commandPanel.Dock = System.Windows.Forms.DockStyle.Top;
this.commandPanel.Location = new System.Drawing.Point(0, 0);
this.commandPanel.MaximumSize = new System.Drawing.Size(0, 26);
this.commandPanel.MinimumSize = new System.Drawing.Size(0, 26);
this.commandPanel.Name = "commandPanel";
this.commandPanel.Padding = new System.Windows.Forms.Padding(3);
this.commandPanel.Size = new System.Drawing.Size(884, 26);
this.commandPanel.TabIndex = 2;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(5, 7);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(92, 13);
this.label1.TabIndex = 1;
this.label1.Text = "Type a command:";
//
// editInput
//
this.editInput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.editInput.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.editInput.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
this.editInput.BackColor = System.Drawing.Color.Black;
this.editInput.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.editInput.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.editInput.Location = new System.Drawing.Point(103, 0);
this.editInput.Name = "editInput";
this.editInput.Size = new System.Drawing.Size(6768, 23);
this.editInput.TabIndex = 0;
this.editInput.KeyUp += new System.Windows.Forms.KeyEventHandler(this.editInput_KeyUp);
//
// imgList
//
this.imgList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList.ImageStream")));
this.imgList.TransparentColor = System.Drawing.Color.Transparent;
this.imgList.Images.SetKeyName(0, "red.png");
this.imgList.Images.SetKeyName(1, "green.png");
this.imgList.Images.SetKeyName(2, "clear.png");
this.imgList.Images.SetKeyName(3, "copy.png");
this.imgList.Images.SetKeyName(4, "pc");
this.imgList.Images.SetKeyName(5, "xenia");
this.imgList.Images.SetKeyName(6, "UnknownTarget");
this.imgList.Images.SetKeyName(7, "videoClipRecord");
this.imgList.Images.SetKeyName(8, "screenShoot");
this.imgList.Images.SetKeyName(9, "PcMouseImg");
this.imgList.Images.SetKeyName(10, "EditIpImg");
this.imgList.Images.SetKeyName(11, "IpImg");
this.imgList.Images.SetKeyName(12, "ModeFullImg");
this.imgList.Images.SetKeyName(13, "ModeCmdImg");
this.imgList.Images.SetKeyName(14, "ModeFileImg");
this.imgList.Images.SetKeyName(15, "PortImg");
this.imgList.Images.SetKeyName(16, "WinLogoImg16");
this.imgList.Images.SetKeyName(17, "provo");
//
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel2,
this.toolStripStatusLabel1,
this.statusLabelTarget,
this.statusLabelIp,
this.labelSeparator,
this.toolStripStatusLabel4,
this.statusLabelMode,
this.toolStripStatusLabel5,
this.statusLabelMidi,
this.forceRightAlignment,
this.statusMenuLabel,
this.menuStatusText,
this.statusLabelFilters,
this.filtersTextStatus,
this.toolStripStatusLabel3,
this.statusConnectedImg,
this.statusLabelConnected});
this.statusStrip1.Location = new System.Drawing.Point(0, 26);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(884, 24);
this.statusStrip1.TabIndex = 3;
this.statusStrip1.Text = "statusStrip1";
//
// toolStripStatusLabel2
//
this.toolStripStatusLabel2.Name = "toolStripStatusLabel2";
this.toolStripStatusLabel2.Size = new System.Drawing.Size(0, 19);
//
// toolStripStatusLabel1
//
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
this.toolStripStatusLabel1.Size = new System.Drawing.Size(43, 19);
this.toolStripStatusLabel1.Text = "Target:";
//
// statusLabelTarget
//
this.statusLabelTarget.Name = "statusLabelTarget";
this.statusLabelTarget.Size = new System.Drawing.Size(54, 19);
this.statusLabelTarget.Text = "[Not Set]";
//
// statusLabelIp
//
this.statusLabelIp.Name = "statusLabelIp";
this.statusLabelIp.Size = new System.Drawing.Size(25, 19);
this.statusLabelIp.Text = "[IP]";
//
// labelSeparator
//
this.labelSeparator.BorderSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)));
this.labelSeparator.BorderStyle = System.Windows.Forms.Border3DStyle.Etched;
this.labelSeparator.Name = "labelSeparator";
this.labelSeparator.Size = new System.Drawing.Size(4, 19);
//
// toolStripStatusLabel4
//
this.toolStripStatusLabel4.Name = "toolStripStatusLabel4";
this.toolStripStatusLabel4.Size = new System.Drawing.Size(41, 19);
this.toolStripStatusLabel4.Text = "Mode:";
//
// statusLabelMode
//
this.statusLabelMode.ImageTransparentColor = System.Drawing.Color.Magenta;
this.statusLabelMode.Name = "statusLabelMode";
this.statusLabelMode.Size = new System.Drawing.Size(38, 19);
this.statusLabelMode.Text = "Mode";
//
// toolStripStatusLabel5
//
this.toolStripStatusLabel5.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Left;
this.toolStripStatusLabel5.BorderStyle = System.Windows.Forms.Border3DStyle.Etched;
this.toolStripStatusLabel5.Name = "toolStripStatusLabel5";
this.toolStripStatusLabel5.Size = new System.Drawing.Size(38, 19);
this.toolStripStatusLabel5.Text = "Midi:";
//
// statusLabelMidi
//
this.statusLabelMidi.Name = "statusLabelMidi";
this.statusLabelMidi.Size = new System.Drawing.Size(118, 19);
this.statusLabelMidi.Text = "toolStripStatusLabel6";
//
// forceRightAlignment
//
this.forceRightAlignment.Name = "forceRightAlignment";
this.forceRightAlignment.Size = new System.Drawing.Size(177, 19);
this.forceRightAlignment.Spring = true;
//
// statusMenuLabel
//
this.statusMenuLabel.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Left;
this.statusMenuLabel.BorderStyle = System.Windows.Forms.Border3DStyle.Etched;
this.statusMenuLabel.Name = "statusMenuLabel";
this.statusMenuLabel.Size = new System.Drawing.Size(45, 19);
this.statusMenuLabel.Text = "Menu:";
//
// menuStatusText
//
this.menuStatusText.Name = "menuStatusText";
this.menuStatusText.Size = new System.Drawing.Size(48, 19);
this.menuStatusText.Text = "Missing";
//
// statusLabelFilters
//
this.statusLabelFilters.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Left;
this.statusLabelFilters.BorderStyle = System.Windows.Forms.Border3DStyle.Etched;
this.statusLabelFilters.Name = "statusLabelFilters";
this.statusLabelFilters.Size = new System.Drawing.Size(45, 19);
this.statusLabelFilters.Text = "Filters:";
//
// filtersTextStatus
//
this.filtersTextStatus.Name = "filtersTextStatus";
this.filtersTextStatus.Size = new System.Drawing.Size(48, 19);
this.filtersTextStatus.Text = "Missing";
//
// toolStripStatusLabel3
//
this.toolStripStatusLabel3.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Left;
this.toolStripStatusLabel3.BorderStyle = System.Windows.Forms.Border3DStyle.Etched;
this.toolStripStatusLabel3.Name = "toolStripStatusLabel3";
this.toolStripStatusLabel3.Size = new System.Drawing.Size(46, 19);
this.toolStripStatusLabel3.Text = "Status:";
//
// statusConnectedImg
//
this.statusConnectedImg.Image = ((System.Drawing.Image)(resources.GetObject("statusConnectedImg.Image")));
this.statusConnectedImg.Name = "statusConnectedImg";
this.statusConnectedImg.Size = new System.Drawing.Size(16, 19);
//
// statusLabelConnected
//
this.statusLabelConnected.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right;
this.statusLabelConnected.BorderStyle = System.Windows.Forms.Border3DStyle.Etched;
this.statusLabelConnected.Name = "statusLabelConnected";
this.statusLabelConnected.Size = new System.Drawing.Size(83, 19);
this.statusLabelConnected.Text = "Disconnected";
//
// bottomPanel
//
this.bottomPanel.Controls.Add(this.commandPanel);
this.bottomPanel.Controls.Add(this.statusStrip1);
this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
this.bottomPanel.Location = new System.Drawing.Point(0, 503);
this.bottomPanel.Name = "bottomPanel";
this.bottomPanel.Size = new System.Drawing.Size(884, 50);
this.bottomPanel.TabIndex = 4;
//
// bodyPanel
//
this.bodyPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.bodyPanel.Controls.Add(this.logPanel);
this.bodyPanel.Controls.Add(this.bottomPanel);
this.bodyPanel.Location = new System.Drawing.Point(0, 53);
this.bodyPanel.Name = "bodyPanel";
this.bodyPanel.Size = new System.Drawing.Size(884, 553);
this.bodyPanel.TabIndex = 1;
//
// imgList32
//
this.imgList32.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList32.ImageStream")));
this.imgList32.TransparentColor = System.Drawing.Color.Transparent;
this.imgList32.Images.SetKeyName(0, "Spanner");
this.imgList32.Images.SetKeyName(1, "TargetImg1");
this.imgList32.Images.SetKeyName(2, "TargetImg3");
this.imgList32.Images.SetKeyName(3, "GamePlayImg2");
this.imgList32.Images.SetKeyName(4, "ExtraMacrosImg");
this.imgList32.Images.SetKeyName(5, "ModeFilesImg32");
this.imgList32.Images.SetKeyName(6, "ListImg");
this.imgList32.Images.SetKeyName(7, "GamePlayImg3");
this.imgList32.Images.SetKeyName(8, "TargetImg3");
this.imgList32.Images.SetKeyName(9, "ModeImg32");
this.imgList32.Images.SetKeyName(10, "ModeImg32_Cmd");
this.imgList32.Images.SetKeyName(11, "ModeImg32_File");
this.imgList32.Images.SetKeyName(12, "AnalogImg32");
this.imgList32.Images.SetKeyName(13, "GamePlayImg");
this.imgList32.Images.SetKeyName(14, "TargetImg2");
this.imgList32.Images.SetKeyName(15, "RadImg32");
this.imgList32.Images.SetKeyName(16, "EarthImg32");
this.imgList32.Images.SetKeyName(17, "SettingsImg32");
this.imgList32.Images.SetKeyName(18, "SlidersImg32");
this.imgList32.Images.SetKeyName(19, "ToolsImg32");
this.imgList32.Images.SetKeyName(20, "ModeCmdImg32");
this.imgList32.Images.SetKeyName(21, "ModeFullImg32");
this.imgList32.Images.SetKeyName(22, "EmptyImg32");
this.imgList32.Images.SetKeyName(23, "FileImg32");
this.imgList32.Images.SetKeyName(24, "FullImg32");
this.imgList32.Images.SetKeyName(25, "NoImg32");
this.imgList32.Images.SetKeyName(26, "OkImg32");
this.imgList32.Images.SetKeyName(27, "BubbleImg32");
this.imgList32.Images.SetKeyName(28, "UpIcon32");
//
// MainForm
//
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(884, 606);
this.Controls.Add(this.topToolStrip);
this.Controls.Add(this.bodyPanel);
this.DoubleBuffered = true;
this.HelpButton = true;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(715, 250);
this.Name = "MainForm";
this.Text = "Universal Remote Console";
this.Load += new System.EventHandler(this.Form1_Load);
this.DragDrop += new System.Windows.Forms.DragEventHandler(this.MainForm_DragDrop);
this.DragEnter += new System.Windows.Forms.DragEventHandler(this.MainForm_DragEnter);
this.topToolStrip.ResumeLayout(false);
this.topToolStrip.PerformLayout();
this.cmsGraph.ResumeLayout(false);
this.logPanel.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.tabControlTop.ResumeLayout(false);
this.tabPage2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.logChart)).EndInit();
this.contextMenuHistoryChart.ResumeLayout(false);
this.tabFullLog.ResumeLayout(false);
this.contextMenuTabs.ResumeLayout(false);
this.contextMenuTabs.PerformLayout();
this.tabPage1.ResumeLayout(false);
this.panelHelp.ResumeLayout(false);
this.tabPageMidi.ResumeLayout(false);
this.commandPanel.ResumeLayout(false);
this.commandPanel.PerformLayout();
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.bottomPanel.ResumeLayout(false);
this.bottomPanel.PerformLayout();
this.bodyPanel.ResumeLayout(false);
this.bodyPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel logPanel;
private System.Windows.Forms.RichTextBox fullLogConsole;
private System.Windows.Forms.Panel commandPanel;
private System.Windows.Forms.TextBox editInput;
private System.Windows.Forms.ImageList imgList;
private System.Windows.Forms.ContextMenuStrip contextMenuTabs;
private System.Windows.Forms.ToolStripMenuItem actionSelectAll;
private System.Windows.Forms.ToolStripMenuItem actionCopy;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem actionClear;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.TabControl tabControlFilters;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.ContextMenuStrip cmsGraph;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.Panel bottomPanel;
private System.Windows.Forms.ToolStripStatusLabel statusLabelConnected;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private System.Windows.Forms.ToolStripStatusLabel labelSeparator;
private System.Windows.Forms.ToolStripStatusLabel forceRightAlignment;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3;
private System.Windows.Forms.ToolStripStatusLabel statusLabelTarget;
private System.Windows.Forms.ToolStripStatusLabel statusConnectedImg;
private System.Windows.Forms.ToolStripStatusLabel statusLabelIp;
private System.Windows.Forms.Panel bodyPanel;
private System.Windows.Forms.TabControl tabControlTop;
private System.Windows.Forms.TabPage tabFullLog;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.DataVisualization.Charting.Chart logChart;
private System.Windows.Forms.ContextMenuStrip contextMenuHistoryChart;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripMenuItem historyChartClear;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripMenuItem actionClearAll;
private System.Windows.Forms.ToolStripStatusLabel statusLabelFilters;
private System.Windows.Forms.ToolStripStatusLabel filtersTextStatus;
private System.Windows.Forms.ToolStripStatusLabel statusMenuLabel;
private System.Windows.Forms.ToolStripStatusLabel menuStatusText;
private System.Windows.Forms.ToolStripMenuItem historyChartViewMenu;
private System.Windows.Forms.ImageList imgList32;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.Panel panelHelp;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripMenuItem actionEditFiltersFile;
private System.Windows.Forms.ToolStripTextBox lalala2;
private System.Windows.Forms.ToolStripTextBox lalala;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel4;
private System.Windows.Forms.ToolStripStatusLabel statusLabelMode;
private System.Windows.Forms.ToolStrip topToolStrip;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel5;
private System.Windows.Forms.ToolStripStatusLabel statusLabelMidi;
private System.Windows.Forms.TabPage tabPageMidi;
private System.Windows.Forms.ListView lvMidiLog;
private System.Windows.Forms.ColumnHeader cHNum;
private System.Windows.Forms.ColumnHeader cHLog;
private System.Windows.Forms.ColumnHeader cHChannel;
private System.Windows.Forms.ColumnHeader chMode;
private System.Windows.Forms.ColumnHeader chCode;
private System.Windows.Forms.ColumnHeader chVelocity;
private System.Windows.Forms.Label label1;
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,149 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
namespace RemoteConsole
{
partial class FormAbout
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.rtbMidi = new System.Windows.Forms.RichTextBox();
this.label4 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// panel1
//
this.panel1.BackgroundImage = global::RemoteConsole.Properties.Resources.fractal;
this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.panel1.Location = new System.Drawing.Point(1, 2);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(228, 147);
this.panel1.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.ForeColor = System.Drawing.SystemColors.HotTrack;
this.label1.Location = new System.Drawing.Point(12, 152);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(199, 17);
this.label1.TabIndex = 1;
this.label1.Text = "Universal Remote Console";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(107, 178);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(109, 13);
this.label3.TabIndex = 3;
this.label3.Text = "Author: Dario Sancho";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(12, 178);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(94, 13);
this.label2.TabIndex = 4;
this.label2.Text = "(c) Crytek 2014";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// rtbMidi
//
this.rtbMidi.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.rtbMidi.BackColor = System.Drawing.SystemColors.Control;
this.rtbMidi.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.rtbMidi.Location = new System.Drawing.Point(15, 231);
this.rtbMidi.Name = "rtbMidi";
this.rtbMidi.ReadOnly = true;
this.rtbMidi.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
this.rtbMidi.Size = new System.Drawing.Size(201, 57);
this.rtbMidi.TabIndex = 5;
this.rtbMidi.TabStop = false;
this.rtbMidi.Text = "The Midi code is based on Tom Lokovic\'s [https://code.google.com/p/midi-dot-net/]" +
" project, adapted by Ramon Villadomat and Dario Sancho.";
this.rtbMidi.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.rtbMidi_LinkClicked);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(62, 210);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(92, 13);
this.label4.TabIndex = 6;
this.label4.Text = "Acknoledgements";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// FormAbout
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(228, 300);
this.Controls.Add(this.label4);
this.Controls.Add(this.rtbMidi);
this.Controls.Add(this.label2);
this.Controls.Add(this.label3);
this.Controls.Add(this.label1);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "FormAbout";
this.Text = "About";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormAbout_FormClosing);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.RichTextBox rtbMidi;
private System.Windows.Forms.Label label4;
}
}
@@ -0,0 +1,45 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RemoteConsole
{
public partial class FormAbout : Form
{
public FormAbout()
{
InitializeComponent();
rtbMidi.SelectAll();
rtbMidi.SelectionAlignment = HorizontalAlignment.Center;
}
private void FormAbout_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
private void rtbMidi_LinkClicked(object sender, LinkClickedEventArgs e)
{
System.Diagnostics.Process.Start(e.LinkText);
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,77 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
namespace RemoteConsole
{
partial class FormButtons
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.lvToggles = new System.Windows.Forms.ListView();
this.SuspendLayout();
//
// lvToggles
//
this.lvToggles.CheckBoxes = true;
this.lvToggles.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvToggles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lvToggles.Location = new System.Drawing.Point(0, 0);
this.lvToggles.MultiSelect = false;
this.lvToggles.Name = "lvToggles";
this.lvToggles.Size = new System.Drawing.Size(283, 354);
this.lvToggles.TabIndex = 3;
this.lvToggles.UseCompatibleStateImageBehavior = false;
this.lvToggles.View = System.Windows.Forms.View.Details;
this.lvToggles.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.lvToggles_ItemChecked);
//
// FormButtons
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(283, 354);
this.Controls.Add(this.lvToggles);
this.Name = "FormButtons";
this.Text = "Toggle Buttons";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormButtons_FormClosing_1);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView lvToggles;
}
}
@@ -0,0 +1,142 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
namespace RemoteConsole
{
public partial class FormButtons : Form
{
DelSendCommandToTarget delSendCommand;
public FormButtons()
{
InitializeComponent();
}
public void SetEntries(List<ParamsFileInfo.CEntry> entries, DelSendCommandToTarget callabck)
{
delSendCommand = null;
lvToggles.Clear();
lvToggles.FullRowSelect = true;
lvToggles.GridLines = true;
lvToggles.Location = new System.Drawing.Point(3, 3);
lvToggles.UseCompatibleStateImageBehavior = false;
lvToggles.View = System.Windows.Forms.View.Details;
// lvToggles.ContextMenuStrip = contextMenu;
ColumnHeader columnHeader0 = new ColumnHeader();
columnHeader0.Text = "Toggle";
columnHeader0.Width = -1;
lvToggles.Columns.AddRange(new ColumnHeader[] { columnHeader0 });
lvToggles.Width = -1; // autosize it to the width of the widest element in the column
foreach (var entry in entries)
{
if (entry.ToggleParams != null)
{
// Populate List View
ListViewItem lvi = new ListViewItem(entry.Name);
lvi.Tag = entry;
//lvi.ToolTipText =
ListViewGroup group;
int gIdx = GetGroupIndex(entry.ToggleParams.GroupName);
if (gIdx < 0)
{
group = new ListViewGroup(entry.ToggleParams.GroupName);
lvToggles.Groups.Add(group);
}
else
{
group = lvToggles.Groups[gIdx];
}
group.Items.Add(lvi);
lvToggles.Items.Add(lvi);
}
}
lvToggles.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
lvToggles.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
delSendCommand = callabck;
}
// ------------------------------------------------------------------------
private void SendSliderCommand(ParamsFileInfo.CEntry entry, int value)
{
if (delSendCommand != null)
{
ParamsFileInfo.CEntryTag tag = entry.GenerateEntryTag();
// Send commands
tag.ModCmds = new List<string>();
for (int k = 0; k < tag.Entry.Data.Count; ++k)
{
string s = value.ToString();
tag.ModCmds.Add(tag.Entry.Data[k].Replace("#", s));
}
delSendCommand(tag);
}
}
// ------------------------------------------------------------------------
private int GetGroupIndex(string name)
{
int index = -1;
for (int i = 0; i < lvToggles.Groups.Count; ++i)
{
ListViewGroup g = lvToggles.Groups[i];
if (g.Header == name)
{
index = i;
break;
}
}
return index;
}
// ------------------------------------------------------------------------
private void lvToggles_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (e.Item.Tag != null && delSendCommand != null)
{
ParamsFileInfo.CEntry entry = (ParamsFileInfo.CEntry)e.Item.Tag;
if (entry.ToggleParams != null)
{
int value = e.Item.Checked ? entry.ToggleParams.On : entry.ToggleParams.Off;
SendSliderCommand(entry, value);
}
}
}
// ------------------------------------------------------------------------
private void FormButtons_FormClosing_1(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,164 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
namespace RemoteConsole
{
partial class FormSettings
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.cbMode = new System.Windows.Forms.ComboBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.btEditFilters = new System.Windows.Forms.Button();
this.btEditMenus = new System.Windows.Forms.Button();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.cbDebugMidi = new System.Windows.Forms.CheckBox();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupBox3.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.cbMode);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(229, 53);
this.groupBox1.TabIndex = 1;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Operation Mode";
//
// cbMode
//
this.cbMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbMode.FormattingEnabled = true;
this.cbMode.Location = new System.Drawing.Point(6, 19);
this.cbMode.Name = "cbMode";
this.cbMode.Size = new System.Drawing.Size(207, 21);
this.cbMode.TabIndex = 0;
this.cbMode.SelectedIndexChanged += new System.EventHandler(this.cbMode_SelectedIndexChanged);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.btEditFilters);
this.groupBox2.Controls.Add(this.btEditMenus);
this.groupBox2.Location = new System.Drawing.Point(12, 71);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(229, 61);
this.groupBox2.TabIndex = 2;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Edit Configuration Files";
//
// btEditFilters
//
this.btEditFilters.FlatAppearance.BorderSize = 2;
this.btEditFilters.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btEditFilters.Location = new System.Drawing.Point(138, 20);
this.btEditFilters.Name = "btEditFilters";
this.btEditFilters.Size = new System.Drawing.Size(75, 35);
this.btEditFilters.TabIndex = 1;
this.btEditFilters.Text = "Filters";
this.btEditFilters.UseVisualStyleBackColor = true;
this.btEditFilters.Click += new System.EventHandler(this.btEditFilters_Click);
//
// btEditMenus
//
this.btEditMenus.FlatAppearance.BorderSize = 2;
this.btEditMenus.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btEditMenus.Location = new System.Drawing.Point(6, 20);
this.btEditMenus.Name = "btEditMenus";
this.btEditMenus.Size = new System.Drawing.Size(75, 35);
this.btEditMenus.TabIndex = 0;
this.btEditMenus.Text = "Menus";
this.btEditMenus.UseVisualStyleBackColor = true;
this.btEditMenus.Click += new System.EventHandler(this.btEditMenus_Click);
//
// groupBox3
//
this.groupBox3.Controls.Add(this.cbDebugMidi);
this.groupBox3.Location = new System.Drawing.Point(18, 139);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(200, 51);
this.groupBox3.TabIndex = 3;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Debug";
//
// cbDebugMidi
//
this.cbDebugMidi.AutoSize = true;
this.cbDebugMidi.Location = new System.Drawing.Point(7, 20);
this.cbDebugMidi.Name = "cbDebugMidi";
this.cbDebugMidi.Size = new System.Drawing.Size(45, 17);
this.cbDebugMidi.TabIndex = 0;
this.cbDebugMidi.Text = "Midi";
this.cbDebugMidi.UseVisualStyleBackColor = true;
this.cbDebugMidi.CheckedChanged += new System.EventHandler(this.cbDebugMidi_CheckedChanged);
//
// FormSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(251, 202);
this.Controls.Add(this.groupBox3);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.HelpButton = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FormSettings";
this.Text = "Settings";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormSettings_FormClosing);
this.groupBox1.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.ComboBox cbMode;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Button btEditFilters;
private System.Windows.Forms.Button btEditMenus;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.CheckBox cbDebugMidi;
}
}
@@ -0,0 +1,110 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RemoteConsole
{
public partial class FormSettings : Form
{
private DelSettingsChange delSettingsChange;
private CSettings settings = new CSettings();
public FormSettings()
{
InitializeComponent();
cbMode.Items.Clear();
cbMode.Items.Add("Online [Full]");
cbMode.Items.Add("Online [Commands Only]");
cbMode.Items.Add("Online [Files Only]");
cbMode.SelectedIndex = 0;
cbMode.Select();
}
public void SetSettingsChangeDelegate(DelSettingsChange callback)
{
delSettingsChange = callback;
}
private void WarnAboutMissingFiles(string fileName)
{
string message =
"Missing file: " + fileName + "\nPlease please the file in the given directory (same folder as the executable).";
const string caption = "Missing Config File!";
var result = MessageBox.Show(message, caption,
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
private void btEditMenus_Click(object sender, EventArgs e)
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(Common.MenusFileFullPath);
if (fileInfo.Exists == true)
{
System.Diagnostics.Process.Start(/*"notepad.exe", */Common.MenusFileFullPath);
}
else
{
WarnAboutMissingFiles(Common.MenusFileFullPath);
}
}
private void btEditFilters_Click(object sender, EventArgs e)
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(Common.FiltersFileFullPath);
if (fileInfo.Exists == true)
{
System.Diagnostics.Process.Start(/*"notepad.exe", */Common.FiltersFileFullPath);
}
else
{
WarnAboutMissingFiles(Common.FiltersFileFullPath);
}
}
private void FormSettings_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
private void cbMode_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateSettings();
if (delSettingsChange != null) delSettingsChange(settings);
}
private void cbDebugMidi_CheckedChanged(object sender, EventArgs e)
{
UpdateSettings();
if (delSettingsChange != null) delSettingsChange(settings);
}
private void UpdateSettings()
{
settings.DebugMidi = cbDebugMidi.Checked;
if (cbMode.SelectedIndex >= 0)
settings.Mode = (CSettings.EMode)cbMode.SelectedIndex;
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,218 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
namespace RemoteConsole
{
partial class FormSliders
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSliders));
this.panelSlider = new System.Windows.Forms.Panel();
this.layoutPanelSlider = new System.Windows.Forms.TableLayoutPanel();
this.trackBar1 = new System.Windows.Forms.TrackBar();
this.lblMax = new System.Windows.Forms.Label();
this.lblMin = new System.Windows.Forms.Label();
this.lblName = new System.Windows.Forms.Label();
this.rtbValue = new System.Windows.Forms.TextBox();
this.lvSliders = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.rtbDescription = new System.Windows.Forms.RichTextBox();
this.label1 = new System.Windows.Forms.Label();
this.panelSlider.SuspendLayout();
this.layoutPanelSlider.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
this.SuspendLayout();
//
// panelSlider
//
this.panelSlider.Controls.Add(this.layoutPanelSlider);
this.panelSlider.Location = new System.Drawing.Point(251, 12);
this.panelSlider.Name = "panelSlider";
this.panelSlider.Size = new System.Drawing.Size(300, 90);
this.panelSlider.TabIndex = 0;
//
// layoutPanelSlider
//
this.layoutPanelSlider.ColumnCount = 3;
this.layoutPanelSlider.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15F));
this.layoutPanelSlider.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70F));
this.layoutPanelSlider.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15F));
this.layoutPanelSlider.Controls.Add(this.trackBar1, 1, 1);
this.layoutPanelSlider.Controls.Add(this.lblMax, 2, 1);
this.layoutPanelSlider.Controls.Add(this.lblMin, 0, 1);
this.layoutPanelSlider.Controls.Add(this.lblName, 1, 0);
this.layoutPanelSlider.Controls.Add(this.rtbValue, 1, 2);
this.layoutPanelSlider.Dock = System.Windows.Forms.DockStyle.Fill;
this.layoutPanelSlider.Location = new System.Drawing.Point(0, 0);
this.layoutPanelSlider.Name = "layoutPanelSlider";
this.layoutPanelSlider.RowCount = 3;
this.layoutPanelSlider.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.layoutPanelSlider.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));
this.layoutPanelSlider.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.layoutPanelSlider.Size = new System.Drawing.Size(300, 90);
this.layoutPanelSlider.TabIndex = 1;
//
// trackBar1
//
this.trackBar1.Dock = System.Windows.Forms.DockStyle.Fill;
this.trackBar1.Location = new System.Drawing.Point(48, 23);
this.trackBar1.Name = "trackBar1";
this.trackBar1.Size = new System.Drawing.Size(204, 34);
this.trackBar1.TabIndex = 0;
this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll);
//
// lblMax
//
this.lblMax.AutoSize = true;
this.lblMax.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMax.Location = new System.Drawing.Point(258, 20);
this.lblMax.Name = "lblMax";
this.lblMax.Size = new System.Drawing.Size(39, 40);
this.lblMax.TabIndex = 2;
this.lblMax.Text = "1";
this.lblMax.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblMin
//
this.lblMin.AutoSize = true;
this.lblMin.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMin.Location = new System.Drawing.Point(3, 20);
this.lblMin.Name = "lblMin";
this.lblMin.Size = new System.Drawing.Size(39, 40);
this.lblMin.TabIndex = 1;
this.lblMin.Text = "0";
this.lblMin.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblName
//
this.lblName.AutoSize = true;
this.lblName.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblName.Location = new System.Drawing.Point(48, 0);
this.lblName.Name = "lblName";
this.lblName.Size = new System.Drawing.Size(204, 20);
this.lblName.TabIndex = 3;
this.lblName.Text = "Slider Name";
this.lblName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// rtbValue
//
this.rtbValue.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtbValue.Location = new System.Drawing.Point(48, 63);
this.rtbValue.Name = "rtbValue";
this.rtbValue.Size = new System.Drawing.Size(204, 20);
this.rtbValue.TabIndex = 4;
this.rtbValue.Text = "0";
this.rtbValue.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.rtbValue.KeyUp += new System.Windows.Forms.KeyEventHandler(this.rtbValue_KeyUp);
//
// lvSliders
//
this.lvSliders.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
this.lvSliders.FullRowSelect = true;
this.lvSliders.GridLines = true;
this.lvSliders.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lvSliders.HideSelection = false;
this.lvSliders.Location = new System.Drawing.Point(13, 12);
this.lvSliders.Name = "lvSliders";
this.lvSliders.Size = new System.Drawing.Size(213, 184);
this.lvSliders.TabIndex = 1;
this.lvSliders.UseCompatibleStateImageBehavior = false;
this.lvSliders.View = System.Windows.Forms.View.Details;
this.lvSliders.SelectedIndexChanged += new System.EventHandler(this.lvSliders_SelectedIndexChanged);
//
// columnHeader1
//
this.columnHeader1.Text = "Select a Slider";
//
// rtbDescription
//
this.rtbDescription.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.rtbDescription.Enabled = false;
this.rtbDescription.Location = new System.Drawing.Point(251, 136);
this.rtbDescription.Name = "rtbDescription";
this.rtbDescription.Size = new System.Drawing.Size(300, 60);
this.rtbDescription.TabIndex = 2;
this.rtbDescription.Text = "";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(372, 120);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(59, 13);
this.label1.TabIndex = 3;
this.label1.Text = "Commands";
//
// FormSliders
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(561, 208);
this.Controls.Add(this.label1);
this.Controls.Add(this.rtbDescription);
this.Controls.Add(this.lvSliders);
this.Controls.Add(this.panelSlider);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormSliders";
this.Text = "Sliders";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormSliders_FormClosing);
this.panelSlider.ResumeLayout(false);
this.layoutPanelSlider.ResumeLayout(false);
this.layoutPanelSlider.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panelSlider;
private System.Windows.Forms.TableLayoutPanel layoutPanelSlider;
private System.Windows.Forms.TrackBar trackBar1;
private System.Windows.Forms.Label lblMax;
private System.Windows.Forms.Label lblMin;
private System.Windows.Forms.Label lblName;
private System.Windows.Forms.TextBox rtbValue;
private System.Windows.Forms.ListView lvSliders;
private System.Windows.Forms.RichTextBox rtbDescription;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.Label label1;
}
}
@@ -0,0 +1,193 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RemoteConsole
{
public partial class FormSliders : Form
{
DelSendCommandToTarget delSendCommand;
public FormSliders()
{
InitializeComponent();
lvSliders.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
lvSliders.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
}
public void SetEntries(List<ParamsFileInfo.CEntry> entries, DelSendCommandToTarget callabck)
{
lvSliders.Items.Clear();
foreach (var entry in entries)
{
// Populate List View
ListViewItem lvi = new ListViewItem(entry.Name);
//lvi.BackColor = System.Drawing.Color.Aqua;
lvi.Tag = entry;
lvSliders.Items.Add(lvi);
}
// select first element
if (entries.Count > 0)
{
lvSliders.SelectedIndices.Add(0);
lvSliders.Select();
}
delSendCommand = callabck;
}
private void SendSliderCommand(bool forceTextBoxValue = false)
{
if (delSendCommand != null)
{
ListView.SelectedListViewItemCollection items = this.lvSliders.SelectedItems;
if (items.Count > 0)
{
ParamsFileInfo.CEntry entry = (ParamsFileInfo.CEntry)items[0].Tag;
ParamsFileInfo.CEntryTag tag = entry.GenerateEntryTag();
// Update UI
if (forceTextBoxValue)
{
entry.SliderParams.CurrentValue = float.Parse(rtbValue.Text);
entry.SliderParams.CurrentValue = Common.Clamp(entry.SliderParams.CurrentValue, entry.SliderParams.Min, entry.SliderParams.Max);
}
else
{
float v = CalculateSliderValue(entry);
entry.SliderParams.CurrentValue = Common.Clamp(v, entry.SliderParams.Min, entry.SliderParams.Max);
}
rtbValue.Text = entry.SliderParams.CurrentValue.ToString();
UpdateSliderPosition();
// Send commands
tag.ModCmds = new List<string>();
for (int k = 0; k < tag.Entry.Data.Count; ++k)
{
string s = rtbValue.Text.Replace(',', '.');
tag.ModCmds.Add(tag.Entry.Data[k].Replace("#", s));
}
delSendCommand(tag);
}
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
// Send command
SendSliderCommand();
}
private void UpdateSliderPosition()
{
}
private void lvSliders_SelectedIndexChanged(object sender, EventArgs e)
{
ListView.SelectedListViewItemCollection items = this.lvSliders.SelectedItems;
if (items.Count > 0)
{
ParamsFileInfo.CEntry entry = (ParamsFileInfo.CEntry)items[0].Tag;
setSliderUi(entry);
foreach (var s in entry.Data)
rtbDescription.Text = s;
}
}
private float CalculateSliderValue(ParamsFileInfo.CEntry entry)
{
if (entry.SliderParams != null)
{
if (entry.SliderParams.ForceInt)
{
return (float)trackBar1.Value;
}
else
{
float t = (float)(trackBar1.Value) / 1000f;
float v = entry.SliderParams.Lerp(t);
return v;
}
}
return 0f;
}
private void setSliderUi(ParamsFileInfo.CEntry entry)
{
lblName.Text = entry.Name;
if (entry.SliderParams != null)
{
if (entry.SliderParams.ForceInt)
{
trackBar1.TickFrequency = (int)(entry.SliderParams.Delta);
trackBar1.Minimum = (int)entry.SliderParams.Min;
trackBar1.Maximum = (int)entry.SliderParams.Max;
trackBar1.Value = (int)entry.SliderParams.CurrentValue;
}
else
{
float size = entry.SliderParams.Max - entry.SliderParams.Min;
float w = size > 0f ? size / (entry.SliderParams.Delta > 0 ? entry.SliderParams.Delta : 1f) : 1f;
trackBar1.TickFrequency = (int)(1000f / w);
trackBar1.Minimum = 0;
trackBar1.Maximum = 1000;
int v = (int)(1000f * (entry.SliderParams.CurrentValue - entry.SliderParams.Min) / size);
trackBar1.Value = Common.Clamp(v, 0, 1000);
}
lblMin.Text = entry.SliderParams.Min.ToString();
lblMax.Text = entry.SliderParams.Max.ToString();
rtbValue.Text = entry.SliderParams.CurrentValue.ToString();
}
}
private void rtbValue_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
try
{
float v = float.Parse(rtbValue.Text, System.Globalization.CultureInfo.InvariantCulture);
SendSliderCommand(true);
}
catch (System.Exception)
{
}
}
else if (e.KeyCode == Keys.Escape)
{
((RichTextBox)sender).Undo();
}
}
private void FormSliders_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,178 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
// Description : Stores and splits the log string into types message warning error
// Functionality to adds the latest log to a textbox and to query some info about the log
using System.Collections.Generic;
using System.Drawing;
using System.Runtime.InteropServices;
namespace RemoteConsole
{
class LogBuffer
{
private System.Text.StringBuilder sb = new System.Text.StringBuilder(4048);
private List<Color> selColors = new List<Color>();
private List<int> selIndex = new List<int>();
private List<Color> colors = new List<Color>();
private System.Text.StringBuilder sbSingleLine = new System.Text.StringBuilder(256);
private List<string> linesMessage = new List<string>();
private List<string> linesError = new List<string>();
private List<string> linesWarning = new List<string>();
public LogBuffer()
{
colors.Add(Color.Black);
colors.Add(Color.White);
colors.Add(Color.Blue);
colors.Add(Color.Green);
colors.Add(Color.Red);
colors.Add(Color.LightBlue);
colors.Add(Color.Yellow);
colors.Add(Color.Magenta);
colors.Add(Color.Orange);
colors.Add(Color.LightGray);
}
public void clear()
{
sb.Clear();
linesMessage.Clear();
linesError.Clear();
linesWarning.Clear();
}
public List<string> GetLinesInBuffer(EMessageType msgType)
{
switch (msgType)
{
case EMessageType.eMT_Message: return linesMessage;
case EMessageType.eMT_Warning: return linesWarning;
case EMessageType.eMT_Error: return linesError;
}
return null;
}
public int GetNumLinesInBuffer()
{
return linesMessage.Count + linesWarning.Count + linesError.Count;
}
public bool IsBufferEmpty()
{
return sb.Length == 0;
}
public bool IsTagInBuffer(string tag)
{
return sb.ToString().Contains(tag);
}
public void addLine(string line, Color color, EMessageType msgType)
{
sbSingleLine.Clear();
// color input
selColors.Add(color);
int len = sb.Length;
selIndex.Add(len);
// append new line
int f = 0;
for (int i = 0; i < line.Length && line[i] != '\0'; ++i)
{
if (line[i] == '$' && i + 1 < line.Length && line[i + 1] >= '0' && line[i + 1] <= '9')
{
int colIdx = int.Parse(line[i + 1].ToString());
selColors.Add(colors[colIdx]);
selIndex.Add(len + i - f);
f += 2;
i++;
}
else
{
sb.Append(line.Substring(i, 1));
sbSingleLine.Append(line.Substring(i, 1));
}
}
sb.Append("\n");
sbSingleLine.Append("\n");
switch (msgType)
{
case EMessageType.eMT_Message: linesMessage.Add(sbSingleLine.ToString()); break;
case EMessageType.eMT_Warning: linesWarning.Add(sbSingleLine.ToString()); break;
case EMessageType.eMT_Error: linesError.Add(sbSingleLine.ToString()); break;
default: linesMessage.Add(sbSingleLine.ToString()); break;
}
}
[DllImport("user32.dll")]
public static extern int SendMessage(System.IntPtr hWnd, System.Int32 wMsg, bool wParam, System.Int32 lParam);
private const int WM_SETREDRAW = 11;
public void addToTextBox(System.Windows.Forms.RichTextBox b, bool bClear = true, bool bFlatColor = false)
{
if (sb.Length > 0)
{
if (!Common.IsRunningOnMono())
SendMessage(b.Handle, WM_SETREDRAW, false, 0);
int selStart = b.SelectionStart;
int selLen = b.SelectionLength;
int length = b.TextLength;
int lenAdd = sb.Length;
string text = sb.ToString();
b.AppendText(text);
if (bClear)
{
sb.Clear();
}
selIndex.Add(lenAdd);
if (bFlatColor == true)
{
b.SelectionColor = Color.White;
}
else
{
for (int i = 0; i < selColors.Count; ++i)
{
b.Select(length + selIndex[i], selIndex[i + 1] - selIndex[i]);
b.SelectionColor = selColors[i];
}
}
if (selStart == length)
{
selStart = length + lenAdd;
selLen = 0;
}
b.Select(selStart, selLen);
b.ScrollToCaret();
selColors.Clear();
selIndex.Clear();
if (!Common.IsRunningOnMono())
SendMessage(b.Handle, WM_SETREDRAW, true, 0);
b.Refresh();
}
}
}
}
@@ -0,0 +1,103 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
namespace RemoteConsole
{
class LogChart
{
private System.Windows.Forms.DataVisualization.Charting.Chart chart;
public LogChart(System.Windows.Forms.DataVisualization.Charting.Chart theChart)
{
chart = theChart;
if (chart != null)
{
chart.ChartAreas.Clear();
chart.ChartAreas.Add("Full");
}
}
public System.Windows.Forms.DataVisualization.Charting.SeriesCollection GetSeries() { return chart.Series; }
public void ClearSeries() { if (chart!=null) chart.Series.Clear(); }
public void AddSeries(string seriesName)
{
if (chart != null && !Common.IsRunningOnMono())
{
chart.Series.Add(seriesName);
for (var i = 0; i < LogFilterManager.SingleFilterHistory.BufferSize; ++i)
{
chart.Series[seriesName].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(i, 0));
}
chart.Series[seriesName].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
chart.ChartAreas["Full"].AxisY.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.VariableCount;
chart.ChartAreas["Full"].AxisY.Maximum = 10;
chart.ChartAreas["Full"].AxisY.Minimum = 0;
chart.ChartAreas["Full"].AxisX.Minimum = 0;
}
}
public void ClearData()
{
if (chart != null)
{
foreach (var serie in chart.Series)
{
for (var i = 0; i < LogFilterManager.SingleFilterHistory.BufferSize; ++i)
{
serie.Points[i].SetValueY(0);
}
}
}
}
public void Refresh()
{
if (chart != null) chart.Refresh();
}
public void SetYValue(string seriesName, int pointIndex, float value)
{
if (chart != null && !Common.IsRunningOnMono()) chart.Series[seriesName].Points[pointIndex].SetValueY(value);
}
public void ShowHideLegend(string seriesName, bool isChecked)
{
if (chart != null)
{
if (System.Windows.Forms.Control.ModifierKeys == System.Windows.Forms.Keys.Control)
{
// Select All
foreach (var s in chart.Series)
{
s.IsVisibleInLegend = s.Enabled = isChecked;
}
}
else if (System.Windows.Forms.Control.ModifierKeys == System.Windows.Forms.Keys.Shift)
{
// Toggle All
foreach (var s in chart.Series)
{
s.IsVisibleInLegend = s.Enabled = !isChecked;
}
}
// Toggle Selected
var selected = chart.Series[seriesName];
if (selected != null)
{
selected.IsVisibleInLegend = selected.Enabled = isChecked;
}
}
}
}
}
@@ -0,0 +1,143 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
// Description : Control to display the log data it could be either a LISTVIEW or a RICHTEXTBOX
using System.Windows.Forms;
namespace RemoteConsole
{
class LogDisplayControl
{
private ListView lv = null;
private RichTextBox rtb = null;
public enum EType
{
eT_ListView = 0,
eT_RichTextBox
}
public Control GetControl()
{
if (lv != null)
return lv;
else
return rtb;
}
public LogDisplayControl(EType controlType, ContextMenuStrip contextMenu, int textColor)
{
if (controlType == EType.eT_ListView)
{
lv = new ListView();
lv.Dock = System.Windows.Forms.DockStyle.Fill;
lv.FullRowSelect = true;
lv.GridLines = true;
lv.Location = new System.Drawing.Point(3, 3);
lv.Size = new System.Drawing.Size(797, 118);
lv.UseCompatibleStateImageBehavior = false;
lv.View = System.Windows.Forms.View.Details;
lv.ContextMenuStrip = contextMenu;
lv.Columns.Add("I");
lv.Columns.Add("Description");
lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
lv.ForeColor = System.Drawing.Color.FromArgb(textColor);
}
else
{
rtb = new RichTextBox();
rtb.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
rtb.BackColor = System.Drawing.SystemColors.WindowText;
rtb.ContextMenuStrip = contextMenu;
rtb.ForeColor = System.Drawing.Color.Silver;
rtb.Location = new System.Drawing.Point(3, 6);
rtb.ReadOnly = true;
rtb.Size = new System.Drawing.Size(700, 233);
rtb.TabIndex = 1;
rtb.Text = "";
rtb.ScrollBars = RichTextBoxScrollBars.Both;
rtb.Dock = DockStyle.Fill;
rtb.ForeColor = System.Drawing.Color.FromArgb(textColor);
}
}
public int GetNumItems()
{
return (lv != null) ? lv.Items.Count : rtb.Lines.Length;
}
public void AddLine(string line)
{
if (lv != null)
{
ListViewItem lvi = new ListViewItem(lv.Items.Count.ToString());
lvi.SubItems.Add(line);
lv.Items.Add(lvi);
lv.EnsureVisible(lv.Items.Count - 1);
}
else
{
rtb.AppendText(line);
}
}
public void Clear()
{
if (lv != null)
lv.Items.Clear();
else if (rtb != null)
rtb.Clear();
}
public void Copy()
{
if (lv != null)
{
Clipboard.Clear();
string fullText = "";
foreach (ListViewItem item in lv.SelectedItems)
{
fullText += item.SubItems[1].Text;// +Environment.NewLine;
}
Clipboard.SetText(fullText);
}
else if (rtb != null)
{
rtb.Copy();
}
}
public void SelectAll()
{
if (lv != null)
{
foreach (ListViewItem item in lv.Items)
{
item.Selected = true;
}
}
else
{
rtb.SelectAll();
}
}
}
}
@@ -0,0 +1,381 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
/*
* Project: Universal Remote Console
* File: LogFilterManager.cs
* Author: Dario Sancho (2014)
*
* Description:
* Manages the display of log data
* Adds log display controls to the Main Form, keeps statistic data buffer,
* handles context menus on display log controls
*/
#define USE_LIST_BOX
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace RemoteConsole
{
class LogFilterManager
{
public const string TotalCountSeriesName = "Total";
private const string strFullLogTabName = "Full Log";
public History StatsHistory { get; private set; }
private TabPage fullLogTabPtr;
private List<LogData> customFilters;
private List<LogData> standardFilters;
public enum EContextMenuAction
{
eCM_SelectAll = 0,
eCM_Clear,
eCM_Copy,
eCM_ClearAllLogs,
}
class LogData
{
public TabPage TabPtr { get; private set; }
public LogDisplayControl ControlPtr { get; private set; }
public FilterData Data { get; private set; }
public int LineCountPerTick { get; private set; }
public LogData(LogDisplayControl ctrl, TabPage tab, FilterData data)
{
TabPtr = tab;
ControlPtr = ctrl;
Data = data;
LineCountPerTick = 0;
}
public void AddLine(string line)
{
ControlPtr.AddLine(line);
++LineCountPerTick;
}
public void ClearPerTickCounter() { LineCountPerTick = 0; }
public void UpdateFilterLabel()
{
TabPtr.Text = Data.Label + "[" + ControlPtr.GetNumItems() + "]";
}
public void Clear()
{
ControlPtr.Clear();
LineCountPerTick = 0;
UpdateFilterLabel();
}
}
public class SingleFilterHistory
{
public const int BufferSize = 600;
public string Name { get; private set; }
public int Back { get; private set; }
public int Front { get; private set; }
public List<float> Buffer { get; private set; }
public int Iterator { get; private set; }
public SingleFilterHistory(string name)
{
Name = name;
Buffer = new List<float>(BufferSize);
for (int i = 0; i < BufferSize; ++i)
{
Buffer.Add(0);
}
Back = 0; Front = 0;
}
public void Clear()
{
Back = Front = 0;
ResetIterator();
for (int i = 0; i < BufferSize; ++i)
Buffer[i] = 0;
}
public void Add(float value)
{
Buffer[Front++] = value;
if (Front >= BufferSize)
{
Front = 0;
}
if (Front <= Back)
Back = Front + 1;
if (Back >= BufferSize)
Back = 0;
}
public void ResetIterator() { Iterator = Back; }
public bool NextIterator()
{
if (++Iterator >= BufferSize)
Iterator = 0;
return (Iterator != Front);
}
}
public class History
{
public List<SingleFilterHistory> Data { get; private set; }
public History() { Data = new List<SingleFilterHistory>(); }
public void Clear()
{
foreach (var h in Data)
h.Clear();
}
public void AddSeries(string name)
{
if (GetSeries(name) == null)
{
Data.Add(new SingleFilterHistory(name));
}
}
public SingleFilterHistory GetSeries(string name)
{
string lowerName = name.ToLower();
foreach (var h in Data)
{
if (h.Name.ToLower() == lowerName)
{
return h;
}
}
return null;
}
}
public LogFilterManager()
{
customFilters = new List<LogData>();
standardFilters = new List<LogData>();
StatsHistory = new History();
}
public void SetFullLogTab(TabPage tp) { fullLogTabPtr = tp; }
public void Clear()
{
customFilters.Clear();
standardFilters.Clear();
StatsHistory.Data.Clear();
}
public void ClearHistory()
{
StatsHistory.Clear();
}
public void AddFilter(FilterData data, TabControl targetTabControl, ContextMenuStrip contextMenuStrip)
{
// Create Tab
TabPage tab = new TabPage(data.Label);
// Create Control to display the log info
#if USE_LIST_BOX
LogDisplayControl ctl = new LogDisplayControl(LogDisplayControl.EType.eT_ListView, contextMenuStrip, data.TextColor);
#else
LogDisplayControl ctl = new LogDisplayControl(LogDisplayControl.EType.eT_RichTextBox, contextMenuStrip, data.TextColor);
#endif
// Add tab to tab controller
tab.Controls.Add(ctl.GetControl());
targetTabControl.TabPages.Add(tab);
targetTabControl.Dock = DockStyle.Fill;
// keep track
LogData logData = new LogData(ctl, tab, data);
if (data.MsgType == EMessageType.eMT_Message)
customFilters.Add(logData);
else
standardFilters.Add(logData);
}
public bool UpdateTabs(LogBuffer buffer, ref List<FilterData.Exec> execList)
{
bool res = false;
int totalCount = 0;
if (buffer.IsBufferEmpty() == false)
{
// Full Log Tab
fullLogTabPtr.Text = "Full Log [" + ((RichTextBox)fullLogTabPtr.Controls[0]).Lines.Length.ToString() + "]";
// Standard Tabs
foreach (LogData filter in standardFilters)
{
List<string> lines = buffer.GetLinesInBuffer(filter.Data.MsgType);
foreach (string line in lines)
{
filter.AddLine(line);
totalCount++;
res = true;
}
filter.UpdateFilterLabel();
}
// Custom Tabs
List<string> lines1 = buffer.GetLinesInBuffer(EMessageType.eMT_Message);
foreach (LogData filter in customFilters)
{
foreach (string line in lines1)
{
bool found = false;
// Check Label
if (line.Contains(filter.Data.Tag))
{
found = true;
}
// Check RegExp
else if (filter.Data.RegExpText != null && filter.Data.RegExpText.Length > 0)
{
Regex rgx = new Regex(filter.Data.RegExpText);
if (rgx.IsMatch(line))
{
found = true;
}
}
if (found)
{
filter.AddLine(line);
totalCount++;
res = true;
// Apply Exec Commands
if (filter.Data.Execute != null)
{
foreach (FilterData.Exec e in filter.Data.Execute)
{
if (e.Type != FilterData.Exec.EExecType.eET_None)
execList.Add(e);
}
}
}
}
filter.UpdateFilterLabel();
}
}
foreach (var f in standardFilters)
{
if (f.Data.Label != null)
StatsHistory.GetSeries(f.Data.Label).Add(f.LineCountPerTick);
f.ClearPerTickCounter();
}
foreach (var f in customFilters)
{
if (f.Data.Label != null)
StatsHistory.GetSeries(f.Data.Label).Add(f.LineCountPerTick);
f.ClearPerTickCounter();
}
var h = StatsHistory.GetSeries(LogFilterManager.TotalCountSeriesName);
if (h != null)
h.Add(totalCount);
return res;
}
private void ExecuteContextMenu_InternalFullLog(Control ctrl, EContextMenuAction action)
{
switch (action)
{
case EContextMenuAction.eCM_SelectAll:
((RichTextBox)ctrl).SelectAll();
return;
case EContextMenuAction.eCM_Clear:
((RichTextBox)ctrl).Clear();
return;
case EContextMenuAction.eCM_Copy:
((RichTextBox)ctrl).Copy();
return;
}
}
private void ExecuteContextMenu_Internal(LogData data, EContextMenuAction action)
{
switch (action)
{
case EContextMenuAction.eCM_SelectAll:
data.ControlPtr.SelectAll();
return;
case EContextMenuAction.eCM_Clear:
data.Clear();
return;
case EContextMenuAction.eCM_Copy:
data.ControlPtr.Copy();
return;
}
}
public void ExecuteContextMenu(Control ctrl, EContextMenuAction action)
{
if (action == EContextMenuAction.eCM_ClearAllLogs)
{
((RichTextBox)fullLogTabPtr.Controls[0]).Clear();
fullLogTabPtr.Text = strFullLogTabName + " [0]";
foreach (LogData data in customFilters)
data.Clear();
foreach (LogData data in standardFilters)
data.Clear();
return;
}
if (fullLogTabPtr.Controls[0] == ctrl)
{
ExecuteContextMenu_InternalFullLog(ctrl, action);
fullLogTabPtr.Text = strFullLogTabName + " [0]";
return;
}
foreach (LogData data in customFilters)
{
Control c = data.ControlPtr.GetControl();
if ( c== ctrl)
{
ExecuteContextMenu_Internal(data, action);
return;
}
}
foreach (LogData data in standardFilters)
{
Control c = data.ControlPtr.GetControl();
if (c == ctrl)
{
ExecuteContextMenu_Internal(data, action);
return;
}
}
}
}
}
@@ -0,0 +1,72 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Copyright (c) 2009, Tom Lokovic
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
namespace Midi
{
/// <summary>
/// Common base class for input and output devices.
/// </summary>
/// This base class exists mainly so that input and output devices can both go into the same
/// kinds of MidiMessages.
public class DeviceBase
{
/// <summary>
/// Protected constructor.
/// </summary>
/// <param name="name">The name of this device.</param>
protected DeviceBase(string name)
{
Name = name;
}
/// <summary>
/// The name of this device.
/// </summary>
public string Name { get; private set; }
}
/// <summary>
/// Exception thrown when an operation on a MIDI device cannot be satisfied.
/// </summary>
public class DeviceException : System.ApplicationException
{
/// <summary>
/// Constructs exception with a specific error message.
/// </summary>
/// <param name="message"></param>
public DeviceException(string message) { }
}
}
@@ -0,0 +1,385 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Copyright (c) 2009, Tom Lokovic
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.ObjectModel;
using System.Text;
namespace Midi
{
/// <summary>
/// A MIDI input device.
/// </summary>
public class InputDevice : DeviceBase
{
#region Delegates
/// <summary>
/// Delegate called when an input device receives a midi message.
/// </summary>
public delegate void MidiHandler(MidiMessage msg);
#endregion
#region Events
/// <summary>
/// Event called when an input device receives a midi message.
/// </summary>
public event MidiHandler MidiTrigger;
/// <summary>
/// Removes all event handlers from the input events on this device.
/// </summary>
public void RemoveAllEventHandlers()
{
MidiTrigger = null;
}
#endregion
#region Public Methods and Properties
/// <summary>
/// List of input devices installed on this system.
/// </summary>
public static ReadOnlyCollection<InputDevice> InstalledDevices
{
get
{
lock (staticLock)
{
if (installedDevices == null)
{
installedDevices = MakeDeviceList();
}
return new ReadOnlyCollection<InputDevice>(installedDevices);
}
}
}
/// <summary>
/// True if this device has been successfully opened.
/// </summary>
public bool IsOpen
{
get
{
if (isInsideInputHandler)
{
return true;
}
lock (this)
{
return isOpen;
}
}
}
/// <summary>
/// Opens this input device.
/// </summary>
/// <exception cref="InvalidOperationException">The device is already open.</exception>
/// <exception cref="DeviceException">The device cannot be opened.</exception>
/// <remarks>Note that Open() establishes a connection to the device, but no messages will
/// be received until <see cref="StartReceiving"/> is called.</remarks>
public void Open()
{
if (isInsideInputHandler)
{
throw new InvalidOperationException("Device is open.");
}
lock (this)
{
CheckNotOpen();
CheckReturnCode(Win32API.midiInOpen(out handle, deviceId,
inputCallbackDelegate, (UIntPtr)0));
isOpen = true;
}
}
/// <summary>
/// Closes this input device.
/// </summary>
/// <exception cref="InvalidOperationException">The device is not open or is still
/// receiving.</exception>
/// <exception cref="DeviceException">The device cannot be closed.</exception>
public void Close()
{
if (isInsideInputHandler)
{
throw new InvalidOperationException("Device is receiving.");
}
lock (this)
{
CheckOpen();
CheckReturnCode(Win32API.midiInClose(handle));
isOpen = false;
}
}
/// <summary>
/// True if this device is receiving messages.
/// </summary>
public bool IsReceiving
{
get
{
if (isInsideInputHandler)
{
return true;
}
lock (this)
{
return isReceiving;
}
}
}
/// <summary>
/// Starts this input device receiving messages.
/// </summary>
public void StartReceiving()//Clock clock)
{
if (isInsideInputHandler)
{
throw new InvalidOperationException("Device is receiving.");
}
lock (this)
{
CheckOpen();
CheckNotReceiving();
CheckReturnCode(Win32API.midiInStart(handle));
isReceiving = true;
//this.clock = clock;
}
}
/// <summary>
/// Stops this input device from receiving messages.
/// </summary>
/// <remarks>
/// <para>This method waits for all in-progress input event handlers to finish, and then
/// joins (shuts down) the background thread that was created in
/// <see cref="StartReceiving"/>. Thus, when this function returns you can be sure that no
/// more event handlers will be invoked.</para>
/// <para>It is illegal to call this method from an input event handler (ie, from the
/// background thread), and doing so throws an exception. If an event handler really needs
/// to call this method, consider using BeginInvoke to schedule it on another thread.</para>
/// </remarks>
/// <exception cref="InvalidOperationException">The device is not open; is not receiving;
/// or called from within an event handler (ie, from the background thread).</exception>
/// <exception cref="DeviceException">The device cannot start receiving.</exception>
public void StopReceiving()
{
if (isInsideInputHandler)
{
throw new InvalidOperationException(
"Can't call StopReceiving() from inside an input handler.");
}
lock (this)
{
CheckReceiving();
CheckReturnCode(Win32API.midiInStop(handle));
//clock = null;
isReceiving = false;
}
}
#endregion
#region Private Methods
/// <summary>
/// Makes sure rc is MidiWin32Wrapper.MMSYSERR_NOERROR. If not, throws an exception with an
/// appropriate error message.
/// </summary>
/// <param name="rc"></param>
private static void CheckReturnCode(Win32API.MMRESULT rc)
{
if (rc != Win32API.MMRESULT.MMSYSERR_NOERROR)
{
StringBuilder errorMsg = new StringBuilder(128);
rc = Win32API.midiInGetErrorText(rc, errorMsg);
if (rc != Win32API.MMRESULT.MMSYSERR_NOERROR)
{
throw new DeviceException("no error details");
}
throw new DeviceException(errorMsg.ToString());
}
}
/// <summary>
/// Throws a MidiDeviceException if this device is not open.
/// </summary>
private void CheckOpen()
{
if (!isOpen)
{
throw new InvalidOperationException("Device is not open.");
}
}
/// <summary>
/// Throws a MidiDeviceException if this device is open.
/// </summary>
private void CheckNotOpen()
{
if (isOpen)
{
throw new InvalidOperationException("Device is open.");
}
}
/// <summary>
/// Throws a MidiDeviceException if this device is not receiving.
/// </summary>
private void CheckReceiving()
{
if (!isReceiving)
{
throw new DeviceException("device not receiving");
}
}
/// <summary>
/// Throws a MidiDeviceException if this device is receiving.
/// </summary>
private void CheckNotReceiving()
{
if (isReceiving)
{
throw new DeviceException("device receiving");
}
}
/// <summary>
/// Private Constructor, only called by the getter for the InstalledDevices property.
/// </summary>
/// <param name="deviceId">Position of this device in the list of all devices.</param>
/// <param name="caps">Win32 Struct with device metadata</param>
private InputDevice(UIntPtr deviceId, Win32API.MIDIINCAPS caps)
: base(caps.szPname)
{
this.deviceId = deviceId;
this.caps = caps;
this.inputCallbackDelegate = new Win32API.MidiInProc(this.InputCallback);
this.isOpen = false;
//this.clock = null;
}
/// <summary>
/// Private method for constructing the array of MidiInputDevices by calling the Win32 api.
/// </summary>
/// <returns></returns>
private static InputDevice[] MakeDeviceList()
{
#if __MonoCS__
return new InputDevice[0];
#else
uint inDevs = Win32API.midiInGetNumDevs();
InputDevice[] result = new InputDevice[inDevs];
for (uint deviceId = 0; deviceId < inDevs; deviceId++)
{
Win32API.MIDIINCAPS caps = new Win32API.MIDIINCAPS();
Win32API.midiInGetDevCaps((UIntPtr)deviceId, out caps);
result[deviceId] = new InputDevice((UIntPtr)deviceId, caps);
}
return result;
#endif
}
/// <summary>
/// The input callback for midiOutOpen.
/// </summary>
private void InputCallback(Win32API.HMIDIIN hMidiIn, Win32API.MidiInMessage wMsg,
UIntPtr dwInstance, UIntPtr dwParam1, UIntPtr dwParam2)
{
isInsideInputHandler = true;
try
{
if (wMsg == Win32API.MidiInMessage.MIM_DATA)
{
int channel;
int mode;
int code;
int velocity;
UInt32 win32Timestamp;
if (MidiTrigger != null)
{
ShortMsg.DecodeMsg(dwParam1, dwParam2, out channel, out mode, out code, out velocity, out win32Timestamp);
MidiTrigger(new MidiMessage(this, channel, mode, code, velocity));
}
}
}
finally
{
isInsideInputHandler = false;
}
}
#endregion
#region Private Fields
// Access to the global state is guarded by lock(staticLock).
private static Object staticLock = new Object();
private static InputDevice[] installedDevices = null;
// These fields initialized in the constructor never change after construction,
// so they don't need to be guarded by a lock. We keep a reference to the
// callback delegate because we pass it to unmanaged code (midiInOpen) and unmanaged code
// cannot prevent the garbage collector from collecting the delegate.
private UIntPtr deviceId;
private Win32API.MIDIINCAPS caps;
private Win32API.MidiInProc inputCallbackDelegate;
// Access to the Open/Close state is guarded by lock(this).
private bool isOpen;
private bool isReceiving;
//private Clock clock;
private Win32API.HMIDIIN handle;
/// <summary>
/// Thread-local, set to true when called by an input handler, false in all other threads.
/// </summary>
[ThreadStatic]
static bool isInsideInputHandler = false;
#endregion
}
}
@@ -0,0 +1,101 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Copyright (c) 2009, Tom Lokovic
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
using System;
namespace Midi
{
/// <summary>
/// Base class for messages relevant to a specific device.
/// </summary>
public abstract class DeviceMessage
{
/// <summary>
/// Protected constructor.
/// </summary>
protected DeviceMessage(DeviceBase device)//, float time) : base(time)
{
if (device == null)
{
throw new ArgumentNullException("device");
}
Device = device;
}
/// <summary>
/// The device from which this message originated, or for which it is destined.
/// </summary>
public DeviceBase Device { get; private set; }
}
/// <summary>
/// Note On message.
/// </summary>
public class MidiMessage : DeviceMessage
{
/// <summary>
/// Constructs a Midi message.
/// </summary>
public MidiMessage(DeviceBase device, int channel, int mode, int code, int velocity)
:base(device)
{
Channel = channel;
Mode = mode;
Code = code;
Velocity = velocity;
}
/// <summary>
/// Channel.
/// </summary>
public int Channel { get; private set; }
/// <summary>
/// Mode.
/// </summary>
public int Mode { get; private set; }
/// <summary>
/// Code.
/// </summary>
public int Code { get; private set; }
/// <summary>
/// Velocity.
/// </summary>
public int Velocity { get; private set; }
}
}
@@ -0,0 +1,69 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Copyright (c) 2009, Tom Lokovic
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
namespace Midi
{
/// <summary>
/// Utility functions for encoding and decoding short messages.
/// </summary>
static class ShortMsg
{
/// <summary>
/// Decodes a Note On short message.
/// </summary>
public static void DecodeMsg(UIntPtr dwParam1, UIntPtr dwParam2,
out int channel, out int mode, out int code, out int velocity, out UInt32 timestamp)
{
channel = (int)dwParam1 & 0x0f;
mode = ((int)dwParam1 & 0xf0) >> 4;
code = ((int)dwParam1 & 0xff00) >> 8;
velocity = ((int)dwParam1 & 0xff0000) >> 16;
timestamp = (UInt32)dwParam2;
}
/// <summary>
/// Encodes a Note On short message.
/// </summary>
public static UInt32 EncodeMsg(int channel, int code, int velocity)
{
return (UInt32)(0x90 | (channel) | (code << 8) | (velocity << 16));
}
}
}
@@ -0,0 +1,428 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Copyright (c) 2009, Tom Lokovic
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace Midi
{
/// <summary>
/// C# wrappers for the Win32 MIDI API.
/// </summary>
/// Because .NET does not provide MIDI support itself, in C# we must use P/Invoke to wrap the
/// Win32 API. That API consists of the MMSystem.h C header and the winmm.dll library. The API
/// is described in detail here: http://msdn.microsoft.com/en-us/library/ms712733(VS.85).aspx.
/// The P/Invoke interop mechanism is described here:
/// http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx.
///
/// This file covers the subset of the MIDI protocol needed to manage input and output devices
/// and send and receive Note On/Off, Control Change, Pitch Bend and Program Change messages.
/// Other portions of the MIDI protocol (such as sysex events) are supported in the Win32 API
/// but are not wrapped here.
///
/// Some of the C functions are not typesafe when wrapped, so those wrappers are made private
/// and typesafe variants are provided.
static class Win32API
{
#region Constants
// The following constants come from MMSystem.h.
/// <summary>
/// Max length of a manufacturer name in the Win32 API.
/// </summary>
public const UInt32 MAXPNAMELEN = 32;
/// <summary>
/// Status type returned from most functions in the Win32 API.
/// </summary>
public enum MMRESULT : uint
{
// General return codes.
MMSYSERR_BASE = 0,
MMSYSERR_NOERROR = MMSYSERR_BASE + 0,
MMSYSERR_ERROR = MMSYSERR_BASE + 1,
MMSYSERR_BADDEVICEID = MMSYSERR_BASE + 2,
MMSYSERR_NOTENABLED = MMSYSERR_BASE + 3,
MMSYSERR_ALLOCATED = MMSYSERR_BASE + 4,
MMSYSERR_INVALHANDLE = MMSYSERR_BASE + 5,
MMSYSERR_NODRIVER = MMSYSERR_BASE + 6,
MMSYSERR_NOMEM = MMSYSERR_BASE + 7,
MMSYSERR_NOTSUPPORTED = MMSYSERR_BASE + 8,
MMSYSERR_BADERRNUM = MMSYSERR_BASE + 9,
MMSYSERR_INVALFLAG = MMSYSERR_BASE + 10,
MMSYSERR_INVALPARAM = MMSYSERR_BASE + 11,
MMSYSERR_HANDLEBUSY = MMSYSERR_BASE + 12,
MMSYSERR_INVALIDALIAS = MMSYSERR_BASE + 13,
MMSYSERR_BADDB = MMSYSERR_BASE + 14,
MMSYSERR_KEYNOTFOUND = MMSYSERR_BASE + 15,
MMSYSERR_READERROR = MMSYSERR_BASE + 16,
MMSYSERR_WRITEERROR = MMSYSERR_BASE + 17,
MMSYSERR_DELETEERROR = MMSYSERR_BASE + 18,
MMSYSERR_VALNOTFOUND = MMSYSERR_BASE + 19,
MMSYSERR_NODRIVERCB = MMSYSERR_BASE + 20,
MMSYSERR_MOREDATA = MMSYSERR_BASE + 21,
MMSYSERR_LASTERROR = MMSYSERR_BASE + 21,
// MIDI-specific return codes.
MIDIERR_BASE = 64,
MIDIERR_UNPREPARED = MIDIERR_BASE + 0,
MIDIERR_STILLPLAYING = MIDIERR_BASE + 1,
MIDIERR_NOMAP = MIDIERR_BASE + 2,
MIDIERR_NOTREADY = MIDIERR_BASE + 3,
MIDIERR_NODEVICE = MIDIERR_BASE + 4,
MIDIERR_INVALIDSETUP = MIDIERR_BASE + 5,
MIDIERR_BADOPENMODE = MIDIERR_BASE + 6,
MIDIERR_DONT_CONTINUE = MIDIERR_BASE + 7,
MIDIERR_LASTERROR = MIDIERR_BASE + 7
}
/// <summary>
/// Flags passed to midiInOpen() and midiOutOpen().
/// </summary>
public enum MidiOpenFlags : uint
{
CALLBACK_TYPEMASK = 0x70000,
CALLBACK_NULL = 0x00000,
CALLBACK_WINDOW = 0x10000,
CALLBACK_TASK = 0x20000,
CALLBACK_FUNCTION = 0x30000,
CALLBACK_THREAD = CALLBACK_TASK,
CALLBACK_EVENT = 0x50000,
MIDI_IO_STATUS = 0x00020
}
/// <summary>
/// Values for wTechnology field of MIDIOUTCAPS structure.
/// </summary>
public enum MidiDeviceType : ushort
{
MOD_MIDIPORT = 1,
MOD_SYNTH = 2,
MOD_SQSYNTH = 3,
MOD_FMSYNTH = 4,
MOD_MAPPER = 5,
MOD_WAVETABLE = 6,
MOD_SWSYNTH = 7
}
/// <summary>
/// Flags for dwSupport field of MIDIOUTCAPS structure.
/// </summary>
public enum MidiExtraFeatures : uint
{
MIDICAPS_VOLUME = 0x0001,
MIDICAPS_LRVOLUME = 0x0002,
MIDICAPS_CACHE = 0x0004,
MIDICAPS_STREAM = 0x0008
}
/// <summary>
/// "Midi Out Messages", passed to wMsg param of MidiOutProc.
/// </summary>
public enum MidiOutMessage : uint
{
MOM_OPEN = 0x3C7,
MOM_CLOSE = 0x3C8,
MOM_DONE = 0x3C9
}
/// <summary>
/// "Midi In Messages", passed to wMsg param of MidiInProc.
/// </summary>
public enum MidiInMessage : uint
{
MIM_OPEN = 0x3C1,
MIM_CLOSE = 0x3C2,
MIM_DATA = 0x3C3,
MIM_LONGDATA = 0x3C4,
MIM_ERROR = 0x3C5,
MIM_LONGERROR = 0x3C6,
MIM_MOREDATA = 0x3CC
}
#endregion
#region Handles
/// <summary>
/// Win32 handle for a MIDI output device.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct HMIDIOUT
{
public Int32 handle;
}
/// <summary>
/// Win32 handle for a MIDI input device.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct HMIDIIN
{
public Int32 handle;
}
#endregion
#region Structs
/// <summary>
/// Struct representing the capabilities of an output device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711619(VS.85).aspx
[StructLayout(LayoutKind.Sequential)]
public struct MIDIOUTCAPS
{
public UInt16 wMid;
public UInt16 wPid;
public UInt32 vDriverVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = (int)MAXPNAMELEN)]
public string szPname;
public MidiDeviceType wTechnology;
public UInt16 wVoices;
public UInt16 wNotes;
public UInt16 wChannelMask;
public MidiExtraFeatures dwSupport;
}
/// <summary>
/// Struct representing the capabilities of an input device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711596(VS.85).aspx
[StructLayout(LayoutKind.Sequential)]
public struct MIDIINCAPS
{
public UInt16 wMid;
public UInt16 wPid;
public UInt32 vDriverVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = (int)MAXPNAMELEN)]
public string szPname;
public UInt32 dwSupport;
}
#endregion
#region Functions for MIDI Output
/// <summary>
/// Returns the number of MIDI output devices on this system.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711627(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern UInt32 midiOutGetNumDevs();
/// <summary>
/// Fills in the capabilities struct for a specific output device.
/// </summary>
/// NOTE: This is adapted from the original Win32 function in order to make it typesafe.
///
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711621(VS.85).aspx
public static MMRESULT midiOutGetDevCaps(UIntPtr uDeviceID, out MIDIOUTCAPS caps)
{
return midiOutGetDevCaps(uDeviceID, out caps,
(UInt32)Marshal.SizeOf(typeof(MIDIOUTCAPS)));
}
/// <summary>
/// Callback invoked when a MIDI output device is opened, closed, or finished with a buffer.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711637(VS.85).aspx
public delegate void MidiOutProc(HMIDIOUT hmo, MidiOutMessage wMsg, UIntPtr dwInstance,
UIntPtr dwParam1, UIntPtr dwParam2);
/// <summary>
/// Opens a MIDI output device.
/// </summary>
/// NOTE: This is adapted from the original Win32 function in order to make it typesafe.
///
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711632(VS.85).aspx
public static MMRESULT midiOutOpen(out HMIDIOUT lphmo, UIntPtr uDeviceID,
MidiOutProc dwCallback, UIntPtr dwCallbackInstance)
{
return midiOutOpen(out lphmo, uDeviceID, dwCallback, dwCallbackInstance,
dwCallback == null ? MidiOpenFlags.CALLBACK_NULL : MidiOpenFlags.CALLBACK_FUNCTION);
}
/// <summary>
/// Turns off all notes and sustains on a MIDI output device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/dd798479(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiOutReset(HMIDIOUT hmo);
/// <summary>
/// Closes a MIDI output device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711620(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiOutClose(HMIDIOUT hmo);
/// <summary>
/// Sends a short MIDI message (anything but sysex or stream).
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711640(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiOutShortMsg(HMIDIOUT hmo, UInt32 dwMsg);
/// <summary>
/// Gets the error text for a return code related to an output device.
/// </summary>
/// NOTE: This is adapted from the original Win32 function in order to make it typesafe.
///
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711622(VS.85).aspx
public static MMRESULT midiOutGetErrorText(MMRESULT mmrError, StringBuilder lpText)
{
return midiOutGetErrorText(mmrError, lpText, (UInt32)lpText.Capacity);
}
#endregion
#region Functions for MIDI Input
/// <summary>
/// Returns the number of MIDI input devices on this system.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711608(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern UInt32 midiInGetNumDevs();
/// <summary>
/// Fills in the capabilities struct for a specific input device.
/// </summary>
/// NOTE: This is adapted from the original Win32 function in order to make it typesafe.
///
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711604(VS.85).aspx
public static MMRESULT midiInGetDevCaps(UIntPtr uDeviceID, out MIDIINCAPS caps)
{
return midiInGetDevCaps(uDeviceID, out caps,
(UInt32)Marshal.SizeOf(typeof(MIDIINCAPS)));
}
/// <summary>
/// Callback invoked when a MIDI event is received from an input device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711612(VS.85).aspx
public delegate void MidiInProc(HMIDIIN hMidiIn, MidiInMessage wMsg, UIntPtr dwInstance,
UIntPtr dwParam1, UIntPtr dwParam2);
/// <summary>
/// Opens a MIDI input device.
/// </summary>
/// NOTE: This is adapted from the original Win32 function in order to make it typesafe.
///
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711610(VS.85).aspx
public static MMRESULT midiInOpen(out HMIDIIN lphMidiIn, UIntPtr uDeviceID,
MidiInProc dwCallback, UIntPtr dwCallbackInstance)
{
return midiInOpen(out lphMidiIn, uDeviceID, dwCallback, dwCallbackInstance,
dwCallback == null ? MidiOpenFlags.CALLBACK_NULL : MidiOpenFlags.CALLBACK_FUNCTION);
}
/// <summary>
/// Starts input on a MIDI input device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711614(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiInStart(HMIDIIN hMidiIn);
/// <summary>
/// Stops input on a MIDI input device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711615(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiInStop(HMIDIIN hMidiIn);
/// <summary>
/// Resets input on a MIDI input device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711613(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiInReset(HMIDIIN hMidiIn);
/// <summary>
/// Closes a MIDI input device.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711602(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiInClose(HMIDIIN hMidiIn);
/// <summary>
/// Gets the error text for a return code related to an input device.
/// </summary>
/// NOTE: This is adapted from the original Win32 function in order to make it typesafe.
///
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711605(VS.85).aspx
public static MMRESULT midiInGetErrorText(MMRESULT mmrError, StringBuilder lpText)
{
return midiInGetErrorText(mmrError, lpText, (UInt32)lpText.Capacity);
}
#endregion
#region Non-Typesafe Bindings
// The bindings in this section are not typesafe, so we make them private and privide
// typesafe variants above.
[DllImport("winmm.dll", SetLastError = true)]
private static extern MMRESULT midiOutGetDevCaps(UIntPtr uDeviceID, out MIDIOUTCAPS caps,
UInt32 cbMidiOutCaps);
[DllImport("winmm.dll", SetLastError = true)]
private static extern MMRESULT midiOutOpen(out HMIDIOUT lphmo, UIntPtr uDeviceID,
MidiOutProc dwCallback, UIntPtr dwCallbackInstance, MidiOpenFlags dwFlags);
[DllImport("winmm.dll", SetLastError = true)]
private static extern MMRESULT midiOutGetErrorText(MMRESULT mmrError, StringBuilder lpText,
UInt32 cchText);
[DllImport("winmm.dll", SetLastError = true)]
private static extern MMRESULT midiInGetDevCaps(UIntPtr uDeviceID, out MIDIINCAPS caps,
UInt32 cbMidiInCaps);
[DllImport("winmm.dll", SetLastError = true)]
private static extern MMRESULT midiInOpen(out HMIDIIN lphMidiIn, UIntPtr uDeviceID,
MidiInProc dwCallback, UIntPtr dwCallbackInstance, MidiOpenFlags dwFlags);
[DllImport("winmm.dll", SetLastError = true)]
private static extern MMRESULT midiInGetErrorText(MMRESULT mmrError, StringBuilder lpText,
UInt32 cchText);
#endregion
}
}
@@ -0,0 +1,607 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
// Description : * Reads the config file that defines the menus, including the macros, target devices, etc.
// * It also defines the data structures to store this information
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace RemoteConsole
{
namespace ParamsFileInfo
{
static class Tools
{
private static Dictionary<string, CGroup.EGroupType> mapGroupName2Type = new Dictionary<string, CGroup.EGroupType>();
public static void AddDefinitionItem(string groupName, string groupDefType)
{
CGroup.EGroupType eGroupType = GroupTypeStr2GroupType(groupDefType);
mapGroupName2Type.Add(groupName, eGroupType);
}
public static void ClearDefinitions()
{
mapGroupName2Type.Clear();
}
public static CGroup.EGroupType GroupName2GroupType(string groupName)
{
CGroup.EGroupType eType;
if (groupName != null && mapGroupName2Type.TryGetValue(groupName, out eType))
{
return eType;
}
return CGroup.EGroupType.eGT_MacrosMenu;
}
public static CGroup.EGroupType GroupTypeStr2GroupType(string typeStr)
{
if (typeStr != null)
{
string t = typeStr.ToLower();
if (t == "menumacro") return CGroup.EGroupType.eGT_MacrosMenu;
else if (t == "menugameplay") return CGroup.EGroupType.eGT_GamePlayMenu;
else if (t == "buttonmacro") return CGroup.EGroupType.eGT_MacrosButton;
else if (t == "slidermacro") return CGroup.EGroupType.eGT_MacrosSlider;
else if (t == "togglemacro") return CGroup.EGroupType.eGT_MacrosToggle;
else if (t == "menutarget") return CGroup.EGroupType.eGT_Targets;
}
return CGroup.EGroupType.eGT_MacrosMenu;
}
public static CGroup.EGroupSubType GroupName2GroupSubType(string groupName)
{
return groupName.ToLower() == "targets" ?
ParamsFileInfo.CGroup.EGroupSubType.eSGT_Targets :
ParamsFileInfo.CGroup.EGroupSubType.eSGT_None;
}
}
static class CMidiMapping
{
private static Dictionary<int, CEntry> mapMidi2Entry = new Dictionary<int, CEntry>();
public static void Clear() { mapMidi2Entry.Clear(); }
public static void Insert(CMidiInfo midiInfo, CEntry entry)
{
if (mapMidi2Entry.ContainsKey(midiInfo.CreateKey()) == false)
mapMidi2Entry.Add(midiInfo.CreateKey(), entry);
}
public static CEntry GetEntry(int key)
{
CEntry entry;
if (mapMidi2Entry.TryGetValue(key, out entry))
return entry;
return null;
}
private static int CreateKey(CMidiInfo midiInfo)
{
if (midiInfo != null)
return midiInfo.Midi | (midiInfo.Pad << 16);
return -1;
}
}
public class CEntryTag
{
// e.g.
// [Macro=ScreenShot]
// r_getscreenshot 2
public CEntryTag(CGroup.EGroupType groupType, CGroup.EGroupSubType groupSubType, CEntry e) { GroupType = groupType; Entry = e; GroupSubType = groupSubType; }
public CGroup.EGroupType GroupType { get; private set; } // e.g. eGT_MacrosMenu
public CGroup.EGroupSubType GroupSubType { get; private set; } // e.g. eSGT_None
public CEntry Entry { get; private set; } // ptr to entry it belongs to
public List<string> ModCmds; // modified commands (e.g. when t_scale #)
}
public class CSliderParams
{
public CSliderParams(float min, float max, float delta, float current, bool forceInt) { Min = min; Max = max; Delta = delta; ForceInt = forceInt; CurrentValue = current; }
public bool ForceInt = false;
public float Min = 0;
public float Max = 1;
public float Delta = 0.2f;
public float CurrentValue = 0;
public float Lerp(float t)
{
t = Common.Clamp<float>(t, 0f, 1f);
return (1f - t) * Min + t * Max;
}
}
public class CToggleParams
{
public CToggleParams(int on, int off, string groupName, string itemName) { On = on; Off = off; GroupName = groupName; ItemName = itemName; }
public int On = 0;
public int Off = 1;
public string GroupName;
public string ItemName;
}
public class CMidiInfo
{
public CMidiInfo(int code, int pad) { Midi = code; Pad = pad; }
public int Midi { get; private set; } // Midi ASCI value associated with the key/slider pressed
public int Pad { get; private set; } // Midi ASCI value associated with the key/slider pressed
public int CreateKey() { return CMidiInfo.CreateStaticKey(Midi, Pad); }
public static int CreateStaticKey(int midiCode, int pad)
{
return midiCode | (pad << 16);
}
}
public class CEntry
{
public CMidiInfo MidiInfo { get; private set; }
public string IconPath { get; private set; }
public string Group { get; private set; } // e.g. Macro
public string Name { get; private set; } // e.g. ScreenShot
public CGroup.EGroupType GroupType { get; private set; } // e.g. eGT_MacrosMenu
public CGroup.EGroupSubType GroupSubType { get; private set; } // e.g. eSGT_None
public List<string> Data { get; private set; } // e.g. r_getscreenshot 2
public CSliderParams SliderParams;
public CToggleParams ToggleParams;
// e.g.
// [Macro=ScreenShot]
// r_getscreenshot 2
public CEntry(string group, string name, CMidiInfo midiInfo, string iconPath, CSliderParams sliderParams = null, CToggleParams toggleParams = null)
{
IconPath = iconPath;
MidiInfo = midiInfo;
Group = group; Name = name; Data = new List<string>();
GroupType = Tools.GroupName2GroupType(group);
GroupSubType = Tools.GroupName2GroupSubType(group);
if (sliderParams != null) SliderParams = sliderParams;
if (toggleParams != null) ToggleParams = toggleParams;
}
public string GetDataAsString()
{
string str = "";
foreach (string s in Data) str += s + '\n';
return str;
}
public CEntryTag GenerateEntryTag(CGroup group)
{
return new CEntryTag(group.GType, group.GSubType, this);
}
public CEntryTag GenerateEntryTag()
{
return new CEntryTag(GroupType, GroupSubType, this);
}
}
// Gathers information about a group
public class CGroup
{
public enum EGroupType
{
eGT_MacrosMenu = 0,
eGT_Targets,
eGT_GamePlayMenu,
eGT_MacrosButton,
eGT_MacrosSlider,
eGT_MacrosToggle
}
public enum EGroupSubType
{
eSGT_None = 0,
eSGT_Targets
}
public string IconPath { get; private set; }
public string Name { get; private set; }
public EGroupType GType { get; private set; }
public EGroupSubType GSubType { get; private set; }
public List<CEntry> Entries { get; private set; }
public bool ShowOnMenu { get; private set; }
public CGroup(string groupName, EGroupSubType subType, string iconPath, bool showOnMenu)
{
IconPath = iconPath;
Name = groupName; Entries = new List<CEntry>(); GSubType = subType;
GType = Tools.GroupName2GroupType(groupName);
ShowOnMenu = showOnMenu;
}
public void Add(CEntry entry) { Entries.Add(entry); }
public CEntry GetEntry(string name)
{
string lowerName = name.ToLower();
foreach (CEntry e in Entries)
{
if (e.Name.ToLower() == lowerName)
{
return e;
}
}
return null;
}
}
// Params file full data
class CData
{
public CData() { Groups = new List<CGroup>(); }
public List<CGroup> Groups { get; private set; }
public void DeleteGroup(string groupName)
{
string lowerGroupName = groupName.ToLower();
foreach (CGroup g in Groups)
{
if (g.Name.ToLower() == lowerGroupName)
{
Groups.Remove(g);
return;
}
}
}
public CGroup GetGroup(string groupName)
{
string lowerGroupName = groupName.ToLower();
foreach (CGroup g in Groups)
{
if (g.Name.ToLower() == lowerGroupName)
{
return g;
}
}
return null;
}
public CGroup GetTargetsGroup()
{
return GetGroup("targets");
}
public bool AddItem(CEntry item, CGroup.EGroupSubType subType, string iconPath, bool showOnMenu)
{
// add item in a group
CGroup g = GetGroup(item.Group);
if (g == null)
{
g = new CGroup(item.Group, subType, iconPath, showOnMenu);
//g.SetType(type);
Groups.Add(g);
}
g.Add(item);
return g != null;
}
public CEntry GetItem(string group, string name)
{
CGroup g = GetGroup(group);
if (g != null)
{
return g.GetEntry(name);
}
return null;
}
public bool ShouldGroupShowInMenuBar(string group)
{
bool ret = false;
var g = GetGroup(group);
if (g != null)
{
ret = g.ShowOnMenu;
}
return ret;
}
}
}
// -------------------------------------------------------------
class ParamsFileReader
{
private string path;
public ParamsFileReader(string INIPath)
{
path = INIPath;
}
public ParamsFileInfo.CData GetXmlParams()
{
if (System.IO.File.Exists(path) == false)
{
return null;
}
ParamsFileInfo.CData res = new ParamsFileInfo.CData();
ParamsFileInfo.CEntry entry = null;
string iconPath = null;
System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
try
{
xd.Load(path);
}
catch (System.Exception)
{
return null;
}
// read group types
ParamsFileInfo.Tools.ClearDefinitions();
ParamsFileInfo.CMidiMapping.Clear();
System.Xml.XmlNode nodeDefs = xd.SelectSingleNode("/root/Definitions");
foreach (System.Xml.XmlNode def in nodeDefs) // for each <Targets>, <Macros>, etc... node
{
ParamsFileInfo.Tools.AddDefinitionItem(def.Attributes.GetNamedItem("group").Value, def.Attributes.GetNamedItem("type").Value);
}
// read groups
System.Xml.XmlNode nodeParams = xd.SelectSingleNode("/root/Parameters");
foreach (System.Xml.XmlNode group in nodeParams) // for each <Targets>, <Macros>, etc... node
{
bool isSlidersGroup = group.Name.ToLower() == "sliders";
bool isToggleGroup = group.Name.ToLower() == "toggles";
bool showOnMenu = true;
// check group attributes
if (group.Attributes != null)
{
System.Xml.XmlNode n = group.Attributes.GetNamedItem("icon");
iconPath = n != null ? n.InnerText : null;
if (isSlidersGroup || isToggleGroup)
{
n = group.Attributes.GetNamedItem("onMenu");
showOnMenu = n != null && n.InnerText.ToLower().Trim() == "true";
}
}
ParamsFileInfo.CGroup.EGroupSubType subType = ParamsFileInfo.Tools.GroupName2GroupSubType(group.Name);
foreach (System.Xml.XmlNode node in group) // e.g. for each <Target> node
{
if (node.NodeType != System.Xml.XmlNodeType.Element || node.Attributes.Count < 1 )
continue;
// header
// MIDI
int midi = -1, pad = 0;
System.Xml.XmlNode n = node.Attributes.GetNamedItem("midi");
if (n != null && IsNumeric(n.Value.Trim())) midi = int.Parse(n.Value.Trim());
n = node.Attributes.GetNamedItem("pad");
if (n != null && IsNumeric(n.Value.Trim())) pad = int.Parse(n.Value.Trim());
ParamsFileInfo.CMidiInfo midiInfo = new ParamsFileInfo.CMidiInfo(midi,pad);
// icon
string entryIconPath = null;
if (node.Attributes != null)
{
System.Xml.XmlNode nIcon = node.Attributes.GetNamedItem("icon");
entryIconPath = nIcon != null ? nIcon.InnerText : null;
}
// Create entry
entry = new ParamsFileInfo.CEntry(group.Name, node.Attributes.GetNamedItem("name").Value, midiInfo, entryIconPath);
if (midi > -1)
{
ParamsFileInfo.CMidiMapping.Insert(midiInfo, entry);
}
if (subType == ParamsFileInfo.CGroup.EGroupSubType.eSGT_Targets)
{
string addr = "localhost:0";
try
{
string ip = node.Attributes.GetNamedItem("ip").Value;
string port = node.Attributes.GetNamedItem("port").Value;
addr = ip + ":" + port;
}
catch (System.Exception){ }
entry.Data.Add(addr);
}
else
{
foreach (System.Xml.XmlNode cvar in node) // e.g. for each <CVar str="r_displayInfo=0"/> node
{
entry.Data.Add(cvar.InnerText);
}
if (isSlidersGroup)
{
GetSliderParams(node, ref entry.SliderParams);
}
else if (isToggleGroup)
{
GetToggleButtonParams(node, ref entry.ToggleParams);
}
}
// commit entry
res.AddItem(entry, subType, iconPath, showOnMenu);
entry = null;
}
}
return res;
}
// ----------- Helper Functions ----------------
private bool IsNumeric(string stringToTest)
{
float result;
return float.TryParse(stringToTest, out result);
}
private void GetSliderParams(System.Xml.XmlNode node, ref ParamsFileInfo.CSliderParams sliderParams)
{
float min = 0f, max = 0f, delta = 0f, current = 0f;
bool forceInt = false;
int count = 0;
System.Xml.XmlNode n = node.Attributes.GetNamedItem("min");
if (n != null && IsNumeric(n.InnerText.Trim())) { ++count; min = float.Parse(n.InnerText.Trim(), System.Globalization.CultureInfo.InvariantCulture); }
n = node.Attributes.GetNamedItem("max");
if (n != null && IsNumeric(n.InnerText.Trim())) { ++count; max = float.Parse(n.InnerText.Trim(), System.Globalization.CultureInfo.InvariantCulture); }
n = node.Attributes.GetNamedItem("delta");
if (n != null && IsNumeric(n.InnerText.Trim())) { ++count; delta = float.Parse(n.InnerText.Trim(), System.Globalization.CultureInfo.InvariantCulture); }
n = node.Attributes.GetNamedItem("forceInt");
if (n != null) { forceInt = n.InnerText.Trim().ToLower() == "true"; }
n = node.Attributes.GetNamedItem("default");
if (n != null) { current = float.Parse(n.InnerText.Trim(), System.Globalization.CultureInfo.InvariantCulture); } else { current = min; }
if (count == 3)
{
current = (current < min) ? min : (current > max) ? max : current;
sliderParams = new ParamsFileInfo.CSliderParams(min, max, delta, current, forceInt);
}
}
private void GetToggleButtonParams(System.Xml.XmlNode node, ref ParamsFileInfo.CToggleParams toggleParams)
{
int on = 1, off = 0;
string groupName = "default";
string itemName = "";
System.Xml.XmlNode n = node.Attributes.GetNamedItem("group");
groupName = (n != null) ? n.InnerText.Trim() : "default";
n = node.Attributes.GetNamedItem("name");
itemName = (n != null) ? n.InnerText.Trim() : "missing name";
n = node.Attributes.GetNamedItem("on");
if (n != null && IsNumeric(n.InnerText.Trim())) { on = int.Parse(n.InnerText.Trim(), System.Globalization.CultureInfo.InvariantCulture); }
n = node.Attributes.GetNamedItem("off");
if (n != null && IsNumeric(n.InnerText.Trim())) { off = int.Parse(n.InnerText.Trim(), System.Globalization.CultureInfo.InvariantCulture); }
toggleParams = new ParamsFileInfo.CToggleParams(on, off, groupName, itemName);
}
// -------------------------------------------------------------
// Gets the list of all macros of certain type
// e.g. type = GamePlay
// [GamePlay=Fly On]
// -------------------------------------------------------------
#if OLD_STUFF
public ParamsFileInfo.CData Parse()
{
return GetXmlParams();
ParamsFileInfo.CData res = new ParamsFileInfo.CData();
ParamsFileInfo.CEntry entry = null;
string line;
Regex rgxWellFormedHeader = new Regex("\\[([\\w-]+)=(.+)\\]"); // e.g. [GroupName it belongs to = Item Name]
Regex rgxHeader = new Regex("\\[(.*)\\]"); // e.g. [anything]
// Can we open the parameters file?
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader(this.path);
}
catch (System.Exception)
{
return res;
}
// Parse it
while ((line = file.ReadLine()) != null)
{
// Is it a comment?
string l = line.Trim();
if (l.Length > 0 && l[0] == '#')
{
continue;
}
Match match = rgxWellFormedHeader.Match(line);
if (match.Success && match.Groups.Count == 3)
{
if (entry != null)
{
// commit current entry
res.AddItem(entry);
entry = null;
}
if (entry == null)
{
// line = proper header [GroupType=EntryName] - e.g. [Macro=ScreenShot]
entry = new ParamsFileInfo.CEntry(match.Groups[1].Value, match.Groups[2].Value);
}
}
else if (entry != null && line.Length > 0)
{
// is this a new header?
bool isMatch = rgxHeader.IsMatch(line);
if (isMatch == false)
{
// still data, so I add it e.g. 10.11.110.202 or r_displayInfo=1
entry.Data.Add(line);
}
}
}
if (entry != null)
{
res.AddItem(entry);
entry = null;
}
file.Close();
// Adjust Group Types
if (res != null)
{
ParamsFileInfo.CGroup definitions = res.GetGroup("DefGroup");
if (definitions != null)
{
foreach (ParamsFileInfo.CEntry def in definitions.Entries)
{
ParamsFileInfo.CGroup group = res.GetGroup(def.Name); // group to set the type to
List<string> info = def.Data; // type
if (info.Count > 0)
{
group.SetType(info[0]);
}
}
// Delete the Definition group
res.DeleteGroup("DefGroup");
}
}
// Return results
return res;
}
#endif
}
}
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3a944cbb9c7b4062d4106d6101b54d3265c969c6ab7f700711c60c11d2ac1946
size 116288
@@ -0,0 +1,29 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
namespace RemoteConsole
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[System.STAThread]
static void Main()
{
System.Windows.Forms.Application.EnableVisualStyles();
System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
System.Windows.Forms.Application.Run(new MainForm());
}
}
}
@@ -0,0 +1,49 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("RemoteConsole")]
[assembly: AssemblyDescription("Amazon Lumberyard Remote Console Tool")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Amazon.com, Inc.")]
[assembly: AssemblyProduct("Amazon Lumberyard Remote Console")]
[assembly: AssemblyCopyright("Copyright (c) Amazon.com, Inc., its affiliates or its licensors")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("6b942c3d-7deb-42fc-b146-6e316a397b7c")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,235 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace RemoteConsole.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RemoteConsole.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap clear {
get {
object obj = ResourceManager.GetObject("clear", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap connected {
get {
object obj = ResourceManager.GetObject("connected", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap connected_commands {
get {
object obj = ResourceManager.GetObject("connected_commands", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap copy {
get {
object obj = ResourceManager.GetObject("copy", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap copy1 {
get {
object obj = ResourceManager.GetObject("copy1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap edit {
get {
object obj = ResourceManager.GetObject("edit", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap file {
get {
object obj = ResourceManager.GetObject("file", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap fractal {
get {
object obj = ResourceManager.GetObject("fractal", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap fractal1 {
get {
object obj = ResourceManager.GetObject("fractal1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap green {
get {
object obj = ResourceManager.GetObject("green", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap green1 {
get {
object obj = ResourceManager.GetObject("green1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap img_record {
get {
object obj = ResourceManager.GetObject("img_record", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap logo_pc {
get {
object obj = ResourceManager.GetObject("logo_pc", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap logo_pc1 {
get {
object obj = ResourceManager.GetObject("logo_pc1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pie {
get {
object obj = ResourceManager.GetObject("pie", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap red {
get {
object obj = ResourceManager.GetObject("red", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="red" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\red.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="green1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="green" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="clear" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\clear.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="connected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\connected.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="connected_commands" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\connected_commands.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="img_record" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\img_record.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="fractal" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\fractal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\edit.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="copy1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pie" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\pie.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="logo_pc1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\logo_pc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="file" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\file.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="logo_pc" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\logo_pc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="copy" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="fractal1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\res\fractal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
@@ -0,0 +1,42 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17379
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace RemoteConsole.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,468 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
// Description : Socket connection with game. See CryEngine's RemoteConsole.cpp for information on the Server
using System.Collections.Generic;
using System.Net.Sockets;
using System.Threading;
namespace RemoteConsole
{
static class Constants
{
public const int DEFAULT_PORT = 4600;
public const int DEFAULT_BUFFER = 4096;
public const int RECONNECTION_TIME = 3000;
}
public enum EMessageType
{
eMT_Message = 0,
eMT_Warning,
eMT_Error,
}
public class SLogMessage
{
public SLogMessage(EMessageType type, string message)
{
Type = type;
Message = message;
}
public EMessageType Type;
public string Message;
}
interface IRemoteConsoleClientListener
{
void OnLogMessage(SLogMessage message);
void OnAutoCompleteDone(List<string> autoCompleteList);
void OnConnected();
void OnDisconnected();
}
interface IRemoteConsoleClient
{
void Start();
void Stop();
void SetServer(string ip);
void ExecuteConsoleCommand(string command);
void ExecuteGameplayCommand(string command);
void SetListener(IRemoteConsoleClientListener listener);
void PumpEvents();
}
class SRemoteConsoleClientListenerState
{
public IRemoteConsoleClientListener listener = null;
public bool connected = false;
public bool autoCompleteSent = false;
public void SetListener(IRemoteConsoleClientListener listener)
{
this.listener = listener;
Reset();
}
public void Reset()
{
autoCompleteSent = false;
}
}
class RemoteConsole : IRemoteConsoleClient
{
private enum EConsoleEventType
{
eCET_Noop = 0,
eCET_Req,
eCET_LogMessage,
eCET_LogWarning,
eCET_LogError,
eCET_ConsoleCommand,
eCET_AutoCompleteList,
eCET_AutoCompleteListDone,
eCET_Strobo_GetThreads,
eCET_Strobo_ThreadAdd,
eCET_Strobo_ThreadDone,
eCET_Strobo_GetResult,
eCET_Strobo_ResultStart,
eCET_Strobo_ResultDone,
eCET_Strobo_StatStart,
eCET_Strobo_StatAdd,
eCET_Strobo_IPStart,
eCET_Strobo_IPAdd,
eCET_Strobo_SymStart,
eCET_Strobo_SymAdd,
eCET_Strobo_CallstackStart,
eCET_Strobo_CallstackAdd,
eCET_GameplayEvent,
}
private class SCommandEvent
{
public SCommandEvent(EConsoleEventType type, string command)
{
Type = type;
Command = command;
}
public EConsoleEventType Type;
public string Command;
}
public int Port { get; private set; }
private Thread thrd = null;
private System.Net.Sockets.TcpClient clientSocket = null;
byte[] inStream = new byte[Constants.DEFAULT_BUFFER];
private string server = "";
private List<SCommandEvent> commands = new List<SCommandEvent>();
private List<string> autoComplete = new List<string>();
private List<SLogMessage> messages = new List<SLogMessage>();
private SRemoteConsoleClientListenerState listener = new SRemoteConsoleClientListenerState();
private object locker = new object();
private object clientLocker = new object();
private volatile bool running = false;
private volatile bool stopping = false;
private volatile bool isConnected = false;
private volatile bool autoCompleteIsDone = false;
private volatile bool resetConnection = false;
private int ticks = 0;
public RemoteConsole()
{
clientSocket = null;
Port = Constants.DEFAULT_PORT;
}
public bool SetPort(string port_)
{
int port = -1;
try
{
port = System.Convert.ToInt32(port_);
}
catch (System.Exception)
{
}
if (port != -1 && (!isConnected || resetConnection))
{
Port = port;
return true;
}
return false;
}
public void Start()
{
if (!running)
{
running = true;
thrd = new Thread(threadFct);
thrd.Start();
}
}
public void Stop()
{
if (running)
{
running = false;
stopping = true;
lock (clientLocker)
{
if (clientSocket != null)
{
clientSocket.Close();
clientSocket = new System.Net.Sockets.TcpClient();
}
}
while (stopping)
System.Threading.Thread.Sleep(10);
thrd = null;
}
}
public void SetServer(string ip)
{
if (listener.listener != null)
{
listener.listener.OnDisconnected();
listener.connected = false;
}
lock (locker)
{
server = ip;
ticks = 0;
autoCompleteIsDone = false;
listener.Reset();
resetConnection = true;
}
}
public void ExecuteConsoleCommand(string command)
{
lock (locker)
{
commands.Add(new SCommandEvent(EConsoleEventType.eCET_ConsoleCommand, command));
}
}
public void ExecuteGameplayCommand(string command)
{
lock (locker)
{
commands.Add(new SCommandEvent(EConsoleEventType.eCET_GameplayEvent, command));
}
}
public void SetListener(IRemoteConsoleClientListener listener)
{
lock (locker)
{
this.listener.SetListener(listener);
}
}
public void PumpEvents()
{
List<SLogMessage> msgs = null;
List<string> autoCmplt = null;
bool sendConn = false;
bool isConn = false;
IRemoteConsoleClientListener l = null;
lock (locker)
{
l = listener.listener;
msgs = new List<SLogMessage>(messages);
messages.Clear();
if (autoCompleteIsDone && !listener.autoCompleteSent)
{
autoCmplt = new List<string>(autoComplete);
autoComplete.Clear();
listener.autoCompleteSent = true;
}
if (isConnected != listener.connected && !resetConnection)
{
listener.connected = isConnected;
sendConn = true;
isConn = isConnected;
}
}
if (l != null)
{
if (sendConn)
{
if (isConn)
l.OnConnected();
else
l.OnDisconnected();
}
if (msgs != null)
{
for (int i = 0; i < msgs.Count; ++i)
l.OnLogMessage(msgs[i]);
}
if (autoCmplt != null)
{
l.OnAutoCompleteDone(autoCmplt);
}
}
}
private void threadFct()
{
while (running)
{
if (!isConnected || resetConnection)
{
clearCommands();
if (ticks++ % Constants.RECONNECTION_TIME == 0)
{
lock (clientLocker)
{
if (clientSocket != null && clientSocket.Connected)
clientSocket.Close();
clientSocket = new System.Net.Sockets.TcpClient();
}
try
{
clientSocket.Connect(server, Port);
NetworkStream stream = clientSocket.GetStream();
stream.ReadTimeout = 3000;
stream.WriteTimeout = 3000;
ticks = 0;
}
#if DEBUG
catch (System.Exception ex)
{
addLogMessage(EMessageType.eMT_Message, ex.Message);
}
#else
catch (System.Exception) { }
#endif
}
isConnected = clientSocket != null ? clientSocket.Connected : false;
if (!isConnected)
autoCompleteIsDone = false;
if (resetConnection)
resetConnection = false;
}
else
{
isConnected = processClient();
}
}
stopping = false;
}
private bool readData(ref EConsoleEventType id, ref string data)
{
try
{
NetworkStream stream = clientSocket.GetStream();
int ret = 0;
while (true)
{
ret += stream.Read(inStream, ret, Constants.DEFAULT_BUFFER - ret);
if (inStream[ret - 1] == '\0')
break;
}
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
id = (EConsoleEventType)(returndata[0] - '0');
int index = returndata.IndexOf('\0');
data = returndata.Substring(1, index - 1);
}
catch (System.Exception)
{
return false;
}
return true;
}
bool sendData(EConsoleEventType id, string data = "")
{
char cid = (char)((char)id + '0');
string msg = "";
msg += cid;
msg += data;
msg += "\0";
try
{
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(msg);
NetworkStream stream = clientSocket.GetStream();
stream.Write(outStream, 0, outStream.Length);
stream.Flush();
}
catch (System.Exception)
{
return false;
}
return true;
}
private void addLogMessage(EMessageType type, string message)
{
lock (locker)
{
messages.Add(new SLogMessage(type, message));
}
}
private void addAutoCompleteItem(string item)
{
lock (locker)
{
autoComplete.Add(item);
}
}
private bool getCommand(ref SCommandEvent command)
{
bool res = false;
lock (locker)
{
if (commands.Count > 0)
{
command = commands[0];
commands.RemoveAt(0);
res = true;
}
}
return res;
}
private void autoCompleteDone()
{
lock (locker)
{
autoCompleteIsDone = true;
}
}
private void clearCommands()
{
lock (locker)
{
commands.Clear();
}
}
private bool processClient()
{
EConsoleEventType eventType = EConsoleEventType.eCET_Noop;
string data = "";
if (!readData(ref eventType, ref data))
return false;
switch (eventType)
{
case EConsoleEventType.eCET_LogMessage:
addLogMessage(EMessageType.eMT_Message, data);
return sendData(EConsoleEventType.eCET_Noop);
case EConsoleEventType.eCET_LogWarning:
addLogMessage(EMessageType.eMT_Warning, data);
return sendData(EConsoleEventType.eCET_Noop);
case EConsoleEventType.eCET_LogError:
addLogMessage(EMessageType.eMT_Error, data);
return sendData(EConsoleEventType.eCET_Noop);
case EConsoleEventType.eCET_AutoCompleteList:
addAutoCompleteItem(data);
return sendData(EConsoleEventType.eCET_Noop);
case EConsoleEventType.eCET_AutoCompleteListDone:
autoCompleteDone();
return sendData(EConsoleEventType.eCET_Noop);
case EConsoleEventType.eCET_Req:
SCommandEvent command = null;
if (getCommand(ref command))
return sendData(command.Type, command.Command);
else
return sendData(EConsoleEventType.eCET_Noop);
default:
return sendData(EConsoleEventType.eCET_Noop);
}
}
}
}
@@ -0,0 +1,90 @@
<?xml version='1.0' ?>
<!--
============================ Quick Guide =======================================
File: filters.xml
Author: Dario Sancho (2014)
Important: This file neesd to be placed in the executable's folder.
This file allows you to define your own filters and associated accions.
Feel free to add/remove/modify the contents of this file to suit your needs.
The initial content is intended to be an example of usage.
How does this work?
* <Filter Name="Example">
This attribute is used to specify the filter. In this example, any log that
contains the word "Example" will be added to this filter's tab.
* <Label>My Example</Label>
This parameter is optional. If included it will be used to label the filter Tab.
Otherwise, the "Name" attribute in Filter will be used.
* <Color>FF0000</Color>
Optional. Specifies the color of the text in the filter. Format R8G8B8.
* <RegExp>\!(\w*)\]</RegExp>
Optional. Specifies a regular expression to be used as filter. The given example
would would added to this filter's tab any log that contains something of the
kind "...!....]", i.e. has an exclamation mark and at certain point later a "]"
* <Exec Type="DosCmd">dir c:</Exec>
Optional. Specifies an action to be taken if a particular filter is activated.
It can be used for instance to trigger a snapshot or a video when certain log
message is sent (e.g. a debugging message).
It can be very useful for debugging and QA.
There are two types of actions that can be executed:
+ <Exec Type="Macro">ScreenShot</Exec>
Executes a Macro (in this case ScreenShot, defined in this file)
+ <Exec Type="DosCmd">dir c:</Exec>
Executes a dos command (in this case "dir c:")
-->
<Filters>
<Filter Name="RegExp">
<Color>#000088</Color>
<RegExp>\!(\w*)\]</RegExp>
<!-- Exec Type="DosCmd">dir c:</Exec -->
</Filter>
<Filter Name="ApplicationView">
<Label>ApplicationViewSource</Label>
<Color>FF8C00</Color>
<!-- Exec Type="DosCmd">dir c:</Exec -->
</Filter>
<Filter Name="OnPLMEvent">
<Label>OnPLMEvent</Label>
<Color>#000000</Color>
<!-- Exec Type="Macro">ScreenShot</Exec -->
</Filter>
<!--Filter Name="Loading">
<Label>Loading</Label>
<Color>#0022FF</Color>
</Filter-->
<Filter Name="Actor">
<Label>Actor</Label>
<Color>#000000</Color>
</Filter>
<Filter Name="[CG]">
<Label>Color Grading</Label>
<Color>#000000</Color>
</Filter>
<Filter Name="GFE">
<Label>GeForce Experience</Label>
<Color>#000000</Color>
</Filter>
<Filter Name="MipMapped">
<Label>MipMapped</Label>
<Color>#000000</Color>
</Filter>
</Filters>
@@ -0,0 +1,194 @@
<?xml version='1.0' ?>
<root>
<Definitions>
<Definition group="Macros" type="MenuMacro"/>
<Definition group="GamePlays" type="MenuGamePlay"/>
<Definition group="Buttons" type="ButtonMacro"/>
<Definition group="Sliders" type="SliderMacro"/>
<Definition group="Toggles" type="ToggleMacro"/>
<Definition group="Targets" type="MenuTarget"/>
</Definitions>
<Parameters>
<!-- ============= TARGTES ============== -->
<Targets>
<Target name="PC" ip="localhost" port="4600"/>
<Target name="Xenia" ip="10.11.110.201" port="4600"/>
<Target name="Provo" ip="10.11.110.202" port="4600"/>
</Targets>
<!-- ============= Macros ============== -->
<Generic>
<Item name="Enable Profile Info" midi="37" pad="0">
<CVar>r_displayInfo=1</CVar>
<CVar>profile=1</CVar>
</Item>
<Item name="Disable Profile Info" midi="36" pad="0">
<CVar>r_displayInfo=0</CVar>
<CVar>profile=0</CVar>
</Item>
<Item name="Disable InFa/InPak">
<CVar>sys_pakloginvalidFileAccess 0</CVar>
</Item>
<Item name="ScreenShot">
<CVar>r_getscreenshot 2</CVar>
</Item>
<Item name="Enable Time Of Day" midi="66" pad="1">
<CVar>sv_timeofdayenabled 1</CVar>
</Item>
</Generic>
<!-- ============= Macros ============== -->
<WF1 icon="s1-dice.png">
<Item name="CG ON">
<CVar>r_displayinfo 0</CVar>
<CVar>/g_cheats 1</CVar>
<CVar>/g_godMode 1</CVar>
<CVar>r_colorgradingchartimage 'chr' textures/colorcharts/kosovo2.dds</CVar>
<CVar>r_ColorGradingCharts 2</CVar>
</Item>
<Item name="CG ON - Test">
<CVar>r_displayinfo 0</CVar>
<CVar>/g_cheats 1</CVar>
<CVar>/g_godMode 1</CVar>
<CVar>r_colorgradingchartimage 'chr' textures/colorcharts/default_char_l2_cch.tif</CVar>
<CVar>r_colorgradingchartimage 'env' textures/colorcharts/default_env_cch.tif</CVar>
</Item>
<Item name="CG OFF">
<CVar>r_colorgradingchartimage 'chr'</CVar>
<CVar>r_colorgradingchartimage 'env'</CVar>
</Item>
<Item name="CG MT on">
<CVar>r_ColorGradingMultiTarget 1</CVar>
</Item>
<Item name="CG MT off">
<CVar>r_ColorGradingMultiTarget 0</CVar>
</Item>
<Item name="Auto-gen MIPS">
<CVar>r_autogenMips 1</CVar>
</Item>
<Item name="Auto-gen MIPS - Disable">
<CVar>r_autogenMips 0</CVar>
</Item>
</WF1>
<!-- ============= Macros ============== -->
<MacrosOther>
<Item name="Disable Archers Grammar" midi="49" pad="1">
<CVar>i_grammar_enable archers 0</CVar>
</Item>
<Item name="Debug Input On">
<CVar>i_debugdigitalButtons 127</CVar>
</Item>
</MacrosOther>
<!-- ============= GamePlay ============== -->
<GamePlays>
<Item name="Camera 3P">
<CVar>SetViewMode:0</CVar>
</Item>
<Item name="Camera FP">
<CVar>SetViewMode:1</CVar>
</Item>
<Item name="Camera Orbit">
<CVar>SetViewMode:2</CVar>
</Item>
<Item name="Goto">
<CVar>GotoTagPoint:0</CVar>
</Item>
</GamePlays>
<!-- ============= Macros ============== -->
<Maps>
<Item name="Airfield">
<CVar>map airfield</CVar>
</Item>
<Item name="Forest">
<CVar>map forest</CVar>
</Item>
</Maps>
<!-- ============= Buttons ============== -->
<Buttons>
<Item name="Screen Shot" icon="s1-camera.png">>
<CVar>r_getscreenshot 2</CVar>
</Item>
<Item name="Record Clip" icon="s1-film.png">>
<CVar>RecordClip</CVar>
</Item>
</Buttons>
<!-- ============= Sliders ============== -->
<Sliders onMenu="true">
<Item name="Log Verbosity" min="0" max="5" delta="1" forceInt="true">
<CVar>log_verbosity #</CVar>
</Item>
<Item name="Time Scale" min="0" max="3.5" delta="0.1" default="2" midi="0" pad="1">
<CVar>t_scale #</CVar>
</Item>
<Item name="Fov" min="20" max="80" delta="5" default="55" midi="1" pad="1">
<CVar>cl_fov #</CVar>
</Item>
<Item name="Render Width" min="320" max="1600" delta="100" default="1600">
<CVar>r_width #</CVar>
</Item>
<Item name="Render Height" min="200" max="900" delta="100" default="900">
<CVar>r_height #</CVar>
</Item>
<Item name="Time of Day" min="0" max="24" delta="0.02" default="12" midi="18" pad="1">
<CVar>e_TimeOfDay #</CVar>
</Item>
<Item name="Input Debug Info" min="0" max="127" delta="1" default="0" forceInt="true" midi="19" pad="1">
<CVar>i_debugdigitalButtons #</CVar>
</Item>
</Sliders>
<Toggles onMenu="true">
<Item group="WF1-Multi Color Grading" name="Enable" on="1" off="0">
<CVar>r_colorgradingmultitarget #</CVar>
</Item>
<Item group="WF1-Multi Color Grading" name="Show Charts" on="2" off="0">
<CVar>r_colorgradingcharts #</CVar>
</Item>
<Item group="Debug Info" name="Display Info" on="1" off="0">
<CVar>r_displayInfo #</CVar>
</Item>
<Item group="Profile" name="Enable" on="1" off="0">
<CVar>profile #</CVar>
</Item>
<Item group="Shadows Cascade" name="Debug" on="1" off="0">
<CVar>e_ShadowsCascadesDebug #</CVar>
</Item>
<Item group="Shadows Cascade" name="Static Map level" on="2" off="0">
<CVar>r_ShadowsStaticMap #</CVar>
</Item>
</Toggles>
</Parameters>
</root>
@@ -0,0 +1,90 @@
<?xml version='1.0' ?>
<!--
============================ Quick Guide =======================================
File: filters.xml
Author: Dario Sancho (2014)
Important: This file neesd to be placed in the executable's folder.
This file allows you to define your own filters and associated accions.
Feel free to add/remove/modify the contents of this file to suit your needs.
The initial content is intended to be an example of usage.
How does this work?
* <Filter Name="Example">
This attribute is used to specify the filter. In this example, any log that
contains the word "Example" will be added to this filter's tab.
* <Label>My Example</Label>
This parameter is optional. If included it will be used to label the filter Tab.
Otherwise, the "Name" attribute in Filter will be used.
* <Color>FF0000</Color>
Optional. Specifies the color of the text in the filter. Format R8G8B8.
* <RegExp>\!(\w*)\]</RegExp>
Optional. Specifies a regular expression to be used as filter. The given example
would would added to this filter's tab any log that contains something of the
kind "...!....]", i.e. has an exclamation mark and at certain point later a "]"
* <Exec Type="DosCmd">dir c:</Exec>
Optional. Specifies an action to be taken if a particular filter is activated.
It can be used for instance to trigger a snapshot or a video when certain log
message is sent (e.g. a debugging message).
It can be very useful for debugging and QA.
There are two types of actions that can be executed:
+ <Exec Type="Macro">ScreenShot</Exec>
Executes a Macro (in this case ScreenShot, defined in this file)
+ <Exec Type="DosCmd">dir c:</Exec>
Executes a dos command (in this case "dir c:")
-->
<Filters>
<Filter Name="RegExp">
<Color>#000088</Color>
<RegExp>\!(\w*)\]</RegExp>
<!-- Exec Type="DosCmd">dir c:</Exec -->
</Filter>
<Filter Name="ApplicationView">
<Label>ApplicationViewSource</Label>
<Color>FF8C00</Color>
<!-- Exec Type="DosCmd">dir c:</Exec -->
</Filter>
<Filter Name="OnPLMEvent">
<Label>OnPLMEvent</Label>
<Color>#000000</Color>
<!-- Exec Type="Macro">ScreenShot</Exec -->
</Filter>
<!--Filter Name="Loading">
<Label>Loading</Label>
<Color>#0022FF</Color>
</Filter-->
<Filter Name="Actor">
<Label>Actor</Label>
<Color>#000000</Color>
</Filter>
<Filter Name="[CG]">
<Label>Color Grading</Label>
<Color>#000000</Color>
</Filter>
<Filter Name="GFE">
<Label>GeForce Experience</Label>
<Color>#000000</Color>
</Filter>
<Filter Name="MipMapped">
<Label>MipMapped</Label>
<Color>#000000</Color>
</Filter>
</Filters>
@@ -0,0 +1,194 @@
<?xml version='1.0' ?>
<root>
<Definitions>
<Definition group="Macros" type="MenuMacro"/>
<Definition group="GamePlays" type="MenuGamePlay"/>
<Definition group="Buttons" type="ButtonMacro"/>
<Definition group="Sliders" type="SliderMacro"/>
<Definition group="Toggles" type="ToggleMacro"/>
<Definition group="Targets" type="MenuTarget"/>
</Definitions>
<Parameters>
<!-- ============= TARGTES ============== -->
<Targets>
<Target name="PC" ip="localhost" port="4600"/>
<Target name="Xenia" ip="10.11.110.201" port="4600"/>
<Target name="Provo" ip="10.11.110.202" port="4600"/>
</Targets>
<!-- ============= Macros ============== -->
<Generic>
<Item name="Enable Profile Info" midi="37" pad="0">
<CVar>r_displayInfo=1</CVar>
<CVar>profile=1</CVar>
</Item>
<Item name="Disable Profile Info" midi="36" pad="0">
<CVar>r_displayInfo=0</CVar>
<CVar>profile=0</CVar>
</Item>
<Item name="Disable InFa/InPak">
<CVar>sys_pakloginvalidFileAccess 0</CVar>
</Item>
<Item name="ScreenShot">
<CVar>r_getscreenshot 2</CVar>
</Item>
<Item name="Enable Time Of Day" midi="66" pad="1">
<CVar>sv_timeofdayenabled 1</CVar>
</Item>
</Generic>
<!-- ============= Macros ============== -->
<WF1 icon="s1-dice.png">
<Item name="CG ON">
<CVar>r_displayinfo 0</CVar>
<CVar>/g_cheats 1</CVar>
<CVar>/g_godMode 1</CVar>
<CVar>r_colorgradingchartimage 'chr' textures/colorcharts/kosovo2.dds</CVar>
<CVar>r_ColorGradingCharts 2</CVar>
</Item>
<Item name="CG ON - Test">
<CVar>r_displayinfo 0</CVar>
<CVar>/g_cheats 1</CVar>
<CVar>/g_godMode 1</CVar>
<CVar>r_colorgradingchartimage 'chr' textures/colorcharts/default_char_l2_cch.tif</CVar>
<CVar>r_colorgradingchartimage 'env' textures/colorcharts/default_env_cch.tif</CVar>
</Item>
<Item name="CG OFF">
<CVar>r_colorgradingchartimage 'chr'</CVar>
<CVar>r_colorgradingchartimage 'env'</CVar>
</Item>
<Item name="CG MT on">
<CVar>r_ColorGradingMultiTarget 1</CVar>
</Item>
<Item name="CG MT off">
<CVar>r_ColorGradingMultiTarget 0</CVar>
</Item>
<Item name="Auto-gen MIPS">
<CVar>r_autogenMips 1</CVar>
</Item>
<Item name="Auto-gen MIPS - Disable">
<CVar>r_autogenMips 0</CVar>
</Item>
</WF1>
<!-- ============= Macros ============== -->
<MacrosOther>
<Item name="Disable Archers Grammar" midi="49" pad="1">
<CVar>i_grammar_enable archers 0</CVar>
</Item>
<Item name="Debug Input On">
<CVar>i_debugdigitalButtons 127</CVar>
</Item>
</MacrosOther>
<!-- ============= GamePlay ============== -->
<GamePlays>
<Item name="Camera 3P">
<CVar>SetViewMode:0</CVar>
</Item>
<Item name="Camera FP">
<CVar>SetViewMode:1</CVar>
</Item>
<Item name="Camera Orbit">
<CVar>SetViewMode:2</CVar>
</Item>
<Item name="Goto">
<CVar>GotoTagPoint:0</CVar>
</Item>
</GamePlays>
<!-- ============= Macros ============== -->
<Maps>
<Item name="Airfield">
<CVar>map airfield</CVar>
</Item>
<Item name="Forest">
<CVar>map forest</CVar>
</Item>
</Maps>
<!-- ============= Buttons ============== -->
<Buttons>
<Item name="Screen Shot" icon="s1-camera.png">>
<CVar>r_getscreenshot 2</CVar>
</Item>
<Item name="Record Clip" icon="s1-film.png">>
<CVar>RecordClip</CVar>
</Item>
</Buttons>
<!-- ============= Sliders ============== -->
<Sliders onMenu="true">
<Item name="Log Verbosity" min="0" max="5" delta="1" forceInt="true">
<CVar>log_verbosity #</CVar>
</Item>
<Item name="Time Scale" min="0" max="3.5" delta="0.1" default="2" midi="0" pad="1">
<CVar>t_scale #</CVar>
</Item>
<Item name="Fov" min="20" max="80" delta="5" default="55" midi="1" pad="1">
<CVar>cl_fov #</CVar>
</Item>
<Item name="Render Width" min="320" max="1600" delta="100" default="1600">
<CVar>r_width #</CVar>
</Item>
<Item name="Render Height" min="200" max="900" delta="100" default="900">
<CVar>r_height #</CVar>
</Item>
<Item name="Time of Day" min="0" max="24" delta="0.02" default="12" midi="18" pad="1">
<CVar>e_TimeOfDay #</CVar>
</Item>
<Item name="Input Debug Info" min="0" max="127" delta="1" default="0" forceInt="true" midi="19" pad="1">
<CVar>i_debugdigitalButtons #</CVar>
</Item>
</Sliders>
<Toggles onMenu="true">
<Item group="WF1-Multi Color Grading" name="Enable" on="1" off="0">
<CVar>r_colorgradingmultitarget #</CVar>
</Item>
<Item group="WF1-Multi Color Grading" name="Show Charts" on="2" off="0">
<CVar>r_colorgradingcharts #</CVar>
</Item>
<Item group="Debug Info" name="Display Info" on="1" off="0">
<CVar>r_displayInfo #</CVar>
</Item>
<Item group="Profile" name="Enable" on="1" off="0">
<CVar>profile #</CVar>
</Item>
<Item group="Shadows Cascade" name="Debug" on="1" off="0">
<CVar>e_ShadowsCascadesDebug #</CVar>
</Item>
<Item group="Shadows Cascade" name="Static Map level" on="2" off="0">
<CVar>r_ShadowsStaticMap #</CVar>
</Item>
</Toggles>
</Parameters>
</root>
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:29fb19ed587c235576a89d5c607ed3267ca526ccfb2fb3d2a4f0580c91c57acc
size 33602
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:98da8772daf76603fb1c94fcd9454b842cd55818da057bf2cb7f06b885708434
size 13707
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a650b3b463de1821d405e0abe53cf6211a344b161adae68f9d13489df3380c9a
size 1848
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a69b97bc980f8b1f2e192939a90b8261fc723647c953b06fee35bd712d6664dc
size 2625
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b47c077fd86f5a112ddccefe4eb8593269f85307ca0bb55b24c5852e29c44d9f
size 908
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2878fa41fe5a8e04a913ded70e951b50c12c79332336ddab0571d9d5acafe8d9
size 10286
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1711e2798aaef6609b9a6e775668389f9375d0d2717aa06398655adf22a1d181
size 5423
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:17a96d90c2bb2aed6fb51c4b937dc646dbfbdea762278c7959259cf7f8f7ebfa
size 4846
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:206d6e40e4dc113fd69137a69eb681820ec74a264b1192908af10f34c1ee773a
size 2077
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:69dcd18b3c1d7e8e8fd8129d155433483e9507844c300a061bc0b236d085dc34
size 1307
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9537f60abafda241ed7ab5723bc5f6bbbe3b0f00d0ab54ca7df23019dbb399c0
size 3204
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:735532a02ec90c12919d2a95504c4610771d758153ccc91b59bc848f1316ecbd
size 17078
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c523083c4b801b9356de8581d79b52739dccacdb48f702f708d3d2107349a903
size 1453
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3698fdb7642125042a15f99af3386a9b77a811452f2ec17cb57d8ebd358791dd
size 78620
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:649beae00ec3f8474f250345469e0a532410b08aa7583586e5eca699bce461f6
size 6442
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8350f66bee4a27057bca036a0f77d2fa58805855638934af580e9d4594132899
size 6120
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1b9bf4823753884fc1f740e2960c29b3bb8d71c8ab6a3eadedd1b04e786d4d04
size 2240
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f4895e019db635088a737f98e6b5ae315eff0d6b69d877aff77c390c9e480502
size 461
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:204d620bad73bbb109d25751ad03eaeccc9f9630ea3d4a80b60e76e0e58ca168
size 370070
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:27b4fb98e685c1b91505296467eef79b5a0affdb497e0292ef7d22411581cc7e
size 3005
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a00543853ef9397616c9623b7e981bf827710465875bb18df51bb45cddc87fee
size 2712
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fb2fd585e63469215f04d83b25d823b2baf64e3873748034f3201e3105f898dc
size 688
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a55085462185bd996b10e937790cc6e384c070c8a3d6c15fdd1d32acdfa1166b
size 2082
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3ff2a567827ba1dd6144e5bbffa2c7b6aa1436af2700a15270c5db8a08ec3d58
size 11635
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e72232e7cd1e7fd33bef073d87af76002c31c6346976cfdfedfc728529ee20e5
size 19973
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ea58f4896239eb4fee8065c7b90b517b996d1e58dda931e7b6e6b0f4d1948c85
size 2451
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bfaca89f734f3b033e8c65455f7b3b701dbb04f24acc5be3d44dd9850ce6b89e
size 2340
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b4c9ec3cc6f6f6f2eb70bc1d3a6355ea70d35645c326ecc553d395985d491815
size 2191
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8f2311f3b80ed9dba3bef64fb58ac48f0343cb624be9d1682e46d2250c5c93ad
size 13613
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d102651736e931e824562ef1b086a328d47f8aa14e1079093f2701b7a76ac297
size 432
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b60c12b45bdd183c1ac08ab2cc045e57921d7664d8aec4d46dbe1123128e044e
size 787
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:763df664ca322ab581013ef282ef51559558453a64abe85c5d32bf691f519931
size 1383
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1786401fb707fc77030704ea3974c0801e5b0cf17f5a7a59e866e1cfd88b98a9
size 1436
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2d77a11889fa116bf296716c9d61a60f65899739335cbe9191a1a03ee72b7d25
size 2283
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bae5f3a8ebb14da7f0532dbea78e02ebd161c59037c9674f4d03ae3f7290dfba
size 1803
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c87a96b784358f85fd927618b9c85a22365f2bb6ec6b7ae95b077e0fa9cd85e4
size 901
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9975ac9b25764eb93b7c1a93a502f54533de5fbd715506b93e58660c30c97331
size 842
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:47615653d3b0d3fce41e43f1345d239438e9361a17c394bf08122fe34e840c69
size 1215
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8aa11d2572227c071f5affbcf38cf7fe562cc2975d149c9cdc52de3347a2a0cc
size 1200
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:375b20b401e194dc007714e04a9e996a001c6942dc25b0124e19f8428a584f21
size 1646
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:07c8e1c9a2540f8c6b510fceadf7d85b4887cc8084c6042f16cb0f7719fff7a8
size 1210
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b27d81c5bc4fa8846e8948dd1443750993be3844ad5768f7781f0c386a4485ab
size 1859
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1ef2fcef20ab2e3e2e9821fff6190259a4cc51214122af43cd80a0132b6a803f
size 1561
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:565935636543c658edc8366e1665e0f263340417bf054ac00e9b6e2e15b410da
size 1512
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c897278e539cd224a7cd620e718ca445698a727f46caf00c2c36734e662b5010
size 1467
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:db0880ca911d21e430186741bdc9d2368110ffd79dc93cac401e5eb773893de1
size 1353
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4190552275785881b2fe72936cde2aa5475b41176a35a12dffd468bb993b9e99
size 1420
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:96bd1b29e78b36d77e32e05fd13ed93b6f45ead3e147e9b2a096bf6617156187
size 1347
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1de2d2673ec0b9e6dd8cc295562eaff47cef4d308d2043021c69840314dfe1c8
size 1636
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6f958882714d585d2f2a4e8686736ce6371934e29c11dc38a36bcaec28b30036
size 671
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:497a658103d0839d380cb93a195744c833497707f5dcd3182b2a5231b0a0d3cf
size 1705
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:80c39f9d24ea9085fb15a89629cbce8ab1006e6066ea62f611ced4dd38001186
size 1036