Index: abi/src/wp/ap/xp/ap_StatusBar.cpp =================================================================== RCS file: /cvsroot/abi/src/wp/ap/xp/ap_StatusBar.cpp,v retrieving revision 1.28 diff -u -r1.28 ap_StatusBar.cpp --- abi/src/wp/ap/xp/ap_StatusBar.cpp 23 Oct 2002 03:03:51 -0000 1.28 +++ abi/src/wp/ap/xp/ap_StatusBar.cpp 23 Oct 2002 09:42:39 -0000 @@ -636,7 +636,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]; @@ -725,6 +725,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; @@ -732,6 +733,7 @@ UT_sint32 m_ProgressStartPoint; UT_uint32 m_ProgressFlags; UT_Timer *m_ProgressTimer; + UT_uint32 m_DesiredWidth; }; @@ -741,6 +743,7 @@ m_ProgressStartPoint = 0; m_ProgressFlags = 0; m_ProgressTimer = NULL; + m_DesiredWidth = _UL(450); } ap_sb_Field_StatusMessage::~ap_sb_Field_StatusMessage(void) @@ -749,7 +752,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) @@ -958,7 +965,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]; @@ -1244,15 +1251,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); @@ -1269,6 +1271,7 @@ #undef DclField m_bInitFields = true; + setWidth(m_iWidth); } // force a full notify of all fields so that they all @@ -1291,9 +1294,47 @@ void AP_StatusBar::setWidth(UT_uint32 iWidth) { - // TODO change status message control width - // TODO change x position of all controls to right of status message 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