Skip to content

Commit

Permalink
Multipage selection (#188)
Browse files Browse the repository at this point in the history
  • Loading branch information
ewchow committed Mar 17, 2020
1 parent cea39a8 commit c495705
Show file tree
Hide file tree
Showing 35 changed files with 1,253 additions and 343 deletions.
23 changes: 23 additions & 0 deletions .gitignore
@@ -0,0 +1,23 @@
# app directory exclusions
/app/locale/*
/app/combined*
/app/*.out
/app/*.html
/app/thirdparty/*/
/app/*.js
/app/*.wasm
/app/wpd*

# electron directory exclusions
/electron/node_modules/
/electron/package-lock.json

# webserver directory exclusions
/webserver/settings.json
/webserver/webserver

# generated directories
/WebPlotDigitizer-*

# general
.DS_Store
41 changes: 36 additions & 5 deletions app/javascript/controllers/appData.js
Expand Up @@ -25,10 +25,14 @@ var wpd = wpd || {};
wpd.appData = (function() {
let _plotData = null;
let _undoManager = null;
let _pageManager = null;

function reset() {
_plotData = null;
_undoManager = null;
if (_pageManager !== null) {
_pageManager = _pageManager.destroy()
}
}

function getPlotData() {
Expand All @@ -39,25 +43,52 @@ wpd.appData = (function() {
}

function getUndoManager() {
if (_undoManager == null) {
_undoManager = new wpd.UndoManager();
if (isMultipage()) {
let currentPage = _pageManager.currentPage();
if (_undoManager === null) {
_undoManager = {};
}
if (!_undoManager.hasOwnProperty(currentPage)) {
_undoManager[currentPage] = new wpd.UndoManager();
}
return _undoManager[currentPage];
} else {
if (_undoManager == null) {
_undoManager = new wpd.UndoManager();
}
return _undoManager;
}
return _undoManager;
}

function getPageManager() {
return _pageManager;
}

function isAligned() {
return getPlotData().getAxesCount() > 0;
}

function plotLoaded(imageData) {
function isMultipage() {
const pageManager = getPageManager();
if (!pageManager) return false;
return pageManager.pageCount() > 1;
}

function plotLoaded(imageData, pageManager) {
if (_pageManager === null && pageManager !== null) {
_pageManager = pageManager;
}
getPlotData().setTopColors(wpd.colorAnalyzer.getTopColors(imageData));
getUndoManager().reapply();
}

return {
isAligned: isAligned,
isMultipage: isMultipage,
getPlotData: getPlotData,
getUndoManager: getUndoManager,
getPageManager: getPageManager,
reset: reset,
plotLoaded: plotLoaded
};
})();
})();
41 changes: 32 additions & 9 deletions app/javascript/controllers/axesCalibration.js
Expand Up @@ -95,7 +95,8 @@ wpd.XYAxesCalibrator = class extends wpd.AxesCalibrator {
if (!this._isEditing) {
axes.name = wpd.alignAxes.makeAxesName(wpd.XYAxes);
let plot = wpd.appData.getPlotData();
plot.addAxes(axes);
plot.addAxes(axes, wpd.appData.isMultipage());
wpd.alignAxes.postProcessAxesAdd(axes);
}
wpd.popup.close('xyAlignment');
return true;
Expand Down Expand Up @@ -147,7 +148,8 @@ wpd.BarAxesCalibrator = class extends wpd.AxesCalibrator {
if (!this._isEditing) {
axes.name = wpd.alignAxes.makeAxesName(wpd.BarAxes);
let plot = wpd.appData.getPlotData();
plot.addAxes(axes);
plot.addAxes(axes, wpd.appData.isMultipage());
wpd.alignAxes.postProcessAxesAdd(axes);
}
wpd.popup.close('barAlignment');
return true;
Expand Down Expand Up @@ -204,7 +206,8 @@ wpd.PolarAxesCalibrator = class extends wpd.AxesCalibrator {
if (!this._isEditing) {
axes.name = wpd.alignAxes.makeAxesName(wpd.PolarAxes);
let plot = wpd.appData.getPlotData();
plot.addAxes(axes);
plot.addAxes(axes, wpd.appData.isMultipage());
wpd.alignAxes.postProcessAxesAdd(axes);
}
wpd.popup.close('polarAlignment');
return true;
Expand Down Expand Up @@ -250,7 +253,8 @@ wpd.TernaryAxesCalibrator = class extends wpd.AxesCalibrator {
if (!this._isEditing) {
axes.name = wpd.alignAxes.makeAxesName(wpd.TernaryAxes);
let plot = wpd.appData.getPlotData();
plot.addAxes(axes);
plot.addAxes(axes, wpd.appData.isMultipage());
wpd.alignAxes.postProcessAxesAdd(axes);
}
wpd.popup.close('ternaryAlignment');
return true;
Expand Down Expand Up @@ -290,7 +294,8 @@ wpd.MapAxesCalibrator = class extends wpd.AxesCalibrator {
if (!this._isEditing) {
axes.name = wpd.alignAxes.makeAxesName(wpd.MapAxes);
let plot = wpd.appData.getPlotData();
plot.addAxes(axes);
plot.addAxes(axes, wpd.appData.isMultipage());
wpd.alignAxes.postProcessAxesAdd(axes);
}
wpd.popup.close('mapAlignment');
return true;
Expand Down Expand Up @@ -347,11 +352,17 @@ wpd.alignAxes = (function() {
var imageAxes = new wpd.ImageAxes();
imageAxes.name = wpd.alignAxes.makeAxesName(wpd.ImageAxes);
imageAxes.calibrate();
wpd.appData.getPlotData().addAxes(imageAxes);
wpd.appData.getPlotData().addAxes(imageAxes, wpd.appData.isMultipage());
postProcessAxesAdd(imageAxes);
wpd.tree.refresh();
let dsNameColl = wpd.appData.getPlotData().getDatasetNames();
if (dsNameColl.length > 0) {
let dsName = dsNameColl[0];
let dsName;
if (wpd.appData.isMultipage()) {
dsName = dsNameColl[dsNameColl.length - 1];
} else {
dsName = dsNameColl[0];
}
wpd.tree.selectPath("/" + wpd.gettext("datasets") + "/" + dsName, true);
}
wpd.acquireData.load();
Expand Down Expand Up @@ -438,6 +449,9 @@ wpd.alignAxes = (function() {
const plotData = wpd.appData.getPlotData();
const axes = wpd.tree.getActiveAxes();
plotData.deleteAxes(axes);
if (wpd.appData.isMultipage()) {
wpd.appData.getPageManager().deleteAxesFromCurrentPage(axes);
}
wpd.tree.refresh();
wpd.tree.selectPath("/" + wpd.gettext("axes"));
});
Expand Down Expand Up @@ -500,6 +514,14 @@ wpd.alignAxes = (function() {
return fullName;
}

function postProcessAxesAdd(axes) {
if (wpd.appData.isMultipage()) {
const pageManager = wpd.appData.getPageManager();
pageManager.addAxesToCurrentPage(axes);
pageManager.autoAddDataset();
}
}

return {
start: initiatePlotAlignment,
calibrationCompleted: calibrationCompleted,
Expand All @@ -514,6 +536,7 @@ wpd.alignAxes = (function() {
showRenameAxes: showRenameAxes,
makeAxesName: makeAxesName,
renameAxes: renameAxes,
renameKeypress: renameKeypress
renameKeypress: renameKeypress,
postProcessAxesAdd: postProcessAxesAdd
};
})();
})();
31 changes: 27 additions & 4 deletions app/javascript/controllers/datasetManagement.js
Expand Up @@ -31,6 +31,18 @@ wpd.dataSeriesManagement = (function() {
return false;
}

function getDatasetWithNameCount(name) {
const plotData = wpd.appData.getPlotData();
const dsNameColl = plotData.getDatasetNames();
let counter = 0;
for (const dsName of dsNameColl) {
if (dsName.startsWith(name)) {
counter++;
}
}
return counter;
}

function getDatasetCount() {
const plotData = wpd.appData.getPlotData();
return plotData.getDatasetCount();
Expand Down Expand Up @@ -95,6 +107,9 @@ wpd.dataSeriesManagement = (function() {
let ds = new wpd.Dataset();
ds.name = $singleDatasetName.value.trim();
plotData.addDataset(ds);
if (wpd.appData.isMultipage()) {
wpd.appData.getPageManager().addDatasetToCurrentPage(ds);
}
wpd.tree.refreshPreservingSelection();
}

Expand All @@ -104,6 +119,8 @@ wpd.dataSeriesManagement = (function() {
wpd.popup.close('add-dataset-popup');
if (dsCount > 0) {
const plotData = wpd.appData.getPlotData();
const isMultipage = wpd.appData.isMultipage();
const pageManager = wpd.appData.getPageManager();
let idx = getDatasetCount();
const prefix = wpd.gettext("dataset") + " ";
let i = 0;
Expand All @@ -113,6 +130,9 @@ wpd.dataSeriesManagement = (function() {
let ds = new wpd.Dataset();
ds.name = dsName;
plotData.addDataset(ds);
if (isMultipage) {
pageManager.addDatasetToCurrentPage(ds);
}
i++;
}
idx++;
Expand All @@ -133,6 +153,9 @@ wpd.dataSeriesManagement = (function() {
const plotData = wpd.appData.getPlotData();
const ds = wpd.tree.getActiveDataset();
plotData.deleteDataset(ds);
if (wpd.appData.isMultipage()) {
wpd.appData.getPageManager().deleteDatasetFromCurrentPage(ds);
}
wpd.tree.refresh();
wpd.tree.selectPath("/" + wpd.gettext("datasets"));
});
Expand All @@ -156,8 +179,7 @@ wpd.dataSeriesManagement = (function() {
color: wpd.tree.getActiveDataset().colorRGB.getRGB(),
triggerElementId: 'dataset-display-color-picker-button',
title: 'Specify Display Color for Digitized Points',
setColorDelegate: function(
col) {
setColorDelegate: function(col) {
wpd.tree.getActiveDataset().colorRGB = new wpd.Color(col[0], col[1], col[2]);
wpd.graphicsWidget.forceHandlerRepaint();
wpd.tree.refreshPreservingSelection();
Expand All @@ -175,6 +197,7 @@ wpd.dataSeriesManagement = (function() {
addMultipleDatasets: addMultipleDatasets,
deleteDataset: deleteDataset,
changeAxes: changeAxes,
startColorPicker: startColorPicker
startColorPicker: startColorPicker,
getDatasetWithNameCount: getDatasetWithNameCount
};
})();
})();
11 changes: 8 additions & 3 deletions app/javascript/controllers/imageEditing.js
Expand Up @@ -23,9 +23,14 @@ var wpd = wpd || {};

wpd.imageEditing = {
showImageInfo: function() {
let $imageDimensions = document.getElementById("image-info-dimensions");
let $imageDimensions = document.getElementById('image-info-dimensions');
let imageInfo = wpd.imageManager.getImageInfo();
$imageDimensions.innerHTML = "(" + imageInfo.width + "x" + imageInfo.height + ")";
$imageDimensions.innerHTML = '(' + imageInfo.width + 'x' + imageInfo.height + ')';

if (wpd.appData.isMultipage()) {
let $imagePages = document.getElementById('image-info-pages');
$imagePages.innerHTML = wpd.appData.getPageManager().pageCount();
}
wpd.popup.show('image-info-popup');
},

Expand Down Expand Up @@ -104,4 +109,4 @@ wpd.CropImageAction = class extends wpd.ReversibleAction {
// call all dependent UI elements
wpd.graphicsWidget.runImageOp(imageOp);
}
};
};
44 changes: 17 additions & 27 deletions app/javascript/controllers/imageManager.js
Expand Up @@ -23,6 +23,8 @@ var wpd = wpd || {};

wpd.imageManager = (function() {
let _firstLoad = true;
let _newLoad = false;
let _pageManager = null;
let _imageInfo = {
width: 0,
height: 0
Expand All @@ -43,6 +45,7 @@ wpd.imageManager = (function() {

function loadFromFile(imageFile, resumedProject) {
return new Promise((resolve, reject) => {
_newLoad = true;
if (imageFile.type.match("image.*")) {
wpd.busyNote.show();
let reader = new FileReader();
Expand All @@ -57,28 +60,8 @@ wpd.imageManager = (function() {
reader.onload = function() {
let pdfurl = reader.result;
pdfjsLib.getDocument(pdfurl).promise.then(function(pdf) {
pdf.getPage(1).then(function(page) {
let scale = 3;
let viewport = page.getViewport({scale: scale});
let $canvas = document.createElement('canvas');
let ctx = $canvas.getContext('2d');
$canvas.width = viewport.width;
$canvas.height = viewport.height;
page.render({
canvasContext: ctx,
viewport: viewport
})
.promise.then(
function() {
let url = $canvas.toDataURL();
loadFromURL(url, resumedProject).then(resolve);
},
function(err) {
console.log(err);
wpd.busyNote.close();
reject(err);
});
});
_pageManager = new wpd.PDFManager(pdf);
_pageManager.renderPage(1, resumedProject).then(resolve);
});
};
reader.readAsDataURL(imageFile);
Expand All @@ -102,19 +85,26 @@ wpd.imageManager = (function() {
}

function _setImage(image, resumedProject) {
wpd.appData.reset();
wpd.sidebar.clear();
if (_newLoad) {
wpd.appData.reset();
wpd.sidebar.clear();
}
let imageData = wpd.graphicsWidget.loadImage(image);
wpd.appData.plotLoaded(imageData);
wpd.appData.plotLoaded(imageData, _pageManager);
_pageManager = null;
wpd.busyNote.close();
wpd.tree.refresh();

if (_newLoad) {
wpd.tree.refresh();
} else {
wpd.tree.refreshPreservingSelection();
}
if (_firstLoad) {
wpd.sidebar.show('start-sidebar');
} else if (!resumedProject) {
wpd.popup.show('axesList');
}
_firstLoad = false;
_newLoad = false;
_imageInfo = {
width: imageData.width,
height: imageData.height
Expand Down

0 comments on commit c495705

Please sign in to comment.