Index: cvs/abi/src/wp/ap/xp/ap_StatusBar.cpp =================================================================== RCS file: /cvsroot/abi/src/wp/ap/xp/ap_StatusBar.cpp,v retrieving revision 1.26 diff -u -r1.26 ap_StatusBar.cpp --- cvs/abi/src/wp/ap/xp/ap_StatusBar.cpp 23 Sep 2002 08:14:57 -0000 1.26 +++ cvs/abi/src/wp/ap/xp/ap_StatusBar.cpp 11 Oct 2002 12:35:47 -0000 @@ -143,7 +143,7 @@ if (!m_iDesiredWidth) { char buf[AP_MAX_MESSAGE_FIELD]; - sprintf(buf,m_szFormat,999,999); + sprintf(buf,m_szFormat,9999,9999); UT_uint32 len = strlen(buf); UT_UCSChar bufUCS[AP_MAX_MESSAGE_FIELD]; UT_GrowBufElement charWidths[AP_MAX_MESSAGE_FIELD]; @@ -232,6 +232,7 @@ void setStatusProgressType(int start, int end, int flags); void setStatusProgressValue(int value); + void setDesiredWidth(UT_uint32 set); UT_sint32 m_ProgressStart; UT_sint32 m_ProgressEnd; @@ -239,6 +240,7 @@ UT_sint32 m_ProgressStartPoint; UT_uint32 m_ProgressFlags; UT_Timer *m_ProgressTimer; + UT_uint32 m_DesiredWidth; }; @@ -248,6 +250,7 @@ m_ProgressStartPoint = 0; m_ProgressFlags = 0; m_ProgressTimer = NULL; + m_DesiredWidth = _UL(450); } ap_sb_Field_StatusMessage::~ap_sb_Field_StatusMessage(void) @@ -256,7 +259,11 @@ UT_uint32 ap_sb_Field_StatusMessage::getDesiredWidth(void) { - return _UL(450); // TODO define this somewhere + return m_DesiredWidth; +} +void ap_sb_Field_StatusMessage::setDesiredWidth(UT_uint32 set) +{ + m_DesiredWidth = set; } void ap_sb_Field_StatusMessage::draw(void) @@ -465,7 +472,7 @@ { if (!m_iDesiredWidth) { - char * szBuf = "MMMMMMMM"; + char * szBuf = "MMMMMMMMMMM"; UT_uint32 len = strlen(szBuf); UT_UCSChar bufUCS[AP_MAX_MESSAGE_FIELD]; UT_GrowBufElement charWidths[AP_MAX_MESSAGE_FIELD]; @@ -654,15 +661,10 @@ if (!m_bInitFields) { - UT_uint32 xOrigin = _UL(3); - UT_uint32 xGap = _UL(6); - #define DclField(type,var) \ type * var = new type(this); \ UT_ASSERT((var)); \ - m_vecFields.addItem((var)); \ - (var)->setLeftOrigin(xOrigin); \ - xOrigin += (var)->getDesiredWidth() + xGap + m_vecFields.addItem((var)); DclField(ap_sb_Field_PageInfo, pf1); DclField(ap_sb_Field_StatusMessage, pf2); @@ -677,6 +679,7 @@ #undef DclField m_bInitFields = true; + setWidth(m_iWidth); } // force a full notify of all fields so that they all @@ -700,6 +703,46 @@ void AP_StatusBar::setWidth(UT_uint32 iWidth) { m_iWidth = iWidth; + + // nothing to do yet... + if (m_pStatusMessageField == NULL) { + return; + } + + // determine width of all fields minus the status field + UT_uint32 xOrigin = _UL(3); + UT_uint32 xGap = _UL(6); + UT_uint32 fieldwidth = (3 * xGap + 2 * xOrigin); + UT_uint32 kLimit = m_vecFields.getItemCount(); + UT_uint32 k = 0; + ap_sb_Field * pf = NULL; + + for (k = 0; k < kLimit; k++) { + if (NULL != (pf = (ap_sb_Field *)m_vecFields.getNthItem(k))) { + if (pf != m_pStatusMessageField) { + fieldwidth += pf->getDesiredWidth(); + } + } + } + + // resulting field width not too small ? + if (iWidth - fieldwidth > 100) { + iWidth -= fieldwidth; + } + + // update status field width + ((ap_sb_Field_StatusMessage *)m_pStatusMessageField)->setDesiredWidth(iWidth); + + // reformat field positions + for (k = 0; k < kLimit; k++) { + if (NULL != (pf = (ap_sb_Field *)m_vecFields.getNthItem(k))) { + pf->setLeftOrigin(xOrigin); + xOrigin += pf->getDesiredWidth() + xGap; + } + } + + // paint + draw(); } UT_uint32 AP_StatusBar::getWidth(void) const