enable toolbar item to render UTF8 text. Change several XmString related function in RDFUtils.c to also return a font list associated with the XmString. approved by slamm

This commit is contained in:
ftang%netscape.com 1998-10-15 13:45:54 +00:00
parent 61c4871164
commit f098211cb5
7 changed files with 92 additions and 183 deletions

View File

@ -580,7 +580,7 @@ XFE_RDFMenuToolbarBase::createCascadeButton(Widget menu,
&pulldown);
// Set the item's label
XFE_RDFUtils::setItemLabelString(_frame->getContext(),cascade,entry);
XFE_RDFUtils::setItemLabelString(cascade,entry);
// Configure the new cascade button
XFE_RDFUtils::configureMenuCascadeButton(cascade,entry);
@ -642,7 +642,7 @@ XFE_RDFMenuToolbarBase::createPushButton(Widget menu, HT_Resource entry)
XFE_RDFUtils::configureMenuPushButton(button,entry);
// Set the item's label
XFE_RDFUtils::setItemLabelString(_frame->getContext(),button,entry);
XFE_RDFUtils::setItemLabelString(button,entry);
// Create a new bookmark data structure for the callbacks
data = XP_NEW_ZAP(ItemCallbackStruct);

View File

@ -56,8 +56,6 @@
extern "C" {
extern RDF_NCVocab gNavCenter;
extern XmString fe_ConvertToXmString(unsigned char *, int16, fe_Font, XmFontType, XmFontList * );
extern INTL_CharSetInfo LO_GetDocumentCharacterSetInfo(MWContext *);
}
typedef struct _tbarTooltipCBStruct {
@ -517,7 +515,8 @@ XFE_RDFToolbar::createCascade(Widget parent,HT_Resource entry)
// Set the item's label
XFE_RDFUtils::setItemLabelString(_frame->getContext(),cascade,entry);
// ftang- i18n issue
XFE_RDFUtils::setItemLabelString(cascade,entry);
configureXfeCascade(cascade,entry);
@ -529,11 +528,14 @@ XFE_RDFToolbar::createCascade(Widget parent,HT_Resource entry)
/* Set the tooltip callback */
XfeTipStringAdd(cascade);
// ftang- i18n issue
XfeTipStringSetObtainCallback(cascade, (XfeTipStringObtainCallback)tooltipCB, (XtPointer) data);
/* Set up the status bar text */
XfeDocStringAdd(cascade);
// ftang- i18n issue
XfeDocStringSetObtainCallback(cascade, docStringSetCB, (XtPointer)data);
// ftang- i18n issue
XfeDocStringSetCallback(cascade, docStringCB, (XtPointer)data);
@ -588,7 +590,7 @@ XFE_RDFToolbar::updateAppearance()
//////////////////////////////////////////////////////////////////////////
/* static */
void
XFE_RDFToolbar::tooltipCB(Widget /* w */,
XFE_RDFToolbar::tooltipCB(Widget w ,
XtPointer client_data,
XmString * string_return,
Boolean * need_to_free_string)
@ -599,79 +601,63 @@ XFE_RDFToolbar::tooltipCB(Widget /* w */,
HT_Resource entry = (HT_Resource) ttip->entry;
void * data=NULL;
XmFontList font_list;
XmString str = NULL;
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)), gNavCenter->buttonTooltipText, HT_COLUMN_STRING, &data);
XmFontList dummyFontListForNow = NULL;
if (data) {
MWContext * context = (obj->getFrame())->getContext();
INTL_CharSetInfo charSetInfo =
LO_GetDocumentCharacterSetInfo(context);
str = fe_ConvertToXmString((unsigned char *) data,
INTL_GetCSIWinCSID(charSetInfo) ,
NULL, XmFONT_IS_FONT, &font_list);
*string_return = str;
*need_to_free_string = True;
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(w),
string_return, &dummyFontListForNow);
XmFontListFree(dummyFontListForNow);
}
else
{
MWContext * context = (obj->getFrame())->getContext();
*string_return = XFE_RDFUtils::getStringFromResource(context,entry);
*need_to_free_string = True;
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(w),
string_return, &dummyFontListForNow);
XmFontListFree(dummyFontListForNow);
}
*need_to_free_string = True;
}
//////////////////////////////////////////////////////////////////////////
/* static */
// ftang- i18n issue
void
XFE_RDFToolbar::docStringSetCB(Widget /* w */,
XFE_RDFToolbar::docStringSetCB(Widget w ,
XtPointer client_data,
XmString * string_return,
Boolean * need_to_free_string)
{
ItemCallbackStruct * ttip = (ItemCallbackStruct * )client_data;
XFE_RDFToolbar * obj = (XFE_RDFToolbar *) ttip->object;
HT_Resource entry = (HT_Resource) ttip->entry;
void * data=NULL;
XmFontList font_list;
XmString str = NULL;
XmFontList dummyFontListForNow = NULL;
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)), gNavCenter->buttonStatusbarText, HT_COLUMN_STRING, &data);
if (data) {
D(printf("Doc string obtained from HT = %s\n", (char *) data););
MWContext * context = (obj->getFrame())->getContext();
INTL_CharSetInfo charSetInfo =
LO_GetDocumentCharacterSetInfo(context);
str = fe_ConvertToXmString((unsigned char *) data,
INTL_GetCSIWinCSID(charSetInfo) ,
NULL, XmFONT_IS_FONT, &font_list);
*string_return = str;
*need_to_free_string = True;
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(w),
string_return, &dummyFontListForNow);
XmFontListFree(dummyFontListForNow);
}
else
{
// Boolean isContainer = HT_IsContainer(entry);
MWContext * context = (obj->getFrame())->getContext();
*string_return = XFE_RDFUtils::getStringFromResource(context,entry);
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(w),
string_return, &dummyFontListForNow);
XmFontListFree(dummyFontListForNow);
*need_to_free_string = True;
}
*need_to_free_string = True;
}
//////////////////////////////////////////////////////////////////////////
/* static */ void
// ftang- i18n issue
XFE_RDFToolbar::docStringCB(Widget /* w */,
XtPointer client_data,
unsigned char reason,

View File

@ -741,7 +741,7 @@ XFE_RDFTreeView::initCell(HT_Resource node, int row, int column)
if (column == 0)
{
xmstr = XFE_RDFUtils::formatItem(node, charset);
xmstr = XFE_RDFUtils::formatItem(node);
}
else
{

View File

@ -300,112 +300,57 @@ XFE_RDFUtils::guessTitle(MWContext * context,
// XmString hackery
//
//////////////////////////////////////////////////////////////////////////
/* static */ XmString
XFE_RDFUtils::entryToXmString(HT_Resource entry,
INTL_CharSetInfo char_set_info)
/* static */ void
XFE_RDFUtils::entryToXmStringAndFontList(HT_Resource entry,
Display* dpy,
XmString* pStr,
XmFontList* pFontList)
{
XP_ASSERT( entry != NULL );
char *name = HT_GetNodeName(entry);
XFE_RDFUtils::utf8ToXmStringAndFontList(name, dpy, pStr, pFontList);
}
//////////////////////////////////////////////////////////////////////////
/* static */ void
XFE_RDFUtils::utf8ToXmStringAndFontList(char* utf8str,
Display* dpy,
XmString* pXmStr,
XmFontList* pFontList)
{
XmString result = NULL;
XmString tmp;
char * psz;
fe_Font fe_font;
XmFontList dontFreeFontList;
int16 charset = INTL_GetCSIWinCSID(char_set_info);
// need to perform mid truncation here
// need to replace with UTF8 to XmString conversion and get FontList here
tmp = XFE_RDFUtils::formatItem(entry,charset);
// Mid truncate the name
if (XmStringGetLtoR(tmp,XmSTRING_DEFAULT_CHARSET,&psz))
{
XmStringFree(tmp);
fe_font = fe_LoadUnicodeFont(NULL, "", 0, 2, 0,0,0, 0,dpy);
INTL_MidTruncateString(charset, psz, psz, 40);
result = XmStringCreateLtoR(psz,XmSTRING_DEFAULT_CHARSET);
if (psz)
{
XtFree(psz);
}
}
else
{
result = tmp;
}
return result;
*pXmStr = fe_ConvertToXmString((unsigned char*) utf8str, CS_UTF8, fe_font,
XmFONT_IS_FONT, &dontFreeFontList);
*pFontList = XmFontListCopy(dontFreeFontList);
}
//////////////////////////////////////////////////////////////////////////
/* static */ XmString
XFE_RDFUtils::formatItem(HT_Resource entry, int16 charset)
XFE_RDFUtils::formatItem(HT_Resource entry)
{
XmString xmstring;
char buf [1024];
char *name = HT_GetNodeName(entry);
char *url = HT_GetNodeURL(entry);
XmFontList font_list;
char *data;
if (HT_IsSeparator(entry))
{
strcpy (buf, "-------------------------");
}
else if (name || url)
{
fe_FormatDocTitle (name, url, buf, 1024);
}
data = "-------------------------";
else
data = HT_GetNodeName(entry);
if (!*buf)
{
xmstring = 0;
}
else if (name || url)
{
xmstring = fe_ConvertToXmString ((unsigned char *) buf, charset,
NULL, XmFONT_IS_FONT, &font_list);
}
else
{
char *loc;
loc = (char *) fe_ConvertToLocaleEncoding (charset,
(unsigned char *) buf);
xmstring = XmStringSegmentCreate (loc, "HEADING",
XmSTRING_DIRECTION_L_TO_R, False);
if (loc != buf)
{
XP_FREE(loc);
}
}
if (!xmstring)
{
xmstring = XmStringCreateLtoR ("", XmFONTLIST_DEFAULT_TAG);
}
// need to replace with UTF8 to XmString conversion and get FontList here
xmstring = XmStringCreateLtoR(data ,XmSTRING_DEFAULT_CHARSET);
return (xmstring);
}
//////////////////////////////////////////////////////////////////////////
/* static */ XmString
XFE_RDFUtils::getStringFromResource(MWContext * context,
HT_Resource entry)
{
XmString xmname;
XP_ASSERT( context != NULL );
XP_ASSERT( entry != NULL );
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
// Create am XmString from the entry
xmname = XFE_RDFUtils::entryToXmString(entry, charSetInfo);
return xmname;
}
//////////////////////////////////////////////////////////////////////////
/* static */ void
XFE_RDFUtils::setItemLabelString(MWContext * context,
Widget item,
XFE_RDFUtils::setItemLabelString(Widget item,
HT_Resource entry)
{
XP_ASSERT( XfeIsAlive(item) );
@ -416,16 +361,18 @@ XFE_RDFUtils::setItemLabelString(MWContext * context,
XmIsLabelGadget(item) ||
XfeIsLabel(item) );
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
// Create am XmString from the entry
XmString xmname = XFE_RDFUtils::entryToXmString(entry,charSetInfo);
XmString xmname;
XmFontList fontlist = NULL;
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(item), &xmname, &fontlist);
if (xmname != NULL)
{
XtVaSetValues(item,XmNlabelString,xmname,NULL);
XtVaSetValues(item,XmNlabelString,xmname,XmNfontList, fontlist, NULL);
XmStringFree(xmname);
XmFontListFree(fontlist);
}
}
//////////////////////////////////////////////////////////////////////////

View File

@ -91,21 +91,21 @@ public:
//////////////////////////////////////////////////////////////////////
// Format item blah blah blah
static XmString formatItem (HT_Resource entry,
int16 charset);
static XmString formatItem (HT_Resource entry);
// Obtain an internationallized XmString from an entry
static XmString entryToXmString (HT_Resource entry,
INTL_CharSetInfo char_set_info);
static XmString getStringFromResource (MWContext * context,
HT_Resource entry);
static void entryToXmStringAndFontList (HT_Resource entry,
Display* dsp,
XmString* pStr,
XmFontList* pFontList);
static void utf8ToXmStringAndFontList (char* utf8str,
Display* dsp,
XmString* pStr,
XmFontList* pFontList);
// Set the XmNlabelString for a widget
static void setItemLabelString (MWContext * context,
Widget item,
static void setItemLabelString (Widget item,
HT_Resource entry);

View File

@ -125,8 +125,7 @@ XFE_ToolbarButton::configure()
// XtVaSetValues(m_widget,XmNforceDimensionToMax,False,NULL);
// Set the item's label
XFE_RDFUtils::setItemLabelString(getAncestorContext(),
m_widget,
XFE_RDFUtils::setItemLabelString( m_widget,
getHtResource());
// Set the item's style and layout

View File

@ -220,40 +220,29 @@ XFE_ToolbarItem::tipStringObtain(XmString * stringReturn,
Boolean * needToFreeString)
{
HT_Resource entry = getHtResource();
MWContext * context = getAncestorContext();
XP_ASSERT( entry != NULL );
XP_ASSERT( context != NULL );
void * data = NULL;
XmFontList font_list = NULL;
XmString xmstr = NULL;
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)),
gNavCenter->buttonTooltipText,
HT_COLUMN_STRING,
&data);
XmFontList dummyFontListForNow = NULL;
if (data != NULL)
{
MWContext * context = getAncestorContext();
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
xmstr = fe_ConvertToXmString((unsigned char *) data,
INTL_GetCSIWinCSID(charSetInfo) ,
NULL,
XmFONT_IS_FONT,
&font_list);
*stringReturn = xmstr;
*needToFreeString = True;
{
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(m_parent),
stringReturn, &dummyFontListForNow);
}
else
{
*stringReturn = XFE_RDFUtils::getStringFromResource(context,entry);
*needToFreeString = True;
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(m_parent),
stringReturn, &dummyFontListForNow);
}
XmFontListFree(dummyFontListForNow);
*needToFreeString = True;
}
//////////////////////////////////////////////////////////////////////////
/* virtual */ void
@ -261,40 +250,28 @@ XFE_ToolbarItem::docStringObtain(XmString * stringReturn,
Boolean * needToFreeString)
{
HT_Resource entry = getHtResource();
MWContext * context = getAncestorContext();
XP_ASSERT( entry != NULL );
XP_ASSERT( context != NULL );
void * data = NULL;
XmFontList font_list = NULL;
XmString xmstr = NULL;
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)),
gNavCenter->buttonStatusbarText,
HT_COLUMN_STRING,
&data);
XmFontList dummyFontListForNow = NULL;
if (data != NULL)
{
MWContext * context = getAncestorContext();
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
xmstr = fe_ConvertToXmString((unsigned char *) data,
INTL_GetCSIWinCSID(charSetInfo) ,
NULL,
XmFONT_IS_FONT,
&font_list);
*stringReturn = xmstr;
*needToFreeString = True;
{
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(m_parent),
stringReturn, &dummyFontListForNow);
}
else
{
*stringReturn = XFE_RDFUtils::getStringFromResource(context,entry);
*needToFreeString = True;
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(m_parent),
stringReturn, &dummyFontListForNow);
}
XmFontListFree(dummyFontListForNow);
}
//////////////////////////////////////////////////////////////////////////
/* virtual */ void