From 87fcda0b31e8ff992e5605bfdfd9eb4c9cf68eed Mon Sep 17 00:00:00 2001 From: Ulf Date: Fri, 14 Jun 2013 23:12:24 +0200 Subject: [PATCH] positions are stored by window title positions are stored persistently --- Preview.cs | 2 +- PreviewHandler.cs | 110 +++++++++++++++++++++++++++---------- Properties/AssemblyInfo.cs | 6 +- app.config | 6 +- preview toy.csproj | 10 +++- preview toy.v11.suo | Bin 78336 -> 82944 bytes 6 files changed, 96 insertions(+), 38 deletions(-) diff --git a/Preview.cs b/Preview.cs index f7ccd17..806af5b 100644 --- a/Preview.cs +++ b/Preview.cs @@ -45,7 +45,7 @@ namespace PreviewToy protected override void OnMove(EventArgs e) { base.OnMove(e); - this.spawner.register_preview_position(this.Handle, this.Location); + this.spawner.register_preview_position(this.Text, this.Location); } protected void RefreshPreview() diff --git a/PreviewHandler.cs b/PreviewHandler.cs index 8482c24..3f4c840 100644 --- a/PreviewHandler.cs +++ b/PreviewHandler.cs @@ -9,6 +9,8 @@ using System.Runtime.InteropServices; using System.Diagnostics; using System.Drawing.Text; using System.Windows.Threading; +using System.Xml.Linq; +using System.Linq; namespace PreviewToy { @@ -17,13 +19,13 @@ namespace PreviewToy private Dictionary previews; private DispatcherTimer dispatcherTimer; - private IntPtr active_client; + private IntPtr active_client_handle = (IntPtr)0; + private String active_client_title = ""; - private Dictionary> layouts; + private Dictionary> layouts; private bool is_initialized; - private bool frames_were_hidden = false; private Stopwatch ignoring_size_sync; public PreviewToyHandler() @@ -32,7 +34,7 @@ namespace PreviewToy previews = new Dictionary(); - layouts = new Dictionary>(); + layouts = new Dictionary>(); ignoring_size_sync = new Stopwatch(); ignoring_size_sync.Start(); @@ -66,6 +68,8 @@ namespace PreviewToy option_sync_size_x.Text = Properties.Settings.Default.sync_resize_x.ToString(); option_sync_size_y.Text = Properties.Settings.Default.sync_resize_y.ToString(); option_show_thumbnail_frames.Checked = Properties.Settings.Default.show_thumb_frames; + + load_layout(); } @@ -102,6 +106,12 @@ namespace PreviewToy previews[process.MainWindowHandle].Text = "-> " + process.MainWindowTitle + " <-"; } + if (process.MainWindowHandle == DwmApi.GetForegroundWindow()) + { + active_client_handle = process.MainWindowHandle; + active_client_title = process.MainWindowTitle; + } + } @@ -120,31 +130,80 @@ namespace PreviewToy { previews[processHandle].Close(); previews.Remove(processHandle); - layouts.Remove(processHandle); } } - private void handle_unique_layout(Preview preview, IntPtr last_known_active_window) + private void load_layout() { - Dictionary layout; + try + { + XElement rootElement = XElement.Load("config.xml"); + foreach (var el in rootElement.Elements()) + { + Dictionary inner = new Dictionary(); + foreach (var inner_el in el.Elements()) + { + inner["-> " + inner_el.Name.ToString().Replace("_", " ") + " <-"] = new Point(Convert.ToInt32(inner_el.Element("x").Value), + Convert.ToInt32(inner_el.Element("y").Value)); + } + layouts[el.Name.ToString().Replace("_", " ")] = inner; + } + } + catch + { + // do nothing + } + } + + private void store_layout() + { + XElement el = new XElement("layouts"); + foreach (var client in layouts.Keys) + { + if (client == "") + { + continue; + } + XElement layout = new XElement(client.Replace(" ", "_")); + foreach (var thumbnail_ in layouts[client]) + { + String thumbnail = thumbnail_.Key.Replace("-> ", "").Replace(" <-", "").Replace(" ", "_"); + if (thumbnail == "") + { + continue; + } + XElement position = new XElement(thumbnail); + position.Add(new XElement("x", thumbnail_.Value.X)); + position.Add(new XElement("y", thumbnail_.Value.Y)); + layout.Add(position); + } + el.Add(layout); + } + + el.Save("config.xml"); + } + + private void handle_unique_layout(Preview preview, String last_known_active_window) + { + Dictionary layout; if (layouts.TryGetValue(last_known_active_window, out layout)) { Point new_loc; - if (layout.TryGetValue(preview.Handle, out new_loc)) + if ( Properties.Settings.Default.unique_layout && layout.TryGetValue(preview.Text, out new_loc)) { - preview.Location = new_loc; + preview.Location = new_loc; } else { // create inner dict - layout[preview.Handle] = preview.Location; + layout[preview.Text] = preview.Location; } } - else if ((int)last_known_active_window != 0) + else if (last_known_active_window != "") { // create outer dict - layouts[last_known_active_window] = new Dictionary(); - layouts[last_known_active_window][preview.Handle] = preview.Location; + layouts[last_known_active_window] = new Dictionary(); + layouts[last_known_active_window][preview.Text] = preview.Location; } } @@ -167,10 +226,6 @@ namespace PreviewToy IntPtr active_window = DwmApi.GetForegroundWindow(); - Preview poo; - if (previews.TryGetValue(active_window, out poo)){ - active_client = active_window;} - // hide, show, resize and move foreach (KeyValuePair entry in previews) { @@ -178,18 +233,14 @@ namespace PreviewToy { entry.Value.Hide(); } - else if (entry.Key == active_client && Properties.Settings.Default.hide_active) + else if (entry.Key == active_client_handle && Properties.Settings.Default.hide_active) { entry.Value.Hide(); } else { entry.Value.Show(); - - if (Properties.Settings.Default.unique_layout) - { - handle_unique_layout(entry.Value, active_client); - } + handle_unique_layout(entry.Value, active_client_title); } } } @@ -221,18 +272,19 @@ namespace PreviewToy } - public void register_preview_position(IntPtr preview_handle, Point position) + public void register_preview_position(String preview_handle, Point position) { - Dictionary layout; - if (layouts.TryGetValue(active_client, out layout)) + Dictionary layout; + if (layouts.TryGetValue(active_client_title, out layout)) { layout[preview_handle] = position; } - else if ((int)active_client != 0) + else if (active_client_title == "") { - layouts[active_client] = new Dictionary(); - layouts[active_client][preview_handle] = position; + layouts[active_client_title] = new Dictionary(); + layouts[active_client_title][preview_handle] = position; } + store_layout(); } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 690b69d..862d5f2 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -2,11 +2,11 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -[assembly: AssemblyTitle("DWM")] +[assembly: AssemblyTitle("PreviewToy")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("DWM")] +[assembly: AssemblyCompany("?")] +[assembly: AssemblyProduct("PreviewToy")] [assembly: AssemblyCopyright("Copyright © Microsoft 2007")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/app.config b/app.config index a5655e8..1831c9b 100644 --- a/app.config +++ b/app.config @@ -1,11 +1,11 @@ - -
+ +
- + False diff --git a/preview toy.csproj b/preview toy.csproj index 990edb0..6315a4a 100644 --- a/preview toy.csproj +++ b/preview toy.csproj @@ -10,7 +10,7 @@ Properties PreviewToy eve-o preview - v3.0 + v4.5 2.0 @@ -41,6 +41,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -50,6 +51,7 @@ prompt 4 false + false icon.ico @@ -73,8 +75,9 @@ LocalIntranet + - Properties\app.manifest + true @@ -83,6 +86,9 @@ + + + diff --git a/preview toy.v11.suo b/preview toy.v11.suo index 8c9a340c107abadb5b4ee58b3ac268e465bfd137..8dc1e087bf60207b9492c7d5306cdd497dfb2a3d 100644 GIT binary patch delta 3545 zcmcJRe^AuN6~Mpm%lD3hI}ij8kP{9(444BBIOOo>p%*kt_#L&0nMwpA3dxo!3jO3(DnmGRYIwe(%7d2y=NwxgZq+_iO)3a?rjiZ^?-M71M*X9yzJ7k@Pc%Jh}2*(*n^&=ikPEN8?re_>4j^Ts3v_V65^(8P; ziL(q_<*oe39DXBj<4<$g?AI1_f+|7@CLstyWIO9*A>{&zsl=Ovf=D7V2|2Nkm_Y;) z%w9(+C6lbDC?c4MCy?kOW)g|SG$Md_g77C2h#n$>h$P-->MT-Xh&aMdgb{dHp^5k> z{Xt8aEMhj1O|*0s#~Dt%#X}>zP@GkzP@F7 zU*EF4*S9ii8%{9avU0C)neOrJbKE>n<)fUNPIctmNBTC6%A<)?;z>eJ2n1V1x68YV z!}4<|Gl!T!6j?My~Rx-9bR^fQ@CeUJ2NkM@7phx&v;8+QH&@WxicKC~OY%TqX zJ)mAB8jpa`WR7Gb=ri(|1iekIK~-tGZnWkecYJcK4Aa##=$0A%%yuVWohJm<_YGYJ;cw5ZbBrO#aon4A@&n$;sBu`4ide@^y9_tV6PgJEuzdZ z9Isj?1GdNUqcS~OU)p_QvkhQBZh5s`G9PvVI=?6Ye`(6^-{)zM6kI95t%s-LsVf&_ zTc%Shl2Xo86@Ko)x!C-^0~JTa*spW)x!<1pq20{Ch>YBX(U)qsJ8ORBst7w%*52`$I6Kf3=LAk|MMn zj_@z%8t6;K7viI(mi`@njw1rz{#6D3?TALQo#g%Tm{*!Shi072EX5l?4?ppq12BDbE+&sWDK)q{0Yfh=looz|8UCNG;TYl3`NtLhR<4OA zR)h!sFheq5vw`CVmH%lXxW2Z@T3zprW;o|&TEN?2nPZ@DlW6vbGIV|$jh9ElM5jNP z0~PczVsA$ky{&H4VfJt@Hn@Hvo&IVuz+QaWRi)Tay*@LeyrCM0zm3DA*H!q%U)MTr z@yhDT4XYa(>tAXtuk)#T3!|^E$7?PHT1WNJOFh)#v^(*AbX(_+gh{=lvp|<)GL~0n zrI)7|U(85PF&ZngQ%o5dYf~yJvMLS6*`}P#$|}5dW0RodENl!~GdtMqkh4b+lkYs_ zWXEijo|NgLSpnL_?>pS@P>asvbanPCfX6OZ-v7@1jY)M_51D!8eNxERSaY)*FMsts z#@xA%apmzid^Zk@ZWQB}ceIqBiquXW?QO*Aoar9j!aUSOzS3dtq)yV^zY3@rZ^7TV z^4)FN&HYexPIis3%hPhm-RAO08eV-+>zLrNb9jl{n!VS(!Xg|Cv*UA2KooG1X zdvZ`=8m|Bg_Kxmj?O9R6fIEp_QE&=M{UkqIQ%m4rY delta 3321 zcmdUxe{fV+70377yj@_hJ`GU@FUrT@WUEuER_b5fpog5 zG}i1wTcLs@d8fMLNFC-e?l=zOz;jxsjdj}~BGv%t( zss8CWzM0RSbI<+p?m6eab2oC_8M&#Q^6}u^+}TAA$7+Yekpu1}lSv2%foCstmMhQT z{=uV<^i9x1V&1{Ssx6l=C|QaozrUl3eJWRNC;m`%@f+O@s*U)moRNY}SYf(M!83zN zn>9M9hx5>oH+&0H2M^e7S?{aRYk=r$AXk9pc6+uh=Rq=949dU)AmcMnG1}E2V%tj~ zkJ~!NJenG3zyOaOOTZk^1nNNpSPJri7c2uSK`tl>8^Y3Y3G-fCs?=kXjf&U89|w z!rNiknPuDs{d0EvVaU&e9w3p}1NjK(1z!Y@g1z7|@FlPhJP!K6ejs!DAqT)gATK@y z`Gl>1+2I)7KC|X&yIE*U875EIZcFkEHQ>2kA2!DypP&tBr;~eIF-Ib1Y zQ0l-!Fbha}hk5z~{7z(Vi0Wj&_zWlXM5{j!H;L-!!lu>;RiU zD`*3o!4|*`&KgZt&I8q8KBxf;KrL7Z{D9BY_HJAUWj$yC0k8qc0{628_N{hb zJ7kBgcS3d%d)&37gD)C+KP~w&c7G9E0J6xdko;C&#qQT^gBV}8^*H1k;7u?NE`eWw z%ixzFvx}=)`ULd%z%}qTV86Rgn~rT*1MXeK<7%mEBh2O;PUH`h#zS+%c{wo1k;3SE zb3UXozEc(^Cl8gMFpJgyU!2WS&Bz~5x%vh8lybFAnjD&Yo~u23ST9_I!m4wiaEyxz zmq9OrzQ*tcbopH5bITN84*7z*R6hAUGREknkFM)-j)PfN>b34vxs_3OMeE8kTa$Gj zV%7epE;UW+UuGHAio)K$jmHbHwT_7EE%e<`R-(|QjOviuh+1FWu6tpX>`cw7!mR2M z`ZW*DZx^@ne}&%NKpw+)=~LU~N%$b2vD`A5Wul>_6#SGAb-ft!ERYAMX6lS(&YDyK z(Yd0zr$`j9ZIIHz$D6$+Vr)R85lHo4A{}GsSOG;!{wlB<$UVfjnj5rTqIlQ#XwQif zSsO8%lv$+A2Q;I7JU3MZ{!Q4N)G5PpDH|s+085$j|FzUQ#y_+@mR?bhSyAnIbiJYtq@})|j+KgORZA;(%DYxvqKYtsN zkjY2PN6M%PQ56p@o^X;>adF=z#rBU*9$xS@v)f}dT+*eE%C0gFe&QCsgYt(s(%6zq zZVZqbKQ$=rFel~@-~R@uWS#iw1;;qj*ThYImz{oCj`Bx+o1LjkBb|o*CylazF2_bD zWESR7Sx}e2%Bjd0Y0SD)<|eFHYt?qWP5;~C$OG;djmj1~HNn&gk*H>ND|yn}V8}i; z>7U3`8=&i_=vLTnIsuIuV~o?#hToi zPiB`gk1C@zl;um(mG*-Z9TQsiv9x5PW<(kOmfTc{TbJ!c$bXWI1CePPTDAudIS%o$ z11t62*YYG54%Yh@p=uX${J_$}zct1NUU+_M>xnCO_g>xin$h3MH~N>*Dn8P`_Tt!Y zm9^@-m-EaYYQ}e5{Jq~KOpDle&0~4qxlR1)HP5%bRLWyF4qK=H^ceB$4|lWccO@5N zN^>s6o6hltGf(pQ@gj~Nuj8^0Zt?98im8}KPj5LJ?^ot|?QHz_%KS+k#}6e6Bn@)> zg-V`&u(Y7b@g)9E9{j{I&9?B#CwB5nf7r|Z+oe|NyMM_s-&N*KWxl7l_x%mgq5`V7 z25+9CXm1fMN;RY3oQ_+0PvZO5y<3X-`ps$4muAv~(I07a%DOtaoL*i|apL&Le)E=! zl9Og|yjuDYLsbY#02mk7S#qYuJmz(hujn5#z`41H