Преглед изворни кода

gridviewer: add griddialog and listviewdialog

olinox пре 8 година
родитељ
комит
704ac8ce2d

+ 52 - 0
gridviewer/GridDialogBox.py

@@ -0,0 +1,52 @@
+'''
+Created on 8 mars 2017
+
+@author: olinox
+'''
+from PyQt5.Qt import QDialog
+
+from gridviewer.qt_new_grid import Ui_window
+from pypog.grid_objects import FHexGrid, SquareGrid
+
+class GridDialogBox(QDialog):
+    def __init__(self, parent=None):
+        super (GridDialogBox, self).__init__(parent)
+        self.parent = parent
+        self._obj = None
+        self.createWidgets()
+
+    def createWidgets(self):
+        self.ui = Ui_window()
+        self.ui.setupUi(self)
+
+        self.ui.btn_cancel.clicked.connect(self.cancel)
+        self.ui.btn_create.clicked.connect(self.ok)
+
+    def ok(self):
+        cls = FHexGrid if self.ui.opt_hex else SquareGrid
+        self._obj = cls(self.ui.spb_width.value(), self.ui.spb_height.value())
+        self.done(1)
+
+    def cancel(self):
+        self.done(0)
+
+    def exec_(self, *args, **kwargs):
+        self.show()
+        QDialog.exec_(self, *args, **kwargs)
+        return self._obj
+
+    @staticmethod
+    def get(*args):
+        return GridDialogBox(*args).exec_()
+
+if __name__ == "__main__":
+    from PyQt5.Qt import QApplication
+
+    app = QApplication([])
+
+    grid = GridDialogBox().exec_()
+# or    grid = GridDialogBox.get()
+    if grid:
+        print(grid, grid.width, grid.height)
+
+

+ 13 - 3
gridviewer/GridViewer.py

@@ -9,6 +9,9 @@ from PyQt5.QtCore import QPointF
 from PyQt5.QtWidgets import QMainWindow, \
     QApplication, QGraphicsScene, QGraphicsView
 import ipdb  # until I find another way to print traceback with pyqt5
+
+from gridviewer.GridDialogBox import GridDialogBox
+from gridviewer.ListViewDialog import ListViewDialog
 from pypog.grid_objects import SquareGrid
 
 
@@ -51,6 +54,7 @@ class GridViewer(QMainWindow):
 
     def make_grid(self, grid):
         QApplication.setOverrideCursor(Qt.WaitCursor)
+        self.grid = grid
         self.cells = {}
         self.selection = []
 
@@ -76,12 +80,16 @@ class GridViewer(QMainWindow):
         self.selection.remove((x, y))
 
     def update_selected_cells(self, new_selection):
+        if not new_selection != self.selection:
+            return
+
         QApplication.setOverrideCursor(Qt.WaitCursor)
         for x, y in tuple(self.selection):
             self.cells[(x, y)].unselect()
 
         for x, y in new_selection:
-            self.cells[(x, y)].select()
+            if (x, y) in self.grid:
+                self.cells[(x, y)].select()
         QApplication.restoreOverrideCursor()
 
     def update_cell_labels(self):
@@ -95,10 +103,12 @@ class GridViewer(QMainWindow):
         self.ui.view.scale(0.9, 0.9)
 
     def new_grid_dialog(self):
-        pass
+        grid = GridDialogBox.get()
+        self.make_grid(grid)
 
     def list_view_dialog(self):
-        pass
+        new_lst = ListViewDialog(self.selection).exec_()
+        self.update_selected_cells(new_lst)
 
     def run_f(self):
         pass

+ 54 - 0
gridviewer/ListViewDialog.py

@@ -0,0 +1,54 @@
+'''
+Created on 8 mars 2017
+
+@author: olinox
+'''
+from PyQt5.Qt import QDialog
+
+from gridviewer.qt_listview import Ui_window
+from pypog.geometry_objects import BaseGeometry
+
+class ListViewDialog(QDialog):
+    def __init__(self, lst, parent=None):
+        super (ListViewDialog, self).__init__(parent)
+        self.parent = parent
+
+        BaseGeometry.assertCoordinates(*lst)
+        self._lst = lst
+
+        self.createWidgets()
+
+    def createWidgets(self):
+        self.ui = Ui_window()
+        self.ui.setupUi(self)
+
+        self.ui.txt_list.setPlainText(str(self._lst))
+
+        self.ui.btn_cancel.clicked.connect(self.cancel)
+        self.ui.btn_ok.clicked.connect(self.ok)
+
+    def ok(self):
+        self._lst = list(eval(self.ui.txt_list.toPlainText()))
+        self.done(1)
+
+    def cancel(self):
+        self.done(0)
+
+    def exec_(self, *args, **kwargs):
+        self.show()
+        QDialog.exec_(self, *args, **kwargs)
+        return self._lst
+
+    @staticmethod
+    def get(*args):
+        return ListViewDialog(*args).exec_()
+
+if __name__ == "__main__":
+    from PyQt5.Qt import QApplication
+
+    app = QApplication([])
+
+    lst = [(0, 0), (1, 1), (2, 2)]
+    new_lst = ListViewDialog(lst).exec_()
+
+    print(new_lst)

+ 3 - 1
gridviewer/qt_listview.py

@@ -17,12 +17,14 @@ class Ui_window(object):
         self.verticalLayout.setObjectName("verticalLayout")
         self.txt_list = QtWidgets.QTextEdit(window)
         self.txt_list.setMinimumSize(QtCore.QSize(183, 0))
+        self.txt_list.setAcceptRichText(False)
         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.setAutoDefault(False)
         self.btn_cancel.setObjectName("btn_cancel")
         self.horizontalLayout.addWidget(self.btn_cancel)
         spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
@@ -40,5 +42,5 @@ class Ui_window(object):
         _translate = QtCore.QCoreApplication.translate
         window.setWindowTitle(_translate("window", "List View"))
         self.btn_cancel.setText(_translate("window", "Cancel"))
-        self.btn_ok.setText(_translate("window", "Ok"))
+        self.btn_ok.setText(_translate("window", "Update"))
 

+ 7 - 1
gridviewer/qt_listview.ui

@@ -25,6 +25,9 @@
        <height>0</height>
       </size>
      </property>
+     <property name="acceptRichText">
+      <bool>false</bool>
+     </property>
     </widget>
    </item>
    <item>
@@ -37,6 +40,9 @@
        <property name="text">
         <string>Cancel</string>
        </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
       </widget>
      </item>
      <item>
@@ -55,7 +61,7 @@
      <item>
       <widget class="QPushButton" name="btn_ok">
        <property name="text">
-        <string>Ok</string>
+        <string>Update</string>
        </property>
        <property name="autoDefault">
         <bool>true</bool>

+ 1 - 1
tests/itpog.py

@@ -2,7 +2,7 @@
 Tipog tests
 
 Usage:
-  tipog [-v] <filename> [-o <output>]
+  itpog [-v] <filename> [-o <output>]
 
 Options:
   -v --verbose       Verbose print