Ejemplo n.º 1
0
void TestOpenDocument( void )
{
    Err             err;
    DocumentInfo    docInfo;

    OS_Init();
    ReadPrefs();
    SetStandardFunctions();

    DeleteMetaDocument( TEST_DOCUMENT, 0 );

    StrCopy( docInfo.name, TEST_DOCUMENT );
    docInfo.cardNo      = 0;
    docInfo.size        = 550;
    docInfo.created     = -1139389298;
    docInfo.attributes  = 512;
    docInfo.categories  = 1;
    docInfo.location    = 0;
    docInfo.active      = true;
    docInfo.timestamp   = 0;
    docInfo.volumeRef   = 0;
    docInfo.numRecords  = 0;

    err = OpenDocument( &docInfo );
    ASSERT_MSG( "UnitTest.pdb must be installed", err == errNone );

    CloseDocument();
    OS_Release();
}
Ejemplo n.º 2
0
OP_STATUS OpFolderListing::EndFolderListing()
{
	// FIXME: OOM - not reported, not checked
	if (m_list_open)
	{
		m_url.WriteDocumentData(URL::KNormal, UNI_L("</table>\n"));
	}
	return CloseDocument();
}
Ejemplo n.º 3
0
void CloseTestDocument
    (
    Char* name
    )
{
    DeleteMetaDocument( name, 0 );
    CloseDocument();
    OS_Release();
}
Ejemplo n.º 4
0
void DocRoot::OnCloseDocument()
  {
  if (bIsOpen)
    {
    gs_pCmd->ProcessAStr("\x1b"); //Ensure there are no half complete commands
    gs_pCmd->ProcessAStr("\x1b"); //Ensure there are no half complete commands, call more than once!
  
    //KGA : 7/5/96 : document sometimes not active ??? causes cmd to go to wrong document/window!!!
    if (pFirstDoc!=this)
      OnActivate(True); 
    gs_pCmd->ProcessAStr("\x1b"); //Ensure there are no half complete commands, call more than once!
    //if (gs_pPrj->pPrjDoc)
    //  AfxMessageBox("Are you sure you want to remove the document from the project?");
    //gs_pCmd->ProcessAStr("CLOSE DOCUMENT \r");
    CloseDocument();
    }
  }
Ejemplo n.º 5
0
void CDocumentPreview::NewDocPreview(LPCSTR pszFileName, LPCSTR pszFriendlyName /*=NULL*/)
{
	// Get rid of any existing preview.
	ErasePreview();

	// Close any existing document.
	if (m_pDoc != NULL)
	{
		CloseDocument();
	}

	// Open the new document.
	CString strName = GetGlobalPathManager()->LocatePath(pszFileName);
	m_pDoc = GET_PMWAPP()->OpenHiddenDocument(strName);
	m_fCloseDoc = TRUE;
	m_fForceToFront = TRUE;
	m_fEncloseObjects = FALSE;
	SetDescription(pszFileName, pszFriendlyName);
	SizeDocPreview();
}
Ejemplo n.º 6
0
OP_STATUS OperaSpeedDial::GenerateData()
{
	RETURN_IF_ERROR(OpenDocument(Str::S_SPEED_DIAL, PrefsCollectionFiles::StyleSpeedDialFile));

	// Localized strings
	// FIXME!! Actually turn these into localized strings
	OpString add_text, enter_address_text, no_thumbnail_text;
	RETURN_IF_ERROR(add_text.Set(UNI_L("Click to add a Web page")));
	RETURN_IF_ERROR(enter_address_text.Set(UNI_L("Enter Web address here")));
	RETURN_IF_ERROR(no_thumbnail_text.Set(UNI_L("Failed to generate thumbnail")));

	OpString line;

	// Scripts
	RETURN_IF_ERROR(line.Append("<script type=\"text/javascript\">\n"));

#if defined SPEEDDIAL_DRAGNDROP || defined SPEEDDIAL_CONTEXT_MENU
	RETURN_IF_ERROR(line.Append(
		"function mc(ev) {\n"
		" return {\n"
		"  x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,\n"
		"  y:ev.clientY + document.body.scrollTop - document.body.clientTop\n"
		" }\n"
		"}\n"
		));
#endif // defined SPEEDDIAL_DRAGNDROP || defined SPEEDDIAL_CONTEXT_MENU

#ifdef SPEEDDIAL_DRAGNDROP
	RETURN_IF_ERROR(line.Append(
		"var dragObject, dragIndex, dragOffset;\n"

		"function drag(ev, obj) {\n"
		" document.body.onmousedown=function(){return false};\n"		// Disable selection while dragging
		" dragIndex = parseInt(obj.id[1]);\n"
		" var dragSource = document.getElementsByClassName('thumbnail-cont')[dragIndex];\n"
		// Get the drag offset
		" var objPos    = pos(dragSource);\n"
		" var mousePos  = mc(ev);\n"
		" dragOffset =  {x:mousePos.x - objPos.x, y:mousePos.y - objPos.y};\n"
		// Set up the drag object
		" dragObject = dragSource.cloneNode(true);\n"
		" dragObject.className = 'drag';\n"
		" dragObject.style.position = 'absolute';\n"
		" dragObject.style.margin = 0;\n"
		" dragObject.style.display = 'none';\n"
		" document.body.appendChild(dragObject);\n"
		"}\n"

		"function drop(index) {\n"
		" if (dragObject) {\n"
		"  document.body.onmousedown=function(){return true};\n"		// Enable text selection again
		"  opera.swapSpeedDials(dragIndex, index);\n"
		" }\n"
		"}\n"

		// OnMouseMove; if we have a dragobject, move it to the mouse pointer
		"document.onmousemove = function(ev) {\n"
		" if (dragObject) {\n"
		"  var mousePos = mc(ev)\n"
		"  dragObject.style.left = (mousePos.x - dragOffset.x) + 'px';\n"
		"  dragObject.style.top  = (mousePos.y - dragOffset.y) + 'px';\n"
		"  dragObject.style.display = 'block';\n"
		" }\n"
		" return true;\n"
		"}\n"

		// OnMouseUp; drop drag object
		"document.onmouseup = function(ev) {\n"
		" if (dragObject) {\n"
		"  var mousePos = mc(ev);\n"
		"  var sds = document.getElementsByClassName('spdial');\n"
		"  for (var i=0; i<sds.length; i++) {\n"
		"   var targPos = pos(sds[i]);\n"
		"   var w = parseInt(sds[i].offsetWidth);\n"
		"   var h = parseInt(sds[i].offsetHeight);\n"
		"	if ((mousePos.x >= targPos.x) && (mousePos.x <= (targPos.x + w)) && (mousePos.y >= targPos.y) && (mousePos.y <= (targPos.y + h)))\n"
		"    drop(i);\n"
		"  }\n"
		"  document.body.removeChild(dragObject);\n"
		"  dragObject = null;\n"
		" }\n"
		"}\n"
	));
#endif

#ifdef SPEEDDIAL_CONTEXT_MENU
	RETURN_IF_ERROR(line.Append(
		"var p;\n"

		"function hidePopup() { document.body.removeChild(p); p = null; }\n"

		"function popup(index, set) {\n"
		" var i = index;\n"
		" var isSet = set;\n"
		" this.trig = function(ev) {\n"
		"  if (p)\n"
		"   document.body.removeChild(p);\n"
		"  p = document.createElement('div');\n"
		"  p.className = 'popup';\n"
		"  var ul = document.createElement('ul');\n"
		"  p.appendChild(ul);\n"
		"  var l = new Array(\n"
		"   {title: 'Edit...', fn: function() { hidePopup(); onSetSpeedDial(i);}},\n"
		"   {title: 'Reload', d: !isSet, fn: function() { hidePopup(); opera.reloadSpeedDial(i);}},\n"
		"   {title: 'Reload every...', d: !isSet, fn: function() { hidePopup(); opera.setSpeedDialReloadInterval(i, 60);}},\n"
		"   {title: 'Clear', d: !isSet, fn: function() { hidePopup(); reset(i);}}\n"
		"  );\n"
		"  for (var j=0;j<l.length;j++) {\n"
		"   var li = document.createElement('li');\n"
		"   li.innerText = l[j].title\n"
		"   if (!l[j].d) \n"
		"    li.onclick = l[j].fn;\n"
		"	else\n"
		"	 li.setAttribute('grayed', '');\n"
		"   ul.appendChild(li);\n"
		"  }\n"
		"  document.body.appendChild(p);\n"
		"  var m = mc(ev);\n"
		"  p.style.left = (m.x + p.offsetWidth >= window.innerWidth ? window.innerWidth - p.offsetWidth : m.x) + 'px';\n"
		"  p.style.top = (m.y + p.offsetHeight >= window.innerHeight ? window.innerHeight - p.offsetHeight : m.y) + 'px';\n"
		"  return false;\n"
		" }\n"
		"}\n"

		"document.onmousedown = function(ev) {\n"
		" var m = mc(ev);\n"
		" if (p && (m.x < p.offsetLeft || m.x >= (p.offsetLeft+p.offsetWidth) || m.y < p.offsetTop || m.y >= (p.offsetTop+p.offsetHeight))) {\n"
		"  hidePopup();\n"
		" }\n"
		"}\n"
		));
#endif // SPEEDDIAL_CONTEXT_MENU

	OP_STATUS st = line.Append(

		"var w, h;\n"

		// Set size of a thumbnail object
		"function ss(o) {\n"
		"	o.style.width = w + 'px';\n"
		"	o.style.height = h + 'px';\n"
		"}\n"

		// Force layout to set correct sizes for thumbnails
		// FIXME! Cleanup hardcoded values
		"function fl() {\n"
		" var s = window.innerWidth <= 460;\n"
		" var t = document.getElementsByTagName('table')[0];\n"
		" w = t.offsetWidth / 3 - (s ? 6 : 44);\n"
		" if (w > 256) w = 256;\n" // Don't scale up
		" h = w*3/4;\n"
		" var sds = document.getElementsByClassName('spdial');\n"
		" for (var i = 0; i < sds.length; i++){\n"
		"   var cont = document.getElementsByClassName('thumbnail-cont')[i]\n"
		"   ss(cont);\n"
		"   var thumb = document.getElementsByClassName('thumbnail')[i];\n"
		"   ss(thumb);\n"
		"	thumb.style.marginLeft = -w/2 + 'px';\n"
		"	thumb.style.marginTop = (s ? 0 : -h/2) + 'px';\n"
		"   sds[i].style.height = (h + (s ? 14 : 38)) + 'px';\n"
		" }\n"
		"}\n"

		// Get the absolute position of an element
		"function pos(obj) {\n"
		" var l=0, t=0;\n"
		" do {\n"
		"  l+=obj.offsetLeft;\n"
		"  t+=obj.offsetTop;\n"
		" } while (obj = obj.offsetParent);\n"
		" return {x:l, y:t};\n"
		"}\n"

		// Called from opera when a speed dial has changed
		"function onUpdate(index, title, url, tnUrl, loading) {\n"
		" var a = document.getElementById('a'+index);\n"
		" var u = document.getElementsByClassName('empty')[index];\n"
		" var sd = document.getElementsByClassName('spdial')[index];\n"
		" if (url == '') {\n"
		"  u.style.display = 'block';\n"
		"  a.style.display = 'none';\n"
		"  document.getElementsByClassName('thumbnail-cont')[index].innerText = '';\n"
		"  sd.onclick = 'onSetSpeedDial('+index+')';\n"
#ifdef SPEEDDIAL_CONTEXT_MENU
		"  sd.oncontextmenu = new popup(index, false).trig;\n"
#endif
		" }\n"
		" else {\n"
		"  if (loading) \n"
		"   sd.setAttribute('loading', tnUrl ? 'tn' : 'notn');\n"
		"  else\n"
		"   sd.removeAttribute('loading');\n"
		"  u.style.display = 'none';\n"
		"  a.style.display = 'block';\n"
		"  document.getElementsByClassName('title-small')[index].innerText = title ? title : url;\n"
		"  document.links[index].href = url;\n"
		"  var nn;\n"
		"  if (tnUrl) {\n"
		"   var nn = document.createElement('img');\n"
		"   nn.src = tnUrl + '?' + new Date().getTime();\n"
		"  }\n"
		"  else {\n"
		"   nn = document.createElement('div');\n"
		"   nn.innerText = loading ? '' : '"
		);
	RETURN_IF_ERROR(st);
	RETURN_IF_ERROR(line.Append(no_thumbnail_text));
	st = line.Append("';\n"
		"  }\n"
		"  nn.className = 'thumbnail-cont';\n"
		"  ss(nn);\n"
		"  var cont = document.getElementsByClassName('thumbnail')[index];\n"
		"  cont.innerText = '';\n"
		"  cont.appendChild(nn);\n"
		"  sd.onclick = '';\n"
#ifdef SPEEDDIAL_CONTEXT_MENU
		"  sd.oncontextmenu = new popup(index, true).trig;\n"
#endif
		" }\n"
		"}\n"

		"function onSetSpeedDial(index) {\n"
		);
	RETURN_IF_ERROR(st);
	RETURN_IF_ERROR(line.AppendFormat(UNI_L(
		" var url = prompt('Enter Web address here');\n"), enter_address_text.CStr()
		));
	RETURN_IF_ERROR(line.Append(
		" if (url != undefined)\n"
		"  opera.setSpeedDial(index, url);\n"
		"}\n"

		"function reset(index) {\n"
		" opera.setSpeedDial(index, '')\n"
		"}\n"

		"function onReloadSpeedDial(index) {\n"
		" opera.reloadSpeedDial(index);\n"
		"}\n"

		"document.onresize = fl;\n"

	));

	// Onload event listener
	st = line.Append(
		"window.addEventListener(\n"
		" 'load',\n"
		" function()\n"
		" {\n"
		"  fl();\n"
		"  opera.connectSpeedDial(onUpdate)\n"
		"  var sds = document.getElementsByClassName('spdial');\n"
		"  var fs = document.getElementsByClassName('full');\n"
		"  for(var i=0; i<sds.length; i++) {\n"
#ifdef SPEEDDIAL_DRAGNDROP
		"   fs[i].onmousedown = function(ev) {\n"
		"     if (ev.button == 0)\n"	// Left mouse button
		"      drag(ev, this);\n"
		"    }\n"
#endif // SPEEDDIAL_DRAGNDROP
#ifdef SPEEDDIAL_CONTEXT_MENU
		"   sds[i].oncontextmenu = new popup(i, false).trig;\n"
#endif // SPEEDDIAL_CONTEXT_MENU
		"  }\n"
	);
	RETURN_IF_ERROR(st);
	RETURN_IF_ERROR(line.Append(
		" },\n"
		" false);\n"
		"</script>\n"
	));

	// End of scripts

	// HTML part
	RETURN_IF_ERROR(line.Append("<body><table>\n"));
	for (unsigned cols = 0; cols < SPEEDDIAL_COLS; cols++)
	{
		RETURN_IF_ERROR(line.Append("<tr>\n"));
		for (unsigned rows = 0; rows < SPEEDDIAL_ROWS; rows++)
		{
			const unsigned index = cols * SPEEDDIAL_ROWS + rows;

			RETURN_IF_ERROR(line.AppendFormat(UNI_L("<td class='spdial' onclick = 'onSetSpeedDial(%i)'>\n"), index));

			// Unassigned
			RETURN_IF_ERROR(
				line.AppendFormat(UNI_L("<div class='empty' style='display: block'>\n<div class='index-big'>%i</div>\n<div class='text-big'>%s</div>\n</div>\n"),
					index + 1,
					add_text.CStr()));

			RETURN_IF_ERROR(line.AppendFormat(UNI_L("<div class='full' id='a%i' style='display: none'>\n"), index));
				RETURN_IF_ERROR(line.AppendFormat(UNI_L(" <div class='index-small'>%i</div>\n"), index+1));

				// The thumbnail image
				RETURN_IF_ERROR(line.AppendFormat(UNI_L(" <a href='dummy' class='thumbnail'><div class='thumbnail-cont'></div></a>\n"), index));

				RETURN_IF_ERROR(line.AppendFormat(UNI_L(" <div class='reset' onClick='reset(%i)'></div>\n"), index));

				// Preview title
				RETURN_IF_ERROR(line.Append(" <div class='title-small'></div>\n"));

			RETURN_IF_ERROR(line.Append("</div>"));
			RETURN_IF_ERROR(line.Append("</td>"));
		}
		RETURN_IF_ERROR(line.Append("</tr>"));
	}
	RETURN_IF_ERROR(line.Append("</table>"));
	RETURN_IF_ERROR(line.AppendFormat(UNI_L("<span class='btn' onclick='for (var i=0;i<%i;i++) {opera.reloadSpeedDial(i)}'>Refresh</span>"), NUM_SPEEDDIALS));

	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));

	return CloseDocument();
}
Ejemplo n.º 7
0
CDocumentPreview::~CDocumentPreview()
{
	CloseDocument();
}
Ejemplo n.º 8
0
OP_STATUS
OperaUnite::GenerateData()
{
#ifdef _LOCALHOST_SUPPORT_
    RETURN_IF_ERROR(OpenDocument(Str::S_UNITE_TITLE, PrefsCollectionFiles::StyleWidgetsFile));
#else
    RETURN_IF_ERROR(OpenDocument(Str::S_UNITE_TITLE));
#endif

    RETURN_IF_ERROR(OpenBody());

    OpString line;

    OpString start_app, stop_app, open_app, delete_widget, widget_properties,
             logged_out, creating_account, logging_in, success,
             log_in, create_account, log_out, cancel;
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    OpString update_widget;
    RETURN_IF_ERROR(JSSafeLocaleString(&update_widget, Str::S_WIDGET_UPDATE_BUTTON));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(JSSafeLocaleString(&start_app, Str::S_WEBSERVER_START_SERVICE));
    RETURN_IF_ERROR(JSSafeLocaleString(&stop_app, Str::S_WEBSERVER_STOP_SERVICE));
    RETURN_IF_ERROR(JSSafeLocaleString(&open_app, Str::MI_IDM_MENU_GOTO_PUBLIC_SERVICE_PAGE));
    RETURN_IF_ERROR(JSSafeLocaleString(&delete_widget, Str::S_WGTMGR_CMD_DELETE_WIDGET));
    RETURN_IF_ERROR(JSSafeLocaleString(&widget_properties, Str::D_WIDGET_PROPERTIES));
    RETURN_IF_ERROR(JSSafeLocaleString(&logged_out, Str::D_FEATURE_SETTINGS_LOGGED_OUT));
    RETURN_IF_ERROR(JSSafeLocaleString(&creating_account, Str::D_FEATURE_SETUP_CREATING_ACCOUNT));
    RETURN_IF_ERROR(JSSafeLocaleString(&logging_in, Str::D_FEATURE_SETUP_LOGGING_IN));
    RETURN_IF_ERROR(JSSafeLocaleString(&success, Str::S_MINI_SYNC_SUCCESS));
    RETURN_IF_ERROR(JSSafeLocaleString(&log_in, Str::D_FEATURE_SETUP_LOGIN));
    RETURN_IF_ERROR(JSSafeLocaleString(&create_account, Str::D_FEATURE_SETUP_CREATE_ACCOUNT));
    RETURN_IF_ERROR(JSSafeLocaleString(&log_out, Str::D_FEATURE_SETTINGS_LOGOUT));
    RETURN_IF_ERROR(JSSafeLocaleString(&cancel, Str::DI_IDCANCEL));

    RETURN_IF_ERROR(line.Append(
                        "\n"
                        "<script type='text/javascript'>\n"
                        "	window.addEventListener('load', init, false);\n"
                        "	function init(){\n"
                        "		if(opera && opera.uniteApplicationManager){\n"
                        "			var wmgr = opera.uniteApplicationManager;\n"
                        "			var wdgts = wmgr.widgets;\n"
                        "\n"
                        "			var list = document.getElementById('gadget_list');\n"
                        "			var olay = document.getElementById('overlay');\n"
                        "			var info = document.getElementById('info');\n"
                        "			var btn_open = document.getElementById('btn_open');\n"
                        "			var btn_close = document.getElementById('btn_close');\n"
                        "			var btn_go = document.getElementById('btn_go');\n"
                        "			var btn_del = document.getElementById('btn_del');\n"
                        "			var btn_info = document.getElementById('btn_info');\n"));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append(
                        "			var btn_update = document.getElementById('btn_update');\n"));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append(
                        "\n"
                        "			btn_open.addEventListener('click', hndl_click, false);\n"
                        "			btn_close.addEventListener('click', hndl_click, false);\n"
                        "			btn_go.addEventListener('click', hndl_click, false);\n"
                        "			btn_del.addEventListener('click', hndl_click, false);\n"
                        "			btn_info.addEventListener('click', hndl_click, false);\n"));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append(
                        "			btn_update.addEventListener('click', hndl_click, false);\n"));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append(
                        "			list.addEventListener('keyup', hndl_keyup, false);\n"
                        "\n"
                        "			list_gadgets();\n"
                        "		}\n"
                        "		function list_gadgets(){\n"
                        "			list.innerHTML = ''; //remove the option elements already there.\n"
                        "			list.style.height  = '' + parseInt(window.innerHeight * 0.3) + 'px';\n"
                        "			for (var i = 0; wdgts[i]; ++i){\n"
                        "				var item = document.createElement('option');\n"
                        "				witem = wdgts[i];\n"
                        "				item.id = 'wdgt_' + i;\n"
                        "				item.value = i;\n"
                        "				item.appendChild(document.createTextNode(witem.name));\n"
                        "				list.appendChild(item);\n"
                        "			}\n"
                        "		}\n"
                        "\n"
                        "		function hndl_click(evt){\n"
                        "			if (evt.target && evt.target.nodeType == 1){\n"
                        "				var el_id = evt.target.id;\n"
                        "				var ar_act = new Array();\n"
                        "				for (var i = 0; list.options[i]; ++i){\n"
                        "					var opt = list.options[i];\n"
                        "					if (opt.selected){\n"
                        "						ar_act.push(opt.value);\n"
                        "					}\n"
                        "				}\n"
                        "				var action;\n"
                        "				switch (el_id){\n"
                        "					case 'btn_open':\n"
                        "						action = 'run';\n"
                        "						break;\n"
                        "					case 'btn_close':\n"
                        "						action = 'kill';\n"
                        "						break;\n"
                        "					case 'btn_go':\n"
                        "						action = 'open';\n"
                        "						break;\n"
                        "					case 'btn_del':\n"
                        "						action = 'uninstall';\n"
                        "						break;\n"
                        "					case 'btn_info':\n"
                        "						action = 'info';\n"
                        "						break;\n"));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append(
                        "					case 'btn_update':\n"
                        "						action = 'checkForUpdate';\n"
                        "						break;\n"));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append(
                        "				}\n"
                        "				if (action != 'info' && action != 'open'){\n"
                        "					for (var i=ar_act.length - 1; ar_act[i]; --i){\n"
                        "						eval ('wmgr.' + action + '(wdgts[' + ar_act[i] + '])');\n"
                        "					}\n"
                        "					if (action == 'uninstall'){\n"
                        "						list_gadgets();\n"
                        "						list.selectedIndex = !ar_act[0] ? 0 : (ar_act[0] - 1);\n"
                        "					}\n"
                        "				}else if (action == 'info'){\n"
                        "					// show info box for a single widget only\n"
                        "					show_gadget_info(ar_act[0]);\n"
                        "				}else if (action == 'open'){\n"
                        "					for (var i=ar_act.length - 1; ar_act[i]; --i){\n"
                        "						if (opera.uniteDeviceManager.range == 3)"
                        "							window.open('http://' + opera.uniteDeviceManager.hostName + '/' + wdgts[ar_act[i]].servicePath + '/');\n"
                        "						else"
                        "							window.open('http://' + opera.uniteDeviceManager.hostName + ':' + opera.uniteDeviceManager.port + '/' + wdgts[ar_act[i]].servicePath + '/');\n"
                        "					}\n"
                        "				}\n"
                        "			}\n"
                        "		}\n"
                        "\n"
                        "		function hndl_keyup(e)\n"
                        "		{\n"
                        "			if (e.keyCode == 46)\n"
                        "			{\n"
                        "				btn_del.click();\n"
                        "			}\n"
                        "			else if (e.keyCode == 13)\n"
                        "			{\n"
                        "				// open the widget\n"
                        "				// TODO: also don't submit the form\n"
                        "				btn_open.click();\n"
                        "			}\n"
                        "		}\n"
                        "\n"
                        "		function show_gadget_info(idx){\n"
                        "			var wdgt = wdgts[idx];\n"
                        "			if (!wdgt) return;\n"
                        "			info.innerHTML = '';\n"
                        "			var btnc = document.createElement('input');\n"
                        "			btnc.type = 'button';\n"
                        "			btnc.value = 'x';\n"
                        "			btnc.addEventListener('click', function () {olay.style.display = 'none';}, false);\n"
                        "			document.getElementById('dtitle').innerHTML = '' ;\n"
                        "			document.getElementById('dtitle').appendChild(btnc);\n"
                        "			var tbl = document.createElement('table');\n"
                        "			var trow = tbl.appendChild(document.createElement('tr'));\n"
                        "			for (x in wdgt){\n"
                        "				var item = document.createElement('tr');\n"
                        "				item.appendChild(document.createElement('th')).appendChild(document.createTextNode(x));\n"
                        "				item.appendChild(document.createElement('td')).appendChild(document.createTextNode(wdgt[x]));\n"
                        "				tbl.appendChild(item);\n"
                        "			}\n"
                        "			info.appendChild(tbl);\n"
                        "			olay.style.display = 'block';\n"
                        "		}\n"
                        "	}\n"
                        "</script>\n"
                        "<div id='header'><h1>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::M_WEBSERVER_MANAGE_SERVICES));
    RETURN_IF_ERROR(line.Append("</h1></div>\n"
                                "<div id='content'>\n"
                                "	<form>\n"
                                "		<div id='btn_wrapper'>\n"
                                "			<input id='btn_open' value='"));
    RETURN_IF_ERROR(line.Append(start_app));
    RETURN_IF_ERROR(line.Append("' type='button'>\n"
                                "			<input id='btn_close' value='"));
    RETURN_IF_ERROR(line.Append(stop_app));
    RETURN_IF_ERROR(line.Append("' type='button'>\n"
                                "			<input id='btn_go' value='"));
    RETURN_IF_ERROR(line.Append(open_app));
    RETURN_IF_ERROR(line.Append("' type='button'>\n"
                                "			<input id='btn_del' value='"));
    RETURN_IF_ERROR(line.Append(delete_widget));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append("' type='button'>\n"
                                "			<input id='btn_update' value='"));
    RETURN_IF_ERROR(line.Append(update_widget));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
    RETURN_IF_ERROR(line.Append("' type='button'>\n"
                                "			<input id='btn_info' value='"));
    RETURN_IF_ERROR(line.Append(widget_properties));
    RETURN_IF_ERROR(line.Append("' type='button'>\n"
                                "		</div>\n"
                                "		<fieldset>\n"
                                "			<legend>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::M_VIEW_HOTLIST_MENU_UNITE_SERVICES));
    RETURN_IF_ERROR(line.Append("</legend>\n"
                                "			<select multiple='multiple' id='gadget_list'>\n"
                                "				<option>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::D_GENERIC_ERROR));
    RETURN_IF_ERROR(line.Append("</option>\n"
                                "			</select>\n"
                                "		</fieldset>\n"
                                "	</form>\n"
                                "</div>\n"
                                "<h2>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_MANAGE_ACCOUNTS));
    RETURN_IF_ERROR(line.Append("</h2>\n"
                                "<div id='content'>\n"
                                "	<script type='text/javascript'>\n"
                                "		window.addEventListener('load', initialize, false);\n"
                                "		var account = opera.operaAccountManager;\n"
                                "		var currentOp = '';\n"
                                "		function initialize() {\n"
                                "			account.onauthenticationchange = onAuthenticationChange;\n"
                                "			onAuthenticationChange();\n"
                                "		}\n"
                                "		function onAuthenticationChange() {\n"
                                "			document.login.username.value = account.username;\n"
                                "			document.login.savePassword.checked = account.rememberMe;\n"
                                "			if (account.authState == 0)\n"
                                "			{\n"
                                "				document.login.username.disabled = false;\n"
                                "				document.login.password.disabled = false;\n"
                                "				document.login.email.disabled = false;\n"
                                "				document.login.savePassword.disabled = false;\n"
                                "				document.login.login.disabled = false;\n"
                                "				document.login.create.disabled = false;\n"
                                "				document.login.logout.disabled = true;\n"
                                "				document.login.abort.disabled = true;\n"
                                "				if (currentOp != 'Login' && currentOp != 'Create account')\n"
                                "					document.login.password.value = '';\n"
                                "				document.getElementById('status').innerHTML = '["));
    RETURN_IF_ERROR(line.Append(logged_out));
    RETURN_IF_ERROR(line.Append("]';\n"
                                "			}\n"
                                "			else if (account.authState == 1)\n"
                                "			{\n"
                                "				document.login.username.disabled = true;\n"
                                "				document.login.password.disabled = true;\n"
                                "				document.login.email.disabled = true;\n"
                                "				document.login.savePassword.disabled = true;\n"
                                "				document.login.login.disabled = true;\n"
                                "				document.login.create.disabled = true;\n"
                                "				document.login.logout.disabled = true;\n"
                                "				document.login.abort.disabled = false;\n"
                                "				if (currentOp == 'Create account')\n"
                                "					document.getElementById('status').innerHTML = '["));
    RETURN_IF_ERROR(line.Append(creating_account));
    RETURN_IF_ERROR(line.Append("]';\n"
                                "				else\n"
                                "					document.getElementById('status').innerHTML = '["));
    RETURN_IF_ERROR(line.Append(logging_in));
    RETURN_IF_ERROR(line.Append("]';\n"
                                "			}\n"
                                "			else if (account.authState == 2)\n"
                                "			{\n"
                                "				document.login.username.disabled = true;\n"
                                "				document.login.password.disabled = true;\n"
                                "				document.login.email.disabled = true;\n"
                                "				document.login.savePassword.disabled = true;\n"
                                "				document.login.login.disabled = true;\n"
                                "				document.login.create.disabled = true;\n"
                                "				document.login.logout.disabled = false;\n"
                                "				document.login.abort.disabled = true;\n"
                                "				if (document.login.password.value == '')\n"
                                "					document.login.password.value = '********';\n"
                                "				document.getElementById('status').innerHTML = '["));
    RETURN_IF_ERROR(line.Append(success));
    RETURN_IF_ERROR(line.Append("]';\n"
                                "			}\n"
                                "			if (currentOp == '' || account.authState == 1)\n"
                                "				document.getElementById('message').innerHTML = '';\n"
                                "			else if (account.authStatus == account.OK)\n"
                                "				document.getElementById('message').innerHTML = currentOp+': "));
    RETURN_IF_ERROR(line.Append(success));
    RETURN_IF_ERROR(line.Append("';\n"
                                "			else\n"
                                "				document.getElementById('message').innerHTML = currentOp+': '+account.authStatus;\n"
                                "			if (account.authState != 1)\n"
                                "				currentOp = '';\n"
                                "		}\n"
                                "		function doLogin() {\n"
                                "			var username = document.login.username.value;\n"
                                "			var password = document.login.password.value;\n"
                                "			var savePassword = document.login.savePassword.checked;\n"
                                "			currentOp = 'Login';\n"
                                "			account.login(username, password, savePassword);\n"
                                "		}\n"
                                "		function doCreateAccount() {\n"
                                "			var username = document.login.username.value;\n"
                                "			var password = document.login.password.value;\n"
                                "			var email = document.login.email.value;\n"
                                "			var savePassword = document.login.savePassword.checked;\n"
                                "			currentOp = 'Create account';\n"
                                "			account.createAccount(username,password,email,savePassword);\n"
                                "		}\n"
                                "		function doLogout() {\n"
                                "			currentOp = 'Logout';\n"
                                "			document.login.password.value = '';\n"
                                "			account.logout();\n"
                                "		}\n"
                                "		function doAbort() {\n"
                                "			account.abort();\n"
                                "		}\n"
                                "	</script>\n"
                                "	<form name='login'>\n"
                                "		<p><label>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::D_FEATURE_USERNAME));
    RETURN_IF_ERROR(line.Append(": <input type='text' name='username';'></label>\n"
                                "			<label>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::D_FEATURE_PASSWORD));
    RETURN_IF_ERROR(line.Append(": <input type='password' name='password'></label></p>\n"
                                "		<p><label>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::D_FEATURE_EMAIL));
    RETURN_IF_ERROR(line.Append(": <input type='text' name='email'></label>\n"
                                "			<label>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_REMEMBER_LOGIN));
    RETURN_IF_ERROR(line.Append(": <input type='checkbox' name='savePassword' checked='true'></label></p>\n"
                                "		<p><input type='button' name='login' value='"));
    RETURN_IF_ERROR(line.Append(log_in));
    RETURN_IF_ERROR(line.Append("' onclick='doLogin();'>\n"
                                "			<input type='button' name='create' value='"));
    RETURN_IF_ERROR(line.Append(create_account));
    RETURN_IF_ERROR(line.Append("' onclick='doCreateAccount();'>\n"
                                "			<input type='button' name='logout' value='"));
    RETURN_IF_ERROR(line.Append(log_out));
    RETURN_IF_ERROR(line.Append("' onclick='doLogout();'>\n"
                                "			<input type='button' name='abort' value='"));
    RETURN_IF_ERROR(line.Append(cancel));
    RETURN_IF_ERROR(line.Append("' onclick = 'doAbort();'></p>\n"
                                "		<p><span id='status'></span> <span id='message'></span></p>\n"
                                "	</form>\n"
                                "</div>\n"
                                "<div id='footer'>\n"
                                "	<a href='http://unite.opera.com/applications/'>"));
    RETURN_IF_ERROR(AppendLocaleString(&line, Str::M_WEBSERVER_NEW_SERVICE));
    RETURN_IF_ERROR(line.Append("</a>\n"
                                "</div>\n"
                                "<div id='overlay'><div id='dwrapper'><div id='dtitle'></div><div id='info'></div></div></div>\n"
                               ));

    RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

    RETURN_IF_ERROR(CloseDocument());

    return OpStatus::OK;
}
Ejemplo n.º 9
0
/* Perform action for specified select type */
void DoSelectTypeAction
    (
    SelectType selection    /* selection type */
    )
{
    if ( IsMainFormWinActive() || IsFullscreenformActive()
         || FrmGetActiveFormID() == frmLibrary ) {
        if ( IsMainFormWinActive() &&
             selection != SELECT_TOGGLE_AUTOSCROLL &&
             selection != SELECT_INCREASE_AUTOSCROLL &&
             selection != SELECT_DECREASE_AUTOSCROLL &&
             selection != SELECT_FULL_PAGE_UP &&
             selection != SELECT_FULL_PAGE_DOWN &&
             selection != SELECT_HALF_PAGE_UP &&
             selection != SELECT_HALF_PAGE_DOWN &&
             selection != SELECT_ONE_LINE_UP &&
             selection != SELECT_ONE_LINE_DOWN ) {
            DoAutoscrollToggle( AUTOSCROLL_OFF );
        }
        switch ( selection ) {
            case SELECT_NONE:
                break;

#ifdef SUPPORT_WORD_LOOKUP
#ifdef SUPPORT_PPI
            case SELECT_WORD_LOOKUP_PPI:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_PPI;
                ShowSelectWordTapIcon();
                break;
#endif
#ifdef SUPPORT_ANNOTATION
            case SELECT_WORD_LOOKUP_ANNOTATE:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_ANNOTATE;
                ShowSelectWordTapIcon();
                break;
#endif
            case SELECT_WORD_LOOKUP_SEARCH_FORM:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_SEARCH_FORM;
                ShowSelectWordTapIcon();
                break;
            case SELECT_WORD_LOOKUP_TO_CLIPBOARD:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_TO_CLIPBOARD;
                ShowSelectWordTapIcon();
                break;
#endif

            case SELECT_SAVE_POSITION:
                AddToHistory( GetCurrentRecordId() );
                break;

            case SELECT_BRIGHTNESS_ADJUST:
                EmitKey( vchrBrightness, commandKeyMask );
                break;

            case SELECT_TOGGLE_BACKLIGHT:
                EmitKey( vchrBacklight, commandKeyMask );
                break;
                
            case SELECT_CONTRAST_ADJUST:
                EmitKey( vchrContrast, commandKeyMask );
                break;

            case SELECT_ONE_LINE_UP:
                DoPageMove( GetDefaultMainStyleHeight() );
                break;

            case SELECT_ONE_LINE_DOWN:
                DoPageMove( -GetDefaultMainStyleHeight() );
                break;

            case SELECT_FULL_PAGE_UP:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollIncr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollDecr();
                else if ( Prefs()->pageControlsLink && OnFirstScreen() &&
                          NO_RECORD == GetSequentialRecordId( DIRECTION_UP ) )
                    GoToFirstAnchor();
                else
                    DoPageMove( RotGetScrollValue() );
                break;

            case SELECT_HALF_PAGE_UP:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollIncr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollDecr();
                else if ( Prefs()->pageControlsLink && OnFirstScreen() &&
                          NO_RECORD == GetSequentialRecordId( DIRECTION_UP ) )
                    GoToFirstAnchor();
                else
                    DoPageMove( RotGetScrollValue() / 2 );
                break;

            case SELECT_FULL_PAGE_DOWN:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollDecr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollIncr();
                else if ( Prefs()->pageControlsLink && OnLastScreen() )
                    GoToLastAnchor();
                else
                    DoPageMove( -RotGetScrollValue() );
                break;

            case SELECT_HALF_PAGE_DOWN:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollDecr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollIncr();
                else if ( Prefs()->pageControlsLink && OnLastScreen() )
                    GoToLastAnchor();
                else
                    DoPageMove( -RotGetScrollValue() / 2 );
                break;

            case SELECT_GO_BACK:
                if ( IsFullscreenformActive() )
                    FsDoControlAction( -( LEFTCONTROL + 1 ) );
                else
                    DoControlAction( -( LEFTCONTROL + 1 ) );
                break;

            case SELECT_GO_FORWARD:
                if ( IsFullscreenformActive() )
                    FsDoControlAction( -( RIGHTCONTROL + 1 ) );
                else
                    DoControlAction( -( RIGHTCONTROL + 1 ) );
                break;

            case SELECT_GO_HOME:
                if ( IsFullscreenformActive() )
                    FsDoControlAction( -( HOMECONTROL + 1 ) );
                else
                    DoControlAction( -( HOMECONTROL + 1 ) );
                break;

            case SELECT_GO_TO_TOP:
                if ( IsFullscreenformActive() )
                    FsAdjustVerticalOffset( FULLSCREEN_TOP );
                else
                    GotoLocation( TOP );
                break;

            case SELECT_GO_TO_BOTTOM:
                if ( IsFullscreenformActive() )
                    FsAdjustVerticalOffset( FULLSCREEN_BOTTOM );
                else
                    GotoLocation( BOTTOM );
                break;

            case SELECT_FIND:
                FrmPopupForm( frmSearch );
                break;

            case SELECT_FIND_AGAIN:
                SearchAgain();
                break;

            case SELECT_ADD_BOOKMARK:
                DoAddBookmark();
                break;

            case SELECT_VIEW_BOOKMARKS:
                FrmPopupForm( frmBookmarks );
                break;

            case SELECT_OPEN_LIBRARY:
                CloseDocument();
                FrmGotoForm( GetValidForm( frmLibrary ) );
                break;

            case SELECT_DETAILS:
                FrmPopupForm( frmDetails );
                break;

            case SELECT_PREFS:
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_BUTTON_ACTION:
                PrefsButtonShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_TAP_ACTION:
                PrefsControlShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_GESTURE_ACTION:
                PrefsGestureShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_TOGGLE_AUTOSCROLL:
                DoAutoscrollToggle( AUTOSCROLL_TOGGLE );
                break;

            case SELECT_INCREASE_AUTOSCROLL:
                DoAutoscrollIncr();
                break;
                
            case SELECT_DECREASE_AUTOSCROLL:
                DoAutoscrollDecr();
                break;

            case SELECT_NEXT_ANCHOR:
                HandleNextControl();
                break;

            case SELECT_PREV_ANCHOR:
                HandlePrevControl();
                break;

            case SELECT_GO_TO_LINK:
                if ( IsFullscreenformActive() ) {
                    if ( 0 < actualAnchor )
                        FsDoControlAction( actualAnchor );
                } else {
                    DoControlAction( actualAnchor );
                }
                break;

            case SELECT_COPY_TO_MEMO:
                DoHardcopy();
                break;

            case SELECT_DELETE_DOCUMENT:
                DoDeleteDocument();
                break;

            case SELECT_FONT:
                PrefsFontShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_COMMAND_STROKE:
                EmitKey( vchrCommand, commandKeyMask );
                break;

            case SELECT_MENU:
                EmitKey( vchrMenu, commandKeyMask );
                break;

#ifdef HAVE_ROTATE
            case SELECT_ROTATE_LEFT: {
                RotateType angle;
                angle = Prefs()->rotate;
                switch ( angle ) {
                    case ROTATE_ZERO:
                        angle = ROTATE_PLUS90;
                        break;
                    case ROTATE_PLUS90:
                        angle = ROTATE_MINUS90;
                        break;
                    case ROTATE_MINUS90:
                        angle = ROTATE_ZERO;
                }
                if ( Prefs()->individualDocumentLayout )
                    GetHistoryPtr()->rotate = angle;
                else
                    Prefs()->rotate = angle;
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;
            }

            case SELECT_ROTATE_RIGHT: {
                RotateType angle;
                angle = Prefs()->rotate;
                switch ( angle ) {
                    case ROTATE_PLUS90:
                        angle = ROTATE_ZERO;
                        break;
                    case ROTATE_MINUS90:
                        angle = ROTATE_PLUS90;
                        break;
                    case ROTATE_ZERO:
                        angle = ROTATE_MINUS90;
                        break;
                }
                if ( Prefs()->individualDocumentLayout )
                    GetHistoryPtr()->rotate = angle;
                else
                    Prefs()->rotate = angle;
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;
            }
#endif

            case SELECT_TOGGLE_TOOLBAR:
                if ( ! IsFormMain( Prefs()->lastForm ) )
                    break;
                if ( Prefs()->toolbar != TOOLBAR_NONE ) {
                    Prefs()->savedToolbar = Prefs()->toolbar;
                    Prefs()->toolbar      = TOOLBAR_NONE;
                }
                else {
                    if ( Prefs()->savedToolbar == TOOLBAR_NONE )
                        Prefs()->toolbar = TOOLBAR_TOP;
                    else
                        Prefs()->toolbar = Prefs()->savedToolbar;
                }
#ifdef HAVE_SILKSCREEN
                if ( GetDIAState() == DIA_STATE_NO_STATUS_BAR &&
                   Prefs()->toolbar != TOOLBAR_NONE )
                    SetDIAState( Prefs()->savedSilkscreen );
#endif
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;

            case SELECT_TOGGLE_FULLSCREEN: {
                UInt16       newToolbarState;
                UInt16       newScrollbarState;
                DIAStateType newDIAState;
                if ( Prefs()->toolbar == TOOLBAR_NONE &&
                    Prefs()->scrollbar == SCROLLBAR_NONE
                   ) {
                    /* From fullscreen to non-fullscreen */
                    if ( Prefs()->savedToolbar == TOOLBAR_NONE &&
                         Prefs()->savedScrollbar == SCROLLBAR_NONE ) {
                        Prefs()->savedToolbar   = TOOLBAR_TOP;
                        Prefs()->savedScrollbar = SCROLLBAR_RIGHT;
                    }
                    if ( Prefs()->savedSilkscreen == DIA_STATE_NO_STATUS_BAR ) {
                        Prefs()->savedSilkscreen = DIA_STATE_MIN;
                    }
                    newToolbarState   = Prefs()->savedToolbar;
                    newScrollbarState = Prefs()->savedScrollbar;
                    newDIAState       = Prefs()->savedSilkscreen;
                }
                else {
                    /* From non-fullscreen to fullscreen */
                    newToolbarState   = TOOLBAR_NONE;
                    newScrollbarState = SCROLLBAR_NONE;
                    newDIAState       = DIA_STATE_NO_STATUS_BAR;
                }
                Prefs()->savedToolbar    = Prefs()->toolbar;
                Prefs()->savedScrollbar  = Prefs()->scrollbar;
                Prefs()->savedSilkscreen = GetDIAState();
                Prefs()->toolbar         = newToolbarState;
                Prefs()->scrollbar       = newScrollbarState;
                SetDIAState( newDIAState );
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;
            }

            default:
                break;
        }
    }
}
Ejemplo n.º 10
0
bool MobiBookReader::OpenDocument(const string &_strFilename)
{
    DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() Start", __FUNCTION__);
    if (m_pBook)
    {
        CloseDocument();
    }

    m_strBookPath = _strFilename;
    DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() DKM_OpenDocument %s", __FUNCTION__, m_strBookPath.c_str());
    DK_WCHAR *wsFilePath = EncodingUtil::CharToWChar(m_strBookPath.c_str());
    if (NULL == wsFilePath)
    {
        DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() CharToWChar Error", __FUNCTION__);
        return false;
    }

    m_pBook = (IDKMBook *)DKM_OpenDocument(wsFilePath, NULL);
    DK_FREE(wsFilePath);
    if (NULL == m_pBook)
    {
        DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() DKM_OpenDocument fail", __FUNCTION__);
        return false;
    }
#ifdef KINDLE_FOR_TOUCH
    m_pBookTextController = new SelectedControler();
#else
    m_pBookTextController = new CursorControler();
#endif
    if (NULL == m_pBookTextController)
    {
        DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() Get CursorControler Fail", __FUNCTION__);
    }

    DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() Initialize", __FUNCTION__);
    if (DK_FAILED(m_pBook->Initialize()))
    {
        DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() Initialize fail", __FUNCTION__);
        CloseDocument();
        return false;
    }

    DK_ARGBCOLOR tTextColor;
    m_pBook->SetTextColor(tTextColor);

    DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() GetMainFileLength", __FUNCTION__);
    m_uFileLength = m_pBook->GetMainFileLength();
    m_lLogicPageCount = (long)(m_uFileLength / MAX_FILE_LENGTH_PER_PAGE);
    DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() m_uFileLength %d", __FUNCTION__, m_uFileLength);

    m_uNewPagePosition = m_pBook->GetTextOffset();
    m_ePositionType = IDKMBook::LOCATION_PAGE;

    DebugPrintf(DLC_ZHAIGH, "MobiBookReader::%s() Finish", __FUNCTION__);

    PageTable pageTableData;
    pageTableData.pageCount = GetTotalPageNumber();
    CPageTable pageTable(m_strBookPath, DK_GetKernelVersion(), -1);
    pageTableData.strMD5 = 
        SystemSettingInfo::GetInstance()->GetDuokanBookMD5(-1, -1);
    pageTable.SavePageTable(pageTableData);
    return true;
};
Ejemplo n.º 11
0
PDFDocumentTagger::~PDFDocumentTagger()
{
	LOG_WS_FUNCTION_SCOPE();
	CloseDocument();
}
Ejemplo n.º 12
0
OP_STATUS OpCrossNetworkError::GenerateData()
{
	OpString ignore, always_ignore, line;

#ifdef _LOCALHOST_SUPPORT_
	RETURN_IF_ERROR(OpenDocument(Str::S_MSG_CROSS_NETWORK_TITLE, PrefsCollectionFiles::StyleErrorFile));
#else
	RETURN_IF_ERROR(OpenDocument(Str::S_MSG_CROSS_NETWORK_TITLE));
#endif
	switch (m_error)
	{
	case Str::S_MSG_CROSS_NETWORK_INTERNET_INTRANET:
		RETURN_IF_ERROR(g_languageManager->GetString(Str::S_MSG_CROSS_NETWORK_INTERNET_INTRANET_CONTINUE, always_ignore));
		break;
	case Str::S_MSG_CROSS_NETWORK_INTERNET_LOCALHOST:
		RETURN_IF_ERROR(g_languageManager->GetString(Str::S_MSG_CROSS_NETWORK_INTERNET_LOCALHOST_CONTINUE, always_ignore));
		break;
	case Str::S_MSG_CROSS_NETWORK_INTRANET_LOCALHOST:
		RETURN_IF_ERROR(g_languageManager->GetString(Str::S_MSG_CROSS_NETWORK_INTRANET_LOCALHOST_CONTINUE, always_ignore));
		break;
	default:
		OP_ASSERT(FALSE);
	}

	RETURN_IF_ERROR(OpenBody(Str::S_MSG_WARNING, UNI_L("cross")));

	OpString ref_url_name;
	RETURN_IF_ERROR(m_ref_url.GetAttribute(URL::KUniName, ref_url_name));

	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("<h2>")));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, ref_url_name));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</h2>\n<p>")));

	RETURN_IF_ERROR(OpGeneratedDocument::AppendLocaleString(&line, m_error));
	RETURN_IF_ERROR(line.Append("</p>\n<p>"));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));

	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_MSG_CONTINUE, ignore));

	RETURN_IF_ERROR(line.Set("<a href=\"opera:proceed\" title=\""));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, ref_url_name));
	RETURN_IF_ERROR(line.Set("\">"));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, ignore.CStr()));
	RETURN_IF_ERROR(line.Set("</a></p>\n"));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));

#ifdef PREFS_HOSTOVERRIDE
	//this piece needs to be ifdefed because it adds the link that sets the preference, per domain
	RETURN_IF_ERROR(line.Set("<p><small><a href=\"opera:proceed/override\" title=\""));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, ref_url_name));
	RETURN_IF_ERROR(line.Set("\">"));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, always_ignore.CStr()));
	RETURN_IF_ERROR(line.Set("</a></small></p>\n"));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));
#endif // PREFS_HOSTOVERRIDE

	RETURN_IF_ERROR(GeneratedByOpera());

	return CloseDocument();
}
Ejemplo n.º 13
0
void TestWSChangeInterface::tearDown()
{
	CloseDocument();	
}
Ejemplo n.º 14
0
void FB_Frame::OnClose( wxCommandEvent& event )
{
    CloseDocument();
}
Ejemplo n.º 15
0
OP_STATUS OperaConfig::GenerateData()
{
	// Check if opera:config support is disabled
	if (!g_pccore->GetIntegerPref(PrefsCollectionCore::OperaConfigEnabled))
		return OpStatus::ERR_NOT_SUPPORTED;

	// If running in kiosk mode and opera:config is not disabled, at least
	// prohibit the user from changing anything.
#ifdef _KIOSK_MANAGER_
	BOOL disable_settings = KioskManager::GetInstance()->GetEnabled();
#else
	static const BOOL disable_settings = FALSE;
#endif

	unsigned int len;
	OP_STATUS rc;
	TRAP_AND_RETURN_VALUE_IF_ERROR(rc, m_settings = g_prefsManager->GetPreferencesL(TRUE, len), rc);

	OpString line;

	// Set up document and create the HEAD section
#ifdef _LOCALHOST_SUPPORT_
	OpenDocument(Str::S_CONFIG_TITLE, PrefsCollectionFiles::StyleConfigFile);
#else
	OpenDocument(Str::S_CONFIG_TITLE);
#endif

	// Add the script magic
	// Author: Tarquin Wilton-Jones 
	OpString settings_saved, no_settings_saved, need_restart;
	RETURN_IF_ERROR(JSSafeLocaleString(&settings_saved, Str::S_SETTINGS_SAVED));
	RETURN_IF_ERROR(JSSafeLocaleString(&no_settings_saved, Str::S_NO_SETTINGS_SAVED));
	RETURN_IF_ERROR(JSSafeLocaleString(&need_restart, Str::S_CONFIG_RESTART));
#ifndef USE_MINIMAL_OPERA_CONFIG
	OpString no_information;
	RETURN_IF_ERROR(JSSafeLocaleString(&no_information, Str::S_CONFIG_NO_INFORMATION));
#endif

	line.Append(" <script type=\"text/javascript\">\n"
				/* Reset a preference to default.
				 * Parameters:
				 *   t = The button pressed, i = id for the fieldset
				 */
				"function d(t,n)\n"
				"{\n"
				" var f=document.getElementById('s'+n);\n"
				" var s=f.getElementsByTagName('legend')[0].firstChild.nodeValue;\n"
				" var k=t.parentNode.parentNode.getElementsByTagName('label')[0].firstChild.nodeValue;\n"
				" var i=t.parentNode.getElementsByTagName('input')[0];\n"
				" if(i.type=='checkbox')\n"
				" {\n"
				"  i.checked=(opera.getPreferenceDefault(s,k)=='1');\n"
				" }\n"
				" else if(i.type=='file')\n"
				" {\n"
				"  i.value=\"\\\"\"+opera.getPreferenceDefault(s,k)+\"\\\"\";\n"
				" }\n"
				" else\n"
				" {\n"
				"  i.value=opera.getPreferenceDefault(s,k);\n"
				" }\n"
				"}\n"

				/* Submit or reset a fieldset.
				 * Parameters:
				 *   t = The button pressed, a = action code
				 * Actions:
				 *   0 = reset, 1 = save
				 */
				"function o(t,a)\n"
				"{\n"
#ifdef _KIOSK_MANAGER_
				     );
	if (!disable_settings) { line.Append(
#endif
				" var f=t.parentNode.parentNode;\n"
				" var s=f.getElementsByTagName('legend')[0].firstChild.nodeValue;\n"
				" var i=f.getElementsByTagName('input');\n"
				" var isd=f.className.match(/\\bdirty\\b/);\n"
				" for(var n=0,m,us='';m=i[n];n++)\n"
				" {\n"
				"  var k=m.parentNode.parentNode.getElementsByTagName('label')[0].firstChild.nodeValue;\n"
				"  if(a)\n"
				"  {\n"
				"   var v=(m.type=='checkbox')?(m.checked?'1':'0'):m.value;\n"
				"   if((!isd||(m.parentNode.parentNode.className=='wasmatch'))&&(v!=opera.getPreference(s,k))"
				"&&(((m.type=='file')&&!m.hasAttribute('required'))||m.checkValidity()))\n"
				"   {\n"
				"    opera.setPreference(s,k,v);\n"
				"    us+='\\n'+k;\n"
				"   }\n"
				"  }\n"
				"  else\n"
				"  {\n"
				"   if(m.type=='checkbox')\n"
				"   {\n"
				"    m.checked=(opera.getPreference(s,k)!='0');\n"
				"   }\n"
				"   else\n"
				"   {\n"
				"    m.value=opera.getPreference(s,k);\n"
				"   }\n"
				"  }\n"
				" }\n"
				" if(a)\n"
				" {\n"
				"  if(us!='')\n"
				"  {\n"
				"   opera.commitPreferences();\n"
				"   alert(\"");
	line.Append(            settings_saved);
	line.Append(                         "\\n\"+us+\"\\n\\n");
	line.Append(                                           need_restart);
	line.Append(                                                      "\");\n"
				"  }\n"
				"  else\n"
				"  {\n"
				"   alert(s+\"\\n");
	line.Append(              no_settings_saved);
	line.Append(                              "\");\n"
				"  }\n"
				" }\n"
#ifdef _KIOSK_MANAGER_
				      );
	}
	line.Append(
#endif
				"}\n"


				/* Magic for making stuff appear or disappear
				 */
				"window.addEventListener(\n"
				" 'load',\n"
				" function()\n"
				" {\n"
				"  var il={};\n"
				"  document.getElementById('showall').parentNode.className='hasscript';\n"
				"  var al=document.getElementsByTagName('legend');\n"
				"  for(var i=0,j;j=al[i];i++)\n"
				"  {\n"
				"   j.parentNode.className='notexpanded';\n"
				"   il[j.firstChild.nodeValue.replace(/\\s+/g,'').toLowerCase()]=j;\n"
				"   j.addEventListener('click',function()\n"
				"   {\n"
				"    if(this.parentNode.anyhits&&!this.parentNode.className.match(/\\bdirty\\b/))\n"
				"    {\n"
				"     this.parentNode.className='dirty expanded';\n"
				"     return;\n"
				"    }\n"
				"    this.parentNode.className=(this.parentNode.className=='expanded')?'notexpanded':'expanded';\n"
				"    document.getElementById('showall').getElementsByTagName('input')[0].checked=false;\n"
				"   window.chkbxtck=false;\n"
				"   },false);\n"
				"  }\n"
				"  var tb=document.getElementById('showall').getElementsByTagName('input')[0];\n"
				"  tb.addEventListener('click',function()\n"
				"  {\n"
				"   window.chkbxtck=this.checked;\n"
				"   var sf=document.getElementById('searchbox').getElementsByTagName('input')[0];\n"
				"   var flds=document.getElementsByTagName('fieldset');\n"
				"   sf.value=sf.defaultValue;\n"
				"   for(var i=0,j;j=flds[i];i++)\n"
				"   {\n"
				"    j.className=this.checked?'expanded':'notexpanded';\n"
				"    j.anyhits=false;\n"
				"   }\n"
				"  },false);\n"
				"  var sf=document.getElementById('searchbox').getElementsByTagName('input')[0];\n"
				"  sf.addEventListener('focus',function()\n"
				"  {\n"
				"   if(this.value==this.defaultValue)\n"
				"   {\n"
				"    this.value='';\n"
				"   }\n"
				"  },false);\n"
				"  sf.addEventListener('blur',function()\n"
				"  {\n"
				"   if(!this.value)\n"
				"   {\n"
				"    this.value=this.defaultValue;\n"
				"   }\n"
				"  },false);\n"
				// Perform the actual search
				"  function s(e)\n"
				"  {\n"
				"   if((e.type=='keyup')&&(this!=kwd))\n"
				"   {\n"
				"    return;\n"
				"   }\n"
				"   var tc=document.getElementById('showall').getElementsByTagName('input')[0];\n"
				"   if((e.type=='change')&&tc.checked&&!window.chkbxtck)\n"
				"   {\n"
				"    return;\n"
				"   }\n"
				"   window.chkbxtck=false;\n"
				"   tc.checked=false;\n"
				"   tc.disabled=true;\n"
				"   var flds=document.getElementsByTagName('fieldset');\n"
				"   var lc=this.value.toLowerCase();\n"
				"   for(var i=0,j,k=false;j=flds[i];i++)\n"
				"   {\n"
				"    j.anyhits=false;\n"
				"    if(lc&&(j.getElementsByTagName('legend')[0].firstChild.nodeValue.toLowerCase().indexOf(lc)+1))\n"
				"    {\n"
				"     j.anyhits=true;\n"
				"    }\n"
				"    var rows=j.getElementsByTagName('tr');\n"
				"    for(var n=0,m;m=rows[n];n++)\n"
				"    {\n"
				"     var val1=m.cells[0].firstChild.firstChild.nodeValue+'\\n' +\n"
				"       m.cells[1].getElementsByTagName('input')[0].value;\n"
				"     if(lc&&(val1.toLowerCase().indexOf(lc)+1))\n"
				"     {\n"
				"      if(!m.className||m.className=='match')\n"
				"      {\n"
				"       m.className='wasmatch';\n"
				"      }\n"
				"      j.anyhits=true;\n"
				"     }\n"
				"     else\n"
				"     {\n"
				"      if(m.className)\n"
				"      {\n"
				"       m.className='';\n"
				"      }\n"
				"     }\n"
				"    }\n"
				"    if(j.anyhits)\n"
				"    {\n"
				"     k=true;\n"
				"    }\n"
				"    var nv=lc?(j.anyhits?'dirty expanded':'dirty'):'notexpanded';\n"
				"    if(nv!=j.className)\n"
				"    {\n"
				"     j.className=nv;\n"
				"    }\n"
				"    if(!lc)\n"
				"    {\n"
				"     j.anyhits = false;\n"
				"    }\n"
				"   }\n"
				"   document.getElementById('nohits').className=(k||!lc)?'':'nonefound';\n"
				"   tc.disabled=false;\n"
				"  }\n"
				"  var kwd;\n"
				"  document.addEventListener('keydown',function(e){kwd=e.target;},false);\n"
				"  sf.addEventListener('keyup',s,false);\n"
				"  sf.addEventListener('change',s,false);\n"
				"  if(location.hash)\n"
				"  {\n"
				"   var sf=location.hash.replace(/^#/,'');\n"
				"   var tf=sf.split('|');\n"
				"   if(tf[0])\n"
				"   {\n"
				"    tf[0]=unescape(tf[0]).toLowerCase().replace(/\\s+/g,'');\n"
				"   }\n"
				"   if(il[tf[0]])\n"
				"   {\n"
				"    var oe=document.createEvent('MouseEvents');\n"
				"    oe.initMouseEvent('click',false,true,window,0,0,0,0,0,false,false,false,false,0,il[tf[0]]);\n"
				"    il[tf[0]].dispatchEvent(oe);\n"
				"    var st=il[tf[0]];\n"
				"    if(tf[1])\n"
				"    {\n"
				"     tf[1]=unescape(tf[1]).toLowerCase().replace(/\\s+/g,'');\n"
				"     var ar=il[tf[0]].parentNode.getElementsByTagName('label');\n"
				"     for(var ro=0,ra;ra=ar[ro];ro++)\n"
				"     {\n"
				"      if(ra.firstChild.nodeValue.replace(/\\s+/g,'').toLowerCase()==tf[1])\n"
				"      {\n"
				"       st=ra.parentNode;\n"
				"       ra.parentNode.parentNode.getElementsByTagName('input')[0].focus();\n"
				"       ra.parentNode.parentNode.className='match';\n"
				"       break;\n"
				"      }\n"
				"     }\n"
				"    }\n"
				"    var posl=0;\n"
				"    while(st)\n"
				"    {\n"
				"     posl+=st.offsetTop;\n"
				"     st=st.offsetParent;\n"
				"    }\n"
				"    window.scrollTo(0,posl-4);\n"
				"   }\n"
				"   else\n"
				"   {\n"
				"    var sb=document.getElementById('searchbox').getElementsByTagName('input')[0];\n"
				"    sb.value=unescape(sf);\n"
				"    sb.focus();\n"
				"    var oe=document.createEvent('HTMLEvents');\n"
				"    oe.initEvent('change',false,true);\n"
				"    sb.dispatchEvent(oe);\n"
				"   }\n"
				"  }\n"
				" },\n"
				" false\n"
				");\n"
#ifndef USE_MINIMAL_OPERA_CONFIG
				/* Scroll-to-position for internal links
				 */
				"function sct(ln)\n"
				"{\n"
				" var lps=0,sln=ln;\n"
				" ln=ln.parentNode;\n"
				" while(ln)\n"
				" {\n"
				"  lps+=ln.offsetTop;\n"
				"  ln=ln.offsetParent;\n"
				" }\n"
				" window.scrollTo(0,lps-4);\n"
				" sln.parentNode.parentNode.getElementsByTagName('input')[0].focus();\n"
				"};\n"

				"var xhr=new XMLHttpRequest(),queued=[],helpdisp;\n"
				"function hlp(oLink,n)\n"
				"{\n"
				" var lps,ln=oLink.parentNode;\n"
				" if(!helpdisp)\n"
				" {\n"
				"  helpdisp=document.getElementById('helpdisp');\n"
				" }\n"
				" queued=[\n"
				"  document.getElementById('s'+n).getElementsByTagName('legend')[0].firstChild.nodeValue,\n"
				"  oLink.parentNode.parentNode.getElementsByTagName('label')[0].firstChild.nodeValue,\n"
				"  oLink.parentNode.parentNode\n"
				" ];\n"
				" lps=ln.offsetHeight;\n"
				" while(ln)\n"
				" {\n"
				"  lps+=ln.offsetTop;\n"
				"  ln=ln.offsetParent;\n"
				" }\n"
				" helpdisp.style.top=lps+'px';\n"
				" helpdisp.className='showtip';\n"
				" if(xhr.readyState==0)\n"
				" {\n"
				" 	xhr.onreadystatechange=function()\n"
				" 	{\n"
				" 	 if(this.readyState==4)\n"
				" 	 {\n"
				" 	  proq(this.responseXML);\n"
				" 	 }\n"
				" 	};\n"
				"  xhr.open('GET','http://help.opera.com/operaconfig/?version='+encodeURIComponent(opera.version())+'&opsys='+encodeURIComponent(navigator.platform)+'&lang='+encodeURIComponent(navigator.language),true);\n"
				"  xhr.send(null);\n"
				" }\n"
				" else if(xhr.readyState==4)\n"
				" {\n"
				"  proq(xhr.responseXML);\n"
				" }\n"
				" return false;\n"
				"}\n"
				"function proq(xhr)\n"
				"{\n"
				" if(xhr)\n"
				" {\n"
				"  var p=xhr.evaluate('//x:caption[normalize-space(text())=\\'['+queued[0]+']\\']/parent::x:table//*[normalize-space(text())=\\''+queued[1]+'\\']/ancestor::x:tr/x:td[position()=2]',xhr,function (a) { return 'http://www.w3.org/1999/xhtml'; },XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;\n"
				"  if(p)\n"
				"  {\n"
				"   while(helpdisp.lastChild.firstChild)\n"
				"   {\n"
				"    helpdisp.lastChild.removeChild(helpdisp.lastChild.firstChild);\n"
				"   }\n"
				"   for(var i=0;i<p.childNodes.length;i++)\n"
				"   {\n"
				"    helpdisp.lastChild.appendChild(cpy(p.childNodes[i]));\n"
				"   }\n"
				"   return;\n"
				"  }\n"
				" }\n"
				" helpdisp.lastChild.textContent='");
	line.Append(no_information);
	line.Append("';\n"
				"}\n"
				"function clhlp()\n"
				"{\n"
				" if(helpdisp)\n"
				" {\n"
				"  helpdisp.className='';\n"
				" }\n"
				"}\n"
				"function cpy(n)\n"
				"{\n"
				" var l;\n"
				" if(n.nodeType==1)\n"
				" {\n"
				"  if(n.tagName.match(/^(a|address|b|bdo|blockquote|br|cite|code|dd|del|dfn|div|dl|dt|em|hr|i|ins|kbd|li|ol|p|pre|q|samp|span|strong|sub|sup|ul|var)$/i))\n"
				"  {\n"
				"   l=document.createElement(n.tagName);\n"
				"   if(n.tagName.toLowerCase()=='a'&&n.hasAttribute('href')&&!n.getAttribute('href').match(/^(#|(opera|javascript|mailto|news|nntp|gopher|wais):)/))\n"
				"   {\n"
				"    l.setAttribute('href',(n.getAttribute('href').match(/^(https?|ftp):\\/\\//)?'':'http://www.opera.com')+n.getAttribute('href'));\n"
				"    l.setAttribute('target','_blank');\n"
				"   }\n"
				"  }\n"
				"  else\n"
				"  {\n"
				"   l=document.createDocumentFragment();\n"
				"  }\n"
				"  for(var i=0;i<n.childNodes.length;i++)\n"
				"  {\n"
				"   l.appendChild(cpy(n.childNodes[i]));\n"
				"  }\n"
				"  return l;\n"
				" }\n"
				" if(n.nodeType==3)\n"
				" {\n"
				"  return document.createTextNode(n.nodeValue);\n"
				" }\n"
				" return document.createTextNode('');\n"
				"}\n"
				"Node.prototype.hasPart = function (l)\n"
				"{\n"
				" while(l)\n"
				" {\n"
				"  if(l==this)\n"
				"  {\n"
				"   return true;\n"
				"  }\n"
				"  l=l.parentNode;\n"
				" }\n"
				" return false;\n"
				"};\n"
				"function acl(e)\n"
				"{\n"
				" if(!e.target||(e.type!='resize'&&e.target==document)||(e.type=='focus'&&(e.target==document.documentElement||e.target==document.body))||(queued[2]&&queued[2].hasPart(e.target))||(helpdisp&&helpdisp.hasPart(e.target)))\n"
				" {\n"
				"  return;\n"
				" }\n"
				" clhlp();\n"
				"}\n"
				"document.addEventListener('resize',acl,true);\n"
				"document.addEventListener('focus',acl,true);\n"
				"document.addEventListener('click',acl,true);\n"
#endif // !USE_MINIMAL_OPERA_CONFIG
				" </script>\n"
				"</head>\n"
				"<body id=\"opera-config\">\n"
				"<h1>");
	AppendLocaleString(&line, Str::S_CONFIG_TITLE);
	line.Append("</h1>\n");
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

	line.Set("<div>\n"
				" <p id=\"help\">\n"
				"  <a href=\""
#if defined _NO_HELP_ || defined PREFS_OPERACONFIG_EXTERNAL_HELP
				"http://redir.opera.com/www.opera.com/support/usingopera/operaini/"
#else
				"opera:/help/config.html"
#endif
				"\" target=\"_blank\">");
	AppendLocaleString(&line, Str::DI_IDHELP);
	line.Append("</a>\n"
	            " </p>\n"
				" <p id=\"showall\">\n"
				"  <label><input type=\"checkbox\"> ");
	AppendLocaleString(&line, Str::S_CONFIG_SHOW_ALL);
	line.Append("</label>\n"
	            " </p>\n"
				" <p id=\"searchbox\">\n"
				"  <label><input type=\"text\" value=\"");
	AppendLocaleString(&line, Str::S_QUICK_FIND);
	line.Append("\"></label>\n"
				" </p>\n"
				"</div>\n");
	
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));
	
	// Captions for buttons; these are re-used, so only get them once
	OpString save_button, reset_button, defaults_button;
	g_languageManager->GetString(Str::SI_SAVE_BUTTON_TEXT, save_button);
	g_languageManager->GetString(Str::SI_IDFORM_RESET, reset_button);
	g_languageManager->GetString(Str::S_CONFIG_DEFAULT, defaults_button);

	// We need log(256)/log(10) * sizeof(value) characters to store
	// the number, adding one for the rounding, one for the sign
	// and one for the terminator. 53/22 is a good approximation
	// of this.
	static const int formidlen = 3 + sizeof (int) * 53 / 22;
	char secid[formidlen];  /* ARRAY OK 2009-04-23 adame */
	char formid[formidlen]; /* ARRAY OK 2009-04-23 adame */

	// Iterate over the preferences to generate the big list of settings
	const char *cursection = NULL;
	BOOL ignore = FALSE, hasenabled = FALSE;
	int formnum = 0, secnum = 0;
	for (unsigned int i = 0; i < len; ++ i)
	{
		if (!i || op_strcmp(cursection, m_settings[i].section))
		{
			cursection = m_settings[i].section;
			// Ignore certain sections:
			//  RM* (ERA settings not publically known)
			//  State (these are state information, not settings)
			//  Opera Sync Server (policy decision)
			if ((ignore = ((cursection[0] == 'R' && cursection[1] == 'M')
#if defined PREFS_HAVE_DESKTOP_UI || defined PREFS_HAVE_UNIX_PLUGIN
						   || !op_strcmp(cursection, "State")
#endif
#ifdef SUPPORT_DATA_SYNC
						   || !op_strcmp(cursection, "Opera Sync Server")
#endif
						  )))
			{
				continue;
			}

			// Id number for this section
			op_itoa(secnum ++, secid, 10);

			// Start a new fieldset for this section
			line.Set("<fieldset id=\"s");
			line.Append(secid);
			line.Append("\">\n <legend>");
			line.Append(m_settings[i].section);
			line.Append("</legend>\n <table>\n");
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

			hasenabled = FALSE;
		}

		// Skip entry if we're in an ignored section
		if (ignore)
		{
			continue;
		}

		// Id number for this key
		op_itoa(formnum ++, formid, 10);

		line.Set("  <tr>\n   <th><label for=\"f");
		line.Append(formid);
		line.Append("\">");
		line.Append(m_settings[i].key);
		line.Append("</label></th>\n   <td>\n    <input type=\"");

		// Flags
		BOOL required = FALSE;

		// Bug#196702: File names should be quoted, to be consistent with
		// what Opera does when you select a value in the file selector.
		BOOL quote_value = FALSE;
		
		switch (m_settings[i].type)
		{
		default:
			OP_ASSERT(!"Unknown data type");
			// FALLTHROUGH
		case prefssetting::string:
			line.Append("text\" class=\"string");
			break;

		case prefssetting::directory:
			line.Append("text\" class=\"directory");
			break;

		case prefssetting::integer:
			line.Append("number\" class=\"integer\" step=\"1");
			break;

		case prefssetting::boolean:
			line.Append("checkbox");
			break;

		case prefssetting::requiredfile:
			required = TRUE;
		case prefssetting::file:
			quote_value = TRUE;
			line.Append("file\" class=\"file");
			break;

		case prefssetting::color:
			line.Append("color\" class=\"color");
			break;
		}

		if (m_settings[i].type == prefssetting::boolean)
		{
			// Checkbox
			if (m_settings[i].value.CStr()[0] != '0')
			{
				line.Append("\" checked=\"checked");
			}
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));
			line.Empty();
		}
		else
		{
			// Normal value
			line.Append("\" value=\"");
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));
			line.Empty();
			if (quote_value)
			{
				line.Append("&quot;"); // Gets added both before and after
				RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));
			}
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, m_settings[i].value));
		}

		line.Append("\" id=\"f");
		line.Append(formid);

		if (required)
		{
			line.Append("\" required=\"required");
		}

		if (disable_settings
# ifdef PREFSFILE_CASCADE
		    || !m_settings[i].enabled
# endif
		   )
		{
			line.Append("\" disabled=\"disabled\">\n");
		}
		else
		{
			line.Append("\">\n    <button type=\"button\" onclick=\"d(this,");
			line.Append(secid);
			line.Append(")\">");
			line.Append(defaults_button);
			line.Append("</button>\n");

			hasenabled = TRUE;
		}

#ifndef USE_MINIMAL_OPERA_CONFIG
		// Scroll-to-position link
		line.Append("    <a href=\"#");
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

		// Kill all spaces in the link anchor name
		line.Set(m_settings[i].section);
		line.Append("|");
		line.Append(m_settings[i].key);
		uni_char *source = line.CStr(), *dest = source;
		do
		{
			if (*source != ' ')
			{
				*(dest ++) = *source;
			}
			++ source;
		} while(*source);
		*dest = 0;
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

		line.Set("\" onclick=\"sct(this);\">\xBB</a>\n");
		line.Append("<a href=\"#\" onclick=\"return hlp(this,");
		line.Append(secid);
		line.Append(")\">?</a>\n");
#endif // !USE_MINIMAL_OPERA_CONFIG
		line.Append("</td>\n  </tr>\n");
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

		if (i == len - 1 || op_strcmp(cursection, m_settings[i + 1].section))
		{
			// Add OK and Reset button for section. On some platforms,
			// the OK button should be on the right and on some it should
			// be on the left.

			if (g_op_ui_info->DefaultButtonOnRight())
			{
				line.Set(" </table>\n"
						" <div>\n"
						"  <button type=\"button\" onclick=\"o(this,0)\">");
				line.Append(reset_button);
				line.Append("</button>\n"
							"  <button type=\"button\" onclick=\"o(this,1)\"");
				if (hasenabled)
					line.Append(">");
				else
					line.Append(" disabled=\"disabled\">");
				line.Append(save_button);
				line.Append("</button>\n"
							" </div>\n"
							"</fieldset>\n");
			}
			else
			{
				line.Set(" </table>\n"
						" <div>\n"
						"  <button type=\"button\" onclick=\"o(this,1)\"");
				if (hasenabled)
					line.Append(">");
				else
					line.Append(" disabled=\"disabled\">");
				line.Append(save_button);
				line.Append("</button>\n"
							"  <button type=\"button\" onclick=\"o(this,0)\">");
				line.Append(reset_button);
				line.Append("</button>\n"
							" </div>\n"
							"</fieldset>\n");
			}

			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));
		}
	}

	// String to display if search fails
	line.Set("<p id=\"nohits\">");
	AppendLocaleString(&line, Str::S_NO_MATCHES_FOUND);
	line.Append("</p>\n");
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

#ifndef USE_MINIMAL_OPERA_CONFIG
	line.Set("<div id=\"helpdisp\"><div><a href=\"#\" onclick=\"clhlp();return false;\">X</a></div><div>");
	AppendLocaleString(&line, Str::S_CONFIG_LOADING);
	line.Append("</div></div>");
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));
#endif // !USE_MINIMAL_OPERA_CONFIG

	// Finish the document and close the document
	return CloseDocument();
}
Ejemplo n.º 16
0
void XMLReader::OpenDocument(const std::string& aFilePath)
{
	CloseDocument();

	myDoc = new tinyxml2::XMLDocument();
	
	tinyxml2::XMLError error = myDoc->LoadFile(aFilePath.c_str());
	if (error == tinyxml2::XMLError::XML_SUCCESS)
	{
		myHasOpenedDoc = true;
		myFilePath = aFilePath;
	}
	else
	{
#pragma region Error-Codes
		switch (error)
		{
		case tinyxml2::XML_NO_ATTRIBUTE:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_NO_ATTRIBUTE", aFilePath.c_str());
			break;
		case tinyxml2::XML_WRONG_ATTRIBUTE_TYPE:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_WRONG_ATTRIBUTE_TYPE", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_FILE_NOT_FOUND:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_FILE_NOT_FOUND", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_FILE_COULD_NOT_BE_OPENED:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_FILE_COULD_NOT_BE_OPENED", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_FILE_READ_ERROR:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_FILE_READ_ERROR", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_ELEMENT_MISMATCH:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_ELEMENT_MISMATCH", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING_ELEMENT:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING_ELEMENT", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING_ATTRIBUTE:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING_ATTRIBUTE", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_IDENTIFYING_TAG:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_IDENTIFYING_TAG", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING_TEXT:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING_TEXT", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING_CDATA:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING_CDATA", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING_COMMENT:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING_COMMENT", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING_DECLARATION:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING_DECLARATION", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING_UNKNOWN:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING_UNKNOWN", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_EMPTY_DOCUMENT:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_EMPTY_DOCUMENT", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_MISMATCHED_ELEMENT:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_MISMATCHED_ELEMENT", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_PARSING:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_PARSING", aFilePath.c_str());
			break;
		case tinyxml2::XML_CAN_NOT_CONVERT_TEXT:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_CAN_NOT_CONVERT_TEXT", aFilePath.c_str());
			break;
		case tinyxml2::XML_NO_TEXT_NODE:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_NO_TEXT_NODE", aFilePath.c_str());
			break;
		case tinyxml2::XML_ERROR_COUNT:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: XML_ERROR_COUNT", aFilePath.c_str());
			break;
		default:
			DL_DEBUG("Failed to Open XML File. File: %s, Error: Unknown, non of tinyxml's error codes caught it :(", aFilePath.c_str());
			break;
		}
#pragma endregion

		DL_ASSERT("[XMLReader]: Failed to Open XML File. Check Debuglog for error");
	}
}
Ejemplo n.º 17
0
XMLReader::~XMLReader()
{
	CloseDocument();
}
Ejemplo n.º 18
0
OP_STATUS OperaWidgets::GenerateData()
{
#ifdef OPERAEXTENSIONS_URL
	if (Widgets == m_pagetype)
	{
#endif
#ifdef _LOCALHOST_SUPPORT_
		RETURN_IF_ERROR(OpenDocument(Str::S_WIDGETS_TITLE, PrefsCollectionFiles::StyleWidgetsFile));
#else
		RETURN_IF_ERROR(OpenDocument(Str::S_WIDGETS_TITLE));
#endif
#ifdef OPERAEXTENSIONS_URL
	}
	else
	{
# ifdef _LOCALHOST_SUPPORT_
		RETURN_IF_ERROR(OpenDocument(Str::S_EXTENSIONS_TITLE, PrefsCollectionFiles::StyleWidgetsFile));
# else
		RETURN_IF_ERROR(OpenDocument(Str::S_EXTENSIONS_TITLE));
# endif
	}
#endif

	RETURN_IF_ERROR(OpenBody());

	OpString line;

	OpString open_widget, close_widget, delete_widget, widget_properties, widget_options;
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	OpString widget_check_update;
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
#ifdef OPERAEXTENSIONS_URL
	if (Widgets == m_pagetype)
	{
#endif
		RETURN_IF_ERROR(JSSafeLocaleString(&open_widget, Str::S_WGTMGR_CMD_OPEN_WIDGET));
		RETURN_IF_ERROR(JSSafeLocaleString(&close_widget, Str::S_WM_CLOSE_WIDGET));
#ifdef OPERAEXTENSIONS_URL
	}
	else
	{
		RETURN_IF_ERROR(JSSafeLocaleString(&open_widget, Str::S_WEBSERVER_START_SERVICE));
		RETURN_IF_ERROR(JSSafeLocaleString(&close_widget, Str::S_WEBSERVER_STOP_SERVICE));
		RETURN_IF_ERROR(JSSafeLocaleString(&widget_options, Str::S_WGTMGR_TITLE_OPTIONS));
	}
#endif
	RETURN_IF_ERROR(JSSafeLocaleString(&delete_widget, Str::S_WGTMGR_CMD_DELETE_WIDGET));
	RETURN_IF_ERROR(JSSafeLocaleString(&widget_properties, Str::D_WIDGET_PROPERTIES));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	RETURN_IF_ERROR(JSSafeLocaleString(&widget_check_update, Str::S_WIDGET_UPDATE_BUTTON));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON

	RETURN_IF_ERROR(line.Append(
		"\n<script type='text/javascript'>\n"
		"	window.addEventListener('load', init, false);\n\n"
		"	function init()"
		"	{\n"));
#ifdef OPERAEXTENSIONS_URL
	if (Widgets == m_pagetype)
	{
#endif
		RETURN_IF_ERROR(line.Append(
		"		if(opera && opera.widgetManager)"
		"		{\n"
		"			var wmgr = opera.widgetManager;\n"));
#ifdef OPERAEXTENSIONS_URL
	}
	else
	{
		OP_ASSERT(Extensions == m_pagetype);
		RETURN_IF_ERROR(line.Append(
		"		if(opera && opera.extensionManager)"
		"		{\n"
		"			var wmgr = opera.extensionManager;\n"));
	}
#endif
	RETURN_IF_ERROR(line.Append(
		"			var wdgts = wmgr.widgets;\n"
		"\n"
		"			var list = document.getElementById('gadget_list');\n"
		"			var olay = document.getElementById('overlay');\n"
		"			var info = document.getElementById('info');\n"
		"			var btn_open = document.getElementById('btn_open');\n"
		"			var btn_close = document.getElementById('btn_close');\n"
		"			var btn_del = document.getElementById('btn_del');\n"
		"			var btn_info = document.getElementById('btn_info');\n"));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
		RETURN_IF_ERROR(line.Append("			var btn_update = document.getElementById('btn_update');\n"));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
		RETURN_IF_ERROR(line.Append("			var btn_update_url = document.getElementById('btn_update_url');\n"));
#ifdef OPERAEXTENSIONS_URL
	if (Extensions == m_pagetype)
		RETURN_IF_ERROR(line.Append(
				"			var btn_options = document.getElementById('btn_options');\n"));
#endif
	RETURN_IF_ERROR(line.Append(
		"			var sel_wmode = document.getElementById('sel_wmode');\n"
		"\n"
		"			btn_open.addEventListener('click', hndl_click, false);\n"
		"			btn_close.addEventListener('click', hndl_click, false);\n"
		"			btn_del.addEventListener('click', hndl_click, false);\n"
		"			btn_info.addEventListener('click', hndl_click, false);\n"
		"			list.addEventListener('keyup', hndl_keyup, false);\n"));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	RETURN_IF_ERROR(line.Append(
		"			btn_update.addEventListener('click', hndl_click, false);\n"));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	RETURN_IF_ERROR(line.Append(
		"			btn_update_url.addEventListener('click', hndl_click, false);\n"));
#ifdef OPERAEXTENSIONS_URL
	if (Extensions == m_pagetype)
		RETURN_IF_ERROR(line.Append(
		"			var btn_https = document.getElementById('btn_https');\n"
		"			var btn_private = document.getElementById('btn_private');\n"
		"			btn_https.addEventListener('click', hndl_https, false);\n"
		"			btn_private.addEventListener('click', hndl_private, false);\n"
		"			list.addEventListener('change', hndl_list_select, false);\n"));
#endif
#ifdef OPERAEXTENSIONS_URL
	if (Extensions == m_pagetype)
		RETURN_IF_ERROR(line.Append(
				"			btn_options.addEventListener('click', hndl_click, false);\n"));
#endif
	if (Widgets == m_pagetype)
		RETURN_IF_ERROR(line.Append(
		"			sel_wmode.addEventListener('change', set_wmode, false);\n"));

	RETURN_IF_ERROR(line.Append(
		"\n"
		"			list_gadgets();\n"
		"		}\n"
		"		function list_gadgets()"
		"		{\n"
		"			list.innerHTML = '';\n"
		"			list.style.height  = '' + parseInt(window.innerHeight * 0.6) + 'px';\n"
		"			for (var i = 0; wdgts[i]; ++i)"
		"			{\n"
		"				var item = document.createElement('option');\n"
		"				witem = wdgts[i];\n"
		"				item.id = 'wdgt_' + i;\n"
		"				item.value = i;\n"));
#ifdef OPERAEXTENSIONS_URL
	if (Extensions == m_pagetype)
		RETURN_IF_ERROR(line.Append(
		"				item.allow_https = true;\n"
		"				item.allow_private = false;\n"));
#endif
	RETURN_IF_ERROR(line.Append(
		"				item.appendChild(document.createTextNode(witem.name));\n"
		"				list.appendChild(item);\n"
		"			}\n"
		"		}\n"
		"\n"));
#ifdef OPERAEXTENSIONS_URL
	if (Extensions == m_pagetype)
		RETURN_IF_ERROR(line.Append(
		"		function colourCode(priv_enabled, https_enabled) {\n"
		"			var colour = priv_enabled ? 'green' : (!https_enabled ? 'lightgreen' : 'white');\n"
		"			return colour;\n"
		"		}\n"
		"		function hndl_https(evt){\n"
		"			var list = document.getElementById('gadget_list');\n"
		"			if (list.selectedIndex >= 0) {\n"
		"			    var elt = list.options[list.selectedIndex];\n"
		"			    elt.allow_https = !elt.allow_https;\n"
		"			    wdgts[list.selectedIndex].setExtensionProperty('allow_https', elt.allow_https);\n"
		"			    elt.style.backgroundColor = colourCode(elt.allow_private, elt.allow_https);\n"
		"			}\n"
		"		}\n"
		"		function hndl_private(evt){\n"
		"			var list = document.getElementById('gadget_list');\n"
		"			if (list.selectedIndex >= 0) {\n"
		"			    var elt = list.options[list.selectedIndex];\n"
		"			    elt.allow_private = !elt.allow_private;\n"
		"			    wdgts[list.selectedIndex].setExtensionProperty('allow_private', elt.allow_private);\n"
		"			    elt.style.backgroundColor = colourCode(elt.allow_private, elt.allow_https);\n"
		"			}\n"
		"		}\n"
		"		function hndl_list_select(evt){\n"
		"			if (evt.target && evt.target.selectedIndex >= 0) {\n"
		"			    var el_id = evt.target.selectedIndex;\n"
		"			    var is_https = evt.target.options[el_id].allow_https;\n"
		"			    var is_priv = evt.target.options[el_id].allow_private;\n"
		"			    document.getElementById('btn_https').checked = is_https;\n"
		"			    document.getElementById('btn_private').checked = is_priv;\n"
		"		    }\n"
		"		}\n"));
#endif
	RETURN_IF_ERROR(line.Append(
		"		function hndl_click(evt)"
		"		{\n"
		"			if (evt.target && evt.target.nodeType == 1)"
		"			{\n"
		"				var el_id = evt.target.id;\n"
		"				var ar_act = new Array();\n"
		"				for (var i = 0; list.options[i]; ++i)"
		"				{\n"
		"					var opt = list.options[i];\n"
		"					if (opt.selected)"
		"					{\n"
		"						ar_act.push(opt.value);\n"
		"					}\n"
		"				}\n"
		"				var action;\n"
		"				var extra_args = '';\n"
		"				switch (el_id)"
		"				{\n"
		"					case 'btn_open':\n"
		"						action = 'run';\n"));
#ifdef OPERAEXTENSIONS_URL
	if (Extensions == m_pagetype)
		RETURN_IF_ERROR(line.Append(
		"						extra_args = list.selectedIndex < 0 ? '' : (', ' + list.options[list.selectedIndex].allow_https + ', ' + list.options[list.selectedIndex].allow_private);\n"));
#endif
	RETURN_IF_ERROR(line.Append(
		"						break;\n"
		"					case 'btn_close':\n"
		"						action = 'kill';\n"
		"						break;\n"
		"					case 'btn_del':\n"
		"						action = 'uninstall';\n"
		"						break;\n"
		"					case 'btn_info':\n"
		"						action = 'info';\n"
		"						break;\n"));
#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	RETURN_IF_ERROR(line.Append(
		"					case 'btn_update':\n"
		"						action = 'checkForUpdate';\n"
		"						break;\n"));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	RETURN_IF_ERROR(line.Append(
		"					case 'btn_update_url':\n"
		"						//action = 'checkForUpdateByUrl';\n"
		"						//extra_args = ', '+document.getElementById('update_url').value\n"
		"						wmgr.checkForUpdateByUrl(document.getElementById('update_url').value)\n"
		"						break;\n"));
	RETURN_IF_ERROR(line.Append(
		"					case 'btn_options':\n"
		"						action = 'options';\n"
		"						break;\n"
		"				}\n"
		"				if (action != 'info')"
		"				{\n"
		"					if (action == 'options' && !wmgr.options) return;\n"
		"					for (var i=ar_act.length - 1; ar_act[i]; --i){\n"
		"						eval ('wmgr.' + action + '(wdgts[' + ar_act[i] + ']' + extra_args + ')');\n"
		"					}\n"
		"					if (action == 'uninstall')"
		"					{\n"
		"						list_gadgets();\n"
		"						list.selectedIndex = !ar_act[0] ? 0 : (ar_act[0] - 1);\n"
		"					}\n"
		"				}"
		"				else"
		"				{\n"
		"					// show info box for a single widget only\n"
		"					show_gadget_info(ar_act[0]);\n"
		"				}\n"
		"			}\n"
		"		}\n"
		"\n"
		"		function hndl_keyup(e)\n"
		"		{\n"
		"			if (e.keyCode == 46)\n"
		"			{\n"
		"				btn_del.click();\n"
		"			}\n"
		"			else if (e.keyCode == 13)\n"
		"			{\n"
		"				btn_open.click();\n"
		"			}\n"
		"		}\n"
		"\n"
		"		function set_wmode(e)\n"
		"		{\n"
		"			var wmodes = e.target.value;\n"
		"			var ar_act = new Array();\n"
		"			for (var i = 0; list.options[i]; ++i){\n"
		"				var opt = list.options[i];\n"
		"				if (opt.selected){\n"
		"					ar_act.push(opt.value);\n"
		"				}\n"
		"			}\n"
		"			for (var i=ar_act.length - 1; ar_act[i]; --i){\n"
		"				while (wmodes.length > 0){\n"
		"					var space_index = wmodes.indexOf(' ');\n"
		"					space_index = space_index > 0 ? space_index : wmodes.length;\n"
		"					var wmode = wmodes.substr(0, space_index);\n"
		"					wmgr.setWidgetMode(wdgts[ar_act[i]], wmode);\n"
		"					wmodes = wmodes.substr(space_index+1);\n"
		"				}\n"
		"			}\n"
		"		}\n"
		"\n"
		"		function show_gadget_info(idx){\n"
		"			var wdgt = wdgts[idx];\n"
		"			if (!wdgt) return;\n"
		"			info.innerHTML = '';\n"
		"			var btnc = document.createElement('button');\n"
		"			btnc.textContent = 'x';\n"
		"			btnc.addEventListener('click', function () {olay.style.display = 'none';}, false);\n"
		"			document.getElementById('dtitle').innerHTML = '' ;\n"
		"			document.getElementById('dtitle').appendChild(btnc);\n"
		"			var tbl = document.createElement('table');\n"
		"			var trow = tbl.appendChild(document.createElement('tr'));\n"
		"			for (x in wdgt){\n"
		"				var item = document.createElement('tr');\n"
		"				item.appendChild(document.createElement('th')).appendChild(document.createTextNode(x));\n"
		"				item.appendChild(document.createElement('td')).appendChild(document.createTextNode(wdgt[x]));\n"
		"				tbl.appendChild(item);\n"
		"			}\n"
		"			var icon_item = document.createElement('tr');\n"
		"			icon_item.appendChild(document.createElement('th')).appendChild(document.createTextNode('icon'));\n"
		"			var icon_img = document.createElement('img');\n"
		"			icon_img.src = wmgr.getWidgetIconURL(wdgt);\n"
		"			icon_item.appendChild(document.createElement('td')).appendChild(icon_img);\n"
		"			tbl.appendChild(icon_item);\n"
		"			info.appendChild(tbl);\n"
		"			olay.style.display = 'block';\n"
		"		}\n"
		"	}\n"
		"</script>\n"
		"<div id='header'>\n"
		"	<h1>"));
#ifdef OPERAEXTENSIONS_URL
	if (Widgets == m_pagetype)
	{
#endif
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_MANAGE_WIDGETS));
		RETURN_IF_ERROR(line.Append("	</h1>\n"
		"      <p style='text-align:right'><a href='http://widgets.opera.com/'>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_ADD_WIDGETS));
		RETURN_IF_ERROR(line.Append("</a></p>\n"));
#ifdef OPERAEXTENSIONS_URL
	}
	else
	{
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_MANAGE_EXTENSIONS));
		RETURN_IF_ERROR(line.Append("	</h1>\n"		"      <p style='text-align:right'><a href='https://addons.labs.opera.com/addons/extensions/'>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_ADD_EXTENSIONS));
		RETURN_IF_ERROR(line.Append("</a></p>\n"));
	}
#endif
	RETURN_IF_ERROR(line.Append("</h1>"
		"</div>\n"
		"<div id='content'>\n"
		"		<div id='btn_wrapper'>\n"
		"			<button id='btn_open'>"));
	RETURN_IF_ERROR(line.Append(open_widget));
	RETURN_IF_ERROR(line.Append("</button>\n"
		"			<button id='btn_close'>"));
	RETURN_IF_ERROR(line.Append(close_widget));
	RETURN_IF_ERROR(line.Append("</button>\n"
		"			<button id='btn_del'>"));
	RETURN_IF_ERROR(line.Append(delete_widget));
	RETURN_IF_ERROR(line.Append("</button>\n"
		"			<button id='btn_info'>"));
	RETURN_IF_ERROR(line.Append(widget_properties));

#ifdef GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	RETURN_IF_ERROR(line.Append("</button>\n"
		"			<button id='btn_update'>"));
	RETURN_IF_ERROR(line.Append(widget_check_update));
#endif // GADGETS_OPERAWIDGETS_UPDATE_BUTTON
	RETURN_IF_ERROR(line.Append("</button>\n"));

#ifdef OPERAEXTENSIONS_URL
	if (Extensions == m_pagetype)
	{
		RETURN_IF_ERROR(line.Append(
		"			<button id='btn_options'>"));
		RETURN_IF_ERROR(line.Append(widget_options));
		RETURN_IF_ERROR(line.Append("</button>\n"));
		RETURN_IF_ERROR(line.Append(
		"			<input id='btn_https' type='checkbox'>https</input>"
		"			<input id='btn_private' type='checkbox'>private</input>"));
	}
#endif
	if (Widgets == m_pagetype)
	{

		RETURN_IF_ERROR(line.Append("		<label>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_WIDGET_VIEW_MODE));
		RETURN_IF_ERROR(line.Append(":\n"
			"		<select id='sel_wmode'>\n"
			"			<option value='floating widget'>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_WIDGET_VIEW_MODE_FLOATING));
		RETURN_IF_ERROR(line.Append(
			"</option>\n"
			"			<option value='windowed application'>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_WIDGET_VIEW_MODE_WINDOWED));
		RETURN_IF_ERROR(line.Append(
			"</option>\n"
			"			<option value='fullscreen'>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_WIDGET_VIEW_MODE_FULLSCREEN));
		RETURN_IF_ERROR(line.Append(
			"</option>\n"
			"			<option value='maximized'>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_WIDGET_VIEW_MODE_MAXIMIZED));
		RETURN_IF_ERROR(line.Append(
			"</option>\n"
			"			<option value='minimized docked'>"));
		RETURN_IF_ERROR(AppendLocaleString(&line, Str::S_WIDGET_VIEW_MODE_MINIMIZED));
		RETURN_IF_ERROR(line.Append(
			"</option>\n"
			"		</select>\n"
			"		</label>\n"));
	}
	RETURN_IF_ERROR(line.Append("		</div>\n"));

	RETURN_IF_ERROR(line.Append("		<div id='btn_wrapper'>\n"));
	RETURN_IF_ERROR(line.Append("			<input id='update_url' type='text'"));
	RETURN_IF_ERROR(line.Append(" value='Enter update description document URL here...' style=\"width:60%\"></input>\n"));
	RETURN_IF_ERROR(line.Append("			<button id='btn_update_url'>"));
	RETURN_IF_ERROR(line.Append(widget_check_update));
	RETURN_IF_ERROR(line.Append("			</button>\n"));
	RETURN_IF_ERROR(line.Append("		</div>\n"));

	RETURN_IF_ERROR(line.Append("		<select multiple='multiple' id='gadget_list'><option>"));
	RETURN_IF_ERROR(AppendLocaleString(&line, Str::D_GENERIC_ERROR));
	RETURN_IF_ERROR(line.Append("</option></select>\n"
		"</div>\n"
		"<div id='overlay'><div id='dwrapper'><div id='dtitle'></div><div id='info'></div></div></div>\n"
	));

	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line));

	RETURN_IF_ERROR(CloseDocument());

	return OpStatus::OK;
}
Ejemplo n.º 19
0
OP_STATUS OperaDebug::GenerateData()
{
	OpString line, template_string;
	OpString c_text, f_text;
	OpString connect_text, disconnect_text, ip_text, port_text, manual_debug_title;
	OpString warning_first, warning_second;
#if defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	OpString local_debuggers_title, no_local_debuggers_found;
#endif // defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	int port;
	OpStringC ip;

#ifdef _LOCALHOST_SUPPORT_
	RETURN_IF_ERROR(OpenDocument(Str::S_OPERA_DEBUG_TITLE, PrefsCollectionFiles::StyleDebugFile));
#else
	RETURN_IF_ERROR(OpenDocument(Str::S_OPERA_DEBUG_TITLE));
#endif

	// Fetch localized strings
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_DEBUG_CONNECTED, c_text));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_DEBUG_WARNING_1, warning_first));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_DEBUG_DISCONNECT, disconnect_text));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_DEBUG_IP_ADDRESS, ip_text));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_DEBUG_PORT_NUMBER, port_text));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_DEBUG_WARNING_2, warning_second));
#if defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_FOUND_LOCAL_DEBUGGERS_TITLE, local_debuggers_title));
#endif // defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_MANUAL_ENTER_DEBUGGER_TITLE, manual_debug_title));

	// Escape localized strings used in JavaScript
	RETURN_IF_ERROR(JSSafeLocaleString(&f_text, Str::S_DEBUG_FAILED));
	RETURN_IF_ERROR(JSSafeLocaleString(&connect_text, Str::S_DEBUG_CONNECT));
#if defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	RETURN_IF_ERROR(JSSafeLocaleString(&no_local_debuggers_found, Str::S_NO_LOCAL_DEBUGGERS_FOUND));
#endif // defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)

	ip = g_pctools->GetStringPref(PrefsCollectionTools::ProxyHost);
	port = g_pctools->GetIntegerPref(PrefsCollectionTools::ProxyPort);

	RETURN_IF_ERROR(line.Append("<script type=\"text/javascript\">\n"
								"var previousDevices = [];\n"));
	RETURN_IF_ERROR(line.AppendFormat(UNI_L("var lastConnectedAddress=\"%s\";\n"), ip.CStr()));
	RETURN_IF_ERROR(line.AppendFormat(UNI_L("var lastConnectedPort=%d;\n"), port));
	RETURN_IF_ERROR(line.Append("var lastConnectElement;\n"
								"window.onload = function ()\n"
								"{\n"
								"   opera.setConnectStatusCallback(connectionCallback);\n"
								"   if (opera.isConnected())\n"
								"      setConnected();\n"
								"   else\n"
								"      setDisconnected();\n"));
#if defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	RETURN_IF_ERROR(line.Append("   var devicelist=opera.nearbyDragonflies;\n"
								"   opera.setDevicelistChangedCallback(discoverDragonflies, devicelist);\n"
								"   discoverDragonflies(devicelist); // make sure we update once, since the callback above only notifies changes\n"));
#endif // defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	RETURN_IF_ERROR(line.Append("}\n"
								"function setLastConnectionDetails(ipaddress, port, element)\n"
								"{\n"
								"   lastConnectedAddress = ipaddress;\n"
								"   lastConnectedPort = port;\n"
								"   lastConnectElement = element;\n"
								"}\n"
								"function setupAndConnectFromForm(triggerElement)\n"
								"{\n"
								"   var ip = document.getElementById('ip');\n"
								"   var port = document.getElementById('port');\n"
								"   doConnect(ip.value, port.value, document.getElementById('form_connect_button'));\n"
								"}\n"));
#if defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	RETURN_IF_ERROR(line.Append("function updateListviewNoneFound(current_items)\n"
								"{\n"
								"   var deviceUl = document.getElementById('detected_dragonflies');\n"
								"   if(!deviceUl)\n"
								"      return;\n"
								"   var retelem = document.getElementById('none_found');\n"
								"   if(current_items == 0 && !retelem)\n"
								"   {\n"
								"      li = deviceUl.appendChild(document.createElement('li'));\n"
								"      li.textContent = '"));
	RETURN_IF_ERROR(line.Append(no_local_debuggers_found.CStr()));
	RETURN_IF_ERROR(line.Append("';\n"
								"      li.offsetWidth; // trigger a reflow \n"
								"      li.className = 'show';\n"
								"      li.id = 'none_found';\n"
								"   }\n"
								"   else if(current_items != 0 && retelem)\n"
								"   {\n"
								"      deviceUl.removeChild(retelem); // remove the none_found item without transition\n"
								"   }\n"
								"}\n"
								"function eventFunctionRemoveElement(event)\n"
								"{\n"
								"   var deviceUl = document.getElementById('detected_dragonflies');\n"
								"   deviceUl.removeChild(event.target);\n"
								"// check if we don't have any devices visible and show the 'not found text'\n"
								"   updateListviewNoneFound(previousDevices.length);\n"
								"}\n"
								"// will copy the url entries from the device collection\n"
								"function copyDeviceList(obj)\n"
								"{\n"
								"   var newObj = new Array(obj.length);\n"
								"   for (var i=0; i<obj.length; i++)\n"
								"   {\n"
								"      newObj[i] = obj[i].url;\n"
								"   }\n"
								"   return newObj;\n"
								"}\n"
								"function removeDeviceElement(index)\n"
								"{\n"
								"   var deviceUl = document.getElementById('detected_dragonflies');\n"
								"   if(deviceUl)\n"
								"   {\n"
								"      var elemToRemove = deviceUl.childNodes[index];\n"
								"      if(previousDevices.length == 1)\n"
										  // remove the element without transition to avoid jumping from two to one list items
								"         deviceUl.removeChild(elemToRemove);\n"
								"      else\n"
								"      {\n"
								"         elemToRemove.addEventListener('transitionEnd', eventFunctionRemoveElement, false);\n"
								"         elemToRemove.className = 'hide';\n"
								"      }\n"
								"   }\n"
								"}\n"
								"function updateListElement(li, button, urlstring, iconstring)\n"
								"{\n"
								"   li.style.listStyleImage = \"url('\"+ iconstring + \"')\";\n"
								"   var targetip = urlstring.substring(urlstring.lastIndexOf('/')+1, urlstring.lastIndexOf(':'));\n"
								"   var targetport = urlstring.substring(urlstring.lastIndexOf(':')+1);\n"
								"   var iplabel = li.querySelector('.iplabel');\n"
								"   var portlabel = li.querySelector('.portlabel');\n"
								"   iplabel.textContent = targetip;\n"
								"   portlabel.textContent = targetport;\n"
								"   button.onclick = doConnect.bind(null, targetip, targetport, button);\n"
								"}\n"
								"function updateDeviceElement(index, devices)\n"
								"{\n"
								"   var deviceUl = document.getElementById('detected_dragonflies');\n"
								"   if(!deviceUl)\n"
								"      return;\n"
								"   var device=devices[index];\n"
								"   var elemToChange = deviceUl.childNodes[index];\n"
								"   var button = elemToChange.querySelector('.push_button');\n"
								"   // The expected form of .upnpDevicePayload is the \"http://[ip-address]:[port]\" portion of an URL\n"
								"   updateListElement(elemToChange, button, device.upnpDevicePayload, device.upnpDeviceIcon);\n"
								"}\n"
								"function showDeviceElement(index, devices)\n"
								"{\n"
								"   var deviceUl = document.getElementById('detected_dragonflies');\n"
								"   if(!deviceUl)\n"
								"      return;\n"
								"   var device=devices[index];\n"
								"   li = deviceUl.appendChild(document.createElement('li'));\n"
								"   li.offsetWidth;\n"
								"   li.className = 'show';\n"
								"   dl = li.appendChild(document.createElement('dl'));\n"
								"   iptext = dl.appendChild(document.createElement('dd'));\n"
								"   iptext.className = 'iplabel';\n"
								"   porttext = dl.appendChild(document.createElement('dd'));\n"
								"   porttext.className = 'portlabel';\n"
								"   statuslabel = li.appendChild(document.createElement('p'));\n"
								"   statuslabel.className = 'status_label';\n"
								"   button = li.appendChild(document.createElement('button'));\n"
								"   button.textContent = '"));
	RETURN_IF_ERROR(line.Append(connect_text.CStr()));
	RETURN_IF_ERROR(line.Append("';\n"
								"   button.className = 'push_button';\n"
								"   updateListElement(li, button, device.upnpDevicePayload, device.upnpDeviceIcon);\n"
								"}\n"
								"// set up list of nearby dragonflies\n"
								"function discoverDragonflies(devices)\n"
								"{\n"
								"   var biggest = previousDevices.length > devices.length ? previousDevices.length : devices.length;\n"
								"   for(var i=0; i<biggest; i++)\n"
								"   {\n"
								"      if((previousDevices[i] && devices[i]) && (previousDevices[i] != devices[i].url))\n"
								"      {\n"
								"         updateDeviceElement(i, devices);\n"
								"      }\n"
								"      else if(!devices[i])	// device was removed\n"
								"      {\n"
								"         removeDeviceElement(i);\n"
								"      }\n"
								"      else if(!previousDevices[i])	// device was added\n"
								"      {\n"
								"         showDeviceElement(i, devices);\n"
								"      }\n"
								"   }\n"
								"   previousDevices = copyDeviceList(devices);\n"
								"   updateListviewNoneFound(previousDevices.length);\n"
								"}\n"));
#endif // UPNP_SUPPORT && UPNP_SERVICE_DISCOVERY
	RETURN_IF_ERROR(line.Append("function setConnectionFailed()\n"
								"{\n"
								"   var parentElement = lastConnectElement.parentNode;\n"
								"   var statuslabel = parentElement.querySelector('.status_label');\n"
								"   statuslabel.textContent = '"));
	RETURN_IF_ERROR(line.Append(f_text.CStr()));
	RETURN_IF_ERROR(line.Append("';\n"
								"}\n"
								"function setDisconnected()\n"
								"{\n"
								"   document.getElementById('setup_state').style.display='block';\n"
								"   document.getElementById('connected_state').style.display='none';\n"
								"}\n"
								"function setConnected()\n"
								"{\n"
								"   document.getElementById('setup_state').style.display='none';\n"
								"   document.getElementById('connected_state').style.display='block';\n"
								"   var connectedto = document.getElementById('connected_to');\n"
								"   connectedto.querySelector('.iplabel').textContent = lastConnectedAddress;\n"
								"   connectedto.querySelector('.portlabel').textContent = lastConnectedPort;\n"
								"}\n"
								"function connectionCallback(status)\n"
								"{\n"));
	RETURN_IF_ERROR(line.AppendFormat(UNI_L("   if (status == %u)\n"), OpScopeConnectionManager::CONNECTION_OK));
	RETURN_IF_ERROR(line.Append("      setConnected();\n"));
	RETURN_IF_ERROR(line.AppendFormat(UNI_L("   else if (status == %u)\n"), OpScopeConnectionManager::DISCONNECTION_OK));
	RETURN_IF_ERROR(line.Append("      setDisconnected();\n"));
	RETURN_IF_ERROR(line.AppendFormat(UNI_L(
								"   else if (status == %u)\n"), OpScopeConnectionManager::CONNECTION_FAILED));
	RETURN_IF_ERROR(line.Append("   {\n"
								"      setDisconnected();\n"
								"      setConnectionFailed();\n"
								"   }\n"
								"}\n"
								"function doConnect(ip, port, triggerElement)\n"
								"{\n"
								"   setLastConnectionDetails(ip, port, triggerElement);\n"
								"   if (port > 0 && port < 65536)\n"
								"      opera.connect(ip, port);\n"
								"   else\n"
								"      setConnectionFailed();\n"
								"}\n"
								"function doDisconnect()\n"
								"{\n"
								"   if (opera.isConnected())\n"
								"      opera.disconnect();\n"
								"}\n"
								"</script>\n"
								));

	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));
	line.Empty();

	RETURN_IF_ERROR(OpenBody(Str::S_OPERA_DEBUG_TITLE));

	RETURN_IF_ERROR(template_string.Set(
								"    <div id=\"setup_state\">\n"
								"        <p>%s</p>\n"//warning_first
								"        <p><strong>%s</strong></p>\n"//warning_second
								));
#if defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
	RETURN_IF_ERROR(template_string.Append(
								"        <h2>%s</h2>\n"//local_debuggers_title
								"        <ul id=\"detected_dragonflies\"><li id=\"none_found\" class=\"show\">%s</li></ul>\n"));//no_local_debuggers_found
#endif // UPNP_SUPPORT && UPNP_SERVICE_DISCOVERY
	RETURN_IF_ERROR(template_string.Append(
								"        <h2>%s</h2>\n"//manual_debug_title
								"        <div class=\"manual\">\n"
								"            <dl>\n"
								"                <dt>%s</dt>\n"//ip_text
								"                <dd>\n"
								"                    <input id=\"ip\" type=\"text\" value=\"%s\">\n"//ip
								"                </dd>\n"
								"            </dl>\n"
								"            <dl>\n"
								"                <dt>%s</dt>\n"//port_text
								"                <dd>\n"
								"                    <input id=\"port\" size=\"6\" type=\"text\" value=\"%d\">\n"//port
								"                </dd>\n"
								"            </dl>\n"
								"            <button id=\"form_connect_button\" onclick=\"setupAndConnectFromForm()\">%s</button>\n"//connect_text
								"            <p class=\"status_label\"></p>\n"
								"        </div>\n"
								"    </div>\n"
								"    <div id=\"connected_state\">\n"
								"        <p><strong>%s</strong></p>\n"//warning_second
								"        <ul id=\"connected_to\" class=\"connected\">\n"
								"            <li class=\"show\">\n"
								"                <dl>\n"
								"                   <dd>%s</dd>\n"//c_text
								"                   <dd class=\"iplabel\"></dd>\n"
								"                   <dd class=\"portlabel\"></dd>\n"
								"                   <dd><button onclick=\"doDisconnect()\">%s</button></dd>\n"//disconnect_text
								"                </dl>\n"
								"            </li>\n"
								"        </ul>\n"
								"    </div>\n"));

	OP_STATUS status = line.AppendFormat(template_string.CStr()
		,warning_first.CStr()
		,warning_second.CStr()
#if defined(UPNP_SUPPORT) && defined (UPNP_SERVICE_DISCOVERY)
		,local_debuggers_title.CStr()
		,no_local_debuggers_found.CStr()
#endif // UPNP_SUPPORT && UPNP_SERVICE_DISCOVERY
		,manual_debug_title.CStr()
		,ip_text.CStr()
		,ip.CStr()
		,port_text.CStr()
		,port
		,connect_text.CStr()
		,warning_second.CStr()
		,c_text.CStr()
		,disconnect_text.CStr()
		);
	RETURN_IF_ERROR(status);
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, line.CStr()));

	return CloseDocument();
}
Ejemplo n.º 20
0
OP_STATUS OperaPlugins::GenerateData()
{
#ifdef _LOCALHOST_SUPPORT_
	RETURN_IF_ERROR(OpenDocument(Str::SI_PLUGIN_LIST_TEXT, PrefsCollectionFiles::StylePluginsFile));
#else
	RETURN_IF_ERROR(OpenDocument(Str::SI_PLUGIN_LIST_TEXT));
#endif
	OpString disabled_plugin_string;
	RETURN_IF_ERROR(g_languageManager->GetString(Str::SI_IDSTR_PLUGIN_DISABLED, disabled_plugin_string));

	BOOL global_state = g_pcdisplay->GetIntegerPref(PrefsCollectionDisplay::PluginsEnabled) != 0;
	OpAutoVector<OpString> plugin_path_list;
	OpVector<PluginViewer> filtered_viewer_list;

	// Get strings
	OpString enable, disable, details, description, refresh, global_enable;
	RETURN_IF_ERROR(JSSafeLocaleString(&enable, Str::S_LITERAL_ENABLE));
	RETURN_IF_ERROR(JSSafeLocaleString(&disable, Str::S_LITERAL_DISABLE));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_PLUGIN_LIST_DETAILS, details));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_PLUGIN_LIST_PLUGIN_DESC, description));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_PLUGIN_REFRESH, refresh));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::DI_IDM_PLUGINS_TOGGLE, global_enable));
#ifdef ABOUT_PLUGINS_SHOW_ARCHITECTURE
	OpString arch_label, arch_native, arch_non_native;
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_PLUGIN_LIST_ARCHITECTURE, arch_label));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_PLUGIN_LIST_ARCHITECTURE_NATIVE, arch_native));
	RETURN_IF_ERROR(g_languageManager->GetString(Str::S_PLUGIN_LIST_ARCHITECTURE_NON_NATIVE, arch_non_native));
#endif // ABOUT_PLUGINS_SHOW_ARCHITECTURE

	OpString js_code;
	PluginViewers *plugin_viewer_list = g_plugin_viewers;	// Cache global
	const bool detecting = plugin_viewer_list->IsDetecting();
	// TODO CORE-40424: should either consolidate non-NS4P_COMPONENT_PLUGINS and
	// NS4P_COMPONENT_PLUGINS code so that are handled similarly or make a clear
	// separation between them using ifdefery. See http://critic-dev.oslo.osa/showcomment?chain=64850.
	if (detecting)
	{
		RETURN_IF_ERROR(js_code.Set(" <script type=\"text/javascript\">\n"
		                            "   window.onload = function()\n"
		                            "   {\n"
		                            "     setTimeout(\"window.location.reload()\", 3000);\n"
		                            "   };\n"
		                            " </script>\n"));
	}
	else
	{
		// Force sync detection if async did not finish already. Only relevant
		// for the non-NS4P_COMPONENT_PLUGINS code which never handles the
		// if-clause above.
		// TODO CORE-40424: This can be handled in a same way as the "new" code
		// given proper implementation of IsDetecting().
		plugin_viewer_list->MakeSurePluginsAreDetected();

		UINT numplugins = plugin_viewer_list->GetPluginViewerCount();

		RETURN_IF_ERROR(js_code.Set(" <script type=\"text/javascript\">\n  var plugin_list = ["));

		// First loop over plug-ins to create filtered list and javascript array for use on page
		for (UINT i = 0; i < numplugins; ++ i)
		{
			// Get the numbered plug-in
			PluginViewer *candidate_viewer = plugin_viewer_list->GetPluginViewer(i);
			const uni_char *plugin_path = candidate_viewer ? candidate_viewer->GetPath() : NULL;
			if (!plugin_path)
				continue;

			// Check for duplicate registrations
			BOOL is_duplicate = FALSE;
			UINT pathlistlen = plugin_path_list.GetCount();
			if (pathlistlen)
			{
				for (UINT j = 0; !is_duplicate && j < pathlistlen; ++j)
				{
					is_duplicate = !plugin_path_list.Get(j)->Compare(plugin_path);
				}
			}
			if (is_duplicate)
				continue;

			RETURN_IF_ERROR(filtered_viewer_list.Add(candidate_viewer));
			OpString escaped_path;
			RETURN_IF_ERROR(escaped_path.Set(candidate_viewer->GetPath()));
			RETURN_IF_ERROR(escaped_path.ReplaceAll(UNI_L("\\"), UNI_L("\\\\")));
			RETURN_IF_ERROR(escaped_path.ReplaceAll(UNI_L("'"), UNI_L("\\'")));
			RETURN_IF_ERROR(js_code.AppendFormat(UNI_L("\n  {enabled:%i, path:'%s'},"),
			                candidate_viewer->IsEnabled(),
			                escaped_path.CStr()));

			// Remember this entry
			OpString *s = OP_NEW(OpString, ());
			RETURN_OOM_IF_NULL(s);
			OP_STATUS st = s->Set(plugin_path);
			if (OpStatus::IsError(st))
			{
				OP_DELETE(s);
				return st;
			}
			plugin_path_list.Add(s);
		}

		RETURN_IF_ERROR(js_code.Append(
			"  ];\n\n"
			"  function togglePlugin(id, link)\n"
			"  {\n"
			"   var plugin = plugin_list[id], ret;\n"
			"   if (plugin && (ret = opera.togglePlugin(plugin.path, !plugin.enabled)) != -1)\n"
			"   {\n"
			"    plugin.enabled = ret;\n"
			"    document.getElementById('plug_'+id).className = ret ? '' : 'disabled';\n"));
		RETURN_IF_ERROR(js_code.AppendFormat(
			UNI_L("    link.textContent = ret ? \"%s\" : \"%s\";\n"), disable.CStr(), enable.CStr()));
		RETURN_IF_ERROR(js_code.Append(
			"   }\n"
			"   return false;\n"
			"  }\n\n"
			"  function toggleGlobal(enabled)\n"
			"  {\n"
			"   opera.setPreference('Extensions', 'Plugins', enabled ? '1' : '0');\n"
			"   document.body.id = enabled ? 'plugins-enabled' : 'plugins-disabled';\n"
			"  }\n\n"
			"  function toggleAllDetails(expand)\n"
			"  {\n"
			"   var names = document.getElementsByTagName('legend');\n"
			"   for (var i=0; i<names.length; i++)\n"
			"   {\n"
			"    toggleDetails(names[i], expand);\n"
			"   }\n"
			"  }\n\n"
			"  function toggleDetails(name, expand)\n"
			"  {\n"
			"   name.className = name.expanded=expand ? 'expanded' : '';\n"
			"   name.mime.style.height = name.mime.scrollHeight+'px';\n"
			"   name.mime.offsetHeight;\n"
			"   if (!expand)\n"
			"    name.mime.style.height = '0';\n"
			"  }\n\n"
			"  window.addEventListener('load', function()\n"
			"  {\n"
			"   // it's guaranteed to have same number of these elements\n"
			"   var names = document.getElementsByTagName('legend');\n"
			"   var mimes = document.getElementsByClassName('mime');\n\n"
			"   for (var i=0; i<names.length; i++)\n"
			"   {\n"
			"    /* after expanding, set height to auto so that\n"
			"       layout is kept fluid on resizing */\n"
			"    mimes[i].addEventListener('transitionEnd', function(e)\n"
			"    {\n"
			"     if (e.propertyName != 'height') return;\n"
			"     if (parseInt(this.style.height) != '0')\n"
			"      this.style.height = 'auto';\n"
			"    }, false);\n\n"
			"    // save reference to mime block in clicked element\n"
			"    names[i].mime = mimes[i];\n"
			"    names[i].addEventListener('click', function()\n"
			"    {\n"
			"     toggleDetails(this, this.expanded=!this.expanded);\n"
			"    }, false);\n\n"
			"    names[i].firstChild.plugin_id = i;\n"
			"    names[i].firstChild.addEventListener('click', function(e)\n"
			"    {\n"
			"     togglePlugin(this.plugin_id, this);\n"
			"     e.preventDefault();\n"
			"     e.cancelBubble = true;\n"
			"    }, false);\n"
			"   }\n"
			"  }, false);\n"
			" </script>\n"));
	}

	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, js_code.CStr()));
	RETURN_IF_ERROR(OpenBody(Str::SI_PLUGIN_LIST_TEXT, global_state ? UNI_L("plugins-enabled") : UNI_L("plugins-disabled")));

	UINT32 filtered_count = filtered_viewer_list.GetCount();

	// Link for enabling/disabling the plugins globally
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal,
		UNI_L("<label><input type=\"checkbox\" onchange=\"toggleGlobal(this.checked)\"")));
	if (detecting)
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L(" disabled=\"disabled\"")));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal,
		global_state ? UNI_L(" checked=\"checked\">") : UNI_L(">")));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, global_enable.CStr()));
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</label>\n")));

	RETURN_IF_ERROR(m_url.WriteDocumentDataUniSprintf(UNI_L("<p id=\"details\">")));

	// Link for toggling mime type details (details are initially hidden)
	if (filtered_count)
	{
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal,
			UNI_L("<label><input type=\"checkbox\" onchange=\"toggleAllDetails(this.checked)\">")));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, details.CStr()));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</label>\n")));
	}

	// Link for refreshing plugins directory to see if plugins were added/removed
	if (!detecting)
	{
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal,
			UNI_L("<a href=\"#\" onclick=\"navigator.plugins.refresh(true);return false;\">")));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, refresh.CStr()));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</a>")));
	}
	RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</p>\n")));

	// Output filtered plug-ins on page
	for (UINT i = 0; i < filtered_count; ++ i)
	{
		PluginViewer *candidate_viewer = filtered_viewer_list.Get(i);

		// Get name of plug-in and write it as header
		const uni_char *plugin_path = candidate_viewer->GetPath();
		const uni_char *plugin_name = candidate_viewer->GetProductName();
		const uni_char *plugin_description = candidate_viewer->GetDescription();
		const uni_char *plugin_version = candidate_viewer->GetVersion();
		BOOL disabled = !candidate_viewer->IsEnabled();

		// Start plug-in block
		RETURN_IF_ERROR(m_url.WriteDocumentDataUniSprintf(UNI_L("<fieldset id=\"plug_%i\"%s>\n<legend>"),
			i,
			disabled ? UNI_L(" class=\"disabled\"") : UNI_L("")));

		// Link for disabling/enabling plug-in
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("<a href=\"#\">")));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, disabled ? enable.CStr() : disable.CStr()));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</a>\n")));

		// Name
		if (plugin_name)
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, plugin_name));

		uni_char *tmp;

		// Version - shown if non-empty
		if (plugin_version && *plugin_version)
		{
			RETURN_OOM_IF_NULL(tmp = HTMLify_string(plugin_version));
			ANCHOR_ARRAY(uni_char, tmp);
			RETURN_IF_ERROR(m_url.WriteDocumentDataUniSprintf(UNI_L("<span> - %s</span>"), tmp));
			ANCHOR_ARRAY_DELETE(tmp);
		}
		else
		{
			plugin_version = UNI_L("");
		}

		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</legend>\n<div>\n")));

		/* Description - shown if non-empty and different from name and version.
		   It's not htmlified because it contains links. Instead function for
		   stripping html tags is used that leaves A tags only. */
		if (plugin_description
			&& uni_strlen(plugin_description)
			&& !uni_stri_eq(plugin_name, plugin_description)
			&& !uni_stri_eq(plugin_description, plugin_version))
		{
			OpString desc;
			RETURN_IF_ERROR(desc.Set(plugin_description));
			StripHTMLTags(desc.CStr(), desc.Length());
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("<div>")));
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, description.CStr()));
			RETURN_IF_ERROR(m_url.WriteDocumentDataUniSprintf(UNI_L(": %s</div>\n"), desc.CStr()));
		}

#ifdef ABOUT_PLUGINS_SHOW_ARCHITECTURE
		// Plugin architecture. Different from COMPONENT_PLUGIN means non-native.
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("<div>")));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, arch_label.CStr()));
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L(": ")));

		if (candidate_viewer->GetComponentType() == COMPONENT_PLUGIN)
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, arch_native.CStr()));
		else
			RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, arch_non_native.CStr()));

		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</div>\n")));
#endif // ABOUT_PLUGINS_SHOW_ARCHITECTURE

		// Path to the plug-in
		RETURN_OOM_IF_NULL(tmp = HTMLify_string(plugin_path));
		ANCHOR_ARRAY(uni_char, tmp);
		RETURN_IF_ERROR(m_url.WriteDocumentDataUniSprintf(UNI_L("<address>%s</address>\n"), tmp));
		ANCHOR_ARRAY_DELETE(tmp);

		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("<div class=\"mime\"><table>\n")));

		// Find MIME types associated with this plug-in
		Viewer* viewer;
		ChainedHashIterator* viewer_iter;
		g_viewers->CreateIterator(viewer_iter);
		if (viewer_iter != NULL)
		{
			OpAutoPtr<OpHashIterator> viewer_iter_ap(viewer_iter);
			while (viewer_iter && (viewer=g_viewers->GetNextViewer(viewer_iter)) != NULL)
			{
				// Iterate over all plug-ins associated with this MIME type
				unsigned int numpluginviewers = viewer->GetPluginViewerCount();
				for (unsigned int k = 0; k < numpluginviewers; ++ k)
				{
					const PluginViewer *p = viewer->GetPluginViewer(k);
					if (p && p->GetPath() && uni_strcmp(p->GetPath(), plugin_path) == 0)
					{
						// This is us.

						// MIME type
						const uni_char *mime_type = viewer->GetContentTypeString();
						if (mime_type)
						{
							int mimestart = 0;

							RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L(" <tr>\n  <td>")));

							// Split string at "|"s
							for(int i = mimestart = 0; mime_type[i]; ++ i)
							{
								if (mime_type[i] == '|')
								{
									RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, mime_type + mimestart, i - mimestart));
									RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("<br>\n  ")));

									mimestart = i + 1;
								}
							}

							// Print the remainder of the string
							RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, &mime_type[mimestart]));
							RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</td>\n")));
						}

						// Description
						OpString description;
						RETURN_IF_ERROR(p->GetTypeDescription(mime_type, description));
						RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("  <td>")));
						RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, description));
						RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</td>\n")));

						// Extensions
						RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("  <td>")));

						const uni_char *extensions = viewer->GetExtensions();
						if (extensions)
						{
							int extstart = 0;

							// Split string at "|"s
							for (int i = 0; extensions[i]; ++ i)
							{
								if(extensions[i] == '|')
								{
									RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, extensions + extstart, extstart - i));
									RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("<br>\n  ")));

									extstart = i + 1;
								}
							}

							// Print the remainder of the string
							RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KHTMLify, &extensions[extstart]));
						}
						RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</td>\n </tr>\n")));
					}
				}
			}
		}

		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</table></div>\n")));

		// Finish plug-in block
		RETURN_IF_ERROR(m_url.WriteDocumentData(URL::KNormal, UNI_L("</div>\n</fieldset>\n")));
	}

	if (detecting)
	{
		OpString detecting_str;
		RETURN_IF_ERROR(g_languageManager->GetString(Str::S_PLUGIN_DETECTING, detecting_str));
		RETURN_IF_ERROR(m_url.WriteDocumentDataUniSprintf(UNI_L("<p>%s</p>\n"), detecting_str.CStr()));
	}
	else if (!filtered_viewer_list.GetCount())
	{
		OpString none_found;
		RETURN_IF_ERROR(g_languageManager->GetString(Str::SI_IDSTR_NONE_FOUND, none_found));
		RETURN_IF_ERROR(m_url.WriteDocumentDataUniSprintf(UNI_L("<p>%s</p>\n"), none_found.CStr()));
	}

	// Finish off
	return CloseDocument();
}
Ejemplo n.º 21
0
/* Perform action assigned to given control object */
void DoControlAction
    (
    const Int16 control /* control value of the object */
    )
{
    UInt16  newRecord;
    Int16   controlID;

    /* Clear location of find pattern */
    ClearFindPatternData();

    if ( 0 < control ) {
        Int16   anchorIndex;
        UInt16  reference;
        Int16   paragraphOffset;
        Int16   byteOffsetInPara;
        UInt16  image;
        AnchorMode type;

        anchorIndex         = control - 1;
        reference           = GetVisibleReference( anchorIndex );
        paragraphOffset     = GetVisibleParagraphOffset( anchorIndex );
        byteOffsetInPara    = GetVisibleByteOffset( anchorIndex );
        image               = GetVisibleImage( anchorIndex );
        image               = GetVisibleImage( anchorIndex );
        type                = GetVisibleMode( anchorIndex );

        SndPlaySystemSound( sndClick );

        if ( image != 0 ) {
            RectangleType   bounds;
            ListType*       list;
            Int16           x;
            Int16           y;
            UInt16          prevCoordSys;
            Int16           selection;

            bounds  = GetVisibleImagePosition( anchorIndex );
            list    = GetObjectPtr( frmMainImageDialog );

            x = ( bounds.extent.x - 60 ) / 2;
            if ( x < 0 )
                x = 0;
            y = ( bounds.extent.y - 22 ) / 2;
            if ( y < 0 )
                y = 0;
            x += bounds.topLeft.x;
            y += bounds.topLeft.y;
            LstSetPosition( list, x, y );

            prevCoordSys    = PalmSetCoordinateSystem( STANDARD );
            selection       = LstPopupList( list );
            PalmSetCoordinateSystem( prevCoordSys );
            if ( selection == noListSelection ) {
                return;
            }
            else if ( selection == 1 ) {
                reference = image;
            }
        }
        if ( type == ANCHORMODE_LINK ) {
            Int16 byteOffset;
            
            if ( byteOffsetInPara == 0 ) {
                byteOffset = NO_OFFSET;
            }
            else {
                byteOffset      = ParagraphNumToByteOffset( paragraphOffset ) +
                                      byteOffsetInPara;
                paragraphOffset = NO_OFFSET;
            }
            JumpToRecord( reference, paragraphOffset, byteOffset );
        }
#ifdef SUPPORT_ANNOTATION
        else if ( type == ANCHORMODE_ANNOTATION ) {
            DoAnnotate( GetVisibleAnnotationIdentifier( anchorIndex ),
                0, 0, 0, 0, 0, NULL );
        }
#endif

        return;
    }

    if ( control != 0 )
        SndPlaySystemSound( sndClick );

    controlID = -( control + 1 );
    switch ( controlID ) {
        case HOMECONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            ViewRecord( HOME_PAGE_ID, ADD_TO_HISTORY, 0, 0,
                WRITEMODE_DRAW_CHAR );
            SetVisitedLink( HOME_PAGE_ID );
            break;

        case LEFTCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            newRecord = GetHistoryPrev();
            if ( newRecord != NO_RECORD ) {
                ViewRecord( newRecord, FROM_HISTORY, NO_OFFSET, NO_OFFSET,
                    WRITEMODE_DRAW_CHAR );
                SetVisitedLink( newRecord );
            }
            else {
                FrmGotoForm( GetValidForm( frmLibrary ) );
            }
            break;

        case RIGHTCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            newRecord = GetHistoryNext();
            if ( newRecord != NO_RECORD ) {
                ViewRecord( newRecord, FROM_HISTORY, NO_OFFSET, NO_OFFSET,
                    WRITEMODE_DRAW_CHAR );
                SetVisitedLink( newRecord );
            }
            break;

        case LIBRARYCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            CloseDocument();
            FrmGotoForm( GetValidForm( frmLibrary ) );
            break;

        case FINDCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            FrmPopupForm( frmSearch );
            break;

        case AGAINCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            SearchAgain();
            break;

        case MENUCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            EvtEnqueueKey( menuChr, 0, commandKeyMask );
            break;

        case OFFSETCONTROL:
        {
            UInt16 prevCoordSys;
            Int16  selection;

            DoAutoscrollToggle( AUTOSCROLL_OFF );
            prevCoordSys = PalmSetCoordinateSystem( STANDARD );
            selection = LstPopupList( GetObjectPtr( frmMainPercentList ) );
            PalmSetCoordinateSystem( prevCoordSys );
            if ( selection != noListSelection )
                GotoLocation( selection );

            break;
        }

        case BOOKMARKCONTROL:
        {
            UInt16      prevCoordSys;
            ListType*   list;
            Int16       selection;
            UInt16      numOfBookmarks;

            DoAutoscrollToggle( AUTOSCROLL_OFF );

            prevCoordSys = PalmSetCoordinateSystem( STANDARD );

            list            = GetObjectPtr( frmMainBookmarkList );
            numOfBookmarks  = CreatePopupBookmarkList( list );
            if ( numOfBookmarks == 0 ) {
                PalmSetCoordinateSystem( prevCoordSys );
                break;
            }
            
            selection = LstPopupList( GetObjectPtr( frmMainBookmarkList ) );
            
            if ( 0 <= selection ) {
                BookmarkListEntry e;

                MemMove( &e, GetBookmarkListEntry( selection ), sizeof( BookmarkListEntry ) );

                ReleaseBookmarkList();
                PalmSetCoordinateSystem( prevCoordSys );

                switch ( e.kind ) {
                    case BOOKMARK_ADD_BOOKMARK: 
                        DoAddBookmark();
                        break;
                    case BOOKMARK_EDIT_BOOKMARK:
                        FrmPopupForm( frmBookmarks );
                        break;
#ifdef SUPPORT_ANNOTATION
                    case BOOKMARK_ADD_ANNOTATION:
                        isSelectWordTapMode = true;
                        selectedWordAction  = SELECT_WORD_ANNOTATE;
                        ShowSelectWordTapIcon();
                        break;
#endif
                    case BOOKMARK_BOOKMARK:
                    case BOOKMARK_ANNOTATION:
                        SendBookmarkGoToEvent( &e, false );
                        break;

                    case BOOKMARK_EXT_BOOKMARK:
                        GoToExtBookmark( e.recordNum );
                        break;
                        
                    case BOOKMARK_INVALID:
                        break;
                }
            }
            else {
                ReleaseBookmarkList();
                PalmSetCoordinateSystem( prevCoordSys );
            }

            break;
        }

        case AUTOSCROLLSTARTCONTROL:
        case AUTOSCROLLSTOPCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_TOGGLE );
            break;

        case AUTOSCROLLINCRCONTROL:
            DoAutoscrollIncr();
            break;

        case AUTOSCROLLDECRCONTROL:
            DoAutoscrollDecr();
            break;

        case COPYTOMEMOCONTROL:
            DoHardcopy();
            break;

#ifdef SUPPORT_WORD_LOOKUP
        case SELECTEDWORDCONTROL: {
            EventType newEvent;

            MemSet( &newEvent, sizeof( newEvent ), 0 );
            newEvent.eType                   = pluckerSelectedWordEvent;
            newEvent.data.generic.datum[ 0 ] = selectedWordAction;
            EvtAddEventToQueue( &newEvent );

            break;
        }
#endif

        default:
            break;
    }
}
Ejemplo n.º 22
0
MobiBookReader::~MobiBookReader()
{
    CloseDocument();
}