1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
// SPDX-FileCopyrightText: Copyright (c) Kitware Inc.
// SPDX-FileCopyrightText: Copyright (c) Sandia Corporation
// SPDX-License-Identifier: BSD-3-Clause
#ifndef pqPythonFileIO_h
#define pqPythonFileIO_h
#include "pqPythonModule.h"
#include "pqPythonUtils.h"
#include "vtkType.h" // For vtkTypeUInt32
#include <QAction>
#include <QDir>
#include <QObject>
#include <QString>
#include <iostream>
class QTextEdit;
/**
* @class pqPythonFileIO
* @brief Handles loading (resp. saving) from (resp. to) the disk to
* (resp. from) a QTextEdit widget.
*/
class PQPYTHON_EXPORT pqPythonFileIO : public QObject
{
Q_OBJECT
public:
/**
* @brief Default constructor is not valid for this class
*/
pqPythonFileIO() = delete;
/**
* @brief Construct a pqPythonFileIO
* @param[in] parent the parent for the Qt hierarchy
* @param[in] text the QTextEdit this object acts on
*/
pqPythonFileIO(QWidget* parent, QTextEdit& text);
/**
* @brief Destroy this object.
* @details Effectively clears the swap
* created by this class
*/
~pqPythonFileIO() override;
/**
* @brief Saves and close the underlying file
* @return true if the saving process was successful,
* false if the user discarded the saves or if something
* wrong happened during file I/O
*/
bool saveOnClose();
/**
* @brief Opens and load the given file.
* @param[in] filename the file to be opened
* @param[in] location the location of the file
* @returns false if the file is invalid
*/
bool openFile(const QString& filename, vtkTypeUInt32 location = 0x10 /*vtkPVSession::CLIENT*/);
/**
* @brief Sets the default save directory
*/
void setDefaultSaveDirectory(const QString& dir) { this->DefaultSaveDirectory = dir; }
/**
* @brief Returns the filename the editor acts on
*/
const QString& getFilename() const { return this->File.Name; }
/**
* @brief Returns the location of the file that the editor acts on
*/
vtkTypeUInt32 getLocation() const { return this->File.Location; }
/**
* @brief Returns true if the buffer content has been saved on the disk
*/
bool isDirty() const;
Q_SIGNALS:
/**
* @brief Signals that the QTextEdit buffer has been erased
*/
void bufferErased();
/**
* @brief Signals that a file has been opened
*/
void fileOpened(const QString&);
/**
* @brief Signals that the file has been saved
*/
void fileSaved(const QString&);
/**
* @brief Emitted when the content of the buffer
* has changed
*/
void contentChanged();
public Q_SLOTS:
/**
* @brief Change the buffer status to modified
*/
void setModified(bool modified);
/**
* @brief Saves the underlying file
* @details If no file is associated, ask the
* user which file to save this buffer in
*/
bool save();
/**
* @brief Saves the current file under a new file
* and opens it in the editor
*/
bool saveAs();
/**
* @brief Saves the current file under the macro directory
*/
bool saveAsMacro();
/**
* @brief Saves the current file under the script directory
*/
bool saveAsScript();
private:
struct PythonFile
{
PythonFile() = default;
PythonFile(const QString& str, const vtkTypeUInt32 location, QTextEdit* textEdit)
: Name(str)
, Location(location)
, Text(textEdit)
{
}
bool operator!=(const PythonFile& other) const { return this->Name != other.Name; }
bool writeToFile() const;
bool readFromFile(QString& str) const;
void start();
void removeSwap() const;
QString Name = "";
vtkTypeUInt32 Location = 0x10 /*vtkPVSession::CLIENT*/;
QTextEdit* Text = nullptr;
} File;
bool saveBuffer(const QString& file, vtkTypeUInt32 location);
QTextEdit& TextEdit;
/**
* @brief The default save directory (ie ~/home)
*/
QString DefaultSaveDirectory = QDir::homePath();
};
#endif // pqPythonFileIO_h
|