add tui module and example, add contex manager cd and the method run_file in helper
import vendor modules only once during import change text color for the method cad_wireframe in geometry_plot_pylab and add hide key
This commit is contained in:
1
docs/build/html/_modules/index.html
vendored
1
docs/build/html/_modules/index.html
vendored
@@ -50,6 +50,7 @@
|
||||
<li><a href="pylib/numerical/ode.html">pylib.numerical.ode</a></li>
|
||||
<li><a href="pylib/numerical/ode_model.html">pylib.numerical.ode_model</a></li>
|
||||
<li><a href="pylib/time_of_day.html">pylib.time_of_day</a></li>
|
||||
<li><a href="pylib/tui.html">pylib.tui</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -180,7 +180,37 @@
|
||||
|
||||
<span class="n">plot_post</span><span class="p">(</span><span class="n">ax</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">press</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">,</span> <span class="n">lps</span><span class="p">):</span>
|
||||
<span class="c1"># 'rotate: ←left, right, up, down, ctrl+left, ctrl+right\n' +</span>
|
||||
<span class="c1"># 'pan: shift+left, shift+right, shift+up, shift+down\n' +</span>
|
||||
<span class="c1"># 'zoom: ctrl+up, ctrl+down\n' +</span>
|
||||
<span class="c1"># 'view: f (front), l (left), r (right), t (top), b (bottom)\n' +</span>
|
||||
<span class="c1"># ' i (isometric), d (dimetric)',</span>
|
||||
<span class="n">h_open</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">text</span><span class="p">(</span>
|
||||
<span class="mi">0</span><span class="o">+.</span><span class="mi">01</span><span class="p">,</span> <span class="mi">1</span><span class="o">-.</span><span class="mi">015</span><span class="p">,</span>
|
||||
<span class="s1">'rotate: [←], [→], [↑], [↓], [Ctrl][←], [Ctrl][→]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'pan: [Shift][←], [Shift][→], [Shift][↑], [Shift][↓]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'zoom: [Ctrl][↑], [Ctrl][↓]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'view: [f]ront, [l]eft, [r]ight, [t]op, [b]ottom</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">' [i]sometric, [d]imetric'</span><span class="p">,</span>
|
||||
<span class="n">color</span><span class="o">=</span><span class="s1">'#2280c0'</span><span class="p">,</span>
|
||||
<span class="n">horizontalalignment</span><span class="o">=</span><span class="s1">'left'</span><span class="p">,</span>
|
||||
<span class="n">verticalalignment</span><span class="o">=</span><span class="s1">'top'</span><span class="p">,</span>
|
||||
<span class="n">transform</span><span class="o">=</span><span class="n">fig</span><span class="o">.</span><span class="n">transFigure</span><span class="p">,</span>
|
||||
<span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">facecolor</span><span class="o">=</span><span class="s1">'black'</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#196090'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">),</span>
|
||||
<span class="n">family</span><span class="o">=</span><span class="s1">'monospace'</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">h_close</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">text</span><span class="p">(</span>
|
||||
<span class="mi">0</span><span class="o">+.</span><span class="mi">01</span><span class="p">,</span> <span class="mi">1</span><span class="o">-.</span><span class="mi">015</span><span class="p">,</span> <span class="s1">'[h]elp'</span><span class="p">,</span>
|
||||
<span class="n">color</span><span class="o">=</span><span class="s1">'#2280c0'</span><span class="p">,</span>
|
||||
<span class="n">horizontalalignment</span><span class="o">=</span><span class="s1">'left'</span><span class="p">,</span>
|
||||
<span class="n">verticalalignment</span><span class="o">=</span><span class="s1">'top'</span><span class="p">,</span>
|
||||
<span class="n">transform</span><span class="o">=</span><span class="n">fig</span><span class="o">.</span><span class="n">transFigure</span><span class="p">,</span>
|
||||
<span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">facecolor</span><span class="o">=</span><span class="s1">'black'</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">'#196090'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">),</span>
|
||||
<span class="n">family</span><span class="o">=</span><span class="s1">'monospace'</span><span class="p">,</span>
|
||||
<span class="n">visible</span><span class="o">=</span><span class="kc">False</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">press</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">,</span> <span class="n">lps</span><span class="p">,</span> <span class="n">h_open</span><span class="p">,</span> <span class="n">h_close</span><span class="p">):</span>
|
||||
<span class="c1">#print('key pressed:', event.key)</span>
|
||||
<span class="c1">#sys.stdout.flush()</span>
|
||||
<span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="ow">in</span> <span class="p">[</span>
|
||||
@@ -250,6 +280,10 @@
|
||||
<span class="n">world</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="mf">0.9</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">lps</span><span class="p">,</span> <span class="n">world</span><span class="o">.</span><span class="n">wireframes_xy</span><span class="p">()):</span>
|
||||
<span class="n">i</span><span class="o">.</span><span class="n">set_data</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">'h'</span><span class="p">:</span>
|
||||
<span class="n">visible</span> <span class="o">=</span> <span class="n">h_open</span><span class="o">.</span><span class="n">get_visible</span><span class="p">()</span>
|
||||
<span class="n">h_open</span><span class="o">.</span><span class="n">set_visible</span><span class="p">(</span><span class="ow">not</span> <span class="n">visible</span><span class="p">)</span>
|
||||
<span class="n">h_close</span><span class="o">.</span><span class="n">set_visible</span><span class="p">(</span><span class="n">visible</span><span class="p">)</span>
|
||||
<span class="n">fig</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">onresize</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">w</span><span class="p">):</span>
|
||||
@@ -258,28 +292,10 @@
|
||||
<span class="n">pylab</span><span class="o">.</span><span class="n">ylim</span><span class="p">((</span><span class="o">-</span><span class="n">r</span><span class="p">,</span> <span class="n">r</span><span class="p">))</span>
|
||||
|
||||
<span class="n">fig</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">mpl_connect</span><span class="p">(</span><span class="s1">'key_press_event'</span><span class="p">,</span>
|
||||
<span class="k">lambda</span> <span class="n">event</span><span class="p">:</span> <span class="n">press</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">,</span> <span class="n">lps</span><span class="p">))</span>
|
||||
<span class="k">lambda</span> <span class="n">event</span><span class="p">:</span> <span class="n">press</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">,</span> <span class="n">lps</span><span class="p">,</span>
|
||||
<span class="n">h_open</span><span class="p">,</span> <span class="n">h_close</span><span class="p">))</span>
|
||||
<span class="n">fig</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">mpl_connect</span><span class="p">(</span><span class="s1">'resize_event'</span><span class="p">,</span>
|
||||
<span class="k">lambda</span> <span class="n">event</span><span class="p">:</span> <span class="n">onresize</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># 'rotate: ←left, right, up, down, ctrl+left, ctrl+right\n' +</span>
|
||||
<span class="c1"># 'pan: shift+left, shift+right, shift+up, shift+down\n' +</span>
|
||||
<span class="c1"># 'zoom: ctrl+up, ctrl+down\n' +</span>
|
||||
<span class="c1"># 'view: f (front), l (left), r (right), t (top), b (bottom)\n' +</span>
|
||||
<span class="c1"># ' i (isometric), d (dimetric)',</span>
|
||||
<span class="n">pylab</span><span class="o">.</span><span class="n">text</span><span class="p">(</span>
|
||||
<span class="mi">0</span><span class="o">+.</span><span class="mi">01</span><span class="p">,</span> <span class="mi">1</span><span class="o">-.</span><span class="mi">015</span><span class="p">,</span>
|
||||
<span class="s1">'rotate: [←], [→], [↑], [↓], [Ctrl][←], [Ctrl][→]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'pan: [Shift][←], [Shift][→], [Shift][↑], [Shift][↓]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'zoom: [Ctrl][↑], [Ctrl][↓]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'view: [f]ront, [l]eft, [r]ight, [t]op, [b]ottom</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">' [i]sometric, [d]imetric'</span><span class="p">,</span>
|
||||
<span class="n">horizontalalignment</span><span class="o">=</span><span class="s1">'left'</span><span class="p">,</span>
|
||||
<span class="n">verticalalignment</span><span class="o">=</span><span class="s1">'top'</span><span class="p">,</span>
|
||||
<span class="n">transform</span><span class="o">=</span><span class="n">fig</span><span class="o">.</span><span class="n">transFigure</span><span class="p">,</span>
|
||||
<span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">facecolor</span><span class="o">=</span><span class="s1">'black'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">),</span>
|
||||
<span class="n">family</span><span class="o">=</span><span class="s1">'monospace'</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">pylab</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></div>
|
||||
</pre></div>
|
||||
|
||||
|
||||
41
docs/build/html/_modules/pylib/helper.html
vendored
41
docs/build/html/_modules/pylib/helper.html
vendored
@@ -45,6 +45,7 @@
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">import</span> <span class="nn">os</span>
|
||||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">ContextDecorator</span>
|
||||
|
||||
@@ -81,6 +82,46 @@
|
||||
<span class="n">elapsed_time_ms</span> <span class="o">=</span> <span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_time</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">{:s}</span><span class="s1"> took </span><span class="si">{:.3f}</span><span class="s1"> ms'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">elapsed_time_ms</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
<div class="viewcode-block" id="cd"><a class="viewcode-back" href="../../pylib.helper.html#pylib.helper.cd">[docs]</a><span class="k">class</span> <span class="nc">cd</span><span class="p">:</span>
|
||||
<span class="sd">"""Context manager for changing the current working directory</span>
|
||||
|
||||
<span class="sd"> :param new_path: the directory to change into</span>
|
||||
<span class="sd"> :type new_path: string</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> # enter the directory and run some code:</span>
|
||||
<span class="sd"> with cd("~/tmp"):</span>
|
||||
<span class="sd"> # we are now in ~/tmp</span>
|
||||
<span class="sd"> # code</span>
|
||||
<span class="sd"> # outside the context manager we are back where we started.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">new_path</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">new_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">new_path</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">saved_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span>
|
||||
<span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">new_path</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
|
||||
<span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">saved_path</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="run_file"><a class="viewcode-back" href="../../pylib.helper.html#pylib.helper.run_file">[docs]</a><span class="k">def</span> <span class="nf">run_file</span><span class="p">(</span><span class="n">file_name</span><span class="p">):</span>
|
||||
<span class="sd">"""Run a file.</span>
|
||||
|
||||
<span class="sd"> Inside a pythin interpreter it changes to the directory of the</span>
|
||||
<span class="sd"> file and after excuting the file it changes back to the working</span>
|
||||
<span class="sd"> directory before.</span>
|
||||
|
||||
<span class="sd"> :param file_name: the file to execute</span>
|
||||
<span class="sd"> :type file_name: string</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">workdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">file_name</span><span class="p">))</span>
|
||||
<span class="k">with</span> <span class="n">cd</span><span class="p">(</span><span class="n">workdir</span><span class="p">):</span>
|
||||
<span class="n">exec</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">())</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -668,7 +668,7 @@
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="matrix.__getitem__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__getitem__">[docs]</a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sa">r</span><span class="sd">"""</span>
|
||||
<span class="sd"> For index return value, for range return new vector object.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
@@ -825,7 +825,7 @@
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> m = matrix.zeros(3, 3)</span>
|
||||
<span class="sd"> >>> print(m)\</span>
|
||||
<span class="sd"> >>> print(m)</span>
|
||||
<span class="sd"> [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="mf">0.</span> <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">n</span><span class="p">)]</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span><span class="p">)])</span></div>
|
||||
|
||||
463
docs/build/html/_modules/pylib/tui.html
vendored
Normal file
463
docs/build/html/_modules/pylib/tui.html
vendored
Normal file
@@ -0,0 +1,463 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>pylib.tui — pylib 2019.12.21 documentation</title>
|
||||
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
|
||||
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||
<script type="text/javascript" src="../../_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="../../_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="../../_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="../../_static/language_data.js"></script>
|
||||
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
<link rel="index" title="Index" href="../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../search.html" />
|
||||
|
||||
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
||||
|
||||
</head><body>
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
|
||||
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for pylib.tui</h1><div class="highlight"><pre>
|
||||
<span></span><span class="ch">#!/usr/bin/env python</span>
|
||||
<span class="c1"># -*- coding: utf-8 -*-</span>
|
||||
<span class="sd">"""TUI module.</span>
|
||||
|
||||
<span class="sd">:Date: 2020-01-10</span>
|
||||
|
||||
<span class="sd">.. module:: tui</span>
|
||||
<span class="sd"> :platform: *nix, Windows</span>
|
||||
<span class="sd"> :synopsis: TUI module.</span>
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="c1"># TODO: two classes to distinguish between curses (main tui) and</span>
|
||||
<span class="c1"># window (to handle sub windows)?</span>
|
||||
<span class="c1"># TODO: width resizing, min width now 6 because of text and border</span>
|
||||
<span class="c1"># TODO: height resizing, min height</span>
|
||||
<span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span class="kn">import</span> <span class="nn">curses</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="newwin"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.newwin">[docs]</a><span class="k">def</span> <span class="nf">newwin</span><span class="p">(</span><span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="n">win</span> <span class="o">=</span> <span class="n">Window</span><span class="p">()</span>
|
||||
<span class="n">win</span><span class="o">.</span><span class="n">window</span> <span class="o">=</span> <span class="n">curses</span><span class="o">.</span><span class="n">newwin</span><span class="p">(</span><span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">win</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="StdOutWrapper"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.StdOutWrapper">[docs]</a><span class="k">class</span> <span class="nc">StdOutWrapper</span><span class="p">:</span>
|
||||
<span class="sd">"""Send print to stdout (print to the standard console).</span>
|
||||
|
||||
<span class="sd"> usage:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> # catch all prints into StdOutWrapper</span>
|
||||
<span class="sd"> mystdout = StdOutWrapper()</span>
|
||||
<span class="sd"> sys.stdout = mystdout</span>
|
||||
<span class="sd"> sys.stderr = mystdout</span>
|
||||
|
||||
<span class="sd"> # begin curses (curses.initscr())</span>
|
||||
|
||||
<span class="sd"> # do your stuff here</span>
|
||||
<span class="sd"> # print("foo")</span>
|
||||
<span class="sd"> # you can also output mystdout.get_text() in a ncurses widget in</span>
|
||||
<span class="sd"> # runtime</span>
|
||||
|
||||
<span class="sd"> # end curses (curses.endwin())</span>
|
||||
|
||||
<span class="sd"> # go back to normal state and print all catched prints to stdout</span>
|
||||
<span class="sd"> sys.stdout = sys.__stdout__</span>
|
||||
<span class="sd"> sys.stderr = sys.__stderr__</span>
|
||||
<span class="sd"> sys.stdout.write(mystdout.get_text())</span>
|
||||
|
||||
<span class="sd"> source:</span>
|
||||
<span class="sd"> https://stackoverflow.com/a/14010948</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<div class="viewcode-block" id="StdOutWrapper.write"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.StdOutWrapper.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">txt</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">+=</span> <span class="n">txt</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)[</span><span class="o">-</span><span class="mi">30</span><span class="p">:])</span></div>
|
||||
<div class="viewcode-block" id="StdOutWrapper.get_text"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.StdOutWrapper.get_text">[docs]</a> <span class="k">def</span> <span class="nf">get_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">))</span></div></div>
|
||||
<span class="c1">#def get_text(self,beg,end):</span>
|
||||
<span class="c1"># return '\n'.join(self.text.split('\n')[beg:end])</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TUI"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI">[docs]</a><span class="k">class</span> <span class="nc">TUI</span><span class="p">:</span>
|
||||
<span class="sd">"""TUI text-based user interface</span>
|
||||
|
||||
<span class="sd"> initscr is the encapsulation window object of the stdscr</span>
|
||||
<span class="sd"> stdsc is the curses.initscr</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delay</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> :param delay: sets the curses.halfdelay, value between 1 and 255.</span>
|
||||
<span class="sd"> :param type: int</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">delay</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"TUI(delay)"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Could not convert the argument to an integer."</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># catch all prints into StdOutWrapper</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">StdOutWrapper</span><span class="p">()</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdout</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdout</span>
|
||||
|
||||
<span class="c1"># Define the appearance of some interface elements</span>
|
||||
<span class="n">hotkey_attr</span> <span class="o">=</span> <span class="n">curses</span><span class="o">.</span><span class="n">A_BOLD</span> <span class="o">|</span> <span class="n">curses</span><span class="o">.</span><span class="n">A_UNDERLINE</span>
|
||||
<span class="n">menu_attr</span> <span class="o">=</span> <span class="n">curses</span><span class="o">.</span><span class="n">A_NORMAL</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">initscr</span> <span class="o">=</span> <span class="n">Window</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">initscr</span><span class="o">.</span><span class="n">initscr</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initscr</span><span class="o">.</span><span class="n">window</span>
|
||||
<span class="c1">#print(type(self.stdscr))</span>
|
||||
<span class="c1">#print(type(self.initscr))</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">cbreak</span><span class="p">()</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">halfdelay</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span> <span class="c1"># How many tenths of a second are waited, from 1 to 255</span>
|
||||
<span class="c1">#stdscr.nodelay(1)</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">noecho</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cursor_visibility</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Set the cursor state. visibility can be set to 0, 1, or 2, for invisible, normal, or very visible.</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">curs_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cursor_visibility</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span><span class="o">.</span><span class="n">keypad</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">mousemask</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># activate mouse events</span>
|
||||
|
||||
<span class="c1"># init colors</span>
|
||||
<span class="k">if</span> <span class="n">curses</span><span class="o">.</span><span class="n">has_colors</span><span class="p">():</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">start_color</span><span class="p">()</span> <span class="c1"># initializes 8 basic colors. 0:black, 1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">use_default_colors</span><span class="p">()</span>
|
||||
<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="mi">0</span><span class="p">,</span> <span class="n">curses</span><span class="o">.</span><span class="n">COLORS</span><span class="p">):</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">init_pair</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># Color pair 0 is hard-wired to white on black, and cannot be changed.</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="k">pass</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_ch</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># getch() Note that the integer returned does not have to be in ASCII range: function keys, keypad keys and so on return numbers higher than 256.</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_mouse_ch</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<div class="viewcode-block" id="TUI.refresh"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">initscr</span><span class="o">.</span><span class="n">refresh</span><span class="p">()</span> <span class="c1"># update the screen</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.getch"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.getch">[docs]</a> <span class="k">def</span> <span class="nf">getch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># keep last key value</span>
|
||||
<span class="n">last_pressed_ch_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initscr</span><span class="o">.</span><span class="n">getch</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">last_pressed_ch_current</span> <span class="o">!=</span> <span class="n">curses</span><span class="o">.</span><span class="n">ERR</span><span class="p">:</span>
|
||||
<span class="c1"># keep last key while window resizing</span>
|
||||
<span class="k">if</span> <span class="n">last_pressed_ch_current</span> <span class="o">==</span> <span class="n">curses</span><span class="o">.</span><span class="n">KEY_MOUSE</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_mouse_ch</span> <span class="o">=</span> <span class="n">last_pressed_ch_current</span>
|
||||
<span class="k">if</span> <span class="n">last_pressed_ch_current</span> <span class="ow">in</span> <span class="p">[</span><span class="n">curses</span><span class="o">.</span><span class="n">KEY_MOUSE</span><span class="p">,</span> <span class="n">curses</span><span class="o">.</span><span class="n">KEY_RESIZE</span><span class="p">]:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_ch</span> <span class="o">=</span> <span class="n">last_pressed_ch_current</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.color_table"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.color_table">[docs]</a> <span class="k">def</span> <span class="nf">color_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Print all available colors with default background.</span>
|
||||
<span class="sd"> Check if curses.has_colors() is True.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># TODO: position</span>
|
||||
<span class="c1"># FIXME: use own text method?</span>
|
||||
<span class="c1"># FIXME: build full str first and then print?</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">curses</span><span class="o">.</span><span class="n">has_colors</span><span class="p">():</span>
|
||||
<span class="k">return</span>
|
||||
<span class="k">if</span> <span class="n">window</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span>
|
||||
|
||||
<span class="n">window</span><span class="o">.</span><span class="n">addstr</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'</span><span class="si">{0}</span><span class="s1"> colors available'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">curses</span><span class="o">.</span><span class="n">COLORS</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">curses</span><span class="o">.</span><span class="n">can_change_color</span><span class="p">():</span>
|
||||
<span class="n">window</span><span class="o">.</span><span class="n">addstr</span><span class="p">(</span><span class="s1">' (can change color: </span><span class="si">{0}</span><span class="s1">)'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">curses</span><span class="o">.</span><span class="n">can_change_color</span><span class="p">()))</span>
|
||||
<span class="n">_</span><span class="p">,</span> <span class="n">maxx</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="n">getmaxyx</span><span class="p">()</span>
|
||||
<span class="n">step_size</span> <span class="o">=</span> <span class="mi">4</span>
|
||||
<span class="n">maxx</span> <span class="o">=</span> <span class="n">maxx</span> <span class="o">-</span> <span class="n">maxx</span> <span class="o">%</span> <span class="n">step_size</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="mi">3</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<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="mi">0</span><span class="p">,</span> <span class="n">curses</span><span class="o">.</span><span class="n">COLORS</span><span class="p">):</span>
|
||||
<span class="n">window</span><span class="o">.</span><span class="n">addstr</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">'{0:</span><span class="si">{1}</span><span class="s1">}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">step_size</span><span class="p">),</span> <span class="n">curses</span><span class="o">.</span><span class="n">color_pair</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">step_size</span><span class="p">)</span> <span class="o">%</span> <span class="n">maxx</span>
|
||||
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">y</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="c1"># End of screen reached</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.color_def"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.color_def">[docs]</a> <span class="k">def</span> <span class="nf">color_def</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">curses</span><span class="o">.</span><span class="n">can_change_color</span><span class="p">():</span> <span class="c1"># if True curses.init_color(color_number, r, g, b) can be used</span>
|
||||
<span class="k">pass</span></div>
|
||||
<span class="c1"># changes colors for the terminal also after closing the program.</span>
|
||||
<span class="c1">#curses.color_content(0)</span>
|
||||
<span class="c1">#tmp = curses.color_content(1)</span>
|
||||
<span class="c1">#print(curses.color_content(1))</span>
|
||||
<span class="c1">#curses.init_color(0, 1000, 0, 0) # color_number = init_pair number - 1 (maybe because init_pair number 0 is hard-wired and not changeable)</span>
|
||||
<span class="c1">#curses.init_color(1, 1000, 500, 1000)</span>
|
||||
<span class="c1">#print(curses.color_content(1))</span>
|
||||
<span class="c1">#curses.init_color(1, *tmp)</span>
|
||||
<span class="c1">#print(curses.color_content(1))</span>
|
||||
|
||||
<div class="viewcode-block" id="TUI.clear"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.end"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.end">[docs]</a> <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""clean up"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">nocbreak</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span><span class="o">.</span><span class="n">keypad</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">echo</span><span class="p">()</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">endwin</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># go back to normal state and print all catched prints to stdout</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stdout__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stderr__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">get_text</span><span class="p">())</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Window"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window">[docs]</a><span class="k">class</span> <span class="nc">Window</span><span class="p">:</span>
|
||||
<span class="sd">"""Window</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<div class="viewcode-block" id="Window.initscr"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.initscr">[docs]</a> <span class="k">def</span> <span class="nf">initscr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window</span> <span class="o">=</span> <span class="n">curses</span><span class="o">.</span><span class="n">initscr</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.derwin"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.derwin">[docs]</a> <span class="k">def</span> <span class="nf">derwin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="n">win</span> <span class="o">=</span> <span class="n">Window</span><span class="p">()</span>
|
||||
<span class="n">win</span><span class="o">.</span><span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">derwin</span><span class="p">(</span><span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">win</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.clear"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.getmaxyx"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.getmaxyx">[docs]</a> <span class="k">def</span> <span class="nf">getmaxyx</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">getmaxyx</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.getch"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.getch">[docs]</a> <span class="k">def</span> <span class="nf">getch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">getch</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.instr"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.instr">[docs]</a> <span class="k">def</span> <span class="nf">instr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">instr</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.text"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.text">[docs]</a> <span class="k">def</span> <span class="nf">text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">padding_left</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">padding_top</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">attribute</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">color_pair</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Test to screen. If multiline than keep the x position for</span>
|
||||
<span class="sd"> each new line.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> text(stdscr, 2, 1, "1 - Show test page")</span>
|
||||
<span class="sd"> text(stdscr, 3, 1, "h - Show help page")</span>
|
||||
<span class="sd"> text(stdscr, 4, 1, "q - Exit")</span>
|
||||
|
||||
<span class="sd"> text(stdscr, 2, 1,</span>
|
||||
<span class="sd"> "1 - Show test page\\n" +</span>
|
||||
<span class="sd"> "h - Show help page\\n" +</span>
|
||||
<span class="sd"> "q - Exit")</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> Writing in the last char of the window (last row bottom and</span>
|
||||
<span class="sd"> last column right) is suppressed</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">win_height</span><span class="p">,</span> <span class="n">win_width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">getmaxyx</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">win_width</span><span class="o">-</span><span class="n">padding_left</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span> <span class="c1"># unicode can have 2 char width</span>
|
||||
<span class="k">return</span>
|
||||
<span class="n">yi</span> <span class="o">=</span> <span class="n">padding_top</span>
|
||||
<span class="c1">#for row in string.split("\n"):</span>
|
||||
<span class="c1"># window.addnstr(yi, x, row, win_width-x-1, curses.color_pair(9)) # 5</span>
|
||||
<span class="c1"># yi += 1</span>
|
||||
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">):</span> <span class="c1"># TODO: os.linesep?</span>
|
||||
<span class="n">xi</span> <span class="o">=</span> <span class="n">padding_left</span>
|
||||
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">row</span><span class="p">:</span>
|
||||
<span class="c1"># write only inside the window</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">yi</span> <span class="o">>=</span> <span class="n">win_height</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">xi</span> <span class="o">>=</span> <span class="n">win_width</span><span class="p">:</span>
|
||||
<span class="c1"># do not write in the last char of window (last row bottom and last column right)</span>
|
||||
<span class="c1"># unicodes may use multiple chars, this will raise an error for the last char in the window</span>
|
||||
<span class="k">if</span> <span class="n">yi</span> <span class="o">==</span> <span class="n">win_height</span><span class="o">-</span><span class="mi">1</span> <span class="ow">and</span> <span class="n">xi</span> <span class="o">>=</span> <span class="n">win_width</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span>
|
||||
<span class="k">break</span>
|
||||
<span class="c1">#if yi == win_height-1 and xi >= win_width-1:</span>
|
||||
<span class="c1"># try:</span>
|
||||
<span class="c1"># char.encode("ascii")</span>
|
||||
<span class="c1"># except UnicodeEncodeError:</span>
|
||||
<span class="c1"># break</span>
|
||||
|
||||
<span class="c1"># dont add str if empty braille char or simple space character</span>
|
||||
<span class="k">if</span> <span class="n">char</span> <span class="o">!=</span> <span class="nb">chr</span><span class="p">(</span><span class="mh">0x2800</span><span class="p">)</span> <span class="ow">and</span> <span class="n">char</span> <span class="o">!=</span> <span class="s2">" "</span> <span class="ow">and</span> <span class="n">xi</span> <span class="o"><</span> <span class="n">win_width</span> <span class="ow">and</span> <span class="n">yi</span> <span class="o"><</span> <span class="n">win_height</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">addstr</span><span class="p">(</span><span class="n">yi</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">char</span><span class="p">,</span> <span class="n">attribute</span><span class="o">|</span><span class="n">curses</span><span class="o">.</span><span class="n">color_pair</span><span class="p">(</span><span class="n">color_pair</span><span class="p">))</span>
|
||||
<span class="n">xi</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="n">yi</span> <span class="o">+=</span> <span class="mi">1</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.border"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.border">[docs]</a> <span class="k">def</span> <span class="nf">border</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">footer_left</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">footer_right</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="s2">"horizontal"</span><span class="p">):</span>
|
||||
<span class="sd">"""Set border around the window with optional title and footer</span>
|
||||
<span class="sd"> labels.</span>
|
||||
|
||||
<span class="sd"> :param window: the window to draw a border</span>
|
||||
<span class="sd"> :type window: curses.window</span>
|
||||
<span class="sd"> :param title: the title for the window (default = "")</span>
|
||||
<span class="sd"> :type title: str</span>
|
||||
<span class="sd"> :param footer_left: the footer label (default = ""). If footer_left</span>
|
||||
<span class="sd"> is a list than every element of the list will be printed sperated</span>
|
||||
<span class="sd"> by one column. This is useful to not overwright the border with a</span>
|
||||
<span class="sd"> space character.</span>
|
||||
<span class="sd"> :type footer_left: str or list</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">win_height</span><span class="p">,</span> <span class="n">win_width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">getmaxyx</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">win_width</span> <span class="o"><</span> <span class="mi">3</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">style</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">style</span> <span class="o">==</span> <span class="s2">"horizontal"</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">border</span><span class="p">(</span>
|
||||
<span class="s1">' '</span><span class="p">,</span>
|
||||
<span class="s1">' '</span><span class="p">,</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">ACS_HLINE</span><span class="p">,</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">ACS_HLINE</span><span class="p">,</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">ACS_HLINE</span><span class="p">,</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">ACS_HLINE</span><span class="p">,</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">ACS_HLINE</span><span class="p">,</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">ACS_HLINE</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">style</span> <span class="o">==</span> <span class="s2">"full"</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">border</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span> <span class="c1"># list</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">border</span><span class="p">(</span><span class="o">*</span><span class="n">style</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">title</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">footer_left</span><span class="p">:</span>
|
||||
<span class="n">last_win_row</span> <span class="o">=</span> <span class="n">win_height</span> <span class="o">-</span> <span class="mi">1</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">footer_left</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">footer_left</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">last_win_row</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span> <span class="c1"># list</span>
|
||||
<span class="n">pos</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">footer_left_i</span> <span class="ow">in</span> <span class="n">footer_left</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">footer_left_i</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span> <span class="n">win_height</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">pos</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">footer_left_i</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">footer_right</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">footer_right</span><span class="p">,</span> <span class="n">win_width</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">footer_right</span><span class="p">),</span> <span class="n">last_win_row</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.textbox"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.textbox">[docs]</a> <span class="k">def</span> <span class="nf">textbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">borders</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""Add sub window.</span>
|
||||
|
||||
<span class="sd"> :param parent_window: the parent window</span>
|
||||
<span class="sd"> :type parent_window: curses.window</span>
|
||||
<span class="sd"> :param height: the height of the sub window. The reference point of</span>
|
||||
<span class="sd"> the sub window is the top left corner.</span>
|
||||
<span class="sd"> :type height: int</span>
|
||||
<span class="sd"> :param width: the width of the sub window. The reference point of</span>
|
||||
<span class="sd"> the sub window is the top left corner.</span>
|
||||
<span class="sd"> :type width: int</span>
|
||||
<span class="sd"> :param y: the y coordinate (position) of the sub window. Start from</span>
|
||||
<span class="sd"> the top.</span>
|
||||
<span class="sd"> :type y: int</span>
|
||||
<span class="sd"> :param x: the x coordinate (position) of the sub window. Start from</span>
|
||||
<span class="sd"> the left.</span>
|
||||
<span class="sd"> :returns: the sub window content and decoration</span>
|
||||
<span class="sd"> :rtype: (curses.window, curses.window)</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># TODO: not to work with two window object but one with the</span>
|
||||
<span class="c1"># possibility to access the derwin(s). Either self.derwins</span>
|
||||
<span class="c1"># or another DoubleWindow class for border and text or do it</span>
|
||||
<span class="c1"># in this class?</span>
|
||||
<span class="n">screen_height</span><span class="p">,</span> <span class="n">screen_width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">getmaxyx</span><span class="p">()</span>
|
||||
<span class="n">newwin_width</span> <span class="o">=</span> <span class="n">screen_width</span><span class="o">-</span><span class="n">x</span> <span class="k">if</span> <span class="n">x</span><span class="o">+</span><span class="n">width</span> <span class="o">></span> <span class="n">screen_width</span> <span class="k">else</span> <span class="n">width</span>
|
||||
<span class="n">newwin_height</span> <span class="o">=</span> <span class="n">screen_height</span><span class="o">-</span><span class="n">y</span> <span class="k">if</span> <span class="n">y</span><span class="o">+</span><span class="n">height</span> <span class="o">></span> <span class="n">screen_height</span> <span class="k">else</span> <span class="n">height</span>
|
||||
<span class="k">if</span> <span class="n">newwin_width</span> <span class="o">></span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">newwin_height</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">win</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">derwin</span><span class="p">(</span><span class="n">newwin_height</span><span class="p">,</span> <span class="n">newwin_width</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">borders</span><span class="p">:</span>
|
||||
<span class="n">win</span><span class="o">.</span><span class="n">border</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">"full"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">newwin_width</span><span class="o">-</span><span class="mi">2</span> <span class="o">></span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">newwin_height</span><span class="o">-</span><span class="mi">1</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">subwin</span> <span class="o">=</span> <span class="n">win</span><span class="o">.</span><span class="n">derwin</span><span class="p">(</span><span class="n">newwin_height</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">newwin_width</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">subwin</span><span class="p">,</span> <span class="n">win</span> <span class="c1"># text and border</span>
|
||||
<span class="k">return</span> <span class="n">newwin</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">win</span> <span class="c1"># only border, no text (top left 1 char)</span>
|
||||
<span class="k">return</span> <span class="n">win</span><span class="p">,</span> <span class="n">newwin</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1"># only text, no border (top left 1 char)</span>
|
||||
<span class="k">return</span> <span class="n">newwin</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">newwin</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1"># no border and no text (top left 1 char)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Window.refresh"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">refresh</span><span class="p">()</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Contents:</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">pylib</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="relations">
|
||||
<h3>Related Topics</h3>
|
||||
<ul>
|
||||
<li><a href="../../index.html">Documentation overview</a><ul>
|
||||
<li><a href="../index.html">Module code</a><ul>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
©2019, Daniel Weschke.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user