From bd19d946862568d911e97d1a7a485929143b5cc4 Mon Sep 17 00:00:00 2001 From: Horst Beham Date: Tue, 11 Feb 2020 21:06:37 +0100 Subject: [PATCH] - Philips: show and edit customized titles of favorite lists - fixed non-unique numbers in mixed-source favorite lists when using "Add to Fav A" (Panasonic, Hisense, Sony, Philips) - function to reorder channels from 1-x is now reordering all channels when only a single one was selected - function to sort channels by name is now reordering all channels when only a single one was selected --- source/ChanSort.Api/Controller/Editor.cs | 28 ++-- .../ChanSort.Api/Controller/SerializerBase.cs | 2 +- source/ChanSort.Api/Model/DataRoot.cs | 20 +++ .../ChanSort.Loader.PhilipsXml/Serializer.cs | 8 ++ source/ChanSort/ChanSort.csproj | 13 ++ source/ChanSort/MainForm.Designer.cs | 19 +-- source/ChanSort/MainForm.cs | 53 ++++++-- source/ChanSort/MainForm.resx | 14 +- source/ChanSort/Properties/licenses.licx | 7 + source/ChanSort/TextInputForm.Designer.cs | 66 ++++++++++ source/ChanSort/TextInputForm.cs | 31 +++++ source/ChanSort/TextInputForm.resx | 120 ++++++++++++++++++ source/changelog.md | 6 + 13 files changed, 348 insertions(+), 39 deletions(-) create mode 100644 source/ChanSort/TextInputForm.Designer.cs create mode 100644 source/ChanSort/TextInputForm.cs create mode 100644 source/ChanSort/TextInputForm.resx diff --git a/source/ChanSort.Api/Controller/Editor.cs b/source/ChanSort.Api/Controller/Editor.cs index 8cd20a4..4dacf17 100644 --- a/source/ChanSort.Api/Controller/Editor.cs +++ b/source/ChanSort.Api/Controller/Editor.cs @@ -349,22 +349,18 @@ namespace ChanSort.Api #region SetFavorites() - public void SetFavorites(List list, Favorites favorites, bool set) + public void SetFavorites(List list, int favIndex, bool set) { bool sortedFav = this.DataRoot.SortedFavorites; - int favIndex = 0; - if (sortedFav) - { - for (int mask = (int) favorites; (mask & 1) == 0; mask >>= 1) - ++favIndex; - } + var favMask = (Favorites)(1 << favIndex); + var favList = this.DataRoot.ChannelLists.FirstOrDefault(l => l.IsMixedSourceFavoritesList) ?? this.ChannelList; if (set) { int maxPosition = 0; if (sortedFav) { - foreach (var channel in this.ChannelList.Channels) + foreach (var channel in favList.Channels) maxPosition = Math.Max(maxPosition, channel.FavIndex[favIndex]); } @@ -372,7 +368,7 @@ namespace ChanSort.Api { if (sortedFav && channel.FavIndex[favIndex] == -1) channel.FavIndex[favIndex] = ++maxPosition; - channel.Favorites |= favorites; + channel.Favorites |= favMask; } } else @@ -380,11 +376,19 @@ namespace ChanSort.Api 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 &= ~favMask; + } + + // close gaps when needed + if (sortedFav && !this.DataRoot.AllowGapsInFavNumbers) + { + int i = 0; + foreach (var channel in favList.Channels) + { + if (channel.FavIndex[i] != -1) + channel.FavIndex[i] = ++i; } - channel.Favorites &= ~favorites; } } } diff --git a/source/ChanSort.Api/Controller/SerializerBase.cs b/source/ChanSort.Api/Controller/SerializerBase.cs index e49e3c9..37dacae 100644 --- a/source/ChanSort.Api/Controller/SerializerBase.cs +++ b/source/ChanSort.Api/Controller/SerializerBase.cs @@ -37,7 +37,7 @@ namespace ChanSort.Api public bool SortedFavorites { get; set; } public bool MixedSourceFavorites { get; set; } public bool AllowGapsInFavNumbers { get; set; } - + public bool CanEditFavListNames { get; set; } } #endregion diff --git a/source/ChanSort.Api/Model/DataRoot.cs b/source/ChanSort.Api/Model/DataRoot.cs index 9e1ee8a..b6f510e 100644 --- a/source/ChanSort.Api/Model/DataRoot.cs +++ b/source/ChanSort.Api/Model/DataRoot.cs @@ -26,6 +26,7 @@ namespace ChanSort.Api public bool CanSkip => this.loader.Features.CanSkipChannels; public bool CanLock => this.loader.Features.CanLockChannels; public bool CanHide => this.loader.Features.CanHideChannels; + public bool CanEditFavListName => this.loader.Features.CanEditFavListNames; public DataRoot(SerializerBase loader) { @@ -246,5 +247,24 @@ namespace ChanSort.Api } #endregion + + #region Get/SetFavListCaption() + + private readonly Dictionary favListCaptions = new Dictionary(); + + public void SetFavListCaption(int favIndex, string caption) + { + favListCaptions[favIndex] = caption; + } + + public string GetFavListCaption(int favIndex, bool asTabCaption = false) + { + var hasCaption = favListCaptions.TryGetValue(favIndex, out var caption); + if (!asTabCaption) + return caption; + var letter = (char)('A' + favIndex); + return hasCaption && !string.IsNullOrEmpty(caption) ? letter + ": " + caption : "Fav " + letter; + } + #endregion } } diff --git a/source/ChanSort.Loader.PhilipsXml/Serializer.cs b/source/ChanSort.Loader.PhilipsXml/Serializer.cs index 942cd3a..00110a1 100644 --- a/source/ChanSort.Loader.PhilipsXml/Serializer.cs +++ b/source/ChanSort.Loader.PhilipsXml/Serializer.cs @@ -69,6 +69,7 @@ namespace ChanSort.Loader.PhilipsXml this.Features.DeleteMode = DeleteMode.Physically; this.Features.CanSaveAs = false; this.Features.AllowGapsInFavNumbers = false; + this.Features.CanEditFavListNames = true; this.DataRoot.AddChannelList(this.terrChannels); this.DataRoot.AddChannelList(this.cableChannels); @@ -357,10 +358,13 @@ namespace ChanSort.Loader.PhilipsXml private void ReadFavList(XmlNode node) { int index = ParseInt(node.Attributes["Index"].InnerText); + string name = DecodeName(node.Attributes["Name"].InnerText); this.Features.SupportedFavorites |= (Favorites) (1 << (index - 1)); this.Features.SortedFavorites = true; this.Features.MixedSourceFavorites = true; + this.DataRoot.SetFavListCaption(index - 1, name); + if (this.favChannels.Count == 0) { foreach (var rootList in this.DataRoot.ChannelLists) @@ -547,6 +551,9 @@ namespace ChanSort.Loader.PhilipsXml { ++index; favListNode.InnerXml = ""; // clear all child elements but keep the attributes of the current node + var attr = favListNode.Attributes?["Name"]; + if (attr != null) + attr.InnerText = EncodeName(this.DataRoot.GetFavListCaption(index - 1)); foreach (var ch in favChannels.Channels.OrderBy(ch => ch.GetPosition(index))) { var nr = ch.GetPosition(index); @@ -572,6 +579,7 @@ namespace ChanSort.Loader.PhilipsXml var sb = new StringBuilder(); foreach (var b in bytes) sb.Append($"0x{b:X2} 0x00 "); + sb.Remove(sb.Length - 1, 1); return sb.ToString(); } #endregion diff --git a/source/ChanSort/ChanSort.csproj b/source/ChanSort/ChanSort.csproj index a6bf6ac..895d5e3 100644 --- a/source/ChanSort/ChanSort.csproj +++ b/source/ChanSort/ChanSort.csproj @@ -25,6 +25,7 @@ prompt 4 false + latest x86 @@ -35,6 +36,7 @@ prompt 4 false + latest true @@ -46,6 +48,7 @@ false false false + latest bin\Release\ @@ -57,6 +60,7 @@ false false false + latest app.ico @@ -166,6 +170,12 @@ ReferenceListForm.cs + + Form + + + TextInputForm.cs + Form @@ -347,6 +357,9 @@ ReferenceListForm.cs + + TextInputForm.cs + WaitForm1.cs diff --git a/source/ChanSort/MainForm.Designer.cs b/source/ChanSort/MainForm.Designer.cs index 0908c10..15b229b 100644 --- a/source/ChanSort/MainForm.Designer.cs +++ b/source/ChanSort/MainForm.Designer.cs @@ -85,6 +85,7 @@ this.colServiceType = new DevExpress.XtraGrid.Columns.GridColumn(); this.colServiceTypeName = new DevExpress.XtraGrid.Columns.GridColumn(); this.colFreqInMhz = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colPolarity = new DevExpress.XtraGrid.Columns.GridColumn(); this.colChannelOrTransponder = new DevExpress.XtraGrid.Columns.GridColumn(); this.colSatellite = new DevExpress.XtraGrid.Columns.GridColumn(); this.colNetworkId = new DevExpress.XtraGrid.Columns.GridColumn(); @@ -94,7 +95,6 @@ this.colVideoPid = new DevExpress.XtraGrid.Columns.GridColumn(); this.colAudioPid = new DevExpress.XtraGrid.Columns.GridColumn(); this.colSymbolRate = new DevExpress.XtraGrid.Columns.GridColumn(); - this.colPolarity = new DevExpress.XtraGrid.Columns.GridColumn(); this.colNetworkName = new DevExpress.XtraGrid.Columns.GridColumn(); this.colNetworkOperator = new DevExpress.XtraGrid.Columns.GridColumn(); this.colProvider = new DevExpress.XtraGrid.Columns.GridColumn(); @@ -342,6 +342,7 @@ resources.ApplyResources(this.colIndex1, "colIndex1"); this.colIndex1.FieldName = "RecordIndex"; this.colIndex1.Name = "colIndex1"; + this.colIndex1.OptionsColumn.AllowEdit = false; // // colOutSlot // @@ -421,6 +422,7 @@ resources.ApplyResources(this.colOutSource, "colOutSource"); this.colOutSource.FieldName = "Source"; this.colOutSource.Name = "colOutSource"; + this.colOutSource.OptionsColumn.AllowEdit = false; // // colUid1 // @@ -803,6 +805,13 @@ this.colFreqInMhz.Name = "colFreqInMhz"; this.colFreqInMhz.OptionsColumn.AllowEdit = false; // + // colPolarity + // + resources.ApplyResources(this.colPolarity, "colPolarity"); + this.colPolarity.FieldName = "Polarity"; + this.colPolarity.Name = "colPolarity"; + this.colPolarity.OptionsColumn.AllowEdit = false; + // // colChannelOrTransponder // resources.ApplyResources(this.colChannelOrTransponder, "colChannelOrTransponder"); @@ -865,13 +874,6 @@ this.colSymbolRate.Name = "colSymbolRate"; this.colSymbolRate.OptionsColumn.AllowEdit = false; // - // colPolarity - // - resources.ApplyResources(this.colPolarity, "colPolarity"); - this.colPolarity.FieldName = "Polarity"; - this.colPolarity.Name = "colPolarity"; - this.colPolarity.OptionsColumn.AllowEdit = false; - // // colNetworkName // resources.ApplyResources(this.colNetworkName, "colNetworkName"); @@ -1991,6 +1993,7 @@ this.tabSubList.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { this.pageProgNr}); this.tabSubList.SelectedPageChanged += new DevExpress.XtraTab.TabPageChangedEventHandler(this.tabSubList_SelectedPageChanged); + this.tabSubList.MouseUp += new System.Windows.Forms.MouseEventHandler(this.tabSubList_MouseUp); // // pageProgNr // diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs index 57db0d6..bf23f00 100644 --- a/source/ChanSort/MainForm.cs +++ b/source/ChanSort/MainForm.cs @@ -457,10 +457,10 @@ namespace ChanSort.Ui 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); - } + this.tabSubList.TabPages.Add(); + for (int i = 1; i < this.tabSubList.TabPages.Count; i++) + this.tabSubList.TabPages[i].Text = this.DataRoot.GetFavListCaption(i - 1, true); + if (!this.DataRoot.SortedFavorites || this.subListIndex >= favCount) { this.tabSubList.SelectedTabPageIndex = 0; @@ -1158,7 +1158,7 @@ namespace ChanSort.Ui private void SortSelectedChannels() { - var selectedChannels = this.GetSelectedChannels(this.gviewLeft); + var selectedChannels = this.GetSelectedChannels(this.gviewLeft, true); if (selectedChannels.Count == 0) return; this.gviewLeft.BeginDataUpdate(); this.gviewRight.BeginDataUpdate(); @@ -1204,7 +1204,7 @@ namespace ChanSort.Ui private void RenumberSelectedChannels() { - var list = this.GetSelectedChannels(this.gviewLeft); + var list = this.GetSelectedChannels(this.gviewLeft, true); if (list.Count == 0) return; this.gviewRight.BeginDataUpdate(); this.gviewLeft.BeginDataUpdate(); @@ -1217,14 +1217,23 @@ namespace ChanSort.Ui #region GetSelectedChannels() - private List GetSelectedChannels(GridView gview) + private List GetSelectedChannels(GridView gview, bool selectAllIfOnlyOneIsSelected = false) { var channels = new List(); - foreach (var rowHandle in gview.GetSelectedRows()) + if (gview.SelectedRowsCount <= 1 && selectAllIfOnlyOneIsSelected) { - if (gview.IsDataRow(rowHandle)) - channels.Add((ChannelInfo) gview.GetRow(rowHandle)); + for (int rowHandle=0; rowHandle AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 - LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe @@ -751,7 +751,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 - LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw @@ -761,7 +761,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 - LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu @@ -771,7 +771,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 - LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc @@ -781,7 +781,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 - LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAADUFjY2Vzc2liaWxpdHkE/P///wtTeXN0ZW0uR3VpZAsA AAACX2ECX2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICeIvz @@ -1264,7 +1264,7 @@ globalImageCollection1 - ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7305.33710, Culture=neutral, PublicKeyToken=null + ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7346.35990, Culture=neutral, PublicKeyToken=null gviewRight @@ -1957,7 +1957,7 @@ DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - 01/01/2020 18:44:40 + 02/11/2020 20:40:05 16, 16 diff --git a/source/ChanSort/Properties/licenses.licx b/source/ChanSort/Properties/licenses.licx index e69de29..393fa9d 100644 --- a/source/ChanSort/Properties/licenses.licx +++ b/source/ChanSort/Properties/licenses.licx @@ -0,0 +1,7 @@ +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/source/ChanSort/TextInputForm.Designer.cs b/source/ChanSort/TextInputForm.Designer.cs new file mode 100644 index 0000000..fe28b25 --- /dev/null +++ b/source/ChanSort/TextInputForm.Designer.cs @@ -0,0 +1,66 @@ +namespace ChanSort.Ui +{ + partial class TextInputForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textEdit = new DevExpress.XtraEditors.TextEdit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit.Properties)).BeginInit(); + this.SuspendLayout(); + // + // textEdit + // + this.textEdit.Location = new System.Drawing.Point(0, 0); + this.textEdit.Name = "textEdit"; + this.textEdit.Size = new System.Drawing.Size(240, 20); + this.textEdit.TabIndex = 0; + this.textEdit.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textEdit_KeyDown); + // + // TextInputForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(240, 20); + this.ControlBox = false; + this.Controls.Add(this.textEdit); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "TextInputForm"; + this.Text = "TextInputForm"; + ((System.ComponentModel.ISupportInitialize)(this.textEdit.Properties)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraEditors.TextEdit textEdit; + } +} \ No newline at end of file diff --git a/source/ChanSort/TextInputForm.cs b/source/ChanSort/TextInputForm.cs new file mode 100644 index 0000000..39be88c --- /dev/null +++ b/source/ChanSort/TextInputForm.cs @@ -0,0 +1,31 @@ +using System.Windows.Forms; +using DevExpress.XtraEditors; + +namespace ChanSort.Ui +{ + public partial class TextInputForm : XtraForm + { + public TextInputForm() + { + InitializeComponent(); + } + + private void textEdit_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Escape) + this.DialogResult = DialogResult.Cancel; + else if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) + this.DialogResult = DialogResult.OK; + } + + public override string Text + { + get => this.textEdit?.Text ?? ""; + set + { + if (this.textEdit != null) + this.textEdit.Text = value; + } + } + } +} diff --git a/source/ChanSort/TextInputForm.resx b/source/ChanSort/TextInputForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/source/ChanSort/TextInputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/changelog.md b/source/changelog.md index 8c12251..83c151f 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,6 +1,12 @@ ChanSort Change Log =================== +2020-02-11 +- Philips: show and edit customized titles of favorite lists +- fixed non-unique numbers in mixed-source favorite lists when using "Add to Fav A" (Panasonic, Hisense, Sony, Philips) +- function to reorder channels from 1-x is now reordering all channels when only a single one was selected +- function to sort channels by name is now reordering all channels when only a single one was selected + 2020-02-02 - fixed (hopefully): When channels were deleted from Sony lists, the TV reordered the list randomly after a reboot