From fbad87ca1475ffdf27b410d42dd23032bbaee659 Mon Sep 17 00:00:00 2001 From: Joakim Wennergren Date: Thu, 26 Aug 2021 16:02:47 +0200 Subject: [PATCH] Dark mode icons now work --- CsvQuery/CsvQuery.csproj | 3 +- CsvQuery/Main.cs | 49 +++++++++++------- .../DllExport/NppPlugin.DllExport.targets | 32 ++++++++---- CsvQuery/PluginInfrastructure/Msgs_h.cs | 8 +++ .../PluginInfrastructure/NotepadPPGateway.cs | 6 +++ CsvQuery/Properties/CSVQueryIcon.png | Bin 682 -> 651 bytes CsvQuery/Properties/CsvQueryIconDark.ico | Bin 0 -> 16958 bytes CsvQuery/Properties/CsvQueryIconLight.ico | Bin 0 -> 16958 bytes CsvQuery/Properties/Resources.Designer.cs | 16 ++++-- CsvQuery/Properties/Resources.resx | 7 ++- CsvQuery/Resources/CQIcon.ico | Bin 1150 -> 0 bytes 11 files changed, 88 insertions(+), 33 deletions(-) create mode 100644 CsvQuery/Properties/CsvQueryIconDark.ico create mode 100644 CsvQuery/Properties/CsvQueryIconLight.ico delete mode 100644 CsvQuery/Resources/CQIcon.ico diff --git a/CsvQuery/CsvQuery.csproj b/CsvQuery/CsvQuery.csproj index 5f91b8f..429ec6a 100644 --- a/CsvQuery/CsvQuery.csproj +++ b/CsvQuery/CsvQuery.csproj @@ -252,7 +252,8 @@ - + + diff --git a/CsvQuery/Main.cs b/CsvQuery/Main.cs index 5940bb3..b5596dd 100644 --- a/CsvQuery/Main.cs +++ b/CsvQuery/Main.cs @@ -107,7 +107,7 @@ public static void OnNotification(ScNotification notification) public static void CommandMenuInit() { - PluginBase.AddMenuItem("Toggle query window", ToggleQueryWindow, false, new ShortcutKey(true, true, false, Keys.C)); + PluginBase.AddMenuItem("Toggle CSV Query window", ToggleQueryWindow, false, new ShortcutKey(true, true, false, Keys.C)); PluginBase.AddMenuItem("Manual parse settings", ParseWithManualSettings); PluginBase.AddMenuItem("List parsed files", ListSqliteTables); PluginBase.AddMenuItem("---", null); @@ -155,22 +155,35 @@ private static void ParseWithManualSettings() public static void SetToolBarIcon() { - var icons = new toolbarIcons { hToolbarBmp = Resources.cq.GetHbitmap() }; - using (var iconPointer = new TemporaryPointer(icons)) + if (NotepadPPGateway.GetNppMajorVersion() < 8) { - Win32.SendMessage(PluginBase.nppData._nppHandle, - (uint)NppMsg.NPPM_ADDTOOLBARICON, - PluginBase.GetMenuItemId("Toggle query window"), - iconPointer.Pointer); + // Old way - for backwards compatibility to Npp before 8.0 + var icons = new toolbarIcons { hToolbarBmp = Resources.cq.GetHbitmap() }; + using (var iconPointer = new TemporaryPointer(icons)) + { + Win32.SendMessage(PluginBase.nppData._nppHandle, + (uint)NppMsg.NPPM_ADDTOOLBARICON, + PluginBase.GetMenuItemId("Toggle CSV Query window"), + iconPointer.Pointer); + } + } + else + { + // New way - for 8.0 and up (dark mode support) + var icons2 = new toolbarIconsWithDarkMode + { + hToolbarBmp = Resources.cq.GetHbitmap(), + hToolbarIcon = Resources.CsvQueryIconLight.Handle, + hToolbarIconDarkMode = Resources.CsvQueryIconDark.Handle, + }; + using (var iconPointer = new TemporaryPointer(icons2)) + { + Win32.SendMessage(PluginBase.nppData._nppHandle, + (uint)NppMsg.NPPM_ADDTOOLBARICON_FORDARKMODE, + PluginBase.GetMenuItemId("Toggle CSV Query window"), + iconPointer.Pointer); + } } - - //var iconPointer = Marshal.AllocHGlobal(Marshal.SizeOf(icons)); - //Marshal.StructureToPtr(icons, iconPointer, false); - //Win32.SendMessage(PluginBase.nppData._nppHandle, - // (uint)NppMsg.NPPM_ADDTOOLBARICON, - // PluginBase.GetMenuItemId("Toggle query window"), - // iconPointer); - //Marshal.FreeHGlobal(iconPointer); } public static void PluginCleanUp() @@ -322,7 +335,7 @@ public static void QueryWindowVisible(bool? show = null, bool supressAnalysis = { hClient = QueryWindow.Handle, pszName = "CSV Query", - dlgID = PluginBase.GetMenuItemId("Toggle query window"), + dlgID = PluginBase.GetMenuItemId("Toggle CSV Query window"), uMask = NppTbMsg.DWS_DF_CONT_BOTTOM | NppTbMsg.DWS_ICONTAB | NppTbMsg.DWS_ICONBAR, hIconTab = (uint) queryWindowIcon.Handle, pszModuleName = PluginName @@ -342,7 +355,7 @@ public static void QueryWindowVisible(bool? show = null, bool supressAnalysis = { Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_DMMSHOW, 0, QueryWindow.Handle); Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_SETMENUITEMCHECK, - PluginBase.GetMenuItemId("Toggle query window"), + PluginBase.GetMenuItemId("Toggle CSV Query window"), 1); } else @@ -351,7 +364,7 @@ public static void QueryWindowVisible(bool? show = null, bool supressAnalysis = 0, QueryWindow.Handle); Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_SETMENUITEMCHECK, - PluginBase.GetMenuItemId("Toggle query window"), 0); + PluginBase.GetMenuItemId("Toggle CSV Query window"), 0); } } } diff --git a/CsvQuery/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets b/CsvQuery/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets index 897e76c..b7bdd41 100644 --- a/CsvQuery/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets +++ b/CsvQuery/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets @@ -1,6 +1,15 @@ - - - + + + + + + $(DevEnvDir)\..\..\VC\bin + + + - + diff --git a/CsvQuery/PluginInfrastructure/Msgs_h.cs b/CsvQuery/PluginInfrastructure/Msgs_h.cs index e56aeff..707756d 100644 --- a/CsvQuery/PluginInfrastructure/Msgs_h.cs +++ b/CsvQuery/PluginInfrastructure/Msgs_h.cs @@ -519,6 +519,14 @@ public enum NppMsg : uint /// NPPM_SAVEFILE = Constants.NPPMSG + 94, + /// + /// VOID NPPM_ADDTOOLBARICON_FORDARKMODE(UINT funcItem[X]._cmdID, toolbarIconsWithDarkMode iconHandles) + /// Use NPPM_ADDTOOLBARICON_FORDARKMODE instead obsolete NPPM_ADDTOOLBARICON which doesn't support the dark mode + /// 2 formats / 3 icons are needed: 1 * BMP + 2 * ICO + /// All 3 handles below should be set so the icon will be displayed correctly if toolbar icon sets are changed by users, also in dark mode + /// + NPPM_ADDTOOLBARICON_FORDARKMODE = Constants.NPPMSG + 101, + RUNCOMMAND_USER = Constants.WM_USER + 3000, NPPM_GETFULLCURRENTPATH = RUNCOMMAND_USER + FULL_CURRENT_PATH, NPPM_GETCURRENTDIRECTORY = RUNCOMMAND_USER + CURRENT_DIRECTORY, diff --git a/CsvQuery/PluginInfrastructure/NotepadPPGateway.cs b/CsvQuery/PluginInfrastructure/NotepadPPGateway.cs index 23e4ed1..de32811 100644 --- a/CsvQuery/PluginInfrastructure/NotepadPPGateway.cs +++ b/CsvQuery/PluginInfrastructure/NotepadPPGateway.cs @@ -61,6 +61,12 @@ public static IntPtr GetCurrentBufferId() return Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_GETCURRENTBUFFERID, Unused, Unused); } + public static int GetNppMajorVersion() + { + var version = Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_GETNPPVERSION, Unused, Unused).ToInt32(); + return version >> 16; + } + public void OpenFileInNpp(string filename) { // NPPM_DOOPEN diff --git a/CsvQuery/Properties/CSVQueryIcon.png b/CsvQuery/Properties/CSVQueryIcon.png index 62ceb20b3bf771874f44bea39fff0fbf43705709..24908ac30d9e506b938ab116ddeaad5b917e0609 100644 GIT binary patch delta 589 zcmV-T006o#)$Tu@NZB#_2J z5J4M@fLIFCgn$SkGXX&?Ed&iVVigdCG}ckjS`g7L#SocQf`w>fAr@k#0Y!{U-2Qp@ z!~|!e#eDGVyT|i>&vF@n&w_pm`d_{Z`XmxQelx~wf)s*2Fn^!V+5P=Jdw6(YN~Mxr zUS2Yrji z_shX~d3nLf$q6nlE;f00000NkvXXu0mjf{a+Ia delta 620 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 P)ajTZ=vH%d!v6dZC@0TM literal 0 HcmV?d00001 diff --git a/CsvQuery/Properties/CsvQueryIconLight.ico b/CsvQuery/Properties/CsvQueryIconLight.ico new file mode 100644 index 0000000000000000000000000000000000000000..c42c55087e62812b5d194c477f88beaca9088406 GIT binary patch literal 16958 zcmeI24Um;p8GyfKfi*2xWF#PE7s9^~1kLa#T2s-Ck^Z&m&zz|!HJci8pcJk@gk?@S z6^-?y|vh% zi4BC&FdnADnJ@)T?4ce#6!tb5#)M9X8SrCx7#@W-c%rBL5PCj*9o`GB#hxA)BbkHW z+IjsRI$$THv*0`HH^Dz(4jco+VNaA3ae6wefLCA_WSe(ybxY}U9*l)ONm_7r8T=J` zn_oWf{)mmsU=q~2nA6_@?(Hqm*Ze|EyxvFK^}PQExCZ9YT9h~7)HpDY^)(;gZ-#AP zE?fs|;Xe@aKyvM#=3NTLfVr`j#5~;uzlEgV$>$BUSqYcIr@=Kl8z#eCxEISEX*YDt{`BFN@*yv{RVCQJn9;C`{M65`sk?^;*`@xGz_BK04ET9T`9ChXQ6~*a_Nwb2E50)`EN%C$>T-1RvwtJ?`9(fCC_3IfaJydky0D zESq0FU#l&~@jb8|l0N$U0^A4g@j}HM_fdEblD6Fgo(Bg*wd4>6o(6x0q<=n#-2P6= z#Yi|yUB6c$K8Aa0F*HLp#BVbKegtv9LfM#o9zF=A%0dhTyK(IqGNDxCCG_NM;b1cRUsN)gY-Tfuk=^A6gx^aL;# zD=mjI;O!86iR)F=zXuwjR5=|3t&p7mPU;?qF;ETh9Df9ML45AUsq0dXed&GLJ@ypD z$FOYvyB-EZrNz8_G^~cCU!H>(K{@0gjO2>`3?)EQ596*|HFdxl_@tWHG0^ z|GoFP55wHmkHJ*f9pAdX(7lw%ppeRnIY1bvF%8AF~nKHI_Ebr)O)&SfwZDr4!e9D?nz4(6u^ z;biDb%q6AD6b#$|u6xp#;8Qm3-Cc~04?v+Y>p5^fn3I$CU!ram7-s`uASA^-?7F)z z3l;Am=D+j6c|Q$FAM$w)`P*~*tMD#pfP7^l4SxvFLvp-r)NO_tpxw8DdvqvFf-l4O z;ZkUVLZq3-7l7j$Z^^NXd43i<^Wgn(Aml3_qG20!K(2A!C+>+`UG}mb+4PQ{_phRp|5kQ8 zb;dPp*-k1lWPf}~c{BkvTp7-|64&c4(dhFVhL%wnZ4d;OIq|Fdh zg{%kNDkf7I$vv1YKCPctgeND^$31W*{0f$Xww{G->ugdobKP!1W4k&EC-2xG+cE!4YDDk+|6u6y!(n6rNl%}_2e7c7SOoI}~W!WEFu-HK*q z6VJXS5d4ViJE`|9E0=s8L)r3-V{U;$?|tR)YY0YWf#-aD?w0Qd??&Yie+N7W+aWoQ z&p!q4u^~@VteAX~kvyB@ewqI~tNmsJpcFZl&I@28#K#Ebb<|%DP}lPWm0heY328FTkfDU-3@mZ>}p~6(rX*KE@At@A_AB{tO?z1ulli zA?}}LbK@HL5*P>0FPFH7UCVi}3B1=N?S*IW7vsUTss%Y7C++~xqTplD-p!4J8^CsB zK^fGoGV3>y@(l1k;Wtm_lVD5z5KIO4NG-|9II|MWOL2cK@9L@Zp6<8%He3U9;bwRQ zo`Ph*Bl?}{U#7R8wS10?;9Kl^*Z*fu7tcaQY8&qLo$wDU~$-)Cx7+~3CcGSKhv z-NPJ;(XQ2I@Vg%lwJzqQ!C-#&+a`Y>7P1D<(0@IA0){~~?syDau!J*zIz3l||2E;g z^NDlY`OVjYXTdq3RQsIk_M-5=lj&k^|0Q&QvFyG`=6K`8crm{(fwN!&>pX^(K zeJhY_1=2Ys>VDG^HDwCzQDa88MhzLAis~{N!|E>nFEQ%QD4m*(?x;(*wy5jVZR+-h zbbFJ!v0Jw__2`yvP2o+TfllgD{i2pGrV+KYHl?Gwu4p#irRtbMM`OCJzLORW>CVQEhIGog zp)+%(QMYcw67>wxrDn*k`s^B0nfILywr|l?Mq?_|zpY2(2jk#`n#NI!TF=m#y8xQe ayO%!29F*`$!YAs?bmK*LvrL;@fBp* /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// - internal static System.Drawing.Icon CQIcon { + internal static System.Drawing.Icon CsvQueryIconDark { get { - object obj = ResourceManager.GetObject("CQIcon", resourceCulture); + object obj = ResourceManager.GetObject("CsvQueryIconDark", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + ///

+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon CsvQueryIconLight { + get { + object obj = ResourceManager.GetObject("CsvQueryIconLight", resourceCulture); return ((System.Drawing.Icon)(obj)); } } diff --git a/CsvQuery/Properties/Resources.resx b/CsvQuery/Properties/Resources.resx index e8bd9b3..091b98c 100644 --- a/CsvQuery/Properties/Resources.resx +++ b/CsvQuery/Properties/Resources.resx @@ -127,7 +127,10 @@ CSV Query - - ..\Resources\CQIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + CsvQueryIconDark.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + CsvQueryIconLight.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/CsvQuery/Resources/CQIcon.ico b/CsvQuery/Resources/CQIcon.ico deleted file mode 100644 index 10119324e20c16240a2c965af9cb8fb3f94750a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmcJOK@Ng25JiV*;!;+wS-SKHrl;r;JPCKebSDS#26zZ{i*DGK`AsINRh(jC$>*0c zZ)Qj-QNdSP5|4@wOQH?Wwk#}FtRmcr_WbT&V;BZMM`<5mjWJn5>=gg(AO4$AL*uQr zA%{5fffLvGW7CBA_SC-hqSe1&Zyt3K2fuXPOAd{fZ;yMIzQwiv5r;k`SM0g