1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
This commit is contained in:
gnosygnu
2014-07-13 23:23:30 -04:00
parent ecbe2918d8
commit bc10cd76b6
316 changed files with 3251 additions and 1652 deletions

View File

@@ -18,7 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.gfui; import gplx.*;
public interface Gxw_html extends GxwElem {
String Html_doc_html();
void Html_doc_html_(String s);
void Html_doc_html_load_by_mem(String html);
void Html_doc_html_load_by_url(String path, String html);
byte Html_doc_html_load_tid(); void Html_doc_html_load_tid_(byte v);
String Html_doc_selected_get_text_or_href();
String Html_doc_selected_get_href_or_text();
String Html_doc_selected_get_src_or_empty();
@@ -44,4 +46,5 @@ public interface Gxw_html extends GxwElem {
String Html_js_eval_script(String script);
void Html_js_cbks_add(String js_func_name, GfoInvkAble invk);
void Html_invk_src_(GfoEvObj v);
void Html_dispose();
}

View File

@@ -0,0 +1,35 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.gfui; import gplx.*;
public class Gxw_html_load_tid_ {
public static final byte Tid_mem = 0, Tid_url = 1;
public static final String Key_mem = "mem", Key_url = "url";
public static String Xto_key(byte v) {
switch (v) {
case Tid_mem: return Key_mem;
case Tid_url: return Key_url;
default: throw Err_.not_implemented_();
}
}
public static byte Xto_tid(String s) {
if (String_.Eq(s, Key_mem)) return Tid_mem;
else if (String_.Eq(s, Key_url)) return Tid_url;
else throw Err_.not_implemented_();
}
public static KeyVal[] Options__list = KeyVal_.Ary(KeyVal_.new_(Key_mem), KeyVal_.new_(Key_url));
}

View File

@@ -19,7 +19,10 @@ package gplx.gfui; import gplx.*;
public class Gfui_html extends GfuiElemBase {
public void Under_html_(Gxw_html v) {under = v;} private Gxw_html under;
public String Html_doc_html() {return under.Html_doc_html();}
public void Html_doc_html_(String s) {under.Html_doc_html_(s);}
public void Html_doc_html_load_by_mem(String html) {under.Html_doc_html_load_by_mem(html);}
public void Html_doc_html_load_by_url(String path, String html) {under.Html_doc_html_load_by_url(path, html);}
public byte Html_doc_html_load_tid() {return under.Html_doc_html_load_tid();}
public void Html_doc_html_load_tid_(byte v) {under.Html_doc_html_load_tid_(v);}
public String Html_doc_selected_get_text_or_href() {return under.Html_doc_selected_get_text_or_href();}
public String Html_doc_selected_get_href_or_text() {return under.Html_doc_selected_get_href_or_text();}
public String Html_doc_selected_get_src_or_empty() {return under.Html_doc_selected_get_src_or_empty();}
@@ -45,8 +48,9 @@ public class Gfui_html extends GfuiElemBase {
public String Html_js_eval_script(String script) {return under.Html_js_eval_script(script);}
public void Html_js_cbks_add(String js_func_name, GfoInvkAble invk) {under.Html_js_cbks_add(js_func_name, invk);}
public void Html_invk_src_(GfoEvObj v) {under.Html_invk_src_(v);}
public void Html_dispose() {under.Html_dispose();}
@Override public GfuiElem Text_(String v) {
this.Html_doc_html_(v);
this.Html_doc_html_load_by_mem(v);
return this;
}
public static Gfui_html kit_(Gfui_kit kit, String key, Gxw_html under, KeyValHash ctorArgs) {

View File

@@ -19,6 +19,7 @@ package gplx.gfui; import gplx.*;
public interface Gfui_mnu_grp extends Gfui_mnu_itm {
String Root_key();
void Itms_clear();
boolean Disposed();
Gfui_mnu_itm Itms_add_btn_cmd (String txt, ImageAdp img, GfoInvkAble invk, String invk_cmd);
Gfui_mnu_itm Itms_add_btn_msg (String txt, ImageAdp img, GfoInvkAble invk, GfoInvkRootWkr root_wkr, GfoMsg msg);
Gfui_mnu_itm Itms_add_chk_msg (String txt, ImageAdp img, GfoInvkAble invk, GfoInvkRootWkr root_wkr, GfoMsg msg_n, GfoMsg msg_y);
@@ -30,6 +31,7 @@ class Gfui_mnu_grp_null implements Gfui_mnu_grp {
public String Uid() {return "";}
public int Tid() {return Gfui_mnu_itm_.Tid_grp;}
public boolean Enabled() {return true;} public void Enabled_(boolean v) {}
public boolean Disposed() {return false;}
public String Text() {return null;} public void Text_(String v) {}
public ImageAdp Img() {return null;} public void Img_(ImageAdp v) {}
public boolean Selected() {return true;} public void Selected_(boolean v) {}

View File

@@ -48,13 +48,19 @@ class Mem_html extends GxwTextMemo_lang implements Gxw_html { public String Htm
else throw Err_.unhandled(atr_key);
return true;
}
public void Html_doc_html_(String s) {
public void Html_doc_html_load_by_mem(String s) {
// this.Core().ForeColor_set(plainText ? ColorAdp_.Black : ColorAdp_.Gray);
s = String_.Replace(s, "\r", "");
s = String_.Replace(s, "\n", "\r\n");
this.TextVal_set(s);
this.SelBgn_set(0);
html_doc_html_load_tid = Gxw_html_load_tid_.Tid_mem;
}
public void Html_doc_html_load_by_url(String path, String html) {
html_doc_html_load_tid = Gxw_html_load_tid_.Tid_url;
}
public byte Html_doc_html_load_tid() {return html_doc_html_load_tid;} private byte html_doc_html_load_tid;
public void Html_doc_html_load_tid_(byte v) {html_doc_html_load_tid = v;}
public String Html_active_atr_get_str(String atrKey, String or) { // NOTE: fuzzy way of finding current href; EX: <a href="a">b</a>
String txt = this.TextVal();
int pos = this.SelBgn();
@@ -115,6 +121,7 @@ class Mem_html extends GxwTextMemo_lang implements Gxw_html { public String Htm
public void Html_js_enabled_(boolean v) {}
public void Html_js_eval_proc(String proc, String... args) {}
public void Html_js_cbks_add(String js_func_name, GfoInvkAble invk) {}
public void Html_dispose() {}
private TxtFindMgr txtFindMgr = new TxtFindMgr();
public Mem_html() {
this.ctor_MsTextBoxMultiline_();

View File

@@ -139,9 +139,11 @@ public class Swt_kit implements Gfui_kit {
KeyVal browser_type = htmlBox_args.FetchOrNull(Cfg_Html_BrowserType);
if (browser_type != null) ctor_args.Add(browser_type);
}
Gfui_html rv = Gfui_html.kit_(this, key, new Swt_html(this, Swt_control_.cast_or_fail(owner), ctor_args), ctor_args);
Swt_html html_control = new Swt_html(this, Swt_control_.cast_or_fail(owner), ctor_args);
Gfui_html rv = Gfui_html.kit_(this, key, html_control, ctor_args);
((Swt_html)rv.UnderElem()).Under_control().addMenuDetectListener(new Swt_lnr__menu_detect(rv));
rv.Owner_(owner);
html_control.Delete_elems_(owner, rv);
return rv;
}
public Gfui_tab_mgr New_tab_mgr(String key, GfuiElem owner, KeyVal... args) {

View File

@@ -0,0 +1,81 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.gfui;
import gplx.*;
import org.eclipse.swt.*;
import org.eclipse.swt.browser.*; import org.eclipse.swt.custom.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*;
public class Swt_app_browser {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "C:\\xowa\\bin\\windows\\xulrunner");
Swt_app_browser_mgr mgr = new Swt_app_browser_mgr(shell);
New_btn(shell, 0, "loa&d", new Swt_app_browser_cmd_load(mgr));
New_btn(shell, 1, "&free", new Swt_app_browser_cmd_free(mgr));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
mgr.Free();
display.dispose();
}
private static Button New_btn(Shell shell, int idx, String text, SelectionListener lnr) {
Button rv = new Button(shell, SWT.BORDER);
rv.setText(text);
rv.setBounds(idx * 80, 0, 80, 40);
rv.addSelectionListener(lnr);
return rv;
}
}
class Swt_app_browser_mgr {
private Shell shell; private Browser browser;
public Swt_app_browser_mgr(Shell shell) {this.shell = shell;}
public void Load() {
// this.Free();
if (browser == null) {
browser = new Browser(shell, SWT.MOZILLA);
Point size = shell.getSize();
browser.setBounds(0, 40, size.x, size.y - 40);
}
// browser.setUrl("about:blank");
browser.setUrl("file:///C:/temp.html");
// browser.setText(Io_mgr._.LoadFilStr("C:\\temp.html"));
}
public void Free() {
if (browser != null) {
// browser.setUrl("about:blank");
browser.dispose();
}
Env_.GarbageCollect();
browser = null;
}
}
class Swt_app_browser_cmd_load implements SelectionListener {
private Swt_app_browser_mgr mgr;
public Swt_app_browser_cmd_load(Swt_app_browser_mgr mgr) {this.mgr = mgr;}
public void widgetSelected(SelectionEvent event) {mgr.Load();}
public void widgetDefaultSelected(SelectionEvent event) {}
}
class Swt_app_browser_cmd_free implements SelectionListener {
private Swt_app_browser_mgr mgr;
public Swt_app_browser_cmd_free(Swt_app_browser_mgr mgr) {this.mgr = mgr;}
public void widgetSelected(SelectionEvent event) {mgr.Free();}
public void widgetDefaultSelected(SelectionEvent event) {}
}

View File

@@ -26,7 +26,7 @@ import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class Swt_demo_main {
public class Swt_app_main {
public static void main(String[] args) {
// Drag_drop();
// List_fonts();

View File

@@ -16,6 +16,8 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.gfui;
import java.security.acl.Owner;
import gplx.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.*;
@@ -40,14 +42,24 @@ class Swt_html implements Gxw_html, Swt_control, FocusListener {
browser.addStatusTextListener(lnr_status);
browser.addFocusListener(this);
browser.addTitleListener(new Swt_html_lnr_title(this));
// browser.addTraverseListener(new Swt_html_lnr_Traverse(this));
// browser.addTraverseListener(new Swt_html_lnr_Traverse(this));
}
public Swt_kit Kit() {return kit;} private Swt_kit kit;
@Override public Control Under_control() {return browser;} private Browser browser;
@Override public Composite Under_composite() {return null;}
@Override public Control Under_menu_control() {return browser;}
public String Html_doc_html() {return Eval_script_as_str(kit.Html_cfg().Doc_html());}
public void Html_doc_html_(String s) {browser.setText(s);} // DBG: Io_mgr._.SaveFilStr(Io_url_.new_fil_("C:\\temp.txt"), s)
public void Html_doc_html_load_by_mem(String html) {
html_doc_html_load_tid = Gxw_html_load_tid_.Tid_mem;
browser.setText(html); // DBG: Io_mgr._.SaveFilStr(Io_url_.new_fil_("C:\\temp.txt"), s)
}
public void Html_doc_html_load_by_url(String path, String html) {
html_doc_html_load_tid = Gxw_html_load_tid_.Tid_url;
Io_mgr._.SaveFilStr(path, html);
browser.setUrl(path);
}
public byte Html_doc_html_load_tid() {return html_doc_html_load_tid;} private byte html_doc_html_load_tid;
public void Html_doc_html_load_tid_(byte v) {html_doc_html_load_tid = v;}
public String Html_doc_selected_get_text_or_href() {return Eval_script_as_str(kit.Html_cfg().Doc_selected_get_text_or_href());}
public String Html_doc_selected_get_href_or_text() {return Eval_script_as_str(kit.Html_cfg().Doc_selected_get_href_or_text());}
public String Html_doc_selected_get_src_or_empty() {return Eval_script_as_str(kit.Html_cfg().Doc_selected_get_src_or_empty());}
@@ -102,6 +114,13 @@ class Swt_html implements Gxw_html, Swt_control, FocusListener {
return true;
} private String prv_find_str = ""; private int prv_find_bgn;
public void Html_invk_src_(GfoEvObj invk) {lnr_location.Host_set(invk); lnr_status.Host_set(invk);}
public void Html_dispose() {
browser.dispose();
delete_owner.SubElems().DelOrFail(delete_cur); // NOTE: must delete cur from owner, else new tab will fail after closing one; DATE:2014-07-09
Env_.GarbageCollect();
}
private GfuiElem delete_owner, delete_cur;
public void Delete_elems_(GfuiElem delete_owner, GfuiElem delete_cur) {this.delete_owner = delete_owner; this.delete_cur = delete_cur;} // HACK: set owner / cur so delete can work;
private String Escape_quotes(String v) {return String_.Replace(String_.Replace(v, "'", "\\'"), "\"", "\\\"");}
@Override public GxwCore_base Core() {return core;} private GxwCore_base core;
@Override public GxwCbkHost Host() {return host;} @Override public void Host_set(GxwCbkHost host) {this.host = host;} GxwCbkHost host;
@@ -208,6 +227,9 @@ class Swt_html_lnr_location implements LocationListener {
void Pub_evt(LocationEvent arg, String evt) {
String location = arg.location;
if (String_.Eq(location, "about:blank")) return; // location changing event fires once when page is loaded; ignore
if ( html_box.Html_doc_html_load_tid() == Gxw_html_load_tid_.Tid_url // navigating to file://page.html will fire location event; ignore if url mode
&& String_.HasAtEnd(location, ".html"))
return;
try {
GfoEvMgr_.PubObj(host, evt, "v", location);
arg.doit = false; // cancel navigation event, else there will be an error when trying to go to invalid location

View File

@@ -31,12 +31,13 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
class Swt_popup_grp implements Gfui_mnu_grp {
public class Swt_popup_grp implements Gfui_mnu_grp {
private Decorations owner_win; private Control owner_box; private boolean menu_is_bar = false;
Swt_popup_grp(String root_key){this.root_key = root_key;}
@Override public int Tid() {return Gfui_mnu_itm_.Tid_grp;}
@Override public String Uid() {return uid;} private String uid = Gfui_mnu_itm_.Gen_uid();
@Override public boolean Enabled() {return menu.getEnabled();} @Override public void Enabled_(boolean v) {menu.setEnabled(v);}
@Override public boolean Disposed() {return menu.isDisposed();}
@Override public String Text() {return menu_item.getText();} @Override public void Text_(String v) {menu_item.setText(v);}
@Override public ImageAdp Img() {return img;} @Override public void Img_(ImageAdp v) {
img = v;