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); }
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); }