- renamed loaders

- added experimental support for Panasonic
- fixed Encrypted-flag detection for Samsung Analog and DVB-C/T channels
- text editors now only open after holding the mouse button for 0.5sec
- new menu item/button for deleting channels from the right list
This commit is contained in:
hbeham
2013-04-21 22:04:06 +02:00
parent bcbae783d4
commit d6570d18f3
56 changed files with 1144 additions and 1453 deletions

View File

@@ -8,8 +8,8 @@
<ProjectGuid>{F6F02792-07F1-48D5-9AF3-F945CA5E3931}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Loader.DbFile</RootNamespace>
<AssemblyName>ChanSort.Loader.DbFile</AssemblyName>
<RootNamespace>ChanSort.Loader.Toshiba</RootNamespace>
<AssemblyName>ChanSort.Loader.Toshiba</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>

View File

@@ -3,7 +3,7 @@ using System.Data.SQLite;
using System.Text;
using ChanSort.Api;
namespace ChanSort.Loader.DbFile
namespace ChanSort.Loader.Toshiba
{
internal class DbChannel : ChannelInfo
{

View File

@@ -7,7 +7,7 @@ using System.Windows.Forms;
using ChanSort.Api;
using ICSharpCode.SharpZipLib.Zip;
namespace ChanSort.Loader.DbFile
namespace ChanSort.Loader.Toshiba
{
class DbSerializer : SerializerBase
{

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.DbFile
namespace ChanSort.Loader.Toshiba
{
public class DbSerializerPlugin : ISerializerPlugin
{

View File

@@ -5,11 +5,11 @@ 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("ChanSort.Loader.DbFile")]
[assembly: AssemblyTitle("ChanSort.Loader.Toshiba")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChanSort.Loader.DbFile")]
[assembly: AssemblyProduct("ChanSort.Loader.Toshiba")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

View File

@@ -82,7 +82,9 @@ namespace ChanSort.Loader.Panasonic
int freq = r.GetInt32(field["freq"]);
if ((this.SignalSource & SignalSource.Sat) != 0)
{
// ReSharper disable PossibleLossOfFraction
this.FreqInMhz = freq/10;
// ReSharper restore PossibleLossOfFraction
int satId = r.GetInt32(field["physical_ch"]) >> 12;
var sat = dataRoot.Satellites.TryGet(satId);
if (sat != null)

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Windows.Forms;
@@ -9,8 +10,8 @@ namespace ChanSort.Loader.Panasonic
{
class Serializer : SerializerBase
{
private readonly ChannelList atvChannels = new ChannelList(SignalSource.AnalogCT | SignalSource.Tv, "Analog");
private readonly ChannelList dtvTvChannels = new ChannelList(SignalSource.DvbCT | SignalSource.DvbS | SignalSource.Tv, "DTV");
private readonly ChannelList atvChannels = new ChannelList(SignalSource.AnalogCT | SignalSource.Tv, "Analog TV");
private readonly ChannelList dtvTvChannels = new ChannelList(SignalSource.DvbCT | SignalSource.DvbS | SignalSource.Tv, "Digital TV");
private readonly ChannelList dtvRadioChannels = new ChannelList(SignalSource.DvbCT | SignalSource.DvbS | SignalSource.Radio, "Radio");
private string tempFile;
@@ -147,8 +148,49 @@ namespace ChanSort.Loader.Panasonic
#endregion
#region Save()
public override void Save(string tvOutputFile)
{
this.FileName = tvOutputFile;
string channelConnString = "Data Source=" + this.tempFile;
using (var conn = new SQLiteConnection(channelConnString))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
using (var trans = conn.BeginTransaction())
{
this.WriteChannels(cmd, this.atvChannels);
this.WriteChannels(cmd, this.dtvTvChannels);
this.WriteChannels(cmd, this.dtvRadioChannels);
trans.Commit();
}
}
}
this.CypherFile(this.tempFile, this.FileName);
}
#endregion
#region WriteChannels()
private void WriteChannels(SQLiteCommand cmd, ChannelList channelList)
{
cmd.CommandText = "update SVL set ... child_lock=@lock, skip=@skip where rowid=@rowid";
cmd.Parameters.Add(new SQLiteParameter("@rowid", DbType.Int32));
cmd.Parameters.Add(new SQLiteParameter("@child_lock", DbType.Int32));
cmd.Parameters.Add(new SQLiteParameter("@skip", DbType.Int32));
cmd.Prepare();
foreach (DbChannel channel in channelList.Channels)
{
channel.UpdateRawData();
cmd.Parameters["@rowid"].Value = channel.RecordIndex;
cmd.Parameters["@child_lock"].Value = channel.Lock;
cmd.Parameters["@skip"].Value = channel.Skip;
cmd.ExecuteNonQuery();
}
}
#endregion
}
}

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
internal class AnalogChannel : ScmChannelBase
{

View File

@@ -8,11 +8,12 @@
<ProjectGuid>{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Loader.ScmFile</RootNamespace>
<AssemblyName>ChanSort.Loader.ScmFile</AssemblyName>
<RootNamespace>ChanSort.Loader.Samsung</RootNamespace>
<AssemblyName>ChanSort.Loader.Samsung</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -84,7 +85,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="ChanSort.Loader.ScmFile.ini">
<None Include="ChanSort.Loader.Samsung.ini">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

View File

@@ -132,7 +132,7 @@
offQam = 7
offServiceType = 9
offEncrypted = 23
maskEncrypted = 0xff
maskEncrypted = 0x01
offSymbolRate = 32
offLock = 244
maskLock = 0x01
@@ -162,7 +162,7 @@
offHRes = 20
offVRes = 22
offEncrypted = 24
maskEncrypted = 0xff
maskEncrypted = 0x01
offFrameRate = 25
offSymbolRate = 28
offLock = 31
@@ -197,7 +197,7 @@
offHRes = 20
offVRes = 22
offEncrypted = 24
maskEncrypted = 0xff
maskEncrypted = 0x01
offFrameRate = 25
offSymbolRate = 28
offLock = 31

View File

@@ -1,7 +1,7 @@
using System.Collections.Generic;
using ChanSort.Api;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
public class DigitalChannel : ScmChannelBase
{

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
internal class ModelConstants
{

View File

@@ -2,14 +2,16 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly:InternalsVisibleTo("Test.Loader")]
// 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("ChanSort.Loader.ScmFile")]
[assembly: AssemblyTitle("ChanSort.Loader.Samsung")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChanSort.Loader.ScmFile")]
[assembly: AssemblyProduct("ChanSort.Loader.Samsung")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
class SatChannel : ScmChannelBase
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Text;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
internal class SatelliteMapping
{

View File

@@ -2,7 +2,7 @@
using System.Text;
using ChanSort.Api;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
public class ScmChannelBase : ChannelInfo
{

View File

@@ -6,7 +6,7 @@ using System.Windows.Forms;
using ChanSort.Api;
using ICSharpCode.SharpZipLib.Zip;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
class ScmSerializer : SerializerBase
{
@@ -180,10 +180,10 @@ namespace ChanSort.Loader.ScmFile
validCandidates = newValidCandidats;
}
if (validCandidates.Length != 1)
if (validCandidates.Length == 0)
return false;
this.modelConstants.TryGetValue("Series:" + validCandidates, out this.c);
this.modelConstants.TryGetValue("Series:" + validCandidates[0], out this.c);
return true;
}
@@ -365,7 +365,7 @@ namespace ChanSort.Loader.ScmFile
for (int slotIndex = 0; slotIndex < count; slotIndex++)
{
DigitalChannel ci = new DigitalChannel(slotIndex, isCable, rawChannel, frequency, c.favoriteNotSetValue);
if (ci.OldProgramNr != -1)
if (ci.OldProgramNr > 0)
this.DataRoot.AddChannel(list, ci);
rawChannel.BaseOffset += entrySize;

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.ScmFile
namespace ChanSort.Loader.Samsung
{
public class ScmSerializerPlugin : ISerializerPlugin
{

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public class AnalogChannel : TllChannelBase
{

View File

@@ -8,11 +8,12 @@
<ProjectGuid>{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Loader.TllFile</RootNamespace>
<AssemblyName>ChanSort.Loader.TllFile</AssemblyName>
<RootNamespace>ChanSort.Loader.LG</RootNamespace>
<AssemblyName>ChanSort.Loader.LG</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -55,9 +56,9 @@
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
@@ -104,7 +105,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="ChanSort.Loader.TllFile.ini">
<None Include="ChanSort.Loader.LG.ini">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public class DtvChannel : TllChannelBase
{

View File

@@ -1,4 +1,4 @@
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public class DvbsDataLayout
{

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public class FirmwareData : DataMapping
{

View File

@@ -2,16 +2,16 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("Test.Loader.TllFile")]
[assembly: InternalsVisibleTo("Test.Loader")]
// 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("ChanSort.Loader.TllFile")]
[assembly: AssemblyTitle("ChanSort.Loader.LG")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChanSort.Loader.TllFile")]
[assembly: AssemblyProduct("ChanSort.Loader.LG")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

View File

@@ -1,4 +0,0 @@
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -8,7 +8,7 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace ChanSort.Loader.TllFile {
namespace ChanSort.Loader.LG {
using System;
@@ -39,7 +39,7 @@ namespace ChanSort.Loader.TllFile {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Loader.TllFile.Resource", typeof(Resource).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Loader.LG.Resource", typeof(Resource).Assembly);
resourceMan = temp;
}
return resourceMan;

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
class SatChannel : TllChannelBase
{

View File

@@ -1,6 +1,6 @@
using System;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
internal class SatChannelListHeader
{

View File

@@ -1,6 +1,6 @@
using System;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
internal class SatTransponder
{

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public class TllChannelBase : ChannelInfo
{

View File

@@ -11,7 +11,7 @@ using System.Text;
using System.Windows.Forms;
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public partial class TllFileSerializer : SerializerBase
{

View File

@@ -5,7 +5,7 @@ using System.Data.SqlClient;
using System.Text;
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
/// <summary>
/// For research purposes this class writes DVB-S channel information into a database

View File

@@ -1,6 +1,6 @@
using ChanSort.Api;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public class TllFileSerializerPlugin : ISerializerPlugin
{

View File

@@ -1,4 +1,4 @@
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
partial class TvSettingsForm
{

View File

@@ -2,7 +2,7 @@
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
namespace ChanSort.Loader.TllFile
namespace ChanSort.Loader.LG
{
public partial class TvSettingsForm : XtraForm
{

View File

@@ -279,7 +279,7 @@
<data name="textEdit1.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="textEdit1.Properties.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>

View File

@@ -139,7 +139,7 @@
<value>cbHbbTv</value>
</data>
<data name="&gt;&gt;cbHbbTv.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbHbbTv.Parent" xml:space="preserve">
<value>grpOption</value>
@@ -166,7 +166,7 @@
<value>cbCustomCountry</value>
</data>
<data name="&gt;&gt;cbCustomCountry.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbCustomCountry.Parent" xml:space="preserve">
<value>grpOption</value>
@@ -177,7 +177,7 @@
<data name="comboBoxEdit1.Location" type="System.Drawing.Point, System.Drawing">
<value>72, 29</value>
</data>
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="comboBoxEdit1.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v12.2">
<value>Combo</value>
</data>
@@ -191,7 +191,7 @@
<value>comboBoxEdit1</value>
</data>
<data name="&gt;&gt;comboBoxEdit1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;comboBoxEdit1.Parent" xml:space="preserve">
<value>grpOption</value>
@@ -215,7 +215,7 @@
<value>labelControl1</value>
</data>
<data name="&gt;&gt;labelControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl1.Parent" xml:space="preserve">
<value>grpOption</value>
@@ -242,7 +242,7 @@
<value>grpOption</value>
</data>
<data name="&gt;&gt;grpOption.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;grpOption.Parent" xml:space="preserve">
<value>$this</value>
@@ -269,7 +269,7 @@
<value>btnOk</value>
</data>
<data name="&gt;&gt;btnOk.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;btnOk.Parent" xml:space="preserve">
<value>$this</value>
@@ -296,7 +296,7 @@
<value>btnCancel</value>
</data>
<data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<value>$this</value>
@@ -304,7 +304,7 @@
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="labelControl3.AutoSizeMode" type="DevExpress.XtraEditors.LabelAutoSizeMode, DevExpress.XtraEditors.v12.2">
<value>Vertical</value>
</data>
@@ -324,7 +324,7 @@
<value>labelControl3</value>
</data>
<data name="&gt;&gt;labelControl3.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl3.Parent" xml:space="preserve">
<value>grpHotelMode</value>
@@ -348,7 +348,7 @@
<value>labelControl2</value>
</data>
<data name="&gt;&gt;labelControl2.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl2.Parent" xml:space="preserve">
<value>grpHotelMode</value>
@@ -375,7 +375,7 @@
<value>cbDtvUpdate</value>
</data>
<data name="&gt;&gt;cbDtvUpdate.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbDtvUpdate.Parent" xml:space="preserve">
<value>grpHotelMode</value>
@@ -402,7 +402,7 @@
<value>cbHotelMode</value>
</data>
<data name="&gt;&gt;cbHotelMode.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbHotelMode.Parent" xml:space="preserve">
<value>grpHotelMode</value>
@@ -429,7 +429,7 @@
<value>grpHotelMode</value>
</data>
<data name="&gt;&gt;grpHotelMode.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;grpHotelMode.Parent" xml:space="preserve">
<value>$this</value>
@@ -456,7 +456,7 @@
<value>cbAutoChannelUpdate</value>
</data>
<data name="&gt;&gt;cbAutoChannelUpdate.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbAutoChannelUpdate.Parent" xml:space="preserve">
<value>grpSetup</value>
@@ -483,7 +483,7 @@
<value>grpSetup</value>
</data>
<data name="&gt;&gt;grpSetup.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;grpSetup.Parent" xml:space="preserve">
<value>$this</value>
@@ -510,7 +510,7 @@
<value>labelControl4</value>
</data>
<data name="&gt;&gt;labelControl4.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl4.Parent" xml:space="preserve">
<value>grpInformation</value>
@@ -537,7 +537,7 @@
<value>grpInformation</value>
</data>
<data name="&gt;&gt;grpInformation.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;grpInformation.Parent" xml:space="preserve">
<value>$this</value>
@@ -567,7 +567,7 @@
<value>lblHotelMenuAutoDetect</value>
</data>
<data name="&gt;&gt;lblHotelMenuAutoDetect.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;lblHotelMenuAutoDetect.Parent" xml:space="preserve">
<value>$this</value>
@@ -594,6 +594,6 @@
<value>TvSettingsForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
</root>

View File

@@ -9,18 +9,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort", "ChanSort\ChanSo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Api", "ChanSort.Api\ChanSort.Api.csproj", "{DCCFFA08-472B-4D17-BB90-8F513FC01392}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.TllFile", "ChanSort.Loader.TllFile\ChanSort.Loader.TllFile.csproj", "{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.LG", "ChanSort.Loader.TllFile\ChanSort.Loader.LG.csproj", "{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{67AED502-8AEB-45F2-9B95-AC42B6A5D2C4}"
ProjectSection(SolutionItems) = preProject
readme.txt = readme.txt
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.Loader.TllFile", "Test.Loader.TllFile\Test.Loader.TllFile.csproj", "{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.Loader", "Test.Loader.TllFile\Test.Loader.csproj", "{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.ScmFile", "ChanSort.Loader.ScmFile\ChanSort.Loader.ScmFile.csproj", "{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.Samsung", "ChanSort.Loader.ScmFile\ChanSort.Loader.Samsung.csproj", "{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.DbFile", "ChanSort.Loader.DbFile\ChanSort.Loader.DbFile.csproj", "{F6F02792-07F1-48D5-9AF3-F945CA5E3931}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.Toshiba", "ChanSort.Loader.DbFile\ChanSort.Loader.Toshiba.csproj", "{F6F02792-07F1-48D5-9AF3-F945CA5E3931}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.Panasonic", "ChanSort.Loader.Panasonic\ChanSort.Loader.Panasonic.csproj", "{68DA8072-3A29-4076-9F64-D66F38349585}"
EndProject

View File

@@ -135,7 +135,7 @@
<value>labelControl1</value>
</data>
<data name="&gt;&gt;labelControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl1.Parent" xml:space="preserve">
<value>$this</value>
@@ -166,7 +166,7 @@
<value>lnkDownload</value>
</data>
<data name="&gt;&gt;lnkDownload.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;lnkDownload.Parent" xml:space="preserve">
<value>$this</value>
@@ -226,7 +226,7 @@
<value>gcPlugins</value>
</data>
<data name="&gt;&gt;gcPlugins.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="lnkEmail.EditValue" xml:space="preserve">
<value>horst@beham.biz</value>
@@ -247,7 +247,7 @@
<value>lnkEmail</value>
</data>
<data name="&gt;&gt;lnkEmail.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;lnkEmail.Parent" xml:space="preserve">
<value>$this</value>
@@ -271,7 +271,7 @@
<value>labelControl2</value>
</data>
<data name="&gt;&gt;labelControl2.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl2.Parent" xml:space="preserve">
<value>$this</value>
@@ -295,7 +295,7 @@
<value>labelControl4</value>
</data>
<data name="&gt;&gt;labelControl4.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl4.Parent" xml:space="preserve">
<value>$this</value>
@@ -325,7 +325,7 @@
<value>lnkLicense</value>
</data>
<data name="&gt;&gt;lnkLicense.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;lnkLicense.Parent" xml:space="preserve">
<value>$this</value>
@@ -349,7 +349,7 @@
<value>labelControl5</value>
</data>
<data name="&gt;&gt;labelControl5.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl5.Parent" xml:space="preserve">
<value>$this</value>
@@ -373,7 +373,7 @@
<value>txtCredits</value>
</data>
<data name="&gt;&gt;txtCredits.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.MemoEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.MemoEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;txtCredits.Parent" xml:space="preserve">
<value>$this</value>
@@ -400,7 +400,7 @@
<value>simpleButton1</value>
</data>
<data name="&gt;&gt;simpleButton1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;simpleButton1.Parent" xml:space="preserve">
<value>$this</value>
@@ -424,7 +424,7 @@
<value>labelControl3</value>
</data>
<data name="&gt;&gt;labelControl3.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl3.Parent" xml:space="preserve">
<value>$this</value>
@@ -451,30 +451,30 @@
<value>gvPlugins</value>
</data>
<data name="&gt;&gt;gvPlugins.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colPlugin.Name" xml:space="preserve">
<value>colPlugin</value>
</data>
<data name="&gt;&gt;colPlugin.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colDisplayText.Name" xml:space="preserve">
<value>colDisplayText</value>
</data>
<data name="&gt;&gt;colDisplayText.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colFileTypes.Name" xml:space="preserve">
<value>colFileTypes</value>
</data>
<data name="&gt;&gt;colFileTypes.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AboutForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
</root>

View File

@@ -58,22 +58,22 @@
<ApplicationIcon>app.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Reference Include="DevExpress.Data.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.Printing.v12.2.Core, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Reference Include="DevExpress.Printing.v12.2.Core, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Reference Include="DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Reference Include="DevExpress.XtraBars.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Reference Include="DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Reference Include="DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="System" />

View File

@@ -138,13 +138,13 @@
<value>btnCancel</value>
</data>
<data name="&gt;&gt;btnOk.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="gcCharset.Size" type="System.Drawing.Size, System.Drawing">
<value>433, 446</value>
</data>
<data name="&gt;&gt;gvCharset.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>CharsetForm</value>
@@ -178,11 +178,11 @@
<data name="&gt;&gt;btnMyCountry.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gcCharset.EmbeddedNavigator.TextLocation" type="DevExpress.XtraEditors.NavigatorButtonsTextLocation, DevExpress.XtraEditors.v12.2">
<value>Center</value>
</data>
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gcCharset.EmbeddedNavigator.ToolTipIconType" type="DevExpress.Utils.ToolTipIconType, DevExpress.Utils.v12.2">
<value>None</value>
</data>
@@ -196,7 +196,7 @@
<value>Top, Right</value>
</data>
<data name="&gt;&gt;btnMyCountry.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="gcCharset.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@@ -211,10 +211,10 @@
<value>$this</value>
</data>
<data name="&gt;&gt;gcCharset.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colName.Name" xml:space="preserve">
<value>colName</value>
@@ -259,7 +259,7 @@
<value>gcCharset</value>
</data>
<data name="&gt;&gt;colCodePage.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="btnMyCountry.Text" xml:space="preserve">
<value>Default character set for my country</value>
@@ -274,7 +274,7 @@
<value>353, 6</value>
</data>
<data name="&gt;&gt;colName.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
@@ -337,7 +337,7 @@
<value />
</data>
<data name="&gt;&gt;colDisplayName.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>433, 483</value>
@@ -346,17 +346,17 @@
<value>142</value>
</data>
<data name="&gt;&gt;panelControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="colName.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="DevExpress.Data.v12.2" name="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.Data.v12.2" name="DevExpress.Data.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gcCharset.EmbeddedNavigator.AllowHtmlTextInToolTip" type="DevExpress.Utils.DefaultBoolean, DevExpress.Data.v12.2">
<value>Default</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>

View File

@@ -41,8 +41,9 @@ namespace ChanSort.Ui
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GlobalImageCollectionHolder));
this.sharedImageCollection1 = new DevExpress.Utils.SharedImageCollection();
this.sharedImageCollection1 = new DevExpress.Utils.SharedImageCollection(this.components);
((System.ComponentModel.ISupportInitialize)(this.sharedImageCollection1)).BeginInit();
//
// sharedImageCollection1
@@ -80,6 +81,7 @@ namespace ChanSort.Ui
this.sharedImageCollection1.ImageSource.Images.SetKeyName(26, "0026.png");
this.sharedImageCollection1.ImageSource.Images.SetKeyName(27, "0027.png");
this.sharedImageCollection1.ImageSource.Images.SetKeyName(28, "0028.png");
this.sharedImageCollection1.ImageSource.Images.SetKeyName(29, "0029.png");
this.sharedImageCollection1.ParentControl = null;
((System.ComponentModel.ISupportInitialize)(this.sharedImageCollection1)).EndInit();

View File

@@ -120,16 +120,16 @@
<metadata name="sharedImageCollection1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="sharedImageCollection1.ImageSource.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxMi4yLCBWZXJzaW9uPTEyLjIu
Ni4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
OC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
/xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABAAAAAQAAAACQUAAAAP
BQAAALhJAAACDgMAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8
BQAAAJNLAAACDgMAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAACukAAArpAf11ztMAAAAqdEVYdENyZWF0aW9uIFRpbWUATWkgMSBNcnogMjAwNiAx
NToxMDo1MSArMDEwMP/NqUUAAAAHdElNRQfWAwEODCaDia/cAAACZ0lEQVQ4T82S7UsTUBSH75eCCAx6
oTAqg7BMRKjoQ6S9Oa1I10gzU8PUZmYpKEamy8gCX8iS2YxqiRmREMrUltEoLdSMps458wXUEiW0UToN
@@ -397,7 +397,7 @@
BU25oE+nK5DlAjr9T4HMAlcqIFiBQAemTNAmuI07BW7Sq8HJggRT7Sz47uDNWhggoBjTQnov/f4bvmET
bqiCRBvTQAWNQ3RZENP+Gf2EJXRlAqnS17lium7DHJaYmMb3KMxhiQ7dAovxvA/msGQsgTks2Yar6gWi
aB5TNw92LAAAAABJRU5ErkJggvkDAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAE
Z0FNQQAAsY8L/GEFAAAACXBIWXMAAA7BAAAOwQG4kWvtAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQg
Z0FNQQAAsY8L/GEFAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQg
djMuNS4xMDD0cqEAAAN1SURBVDhPbZNrUJRlGIa/JXGL06KyoZZCA3kgtXIcKmYKRyVTbARJ2sXlGCuC
KCwU6bIsISgeQDJJA4IhYHEBUSIJGJihIkhEflAzkD+IoS11OMTADOeBq4/PGc2Zftzvv+t63vd55xaA
x/lzeOC38o4yjLUniSqPILj4Qw6XhmO8oae6vQrLQwuzs7NW/2WkY35+3qrrjy4yGlI405zKuZY0MpoN
@@ -443,12 +443,20 @@
lL7SYSYhBCSLA50VmyNLwCIX+lN11MnJsrHiQFnXHJLfGKG+Uw2SxoKCXNhYZI5w5yZiROJ829K3wiGv
Yw6pPUZ0yMtAif4gon+TGIBhiUu9pW+FQ+pzHZ/Ra4RCfg8UexoUcxIU5WuOcMf5QyMRVVv6VtiKw2VJ
UU9n+POKCRiC3H5TejgoLcwcds+fk2zHONp7Wfr/xe7wheuce37ry0xn+8vaQI/F5Ug/CBHuAtH+WNbZ
Y67uji3LPpa9LK4spywRbja2sfkDNmCxwsesQzEAAAAASUVORK5CYIIL
Y67uji3LPpa9LK4spywRbja2sfkDNmCxwsesQzEAAAAASUVORK5CYILXAQAAiVBORw0KGgoAAAANSUhE
UgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIA
AA7CARUoSoAAAAAHdElNRQfWAxoOERLaSefrAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4x
MDD0cqEAAAEzSURBVDhPYxg8YNbs6RcaGhr+E4N7+7tWQ7UhAEiCWABSC9WGADADPnx4jxeDQH8kEwzH
QLWjGnD8+DGsGCQH0vju1bH/59cWgtlQ7cS5AKTh/evj/y+tyfq/sDn0D04DsNmOrHlJeziYD8TGUO34
XQBS/PbZ0f/nV2X+X9AchqkZBHC5AKz56ZH/J+an/F/QArG5syEL5nRGKI3dBe/fv/tfEG35/9Dqrv+L
W0PBmp/fOQWLRpBmVAP+/fuLohmkwcdJ7X92uBmYfebgeqD4e5gBrBCdUAAS/PXrJ9yAd+/eghSBNW5e
Oe3/oUOH/p8+fer/o0ePYAZwgDXCAEgQGfz79+//9+/f/798+RKs6enTp/9fvXqF7AI2iE4o6OnrXAyS
IAZ393YsBmpB+J98wMAAAEBy/BniHbchAAAAAElFTkSuQmCCCw==
</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="SharedImageCollection.Timestamp" type="System.DateTime, mscorlib">
<value>04/07/2013 16:39:41</value>
<value>04/21/2013 20:54:27</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="SharedImageCollection.ImageSize" type="System.Drawing.Size, System.Drawing">

View File

@@ -56,7 +56,7 @@
this.btnRenum = new DevExpress.XtraEditors.SimpleButton();
this.btnDown = new DevExpress.XtraEditors.SimpleButton();
this.btnUp = new DevExpress.XtraEditors.SimpleButton();
this.btnRemove = new DevExpress.XtraEditors.SimpleButton();
this.btnRemoveLeft = new DevExpress.XtraEditors.SimpleButton();
this.grpInputList = new DevExpress.XtraEditors.GroupControl();
this.gridRight = new DevExpress.XtraGrid.GridControl();
this.gviewRight = new DevExpress.XtraGrid.Views.Grid.GridView();
@@ -88,8 +88,10 @@
this.colNetworkOperator = new DevExpress.XtraGrid.Columns.GridColumn();
this.colDebug = new DevExpress.XtraGrid.Columns.GridColumn();
this.colLogicalIndex = new DevExpress.XtraGrid.Columns.GridColumn();
this.colSignalSource = new DevExpress.XtraGrid.Columns.GridColumn();
this.lblHotkeyRight = new DevExpress.XtraEditors.LabelControl();
this.panelControl3 = new DevExpress.XtraEditors.PanelControl();
this.btnRemoveRight = new DevExpress.XtraEditors.SimpleButton();
this.btnAddAll = new DevExpress.XtraEditors.SimpleButton();
this.btnClearRightFilter = new DevExpress.XtraEditors.SimpleButton();
this.btnAdd = new DevExpress.XtraEditors.SimpleButton();
@@ -107,6 +109,7 @@
this.miEdit = new DevExpress.XtraBars.BarSubItem();
this.miAddChannel = new DevExpress.XtraBars.BarButtonItem();
this.miRemove = new DevExpress.XtraBars.BarButtonItem();
this.miRenameChannel = new DevExpress.XtraBars.BarButtonItem();
this.miSort = new DevExpress.XtraBars.BarButtonItem();
this.miRenum = new DevExpress.XtraBars.BarButtonItem();
this.mnuFavSet = new DevExpress.XtraBars.BarSubItem();
@@ -154,7 +157,7 @@
this.tabChannelList = new DevExpress.XtraTab.XtraTabControl();
this.pageEmpty = new DevExpress.XtraTab.XtraTabPage();
this.mnuContext = new DevExpress.XtraBars.PopupMenu(this.components);
this.colSignalSource = new DevExpress.XtraGrid.Columns.GridColumn();
this.timerEditDelay = new System.Windows.Forms.Timer(this.components);
((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit();
this.splitContainerControl1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grpOutputList)).BeginInit();
@@ -342,7 +345,7 @@
this.pnlEditControls.Controls.Add(this.btnRenum);
this.pnlEditControls.Controls.Add(this.btnDown);
this.pnlEditControls.Controls.Add(this.btnUp);
this.pnlEditControls.Controls.Add(this.btnRemove);
this.pnlEditControls.Controls.Add(this.btnRemoveLeft);
resources.ApplyResources(this.pnlEditControls, "pnlEditControls");
this.pnlEditControls.Name = "pnlEditControls";
//
@@ -424,13 +427,13 @@
this.btnUp.Name = "btnUp";
this.btnUp.Click += new System.EventHandler(this.btnUp_Click);
//
// btnRemove
// btnRemoveLeft
//
this.btnRemove.ImageIndex = 11;
this.btnRemove.ImageList = this.globalImageCollection1;
resources.ApplyResources(this.btnRemove, "btnRemove");
this.btnRemove.Name = "btnRemove";
this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click);
this.btnRemoveLeft.ImageIndex = 11;
this.btnRemoveLeft.ImageList = this.globalImageCollection1;
resources.ApplyResources(this.btnRemoveLeft, "btnRemoveLeft");
this.btnRemoveLeft.Name = "btnRemoveLeft";
this.btnRemoveLeft.Click += new System.EventHandler(this.btnRemoveLeft_Click);
//
// grpInputList
//
@@ -716,6 +719,13 @@
this.colLogicalIndex.OptionsColumn.AllowEdit = false;
this.colLogicalIndex.OptionsColumn.ReadOnly = true;
//
// colSignalSource
//
resources.ApplyResources(this.colSignalSource, "colSignalSource");
this.colSignalSource.FieldName = "SignalSource";
this.colSignalSource.Name = "colSignalSource";
this.colSignalSource.OptionsColumn.AllowEdit = false;
//
// lblHotkeyRight
//
resources.ApplyResources(this.lblHotkeyRight, "lblHotkeyRight");
@@ -723,12 +733,21 @@
//
// panelControl3
//
this.panelControl3.Controls.Add(this.btnRemoveRight);
this.panelControl3.Controls.Add(this.btnAddAll);
this.panelControl3.Controls.Add(this.btnClearRightFilter);
this.panelControl3.Controls.Add(this.btnAdd);
resources.ApplyResources(this.panelControl3, "panelControl3");
this.panelControl3.Name = "panelControl3";
//
// btnRemoveRight
//
this.btnRemoveRight.ImageIndex = 11;
this.btnRemoveRight.ImageList = this.globalImageCollection1;
resources.ApplyResources(this.btnRemoveRight, "btnRemoveRight");
this.btnRemoveRight.Name = "btnRemoveRight";
this.btnRemoveRight.Click += new System.EventHandler(this.btnRemoveRight_Click);
//
// btnAddAll
//
resources.ApplyResources(this.btnAddAll, "btnAddAll");
@@ -792,6 +811,7 @@
this.miMoveDown,
this.miAddChannel,
this.miRemove,
this.miRenameChannel,
this.miSort,
this.miRenum,
this.mnuFavSet,
@@ -809,7 +829,7 @@
this.miEraseChannelData,
this.miOpenWebsite,
this.miWiki});
this.barManager1.MaxItemId = 52;
this.barManager1.MaxItemId = 53;
//
// bar1
//
@@ -938,6 +958,7 @@
this.miEdit.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] {
new DevExpress.XtraBars.LinkPersistInfo(this.miAddChannel),
new DevExpress.XtraBars.LinkPersistInfo(this.miRemove),
new DevExpress.XtraBars.LinkPersistInfo(this.miRenameChannel),
new DevExpress.XtraBars.LinkPersistInfo(this.miSort),
new DevExpress.XtraBars.LinkPersistInfo(this.miRenum),
new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, "", true, true, true, 0, null, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph),
@@ -969,6 +990,16 @@
this.miRemove.Name = "miRemove";
this.miRemove.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRemove_ItemClick);
//
// miRenameChannel
//
resources.ApplyResources(this.miRenameChannel, "miRenameChannel");
this.miRenameChannel.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0");
this.miRenameChannel.Id = 52;
this.miRenameChannel.ImageIndex = 29;
this.miRenameChannel.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N));
this.miRenameChannel.Name = "miRenameChannel";
this.miRenameChannel.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRenameChannel_ItemClick);
//
// miSort
//
resources.ApplyResources(this.miSort, "miSort");
@@ -1390,6 +1421,7 @@
new DevExpress.XtraBars.LinkPersistInfo(this.miMoveDown),
new DevExpress.XtraBars.LinkPersistInfo(this.miAddChannel),
new DevExpress.XtraBars.LinkPersistInfo(this.miRemove),
new DevExpress.XtraBars.LinkPersistInfo(this.miRenameChannel),
new DevExpress.XtraBars.LinkPersistInfo(this.miSort),
new DevExpress.XtraBars.LinkPersistInfo(this.miRenum),
new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, "", true, true, true, 0, null, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph),
@@ -1403,12 +1435,10 @@
this.mnuContext.Manager = this.barManager1;
this.mnuContext.Name = "mnuContext";
//
// colSignalSource
// timerEditDelay
//
resources.ApplyResources(this.colSignalSource, "colSignalSource");
this.colSignalSource.FieldName = "SignalSource";
this.colSignalSource.Name = "colSignalSource";
this.colSignalSource.OptionsColumn.AllowEdit = false;
this.timerEditDelay.Interval = 500;
this.timerEditDelay.Tick += new System.EventHandler(this.timerEditDelay_Tick);
//
// MainForm
//
@@ -1473,7 +1503,7 @@
private DevExpress.XtraGrid.Columns.GridColumn colUid;
private DevExpress.XtraGrid.Columns.GridColumn colName;
private DevExpress.XtraEditors.GroupControl grpOutputList;
private DevExpress.XtraEditors.SimpleButton btnRemove;
private DevExpress.XtraEditors.SimpleButton btnRemoveLeft;
private DevExpress.XtraEditors.GroupControl grpInputList;
private DevExpress.XtraEditors.SimpleButton btnAdd;
private DevExpress.XtraGrid.GridControl gridLeft;
@@ -1587,6 +1617,9 @@
private DevExpress.XtraGrid.Columns.GridColumn colOutLock;
private DevExpress.XtraGrid.Columns.GridColumn colOutServiceType;
private DevExpress.XtraGrid.Columns.GridColumn colSignalSource;
private DevExpress.XtraEditors.SimpleButton btnRemoveRight;
private System.Windows.Forms.Timer timerEditDelay;
private DevExpress.XtraBars.BarButtonItem miRenameChannel;
private DevExpress.XtraSplashScreen.SplashScreenManager splashScreenManager1;
}
}

View File

@@ -23,7 +23,7 @@ namespace ChanSort.Ui
{
public partial class MainForm : XtraForm
{
public const string AppVersion = "v2013-04-11";
public const string AppVersion = "v2013-04-21";
#region enum EditMode
private enum EditMode
@@ -224,16 +224,6 @@ namespace ChanSort.Ui
this.UpdateFavoritesEditor(this.dataRoot.SupportedFavorites);
this.colName.OptionsColumn.AllowEdit = this.currentTvSerializer.Features.ChannelNameEdit;
this.colOutName.OptionsColumn.AllowEdit = this.currentTvSerializer.Features.ChannelNameEdit;
if (this.dataRoot.Warnings.Length > 0)
{
var lines = this.dataRoot.Warnings.ToString().Split('\n');
Array.Sort(lines);
var sortedWarnings = String.Join("\n", lines);
InfoBox.Show(this,
Resources.MainForm_LoadFiles_ValidationWarningMsg + "\r\n\r\n" + sortedWarnings,
Resources.MainForm_LoadFiles_ValidationWarningCap);
}
}
catch (Exception ex)
{
@@ -948,6 +938,7 @@ namespace ChanSort.Ui
if (col == this.colIndex) return col.Visible;
if (col == this.colUid) return col.Visible;
if (col == this.colDebug) return colDebug.Visible;
if (col == this.colSignalSource) return col.Visible;
if (col == this.colLogicalIndex) return colLogicalIndex.Visible;
if (col == this.colPolarity) return false;
@@ -1043,7 +1034,6 @@ namespace ChanSort.Ui
this.miRenum.Visibility = visLeft;
this.miMoveUp.Visibility = visLeft;
this.miMoveDown.Visibility = visLeft;
this.miRemove.Visibility = visLeft;
this.miAddChannel.Visibility = visRight;
var sel = this.gviewLeft.GetSelectedRows();
@@ -1096,6 +1086,15 @@ namespace ChanSort.Ui
if (this.currentTvSerializer == null)
return;
var info = this.currentTvSerializer.GetFileInformation();
if (this.dataRoot.Warnings.Length > 0)
{
var lines = this.dataRoot.Warnings.ToString().Split('\n');
Array.Sort(lines);
var sortedWarnings = String.Join("\n", lines);
info += Resources.MainForm_LoadFiles_ValidationWarningMsg + "\r\n\r\n" + sortedWarnings;
}
InfoBox.Show(this, info, this.miFileInformation.Caption.Replace("...", "").Replace("&",""));
}
#endregion
@@ -1150,6 +1149,20 @@ namespace ChanSort.Ui
}
#endregion
#region RenameChannel()
private void RenameChannel()
{
if (this.lastFocusedGrid == null) return;
if (this.lastFocusedGrid == this.gviewLeft)
this.gviewLeft.FocusedColumn = this.colOutName;
else
this.gviewRight.FocusedColumn = this.colName;
this.dontOpenEditor = false;
this.lastFocusedGrid.ShowEditor();
}
#endregion
// UI events
#region MainForm_Load
@@ -1235,6 +1248,11 @@ namespace ChanSort.Ui
this.TryExecute(() => this.RemoveChannels(this.lastFocusedGrid, this.cbCloseGap.Checked));
}
private void miRenameChannel_ItemClick(object sender, ItemClickEventArgs e)
{
this.TryExecute(this.RenameChannel);
}
private void miSort_ItemClick(object sender, ItemClickEventArgs e)
{
this.TryExecute(this.SortSelectedChannels);
@@ -1389,9 +1407,9 @@ namespace ChanSort.Ui
}
#endregion
#region gview_MouseDown, gview_MouseUp, gview_ShowingEditor
#region gview_MouseDown, gview_MouseUp, timerEditDelay_Tick, gview_ShowingEditor
// these 3 event handler in combination override the default row-selection and editor-opening
// these 4 event handler in combination override the default row-selection and editor-opening
// behavior of the grid control.
private void gview_MouseDown(object sender, MouseEventArgs e)
@@ -1405,26 +1423,35 @@ namespace ChanSort.Ui
if (ModifierKeys == Keys.None)
{
if (hit.RowHandle != view.FocusedRowHandle)
{
SelectFocusedRow(view, hit.RowHandle);
this.dontOpenEditor = true;
}
else if (e.Clicks > 1)
this.dontOpenEditor = true;
this.timerEditDelay.Start();
}
else if (ModifierKeys == Keys.Control && !view.IsRowSelected(hit.RowHandle))
this.BeginInvoke((Action)(()=>view.SelectRow(hit.RowHandle)));
}
else
{
if (ModifierKeys == Keys.Control && !view.IsRowSelected(hit.RowHandle))
this.BeginInvoke((Action) (() => view.SelectRow(hit.RowHandle)));
}
}
else if (e.Button == MouseButtons.Right)
{
if (!view.IsRowSelected(hit.RowHandle))
SelectFocusedRow(view, hit.RowHandle);
}
this.dontOpenEditor = true;
}
private void gview_MouseUp(object sender, MouseEventArgs e)
{
this.BeginInvoke((Action) (() => this.dontOpenEditor = false));
this.timerEditDelay.Stop();
}
private void timerEditDelay_Tick(object sender, EventArgs e)
{
this.timerEditDelay.Stop();
this.dontOpenEditor = false;
if (this.lastFocusedGrid != null)
this.lastFocusedGrid.ShowEditor();
}
private void gview_ShowingEditor(object sender, System.ComponentModel.CancelEventArgs e)
@@ -1712,12 +1739,17 @@ namespace ChanSort.Ui
}
#endregion
#region btnRemove_Click
#region btnRemoveLeft_Click, btnRemoveRight_Click
private void btnRemove_Click(object sender, EventArgs e)
private void btnRemoveLeft_Click(object sender, EventArgs e)
{
TryExecute(() => this.RemoveChannels(this.gviewLeft, this.cbCloseGap.Checked));
}
private void btnRemoveRight_Click(object sender, EventArgs e)
{
this.TryExecute(() => this.RemoveChannels(this.gviewRight, this.cbCloseGap.Checked));
}
#endregion
#region btnUp_Click, btnDown_Click
@@ -1847,5 +1879,6 @@ namespace ChanSort.Ui
this.SetActiveGrid(this.gviewRight);
}
#endregion
}
}

View File

@@ -117,51 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gridLeft.EmbeddedNavigator.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridLeft.EmbeddedNavigator.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<assembly alias="DevExpress.Data.v12.2" name="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gridLeft.EmbeddedNavigator.AllowHtmlTextInToolTip" type="DevExpress.Utils.DefaultBoolean, DevExpress.Data.v12.2">
<value>Default</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gridLeft.EmbeddedNavigator.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left</value>
</data>
<data name="gridLeft.EmbeddedNavigator.BackgroundImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridLeft.EmbeddedNavigator.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
<value>Tile</value>
</data>
<data name="gridLeft.EmbeddedNavigator.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gridLeft.EmbeddedNavigator.TextLocation" type="DevExpress.XtraEditors.NavigatorButtonsTextLocation, DevExpress.XtraEditors.v12.2">
<value>Center</value>
</data>
<data name="gridLeft.EmbeddedNavigator.ToolTip" xml:space="preserve">
<value />
</data>
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gridLeft.EmbeddedNavigator.ToolTipIconType" type="DevExpress.Utils.ToolTipIconType, DevExpress.Utils.v12.2">
<value>None</value>
</data>
<data name="gridLeft.EmbeddedNavigator.ToolTipTitle" xml:space="preserve">
<value />
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="gviewLeft.Appearance.HeaderPanel.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="gviewLeft.Appearance.HeaderPanel.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="colOutSlot.Caption" xml:space="preserve">
<value>Neue Pr#</value>
</data>
@@ -174,365 +129,19 @@
<data name="colOutFav.Caption" xml:space="preserve">
<value>Favoriten</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="repositoryItemCheckedComboBoxEdit1.Mask.BeepOnError" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
<value>_</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.SaveLiteral" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="colOutLock.Caption" xml:space="preserve">
<value>Ge- sperrt</value>
</data>
<data name="colOutLock.ToolTip" xml:space="preserve">
<value>Kindersicherung</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lblHotkeyLeft.Size" type="System.Drawing.Size, System.Drawing">
<value>333, 17</value>
</data>
<data name="lblHotkeyLeft.Text" xml:space="preserve">
<value>F3: Filter | F4: Liste | -: nach oben | +: nach unten | Entf: entfernen</value>
</data>
<data name="globalImageCollection1.ImageSource.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxMi4yLCBWZXJzaW9uPTEyLjIu
Ni4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
/xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABAAAAAQAAAACQUAAAAP
BQAAAMBJAAACDgMAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAACukAAArpAf11ztMAAAAqdEVYdENyZWF0aW9uIFRpbWUATWkgMSBNcnogMjAwNiAx
NToxMDo1MSArMDEwMP/NqUUAAAAHdElNRQfWAwEODCaDia/cAAACZ0lEQVQ4T82S7UsTUBSH75eCCAx6
oTAqg7BMRKjoQ6S9Oa1I10gzU8PUZmYpKEamy8gCX8iS2YxqiRmREMrUltEoLdSMps458wXUEiW0UToN
bdTTpaLtP6gDlwuXe57zO79zxP8RC1M7CCzqRSR0IZI7EepOvLO7CI4qRRGpxTejGRHTioiVd+RrAmMq
8FA+4k+6EGHJlfA4H+MoiMJviKtO7nbPQcJqOLaSNtsHxKUpxMUpzmobQX+aYI2E/Y3kftJ1LVClwfxF
Qgp+cL3DKQG+ErAek2UUoZmloMwEFeco75hEhJrcAElWRD6ElA3CzVR6ZkDXA5zwgzgfntrsFGnroVLD
leYZRKoEKp+5AP457TR0j/PA4uB9v4QMmGHWAepNcNyPuSEbziYDw2MT3GkcpuZVHz6JT1wA5dESiF0p
q22ERH+ZuPn3ObVNqtgK0RsgfA0cWA57PWC3QLkz0wVQHSmGqCXy41qI8ZZ9S1CclK/eAvFSRYR8D10B
+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
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tl
dCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1s
bnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0
MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiBy
ZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4
bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9u
cy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv
YmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjQ1QTVE
QzE1NTY1MTFFMTlEMzlGQkM3NTZEQTg5QjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjQ1QTVE
QzI1NTY1MTFFMTlEMzlGQkM3NTZEQTg5QjAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFu
Y2VJRD0ieG1wLmlpZDo2NDVBNURCRjU1NjUxMUUxOUQzOUZCQzc1NkRBODlCMCIgc3RSZWY6ZG9jdW1l
bnRJRD0ieG1wLmRpZDo2NDVBNURDMDU1NjUxMUUxOUQzOUZCQzc1NkRBODlCMCIvPiA8L3JkZjpEZXNj
cmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqSWWTYAAAJY
SURBVDhPbVJLaxNhFP2gexdCacxrEpIWUbJI2qSPpKn4iNZYGsGkWqFPRaGFaA1qYjOmaqFkEVQIFXWn
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
</value>
</data>
<data name="miFile.Caption" xml:space="preserve">
<value>&amp;Datei</value>
</data>
@@ -569,6 +178,9 @@
<data name="miRemove.Caption" xml:space="preserve">
<value>Sender &amp;entfernen</value>
</data>
<data name="miRenameChannel.Caption" xml:space="preserve">
<value>Sender umbenennen</value>
</data>
<data name="miSort.Caption" xml:space="preserve">
<value>Sender alphabetisch sortieren</value>
</data>
@@ -626,11 +238,11 @@
<data name="miAbout.Caption" xml:space="preserve">
<value>&amp;Über ChanSort...</value>
</data>
<assembly alias="DevExpress.XtraBars.v12.2" name="DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<assembly alias="DevExpress.XtraBars.v12.2" name="DevExpress.XtraBars.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="barManager1.Categories" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjIuOC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe
@@ -640,7 +252,7 @@
<data name="barManager1.Categories1" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjIuOC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw
@@ -650,7 +262,7 @@
<data name="barManager1.Categories2" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjIuOC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu
@@ -660,175 +272,43 @@
<data name="barManager1.Categories3" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjIuOC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC
X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc
WIeWYGkVXQEL
</value>
</data>
<data name="barDockControlTop.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlTop.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="barDockControlBottom.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlBottom.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="barDockControlLeft.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlLeft.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="barDockControlRight.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlRight.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="miMoveUp.Caption" xml:space="preserve">
<value>Nach oben</value>
</data>
<data name="miMoveDown.Caption" xml:space="preserve">
<value>Nach unten</value>
</data>
<data name="rbInsertSwap.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="rbInsertSwap.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="rbInsertSwap.Properties.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="rbInsertSwap.Properties.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="rbInsertSwap.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="rbInsertSwap.Properties.Caption" xml:space="preserve">
<value>tauschen</value>
</data>
<data name="rbInsertSwap.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="rbInsertSwap.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="rbInsertSwap.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="rbInsertAfter.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="rbInsertAfter.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="rbInsertAfter.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="rbInsertAfter.Properties.Caption" xml:space="preserve">
<value>dahinter</value>
</data>
<data name="rbInsertAfter.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="rbInsertAfter.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="rbInsertAfter.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="rbInsertBefore.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="rbInsertBefore.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="rbInsertBefore.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="rbInsertBefore.Properties.Caption" xml:space="preserve">
<value>davor</value>
</data>
<data name="rbInsertBefore.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="rbInsertBefore.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="rbInsertBefore.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="cbCloseGap.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbCloseGap.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbCloseGap.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbCloseGap.Properties.Caption" xml:space="preserve">
<value>Lücken beim Verschieben/Entfernen von Sendern schließen</value>
</data>
<data name="cbCloseGap.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="cbCloseGap.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="cbCloseGap.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="cbCloseGap.ToolTip" xml:space="preserve">
<value>Wenn aktiv, werden folgende Programmnummer automatisch vorgerückt</value>
</data>
<data name="cbAppendUnsortedChannels.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbAppendUnsortedChannels.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbAppendUnsortedChannels.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbAppendUnsortedChannels.Properties.Caption" xml:space="preserve">
<value>Unsortierte Sender beim Speichern automatisch anhängen</value>
</data>
<data name="cbAppendUnsortedChannels.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="cbAppendUnsortedChannels.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="cbAppendUnsortedChannels.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 13</value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>Einfügemodus:</value>
</data>
<data name="picDonate.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="picDonate.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="picDonate.Properties.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="picDonate.Properties.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="pageEmpty.Text" xml:space="preserve">
<value>Keine Datei geladen</value>
</data>
@@ -838,54 +318,12 @@
<data name="labelControl11.ToolTip" xml:space="preserve">
<value>Programplatz für Einfügen und Festlegen</value>
</data>
<data name="txtSetSlot.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="txtSetSlot.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="txtSetSlot.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>
<data name="txtSetSlot.Properties.Mask.BeepOnError" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="txtSetSlot.Properties.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
<value>_</value>
</data>
<data name="txtSetSlot.Properties.Mask.SaveLiteral" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="txtSetSlot.Properties.NullValuePrompt" xml:space="preserve">
<value />
</data>
<data name="txtSetSlot.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>ChanSort {0} - Senderlisten-Editor für Samsung, LG und Toshiba TVs</value>
</data>
<data name="btnToggleLock.Text" xml:space="preserve">
<value>Kindersicherung</value>
</data>
<data name="btnClearLeftFilter.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="btnClearLeftFilter.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="btnClearLeftFilter.ToolTip" xml:space="preserve">
<value>Filter entfernen</value>
</data>
@@ -898,51 +336,9 @@
<data name="btnUp.ToolTip" xml:space="preserve">
<value>Markierte Sender nach oben verschieben</value>
</data>
<data name="btnRemove.ToolTip" xml:space="preserve">
<value>Markierte Sender entfernen</value>
</data>
<data name="grpOutputList.Text" xml:space="preserve">
<value>Sortierte Sender (.csv)</value>
</data>
<data name="gridRight.EmbeddedNavigator.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridRight.EmbeddedNavigator.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridRight.EmbeddedNavigator.AllowHtmlTextInToolTip" type="DevExpress.Utils.DefaultBoolean, DevExpress.Data.v12.2">
<value>Default</value>
</data>
<data name="gridRight.EmbeddedNavigator.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left</value>
</data>
<data name="gridRight.EmbeddedNavigator.BackgroundImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridRight.EmbeddedNavigator.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
<value>Tile</value>
</data>
<data name="gridRight.EmbeddedNavigator.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
<data name="gridRight.EmbeddedNavigator.TextLocation" type="DevExpress.XtraEditors.NavigatorButtonsTextLocation, DevExpress.XtraEditors.v12.2">
<value>Center</value>
</data>
<data name="gridRight.EmbeddedNavigator.ToolTip" xml:space="preserve">
<value />
</data>
<data name="gridRight.EmbeddedNavigator.ToolTipIconType" type="DevExpress.Utils.ToolTipIconType, DevExpress.Utils.v12.2">
<value>None</value>
</data>
<data name="gridRight.EmbeddedNavigator.ToolTipTitle" xml:space="preserve">
<value />
</data>
<data name="gviewRight.Appearance.HeaderPanel.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="gviewRight.Appearance.HeaderPanel.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="colSlotOld.Caption" xml:space="preserve">
<value>Alte Pr#</value>
</data>
@@ -964,27 +360,6 @@
<data name="colFavorites.Caption" xml:space="preserve">
<value>Favoriten</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.BeepOnError" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
<value>_</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.SaveLiteral" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="colLock.Caption" xml:space="preserve">
<value>Ge- sperrt</value>
</data>
@@ -1030,11 +405,8 @@
<data name="lblHotkeyRight.Text" xml:space="preserve">
<value>F5: Filter | F6: Liste | Eingabe: übernehmen</value>
</data>
<data name="btnClearRightFilter.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="btnClearRightFilter.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
<data name="btnRemoveRight.ToolTip" xml:space="preserve">
<value>Sender aus sortierter Liste entfernen</value>
</data>
<data name="btnClearRightFilter.ToolTip" xml:space="preserve">
<value>Filter entfernen</value>

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,7 @@
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraSplashScreen.SplashScreenManager, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraSplashScreen.SplashScreenManager, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -145,7 +145,7 @@
<value>0, 14, 0, 14</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraWaitForm.WaitForm, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraWaitForm.WaitForm, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>WaitForm1</value>
@@ -227,7 +227,7 @@
<value>Horizontal</value>
</data>
<data name="&gt;&gt;progressPanel1.Type" xml:space="preserve">
<value>DevExpress.XtraWaitForm.ProgressPanel, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
<value>DevExpress.XtraWaitForm.ProgressPanel, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="progressPanel1.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>

View File

@@ -0,0 +1,141 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ChanSort.Loader.LG;
namespace Test.Loader
{
[TestClass]
public class LgTest : LoaderTestBase
{
#region TestLgTllLoader()
[TestMethod]
[DeploymentItem("ChanSort.Loader.LG\\ChanSort.Loader.LG.ini")]
public void TestLgTllLoader()
{
var expectedData = this.InitExpectedLgData();
TllFileSerializerPlugin plugin = new TllFileSerializerPlugin();
StringBuilder errors = new StringBuilder();
var list = this.FindAllFiles("TestFiles", "*.tll");
var models = new Dictionary<string,string>();
var firmwareSize = new Dictionary<int, string>();
foreach(var file in list)
{
if (file.Contains("GlobalClone") || file.Contains("CountrySettings"))
continue;
Debug.Print("Testing " + file);
try
{
var serializer = plugin.CreateSerializer(file) as TllFileSerializer;
Assert.IsNotNull(serializer, "No Serializer for " + file);
serializer.Load();
var fileName = Path.GetFileName(file) ?? "";
int idx = fileName.IndexOf("-");
string key = idx < 0 ? fileName : fileName.Substring(0, idx);
var satChannelList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS|ChanSort.Api.SignalSource.Tv);
key += "\t" + serializer.ACTChannelLength+
"\t"+serializer.HasDvbs+
"\t"+serializer.SatChannelLength+
"\t" + (satChannelList == null ? "n/a" : satChannelList.Count.ToString());
string relPath = Path.GetFileName(Path.GetDirectoryName(file))+"\\"+fileName;
models[key] = relPath;
var model = this.GetLgModel(file);
if (firmwareSize.ContainsKey(serializer.FirmwareBlockSize))
{
string x = firmwareSize[serializer.FirmwareBlockSize];
if (!x.Contains(model))
firmwareSize[serializer.FirmwareBlockSize] = x + ", " + model;
}
else
firmwareSize[serializer.FirmwareBlockSize] = model;
Assert.IsFalse(serializer.DataRoot.IsEmpty, "No channels loaded from " + file);
ExpectedData exp;
key = Path.GetFileName(Path.GetDirectoryName(file)) + "\\" + Path.GetFileName(file);
if (expectedData.TryGetValue(key, out exp))
{
var analogTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.AnalogCT|ChanSort.Api.SignalSource.Tv);
var dtvTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbCT|ChanSort.Api.SignalSource.Tv);
var satTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS | ChanSort.Api.SignalSource.Tv);
expectedData.Remove(key);
Assert.AreEqual(exp.AnalogChannels, analogTv.Channels.Count, file + ": analog");
Assert.AreEqual(exp.DtvChannels, dtvTv.Channels.Count, file + ": DTV");
if (exp.SatChannels != 0)
Assert.AreEqual(exp.SatChannels, satTv.Channels.Count, file + ": Sat");
}
}
catch(Exception ex)
{
errors.AppendLine();
errors.AppendLine();
errors.AppendLine(file);
errors.AppendLine(ex.ToString());
}
}
foreach(var model in models.OrderBy(e => e.Key))
Debug.WriteLine(model.Key + "\t"+model.Value);
foreach (var size in firmwareSize.OrderBy(e => e.Key))
Debug.WriteLine(size.Key + "\t" + size.Value);
if (expectedData.Count > 0)
Assert.Fail("Some files were not tested: " + expectedData.Keys.Aggregate((prev,cur) => prev+","+cur));
Assert.AreEqual("", errors.ToString());
}
#endregion
#region InitExpectedLgData()
private Dictionary<string,ExpectedData> InitExpectedLgData()
{
var expected = new[]
{
new ExpectedData(@"opel\xx2350D-PZM00001.TLL", 31, 345, 0, 89, 0), // 164/-
new ExpectedData(@"defycgn\xxLH4010-ZD99970.TLL", 34, 280, 0, 129, 0), // 164/-
new ExpectedData(@"karlv\xxLD750-ZA00001.TLL", 30, 248, 0, 104, 0), // 176/-
new ExpectedData(@"JLevi\xxLE5500-ZA00002.TLL", 36, 0, 0, 0, 0), // 176/-
new ExpectedData(@"chlabnet\xxLK450-ZB00001.TLL", 34, 310, 0, 128, 0), // 176/-
new ExpectedData(@"Stabilo\xxLW4500-ZB00001.TLL", 31, 338, 0, 34, 0), // 176/-
new ExpectedData(@"MarioAntonioLiptaj\xxPT353-ZA00001.TLL", 50, 123, 0, 13, 0), // 180/-
new ExpectedData(@"Muffix\xxLW5500-ZE00001.TLL", 34, 290, 0, 125, 0), // 184/-
new ExpectedData(@"FranzSteinert\xxCS460S-ZA00001.TLL", 0, 0, 1261, 0, 200), // ?/68
new ExpectedData(@"Klausi1\xxLK950S-ZA00001.TLL", 37, 390, 2695, 150, 491), // 184/68
new ExpectedData(@"MP3Chris2712\xxLV570S-ZB00001.TLL", 0, 12, 2895, 0, 669), // 184/68
new ExpectedData(@"decklen\xxLW570S-ZD00001.TLL", 0, 30, 1598, 0, 339), // 184/68
new ExpectedData(@"NeuerScan\xxLM340S-ZA00001.TLL", 34, 317, 1698, 129, 264), // 188/68
new ExpectedData(@"wagnale\xxLM611S-ZA00001.TLL", 0, 13, 1094, 0, 191), // 188/68
new ExpectedData(@"_Pred\xxLM620S-ZE00021.TLL", 0, 11, 1303, 0, 191) // 192/72
};
var dict = new Dictionary<string, ExpectedData>(StringComparer.InvariantCultureIgnoreCase);
foreach (var entry in expected)
dict[entry.File] = entry;
return dict;
}
#endregion
private string GetLgModel(string filePath)
{
string name = Path.GetFileName(filePath)??"";
if (name.StartsWith("xx"))
{
int idx = name.IndexOf("-");
if (idx > 0)
return name.Substring(2, idx - 2);
}
return filePath;
}
}
}

View File

@@ -0,0 +1,62 @@
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace Test.Loader
{
public class LoaderTestBase
{
#region class ExpectedData
public class ExpectedData
{
public readonly string File;
public readonly int AnalogChannels;
public readonly int DtvChannels;
public readonly int SatChannels;
public readonly int DtvRadio;
public readonly int SatRadio;
public ExpectedData(string file, int analog, int dtv, int sat, int dtvRadio, int satRadio)
{
this.File = file;
this.AnalogChannels = analog;
this.DtvChannels = dtv;
this.SatChannels = sat;
this.DtvRadio = dtvRadio;
this.SatRadio = satRadio;
}
}
#endregion
#region Helper Methods
protected IEnumerable<string> FindAllFiles(string baseDir, string mask)
{
string path = this.GetTestFileDirectory(baseDir);
List<string> files = new List<string>();
this.FindAllTllFilesRecursively(path, mask, files);
return files;
}
private string GetTestFileDirectory(string baseDir)
{
string exeDir = Assembly.GetExecutingAssembly().Location;
while (!string.IsNullOrEmpty(exeDir))
{
string testFileDir = Path.Combine(exeDir, baseDir);
if (Directory.Exists(testFileDir))
return testFileDir;
exeDir = Path.GetDirectoryName(exeDir);
}
throw new FileNotFoundException("No 'TestFiles' directory found");
}
private void FindAllTllFilesRecursively(string path, string mask, List<string> files)
{
files.AddRange(Directory.GetFiles(path, mask));
foreach (var dir in Directory.GetDirectories(path))
this.FindAllTllFilesRecursively(dir, mask, files);
}
#endregion
}
}

View File

@@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ChanSort.Loader.Samsung;
namespace Test.Loader
{
[TestClass]
public class SamsungTest : LoaderTestBase
{
#region InitExpectedSamsungData()
private Dictionary<string, ExpectedData> InitExpectedSamsungData()
{
var expected = new[]
{
new ExpectedData(@"catmater_B\Clone.scm", 31, 272, 0, 0, 0) ,
new ExpectedData(@"easy2003_B\easy2003_B.scm", 0, 0, 1225, 0, 0) ,
new ExpectedData(@"_Manu_C\channel_list_LE40C650_1001.scm", 0, 9, 0, 0, 0)
};
var dict = new Dictionary<string, ExpectedData>(StringComparer.InvariantCultureIgnoreCase);
foreach (var entry in expected)
dict[entry.File] = entry;
return dict;
}
#endregion
#region TestSamsungScmLoader()
[TestMethod]
[DeploymentItem("ChanSort.Loader.Samsung\\ChanSort.Loader.Samsung.ini")]
public void TestSamsungScmLoader()
{
var expectedData = this.InitExpectedSamsungData();
ScmSerializerPlugin plugin = new ScmSerializerPlugin();
StringBuilder errors = new StringBuilder();
var list = this.FindAllFiles("TestFiles_Samsung", "*.scm");
var models = new Dictionary<string, string>();
foreach (var file in list)
{
Debug.Print("Testing " + file);
try
{
var serializer = plugin.CreateSerializer(file) as ScmSerializer;
Assert.IsNotNull(serializer, "No Serializer for " + file);
serializer.Load();
var fileName = Path.GetFileName(file) ?? "";
string key = fileName.StartsWith("channel_list_") ? fileName.Substring(13, fileName.IndexOf('_',14)-13) : fileName;
string relPath = Path.GetFileName(Path.GetDirectoryName(file)) + "\\" + fileName;
models[key] = relPath;
Assert.IsFalse(serializer.DataRoot.IsEmpty, "No channels loaded from " + file);
ExpectedData exp;
key = Path.GetFileName(Path.GetDirectoryName(file)) + "\\" + Path.GetFileName(file);
if (expectedData.TryGetValue(key, out exp))
{
var analogTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.AnalogC | ChanSort.Api.SignalSource.TvAndRadio);
var dtvTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbCT | ChanSort.Api.SignalSource.TvAndRadio);
var satTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS | ChanSort.Api.SignalSource.TvAndRadio);
expectedData.Remove(key);
if (exp.AnalogChannels != 0 || analogTv != null)
Assert.AreEqual(exp.AnalogChannels, analogTv.Channels.Count, file + ": analog");
if (exp.DtvChannels != 0 || dtvTv != null)
Assert.AreEqual(exp.DtvChannels, dtvTv.Channels.Count, file + ": DTV");
if (exp.SatChannels != 0 || satTv != null)
Assert.AreEqual(exp.SatChannels, satTv.Channels.Count, file + ": Sat");
}
}
catch (Exception ex)
{
errors.AppendLine();
errors.AppendLine();
errors.AppendLine(file);
errors.AppendLine(ex.ToString());
}
}
foreach (var model in models.OrderBy(e => e.Key))
Debug.WriteLine(model.Key + "\t" + model.Value);
if (expectedData.Count > 0)
Assert.Fail("Some files were not tested: " + expectedData.Keys.Aggregate((prev, cur) => prev + "," + cur));
Assert.AreEqual("", errors.ToString());
}
#endregion
}
}

View File

@@ -9,8 +9,8 @@
<ProjectGuid>{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Test.Loader.TllFile</RootNamespace>
<AssemblyName>Test.Loader.TllFile</AssemblyName>
<RootNamespace>Test.Loader</RootNamespace>
<AssemblyName>Test.Loader</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
@@ -67,8 +67,10 @@
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
<Compile Include="LgTest.cs" />
<Compile Include="LoaderTestBase.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UnitTest1.cs" />
<Compile Include="SamsungTest.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj">
@@ -76,9 +78,21 @@
<Name>ChanSort.Api</Name>
<Private>True</Private>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.TllFile\ChanSort.Loader.TllFile.csproj">
<ProjectReference Include="..\ChanSort.Loader.DbFile\ChanSort.Loader.Toshiba.csproj">
<Project>{F6F02792-07F1-48D5-9AF3-F945CA5E3931}</Project>
<Name>ChanSort.Loader.Toshiba</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.Panasonic\ChanSort.Loader.Panasonic.csproj">
<Project>{68DA8072-3A29-4076-9F64-D66F38349585}</Project>
<Name>ChanSort.Loader.Panasonic</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.ScmFile\ChanSort.Loader.Samsung.csproj">
<Project>{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}</Project>
<Name>ChanSort.Loader.Samsung</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.TllFile\ChanSort.Loader.LG.csproj">
<Project>{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}</Project>
<Name>ChanSort.Loader.TllFile</Name>
<Name>ChanSort.Loader.LG</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

View File

@@ -1,197 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using ChanSort.Loader.TllFile;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Test.Loader.TllFile
{
[TestClass]
public class UnitTest1
{
#region class ExpectedData
public class ExpectedData
{
public readonly string File;
public readonly int AnalogChannels;
public readonly int DtvChannels;
public readonly int SatChannels;
public readonly int DtvRadio;
public readonly int SatRadio;
public ExpectedData(string file, int analog, int dtv, int sat, int dtvRadio, int satRadio)
{
this.File = file;
this.AnalogChannels = analog;
this.DtvChannels = dtv;
this.SatChannels = sat;
this.DtvRadio = dtvRadio;
this.SatRadio = satRadio;
}
}
#endregion
private readonly Dictionary<string, ExpectedData> expectedData = new Dictionary<string, ExpectedData>();
#region ctor()
public UnitTest1()
{
var expected = new [] {
new ExpectedData(@"opel\xx2350D-PZM00001.TLL", 31, 345, 0, 89, 0), // 164/-
new ExpectedData(@"defycgn\xxLH4010-ZD99970.TLL", 34, 280, 0, 129, 0), // 164/-
new ExpectedData(@"karlv\xxLD750-ZA00001.TLL", 30, 248, 0, 104, 0), // 176/-
new ExpectedData(@"JLevi\xxLE5500-ZA00002.TLL", 36, 0, 0,0, 0), // 176/-
new ExpectedData(@"chlabnet\xxLK450-ZB00001.TLL", 34, 310, 0, 128, 0), // 176/-
new ExpectedData(@"Stabilo\xxLW4500-ZB00001.TLL", 31 ,338, 0, 34, 0), // 176/-
new ExpectedData(@"MarioAntonioLiptaj\xxPT353-ZA00001.TLL", 50, 123, 0, 13, 0), // 180/-
new ExpectedData(@"Muffix\xxLW5500-ZE00001.TLL", 34, 290, 0, 125, 0), // 184/-
new ExpectedData(@"FranzSteinert\xxCS460S-ZA00001.TLL", 0, 0, 1261, 0, 200), // ?/68
new ExpectedData(@"Klausi1\xxLK950S-ZA00001.TLL", 37, 390, 2695, 150, 491), // 184/68
new ExpectedData(@"MP3Chris2712\xxLV570S-ZB00001.TLL", 0, 12, 2895, 0, 669), // 184/68
new ExpectedData(@"decklen\xxLW570S-ZD00001.TLL", 0, 30, 1598, 0, 339), // 184/68
new ExpectedData(@"NeuerScan\xxLM340S-ZA00001.TLL", 34, 317, 1698, 129, 264), // 188/68
new ExpectedData(@"wagnale\xxLM611S-ZA00001.TLL", 0, 13, 1094, 0, 191), // 188/68
new ExpectedData(@"_Pred\xxLM620S-ZE00021.TLL", 0, 11, 1303, 0, 191) // 192/72
};
foreach (var entry in expected)
this.expectedData[entry.File] = entry;
}
#endregion
[TestMethod]
public void MetaTest()
{
}
#region TestLoadingAllTllFilesInTestFilesDirectory()
[TestMethod]
[DeploymentItem("ChanSort.Loader.TllFile\\ChanSort.Loader.TllFile.ini")]
public void TestLoadingAllTllFilesInTestFilesDirectory()
{
TllFileSerializerPlugin plugin = new TllFileSerializerPlugin();
StringBuilder errors = new StringBuilder();
var list = this.FindAllTllFiles();
var models = new Dictionary<string,string>();
var firmwareSize = new Dictionary<int, string>();
foreach(var file in list)
{
if (file.Contains("GlobalClone") || file.Contains("CountrySettings"))
continue;
Debug.Print("Testing " + file);
try
{
var serializer = plugin.CreateSerializer(file) as TllFileSerializer;
Assert.IsNotNull(serializer, "No Serializer for " + file);
serializer.Load();
var fileName = Path.GetFileName(file) ?? "";
int idx = fileName.IndexOf("-");
string key = idx < 0 ? fileName : fileName.Substring(0, idx);
var satChannelList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS|ChanSort.Api.SignalSource.Tv);
key += "\t" + serializer.ACTChannelLength+
"\t"+serializer.HasDvbs+
"\t"+serializer.SatChannelLength+
"\t" + (satChannelList == null ? "n/a" : satChannelList.Count.ToString());
string relPath = Path.GetFileName(Path.GetDirectoryName(file))+"\\"+fileName;
models[key] = relPath;
var model = this.GetModel(file);
if (firmwareSize.ContainsKey(serializer.FirmwareBlockSize))
{
string x = firmwareSize[serializer.FirmwareBlockSize];
if (!x.Contains(model))
firmwareSize[serializer.FirmwareBlockSize] = x + ", " + model;
}
else
firmwareSize[serializer.FirmwareBlockSize] = model;
Assert.IsFalse(serializer.DataRoot.IsEmpty, "No channels loaded from " + file);
ExpectedData exp;
key = Path.GetFileName(Path.GetDirectoryName(file)) + "\\" + Path.GetFileName(file);
this.expectedData.TryGetValue(key, out exp);
var analogTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.AnalogCT|ChanSort.Api.SignalSource.Tv);
var dtvTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbCT|ChanSort.Api.SignalSource.Tv);
var satTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS | ChanSort.Api.SignalSource.Tv);
if (exp != null)
{
this.expectedData.Remove(key);
Assert.AreEqual(exp.AnalogChannels, analogTv.Channels.Count, file + ": analog");
Assert.AreEqual(exp.DtvChannels, dtvTv.Channels.Count, file + ": DTV");
Assert.AreEqual(exp.SatChannels, satTv.Channels.Count, file + ": Sat");
}
}
catch(Exception ex)
{
errors.AppendLine();
errors.AppendLine();
errors.AppendLine(file);
errors.AppendLine(ex.ToString());
}
}
foreach(var model in models.OrderBy(e => e.Key))
Debug.WriteLine(model.Key + "\t"+model.Value);
foreach (var size in firmwareSize.OrderBy(e => e.Key))
Debug.WriteLine(size.Key + "\t" + size.Value);
if (this.expectedData.Count > 0)
Assert.Fail("Some files were not tested: " + this.expectedData.Keys.Aggregate((prev,cur) => prev+","+cur));
Assert.AreEqual("", errors.ToString());
}
#endregion
private string GetModel(string filePath)
{
string name = Path.GetFileName(filePath)??"";
if (name.StartsWith("xx"))
{
int idx = name.IndexOf("-");
if (idx > 0)
return name.Substring(2, idx - 2);
}
return filePath;
}
#region Helper Methods
private IEnumerable<string> FindAllTllFiles()
{
string path = this.GetTestFileDirectory();
List<string> files = new List<string>();
this.FindAllTllFilesRecursively(path, files);
return files;
}
private string GetTestFileDirectory()
{
string exeDir = Assembly.GetExecutingAssembly().Location;
while (!string.IsNullOrEmpty(exeDir))
{
string testFileDir = Path.Combine(exeDir, "TestFiles");
if (Directory.Exists(testFileDir))
return testFileDir;
exeDir = Path.GetDirectoryName(exeDir);
}
throw new FileNotFoundException("No 'TestFiles' directory found");
}
private void FindAllTllFilesRecursively(string path, List<string> files)
{
files.AddRange(Directory.GetFiles(path, "*.TLL"));
foreach (var dir in Directory.GetDirectories(path))
this.FindAllTllFilesRecursively(dir, files);
}
#endregion
}
}

View File

@@ -1,82 +1,99 @@
Version v2013-04-11 ========================================================
Version v2013-04-21 =======================================================
This is a maintenance release based on version v2013-04-05, which brought a
refurbished user interface and fixes for various usability issues.
New:
- Added support for Toshiba *.zip channel lists (containing chmgt.db list)
- Allow Pr #0 for analog channels
Fixed:
- first channel list only got populated after switching between tabs
- Fix: Encryption flag for Samsung analog and DVB-C/T lists now shown
correctly
- Added "Remove channels" function to right list. E.g. you can use this to
search and select encrypted channels in the right list and remove them
(from the sorted list).
- Text editor for channel number or name now only opens after holding the
left mouse button down for at least 0.5sec. This prevents it from opening
when you double-click a channel.
- Added "Edit channel name" function to menus (due to the editor no longer
opening automatically after a short click on the name)
- Warnings and information about TV file content are no longer shown when
opening the file. It can be viewed by using the
"File / Show file information" menu item.
- Added experimental loader for Panasonic TV files. Saving is not
supported yet!
The complete change log can be found at the end of this document
About ChanSort =============================================================
About ChanSort ============================================================
ChanSort is a program to manage your Samsung, LG or Toshiba TV's channel list
on your PC.
ChanSort is a program to manage your Samsung, LG or Toshiba TV's channel
list on your PC.
It allows you to change program numbers and channel names, select your favorites,
set a parental lock and much more. With its multi-selection capabilities and the
side-by-side view of your sorted list and the available channels a list can be
created in no-time.
It allows you to change program numbers and channel names, select your
favorites, set a parental lock and much more. With its multi-selection
capabilities and the side-by-side view of your sorted list and the available
channels a list can be created in no-time.
You can apply reference lists to your TV data file to restore a previous order,
e.g. after running a channel scan. You can even apply the same reference list
to your LG and Samsung TV.
You can apply reference lists to your TV data file to restore a previous
order, e.g. after running a channel scan. You can even apply the same
reference list to TVs from different manufacturers.
You can get get the latest version and support on
https://sourceforge.net/projects/chansort/?source=navbar
http://sourceforge.net/p/chansort/discussion/ or by contacting me by email:
mailto:horst@beham.biz
Supported models ===========================================================
LG
------
Series: CS, DM, LD, LE, LH, LK, LM*, LS, LV, LW, LX, PM, PT
Lists: Analog TV, DTV (DVB-C/T), Radio (DVB-C/T), Sat-DTV (DVB-S2), Sat-Radio (DVB-S2)
* NOTE: See system requirements for LM-Series.
Other models might also work, but have not been tested.
If you have a .TLL file of a series not listed here, please send it to me.
Instructions on how to access the hidden service-menu for transferring the
channel list from/to USB can be found here:
https://sourceforge.net/p/chansort/wiki/Home/
http://www.ullrich.es/job/service-menue/lg-tlledit-lg-sendersortierung/
Supported TV models =======================================================
Samsung
-------
Series: B*, C, D, E
Lists: Air analog, Air digital, Cable analog, Cable digital, Sat digital, Astra HD+
Series: B*, C, D, E, F
Lists: Air analog, Air digital, Cable analog, Cable digital,
Sat digital, Astra HD+
* NOTE: the "Air Analog"-List of the B-Series doesn't support all editing features
due to a lack of test files. If you have such a file, please send it to me.
* NOTE: the "Air Analog"-List of the B-Series doesn't support all
editing features due to a lack of test files. If you have such a file,
please send it to me.
Instructions for transferring the channel list can be found on:
http://www.ullrich.es/job/sendersortierung/senderlisten-samsung-tv-exportieren-importieren/
LG
------
Series: CS, DM, LD, LE, LH, LK, LM*, LS, LV, LW, LX, PM, PT
Lists: Analog TV, DTV (DVB-C/T), Radio (DVB-C/T), Sat-DTV (DVB-S2),
Sat-Radio (DVB-S2)
* NOTE: See system requirements for LM-Series.
Model xxLM640T is not supported due to its broken firmware.
Other models might also work, but have not been tested. If you have a
.TLL file of a series not listed here, please send it to me.
Instructions on how to access the hidden service-menu for transferring
the channel list from/to USB can be found here:
https://sourceforge.net/p/chansort/wiki/Home/
http://www.ullrich.es/job/service-menue/lg-tlledit-lg-sendersortierung/
Toshiba
-------
Models that export a .zip file containing chmgt.db, dvbSysData.db and dvbMainData.db files.
Models that export a .zip file containing chmgt.db, dvbSysData.db and
dvbMainData.db files.
(e.g. RL, SL, TL, UL, VL, WL, XL, YL models of series 8xx/9xx)
! USE AT YOUR OWN RISK !
------------------------
This software was written without access to any official documentation from either
Samsung or LG about the file formats involved. Without full knowledge about there
specifics there is a chance of unwanted side-effects or damage to your TV.
This software was written without access to official documentation about
the file formats involved. Without full knowledge about the specifics of a
format there is a chance of unwanted side-effects or damage to your TV.
System requirements =========================================================
System requirements =======================================================
- USB-Stick to transfer the channel list between your TV and PC
- For LG's LM-series you need a programmable remote control to access the service menu
for transferring the list to/from USB. (e.g. Logitech Harmony 300, One-For-All URC3920,...)
- For LG's LM-series you need a programmable remote control to access the
service menu for transferring the list to/from USB.
(e.g. Logitech Harmony 300, One-For-All URC3920,...)
Details can be found on the ChanSort wiki and on
http://openlgtv.org.ru/wiki/index.php/Access_hidden_service_menus_/_modes
- Microsoft .NET Framework 3.5 (included in WinXP SP3, Vista, Win7, Win8)
@@ -85,7 +102,7 @@ System requirements =========================================================
License ===============================================================
GNU General Public Licence, Version 3: http://www.gnu.org/licenses/gpl.html
Source code available on https://sourceforge.net/projects/chansort/
Source code available on http://sourceforge.net/projects/chansort/
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
@@ -96,7 +113,24 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
Change log ====================================================================
Change log ================================================================
2013-04-21
- Fix: Encryption flag for Samsung analog and DVB-C/T lists now shown
correctly
- Added "Remove channels" function to right list. E.g. you can use this to
search and select encrypted channels in the right list and remove them
(from the sorted list).
- Text editor for channel number or name now only opens after holding the
left mouse button down for at least 0.5sec. This prevents it from opening
when you double-click a channel.
- Added "Edit channel name" function to menus (due to the editor no longer
opening automatically after a short click on the name)
- Warnings and information about TV file content are no longer shown when
opening the file. It can be viewed by using the
"File / Show file information" menu item.
- Added experimental loader for Panasonic TV files.
Saving is not supported yet!
2013-04-11
- added support for Toshiba *.zip channel lists (containing chmgt.db list)
@@ -108,12 +142,12 @@ Change log ====================================================================
- Added online check for updated program version
2013-04-07
- FIX: saving a .TLL file after loading a reference list which contained channels
that are no longer inside the .TLL caused an error during saving.
- FIX: saving a .TLL file after loading a reference list which contained
channels that are no longer inside the .TLL caused an error during saving
2013-04-06
- FIX: When double-clicking a channel in the right list, which was already part of the
sorted list, the wrong channel was selected in the left list.
- FIX: When double-clicking a channel in the right list, which was already
part of the sorted list, the wrong channel was selected in the left list.
- new application icon which is licensed free-to-use
2013-04-05
@@ -122,16 +156,17 @@ Change log ====================================================================
- Support for LG LMxxxT models, which export an invalid DVB-S data block
- Opening a file automatically shows the first non-empty channel list
- Reloading a TV-file will show the last opened list
- FIX: Deleting rows caused incorrect selections in the left list. Successive
deletes resulted in the loss of the first channel.
- FIX: Duplicate Pr# was assigned to channels when they were added out of order
- FIX: Deleting rows caused incorrect selections in the left list.
Successive deletes resulted in the loss of the first channel.
- FIX: Duplicate Pr# was assigned to channels when they were added out of
order
2013-04-04
- Deleting channels for Samsung TVs now stores the files correctly (no longer
showing them all on Pr #0 on your TV)
- Deleting channels for Samsung TVs now stores the files correctly
(no longer showing them all on Pr #0 on your TV)
2013-04-03 (major release)
- complete re-write of the code for loading/saving TV-data files (SCM, TLL)
- complete re-write of the code for loading/saving TV-data files (SCM, TLL)
and reference lists (CSV).
- added support for LG's LX-models
- channel names can now be edited for both LG and Samsung
@@ -139,8 +174,9 @@ Change log ====================================================================
- Samsung channel lists are now loaded/saved correctly
(program numbers, favorites, locking, frequencies, ...)
- loading a reference list for a Samsung .SCM file which contains both
air and cable channels or satellite and AstraHD+ channels caused the items
to be mixed up and all shown in the first list (showing not-found channels in red)
air and cable channels or satellite and AstraHD+ channels caused the
items to be mixed up and all shown in the first list (showing not-found
channels in red)
2013-03-30
- FIX: bei nicht-LM Ger<65>ten wurden die DVB-S Programmnummern falsch ausgelesen