Skip to content

Commit

Permalink
Add a method in the ModuleManager allowing user to add customised mod…
Browse files Browse the repository at this point in the history
…ule and dialog to a selectable list of modules/dialogs on the manager sidebar.
  • Loading branch information
alan-wu committed Apr 1, 2019
1 parent cd25f71 commit 8423063
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 28 deletions.
6 changes: 4 additions & 2 deletions src/ui/BaseDialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ BaseDialog.prototype.close = function(myInstance) {
myInstance.onCloseCallbacks[i]( this);
}
if (myInstance.destroyModuleOnClose) {
myInstance.module.destroy();
myInstance.module = undefined;
if (myInstance.module) {
myInstance.module.destroy();
myInstance.module = undefined;
}
}
}
}
Expand Down
5 changes: 3 additions & 2 deletions src/ui/ManagerSidebar.js
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,8 @@ var ManagerSidebar = function(parentIn) {
var moduleManager = addDialog.data("manager");
if ((dialogName !== "Please pick one") && name !== "") {
var module = moduleManager.createModule(dialogName);
module.setName(name);
if (module)
module.setName(name);
var dialog = moduleManager.createDialog(module, parent);
dialog.destroyModuleOnClose = true;
moduleManager.manageDialog(dialog);
Expand Down Expand Up @@ -349,7 +350,7 @@ var ManagerSidebar = function(parentIn) {
});
addDialogElem.parent().draggable({
containment: parent
});
});

var messageDialogElem = jelem.find("#message-dialog");
messageDialog = messageDialogElem.dialog({
Expand Down
89 changes: 65 additions & 24 deletions src/utilities/manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ exports.ModuleManager = function() {
return dialog;
}
this["Organs Viewer"] = [];
this["Organs Viewer"].module = function() {
this["Organs Viewer"].module = function() {
var module = new (require("../modules/organsRenderer").OrgansViewer)(modelsLoader);
return module;
}
this["Organs Viewer"].dialog= function(module, parent) {
this["Organs Viewer"].dialog = function(module, parent) {
var dialog = new (require("../ui/OrgansViewerDialog").OrgansViewerDialog)(module, parent);
return dialog;
}
this["Model Panel"] = [];
this["Model Panel"].module = function() {
this["Model Panel"].module = function() {
var module = new (require("../modules/model_panel").ModelPanel)();
return module;
}
Expand All @@ -52,6 +52,21 @@ exports.ModuleManager = function() {
var subscription = undefined;
var _this = this;

this.addConstructor = function(name, moduleConstructor, dialogConstructor) {
if(!constructors.hasOwnProperty(name)) {
constructors[name] = [];
constructors[name].module = function() {
var module = new moduleConstructor();
console.log(module);
return module;
}
constructors[name].dialog = function(module, parent) {
var dialog = new dialogConstructor(module, parent);
return dialog;
}
}
}

this.getAllManagerItems = function() {
return managerItems.slice();
}
Expand Down Expand Up @@ -90,6 +105,16 @@ exports.ModuleManager = function() {
}
return undefined;
}

var findManagerItemWithDialog = function(dialogIn) {
for (var i = 0; i < managerItems.length; i++) {
var dialog = managerItems[i].getDialog();
if (dialog === dialogIn) {
return managerItems[i];
}
}
return undefined;
}

var pad = function(number, width) {
var n = number + '';
Expand All @@ -112,30 +137,44 @@ exports.ModuleManager = function() {
this.manageDialog = function(dialogIn) {
if (dialogIn) {
var moduleIn = dialogIn.getModule();
var item = findManagerItemWithModule(moduleIn);
if (item) {
if (item.getDialog() === undefined) {
item.setDialog(dialogIn);
dialogIn.addBeforeCloseCallback(dialogDestroyCallback());
}
return item;
}
//item not found, add a new entry
if (moduleIn) {
var managerItem = new ManagerItem();
managerItem.setDialog(dialogIn);
dialogIn.addBeforeCloseCallback(dialogDestroyCallback());
moduleIn.addChangedCallback(moduleChangedCallback());
managerItems.push(managerItem);
for (var i = 0; i < itemChangedCallbacks.length; i++)
itemChangedCallbacks[i](managerItem, MANAGER_ITEM_CHANGE.ADDED)
return managerItem;
var item = findManagerItemWithModule(moduleIn);
if (item) {
if (item.getDialog() === undefined) {
item.setDialog(dialogIn);
dialogIn.addBeforeCloseCallback(dialogDestroyCallback());
}
return item;
} else {
var managerItem = new ManagerItem();
managerItem.setDialog(dialogIn);
dialogIn.addBeforeCloseCallback(dialogDestroyCallback());
moduleIn.addChangedCallback(moduleChangedCallback());
managerItems.push(managerItem);
for (var i = 0; i < itemChangedCallbacks.length; i++)
itemChangedCallbacks[i](managerItem, MANAGER_ITEM_CHANGE.ADDED)
return managerItem;
}
} else {
var item = findManagerItemWithDialog(dialogIn);
if (item === undefined) {
var managerItem = new ManagerItem();
managerItem.setDialog(dialogIn);
dialogIn.addBeforeCloseCallback(dialogDestroyCallback());
managerItems.push(managerItem);
for (var i = 0; i < itemChangedCallbacks.length; i++)
itemChangedCallbacks[i](managerItem, MANAGER_ITEM_CHANGE.ADDED)
return managerItem;
}
return item;
}
}
}

this.removeDialog = function(dialogIn) {
if (dialogIn) {
var managerItems = findManagerItemWithDialog(dialogIn)

for (var i = 0; i < managerItems.length; i++) {
var dialog = managerItems[i].getDialog();
if (dialog === dialogIn) {
Expand Down Expand Up @@ -238,10 +277,12 @@ exports.ModuleManager = function() {
this.createModule = function(moduleName) {
if (modelsLoader && ready) {
var module = constructors[moduleName].module();
moduleCounter = moduleCounter + 1;
var name = pad(moduleCounter, 4);
module.setName(name);
_this.manageModule(module);
if (module) {
moduleCounter = moduleCounter + 1;
var name = pad(moduleCounter, 4);
module.setName(name);
_this.manageModule(module);
}
return module;
}
return;
Expand Down

0 comments on commit 8423063

Please sign in to comment.