[BROWSEUI] CBandSite: Implement SetBandSiteInfo and GetBandSiteInfo

Only BSIS_LOCKED, BSIS_NOGRIPPER, BSIS_ALWAYSGRIPPER and BSIS_NOCAPTION supported so far.
This commit is contained in:
Giannis Adamopoulos 2018-02-28 17:16:46 +02:00
parent 6785192fe6
commit 6d4a091b4a
2 changed files with 108 additions and 89 deletions

View file

@ -40,7 +40,9 @@ CBandSiteBase::CBandSiteBase():
m_cBands(0), m_cBands(0),
m_cBandsAllocated(0), m_cBandsAllocated(0),
m_bands(NULL), m_bands(NULL),
m_hwndRebar(NULL) m_hwndRebar(NULL),
m_dwState(0),
m_dwStyle(0)
{ {
} }
@ -146,13 +148,13 @@ VOID CBandSiteBase::_BuildBandInfo(struct BandObject *Band, REBARBANDINFOW *prbi
prbi->fStyle |= RBBS_BREAK; prbi->fStyle |= RBBS_BREAK;
if (Band->dbi.dwModeFlags & DBIMF_TOPALIGN) if (Band->dbi.dwModeFlags & DBIMF_TOPALIGN)
prbi->fStyle |= RBBS_TOPALIGN; prbi->fStyle |= RBBS_TOPALIGN;
if (Band->dbi.dwModeFlags & DBIMF_NOGRIPPER) if ((Band->dbi.dwModeFlags & DBIMF_NOGRIPPER) || (m_dwStyle & BSIS_NOGRIPPER))
prbi->fStyle |= RBBS_NOGRIPPER; prbi->fStyle |= RBBS_NOGRIPPER;
if (Band->dbi.dwModeFlags & DBIMF_ALWAYSGRIPPER) if ((Band->dbi.dwModeFlags & DBIMF_ALWAYSGRIPPER) || (m_dwStyle & BSIS_ALWAYSGRIPPER))
prbi->fStyle |= RBBS_GRIPPERALWAYS; prbi->fStyle |= RBBS_GRIPPERALWAYS;
} }
if (Band->bHiddenTitle) if (Band->bHiddenTitle || (m_dwStyle & BSIS_NOCAPTION))
{ {
prbi->fMask |= RBBIM_STYLE; prbi->fMask |= RBBIM_STYLE;
prbi->fStyle |= RBBS_HIDETITLE; prbi->fStyle |= RBBS_HIDETITLE;
@ -295,6 +297,8 @@ HRESULT CBandSiteBase::_OnContextMenu(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
} }
} }
if (!(m_dwStyle & BSIS_LOCKED))
{
/* Load the static part of the menu */ /* Load the static part of the menu */
HMENU hMenuStatic = LoadMenuW(GetModuleHandleW(L"browseui.dll"), MAKEINTRESOURCEW(IDM_BAND_MENU)); HMENU hMenuStatic = LoadMenuW(GetModuleHandleW(L"browseui.dll"), MAKEINTRESOURCEW(IDM_BAND_MENU));
@ -317,6 +321,7 @@ HRESULT CBandSiteBase::_OnContextMenu(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
else else
CheckMenuItem(hMenu, IDM_BAND_TITLE, Band->bHiddenTitle ? MF_UNCHECKED : MF_CHECKED); CheckMenuItem(hMenu, IDM_BAND_TITLE, Band->bHiddenTitle ? MF_UNCHECKED : MF_CHECKED);
} }
}
/* TODO: Query the menu of our site */ /* TODO: Query the menu of our site */
@ -412,19 +417,21 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::AddBand(IUnknown *punk)
return E_FAIL; return E_FAIL;
hRet = punk->QueryInterface(IID_PPV_ARG(IDeskBand, &DeskBand)); hRet = punk->QueryInterface(IID_PPV_ARG(IDeskBand, &DeskBand));
if (!SUCCEEDED(hRet) || DeskBand == NULL) if (FAILED_UNEXPECTEDLY(hRet))
goto Cleanup; return hRet;
hRet = punk->QueryInterface(IID_PPV_ARG(IObjectWithSite, &ObjWithSite));
if (!SUCCEEDED(hRet) || ObjWithSite == NULL) hRet = punk->QueryInterface(IID_PPV_ARG(IObjectWithSite, &ObjWithSite));
goto Cleanup; if (FAILED_UNEXPECTEDLY(hRet))
hRet = punk->QueryInterface(IID_PPV_ARG(IOleWindow, &OleWindow)); return hRet;
if (!SUCCEEDED(hRet) || OleWindow == NULL)
goto Cleanup; hRet = punk->QueryInterface(IID_PPV_ARG(IOleWindow, &OleWindow));
hRet = punk->QueryInterface(IID_PPV_ARG(IWinEventHandler, &WndEvtHandler)); if (FAILED_UNEXPECTEDLY(hRet))
if (!SUCCEEDED(hRet) || WndEvtHandler == NULL) return hRet;
goto Cleanup;
hRet = punk->QueryInterface(IID_PPV_ARG(IWinEventHandler, &WndEvtHandler));
if (FAILED_UNEXPECTEDLY(hRet))
return hRet;
hRet = S_OK;
if (m_cBandsAllocated > m_cBands) if (m_cBandsAllocated > m_cBands)
{ {
/* Search for a free band object */ /* Search for a free band object */
@ -447,16 +454,14 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::AddBand(IUnknown *punk)
NewAllocated = 0xFFFF; NewAllocated = 0xFFFF;
if (NewAllocated == m_cBandsAllocated) if (NewAllocated == m_cBandsAllocated)
{ {
hRet = E_OUTOFMEMORY; return E_OUTOFMEMORY;
goto Cleanup;
} }
NewBand = static_cast<struct BandObject *>(CoTaskMemAlloc(NewAllocated * sizeof(struct BandObject))); NewBand = static_cast<struct BandObject *>(CoTaskMemAlloc(NewAllocated * sizeof(struct BandObject)));
if (NewBand == NULL) if (NewBand == NULL)
{ {
hRet = E_OUTOFMEMORY; return E_OUTOFMEMORY;
goto Cleanup;
} }
/* Copy the old array */ /* Copy the old array */
@ -479,8 +484,7 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::AddBand(IUnknown *punk)
m_bands = static_cast<struct BandObject *>(CoTaskMemAlloc(8 * sizeof(struct BandObject))); m_bands = static_cast<struct BandObject *>(CoTaskMemAlloc(8 * sizeof(struct BandObject)));
if (m_bands == NULL) if (m_bands == NULL)
{ {
hRet = E_OUTOFMEMORY; return E_OUTOFMEMORY;
goto Cleanup;
} }
/* Initialize the added bands */ /* Initialize the added bands */
@ -490,8 +494,6 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::AddBand(IUnknown *punk)
NewBand = &m_bands[0]; NewBand = &m_bands[0];
} }
if (SUCCEEDED(hRet))
{
ASSERT(NewBand != NULL); ASSERT(NewBand != NULL);
m_cBands++; m_cBands++;
@ -526,6 +528,8 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::AddBand(IUnknown *punk)
return E_FAIL; return E_FAIL;
hRet = (HRESULT)((USHORT)_GetBandID(NewBand)); hRet = (HRESULT)((USHORT)_GetBandID(NewBand));
_UpdateAllBands();
} }
else else
{ {
@ -547,10 +551,8 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::AddBand(IUnknown *punk)
_FreeBand(NewBand); _FreeBand(NewBand);
hRet = E_FAIL; hRet = E_FAIL;
/* goto Cleanup; */
} }
}
Cleanup:
return hRet; return hRet;
} }
@ -675,14 +677,29 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::GetBandObject(DWORD dwBandID, REFIID ri
HRESULT STDMETHODCALLTYPE CBandSiteBase::SetBandSiteInfo(const BANDSITEINFO *pbsinfo) HRESULT STDMETHODCALLTYPE CBandSiteBase::SetBandSiteInfo(const BANDSITEINFO *pbsinfo)
{ {
FIXME("(%p, %p)\n", this, pbsinfo); if (!pbsinfo)
return E_NOTIMPL; return E_INVALIDARG;
if ((pbsinfo->dwMask & BSIM_STATE))
m_dwState = pbsinfo->dwState;
if ((pbsinfo->dwMask & BSIM_STYLE))
m_dwStyle = pbsinfo->dwStyle;
_UpdateAllBands();
return S_OK;
} }
HRESULT STDMETHODCALLTYPE CBandSiteBase::GetBandSiteInfo(BANDSITEINFO *pbsinfo) HRESULT STDMETHODCALLTYPE CBandSiteBase::GetBandSiteInfo(BANDSITEINFO *pbsinfo)
{ {
FIXME("(%p, %p)\n", this, pbsinfo); if (!pbsinfo)
return E_NOTIMPL; return E_INVALIDARG;
if ((pbsinfo->dwMask & BSIM_STATE))
pbsinfo->dwState = m_dwState;
if ((pbsinfo->dwMask & BSIM_STYLE))
pbsinfo->dwStyle = m_dwStyle;
return S_OK;
} }
HRESULT STDMETHODCALLTYPE CBandSiteBase::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plrResult) HRESULT STDMETHODCALLTYPE CBandSiteBase::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plrResult)

View file

@ -54,6 +54,8 @@ private:
struct BandObject *m_bands; struct BandObject *m_bands;
HWND m_hwndRebar; HWND m_hwndRebar;
CComPtr<IOleWindow> m_site; CComPtr<IOleWindow> m_site;
DWORD m_dwState; /* BSSF_ flags */
DWORD m_dwStyle; /* BSIS_ flags */
public: public:
CBandSiteBase(); CBandSiteBase();
~CBandSiteBase(); ~CBandSiteBase();