segonzal / jEdit-CC4401

0 stars 0 forks source link

Base para el framework #52

Closed segonzal closed 9 years ago

segonzal commented 9 years ago

Tal como está ahora, el browser default que trae está implementado en la clase HelpHtmlViewer, el cual extiende HtmlViewer e implementa HelpViewerInterface.

Una vez hecha la clase con el nuevo framework se puede probar manualmente, siguiendo las propiedades del plugin en el menu correspondiente.

segonzal commented 9 years ago

ok, después de algunos intentos fallidos, se me ocurrió usar la clase HtmlViewer. (el plugin permite darle el nombre de la función a la cual llamar) Dejé el nombre de la misma función que HelpHtmlViewer (showInternalHtmlViewer). {No está implementada en HelpHtmlViewer, así que debe heredarla. Como no quiero perder tiempo intentando hacer funcionar eclipse para encontrar desde que clase, voy a prueba y error.}

Bueno, resulta que da un error: "Could not find a suitable method named showInternalHtmlViewer in class htmlviewer.HtmlViewer Note: the method must be static, and accept zero or one String or URL parameter." Me da la impresión que no es necesario que herede de alguna clase. Basta que tenga algún método que acepte cero o un String o URL como parámetro, y darle el nombre de dicho método en plugin options.

Voy a crear una clase dummy que recibirá alguno de estos parámetros y tirará todo a la salida estándar. Si funciona el dummy debe evolucionar entregándole la URL/String al handler(framework)

joseo commented 9 years ago

No sé si entendí bien (tampoco he visto la documentación de lo que estás usando), pero al parecer en la clase htmlviewer.HtmlViewer hay que implementar un método estático (un método "de clase"), llamado showInternalHtmlViewer.

Si fuera así, luego se invocaría de esta forma: htmlviewer.HtmlViewer.showInternalHtmlViewer(...).

segonzal commented 9 years ago

En jEdit vas a Plugin>Plugin Options>HTML Viewer>Choose Browser Seleccionas la caja Class in Classpath Por default tiene: clase: HelpHtmlViewer metodo showInternalHtmlViewer

De esta forma cuando haces "Open current buffer with browser" llama al browser interno por defualt. Para cambiar a otro browser hay que cambiar la clase y el método.

Por lo que he leído hasta el momento, nada impide crear una clase nueva, desconectada del resto de HtmlViewer, i.e. sin heredar ni usar otros elementos. La cual contenga el nuevo browser. Solo basta señalar que esta clase contiene este método estático, que recibe estos parametros.

(Aún no reviso el tema de inscribir el browser en un panel, esto podría requerir herencia desde jEdit/HtmlViewer)

segonzal commented 9 years ago

sigo buscando el método showInternalHtmlViewer, no está en HelpHtmlViewer, ni en HtmlViewer. Sigo buscando entre los antepasados de HelpHtmlViewer.

segonzal commented 9 years ago

usando grep -nr showInternalHtmlViewer no arroja resultados :( la unica aparicion es en el archivo properties: HtmlViewer/HtmlViewer.props:38:htmlviewer.method=showInternalHtmlViewer sigo pensando en como proceder

alopezq commented 9 years ago

yo tampoco lo logro encontrar

segonzal commented 9 years ago

lo regrese al estado default... y ahora no funciona.

joseo commented 9 years ago

En jEdit vas a Plugin>Plugin Options>HTML Viewer>Choose Browser

No me funciona el plugin... parece que hay un problema con la versión de Java que tengo.

alopezq commented 9 years ago

q version teni? a mi me corre con la 1.8 x64 version java oracle (no la openjdk que viene en linux)

joseo commented 9 years ago

Tengo openJDK 1.7, en Linux.

segonzal commented 9 years ago

Subí otra prueba, jEDit soportó una clase simple con un método estático que recibe un string. deje que imprimiera ese string en salida estándar, por consola no apareció nada. Voy a intentar que arroje los resultados a algún archivo, como log.

segonzal commented 9 years ago

Nota: para compilar hay que borrar la carpeta demo sino arroja errores. Creo que se puede excluir en el build.xml

segonzal commented 9 years ago

logre lanzar la url del archivo a la salida de errores!

segonzal commented 9 years ago

Ahora que le he agregado mas funcionalidad a la clase del browser (Test), jEdit no lo soporta.

Could not find a suitable constructor for class: htmlviewer.Test

Note: the class you specified in the options must contain a String, URL or empty constructor.

A pesar de que le he agregado un constructor vacío y un constructor que reciba un string no funciona. Me extraña aún más que la misma clase, sin constructor con el método que solo imprime errores SI FUNCIONA. Alguna idea?

alopezq commented 9 years ago

ojo que cuando uno hace esos cambios también puede influir en HtmlViewer.props.

Aun que por el msj de error me tinca que va por otro lado el problema

segonzal commented 9 years ago

Basta que el método quede así, para lanzar error.

public static final void launchBrowser(String url){
    System.err.println(url);
    Display display = new Display();
}

Creo que no permite crear un nuevo display.

segonzal commented 9 years ago

podría intentar un workarround con observer pattern. Pero eso podria demorar tiempo. y mucho tiempo más integrarlo a la interfaz de jedit.

segonzal commented 9 years ago

Ok, subí una segunda demo, en donde se ve como debió quedar el plugin una vez estuviese embebido. Arroja varios errores a terminal, no son excepciones, y al parecer son problema del framework.

Voy a hacer un último intento de que jEdit llame a esta demo. Si funciona WIN!, el plugin esta terminado, falta solo cambios menores para dejar el browser como default. sino, tenemos una demo que funciona al 100%, (exceptuando los rojos del stderr que son culpa de SWT) Imagenes pronto!

segonzal commented 9 years ago

Como la clase no cumple los misteriosos y no documentados requisitos para agregar un browser, no funciono. Tenemos una demo que funciona al 100%!!

joseo commented 9 years ago

Excelente. :grinning: :+1: