mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v1.7.2.1
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
35
150_gfui/src_300_gxw/gplx/gfui/Gxw_html_load_tid_.java
Normal file
35
150_gfui/src_300_gxw/gplx/gfui/Gxw_html_load_tid_.java
Normal 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));
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {}
|
||||
|
||||
@@ -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_();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
81
150_gfui/xtn/gplx/gfui/Swt_app_browser.java
Normal file
81
150_gfui/xtn/gplx/gfui/Swt_app_browser.java
Normal 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) {}
|
||||
}
|
||||
@@ -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();
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user