diff --git a/source/ChanSort.Api/ChanSort.Api.csproj b/source/ChanSort.Api/ChanSort.Api.csproj
index 807ff5a..3bbf3ae 100644
--- a/source/ChanSort.Api/ChanSort.Api.csproj
+++ b/source/ChanSort.Api/ChanSort.Api.csproj
@@ -61,6 +61,8 @@
+
+
diff --git a/source/ChanSort.Api/Controller/CsvFileSerializer.cs b/source/ChanSort.Api/Controller/CsvFileSerializer.cs
index a860f93..0db3730 100644
--- a/source/ChanSort.Api/Controller/CsvFileSerializer.cs
+++ b/source/ChanSort.Api/Controller/CsvFileSerializer.cs
@@ -1,57 +1,64 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Text;
namespace ChanSort.Api
{
///
- /// Reads a reference list from a .csv file with the format
- /// [dummy1],ProgramNr,[dummy2],UID,ChannelName[,SignalSource,FavAndFlags]
+ /// Reads a reference list from a .csv file with the format
+ /// [dummy1],ProgramNr,[dummy2],UID,ChannelName[,SignalSource,FavAndFlags]
///
- public class CsvFileSerializer
+ public class CsvFileSerializer : SerializerBase
{
- private readonly HashSet clearedLists = new HashSet();
- private readonly DataRoot dataRoot;
- private readonly string fileName;
- private readonly bool addChannels;
+ private static readonly List Columns = new List
+ {
+ "OldPosition",
+ "Position",
+ "Name",
+ "OriginalNetworkId",
+ "TransportStreamId",
+ "ServiceId",
+ "Favorites",
+ "Skip",
+ "Lock",
+ "Hidden"
+ };
#region ctor()
- public CsvFileSerializer(string fileName, DataRoot dataRoot, bool addChannels)
+
+ public CsvFileSerializer(string fileName) : base(fileName)
{
- this.fileName = fileName;
- this.dataRoot = dataRoot;
- this.addChannels = addChannels;
+ this.Features.ChannelNameEdit = ChannelNameEditMode.All;
+ this.Features.CanSkipChannels = true;
+ this.Features.CanDeleteChannels = true;
+ this.Features.CanHaveGaps = true;
+ this.Features.EncryptedFlagEdit = false;
+ this.DataRoot.SortedFavorites = false;
+ this.DataRoot.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D | Favorites.E;
}
+
#endregion
+ public override string DisplayName => "ChanSort .csv Reference List Loader";
+
#region Load()
- public void Load()
- {
- this.clearedLists.Clear();
- using (var stream = new StreamReader(fileName))
- this.ReadChannelsFromStream(stream);
- }
- #endregion
- #region ReadChannelsFromStream()
-
- public void ReadChannelsFromStream(TextReader stream)
+ public override void Load()
{
- int lineNr = 0;
- string line = "";
- try
+ using (var stream = new StreamReader(this.FileName))
{
- while ((line = stream.ReadLine()) != null)
+ var lineNr = 0;
+ var line = "";
+ try
{
- ++lineNr;
- this.ReadChannel(line);
+ while ((line = stream.ReadLine()) != null)
+ this.ReadChannel(line, ++lineNr);
+ }
+ catch (Exception ex)
+ {
+ throw new FileLoadException($"Error in reference file line #{lineNr}: {line}", ex);
}
- }
- catch (Exception ex)
- {
- throw new FileLoadException(string.Format("Error in reference file line #{0}: {1}", lineNr, line), ex);
}
}
@@ -59,67 +66,62 @@ namespace ChanSort.Api
#region ReadChannel()
- private void ReadChannel(string line)
+ private void ReadChannel(string line, int lineNr)
{
var parts = CsvFile.Parse(line, ',');
if (parts.Count < 5) return;
int programNr;
if (!int.TryParse(parts[1], out programNr)) return;
- string uid = parts[3];
+ var uid = parts[3];
if (uid.StartsWith("S")) // remove satellite orbital position from UID ... not all TV models provide this information
uid = "S" + uid.Substring(uid.IndexOf('-'));
- SignalSource signalSource = GetSignalSource(ref programNr, uid, parts);
+ var signalSource = GetSignalSource(ref programNr, uid, parts);
if (signalSource == 0)
return;
- string name = parts[4];
- ChannelList channelList = this.GetInitiallyClearedChannelList(signalSource);
+ var channelList = this.GetChannelList(signalSource);
if (channelList == null)
return;
- IEnumerable channels = FindChannels(channelList, name, uid);
- var channel = channels == null ? null : channels.FirstOrDefault(c => c.NewProgramNr == -1);
- if (channel != null)
+ var name = parts[4];
+ var channel = new ChannelInfo(signalSource, lineNr, programNr, name);
+
+ var uidParts = uid.Split('-');
+ if (uidParts.Length >= 4)
{
- if (!this.addChannels)
- {
- channel.NewProgramNr = programNr;
- if ((channel.SignalSource & SignalSource.Analog) != 0)
- {
- channel.Name = name;
- channel.IsNameModified = true;
- }
- if (parts.Count >= 7)
- ApplyFlags(channel, parts[6]);
- }
- }
- else if (parts.Count >= 6) // create proxy channel when using the new ref-list format
- {
- channel = new ChannelInfo(signalSource, uid, programNr, name);
- if (addChannels)
- {
- channel.NewProgramNr = -1;
- channel.OldProgramNr = programNr;
- }
- channelList.AddChannel(channel);
+ int val;
+ if (int.TryParse(uidParts[1], out val))
+ channel.OriginalNetworkId = val;
+ if (int.TryParse(uidParts[2], out val))
+ channel.TransportStreamId = val;
+ if (int.TryParse(uidParts[3], out val))
+ channel.ServiceId = val;
}
+
+ if (parts.Count >= 7)
+ ApplyFlags(channel, parts[6]);
+
+ this.DataRoot.AddChannel(channelList, channel);
}
+
#endregion
#region GetSignalSource()
+
private static SignalSource GetSignalSource(ref int slot, string uid, IList parts)
{
// new lists store a bitmask which defines the type of channel and list it came from
if (parts.Count >= 6 && parts[5].Length >= 4)
{
SignalSource s = 0;
- string code = parts[5];
+ var code = parts[5];
if (code[0] == 'A') s |= SignalSource.Analog;
else if (code[0] == 'D') s |= SignalSource.Digital;
if (code[1] == 'A') s |= SignalSource.Antenna;
else if (code[1] == 'C') s |= SignalSource.Cable;
else if (code[1] == 'S') s |= SignalSource.Sat;
+ else if (code[1] == 'I') s |= SignalSource.IP;
if (code[2] == 'T') s |= SignalSource.Tv;
else if (code[2] == 'R') s |= SignalSource.Radio;
@@ -129,16 +131,25 @@ namespace ChanSort.Api
}
// compatibility for older lists
- bool isTv = slot < 0x4000;
+ var isTv = slot < 0x4000;
slot &= 0x3FFFF;
SignalSource signalSource;
switch (uid[0])
{
- case 'S': signalSource = SignalSource.DvbS; break;
- case 'C': signalSource = SignalSource.DvbCT; break;
- case 'A': signalSource = SignalSource.AnalogCT; break;
- case 'H': signalSource = SignalSource.HdPlusD; break;
- default: return 0;
+ case 'S':
+ signalSource = SignalSource.DvbS;
+ break;
+ case 'C':
+ signalSource = SignalSource.DvbCT;
+ break;
+ case 'A':
+ signalSource = SignalSource.AnalogCT;
+ break;
+ case 'H':
+ signalSource = SignalSource.HdPlusD;
+ break;
+ default:
+ return 0;
}
signalSource |= isTv ? SignalSource.Tv : SignalSource.Radio;
return signalSource;
@@ -146,100 +157,92 @@ namespace ChanSort.Api
#endregion
- #region GetInitiallyClearedChannelList()
- private ChannelList GetInitiallyClearedChannelList(SignalSource signalSource)
+ #region GetChannelList()
+
+ private ChannelList GetChannelList(SignalSource signalSource)
{
- var channelList = dataRoot.GetChannelList(signalSource);
- if (channelList == null || channelList.ReadOnly)
- return null;
- if (!this.addChannels && !this.clearedLists.Contains(channelList))
+ var channelList = this.DataRoot.GetChannelList(signalSource);
+ if (channelList == null)
{
- foreach (var channel in channelList.Channels)
- channel.NewProgramNr = -1;
- this.clearedLists.Add(channelList);
+ channelList = new ChannelList(signalSource, CreateCaption(signalSource));
+ channelList.VisibleColumnFieldNames = Columns;
+ this.DataRoot.AddChannelList(channelList);
}
return channelList;
}
+
#endregion
- #region FindChannels()
- private IEnumerable FindChannels(ChannelList channelList, string name, string uid)
+ #region CreateCaption()
+
+ private string CreateCaption(SignalSource signalSource)
{
- // if there's only a single channel with the given name, use it regardless of UID (allows for a changed freq/tranpsonder)
- IList list = channelList.GetChannelByName(name).ToList();
- if (list.Count == 1)
- return list;
+ var sb = new StringBuilder();
+ if ((signalSource & SignalSource.DvbT) == SignalSource.DvbT)
+ sb.Append("DVB-T");
+ else if ((signalSource & SignalSource.DvbC) == SignalSource.DvbC)
+ sb.Append("DVB-C");
+ else if ((signalSource & SignalSource.DvbS) == SignalSource.DvbS)
+ sb.Append("DVB-S");
+ else if ((signalSource & SignalSource.IP) == SignalSource.IP)
+ sb.Append("IP");
+ else if ((signalSource & SignalSource.Digital) == SignalSource.Digital)
+ sb.Append("DVB");
+ else if ((signalSource & SignalSource.Analog) == SignalSource.Analog)
+ sb.Append("Analog");
- string[] uidParts;
- if (uid.StartsWith("C") && (uidParts = uid.Split('-')).Length <= 4)
- {
- // older CSV files didn't use the Transponder as part of the UID, which is necessary
- // to distinguish between DVB-T channels with identical (onid,tsid,sid), which may be received
- // from multiple regional transmitters on different transponders
- int onid = int.Parse(uidParts[1]);
- int tsid = int.Parse(uidParts[2]);
- int sid = int.Parse(uidParts[3]);
- return channelList.Channels.Where(c =>
- c.OriginalNetworkId == onid &&
- c.TransportStreamId == tsid &&
- c.ServiceId == sid
- ).ToList();
- }
+ sb.Append(" ");
+ if ((signalSource & SignalSource.Tv) == SignalSource.Tv)
+ sb.Append("TV");
+ else if ((signalSource & SignalSource.Radio) == SignalSource.Radio)
+ sb.Append("Radio");
+ else
+ sb.Append("Data");
- var byUidList = channelList.GetChannelByUid(uid);
- return byUidList;
+ return sb.ToString();
}
+
#endregion
#region ApplyFlags()
+
private void ApplyFlags(ChannelInfo channel, string flags)
{
channel.Lock = false;
channel.Skip = false;
channel.Hidden = false;
- foreach (char c in flags)
+ foreach (var c in flags)
{
switch (c)
{
- case '1': channel.Favorites |= Favorites.A; break;
- case '2': channel.Favorites |= Favorites.B; break;
- case '3': channel.Favorites |= Favorites.C; break;
- case '4': channel.Favorites |= Favorites.D; break;
- case '5': channel.Favorites |= Favorites.E; break;
- case 'L': channel.Lock = true; break;
- case 'S': channel.Skip = true; break;
- case 'H': channel.Hidden = true; break;
- case 'D': channel.IsDeleted = true; break;
- }
- }
- }
- #endregion
-
- #region Save()
- public void Save()
- {
- using (StreamWriter stream = new StreamWriter(fileName))
- {
- Save(stream);
- }
- }
-
- public void Save(StreamWriter stream)
- {
- foreach (var channelList in dataRoot.ChannelLists)
- {
- foreach (var channel in channelList.Channels.Where(ch => ch.NewProgramNr != -1).OrderBy(ch => ch.NewProgramNr))
- {
- string line = string.Format("{0},{1},{2},{3},\"{4}\",{5},{6}",
- "", // past: channel.RecordIndex,
- channel.NewProgramNr,
- "", // past: channel.TransportStreamId,
- channel.Uid,
- channel.Name,
- this.EncodeSignalSource(channel.SignalSource),
- this.EncodeFavoritesAndFlags(channel));
- stream.WriteLine(line);
+ case '1':
+ channel.Favorites |= Favorites.A;
+ break;
+ case '2':
+ channel.Favorites |= Favorites.B;
+ break;
+ case '3':
+ channel.Favorites |= Favorites.C;
+ break;
+ case '4':
+ channel.Favorites |= Favorites.D;
+ break;
+ case '5':
+ channel.Favorites |= Favorites.E;
+ break;
+ case 'L':
+ channel.Lock = true;
+ break;
+ case 'S':
+ channel.Skip = true;
+ break;
+ case 'H':
+ channel.Hidden = true;
+ break;
+ case 'D':
+ channel.IsDeleted = true;
+ break;
}
}
}
@@ -247,28 +250,32 @@ namespace ChanSort.Api
#endregion
#region EncodeSignalSource()
- private object EncodeSignalSource(SignalSource signalSource)
+
+ private static string EncodeSignalSource(SignalSource signalSource)
{
- StringBuilder sb = new StringBuilder();
+ var sb = new StringBuilder();
if ((signalSource & SignalSource.Analog) != 0) sb.Append('A');
else sb.Append('D');
if ((signalSource & SignalSource.Antenna) != 0) sb.Append('A');
else if ((signalSource & SignalSource.Cable) != 0) sb.Append('C');
- else sb.Append('S');
+ else if ((signalSource & SignalSource.Sat) != 0) sb.Append('S');
+ else sb.Append("I");
if ((signalSource & SignalSource.Radio) != 0) sb.Append('R');
else sb.Append('T');
- sb.Append((int)signalSource >> 12);
+ sb.Append((int) signalSource >> 12);
return sb.ToString();
}
+
#endregion
#region EncodeFavoritesAndFlags()
- private string EncodeFavoritesAndFlags(ChannelInfo channel)
+
+ private static string EncodeFavoritesAndFlags(ChannelInfo channel)
{
- StringBuilder sb = new StringBuilder();
+ var sb = new StringBuilder();
if ((channel.Favorites & Favorites.A) != 0) sb.Append('1');
if ((channel.Favorites & Favorites.B) != 0) sb.Append('2');
if ((channel.Favorites & Favorites.C) != 0) sb.Append('3');
@@ -282,5 +289,47 @@ namespace ChanSort.Api
}
#endregion
+
+ #region Save()
+
+ public override void Save(string tvDataFile)
+ {
+ Save(tvDataFile, this.DataRoot);
+ this.FileName = tvDataFile;
+ }
+
+ public static void Save(string tvDataFile, DataRoot dataRoot)
+ {
+ using (var stream = new StreamWriter(tvDataFile))
+ {
+ Save(stream, dataRoot);
+ }
+ }
+
+ public static void Save(StreamWriter stream, DataRoot dataRoot)
+ {
+ foreach (var channelList in dataRoot.ChannelLists)
+ {
+ if (channelList.IsMixedSourceFavoritesList) // these pseudo-lists would create dupes for all channels
+ continue;
+
+ foreach (var channel in channelList.GetChannelsByNewOrder())
+ {
+ if (channel.NewProgramNr == -1)
+ continue;
+ var line = string.Format("{0},{1},{2},{3},\"{4}\",{5},{6}",
+ "", // past: channel.RecordIndex,
+ channel.NewProgramNr,
+ "", // past: channel.TransportStreamId,
+ channel.Uid,
+ channel.Name,
+ EncodeSignalSource(channel.SignalSource),
+ EncodeFavoritesAndFlags(channel));
+ stream.WriteLine(line);
+ }
+ }
+ }
+
+ #endregion
}
-}
+}
\ No newline at end of file
diff --git a/source/ChanSort.Loader.RefList/RefSerializer.cs b/source/ChanSort.Api/Controller/RefSerializer.cs
similarity index 93%
rename from source/ChanSort.Loader.RefList/RefSerializer.cs
rename to source/ChanSort.Api/Controller/RefSerializer.cs
index 5cb5d2e..8b47733 100644
--- a/source/ChanSort.Loader.RefList/RefSerializer.cs
+++ b/source/ChanSort.Api/Controller/RefSerializer.cs
@@ -1,9 +1,8 @@
using System.Collections.Generic;
using System.IO;
using System.Text;
-using ChanSort.Api;
-namespace ChanSort.Loader.RefList
+namespace ChanSort.Api
{
public class RefSerializer : SerializerBase
{
@@ -90,6 +89,7 @@ namespace ChanSort.Loader.RefList
#endregion
+
#region GetFileInformation()
public override string GetFileInformation()
@@ -102,14 +102,7 @@ namespace ChanSort.Loader.RefList
#endregion
#region Save()
-
- //public override void Save(string tvOutputFile)
- //{
- // var writer = new ChlFileSerializer();
- // writer.Save(tvOutputFile, this.allChannels);
- // this.FileName = tvOutputFile;
- //}
-
+
public override void Save(string tvOutputFile)
{
Save(tvOutputFile, this.allChannels);
diff --git a/source/ChanSort.Api/Controller/RefSerializerPlugin.cs b/source/ChanSort.Api/Controller/RefSerializerPlugin.cs
new file mode 100644
index 0000000..f8447c9
--- /dev/null
+++ b/source/ChanSort.Api/Controller/RefSerializerPlugin.cs
@@ -0,0 +1,20 @@
+using System.IO;
+
+namespace ChanSort.Api
+{
+ public class RefSerializerPlugin : ISerializerPlugin
+ {
+ public string PluginName => "ChanSort Reference List";
+
+ public string FileFilter => "*.txt;*.chl;*.csv";
+
+ public SerializerBase CreateSerializer(string inputFile)
+ {
+ var ext = (Path.GetExtension(inputFile) ?? "").ToLower();
+ if (ext == ".csv")
+ return new CsvFileSerializer(inputFile);
+ else
+ return new RefSerializer(inputFile);
+ }
+ }
+}
diff --git a/source/ChanSort.Api/Controller/SerializerBase.cs b/source/ChanSort.Api/Controller/SerializerBase.cs
index 5b9f0dc..bb0eb4c 100644
--- a/source/ChanSort.Api/Controller/SerializerBase.cs
+++ b/source/ChanSort.Api/Controller/SerializerBase.cs
@@ -4,6 +4,8 @@ namespace ChanSort.Api
{
public abstract class SerializerBase
{
+ #region class SupportedFeatures
+
public class SupportedFeatures
{
public ChannelNameEditMode ChannelNameEdit { get; set; }
@@ -20,6 +22,7 @@ namespace ChanSort.Api
this.CanHaveGaps = true;
}
}
+ #endregion
private Encoding defaultEncoding;
diff --git a/source/ChanSort.Loader.RefList/ChanSort.Loader.RefList.csproj b/source/ChanSort.Loader.RefList/ChanSort.Loader.RefList.csproj
index 9641c97..2990928 100644
--- a/source/ChanSort.Loader.RefList/ChanSort.Loader.RefList.csproj
+++ b/source/ChanSort.Loader.RefList/ChanSort.Loader.RefList.csproj
@@ -60,8 +60,6 @@
-
-
diff --git a/source/ChanSort.Loader.RefList/RefSerializerPlugin.cs b/source/ChanSort.Loader.RefList/RefSerializerPlugin.cs
deleted file mode 100644
index ca7215a..0000000
--- a/source/ChanSort.Loader.RefList/RefSerializerPlugin.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using ChanSort.Api;
-
-namespace ChanSort.Loader.RefList
-{
- public class RefSerializerPlugin : ISerializerPlugin
- {
- public string PluginName => "ChanSort Reference List";
-
- public string FileFilter => "*.txt;*.chl";
-
- public SerializerBase CreateSerializer(string inputFile)
- {
- return new RefSerializer(inputFile);
- }
- }
-}
diff --git a/source/ChanSort.sln b/source/ChanSort.sln
index 59f74bc..0df77eb 100644
--- a/source/ChanSort.sln
+++ b/source/ChanSort.sln
@@ -6,7 +6,6 @@ MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort", "ChanSort\ChanSort.csproj", "{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}"
ProjectSection(ProjectDependencies) = postProject
{33897002-0537-49A4-B963-A18D17311B3D} = {33897002-0537-49A4-B963-A18D17311B3D}
- {A2A5C606-167C-4FC2-87A8-2D67590B283B} = {A2A5C606-167C-4FC2-87A8-2D67590B283B}
{74A18C6F-09FF-413E-90D9-827066FA5B36} = {74A18C6F-09FF-413E-90D9-827066FA5B36}
{68DA8072-3A29-4076-9F64-D66F38349585} = {68DA8072-3A29-4076-9F64-D66F38349585}
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5} = {A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}
@@ -46,8 +45,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.Hisense", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.Loader.Samsung", "Test.Loader.Samsung\Test.Loader.Samsung.csproj", "{1ED68A9B-6698-4609-B9E6-8E08B6055F2E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.RefList", "ChanSort.Loader.RefList\ChanSort.Loader.RefList.csproj", "{A2A5C606-167C-4FC2-87A8-2D67590B283B}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -206,18 +203,6 @@ Global
{1ED68A9B-6698-4609-B9E6-8E08B6055F2E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{1ED68A9B-6698-4609-B9E6-8E08B6055F2E}.Release|x86.ActiveCfg = Release|Any CPU
{1ED68A9B-6698-4609-B9E6-8E08B6055F2E}.Release|x86.Build.0 = Release|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Debug|x86.ActiveCfg = Debug|x86
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Debug|x86.Build.0 = Debug|x86
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Release|Any CPU.Build.0 = Release|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Release|x86.ActiveCfg = Release|Any CPU
- {A2A5C606-167C-4FC2-87A8-2D67590B283B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/source/ChanSort/ChanSort.csproj b/source/ChanSort/ChanSort.csproj
index d317df2..ea7b2ee 100644
--- a/source/ChanSort/ChanSort.csproj
+++ b/source/ChanSort/ChanSort.csproj
@@ -306,10 +306,6 @@
{DCCFFA08-472B-4D17-BB90-8F513FC01392}
ChanSort.Api
-
- {a2a5c606-167c-4fc2-87a8-2d67590b283b}
- ChanSort.Loader.RefList
-
diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs
index 61fe741..2fa2419 100644
--- a/source/ChanSort/MainForm.cs
+++ b/source/ChanSort/MainForm.cs
@@ -1,16 +1,21 @@
//#define ADD_CHANNELS_FROM_REF_LIST
+
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
+using System.Linq;
using System.Reflection;
using System.Text;
+using System.Text.RegularExpressions;
using System.Threading;
-using System.Linq;
using System.Windows.Forms;
using ChanSort.Api;
+using ChanSort.Ui.Printing;
using ChanSort.Ui.Properties;
+using DevExpress.Data;
using DevExpress.Utils;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
@@ -19,6 +24,7 @@ using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
+using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraTab;
namespace ChanSort.Ui
@@ -28,57 +34,25 @@ namespace ChanSort.Ui
public const string AppVersion = "v2016-04-19";
private const int MaxMruEntries = 10;
-
- #region enum EditMode
- private enum EditMode
- {
- InsertBefore = 0,
- InsertAfter = 1,
- Swap = 2
- }
- #endregion
-
- #region class DragDropInfo
- private class DragDropInfo
- {
- public readonly GridView SourceView;
- public readonly int SourcePosition;
- public EditMode EditMode;
- public int DropRowHandle = -1;
-
- public DragDropInfo(GridView source, int sourcePosition)
- {
- this.SourceView = source;
- this.SourcePosition = sourcePosition;
- }
- }
- #endregion
-
- private readonly IList plugins;
- private string currentTvFile;
- private string currentRefFile;
- private ISerializerPlugin currentPlugin;
- private SerializerBase currentTvSerializer;
- private Editor editor;
- private DataRoot dataRoot;
- private bool ignoreLanguageChange;
- private readonly string title;
- private Encoding defaultEncoding = Encoding.Default;
private readonly List isoEncodings = new List();
- private ChannelList currentChannelList;
- private int subListIndex;
- private GridView lastFocusedGrid;
- private EditMode curEditMode = EditMode.InsertAfter;
- private bool dontOpenEditor;
private readonly List mruFiles = new List();
- private DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo downHit;
+
+ private readonly string title;
+ private EditMode curEditMode = EditMode.InsertAfter;
+ private ISerializerPlugin currentPlugin;
+ private string currentRefFile;
+ private string currentTvFile;
+ private SerializerBase currentTvSerializer;
+ private Encoding defaultEncoding = Encoding.Default;
+ private bool dontOpenEditor;
+ private GridHitInfo downHit;
private DragDropInfo dragDropInfo;
- internal IList Plugins => plugins;
- internal DataRoot DataRoot => dataRoot;
- internal Editor Editor => editor;
- internal ChannelList CurrentChannelList => currentChannelList;
+ private bool ignoreLanguageChange;
+ private GridView lastFocusedGrid;
+ private int subListIndex;
#region ctor()
+
public MainForm()
{
if (!string.IsNullOrEmpty(Settings.Default.Language))
@@ -90,7 +64,7 @@ namespace ChanSort.Ui
this.Size = Settings.Default.WindowSize;
this.title = string.Format(base.Text, AppVersion);
base.Text = title;
- this.plugins = this.LoadSerializerPlugins();
+ this.Plugins = this.LoadSerializerPlugins();
this.FillMenuWithIsoEncodings();
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ChanSort.Ui.app.ico"))
@@ -111,45 +85,76 @@ namespace ChanSort.Ui
this.miAddFromRefList.Enabled = false;
#endif
}
+
+ #endregion
+
+ internal IList Plugins { get; }
+
+ internal DataRoot DataRoot { get; private set; }
+
+ internal Editor Editor { get; private set; }
+
+ internal ChannelList CurrentChannelList { get; private set; }
+
+ #region IsLeftGridSortedByNewProgNr
+
+ private bool IsLeftGridSortedByNewProgNr
+ {
+ get
+ {
+ return this.gviewLeft.SortedColumns.Count >= 1 &&
+ this.gviewLeft.SortedColumns[0].FieldName == this.colOutSlot.FieldName;
+ }
+ }
+
#endregion
#region InitAppAfterMainWindowWasShown()
+
private void InitAppAfterMainWindowWasShown()
{
- this.BeginInvoke((Action)UpdateCheck.CheckForNewVersion);
+ this.BeginInvoke((Action) UpdateCheck.CheckForNewVersion);
}
+
#endregion
#region LoadSerializerPlugins()
+
private IList LoadSerializerPlugins()
{
var list = new List();
- string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
+ list.Add(new RefSerializerPlugin());
+ var exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
foreach (var file in Directory.GetFiles(exeDir, "ChanSort.Loader.*.dll"))
{
try
{
var assembly = Assembly.UnsafeLoadFrom(file);
- foreach(var type in assembly.GetTypes())
+ foreach (var type in assembly.GetTypes())
{
- if (typeof(ISerializerPlugin).IsAssignableFrom(type) && !type.IsAbstract)
+ if (typeof (ISerializerPlugin).IsAssignableFrom(type) && !type.IsAbstract)
list.Add((ISerializerPlugin) Activator.CreateInstance(type));
}
}
- catch(Exception ex) { HandleException(new IOException("Plugin " + file + "\n" + ex.Message, ex)); }
+ catch (Exception ex)
+ {
+ HandleException(new IOException("Plugin " + file + "\n" + ex.Message, ex));
+ }
}
return list;
}
+
#endregion
#region ShowOpenFileDialog()
+
private void ShowOpenFileDialog()
{
string supportedExtensions;
int numberOfFilters;
var filter = GetTvDataFileFilter(out supportedExtensions, out numberOfFilters);
- using (OpenFileDialog dlg = new OpenFileDialog())
+ using (var dlg = new OpenFileDialog())
{
dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
dlg.AddExtension = true;
@@ -160,19 +165,21 @@ namespace ChanSort.Ui
if (dlg.ShowDialog() != DialogResult.OK)
return;
- var plugin = dlg.FilterIndex <= this.plugins.Count ? this.plugins[dlg.FilterIndex - 1] : null;
- this.LoadFiles(plugin, dlg.FileName);
+ var plugin = dlg.FilterIndex <= this.Plugins.Count ? this.Plugins[dlg.FilterIndex - 1] : null;
+ this.LoadFiles(plugin, dlg.FileName);
}
}
+
#endregion
#region GetTvDataFileFilter()
+
internal string GetTvDataFileFilter(out string supportedExtensions, out int numberOfFilters)
{
numberOfFilters = 0;
- StringBuilder filter = new StringBuilder();
+ var filter = new StringBuilder();
var extension = new StringBuilder();
- foreach (var plugin in this.plugins)
+ foreach (var plugin in this.Plugins)
{
filter.Append(plugin.PluginName).Append("|").Append(plugin.FileFilter);
extension.Append(plugin.FileFilter);
@@ -189,6 +196,7 @@ namespace ChanSort.Ui
#endregion
#region SetFileName()
+
private void SetFileName(string tvDataFile)
{
this.currentTvFile = tvDataFile;
@@ -199,22 +207,25 @@ namespace ChanSort.Ui
}
this.Text = this.title + " - " + Path.GetFileName(this.currentTvFile);
}
+
#endregion
#region ReLoadFiles()
+
private void ReLoadFiles(ISerializerPlugin plugin)
{
- int listIndex = this.tabChannelList.SelectedTabPageIndex;
+ var listIndex = this.tabChannelList.SelectedTabPageIndex;
this.LoadFiles(plugin, this.currentTvFile);
this.tabChannelList.SelectedTabPageIndex = listIndex;
}
+
#endregion
#region LoadFiles()
private void LoadFiles(ISerializerPlugin plugin, string tvDataFile)
{
- bool dataUpdated = false;
+ var dataUpdated = false;
try
{
if (DetectCommonFileCorruptions(tvDataFile))
@@ -227,31 +238,31 @@ namespace ChanSort.Ui
this.gviewRight.BeginDataUpdate();
this.gviewLeft.BeginDataUpdate();
- this.editor = new Editor();
- this.editor.DataRoot = this.dataRoot;
+ this.Editor = new Editor();
+ this.Editor.DataRoot = this.DataRoot;
- this.currentChannelList = null;
- this.editor.ChannelList = null;
+ this.CurrentChannelList = null;
+ this.Editor.ChannelList = null;
this.gridRight.DataSource = null;
this.gridLeft.DataSource = null;
this.FillChannelListCombo();
//this.SetControlsEnabled(!this.dataRoot.IsEmpty);
- this.UpdateFavoritesEditor(this.dataRoot.SupportedFavorites);
+ this.UpdateFavoritesEditor(this.DataRoot.SupportedFavorites);
this.colEncrypted.OptionsColumn.AllowEdit = this.currentTvSerializer.Features.EncryptedFlagEdit;
- if (this.dataRoot.Warnings.Length > 0 && this.miShowWarningsAfterLoad.Checked)
- this.BeginInvoke((Action)this.ShowFileInformation);
+ if (this.DataRoot.Warnings.Length > 0 && this.miShowWarningsAfterLoad.Checked)
+ this.BeginInvoke((Action) this.ShowFileInformation);
- this.BeginInvoke((Action)this.InitInitialChannelOrder);
+ this.BeginInvoke((Action) this.InitInitialChannelOrder);
}
catch (Exception ex)
{
if (!(ex is IOException))
throw;
- string name = plugin != null ? plugin.PluginName : "Loader";
+ var name = plugin != null ? plugin.PluginName : "Loader";
XtraMessageBox.Show(this, name + "\n\n" + ex.Message, Resources.MainForm_LoadFiles_IOException,
- MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
this.currentPlugin = null;
this.currentTvFile = null;
this.currentTvSerializer = null;
@@ -266,13 +277,15 @@ namespace ChanSort.Ui
}
}
}
+
#endregion
#region DetectCommonFileCorruptions()
+
internal bool DetectCommonFileCorruptions(string tvDataFile)
{
var content = File.ReadAllBytes(tvDataFile);
- bool isAllZero = true;
+ var isAllZero = true;
for (int i = 0, c = content.Length; i < c; i++)
{
if (content[i] != 0)
@@ -295,14 +308,15 @@ namespace ChanSort.Ui
#endregion
#region FillChannelListCombo()
+
private void FillChannelListCombo()
{
this.tabChannelList.TabPages.Clear();
-
+
var itemList = new List();
- foreach(BarItemLink link in this.mnuInputSource.ItemLinks)
+ foreach (BarItemLink link in this.mnuInputSource.ItemLinks)
itemList.Add(link.Item);
- foreach (BarItem item in itemList)
+ foreach (var item in itemList)
{
this.barManager1.Items.Remove(item);
item.Dispose();
@@ -310,8 +324,8 @@ namespace ChanSort.Ui
this.mnuInputSource.ClearLinks();
XtraTabPage firstNonEmpty = null;
- int i = 0;
- foreach (var list in this.dataRoot.ChannelLists)
+ var i = 0;
+ foreach (var list in this.DataRoot.ChannelLists)
{
if (list.Channels.Count == 0)
continue;
@@ -320,7 +334,7 @@ namespace ChanSort.Ui
if (firstNonEmpty == null && list.Count > 0)
firstNonEmpty = tab;
var item = new BarButtonItem(this.barManager1, list.Caption);
- item.ItemShortcut = new BarShortcut((Keys) ((int)(Keys.Alt | Keys.D1) + i));
+ item.ItemShortcut = new BarShortcut((Keys) ((int) (Keys.Alt | Keys.D1) + i));
item.Tag = i;
item.ItemClick += this.miInputSource_ItemClick;
this.mnuInputSource.AddItem(item);
@@ -332,32 +346,33 @@ namespace ChanSort.Ui
if (firstNonEmpty == null)
firstNonEmpty = tabChannelList.TabPages[0];
if (firstNonEmpty == this.tabChannelList.SelectedTabPage)
- this.ShowChannelList((ChannelList)firstNonEmpty.Tag);
+ this.ShowChannelList((ChannelList) firstNonEmpty.Tag);
else
this.tabChannelList.SelectedTabPage = firstNonEmpty;
}
else
{
this.tabChannelList.TabPages.Add(this.pageEmpty);
- this.currentChannelList = null;
+ this.CurrentChannelList = null;
}
}
#endregion
#region UpdateFavoritesEditor()
+
private void UpdateFavoritesEditor(Favorites favorites)
{
this.repositoryItemCheckedComboBoxEdit1.Items.Clear();
this.repositoryItemCheckedComboBoxEdit2.Items.Clear();
byte mask = 0x01;
- string regex = "[";
- int favCount = 0;
- for (int bit=0; bit<5; bit++, mask<<=1)
+ var regex = "[";
+ var favCount = 0;
+ for (var bit = 0; bit < 5; bit++, mask <<= 1)
{
if (((int) favorites & mask) != 0)
{
- char c = (char) ('A' + bit);
+ var c = (char) ('A' + bit);
this.repositoryItemCheckedComboBoxEdit1.Items.Add(c);
this.repositoryItemCheckedComboBoxEdit2.Items.Add(c);
regex += c;
@@ -369,55 +384,58 @@ namespace ChanSort.Ui
this.repositoryItemCheckedComboBoxEdit2.Mask.EditMask = regex;
while (this.tabSubList.TabPages.Count > favCount + 1)
- this.tabSubList.TabPages.RemoveAt(this.tabSubList.TabPages.Count-1);
+ this.tabSubList.TabPages.RemoveAt(this.tabSubList.TabPages.Count - 1);
while (this.tabSubList.TabPages.Count < favCount + 1)
{
var page = this.tabSubList.TabPages.Add();
- page.Text = "Fav " + (char)('A' + this.tabSubList.TabPages.Count - 2);
+ page.Text = "Fav " + (char) ('A' + this.tabSubList.TabPages.Count - 2);
}
- if (!this.dataRoot.SortedFavorites || this.subListIndex >= favCount)
+ if (!this.DataRoot.SortedFavorites || this.subListIndex >= favCount)
{
this.tabSubList.SelectedTabPageIndex = 0;
this.subListIndex = 0;
}
- this.colOutFav.OptionsColumn.AllowEdit = !this.dataRoot.SortedFavorites;
- this.colFavorites.OptionsColumn.AllowEdit = !this.dataRoot.SortedFavorites;
+ this.colOutFav.OptionsColumn.AllowEdit = !this.DataRoot.SortedFavorites;
+ this.colFavorites.OptionsColumn.AllowEdit = !this.DataRoot.SortedFavorites;
}
#endregion
#region GetTvFileSerializer()
+
internal ISerializerPlugin GetPluginForFile(string inputFileName)
{
if (!File.Exists(inputFileName))
{
- XtraMessageBox.Show(this, String.Format(Resources.MainForm_LoadTll_SourceTllNotFound, inputFileName));
+ XtraMessageBox.Show(this, string.Format(Resources.MainForm_LoadTll_SourceTllNotFound, inputFileName));
return null;
}
- string upperFileName = (Path.GetFileName(inputFileName) ??"").ToUpper();
- foreach (var plugin in this.plugins)
+ var upperFileName = (Path.GetFileName(inputFileName) ?? "").ToUpper();
+ foreach (var plugin in this.Plugins)
{
foreach (var filter in plugin.FileFilter.ToUpper().Split(';'))
{
var regex = filter.Replace(".", "\\.").Replace("*", ".*").Replace("?", ".");
- if (System.Text.RegularExpressions.Regex.IsMatch(upperFileName, regex))
+ if (Regex.IsMatch(upperFileName, regex))
return plugin;
}
}
- XtraMessageBox.Show(this, String.Format(Resources.MainForm_LoadTll_SerializerNotFound, inputFileName));
+ XtraMessageBox.Show(this, string.Format(Resources.MainForm_LoadTll_SerializerNotFound, inputFileName));
return null;
}
+
#endregion
#region LoadTvDataFile()
+
private bool LoadTvDataFile(ISerializerPlugin plugin, string tvDataFile)
{
if (!File.Exists(tvDataFile))
{
- XtraMessageBox.Show(this, Resources.MainForm_LoadTvDataFile_FileNotFound_Caption,
+ XtraMessageBox.Show(this, Resources.MainForm_LoadTvDataFile_FileNotFound_Caption,
string.Format(Resources.MainForm_LoadTvDataFile_FileNotFound_Message, tvDataFile),
- MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
+ MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
@@ -434,56 +452,66 @@ namespace ChanSort.Ui
serializer.DefaultEncoding = this.defaultEncoding;
serializer.Load();
this.SetFileName(tvDataFile);
- this.currentPlugin = plugin;
+ this.currentPlugin = plugin;
this.currentTvSerializer = serializer;
- this.dataRoot = this.currentTvSerializer.DataRoot;
+ this.DataRoot = this.currentTvSerializer.DataRoot;
this.AddFileToMruList(this.currentTvFile);
this.UpdateMruMenu();
return true;
}
+
#endregion
#region AddFileToMruList()
+
private void AddFileToMruList(string file)
{
- if (string.IsNullOrEmpty(file))
- return;
+ if (string.IsNullOrEmpty(file))
+ return;
this.mruFiles.Remove(file);
if (this.mruFiles.Count >= MaxMruEntries)
- this.mruFiles.RemoveAt(this.mruFiles.Count-1);
+ this.mruFiles.RemoveAt(this.mruFiles.Count - 1);
this.mruFiles.Insert(0, file);
}
+
#endregion
#region PromptSaveAndContinue()
+
private bool PromptSaveAndContinue()
{
- if (this.dataRoot == null || !this.dataRoot.NeedsSaving)
+ if (this.DataRoot == null || !this.DataRoot.NeedsSaving)
return true;
- using (ActionBoxDialog dlg = new ActionBoxDialog(Resources.MainForm_PromptSaveAndContinue_Question))
+ using (var dlg = new ActionBoxDialog(Resources.MainForm_PromptSaveAndContinue_Question))
{
dlg.AddAction(Resources.MainForm_PromptSaveAndContinue_Save, DialogResult.Yes, dlg.Save);
dlg.AddAction(Resources.MainForm_PromptSaveAndContinue_Discard, DialogResult.No, dlg.Discard);
dlg.AddAction(Resources.MainForm_Cancel, DialogResult.Cancel, dlg.Cancel);
switch (dlg.ShowDialog(this))
{
- case DialogResult.Yes: this.SaveFiles(); break;
- case DialogResult.No: break;
- case DialogResult.Cancel: return false;
+ case DialogResult.Yes:
+ this.SaveFiles();
+ break;
+ case DialogResult.No:
+ break;
+ case DialogResult.Cancel:
+ return false;
}
}
return true;
}
+
#endregion
#region InitInitialChannelOrder()
+
private void InitInitialChannelOrder()
{
DialogResult res;
- string msg = Resources.MainForm_InitInitialChannelOrder_Question;
- using (ActionBoxDialog dlg = new ActionBoxDialog(msg))
+ var msg = Resources.MainForm_InitInitialChannelOrder_Question;
+ using (var dlg = new ActionBoxDialog(msg))
{
dlg.AddAction(Resources.MainForm_InitInitialChannelOrder_EmptyList, DialogResult.Cancel, dlg.EmptyList);
dlg.AddAction(Resources.MainForm_InitInitialChannelOrder_CurrentList, DialogResult.No, dlg.FullList, true);
@@ -492,16 +520,18 @@ namespace ChanSort.Ui
}
if (res == DialogResult.Yes)
- this.BeginInvoke((Action)(()=>this.ShowOpenReferenceFileDialog(false)));
+ this.BeginInvoke((Action) (() => this.ShowOpenReferenceFileDialog(false)));
else if (res == DialogResult.No)
{
- this.dataRoot.ApplyCurrentProgramNumbers();
+ this.DataRoot.ApplyCurrentProgramNumbers();
this.RefreshGrid(this.gviewLeft, this.gviewRight);
}
}
+
#endregion
#region ShowOpenReferenceFileDialog()
+
private void ShowOpenReferenceFileDialog(bool addChannels)
{
#if false
@@ -546,66 +576,18 @@ namespace ChanSort.Ui
new ReferenceListForm(this).ShowDialog(this);
#endif
}
+
#endregion
- #region LoadReferenceFile()
- private void LoadReferenceFile(string fileName, bool addChannels)
- {
- this.gviewRight.BeginDataUpdate();
- this.gviewLeft.BeginDataUpdate();
+ #region ShowChannelList()
- string ext = (Path.GetExtension(fileName) ?? "").ToLower();
- if (ext == ".csv")
- {
- var csvSerializer = new CsvFileSerializer(fileName, this.dataRoot, addChannels);
- csvSerializer.Load();
- }
- //else if (ext == ".chl" || ext == ".txt")
- //{
- // ChlFileSerializer loader = new ChlFileSerializer();
- // string warnings = loader.Load(fileName, this.dataRoot, this.currentChannelList);
- // InfoBox.Show(this, warnings, Path.GetFileName(fileName));
- //}
- else
- {
- var plugin = this.GetPluginForFile(fileName);
- if (plugin == null)
- {
- XtraMessageBox.Show(this, "Unsupported type of file");
- }
- else
- {
- var refFile = plugin.CreateSerializer(fileName);
- refFile.Load();
- editor.ApplyReferenceList(refFile.DataRoot);
- }
- }
-
- this.gviewRight.EndDataUpdate();
- this.gviewLeft.EndDataUpdate();
- }
-
-#endregion
-
-#region IsLeftGridSortedByNewProgNr
- private bool IsLeftGridSortedByNewProgNr
- {
- get
- {
- return this.gviewLeft.SortedColumns.Count >= 1 &&
- this.gviewLeft.SortedColumns[0].FieldName == this.colOutSlot.FieldName;
- }
- }
-#endregion
-
-#region ShowChannelList()
private void ShowChannelList(ChannelList channelList)
{
- if (this.currentChannelList != null)
- this.SaveInputGridLayout(this.currentChannelList.SignalSource);
+ if (this.CurrentChannelList != null)
+ this.SaveInputGridLayout(this.CurrentChannelList.SignalSource);
- this.currentChannelList = channelList;
- this.editor.ChannelList = channelList;
+ this.CurrentChannelList = channelList;
+ this.Editor.ChannelList = channelList;
if (channelList != null)
{
@@ -620,7 +602,7 @@ namespace ChanSort.Ui
src |= SignalSource.Digital;
this.colName.OptionsColumn.AllowEdit = this.colOutName.OptionsColumn.AllowEdit = (channelList.SignalSource & src) != 0;
- if (this.dataRoot.MixedSourceFavorites)
+ if (this.DataRoot.MixedSourceFavorites)
{
if (channelList.IsMixedSourceFavoritesList)
{
@@ -633,14 +615,14 @@ namespace ChanSort.Ui
this.grpSubList.Visible = false;
this.pageProgNr.PageVisible = true;
this.tabSubList.SelectedTabPageIndex = 0;
- }
+ }
}
else
{
this.pageProgNr.PageVisible = true;
- this.grpSubList.Visible = dataRoot.SortedFavorites;
+ this.grpSubList.Visible = DataRoot.SortedFavorites;
}
-
+
//this.tabSubList.TabPages[0].PageVisible = !channelList.IsMixedSourceFavoritesList;
//this.pageProgNr.Enabled = this.pageProgNr.Visible;
}
@@ -667,13 +649,15 @@ namespace ChanSort.Ui
if (!this.grpSubList.Visible)
this.tabSubList.SelectedTabPageIndex = 0;
}
-#endregion
-#region UpdateGridReadOnly
+ #endregion
+
+ #region UpdateGridReadOnly
+
private void UpdateGridReadOnly()
{
- bool allowEdit = !this.currentChannelList?.ReadOnly ?? true;
- bool forceEdit = this.miAllowEditPredefinedLists.Down;
+ var allowEdit = !this.CurrentChannelList?.ReadOnly ?? true;
+ var forceEdit = this.miAllowEditPredefinedLists.Down;
this.gviewLeft.OptionsBehavior.Editable = allowEdit || forceEdit;
this.gviewRight.OptionsBehavior.Editable = allowEdit || forceEdit;
@@ -684,14 +668,14 @@ namespace ChanSort.Ui
this.lblPredefinedList.Visible = !(allowEdit || forceEdit);
}
-#endregion
+ #endregion
-#region ShowSaveFileDialog()
+ #region ShowSaveFileDialog()
private void ShowSaveFileDialog()
{
- string extension = Path.GetExtension(this.currentTvSerializer.FileName) ?? ".";
- using (SaveFileDialog dlg = new SaveFileDialog())
+ var extension = Path.GetExtension(this.currentTvSerializer.FileName) ?? ".";
+ using (var dlg = new SaveFileDialog())
{
dlg.InitialDirectory = Path.GetDirectoryName(this.currentTvFile);
dlg.FileName = Path.GetFileName(this.currentTvFile);
@@ -710,9 +694,9 @@ namespace ChanSort.Ui
}
}
-#endregion
+ #endregion
-#region SaveFiles()
+ #region SaveFiles()
private void SaveFiles()
{
@@ -726,27 +710,28 @@ namespace ChanSort.Ui
if (!this.HandleChannelNumberGaps())
return;
this.SaveTvDataFile();
- this.dataRoot.NeedsSaving = false;
+ this.DataRoot.NeedsSaving = false;
this.RefreshGrid(this.gviewLeft, this.gviewRight);
this.UpdateMenu();
}
catch (IOException ex)
{
- XtraMessageBox.Show(this,
+ XtraMessageBox.Show(this,
Resources.MainForm_SaveFiles_ErrorMsg +
- ex.Message,
- Resources.MainForm_SaveFiles_ErrorTitle,
+ ex.Message,
+ Resources.MainForm_SaveFiles_ErrorTitle,
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
-#endregion
+ #endregion
+
+ #region PromptHandlingOfUnsortedChannels()
-#region PromptHandlingOfUnsortedChannels()
private bool PromptHandlingOfUnsortedChannels()
{
- bool hasUnsorted = false;
- foreach (var list in this.dataRoot.ChannelLists)
+ var hasUnsorted = false;
+ foreach (var list in this.DataRoot.ChannelLists)
{
foreach (var channel in list.Channels)
{
@@ -774,23 +759,25 @@ namespace ChanSort.Ui
if (res == DialogResult.Cancel)
return false;
- this.editor.AutoNumberingForUnassignedChannels(
- res == DialogResult.Yes ? UnsortedChannelMode.AppendInOrder : UnsortedChannelMode.MarkDeleted);
+ this.Editor.AutoNumberingForUnassignedChannels(
+ res == DialogResult.Yes ? UnsortedChannelMode.AppendInOrder : UnsortedChannelMode.MarkDeleted);
return true;
}
-#endregion
-#region HandleChannelNumberGaps()
+ #endregion
+
+ #region HandleChannelNumberGaps()
+
private bool HandleChannelNumberGaps()
{
if (this.currentTvSerializer.Features.CanHaveGaps)
return true;
- bool hasGaps = this.ProcessChannelNumberGaps(true);
+ var hasGaps = this.ProcessChannelNumberGaps(true);
if (hasGaps)
{
var action = XtraMessageBox.Show(this,
- Resources.MainForm_HandleChannelNumberGaps,
+ Resources.MainForm_HandleChannelNumberGaps,
"ChanSort", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (action == DialogResult.Cancel)
return false;
@@ -799,15 +786,17 @@ namespace ChanSort.Ui
}
return true;
}
-#endregion
-#region ProcessChannelNumberGaps()
+ #endregion
+
+ #region ProcessChannelNumberGaps()
+
private bool ProcessChannelNumberGaps(bool testOnly)
{
- bool wasRenumbered = false;
- foreach (var list in this.dataRoot.ChannelLists)
+ var wasRenumbered = false;
+ foreach (var list in this.DataRoot.ChannelLists)
{
- int chNr = 1;
+ var chNr = 1;
foreach (var channel in list.Channels.OrderBy(c => c.NewProgramNr))
{
if (channel.IsDeleted || channel.NewProgramNr < 0)
@@ -826,9 +815,10 @@ namespace ChanSort.Ui
}
return wasRenumbered;
}
-#endregion
-#region SaveReferenceFile()
+ #endregion
+
+ #region SaveReferenceFile()
private void SaveReferenceFile()
{
@@ -849,16 +839,16 @@ namespace ChanSort.Ui
fileName = dlg.FileName;
}
- string ext = (Path.GetExtension(fileName)??"").ToLower();
+ var ext = (Path.GetExtension(fileName) ?? "").ToLower();
if (ext == ".csv")
- new CsvFileSerializer(fileName, this.dataRoot, false).Save();
+ CsvFileSerializer.Save(fileName, this.DataRoot);
else if (ext == ".chl" || ext == ".txt")
- Loader.RefList.RefSerializer.Save(fileName, this.currentChannelList);
+ RefSerializer.Save(fileName, this.CurrentChannelList);
}
-#endregion
+ #endregion
-#region SaveTvDataFile()
+ #region SaveTvDataFile()
private void SaveTvDataFile()
{
@@ -868,14 +858,14 @@ namespace ChanSort.Ui
// create backup file if none exists
if (File.Exists(currentTvFile))
{
- string bakFile = currentTvFile + ".bak";
+ var bakFile = currentTvFile + ".bak";
if (!File.Exists(bakFile))
File.Copy(currentTvFile, bakFile);
}
this.currentTvSerializer.Save(this.currentTvFile);
// after saving old numbers match the new numbers
- foreach (var list in this.dataRoot.ChannelLists)
+ foreach (var list in this.DataRoot.ChannelLists)
{
foreach (var chan in list.Channels)
{
@@ -890,9 +880,11 @@ namespace ChanSort.Ui
this.splashScreenManager1.CloseWaitForm();
}
}
-#endregion
-#region AddChannels()
+ #endregion
+
+ #region AddChannels()
+
private void AddChannels()
{
var selectedChannels = this.GetSelectedChannels(gviewRight);
@@ -906,7 +898,7 @@ namespace ChanSort.Ui
this.gviewRight.BeginDataUpdate();
try
{
- lastInsertedChannel = this.editor.AddChannels(selectedChannels);
+ lastInsertedChannel = this.Editor.AddChannels(selectedChannels);
this.UpdateInsertSlotTextBox();
}
finally
@@ -921,22 +913,23 @@ namespace ChanSort.Ui
return;
}
- int index = this.currentChannelList.Channels.IndexOf(lastInsertedChannel);
- int rowHandle = this.gviewLeft.GetRowHandle(index);
+ var index = this.CurrentChannelList.Channels.IndexOf(lastInsertedChannel);
+ var rowHandle = this.gviewLeft.GetRowHandle(index);
if (this.rbInsertBefore.Checked)
++rowHandle;
this.SelectFocusedRow(this.gviewLeft, rowHandle);
}
-#endregion
-#region RemoveChannels()
+ #endregion
+
+ #region RemoveChannels()
private void RemoveChannels(GridView grid, bool closeGap)
{
var selectedChannels = this.GetSelectedChannels(grid);
if (selectedChannels.Count == 0) return;
- int focusedRow = this.gviewLeft.FocusedRowHandle - selectedChannels.Count;
+ var focusedRow = this.gviewLeft.FocusedRowHandle - selectedChannels.Count;
if (!gviewLeft.IsLastRow)
++focusedRow;
if (focusedRow < 0) focusedRow = 0;
@@ -944,7 +937,7 @@ namespace ChanSort.Ui
this.gviewLeft.BeginDataUpdate();
try
{
- this.editor.RemoveChannels(selectedChannels, closeGap);
+ this.Editor.RemoveChannels(selectedChannels, closeGap);
}
finally
{
@@ -955,20 +948,22 @@ namespace ChanSort.Ui
this.UpdateInsertSlotTextBox();
}
-#endregion
+ #endregion
+
+ #region SelectFocusedRow()
-#region SelectFocusedRow()
private void SelectFocusedRow(GridView grid, int rowHandle)
{
grid.BeginSelection();
grid.ClearSelection();
grid.FocusedRowHandle = rowHandle;
grid.SelectRow(rowHandle);
- grid.EndSelection();
+ grid.EndSelection();
}
-#endregion
-#region MoveChannels()
+ #endregion
+
+ #region MoveChannels()
private void MoveChannels(bool up)
{
@@ -979,7 +974,7 @@ namespace ChanSort.Ui
this.gviewLeft.BeginDataUpdate();
try
{
- this.editor.MoveChannels(selectedChannels, up);
+ this.Editor.MoveChannels(selectedChannels, up);
}
finally
{
@@ -988,9 +983,10 @@ namespace ChanSort.Ui
this.UpdateInsertSlotNumber();
}
-#endregion
+ #endregion
+
+ #region SetSlotNumber()
-#region SetSlotNumber()
private bool SetSlotNumber(string progNr)
{
int prog;
@@ -1002,7 +998,7 @@ namespace ChanSort.Ui
this.gviewRight.BeginDataUpdate();
try
{
- this.editor.SetSlotNumber(selectedChannels, prog, this.rbInsertSwap.Checked, this.cbCloseGap.Checked);
+ this.Editor.SetSlotNumber(selectedChannels, prog, this.rbInsertSwap.Checked, this.cbCloseGap.Checked);
}
finally
{
@@ -1011,9 +1007,11 @@ namespace ChanSort.Ui
}
return true;
}
-#endregion
-#region SortSelectedChannels()
+ #endregion
+
+ #region SortSelectedChannels()
+
private void SortSelectedChannels()
{
var selectedChannels = this.GetSelectedChannels(this.gviewLeft);
@@ -1022,7 +1020,7 @@ namespace ChanSort.Ui
this.gviewRight.BeginDataUpdate();
try
{
- this.editor.SortSelectedChannels(selectedChannels);
+ this.Editor.SortSelectedChannels(selectedChannels);
}
finally
{
@@ -1030,20 +1028,22 @@ namespace ChanSort.Ui
this.gviewLeft.EndDataUpdate();
}
}
-#endregion
-#region AddAllUnsortedChannels()
+ #endregion
+
+ #region AddAllUnsortedChannels()
+
private void AddAllUnsortedChannels()
{
- if (this.currentChannelList == null) return;
+ if (this.CurrentChannelList == null) return;
this.gviewRight.BeginDataUpdate();
this.gviewLeft.BeginDataUpdate();
- int maxNr = this.currentChannelList.InsertProgramNumber;
- foreach (var channel in this.currentChannelList.Channels)
+ var maxNr = this.CurrentChannelList.InsertProgramNumber;
+ foreach (var channel in this.CurrentChannelList.Channels)
maxNr = Math.Max(maxNr, channel.GetPosition(this.subListIndex));
var max = this.gviewRight.RowCount;
- for (int handle = 0; handle GetSelectedChannels(GridView gview)
{
var channels = new List();
- foreach (int rowHandle in gview.GetSelectedRows())
+ foreach (var rowHandle in gview.GetSelectedRows())
{
if (gview.IsDataRow(rowHandle))
- channels.Add((ChannelInfo)gview.GetRow(rowHandle));
+ channels.Add((ChannelInfo) gview.GetRow(rowHandle));
}
return channels;
}
-#endregion
-#region TryExecute()
+ #endregion
+
+ #region TryExecute()
private void TryExecute(Action action)
{
- try { action(); }
- catch (Exception ex) { HandleException(ex); }
+ try
+ {
+ action();
+ }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
}
-#endregion
+ #endregion
+
+ #region HandleException()
-#region HandleException()
public static void HandleException(Exception ex)
{
XtraMessageBox.Show(string.Format(Resources.MainForm_TryExecute_Exception, ex));
}
-#endregion
-#region LoadSettings()
+ #endregion
+
+ #region LoadSettings()
private void LoadSettings()
{
// note: WindowSize must be restored in ctor in order to make WindowStartPosition.CenterScreen work
if (!string.IsNullOrEmpty(Settings.Default.Encoding))
this.defaultEncoding = Encoding.GetEncoding(Settings.Default.Encoding);
-
- int width = Settings.Default.LeftPanelWidth;
+
+ var width = Settings.Default.LeftPanelWidth;
if (width > 0)
this.splitContainerControl1.SplitterPosition = width;
this.SelectLanguageMenuItem();
@@ -1118,17 +1131,19 @@ namespace ChanSort.Ui
this.ClearLeftFilter();
this.ClearRightFilter();
- for (int i = MaxMruEntries-1; i >= 0; i--)
+ for (var i = MaxMruEntries - 1; i >= 0; i--)
{
var prop = Settings.Default.GetType().GetProperty("MruFile" + i);
if (prop != null)
- this.AddFileToMruList((string)prop.GetValue(Settings.Default, null));
+ this.AddFileToMruList((string) prop.GetValue(Settings.Default, null));
}
this.UpdateMruMenu();
}
-#endregion
-#region SelectLanguageMenuItem()
+ #endregion
+
+ #region SelectLanguageMenuItem()
+
private void SelectLanguageMenuItem()
{
this.barManager1.ForceLinkCreate();
@@ -1143,19 +1158,21 @@ namespace ChanSort.Ui
}
}
}
-#endregion
-#region SetGridLayout()
+ #endregion
+
+ #region SetGridLayout()
+
private void SetGridLayout(GridView grid, string layout)
{
if (string.IsNullOrEmpty(layout)) return;
- MemoryStream stream = new MemoryStream();
- using (StreamWriter wrt = new StreamWriter(stream))
+ var stream = new MemoryStream();
+ using (var wrt = new StreamWriter(stream))
{
wrt.Write(layout);
wrt.Flush();
stream.Seek(0, SeekOrigin.Begin);
- OptionsLayoutGrid options = new OptionsLayoutGrid();
+ var options = new OptionsLayoutGrid();
options.StoreDataSettings = true;
options.StoreAppearance = false;
options.StoreVisualOptions = false;
@@ -1165,79 +1182,53 @@ namespace ChanSort.Ui
// put the filter text back into the auto-filter-row
foreach (GridColumn col in grid.Columns)
{
- string[] parts = (col.FilterInfo.FilterString ?? "").Split('\'');
+ var parts = (col.FilterInfo.FilterString ?? "").Split('\'');
if (parts.Length >= 2)
this.gviewRight.SetRowCellValue(GridControl.AutoFilterRowHandle, col, parts[1]);
}
}
-#endregion
-#region SaveSettings(), GetGridLayout()
- private void SaveSettings()
- {
- this.gviewRight.PostEditor();
- this.gviewLeft.PostEditor();
+ #endregion
- Settings.Default.WindowSize = this.WindowState == FormWindowState.Normal ? this.Size : this.RestoreBounds.Size;
- Settings.Default.Encoding = this.defaultEncoding.WebName;
- Settings.Default.Language = Thread.CurrentThread.CurrentUICulture.Name;
- Settings.Default.LeftPanelWidth = this.splitContainerControl1.SplitterPosition;
- Settings.Default.OutputListLayout = GetGridLayout(this.gviewLeft);
- if (this.currentChannelList != null)
- SaveInputGridLayout(this.currentChannelList.SignalSource);
- Settings.Default.ShowWarningsAfterLoading = this.miShowWarningsAfterLoad.Checked;
- Settings.Default.CloseGaps = this.cbCloseGap.Checked;
- for (int i = 0; i < this.mruFiles.Count; i++)
- Settings.Default.GetType().GetProperty("MruFile" + i).SetValue(Settings.Default, this.mruFiles[i], null);
+ #region UpdateInsertSlotNumber()
- Settings.Default.Save();
- }
-
- private string GetGridLayout(GridView grid)
- {
- MemoryStream stream = new MemoryStream();
- grid.SaveLayoutToStream(stream, OptionsLayoutBase.FullLayout);
- stream.Seek(0, SeekOrigin.Begin);
- using (StreamReader rdr = new StreamReader(stream, Encoding.UTF8))
- return rdr.ReadToEnd();
- }
-
-#endregion
-
-#region UpdateInsertSlotNumber()
private void UpdateInsertSlotNumber()
{
- var channel = (ChannelInfo)this.gviewLeft.GetFocusedRow();
+ var channel = (ChannelInfo) this.gviewLeft.GetFocusedRow();
int programNr;
if (channel == null)
- programNr = this.currentChannelList == null ? 1 : this.currentChannelList.FirstProgramNumber;
+ programNr = this.CurrentChannelList == null ? 1 : this.CurrentChannelList.FirstProgramNumber;
else
{
programNr = channel.GetPosition(this.subListIndex);
if (this.rbInsertAfter.Checked)
++programNr;
}
- if (this.currentChannelList != null)
- this.currentChannelList.InsertProgramNumber = programNr;
+ if (this.CurrentChannelList != null)
+ this.CurrentChannelList.InsertProgramNumber = programNr;
this.UpdateInsertSlotTextBox();
this.gviewLeft.SelectRow(this.gviewLeft.FocusedRowHandle);
}
-#endregion
-#region UpdateInsertSlotTextBox()
+ #endregion
+
+ #region UpdateInsertSlotTextBox()
+
private void UpdateInsertSlotTextBox()
{
- int programNr = this.currentChannelList == null ? 0 : this.currentChannelList.InsertProgramNumber;
+ var programNr = this.CurrentChannelList == null ? 0 : this.CurrentChannelList.InsertProgramNumber;
this.txtSetSlot.Text = programNr.ToString();
}
-#endregion
-#region FillMenuWithIsoEncodings()
+ #endregion
+
+ #region FillMenuWithIsoEncodings()
+
private void FillMenuWithIsoEncodings()
{
this.miIsoCharSets.Strings.Clear();
this.isoEncodings.Clear();
- foreach(var encoding in Encoding.GetEncodings())
+ foreach (var encoding in Encoding.GetEncodings())
{
if (!encoding.Name.StartsWith("iso"))
continue;
@@ -1245,9 +1236,11 @@ namespace ChanSort.Ui
this.isoEncodings.Add(encoding.Name);
}
}
-#endregion
-#region ShowCharsetForm()
+ #endregion
+
+ #region ShowCharsetForm()
+
private void ShowCharsetForm()
{
using (var form = new CharsetForm(this.defaultEncoding))
@@ -1257,9 +1250,11 @@ namespace ChanSort.Ui
form.ShowDialog(this);
}
}
-#endregion
-#region SetDefaultEncoding()
+ #endregion
+
+ #region SetDefaultEncoding()
+
private void SetDefaultEncoding(Encoding encoding)
{
this.defaultEncoding = encoding;
@@ -1271,33 +1266,15 @@ namespace ChanSort.Ui
this.gviewRight.EndDataUpdate();
this.gviewLeft.EndDataUpdate();
}
-#endregion
-#region ClearLeftFilter(), ClearRightFilter()
- private void ClearLeftFilter()
- {
- this.gviewLeft.BeginSort();
- this.gviewLeft.ClearColumnsFilter();
- this.colOutSlot.FilterInfo = new ColumnFilterInfo("[Position]<>-1");
- this.gviewLeft.EndSort();
- }
+ #endregion
- private void ClearRightFilter()
- {
- this.gviewRight.BeginSort();
- this.gviewRight.ClearColumnsFilter();
- this.colSlotOld.FilterInfo = new ColumnFilterInfo("[OldProgramNr]<>-1");
- if (this.subListIndex > 0)
- this.colPrNr.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
- this.gviewRight.EndSort();
- }
-#endregion
+ #region LoadInputGridLayout()
-#region LoadInputGridLayout()
private void LoadInputGridLayout()
{
#if false
- // code disabled because it causes unpredictable column order when working with different file formats which may of may not show columns
+ // code disabled because it causes unpredictable column order when working with different file formats which may of may not show columns
string newLayout;
var newSource = list.SignalSource;
@@ -1314,21 +1291,25 @@ namespace ChanSort.Ui
this.ShowGridColumns(this.gviewRight);
this.ClearRightFilter();
}
-#endregion
-#region ShowGridColumns()
+ #endregion
+
+ #region ShowGridColumns()
+
private void ShowGridColumns(GridView gview)
{
- int visIndex = 0;
+ var visIndex = 0;
foreach (GridColumn col in gview.Columns)
col.VisibleIndex = GetGridColumnVisibility(col) ? visIndex++ : -1;
}
-#endregion
-#region SaveInputGridLayout()
+ #endregion
+
+ #region SaveInputGridLayout()
+
private void SaveInputGridLayout(SignalSource signalSource)
{
- string currentLayout = GetGridLayout(this.gviewRight);
+ var currentLayout = GetGridLayout(this.gviewRight);
if ((signalSource & SignalSource.Analog) != 0)
Settings.Default.InputGridLayoutAnalog = currentLayout;
else if ((signalSource & SignalSource.DvbS) != 0)
@@ -1336,13 +1317,14 @@ namespace ChanSort.Ui
else //if ((signalSource & SignalSource.DvbCT) != 0)
Settings.Default.InputGridLayoutDvbCT = currentLayout;
}
-#endregion
-#region GetGridColumnVisibility()
+ #endregion
+
+ #region GetGridColumnVisibility()
private bool GetGridColumnVisibility(GridColumn col)
{
- var list = this.currentChannelList;
+ var list = this.CurrentChannelList;
var filter = list.VisibleColumnFieldNames;
if (filter != null && !filter.Contains(col.FieldName))
return false;
@@ -1376,26 +1358,29 @@ namespace ChanSort.Ui
return true;
}
-#endregion
+ #endregion
+
+ #region SetFavorite()
-#region SetFavorite()
private void SetFavorite(string fav, bool set)
{
if (string.IsNullOrEmpty(fav)) return;
- char ch = Char.ToUpper(fav[0]);
- if (ch<'A' || ch>'E' || this.subListIndex == ch-'A'+1) return;
+ var ch = char.ToUpper(fav[0]);
+ if (ch < 'A' || ch > 'E' || this.subListIndex == ch - 'A' + 1) return;
var list = this.GetSelectedChannels(this.lastFocusedGrid);
if (list.Count == 0) return;
this.gviewRight.BeginDataUpdate();
this.gviewLeft.BeginDataUpdate();
- this.editor.SetFavorites(list, (Favorites) (1 << (ch - 'A')), set);
+ this.Editor.SetFavorites(list, (Favorites) (1 << (ch - 'A')), set);
this.gviewRight.EndDataUpdate();
this.gviewLeft.EndDataUpdate();
}
-#endregion
-#region SetChannelFlag()
+ #endregion
+
+ #region SetChannelFlag()
+
private void SetChannelFlag(Action setFlag)
{
var list = this.GetSelectedChannels(this.lastFocusedGrid);
@@ -1407,24 +1392,28 @@ namespace ChanSort.Ui
setFlag(channel);
this.gviewRight.EndDataUpdate();
this.gviewLeft.EndDataUpdate();
- this.dataRoot.NeedsSaving = true;
+ this.DataRoot.NeedsSaving = true;
}
-#endregion
-#region NavigateToChannel
+ #endregion
+
+ #region NavigateToChannel
+
private void NavigateToChannel(ChannelInfo channel, GridView view)
{
if (channel == null) return;
- int rowHandle = view.GetRowHandle(this.currentChannelList.Channels.IndexOf(channel));
+ var rowHandle = view.GetRowHandle(this.CurrentChannelList.Channels.IndexOf(channel));
if (view.IsValidRowHandle(rowHandle))
{
this.SelectFocusedRow(view, rowHandle);
view.MakeRowVisible(rowHandle);
}
}
-#endregion
-#region SetActiveGrid()
+ #endregion
+
+ #region SetActiveGrid()
+
private void SetActiveGrid(GridView grid)
{
if (grid == this.gviewLeft)
@@ -1443,14 +1432,16 @@ namespace ChanSort.Ui
}
this.UpdateMenu();
}
-#endregion
-#region UpdateMenu
+ #endregion
+
+ #region UpdateMenu
+
private void UpdateMenu()
{
- bool fileLoaded = this.dataRoot != null;
- bool isRight = this.lastFocusedGrid == this.gviewRight;
- bool mayEdit = fileLoaded && this.currentChannelList != null && (!this.currentChannelList.ReadOnly || this.miAllowEditPredefinedLists.Down);
+ var fileLoaded = this.DataRoot != null;
+ var isRight = this.lastFocusedGrid == this.gviewRight;
+ var mayEdit = fileLoaded && this.CurrentChannelList != null && (!this.CurrentChannelList.ReadOnly || this.miAllowEditPredefinedLists.Down);
foreach (BarItemLink link in this.miEdit.ItemLinks)
link.Item.Enabled = mayEdit;
@@ -1460,11 +1451,11 @@ namespace ChanSort.Ui
this.btnRemoveLeft.Enabled = mayEdit;
this.btnRemoveRight.Enabled = mayEdit;
this.btnRenum.Enabled = mayEdit;
- this.btnToggleFavA.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.A) != 0 && this.subListIndex != 1;
- this.btnToggleFavB.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.B) != 0 && this.subListIndex != 2;
- this.btnToggleFavC.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.C) != 0 && this.subListIndex != 3;
- this.btnToggleFavD.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.D) != 0 && this.subListIndex != 4;
- this.btnToggleFavE.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.E) != 0 && this.subListIndex != 5;
+ this.btnToggleFavA.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.A) != 0 && this.subListIndex != 1;
+ this.btnToggleFavB.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.B) != 0 && this.subListIndex != 2;
+ this.btnToggleFavC.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.C) != 0 && this.subListIndex != 3;
+ this.btnToggleFavD.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.D) != 0 && this.subListIndex != 4;
+ this.btnToggleFavE.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.E) != 0 && this.subListIndex != 5;
this.btnToggleLock.Enabled = mayEdit;
this.miReload.Enabled = fileLoaded;
@@ -1489,23 +1480,25 @@ namespace ChanSort.Ui
this.miAddChannel.Visibility = visRight;
this.miSkipOn.Enabled = this.miSkipOff.Enabled = this.currentTvSerializer?.Features.CanSkipChannels ?? false;
- bool isLeftGridSortedByNewProgNr = this.IsLeftGridSortedByNewProgNr;
+ var isLeftGridSortedByNewProgNr = this.IsLeftGridSortedByNewProgNr;
var sel = this.gviewLeft.GetSelectedRows();
var channel = sel.Length == 0 ? null : (ChannelInfo) this.gviewLeft.GetRow(sel[0]);
this.miMoveUp.Enabled = this.btnUp.Enabled = mayEdit && isLeftGridSortedByNewProgNr && channel != null
- && channel.GetPosition(this.subListIndex) > this.currentChannelList.FirstProgramNumber;
+ && channel.GetPosition(this.subListIndex) > this.CurrentChannelList.FirstProgramNumber;
this.miMoveDown.Enabled = this.btnDown.Enabled = mayEdit && isLeftGridSortedByNewProgNr;
- this.miTvSettings.Enabled = this.currentTvSerializer != null && this.currentTvSerializer.Features.DeviceSettings;
+ this.miTvSettings.Enabled = this.currentTvSerializer != null && this.currentTvSerializer.Features.DeviceSettings;
this.miCleanupChannels.Enabled = this.currentTvSerializer != null && this.currentTvSerializer.Features.CleanUpChannelData;
this.mnuFavList.Enabled = this.grpSubList.Visible;
this.txtSetSlot.Enabled = mayEdit;
}
-#endregion
-#region UpdateMruMenu()
+ #endregion
+
+ #region UpdateMruMenu()
+
private void UpdateMruMenu()
{
this.miRecentFiles.Strings.Clear();
@@ -1514,12 +1507,14 @@ namespace ChanSort.Ui
var key = Path.GetFileName(Path.GetDirectoryName(file)) + "\\" + Path.GetFileName(file);
if (key != file)
key = "...\\" + key;
- this.miRecentFiles.Strings.Add(key);
+ this.miRecentFiles.Strings.Add(key);
}
}
-#endregion
-#region RestoreBackupFile()
+ #endregion
+
+ #region RestoreBackupFile()
+
private void RestoreBackupFile()
{
var bakFile = this.currentTvFile + ".bak";
@@ -1532,9 +1527,9 @@ namespace ChanSort.Ui
}
if (XtraMessageBox.Show(this,
- Resources.MainForm_miRestoreOriginal_ItemClick_Confirm,
- this.miRestoreOriginal.Caption,
- MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) !=
+ Resources.MainForm_miRestoreOriginal_ItemClick_Confirm,
+ this.miRestoreOriginal.Caption,
+ MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) !=
DialogResult.Yes)
{
return;
@@ -1552,86 +1547,81 @@ namespace ChanSort.Ui
XtraMessageBox.Show(this, string.Format(Resources.MainForm_miRestoreOriginal_Message, this.currentTvFile),
this.miRestoreOriginal.Caption,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
- }
+ }
}
-#endregion
-#region ShowFileInformation()
+ #endregion
+
+ #region ShowFileInformation()
+
private void ShowFileInformation()
{
if (this.currentTvSerializer == null)
return;
var info = this.currentTvSerializer.GetFileInformation();
- if (this.dataRoot.Warnings.Length > 0)
+ if (this.DataRoot.Warnings.Length > 0)
{
- var lines = this.dataRoot.Warnings.ToString().Split('\n');
+ var lines = this.DataRoot.Warnings.ToString().Split('\n');
Array.Sort(lines);
- var sortedWarnings = String.Join("\n", lines);
+ var sortedWarnings = string.Join("\n", lines);
info += "\r\n\r\n\r\n" + Resources.MainForm_LoadFiles_ValidationWarningMsg + "\r\n\r\n" + sortedWarnings;
}
- InfoBox.Show(this, info, this.miFileInformation.Caption.Replace("...", "").Replace("&",""));
+ InfoBox.Show(this, info, this.miFileInformation.Caption.Replace("...", "").Replace("&", ""));
}
-#endregion
-#region VerifyChannelNameModified()
+ #endregion
+
+ #region VerifyChannelNameModified()
+
private void VerifyChannelNameModified(ChannelInfo info, string newName)
{
if (newName != info.Name)
info.IsNameModified = true;
}
-#endregion
-#region RefreshGrid()
+ #endregion
- internal void RefreshGrids()
- {
- RefreshGrid(this.gviewLeft, this.gviewRight);
- }
+ #region ShowTvCountrySettings()
- private void RefreshGrid(params GridView[] grids)
- {
- foreach (var grid in grids)
- {
- grid.BeginDataUpdate();
- grid.EndDataUpdate();
- }
- }
-#endregion
-
-#region ShowTvCountrySettings()
private void ShowTvCountrySettings()
{
if (this.currentTvSerializer != null)
this.currentTvSerializer.ShowDeviceSettingsForm(this);
}
-#endregion
-#region ToggleFavorite()
+ #endregion
+
+ #region ToggleFavorite()
+
private void ToggleFavorite(string fav)
{
var list = this.GetSelectedChannels(this.gviewLeft);
if (list.Count == 0) return;
- var value = (Favorites)Enum.Parse(typeof (Favorites), fav);
- this.SetFavorite(fav, (list[0].Favorites&value) == 0);
+ var value = (Favorites) Enum.Parse(typeof (Favorites), fav);
+ this.SetFavorite(fav, (list[0].Favorites & value) == 0);
this.RefreshGrid(gviewLeft, gviewRight);
}
-#endregion
-#region ToggleLock()
+ #endregion
+
+ #region ToggleLock()
+
private void ToggleLock()
{
var list = this.GetSelectedChannels(this.gviewLeft);
if (list.Count == 0) return;
- bool setLock = !list[0].Lock;
+ var setLock = !list[0].Lock;
foreach (var channel in list)
channel.Lock = setLock;
this.RefreshGrid(gviewLeft, gviewRight);
}
-#endregion
-#region RenameChannel()
+ #endregion
+
+ #region RenameChannel()
+
private void RenameChannel()
{
if (this.lastFocusedGrid == null) return;
@@ -1643,9 +1633,11 @@ namespace ChanSort.Ui
this.dontOpenEditor = false;
this.lastFocusedGrid.ShowEditor();
}
-#endregion
-#region CleanupChannelData()
+ #endregion
+
+ #region CleanupChannelData()
+
private void CleanupChannelData()
{
if (this.currentTvSerializer != null && this.currentTvSerializer.Features.CleanUpChannelData)
@@ -1656,20 +1648,22 @@ namespace ChanSort.Ui
this.RefreshGrid(gviewLeft, gviewRight);
}
}
-#endregion
-#region ExportExcelList()
+ #endregion
+
+ #region ExportExcelList()
+
private void ExportExcelList()
{
const string header = "List;Pr#;Channel Name;Favorites;Lock;Skip;Hide;Encrypted;Satellite;Ch/Tp;Freq;ONID;TSID;SymRate;SID;VPID;APID";
const char sep = '\t';
var sb = new StringBuilder();
sb.AppendLine(header.Replace(';', sep));
- foreach (var list in this.dataRoot.ChannelLists)
+ foreach (var list in this.DataRoot.ChannelLists)
{
foreach (var channel in list.Channels.OrderBy(c => c.NewProgramNr))
{
- if (channel.IsDeleted || channel.OldProgramNr == -1)
+ if (channel.IsDeleted || channel.OldProgramNr == -1)
continue;
sb.Append(list.ShortCaption).Append(sep);
sb.Append(channel.NewProgramNr).Append(sep);
@@ -1688,29 +1682,755 @@ namespace ChanSort.Ui
sb.Append(channel.ServiceId).Append(sep);
sb.Append(channel.VideoPid).Append(sep);
sb.Append(channel.AudioPid);
-
+
sb.AppendLine();
}
}
Clipboard.Clear();
Clipboard.SetData(DataFormats.Text, sb.ToString());
- XtraMessageBox.Show(this,
- Resources.MainForm_ExportExcelList_Message,
- this.miExcelExport.Caption,
- MessageBoxButtons.OK, MessageBoxIcon.Information);
+ XtraMessageBox.Show(this,
+ Resources.MainForm_ExportExcelList_Message,
+ this.miExcelExport.Caption,
+ MessageBoxButtons.OK, MessageBoxIcon.Information);
}
-#endregion
-#region Print()
+ #endregion
+
+ #region Print()
+
private void Print()
{
- using (var dlg = new Printing.ReportOptionsDialog(this.currentChannelList, this.subListIndex))
+ using (var dlg = new ReportOptionsDialog(this.CurrentChannelList, this.subListIndex))
dlg.ShowDialog(this);
}
-#endregion
-#region Accessibility
+ #endregion
+
+ // UI events
+
+ #region MainForm_Load
+
+ private void MainForm_Load(object sender, EventArgs e)
+ {
+ this.TryExecute(this.LoadSettings);
+ this.TryExecute(this.InitAppAfterMainWindowWasShown);
+ }
+
+ #endregion
+
+ #region ProcessCmdKey()
+
+ protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
+ {
+ if (keyData == Keys.F1)
+ {
+ this.popupInputSource.ShowPopup(this.tabChannelList.PointToScreen(new Point(0, this.tabChannelList.Height)));
+ return true;
+ }
+
+ if (keyData == (Keys.F1 | Keys.Shift))
+ {
+ this.popupFavList.ShowPopup(this.tabSubList.PointToScreen(new Point(0, this.tabSubList.Height)));
+ return true;
+ }
+ return base.ProcessCmdKey(ref msg, keyData);
+ }
+
+ #endregion
+
+ #region Language menu
+
+ private void miLanguage_DownChanged(object sender, ItemClickEventArgs e)
+ {
+ try
+ {
+ if (this.ignoreLanguageChange)
+ return;
+ var menuItem = (BarButtonItem) sender;
+ if (!menuItem.Down)
+ return;
+ if (!this.PromptSaveAndContinue())
+ return;
+ var locale = (string) menuItem.Tag;
+ Program.ChangeLanguage = true;
+ Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale);
+ this.Close();
+ }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
+ }
+
+ #endregion
+
+ // -- controls
+
+ #region picDonate_Click
+
+ private void picDonate_Click(object sender, EventArgs e)
+ {
+ BrowserHelper.OpenHtml(Resources.paypal_button);
+ }
+
+ #endregion
+
+ #region tabChannelList_SelectedPageChanged
+
+ private void tabChannelList_SelectedPageChanged(object sender, TabPageChangedEventArgs e)
+ {
+ this.TryExecute(() => ShowChannelList(e.Page == null ? null : (ChannelList) e.Page.Tag));
+ }
+
+ #endregion
+
+ #region tabSubList_SelectedPageChanged
+
+ private void tabSubList_SelectedPageChanged(object sender, TabPageChangedEventArgs e)
+ {
+ this.subListIndex = this.tabSubList.SelectedTabPageIndex;
+ this.ShowGridColumns(this.gviewRight);
+
+ this.Editor.SubListIndex = this.subListIndex;
+ this.gviewLeft.BeginSort();
+ this.gviewLeft.EndSort();
+ this.gviewRight.BeginSort();
+ if (this.subListIndex > 0)
+ this.colPrNr.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
+ else
+ this.colPrNr.ClearFilter();
+ this.gviewRight.EndSort();
+ }
+
+ #endregion
+
+ #region gview_CustomUnboundColumnData
+
+ private void gview_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
+ {
+ var channel = (ChannelInfo) e.Row;
+ if (e.Column.FieldName == "Position")
+ e.Value = channel.GetPosition(this.subListIndex);
+ else if (e.Column.FieldName == "OldPosition")
+ e.Value = channel.GetOldPosition(this.subListIndex);
+ }
+
+ #endregion
+
+ #region gview_MouseMove
+
+ private void gview_MouseMove(object sender, MouseEventArgs e)
+ {
+ try
+ {
+ var view = (GridView) sender;
+ if (this.downHit == null || downHit.RowHandle < 0 || e.Button != MouseButtons.Left || view.ActiveEditor != null || ModifierKeys != Keys.None)
+ return;
+ if (this.CurrentChannelList == null || this.CurrentChannelList.ReadOnly)
+ return;
+ // drag/drop only allowed when left grid is sorted by NewSlotNr
+ if (!this.IsLeftGridSortedByNewProgNr)
+ return;
+ if (Math.Abs(e.Y - downHit.HitPoint.Y) < SystemInformation.DragSize.Height &&
+ Math.Abs(e.X - downHit.HitPoint.X) < SystemInformation.DragSize.Width)
+ return;
+
+ // start drag operation
+ var channel = (ChannelInfo) view.GetRow(downHit.RowHandle);
+ this.dragDropInfo = new DragDropInfo(view, channel.GetPosition(this.subListIndex));
+ view.GridControl.DoDragDrop(this.dragDropInfo, DragDropEffects.Move);
+ this.downHit = null;
+ }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
+ }
+
+ #endregion
+
+ #region grid_GiveFeedback
+
+ private void grid_GiveFeedback(object sender, GiveFeedbackEventArgs e)
+ {
+ // this event is called on the source of the drag operation
+ e.UseDefaultCursors = false;
+ if (e.Effect == DragDropEffects.Move)
+ {
+ if (this.dragDropInfo.EditMode == EditMode.InsertBefore)
+ Cursor.Current = Cursors.PanNE;
+ else if (this.dragDropInfo.EditMode == EditMode.InsertAfter)
+ Cursor.Current = Cursors.PanSE;
+ else
+ Cursor.Current = Cursors.HSplit;
+ }
+ else if (sender == this.gridRight)
+ Cursor.Current = Cursors.PanWest;
+ else
+ Cursor.Current = Cursors.No;
+ }
+
+ #endregion
+
+ #region gridLeft_DragOver
+
+ private void gridLeft_DragOver(object sender, DragEventArgs e)
+ {
+ if (this.dragDropInfo == null) // drag operation from outside ChanSort
+ return;
+
+ // this event is called on the current target of the drag operation
+ var point = this.gridLeft.PointToClient(MousePosition);
+ var hit = this.gviewLeft.CalcHitInfo(point);
+ if (hit.RowHandle >= 0)
+ {
+ var vi = (GridViewInfo) this.gviewLeft.GetViewInfo();
+ var rowInfo = vi.GetGridRowInfo(hit.RowHandle);
+ var dropChannel = (ChannelInfo) this.gviewLeft.GetRow(hit.RowHandle);
+ var moveUp = this.dragDropInfo.SourcePosition < 0 || dropChannel.GetPosition(this.subListIndex) <= this.dragDropInfo.SourcePosition;
+ if (moveUp && point.Y < rowInfo.Bounds.Top + rowInfo.Bounds.Height/2)
+ this.dragDropInfo.EditMode = EditMode.InsertBefore;
+ else if (!moveUp && point.Y > rowInfo.Bounds.Top + rowInfo.Bounds.Height/2)
+ this.dragDropInfo.EditMode = EditMode.InsertAfter;
+ else if (this.dragDropInfo.SourceView == this.gviewLeft)
+ this.dragDropInfo.EditMode = EditMode.Swap;
+ else if (moveUp)
+ this.dragDropInfo.EditMode = EditMode.InsertAfter;
+ else
+ this.dragDropInfo.EditMode = EditMode.InsertBefore;
+
+ this.dragDropInfo.DropRowHandle = hit.RowHandle;
+ e.Effect = DragDropEffects.Move;
+ return;
+ }
+
+ e.Effect = DragDropEffects.None;
+ this.dragDropInfo.DropRowHandle = GridControl.InvalidRowHandle;
+ }
+
+ #endregion
+
+ #region gridLeft_DragDrop
+
+ private void gridLeft_DragDrop(object sender, DragEventArgs e)
+ {
+ try
+ {
+ if (this.dragDropInfo.DropRowHandle < 0) return;
+ this.curEditMode = this.dragDropInfo.EditMode;
+ var dropChannel = (ChannelInfo) this.gviewLeft.GetRow(this.dragDropInfo.DropRowHandle);
+
+ var selectedChannels = this.GetSelectedChannels(this.dragDropInfo.SourceView);
+ int newProgNr;
+ var dropPos = dropChannel.GetPosition(this.subListIndex);
+ if (this.dragDropInfo.EditMode != EditMode.InsertAfter || !this.cbCloseGap.Checked)
+ newProgNr = dropPos;
+ else
+ {
+ var numberOfChannelsToMoveDown = 0;
+ foreach (var channel in selectedChannels)
+ {
+ var curPos = channel.GetPosition(this.subListIndex);
+ if (curPos != -1 && curPos <= dropPos)
+ ++numberOfChannelsToMoveDown;
+ }
+ newProgNr = dropPos + 1 - numberOfChannelsToMoveDown;
+ }
+
+ this.Editor.SetSlotNumber(selectedChannels, newProgNr, this.dragDropInfo.EditMode == EditMode.Swap, this.cbCloseGap.Checked);
+ this.RefreshGrid(this.gviewLeft, this.gviewRight);
+ }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
+ }
+
+ #endregion
+
+ #region gridLeft_ProcessGridKey
+
+ private void gridLeft_ProcessGridKey(object sender, KeyEventArgs e)
+ {
+ if (this.CurrentChannelList != null && this.CurrentChannelList.ReadOnly)
+ return;
+ if (gviewLeft.ActiveEditor != null)
+ return;
+ if (e.KeyCode == Keys.Delete)
+ TryExecute(() => this.RemoveChannels(this.gviewLeft, this.cbCloseGap.Checked));
+ else if (e.KeyCode == Keys.Add)
+ TryExecute(() => this.MoveChannels(false));
+ else if (e.KeyCode == Keys.Subtract)
+ TryExecute(() => this.MoveChannels(true));
+ else
+ return;
+ e.Handled = true;
+ e.SuppressKeyPress = true;
+ }
+
+ #endregion
+
+ #region gviewLeft_FocusedRowChanged
+
+ private void gviewLeft_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
+ {
+ TryExecute(UpdateInsertSlotNumber);
+ }
+
+ #endregion
+
+ #region gviewLeft_SelectionChanged
+
+ private void gviewLeft_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ this.UpdateMenu();
+ }
+
+ #endregion
+
+ #region gviewLeft_CustomColumnDisplayText
+
+ private void gviewLeft_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
+ {
+ if (e.Column == this.colOutFav)
+ {
+ if (!(e.Value is Favorites)) return;
+ if ((Favorites) e.Value == 0)
+ e.DisplayText = string.Empty;
+ }
+ }
+
+ #endregion
+
+ #region gviewLeft_RowCellStyle
+
+ private void gviewLeft_RowCellStyle(object sender, RowCellStyleEventArgs e)
+ {
+ var channel = (ChannelInfo) this.gviewLeft.GetRow(e.RowHandle);
+ if (channel == null) return;
+ if (channel.OldProgramNr == -1)
+ {
+ e.Appearance.ForeColor = Color.Red;
+ e.Appearance.Options.UseForeColor = true;
+ }
+ else if (channel.Hidden)
+ {
+ e.Appearance.ForeColor = Color.LightGray;
+ e.Appearance.Options.UseForeColor = true;
+ }
+ else if (channel.Skip)
+ {
+ e.Appearance.ForeColor = Color.Blue;
+ e.Appearance.Options.UseForeColor = true;
+ }
+ }
+
+ #endregion
+
+ #region gviewLeft_ValidatingEditor
+
+ private void gviewLeft_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e)
+ {
+ try
+ {
+ if (gviewLeft.FocusedRowHandle == GridControl.AutoFilterRowHandle)
+ return;
+ if (this.gviewLeft.FocusedColumn == this.colOutSlot && e.Value is string)
+ e.Valid = this.SetSlotNumber((string) e.Value);
+ else if (this.gviewLeft.FocusedColumn == this.colOutFav && e.Value is string)
+ e.Value = ChannelInfo.ParseFavString((string) e.Value);
+ else if (gviewLeft.FocusedColumn == this.colOutName)
+ {
+ this.VerifyChannelNameModified(this.gviewLeft.GetFocusedRow() as ChannelInfo, e.Value as string);
+ this.BeginInvoke((Action) (() => RefreshGrid(this.gviewLeft)));
+ }
+ DataRoot.NeedsSaving = true;
+ }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
+ }
+
+ #endregion
+
+ #region gviewLeft_CellValueChanged
+
+ private void gviewLeft_CellValueChanged(object sender, CellValueChangedEventArgs e)
+ {
+ this.gviewRight.BeginDataUpdate();
+ this.gviewRight.EndDataUpdate();
+ }
+
+ #endregion
+
+ #region gviewLeft_PopupMenuShowing
+
+ private void gviewLeft_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
+ {
+ this.lastFocusedGrid = this.gviewLeft;
+ this.UpdateMenu();
+ if (e.MenuType == GridMenuType.Row && e.HitInfo.InRow && this.gviewLeft.IsDataRow(e.HitInfo.RowHandle))
+ this.popupContext.ShowPopup(this.gridLeft.PointToScreen(e.Point));
+ }
+
+ #endregion
+
+ #region gviewLeft_RowClick
+
+ private void gviewLeft_RowClick(object sender, RowClickEventArgs e)
+ {
+ if (e.Clicks == 2 && e.Button == MouseButtons.Left && this.gviewLeft.IsDataRow(e.RowHandle))
+ {
+ var channel = (ChannelInfo) this.gviewLeft.GetRow(e.RowHandle);
+ this.NavigateToChannel(channel, this.gviewRight);
+ }
+ }
+
+ #endregion
+
+ #region gviewLeft_EndSorting
+
+ private void gviewLeft_EndSorting(object sender, EventArgs e)
+ {
+ TryExecute(this.UpdateMenu);
+ }
+
+ #endregion
+
+ #region gridRight_ProcessGridKey
+
+ private void gridRight_ProcessGridKey(object sender, KeyEventArgs e)
+ {
+ if (this.gviewRight.ActiveEditor != null)
+ return;
+ if (e.KeyCode == Keys.Enter && this.CurrentChannelList != null && !this.CurrentChannelList.ReadOnly)
+ {
+ TryExecute(this.AddChannels);
+ e.Handled = true;
+ }
+ }
+
+ #endregion
+
+ #region gviewRight_FocusedRowChanged
+
+ private void gviewRight_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
+ {
+ this.gviewRight.SelectRow(e.FocusedRowHandle);
+ }
+
+ #endregion
+
+ #region gviewRight_CustomColumnDisplayText
+
+ private void gviewRight_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
+ {
+ if (e.Column == this.colSlotNew || e.Column == this.colSlotOld || e.Column == this.colPrNr)
+ {
+ if (!(e.Value is int)) return;
+ if ((int) e.Value == -1)
+ e.DisplayText = string.Empty;
+ }
+ else if (e.Column == this.colFavorites)
+ {
+ if (!(e.Value is Favorites)) return;
+ if ((Favorites) e.Value == 0)
+ e.DisplayText = string.Empty;
+ }
+ }
+
+ #endregion
+
+ #region gviewRight_RowCellStyle
+
+ private void gviewRight_RowCellStyle(object sender, RowCellStyleEventArgs e)
+ {
+ var channel = (ChannelInfo) this.gviewRight.GetRow(e.RowHandle);
+ if (channel == null) return;
+ if (channel.OldProgramNr == -1)
+ {
+ e.Appearance.ForeColor = Color.Red;
+ e.Appearance.Options.UseForeColor = true;
+ }
+ else if (channel.GetPosition(this.subListIndex) != -1)
+ {
+ e.Appearance.ForeColor = Color.Gray;
+ e.Appearance.Options.UseForeColor = true;
+ }
+ }
+
+ #endregion
+
+ #region gviewRight_RowClick
+
+ private void gviewRight_RowClick(object sender, RowClickEventArgs e)
+ {
+ if (e.Clicks == 2 && e.Button == MouseButtons.Left && this.gviewRight.IsDataRow(e.RowHandle))
+ TryExecute(this.AddChannels);
+ }
+
+ #endregion
+
+ #region gviewRight_ValidatingEditor
+
+ private void gviewRight_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e)
+ {
+ try
+ {
+ if (gviewRight.FocusedRowHandle == GridControl.AutoFilterRowHandle)
+ return;
+ if (this.gviewRight.FocusedColumn == this.colSlotNew && e.Value is string)
+ e.Valid = this.SetSlotNumber((string) e.Value);
+ else if (this.gviewRight.FocusedColumn == this.colFavorites && e.Value is string)
+ e.Value = ChannelInfo.ParseFavString((string) e.Value);
+ else if (gviewRight.FocusedColumn == this.colName)
+ {
+ var ci = this.gviewRight.GetFocusedRow() as ChannelInfo;
+ this.VerifyChannelNameModified(ci, e.Value as string);
+ //this.BeginInvoke((Action) (() => RefreshGrid(this.gviewLeft)));
+ }
+ DataRoot.NeedsSaving = true;
+ }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
+ }
+
+ #endregion
+
+ #region gviewRight_CellValueChanged
+
+ private void gviewRight_CellValueChanged(object sender, CellValueChangedEventArgs e)
+ {
+ TryExecute(() => RefreshGrid(this.gviewLeft));
+ }
+
+ #endregion
+
+ #region gviewRight_PopupMenuShowing
+
+ private void gviewRight_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
+ {
+ this.lastFocusedGrid = this.gviewRight;
+ this.UpdateMenu();
+ if (e.MenuType == GridMenuType.Row)
+ this.popupContext.ShowPopup(this.gridRight.PointToScreen(e.Point));
+ }
+
+ #endregion
+
+ #region rbInsertMode_CheckedChanged
+
+ private void rbInsertMode_CheckedChanged(object sender, EventArgs e)
+ {
+ if (!((CheckEdit) sender).Checked)
+ return;
+ try
+ {
+ if (this.CurrentChannelList == null)
+ return;
+ var delta = this.curEditMode == EditMode.InsertAfter
+ ? -1
+ : this.rbInsertAfter.Checked ? +1 : 0;
+ this.CurrentChannelList.InsertProgramNumber += delta;
+ this.UpdateInsertSlotTextBox();
+ this.curEditMode = this.rbInsertBefore.Checked
+ ? EditMode.InsertBefore
+ : this.rbInsertAfter.Checked
+ ? EditMode.InsertAfter
+ : EditMode.Swap;
+ }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
+ }
+
+ #endregion
+
+ #region btnAdd_Click
+
+ private void btnAdd_Click(object sender, EventArgs e)
+ {
+ TryExecute(this.AddChannels);
+ }
+
+ #endregion
+
+ #region txtSetSlot_EditValueChanged
+
+ private void txtSetSlot_EditValueChanged(object sender, EventArgs e)
+ {
+ TryExecute(() =>
+ {
+ int nr;
+ int.TryParse(this.txtSetSlot.Text, out nr);
+ if (this.CurrentChannelList != null)
+ this.CurrentChannelList.InsertProgramNumber = nr;
+ });
+ }
+
+ #endregion
+
+ #region btnRenum_Click
+
+ private void btnRenum_Click(object sender, EventArgs e)
+ {
+ TryExecute(this.RenumberSelectedChannels);
+ }
+
+ #endregion
+
+ #region MainForm_FormClosing
+
+ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (this.PromptSaveAndContinue())
+ this.SaveSettings();
+ else
+ e.Cancel = true;
+ }
+
+ #endregion
+
+ #region btnAddAll_Click
+
+ private void btnAddAll_Click(object sender, EventArgs e)
+ {
+ this.TryExecute(this.AddAllUnsortedChannels);
+ }
+
+ #endregion
+
+ #region miRenumFavByPrNr_ItemClick
+
+ private void miRenumFavByPrNr_ItemClick(object sender, ItemClickEventArgs e)
+ {
+ TryExecute(this.Editor.ApplyPrNrToFavLists);
+ this.RefreshGrid(this.gviewLeft, this.gviewRight);
+ }
+
+ #endregion
+
+ #region miAllowEditPredefinedLists_DownChanged
+
+ private void miAllowEditPredefinedLists_DownChanged(object sender, ItemClickEventArgs e)
+ {
+ TryExecute(() =>
+ {
+ this.UpdateGridReadOnly();
+ this.UpdateMenu();
+ });
+ }
+
+ #endregion
+
+ #region enum EditMode
+
+ private enum EditMode
+ {
+ InsertBefore = 0,
+ InsertAfter = 1,
+ Swap = 2
+ }
+
+ #endregion
+
+ #region class DragDropInfo
+
+ private class DragDropInfo
+ {
+ public readonly int SourcePosition;
+ public readonly GridView SourceView;
+ public int DropRowHandle = -1;
+ public EditMode EditMode;
+
+ public DragDropInfo(GridView source, int sourcePosition)
+ {
+ this.SourceView = source;
+ this.SourcePosition = sourcePosition;
+ }
+ }
+
+ #endregion
+
+ #region SaveSettings(), GetGridLayout()
+
+ private void SaveSettings()
+ {
+ this.gviewRight.PostEditor();
+ this.gviewLeft.PostEditor();
+
+ Settings.Default.WindowSize = this.WindowState == FormWindowState.Normal ? this.Size : this.RestoreBounds.Size;
+ Settings.Default.Encoding = this.defaultEncoding.WebName;
+ Settings.Default.Language = Thread.CurrentThread.CurrentUICulture.Name;
+ Settings.Default.LeftPanelWidth = this.splitContainerControl1.SplitterPosition;
+ Settings.Default.OutputListLayout = GetGridLayout(this.gviewLeft);
+ if (this.CurrentChannelList != null)
+ SaveInputGridLayout(this.CurrentChannelList.SignalSource);
+ Settings.Default.ShowWarningsAfterLoading = this.miShowWarningsAfterLoad.Checked;
+ Settings.Default.CloseGaps = this.cbCloseGap.Checked;
+ for (var i = 0; i < this.mruFiles.Count; i++)
+ Settings.Default.GetType().GetProperty("MruFile" + i).SetValue(Settings.Default, this.mruFiles[i], null);
+
+ Settings.Default.Save();
+ }
+
+ private string GetGridLayout(GridView grid)
+ {
+ var stream = new MemoryStream();
+ grid.SaveLayoutToStream(stream, OptionsLayoutBase.FullLayout);
+ stream.Seek(0, SeekOrigin.Begin);
+ using (var rdr = new StreamReader(stream, Encoding.UTF8))
+ return rdr.ReadToEnd();
+ }
+
+ #endregion
+
+ #region ClearLeftFilter(), ClearRightFilter()
+
+ private void ClearLeftFilter()
+ {
+ this.gviewLeft.BeginSort();
+ this.gviewLeft.ClearColumnsFilter();
+ this.colOutSlot.FilterInfo = new ColumnFilterInfo("[Position]<>-1");
+ this.gviewLeft.EndSort();
+ }
+
+ private void ClearRightFilter()
+ {
+ this.gviewRight.BeginSort();
+ this.gviewRight.ClearColumnsFilter();
+ this.colSlotOld.FilterInfo = new ColumnFilterInfo("[OldProgramNr]<>-1");
+ if (this.subListIndex > 0)
+ this.colPrNr.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
+ this.gviewRight.EndSort();
+ }
+
+ #endregion
+
+ #region RefreshGrid()
+
+ internal void RefreshGrids()
+ {
+ RefreshGrid(this.gviewLeft, this.gviewRight);
+ }
+
+ private void RefreshGrid(params GridView[] grids)
+ {
+ foreach (var grid in grids)
+ {
+ grid.BeginDataUpdate();
+ grid.EndDataUpdate();
+ }
+ }
+
+ #endregion
+
+ #region Accessibility
private void FocusRightList()
{
@@ -1744,39 +2464,11 @@ namespace ChanSort.Ui
this.gridLeft.Focus();
}
-#endregion
-
- // UI events
-
-#region MainForm_Load
- private void MainForm_Load(object sender, EventArgs e)
- {
- this.TryExecute(this.LoadSettings);
- this.TryExecute(this.InitAppAfterMainWindowWasShown);
- }
-#endregion
-
-#region ProcessCmdKey()
- protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
- {
- if (keyData == Keys.F1)
- {
- this.popupInputSource.ShowPopup(this.tabChannelList.PointToScreen(new Point(0, this.tabChannelList.Height)));
- return true;
- }
-
- if (keyData == (Keys.F1 | Keys.Shift))
- {
- this.popupFavList.ShowPopup(this.tabSubList.PointToScreen(new Point(0, this.tabSubList.Height)));
- return true;
- }
- return base.ProcessCmdKey(ref msg, keyData);
- }
-#endregion
+ #endregion
// -- menus
-#region File menu
+ #region File menu
private void miOpen_ItemClick(object sender, ItemClickEventArgs e)
{
@@ -1840,12 +2532,12 @@ namespace ChanSort.Ui
private void miRecentFiles_ListItemClick(object sender, ListItemClickEventArgs e)
{
- TryExecute(()=>this.LoadFiles(null, this.mruFiles[e.Index]));
+ TryExecute(() => this.LoadFiles(null, this.mruFiles[e.Index]));
}
-#endregion
+ #endregion
-#region Edit menu
+ #region Edit menu
private void miMoveDown_ItemClick(object sender, ItemClickEventArgs e)
{
@@ -1879,13 +2571,13 @@ namespace ChanSort.Ui
private void miFavSet_ItemClick(object sender, ItemClickEventArgs e)
{
- string fav = e.Item.Tag as string;
+ var fav = e.Item.Tag as string;
this.SetFavorite(fav, true);
}
private void miFavUnset_ItemClick(object sender, ItemClickEventArgs e)
{
- string fav = e.Item.Tag as string;
+ var fav = e.Item.Tag as string;
this.SetFavorite(fav, false);
}
@@ -1918,43 +2610,24 @@ namespace ChanSort.Ui
{
this.TryExecute(() => this.SetChannelFlag(ch => ch.Hidden = false));
}
-#endregion
-#region Language menu
- private void miLanguage_DownChanged(object sender, ItemClickEventArgs e)
- {
- try
- {
- if (this.ignoreLanguageChange)
- return;
- BarButtonItem menuItem = (BarButtonItem)sender;
- if (!menuItem.Down)
- return;
- if (!this.PromptSaveAndContinue())
- return;
- string locale = (string)menuItem.Tag;
- Program.ChangeLanguage = true;
- Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale);
- this.Close();
- }
- catch (Exception ex) { HandleException(ex); }
- }
-#endregion
+ #endregion
+
+ #region TV-Set menu
-#region TV-Set menu
private void miTvCountrySetup_ItemClick(object sender, ItemClickEventArgs e)
{
this.TryExecute(this.ShowTvCountrySettings);
}
-
+
private void miCleanupChannels_ItemClick(object sender, ItemClickEventArgs e)
{
this.TryExecute(this.CleanupChannelData);
}
-#endregion
+ #endregion
-#region Character set menu
+ #region Character set menu
private void miIsoCharSets_ListItemClick(object sender, ListItemClickEventArgs e)
{
@@ -1970,9 +2643,10 @@ namespace ChanSort.Ui
{
SetDefaultEncoding(e.Encoding);
}
-#endregion
-#region Help menu
+ #endregion
+
+ #region Help menu
private void miWiki_ItemClick(object sender, ItemClickEventArgs e)
{
@@ -1986,11 +2660,12 @@ namespace ChanSort.Ui
private void miAbout_ItemClick(object sender, ItemClickEventArgs e)
{
- TryExecute(() => new AboutForm(this.plugins).ShowDialog());
+ TryExecute(() => new AboutForm(this.Plugins).ShowDialog());
}
-#endregion
-#region Accessibility menu
+ #endregion
+
+ #region Accessibility menu
private void miInputSource_ItemClick(object sender, ItemClickEventArgs e)
{
@@ -2001,11 +2676,14 @@ namespace ChanSort.Ui
{
try
{
- int idx = Convert.ToInt32(e.Item.Tag);
+ var idx = Convert.ToInt32(e.Item.Tag);
if (this.grpSubList.Visible && idx < this.tabSubList.TabPages.Count)
this.tabSubList.SelectedTabPageIndex = idx;
}
- catch (Exception ex) { HandleException(ex); }
+ catch (Exception ex)
+ {
+ HandleException(ex);
+ }
}
private void miGotoLeftFilter_ItemClick(object sender, ItemClickEventArgs e)
@@ -2028,61 +2706,16 @@ namespace ChanSort.Ui
TryExecute(this.FocusRightList);
}
-#endregion
+ #endregion
- // -- controls
-
-#region picDonate_Click
- private void picDonate_Click(object sender, EventArgs e)
- {
- BrowserHelper.OpenHtml(Resources.paypal_button);
- }
-#endregion
-
-#region tabChannelList_SelectedPageChanged
- private void tabChannelList_SelectedPageChanged(object sender, TabPageChangedEventArgs e)
- {
- this.TryExecute(() => ShowChannelList(e.Page == null ? null : (ChannelList)e.Page.Tag));
- }
-#endregion
-
-#region tabSubList_SelectedPageChanged
- private void tabSubList_SelectedPageChanged(object sender, TabPageChangedEventArgs e)
- {
- this.subListIndex = this.tabSubList.SelectedTabPageIndex;
- this.ShowGridColumns(this.gviewRight);
-
- this.editor.SubListIndex = this.subListIndex;
- this.gviewLeft.BeginSort();
- this.gviewLeft.EndSort();
- this.gviewRight.BeginSort();
- if (this.subListIndex > 0)
- this.colPrNr.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
- else
- this.colPrNr.ClearFilter();
- this.gviewRight.EndSort();
- }
-#endregion
-
-#region gview_CustomUnboundColumnData
- private void gview_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
- {
- var channel = (ChannelInfo) e.Row;
- if (e.Column.FieldName == "Position")
- e.Value = channel.GetPosition(this.subListIndex);
- else if (e.Column.FieldName == "OldPosition")
- e.Value = channel.GetOldPosition(this.subListIndex);
- }
-#endregion
-
-#region gview_MouseDown, gview_MouseUp, timerEditDelay_Tick, gview_ShowingEditor
+ #region gview_MouseDown, gview_MouseUp, timerEditDelay_Tick, gview_ShowingEditor
// 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)
{
- GridView view = (GridView)sender;
+ var view = (GridView) sender;
this.downHit = view.CalcHitInfo(e.Location);
this.dragDropInfo = null;
if (!view.IsDataRow(downHit.RowHandle))
@@ -2100,7 +2733,7 @@ namespace ChanSort.Ui
if (ModifierKeys == Keys.Control && !view.IsRowSelected(downHit.RowHandle))
this.BeginInvoke((Action) (() => view.SelectRow(downHit.RowHandle)));
}
- }
+ }
else if (e.Button == MouseButtons.Right)
{
if (!view.IsRowSelected(downHit.RowHandle))
@@ -2128,282 +2761,36 @@ namespace ChanSort.Ui
}
}
- private void gview_ShowingEditor(object sender, System.ComponentModel.CancelEventArgs e)
+ private void gview_ShowingEditor(object sender, CancelEventArgs e)
{
var field = ((GridView) sender).FocusedColumn.FieldName;
if (this.dontOpenEditor && (field == this.colSlotNew.FieldName || field == this.colName.FieldName))
e.Cancel = true;
}
-#endregion
-#region gview_ShownEditor, gview_KeyPress
+ #endregion
+
+ #region gview_ShownEditor, gview_KeyPress
private void gview_ShownEditor(object sender, EventArgs e)
{
- GridView view = (GridView)sender;
- TextEdit edit = view.ActiveEditor as TextEdit;
+ var view = (GridView) sender;
+ var edit = view.ActiveEditor as TextEdit;
if (edit == null) return;
- edit.Properties.MaxLength = view.FocusedColumn.FieldName == "Name" ? this.currentChannelList.MaxChannelNameLength : 0;
+ edit.Properties.MaxLength = view.FocusedColumn.FieldName == "Name" ? this.CurrentChannelList.MaxChannelNameLength : 0;
}
private void gview_KeyPress(object sender, KeyPressEventArgs e)
{
- var view = (GridView)sender;
+ var view = (GridView) sender;
if (view.FocusedColumn.DisplayFormat.FormatType == FormatType.Numeric && (e.KeyChar < '0' || e.KeyChar > '9'))
e.Handled = true;
}
-#endregion
-#region gview_MouseMove
- private void gview_MouseMove(object sender, MouseEventArgs e)
- {
- try
- {
- var view = (GridView)sender;
- if (this.downHit == null || downHit.RowHandle < 0 || e.Button != MouseButtons.Left || view.ActiveEditor != null || ModifierKeys != Keys.None)
- return;
- if (this.currentChannelList == null || this.currentChannelList.ReadOnly)
- return;
- // drag/drop only allowed when left grid is sorted by NewSlotNr
- if (!this.IsLeftGridSortedByNewProgNr)
- return;
- if (Math.Abs(e.Y - downHit.HitPoint.Y) < SystemInformation.DragSize.Height &&
- Math.Abs(e.X - downHit.HitPoint.X) < SystemInformation.DragSize.Width)
- return;
+ #endregion
- // start drag operation
- var channel = (ChannelInfo)view.GetRow(downHit.RowHandle);
- this.dragDropInfo = new DragDropInfo(view, channel.GetPosition(this.subListIndex));
- view.GridControl.DoDragDrop(this.dragDropInfo, DragDropEffects.Move);
- this.downHit = null;
- }
- catch (Exception ex) { HandleException(ex); }
- }
-#endregion
+ #region gviewLeft_LayoutUpgrade, gviewRight_LayoutUpgrade
-#region grid_GiveFeedback
- private void grid_GiveFeedback(object sender, GiveFeedbackEventArgs e)
- {
- // this event is called on the source of the drag operation
- e.UseDefaultCursors = false;
- if (e.Effect == DragDropEffects.Move)
- {
- if (this.dragDropInfo.EditMode == EditMode.InsertBefore)
- Cursor.Current = Cursors.PanNE;
- else if (this.dragDropInfo.EditMode == EditMode.InsertAfter)
- Cursor.Current = Cursors.PanSE;
- else
- Cursor.Current = Cursors.HSplit;
- }
- else if (sender == this.gridRight)
- Cursor.Current = Cursors.PanWest;
- else
- Cursor.Current = Cursors.No;
- }
-#endregion
-
-#region gridLeft_DragOver
- private void gridLeft_DragOver(object sender, DragEventArgs e)
- {
- if (this.dragDropInfo == null) // drag operation from outside ChanSort
- return;
-
- // this event is called on the current target of the drag operation
- var point = this.gridLeft.PointToClient(MousePosition);
- var hit = this.gviewLeft.CalcHitInfo(point);
- if (hit.RowHandle >= 0)
- {
- var vi = (DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo)this.gviewLeft.GetViewInfo();
- var rowInfo = vi.GetGridRowInfo(hit.RowHandle);
- ChannelInfo dropChannel = (ChannelInfo)this.gviewLeft.GetRow(hit.RowHandle);
- bool moveUp = this.dragDropInfo.SourcePosition < 0 || dropChannel.GetPosition(this.subListIndex) <= this.dragDropInfo.SourcePosition;
- if (moveUp && point.Y < rowInfo.Bounds.Top + rowInfo.Bounds.Height / 2)
- this.dragDropInfo.EditMode = EditMode.InsertBefore;
- else if (!moveUp && point.Y > rowInfo.Bounds.Top + rowInfo.Bounds.Height / 2)
- this.dragDropInfo.EditMode = EditMode.InsertAfter;
- else if (this.dragDropInfo.SourceView == this.gviewLeft)
- this.dragDropInfo.EditMode = EditMode.Swap;
- else if (moveUp)
- this.dragDropInfo.EditMode = EditMode.InsertAfter;
- else
- this.dragDropInfo.EditMode = EditMode.InsertBefore;
-
- this.dragDropInfo.DropRowHandle = hit.RowHandle;
- e.Effect = DragDropEffects.Move;
- return;
- }
-
- e.Effect = DragDropEffects.None;
- this.dragDropInfo.DropRowHandle = GridControl.InvalidRowHandle;
- }
-#endregion
-
-#region gridLeft_DragDrop
- private void gridLeft_DragDrop(object sender, DragEventArgs e)
- {
- try
- {
- if (this.dragDropInfo.DropRowHandle < 0) return;
- this.curEditMode = this.dragDropInfo.EditMode;
- var dropChannel = (ChannelInfo)this.gviewLeft.GetRow(this.dragDropInfo.DropRowHandle);
-
- var selectedChannels = this.GetSelectedChannels(this.dragDropInfo.SourceView);
- int newProgNr;
- int dropPos = dropChannel.GetPosition(this.subListIndex);
- if (this.dragDropInfo.EditMode != EditMode.InsertAfter || !this.cbCloseGap.Checked)
- newProgNr = dropPos;
- else
- {
- int numberOfChannelsToMoveDown = 0;
- foreach (var channel in selectedChannels)
- {
- int curPos = channel.GetPosition(this.subListIndex);
- if (curPos != -1 && curPos <= dropPos)
- ++numberOfChannelsToMoveDown;
- }
- newProgNr = dropPos + 1 - numberOfChannelsToMoveDown;
- }
-
- this.editor.SetSlotNumber(selectedChannels, newProgNr, this.dragDropInfo.EditMode == EditMode.Swap, this.cbCloseGap.Checked);
- this.RefreshGrid(this.gviewLeft, this.gviewRight);
- }
- catch (Exception ex)
- {
- HandleException(ex);
- }
- }
-#endregion
-
-#region gridLeft_ProcessGridKey
- private void gridLeft_ProcessGridKey(object sender, KeyEventArgs e)
- {
- if (this.currentChannelList != null && this.currentChannelList.ReadOnly)
- return;
- if (gviewLeft.ActiveEditor != null)
- return;
- if (e.KeyCode == Keys.Delete)
- TryExecute(() => this.RemoveChannels(this.gviewLeft, this.cbCloseGap.Checked));
- else if (e.KeyCode == Keys.Add)
- TryExecute(() => this.MoveChannels(false));
- else if (e.KeyCode == Keys.Subtract)
- TryExecute(() => this.MoveChannels(true));
- else
- return;
- e.Handled = true;
- e.SuppressKeyPress = true;
- }
-#endregion
-
-#region gviewLeft_FocusedRowChanged
-
- private void gviewLeft_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
- {
- TryExecute(UpdateInsertSlotNumber);
- }
-
-#endregion
-
-#region gviewLeft_SelectionChanged
- private void gviewLeft_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e)
- {
- this.UpdateMenu();
- }
-#endregion
-
-#region gviewLeft_CustomColumnDisplayText
- private void gviewLeft_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
- {
- if (e.Column == this.colOutFav)
- {
- if (!(e.Value is Favorites)) return;
- if ((Favorites)e.Value == 0)
- e.DisplayText = string.Empty;
- }
- }
-#endregion
-
-#region gviewLeft_RowCellStyle
- private void gviewLeft_RowCellStyle(object sender, RowCellStyleEventArgs e)
- {
- var channel = (ChannelInfo)this.gviewLeft.GetRow(e.RowHandle);
- if (channel == null) return;
- if (channel.OldProgramNr == -1)
- {
- e.Appearance.ForeColor = Color.Red;
- e.Appearance.Options.UseForeColor = true;
- }
- else if (channel.Hidden)
- {
- e.Appearance.ForeColor = Color.LightGray;
- e.Appearance.Options.UseForeColor = true;
- }
- else if (channel.Skip)
- {
- e.Appearance.ForeColor = Color.Blue;
- e.Appearance.Options.UseForeColor = true;
- }
- }
-#endregion
-
-#region gviewLeft_ValidatingEditor
- private void gviewLeft_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e)
- {
- try
- {
- if (gviewLeft.FocusedRowHandle == GridControl.AutoFilterRowHandle)
- return;
- if (this.gviewLeft.FocusedColumn == this.colOutSlot && e.Value is string)
- e.Valid = this.SetSlotNumber((string)e.Value);
- else if (this.gviewLeft.FocusedColumn == this.colOutFav && e.Value is string)
- e.Value = ChannelInfo.ParseFavString((string)e.Value);
- else if (gviewLeft.FocusedColumn == this.colOutName)
- {
- this.VerifyChannelNameModified(this.gviewLeft.GetFocusedRow() as ChannelInfo, e.Value as string);
- this.BeginInvoke((Action)(() => RefreshGrid(this.gviewLeft)));
- }
- dataRoot.NeedsSaving = true;
- }
- catch (Exception ex) { HandleException(ex); }
- }
-#endregion
-
-#region gviewLeft_CellValueChanged
- private void gviewLeft_CellValueChanged(object sender, CellValueChangedEventArgs e)
- {
- this.gviewRight.BeginDataUpdate();
- this.gviewRight.EndDataUpdate();
- }
-#endregion
-
-#region gviewLeft_PopupMenuShowing
- private void gviewLeft_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
- {
- this.lastFocusedGrid = this.gviewLeft;
- this.UpdateMenu();
- if (e.MenuType == GridMenuType.Row && e.HitInfo.InRow && this.gviewLeft.IsDataRow(e.HitInfo.RowHandle))
- this.popupContext.ShowPopup(this.gridLeft.PointToScreen(e.Point));
- }
-#endregion
-
-#region gviewLeft_RowClick
- private void gviewLeft_RowClick(object sender, RowClickEventArgs e)
- {
- if (e.Clicks == 2 && e.Button == MouseButtons.Left && this.gviewLeft.IsDataRow(e.RowHandle))
- {
- ChannelInfo channel = (ChannelInfo)this.gviewLeft.GetRow(e.RowHandle);
- this.NavigateToChannel(channel, this.gviewRight);
- }
- }
-#endregion
-
-#region gviewLeft_EndSorting
- private void gviewLeft_EndSorting(object sender, EventArgs e)
- {
- TryExecute(this.UpdateMenu);
- }
-#endregion
-
-#region gviewLeft_LayoutUpgrade, gviewRight_LayoutUpgrade
private void gviewLeft_LayoutUpgrade(object sender, LayoutUpgradeEventArgs e)
{
this.gviewLeft.ClearGrouping();
@@ -2415,134 +2802,11 @@ namespace ChanSort.Ui
this.gviewRight.ClearGrouping();
this.gviewRight.OptionsCustomization.AllowGroup = false;
}
-#endregion
-#region gridRight_ProcessGridKey
- private void gridRight_ProcessGridKey(object sender, KeyEventArgs e)
- {
- if (this.gviewRight.ActiveEditor != null)
- return;
- if (e.KeyCode == Keys.Enter && this.currentChannelList != null && !this.currentChannelList.ReadOnly)
- {
- TryExecute(this.AddChannels);
- e.Handled = true;
- }
- }
+ #endregion
-#endregion
+ #region btnClearLeftFilter_Click, btnClearRightFilter_Click
-#region gviewRight_FocusedRowChanged
- private void gviewRight_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
- {
- this.gviewRight.SelectRow(e.FocusedRowHandle);
- }
-#endregion
-
-#region gviewRight_CustomColumnDisplayText
- private void gviewRight_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
- {
- if (e.Column == this.colSlotNew || e.Column == this.colSlotOld || e.Column == this.colPrNr)
- {
- if (!(e.Value is int)) return;
- if ((int) e.Value == -1)
- e.DisplayText = string.Empty;
- }
- else if (e.Column == this.colFavorites)
- {
- if (!(e.Value is Favorites)) return;
- if ((Favorites) e.Value == 0)
- e.DisplayText = string.Empty;
- }
- }
-#endregion
-
-#region gviewRight_RowCellStyle
- private void gviewRight_RowCellStyle(object sender, RowCellStyleEventArgs e)
- {
- ChannelInfo channel = (ChannelInfo)this.gviewRight.GetRow(e.RowHandle);
- if (channel == null) return;
- if (channel.OldProgramNr == -1)
- {
- e.Appearance.ForeColor = Color.Red;
- e.Appearance.Options.UseForeColor = true;
- }
- else if (channel.GetPosition(this.subListIndex) != -1)
- {
- e.Appearance.ForeColor = Color.Gray;
- e.Appearance.Options.UseForeColor = true;
- }
- }
-#endregion
-
-#region gviewRight_RowClick
- private void gviewRight_RowClick(object sender, RowClickEventArgs e)
- {
- if (e.Clicks == 2 && e.Button == MouseButtons.Left && this.gviewRight.IsDataRow(e.RowHandle))
- TryExecute(this.AddChannels);
- }
-#endregion
-
-#region gviewRight_ValidatingEditor
- private void gviewRight_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e)
- {
- try
- {
- if (gviewRight.FocusedRowHandle == GridControl.AutoFilterRowHandle)
- return;
- if (this.gviewRight.FocusedColumn == this.colSlotNew && e.Value is string)
- e.Valid = this.SetSlotNumber((string)e.Value);
- else if (this.gviewRight.FocusedColumn == this.colFavorites && e.Value is string)
- e.Value = ChannelInfo.ParseFavString((string)e.Value);
- else if (gviewRight.FocusedColumn == this.colName)
- {
- var ci = this.gviewRight.GetFocusedRow() as ChannelInfo;
- this.VerifyChannelNameModified(ci, e.Value as string);
- //this.BeginInvoke((Action) (() => RefreshGrid(this.gviewLeft)));
- }
- dataRoot.NeedsSaving = true;
- } catch(Exception ex) { HandleException(ex); }
- }
-#endregion
-
-#region gviewRight_CellValueChanged
- private void gviewRight_CellValueChanged(object sender, CellValueChangedEventArgs e)
- {
- TryExecute(() => RefreshGrid(this.gviewLeft));
- }
-#endregion
-
-#region gviewRight_PopupMenuShowing
- private void gviewRight_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
- {
- this.lastFocusedGrid = this.gviewRight;
- this.UpdateMenu();
- if (e.MenuType == GridMenuType.Row)
- this.popupContext.ShowPopup(this.gridRight.PointToScreen(e.Point));
- }
-#endregion
-
-
-#region rbInsertMode_CheckedChanged
- private void rbInsertMode_CheckedChanged(object sender, EventArgs e)
- {
- if (!((CheckEdit)sender).Checked)
- return;
- try
- {
- if (this.currentChannelList == null)
- return;
- int delta = this.curEditMode == EditMode.InsertAfter ? -1 :
- this.rbInsertAfter.Checked ? +1 : 0;
- this.currentChannelList.InsertProgramNumber += delta;
- this.UpdateInsertSlotTextBox();
- this.curEditMode = this.rbInsertBefore.Checked ? EditMode.InsertBefore
- : this.rbInsertAfter.Checked ? EditMode.InsertAfter
- : EditMode.Swap;
- } catch(Exception ex) { HandleException(ex); }
- }
-#endregion
-
-#region btnClearLeftFilter_Click, btnClearRightFilter_Click
private void btnClearLeftFilter_Click(object sender, EventArgs e)
{
TryExecute(this.ClearLeftFilter);
@@ -2552,17 +2816,10 @@ namespace ChanSort.Ui
{
TryExecute(this.ClearRightFilter);
}
-#endregion
-#region btnAdd_Click
+ #endregion
- private void btnAdd_Click(object sender, EventArgs e)
- {
- TryExecute(this.AddChannels);
- }
-#endregion
-
-#region btnRemoveLeft_Click, btnRemoveRight_Click
+ #region btnRemoveLeft_Click, btnRemoveRight_Click
private void btnRemoveLeft_Click(object sender, EventArgs e)
{
@@ -2573,9 +2830,10 @@ namespace ChanSort.Ui
{
this.TryExecute(() => this.RemoveChannels(this.gviewRight, this.cbCloseGap.Checked));
}
-#endregion
-#region btnUp_Click, btnDown_Click
+ #endregion
+
+ #region btnUp_Click, btnDown_Click
private void btnUp_Click(object sender, EventArgs e)
{
@@ -2587,22 +2845,10 @@ namespace ChanSort.Ui
TryExecute(() => MoveChannels(false));
}
-#endregion
+ #endregion
-#region txtSetSlot_EditValueChanged
- private void txtSetSlot_EditValueChanged(object sender, EventArgs e)
- {
- TryExecute(() =>
- {
- int nr;
- int.TryParse(this.txtSetSlot.Text, out nr);
- if (this.currentChannelList != null)
- this.currentChannelList.InsertProgramNumber = nr;
- });
- }
-#endregion
+ #region txtSetSlot_ButtonClick, txtSetSlot_KeyDown
-#region txtSetSlot_ButtonClick, txtSetSlot_KeyDown
private void txtSetSlot_ButtonClick(object sender, ButtonPressedEventArgs e)
{
TryExecute(() => this.SetSlotNumber(this.txtSetSlot.Text));
@@ -2616,36 +2862,14 @@ namespace ChanSort.Ui
e.Handled = true;
}
}
-#endregion
-#region btnRenum_Click
- private void btnRenum_Click(object sender, EventArgs e)
- {
- TryExecute(this.RenumberSelectedChannels);
- }
-#endregion
+ #endregion
-#region MainForm_FormClosing
- private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (this.PromptSaveAndContinue())
- this.SaveSettings();
- else
- e.Cancel = true;
- }
-#endregion
+ #region btnToggleFav_Click, btnToggleLock_Click
-#region btnAddAll_Click
- private void btnAddAll_Click(object sender, EventArgs e)
- {
- this.TryExecute(this.AddAllUnsortedChannels);
- }
-#endregion
-
-#region btnToggleFav_Click, btnToggleLock_Click
private void btnToggleFav_Click(object sender, EventArgs e)
{
- string fav = ((Control) sender).Text.Substring(1);
+ var fav = ((Control) sender).Text.Substring(1);
this.TryExecute(() => this.ToggleFavorite(fav));
}
@@ -2653,9 +2877,11 @@ namespace ChanSort.Ui
{
this.TryExecute(this.ToggleLock);
}
-#endregion
-#region grpOutputList_Enter, grpInputList_Enter
+ #endregion
+
+ #region grpOutputList_Enter, grpInputList_Enter
+
private void grpOutputList_Enter(object sender, EventArgs e)
{
this.SetActiveGrid(this.gviewLeft);
@@ -2665,26 +2891,7 @@ namespace ChanSort.Ui
{
this.SetActiveGrid(this.gviewRight);
}
-#endregion
-#region miRenumFavByPrNr_ItemClick
- private void miRenumFavByPrNr_ItemClick(object sender, ItemClickEventArgs e)
- {
- TryExecute(this.editor.ApplyPrNrToFavLists);
- this.RefreshGrid(this.gviewLeft, this.gviewRight);
- }
-
-#endregion
-
-#region miAllowEditPredefinedLists_DownChanged
- private void miAllowEditPredefinedLists_DownChanged(object sender, ItemClickEventArgs e)
- {
- TryExecute(() =>
- {
- this.UpdateGridReadOnly();
- this.UpdateMenu();
- });
- }
-#endregion
+ #endregion
}
-}
+}
\ No newline at end of file