mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-10 14:14:18 +02:00
Drop picture files on a folio to add them
Picture files (png, jpg, bmp, svg) dragged from the file manager onto a folio are added there: the first centred on the drop point, the others cascaded from it, and one undo step removes them all. A picture larger than the visible part of the folio is scaled down to fit it. Files that cannot be used are listed once after the others have been placed, and a drop holding only other files (a .qet project) still reaches the main window, which opens it. The checks a picture must pass before it is embedded in the project move into ImageDrop::load and are now shared by the drop, the add image dialog and the script API: a regular file of at most 10 MB, and at most 64 megapixels, read from the header before any pixel is allocated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include "../diagramcontent.h"
|
||||
#include "../diagramview.h"
|
||||
#include "../factory/elementfactory.h"
|
||||
#include "../imagedrop.h"
|
||||
#include "../factory/qetgraphicstablefactory.h"
|
||||
#include "../factory/ui/addtabledialog.h"
|
||||
#include "../qet.h"
|
||||
@@ -3437,20 +3438,12 @@ int QetScriptApi::addImage(int folioIndex, const QString &filePath, double x, do
|
||||
const QList<Diagram *> diagrams = m_project->diagrams();
|
||||
if (folioIndex < 0 || folioIndex >= diagrams.count()) return -1;
|
||||
|
||||
const QFileInfo info(filePath);
|
||||
if (!info.isFile()) {
|
||||
log(QStringLiteral("qet.addImage: '%1' is not a file").arg(filePath));
|
||||
return -1;
|
||||
}
|
||||
constexpr qint64 max_bytes = 10LL * 1024 * 1024;
|
||||
if (info.size() > max_bytes) {
|
||||
log(QStringLiteral("qet.addImage: '%1' is %2 bytes; images are embedded in the project, "
|
||||
"so files over 10 MB are refused").arg(filePath).arg(info.size()));
|
||||
return -1;
|
||||
}
|
||||
const QImage image(filePath);
|
||||
// Same checks as a picture dropped on a folio: a regular file of at
|
||||
// most 10 MB (it is embedded in the project) and a bounded pixel count.
|
||||
QString error;
|
||||
const QImage image = ImageDrop::load(filePath, &error);
|
||||
if (image.isNull()) {
|
||||
log(QStringLiteral("qet.addImage: '%1' could not be read as an image").arg(filePath));
|
||||
log(QStringLiteral("qet.addImage: '%1': %2").arg(filePath, error));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user