Index: src/wp/ap/win/ap_Win32StatusBar.cpp =================================================================== --- src/wp/ap/win/ap_Win32StatusBar.cpp (revision 29714) +++ src/wp/ap/win/ap_Win32StatusBar.cpp (working copy) @@ -105,7 +105,8 @@ } // update - SendMessageW(hwnd, SB_SETPARTS, nParts, (LPARAM)pArOffsets); + SendMessageW(hwnd, SB_SETPARTS, nParts, (LPARAM)pArOffsets); + MoveWindow(pBar->getProgressBar(),*pArOffsets/2,2,*pArOffsets/2,20,true); delete [] pArWidths; delete [] pArOffsets; @@ -123,7 +124,7 @@ class ABI_EXPORT ap_usb_TextListener : public AP_StatusBarFieldListener { public: - ap_usb_TextListener(AP_StatusBarField *pStatusBarField, HWND hWnd, UINT nID, + ap_usb_TextListener(AP_StatusBarField *pStatusBarField, HWND hWnd,UINT nID, const AP_Win32StatusBar * pSB) : AP_StatusBarFieldListener(pStatusBarField), m_hWnd(hWnd), @@ -141,16 +142,45 @@ void ap_usb_TextListener::notify() { - UT_return_if_fail (m_hWnd && m_pSB); AP_StatusBarField_TextInfo * textInfo = ((AP_StatusBarField_TextInfo *)m_pStatusBarField); UT_Win32LocaleString str; str.fromUTF8 (textInfo->getBuf().utf8_str()); + SendMessageW(m_hWnd, SB_SETTEXTW, m_nID | m_pSB->getDir(), (LPARAM) str.c_str()); } +/*****************************************************************/ +class ap_usb_ProgressListener : public AP_StatusBarFieldListener +{ +public: + ap_usb_ProgressListener(AP_StatusBarField *pStatusBarField, HWND wProgress) : AP_StatusBarFieldListener(pStatusBarField) + { + m_ProgressWND = wProgress; + } + virtual void notify(); +protected: + HWND m_ProgressWND; +}; +void ap_usb_ProgressListener::notify() +{ + UT_return_if_fail (m_ProgressWND); + + AP_StatusBarField_ProgressBar * pProgress = ((AP_StatusBarField_ProgressBar *)m_pStatusBarField); + if(pProgress->isDefinate()) + { + double fraction = pProgress->getFraction(); + SendMessage(m_ProgressWND,PBM_SETPOS,fraction*100,0); + } + else + { //here pulse process bar + //gtk_progress_bar_pulse(GTK_PROGRESS_BAR(m_wProgress)); + } +} + + /*****************************************************************/ AP_Win32StatusBar::AP_Win32StatusBar(XAP_Frame * pFrame) @@ -202,6 +232,17 @@ WS_CHILD | WS_VISIBLE | SBS_SIZEGRIP, 0, 0, 0, 0, hwndFrame, NULL, app->getInstance(),NULL); + // add progress bar and hide it + // set the color and range + m_hwndProgressBar= UT_CreateWindowEx(0, PROGRESS_CLASSW, NULL, + WS_CHILD | WS_VISIBLE, + 0, 0, 0, 0, + m_hwndStatusBar, NULL, app->getInstance(),NULL); + SendMessage(m_hwndProgressBar,PBM_SETBARCOLOR,0,(long)RGB(255,255,0)); + SendMessage(m_hwndProgressBar,PBM_SETBKCOLOR,0,(long)RGB(255,19,200)); + SendMessage(m_hwndProgressBar,PBM_SETRANGE,0,MAKELONG(0,100)); + + UT_return_val_if_fail (m_hwndStatusBar,0); // route messages through our handler first (to size the status panels). @@ -220,7 +261,6 @@ if (pf->getFillMethod() == REPRESENTATIVE_STRING || (pf->getFillMethod() == MAX_POSSIBLE)) { AP_StatusBarField_TextInfo *pf_TextInfo = static_cast(pf); - // Create a Text element if (pf_TextInfo) { @@ -231,11 +271,15 @@ // size and place nWitdh+= (strlen(pf_TextInfo->getRepresentativeString())*10); *pCurWidth = nWitdh; - } - else - { + } + } + else if(pf->getFillMethod() == PROGRESS_BAR) + { + pf->setListener((AP_StatusBarFieldListener *)(new ap_usb_ProgressListener(pf, m_hwndProgressBar))); + } + else + { UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); // there are no other kinds of elements - } } pCurWidth++; @@ -273,3 +317,13 @@ m_pFrame->queue_resize(); } + +void AP_Win32StatusBar::showProgressBar(void) +{ + ShowWindow(m_hwndProgressBar,SW_SHOW); +} +void AP_Win32StatusBar::hideProgressBar(void) +{ + ShowWindow(m_hwndProgressBar,SW_HIDE); + SendMessage(m_hwndProgressBar,PBM_SETPOS,0,0); //hide and set to zero +} \ No newline at end of file Index: src/wp/ap/win/ap_Win32StatusBar.h =================================================================== --- src/wp/ap/win/ap_Win32StatusBar.h (revision 29714) +++ src/wp/ap/win/ap_Win32StatusBar.h (working copy) @@ -49,16 +49,18 @@ void setPrevWidth (int n) { m_iPrevWidth = n; } UINT getDir() const {return m_iDIR;} - + HWND getProgressBar() const {return m_hwndProgressBar;} + void showProgressBar(void); + void hideProgressBar(void); protected: virtual void show(); virtual void hide(); HWND m_hwndStatusBar; + HWND m_hwndProgressBar; WNDPROC m_pOrgStatusbarWndProc; int m_iPrevWidth; UINT m_iDIR; - }; #endif /* AP_WIN32STATUSBAR_H */ Index: src/wp/ap/xp/ap_StatusBar.h =================================================================== --- src/wp/ap/xp/ap_StatusBar.h (revision 29714) +++ src/wp/ap/xp/ap_StatusBar.h (working copy) @@ -91,6 +91,7 @@ /* used with AV_Listener */ virtual bool notify(AV_View * pView, const AV_ChangeMask mask); virtual AV_ListenerType getType(void) { return AV_LISTENER_STATUSBAR;} + UT_GenericVector * getFields() { return &m_vecFields; } protected: @@ -102,7 +103,7 @@ UT_GenericVector m_vecFields; /* vector of 'ap_sb_Field *' */ void * m_pStatusMessageField; /* actually 'AP_StatusBarField_StatusMessage *' */ AP_StatusBarField_ProgressBar * m_pStatusProgressField; - UT_UTF8String m_sStatusMessage; + UT_UTF8String m_sStatusMessage; }; // abstract class which "listens" for changes in the status bar fields in the base classes @@ -144,7 +145,7 @@ AP_StatusBarFieldListener * getListener() { return m_pStatusBarFieldListener; } _statusbar_element_fill_method getFillMethod() { return m_fillMethod; } - + AP_StatusBar * getApStatusBar(){return m_pSB;} protected: AP_StatusBar * m_pSB; AP_StatusBarFieldListener *m_pStatusBarFieldListener;