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
