Browse Source

grid viewer ok

olinox 9 years ago
parent
commit
37f2e5cb91

+ 29 - 10
tests/gridviewer/GridViewer.py

@@ -8,10 +8,11 @@ if __name__ == "__main__":
     import os, sys
     pypog_path = (os.path.abspath("..\\..\\"))
     sys.path.append(pypog_path)
-
-from PyQt5.QtCore import QPointF, Qt
+    
+from PyQt5.QtCore import QPointF, QMimeData
 from PyQt5.QtWidgets import QMainWindow, \
-    QApplication, QGraphicsScene, QGraphicsView
+    QApplication, QGraphicsScene, QGraphicsView, QMessageBox
+import ipdb  # until I find another way to print traceback with pyqt5
 
 from core import geometry
 from tests.gridviewer.GridViewerCell import GridViewerCell
@@ -23,7 +24,7 @@ class GridViewer(QMainWindow):
     def __init__(self):
         super (GridViewer, self).__init__()
         
-        self._polygons = {}
+        self.cells = {}
         self.selection = []
         self.createWidgets()
         
@@ -37,10 +38,13 @@ class GridViewer(QMainWindow):
         self.ui.view.centerOn(QPointF(0,0))
         self.ui.view.setDragMode(QGraphicsView.NoDrag)
         
+        self.ui.txt_coords.setPlainText("[]")
+        
         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.txt_coords.textChanged.connect(self.update_selected_cells)
-
+        self.make_grid()
         
     def make_grid(self):
         shape = geometry.HEX if self.ui.opt_hex.isChecked() else geometry.SQUARE
@@ -48,7 +52,7 @@ class GridViewer(QMainWindow):
         height = self.ui.spb_height.value()
         
         kx = 1 if shape == geometry.SQUARE else 0.866
-        
+
         margin = 240 
         cell_height = 120
         
@@ -64,7 +68,7 @@ class GridViewer(QMainWindow):
                 
                 self._scene.addItem(cell)   
                              
-                self._polygons[(x, y)] = cell
+                self.cells[(x, y)] = cell
 
 
     def add_to_selection(self, x, y):
@@ -74,11 +78,26 @@ class GridViewer(QMainWindow):
     
     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):
-        pass
+        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()
+            
+        for x, y in new_selection:
+            self.cells[(x, y)].select()
+            
+            
+    def to_clipboard(self):
+        data = QMimeData()
+        data.setText(self.ui.txt_coords.toPlainText())
+        app.clipboard().setMimeData(data)
 
 
 if __name__ == "__main__":

+ 12 - 9
tests/gridviewer/GridViewerCell.py

@@ -33,17 +33,20 @@ class GridViewerCell(QGraphicsPolygonItem):
         
         self.setFlag(QGraphicsItem.ItemIsFocusable)   
         
+    def select(self):
+        self.setBrush( QBrush( QColor(200,0,0, 100) ) )
+        self.selected = True
+        self.gridViewer.add_to_selection(self.x, self.y)        
+
+    def unselect(self):
+        self.setBrush( QBrush(  ) )
+        self.selected = False
+        self.gridViewer.remove_from_selection(self.x, self.y)
+
     def mousePressEvent(self, *args, **kwargs):
 
         if self.selected:
-            self.setBrush( QBrush(  ) )
-            self.selected = False
-            self.gridViewer.remove_from_selection(self.x, self.y)
+            self.unselect()
         else:
-            self.setBrush( QBrush( QColor(200,0,0, 100) ) )
-            self.selected = True
-            self.gridViewer.add_to_selection(self.x, self.y)
+            self.select()
              
-#         return QGraphicsPolygonItem.mousePressEvent(self, *args, **kwargs)
-    
-    

+ 0 - 0
tests/gridviewer/__init__.py


+ 40 - 7
tests/gridviewer/main.py

@@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
 class Ui_window(object):
     def setupUi(self, window):
         window.setObjectName("window")
-        window.resize(791, 669)
+        window.resize(910, 669)
         font = QtGui.QFont()
         font.setFamily("Verdana")
         font.setPointSize(8)
@@ -25,6 +25,15 @@ class Ui_window(object):
         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.view = QtWidgets.QGraphicsView(self.centralwidget)
         self.view.setObjectName("view")
         self.verticalLayout.addWidget(self.view)
@@ -47,7 +56,7 @@ class Ui_window(object):
         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(20, 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)
@@ -60,7 +69,7 @@ class Ui_window(object):
         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(20, 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)
@@ -73,14 +82,35 @@ class Ui_window(object):
         self.horizontalLayout_2.addWidget(self.btn_make)
         self.verticalLayout.addLayout(self.horizontalLayout_2)
         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.txt_coords = QtWidgets.QTextEdit(self.centralwidget)
+        self.txt_coords.setMinimumSize(QtCore.QSize(183, 0))
         self.txt_coords.setObjectName("txt_coords")
-        self.horizontalLayout.addWidget(self.txt_coords)
+        self.verticalLayout_2.addWidget(self.txt_coords)
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_3.setContentsMargins(-1, 10, -1, -1)
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_3.addItem(spacerItem)
+        self.btn_updateSelection = QtWidgets.QToolButton(self.centralwidget)
+        self.btn_updateSelection.setMinimumSize(QtCore.QSize(132, 35))
+        self.btn_updateSelection.setMaximumSize(QtCore.QSize(132, 1000))
+        self.btn_updateSelection.setObjectName("btn_updateSelection")
+        self.horizontalLayout_3.addWidget(self.btn_updateSelection)
+        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)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
+        self.horizontalLayout.addLayout(self.verticalLayout_2)
         self.horizontalLayout.setStretch(0, 2)
-        self.horizontalLayout.setStretch(1, 1)
         window.setCentralWidget(self.centralwidget)
         self.menubar = QtWidgets.QMenuBar(window)
-        self.menubar.setGeometry(QtCore.QRect(0, 0, 791, 19))
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 910, 21))
         self.menubar.setObjectName("menubar")
         self.menuFichier = QtWidgets.QMenu(self.menubar)
         self.menuFichier.setObjectName("menuFichier")
@@ -99,11 +129,14 @@ class Ui_window(object):
     def retranslateUi(self, window):
         _translate = QtCore.QCoreApplication.translate
         window.setWindowTitle(_translate("window", "MainWindow"))
-        self.label.setText(_translate("window", "Grid Viewer"))
+        self.lbl_title.setText(_translate("window", "Grid Viewer"))
+        self.label.setText(_translate("window", "Update Grid"))
         self.opt_hex.setText(_translate("window", "Hexagonal grid"))
         self.opt_square.setText(_translate("window", "Square grid"))
         self.label_2.setText(_translate("window", "X"))
         self.btn_make.setText(_translate("window", ">>"))
+        self.btn_updateSelection.setText(_translate("window", "Update selection"))
+        self.btn_toClipboard.setText(_translate("window", "To clipboard"))
         self.menuFichier.setTitle(_translate("window", "Fichier"))
         self.actionQuitter.setText(_translate("window", "Quitter"))
 

+ 102 - 8
tests/gridviewer/main.ui

@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>791</width>
+    <width>910</width>
     <height>669</height>
    </rect>
   </property>
@@ -20,7 +20,7 @@
    <string>MainWindow</string>
   </property>
   <widget class="QWidget" name="centralwidget">
-   <layout class="QHBoxLayout" name="horizontalLayout" stretch="2,1">
+   <layout class="QHBoxLayout" name="horizontalLayout" stretch="2,0">
     <property name="spacing">
      <number>3</number>
     </property>
@@ -41,6 +41,25 @@
       <property name="spacing">
        <number>3</number>
       </property>
+      <item>
+       <widget class="QLabel" name="lbl_title">
+        <property name="font">
+         <font>
+          <weight>75</weight>
+          <bold>true</bold>
+         </font>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::StrongFocus</enum>
+        </property>
+        <property name="text">
+         <string>Grid Viewer</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignCenter</set>
+        </property>
+       </widget>
+      </item>
       <item>
        <widget class="QGraphicsView" name="view"/>
       </item>
@@ -61,7 +80,7 @@
         <item>
          <widget class="QLabel" name="label">
           <property name="text">
-           <string>Grid Viewer</string>
+           <string>Update Grid</string>
           </property>
          </widget>
         </item>
@@ -110,7 +129,7 @@
          <widget class="QSpinBox" name="spb_width">
           <property name="minimumSize">
            <size>
-            <width>20</width>
+            <width>38</width>
             <height>28</height>
            </size>
           </property>
@@ -154,7 +173,7 @@
          <widget class="QSpinBox" name="spb_height">
           <property name="minimumSize">
            <size>
-            <width>20</width>
+            <width>38</width>
             <height>28</height>
            </size>
           </property>
@@ -193,7 +212,82 @@
      </layout>
     </item>
     <item>
-     <widget class="QTextEdit" name="txt_coords"/>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <property name="spacing">
+       <number>2</number>
+      </property>
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <item>
+       <widget class="QTextEdit" name="txt_coords">
+        <property name="minimumSize">
+         <size>
+          <width>183</width>
+          <height>0</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <property name="topMargin">
+         <number>10</number>
+        </property>
+        <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>132</width>
+            <height>35</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>132</width>
+            <height>1000</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Update selection</string>
+          </property>
+         </widget>
+        </item>
+        <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>
+       </layout>
+      </item>
+     </layout>
     </item>
    </layout>
   </widget>
@@ -202,8 +296,8 @@
     <rect>
      <x>0</x>
      <y>0</y>
-     <width>791</width>
-     <height>19</height>
+     <width>910</width>
+     <height>21</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuFichier">