package com.yoursway.ide.application.controllers.mainwindow;
import static com.yoursway.utils.instrusive.IntrusiveMaps.newIntrusiveHashMap;
import java.awt.FileDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import com.yoursway.ide.application.controllers.AbstractController;
import com.yoursway.ide.application.controllers.Context;
import com.yoursway.ide.application.controllers.EditorRegistry;
import com.yoursway.ide.application.controllers.ViewRegistry2;
import com.yoursway.ide.application.model.Document;
import com.yoursway.ide.application.model.DocumentAdditionReason;
import com.yoursway.ide.application.model.Project;
import com.yoursway.ide.application.model.ProjectListener;
import com.yoursway.ide.application.view.impl.ApplicationCommands;
import com.yoursway.ide.application.view.impl.commands.Command;
import com.yoursway.ide.application.view.impl.commands.Handler;
import com.yoursway.ide.application.view.mainwindow.MainWindow;
import com.yoursway.ide.application.view.mainwindow.MainWindowCallback;
import com.yoursway.ide.application.view.mainwindow.MainWindowFactory;
import com.yoursway.utils.instrusive.IntrusiveMap;
public class MainWindowController extends AbstractController implements MainWindowCallback, ProjectListener {
private MainWindow window;
private MainWindowModelImpl windowModel;
private IntrusiveMap<Document, DocumentController> docsToControllers = newIntrusiveHashMap(DocumentController.GET_DOCUMENT);
private final Context context;
private final Project project;
private final EditorRegistry editorRegistry;
public MainWindowController(Project project, MainWindowFactory presentation, Context context,
ViewRegistry2 viewRegistry, EditorRegistry editorRegistry) {
if (project == null)
throw new NullPointerException("project is null");
if (presentation == null)
throw new NullPointerException("presentation is null");
if (context == null)
throw new NullPointerException("context is null");
if (viewRegistry == null)
throw new NullPointerException("viewRegistry is null");
if (editorRegistry == null)
throw new NullPointerException("editorRegistry is null");
this.project = project;
this.context = new Context(this, context);
this.windowModel = new MainWindowModelImpl();
this.editorRegistry = editorRegistry;
windowModel.projectLocation.setValue(project.getLocation());
windowModel.projectType.setValue(project.getType());
this.window = presentation.createWindow(windowModel, this);
project.addListener(this);
viewRegistry.implement(project, window);
hook();
window.open();
}
private void hook() {
context.addHandler(new ApplicationCommands.NewDocumentCommand(), new Handler() {
public boolean run(Command command) {
// MessageDialog.openError(null, "", "Creating document not implemented yet");
project.createDocument();
return true;
}
});
context.addHandler(new ApplicationCommands.CloseProjectCommand(), new Handler() {
public boolean run(Command command) {
project.close();
return true;
}
});
}
public void documentAdded(Document document, DocumentAdditionReason reason) {
DocumentController controller = new DocumentController(document, window, editorRegistry);
docsToControllers.add(controller);
}
public void documentAlreadyOpen(Document document) {
DocumentController controller = docsToControllers.get(document);
controller.activateEditor();
}
public void activated() {
context.setActive(true);
}
public void deactivated() {
context.setActive(false);
}
public void closed() {
window.forceClose();
}
public void windowDisposed() {
dispose();
}
public void execute(Command command) {
context.execute(command);
}
}