mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v1.9.3.1
This commit is contained in:
@@ -41,15 +41,18 @@ import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.omg.PortableServer.THREAD_POLICY_ID;
|
||||
public class Swt_kit implements Gfui_kit {
|
||||
private Shell shell;
|
||||
private String xulRunnerPath = null;
|
||||
private KeyValHash ctor_args = KeyValHash.new_(); private HashAdp kit_args = HashAdp_.new_();
|
||||
private KeyValHash ctor_args = KeyValHash.new_(); private HashAdp kit_args = HashAdp_.new_(); private Swt_msg_wkr_stop msg_wkr_stop;
|
||||
private KeyValHash nullArgs = KeyValHash.new_();
|
||||
public byte Tid() {return Gfui_kit_.Swt_tid;}
|
||||
public String Key() {return "swt";}
|
||||
Display Swt_display() {return display;} private Display display;
|
||||
public Gfui_clipboard Clipboard() {return clipboard;} private Swt_clipboard clipboard;
|
||||
public Display Swt_display() {return display;} private Display display;
|
||||
public boolean Mode_is_shutdown() {return mode_is_shutdown;} private boolean mode_is_shutdown = false;
|
||||
public boolean Mode_is_shutdown() {return mode_is_shutdown;} public void Mode_is_shutdown_y_() {mode_is_shutdown = true;} private boolean mode_is_shutdown = false;
|
||||
public GfoInvkAbleCmd Kit_term_cbk() {return term_cbk;} public void Kit_term_cbk_(GfoInvkAbleCmd v) {this.term_cbk = v;} private GfoInvkAbleCmd term_cbk = GfoInvkAbleCmd.Null;
|
||||
public Gfui_html_cfg Html_cfg() {return html_cfg;} private Gfui_html_cfg html_cfg = new Gfui_html_cfg();
|
||||
public void Cfg_set(String type, String key, Object val) {
|
||||
if (String_.Eq(type, Gfui_kit_.Cfg_HtmlBox)) {
|
||||
@@ -68,35 +71,32 @@ public class Swt_kit implements Gfui_kit {
|
||||
public boolean Kit_init_done() {return kit_init_done;} private boolean kit_init_done;
|
||||
public void Kit_init(Gfo_usr_dlg gui_wtr) {
|
||||
this.gui_wtr = gui_wtr;
|
||||
usrMsgWkr_Stop = new Swt_UsrMsgWkr_Stop(this, gui_wtr);
|
||||
msg_wkr_stop = new Swt_msg_wkr_stop(this, gui_wtr);
|
||||
display = new Display();
|
||||
UsrDlg_._.Reg(UsrMsgWkr_.Type_Warn, GfoConsoleWin._);
|
||||
UsrDlg_._.Reg(UsrMsgWkr_.Type_Stop, usrMsgWkr_Stop);
|
||||
clipboard = new Swt_clipboard(display);
|
||||
UsrDlg_._.Reg(UsrMsgWkr_.Type_Warn, GfoConsoleWin._);
|
||||
UsrDlg_._.Reg(UsrMsgWkr_.Type_Stop, msg_wkr_stop);
|
||||
if (xulRunnerPath != null) System.setProperty("org.eclipse.swt.browser.XULRunnerPath", xulRunnerPath);
|
||||
kit_init_done = true;
|
||||
gui_wtr.Log_many("", "", "swt.kit.init.done");
|
||||
} private Gfo_usr_dlg gui_wtr;
|
||||
public void Kit_term_cbk_(GfoInvkAbleCmd v) {this.term_cbk = v;} GfoInvkAbleCmd term_cbk = GfoInvkAbleCmd.Null;
|
||||
public void Kit_run() {
|
||||
shell.addListener(SWT.Close, new Swt_lnr_shell_close(this));
|
||||
shell.addListener(SWT.Close, new Swt_shell_close_lnr(this));
|
||||
shell.open();
|
||||
Cursor cursor = new Cursor(display, SWT.CURSOR_ARROW);
|
||||
shell.setCursor(cursor); // set cursor to hand else cursor defaults to Hourglass until mouse is moved; DATE: 2014-01-31
|
||||
while (!shell.isDisposed()) {
|
||||
if (!display.readAndDispatch())
|
||||
display.sleep();
|
||||
}
|
||||
}
|
||||
gui_wtr.Log_many("", "", "swt.kit.term:bgn");
|
||||
cursor.dispose(); gui_wtr.Log_many("", "", "swt.kit.term:cursor");
|
||||
Kit_term();
|
||||
}
|
||||
public void Kit_term() {
|
||||
mode_is_shutdown = true; // NOTE: must mark kit as shutting down, else writing to status.bar will create stack overflow exception; DATE:2014-05-05
|
||||
usrMsgWkr_Stop.Rls(); gui_wtr.Log_many("", "", "swt.kit.term:usrMsgWkr");
|
||||
clipboard.Rls(); gui_wtr.Log_many("", "", "swt.kit.term:clipboard");
|
||||
display.dispose(); gui_wtr.Log_many("", "", "swt.kit.term:display");
|
||||
} private Swt_UsrMsgWkr_Stop usrMsgWkr_Stop;
|
||||
msg_wkr_stop.Rls(); gui_wtr.Log_many("", "", "swt.kit.term:usrMsgWkr");
|
||||
shell.close();
|
||||
}
|
||||
public boolean Ask_yes_no(String grp_key, String msg_key, String fmt, Object... args) {
|
||||
Swt_dlg_msg dlg = (Swt_dlg_msg)New_dlg_msg(ask_fmtr.Bld_str_many(ask_bfr, fmt, args)).Init_btns_(Gfui_dlg_msg_.Btn_yes, Gfui_dlg_msg_.Btn_no).Init_ico_(Gfui_dlg_msg_.Ico_question);
|
||||
display.syncExec(dlg);
|
||||
@@ -124,9 +124,8 @@ public class Swt_kit implements Gfui_kit {
|
||||
this.shell = win.UnderShell();
|
||||
shell.setLayout(null);
|
||||
GfuiWin rv = GfuiWin_.kit_(this, key, win, nullArgs);
|
||||
main_win = rv;
|
||||
return rv;
|
||||
} Shell shell; GfuiWin main_win;
|
||||
}
|
||||
public GfuiBtn New_btn(String key, GfuiElem owner, KeyVal... args) {
|
||||
GfuiBtn rv = GfuiBtn_.kit_(this, key, new Swt_btn_no_border(Swt_control_.cast_or_fail(owner), ctor_args), ctor_args);
|
||||
owner.SubElems().Add(rv);
|
||||
@@ -241,17 +240,18 @@ public class Swt_kit implements Gfui_kit {
|
||||
control.setFont(rv);
|
||||
}
|
||||
}
|
||||
class Swt_lnr_shell_close implements Listener {
|
||||
public Swt_lnr_shell_close(Swt_kit kit) {this.kit = kit;} private Swt_kit kit;
|
||||
class Swt_shell_close_lnr implements Listener {
|
||||
public Swt_shell_close_lnr(Swt_kit kit) {this.kit = kit;} private Swt_kit kit;
|
||||
@Override public void handleEvent(Event event) {
|
||||
if (kit.term_cbk.Cmd() == null) return; // close_cmd not defined
|
||||
boolean rslt = Bool_.cast_(kit.term_cbk.Invk());
|
||||
if (!rslt)
|
||||
event.doit = false;
|
||||
kit.Mode_is_shutdown_y_(); // NOTE: must mark kit as shutting down, else writing to status_bar will create stack overflow; DATE:2014-05-05
|
||||
GfoInvkAbleCmd term_cbk = kit.Kit_term_cbk();
|
||||
if (term_cbk.Cmd() == null) return; // term_cbk not defined; exit
|
||||
boolean rslt = Bool_.cast_(term_cbk.Invk()); // term_cbk defined; call it
|
||||
if (!rslt) event.doit = false; // term_cbk canceled term; stop close
|
||||
}
|
||||
}
|
||||
class Swt_UsrMsgWkr_Stop implements UsrMsgWkr, RlsAble {
|
||||
public Swt_UsrMsgWkr_Stop(Swt_kit kit, Gfo_usr_dlg gui_wtr) {this.kit = kit; this.gui_wtr = gui_wtr;} Swt_kit kit; Gfo_usr_dlg gui_wtr;
|
||||
class Swt_msg_wkr_stop implements UsrMsgWkr, RlsAble {
|
||||
public Swt_msg_wkr_stop(Swt_kit kit, Gfo_usr_dlg gui_wtr) {this.kit = kit; this.gui_wtr = gui_wtr;} private Swt_kit kit; private Gfo_usr_dlg gui_wtr;
|
||||
@Override public void Rls() {this.kit = null;}
|
||||
public void ExecUsrMsg(int type, UsrMsg umsg) {
|
||||
String msg = umsg.XtoStr();
|
||||
|
||||
@@ -19,6 +19,7 @@ package gplx.gfui;
|
||||
import java.security.acl.Owner;
|
||||
|
||||
import gplx.*;
|
||||
import gplx.threads.ThreadAdp_;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.browser.*;
|
||||
import org.eclipse.swt.events.*;
|
||||
@@ -83,7 +84,14 @@ class Swt_html implements Gxw_html, Swt_control, FocusListener {
|
||||
public String Html_js_eval_script(String script) {return Eval_script_as_str(script);}
|
||||
public boolean Html_elem_img_update(String elem_id, String elem_src, int elem_width, int elem_height) {
|
||||
elem_src = Escape_quotes(elem_src);
|
||||
return Eval_script_as_bool(kit.Html_cfg().Elem_img_update(elem_id, elem_src, elem_width, elem_height));
|
||||
int count = 0;
|
||||
while (count < 5) {
|
||||
boolean rv = Eval_script_as_bool(kit.Html_cfg().Elem_img_update(elem_id, elem_src, elem_width, elem_height));
|
||||
if (rv) return rv;
|
||||
ThreadAdp_.Sleep(100);
|
||||
count++;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public String Html_active_atr_get_str(String atr_key, String or) {
|
||||
Object rv_obj = Eval_script(kit.Html_cfg().Active_atr_get_str(atr_key));
|
||||
|
||||
@@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.gfui;
|
||||
import gplx.*;
|
||||
import gplx.threads.ThreadAdp_;
|
||||
|
||||
import org.eclipse.swt.*;
|
||||
import org.eclipse.swt.custom.*;
|
||||
@@ -25,7 +26,8 @@ import org.eclipse.swt.graphics.*;
|
||||
import org.eclipse.swt.layout.*;
|
||||
import org.eclipse.swt.widgets.*;
|
||||
public class Swt_tab_mgr implements Gxw_tab_mgr, Swt_control, FocusListener, GfoEvMgrOwner {
|
||||
private GfuiInvkCmd cmd_async; // NOTE: async needed for some actions like responding to key_down and calling .setSelection; else app hangs; DATE:2014-04-30
|
||||
private GfuiInvkCmd cmd_sync;
|
||||
// private GfuiInvkCmd cmd_async; // NOTE: async needed for some actions like responding to key_down and calling .setSelection; else app hangs; DATE:2014-04-30
|
||||
public Swt_tab_mgr(Swt_kit kit, Swt_control owner_control, KeyValHash ctorArgs) {
|
||||
this.kit = kit;
|
||||
tab_folder = new CTabFolder(owner_control.Under_composite(), SWT.BORDER);
|
||||
@@ -38,7 +40,8 @@ public class Swt_tab_mgr implements Gxw_tab_mgr, Swt_control, FocusListener, Gfo
|
||||
new Swt_tab_mgr_lnr_drag_drop(this, tab_folder);
|
||||
tab_folder.addCTabFolder2Listener(new Swt_tab_mgr_lnr_close(this));
|
||||
core = new Swt_core_cmds(tab_folder);
|
||||
cmd_async = kit.New_cmd_async(this);
|
||||
// cmd_async = kit.New_cmd_async(this);
|
||||
cmd_sync = kit.New_cmd_sync(this);
|
||||
}
|
||||
public Swt_kit Kit() {return kit;} private Swt_kit kit;
|
||||
public CTabFolder Under_ctabFolder() {return tab_folder;}
|
||||
@@ -82,15 +85,15 @@ public class Swt_tab_mgr implements Gxw_tab_mgr, Swt_control, FocusListener, Gfo
|
||||
CTabItem itm = tab_folder.getItems()[i];
|
||||
Gfui_tab_itm_data tab_data = Get_tab_data(itm);
|
||||
CTabItem next_tab = Tabs_select_after_closing_itm(tab_data); // NOTE: must calc next_tab before calling Pub_tab_closed; latter will recalc idx
|
||||
Pub_tab_closed(tab_data.Key()); // NOTE: dispose does not call event for .close; must manually raise event;
|
||||
this.Tabs_select_by_itm(next_tab);
|
||||
this.Tabs_select_by_itm(next_tab); // NOTE: select tab before closing; DATE:2014-09-10
|
||||
Pub_tab_closed(tab_data.Key()); // NOTE: dispose does not call event for .close; must manually raise event;
|
||||
itm.dispose();
|
||||
}
|
||||
@Override public void Tabs_select_by_idx(int i) {
|
||||
if (i == Gfui_tab_itm_data.Idx_null) return; // 0 tabs; return;
|
||||
msg_tabs_select_by_idx_swt.Clear();
|
||||
msg_tabs_select_by_idx_swt.Add("v", i);
|
||||
cmd_async.Invk(GfsCtx._, 0, Invk_tabs_select_by_idx_swt, msg_tabs_select_by_idx_swt);
|
||||
cmd_sync.Invk(GfsCtx._, 0, Invk_tabs_select_by_idx_swt, msg_tabs_select_by_idx_swt);
|
||||
} private GfoMsg msg_tabs_select_by_idx_swt = GfoMsg_.new_cast_(Invk_tabs_select_by_idx_swt);
|
||||
@Override public void Tabs_switch(int src, int trg) {Tabs_switch(tab_folder.getItem(src), tab_folder.getItem(trg));}
|
||||
public boolean Tabs_switch(CTabItem src_tab_itm, CTabItem trg_tab_itm) {
|
||||
@@ -117,7 +120,7 @@ public class Swt_tab_mgr implements Gxw_tab_mgr, Swt_control, FocusListener, Gfo
|
||||
if (itm == null) return; // 0 tabs; return;
|
||||
msg_tabs_select_by_itm_swt.Clear();
|
||||
msg_tabs_select_by_itm_swt.Add("v", itm);
|
||||
cmd_async.Invk(GfsCtx._, 0, Invk_tabs_select_by_itm_swt, msg_tabs_select_by_itm_swt);
|
||||
cmd_sync.Invk(GfsCtx._, 0, Invk_tabs_select_by_itm_swt, msg_tabs_select_by_itm_swt);
|
||||
} private GfoMsg msg_tabs_select_by_itm_swt = GfoMsg_.new_cast_(Invk_tabs_select_by_itm_swt);
|
||||
private void Tabs_select_by_idx_swt(int idx) {
|
||||
tab_folder.setSelection(idx);
|
||||
|
||||
Reference in New Issue
Block a user