Explorar el Código

new interface for gridviewer

olivier.massot hace 8 años
padre
commit
21d5ec9fb5

+ 34 - 126
gridviewer/GridViewer.py

@@ -2,23 +2,22 @@
 
     ** By Cro-Ki l@b, 2017 **
 '''
-if __name__ == "__main__":
-    import os, sys
-    pypog_path = (os.path.abspath(".."))
-    sys.path.append(pypog_path)
-
-import json
-import time
+import sys
 
-from PyQt5.Qt import QFileDialog, Qt, QRectF
-from PyQt5.QtCore import QPointF, QMimeData
+from PyQt5.Qt import Qt
+from PyQt5.QtCore import QPointF
 from PyQt5.QtWidgets import QMainWindow, \
-    QApplication, QGraphicsScene, QGraphicsView, QMessageBox
+    QApplication, QGraphicsScene, QGraphicsView
 import ipdb  # until I find another way to print traceback with pyqt5
+from pypog.grid_objects import SquareGrid
+
 
-from gridviewer.GridViewerCell import GridViewerCell
-from gridviewer.viewer import Ui_window
-from pypog import geometry
+try:
+    from gridviewer.GridViewerCell import GridViewerCell
+    from gridviewer.qt_viewer import Ui_window
+except ImportError:
+    from GridViewerCell import GridViewerCell
+    from qt_viewer import Ui_window
 
 class GridViewer(QMainWindow):
 
@@ -38,83 +37,46 @@ class GridViewer(QMainWindow):
         self.ui.view.centerOn(QPointF(0, 0))
         self.ui.view.setDragMode(QGraphicsView.NoDrag)
 
-        self.ui.txt_coords.setPlainText("[]")
+        self.ui.btn_new_grid.clicked.connect(self.new_grid_dialog)
+
+        self.ui.btn_run.clicked.connect(self.run_f)
+
+        self.ui.btn_list_view.clicked.connect(self.list_view_dialog)
 
-        self.ui.btn_make.clicked.connect(self.make_grid)
-        self.ui.btn_updateSelection.clicked.connect(self.update_selected_cells)
-        self.ui.btn_toClipboard.clicked.connect(self.to_clipboard)
         self.ui.btn_zoom_plus.clicked.connect(self.zoom_plus)
         self.ui.btn_zoom_minus.clicked.connect(self.zoom_minus)
         self.ui.chk_displayCoords.toggled.connect(self.update_cell_labels)
 
-        self.ui.txt_stdin.returnPressed.connect(self.run_stdin)
-
-        self.ui.btn_load_tipog.clicked.connect(self.tipog_load)
-        self.ui.btn_tipog_previous.clicked.connect(self.tipog_previous)
-        self.ui.btn_tipog_next.clicked.connect(self.tipog_next)
+        self.make_grid(SquareGrid(30, 30))
 
-        self.make_grid()
-
-    def current_shape(self):
-        return geometry.FLAT_HEX if self.ui.opt_hex.isChecked() else geometry.SQUARE
-
-    def make_grid(self):
-        shape = self.current_shape()
-        width = self.ui.spb_width.value()
-        height = self.ui.spb_height.value()
-
-        self._update_grid(shape, 0, width, 0, height)
-
-    def _update_grid(self, cell_shape, min_x, max_x, min_y, max_y):
+    def make_grid(self, grid):
         QApplication.setOverrideCursor(Qt.WaitCursor)
-
         self.cells = {}
         self.selection = []
 
         self._scene.clear()
 
-        if (max_x - min_x) * (max_y - min_y) > 10000:
+        if len(grid) > 10000:
             self.ui.chk_displayCoords.setChecked(False)
 
-        for x in range(min_x, max_x):
-            for y in range(min_y, max_y):
+        for x, y in grid:
+            cell = GridViewerCell(self, x, y)
+            cell.generate(grid.geometry.graphicsitem(x, y), show_label=self.ui.chk_displayCoords.isChecked())
 
-                cell = GridViewerCell(self, x, y)
-                cell.generate(cell_shape, show_label=self.ui.chk_displayCoords.isChecked())
-
-                self._scene.addItem(cell)
-
-                self.cells[(x, y)] = cell
-
-        self.ui.txt_stdout.setText(str(self.cells))
-
-#         rect = self._scene.sceneRect()
-#         margin = 240
-#         new_rect = QRectF(rect.x() - margin, rect.y() - margin, rect.width() + (2 * margin), rect.height() + (2 * margin))
-#         self._scene.setSceneRect(new_rect)
+            self._scene.addItem(cell)
+            self.cells[(x, y)] = cell
 
         self.ui.view.centerOn(QPointF(0, 0))
-#         self.ui.view.centerOn(QPointF(rect.x() - margin, rect.y() - margin))
-
         QApplication.restoreOverrideCursor()
 
     def add_to_selection(self, x, y):
         self.selection.append((x, y))
 
-        self.ui.txt_coords.setText(str(self.selection))
-
     def remove_from_selection(self, x, y):
         self.selection.remove((x, y))
-        self.ui.txt_coords.setText(str(self.selection))
 
-    def update_selected_cells(self):
+    def update_selected_cells(self, new_selection):
         QApplication.setOverrideCursor(Qt.WaitCursor)
-        try:
-            new_selection = list(eval(self.ui.txt_coords.toPlainText()))
-        except SyntaxError:
-            QMessageBox.warning(self, "Error", "Invalid string")
-            return
-
         for x, y in tuple(self.selection):
             self.cells[(x, y)].unselect()
 
@@ -122,11 +84,6 @@ class GridViewer(QMainWindow):
             self.cells[(x, y)].select()
         QApplication.restoreOverrideCursor()
 
-    def to_clipboard(self):
-        data = QMimeData()
-        data.setText(self.ui.txt_coords.toPlainText())
-        app.clipboard().setMimeData(data)
-
     def update_cell_labels(self):
         for cell in self.cells.values():
             cell.show_label(bool(self.ui.chk_displayCoords.isChecked()))
@@ -137,63 +94,14 @@ class GridViewer(QMainWindow):
     def zoom_minus(self):
         self.ui.view.scale(0.9, 0.9)
 
-    def run_stdin(self):
-        stdin = self.ui.txt_stdin.text()
-        try:
-            t0 = time.time()
-            result = eval("geometry." + stdin)
-            self.ui.txt_coords.setText(str(result))
-            self.update_selected_cells()
-            self.ui.txt_stdout.setText("{} ms.".format(int(1000 * (time.time() - t0))))
-        except Exception as e:
-            self.ui.txt_stdout.setText("{} : {}".format(e.__class__name__, e))
-
-    def tipog_load(self):
-        filepath = QFileDialog.getOpenFileName(self, "Select the Tipog results file", ".")[0]
-        try:
-            with open(filepath, "r") as f:
-                results = json.load(f)
-        except:
-            print("unreadable file: {}".format(filepath))
-
-        if not results:
-            print("empty results file")
-            return
-
-        self.tipog_results = results
-        self.tipog_current = 0
-
-        self.ui.btn_tipog_next.setEnabled(True)
-        self.ui.btn_tipog_previous.setEnabled(True)
-        self.tipog_update()
-
-    def tipog_next(self):
-        if self.tipog_current > (len(self.tipog_results) - 1):
-            return
-        self.tipog_current += 1
-        self.tipog_update()
-
-    def tipog_previous(self):
-        if self.tipog_current < 1:
-            return
-        self.tipog_current -= 1
-        self.tipog_update()
-
-    def tipog_update(self):
-        res = self.tipog_results[self.tipog_current]
-        xs = [x for x, _ in res["result"]]
-        ys = [y for _, y in res["result"]]
-        min_x = min(xs) - 5
-        max_x = max(xs) + 5
-        min_y = min(ys) - 5
-        max_y = max(ys) + 5
-        self._update_grid(int(res["cell_shape"]), min_x, max_x, min_y, max_y)
-        self.ui.lbl_tipog_counter.setText("{} on {}".format(self.tipog_current + 1, len(self.tipog_results)))
-        formatted_result = [(x, y) for x, y in res["result"]]
-        self.ui.txt_coords.setText(str(formatted_result))
-
-        self.update_selected_cells()
-        self.ui.txt_stdout.setText("{}\nExecuted in {} ms.".format(res["call"], res["exectime"]))
+    def new_grid_dialog(self):
+        pass
+
+    def list_view_dialog(self):
+        pass
+
+    def run_f(self):
+        pass
 
 if __name__ == "__main__":
 

+ 9 - 15
gridviewer/GridViewerCell.py

@@ -7,9 +7,6 @@ from PyQt5.QtGui import QPolygonF, QPen, QBrush, QColor, QFont
 from PyQt5.QtWidgets import QGraphicsPolygonItem, QGraphicsItem, \
     QGraphicsSimpleTextItem
 
-from pypog import geometry
-from pypog import graphic
-
 class GridViewerCell(QGraphicsPolygonItem):
 
     def __init__(self, gridViewer, x, y):
@@ -19,10 +16,9 @@ class GridViewerCell(QGraphicsPolygonItem):
         self.y = y
         self.selected = False
 
-    def generate(self, shape, scale=120, show_label=False):
+    def generate(self, points, show_label=False):
 
-        points = [QPointF(xp, yp) for xp, yp in graphic.g_cell(shape, self.x, self.y, scale)]
-        qpolygon = QPolygonF(points)
+        qpolygon = QPolygonF([QPointF(xp, yp) for xp, yp in points])
 
         self.setPolygon(qpolygon)
 
@@ -35,14 +31,13 @@ class GridViewerCell(QGraphicsPolygonItem):
         self.label = QGraphicsSimpleTextItem("{}-{}".format(self.x, self.y), parent=self)
         self.label.setVisible(show_label)
 
-        k = 0
-        if (self.x % 2) != 0:
-            k = 0.5
-
-        if shape == geometry.FLAT_HEX:
-            self.label.setPos(QPointF(((self.x * 0.866) + 0.2886) * scale, (self.y + k + 0.5) * scale))
-        else:
-            self.label.setPos(QPointF(self.x * scale, self.y * scale))
+#         k = 0
+#         if (self.x % 2) != 0:
+#             k = 0.5
+#         if shape == geometry.FLAT_HEX:
+#             self.label.setPos(QPointF(((self.x * 0.866) + 0.2886) * scale, (self.y + k + 0.5) * scale))
+#         else:
+#             self.label.setPos(QPointF(self.x * scale, self.y * scale))
 
         font = QFont()
         font.setPointSize(20)
@@ -59,7 +54,6 @@ class GridViewerCell(QGraphicsPolygonItem):
         self.gridViewer.remove_from_selection(self.x, self.y)
 
     def mousePressEvent(self, *args, **kwargs):
-
         if self.selected:
             self.unselect()
         else:

+ 44 - 0
gridviewer/qt_listview.py

@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'qt_listview.ui'
+#
+# Created by: PyQt5 UI code generator 5.7.1
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_window(object):
+    def setupUi(self, window):
+        window.setObjectName("window")
+        window.resize(380, 477)
+        window.setModal(True)
+        self.verticalLayout = QtWidgets.QVBoxLayout(window)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.txt_list = QtWidgets.QTextEdit(window)
+        self.txt_list.setMinimumSize(QtCore.QSize(183, 0))
+        self.txt_list.setObjectName("txt_list")
+        self.verticalLayout.addWidget(self.txt_list)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setContentsMargins(-1, -1, -1, 10)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.btn_cancel = QtWidgets.QPushButton(window)
+        self.btn_cancel.setObjectName("btn_cancel")
+        self.horizontalLayout.addWidget(self.btn_cancel)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.btn_ok = QtWidgets.QPushButton(window)
+        self.btn_ok.setAutoDefault(True)
+        self.btn_ok.setObjectName("btn_ok")
+        self.horizontalLayout.addWidget(self.btn_ok)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(window)
+        QtCore.QMetaObject.connectSlotsByName(window)
+
+    def retranslateUi(self, window):
+        _translate = QtCore.QCoreApplication.translate
+        window.setWindowTitle(_translate("window", "List View"))
+        self.btn_cancel.setText(_translate("window", "Cancel"))
+        self.btn_ok.setText(_translate("window", "Ok"))
+

+ 71 - 0
gridviewer/qt_listview.ui

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>window</class>
+ <widget class="QDialog" name="window">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>380</width>
+    <height>477</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>List View</string>
+  </property>
+  <property name="modal">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QTextEdit" name="txt_list">
+     <property name="minimumSize">
+      <size>
+       <width>183</width>
+       <height>0</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="bottomMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QPushButton" name="btn_cancel">
+       <property name="text">
+        <string>Cancel</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="btn_ok">
+       <property name="text">
+        <string>Ok</string>
+       </property>
+       <property name="autoDefault">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 69 - 0
gridviewer/qt_new_grid.py

@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'qt_new_grid.ui'
+#
+# Created by: PyQt5 UI code generator 5.7.1
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_window(object):
+    def setupUi(self, window):
+        window.setObjectName("window")
+        window.resize(247, 172)
+        window.setMinimumSize(QtCore.QSize(247, 172))
+        window.setMaximumSize(QtCore.QSize(247, 172))
+        self.opt_square = QtWidgets.QRadioButton(window)
+        self.opt_square.setGeometry(QtCore.QRect(30, 37, 119, 28))
+        self.opt_square.setMinimumSize(QtCore.QSize(0, 28))
+        self.opt_square.setMaximumSize(QtCore.QSize(140, 28))
+        self.opt_square.setObjectName("opt_square")
+        self.spb_width = QtWidgets.QSpinBox(window)
+        self.spb_width.setGeometry(QtCore.QRect(23, 73, 80, 28))
+        self.spb_width.setMinimumSize(QtCore.QSize(38, 28))
+        self.spb_width.setMaximumSize(QtCore.QSize(80, 28))
+        self.spb_width.setMinimum(1)
+        self.spb_width.setMaximum(999)
+        self.spb_width.setProperty("value", 30)
+        self.spb_width.setObjectName("spb_width")
+        self.btn_create = QtWidgets.QPushButton(window)
+        self.btn_create.setGeometry(QtCore.QRect(153, 120, 75, 31))
+        self.btn_create.setAutoDefault(True)
+        self.btn_create.setObjectName("btn_create")
+        self.btn_cancel = QtWidgets.QPushButton(window)
+        self.btn_cancel.setGeometry(QtCore.QRect(23, 120, 75, 31))
+        self.btn_cancel.setAutoDefault(False)
+        self.btn_cancel.setObjectName("btn_cancel")
+        self.spb_height = QtWidgets.QSpinBox(window)
+        self.spb_height.setGeometry(QtCore.QRect(133, 73, 80, 28))
+        self.spb_height.setMinimumSize(QtCore.QSize(38, 28))
+        self.spb_height.setMaximumSize(QtCore.QSize(80, 28))
+        self.spb_height.setMinimum(1)
+        self.spb_height.setMaximum(999)
+        self.spb_height.setProperty("value", 30)
+        self.spb_height.setObjectName("spb_height")
+        self.label_2 = QtWidgets.QLabel(window)
+        self.label_2.setGeometry(QtCore.QRect(113, 70, 10, 35))
+        self.label_2.setMinimumSize(QtCore.QSize(10, 0))
+        self.label_2.setMaximumSize(QtCore.QSize(10, 16777215))
+        self.label_2.setObjectName("label_2")
+        self.opt_hex = QtWidgets.QRadioButton(window)
+        self.opt_hex.setGeometry(QtCore.QRect(30, 10, 121, 28))
+        self.opt_hex.setMinimumSize(QtCore.QSize(0, 28))
+        self.opt_hex.setMaximumSize(QtCore.QSize(140, 28))
+        self.opt_hex.setChecked(True)
+        self.opt_hex.setObjectName("opt_hex")
+
+        self.retranslateUi(window)
+        QtCore.QMetaObject.connectSlotsByName(window)
+
+    def retranslateUi(self, window):
+        _translate = QtCore.QCoreApplication.translate
+        window.setWindowTitle(_translate("window", "New Grid"))
+        self.opt_square.setText(_translate("window", "Square grid"))
+        self.btn_create.setText(_translate("window", "Create"))
+        self.btn_cancel.setText(_translate("window", "Cancel"))
+        self.label_2.setText(_translate("window", "X"))
+        self.opt_hex.setText(_translate("window", "Flat Hexagonal grid"))
+

+ 203 - 0
gridviewer/qt_new_grid.ui

@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>window</class>
+ <widget class="QDialog" name="window">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>247</width>
+    <height>172</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>247</width>
+    <height>172</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>247</width>
+    <height>172</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>New Grid</string>
+  </property>
+  <widget class="QRadioButton" name="opt_square">
+   <property name="geometry">
+    <rect>
+     <x>30</x>
+     <y>37</y>
+     <width>119</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="minimumSize">
+    <size>
+     <width>0</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>140</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="text">
+    <string>Square grid</string>
+   </property>
+  </widget>
+  <widget class="QSpinBox" name="spb_width">
+   <property name="geometry">
+    <rect>
+     <x>23</x>
+     <y>73</y>
+     <width>80</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="minimumSize">
+    <size>
+     <width>38</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>80</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="minimum">
+    <number>1</number>
+   </property>
+   <property name="maximum">
+    <number>999</number>
+   </property>
+   <property name="value">
+    <number>30</number>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="btn_create">
+   <property name="geometry">
+    <rect>
+     <x>153</x>
+     <y>120</y>
+     <width>75</width>
+     <height>31</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Create</string>
+   </property>
+   <property name="autoDefault">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="btn_cancel">
+   <property name="geometry">
+    <rect>
+     <x>23</x>
+     <y>120</y>
+     <width>75</width>
+     <height>31</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Cancel</string>
+   </property>
+   <property name="autoDefault">
+    <bool>false</bool>
+   </property>
+  </widget>
+  <widget class="QSpinBox" name="spb_height">
+   <property name="geometry">
+    <rect>
+     <x>133</x>
+     <y>73</y>
+     <width>80</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="minimumSize">
+    <size>
+     <width>38</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>80</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="minimum">
+    <number>1</number>
+   </property>
+   <property name="maximum">
+    <number>999</number>
+   </property>
+   <property name="value">
+    <number>30</number>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>113</x>
+     <y>70</y>
+     <width>10</width>
+     <height>35</height>
+    </rect>
+   </property>
+   <property name="minimumSize">
+    <size>
+     <width>10</width>
+     <height>0</height>
+    </size>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>10</width>
+     <height>16777215</height>
+    </size>
+   </property>
+   <property name="text">
+    <string>X</string>
+   </property>
+  </widget>
+  <widget class="QRadioButton" name="opt_hex">
+   <property name="geometry">
+    <rect>
+     <x>30</x>
+     <y>10</y>
+     <width>121</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="minimumSize">
+    <size>
+     <width>0</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="maximumSize">
+    <size>
+     <width>140</width>
+     <height>28</height>
+    </size>
+   </property>
+   <property name="text">
+    <string>Flat Hexagonal grid</string>
+   </property>
+   <property name="checked">
+    <bool>true</bool>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 138 - 0
gridviewer/qt_viewer.py

@@ -0,0 +1,138 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'qt_viewer2.ui'
+#
+# Created by: PyQt5 UI code generator 5.7.1
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_window(object):
+    def setupUi(self, window):
+        window.setObjectName("window")
+        window.resize(910, 658)
+        font = QtGui.QFont()
+        font.setFamily("Verdana")
+        font.setPointSize(8)
+        window.setFont(font)
+        self.centralwidget = QtWidgets.QWidget(window)
+        self.centralwidget.setObjectName("centralwidget")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
+        self.horizontalLayout.setContentsMargins(3, 3, 3, 3)
+        self.horizontalLayout.setSpacing(3)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setSpacing(3)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.lbl_title = QtWidgets.QLabel(self.centralwidget)
+        font = QtGui.QFont()
+        font.setBold(True)
+        font.setWeight(75)
+        self.lbl_title.setFont(font)
+        self.lbl_title.setFocusPolicy(QtCore.Qt.StrongFocus)
+        self.lbl_title.setAlignment(QtCore.Qt.AlignCenter)
+        self.lbl_title.setObjectName("lbl_title")
+        self.verticalLayout.addWidget(self.lbl_title)
+        self.frame_tools = QtWidgets.QFrame(self.centralwidget)
+        self.frame_tools.setMinimumSize(QtCore.QSize(0, 30))
+        self.frame_tools.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.frame_tools.setFrameShadow(QtWidgets.QFrame.Raised)
+        self.frame_tools.setObjectName("frame_tools")
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame_tools)
+        self.horizontalLayout_2.setContentsMargins(3, 3, 3, 3)
+        self.horizontalLayout_2.setSpacing(3)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.btn_new_grid = QtWidgets.QPushButton(self.frame_tools)
+        self.btn_new_grid.setMinimumSize(QtCore.QSize(80, 0))
+        self.btn_new_grid.setMaximumSize(QtCore.QSize(80, 16777215))
+        self.btn_new_grid.setObjectName("btn_new_grid")
+        self.horizontalLayout_2.addWidget(self.btn_new_grid)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_2.addItem(spacerItem)
+        self.cb_functions = QtWidgets.QComboBox(self.frame_tools)
+        self.cb_functions.setObjectName("cb_functions")
+        self.horizontalLayout_2.addWidget(self.cb_functions)
+        self.txt_args = QtWidgets.QLineEdit(self.frame_tools)
+        self.txt_args.setMinimumSize(QtCore.QSize(200, 0))
+        self.txt_args.setMaximumSize(QtCore.QSize(200, 16777215))
+        self.txt_args.setObjectName("txt_args")
+        self.horizontalLayout_2.addWidget(self.txt_args)
+        self.chk_expand = QtWidgets.QCheckBox(self.frame_tools)
+        self.chk_expand.setMinimumSize(QtCore.QSize(100, 0))
+        self.chk_expand.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.chk_expand.setObjectName("chk_expand")
+        self.horizontalLayout_2.addWidget(self.chk_expand)
+        self.btn_run = QtWidgets.QToolButton(self.frame_tools)
+        self.btn_run.setMinimumSize(QtCore.QSize(0, 20))
+        self.btn_run.setMaximumSize(QtCore.QSize(16777215, 20))
+        self.btn_run.setObjectName("btn_run")
+        self.horizontalLayout_2.addWidget(self.btn_run)
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_2.addItem(spacerItem1)
+        self.btn_list_view = QtWidgets.QPushButton(self.frame_tools)
+        self.btn_list_view.setObjectName("btn_list_view")
+        self.horizontalLayout_2.addWidget(self.btn_list_view)
+        self.verticalLayout.addWidget(self.frame_tools)
+        self.view = QtWidgets.QGraphicsView(self.centralwidget)
+        self.view.setObjectName("view")
+        self.verticalLayout.addWidget(self.view)
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.label_3 = QtWidgets.QLabel(self.centralwidget)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout_4.addWidget(self.label_3)
+        self.btn_zoom_plus = QtWidgets.QToolButton(self.centralwidget)
+        self.btn_zoom_plus.setObjectName("btn_zoom_plus")
+        self.horizontalLayout_4.addWidget(self.btn_zoom_plus)
+        self.btn_zoom_minus = QtWidgets.QToolButton(self.centralwidget)
+        self.btn_zoom_minus.setObjectName("btn_zoom_minus")
+        self.horizontalLayout_4.addWidget(self.btn_zoom_minus)
+        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_4.addItem(spacerItem2)
+        self.chk_displayCoords = QtWidgets.QCheckBox(self.centralwidget)
+        self.chk_displayCoords.setChecked(True)
+        self.chk_displayCoords.setObjectName("chk_displayCoords")
+        self.horizontalLayout_4.addWidget(self.chk_displayCoords)
+        self.verticalLayout.addLayout(self.horizontalLayout_4)
+        self.horizontalLayout.addLayout(self.verticalLayout)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setContentsMargins(0, -1, -1, -1)
+        self.verticalLayout_2.setSpacing(2)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.horizontalLayout.addLayout(self.verticalLayout_2)
+        self.horizontalLayout.setStretch(0, 2)
+        window.setCentralWidget(self.centralwidget)
+        self.statusbar = QtWidgets.QStatusBar(window)
+        self.statusbar.setObjectName("statusbar")
+        window.setStatusBar(self.statusbar)
+        self.actionQuitter = QtWidgets.QAction(window)
+        self.actionQuitter.setObjectName("actionQuitter")
+
+        self.retranslateUi(window)
+        QtCore.QMetaObject.connectSlotsByName(window)
+        window.setTabOrder(self.view, self.btn_new_grid)
+        window.setTabOrder(self.btn_new_grid, self.cb_functions)
+        window.setTabOrder(self.cb_functions, self.txt_args)
+        window.setTabOrder(self.txt_args, self.chk_expand)
+        window.setTabOrder(self.chk_expand, self.btn_list_view)
+        window.setTabOrder(self.btn_list_view, self.btn_zoom_plus)
+        window.setTabOrder(self.btn_zoom_plus, self.btn_zoom_minus)
+        window.setTabOrder(self.btn_zoom_minus, self.chk_displayCoords)
+        window.setTabOrder(self.chk_displayCoords, self.lbl_title)
+
+    def retranslateUi(self, window):
+        _translate = QtCore.QCoreApplication.translate
+        window.setWindowTitle(_translate("window", "GridViewer"))
+        self.lbl_title.setText(_translate("window", "Grid Viewer"))
+        self.btn_new_grid.setText(_translate("window", "New Grid"))
+        self.chk_expand.setText(_translate("window", "Auto-expand"))
+        self.btn_run.setText(_translate("window", ">"))
+        self.btn_list_view.setText(_translate("window", "List View"))
+        self.label_3.setText(_translate("window", "Zoom"))
+        self.btn_zoom_plus.setText(_translate("window", "+"))
+        self.btn_zoom_minus.setText(_translate("window", "-"))
+        self.chk_displayCoords.setText(_translate("window", "Display coordinates"))
+        self.actionQuitter.setText(_translate("window", "Quitter"))
+

+ 125 - 331
gridviewer/qt_viewer.ui

@@ -61,121 +61,143 @@
        </widget>
       </item>
       <item>
-       <widget class="QFrame" name="frame_tipog">
+       <widget class="QFrame" name="frame_tools">
         <property name="minimumSize">
          <size>
           <width>0</width>
           <height>30</height>
          </size>
         </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>30</height>
-         </size>
-        </property>
         <property name="frameShape">
          <enum>QFrame::StyledPanel</enum>
         </property>
         <property name="frameShadow">
          <enum>QFrame::Raised</enum>
         </property>
-        <layout class="QHBoxLayout" name="horizontalLayout_6">
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
          <property name="spacing">
-          <number>0</number>
+          <number>3</number>
          </property>
          <property name="leftMargin">
-          <number>0</number>
+          <number>3</number>
          </property>
          <property name="topMargin">
-          <number>0</number>
+          <number>3</number>
          </property>
          <property name="rightMargin">
-          <number>0</number>
+          <number>3</number>
          </property>
          <property name="bottomMargin">
-          <number>0</number>
+          <number>3</number>
          </property>
          <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_5">
-           <property name="spacing">
-            <number>0</number>
+          <widget class="QPushButton" name="btn_new_grid">
+           <property name="minimumSize">
+            <size>
+             <width>80</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>80</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>New Grid</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_3">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
            </property>
-           <item>
-            <widget class="QPushButton" name="btn_load_tipog">
-             <property name="minimumSize">
-              <size>
-               <width>140</width>
-               <height>0</height>
-              </size>
-             </property>
-             <property name="maximumSize">
-              <size>
-               <width>140</width>
-               <height>16777215</height>
-              </size>
-             </property>
-             <property name="text">
-              <string>Load tipog results</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <spacer name="horizontalSpacer_3">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>40</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QToolButton" name="btn_tipog_previous">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="text">
-              <string>&lt;</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLabel" name="lbl_tipog_counter">
-             <property name="minimumSize">
-              <size>
-               <width>100</width>
-               <height>0</height>
-              </size>
-             </property>
-             <property name="maximumSize">
-              <size>
-               <width>100</width>
-               <height>16777215</height>
-              </size>
-             </property>
-             <property name="text">
-              <string>Test 0 on 0 </string>
-             </property>
-             <property name="alignment">
-              <set>Qt::AlignCenter</set>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QToolButton" name="btn_tipog_next">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="text">
-              <string>&gt;</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QComboBox" name="cb_functions"/>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="txt_args">
+           <property name="minimumSize">
+            <size>
+             <width>200</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>200</width>
+             <height>16777215</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="chk_expand">
+           <property name="minimumSize">
+            <size>
+             <width>100</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>100</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>Auto-expand</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="btn_run">
+           <property name="minimumSize">
+            <size>
+             <width>0</width>
+             <height>20</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>16777215</width>
+             <height>20</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>&gt;</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="btn_list_view">
+           <property name="text">
+            <string>List View</string>
+           </property>
+          </widget>
          </item>
         </layout>
        </widget>
@@ -183,152 +205,6 @@
       <item>
        <widget class="QGraphicsView" name="view"/>
       </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
-        <property name="spacing">
-         <number>10</number>
-        </property>
-        <property name="leftMargin">
-         <number>10</number>
-        </property>
-        <property name="topMargin">
-         <number>0</number>
-        </property>
-        <property name="rightMargin">
-         <number>10</number>
-        </property>
-        <item>
-         <widget class="QLabel" name="label">
-          <property name="text">
-           <string>GRID</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QRadioButton" name="opt_hex">
-          <property name="minimumSize">
-           <size>
-            <width>0</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>140</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>Flat Hex</string>
-          </property>
-          <property name="checked">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QRadioButton" name="opt_square">
-          <property name="minimumSize">
-           <size>
-            <width>0</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>140</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>Square</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QSpinBox" name="spb_width">
-          <property name="minimumSize">
-           <size>
-            <width>38</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="minimum">
-           <number>1</number>
-          </property>
-          <property name="maximum">
-           <number>999</number>
-          </property>
-          <property name="value">
-           <number>30</number>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLabel" name="label_2">
-          <property name="minimumSize">
-           <size>
-            <width>10</width>
-            <height>0</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>10</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>X</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QSpinBox" name="spb_height">
-          <property name="minimumSize">
-           <size>
-            <width>38</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>28</height>
-           </size>
-          </property>
-          <property name="minimum">
-           <number>1</number>
-          </property>
-          <property name="maximum">
-           <number>999</number>
-          </property>
-          <property name="value">
-           <number>30</number>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QToolButton" name="btn_make">
-          <property name="minimumSize">
-           <size>
-            <width>35</width>
-            <height>35</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>&gt;&gt;</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
       <item>
        <layout class="QHBoxLayout" name="horizontalLayout_4">
         <property name="topMargin">
@@ -390,100 +266,6 @@
       <property name="leftMargin">
        <number>0</number>
       </property>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_3">
-        <property name="topMargin">
-         <number>0</number>
-        </property>
-        <item>
-         <widget class="QToolButton" name="btn_toClipboard">
-          <property name="minimumSize">
-           <size>
-            <width>84</width>
-            <height>35</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>84</width>
-            <height>1000</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>To clipboard</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="QToolButton" name="btn_updateSelection">
-          <property name="minimumSize">
-           <size>
-            <width>50</width>
-            <height>35</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>50</width>
-            <height>1000</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>&gt;&gt;</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <widget class="QTextEdit" name="txt_coords">
-        <property name="minimumSize">
-         <size>
-          <width>183</width>
-          <height>0</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_4">
-        <property name="text">
-         <string>Run:</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QLineEdit" name="txt_stdin"/>
-      </item>
-      <item>
-       <widget class="QTextEdit" name="txt_stdout">
-        <property name="minimumSize">
-         <size>
-          <width>0</width>
-          <height>120</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>120</height>
-         </size>
-        </property>
-       </widget>
-      </item>
      </layout>
     </item>
    </layout>
@@ -495,6 +277,18 @@
    </property>
   </action>
  </widget>
+ <tabstops>
+  <tabstop>view</tabstop>
+  <tabstop>btn_new_grid</tabstop>
+  <tabstop>cb_functions</tabstop>
+  <tabstop>txt_args</tabstop>
+  <tabstop>chk_expand</tabstop>
+  <tabstop>btn_list_view</tabstop>
+  <tabstop>btn_zoom_plus</tabstop>
+  <tabstop>btn_zoom_minus</tabstop>
+  <tabstop>chk_displayCoords</tabstop>
+  <tabstop>lbl_title</tabstop>
+ </tabstops>
  <resources/>
  <connections/>
 </ui>

+ 0 - 208
gridviewer/viewer.py

@@ -1,208 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'qt_viewer.ui'
-#
-# Created by: PyQt5 UI code generator 5.7.1
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt5 import QtCore, QtGui, QtWidgets
-
-class Ui_window(object):
-    def setupUi(self, window):
-        window.setObjectName("window")
-        window.resize(910, 658)
-        font = QtGui.QFont()
-        font.setFamily("Verdana")
-        font.setPointSize(8)
-        window.setFont(font)
-        self.centralwidget = QtWidgets.QWidget(window)
-        self.centralwidget.setObjectName("centralwidget")
-        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
-        self.horizontalLayout.setContentsMargins(3, 3, 3, 3)
-        self.horizontalLayout.setSpacing(3)
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.verticalLayout = QtWidgets.QVBoxLayout()
-        self.verticalLayout.setSpacing(3)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.lbl_title = QtWidgets.QLabel(self.centralwidget)
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        self.lbl_title.setFont(font)
-        self.lbl_title.setFocusPolicy(QtCore.Qt.StrongFocus)
-        self.lbl_title.setAlignment(QtCore.Qt.AlignCenter)
-        self.lbl_title.setObjectName("lbl_title")
-        self.verticalLayout.addWidget(self.lbl_title)
-        self.frame_tipog = QtWidgets.QFrame(self.centralwidget)
-        self.frame_tipog.setMinimumSize(QtCore.QSize(0, 30))
-        self.frame_tipog.setMaximumSize(QtCore.QSize(16777215, 30))
-        self.frame_tipog.setFrameShape(QtWidgets.QFrame.StyledPanel)
-        self.frame_tipog.setFrameShadow(QtWidgets.QFrame.Raised)
-        self.frame_tipog.setObjectName("frame_tipog")
-        self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.frame_tipog)
-        self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
-        self.horizontalLayout_6.setSpacing(0)
-        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
-        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
-        self.horizontalLayout_5.setSpacing(0)
-        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
-        self.btn_load_tipog = QtWidgets.QPushButton(self.frame_tipog)
-        self.btn_load_tipog.setMinimumSize(QtCore.QSize(140, 0))
-        self.btn_load_tipog.setMaximumSize(QtCore.QSize(140, 16777215))
-        self.btn_load_tipog.setObjectName("btn_load_tipog")
-        self.horizontalLayout_5.addWidget(self.btn_load_tipog)
-        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout_5.addItem(spacerItem)
-        self.btn_tipog_previous = QtWidgets.QToolButton(self.frame_tipog)
-        self.btn_tipog_previous.setEnabled(False)
-        self.btn_tipog_previous.setObjectName("btn_tipog_previous")
-        self.horizontalLayout_5.addWidget(self.btn_tipog_previous)
-        self.lbl_tipog_counter = QtWidgets.QLabel(self.frame_tipog)
-        self.lbl_tipog_counter.setMinimumSize(QtCore.QSize(100, 0))
-        self.lbl_tipog_counter.setMaximumSize(QtCore.QSize(100, 16777215))
-        self.lbl_tipog_counter.setAlignment(QtCore.Qt.AlignCenter)
-        self.lbl_tipog_counter.setObjectName("lbl_tipog_counter")
-        self.horizontalLayout_5.addWidget(self.lbl_tipog_counter)
-        self.btn_tipog_next = QtWidgets.QToolButton(self.frame_tipog)
-        self.btn_tipog_next.setEnabled(False)
-        self.btn_tipog_next.setObjectName("btn_tipog_next")
-        self.horizontalLayout_5.addWidget(self.btn_tipog_next)
-        self.horizontalLayout_6.addLayout(self.horizontalLayout_5)
-        self.verticalLayout.addWidget(self.frame_tipog)
-        self.view = QtWidgets.QGraphicsView(self.centralwidget)
-        self.view.setObjectName("view")
-        self.verticalLayout.addWidget(self.view)
-        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
-        self.horizontalLayout_2.setContentsMargins(10, 0, 10, -1)
-        self.horizontalLayout_2.setSpacing(10)
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        self.label = QtWidgets.QLabel(self.centralwidget)
-        self.label.setObjectName("label")
-        self.horizontalLayout_2.addWidget(self.label)
-        self.opt_hex = QtWidgets.QRadioButton(self.centralwidget)
-        self.opt_hex.setMinimumSize(QtCore.QSize(0, 28))
-        self.opt_hex.setMaximumSize(QtCore.QSize(140, 28))
-        self.opt_hex.setChecked(True)
-        self.opt_hex.setObjectName("opt_hex")
-        self.horizontalLayout_2.addWidget(self.opt_hex)
-        self.opt_square = QtWidgets.QRadioButton(self.centralwidget)
-        self.opt_square.setMinimumSize(QtCore.QSize(0, 28))
-        self.opt_square.setMaximumSize(QtCore.QSize(140, 28))
-        self.opt_square.setObjectName("opt_square")
-        self.horizontalLayout_2.addWidget(self.opt_square)
-        self.spb_width = QtWidgets.QSpinBox(self.centralwidget)
-        self.spb_width.setMinimumSize(QtCore.QSize(38, 28))
-        self.spb_width.setMaximumSize(QtCore.QSize(80, 28))
-        self.spb_width.setMinimum(1)
-        self.spb_width.setMaximum(999)
-        self.spb_width.setProperty("value", 30)
-        self.spb_width.setObjectName("spb_width")
-        self.horizontalLayout_2.addWidget(self.spb_width)
-        self.label_2 = QtWidgets.QLabel(self.centralwidget)
-        self.label_2.setMinimumSize(QtCore.QSize(10, 0))
-        self.label_2.setMaximumSize(QtCore.QSize(10, 16777215))
-        self.label_2.setObjectName("label_2")
-        self.horizontalLayout_2.addWidget(self.label_2)
-        self.spb_height = QtWidgets.QSpinBox(self.centralwidget)
-        self.spb_height.setMinimumSize(QtCore.QSize(38, 28))
-        self.spb_height.setMaximumSize(QtCore.QSize(80, 28))
-        self.spb_height.setMinimum(1)
-        self.spb_height.setMaximum(999)
-        self.spb_height.setProperty("value", 30)
-        self.spb_height.setObjectName("spb_height")
-        self.horizontalLayout_2.addWidget(self.spb_height)
-        self.btn_make = QtWidgets.QToolButton(self.centralwidget)
-        self.btn_make.setMinimumSize(QtCore.QSize(35, 35))
-        self.btn_make.setObjectName("btn_make")
-        self.horizontalLayout_2.addWidget(self.btn_make)
-        self.verticalLayout.addLayout(self.horizontalLayout_2)
-        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
-        self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
-        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
-        self.label_3 = QtWidgets.QLabel(self.centralwidget)
-        self.label_3.setObjectName("label_3")
-        self.horizontalLayout_4.addWidget(self.label_3)
-        self.btn_zoom_plus = QtWidgets.QToolButton(self.centralwidget)
-        self.btn_zoom_plus.setObjectName("btn_zoom_plus")
-        self.horizontalLayout_4.addWidget(self.btn_zoom_plus)
-        self.btn_zoom_minus = QtWidgets.QToolButton(self.centralwidget)
-        self.btn_zoom_minus.setObjectName("btn_zoom_minus")
-        self.horizontalLayout_4.addWidget(self.btn_zoom_minus)
-        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout_4.addItem(spacerItem1)
-        self.chk_displayCoords = QtWidgets.QCheckBox(self.centralwidget)
-        self.chk_displayCoords.setChecked(True)
-        self.chk_displayCoords.setObjectName("chk_displayCoords")
-        self.horizontalLayout_4.addWidget(self.chk_displayCoords)
-        self.verticalLayout.addLayout(self.horizontalLayout_4)
-        self.horizontalLayout.addLayout(self.verticalLayout)
-        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
-        self.verticalLayout_2.setContentsMargins(0, -1, -1, -1)
-        self.verticalLayout_2.setSpacing(2)
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
-        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
-        self.horizontalLayout_3.setContentsMargins(-1, 0, -1, -1)
-        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
-        self.btn_toClipboard = QtWidgets.QToolButton(self.centralwidget)
-        self.btn_toClipboard.setMinimumSize(QtCore.QSize(84, 35))
-        self.btn_toClipboard.setMaximumSize(QtCore.QSize(84, 1000))
-        self.btn_toClipboard.setObjectName("btn_toClipboard")
-        self.horizontalLayout_3.addWidget(self.btn_toClipboard)
-        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout_3.addItem(spacerItem2)
-        self.btn_updateSelection = QtWidgets.QToolButton(self.centralwidget)
-        self.btn_updateSelection.setMinimumSize(QtCore.QSize(50, 35))
-        self.btn_updateSelection.setMaximumSize(QtCore.QSize(50, 1000))
-        self.btn_updateSelection.setObjectName("btn_updateSelection")
-        self.horizontalLayout_3.addWidget(self.btn_updateSelection)
-        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
-        self.txt_coords = QtWidgets.QTextEdit(self.centralwidget)
-        self.txt_coords.setMinimumSize(QtCore.QSize(183, 0))
-        self.txt_coords.setObjectName("txt_coords")
-        self.verticalLayout_2.addWidget(self.txt_coords)
-        self.label_4 = QtWidgets.QLabel(self.centralwidget)
-        self.label_4.setObjectName("label_4")
-        self.verticalLayout_2.addWidget(self.label_4)
-        self.txt_stdin = QtWidgets.QLineEdit(self.centralwidget)
-        self.txt_stdin.setObjectName("txt_stdin")
-        self.verticalLayout_2.addWidget(self.txt_stdin)
-        self.txt_stdout = QtWidgets.QTextEdit(self.centralwidget)
-        self.txt_stdout.setMinimumSize(QtCore.QSize(0, 120))
-        self.txt_stdout.setMaximumSize(QtCore.QSize(16777215, 120))
-        self.txt_stdout.setObjectName("txt_stdout")
-        self.verticalLayout_2.addWidget(self.txt_stdout)
-        self.horizontalLayout.addLayout(self.verticalLayout_2)
-        self.horizontalLayout.setStretch(0, 2)
-        window.setCentralWidget(self.centralwidget)
-        self.statusbar = QtWidgets.QStatusBar(window)
-        self.statusbar.setObjectName("statusbar")
-        window.setStatusBar(self.statusbar)
-        self.actionQuitter = QtWidgets.QAction(window)
-        self.actionQuitter.setObjectName("actionQuitter")
-
-        self.retranslateUi(window)
-        QtCore.QMetaObject.connectSlotsByName(window)
-
-    def retranslateUi(self, window):
-        _translate = QtCore.QCoreApplication.translate
-        window.setWindowTitle(_translate("window", "GridViewer"))
-        self.lbl_title.setText(_translate("window", "Grid Viewer"))
-        self.btn_load_tipog.setText(_translate("window", "Load tipog results"))
-        self.btn_tipog_previous.setText(_translate("window", "<"))
-        self.lbl_tipog_counter.setText(_translate("window", "Test 0 on 0 "))
-        self.btn_tipog_next.setText(_translate("window", ">"))
-        self.label.setText(_translate("window", "GRID"))
-        self.opt_hex.setText(_translate("window", "Flat Hex"))
-        self.opt_square.setText(_translate("window", "Square"))
-        self.label_2.setText(_translate("window", "X"))
-        self.btn_make.setText(_translate("window", ">>"))
-        self.label_3.setText(_translate("window", "Zoom"))
-        self.btn_zoom_plus.setText(_translate("window", "+"))
-        self.btn_zoom_minus.setText(_translate("window", "-"))
-        self.chk_displayCoords.setText(_translate("window", "Display coordinates"))
-        self.btn_toClipboard.setText(_translate("window", "To clipboard"))
-        self.btn_updateSelection.setText(_translate("window", ">>"))
-        self.label_4.setText(_translate("window", "Run:"))
-        self.actionQuitter.setText(_translate("window", "Quitter"))
-