|
|
@@ -33,11 +33,15 @@ export interface EditorService {
|
|
|
export interface ResourceService extends EditorService {
|
|
|
save?(ev: EditorEvents.SaveResourceEvent);
|
|
|
canSave?(ev: EditorEvents.SaveResourceEvent);
|
|
|
- projectUnloaded?();
|
|
|
canDelete?(ev: EditorEvents.DeleteResourceEvent);
|
|
|
delete?(ev: EditorEvents.DeleteResourceEvent);
|
|
|
}
|
|
|
|
|
|
+export interface ProjectService extends EditorService {
|
|
|
+ projectUnloaded?();
|
|
|
+ projectLoaded?(ev: EditorEvents.LoadProjectEvent);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Generic registry for storing Editor Extension Services
|
|
|
*/
|
|
|
@@ -54,20 +58,23 @@ class ServiceRegistry<T extends EditorService> {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Registry for service extensions that are concerned about Resources
|
|
|
+ * Registry for service extensions that are concerned about project events
|
|
|
*/
|
|
|
-class ResourceServiceRegistry extends ServiceRegistry<ResourceService> {
|
|
|
+class ProjectServiceRegistry extends ServiceRegistry<ProjectService> {
|
|
|
constructor() {
|
|
|
super();
|
|
|
}
|
|
|
|
|
|
- saveResource(ev: EditorEvents.SaveResourceEvent) {
|
|
|
- // run through and find any services that can handle this.
|
|
|
+ /**
|
|
|
+ * Called when the project is unloaded
|
|
|
+ * @param {[type]} data Event info from the project unloaded event
|
|
|
+ */
|
|
|
+ projectUnloaded(data) {
|
|
|
this.registeredServices.forEach((service) => {
|
|
|
// Verify that the service contains the appropriate methods and that it can save
|
|
|
- if (service.canSave && service.save && service.canSave(ev)) {
|
|
|
+ if (service.projectUnloaded) {
|
|
|
try {
|
|
|
- service.save(ev);
|
|
|
+ service.projectUnloaded();
|
|
|
} catch (e) {
|
|
|
EditorUI.showModalError("Extension Error", `Error detected in extension ${service.name}\n ${e}\n ${e.stack}`);
|
|
|
}
|
|
|
@@ -76,15 +83,38 @@ class ResourceServiceRegistry extends ServiceRegistry<ResourceService> {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Called when a resource is being deleted
|
|
|
- * @return {[type]} [description]
|
|
|
+ * Called when the project is loaded
|
|
|
+ * @param {[type]} data Event info from the project unloaded event
|
|
|
*/
|
|
|
- deleteResource(ev: EditorEvents.DeleteResourceEvent) {
|
|
|
+ projectLoaded(ev:EditorEvents.LoadProjectEvent) {
|
|
|
this.registeredServices.forEach((service) => {
|
|
|
// Verify that the service contains the appropriate methods and that it can save
|
|
|
- if (service.canDelete && service.delete && service.canDelete(ev)) {
|
|
|
+ if (service.projectLoaded) {
|
|
|
try {
|
|
|
- service.delete(ev);
|
|
|
+ service.projectLoaded(ev);
|
|
|
+ } catch (e) {
|
|
|
+ EditorUI.showModalError("Extension Error", `Error detected in extension ${service.name}\n ${e}\n ${e.stack}`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Registry for service extensions that are concerned about Resources
|
|
|
+ */
|
|
|
+class ResourceServiceRegistry extends ServiceRegistry<ResourceService> {
|
|
|
+ constructor() {
|
|
|
+ super();
|
|
|
+ }
|
|
|
+
|
|
|
+ saveResource(ev: EditorEvents.SaveResourceEvent) {
|
|
|
+ // run through and find any services that can handle this.
|
|
|
+ this.registeredServices.forEach((service) => {
|
|
|
+ // Verify that the service contains the appropriate methods and that it can save
|
|
|
+ if (service.canSave && service.save && service.canSave(ev)) {
|
|
|
+ try {
|
|
|
+ service.save(ev);
|
|
|
} catch (e) {
|
|
|
EditorUI.showModalError("Extension Error", `Error detected in extension ${service.name}\n ${e}\n ${e.stack}`);
|
|
|
}
|
|
|
@@ -93,21 +123,22 @@ class ResourceServiceRegistry extends ServiceRegistry<ResourceService> {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Called when the project is unloaded
|
|
|
- * @param {[type]} data Event info from the project unloaded event
|
|
|
+ * Called when a resource is being deleted
|
|
|
+ * @return {[type]} [description]
|
|
|
*/
|
|
|
- projectUnloaded(data) {
|
|
|
+ deleteResource(ev: EditorEvents.DeleteResourceEvent) {
|
|
|
this.registeredServices.forEach((service) => {
|
|
|
// Verify that the service contains the appropriate methods and that it can save
|
|
|
- if (service.projectUnloaded) {
|
|
|
+ if (service.canDelete && service.delete && service.canDelete(ev)) {
|
|
|
try {
|
|
|
- service.projectUnloaded();
|
|
|
+ service.delete(ev);
|
|
|
} catch (e) {
|
|
|
EditorUI.showModalError("Extension Error", `Error detected in extension ${service.name}\n ${e}\n ${e.stack}`);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -118,9 +149,11 @@ export class ServiceLocatorType {
|
|
|
|
|
|
constructor() {
|
|
|
this.resourceServices = new ResourceServiceRegistry();
|
|
|
+ this.projectServices = new ProjectServiceRegistry();
|
|
|
}
|
|
|
|
|
|
resourceServices: ResourceServiceRegistry;
|
|
|
+ projectServices: ProjectServiceRegistry;
|
|
|
|
|
|
loadService(service: EditorService) {
|
|
|
service.initialize(this);
|