コード例 #1
0
char *
FontDisplayerPeerObject::aboutData(void)
{
	char *aboutData = NULL;
	int aboutDataLen = 0;
	int aboutDataMaxLen = 0;
#ifndef NO_HTML_DIALOGS_CHANGE
#define WF_ABOUT_DATA_ALLOCATION_STEP 64
#define WF_ACCUMULATE(str) wf_addToString(&aboutData, &aboutDataLen, &aboutDataMaxLen, str);

	// Dont show deleted font displayers.
	if (isDeleted())
	{
		return (NULL);
	}


	// Displayer data
    char *fmtstring = NULL;
    char *buf;
    if (fpType == FontDisplayerPeerObject::WF_FP_STATIC)
    {
        fmtstring = XP_GetString(WF_MSG_ABOUT_DISPLAYER_STATIC);
        buf = PR_smprintf(fmtstring,
			(displayerName ? displayerName : ""),
			(displayerDescription ? displayerDescription : ""));
    }
    else
    {
        fmtstring = XP_GetString(WF_MSG_ABOUT_DISPLAYER_DYNAMIC);
        buf = PR_smprintf(fmtstring,
			(displayerName ? displayerName : ""),
			(displayerDescription ? displayerDescription : ""),
			dlm.filename());
    }
    if (buf)
    {
        WF_ACCUMULATE(buf);
        XP_FREE(buf);
        buf = NULL;
    }
	if (!mimeList.isEmpty())
	{
		// Foreach mime
		struct wfListElement *tmp = mimeList.head;
		for (; tmp; tmp = tmp->next)
		{
			struct mime_store *ele = (struct mime_store *) tmp->item;
			buf = PR_smprintf(XP_GetString(WF_MSG_ABOUT_DISPLAYER_MIME),
				ele->mimetype,
				(displayerName ? displayerName : ""),
				(ele->isEnabled ? "checked" : ""), /* NO I18N */
				ele->mimetype, ele->description,
				ele->extensions);
			if (buf)
			{
				WF_ACCUMULATE(buf);
				XP_FREE(buf);
				buf = NULL;
			}
		}
	}
	WF_ACCUMULATE(XP_GetString(WF_MSG_ABOUT_DISPLAYER_END));
#endif /* NO_HTML_DIALOGS_CHANGE */
	return (aboutData);
}
コード例 #2
0
extern "C" char *
/*ARGSUSED*/
NF_AboutFonts(MWContext *context, const char *which)
{
#ifndef NO_HTML_DIALOGS_CHANGE
	cfbImpl *oimpl = nffbc2cfbImpl(WF_fbc);
	FontBrokerObject *fbobj = (FontBrokerObject *)oimpl->object;
	struct wfListElement *tmp = NULL;

	char *aboutData = NULL;
	int aboutDataLen = 0;
	int aboutDataMaxLen = 0;
#define WF_ACCUMULATE(str) wf_addToString(&aboutData, &aboutDataLen, &aboutDataMaxLen, str);

	if (which && !wf_strncasecmp(which, "fonts?", 6)
		&& !wf_strncasecmp(which+6, "people", 6))
	{
		char *p;
		for (p=peopleMsg; *p; p++) *p -= 23;
		WF_ACCUMULATE(peopleMsg);
		for (p=peopleMsg; *p; p++) *p += 23;
		goto display;
	}
	
	WF_ACCUMULATE(XP_GetString(WF_MSG_ABOUT_BEGIN_1));
	WF_ACCUMULATE(XP_GetString(WF_MSG_ABOUT_BEGIN_2));
	WF_ACCUMULATE(XP_GetString(WF_MSG_ABOUT_BEGIN_3));

	// List all the displayers and their mimetypes
	tmp = fbobj->fpPeers.head;
	for(; tmp; tmp = tmp->next)
	{
		FontDisplayerPeerObject *fpp = (FontDisplayerPeerObject *) tmp->item;
		char *buf = fpp->aboutData();
		if (buf)
		{
			WF_ACCUMULATE(buf);
			WF_FREE(buf);
		}
	}

display:
	// do html dialog
	static XPDialogInfo dialogInfo = {
		XP_DIALOG_OK_BUTTON | XP_DIALOG_CANCEL_BUTTON,
			wf_AboutFontsDialogDone,
			600,
			440
	};
	XPDialogStrings* strings;
	
	strings = XP_GetDialogStrings(XP_EMPTY_STRINGS);
	if (!strings) {
		if (aboutData) WF_FREE(aboutData);
		return (NULL);
	}
	if (aboutData)
    {
        XP_CopyDialogString(strings, 0, aboutData);
        WF_FREE(aboutData);
        aboutData = NULL;
    }
    else
    {
        XP_CopyDialogString(strings, 0,
			XP_GetString(WF_MSG_ABOUT_NO_DISPLAYER));
    }
    XP_MakeHTMLDialog(context, &dialogInfo, WF_MSG_ABOUT_TITLE,
		strings, NULL, PR_FALSE); 
	
#undef WF_ACCUMULATE
#endif /* NO_HTML_DIALOGS_CHANGE */
	return (NULL);	
}