⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgjs_main.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// NB: some functions could be added or finished in coming version, i.e, window's some methods and// events handling which must conform with HTML or DOM.// #include "mgjs_main.h"#include "mgmessage.h"#include <../misc/htmlattrs.h>#include "mgjs_EventConst.h"#define MGJS_TEXT_BROWSER "Browser"#define TEMPSTRINGMAX 512#define DEBUG_JAVASCRIPT 0extern void SetStatusForBar(char * strStatus);extern void GetStatusForBar(char * strStatus,int length);extern BOOL GUIAPI SetTimer (HWND hWnd, int id, int speed);extern BOOL GUIAPI KillTimer (HWND hWnd, int id);bool mgJsLocateTimer(MGHTMLView* view,int id);bool mgJsFreeAllTimer(MGHTMLView* view);JSBool mgJsSetEvent(JSContext *cx, JSObject *obj, jsval *vp, int EventType);bool mgJsLocateEvent(MGHTMLView* view,int type);bool mgJsFreeCurrentEvent(MGHTMLView* view);bool mgJsFreeAllEvent(MGHTMLView* view);static JSBool GetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool WindowInternalAlert (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalConfirm (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalPrompt (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalScrollTo (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalScrollBy (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalOpen(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalClose(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalClearTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSetTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalBlur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalFocus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalCaptureEvents(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalReleaseEvents(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalRouteEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalBack(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalForward(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalHome(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalStop(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalPrint(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalMoveTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalMoveBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalResizeTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalResizeBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSizeToContent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalGetAttention(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalScroll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalClearInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSetInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalEnableExternalCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalDisableExternalCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSetCursor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalOpenDialog(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalUpdateCommands(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalEscape(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalUnescape(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventTargetAddEventListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventTargetRemoveEventListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventTargetDispatchEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool ViewCSSGetComputedStyle(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowGetSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalDump(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowScrollByPages(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowScrollByLines(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);	enum Window_slots {  WINDOW_DOCUMENT ,  WINDOW_PARENT ,  WINDOW_SCROLLBARS ,  WINDOW_FRAMES ,  WINDOW_NAME ,  WINDOW_SCROLLX ,  WINDOW_SCROLLY ,  WINDOWINTERNAL_WINDOW ,  WINDOWINTERNAL_SELF ,  WINDOWINTERNAL_NAVIGATOR ,  WINDOWINTERNAL_SCREEN ,  WINDOWINTERNAL_HISTORY ,  WINDOWINTERNAL_STATUSBAR ,  WINDOWINTERNAL_DIRECTORIES ,  WINDOWINTERNAL_CLOSED ,  WINDOWINTERNAL_CRYPTO ,  WINDOWINTERNAL_PKCS11 ,  WINDOWINTERNAL_OPENER ,  WINDOWINTERNAL_STATUS ,  WINDOWINTERNAL_DEFAULTSTATUS ,  WINDOWINTERNAL_LOCATION ,  WINDOWINTERNAL_TITLE ,  WINDOWINTERNAL_INNERWIDTH ,  WINDOWINTERNAL_INNERHEIGHT ,  WINDOWINTERNAL_OUTERWIDTH ,  WINDOWINTERNAL_OUTERHEIGHT ,  WINDOWINTERNAL_SCREENX ,  WINDOWINTERNAL_SCREENY ,  WINDOWINTERNAL_PAGEXOFFSET ,  WINDOWINTERNAL_PAGEYOFFSET ,  WINDOWINTERNAL_LENGTH ,  WINDOWEVENTOWNER_ONMOUSEDOWN ,  WINDOWEVENTOWNER_ONMOUSEUP ,  WINDOWEVENTOWNER_ONCLICK ,  WINDOWEVENTOWNER_ONMOUSEOVER ,  WINDOWEVENTOWNER_ONMOUSEOUT ,  WINDOWEVENTOWNER_ONKEYDOWN ,  WINDOWEVENTOWNER_ONKEYUP ,  WINDOWEVENTOWNER_ONKEYPRESS ,  WINDOWEVENTOWNER_ONMOUSEMOVE ,  WINDOWEVENTOWNER_ONFOCUS ,  WINDOWEVENTOWNER_ONBLUR ,  WINDOWEVENTOWNER_ONSUBMIT ,  WINDOWEVENTOWNER_ONRESET ,  WINDOWEVENTOWNER_ONCHANGE ,  WINDOWEVENTOWNER_ONSELECT ,  WINDOWEVENTOWNER_ONLOAD ,  WINDOWEVENTOWNER_ONUNLOAD ,  WINDOWEVENTOWNER_ONCLOSE ,  WINDOWEVENTOWNER_ONABORT ,  WINDOWEVENTOWNER_ONERROR ,  WINDOWEVENTOWNER_ONPAINT ,  WINDOWEVENTOWNER_ONDRAGDROP ,  WINDOWEVENTOWNER_ONRESIZE ,  WINDOWEVENTOWNER_ONSCROLL ,  ABSTRACTVIEW_DOCUMENT ,};static JSBool GetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp){	RECT rc;	HWND hWnd=mgJSGethWnd(cx);	int w,h;	char s[TEMPSTRINGMAX+1];	MGHTMLView *view = mgJSGetView(cx);	DOM::HTMLDocumentImpl *pDoc;	DOM::DOMString ds;	pDoc=mgJSGetDoc(cx);				if (JSVAL_IS_INT(id)) {        switch (JSVAL_TO_INT(id)) {		case WINDOW_DOCUMENT:			*vp=OBJECT_TO_JSVAL(mgJSGetDocumentObj(cx));			break;		case WINDOWINTERNAL_NAVIGATOR:			*vp=OBJECT_TO_JSVAL(mgJSGetNavigatorObj(cx));			break;		case WINDOWINTERNAL_LOCATION:			*vp=OBJECT_TO_JSVAL(mgJSGetLocationObj(cx));			break;        case WINDOWINTERNAL_INNERWIDTH:			GetClientRect (hWnd,&rc);			w=rc.right-rc.left;			*vp=INT_TO_JSVAL(w);            break;        case WINDOWINTERNAL_INNERHEIGHT:			GetClientRect (hWnd,&rc);			h=rc.bottom-rc.top;			*vp=INT_TO_JSVAL(h);			break;		case WINDOWINTERNAL_HISTORY:			*vp=OBJECT_TO_JSVAL(mgJSGetHistoryObj(cx));			break;		case WINDOW_NAME:			*vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,"This is a js name property."));			break;		case WINDOWINTERNAL_STATUS:			GetStatusForBar(s,TEMPSTRINGMAX);			*vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,s));			break;		case WINDOWEVENTOWNER_ONLOAD:			ds = pDoc->body()->getAttribute(ATTR_ONLOAD);			*vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,ds.string()));			break;		case WINDOW_PARENT:			break;		case WINDOW_SCROLLBARS:			break;		case WINDOW_FRAMES:			break;		case WINDOW_SCROLLX:			break;		case WINDOW_SCROLLY:			break;		case WINDOWINTERNAL_WINDOW:			*vp=OBJECT_TO_JSVAL(obj);			break;		case WINDOWINTERNAL_SELF :			*vp=OBJECT_TO_JSVAL(obj);			break;		case  WINDOWINTERNAL_SCREEN :		 	break;		case  WINDOWINTERNAL_STATUSBAR:		 	break;		case  WINDOWINTERNAL_DIRECTORIES:		 	break;		case  WINDOWINTERNAL_CLOSED :		 	break;		case  WINDOWINTERNAL_CRYPTO :			//TODO:		 	break;		case  WINDOWINTERNAL_PKCS11 :			//TODO:		 	break;		case  WINDOWINTERNAL_OPENER :		 	break;		case  WINDOWINTERNAL_DEFAULTSTATUS :			//TODO:		 	break;		case  WINDOWINTERNAL_TITLE :		 	break;		case  WINDOWINTERNAL_OUTERWIDTH :			GetWindowRect (hWnd,&rc);			w=rc.right-rc.left;			*vp=INT_TO_JSVAL(w);			break;		case  WINDOWINTERNAL_OUTERHEIGHT :			GetWindowRect (hWnd,&rc);			h=rc.bottom-rc.top;			*vp=INT_TO_JSVAL(h);			break;		case  WINDOWINTERNAL_SCREENX :			GetClientRect (hWnd,&rc);			w = rc.left;			ClientToScreen( hWnd, &w, &h);			*vp=INT_TO_JSVAL(w);			break;		case  WINDOWINTERNAL_SCREENY :			GetClientRect (hWnd,&rc);			h = rc.top;			ClientToScreen( hWnd, &w, &h);			*vp=INT_TO_JSVAL(h);			break;		case  WINDOWINTERNAL_PAGEXOFFSET :			*vp=INT_TO_JSVAL(view->m_xOffset);			break;		case  WINDOWINTERNAL_PAGEYOFFSET :			*vp=INT_TO_JSVAL(view->m_yOffset);			break;		case  WINDOWINTERNAL_LENGTH :			//TODO:		 	break;		case WINDOWEVENTOWNER_ONMOUSEDOWN:			break;		case WINDOWEVENTOWNER_ONMOUSEUP:			break;		case WINDOWEVENTOWNER_ONCLICK:			break;		case WINDOWEVENTOWNER_ONMOUSEOVER:			break;		case WINDOWEVENTOWNER_ONMOUSEOUT:			break;		case WINDOWEVENTOWNER_ONKEYDOWN:			break;		case WINDOWEVENTOWNER_ONKEYUP:			break;		case WINDOWEVENTOWNER_ONKEYPRESS:			break;		case WINDOWEVENTOWNER_ONMOUSEMOVE:			break;		case WINDOWEVENTOWNER_ONFOCUS:			break;		case WINDOWEVENTOWNER_ONBLUR:			break;		case WINDOWEVENTOWNER_ONSUBMIT:			break;		case WINDOWEVENTOWNER_ONRESET:			break;		case WINDOWEVENTOWNER_ONCHANGE:			break;		case WINDOWEVENTOWNER_ONSELECT:			break;		case WINDOWEVENTOWNER_ONUNLOAD:			break;		case WINDOWEVENTOWNER_ONCLOSE:			break;		case WINDOWEVENTOWNER_ONABORT:			break;		case WINDOWEVENTOWNER_ONERROR:			break;		case WINDOWEVENTOWNER_ONPAINT:			break;		case WINDOWEVENTOWNER_ONDRAGDROP:			break;		case WINDOWEVENTOWNER_ONRESIZE:			break;		case WINDOWEVENTOWNER_ONSCROLL:			break;        }    }    return JS_TRUE;}static JSBool SetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp){	JSString *jss;	// MGHTMLView *view = mgJSGetView(cx);	DOM::HTMLDocumentImpl *pDoc;	DOM::DOMString ds;	pDoc=mgJSGetDoc(cx);	int32 eventType;	char s[TEMPSTRINGMAX+1];	if ((jss = JS_ValueToString (cx,*vp)))		strncpy(s,JS_GetStringBytes (jss),TEMPSTRINGMAX);	else		s[0]=0;	    if (JSVAL_IS_INT(id)) {        switch (JSVAL_TO_INT(id)) {		case WINDOWINTERNAL_STATUS:			SetStatusForBar(s);			break;		case WINDOWEVENTOWNER_ONLOAD:			pDoc->body()->setAttribute(ATTR_ONLOAD,s);			break;		case WINDOW_DOCUMENT:			break;		case WINDOW_PARENT:			break;		case WINDOW_SCROLLBARS:			break;		case WINDOW_FRAMES:			break;		case WINDOW_NAME:			break;		case WINDOW_SCROLLX:			break;		case WINDOW_SCROLLY:			break;#if 0		//readonly property.		case WINDOWINTERNAL_WINDOW:			break;		case WINDOWINTERNAL_SELF :		 	break;		case  WINDOWINTERNAL_NAVIGATOR :		 	break;		case  WINDOWINTERNAL_SCREEN :		 	break;		case  WINDOWINTERNAL_HISTORY :		 	break;		case  WINDOWINTERNAL_STATUSBAR:		 	break;		case  WINDOWINTERNAL_DIRECTORIES:		 	break;		case  WINDOWINTERNAL_CLOSED :		 	break;		case  WINDOWINTERNAL_CRYPTO :		 	break;		case  WINDOWINTERNAL_PKCS11 :		 	break;#endif					case  WINDOWINTERNAL_OPENER :		 	break;		case  WINDOWINTERNAL_DEFAULTSTATUS :		 	break;		case  WINDOWINTERNAL_LOCATION :		 	break;		case  WINDOWINTERNAL_TITLE :		 	break;		case  WINDOWINTERNAL_INNERWIDTH :		 	break;		case  WINDOWINTERNAL_INNERHEIGHT :		 	break;		case  WINDOWINTERNAL_OUTERWIDTH :		 	break;		case  WINDOWINTERNAL_OUTERHEIGHT :		 	break;		case  WINDOWINTERNAL_SCREENX :		 	break;		case  WINDOWINTERNAL_SCREENY :		 	break;		case  WINDOWINTERNAL_PAGEXOFFSET :		 	break;		case  WINDOWINTERNAL_PAGEYOFFSET :		 	break;#if 0		//readonly		case  WINDOWINTERNAL_LENGTH :		 	break;#endif					default:		{		eventType = 0;		switch (JSVAL_TO_INT(id)) {		case WINDOWEVENTOWNER_ONMOUSEDOWN:			eventType = mgjsDOMEvent::MOUSEDOWN;			break;		case WINDOWEVENTOWNER_ONMOUSEUP:			eventType = mgjsDOMEvent::MOUSEUP;			break;		case WINDOWEVENTOWNER_ONCLICK:			eventType = mgjsDOMEvent::CLICK;			break;		case WINDOWEVENTOWNER_ONMOUSEOVER:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -