Commit 215b93d6 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

geometry: Profile: Continue to import.

Showing with 84 additions and 102 deletions
+84 -102
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from tools import timer
from Model.Geometry.Point import Point from Model.Geometry.Point import Point
from Model.Except import NotImplementedMethodeError from Model.Except import NotImplementedMethodeError
......
...@@ -352,14 +352,14 @@ class GeometryWindow(QMainWindow, WindowToolKit): ...@@ -352,14 +352,14 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.select_current_profile() self.select_current_profile()
self.changed_slider_value() self.changed_slider_value()
def move_row_down(self): def move_row_up(self):
row = self.index_selected_row() row = self.index_selected_row()
self._tablemodel.move_row_down(row) self._tablemodel.move_row_up(row)
self.select_current_profile() self.select_current_profile()
def move_row_up(self): def move_row_down(self):
row = self.index_selected_row() row = self.index_selected_row()
self._tablemodel.move_row_up(row) self._tablemodel.move_row_down(row)
self.select_current_profile() self.select_current_profile()
def copy(self): def copy(self):
......
...@@ -83,7 +83,7 @@ class DelCommand(QUndoCommand): ...@@ -83,7 +83,7 @@ class DelCommand(QUndoCommand):
self._profile.delete(row) self._profile.delete(row)
class SortCommand(QUndoCommand): class SortCommand(QUndoCommand):
def __init__(self, profile, column _reverse): def __init__(self, profile, column, _reverse):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._profile = profile self._profile = profile
......
...@@ -5,6 +5,8 @@ import sys ...@@ -5,6 +5,8 @@ import sys
import csv import csv
from time import time from time import time
from tools import trace, timer
from PyQt5 import QtWidgets, QtGui from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import QModelIndex, Qt, QEvent, QCoreApplication from PyQt5.QtCore import QModelIndex, Qt, QEvent, QCoreApplication
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QCheckBox from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QCheckBox
...@@ -37,7 +39,6 @@ class ProfileWindow(QMainWindow): ...@@ -37,7 +39,6 @@ class ProfileWindow(QMainWindow):
self.graph() self.graph()
self._model.dataChanged.connect(self.graph) self._model.dataChanged.connect(self.graph)
self.filters = "CSV files (*.csv)"
self.fileName = None self.fileName = None
self.ui.tableView.installEventFilter(self) self.ui.tableView.installEventFilter(self)
...@@ -86,27 +87,30 @@ class ProfileWindow(QMainWindow): ...@@ -86,27 +87,30 @@ class ProfileWindow(QMainWindow):
self.ui.btn_reset.clicked.connect(self.go_back_to_initial_state) self.ui.btn_reset.clicked.connect(self.go_back_to_initial_state)
def setup_model(self): def setup_model(self):
self._model = qtableview_profile.PandasModelEditable(self._profile) self._model = PandasModelEditable(self._profile)
self._last_saved_model_data = copy.deepcopy(self._model.model_data) self._last_saved_model_data = copy.deepcopy(self._model.model_data)
self.__initial_model_data = copy.deepcopy(self._model.model_data) self.__initial_model_data = copy.deepcopy(self._model.model_data)
self.ui.tableView.setModel(self._model) self.ui.tableView.setModel(self._model)
self.ui.tableView.setItemDelegate(qtableview_profile.Delegate()) self.ui.tableView.setItemDelegate(Delegate())
@timer
def graph(self): def graph(self):
""" """
Returns: Le tracé de la cote z en fonction de l'abscisse (calculée). Returns: Le tracé de la cote z en fonction de l'abscisse (calculée).
""" """
x = self._model.station # abscisse en travers x = self._profile.get_station()
y = self._model.z # cote z y = self._profile.z()
ld = self._model.name # nom des points gl = self._profile.name()
x_carto = self._model.x # x 'cartographique' x_carto = self._profile.x()
y_carto = self._model.y # y 'cartographique' y_carto = self._profile.y()
if len(self._model.x) >= 3 and len(self._model.y) >= 3 and len(self._model.station) >= 3: self.ui.canvas.axes.cla()
self.ui.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
self.ui.canvas.axes.cla()
self.ui.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5) if (len(x_carto) >= 3 and
len(y_carto) >= 3 and
len(x) >= 3):
self.profile_line2D, = self.ui.canvas.axes.plot( self.profile_line2D, = self.ui.canvas.axes.plot(
x, y, color='r', lw=1.5, markersize=7, marker='+', x, y, color='r', lw=1.5, markersize=7, marker='+',
picker=30 picker=30
...@@ -114,8 +118,7 @@ class ProfileWindow(QMainWindow): ...@@ -114,8 +118,7 @@ class ProfileWindow(QMainWindow):
self.ui.canvas.axes.set_xlabel( self.ui.canvas.axes.set_xlabel(
_translate("MainWindowProfile", _translate("MainWindowProfile",
"Abscisse en travers (m)"), "Abscisse en travers (m)"),
color='black', color='black', fontsize=10
fontsize=10
) )
self.ui.canvas.axes.set_ylabel( self.ui.canvas.axes.set_ylabel(
_translate("MainWindowProfile", "Cote (m)"), _translate("MainWindowProfile", "Cote (m)"),
...@@ -124,7 +127,7 @@ class ProfileWindow(QMainWindow): ...@@ -124,7 +127,7 @@ class ProfileWindow(QMainWindow):
# Add label on graph # Add label on graph
self.annotation = [] self.annotation = []
for i, txt in enumerate(list(ld)): for i, txt in enumerate(list(gl)):
annotation = self.ui.canvas.axes.annotate( annotation = self.ui.canvas.axes.annotate(
txt, (x[i], y[i]), txt, (x[i], y[i]),
horizontalalignment='left', horizontalalignment='left',
...@@ -136,11 +139,10 @@ class ProfileWindow(QMainWindow): ...@@ -136,11 +139,10 @@ class ProfileWindow(QMainWindow):
annotation.set_color("black") annotation.set_color("black")
self.annotation.append(annotation) self.annotation.append(annotation)
al = 8. # arrow length in points al = 8.
arrowprops = dict( arrowprops = dict(
clip_on=True, # plotting outside axes on purpose clip_on=True,
# frac=1., # make end arrowhead the whole size of arrow headwidth=5.,
headwidth=5., # in points
facecolor='k' facecolor='k'
) )
kwargs = dict( kwargs = dict(
...@@ -150,120 +152,100 @@ class ProfileWindow(QMainWindow): ...@@ -150,120 +152,100 @@ class ProfileWindow(QMainWindow):
) )
self.ui.canvas.axes.annotate("", (1, 0), xytext=(-al, 0), **kwargs) self.ui.canvas.axes.annotate("", (1, 0), xytext=(-al, 0), **kwargs)
self.ui.canvas.axes.annotate("", (0, 1), xytext=(0, -al), **kwargs) # left spin arrow self.ui.canvas.axes.annotate("", (0, 1), xytext=(0, -al), **kwargs)
self.ui.canvas.axes.spines[['top', 'right']].set_color('none') self.ui.canvas.axes.spines[['top', 'right']].set_color('none')
self.ui.canvas.axes.yaxis.tick_left() self.ui.canvas.axes.yaxis.tick_left()
self.ui.canvas.axes.xaxis.tick_bottom() self.ui.canvas.axes.xaxis.tick_bottom()
self.ui.canvas.axes.set_facecolor('#F9F9F9') # '#E0FFFF') self.ui.canvas.axes.set_facecolor('#F9F9F9')
self.ui.canvas.figure.patch.set_facecolor('white') self.ui.canvas.figure.patch.set_facecolor('white')
try: try:
self.onpick_event = OnpickEvent(self.ui.canvas.axes, x, y, x_carto, y_carto, self.ui.tableView) self.onpick_event = OnpickEvent(
self.ui.canvas.figure.canvas.mpl_connect('pick_event', self.onpick_event.onpick) self.ui.canvas.axes,
x, y, x_carto, y_carto,
self.onclick_event = OnpickEvent(self.ui.canvas.axes, x, y, x_carto, y_carto, self.ui.tableView) self.ui.tableView
self.ui.canvas.figure.canvas.mpl_connect('button_press_event', self.onclick_event.onclick) )
self.ui.canvas\
.figure\
.canvas\
.mpl_connect('pick_event', self.onpick_event.onpick)
self.onclick_event = OnpickEvent(
self.ui.canvas.axes,
x, y, x_carto, y_carto,
self.ui.tableView
)
self.ui.canvas\
.figure\
.canvas\
.mpl_connect('button_press_event', self.onclick_event.onclick)
except: except:
print("TODO") print("TODO")
self.ui.canvas.figure.tight_layout() self.ui.canvas.figure.tight_layout()
self.ui.canvas.figure.canvas.draw_idle() self.ui.canvas.figure.canvas.draw_idle()
else:
self.ui.canvas.axes.cla()
self.ui.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
def insert_row(self): def insert_row(self):
if len(self.ui.tableView.selectedIndexes()) == 0: if len(self.tableView.selectedIndexes()) == 0:
self._model.insertRows(self._model.rowCount(), 1) self._tablemodel.insert_row(self._tablemodel.rowCount())
else: else:
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()])) row = self.index_selected_row()
for row in rows: # [::-1]: self._tablemodel.insert_row(row + 1)
self._model.insertRows(row + 1, 1)
try:
self.graph()
except:
pass
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def delete_row(self): def delete_row(self):
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()])) rows = sorted(
list(
set(
[index.row() for index in self.tableView.selectedIndexes()]
)
)
)
if len(rows) > 0: if len(rows) > 0:
self._model.remove_rows(rows) self._tablemodel.remove_rows(rows)
try:
self.graph()
except:
print("TODO")
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def sort_X_ascending(self): def sort_X_ascending(self):
self._model.sort(0, order=Qt.AscendingOrder) self._model.sort('x', order=Qt.AscendingOrder)
self.graph() self.graph()
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def sort_X_descending(self): def sort_X_descending(self):
self._model.sort(0, order=Qt.DescendingOrder) self._model.sort('x', order=Qt.DescendingOrder)
self.graph() self.graph()
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def sort_Y_ascending(self): def sort_Y_ascending(self):
self._model.sort(1, order=Qt.AscendingOrder) self._model.sort('y', order=Qt.AscendingOrder)
self.graph() self.graph()
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def sort_Y_descending(self): def sort_Y_descending(self):
self._model.sort(1, order=Qt.DescendingOrder) self._model.sort('y', order=Qt.DescendingOrder)
self.graph() self.graph()
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def move_row_down(self): def move_row_down(self):
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()])) rows = list(
set(
[index.row() for index in self.ui.tableView.selectedIndexes()]
)
)
for row in rows: for row in rows:
if row < self._model.rowCount() - 1: if row < self._model.rowCount() - 1:
self._model.moveRowDown(row) self._model.moveRowDown(row)
self.graph() self.graph()
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def move_row_up(self): def move_row_up(self):
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()])) rows = list(
set(
[index.row() for index in self.ui.tableView.selectedIndexes()]
)
)
for row in rows: for row in rows:
if 0 < row: if 0 < row:
self._model.moveRowUp(row) self._model.moveRowUp(row)
self.graph() self.graph()
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def eventFilter(self, source, event): def eventFilter(self, source, event):
if event.type() == QEvent.KeyPress: if event.type() == QEvent.KeyPress:
...@@ -302,9 +284,11 @@ class ProfileWindow(QMainWindow): ...@@ -302,9 +284,11 @@ class ProfileWindow(QMainWindow):
print(minCol) print(minCol)
print(minRow, columns) print(minRow, columns)
for index in selected: for index in selected:
self.clipboard.append((index.row() - minRow, self.clipboard.append(
index.column() - minCol, (index.row() - minRow,
index.data_frame())) index.column() - minCol,
index.data_frame())
)
def pasteSelection(self): def pasteSelection(self):
if not self.clipboard: if not self.clipboard:
...@@ -358,15 +342,11 @@ class ProfileWindow(QMainWindow): ...@@ -358,15 +342,11 @@ class ProfileWindow(QMainWindow):
print("TODO") print("TODO")
self.graph() self.graph()
self.status_change_tableview = True
self.ui.btn_check.setEnabled(True)
self.ui.btn_go_back.setEnabled(True)
self.ui.btn_reset.setEnabled(True)
def handleSave(self): def handleSave(self):
if self.fileName is None or self.fileName == '': if self.fileName is None or self.fileName == '':
self.fileName, self.filters = QFileDialog.getSaveFileName( self.fileName, self.filters = QFileDialog.getSaveFileName(
self, filter=self.filters self, filter="CSV files (*.csv)"
) )
if self.fileName != '': if self.fileName != '':
...@@ -405,7 +385,7 @@ class ProfileWindow(QMainWindow): ...@@ -405,7 +385,7 @@ class ProfileWindow(QMainWindow):
buf.append(row) buf.append(row)
self._model = None self._model = None
self._model = qtableview_profile.PandasModelEditable(buf) self._model = PandasModelEditable(buf)
self.ui.tableView.setModel(self._model) self.ui.tableView.setModel(self._model)
self.fileName = '' self.fileName = ''
......
...@@ -111,7 +111,7 @@ class PandasModelEditable(QAbstractTableModel): ...@@ -111,7 +111,7 @@ class PandasModelEditable(QAbstractTableModel):
if orientation == Qt.Horizontal and role == Qt.DisplayRole: if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return self._header[section] return self._header[section]
elif orientation == Qt.Vertical and role == Qt.DisplayRole: elif orientation == Qt.Vertical and role == Qt.DisplayRole:
return return str(section + 1) return str(section + 1)
if role == Qt.ToolTipRole and section == 4: if role == Qt.ToolTipRole and section == 4:
return _translate( return _translate(
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment