mirror of
https://github.com/PredatH0r/ChanSort.git
synced 2026-01-14 19:32:04 +01:00
- support for individually sorted favorite lists (Panasonic, Samsung E+F)
- FIX: "insert after" when dropping a channel from right list
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
@@ -8,38 +9,43 @@ namespace ChanSort.Api
|
||||
{
|
||||
public DataRoot DataRoot;
|
||||
public ChannelList ChannelList;
|
||||
public int SubListIndex;
|
||||
private UnsortedChannelMode unsortedChannelMode;
|
||||
|
||||
#region AddChannels()
|
||||
|
||||
public ChannelInfo AddChannels(IList<ChannelInfo> channels)
|
||||
{
|
||||
int count = channels.Count(channel => channel.NewProgramNr == -1);
|
||||
int count = channels.Count(channel => channel.GetPosition(this.SubListIndex) == -1);
|
||||
if (count == 0) return null;
|
||||
|
||||
ChannelInfo lastInsertedChannel = null;
|
||||
int progNr = this.ChannelList.InsertProgramNumber;
|
||||
int relativeChannelNumber = 0;
|
||||
int progNrCopy = progNr; // prevent "access to modified closure" warning
|
||||
foreach(var channel in this.ChannelList.Channels.Where(c => c.NewProgramNr>=progNrCopy).OrderBy(c=>c.NewProgramNr))
|
||||
foreach (
|
||||
var channel in
|
||||
this.ChannelList.Channels.Where(c => c.GetPosition(this.SubListIndex) >= progNrCopy)
|
||||
.OrderBy(c => c.GetPosition(this.SubListIndex)))
|
||||
{
|
||||
int gap = count - (channel.NewProgramNr - progNr - relativeChannelNumber);
|
||||
var curPos = channel.GetPosition(this.SubListIndex);
|
||||
int gap = count - (curPos - progNr - relativeChannelNumber);
|
||||
if (gap > 0)
|
||||
{
|
||||
channel.NewProgramNr += gap;
|
||||
channel.SetPosition(this.SubListIndex, curPos + gap);
|
||||
++relativeChannelNumber;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var channel in channels)
|
||||
{
|
||||
if (channel.NewProgramNr != -1)
|
||||
if (channel.GetPosition(this.SubListIndex) != -1)
|
||||
{
|
||||
// TODO notify user
|
||||
continue;
|
||||
}
|
||||
|
||||
channel.NewProgramNr = progNr++;
|
||||
channel.SetPosition(this.SubListIndex, progNr++);
|
||||
lastInsertedChannel = channel;
|
||||
}
|
||||
this.ChannelList.InsertProgramNumber += count;
|
||||
@@ -47,6 +53,7 @@ namespace ChanSort.Api
|
||||
this.DataRoot.NeedsSaving |= lastInsertedChannel != null;
|
||||
return lastInsertedChannel;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region RemoveChannels()
|
||||
@@ -55,27 +62,30 @@ namespace ChanSort.Api
|
||||
{
|
||||
if (channels.Count == 0) return;
|
||||
|
||||
this.ChannelList.InsertProgramNumber = channels[0].NewProgramNr;
|
||||
var orderedChannelList = this.ChannelList.Channels.Where(c => c.NewProgramNr != -1).OrderBy(c => c.NewProgramNr);
|
||||
this.ChannelList.InsertProgramNumber = channels[0].GetPosition(this.SubListIndex);
|
||||
var orderedChannelList =
|
||||
this.ChannelList.Channels.Where(c => c.GetPosition(this.SubListIndex) != -1)
|
||||
.OrderBy(c => c.GetPosition(this.SubListIndex));
|
||||
foreach (var channel in channels)
|
||||
{
|
||||
if (channel.NewProgramNr == -1)
|
||||
if (channel.GetPosition(this.SubListIndex) == -1)
|
||||
continue;
|
||||
if (closeGap)
|
||||
{
|
||||
int prevNr = channel.NewProgramNr;
|
||||
int prevNr = channel.GetPosition(this.SubListIndex);
|
||||
foreach (var channel2 in orderedChannelList)
|
||||
{
|
||||
if (channel2.NewProgramNr > channel.NewProgramNr)
|
||||
if (channel2.GetPosition(this.SubListIndex) > channel.GetPosition(this.SubListIndex))
|
||||
{
|
||||
if (prevNr != -1 && channel2.NewProgramNr != prevNr + 1) // don't pull down numbers after a gap
|
||||
if (prevNr != -1 && channel2.GetPosition(this.SubListIndex) != prevNr + 1)
|
||||
// don't pull down numbers after a gap
|
||||
break;
|
||||
prevNr = channel2.NewProgramNr;
|
||||
--channel2.NewProgramNr;
|
||||
prevNr = channel2.GetPosition(this.SubListIndex);
|
||||
channel2.ChangePosition(this.SubListIndex, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
channel.NewProgramNr = -1;
|
||||
channel.SetPosition(this.SubListIndex, -1);
|
||||
}
|
||||
|
||||
this.DataRoot.NeedsSaving = true;
|
||||
@@ -89,17 +99,18 @@ namespace ChanSort.Api
|
||||
{
|
||||
if (channels.Count == 0)
|
||||
return;
|
||||
if (up && channels[0].NewProgramNr <= this.ChannelList.FirstProgramNumber)
|
||||
if (up && channels[0].GetPosition(this.SubListIndex) <= this.ChannelList.FirstProgramNumber)
|
||||
return;
|
||||
|
||||
int delta = (up ? - 1 : +1);
|
||||
int delta = (up ? -1 : +1);
|
||||
foreach (var channel in (up ? channels : channels.Reverse()))
|
||||
{
|
||||
int newProgramNr = channel.NewProgramNr + delta;
|
||||
ChannelInfo channelAtNewProgramNr = this.ChannelList.Channels.FirstOrDefault(ch => ch.NewProgramNr == newProgramNr);
|
||||
if (channelAtNewProgramNr != null)
|
||||
channelAtNewProgramNr.NewProgramNr -= delta;
|
||||
channel.NewProgramNr += delta;
|
||||
int newProgramNr = channel.GetPosition(this.SubListIndex) + delta;
|
||||
ChannelInfo channelAtNewPos =
|
||||
this.ChannelList.Channels.FirstOrDefault(ch => ch.GetPosition(this.SubListIndex) == newProgramNr);
|
||||
if (channelAtNewPos != null)
|
||||
channelAtNewPos.ChangePosition(this.SubListIndex, -delta);
|
||||
channel.ChangePosition(this.SubListIndex, delta);
|
||||
}
|
||||
this.DataRoot.NeedsSaving = true;
|
||||
}
|
||||
@@ -107,15 +118,16 @@ namespace ChanSort.Api
|
||||
#endregion
|
||||
|
||||
#region SortSelectedChannels(), ChannelComparerForSortingByName()
|
||||
|
||||
public void SortSelectedChannels(List<ChannelInfo> selectedChannels)
|
||||
{
|
||||
if (selectedChannels.Count == 0) return;
|
||||
var sortedChannels = new List<ChannelInfo>(selectedChannels);
|
||||
sortedChannels.Sort(this.ChannelComparerForSortingByName);
|
||||
var programNumbers = selectedChannels.Select(ch => ch.NewProgramNr).ToList();
|
||||
var programNumbers = selectedChannels.Select(ch => ch.GetPosition(this.SubListIndex)).ToList();
|
||||
for (int i = 0; i < sortedChannels.Count; i++)
|
||||
sortedChannels[i].NewProgramNr = programNumbers[i];
|
||||
|
||||
sortedChannels[i].SetPosition(this.SubListIndex, programNumbers[i]);
|
||||
|
||||
this.DataRoot.NeedsSaving = true;
|
||||
}
|
||||
|
||||
@@ -123,9 +135,11 @@ namespace ChanSort.Api
|
||||
{
|
||||
return channel1.Name.CompareTo(channel2.Name);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SetSlotNumber()
|
||||
|
||||
public void SetSlotNumber(IList<ChannelInfo> channels, int slot, bool swap, bool closeGap)
|
||||
{
|
||||
if (channels.Count == 0) return;
|
||||
@@ -137,9 +151,9 @@ namespace ChanSort.Api
|
||||
{
|
||||
var others = this.ChannelList.GetChannelByNewProgNr(slot);
|
||||
foreach (var other in others)
|
||||
other.NewProgramNr = channel.NewProgramNr;
|
||||
other.SetPosition(this.SubListIndex, channel.GetPosition(this.SubListIndex));
|
||||
}
|
||||
channel.NewProgramNr = slot++;
|
||||
channel.SetPosition(this.SubListIndex, slot++);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -150,16 +164,18 @@ namespace ChanSort.Api
|
||||
}
|
||||
this.DataRoot.NeedsSaving = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region RenumberChannels()
|
||||
|
||||
public void RenumberChannels(List<ChannelInfo> channels)
|
||||
{
|
||||
if (channels.Count == 0) return;
|
||||
int progNr = channels.Min(ch => ch.NewProgramNr);
|
||||
foreach(var channel in channels)
|
||||
int progNr = channels.Min(ch => ch.GetPosition(this.SubListIndex));
|
||||
foreach (var channel in channels)
|
||||
{
|
||||
if (channel.NewProgramNr == progNr)
|
||||
if (channel.GetPosition(this.SubListIndex) == progNr)
|
||||
{
|
||||
++progNr;
|
||||
continue;
|
||||
@@ -173,17 +189,18 @@ namespace ChanSort.Api
|
||||
this.DataRoot.NeedsSaving = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region ApplyReferenceList()
|
||||
|
||||
public void ApplyReferenceList(DataRoot refDataRoot)
|
||||
{
|
||||
|
||||
foreach (var channelList in this.DataRoot.ChannelLists)
|
||||
{
|
||||
foreach (var channel in channelList.Channels)
|
||||
channel.NewProgramNr = -1;
|
||||
channel.SetPosition(this.SubListIndex, -1);
|
||||
}
|
||||
|
||||
StringBuilder log = new StringBuilder();
|
||||
@@ -198,10 +215,10 @@ namespace ChanSort.Api
|
||||
foreach (var refChannel in refList.Channels)
|
||||
{
|
||||
var tvChannels = tvList.GetChannelByUid(refChannel.Uid);
|
||||
ChannelInfo tvChannel = tvChannels.FirstOrDefault(c => c.NewProgramNr == -1);
|
||||
ChannelInfo tvChannel = tvChannels.FirstOrDefault(c => c.GetPosition(this.SubListIndex) == -1);
|
||||
if (tvChannel != null)
|
||||
{
|
||||
tvChannel.NewProgramNr = refChannel.OldProgramNr;
|
||||
tvChannel.SetPosition(this.SubListIndex, refChannel.OldProgramNr);
|
||||
tvChannel.Favorites = refChannel.Favorites;
|
||||
tvChannel.Skip = refChannel.Skip;
|
||||
tvChannel.Lock = refChannel.Lock;
|
||||
@@ -210,7 +227,8 @@ namespace ChanSort.Api
|
||||
}
|
||||
else
|
||||
{
|
||||
tvChannel = new ChannelInfo(refChannel.SignalSource, refChannel.Uid, refChannel.OldProgramNr, refChannel.Name);
|
||||
tvChannel = new ChannelInfo(refChannel.SignalSource, refChannel.Uid, refChannel.OldProgramNr,
|
||||
refChannel.Name);
|
||||
tvList.AddChannel(tvChannel);
|
||||
}
|
||||
}
|
||||
@@ -237,18 +255,19 @@ namespace ChanSort.Api
|
||||
if (appChannel.NewProgramNr == -1 && mode == UnsortedChannelMode.MarkDeleted)
|
||||
continue;
|
||||
|
||||
int progNr = GetNewProgramNr(appChannel, ref maxProgNr);
|
||||
int progNr = GetNewPogramNr(appChannel, ref maxProgNr);
|
||||
appChannel.NewProgramNr = progNr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region ChanSortCriteria()
|
||||
|
||||
private string ChanSortCriteria(ChannelInfo channel)
|
||||
{
|
||||
// explicitly sorted
|
||||
if (channel.NewProgramNr != -1)
|
||||
return channel.NewProgramNr.ToString("d4");
|
||||
if (channel.GetPosition(this.SubListIndex) != -1)
|
||||
return channel.GetPosition(this.SubListIndex).ToString("d4");
|
||||
|
||||
// eventually hide unsorted channels
|
||||
if (this.unsortedChannelMode == UnsortedChannelMode.MarkDeleted)
|
||||
@@ -265,10 +284,12 @@ namespace ChanSort.Api
|
||||
return "C";
|
||||
return "A" + channel.Name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetNewProgramNr()
|
||||
private int GetNewProgramNr(ChannelInfo appChannel, ref int maxPrNr)
|
||||
#region GetNewPogramNr()
|
||||
|
||||
private int GetNewPogramNr(ChannelInfo appChannel, ref int maxPrNr)
|
||||
{
|
||||
int prNr = appChannel.NewProgramNr;
|
||||
if (prNr > maxPrNr)
|
||||
@@ -280,8 +301,51 @@ namespace ChanSort.Api
|
||||
}
|
||||
return prNr;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region SetFavorites()
|
||||
public void SetFavorites(List<ChannelInfo> list, Favorites favorites, bool set)
|
||||
{
|
||||
bool sortedFav = this.DataRoot.SortedFavorites;
|
||||
int favIndex = 0;
|
||||
if (sortedFav)
|
||||
{
|
||||
for (int mask = (int) favorites; (mask & 1) == 0; mask >>= 1)
|
||||
++favIndex;
|
||||
}
|
||||
|
||||
if (set)
|
||||
{
|
||||
int maxPosition = 0;
|
||||
if (sortedFav)
|
||||
{
|
||||
foreach (var channel in this.ChannelList.Channels)
|
||||
maxPosition = Math.Max(maxPosition, channel.FavIndex[favIndex]);
|
||||
}
|
||||
|
||||
foreach (var channel in list)
|
||||
{
|
||||
if (sortedFav && channel.FavIndex[favIndex] == -1)
|
||||
channel.FavIndex[favIndex] = ++maxPosition;
|
||||
channel.Favorites |= favorites;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var channel in list)
|
||||
{
|
||||
if (sortedFav && channel.FavIndex[favIndex] != -1)
|
||||
{
|
||||
channel.FavIndex[favIndex] = -1;
|
||||
// TODO close gap by pulling down higher numbers
|
||||
}
|
||||
channel.Favorites &= ~favorites;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace ChanSort.Api
|
||||
public bool ChannelNameEdit { get; set; }
|
||||
public bool FileInformation { get; set; }
|
||||
public bool CleanUpChannelData { get; set; }
|
||||
|
||||
public bool DeviceSettings { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ namespace ChanSort.Api
|
||||
{
|
||||
public class ChannelInfo
|
||||
{
|
||||
private const int MAX_FAV_LISTS = 5;
|
||||
|
||||
private string uid;
|
||||
/// <summary>
|
||||
/// List of channels that have the same UID as this channel and were not added to the channel list directly
|
||||
@@ -38,6 +40,7 @@ namespace ChanSort.Api
|
||||
public string Debug { get; private set; }
|
||||
public string SatPosition { get; set; }
|
||||
public Transponder Transponder { get; set; }
|
||||
public IList<int> FavIndex { get; private set; }
|
||||
|
||||
public bool IsNameModified { get; set; }
|
||||
|
||||
@@ -45,12 +48,15 @@ namespace ChanSort.Api
|
||||
protected ChannelInfo()
|
||||
{
|
||||
this.NewProgramNr = -1;
|
||||
this.FavIndex = new List<int>(MAX_FAV_LISTS);
|
||||
for (int i = 0; i < MAX_FAV_LISTS; i++)
|
||||
this.FavIndex.Add(-1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for exiting TV channel
|
||||
/// </summary>
|
||||
public ChannelInfo(SignalSource source, int index, int oldProgNr, string name)
|
||||
public ChannelInfo(SignalSource source, int index, int oldProgNr, string name) : this()
|
||||
{
|
||||
this.SignalSource = source;
|
||||
this.RecordIndex = index;
|
||||
@@ -64,7 +70,7 @@ namespace ChanSort.Api
|
||||
/// <summary>
|
||||
/// Constructor for reference list channels which no longer exist in TV list
|
||||
/// </summary>
|
||||
public ChannelInfo(SignalSource source, string uid, int newProgNr, string name)
|
||||
public ChannelInfo(SignalSource source, string uid, int newProgNr, string name) : this()
|
||||
{
|
||||
this.SignalSource = source;
|
||||
this.Uid = uid;
|
||||
@@ -203,12 +209,47 @@ namespace ChanSort.Api
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateRawData()
|
||||
public virtual void UpdateRawData()
|
||||
{
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ChangeEncoding()
|
||||
public virtual void ChangeEncoding(System.Text.Encoding encoding)
|
||||
{
|
||||
{
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetPosition(), SetPosition(), ChangePosition()
|
||||
|
||||
public int GetPosition(int subListIndex)
|
||||
{
|
||||
return subListIndex == 0 ? this.NewProgramNr : this.FavIndex[subListIndex - 1];
|
||||
}
|
||||
|
||||
public void SetPosition(int subListIndex, int newPos)
|
||||
{
|
||||
if (subListIndex == 0)
|
||||
this.NewProgramNr = newPos;
|
||||
else
|
||||
{
|
||||
this.FavIndex[subListIndex - 1] = newPos;
|
||||
int mask = 1 << (subListIndex - 1);
|
||||
if (newPos == -1)
|
||||
this.Favorites &= (Favorites)~mask;
|
||||
else
|
||||
this.Favorites |= (Favorites)mask;
|
||||
}
|
||||
}
|
||||
|
||||
internal void ChangePosition(int subListIndex, int delta)
|
||||
{
|
||||
if (subListIndex == 0)
|
||||
this.NewProgramNr += delta;
|
||||
else
|
||||
this.FavIndex[subListIndex - 1] += delta;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ namespace ChanSort.Api
|
||||
public bool IsEmpty { get { return this.channelLists.Count == 0; } }
|
||||
public bool NeedsSaving { get; set; }
|
||||
public Favorites SupportedFavorites { get; set; }
|
||||
public bool SortedFavorites { get; set; }
|
||||
|
||||
public DataRoot()
|
||||
{
|
||||
|
||||
@@ -55,7 +55,10 @@ namespace ChanSort.Loader.Panasonic
|
||||
{
|
||||
int favIndex = r.GetInt32(field["profile" + (i + 1) + "index"]);
|
||||
if (favIndex > 0)
|
||||
this.Favorites |= (Favorites)(1 << i);
|
||||
{
|
||||
this.Favorites |= (Favorites) (1 << i);
|
||||
this.FavIndex[i] = favIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -302,6 +302,7 @@ namespace ChanSort.Loader.Panasonic
|
||||
public Serializer(string inputFile) : base(inputFile)
|
||||
{
|
||||
this.Features.ChannelNameEdit = true;
|
||||
this.DataRoot.SortedFavorites = true;
|
||||
|
||||
this.DataRoot.AddChannelList(this.avbtChannels);
|
||||
this.DataRoot.AddChannelList(this.avbcChannels);
|
||||
@@ -538,8 +539,6 @@ order by s.ntype,major_channel
|
||||
#region WriteChannels()
|
||||
private void WriteChannels(SQLiteCommand cmd, ChannelList channelList)
|
||||
{
|
||||
int[] favIndex = new int[4];
|
||||
|
||||
cmd.CommandText = "update SVL set major_channel=@progNr, sname=@name, profile1index=@fav1, profile2index=@fav2, profile3index=@fav3, profile4index=@fav4, child_lock=@lock, skip=@skip where rowid=@rowid";
|
||||
cmd.Parameters.Clear();
|
||||
cmd.Parameters.Add(new SQLiteParameter("@rowid", DbType.Int32));
|
||||
@@ -560,7 +559,7 @@ order by s.ntype,major_channel
|
||||
cmd.Parameters["@rowid"].Value = channel.RecordIndex;
|
||||
cmd.Parameters["@progNr"].Value = channel.NewProgramNr;
|
||||
for (int fav = 0; fav < 4; fav++)
|
||||
cmd.Parameters["@fav" + (fav + 1)].Value = ((int) channel.Favorites & (1<<fav)) == 0 ? 0 : ++favIndex[fav];
|
||||
cmd.Parameters["@fav" + (fav + 1)].Value = Math.Max(0, channel.FavIndex[fav]);
|
||||
cmd.Parameters["@name"].Value = channel.Name;
|
||||
cmd.Parameters["@lock"].Value = channel.Lock;
|
||||
cmd.Parameters["@skip"].Value = channel.Skip;
|
||||
|
||||
@@ -71,12 +71,16 @@ namespace ChanSort.Loader.Samsung
|
||||
// series D,E,F
|
||||
byte fav = 0;
|
||||
byte mask = 0x01;
|
||||
int favIndex = 0;
|
||||
foreach (int off in offsets)
|
||||
{
|
||||
int favValue = BitConverter.ToInt32(this.rawData, baseOffset + off);
|
||||
if (sortedFavorites && favValue != -1 || !sortedFavorites && favValue != 0)
|
||||
fav |= mask;
|
||||
if (sortedFavorites)
|
||||
this.FavIndex[favIndex] = favValue;
|
||||
mask <<= 1;
|
||||
++favIndex;
|
||||
}
|
||||
return (Favorites) fav;
|
||||
}
|
||||
@@ -135,15 +139,17 @@ namespace ChanSort.Loader.Samsung
|
||||
// series D,E,F
|
||||
byte fav = (byte)this.Favorites;
|
||||
byte mask = 0x01;
|
||||
int favIndex = 0;
|
||||
foreach (int off in offsets)
|
||||
{
|
||||
int favValue;
|
||||
if (this.sortedFavorites)
|
||||
favValue = (fav & mask) != 0 ? this.NewProgramNr : -1;
|
||||
favValue = (fav & mask) != 0 ? this.FavIndex[favIndex] : -1;
|
||||
else
|
||||
favValue = (fav & mask) != 0 ? 1 : 0;
|
||||
Array.Copy(BitConverter.GetBytes(favValue), 0, this.rawData, baseOffset + off, 4);
|
||||
mask <<= 1;
|
||||
++favIndex;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -92,6 +92,7 @@ namespace ChanSort.Loader.Samsung
|
||||
{
|
||||
DetectModelConstants(zip);
|
||||
DataRoot.SupportedFavorites = c.supportedFavorites;
|
||||
DataRoot.SortedFavorites = c.SortedFavorites;
|
||||
|
||||
ReadAnalogFineTuning(zip);
|
||||
ReadAnalogChannels(zip, "map-AirA", this.avbtChannels, out this.avbtFileContent, this.avbtFrequency);
|
||||
|
||||
44
ChanSort/MainForm.Designer.cs
generated
44
ChanSort/MainForm.Designer.cs
generated
@@ -163,6 +163,9 @@
|
||||
this.pageEmpty = new DevExpress.XtraTab.XtraTabPage();
|
||||
this.mnuContext = new DevExpress.XtraBars.PopupMenu(this.components);
|
||||
this.timerEditDelay = new System.Windows.Forms.Timer(this.components);
|
||||
this.grpSubList = new DevExpress.XtraEditors.GroupControl();
|
||||
this.tabSubList = new DevExpress.XtraTab.XtraTabControl();
|
||||
this.pageProgNr = new DevExpress.XtraTab.XtraTabPage();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit();
|
||||
this.splitContainerControl1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpOutputList)).BeginInit();
|
||||
@@ -193,6 +196,10 @@
|
||||
((System.ComponentModel.ISupportInitialize)(this.tabChannelList)).BeginInit();
|
||||
this.tabChannelList.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.mnuContext)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpSubList)).BeginInit();
|
||||
this.grpSubList.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.tabSubList)).BeginInit();
|
||||
this.tabSubList.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// splitContainerControl1
|
||||
@@ -274,6 +281,7 @@
|
||||
this.gviewLeft.EndSorting += new System.EventHandler(this.gviewLeft_EndSorting);
|
||||
this.gviewLeft.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gviewLeft_FocusedRowChanged);
|
||||
this.gviewLeft.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.gviewLeft_CellValueChanged);
|
||||
this.gviewLeft.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.gview_CustomUnboundColumnData);
|
||||
this.gviewLeft.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(this.gviewLeft_CustomColumnDisplayText);
|
||||
this.gviewLeft.LayoutUpgrade += new DevExpress.Utils.LayoutUpgadeEventHandler(this.gviewLeft_LayoutUpgrade);
|
||||
this.gviewLeft.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.gview_KeyPress);
|
||||
@@ -300,10 +308,11 @@
|
||||
resources.ApplyResources(this.colOutSlot, "colOutSlot");
|
||||
this.colOutSlot.DisplayFormat.FormatString = "d";
|
||||
this.colOutSlot.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
|
||||
this.colOutSlot.FieldName = "NewProgramNr";
|
||||
this.colOutSlot.FieldName = "Position";
|
||||
this.colOutSlot.Name = "colOutSlot";
|
||||
this.colOutSlot.OptionsFilter.AllowAutoFilter = false;
|
||||
this.colOutSlot.OptionsFilter.AllowFilterModeChanging = DevExpress.Utils.DefaultBoolean.False;
|
||||
this.colOutSlot.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
|
||||
//
|
||||
// colOutName
|
||||
//
|
||||
@@ -546,6 +555,7 @@
|
||||
this.gviewRight.ShownEditor += new System.EventHandler(this.gview_ShownEditor);
|
||||
this.gviewRight.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gviewRight_FocusedRowChanged);
|
||||
this.gviewRight.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.gviewRight_CellValueChanged);
|
||||
this.gviewRight.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.gview_CustomUnboundColumnData);
|
||||
this.gviewRight.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(this.gviewRight_CustomColumnDisplayText);
|
||||
this.gviewRight.LayoutUpgrade += new DevExpress.Utils.LayoutUpgadeEventHandler(this.gviewRight_LayoutUpgrade);
|
||||
this.gviewRight.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.gview_KeyPress);
|
||||
@@ -576,8 +586,9 @@
|
||||
resources.ApplyResources(this.colSlotNew, "colSlotNew");
|
||||
this.colSlotNew.DisplayFormat.FormatString = "d";
|
||||
this.colSlotNew.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
|
||||
this.colSlotNew.FieldName = "NewProgramNr";
|
||||
this.colSlotNew.FieldName = "Position";
|
||||
this.colSlotNew.Name = "colSlotNew";
|
||||
this.colSlotNew.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
|
||||
//
|
||||
// colName
|
||||
//
|
||||
@@ -1547,11 +1558,33 @@
|
||||
this.timerEditDelay.Interval = 500;
|
||||
this.timerEditDelay.Tick += new System.EventHandler(this.timerEditDelay_Tick);
|
||||
//
|
||||
// grpSubList
|
||||
//
|
||||
this.grpSubList.Controls.Add(this.tabSubList);
|
||||
resources.ApplyResources(this.grpSubList, "grpSubList");
|
||||
this.grpSubList.Name = "grpSubList";
|
||||
this.grpSubList.ShowCaption = false;
|
||||
//
|
||||
// tabSubList
|
||||
//
|
||||
resources.ApplyResources(this.tabSubList, "tabSubList");
|
||||
this.tabSubList.Name = "tabSubList";
|
||||
this.tabSubList.SelectedTabPage = this.pageProgNr;
|
||||
this.tabSubList.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] {
|
||||
this.pageProgNr});
|
||||
this.tabSubList.SelectedPageChanged += new DevExpress.XtraTab.TabPageChangedEventHandler(this.tabSubList_SelectedPageChanged);
|
||||
//
|
||||
// pageProgNr
|
||||
//
|
||||
this.pageProgNr.Name = "pageProgNr";
|
||||
resources.ApplyResources(this.pageProgNr, "pageProgNr");
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.splitContainerControl1);
|
||||
this.Controls.Add(this.grpSubList);
|
||||
this.Controls.Add(this.grpTopPanel);
|
||||
this.Controls.Add(this.barDockControlLeft);
|
||||
this.Controls.Add(this.barDockControlRight);
|
||||
@@ -1593,6 +1626,10 @@
|
||||
((System.ComponentModel.ISupportInitialize)(this.tabChannelList)).EndInit();
|
||||
this.tabChannelList.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.mnuContext)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpSubList)).EndInit();
|
||||
this.grpSubList.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.tabSubList)).EndInit();
|
||||
this.tabSubList.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
@@ -1731,6 +1768,9 @@
|
||||
private DevExpress.XtraBars.BarButtonItem miExcelExport;
|
||||
private DevExpress.XtraEditors.Repository.RepositoryItemTextEdit repositoryItemTextEdit1;
|
||||
private DevExpress.XtraBars.BarButtonItem miPortuguese;
|
||||
private DevExpress.XtraEditors.GroupControl grpSubList;
|
||||
private DevExpress.XtraTab.XtraTabControl tabSubList;
|
||||
private DevExpress.XtraTab.XtraTabPage pageProgNr;
|
||||
private DevExpress.XtraSplashScreen.SplashScreenManager splashScreenManager1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace ChanSort.Ui
|
||||
{
|
||||
public partial class MainForm : XtraForm
|
||||
{
|
||||
public const string AppVersion = "v2013-06-29.3";
|
||||
public const string AppVersion = "v2013-07-03";
|
||||
|
||||
private const int MaxMruEntries = 5;
|
||||
|
||||
@@ -41,14 +41,14 @@ namespace ChanSort.Ui
|
||||
private class DragDropInfo
|
||||
{
|
||||
public readonly GridView SourceView;
|
||||
public readonly int SourceProgramNumber;
|
||||
public readonly int SourcePosition;
|
||||
public EditMode EditMode;
|
||||
public int DropRowHandle = -1;
|
||||
|
||||
public DragDropInfo(GridView source, int sourceProgramNumber)
|
||||
public DragDropInfo(GridView source, int sourcePosition)
|
||||
{
|
||||
this.SourceView = source;
|
||||
this.SourceProgramNumber = sourceProgramNumber;
|
||||
this.SourcePosition = sourcePosition;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
@@ -65,6 +65,7 @@ namespace ChanSort.Ui
|
||||
private Encoding defaultEncoding = Encoding.Default;
|
||||
private readonly List<string> isoEncodings = new List<string>();
|
||||
private ChannelList currentChannelList;
|
||||
private int subListIndex;
|
||||
private GridView lastFocusedGrid;
|
||||
private EditMode curEditMode = EditMode.InsertAfter;
|
||||
private bool dontOpenEditor;
|
||||
@@ -310,6 +311,7 @@ namespace ChanSort.Ui
|
||||
this.repositoryItemCheckedComboBoxEdit2.Items.Clear();
|
||||
byte mask = 0x01;
|
||||
string regex = "[";
|
||||
int favCount = 0;
|
||||
for (int bit=0; bit<8; bit++, mask<<=1)
|
||||
{
|
||||
if (((int) favorites & mask) != 0)
|
||||
@@ -322,11 +324,28 @@ namespace ChanSort.Ui
|
||||
string str = c.ToString();
|
||||
this.miFavSet.Strings.Add(str);
|
||||
this.miFavUnset.Strings.Add(str);
|
||||
++favCount;
|
||||
}
|
||||
}
|
||||
regex += "]*";
|
||||
this.repositoryItemCheckedComboBoxEdit1.Mask.EditMask = regex;
|
||||
this.repositoryItemCheckedComboBoxEdit2.Mask.EditMask = regex;
|
||||
|
||||
while (this.tabSubList.TabPages.Count > favCount + 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);
|
||||
}
|
||||
if (!this.dataRoot.SortedFavorites || this.subListIndex >= favCount)
|
||||
{
|
||||
this.tabSubList.SelectedTabPageIndex = 0;
|
||||
this.subListIndex = 0;
|
||||
}
|
||||
this.grpSubList.Visible = this.dataRoot.SortedFavorites;
|
||||
this.colOutFav.OptionsColumn.AllowEdit = !this.dataRoot.SortedFavorites;
|
||||
this.colFavorites.OptionsColumn.AllowEdit = !this.dataRoot.SortedFavorites;
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -788,7 +807,7 @@ namespace ChanSort.Ui
|
||||
{
|
||||
this.gviewLeft.EndDataUpdate();
|
||||
}
|
||||
this.UpdateInsertSlotTextBox();
|
||||
this.UpdateInsertSlotNumber();
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -843,11 +862,11 @@ namespace ChanSort.Ui
|
||||
this.gviewLeft.BeginDataUpdate();
|
||||
int maxNr = this.currentChannelList.InsertProgramNumber;
|
||||
foreach (var channel in this.currentChannelList.Channels)
|
||||
maxNr = Math.Max(maxNr, channel.NewProgramNr);
|
||||
maxNr = Math.Max(maxNr, channel.GetPosition(this.subListIndex));
|
||||
foreach (var channel in this.currentChannelList.Channels)
|
||||
{
|
||||
if (channel.NewProgramNr == -1 && !channel.IsDeleted)
|
||||
channel.NewProgramNr = maxNr++;
|
||||
if (channel.GetPosition(this.subListIndex) == -1 && !channel.IsDeleted)
|
||||
channel.SetPosition(this.subListIndex, maxNr++);
|
||||
}
|
||||
this.gviewRight.EndDataUpdate();
|
||||
this.gviewLeft.EndDataUpdate();
|
||||
@@ -915,6 +934,7 @@ namespace ChanSort.Ui
|
||||
this.miShowWarningsAfterLoad.Checked = Settings.Default.ShowWarningsAfterLoading;
|
||||
this.cbCloseGap.Checked = Settings.Default.CloseGaps;
|
||||
this.ClearLeftFilter();
|
||||
this.ClearRightFilter();
|
||||
|
||||
for (int i = MaxMruEntries-1; i >= 0; i--)
|
||||
{
|
||||
@@ -1000,6 +1020,26 @@ namespace ChanSort.Ui
|
||||
|
||||
#endregion
|
||||
|
||||
#region UpdateInsertSlotNumber()
|
||||
private void UpdateInsertSlotNumber()
|
||||
{
|
||||
var channel = (ChannelInfo)this.gviewLeft.GetFocusedRow();
|
||||
int programNr;
|
||||
if (channel == null)
|
||||
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;
|
||||
this.UpdateInsertSlotTextBox();
|
||||
this.gviewLeft.SelectRow(this.gviewLeft.FocusedRowHandle);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateInsertSlotTextBox()
|
||||
private void UpdateInsertSlotTextBox()
|
||||
{
|
||||
@@ -1054,7 +1094,7 @@ namespace ChanSort.Ui
|
||||
{
|
||||
this.gviewLeft.BeginSort();
|
||||
this.gviewLeft.ClearColumnsFilter();
|
||||
this.colOutSlot.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
|
||||
this.colOutSlot.FilterInfo = new ColumnFilterInfo("[Position]<>-1");
|
||||
this.gviewLeft.EndSort();
|
||||
}
|
||||
|
||||
@@ -1136,20 +1176,13 @@ namespace ChanSort.Ui
|
||||
{
|
||||
if (string.IsNullOrEmpty(fav)) return;
|
||||
char ch = Char.ToUpper(fav[0]);
|
||||
if (ch<'A' || ch>'D') return;
|
||||
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();
|
||||
Favorites mask = (Favorites)(1 << (ch - 'A'));
|
||||
foreach(var channel in list)
|
||||
{
|
||||
if (set)
|
||||
channel.Favorites |= mask;
|
||||
else
|
||||
channel.Favorites &= ~mask;
|
||||
}
|
||||
this.editor.SetFavorites(list, (Favorites) (1 << (ch - 'A')), set);
|
||||
this.gviewRight.EndDataUpdate();
|
||||
this.gviewLeft.EndDataUpdate();
|
||||
}
|
||||
@@ -1220,11 +1253,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.btnToggleFavB.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.B) != 0;
|
||||
this.btnToggleFavC.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.C) != 0;
|
||||
this.btnToggleFavD.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.D) != 0;
|
||||
this.btnToggleFavE.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.E) != 0;
|
||||
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;
|
||||
@@ -1250,7 +1283,8 @@ namespace ChanSort.Ui
|
||||
bool isLeftGridSortedByNewProgNr = this.IsLeftGridSortedByNewProgNr;
|
||||
var sel = this.gviewLeft.GetSelectedRows();
|
||||
var channel = sel.Length == 0 ? null : (ChannelInfo) this.gviewRight.GetRow(sel[0]);
|
||||
this.miMoveUp.Enabled = this.btnUp.Enabled = mayEdit && isLeftGridSortedByNewProgNr && channel != null && channel.NewProgramNr > this.currentChannelList.FirstProgramNumber;
|
||||
this.miMoveUp.Enabled = this.btnUp.Enabled = mayEdit && isLeftGridSortedByNewProgNr && channel != null
|
||||
&& channel.GetPosition(this.subListIndex) > this.currentChannelList.FirstProgramNumber;
|
||||
this.miMoveDown.Enabled = this.btnDown.Enabled = mayEdit && isLeftGridSortedByNewProgNr;
|
||||
|
||||
this.miTvSettings.Enabled = this.currentTvSerializer != null;
|
||||
@@ -1679,6 +1713,29 @@ namespace ChanSort.Ui
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region tabSubList_SelectedPageChanged
|
||||
private void tabSubList_SelectedPageChanged(object sender, TabPageChangedEventArgs e)
|
||||
{
|
||||
this.subListIndex = this.tabSubList.SelectedTabPageIndex;
|
||||
this.editor.SubListIndex = this.subListIndex;
|
||||
this.gviewLeft.BeginSort();
|
||||
this.gviewLeft.EndSort();
|
||||
this.gviewRight.BeginSort();
|
||||
if (this.subListIndex > 0)
|
||||
this.colSlotNew.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
|
||||
else
|
||||
this.colSlotNew.ClearFilter();
|
||||
this.gviewRight.EndSort();
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void gview_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
|
||||
{
|
||||
var channel = (ChannelInfo) e.Row;
|
||||
if (e.Column.FieldName == "Position")
|
||||
e.Value = channel.GetPosition(this.subListIndex);
|
||||
}
|
||||
|
||||
#region gview_MouseDown, gview_MouseUp, timerEditDelay_Tick, gview_ShowingEditor
|
||||
|
||||
// these 4 event handler in combination override the default row-selection and editor-opening
|
||||
@@ -1777,7 +1834,7 @@ namespace ChanSort.Ui
|
||||
|
||||
// start drag operation
|
||||
var channel = (ChannelInfo)view.GetRow(downHit.RowHandle);
|
||||
this.dragDropInfo = new DragDropInfo(view, channel.NewProgramNr);
|
||||
this.dragDropInfo = new DragDropInfo(view, channel.GetPosition(this.subListIndex));
|
||||
view.GridControl.DoDragDrop(this.dragDropInfo, DragDropEffects.Move);
|
||||
this.downHit = null;
|
||||
}
|
||||
@@ -1817,7 +1874,7 @@ namespace ChanSort.Ui
|
||||
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.SourceProgramNumber < 0 || dropChannel.NewProgramNr <= this.dragDropInfo.SourceProgramNumber;
|
||||
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)
|
||||
@@ -1850,17 +1907,19 @@ namespace ChanSort.Ui
|
||||
|
||||
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 = dropChannel.NewProgramNr;
|
||||
newProgNr = dropPos;
|
||||
else
|
||||
{
|
||||
int numberOfChannelsToMoveDown = 0;
|
||||
foreach (var channel in selectedChannels)
|
||||
{
|
||||
if (channel.NewProgramNr <= dropChannel.NewProgramNr)
|
||||
int curPos = channel.GetPosition(this.subListIndex);
|
||||
if (curPos != -1 && curPos <= dropPos)
|
||||
++numberOfChannelsToMoveDown;
|
||||
}
|
||||
newProgNr = dropChannel.NewProgramNr + 1 - numberOfChannelsToMoveDown;
|
||||
newProgNr = dropPos + 1 - numberOfChannelsToMoveDown;
|
||||
}
|
||||
|
||||
this.editor.SetSlotNumber(selectedChannels, newProgNr, this.dragDropInfo.EditMode == EditMode.Swap, this.cbCloseGap.Checked);
|
||||
@@ -1897,16 +1956,7 @@ namespace ChanSort.Ui
|
||||
|
||||
private void gviewLeft_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
|
||||
{
|
||||
var channel = (ChannelInfo)this.gviewLeft.GetRow(e.FocusedRowHandle);
|
||||
if (channel == null)
|
||||
return;
|
||||
int programNr = channel.NewProgramNr;
|
||||
if (this.rbInsertAfter.Checked)
|
||||
++programNr;
|
||||
if (this.currentChannelList != null)
|
||||
this.currentChannelList.InsertProgramNumber = programNr;
|
||||
this.UpdateInsertSlotTextBox();
|
||||
this.gviewLeft.SelectRow(e.FocusedRowHandle);
|
||||
TryExecute(UpdateInsertSlotNumber);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -2064,7 +2114,7 @@ namespace ChanSort.Ui
|
||||
e.Appearance.ForeColor = Color.Red;
|
||||
e.Appearance.Options.UseForeColor = true;
|
||||
}
|
||||
else if (channel.NewProgramNr != -1)
|
||||
else if (channel.GetPosition(this.subListIndex) != -1)
|
||||
{
|
||||
e.Appearance.ForeColor = Color.Gray;
|
||||
e.Appearance.Options.UseForeColor = true;
|
||||
@@ -2300,5 +2350,6 @@ namespace ChanSort.Ui
|
||||
this.SetActiveGrid(this.gviewRight);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
<value>Programplatz für Einfügen und Festlegen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>ChanSort {0} - Senderlisten-Editor für Samsung, LG und Toshiba TVs</value>
|
||||
<value>ChanSort {0} - Senderlisten-Editor für Samsung, LG, Panasonic und Toshiba TVs</value>
|
||||
</data>
|
||||
<data name="btnToggleLock.ToolTip" xml:space="preserve">
|
||||
<value>Kindersicherung</value>
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="splitContainerControl1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 81</value>
|
||||
<value>0, 108</value>
|
||||
</data>
|
||||
<metadata name="dsChannels.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>361, 17</value>
|
||||
@@ -234,7 +234,7 @@
|
||||
<value>Numeric</value>
|
||||
</data>
|
||||
<data name="gridLeft.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>382, 445</value>
|
||||
<value>382, 418</value>
|
||||
</data>
|
||||
<data name="gridLeft.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@@ -255,7 +255,7 @@
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="lblHotkeyLeft.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>2, 499</value>
|
||||
<value>2, 472</value>
|
||||
</data>
|
||||
<data name="lblHotkeyLeft.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>2, 2, 2, 2</value>
|
||||
@@ -293,6 +293,78 @@
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1474, 599</value>
|
||||
</data>
|
||||
<data name="tabSubList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="tabSubList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 5</value>
|
||||
</data>
|
||||
<data name="pageProgNr.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1463, 0</value>
|
||||
</data>
|
||||
<data name="pageProgNr.Text" xml:space="preserve">
|
||||
<value>Pr#</value>
|
||||
</data>
|
||||
<data name=">>pageProgNr.Name" xml:space="preserve">
|
||||
<value>pageProgNr</value>
|
||||
</data>
|
||||
<data name=">>pageProgNr.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>pageProgNr.Parent" xml:space="preserve">
|
||||
<value>tabSubList</value>
|
||||
</data>
|
||||
<data name=">>pageProgNr.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tabSubList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1469, 22</value>
|
||||
</data>
|
||||
<data name="tabSubList.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>tabSubList.Name" xml:space="preserve">
|
||||
<value>tabSubList</value>
|
||||
</data>
|
||||
<data name=">>tabSubList.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>tabSubList.Parent" xml:space="preserve">
|
||||
<value>grpSubList</value>
|
||||
</data>
|
||||
<data name=">>tabSubList.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="grpSubList.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="grpSubList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 81</value>
|
||||
</data>
|
||||
<data name="grpSubList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1474, 27</value>
|
||||
</data>
|
||||
<data name="grpSubList.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="grpSubList.Text" xml:space="preserve">
|
||||
<value>Sub List</value>
|
||||
</data>
|
||||
<data name="grpSubList.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>grpSubList.Name" xml:space="preserve">
|
||||
<value>grpSubList</value>
|
||||
</data>
|
||||
<data name=">>grpSubList.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>grpSubList.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>grpSubList.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="rbInsertSwap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>256, 6</value>
|
||||
</data>
|
||||
@@ -497,7 +569,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>barDockControlTop.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="barDockControlBottom.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
@@ -518,7 +590,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>barDockControlBottom.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="barDockControlLeft.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
@@ -539,7 +611,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>barDockControlLeft.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="barDockControlRight.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Right</value>
|
||||
@@ -560,7 +632,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>barDockControlRight.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="miMoveUp.Caption" xml:space="preserve">
|
||||
<value>Move up</value>
|
||||
@@ -726,13 +798,13 @@
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="tabChannelList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="tabChannelList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 33</value>
|
||||
</data>
|
||||
<data name="pageEmpty.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>632, 0</value>
|
||||
<value>1284, 0</value>
|
||||
</data>
|
||||
<data name="pageEmpty.Text" xml:space="preserve">
|
||||
<value>No channel lists</value>
|
||||
@@ -750,7 +822,7 @@
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tabChannelList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>638, 22</value>
|
||||
<value>1290, 22</value>
|
||||
</data>
|
||||
<data name="tabChannelList.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
@@ -852,7 +924,7 @@
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>grpTopPanel.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
@@ -1431,7 +1503,7 @@
|
||||
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name="SharedImageCollection.Timestamp" type="System.DateTime, mscorlib">
|
||||
<value>06/29/2013 12:47:45</value>
|
||||
<value>07/02/2013 20:57:05</value>
|
||||
</data>
|
||||
<data name="SharedImageCollection.ImageSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 16</value>
|
||||
@@ -1749,7 +1821,7 @@
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="grpOutputList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>386, 518</value>
|
||||
<value>386, 491</value>
|
||||
</data>
|
||||
<data name="grpOutputList.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@@ -2085,7 +2157,7 @@
|
||||
<value>Signal source</value>
|
||||
</data>
|
||||
<data name="gridRight.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1079, 445</value>
|
||||
<value>1079, 418</value>
|
||||
</data>
|
||||
<data name="gridRight.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@@ -2106,7 +2178,7 @@
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="lblHotkeyRight.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>2, 499</value>
|
||||
<value>2, 472</value>
|
||||
</data>
|
||||
<data name="lblHotkeyRight.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>2, 2, 2, 2</value>
|
||||
@@ -2274,7 +2346,7 @@
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="grpInputList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1083, 518</value>
|
||||
<value>1083, 491</value>
|
||||
</data>
|
||||
<data name="grpInputList.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@@ -2298,7 +2370,7 @@
|
||||
<value>Panel2</value>
|
||||
</data>
|
||||
<data name="splitContainerControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1474, 518</value>
|
||||
<value>1474, 491</value>
|
||||
</data>
|
||||
<data name="splitContainerControl1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
|
||||
24
readme.txt
24
readme.txt
@@ -1,17 +1,18 @@
|
||||
Version v2013-07-01 ======================================================
|
||||
Version v2013-07-03 ======================================================
|
||||
|
||||
This version is identical to Beta v2013-06-29.3
|
||||
Changes since last official version v2013-06-24:
|
||||
- Added support for Panasonic channel list (svl.db and svl.bin format)
|
||||
- Translated UI to Portuguese (Thanks to Vitor Martins Augusto)
|
||||
Changes:
|
||||
- Support for individually sorted favorite lists, if supported by TV
|
||||
(e.g. Samsung E and F series, Panasonic Viera)
|
||||
- FIX: "insert after" using drag and drop from right to left list
|
||||
inserted before instead of after the drop position
|
||||
|
||||
The complete change log can be found at the end of this document
|
||||
|
||||
|
||||
About ChanSort ============================================================
|
||||
|
||||
ChanSort is a program to manage your Samsung, LG or Toshiba TV's channel
|
||||
list on your PC.
|
||||
ChanSort is a program to manage your Samsung, LG, Toshiba or Panasonic TV's
|
||||
channel list on your PC.
|
||||
|
||||
It allows you to change program numbers and channel names, select your
|
||||
favorites, set a parental lock and much more. With its multi-selection
|
||||
@@ -103,6 +104,15 @@ OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Change log ================================================================
|
||||
|
||||
2013-07-03
|
||||
- Support for individually sorted favorite lists, if supported by TV
|
||||
(e.g. Samsung E and F series, Panasonic Viera)
|
||||
- FIX: "insert after" using drag and drop from right to left list
|
||||
inserted before instead of after the drop position
|
||||
|
||||
2013-07-02
|
||||
- FIX: wrong version number (caused a popup about a newer version online)
|
||||
|
||||
2013-07-01
|
||||
- Added support for Panasonic channel list (svl.db and svl.bin format)
|
||||
- Translated UI to Portuguese (Thanks to Vitor Martins Augusto)
|
||||
|
||||
Reference in New Issue
Block a user