Compare commits

...

3 commits

Author SHA1 Message Date
manu
cb0a3ece4c Sequenceur midi : modifications 2023-12-29 10:09:51 +01:00
manu
134b4087d8 Merge branch 'midiseq' 2021-10-31 14:59:29 +01:00
arnaud.houdelette
f62e5e8bf5 TEST 2020-09-22 17:03:20 +02:00
7 changed files with 147 additions and 64 deletions

17
DMX-2.0/DMX-2.0.sln Normal file
View file

@ -0,0 +1,17 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DMX-2.0", "DMX-2.0.csproj", "{2CB55300-0A5B-4DFA-8984-B7EC4C455962}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2CB55300-0A5B-4DFA-8984-B7EC4C455962}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2CB55300-0A5B-4DFA-8984-B7EC4C455962}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CB55300-0A5B-4DFA-8984-B7EC4C455962}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CB55300-0A5B-4DFA-8984-B7EC4C455962}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View file

@ -498,7 +498,7 @@ namespace DMX2
value = 255;
break;
case AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_PGMCHANGE:
CurrentPage = (uint)evS.data_ev_ctrl.value;
//CurrentPage = (uint)evS.data_ev_ctrl.value;
continue;
case AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_PORT_START:
PortDetected(

View file

@ -33,8 +33,6 @@ namespace DMX2
ListStore lsEffets=null; /* liste des effets */
//TreeViewColumn nomCol; /* inutile dans le contexte macro */
ListStore lsDest = null;
bool effetChange = false;
public void EffetChange ()
{
@ -210,7 +208,10 @@ namespace DMX2
new ContextMenuHelper(frame1,RenamePopup);
new ContextMenuHelper(evBBox,CompteurPopup);
/*lsDest = new ListStore(typeof(string));
txtPerif.Text = s.Destination;
btnPerif.Clicked += BtnPerif_Clicked;
/*lsDest = new ListStore(typeof(string));
lsDest.AppendValues("TEST 1");
lsDest.AppendValues("TEST 2");
@ -219,11 +220,16 @@ namespace DMX2
cbDest.SetCellDataFunc(cbDest.Cells[0], HandleCellLayoutDataFunc);*/
}
}
void BtnPerif_Clicked(object sender, EventArgs e)
{
sequenceur.Destination = txtPerif.Text;
}
void CompteurPopup (object sender, ContextMenuEventArgs e)
void CompteurPopup (object sender, ContextMenuEventArgs e)
{
Menu m = new Menu();

View file

@ -18,13 +18,13 @@
using System;
using System.Collections.Generic;
using System.Xml;
using System.Collections.ObjectModel;
using System.Threading;
using System.Xml;
namespace DMX2
{
public class SequenceurMidi : Sequenceur , IDisposable
public class SequenceurMidi : Sequenceur , IDisposable
{
public class Ligne {
public Ligne(){}
@ -108,23 +108,10 @@ namespace DMX2
AlsaSeqLib.MidiPort midiport;
static int portnum=0;
public class DestListItem {
public DestListItem(string _name, AlsaSeqLib.Port _port){
name = _name;
port = _port;
}
string name;
public string Name{
get { return name; }
}
AlsaSeqLib.Port port;
public AlsaSeqLib.Port Port{
get { return port; }
}
}
DestListItem destination;
public DestListItem Destination
String destination;
public String Destination
{
get{
return destination;
@ -252,12 +239,23 @@ namespace DMX2
return 0;
}
public override void Tick (TimeSpan time)
TimeSpan autoconnectTimer = TimeSpan.Zero;
readonly TimeSpan acInterval = TimeSpan.FromSeconds(5);
public override void Tick (TimeSpan time)
{
if (paused)
return;
timeStamp += time;
autoconnectTimer += time;
if (autoconnectTimer > acInterval)
{
AutoConnect();
autoconnectTimer = TimeSpan.Zero;
}
if (Monitor.TryEnter (this)) {
try {
while (topPresent &&(timeStamp >= topSuivant)) {
@ -269,7 +267,29 @@ namespace DMX2
}
}
public void LigneSuivante ()
private void AutoConnect()
{
if (Destination.Length < 3) return;
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(
destination, System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase
);
foreach (var cli in AlsaSeqLib.EnumClients())
{
foreach (var p in cli.Ports)
{
string fullportname = cli.Name + ':' + p.Name;
if (r.IsMatch (fullportname ))
{
// midiport.ConnectFrom(p);
midiport.ConnectTo(p);
}
}
}
}
public void LigneSuivante ()
{
lock (this) {
if(lignes.Count==0) return;
@ -347,14 +367,14 @@ namespace DMX2
foreach (System.Text.RegularExpressions.Match match in matches) {
if (match.Groups [2].Success) {
midiCh = int.Parse (match.Groups [2].Value);
midiCh = int.Parse (match.Groups [2].Value)-1;
continue;
}
if (match.Groups [4].Success) {
ev = new AlsaSeqLib.snd_seq_event_t ();
ev.type = AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_CONTROLLER;
ev.data_ev_ctrl.channel = (byte)midiCh;
ev.data_ev_ctrl.param = uint.Parse (match.Groups [4].Value);
ev.data_ev_ctrl.param = uint.Parse (match.Groups [4].Value)-0;
ev.data_ev_ctrl.value = int.Parse (match.Groups [5].Value);
midiport.SendEvent (ev);
}
@ -363,7 +383,7 @@ namespace DMX2
ev = new AlsaSeqLib.snd_seq_event_t ();
ev.type = AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_PGMCHANGE;
ev.data_ev_ctrl.channel = (byte)midiCh;
ev.data_ev_ctrl.value = int.Parse (match.Groups [7].Value);
ev.data_ev_ctrl.value = int.Parse (match.Groups [7].Value)-1;
midiport.SendEvent (ev);
}
@ -409,6 +429,7 @@ namespace DMX2
parent.AppendChild (el);
el.SetAttribute ("id", ID.ToString ());
el.SetAttribute ("name", Name);
el.SetAttribute("destination", Destination);
//el.SetAttribute ("master", master.ToString ());
xmlEl = parent.OwnerDocument.CreateElement ("EffetSuivant");
@ -470,6 +491,7 @@ namespace DMX2
{
ID = int.Parse (el.GetAttribute ("id"));
Name = el.GetAttribute ("name");
Destination = el.TryGetAttribute("destination", String.Empty);
XmlElement xmlE;

View file

@ -44,7 +44,13 @@ namespace DMX2
private global::Gtk.Label timeLabel;
private global::Gtk.ComboBox cbDest;
private global::Gtk.HBox hbox3;
private global::Gtk.Label label1;
private global::Gtk.Entry txtPerif;
private global::Gtk.Button btnPerif;
private global::Gtk.Toolbar toolbar;
@ -156,13 +162,41 @@ namespace DMX2
w7.Expand = false;
w7.Fill = false;
// Container child vbox3.Gtk.Box+BoxChild
this.cbDest = global::Gtk.ComboBox.NewText();
this.cbDest.Name = "cbDest";
this.vbox3.Add(this.cbDest);
global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.vbox3[this.cbDest]));
w8.Position = 1;
this.hbox3 = new global::Gtk.HBox();
this.hbox3.Name = "hbox3";
this.hbox3.Spacing = 6;
// Container child hbox3.Gtk.Box+BoxChild
this.label1 = new global::Gtk.Label();
this.label1.Name = "label1";
this.label1.LabelProp = "Nom du périphérique :";
this.hbox3.Add(this.label1);
global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.label1]));
w8.Position = 0;
w8.Expand = false;
w8.Fill = false;
// Container child hbox3.Gtk.Box+BoxChild
this.txtPerif = new global::Gtk.Entry();
this.txtPerif.CanFocus = true;
this.txtPerif.Name = "txtPerif";
this.txtPerif.IsEditable = true;
this.txtPerif.InvisibleChar = '●';
this.hbox3.Add(this.txtPerif);
global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.txtPerif]));
w9.Position = 1;
// Container child hbox3.Gtk.Box+BoxChild
this.btnPerif = new global::Gtk.Button();
this.btnPerif.CanFocus = true;
this.btnPerif.Name = "btnPerif";
this.btnPerif.UseUnderline = true;
this.btnPerif.Label = "Ok";
this.hbox3.Add(this.btnPerif);
global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.btnPerif]));
w10.Position = 2;
w10.Expand = false;
w10.Fill = false;
this.vbox3.Add(this.hbox3);
global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.vbox3[this.hbox3]));
w11.Position = 1;
// Container child vbox3.Gtk.Box+BoxChild
this.UIManager.AddUiFromString(@"<ui><toolbar name='toolbar'><toolitem name='goForwardAction' action='goForwardAction'/><toolitem name='goBackAction' action='goBackAction'/><toolitem name='mediaPauseAction' action='mediaPauseAction'/><toolitem name='btnAjoutLigne' action='btnAjoutLigne'/><toolitem name='btnRetireligne' action='btnRetireligne'/><toolitem name='Action' action='Action'/></toolbar></ui>");
this.toolbar = ((global::Gtk.Toolbar)(this.UIManager.GetWidget("/toolbar")));
@ -171,13 +205,13 @@ namespace DMX2
this.toolbar.ToolbarStyle = ((global::Gtk.ToolbarStyle)(0));
this.toolbar.IconSize = ((global::Gtk.IconSize)(2));
this.vbox3.Add(this.toolbar);
global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.vbox3[this.toolbar]));
w9.Position = 2;
w9.Expand = false;
w9.Fill = false;
global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.vbox3[this.toolbar]));
w12.Position = 2;
w12.Expand = false;
w12.Fill = false;
this.hbox1.Add(this.vbox3);
global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.vbox3]));
w10.Position = 0;
global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.vbox3]));
w13.Position = 0;
// Container child hbox1.Gtk.Box+BoxChild
this.UIManager.AddUiFromString("<ui><toolbar name=\'toolbar1\'><toolitem name=\'closeAction\' action=\'closeAction\'/><" +
"/toolbar></ui>");
@ -188,16 +222,16 @@ namespace DMX2
this.toolbar1.ToolbarStyle = ((global::Gtk.ToolbarStyle)(0));
this.toolbar1.IconSize = ((global::Gtk.IconSize)(2));
this.hbox1.Add(this.toolbar1);
global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.toolbar1]));
w11.PackType = ((global::Gtk.PackType)(1));
w11.Position = 1;
w11.Expand = false;
w11.Fill = false;
global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.toolbar1]));
w14.PackType = ((global::Gtk.PackType)(1));
w14.Position = 1;
w14.Expand = false;
w14.Fill = false;
this.vbox2.Add(this.hbox1);
global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.hbox1]));
w12.Position = 0;
w12.Expand = false;
w12.Fill = false;
global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.hbox1]));
w15.Position = 0;
w15.Expand = false;
w15.Fill = false;
// Container child vbox2.Gtk.Box+BoxChild
this.scrolledwindow1 = new global::Gtk.ScrolledWindow();
this.scrolledwindow1.CanFocus = true;
@ -210,8 +244,8 @@ namespace DMX2
this.cmdList.RulesHint = true;
this.scrolledwindow1.Add(this.cmdList);
this.vbox2.Add(this.scrolledwindow1);
global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.scrolledwindow1]));
w14.Position = 1;
global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.scrolledwindow1]));
w17.Position = 1;
// Container child vbox2.Gtk.Box+BoxChild
this.lblText = new global::Gtk.Label();
this.lblText.Name = "lblText";
@ -220,10 +254,10 @@ namespace DMX2
"(ex: N64+127 ou N12-)\nGT : Go To (ex: GT4)\nr: loop";
this.lblText.UseMarkup = true;
this.vbox2.Add(this.lblText);
global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.lblText]));
w15.Position = 2;
w15.Expand = false;
w15.Fill = false;
global::Gtk.Box.BoxChild w18 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.lblText]));
w18.Position = 2;
w18.Expand = false;
w18.Fill = false;
this.alignment1.Add(this.vbox2);
this.GtkAlignment.Add(this.alignment1);
this.frame1.Add(this.GtkAlignment);

View file

@ -5,7 +5,7 @@
<target-gtk-version>2.12</target-gtk-version>
</configuration>
<import>
<widget-library name="../bin/Debug/DMX-2.0.exe" internal="true" />
<widget-library name="../bin/Release/DMX-2.0.exe" internal="true" />
</import>
<icon-factory>
<icon-set id="tirettes">
@ -2168,7 +2168,7 @@ au sequenceur</property>
<child>
<widget class="Gtk.Label" id="label1">
<property name="MemberName" />
<property name="LabelProp" translatable="yes">label1</property>
<property name="LabelProp" translatable="yes">Nom du périphérique :</property>
</widget>
<packing>
<property name="Position">0</property>
@ -2178,20 +2178,24 @@ au sequenceur</property>
</packing>
</child>
<child>
<widget class="Gtk.ComboBoxEntry" id="comboboxentry2">
<widget class="Gtk.Entry" id="txtPerif">
<property name="MemberName" />
<property name="IsTextCombo">True</property>
<property name="Items" translatable="yes" />
<property name="CanFocus">True</property>
<property name="IsEditable">True</property>
<property name="InvisibleChar">●</property>
</widget>
<packing>
<property name="Position">1</property>
<property name="AutoSize">False</property>
<property name="AutoSize">True</property>
</packing>
</child>
<child>
<widget class="Gtk.Label" id="label2">
<widget class="Gtk.Button" id="btnPerif">
<property name="MemberName" />
<property name="LabelProp" translatable="yes">label2</property>
<property name="CanFocus">True</property>
<property name="Type">TextOnly</property>
<property name="Label" translatable="yes">Ok</property>
<property name="UseUnderline">True</property>
</widget>
<packing>
<property name="Position">2</property>

0
test Normal file
View file