package com.yoursway.ide.editors.text;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import net.sf.colorer.ParserFactory;
import net.sf.colorer.eclipse.ColorerPlugin;
import net.sf.colorer.swt.ColorManager;
import net.sf.colorer.swt.TextColorer;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.internal.databinding.provisional.swt.ControlUpdater;
import org.eclipse.jface.text.Document;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.MessageBox;
import com.yoursway.completion.CompletionProposalsProvider;
import com.yoursway.completion.demo.DictionaryCompletion;
import com.yoursway.completion.gui.CompletionController;
import com.yoursway.ide.application.view.mainwindow.EditorWindow;
public class DocumentContentWindowImpl implements DocumentContentWindow {
private final DocumentContentWindowModel model;
private final DocumentContentWindowCallback callback;
private Composite composite;
// private SourceViewer sourceViewer;
private Document document;
private StyledText text;
private TextColorer textColorer;
public DocumentContentWindowImpl(DocumentContentWindowModel model,
DocumentContentWindowCallback callback, EditorWindow editor) {
if (model == null)
throw new NullPointerException("model is null");
if (callback == null)
throw new NullPointerException("callback is null");
if (editor == null)
throw new NullPointerException("editor is null");
this.model = model;
this.callback = callback;
composite = editor.composite();
createWidgets();
composite.getParent().layout();
}
private void createWidgets() {
composite.setLayout(new FillLayout());
// sourceViewer = new SourceViewer(composite, null, null, false, SWT.NONE);
// document = new Document();
// sourceViewer.setDocument(document);
text = new StyledText (composite, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
GridData spec = new GridData();
spec.horizontalAlignment = GridData.FILL;
spec.grabExcessHorizontalSpace = true;
spec.verticalAlignment = GridData.FILL;
spec.grabExcessVerticalSpace = true;
text.setLayoutData(spec);
text.setFont(new Font(composite.getDisplay(), "Monaco", 11, SWT.NORMAL));
ParserFactory pf = ColorerPlugin.getDefault().getParserFactory();
textColorer = new TextColorer(pf, new ColorManager());
textColorer.attach(text);
textColorer.setCross(true, true);
textColorer.setRegionMapper("default", true);
text.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e) {
try {
FileWriter fileWriter = new FileWriter(model.file().getValue());
try {
fileWriter.write(text.getText());
} catch (IOException e1) {
MessageDialog.openError(null, "Great news!", "Oops #28...");
e1.printStackTrace();
} finally {
fileWriter.close();
}
} catch (IOException e2) {
MessageDialog.openError(null, "Great news!", "Oops #23...");
e2.printStackTrace();
}
}
});
new ControlUpdater(text) {
protected void updateControl() {
File file = model.file().getValue();
if (file == null)
throw new NullPointerException("file is null");
String name = file.getName();
if (name == null)
throw new NullPointerException("name is null");
textColorer.chooseFileType(name);
CompletionProposalsProvider proposalsProvider;
if(name.toLowerCase().endsWith(".py")){
proposalsProvider = new PythonCompletion(model.document());
}else{
proposalsProvider = new DictionaryCompletion();
}
new CompletionController(text, proposalsProvider);
String data = model.data().getValue();
text.setText(data);
composite.layout();
}
};
}
}