From 3a1a98d2864031483b064b80df96d6efde0da296 Mon Sep 17 00:00:00 2001 From: Ulf Date: Mon, 17 Jun 2013 00:16:26 +0200 Subject: [PATCH] persistant storage of non-unique layout --- PreviewHandler.cs | 134 ++++++++++++++++++++++++++++++-------------- preview toy.v11.suo | Bin 99840 -> 107520 bytes 2 files changed, 93 insertions(+), 41 deletions(-) diff --git a/PreviewHandler.cs b/PreviewHandler.cs index 75c6ead..94cece8 100644 --- a/PreviewHandler.cs +++ b/PreviewHandler.cs @@ -22,7 +22,8 @@ namespace PreviewToy private IntPtr active_client_handle = (IntPtr)0; private String active_client_title = ""; - private Dictionary> layouts; + private Dictionary> unique_layouts; + private Dictionary flat_layout; private bool is_initialized; @@ -34,7 +35,8 @@ namespace PreviewToy previews = new Dictionary(); - layouts = new Dictionary>(); + unique_layouts = new Dictionary>(); + flat_layout = new Dictionary(); ignoring_size_sync = new Stopwatch(); ignoring_size_sync.Start(); @@ -116,7 +118,6 @@ namespace PreviewToy } - // clean up old previews List to_be_pruned = new List(); @@ -148,18 +149,33 @@ namespace PreviewToy 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; + unique_layouts[el.Name.ToString().Replace("_", " ")] = inner; } } catch { // do nothing - } + } + + try + { + XElement rootElement = XElement.Load("flat_layout.xml"); + foreach (var el in rootElement.Elements()) + { + flat_layout["-> " + el.Name.ToString().Replace("_", " ") + " <-"] = new Point(Convert.ToInt32(el.Element("x").Value), + Convert.ToInt32(el.Element("y").Value)); + } + } + catch + { + // do nothing + } + } public void preview_did_switch() { - store_layout(); + store_layout(); //todo: check if it actually changed ... foreach (KeyValuePair entry in previews) { entry.Value.TopMost = Properties.Settings.Default.always_on_top; @@ -168,44 +184,52 @@ namespace PreviewToy private void store_layout() { - //todo: check if it actually changed ... - try + XElement el = new XElement("layouts"); + foreach (var client in unique_layouts.Keys) { - XElement el = new XElement("layouts"); - foreach (var client in layouts.Keys) + if (client == "") { - if (client == "") + continue; + } + XElement layout = new XElement(client.Replace(" ", "_")); + foreach (var thumbnail_ in unique_layouts[client]) + { + String thumbnail = thumbnail_.Key.Replace("-> ", "").Replace(" <-", "").Replace(" ", "_"); + if (thumbnail == "" || thumbnail == "...") { 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); + 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("layout.xml"); - } - catch + el.Save("layout.xml"); + + XElement el2 = new XElement("flat_layout"); + foreach (var clientKV in flat_layout) { - // + if (clientKV.Key == "" || clientKV.Key == "..." ) + { + continue; + } + XElement layout = new XElement(clientKV.Key.Replace("-> ", "").Replace(" <-", "").Replace(" ", "_")); + layout.Add(new XElement("x", clientKV.Value.X)); + layout.Add(new XElement("y", clientKV.Value.Y)); + el2.Add(layout); } + + el2.Save("flat_layout.xml"); + } private void handle_unique_layout(Preview preview, String last_known_active_window) { Dictionary layout; - if (layouts.TryGetValue(last_known_active_window, out layout)) + if (unique_layouts.TryGetValue(last_known_active_window, out layout)) { Point new_loc; if ( Properties.Settings.Default.unique_layout && layout.TryGetValue(preview.Text, out new_loc)) @@ -221,8 +245,21 @@ namespace PreviewToy else if (last_known_active_window != "") { // create outer dict - layouts[last_known_active_window] = new Dictionary(); - layouts[last_known_active_window][preview.Text] = preview.Location; + unique_layouts[last_known_active_window] = new Dictionary(); + unique_layouts[last_known_active_window][preview.Text] = preview.Location; + } + } + + private void handle_flat_layout(Preview preview) + { + Point layout; + if (flat_layout.TryGetValue(preview.Text, out layout)) + { + preview.Location = layout; + } + else if (preview.Text != "") + { + flat_layout[preview.Text] = preview.Location; } } @@ -259,9 +296,15 @@ namespace PreviewToy else { entry.Value.Show(); - handle_unique_layout(entry.Value, active_client_title); + if (Properties.Settings.Default.unique_layout) + { + handle_unique_layout(entry.Value, active_client_title); + } + else + { + handle_flat_layout(entry.Value); + } } - entry.Value.hover_zoom = Properties.Settings.Default.zoom_on_hover; entry.Value.show_overlay = Properties.Settings.Default.show_overlay; } @@ -294,18 +337,27 @@ namespace PreviewToy } - public void register_preview_position(String preview_handle, Point position) + public void register_preview_position(String preview_title, Point position) { - Dictionary layout; - if (layouts.TryGetValue(active_client_title, out layout)) + + if (Properties.Settings.Default.unique_layout) { - layout[preview_handle] = position; + Dictionary layout; + if (unique_layouts.TryGetValue(active_client_title, out layout)) + { + layout[preview_title] = position; + } + else if (active_client_title == "") + { + unique_layouts[active_client_title] = new Dictionary(); + unique_layouts[active_client_title][preview_title] = position; + } } - else if (active_client_title == "") + else { - layouts[active_client_title] = new Dictionary(); - layouts[active_client_title][preview_handle] = position; + flat_layout[preview_title] = position; } + } diff --git a/preview toy.v11.suo b/preview toy.v11.suo index 3f932acae82b51326c6679b5f83b161a728b06fd..9f86db8b7c279f7404dec5333bea418cbbb8e6d0 100644 GIT binary patch delta 4100 zcmd^?e^6A{702Isyj^w)D60$pV8IpFDryu3RQwT9@JF30BE+#ts$lR(ETR6`wMcbX zNmUSHVUOk6)>yMDvBoCIv#yCm*Pl@#sFRLOQ`1qJ+Dyhjq6JOt==OV;w+Xg7(=?sw zbb4n#oOACz_q=z{IrqNBU2SxqGu9+?Lz}sGv?NWGBq`}`f;i9<)B-Fu z1pH8VmtwEYi%uH@eI6J9B7p;l2iSEfbR+c9Ktx8g)Y_cPviqI-mw(M&7W@MGv*0=K zJ+J^Q1o@x=0pvKctKtx2*eW!E0 zsaI68-a868fhU{dvPAkq=@KdI3q-oU1;zuBu8}~b>lhHv=mja#6$Si2WGl)JWePBW zxZ0ead`(f3a?ueh#GAzHy6B4*N>Mn*_j8nCj5$xYNa0zA)wD`GVa}DK#nP^@BeKLC zbRhol-pGX%&0h+$K8ZMMO#?m29nrJ-lsuBcG?%4H_N+N=8j2Sf2EIHy!l;bG z7zW;0#ba%!a_+DOm$AQ1;gXnjb>m4fibH~B4|?9A&5tq&?=+A&kmjOI>>3@Q3G5n! z<0`8ADX~^Rt_E?|=4)T{3zt2kok81dlZ-LpA!Nkuquq~lU<^8tw0i@LN~0}{Od?AY zyDSzLMSPWai0nx`We#RXoUD**s^E@9Y|t{1-2FY-+p2YTt zt&N@5+PyJG#j~iL-sFx&0i!s(rLuN!qA|iV&#u{vu90`9;wf}ee|8lH$iS|}Ro*#0 zJWJY*S+H#xuiaZRn-oz*oMidhu$ zV2}hvp@(uEaykNILKnq83Z#HkAnq!0y@;!5EC|_)!y$ALS|P>VmLW-INnDas0Goa^ zUlB80xPFJ%DSL{Y>|8X5PZuW}c42-ae^LB5Jvv9Utu+-NW-OMiQSch*9 zT7LEIc&+s4T$wi=>+$fEcH*7x#E!E^!n0uMlnS{2nSp%gy;g1K@nw->B1xaX`xe4o zQSj$ME-Iq~Q?gm~s7=0pWw2;;eaJHOEyD>}q&zdyv6 z?hoN1XKcLUdJX3v@5_IDKY?$awehqwiF~LzIym=v>xWwL$?fK^SO0vgc>~`*R-t`% zri6B{YLWTm>6x1U(>&$t``Nv!RTeI^RhLeOnX;zlW=_q_ox?2$QrUgW?P)P;pSPA$ zbP(^`>>hX5=E)pW4hPpHPHg{ZjtM|k<5v&jOFIZvD)nFMuX}dNC|4qbTaxJ zJ?JVmdiKb^J$>mp;*;tM---mP39EOIT%SmCD98#{wW z8Pw&Gq;h$aRSR!0lJ5`Mgr6C>2S_}ov^I9W}ePZ?3Gab>Iv{!fL2 z#?wDaXLs8?p81i(Ag;*CTHw!k-nQiy?shd+#X2`{Xo~sI`Bv0!&r+I}cDtDl=hF?+ zZrtsw99~NIW#4^;!iZPgoyGP~Ok8;`7qq)gw2A~MLTF^Y-} z;!PVhEqak+e3U|E@?k6aN%bdDj%tae5p{jYU)PKLs=p6q)UQKa zdlRV{L&?>BWMNuzK}vxEpG48rQVR`L-|Ryc%U_?YFRI-5of%ch*q~9{QH;&GKAu@jlFshfe delta 4341 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