123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #include "main.h"
- #include "./toolbarProgress.h"
- #include "./toolbar.h"
- #include "./graphics.h"
- #include "./resource.h"
- #include "../Plugins/General/gen_ml/ml_ipc_0313.h"
- #include "./ifc_imageloader.h"
- #include <strsafe.h>
- #define PROGRESS_FRAMECOUNT 9
- static ATOM TOOLBARPROGRESS_PROP = 0;
- #define TIMER_PROGRESSSTEP_ID 111
- #define TIMER_PROGRESSSTEP_INTERVAL 120
- ToolbarProgress::ToolbarProgress(LPCSTR pszName, UINT nStyle, LPCWSTR pszText, LPCWSTR pszDescription)
- : ToolbarItem(pszName, nStyle, ICON_NONE, pszText, pszDescription),
- bitmap(NULL), frame(0), hTimer(NULL)
- {
- }
- ToolbarProgress::~ToolbarProgress()
- {
- if (NULL != hTimer)
- Animate(hTimer, FALSE);
-
- if (NULL != bitmap)
- DeleteObject(bitmap);
- }
- static void CALLBACK ToolbarProgress_TimerElapsed(HWND hwnd, UINT uMsg, UINT_PTR eventId, DWORD dwTime)
- {
- ToolbarProgress *item = (ToolbarProgress*)GetProp(hwnd, MAKEINTATOM(TOOLBARPROGRESS_PROP));
- if (NULL == item || 0 != ((ToolbarItem::stateDisabled | ToolbarItem::stateHidden) & item->GetStyle()))
- {
- if (NULL != item)
- item->Animate(hwnd, FALSE);
- else
- KillTimer(hwnd, TIMER_PROGRESSSTEP_ID);
- return;
- }
- item->Animate(hwnd, TRUE);
- }
- ToolbarItem* CALLBACK ToolbarProgress::CreateInstance(ToolbarItem::Template *item)
- {
- if (NULL == item)
- return NULL;
- return new ToolbarProgress( (NULL != item->name) ? item->name : TOOLCLS_PROGRESS,
- item->style | styleNoChevron,
- item->text,
- item->description);
- }
- void ToolbarProgress::SetStyle(HWND hToolbar, UINT newStyle, UINT styleMask)
- {
- __super::SetStyle(hToolbar, newStyle, styleMask);
- if (0 == ((stateDisabled | stateHidden) & style))
- {
- Animate(hToolbar, TRUE);
- }
- }
- BOOL ToolbarProgress::Animate(HWND hToolbar, BOOL fAnimate)
- {
- if (FALSE == fAnimate)
- {
- if (NULL != hTimer)
- {
- RemoveProp(hTimer, MAKEINTATOM(TOOLBARPROGRESS_PROP));
- KillTimer(hTimer, TIMER_PROGRESSSTEP_ID);
- hTimer = NULL;
- }
- if (0 != frame)
- {
- frame = 0;
- InvalidateRect(hToolbar, &rect, FALSE);
- }
-
- }
- else
- {
- if (NULL == hTimer)
- {
- if (0 == TOOLBARPROGRESS_PROP)
- {
- TOOLBARPROGRESS_PROP = GlobalAddAtom(L"omToolbarProgressProp");
- if (0 == TOOLBARPROGRESS_PROP) return FALSE;
- }
- if (!SetProp(hToolbar, MAKEINTATOM(TOOLBARPROGRESS_PROP), (HANDLE)this))
- return FALSE;
-
- if (!SetTimer(hToolbar, TIMER_PROGRESSSTEP_ID, TIMER_PROGRESSSTEP_INTERVAL,
- ToolbarProgress_TimerElapsed))
- {
- RemoveProp(hToolbar, MAKEINTATOM(TOOLBARPROGRESS_PROP));
- return FALSE;
- }
- hTimer = hToolbar;
- }
- if (++frame >= PROGRESS_FRAMECOUNT)
- {
- frame = 1;
- }
- InvalidateRect(hToolbar, &rect, FALSE);
-
- }
- return TRUE;
- }
- void ToolbarProgress::UpdateSkin(HWND hToolbar)
- {
-
- if (NULL != bitmap)
- {
- DeleteObject(bitmap);
- bitmap = NULL;
- }
-
- ifc_omimageloader *loader;
-
- if (SUCCEEDED(Plugin_QueryImageLoader(Plugin_GetInstance(), MAKEINTRESOURCE(IDR_TOOLBARPROGRESS_IMAGE), TRUE, &loader)))
- {
- BITMAPINFOHEADER headerInfo;
- BYTE *pixelData;
- if (SUCCEEDED(loader->LoadBitmapEx(&bitmap, &headerInfo, (void**)&pixelData)))
- {
- if (headerInfo.biHeight < 0) headerInfo.biHeight = -headerInfo.biHeight;
-
- Image_Colorize(pixelData, headerInfo.biWidth, headerInfo.biHeight, headerInfo.biBitCount,
- Toolbar_GetBkColor(hToolbar), Toolbar_GetFgColor(hToolbar), TRUE);
- }
- loader->Release();
- }
- }
- BOOL ToolbarProgress::AdjustRect(HWND hToolbar, RECT *proposedRect)
- {
- BITMAP bm;
- if (NULL == bitmap || sizeof(BITMAP) != GetObject(bitmap, sizeof(BITMAP), &bm))
- return FALSE;
- if (bm.bmHeight < 0) bm.bmHeight = -bm.bmHeight;
- bm.bmHeight /= PROGRESS_FRAMECOUNT;
- proposedRect->right = proposedRect->left + bm.bmWidth;
- proposedRect->top += (((proposedRect->bottom - proposedRect->top) - bm.bmHeight)/2);
- proposedRect->bottom = proposedRect->top + bm.bmHeight;
- return TRUE;
- }
- BOOL ToolbarProgress::Paint(HWND hToolbar, HDC hdc, const RECT *paintRect, UINT state)
- {
- BITMAP bm;
- if (NULL == bitmap || sizeof(BITMAP) != GetObject(bitmap, sizeof(BITMAP), &bm))
- return FALSE;
-
- if (bm.bmHeight < 0) bm.bmHeight = -bm.bmHeight;
- bm.bmHeight /= PROGRESS_FRAMECOUNT;
-
- RECT blitRect;
- if (!IntersectRect(&blitRect, paintRect))
- return TRUE;
-
- BOOL success = FALSE;
- HDC hdcSrc = CreateCompatibleDC(hdc);
- if (NULL != hdcSrc)
- {
- HBITMAP hbmpOld = (HBITMAP)SelectObject(hdcSrc, bitmap);
- success = BitBlt(hdc, blitRect.left, blitRect.top,
- blitRect.right - blitRect.left, blitRect.bottom - blitRect.top,
- hdcSrc,
- blitRect.left - rect.left,
- bm.bmHeight * frame + (blitRect.top - rect.top),
- SRCCOPY);
- SelectObject(hdcSrc, hbmpOld);
- DeleteDC(hdcSrc);
- }
-
- return success;
- }
|