source: sphinxdocs/build/html/_modules/GSASIIlog.html @ 1709

Last change on this file since 1709 was 1709, checked in by toby, 8 years ago

change sphinx docs links; rebuild & fixing minor formatting

  • Property svn:mime-type set to text/html
File size: 94.8 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>GSASIIlog &mdash; GSAS-II 0.2.0 documentation</title>
10   
11    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../',
17        VERSION:     '0.2.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../_static/jquery.js"></script>
24    <script type="text/javascript" src="../_static/underscore.js"></script>
25    <script type="text/javascript" src="../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="GSAS-II 0.2.0 documentation" href="../index.html" />
28    <link rel="up" title="Module code" href="index.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../index.html">GSAS-II 0.2.0 documentation</a> &raquo;</li>
41          <li><a href="index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for GSASIIlog</h1><div class="highlight"><pre>
51<span class="c"># -*- coding: utf-8 -*-</span>
52<span class="c">#GSASIIlog - Routines used to track and replay &quot;actions&quot;</span>
53<span class="c">########### SVN repository information ###################</span>
54<span class="c"># $Date: $</span>
55<span class="c"># $Author: toby $</span>
56<span class="c"># $Revision: $</span>
57<span class="c"># $URL: $</span>
58<span class="c"># $Id: $</span>
59<span class="c">########### SVN repository information ###################</span>
60<span class="sd">&#39;&#39;&#39;</span>
61<span class="sd">*GSASIIlog: Logging of &quot;Actions&quot;*</span>
62<span class="sd">---------------------------------</span>
63
64<span class="sd">Module to provide logging services, e.g. track and replay &quot;actions&quot;</span>
65<span class="sd">such as menu item, tree item, button press, value change and so on. </span>
66<span class="sd">&#39;&#39;&#39;</span>
67<span class="kn">import</span> <span class="nn">wx</span>
68<span class="kn">import</span> <span class="nn">GSASIIgrid</span> <span class="kn">as</span> <span class="nn">G2gd</span>
69<span class="kn">import</span> <span class="nn">GSASIIpath</span>
70<span class="c"># Global variables </span>
71<span class="n">MenuBindingLookup</span> <span class="o">=</span> <span class="p">{}</span>
72<span class="s">&#39;Lookup table for Menu buttons&#39;</span>
73<span class="n">ButtonBindingLookup</span> <span class="o">=</span> <span class="p">{}</span>
74<span class="s">&#39;Lookup table for button objects&#39;</span>
75<span class="n">G2logList</span> <span class="o">=</span> <span class="p">[</span><span class="bp">None</span><span class="p">]</span>
76<span class="s">&#39;Contains a list of logged actions; first item is ignored&#39;</span>
77<span class="n">LogInfo</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;Logging&#39;</span><span class="p">:</span><span class="bp">False</span><span class="p">,</span> <span class="s">&#39;Tree&#39;</span><span class="p">:</span><span class="bp">None</span><span class="p">,</span> <span class="s">&#39;LastPaintAction&#39;</span><span class="p">:</span><span class="bp">None</span><span class="p">}</span>
78<span class="s">&#39;Contains values that are needed in the module for past actions &amp; object location&#39;</span>
79
80<span class="c"># TODO:</span>
81<span class="c"># Might want to save the last displayed screen with some objects to make sure</span>
82<span class="c"># the commands are executed in a sensible order</span>
83<span class="c"># 1) save tree press under tab press item.</span>
84<span class="c"># 2) save tree &amp; tab for button press</span>
85
86<span class="c"># TODO:</span>
87<span class="c"># probably need an object for saving calls and arguments to call specific functions/methods.</span>
88<span class="c"># The items to be called need to register themselves so that they can be found</span>
89<span class="c">#   This needs to be done with a Register(function,&#39;unique-string&#39;) call after every def</span>
90<span class="c">#   and then a LogCall(&#39;unique-string&#39;,pargs,kwargs) call inside the routine</span>
91
92<span class="n">debug</span> <span class="o">=</span> <span class="n">GSASIIpath</span><span class="o">.</span><span class="n">GetConfigValue</span><span class="p">(</span><span class="s">&#39;logging_debug&#39;</span><span class="p">)</span>
93<span class="c">#===========================================================================</span>
94<span class="c"># objects for logging variables</span>
95<span class="k">def</span> <span class="nf">_l2s</span><span class="p">(</span><span class="n">lst</span><span class="p">,</span><span class="n">separator</span><span class="o">=</span><span class="s">&#39;+&#39;</span><span class="p">):</span>
96    <span class="s">&#39;Combine a list of objects into a string, with a separator&#39;</span>
97    <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
98    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">:</span> 
99        <span class="k">if</span> <span class="n">s</span> <span class="o">!=</span> <span class="s">&#39;&#39;</span><span class="p">:</span> <span class="n">s</span> <span class="o">+=</span> <span class="n">separator</span>
100        <span class="n">s</span> <span class="o">+=</span> <span class="s">&#39;&quot;&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;&quot;&#39;</span>
101    <span class="k">return</span> <span class="n">s</span>
102
103<div class="viewcode-block" id="LogEntry"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.LogEntry">[docs]</a><span class="k">class</span> <span class="nc">LogEntry</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
104    <span class="sd">&#39;&#39;&#39;Base class to define logging objects. These store information on events</span>
105<span class="sd">    in a manner that can be pickled and saved -- direct references to wx objects</span>
106<span class="sd">    is not allowed.</span>
107
108<span class="sd">    Each object must define:</span>
109<span class="sd">    </span>
110<span class="sd">     *  __init__: stores the information needed to log &amp; later recreate the action </span>
111<span class="sd">     *  __str__ : shows a nice ASCII string for each action</span>
112<span class="sd">     *  Replay:   recreates the action when the log is played</span>
113<span class="sd">     </span>
114<span class="sd">    optional:</span>
115<span class="sd">    </span>
116<span class="sd">      * Repaint:  redisplays the current window</span>
117<span class="sd">      </span>
118<span class="sd">    &#39;&#39;&#39;</span>
119    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
120        <span class="c"># Must be overridden</span>
121        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;No __init__ defined&#39;</span><span class="p">)</span>
122    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
123        <span class="c"># Must be overridden</span>
124        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;No __str__ defined&#39;</span><span class="p">)</span>
125    <span class="k">def</span> <span class="nf">Replay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
126        <span class="c"># Must be overridden</span>
127        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;No Replay defined&#39;</span><span class="p">)</span>
128    <span class="k">def</span> <span class="nf">Repaint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
129        <span class="c"># optional</span>
130        <span class="k">pass</span>
131</div>
132<div class="viewcode-block" id="VarLogEntry"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.VarLogEntry">[docs]</a><span class="k">class</span> <span class="nc">VarLogEntry</span><span class="p">(</span><span class="n">LogEntry</span><span class="p">):</span>
133    <span class="s">&#39;object that tracks changes to a variable&#39;</span>
134    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">treeRefs</span><span class="p">,</span><span class="n">indexRefs</span><span class="p">,</span><span class="n">value</span><span class="p">):</span>
135        <span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span> <span class="o">=</span> <span class="n">treeRefs</span>
136        <span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span> <span class="o">=</span> <span class="n">indexRefs</span>
137        <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
138        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;Logging var change: w/treeRefs&#39;</span><span class="p">,</span><span class="n">treeRefs</span><span class="p">,</span><span class="s">&#39;indexRefs&#39;</span><span class="p">,</span><span class="n">indexRefs</span><span class="p">,</span><span class="s">&#39;new value=&#39;</span><span class="p">,</span><span class="n">value</span>
139    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
140        <span class="n">treeList</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">[:]</span>
141        <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">tuple</span><span class="p">:</span>
142            <span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Hist #&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="s">&#39; of type &#39;</span><span class="o">+</span><span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
143        <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">treeList</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">int</span><span class="p">:</span>
144            <span class="n">treeList</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Phase #&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
145        <span class="k">return</span> <span class="s">&#39;Variable change: Key(s)= &#39;</span><span class="o">+</span><span class="n">_l2s</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="p">)</span><span class="o">+</span><span class="s">&#39; to value=&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
146<div class="viewcode-block" id="VarLogEntry.Replay"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.VarLogEntry.Replay">[docs]</a>    <span class="k">def</span> <span class="nf">Replay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
147        <span class="s">&#39;Perform a Variable Change action, when read from the log&#39;</span>
148        <span class="n">parentId</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">root</span>
149        <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">treeitem</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">):</span>
150            <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">treeitem</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">tuple</span><span class="p">:</span>
151                <span class="n">treeitem</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">ConvertRelativeHistNum</span><span class="p">(</span><span class="o">*</span><span class="n">treeitem</span><span class="p">)</span>
152            <span class="n">item</span><span class="p">,</span> <span class="n">cookie</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">GetFirstChild</span><span class="p">(</span><span class="n">parentId</span><span class="p">)</span>
153            <span class="k">while</span> <span class="n">item</span><span class="p">:</span>
154                <span class="k">if</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">GetItemText</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">==</span> <span class="n">treeitem</span><span class="p">:</span>
155                    <span class="n">parentId</span> <span class="o">=</span> <span class="n">item</span>
156                    <span class="k">break</span>
157                <span class="k">else</span><span class="p">:</span>
158                    <span class="n">item</span><span class="p">,</span> <span class="n">cookie</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">GetNextChild</span><span class="p">(</span><span class="n">parentId</span><span class="p">,</span> <span class="n">cookie</span><span class="p">)</span>
159            <span class="k">else</span><span class="p">:</span>
160                <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&quot;Tree item not found for &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
161        <span class="c"># get the inner most data array</span>
162        <span class="n">data</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">GetItemPyData</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
163        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
164            <span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">item</span><span class="p">]</span>
165        <span class="c"># set the value</span>
166        <span class="n">data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span>
167</div></div>
168<div class="viewcode-block" id="MenuLogEntry"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.MenuLogEntry">[docs]</a><span class="k">class</span> <span class="nc">MenuLogEntry</span><span class="p">(</span><span class="n">LogEntry</span><span class="p">):</span>
169    <span class="s">&#39;object that tracks when a menu command is executed&#39;</span>
170    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">menulabellist</span><span class="p">):</span>
171        <span class="bp">self</span><span class="o">.</span><span class="n">menulabellist</span> <span class="o">=</span> <span class="n">menulabellist</span>
172        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span>
173            <span class="n">t</span> <span class="o">=</span> <span class="n">menulabellist</span><span class="p">[:]</span>
174            <span class="n">t</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
175            <span class="n">l</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
176            <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">t</span><span class="p">:</span>
177                <span class="k">if</span> <span class="n">l</span><span class="p">:</span> <span class="n">l</span> <span class="o">+=</span> <span class="s">&#39; -&gt; &#39;</span>
178                <span class="n">l</span> <span class="o">+=</span> <span class="n">item</span>
179            <span class="k">print</span> <span class="s">&#39;Logging menu command: &#39;</span><span class="o">+</span><span class="n">l</span>
180    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
181        <span class="k">return</span> <span class="s">&#39;Menu press: From &#39;</span><span class="o">+</span><span class="n">_l2s</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">menulabellist</span><span class="p">,</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
182<div class="viewcode-block" id="MenuLogEntry.Replay"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.MenuLogEntry.Replay">[docs]</a>    <span class="k">def</span> <span class="nf">Replay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
183        <span class="s">&#39;Perform a Menu item action when read from the log&#39;</span>
184        <span class="n">key</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
185        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">menulabellist</span><span class="p">:</span>
186            <span class="k">if</span> <span class="n">key</span><span class="p">:</span> <span class="n">key</span> <span class="o">+=</span> <span class="s">&#39;+&#39;</span>
187            <span class="n">key</span> <span class="o">+=</span> <span class="n">item</span>
188        <span class="k">if</span> <span class="n">MenuBindingLookup</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
189            <span class="n">handler</span><span class="p">,</span><span class="nb">id</span><span class="p">,</span><span class="n">menuobj</span> <span class="o">=</span> <span class="n">MenuBindingLookup</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
190            <span class="n">MyEvent</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">CommandEvent</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_MENU</span><span class="o">.</span><span class="n">typeId</span><span class="p">,</span> <span class="nb">id</span><span class="p">)</span>
191            <span class="n">MyEvent</span><span class="o">.</span><span class="n">SetEventObject</span><span class="p">(</span><span class="n">menuobj</span><span class="p">)</span>
192            <span class="n">handler</span><span class="p">(</span><span class="n">MyEvent</span><span class="p">)</span>
193        <span class="k">else</span><span class="p">:</span>
194            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;No binding for menu item &#39;</span><span class="o">+</span><span class="n">key</span><span class="p">)</span>       
195            </div></div>
196<div class="viewcode-block" id="TabLogEntry"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.TabLogEntry">[docs]</a><span class="k">class</span> <span class="nc">TabLogEntry</span><span class="p">(</span><span class="n">LogEntry</span><span class="p">):</span>
197    <span class="s">&#39;Object to track when tabs are pressed in the DataFrame window&#39;</span>
198    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">title</span><span class="p">,</span><span class="n">tabname</span><span class="p">):</span>
199        <span class="bp">self</span><span class="o">.</span><span class="n">wintitle</span> <span class="o">=</span> <span class="n">title</span>
200        <span class="bp">self</span><span class="o">.</span><span class="n">tablabel</span> <span class="o">=</span> <span class="n">tabname</span>
201        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;Logging tab: &quot;&#39;</span><span class="o">+</span><span class="n">tabname</span><span class="o">+</span><span class="s">&#39;&quot; on window titled &#39;</span><span class="o">+</span><span class="n">title</span>
202    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
203        <span class="k">return</span> <span class="s">&#39;Tab press: Tab=&#39;</span><span class="o">+</span><span class="n">_l2s</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">tablabel</span><span class="p">])</span><span class="o">+</span><span class="s">&#39; on window labeled &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">wintitle</span><span class="p">)</span>
204<div class="viewcode-block" id="TabLogEntry.Repaint"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.TabLogEntry.Repaint">[docs]</a>    <span class="k">def</span> <span class="nf">Repaint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
205        <span class="s">&#39;Used to redraw a window created in response to a Tab press&#39;</span>
206        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;Repaint&#39;</span>
207        <span class="n">saveval</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span>
208        <span class="bp">self</span><span class="o">.</span><span class="n">Replay</span><span class="p">()</span>
209        <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">saveval</span></div>
210<div class="viewcode-block" id="TabLogEntry.Replay"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.TabLogEntry.Replay">[docs]</a>    <span class="k">def</span> <span class="nf">Replay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
211        <span class="s">&#39;Perform a Tab press action when read from the log&#39;</span>
212        <span class="n">wintitle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wintitle</span>
213        <span class="n">tabname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tablabel</span>
214        <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span>
215        <span class="k">if</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">dataFrame</span><span class="o">.</span><span class="n">GetTitle</span><span class="p">()</span> <span class="o">!=</span> <span class="n">wintitle</span><span class="p">:</span>
216            <span class="k">print</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">dataFrame</span><span class="o">.</span><span class="n">GetTitle</span><span class="p">(),</span><span class="s">&#39; != &#39;</span><span class="p">,</span><span class="n">wintitle</span>
217            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;tab in wrong window&#39;</span><span class="p">)</span>
218        <span class="k">for</span> <span class="n">PageNum</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">dataDisplay</span><span class="o">.</span><span class="n">GetPageCount</span><span class="p">()):</span>
219            <span class="k">if</span> <span class="n">tabname</span> <span class="o">==</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">dataDisplay</span><span class="o">.</span><span class="n">GetPageText</span><span class="p">(</span><span class="n">PageNum</span><span class="p">):</span>
220                <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">dataDisplay</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="n">PageNum</span><span class="p">)</span>
221                <span class="k">return</span>
222        <span class="k">else</span><span class="p">:</span>
223            <span class="k">print</span> <span class="n">tabname</span><span class="p">,</span><span class="s">&#39;not in&#39;</span><span class="p">,[</span>
224                <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">dataDisplay</span><span class="o">.</span><span class="n">GetPageText</span><span class="p">(</span><span class="n">PageNum</span><span class="p">)</span> <span class="k">for</span>
225                <span class="n">PageNum</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">dataDisplay</span><span class="o">.</span><span class="n">GetPageCount</span><span class="p">())]</span>
226            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;tab not found&#39;</span><span class="p">)</span></div></div>
227<div class="viewcode-block" id="MakeTabLog"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.MakeTabLog">[docs]</a><span class="k">def</span> <span class="nf">MakeTabLog</span><span class="p">(</span><span class="n">title</span><span class="p">,</span><span class="n">tabname</span><span class="p">):</span>
228    <span class="s">&#39;Create a TabLogEntry action log&#39;</span>
229    <span class="n">G2logList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">TabLogEntry</span><span class="p">(</span><span class="n">title</span><span class="p">,</span><span class="n">tabname</span><span class="p">))</span>
230</div>
231<div class="viewcode-block" id="TreeLogEntry"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.TreeLogEntry">[docs]</a><span class="k">class</span> <span class="nc">TreeLogEntry</span><span class="p">(</span><span class="n">LogEntry</span><span class="p">):</span>
232    <span class="s">&#39;Object to track when tree items are pressed in the main window&#39;</span>
233    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">itemlist</span><span class="p">):</span>
234        <span class="bp">self</span><span class="o">.</span><span class="n">treeItemList</span> <span class="o">=</span> <span class="n">itemlist</span>
235        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;Logging press on tree: &#39;</span><span class="p">,</span><span class="n">itemlist</span>
236    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
237        <span class="n">treeList</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">treeItemList</span><span class="p">[:]</span>
238        <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">tuple</span><span class="p">:</span>
239            <span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Hist #&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="s">&#39; of type &#39;</span><span class="o">+</span><span class="n">treeList</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
240        <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">treeList</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">int</span><span class="p">:</span>
241            <span class="n">treeList</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;Phase #&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">treeList</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
242        <span class="k">return</span> <span class="s">&#39;Tree item pressed: &#39;</span><span class="o">+</span><span class="n">_l2s</span><span class="p">(</span><span class="n">treeList</span><span class="p">)</span>
243<div class="viewcode-block" id="TreeLogEntry.Repaint"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.TreeLogEntry.Repaint">[docs]</a>    <span class="k">def</span> <span class="nf">Repaint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
244        <span class="s">&#39;Used to redraw a window created in response to a click on a data tree item&#39;</span>
245        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;Repaint&#39;</span>
246        <span class="n">saveval</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span>
247        <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">SelectItem</span><span class="p">(</span><span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">root</span><span class="p">)</span> <span class="c"># need to select something else</span>
248        <span class="n">wx</span><span class="o">.</span><span class="n">Yield</span><span class="p">()</span>
249        <span class="bp">self</span><span class="o">.</span><span class="n">Replay</span><span class="p">()</span>
250        <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">saveval</span></div>
251<div class="viewcode-block" id="TreeLogEntry.Replay"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.TreeLogEntry.Replay">[docs]</a>    <span class="k">def</span> <span class="nf">Replay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
252        <span class="s">&#39;Perform a Tree press action when read from the log&#39;</span>
253        <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span>
254        <span class="n">parent</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">root</span>
255        <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">txt</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">treeItemList</span><span class="p">):</span>
256            <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">tuple</span><span class="p">:</span>
257                <span class="n">txt</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">ConvertRelativeHistNum</span><span class="p">(</span><span class="o">*</span><span class="n">txt</span><span class="p">)</span>
258            <span class="k">elif</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">int</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">treeItemList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;Phases&quot;</span><span class="p">:</span>
259                <span class="n">txt</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">ConvertRelativePhaseNum</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span>
260            <span class="n">item</span> <span class="o">=</span> <span class="n">G2gd</span><span class="o">.</span><span class="n">GetPatternTreeItemId</span><span class="p">(</span><span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="p">,</span><span class="n">parent</span><span class="p">,</span><span class="n">txt</span><span class="p">)</span>
261            <span class="k">if</span> <span class="ow">not</span> <span class="n">item</span><span class="p">:</span>
262                <span class="k">print</span> <span class="s">&#39;Not found&#39;</span><span class="p">,</span><span class="n">txt</span>
263                <span class="k">return</span>
264            <span class="k">else</span><span class="p">:</span>
265                <span class="n">parent</span> <span class="o">=</span> <span class="n">item</span>
266        <span class="k">else</span><span class="p">:</span>
267            <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">SelectItem</span><span class="p">(</span><span class="n">item</span><span class="p">)</span></div></div>
268<div class="viewcode-block" id="MakeTreeLog"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.MakeTreeLog">[docs]</a><span class="k">def</span> <span class="nf">MakeTreeLog</span><span class="p">(</span><span class="n">textlist</span><span class="p">):</span>
269    <span class="s">&#39;Create a TreeLogEntry action log&#39;</span>
270    <span class="n">G2logList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">TreeLogEntry</span><span class="p">(</span><span class="n">textlist</span><span class="p">))</span>
271    </div>
272<div class="viewcode-block" id="ButtonLogEntry"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.ButtonLogEntry">[docs]</a><span class="k">class</span> <span class="nc">ButtonLogEntry</span><span class="p">(</span><span class="n">LogEntry</span><span class="p">):</span>
273    <span class="s">&#39;Object to track button press&#39;</span>
274    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">locationcode</span><span class="p">,</span><span class="n">label</span><span class="p">):</span>
275        <span class="bp">self</span><span class="o">.</span><span class="n">locationcode</span> <span class="o">=</span> <span class="n">locationcode</span>
276        <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">label</span>
277        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;Logging &#39;</span><span class="o">+</span><span class="n">label</span><span class="o">+</span><span class="s">&#39; button press in &#39;</span><span class="o">+</span><span class="n">locationcode</span>
278    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
279        <span class="k">return</span> <span class="s">&#39;Press of &#39;</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">+</span><span class="s">&#39; button in &#39;</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">locationcode</span>
280    <span class="k">def</span> <span class="nf">Replay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
281        <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locationcode</span> <span class="o">+</span> <span class="s">&#39;+&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">label</span>
282        <span class="k">if</span> <span class="n">ButtonBindingLookup</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
283            <span class="n">btn</span> <span class="o">=</span> <span class="n">ButtonBindingLookup</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
284            <span class="n">clickEvent</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">CommandEvent</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_BUTTON</span><span class="o">.</span><span class="n">typeId</span><span class="p">,</span> <span class="n">btn</span><span class="o">.</span><span class="n">GetId</span><span class="p">())</span>
285            <span class="n">clickEvent</span><span class="o">.</span><span class="n">SetEventObject</span><span class="p">(</span><span class="n">btn</span><span class="p">)</span>
286            <span class="c">#btn.GetEventHandler().ProcessEvent(clickEvent)</span>
287            <span class="n">btn</span><span class="o">.</span><span class="n">handler</span><span class="p">(</span><span class="n">clickEvent</span><span class="p">)</span></div>
288<div class="viewcode-block" id="MakeButtonLog"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.MakeButtonLog">[docs]</a><span class="k">def</span> <span class="nf">MakeButtonLog</span><span class="p">(</span><span class="n">locationcode</span><span class="p">,</span><span class="n">label</span><span class="p">):</span>
289    <span class="s">&#39;Create a ButtonLogEntry action log&#39;</span>
290    <span class="n">G2logList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ButtonLogEntry</span><span class="p">(</span><span class="n">locationcode</span><span class="p">,</span><span class="n">label</span><span class="p">))</span>
291   
292            </div>
293<span class="k">def</span> <span class="nf">_wrapper</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
294    <span class="k">def</span> <span class="nf">_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
295        <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="p">,</span> <span class="n">func</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
296    <span class="k">return</span> <span class="n">_wrapped</span>
297
298<span class="k">class</span> <span class="nc">DictMeta</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
299    <span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">dct</span><span class="p">):</span>
300        <span class="n">default_attrs</span> <span class="o">=</span> <span class="nb">dir</span><span class="p">(</span><span class="nb">object</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;__getitem__&#39;</span><span class="p">,</span> <span class="s">&#39;__str__&#39;</span><span class="p">]</span>
301        <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
302            <span class="k">if</span> <span class="n">attr</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">default_attrs</span><span class="p">:</span>
303                <span class="n">dct</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="n">_wrapper</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
304        <span class="k">return</span> <span class="nb">type</span><span class="o">.</span><span class="n">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">dct</span><span class="p">)</span>
305
306<div class="viewcode-block" id="dictLogged"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.dictLogged">[docs]</a><span class="k">class</span> <span class="nc">dictLogged</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
307    <span class="sd">&#39;&#39;&#39;A version of a dict object that tracks the source of the</span>
308<span class="sd">    object back to the location on the G2 tree.</span>
309<span class="sd">    If a list (tuple) or dict are pulled from inside this object</span>
310<span class="sd">    the source information is appended to the provinance tracking</span>
311<span class="sd">    lists.</span>
312
313<span class="sd">    tuples are converted to lists.</span>
314<span class="sd">    &#39;&#39;&#39;</span>
315    <span class="n">__metaclass__</span> <span class="o">=</span> <span class="n">DictMeta</span>
316
317    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">treeRefs</span><span class="p">,</span> <span class="n">indexRefs</span><span class="o">=</span><span class="p">[]):</span>
318        <span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span> <span class="o">=</span> <span class="n">treeRefs</span>
319        <span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span> <span class="o">=</span> <span class="n">indexRefs</span>
320        <span class="bp">self</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span>
321
322    <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">key</span><span class="p">):</span>
323        <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>   
324        <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">tuple</span><span class="p">:</span>
325            <span class="c">#if debug: print &#39;Converting to list&#39;,key</span>
326            <span class="n">val</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
327            <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
328        <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">dict</span><span class="p">:</span>
329            <span class="c">#print &#39;dict&#39;</span>
330            <span class="k">return</span> <span class="n">dictLogged</span><span class="p">(</span><span class="n">val</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="o">+</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
331        <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">list</span><span class="p">:</span>
332            <span class="c">#print &#39;list&#39;</span>
333            <span class="k">return</span> <span class="n">listLogged</span><span class="p">(</span><span class="n">val</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="o">+</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
334        <span class="k">else</span><span class="p">:</span>
335            <span class="c">#print type(val)</span>
336            <span class="k">return</span> <span class="n">val</span>
337
338    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
339        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__str__</span><span class="p">()</span>
340    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
341        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__str__</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot; : &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;,&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="p">)</span>
342</div>
343<span class="k">class</span> <span class="nc">ListMeta</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
344    <span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">dct</span><span class="p">):</span>
345        <span class="n">default_attrs</span> <span class="o">=</span> <span class="nb">dir</span><span class="p">(</span><span class="nb">object</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;__getitem__&#39;</span><span class="p">,</span> <span class="s">&#39;__str__&#39;</span><span class="p">]</span>
346        <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
347            <span class="k">if</span> <span class="n">attr</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">default_attrs</span><span class="p">:</span>
348                <span class="n">dct</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="n">_wrapper</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
349        <span class="k">return</span> <span class="nb">type</span><span class="o">.</span><span class="n">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">dct</span><span class="p">)</span>
350
351<div class="viewcode-block" id="listLogged"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.listLogged">[docs]</a><span class="k">class</span> <span class="nc">listLogged</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
352    <span class="sd">&#39;&#39;&#39;A version of a list object that tracks the source of the</span>
353<span class="sd">    object back to the location on the G2 tree.</span>
354<span class="sd">    If a list (tuple) or dict are pulled from inside this object</span>
355<span class="sd">    the source information is appended to the provinance tracking</span>
356<span class="sd">    lists.</span>
357<span class="sd">    </span>
358<span class="sd">    tuples are converted to lists.</span>
359<span class="sd">    &#39;&#39;&#39;</span>
360    <span class="n">__metaclass__</span> <span class="o">=</span> <span class="n">ListMeta</span>
361
362    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">treeRefs</span><span class="p">,</span> <span class="n">indexRefs</span><span class="o">=</span><span class="p">[]):</span>
363        <span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span> <span class="o">=</span> <span class="n">treeRefs</span>
364        <span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span> <span class="o">=</span> <span class="n">indexRefs</span>
365        <span class="bp">self</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span>
366
367    <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">key</span><span class="p">):</span>
368        <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>   
369        <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">tuple</span><span class="p">:</span>
370            <span class="c">#if debug: print &#39;Converting to list&#39;,key</span>
371            <span class="n">val</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
372            <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
373        <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">dict</span><span class="p">:</span>
374            <span class="c">#print &#39;dict&#39;</span>
375            <span class="k">return</span> <span class="n">dictLogged</span><span class="p">(</span><span class="n">val</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="o">+</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
376        <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">list</span><span class="p">:</span>
377            <span class="c">#print &#39;list&#39;</span>
378            <span class="k">return</span> <span class="n">listLogged</span><span class="p">(</span><span class="n">val</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="o">+</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
379        <span class="k">else</span><span class="p">:</span>
380            <span class="c">#print type(val)</span>
381            <span class="k">return</span> <span class="n">val</span>
382
383    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
384        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__str__</span><span class="p">()</span>
385    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
386        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__str__</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot; : &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">)</span> <span class="o">+</span> <span class="s">&#39;,&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indexRefs</span><span class="p">)</span>
387
388<span class="c">#===========================================================================</span>
389<span class="c"># variable tracking</span></div>
390<div class="viewcode-block" id="LogVarChange"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.LogVarChange">[docs]</a><span class="k">def</span> <span class="nf">LogVarChange</span><span class="p">(</span><span class="n">result</span><span class="p">,</span><span class="n">key</span><span class="p">):</span>
391    <span class="s">&#39;Called when a variable is changed to log that action&#39;</span>
392    <span class="k">if</span> <span class="ow">not</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Logging&#39;</span><span class="p">]:</span> <span class="k">return</span>
393    <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">result</span><span class="p">,</span><span class="s">&#39;treeRefs&#39;</span><span class="p">):</span>
394        <span class="n">treevars</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">treeRefs</span><span class="p">[:]</span>
395        <span class="n">treevars</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">GetRelativeHistNum</span><span class="p">(</span><span class="n">treevars</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
396        <span class="k">if</span> <span class="n">treevars</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;Phases&quot;</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">treevars</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
397            <span class="n">treevars</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">GetRelativePhaseNum</span><span class="p">(</span><span class="n">treevars</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
398        <span class="n">lastLog</span> <span class="o">=</span> <span class="n">G2logList</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
399        <span class="n">fullrefs</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">indexRefs</span><span class="o">+</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
400        <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">lastLog</span><span class="p">)</span> <span class="ow">is</span> <span class="n">VarLogEntry</span><span class="p">:</span>
401            <span class="k">if</span> <span class="n">lastLog</span><span class="o">.</span><span class="n">treeRefs</span> <span class="o">==</span> <span class="n">treevars</span> <span class="ow">and</span> <span class="n">lastLog</span><span class="o">.</span><span class="n">indexRefs</span> <span class="o">==</span> <span class="n">fullrefs</span><span class="p">:</span>
402                <span class="n">lastLog</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
403                <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;update last log to &#39;</span><span class="p">,</span><span class="n">result</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
404                <span class="k">return</span>
405        <span class="n">G2logList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">VarLogEntry</span><span class="p">(</span><span class="n">treevars</span><span class="p">,</span><span class="n">fullrefs</span><span class="p">,</span><span class="n">result</span><span class="p">[</span><span class="n">key</span><span class="p">]))</span>
406    <span class="k">else</span><span class="p">:</span>
407        <span class="k">print</span> <span class="n">key</span><span class="p">,</span><span class="s">&#39;Error: var change has no provenance info&#39;</span>
408
409<span class="c">#===========================================================================</span>
410<span class="c"># menu command tracking</span></div>
411<span class="k">def</span> <span class="nf">_getmenuinfo</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="n">G2frame</span><span class="p">,</span><span class="n">handler</span><span class="p">):</span>
412    <span class="sd">&#39;&#39;&#39;Look up the menu/menu-item label tree from a menuitem&#39;s Id</span>
413<span class="sd">    </span>
414<span class="sd">    Note that menubars contain multiple menus which contain multiple menuitems.</span>
415<span class="sd">    A menuitem can itself point to a menu and if so that menu can contain </span>
416<span class="sd">    multiple menuitems.</span>
417
418<span class="sd">    Here we start with the last menuitem and look up the label for that as well</span>
419<span class="sd">    as all parents, which will be found in parent menuitems (if any) and the menubar.</span>
420<span class="sd">    </span>
421<span class="sd">        menuitem    -&gt;  menu -&gt;  menubar</span>
422<span class="sd">           |                          |</span>
423<span class="sd">           |-&gt;itemlabel               |-&gt; menulabel</span>
424<span class="sd">           </span>
425<span class="sd">    or</span>
426
427<span class="sd">        menuitem    -&gt;  (submenu -&gt; menuitem)*(n times) -&gt; menu -&gt; menubar</span>
428<span class="sd">           |                            |                             |</span>
429<span class="sd">           |-&gt;itemlabel                 |-&gt; sublabel(s)               |-&gt; menulabel</span>
430<span class="sd">           </span>
431<span class="sd">    :returns: a list containing all the labels and the menuitem object</span>
432<span class="sd">       or None if the menu object will not be cataloged. </span>
433<span class="sd">    &#39;&#39;&#39;</span>
434    <span class="c"># don&#39;t worry about help menuitems</span>
435    <span class="k">if</span> <span class="nb">id</span> <span class="o">==</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ABOUT</span><span class="p">:</span> <span class="k">return</span>
436    <span class="c"># get the menu item object by searching through all menubars and then its label</span>
437    <span class="k">for</span> <span class="n">menubar</span> <span class="ow">in</span> <span class="n">G2frame</span><span class="o">.</span><span class="n">dataMenuBars</span><span class="p">:</span>
438        <span class="n">menuitem</span> <span class="o">=</span> <span class="n">menubar</span><span class="o">.</span><span class="n">FindItemById</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
439        <span class="k">if</span> <span class="n">menuitem</span><span class="p">:</span>
440            <span class="c">#print &#39;getmenuinfo found&#39;,id,menuitem</span>
441            <span class="k">break</span>
442    <span class="k">else</span><span class="p">:</span>
443        <span class="k">print</span> <span class="s">&#39;****** getmenuinfo failed for id=&#39;</span><span class="p">,</span><span class="nb">id</span><span class="p">,</span><span class="s">&#39;binding to=&#39;</span><span class="p">,</span><span class="n">handler</span>
444        <span class="c">#raise Exception(&#39;debug: getmenuinfo failed&#39;)</span>
445        <span class="k">return</span>
446    <span class="n">menuLabelList</span> <span class="o">=</span> <span class="p">[</span><span class="n">menuitem</span><span class="o">.</span><span class="n">GetItemLabel</span><span class="p">()]</span>
447   
448    <span class="c"># get the menu where the current item is located</span>
449    <span class="n">menu</span> <span class="o">=</span> <span class="n">menuitem</span><span class="o">.</span><span class="n">GetMenu</span><span class="p">()</span>
450    <span class="k">while</span> <span class="n">menu</span><span class="o">.</span><span class="n">GetParent</span><span class="p">():</span> <span class="c"># is this menu a submenu of a previous menu?</span>
451        <span class="n">parentmenu</span> <span class="o">=</span> <span class="n">menu</span><span class="o">.</span><span class="n">GetParent</span><span class="p">()</span>
452        <span class="c"># cycle through the parentmenu until we find the menu</span>
453        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">parentmenu</span><span class="o">.</span><span class="n">GetMenuItemCount</span><span class="p">()):</span>
454            <span class="k">if</span> <span class="n">parentmenu</span><span class="o">.</span><span class="n">FindItemByPosition</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">GetSubMenu</span><span class="p">()</span><span class="o">==</span><span class="n">menu</span><span class="p">:</span>
455                <span class="n">menuLabelList</span> <span class="o">+=</span> <span class="p">[</span><span class="n">parentmenu</span><span class="o">.</span><span class="n">FindItemByPosition</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">GetItemLabel</span><span class="p">()]</span>
456                <span class="k">break</span>
457        <span class="k">else</span><span class="p">:</span>
458            <span class="c"># menu not found in menu, something is wrong</span>
459            <span class="k">print</span> <span class="s">&#39;error tracing menuitem to parent menu&#39;</span><span class="p">,</span><span class="n">menuLabelList</span>
460            <span class="c">#raise Exception(&#39;debug1: error tracing menuitem&#39;)</span>
461            <span class="k">return</span>
462        <span class="n">menu</span> <span class="o">=</span> <span class="n">parentmenu</span>
463       
464    <span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">__version__</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
465    <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">+</span><span class="nb">int</span><span class="p">(</span><span class="n">j</span><span class="p">)</span><span class="o">/</span><span class="mf">10.</span> <span class="o">&gt;</span> <span class="mf">2.8</span> <span class="ow">and</span> <span class="s">&#39;wxOSX&#39;</span> <span class="ow">in</span> <span class="n">wx</span><span class="o">.</span><span class="n">PlatformInfo</span><span class="p">:</span>
466        <span class="c"># on mac, with wx 2.9+ the menubar has a menu and this is found above, so</span>
467        <span class="c"># we are now done.</span>
468        <span class="k">return</span> <span class="n">menuLabelList</span><span class="p">,</span><span class="n">menuitem</span>
469   
470    <span class="n">menubar</span> <span class="o">=</span> <span class="n">menu</span><span class="o">.</span><span class="n">MenuBar</span>
471    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">menubar</span><span class="o">.</span><span class="n">GetMenuCount</span><span class="p">()):</span>
472        <span class="k">if</span> <span class="n">menubar</span><span class="o">.</span><span class="n">GetMenu</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">==</span> <span class="n">menu</span><span class="p">:</span>
473            <span class="n">menuLabelList</span> <span class="o">+=</span> <span class="p">[</span><span class="n">menubar</span><span class="o">.</span><span class="n">GetMenuLabel</span><span class="p">(</span><span class="n">i</span><span class="p">)]</span>
474            <span class="k">return</span> <span class="n">menuLabelList</span><span class="p">,</span><span class="n">menuitem</span>
475
476    <span class="c"># menu not found in menubar, something is wrong</span>
477    <span class="k">print</span> <span class="s">&#39;error tracing menuitem to menubar&#39;</span><span class="p">,</span><span class="n">menuLabelList</span>
478    <span class="c">#raise Exception(&#39;debug2: error tracing menuitem&#39;)</span>
479    <span class="k">return</span>
480
481<div class="viewcode-block" id="SaveMenuCommand"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.SaveMenuCommand">[docs]</a><span class="k">def</span> <span class="nf">SaveMenuCommand</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="n">G2frame</span><span class="p">,</span><span class="n">handler</span><span class="p">):</span>
482    <span class="sd">&#39;&#39;&#39;Creates a table of menu items and their pseudo-bindings</span>
483<span class="sd">    &#39;&#39;&#39;</span>
484    <span class="n">menuinfo</span> <span class="o">=</span> <span class="n">_getmenuinfo</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="n">G2frame</span><span class="p">,</span><span class="n">handler</span><span class="p">)</span>
485    <span class="k">if</span> <span class="ow">not</span> <span class="n">menuinfo</span><span class="p">:</span> <span class="k">return</span>
486    <span class="n">menuLabelList</span><span class="p">,</span><span class="n">menuobj</span> <span class="o">=</span> <span class="n">menuinfo</span>
487    <span class="n">key</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
488    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">menuLabelList</span><span class="p">:</span>
489        <span class="k">if</span> <span class="n">key</span><span class="p">:</span> <span class="n">key</span> <span class="o">+=</span> <span class="s">&#39;+&#39;</span>
490        <span class="n">key</span> <span class="o">+=</span> <span class="n">item</span>
491    <span class="n">MenuBindingLookup</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">handler</span><span class="p">,</span><span class="nb">id</span><span class="p">,</span><span class="n">menuobj</span><span class="p">]</span>
492    <span class="k">return</span> <span class="n">menuLabelList</span>
493</div>
494<div class="viewcode-block" id="InvokeMenuCommand"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.InvokeMenuCommand">[docs]</a><span class="k">def</span> <span class="nf">InvokeMenuCommand</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="n">G2frame</span><span class="p">,</span><span class="n">event</span><span class="p">):</span>
495    <span class="sd">&#39;&#39;&#39;Called when a menu item is used to log the action as well as call the</span>
496<span class="sd">    routine &quot;bind&quot;ed to that menu item</span>
497<span class="sd">    &#39;&#39;&#39;</span>
498    <span class="n">menuLabelList</span><span class="p">,</span><span class="n">menuobj</span> <span class="o">=</span> <span class="n">_getmenuinfo</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="n">G2frame</span><span class="p">,</span><span class="bp">None</span><span class="p">)</span>
499    <span class="n">key</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
500    <span class="k">if</span> <span class="n">menuLabelList</span><span class="p">:</span> 
501        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">menuLabelList</span><span class="p">:</span>
502            <span class="k">if</span> <span class="n">key</span><span class="p">:</span> <span class="n">key</span> <span class="o">+=</span> <span class="s">&#39;+&#39;</span>
503            <span class="n">key</span> <span class="o">+=</span> <span class="n">item</span>
504    <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">MenuBindingLookup</span><span class="p">:</span>
505        <span class="k">if</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Logging&#39;</span><span class="p">]:</span> 
506            <span class="n">G2logList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">MenuLogEntry</span><span class="p">(</span><span class="n">menuLabelList</span><span class="p">))</span>
507        <span class="n">handler</span> <span class="o">=</span> <span class="n">MenuBindingLookup</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
508        <span class="n">handler</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
509    <span class="k">else</span><span class="p">:</span>
510        <span class="k">print</span> <span class="s">&#39;Error no binding for menu command&#39;</span><span class="p">,</span><span class="n">menuLabelList</span><span class="p">,</span><span class="s">&#39;id=&#39;</span><span class="p">,</span><span class="nb">id</span>
511        <span class="k">return</span>
512
513<span class="c">#===========================================================================</span>
514<span class="c"># Misc externally callable routines</span></div>
515<div class="viewcode-block" id="LogOn"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.LogOn">[docs]</a><span class="k">def</span> <span class="nf">LogOn</span><span class="p">():</span>
516    <span class="s">&#39;Turn On logging of actions&#39;</span>
517    <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;LogOn&#39;</span>
518    <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Logging&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
519</div>
520<div class="viewcode-block" id="LogOff"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.LogOff">[docs]</a><span class="k">def</span> <span class="nf">LogOff</span><span class="p">():</span>
521    <span class="s">&#39;Turn Off logging of actions&#39;</span>
522    <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;LogOff&#39;</span>
523    <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Logging&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">False</span>
524    </div>
525<div class="viewcode-block" id="ShowLogStatus"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.ShowLogStatus">[docs]</a><span class="k">def</span> <span class="nf">ShowLogStatus</span><span class="p">():</span>
526    <span class="s">&#39;Return the logging status&#39;</span>
527    <span class="k">return</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Logging&#39;</span><span class="p">]</span>
528</div>
529<div class="viewcode-block" id="OnReplayPress"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.OnReplayPress">[docs]</a><span class="k">def</span> <span class="nf">OnReplayPress</span><span class="p">(</span><span class="n">event</span><span class="p">):</span>
530    <span class="s">&#39;execute one or more commands when the replay button is pressed&#39;</span>
531    <span class="n">clb</span> <span class="o">=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;clb&#39;</span><span class="p">]</span>
532    <span class="n">dlg</span> <span class="o">=</span> <span class="n">clb</span><span class="o">.</span><span class="n">GetTopLevelParent</span><span class="p">()</span>
533    <span class="n">sels</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">clb</span><span class="o">.</span><span class="n">GetSelections</span><span class="p">())</span>
534    <span class="k">if</span> <span class="ow">not</span> <span class="n">sels</span><span class="p">:</span>
535        <span class="n">dlg1</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">MessageDialog</span><span class="p">(</span><span class="n">dlg</span><span class="p">,</span>
536            <span class="s">&#39;Select one or more items in the list box to replay&#39;</span><span class="p">,</span>
537            <span class="s">&#39;No selection actions&#39;</span><span class="p">,</span>
538            <span class="n">wx</span><span class="o">.</span><span class="n">OK</span><span class="p">)</span>
539        <span class="n">dlg1</span><span class="o">.</span><span class="n">CenterOnParent</span><span class="p">()</span>
540        <span class="n">dlg1</span><span class="o">.</span><span class="n">ShowModal</span><span class="p">()</span>
541        <span class="n">dlg1</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
542        <span class="k">return</span>
543    <span class="n">logstat</span> <span class="o">=</span> <span class="n">ShowLogStatus</span><span class="p">()</span>
544    <span class="k">if</span> <span class="n">logstat</span><span class="p">:</span> <span class="n">LogOff</span><span class="p">()</span>
545    <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="mi">70</span><span class="o">*</span><span class="s">&#39;=&#39;</span>
546    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sels</span><span class="p">:</span>
547        <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
548        <span class="n">item</span> <span class="o">=</span> <span class="n">G2logList</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
549        <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="s">&#39;replaying&#39;</span><span class="p">,</span><span class="n">item</span>
550        <span class="n">item</span><span class="o">.</span><span class="n">Replay</span><span class="p">()</span>
551        <span class="n">wx</span><span class="o">.</span><span class="n">Yield</span><span class="p">()</span>
552    <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">G2logList</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span>
553        <span class="n">dlg</span><span class="o">.</span><span class="n">EndModal</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">)</span>
554    <span class="k">else</span><span class="p">:</span>
555        <span class="n">clb</span><span class="o">.</span><span class="n">DeselectAll</span><span class="p">()</span>
556        <span class="n">clb</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
557    <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="k">print</span> <span class="mi">70</span><span class="o">*</span><span class="s">&#39;=&#39;</span>
558    <span class="c"># if the last command did not display a window, repaint it in</span>
559    <span class="c"># case something on that window changed. </span>
560    <span class="k">if</span> <span class="n">item</span> <span class="o">!=</span> <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">],</span><span class="s">&#39;Repaint&#39;</span><span class="p">):</span>
561        <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">Repaint</span><span class="p">()</span>
562    <span class="k">if</span> <span class="n">logstat</span><span class="p">:</span> <span class="n">LogOn</span><span class="p">()</span>
563     </div>
564<div class="viewcode-block" id="ReplayLog"><a class="viewcode-back" href="../GSASIIutil.html#GSASIIlog.ReplayLog">[docs]</a><span class="k">def</span> <span class="nf">ReplayLog</span><span class="p">(</span><span class="n">event</span><span class="p">):</span>
565    <span class="s">&#39;replay the logged actions&#39;</span>
566    <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;LastPaintAction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># clear the pointed to the last data window</span>
567    <span class="c"># is this really needed? -- probably not. </span>
568    <span class="n">commandList</span> <span class="o">=</span> <span class="p">[]</span>
569    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">G2logList</span><span class="p">:</span>
570        <span class="k">if</span> <span class="n">item</span><span class="p">:</span> <span class="c"># skip over 1st item in list (None)</span>
571            <span class="n">commandList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">))</span>
572    <span class="k">if</span> <span class="ow">not</span> <span class="n">commandList</span><span class="p">:</span>
573        <span class="n">dlg</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">MessageDialog</span><span class="p">(</span><span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">],</span>
574            <span class="s">&#39;No actions found in log to replay&#39;</span><span class="p">,</span>
575            <span class="s">&#39;Empty Log&#39;</span><span class="p">,</span>
576            <span class="n">wx</span><span class="o">.</span><span class="n">OK</span><span class="p">)</span>
577        <span class="n">dlg</span><span class="o">.</span><span class="n">CenterOnParent</span><span class="p">()</span>
578        <span class="n">dlg</span><span class="o">.</span><span class="n">ShowModal</span><span class="p">()</span>
579        <span class="n">dlg</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
580        <span class="k">return</span>
581    <span class="n">dlg</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Dialog</span><span class="p">(</span><span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">],</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="s">&#39;Replay actions from log&#39;</span><span class="p">,</span>
582        <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">DEFAULT_DIALOG_STYLE</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">RESIZE_BORDER</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">CENTRE</span><span class="p">)</span>
583    <span class="n">mainSizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
584    <span class="n">mainSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span>
585    <span class="n">clb</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">ListBox</span><span class="p">(</span><span class="n">dlg</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="p">(</span><span class="mi">30</span><span class="p">,</span><span class="mi">100</span><span class="p">),</span> <span class="n">wx</span><span class="o">.</span><span class="n">DefaultSize</span><span class="p">,</span> <span class="n">commandList</span><span class="p">,</span>
586                     <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">LB_EXTENDED</span><span class="p">)</span>
587    <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;clb&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">clb</span>
588    <span class="n">mainSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">clb</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
589    <span class="n">mainSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span>
590    <span class="n">btn</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="n">dlg</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="s">&#39;Replay selected&#39;</span><span class="p">)</span>
591    <span class="n">btn</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_BUTTON</span><span class="p">,</span><span class="n">OnReplayPress</span><span class="p">)</span>
592    <span class="n">mainSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">btn</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ALIGN_CENTER</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
593    <span class="n">btnsizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StdDialogButtonSizer</span><span class="p">()</span>
594    <span class="n">OKbtn</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="n">dlg</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">,</span><span class="s">&#39;Close&#39;</span><span class="p">)</span>
595    <span class="c">#OKbtn = wx.Button(dlg, wx.ID_CLOSE)</span>
596    <span class="n">OKbtn</span><span class="o">.</span><span class="n">SetDefault</span><span class="p">()</span>
597    <span class="n">OKbtn</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_BUTTON</span><span class="p">,</span><span class="k">lambda</span> <span class="n">event</span><span class="p">:</span> <span class="n">dlg</span><span class="o">.</span><span class="n">EndModal</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">))</span>
598    <span class="n">btnsizer</span><span class="o">.</span><span class="n">AddButton</span><span class="p">(</span><span class="n">OKbtn</span><span class="p">)</span>
599    <span class="n">btnsizer</span><span class="o">.</span><span class="n">Realize</span><span class="p">()</span>
600    <span class="n">mainSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span><span class="mi">1</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
601    <span class="n">mainSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">btnsizer</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ALIGN_CENTER</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
602    <span class="n">mainSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span>
603    <span class="n">dlg</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">mainSizer</span><span class="p">)</span>
604    <span class="n">dlg</span><span class="o">.</span><span class="n">CenterOnParent</span><span class="p">()</span>
605    <span class="n">clb</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
606    <span class="n">dlg</span><span class="o">.</span><span class="n">ShowModal</span><span class="p">()</span>
607    <span class="n">dlg</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
608    <span class="n">LogInfo</span><span class="p">[</span><span class="s">&#39;Tree&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">G2frame</span><span class="o">.</span><span class="n">OnMacroRecordStatus</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="c"># sync the menu checkmark(s)</span>
609    <span class="k">return</span>
610</div>
611<span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="n">LogOn</span><span class="p">()</span> <span class="c"># for debug, start with logging enabled</span>
612</pre></div>
613
614          </div>
615        </div>
616      </div>
617      <div class="sphinxsidebar">
618        <div class="sphinxsidebarwrapper">
619            <p class="logo"><a href="../index.html">
620              <img class="logo" src="../_static/G2_html_logo.png" alt="Logo"/>
621            </a></p>
622<div id="searchbox" style="display: none">
623  <h3>Quick search</h3>
624    <form class="search" action="../search.html" method="get">
625      <input type="text" name="q" />
626      <input type="submit" value="Go" />
627      <input type="hidden" name="check_keywords" value="yes" />
628      <input type="hidden" name="area" value="default" />
629    </form>
630    <p class="searchtip" style="font-size: 90%">
631    Enter search terms or a module, class or function name.
632    </p>
633</div>
634<script type="text/javascript">$('#searchbox').show(0);</script>
635        </div>
636      </div>
637      <div class="clearer"></div>
638    </div>
639    <div class="related">
640      <h3>Navigation</h3>
641      <ul>
642        <li class="right" style="margin-right: 10px">
643          <a href="../genindex.html" title="General Index"
644             >index</a></li>
645        <li class="right" >
646          <a href="../py-modindex.html" title="Python Module Index"
647             >modules</a> |</li>
648        <li><a href="../index.html">GSAS-II 0.2.0 documentation</a> &raquo;</li>
649          <li><a href="index.html" >Module code</a> &raquo;</li> 
650      </ul>
651    </div>
652    <div class="footer">
653        &copy; Copyright 2013, Von Dreele and Toby for Argonne National Laboratory.
654      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.2.
655    </div>
656  </body>
657</html>
Note: See TracBrowser for help on using the repository browser.