From 8923ce4c8374cc892711538fba6ef2cc8aa27ea0 Mon Sep 17 00:00:00 2001 From: hbeham Date: Tue, 13 Aug 2019 13:29:59 +0200 Subject: [PATCH] - LG GlobalClone: added support for additional favorites (A-H) and individual fav sorting when supported by the TV - LG GlobalClone: data/option channels were not listed before and are now shown in the TV channel list - added function to copy list to clipboard (which can then be pasted into Excel or other programs) --- source/ChanSort.Api/Model/ChannelInfo.cs | 2 +- source/ChanSort.Api/Model/Enums.cs | 2 +- .../GcSerializer.cs | 23 ++ source/ChanSort/GlobalImageCollection.cs | 2 +- source/ChanSort/GlobalImageCollection.resx | 18 +- source/ChanSort/MainForm.Designer.cs | 273 ++++++----------- source/ChanSort/MainForm.cs | 115 +++++-- source/ChanSort/MainForm.cs.resx | 32 +- source/ChanSort/MainForm.de.resx | 9 + source/ChanSort/MainForm.resx | 289 +++++++++--------- source/ChanSort/MainForm.ro.resx | 30 -- source/Images/imagelist/0043.png | Bin 0 -> 494 bytes source/Translation.xlsx | Bin 49310 -> 49431 bytes source/changelog.md | 5 + 14 files changed, 372 insertions(+), 428 deletions(-) create mode 100644 source/Images/imagelist/0043.png diff --git a/source/ChanSort.Api/Model/ChannelInfo.cs b/source/ChanSort.Api/Model/ChannelInfo.cs index 05bc50f..841e612 100644 --- a/source/ChanSort.Api/Model/ChannelInfo.cs +++ b/source/ChanSort.Api/Model/ChannelInfo.cs @@ -5,7 +5,7 @@ namespace ChanSort.Api { public class ChannelInfo { - private const int MAX_FAV_LISTS = 5; + private const int MAX_FAV_LISTS = 16; private string uid; private string serviceTypeName; diff --git a/source/ChanSort.Api/Model/Enums.cs b/source/ChanSort.Api/Model/Enums.cs index e351cea..d451d5c 100644 --- a/source/ChanSort.Api/Model/Enums.cs +++ b/source/ChanSort.Api/Model/Enums.cs @@ -73,7 +73,7 @@ namespace ChanSort.Api #endregion [Flags] - public enum Favorites : byte { A = 0x01, B = 0x02, C = 0x04, D = 0x08, E = 0x10 } + public enum Favorites : byte { A = 0x01, B = 0x02, C = 0x04, D = 0x08, E = 0x10, F=0x20, G=0x40, H=0x80 } public enum UnsortedChannelMode { diff --git a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs index d1beffa..1ae4830 100644 --- a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs +++ b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs @@ -211,6 +211,8 @@ namespace ChanSort.Loader.GlobalClone this.ParseChannelInfoNodes(itemNode, ch); var list = this.DataRoot.GetChannelList(ch.SignalSource); + if (list == null && (ch.SignalSource & SignalSource.MaskTvRadio) == 0) // Data/Option channels are put in the TV list + list = this.DataRoot.GetChannelList(ch.SignalSource | SignalSource.Tv); this.DataRoot.AddChannel(list, ch); } } @@ -315,6 +317,17 @@ namespace ChanSort.Loader.GlobalClone ch.ShortName = shortName; hasHexName = true; break; + default: + if (info.LocalName.StartsWith("favoriteIdx")) + { + int n = info.LocalName[11] - 'A'; + var mask = 1 << n; + this.DataRoot.SupportedFavorites |= (Favorites)mask; + this.DataRoot.SortedFavorites = true; + if (((int)ch.Favorites & mask) != 0) // xml element holds bad index data (250) when fav is not set + ch.SetPosition(n + 1, int.Parse(info.InnerText)); + } + break; } } } @@ -433,6 +446,16 @@ namespace ChanSort.Loader.GlobalClone if (mapType == "1") node.InnerText = ((int) ch.Favorites).ToString(); break; + default: + if (node.LocalName.StartsWith("favoriteIdx")) + { + int n = node.LocalName[11] - 'A'; + var idx = ch.GetPosition(n + 1); + if (idx <= 0) + idx = 250; // this weird value is used by the TV when the fav is not set + node.InnerText = idx.ToString(); + } + break; } } } diff --git a/source/ChanSort/GlobalImageCollection.cs b/source/ChanSort/GlobalImageCollection.cs index 7aad26b..5430983 100644 --- a/source/ChanSort/GlobalImageCollection.cs +++ b/source/ChanSort/GlobalImageCollection.cs @@ -96,7 +96,7 @@ namespace ChanSort.Ui this.sharedImageCollection1.ImageSource.Images.SetKeyName(40, "0040.png"); this.sharedImageCollection1.ImageSource.Images.SetKeyName(41, "0041.png"); this.sharedImageCollection1.ImageSource.Images.SetKeyName(42, "0042.png"); - this.sharedImageCollection1.ParentControl = null; + this.sharedImageCollection1.ImageSource.Images.SetKeyName(43, "0043.png"); ((System.ComponentModel.ISupportInitialize)(this.sharedImageCollection1.ImageSource)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.sharedImageCollection1)).EndInit(); diff --git a/source/ChanSort/GlobalImageCollection.resx b/source/ChanSort/GlobalImageCollection.resx index 3c1676e..8e34927 100644 --- a/source/ChanSort/GlobalImageCollection.resx +++ b/source/ChanSort/GlobalImageCollection.resx @@ -123,13 +123,13 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxNy4xLCBWZXJzaW9uPTE3LjEu - Ny4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxOS4xLCBWZXJzaW9uPTE5LjEu + NS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0 cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P// /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABAAAAAQAAAACQUAAAAP - BQAAAJV0AAACYgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgCAAAAkJFoNgAAAAFzUkdCAK7OHOkA + BQAAAHB2AAACYgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgCAAAAkJFoNgAAAAFzUkdCAK7OHOkA AAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAAsSAAALEgHS3X78AAAB90lEQVQ4T2P4TyIgXcOkmft2XH1T Pf1YSjMQHU5sPHDz7tu1yY1rEuqADM/sbR5pO2xjNkQ17pwTmF899yjDkhWn/m9c9e/f/9sPvyzacHv+ +jtA9v8pPf/7WoGMSQsv9869cPLE439dNf/+/pyw6QJDUsvBPSff/V+6/P/BvUAb26ZdBVmcmvk/IRFI @@ -626,12 +626,20 @@ lHy+shnszEw9Lo4l18IzqyPTOYRCsuxlzE2pk5D9+EePqa1W1NEheTy8Gez4cPlRMTyzMnL9W+DqqiAE GDvY0rhHKrc0am8XXa6CGcC7Cw/zwamv/ivL3osrtZqX0gOE7MN4ryTtEXkrsliE3buEtjbkdDaDN+ce cGfmc/G7a7E0h9AJSiOUhggZxnhIqhwS3W7kchkaORxcI3gL8BrgJcAiwKtKBjaXoJoB41J+D/wibAAY - Dxu0uf/h87XOf5x6/S8BnAaucM19IAAAAABJRU5ErkJgggs= + Dxu0uf/h87XOf5x6/S8BnAaucM19IAAAAABJRU5ErkJggtcBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAA + ABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABeUlEQVQ4T22T + rZaDMBBGeQzsSmRlbWUkMjYSicRGIpFYJBJZ20dYia1EIrNzhw4L7ML5TtqcfHd+MmTdM6Z2alIca1Uz + VKkeQqp7n6rOp9CWKUSn8vGRymaTq++qDPP0PaqG717Vv7pd3dSmaxALdAKs8h6fdZWdg5Z1OYksFQAN + gJo+EDXxGkDeo/m9vH8zAEDaPNUYdvm+3CP7WJ4EgB49qlvKIAHgsOucZtM8pUaRl/8YqqlS4C2KocrO + AGqhWTxAHt1DgbWYwuiTk8774WxG3NAGEBKAvV4Rh9kDgFkPHszze94AoZB9+cFVmVlr/kTk+iiD0jgc + +qACwP7df6WMQeGgdRhzPUkTZc2bPMVXo8MEBEM7xgtAJoxZ2COXxUlA6IdlgukEYDy5SsvA6jQR8QoF + ULZ3+Z2njLk2AIYjZF5mPfyfNoA0EQCzYKY/5uv6kWtvqXCSAeMIANlXaF8iolYTURFm1h1g4r5t5dpM + NMtE3abC5ekHXGu8spQLKHAAAAAASUVORK5CYIIL - 01/23/2018 21:33:37 + 08/13/2019 13:15:17 diff --git a/source/ChanSort/MainForm.Designer.cs b/source/ChanSort/MainForm.Designer.cs index 08ba7af..5abfd86 100644 --- a/source/ChanSort/MainForm.Designer.cs +++ b/source/ChanSort/MainForm.Designer.cs @@ -41,15 +41,19 @@ this.colOutName = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutFav = new DevExpress.XtraGrid.Columns.GridColumn(); this.repositoryItemCheckedComboBoxEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit(); - this.colUid1 = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutLock = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutSkip = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutHide = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colOutDeleted = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colUid1 = new DevExpress.XtraGrid.Columns.GridColumn(); this.repositoryItemTextEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemTextEdit(); this.lblHotkeyLeft = new DevExpress.XtraEditors.LabelControl(); this.pnlEditControls = new DevExpress.XtraEditors.PanelControl(); - this.btnToggleLock = new DevExpress.XtraEditors.SimpleButton(); + this.btnToggleFavH = new DevExpress.XtraEditors.SimpleButton(); this.globalImageCollection1 = new ChanSort.Ui.GlobalImageCollection(this.components); + this.btnToggleFavG = new DevExpress.XtraEditors.SimpleButton(); + this.btnToggleFavF = new DevExpress.XtraEditors.SimpleButton(); + this.btnToggleLock = new DevExpress.XtraEditors.SimpleButton(); this.btnToggleFavE = new DevExpress.XtraEditors.SimpleButton(); this.btnToggleFavD = new DevExpress.XtraEditors.SimpleButton(); this.btnToggleFavC = new DevExpress.XtraEditors.SimpleButton(); @@ -75,6 +79,7 @@ this.colLock = new DevExpress.XtraGrid.Columns.GridColumn(); this.colSkip = new DevExpress.XtraGrid.Columns.GridColumn(); this.colHidden = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colDeleted = new DevExpress.XtraGrid.Columns.GridColumn(); this.colEncrypted = new DevExpress.XtraGrid.Columns.GridColumn(); this.colServiceType = new DevExpress.XtraGrid.Columns.GridColumn(); this.colServiceTypeName = new DevExpress.XtraGrid.Columns.GridColumn(); @@ -126,18 +131,9 @@ this.miSort = new DevExpress.XtraBars.BarButtonItem(); this.miRenum = new DevExpress.XtraBars.BarButtonItem(); this.miRenumFavByPrNr = new DevExpress.XtraBars.BarButtonItem(); + this.miCopyCsv = new DevExpress.XtraBars.BarButtonItem(); this.mnuFavSet = new DevExpress.XtraBars.BarSubItem(); - this.miFavASet = new DevExpress.XtraBars.BarButtonItem(); - this.miFavBSet = new DevExpress.XtraBars.BarButtonItem(); - this.miFavCSet = new DevExpress.XtraBars.BarButtonItem(); - this.miFavDSet = new DevExpress.XtraBars.BarButtonItem(); - this.miFavESet = new DevExpress.XtraBars.BarButtonItem(); this.mnuFavUnset = new DevExpress.XtraBars.BarSubItem(); - this.miFavAUnset = new DevExpress.XtraBars.BarButtonItem(); - this.miFavBUnset = new DevExpress.XtraBars.BarButtonItem(); - this.miFavCUnset = new DevExpress.XtraBars.BarButtonItem(); - this.miFavDUnset = new DevExpress.XtraBars.BarButtonItem(); - this.miFavEUnset = new DevExpress.XtraBars.BarButtonItem(); this.miLockOn = new DevExpress.XtraBars.BarButtonItem(); this.miLockOff = new DevExpress.XtraBars.BarButtonItem(); this.miSkipOn = new DevExpress.XtraBars.BarButtonItem(); @@ -208,8 +204,6 @@ this.pageProgNr = new DevExpress.XtraTab.XtraTabPage(); this.popupInputSource = new DevExpress.XtraBars.PopupMenu(this.components); this.popupFavList = new DevExpress.XtraBars.PopupMenu(this.components); - this.colOutDeleted = new DevExpress.XtraGrid.Columns.GridColumn(); - this.colDeleted = new DevExpress.XtraGrid.Columns.GridColumn(); ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit(); this.splitContainerControl1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.grpOutputList)).BeginInit(); @@ -395,13 +389,6 @@ this.repositoryItemCheckedComboBoxEdit1.ShowPopupCloseButton = false; this.repositoryItemCheckedComboBoxEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; // - // colUid1 - // - resources.ApplyResources(this.colUid1, "colUid1"); - this.colUid1.FieldName = "Uid"; - this.colUid1.Name = "colUid1"; - this.colUid1.OptionsColumn.AllowEdit = false; - // // colOutLock // resources.ApplyResources(this.colOutLock, "colOutLock"); @@ -420,6 +407,19 @@ this.colOutHide.FieldName = "Hidden"; this.colOutHide.Name = "colOutHide"; // + // colOutDeleted + // + resources.ApplyResources(this.colOutDeleted, "colOutDeleted"); + this.colOutDeleted.FieldName = "IsDeleted"; + this.colOutDeleted.Name = "colOutDeleted"; + // + // colUid1 + // + resources.ApplyResources(this.colUid1, "colUid1"); + this.colUid1.FieldName = "Uid"; + this.colUid1.Name = "colUid1"; + this.colUid1.OptionsColumn.AllowEdit = false; + // // repositoryItemTextEdit1 // resources.ApplyResources(this.repositoryItemTextEdit1, "repositoryItemTextEdit1"); @@ -437,6 +437,9 @@ // // pnlEditControls // + this.pnlEditControls.Controls.Add(this.btnToggleFavH); + this.pnlEditControls.Controls.Add(this.btnToggleFavG); + this.pnlEditControls.Controls.Add(this.btnToggleFavF); this.pnlEditControls.Controls.Add(this.btnToggleLock); this.pnlEditControls.Controls.Add(this.btnToggleFavE); this.pnlEditControls.Controls.Add(this.btnToggleFavD); @@ -451,6 +454,28 @@ resources.ApplyResources(this.pnlEditControls, "pnlEditControls"); this.pnlEditControls.Name = "pnlEditControls"; // + // btnToggleFavH + // + resources.ApplyResources(this.btnToggleFavH, "btnToggleFavH"); + this.btnToggleFavH.ImageOptions.ImageList = this.globalImageCollection1; + this.btnToggleFavH.Name = "btnToggleFavH"; + this.btnToggleFavH.Tag = ""; + this.btnToggleFavH.Click += new System.EventHandler(this.btnToggleFav_Click); + // + // btnToggleFavG + // + resources.ApplyResources(this.btnToggleFavG, "btnToggleFavG"); + this.btnToggleFavG.ImageOptions.ImageList = this.globalImageCollection1; + this.btnToggleFavG.Name = "btnToggleFavG"; + this.btnToggleFavG.Click += new System.EventHandler(this.btnToggleFav_Click); + // + // btnToggleFavF + // + resources.ApplyResources(this.btnToggleFavF, "btnToggleFavF"); + this.btnToggleFavF.ImageOptions.ImageList = this.globalImageCollection1; + this.btnToggleFavF.Name = "btnToggleFavF"; + this.btnToggleFavF.Click += new System.EventHandler(this.btnToggleFav_Click); + // // btnToggleLock // this.btnToggleLock.ImageOptions.ImageIndex = ((int)(resources.GetObject("btnToggleLock.ImageOptions.ImageIndex"))); @@ -733,6 +758,12 @@ this.colHidden.FieldName = "Hidden"; this.colHidden.Name = "colHidden"; // + // colDeleted + // + resources.ApplyResources(this.colDeleted, "colDeleted"); + this.colDeleted.FieldName = "IsDeleted"; + this.colDeleted.Name = "colDeleted"; + // // colEncrypted // resources.ApplyResources(this.colEncrypted, "colEncrypted"); @@ -1006,16 +1037,6 @@ this.miGotoLeftList, this.miRightListFilter, this.miGotoRightList, - this.miFavASet, - this.miFavBSet, - this.miFavCSet, - this.miFavDSet, - this.miFavESet, - this.miFavAUnset, - this.miFavBUnset, - this.miFavCUnset, - this.miFavDUnset, - this.miFavEUnset, this.miSelectFavList0, this.miSelectFavListA, this.miSelectFavListB, @@ -1032,9 +1053,10 @@ this.miRomanian, this.miExplorerIntegration, this.miCheckUpdates, - this.miUtf8Charset}); + this.miUtf8Charset, + this.miCopyCsv}); this.barManager1.MainMenu = this.bar1; - this.barManager1.MaxItemId = 100; + this.barManager1.MaxItemId = 101; this.barManager1.ShowFullMenus = true; // // bar1 @@ -1229,17 +1251,18 @@ new DevExpress.XtraBars.LinkPersistInfo(this.miAddChannel), new DevExpress.XtraBars.LinkPersistInfo(this.miRemove), new DevExpress.XtraBars.LinkPersistInfo(this.miRenameChannel), - new DevExpress.XtraBars.LinkPersistInfo(this.miSort), - new DevExpress.XtraBars.LinkPersistInfo(this.miRenum), - new DevExpress.XtraBars.LinkPersistInfo(this.miRenumFavByPrNr), - new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, "", true, true, true, 0, null, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), new DevExpress.XtraBars.LinkPersistInfo(this.mnuFavUnset), - new DevExpress.XtraBars.LinkPersistInfo(this.miLockOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miLockOn), new DevExpress.XtraBars.LinkPersistInfo(this.miLockOff), - new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOn), new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOff), - new DevExpress.XtraBars.LinkPersistInfo(this.miHideOn, true), - new DevExpress.XtraBars.LinkPersistInfo(this.miHideOff)}); + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOn), + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOff), + new DevExpress.XtraBars.LinkPersistInfo(this.miRenum, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miSort), + new DevExpress.XtraBars.LinkPersistInfo(this.miRenumFavByPrNr), + new DevExpress.XtraBars.LinkPersistInfo(this.miCopyCsv)}); this.miEdit.Name = "miEdit"; // // miAddChannel @@ -1297,139 +1320,32 @@ this.miRenumFavByPrNr.Name = "miRenumFavByPrNr"; this.miRenumFavByPrNr.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRenumFavByPrNr_ItemClick); // + // miCopyCsv + // + resources.ApplyResources(this.miCopyCsv, "miCopyCsv"); + this.miCopyCsv.Id = 100; + this.miCopyCsv.ImageOptions.ImageIndex = ((int)(resources.GetObject("miCopyCsv.ImageOptions.ImageIndex"))); + this.miCopyCsv.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.C)); + this.miCopyCsv.Name = "miCopyCsv"; + this.miCopyCsv.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miCopyCsv_ItemClick); + // // mnuFavSet // resources.ApplyResources(this.mnuFavSet, "mnuFavSet"); this.mnuFavSet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); this.mnuFavSet.Id = 37; this.mnuFavSet.ImageOptions.ImageIndex = ((int)(resources.GetObject("mnuFavSet.ImageOptions.ImageIndex"))); - this.mnuFavSet.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.miFavASet), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavBSet), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavCSet), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavDSet), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavESet)}); this.mnuFavSet.Name = "mnuFavSet"; this.mnuFavSet.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionInMenu; // - // miFavASet - // - resources.ApplyResources(this.miFavASet, "miFavASet"); - this.miFavASet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavASet.Id = 73; - this.miFavASet.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D1)); - this.miFavASet.Name = "miFavASet"; - this.miFavASet.Tag = "A"; - this.miFavASet.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavSet_ItemClick); - // - // miFavBSet - // - resources.ApplyResources(this.miFavBSet, "miFavBSet"); - this.miFavBSet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavBSet.Id = 74; - this.miFavBSet.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D2)); - this.miFavBSet.Name = "miFavBSet"; - this.miFavBSet.Tag = "B"; - this.miFavBSet.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavSet_ItemClick); - // - // miFavCSet - // - resources.ApplyResources(this.miFavCSet, "miFavCSet"); - this.miFavCSet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavCSet.Id = 75; - this.miFavCSet.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D3)); - this.miFavCSet.Name = "miFavCSet"; - this.miFavCSet.Tag = "C"; - this.miFavCSet.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavSet_ItemClick); - // - // miFavDSet - // - resources.ApplyResources(this.miFavDSet, "miFavDSet"); - this.miFavDSet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavDSet.Id = 76; - this.miFavDSet.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D4)); - this.miFavDSet.Name = "miFavDSet"; - this.miFavDSet.Tag = "D"; - this.miFavDSet.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavSet_ItemClick); - // - // miFavESet - // - resources.ApplyResources(this.miFavESet, "miFavESet"); - this.miFavESet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavESet.Id = 77; - this.miFavESet.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D5)); - this.miFavESet.Name = "miFavESet"; - this.miFavESet.Tag = "E"; - this.miFavESet.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavSet_ItemClick); - // // mnuFavUnset // resources.ApplyResources(this.mnuFavUnset, "mnuFavUnset"); this.mnuFavUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); this.mnuFavUnset.Id = 38; - this.mnuFavUnset.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.miFavAUnset), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavBUnset), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavCUnset), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavDUnset), - new DevExpress.XtraBars.LinkPersistInfo(this.miFavEUnset)}); this.mnuFavUnset.Name = "mnuFavUnset"; // - // miFavAUnset - // - resources.ApplyResources(this.miFavAUnset, "miFavAUnset"); - this.miFavAUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavAUnset.Id = 78; - this.miFavAUnset.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.D1)); - this.miFavAUnset.Name = "miFavAUnset"; - this.miFavAUnset.Tag = "A"; - this.miFavAUnset.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavUnset_ItemClick); - // - // miFavBUnset - // - resources.ApplyResources(this.miFavBUnset, "miFavBUnset"); - this.miFavBUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavBUnset.Id = 79; - this.miFavBUnset.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.D2)); - this.miFavBUnset.Name = "miFavBUnset"; - this.miFavBUnset.Tag = "B"; - this.miFavBUnset.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavUnset_ItemClick); - // - // miFavCUnset - // - resources.ApplyResources(this.miFavCUnset, "miFavCUnset"); - this.miFavCUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavCUnset.Id = 80; - this.miFavCUnset.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.D3)); - this.miFavCUnset.Name = "miFavCUnset"; - this.miFavCUnset.Tag = "C"; - this.miFavCUnset.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavUnset_ItemClick); - // - // miFavDUnset - // - resources.ApplyResources(this.miFavDUnset, "miFavDUnset"); - this.miFavDUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavDUnset.Id = 81; - this.miFavDUnset.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.D4)); - this.miFavDUnset.Name = "miFavDUnset"; - this.miFavDUnset.Tag = "D"; - this.miFavDUnset.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavUnset_ItemClick); - // - // miFavEUnset - // - resources.ApplyResources(this.miFavEUnset, "miFavEUnset"); - this.miFavEUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miFavEUnset.Id = 82; - this.miFavEUnset.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.D5)); - this.miFavEUnset.Name = "miFavEUnset"; - this.miFavEUnset.Tag = "E"; - this.miFavEUnset.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavUnset_ItemClick); - // // miLockOn // resources.ApplyResources(this.miLockOn, "miLockOn"); @@ -2020,16 +1936,17 @@ new DevExpress.XtraBars.LinkPersistInfo(this.miAddChannel), new DevExpress.XtraBars.LinkPersistInfo(this.miRemove), new DevExpress.XtraBars.LinkPersistInfo(this.miRenameChannel), - new DevExpress.XtraBars.LinkPersistInfo(this.miSort), - new DevExpress.XtraBars.LinkPersistInfo(this.miRenum), - new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, "", true, true, true, 0, null, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), new DevExpress.XtraBars.LinkPersistInfo(this.mnuFavUnset), - new DevExpress.XtraBars.LinkPersistInfo(this.miLockOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miLockOn), new DevExpress.XtraBars.LinkPersistInfo(this.miLockOff), - new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOn), new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOff), - new DevExpress.XtraBars.LinkPersistInfo(this.miHideOn, true), - new DevExpress.XtraBars.LinkPersistInfo(this.miHideOff)}); + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOn), + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOff), + new DevExpress.XtraBars.LinkPersistInfo(this.miRenum, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miSort), + new DevExpress.XtraBars.LinkPersistInfo(this.miCopyCsv)}); this.popupContext.Manager = this.barManager1; this.popupContext.Name = "popupContext"; // @@ -2077,18 +1994,6 @@ this.popupFavList.Name = "popupFavList"; this.popupFavList.ShowCaption = true; // - // colOutDeleted - // - resources.ApplyResources(this.colOutDeleted, "colOutDeleted"); - this.colOutDeleted.FieldName = "IsDeleted"; - this.colOutDeleted.Name = "colOutDeleted"; - // - // colDeleted - // - resources.ApplyResources(this.colDeleted, "colDeleted"); - this.colDeleted.FieldName = "IsDeleted"; - this.colDeleted.Name = "colDeleted"; - // // MainForm // this.AllowDrop = true; @@ -2297,16 +2202,6 @@ private DevExpress.XtraBars.BarButtonItem miGotoLeftList; private DevExpress.XtraBars.BarButtonItem miRightListFilter; private DevExpress.XtraBars.BarButtonItem miGotoRightList; - private DevExpress.XtraBars.BarButtonItem miFavASet; - private DevExpress.XtraBars.BarButtonItem miFavBSet; - private DevExpress.XtraBars.BarButtonItem miFavCSet; - private DevExpress.XtraBars.BarButtonItem miFavDSet; - private DevExpress.XtraBars.BarButtonItem miFavESet; - private DevExpress.XtraBars.BarButtonItem miFavAUnset; - private DevExpress.XtraBars.BarButtonItem miFavBUnset; - private DevExpress.XtraBars.BarButtonItem miFavCUnset; - private DevExpress.XtraBars.BarButtonItem miFavDUnset; - private DevExpress.XtraBars.BarButtonItem miFavEUnset; private DevExpress.XtraBars.PopupMenu popupInputSource; private DevExpress.XtraBars.PopupMenu popupFavList; private DevExpress.XtraBars.BarButtonItem miSelectFavList0; @@ -2333,6 +2228,10 @@ private DevExpress.XtraBars.BarButtonItem miUtf8Charset; private DevExpress.XtraGrid.Columns.GridColumn colOutDeleted; private DevExpress.XtraGrid.Columns.GridColumn colDeleted; + private DevExpress.XtraEditors.SimpleButton btnToggleFavH; + private DevExpress.XtraEditors.SimpleButton btnToggleFavG; + private DevExpress.XtraEditors.SimpleButton btnToggleFavF; + private DevExpress.XtraBars.BarButtonItem miCopyCsv; } } diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs index a1cc0ff..864f14b 100644 --- a/source/ChanSort/MainForm.cs +++ b/source/ChanSort/MainForm.cs @@ -21,6 +21,7 @@ using DevExpress.Utils; using DevExpress.XtraBars; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; +using DevExpress.XtraEditors.Repository; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Base; @@ -412,31 +413,35 @@ namespace ChanSort.Ui private void UpdateFavoritesEditor(Favorites favorites) { - var miSet = new[] {this.miFavASet, this.miFavBSet, this.miFavCSet, this.miFavDSet, this.miFavESet}; - var miUnset = new[] { this.miFavAUnset, this.miFavBUnset, this.miFavCUnset, this.miFavDUnset, this.miFavEUnset }; + foreach(var link in this.mnuFavSet.ItemLinks.ToList()) + link.Item?.Dispose(); + foreach (var link in this.mnuFavUnset.ItemLinks.ToList()) + link.Item?.Dispose(); this.repositoryItemCheckedComboBoxEdit1.Items.Clear(); this.repositoryItemCheckedComboBoxEdit2.Items.Clear(); - byte mask = 0x01; var regex = "["; var favCount = 0; - for (var bit = 0; bit < 5; bit++, mask <<= 1) + for (var favMask = (uint)favorites; (favMask & 1) != 0; favMask >>= 1) { - if (((int) favorites & mask) != 0) - { - var c = (char) ('A' + bit); - this.repositoryItemCheckedComboBoxEdit1.Items.Add(c); - this.repositoryItemCheckedComboBoxEdit2.Items.Add(c); - miSet[bit].Visibility = BarItemVisibility.Always; - miUnset[bit].Visibility = BarItemVisibility.Always; - regex += c; - ++favCount; - } - else - { - miSet[bit].Visibility = BarItemVisibility.Never; - miUnset[bit].Visibility = BarItemVisibility.Never; - } + var c = (char) ('A' + favCount); + ++favCount; + this.repositoryItemCheckedComboBoxEdit1.Items.Add(c); + this.repositoryItemCheckedComboBoxEdit2.Items.Add(c); + + var miSet = new BarButtonItem(this.barManager1, "&" + c); + miSet.Tag = c.ToString(); + miSet.ItemShortcut = new BarShortcut(Keys.Control | (Keys)((int)Keys.D0 + favCount%10)); + miSet.ItemClick += this.miFavSet_ItemClick; + this.mnuFavSet.AddItem(miSet); + + var miUnset = new BarButtonItem(this.barManager1, "&" + c); + miUnset.Tag = c.ToString(); + miUnset.ItemShortcut = new BarShortcut(Keys.Control | Keys.Shift | (Keys)((int)Keys.D0 + favCount%10)); + miUnset.ItemClick += this.miFavUnset_ItemClick; + this.mnuFavUnset.AddItem(miUnset); + + regex += c; } regex += "]*"; this.repositoryItemCheckedComboBoxEdit1.Mask.EditMask = regex; @@ -1511,14 +1516,14 @@ namespace ChanSort.Ui private void SetFavorite(string fav, bool set) { if (string.IsNullOrEmpty(fav)) return; - var ch = char.ToUpper(fav[0]); - if (ch < 'A' || ch > 'E' || this.subListIndex == ch - 'A' + 1) return; + int idx = char.ToUpper(fav[0]) - 'A'; + if (idx < 0 || idx >= this.mnuFavSet.ItemLinks.Count || this.subListIndex == idx + 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 << idx), set); this.gviewRight.EndDataUpdate(); this.gviewLeft.EndDataUpdate(); } @@ -1602,6 +1607,9 @@ namespace ChanSort.Ui 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.btnToggleFavF.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.F) != 0 && this.subListIndex != 6; + this.btnToggleFavG.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.G) != 0 && this.subListIndex != 7; + this.btnToggleFavH.Enabled = mayEdit && (this.DataRoot.SupportedFavorites & Favorites.H) != 0 && this.subListIndex != 8; this.btnToggleLock.Enabled = mayEdit; this.miReload.Enabled = fileLoaded; @@ -1614,7 +1622,7 @@ namespace ChanSort.Ui this.miExcelExport.Enabled = fileLoaded; this.miPrint.Enabled = fileLoaded; - this.miAddChannel.Enabled = isRight; + this.miAddChannel.Enabled = fileLoaded && isRight; var visRight = isRight ? BarItemVisibility.Always : BarItemVisibility.Never; var visLeft = isRight ? BarItemVisibility.Never : BarItemVisibility.Always; @@ -1853,6 +1861,24 @@ namespace ChanSort.Ui #endregion + #region GetFavString() + private string GetFavString(Favorites fav) + { + if (fav == 0) + return string.Empty; + + var sb = new StringBuilder(); + int i = 0; + for (var mask = (int)fav; mask != 0; mask >>= 1) + { + if ((mask & 1) != 0) + sb.Append((char)('A' + i)); + ++i; + } + return sb.ToString(); + } + #endregion + // UI events #region MainForm_Load @@ -2185,9 +2211,8 @@ namespace ChanSort.Ui { if (e.Column == this.colOutFav) { - if (!(e.Value is Favorites)) return; - if ((Favorites) e.Value == 0) - e.DisplayText = string.Empty; + if (e.Value is Favorites fav) + e.DisplayText = GetFavString(fav); } } @@ -2337,9 +2362,8 @@ namespace ChanSort.Ui } else if (e.Column == this.colFavorites) { - if (!(e.Value is Favorites)) return; - if ((Favorites) e.Value == 0) - e.DisplayText = string.Empty; + if (e.Value is Favorites fav) + e.DisplayText = GetFavString(fav); } } @@ -2787,6 +2811,38 @@ namespace ChanSort.Ui #region Edit menu + private void miCopyCsv_ItemClick(object sender, ItemClickEventArgs e) + { + var gview = this.gridRight.ContainsFocus ? this.gviewRight : this.gviewLeft; + var cols = gview.VisibleColumns; + + var sb = new StringBuilder(); + foreach (GridColumn col in cols) + sb.Append(col.Caption).Append('\t'); + sb[sb.Length - 1] = '\n'; + for (int i = 0, c = gview.RowCount; i < c; i++) + { + foreach (GridColumn col in cols) + { + if (col.ColumnType == typeof(bool)) + { + var val = gview.GetRowCellValue(i, col); + if (val is bool b && b) + sb.Append('x'); + sb.Append('\t'); + } + else + { + var val = gview.GetRowCellDisplayText(i, col); + sb.Append(val).Append('\t'); + } + } + sb[sb.Length - 1] = '\n'; + } + + Clipboard.SetText(sb.ToString(), TextDataFormat.Text); + } + private void miAddChannel_ItemClick(object sender, ItemClickEventArgs e) { this.TryExecute(this.AddChannels); @@ -3210,5 +3266,6 @@ namespace ChanSort.Ui } #endregion + } } \ No newline at end of file diff --git a/source/ChanSort/MainForm.cs.resx b/source/ChanSort/MainForm.cs.resx index ee02bb9..065873a 100644 --- a/source/ChanSort/MainForm.cs.resx +++ b/source/ChanSort/MainForm.cs.resx @@ -1,4 +1,4 @@ - +