Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development for testing #428

Merged
merged 2 commits into from
Sep 30, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
240 changes: 126 additions & 114 deletions components/VFBMain.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ export default class VFBMain extends React.Component {
controlPanelVisible: true,
wireframeVisible: false,
queryBuilderVisible: true,
idSelected: undefined,
UIUpdated: false,
htmlFromToolbar: undefined,
termInfoId: undefined,
termInfoName: undefined,
UIUpdated: false
idOnFocus: undefined,
instanceOnFocus: undefined,
idSelected: undefined
};

this.menuHandler = this.menuHandler.bind(this);
Expand All @@ -54,6 +54,7 @@ export default class VFBMain extends React.Component {
this.UIUpdateManager = this.UIUpdateManager.bind(this);
this.closeHtmlViewer = this.closeHtmlViewer.bind(this);
this.renderHTMLViewer = this.renderHTMLViewer.bind(this);
this.handlerInstanceUpdate = this.handlerInstanceUpdate.bind(this);
this.handleSceneAndTermInfoCallback = this.handleSceneAndTermInfoCallback.bind(this);

this.coli = 1;
Expand All @@ -66,26 +67,14 @@ export default class VFBMain extends React.Component {
this.sliceViewerReference = undefined;
this.treeBrowserReference = undefined;
this.focusTermReference = undefined;
this.termInfoId = undefined;
this.termInfoName = undefined;
this.modalX = undefined;
this.modalY = undefined;
this.idOnFocus = undefined;
this.instanceOnFocus = undefined;
this.idFromURL = undefined;
this.firstLoad = true;
this.idsFromURL = [];

this.UIElementsVisibility = {};

this.stackConfiguration = {
serverUrl: 'https://www.virtualflybrain.org/fcgi/wlziipsrv.fcgi',
templateId: 'NOTSET'
};

this.voxel = {
x: 0.622,
y: 0.622,
z: 0.622
};

this.stackViewerData = { id: "StackViewerWidget_" };

this.colours = require('./configuration/colours.json');
this.spotlightConfig = require('./configuration/spotlightConfiguration').spotlightConfig;
this.spotlightDataSourceConfig = require('./configuration/spotlightConfiguration').spotlightDataSourceConfig;
Expand All @@ -98,7 +87,6 @@ export default class VFBMain extends React.Component {
this.queryResultsControlConfig = require('./configuration/queryBuilderConfiguration').queryResultsControlConfig;
this.queryBuilderDatasourceConfig = require('./configuration/queryBuilderConfiguration').queryBuilderDatasourceConfig;

this.idForTermInfo = undefined;
this.model = FlexLayout.Model.fromJson(modelJson)

window.redirectURL = '$PROTOCOL$//$HOST$/' + GEPPETTO_CONFIGURATION.contextPath + '/geppetto?i=$TEMPLATE$,$VFB_ID$&id=$VFB_ID$';
Expand Down Expand Up @@ -205,8 +193,8 @@ export default class VFBMain extends React.Component {
}

} else {
console.log("model has not been loaded, in the old initialization here I was triggering a setTimeout to call recursively this same function addvfbid");
// setTimeout(function () { this.addVfbId(idsList); }, 1000);
console.log("model has not been loaded, in the old initialization here I was triggering a"
+ "setTimeout to call recursively this same function addvfbid");
}
}

Expand Down Expand Up @@ -246,38 +234,14 @@ export default class VFBMain extends React.Component {
}
if (this.hasVisualType(variableIds[singleId])) {
var instance = Instances.getInstance(variableIds[singleId]);
if (this.termInfoReference !== undefined && this.termInfoReference !== null) {
this.termInfoReference.setTermInfo(meta, meta.getParent().getId());
}
this.termInfoName = meta;
this.termInfoId = meta.getParent().getId();
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(this.termInfoName);
}
this.resolve3D(variableIds[singleId], function () {
GEPPETTO.SceneController.deselectAll();
if ((instance != undefined) && (typeof instance.select === "function") && (this.termInfoReference !== null)){
if ((instance != undefined) && (typeof instance.select === "function")) {
instance.select();
if (this.termInfoReference !== undefined && this.termInfoReference !== null && instance[instance.getId() + "_meta"] !== undefined) {
let meta = instance[instance.getId() + "_meta"];
this.termInfoReference.setTermInfo(meta, meta.getParent().getId());
this.termInfoName = meta;
this.termInfoId = meta.getParent().getId();
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(this.termInfoName);
}
}
}
}.bind(this));
} else {
if (this.termInfoReference !== undefined && this.termInfoReference !== null) {
this.termInfoReference.setTermInfo(meta, meta.getParent().getId());
}
this.termInfoName = meta;
this.termInfoId = meta.getParent().getId();
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(this.termInfoName);
}
this.handlerInstanceUpdate(meta);
}
// if the element is not invalid (try-catch) or it is part of the scene then remove it from the buffer
if (window[variableIds[singleId]] != undefined) {
Expand Down Expand Up @@ -347,7 +311,7 @@ export default class VFBMain extends React.Component {
var templateID = anchorElement.attr('data-instancepath');
this.addVfbId(templateID);
setTimeout(function (){
window.resolve3D(path);
window.resolve3D(path);
}, 5000);
return; // Don't load until the template has
}
Expand Down Expand Up @@ -514,12 +478,7 @@ export default class VFBMain extends React.Component {
}
return historyList;
case 'triggerSetTermInfo':
if (this.termInfoReference !== undefined && this.termInfoReference !== null) {
this.termInfoReference.setTermInfo(click.value[0], click.value[0].getName());
}
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(click.value[0]);
}
this.handlerInstanceUpdate(click.value[0]);
break;
default:
console.log("Menu action not mapped, it is " + click);
Expand Down Expand Up @@ -765,8 +724,8 @@ export default class VFBMain extends React.Component {
ref={ref => this.termInfoReference = ref}
queryBuilder={this.refs.querybuilderRef}
showButtonBar={true}
termInfoName={this.termInfoName}
termInfoId={this.termInfoId}
termInfoName={this.instanceOnFocus}
termInfoId={this.idOnFocus}
focusTermRef={this.focusTermReference}
exclude={["ClassQueriesFrom", "Debug"]}
order={['Name',
Expand Down Expand Up @@ -820,7 +779,7 @@ export default class VFBMain extends React.Component {
return (<div className="flexChildContainer">
<TreeWidget
id="treeWidget"
instance={this.termInfoName}
instance={this.instanceOnFocus}
size={{ height: _height, width: _width }}
ref={ref => this.treeBrowserReference = ref}/>
</div>);
Expand Down Expand Up @@ -892,12 +851,7 @@ export default class VFBMain extends React.Component {
}.bind(this);

window.setTermInfo = function (meta, id) {
if (this.termInfoReference !== undefined && this.termInfoReference !== null) {
this.termInfoReference.setTermInfo(meta, id);
}
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(meta);
}
this.handlerInstanceUpdate(meta);
}.bind(this);

window.fetchVariableThenRun = function (idsList, cb, label) {
Expand All @@ -909,7 +863,13 @@ export default class VFBMain extends React.Component {
}.bind(this);

window.resolve3D = function (externalID) {
this.resolve3D(externalID);
this.resolve3D(externalID, function () {
var instance = Instances.getInstance(externalID);
if ((instance != undefined) && (typeof instance.select === "function")) {
GEPPETTO.SceneController.deselectAll();
instance.select();
}
}.bind(this));
}.bind(this);

this.canvasReference.flipCameraY();
Expand Down Expand Up @@ -946,43 +906,65 @@ export default class VFBMain extends React.Component {

// Loading ids passed through the browser's url
if ((this.props.location.search.indexOf("id=VFB") == -1) && (this.props.location.search.indexOf("i=VFB") == -1)) {
this.idFromURL = "VFB_00017894";
var that = this;
console.log("Loading default Adult Brain VFB_00017894 template.");
GEPPETTO.on(GEPPETTO.Events.Model_loaded, function () {
that.addVfbId("VFB_00017894");
that.addVfbId(that.idFromURL);
});
}

var idList = this.props.location.search;
var idList = idList.replace("?","").split("&");
var idsList = "";
var idsTermInfoSubstring = "";
var list;
for (list in idList) {
if (idList[list].indexOf("id=") > -1) {
idsTermInfoSubstring = idList[list].replace("id=","");
if (idsList.length > 0) {
idsList += ",";
}
idsList += idsTermInfoSubstring;
} else if (idList[list].indexOf("i=") > -1) {
if (idsList.length > 0) {
idsList = "," + idsList;
} else {
var idsList = "";
var idList = this.props.location.search;
idList = idList.replace("?","").split("&");
for (let list in idList) {
if (idList[list].indexOf("id=") > -1) {
this.idFromURL = idList[list].replace("id=","");
if (idsList.length > 0) {
idsList += ",";
}
idsList += this.idFromURL;
} else if (idList[list].indexOf("i=") > -1) {
if (idsList.length > 0) {
idsList = "," + idsList;
}
idsList = idList[list].replace("i=","") + idsList;
}
idsList = idList[list].replace("i=","") + idsList;
}
}
if ((idsList.length > 0) && (this.state.modelLoaded == true) && (this.urlIdsLoaded == false)) {
this.urlIdsLoaded = true;
var idArray = idsList.split(",");
var that = this;
console.log("Loading IDS to add to the scene from url");
GEPPETTO.on(GEPPETTO.Events.Model_loaded, function () {
that.addVfbId(idArray);
if (idsTermInfoSubstring.length > 0) {
this.idForTermInfo = idsTermInfoSubstring;
if ((idsList.length > 0) && (this.state.modelLoaded == true) && (this.urlIdsLoaded == false)) {
this.urlIdsLoaded = true;
this.idsFromURL = idsList.split(",");
// remove duplicates
var counter = this.idsFromURL.length;
if (this.idFromURL === undefined) {
this.idFromURL = this.idsFromURL[this.idsFromURL.length - 1];
}
});
while (counter--) {
if (this.idsFromURL[counter] === this.idFromURL) {
this.idsFromURL.splice(counter, 1);
}
}
this.idsFromURL.push(this.idFromURL);
this.idsFromURL = [... new Set(this.idsFromURL)];
var that = this;
console.log("Loading IDS to add to the scene from url");
GEPPETTO.on(GEPPETTO.Events.Model_loaded, function () {
that.addVfbId(that.idsFromURL);
/*
* var loadOnDelay = new Promise(function (resolve, reject) {
* that.addVfbId(that.idsFromURL);
* while (Instances[that.idFromURL] === undefined && window.templateID === undefined) {
* setTimeout(null, 500);
* }
* resolve(true);
* });
* loadOnDelay.then(function (reason) {
* if (reason) {
* that.handlerInstanceUpdate(Instances[that.idFromURL]);
* }
* });
*/
});
}
}

// wipe the history state:
Expand All @@ -997,7 +979,7 @@ export default class VFBMain extends React.Component {
for (list in idList) {
if (idList[list].indexOf("id=") > -1) {
idsTermInfoSubstring = idList[list].replace("id=","");
}
}
}
if (idsTermInfoSubstring.length > 0) {
console.log("Browser History Call triggered termInfo: " + idsTermInfoSubstring);
Expand Down Expand Up @@ -1042,27 +1024,13 @@ export default class VFBMain extends React.Component {
if (latestSelection.getChildren().length > 0) {
// it's a wrapper object - if name is different from current selection set term info
if ((currentSelectionName != latestSelection.getName()) && (this.termInfoReference !== null) && (this.termInfoReference !== null)) {
if (this.termInfoReference !== undefined && this.termInfoReference !== null) {
this.termInfoReference.setTermInfo(latestSelection[latestSelection.getId() + "_meta"], latestSelection[latestSelection.getId() + "_meta"].getName());
}
this.termInfoName = latestSelection[latestSelection.getId() + "_meta"];
this.termInfoId = latestSelection[latestSelection.getId() + "_meta"].getName();
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(this.termInfoName);
}
this.handlerInstanceUpdate(latestSelection[latestSelection.getId() + "_meta"]);
}
} else {
// it's a leaf (no children) / grab parent if name is different from current selection set term info
var parent = latestSelection.getParent();
if ((parent != null && currentSelectionName != parent.getName()) && (this.termInfoReference !== null) && (this.termInfoReference !== null)) {
if (this.termInfoReference !== undefined && this.termInfoReference !== null) {
this.termInfoReference.setTermInfo(parent[parent.getId() + "_meta"], parent[parent.getId() + "_meta"].getName());
}
this.termInfoName = parent[parent.getId() + "_meta"];
this.termInfoId = parent[parent.getId() + "_meta"].getName();
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(this.termInfoName);
}
this.handlerInstanceUpdate(parent);
}
}
}
Expand All @@ -1078,6 +1046,50 @@ export default class VFBMain extends React.Component {
});
}

handlerInstanceUpdate (instance) {
let metaInstance = undefined;
let parentInstance = undefined;
let initException = true;
if (instance === undefined || instance === null) {
console.log("Instance passed to handlerInstanceUpdate is undefined");
console.trace();
return;
}

if (instance.getId().indexOf("_meta") === -1 && instance.getParent() === null) {
parentInstance = instance;
metaInstance = parentInstance[parentInstance.getId() + "_meta"];
} else {
metaInstance = instance;
parentInstance = metaInstance.getParent();
}

this.instanceOnFocus = metaInstance;
this.idOnFocus = parentInstance.getId();

for (var counter = 0; counter < this.idsFromURL.length; counter++) {
if (this.idsFromURL[counter] === this.idOnFocus && this.idFromURL !== this.idOnFocus) {
this.idsFromURL.splice(counter, 1);
return;
}
if (this.idsFromURL[counter] === this.idOnFocus && this.idFromURL === this.idOnFocus) {
this.idsFromURL.splice(counter, 1);
break;
}
}

// Update the term info component
if (this.termInfoReference !== undefined && this.termInfoReference !== null) {
this.termInfoReference.setTermInfo(this.instanceOnFocus, this.idOnFocus);
}

// Update the tree browser
if (this.treeBrowserReference !== undefined && this.treeBrowserReference !== null) {
this.treeBrowserReference.updateTree(this.instanceOnFocus);
}

}

render () {
if ((this.state.tutorialWidgetVisible == true) && (this.tutorialRender == undefined)) {
this.tutorialRender = <TutorialWidget tutorialHandler={this.tutorialHandler} ref="tutorialWidgetRef" />
Expand Down
5 changes: 3 additions & 2 deletions components/interface/FocusTerm.js
Original file line number Diff line number Diff line change
Expand Up @@ -335,8 +335,9 @@ export default class FocusTerm extends React.Component {

componentDidMount () {
GEPPETTO.on(GEPPETTO.Events.Select, function (instance) {
console.log('Selection of ' + instance.getName());
if (instance[instance.getId() + "_meta"] !== undefined && instance.getName() !== this.state.currentInstance.getName()) {
if (this.state.currentInstance === undefined && instance[instance.getId() + "_meta"] !== undefined) {
this.setInstance(instance[instance.getId() + "_meta"]);
} else if (instance[instance.getId() + "_meta"] !== undefined && instance.getName() !== this.state.currentInstance.getName()) {
this.setInstance(instance[instance.getId() + "_meta"]);
}
}.bind(this));
Expand Down