From d610dfef7ec2cbc2ad9f06bc5b874a61d6e02dcb Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Wed, 26 Apr 2023 14:46:48 +0200 Subject: [PATCH] ASubWindow, geometry: Prepare copy/paste from other source and minor change. --- src/Model/Geometry/ProfileXYZ.py | 3 ++- src/View/ASubWindow.py | 26 +++++++++++++++++++ src/View/Geometry/GeometryWindow.py | 1 - .../Geometry/Profile/ProfileUndoCommand.py | 8 ++++-- src/View/Geometry/Profile/ProfileWindow.py | 2 ++ 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 043f43b5..bd9dec94 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -109,10 +109,11 @@ class ProfileXYZ(Profile): index: The index of new profile. Returns: - Nothing. + The new point. """ point = PointXYZ(0., 0., 0.) self._points.insert(index, point) + return point def filter_isnan(self, lst): """Returns the input list without 'nan' element diff --git a/src/View/ASubWindow.py b/src/View/ASubWindow.py index 03b0f9f3..a47a839a 100644 --- a/src/View/ASubWindow.py +++ b/src/View/ASubWindow.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- import os +import csv + +from io import StringIO from PyQt5.QtCore import Qt @@ -21,6 +24,29 @@ class WindowToolKit(object): def __init__(self, parent=None): super(WindowToolKit, self).__init__() + def parseClipboardTable(self): + clip = QApplication.clipboard() + mime = clip.mimeData() + # print(mime.formats()) + data = mime.data('text/plain').data().decode() + + has_header = csv.Sniffer().has_header(data) + print(f"header? {has_header}") + + header = [] + values = [] + + stream = StringIO(data) + rows = csv.reader(stream, delimiter='\t') + for l, row in enumerate(rows): + if has_header and l == 0: + header = row.copy() + continue + + values.append(row) + + return header, values + def file_dialog(self, select_file=True, callback=lambda x: None): """Open a new file dialog and send result to callback function diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py index 8a6929b1..3818b2b3 100644 --- a/src/View/Geometry/GeometryWindow.py +++ b/src/View/Geometry/GeometryWindow.py @@ -3,7 +3,6 @@ import os import pathlib import sys -import csv import time from copy import deepcopy diff --git a/src/View/Geometry/Profile/ProfileUndoCommand.py b/src/View/Geometry/Profile/ProfileUndoCommand.py index 0797c6a5..7036d661 100644 --- a/src/View/Geometry/Profile/ProfileUndoCommand.py +++ b/src/View/Geometry/Profile/ProfileUndoCommand.py @@ -53,12 +53,16 @@ class AddCommand(QUndoCommand): self._profile = profile self._index = index + self._point = None def undo(self): - self._profile.delete(self._index) + self._profile.delete([self._index]) def redo(self): - self._profile.insert(self._index) + if self._point is None: + self._point = self._profile.insert(self._index) + else: + self._profile.insert_point(self._index, self._point) class DelCommand(QUndoCommand): def __init__(self, profile, rows): diff --git a/src/View/Geometry/Profile/ProfileWindow.py b/src/View/Geometry/Profile/ProfileWindow.py index e84751e0..d17d98d0 100644 --- a/src/View/Geometry/Profile/ProfileWindow.py +++ b/src/View/Geometry/Profile/ProfileWindow.py @@ -143,6 +143,7 @@ class ProfileWindow(QMainWindow): else: row = self.index_selected_row() self._model.insert_row(row + 1) + self.update_plot() def delete_row(self): rows = sorted( @@ -155,6 +156,7 @@ class ProfileWindow(QMainWindow): if len(rows) > 0: self._model.remove_rows(rows) + self.update_plot() def sort_X_ascending(self): self._model.sort('x', order=Qt.AscendingOrder) -- GitLab