annotate foosdk/wtl/Include/atlribbon.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 // Windows Template Library - WTL version 10.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 // Copyright (C) Microsoft Corporation, WTL Team. All rights reserved.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // This file is a part of the Windows Template Library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 // The use and distribution terms for this software are covered by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 // Microsoft Public License (http://opensource.org/licenses/MS-PL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 // which can be found in the file MS-PL.txt at the root folder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #ifndef __ATLRIBBON_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #define __ATLRIBBON_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 #if (_MSC_VER < 1500)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #error atlribbon.h requires Visual C++ 2008 compiler or higher
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 #ifndef _UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 #error atlribbon.h requires the Unicode character set
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 #if !defined(NTDDI_WIN7) || (NTDDI_VERSION < NTDDI_WIN7)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 #error atlribbon.h requires the Windows 7 SDK or higher
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 #ifndef __ATLAPP_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 #error atlribbon.h requires atlapp.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 #include <atlmisc.h> // for RecentDocumentList classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 #include <atlframe.h> // for Frame and UpdateUI classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 #include <atlctrls.h> // required for atlctrlw.h
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 #include <atlctrlw.h> // for CCommandBarCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 #ifndef __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 #pragma warning(push)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 #pragma warning(disable: 4530) // unwind semantics not enabled
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 #include <string>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 #pragma warning(pop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 #include <dwmapi.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 #pragma comment(lib, "dwmapi.lib")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 #include "UIRibbon.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 #include "UIRibbonPropertyHelpers.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 #pragma comment(lib, "propsys.lib")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #include <Richedit.h> // for CHARFORMAT2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 // Classes in this file:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 // CRibbonUpdateUI : Automatic mapping of ribbon UI elements
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 // RibbonUI::Text
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 // RibbonUI::CharFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 // RibbonUI::ICtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 // RibbonUI::CtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 // RibbonUI::CommandCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 // RibbonUI::ItemProperty
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 // RibbonUI::CollectionImplBase
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 // RibbonUI::CollectionImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 // RibbonUI::TextCollectionImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 // RibbonUI::ItemCollectionImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 // RibbonUI::ComboCollectionImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 // RibbonUI::CommandCollectionImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 // RibbonUI::ToolbarCollectionImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 // RibbonUI::SimpleCollectionImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 // RibbonUI::CollectionCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 // RibbonUI::ToolbarGalleryCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 // RibbonUI::SimpleCollectionCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 // RibbonUI::RecentItemsCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 // RibbonUI::FontCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 // RibbonUI::ColorCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 // RibbonUI::SpinnerCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 // RibbonUI::CRibbonImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 // CRibbonImpl::CRibbonComboCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 // CRibbonImpl::CRibbonItemGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 // CRibbonImpl::CRibbonCommandGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 // CRibbonImpl::CRibbonToolbarGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 // CRibbonImpl::CRibbonSimpleComboCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 // CRibbonImpl::CRibbonSimpleGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 // CRibbonImpl::CRibbonRecentItemsCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 // CRibbonImpl::CRibbonColorCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 // CRibbonImpl::CRibbonFontCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 // CRibbonImpl::CRibbonSpinnerCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 // CRibbonImpl::CRibbonFloatSpinnerCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 // CRibbonImpl::CRibbonCommandCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 // CRibbonFrameWindowImplBase
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 // CRibbonFrameWindowImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 // CRibbonMDIFrameWindowImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 // CRibbonPersist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 // Global functions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 // RibbonUI::SetPropertyVal()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 // RibbonUI::GetImage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 // Constants
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 #ifndef RIBBONUI_MAX_TEXT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 #define RIBBONUI_MAX_TEXT 128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 #define TWIPS_PER_POINT 20 // For font size
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 // CRibbonUpdateUI : Automatic mapping of ribbon UI elements
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 template <class T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 class CRibbonUpdateUI : public CAutoUpdateUI<T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 enum
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 UPDUI_RIBBON = 0x0080,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 UPDUI_PERSIST = 0x0020
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 bool IsRibbonElement(const CUpdateUIBase::_AtlUpdateUIMap& UIMap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 return (UIMap.m_wType & UPDUI_RIBBON) != 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 bool IsRibbonID(UINT nID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 for(int i = 0; i < this->m_arrUIMap.GetSize(); i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 if(this->m_arrUIMap[i].m_nID == nID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 return IsRibbonElement(this->m_arrUIMap[i]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 // Element
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 bool UIAddRibbonElement(UINT nID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 return this->UIAddElement<UPDUI_RIBBON>(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 bool UIRemoveRibbonElement(UINT nID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 return this->UIRemoveElement<UPDUI_RIBBON>(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 bool UIPersistElement(UINT nID, bool bPersist = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 return bPersist ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 this->UIAddElement<UPDUI_PERSIST>(nID) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 this->UIRemoveElement<UPDUI_PERSIST>(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 // methods for Ribbon elements
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 BOOL UISetText(int nID, LPCWSTR sText, BOOL bForceUpdate = FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 BOOL bRes = CUpdateUIBase::UISetText(nID, sText, bForceUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 if (pT->IsRibbonUI() && IsRibbonID(nID))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 bRes = SUCCEEDED(pT->InvalidateProperty(nID, UI_PKEY_Label));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 return bRes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 BOOL UISetText(int nID, UINT uIdResource, BOOL bForceUpdate = FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 ATL::CTempBuffer<WCHAR> sText(RIBBONUI_MAX_TEXT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 int nRet = ATL::AtlLoadString(uIdResource, sText, RIBBONUI_MAX_TEXT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 if(nRet > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 UISetText(nID, sText, bForceUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 return (nRet > 0) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 LPCTSTR UIGetText(int nID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 LPCTSTR sUI = CAutoUpdateUI<T>::UIGetText(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 // replace 'tab' by 'space' for RibbonUI elements
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 if (sUI && pT->IsRibbonUI() && IsRibbonID(nID) && wcschr(sUI, L'\t'))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 static WCHAR sText[RIBBONUI_MAX_TEXT] = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 wcscpy_s(sText, sUI);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 WCHAR* pch = wcschr(sText, L'\t');
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 if (pch != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 *pch = L' ';
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 return sText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 return sUI;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 BOOL UIEnable(int nID, BOOL bEnable, BOOL bForceUpdate = FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 BOOL bRes = CUpdateUIBase::UIEnable(nID, bEnable, bForceUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 if (pT->IsRibbonUI() && IsRibbonID(nID))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 bRes = SUCCEEDED(pT->SetProperty((WORD)nID, UI_PKEY_Enabled, bEnable));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 return bRes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 BOOL UISetCheck(int nID, INT nCheck, BOOL bForceUpdate = FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 if ((nCheck == 0) || (nCheck == 1))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 return UISetCheck(nID, nCheck != 0, bForceUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 return CUpdateUIBase::UISetCheck(nID, nCheck, bForceUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 BOOL UISetCheck(int nID, bool bCheck, BOOL bForceUpdate = FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 BOOL bRes = CUpdateUIBase::UISetCheck(nID, bCheck, bForceUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 if (bRes && pT->IsRibbonUI() && IsRibbonID(nID))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 bRes = SUCCEEDED(pT->SetProperty((WORD)nID, UI_PKEY_BooleanValue, bCheck));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 return bRes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 // RibbonUI namespace
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 namespace RibbonUI
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 // Minimal string allocation support for various PROPERTYKEY values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 #ifdef __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 typedef ATL::CString Text;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 class Text : public std::wstring
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 Text(std::wstring& s) : std::wstring(s)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 Text(LPCWSTR s) : std::wstring(s)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 Text()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 bool IsEmpty()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 return empty();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 operator LPCWSTR()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 return c_str();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 Text& operator =(LPCWSTR s)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 return static_cast<Text&>(std::wstring::operator =(s));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 #endif // __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 // PROPERTYKEY enum and helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 enum k_KEY
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 // state
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 k_Enabled = 1, k_BooleanValue = 200,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 // text properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 k_LabelDescription = 2, k_Keytip = 3, k_Label = 4, k_TooltipDescription = 5, k_TooltipTitle = 6,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 // image properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 k_LargeImage = 7, k_LargeHighContrastImage = 8, k_SmallImage = 9, k_SmallHighContrastImage = 10,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 // collection properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 k_ItemsSource = 101, k_Categories = 102, k_SelectedItem = 104,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 // collection item properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 k_CommandId = 100, k_CategoryId = 103, k_CommandType = 105, k_ItemImage = 106,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 // combo control property
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 k_StringValue = 202,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 // spinner control properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 k_DecimalValue = 201, k_MaxValue = 203, k_MinValue, k_Increment, k_DecimalPlaces, k_FormatString, k_RepresentativeString = 208,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 // font control properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 k_FontProperties = 300, k_FontProperties_Family, k_FontProperties_Size, k_FontProperties_Bold, k_FontProperties_Italic = 304,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 k_FontProperties_Underline = 305, k_FontProperties_Strikethrough, k_FontProperties_VerticalPositioning, k_FontProperties_ForegroundColor = 308,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 k_FontProperties_BackgroundColor = 309, k_FontProperties_ForegroundColorType, k_FontProperties_BackgroundColorType, k_FontProperties_ChangedProperties = 312,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 k_FontProperties_DeltaSize = 313,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 // recent items properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 k_RecentItems = 350, k_Pinned = 351,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 // color control properties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 k_Color = 400, k_ColorType = 401, k_ColorMode,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 k_ThemeColorsCategoryLabel = 403, k_StandardColorsCategoryLabel, k_RecentColorsCategoryLabel = 405, k_AutomaticColorLabel = 406,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 k_NoColorLabel = 407, k_MoreColorsLabel = 408,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 k_ThemeColors = 409, k_StandardColors = 410, k_ThemeColorsTooltips = 411, k_StandardColorsTooltips = 412,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 // Ribbon state
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 k_Viewable = 1000, k_Minimized = 1001, k_QuickAccessToolbarDock = 1002, k_ContextAvailable = 1100,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 // Ribbon UI colors
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 k_GlobalBackgroundColor = 2000, k_GlobalHighlightColor, k_GlobalTextColor = 2002
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 inline k_KEY k_(REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 return (k_KEY)key.fmtid.Data1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 // PROPERTYKEY value assignment and specializations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 template <typename V>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 HRESULT SetPropertyVal(REFPROPERTYKEY key, V val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 case k_Enabled:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 case k_BooleanValue:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 return InitPropVariantFromBoolean(val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 return UIInitPropertyFromUInt32(key, val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, DOUBLE val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 return SetPropertyVal(key, (LONG)val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, IUIImage* val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 HRESULT hr = UIInitPropertyFromImage(key, val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 ATLVERIFY(val->Release() == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, IUnknown* val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 return UIInitPropertyFromInterface(key, val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, IPropertyStore* val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 return UIInitPropertyFromInterface(key, val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, SAFEARRAY* val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 return UIInitPropertyFromIUnknownArray(key, val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, DECIMAL* val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 return UIInitPropertyFromDecimal(key, *val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, bool val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 return UIInitPropertyFromBoolean(key, val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 inline HRESULT SetPropertyVal(REFPROPERTYKEY key, LPCWSTR val, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 return UIInitPropertyFromString(key, val, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 // CharFormat helper struct for RibbonUI font control
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 struct CharFormat : CHARFORMAT2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 // Default constructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 CharFormat()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 cbSize = sizeof(CHARFORMAT2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 Reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 // Copy constructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 CharFormat(const CharFormat& cf)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 ::CopyMemory(this, &cf, sizeof(CHARFORMAT2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 // Assign operator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 CharFormat& operator =(const CharFormat& cf)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 ::CopyMemory(this, &cf, sizeof(CHARFORMAT2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 return (*this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 void Reset()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 uValue = dwMask = dwEffects = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 PropVariantInit(&propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 void operator <<(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 if (pStore == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 static void (CharFormat::*Getk_[])(IPropertyStore*) =
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 &CharFormat::Getk_Family,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 &CharFormat::Getk_FontProperties_Size,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 &CharFormat::Getk_MaskEffectBold,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 &CharFormat::Getk_MaskEffectItalic,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 &CharFormat::Getk_MaskEffectUnderline,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 &CharFormat::Getk_MaskEffectStrikeout,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 &CharFormat::Getk_VerticalPositioning,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 &CharFormat::Getk_Color,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 &CharFormat::Getk_ColorBack,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 &CharFormat::Getk_ColorType,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 &CharFormat::Getk_ColorTypeBack,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 DWORD nProps = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 Reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 ATLVERIFY(SUCCEEDED(pStore->GetCount(&nProps)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 for (DWORD iProp = 0; iProp < nProps; iProp++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 PROPERTYKEY key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 ATLVERIFY(SUCCEEDED(pStore->GetAt(iProp, &key)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 ATLASSERT(k_(key) >= k_FontProperties_Family);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 if (k_(key) <= k_FontProperties_BackgroundColorType)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 (this->*Getk_[k_(key) - k_FontProperties_Family])(pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 void operator >>(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 if (pStore == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 PutFace(pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 PutSize(pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 PutMaskEffect(CFM_BOLD, CFE_BOLD, UI_PKEY_FontProperties_Bold, pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 PutMaskEffect(CFM_ITALIC, CFE_ITALIC, UI_PKEY_FontProperties_Italic, pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 PutMaskEffect(CFM_UNDERLINE, CFE_UNDERLINE, UI_PKEY_FontProperties_Underline, pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 PutMaskEffect(CFM_STRIKEOUT, CFE_STRIKEOUT, UI_PKEY_FontProperties_Strikethrough, pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 PutVerticalPos(pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 PutColor(pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 PutBackColor(pStore);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 UINT uValue;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 // Getk_ functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 void Getk_Family(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456 if (SUCCEEDED(pStore->GetValue(UI_PKEY_FontProperties_Family, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 PropVariantToString(propvar, szFaceName, LF_FACESIZE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 if (*szFaceName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 dwMask |= CFM_FACE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 void Getk_FontProperties_Size(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 if (SUCCEEDED(pStore->GetValue(UI_PKEY_FontProperties_Size, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 DECIMAL decSize = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 UIPropertyToDecimal(UI_PKEY_FontProperties_Size, propvar, &decSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 DOUBLE dSize = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 VarR8FromDec(&decSize, &dSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 if (dSize > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 dwMask |= CFM_SIZE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 yHeight = (LONG)(dSize * TWIPS_PER_POINT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 void Getk_MaskEffectBold(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 Getk_MaskEffectAll(pStore, CFM_BOLD, CFE_BOLD, UI_PKEY_FontProperties_Bold);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 void Getk_MaskEffectItalic(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 Getk_MaskEffectAll(pStore, CFM_ITALIC, CFE_ITALIC, UI_PKEY_FontProperties_Italic);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 void Getk_MaskEffectUnderline(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 Getk_MaskEffectAll(pStore, CFM_UNDERLINE, CFE_UNDERLINE, UI_PKEY_FontProperties_Underline);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 void Getk_MaskEffectStrikeout(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497 Getk_MaskEffectAll(pStore, CFM_STRIKEOUT, CFE_STRIKEOUT, UI_PKEY_FontProperties_Strikethrough);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 void Getk_MaskEffectAll(IPropertyStore* pStore, DWORD _dwMask, DWORD _dwEffects, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 if (SUCCEEDED(pStore->GetValue(key, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 UIPropertyToUInt32(key, propvar, &uValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 if ((UI_FONTPROPERTIES)uValue != UI_FONTPROPERTIES_NOTAVAILABLE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 dwMask |= _dwMask;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 dwEffects |= ((UI_FONTPROPERTIES)uValue == UI_FONTPROPERTIES_SET) ? _dwEffects : 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 void Getk_VerticalPositioning(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 if (SUCCEEDED(pStore->GetValue(UI_PKEY_FontProperties_VerticalPositioning, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 UIPropertyToUInt32(UI_PKEY_FontProperties_VerticalPositioning, propvar, &uValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 UI_FONTVERTICALPOSITION uVerticalPosition = (UI_FONTVERTICALPOSITION) uValue;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 if ((uVerticalPosition != UI_FONTVERTICALPOSITION_NOTAVAILABLE))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 dwMask |= (CFM_SUPERSCRIPT | CFM_SUBSCRIPT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 if (uVerticalPosition != UI_FONTVERTICALPOSITION_NOTSET)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 dwEffects |= (uVerticalPosition == UI_FONTVERTICALPOSITION_SUPERSCRIPT) ? CFE_SUPERSCRIPT : CFE_SUBSCRIPT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 void Getk_Color(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 Getk_ColorAll(pStore, CFM_COLOR, UI_PKEY_FontProperties_ForegroundColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 void Getk_ColorBack(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 Getk_ColorAll(pStore, CFM_BACKCOLOR, UI_PKEY_FontProperties_BackgroundColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 void Getk_ColorAll(IPropertyStore* pStore, DWORD _dwMask, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 UINT32 color = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 if (SUCCEEDED(pStore->GetValue(key, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 UIPropertyToUInt32(key, propvar, &color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 dwMask |= _dwMask;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548 if (_dwMask == CFM_COLOR)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 crTextColor = color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 crBackColor = color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 void Getk_ColorType(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 Getk_ColorTypeAll(pStore, CFM_COLOR, CFE_AUTOCOLOR, UI_SWATCHCOLORTYPE_AUTOMATIC, UI_PKEY_FontProperties_ForegroundColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 void Getk_ColorTypeBack(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 Getk_ColorTypeAll(pStore, CFM_BACKCOLOR, CFE_AUTOBACKCOLOR, UI_SWATCHCOLORTYPE_NOCOLOR, UI_PKEY_FontProperties_BackgroundColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 void Getk_ColorTypeAll(IPropertyStore* pStore, DWORD _dwMask, DWORD _dwEffects, UI_SWATCHCOLORTYPE _type, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 if (SUCCEEDED(pStore->GetValue(key, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 UIPropertyToUInt32(key, propvar, &uValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 if (_type == (UI_SWATCHCOLORTYPE)uValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 dwMask |= _dwMask;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 dwEffects |= _dwEffects;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 // Put functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 void PutMaskEffect(WORD dwMaskVal, WORD dwEffectVal, REFPROPERTYKEY key, IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 UI_FONTPROPERTIES uProp = UI_FONTPROPERTIES_NOTAVAILABLE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 if ((dwMask & dwMaskVal) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 uProp = dwEffects & dwEffectVal ? UI_FONTPROPERTIES_SET : UI_FONTPROPERTIES_NOTSET;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 SetPropertyVal(key, uProp, &var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 pStore->SetValue(key, var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 void PutVerticalPos(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 UI_FONTVERTICALPOSITION uProp = UI_FONTVERTICALPOSITION_NOTAVAILABLE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 if ((dwMask & CFE_SUBSCRIPT) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 if ((dwMask & CFM_SUBSCRIPT) && (dwEffects & CFE_SUBSCRIPT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 uProp = UI_FONTVERTICALPOSITION_SUBSCRIPT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 uProp = UI_FONTVERTICALPOSITION_SUPERSCRIPT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 else if ((dwMask & CFM_OFFSET) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 if (yOffset > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 uProp = UI_FONTVERTICALPOSITION_SUPERSCRIPT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 else if (yOffset < 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 uProp = UI_FONTVERTICALPOSITION_SUBSCRIPT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 SetPropertyVal(UI_PKEY_FontProperties_VerticalPositioning, uProp, &var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 pStore->SetValue(UI_PKEY_FontProperties_VerticalPositioning, var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 void PutFace(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 SetPropertyVal(UI_PKEY_FontProperties_Family,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 dwMask & CFM_FACE ? szFaceName : L"", &var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 pStore->SetValue(UI_PKEY_FontProperties_Family, var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 void PutSize(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 DECIMAL decVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 if ((dwMask & CFM_SIZE) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 VarDecFromR8((DOUBLE)yHeight / TWIPS_PER_POINT, &decVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 VarDecFromI4(0, &decVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 SetPropertyVal(UI_PKEY_FontProperties_Size, &decVal, &var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 pStore->SetValue(UI_PKEY_FontProperties_Size, var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 void PutColor(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 if ((dwMask & CFM_COLOR) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640 if ((dwEffects & CFE_AUTOCOLOR) == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 SetPropertyVal(UI_PKEY_FontProperties_ForegroundColorType, UI_SWATCHCOLORTYPE_RGB, &propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 pStore->SetValue(UI_PKEY_FontProperties_ForegroundColorType, propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 SetPropertyVal(UI_PKEY_FontProperties_ForegroundColor, crTextColor, &propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 pStore->SetValue(UI_PKEY_FontProperties_ForegroundColor, propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 SetPropertyVal(UI_PKEY_FontProperties_ForegroundColorType, UI_SWATCHCOLORTYPE_AUTOMATIC, &propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 pStore->SetValue(UI_PKEY_FontProperties_ForegroundColorType, propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 void PutBackColor(IPropertyStore* pStore)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 if (((dwMask & CFM_BACKCOLOR) != 0) && ((dwEffects & CFE_AUTOBACKCOLOR) == 0))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 SetPropertyVal(UI_PKEY_FontProperties_BackgroundColorType, UI_SWATCHCOLORTYPE_RGB, &propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 pStore->SetValue(UI_PKEY_FontProperties_BackgroundColorType, propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 SetPropertyVal(UI_PKEY_FontProperties_BackgroundColor, crBackColor, &propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 pStore->SetValue(UI_PKEY_FontProperties_BackgroundColor, propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 SetPropertyVal(UI_PKEY_FontProperties_BackgroundColorType, UI_SWATCHCOLORTYPE_NOCOLOR, &propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 pStore->SetValue(UI_PKEY_FontProperties_BackgroundColorType, propvar);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 // IUIImage helper
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 inline IUIImage* GetImage(HBITMAP hbm, UI_OWNERSHIP owner)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 ATLASSERT(hbm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 IUIImage* pIUII = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 ATL::CComPtr<IUIImageFromBitmap> pIFB;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682 if SUCCEEDED(pIFB.CoCreateInstance(CLSID_UIRibbonImageFromBitmapFactory))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 ATLVERIFY(SUCCEEDED(pIFB->CreateImage(hbm, owner, &pIUII)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 return pIUII;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 // Ribbon control classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 // RibbonUI::ICtrl abstract interface of RibbonUI::CRibbonImpl and all RibbonUI control classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 struct ICtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698 IUISimplePropertySet* pCommandExecutionProperties) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 // RibbonUI::CtrlImpl base class for all ribbon controls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 template <class T, UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 class ATL_NO_VTABLE CtrlImpl : public ICtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 protected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710 T* m_pWndRibbon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 typedef T WndRibbon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 CtrlImpl() : m_pWndRibbon(T::pWndRibbon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 virtual ~CtrlImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 WndRibbon& GetWndRibbon()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 return *m_pWndRibbon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 static WORD GetID()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 return t_ID;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 Text m_sTxt[5];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 HRESULT Invalidate()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 return GetWndRibbon().InvalidateCtrl(GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 HRESULT Invalidate(REFPROPERTYKEY key, UI_INVALIDATIONS flags = UI_INVALIDATIONS_PROPERTY)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 return GetWndRibbon().InvalidateProperty(GetID(), key, flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 HRESULT SetText(REFPROPERTYKEY key, LPCWSTR sTxt, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746 ATLASSERT((k_(key) <= k_TooltipTitle) && (k_(key) >= k_LabelDescription));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 m_sTxt[k_(key) - k_LabelDescription] = sTxt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 return bUpdate ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 GetWndRibbon().InvalidateProperty(GetID(), key) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756 template <typename V>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757 HRESULT SetProperty(REFPROPERTYKEY key, V val)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759 return GetWndRibbon().SetProperty(GetID(), key, val);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762 HRESULT OnGetText(REFPROPERTYKEY key, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 ATLASSERT((k_(key) <= k_TooltipTitle) && (k_(key) >= k_LabelDescription));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 const INT iText = k_(key) - k_LabelDescription;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 if (m_sTxt[iText].IsEmpty())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 if (LPCWSTR sText = GetWndRibbon().OnRibbonQueryText(GetID(), key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769 m_sTxt[iText] = sText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 return !m_sTxt[iText].IsEmpty() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772 SetPropertyVal(key, (LPCWSTR)m_sTxt[iText], ppv) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 IUISimplePropertySet* pCommandExecutionProperties)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 ATLASSERT(nCmdID == t_ID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781 return GetWndRibbon().DoExecute(nCmdID, verb, key, ppropvarValue, pCommandExecutionProperties);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 ATLASSERT(nCmdID == t_ID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 const INT iMax = k_TooltipTitle - k_LabelDescription;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 const INT iVal = k_(key) - k_LabelDescription;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 return (iVal <= iMax) && (iVal >= 0) ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 OnGetText(key, ppropvarNewValue) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794 GetWndRibbon().DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 // CommandCtrlImpl base class for most ribbon controls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800 template <class T, UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 class CommandCtrlImpl : public CtrlImpl<T, t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 CBitmap m_hbm[4];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 HRESULT SetImage(REFPROPERTYKEY key, HBITMAP hbm, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 ATLASSERT((k_(key) <= k_SmallHighContrastImage) && (k_(key) >= k_LargeImage));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 m_hbm[k_(key) - k_LargeImage].Attach(hbm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 return bUpdate ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 this->GetWndRibbon().InvalidateProperty(this->GetID(), key) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 HRESULT OnGetImage(REFPROPERTYKEY key, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819 ATLASSERT((k_(key) <= k_SmallHighContrastImage) && (k_(key) >= k_LargeImage));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 const INT iImage = k_(key) - k_LargeImage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 if (m_hbm[iImage].IsNull())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824 m_hbm[iImage] = this->GetWndRibbon().OnRibbonQueryImage(this->GetID(), key);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 return m_hbm[iImage].IsNull() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827 E_NOTIMPL :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 SetPropertyVal(key, GetImage(m_hbm[iImage], UI_OWNERSHIP_COPY), ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 return (k_(key) <= k_SmallHighContrastImage) && (k_(key) >= k_LargeImage) ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 OnGetImage(key, ppropvarNewValue) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 CtrlImpl<T, t_ID>::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 // Ribbon collection base classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 // ItemProperty class: ribbon callback for each item in a collection
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849 #pragma warning(push)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850 #pragma warning(disable: 4512) // assignment operator could not be generated
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 template <class TCollection>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 class ItemProperty : public IUISimplePropertySet
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 ItemProperty(UINT i, TCollection* pCollection) : m_Index(i), m_pCollection(pCollection)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 const UINT m_Index;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860 TCollection* m_pCollection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 // IUISimplePropertySet method.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 STDMETHODIMP GetValue(REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 return m_pCollection->OnGetItem(m_Index, key, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 // IUnknown methods.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 STDMETHODIMP_(ULONG) AddRef()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 STDMETHODIMP_(ULONG) Release()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 STDMETHODIMP QueryInterface(REFIID iid, void** ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 if ((iid == __uuidof(IUnknown)) || (iid == __uuidof(IUISimplePropertySet)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 *ppv = this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 return E_NOINTERFACE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 #pragma warning(pop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 // CollectionImplBase: base class for all RibbonUI collections
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 template <class TCollection, size_t t_size>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 class CollectionImplBase
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 typedef CollectionImplBase<TCollection, t_size> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 CollectionImplBase()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 for (int i = 0; i < t_size; i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 m_apItems[i] = new ItemProperty<TCollection>(i, static_cast<TCollection*>(this));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 ~CollectionImplBase()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 for (int i = 0; i < t_size; i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 delete m_apItems[i];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 ItemProperty<TCollection>* m_apItems[t_size];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 // CollectionImpl: handles categories and collecton resizing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 template <class TCtrl, size_t t_items, size_t t_categories>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923 class CollectionImpl : public CollectionImplBase<CollectionImpl<TCtrl, t_items, t_categories>, t_items + t_categories>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 typedef CollectionImpl<TCtrl, t_items, t_categories> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 typedef thisClass Collection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929 CollectionImpl() : m_size(t_items)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 ::FillMemory(m_auItemCat, sizeof(m_auItemCat), 0xff); // UI_COLLECTION_INVALIDINDEX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 UINT32 m_auItemCat[t_items];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 Text m_asCatName[__max(t_categories, 1)];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 size_t m_size;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 HRESULT SetItemCategory(UINT uItem, UINT uCat, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 ATLASSERT((uItem < t_items) && (uCat < t_categories));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 m_auItemCat[uItem] = uCat;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945 return bUpdate ? InvalidateItems() : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948 HRESULT SetCategoryText(UINT uCat, LPCWSTR sText, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950 ATLASSERT(uCat < t_categories);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 m_asCatName[uCat] = sText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 return bUpdate ? InvalidateCategories() : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 HRESULT Resize(size_t size, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 ATLASSERT(size <= t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 m_size = size;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963 return bUpdate ? InvalidateItems() : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967 HRESULT OnGetItem(UINT uIndex, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969 ATLASSERT(uIndex < t_items + t_categories);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 TCtrl* pCtrl = static_cast<TCtrl*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 return uIndex < t_items ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 pCtrl->DoGetItem(uIndex, key, value) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 pCtrl->DoGetCategory(uIndex - t_items, key, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 HRESULT DoGetItem(UINT uItem, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979 ATLASSERT(k_(key) == k_CategoryId);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980 UINT32 uCat = UI_COLLECTION_INVALIDINDEX;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982 if (t_categories != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984 if (m_auItemCat[uItem] == UI_COLLECTION_INVALIDINDEX)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987 m_auItemCat[uItem] = ribbon.OnRibbonQueryItemCategory(TCtrl::GetID(), uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989 uCat = m_auItemCat[uItem];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992 return SetPropertyVal(key, uCat, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995 HRESULT DoGetCategory(UINT uCat, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 HRESULT hr = S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001 case k_Label:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002 if (m_asCatName[uCat].IsEmpty())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005 m_asCatName[uCat] = ribbon.OnRibbonQueryCategoryText(TCtrl::GetID(), uCat);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007 hr = SetPropertyVal(key, (LPCWSTR)m_asCatName[uCat], value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 case k_CategoryId:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010 hr = SetPropertyVal(key, uCat, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020 HRESULT InvalidateItems()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 return static_cast<TCtrl*>(this)->Invalidate(UI_PKEY_ItemsSource);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025 HRESULT InvalidateCategories()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027 return static_cast<TCtrl*>(this)->Invalidate(UI_PKEY_Categories);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030 HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* /*ppropvarNewValue*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 ATLASSERT(nCmdID == TCtrl::GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 (void)nCmdID; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036 HRESULT hr = E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039 case k_ItemsSource:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 ATL::CComQIPtr<IUICollection> pIUICollection(ppropvarCurrentValue->punkVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042 ATLASSERT(pIUICollection);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 hr = pIUICollection->Clear();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 for (UINT i = 0; i < m_size; i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046 if FAILED(hr = pIUICollection->Add(this->m_apItems[i]))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049 ATLASSERT(SUCCEEDED(hr));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052 case k_Categories:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053 if (t_categories != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 ATL::CComQIPtr<IUICollection> pIUICategory(ppropvarCurrentValue->punkVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056 ATLASSERT(pIUICategory.p);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057 hr = pIUICategory->Clear();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058 for (UINT i = t_items; i < (t_items + t_categories); i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060 if FAILED(hr = pIUICategory->Add(this->m_apItems[i]))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063 ATLASSERT(SUCCEEDED(hr));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072 // TextCollectionImpl: handles item labels and selection
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 template <class TCtrl, size_t t_items, size_t t_categories = 0>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 class TextCollectionImpl : public CollectionImpl<TCtrl, t_items, t_categories>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077 typedef TextCollectionImpl<TCtrl, t_items, t_categories> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 typedef thisClass TextCollection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081 TextCollectionImpl() : m_uSelected(UI_COLLECTION_INVALIDINDEX)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 Text m_asText[t_items];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085 UINT m_uSelected;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088 HRESULT SetItemText(UINT uItem, LPCWSTR sText, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 ATLASSERT(uItem < t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092 m_asText[uItem] = sText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094 return bUpdate ? this->InvalidateItems() : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097 UINT GetSelected()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099 return m_uSelected;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102 HRESULT Select(UINT uItem, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1104 ATLASSERT((uItem < t_items) || (uItem == UI_COLLECTION_INVALIDINDEX));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1105
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1106 m_uSelected = uItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1107
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1108 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1109 return bUpdate ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1110 ribbon.SetProperty(TCtrl::GetID(), UI_PKEY_SelectedItem, uItem) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1111 S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1112 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1114 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1115 HRESULT DoGetItem(UINT uItem, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1116 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1117 ATLASSERT(uItem < t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1118
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1119 if (k_(key) == k_Label)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1120 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1121 if (m_asText[uItem].IsEmpty())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1122 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1123 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1124 m_asText[uItem] = ribbon.OnRibbonQueryItemText(TCtrl::GetID(), uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1125 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1126 return SetPropertyVal(key, (LPCWSTR)m_asText[uItem], value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1127 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1128 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1129 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1130 return CollectionImpl<TCtrl, t_items, t_categories>::Collection::DoGetItem(uItem, key, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1131 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1132 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1133
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1134 HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1135 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1136 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1137 ATLASSERT(nCmdID == TCtrl::GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1139 if (k_(key) == k_SelectedItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1140 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1141 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1142 UINT uSel = UI_COLLECTION_INVALIDINDEX;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1143 if ((m_uSelected == UI_COLLECTION_INVALIDINDEX) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1144 ribbon.OnRibbonQuerySelectedItem(TCtrl::GetID(), uSel))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1145 m_uSelected = uSel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1146
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1147 return SetPropertyVal(key, m_uSelected, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1148 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1149 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1150 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1151 return CollectionImpl<TCtrl, t_items, t_categories>::Collection::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1152 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1153 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1154 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1156 // ItemCollectionImpl: handles item image
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1157 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1158 template <class TCtrl, size_t t_items, size_t t_categories = 0>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1159 class ItemCollectionImpl : public TextCollectionImpl<TCtrl, t_items, t_categories>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1160 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1161 typedef ItemCollectionImpl<TCtrl, t_items, t_categories> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1162 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1163 typedef thisClass ItemCollection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1164
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1165 ItemCollectionImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1166 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1167 ::ZeroMemory(m_aBitmap, sizeof(m_aBitmap));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1168 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1169
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1170 CBitmap m_aBitmap[t_items];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1171
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1172 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1173 HRESULT SetItemImage(UINT uIndex, HBITMAP hbm, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1174 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1175 ATLASSERT(uIndex < t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1176
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1177 m_aBitmap[uIndex] = hbm;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1178
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1179 return bUpdate ? this->InvalidateItems() : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1180 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1181
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1182 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1183 HRESULT DoGetItem(UINT uItem, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1184 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1185 ATLASSERT(uItem < t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1187 if (k_(key) == k_ItemImage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1188 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1189 if (m_aBitmap[uItem].IsNull())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1190 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1191 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1192 m_aBitmap[uItem] = ribbon.OnRibbonQueryItemImage(TCtrl::GetID(), uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1193 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1194 return m_aBitmap[uItem].IsNull() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1195 E_NOTIMPL :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1196 SetPropertyVal(key, GetImage(m_aBitmap[uItem], UI_OWNERSHIP_COPY), value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1197 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1198 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1199 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1200 return TextCollectionImpl<TCtrl, t_items, t_categories>::TextCollection::DoGetItem(uItem, key, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1201 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1202 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1203 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1205 // ComboCollectionImpl: handles combo text
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1206 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1207 template <class TCtrl, size_t t_items, size_t t_categories = 0>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1208 class ComboCollectionImpl : public ItemCollectionImpl<TCtrl, t_items, t_categories>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1209 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1210 typedef ComboCollectionImpl<TCtrl, t_items, t_categories> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1211 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1212 typedef thisClass ComboCollection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1213
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1214 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1215 HRESULT SetComboText(LPCWSTR sText)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1216 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1217 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1218 return ribbon.IsRibbonUI() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1219 ribbon.SetProperty(TCtrl::GetID(), UI_PKEY_StringValue, sText) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1220 S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1221 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1222
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1223 LPCWSTR GetComboText()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1224 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1225 static WCHAR sCombo[RIBBONUI_MAX_TEXT] = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1226 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1227 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1228 if (ribbon.IsRibbonUI())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1229 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1230 HRESULT hr = ribbon.GetIUIFrameworkPtr()->GetUICommandProperty(TCtrl::GetID(), UI_PKEY_StringValue, &var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1231 hr = PropVariantToString(var, sCombo, RIBBONUI_MAX_TEXT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1232 return sCombo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1233 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1234 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1235 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1236 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1237
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1238 // CommandCollectionImpl: handles RibbonUI command collection controls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1239 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1240 template <class TCtrl, size_t t_items, size_t t_categories = 0>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1241 class CommandCollectionImpl : public CollectionImpl<TCtrl, t_items, t_categories>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1242 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1243 typedef CommandCollectionImpl<TCtrl, t_items, t_categories> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1244 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1245 typedef thisClass CommandCollection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1246
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1247 CommandCollectionImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1248 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1249 ::ZeroMemory(m_auCmd, sizeof(m_auCmd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1250 ::ZeroMemory(m_aCmdType, sizeof(m_aCmdType));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1251 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1252
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1253 UINT32 m_auCmd[t_items];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1254 BYTE m_aCmdType[t_items];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1255
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1256 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1257 HRESULT SetItemCommand(UINT uItem, UINT32 uCommandID, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1258 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1259 ATLASSERT(uItem < t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1260
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1261 if (uCommandID == m_auCmd[uItem])
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1262 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1263
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1264 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1265
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1266 m_auCmd[uItem] = uCommandID;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1267 if (uCommandID != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1268 ribbon.UIAddRibbonElement(uCommandID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1269
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1270 return bUpdate ? this->InvalidateItems() : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1271 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1272
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1273 HRESULT SetItemCommandType(UINT uItem, UI_COMMANDTYPE type, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1274 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1275 ATLASSERT(uItem < t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1276
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1277 m_aCmdType[uItem] = (BYTE)type;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1279 return bUpdate ? this->InvalidateItems() : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1280 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1281
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1282 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1283 HRESULT DoGetItem(UINT uItem, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1284 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1285 ATLASSERT(uItem < t_items);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1286 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1287
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1288 HRESULT hr = E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1289 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1290 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1291 case k_CommandId:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1292 if (m_auCmd[uItem] == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1293 SetItemCommand(uItem, ribbon.OnRibbonQueryItemCommand(TCtrl::GetID(), uItem));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1294 hr = SetPropertyVal(key, m_auCmd[uItem], value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1295 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1296 case k_CommandType:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1297 if (m_aCmdType[uItem] == UI_COMMANDTYPE_UNKNOWN)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1298 SetItemCommandType(uItem, ribbon.OnRibbonQueryItemCommandType(TCtrl::GetID(), uItem));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1299 hr = SetPropertyVal(key, UINT32(m_aCmdType[uItem]), value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1300 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1301 case k_CategoryId:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1302 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1303 hr = CollectionImpl<TCtrl, t_items, t_categories>::Collection::DoGetItem(uItem, key, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1304 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1305 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1306
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1307 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1308 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1309
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1310 HRESULT Select(UINT /*uItem*/, bool /*bUpdate*/ = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1311 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1312 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1313 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1314 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1315 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1316
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1317 // SimpleCollectionImpl: collection class for ribbon simple collection controls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1318 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1319 template <class TCtrl, size_t t_size, UI_COMMANDTYPE t_CommandType = UI_COMMANDTYPE_ACTION>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1320 class SimpleCollectionImpl : public CollectionImplBase<SimpleCollectionImpl<TCtrl, t_size>, t_size>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1321 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1322 typedef SimpleCollectionImpl<TCtrl, t_size, t_CommandType> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1323 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1324 typedef CollectionImplBase<thisClass, t_size> CollectionBase;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1325 typedef thisClass SimpleCollection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1326
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1327 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1328 HRESULT OnGetItem(UINT uItem, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1329 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1330 ATLASSERT(uItem < t_size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1331 typename TCtrl::WndRibbon& ribbon = static_cast<TCtrl*>(this)->GetWndRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1332
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1333 HRESULT hr = E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1334 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1335 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1336 case k_ItemImage:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1337 if (HBITMAP hbm = ribbon.DefRibbonQueryItemImage(TCtrl::GetID(), uItem))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1338 hr = SetPropertyVal(key, GetImage(hbm, UI_OWNERSHIP_TRANSFER), value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1339 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1340 case k_Label:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1341 if (LPCWSTR sText = ribbon.DefRibbonQueryItemText(TCtrl::GetID(), uItem))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1342 hr = SetPropertyVal(key, (LPCWSTR)sText, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1343 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1344 case k_CommandType:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1345 hr = SetPropertyVal(key, t_CommandType, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1346 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1347 case k_CommandId:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1348 hr = SetPropertyVal(key, ribbon.DefRibbonQueryItemCommand(TCtrl::GetID(), uItem), value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1349 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1350 case k_CategoryId:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1351 hr = SetPropertyVal(key, UI_COLLECTION_INVALIDINDEX, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1352 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1353 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1354 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1355 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1356 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1357
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1358 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1359 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1360 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1361
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1362
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1363 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1364 // Ribbon collection control classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1365
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1366 // CollectionCtrlImpl: specializable class for ribbon collection controls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1367 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1368 template <class T, UINT t_ID, class TCollection>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1369 class CollectionCtrlImpl : public CommandCtrlImpl<T, t_ID>, public TCollection
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1370 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1371 typedef CollectionCtrlImpl<T, t_ID, TCollection> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1372 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1373 typedef CommandCtrlImpl<T, t_ID> CommandCtrl;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1374 typedef TCollection Collection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1375
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1376 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1377 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1378 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1379 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1380 ATLASSERT(nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1381 ATLASSERT(ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1382
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1383 HRESULT hr = Collection::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1384 if FAILED(hr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1385 hr = CommandCtrl::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1386
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1387 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1388 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1389
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1390 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1391 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1392 IUISimplePropertySet* /*pCommandExecutionProperties*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1393 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1394 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1395 (void)nCmdID; // avoid level4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1396
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1397 if (key == NULL) // gallery button pressed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1398 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1399 this->GetWndRibbon().OnRibbonItemSelected(this->GetID(), UI_EXECUTIONVERB_EXECUTE, UI_COLLECTION_INVALIDINDEX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1400 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1401 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1402
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1403 ATLASSERT(k_(*key) == k_SelectedItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1404 ATLASSERT(ppropvarValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1405
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1406 HRESULT hr = S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1407 UINT32 uSel = 0xffff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1408 hr = UIPropertyToUInt32(*key, *ppropvarValue, &uSel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1409
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1410 if (SUCCEEDED(hr))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1411 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1412 if (this->GetWndRibbon().OnRibbonItemSelected(this->GetID(), verb, uSel))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1413 TCollection::Select(uSel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1414 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1415
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1416 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1417 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1418 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1419
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1420 // ToolbarGalleryCtrlImpl: base class for ribbon toolbar gallery controls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1421 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1422 template <class T, UINT t_ID, UINT t_idTB, size_t t_size>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1423 class ToolbarGalleryCtrlImpl : public CollectionCtrlImpl<T, t_ID, CommandCollectionImpl<ToolbarGalleryCtrlImpl<T, t_ID, t_idTB, t_size>, t_size>>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1424 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1425 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1426 ToolbarGalleryCtrlImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1427 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1428 CResource tbres;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1429 ATLVERIFY(tbres.Load(RT_TOOLBAR, t_idTB));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1430 _AtlToolBarData* pData = (_AtlToolBarData*)tbres.Lock();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1431 ATLASSERT(pData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1432 ATLASSERT(pData->wVersion == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1433
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1434 WORD* pItems = pData->items();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1435 INT j = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1436 for (int i = 0; (i < pData->wItemCount) && (j < t_size); i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1437 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1438 if (pItems[i] != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1439 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1440 this->m_aCmdType[j] = UI_COMMANDTYPE_ACTION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1441 this->m_auCmd[j++] = pItems[i];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1442 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1443 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1444
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1445 if (j < t_size)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1446 this->Resize(j);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1447 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1448
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1449 HRESULT DoGetItem(UINT uItem, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1450 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1451 ATLASSERT(uItem < this->m_size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1452 ATLASSERT(this->m_auCmd[uItem]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1453
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1454 HRESULT hr = E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1455 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1456 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1457 case k_CommandId:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1458 hr = SetPropertyVal(key, this->m_auCmd[uItem], value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1459 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1460 case k_CommandType:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1461 hr = SetPropertyVal(key, UINT32(this->m_aCmdType[uItem]), value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1462 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1463 case k_CategoryId:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1464 hr = SetPropertyVal(key, UI_COLLECTION_INVALIDINDEX, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1465 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1466 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1467 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1468 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1469 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1470
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1471 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1472 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1473 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1474
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1475
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1476 // SimpleCollectionCtrlImpl: base class for simple gallery and listbox controls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1477 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1478 template <class T, UINT t_ID, size_t t_size, UI_COMMANDTYPE t_CommandType = UI_COMMANDTYPE_ACTION>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1479 class SimpleCollectionCtrlImpl :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1480 public CommandCtrlImpl<T, t_ID>,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1481 public SimpleCollectionImpl<SimpleCollectionCtrlImpl<T, t_ID, t_size, t_CommandType>, t_size, t_CommandType>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1482 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1483 typedef SimpleCollectionCtrlImpl<T, t_ID, t_size, t_CommandType> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1484 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1485 typedef thisClass SimpleCollection;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1486
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1487 SimpleCollectionCtrlImpl() : m_uSelected(0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1488 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1489
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1490 UINT m_uSelected;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1491
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1492 HRESULT Select(UINT uItem, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1493 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1494 ATLASSERT((uItem < t_size) || (uItem == UI_COLLECTION_INVALIDINDEX));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1495
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1496 m_uSelected = uItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1497
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1498 return bUpdate ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1499 this->GetWndRibbon().SetProperty(this->GetID(), UI_PKEY_SelectedItem, uItem) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1500 S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1501 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1502
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1503 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1504 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1505 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1506 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1507 ATLASSERT(nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1508 ATLASSERT(ppropvarNewValue != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1509
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1510 HRESULT hr = S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1511 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1512 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1513 case k_ItemsSource:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1514 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1515 ATL::CComQIPtr<IUICollection> pIUICollection(ppropvarCurrentValue->punkVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1516 ATLASSERT(pIUICollection.p);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1517 hr = pIUICollection->Clear();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1518 for (UINT i = 0; i < t_size; i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1519 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1520 if FAILED(hr = pIUICollection->Add(this->m_apItems[i]))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1521 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1522 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1523 ATLASSERT(SUCCEEDED(hr));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1524 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1525 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1526 case k_SelectedItem:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1527 hr = SetPropertyVal(UI_PKEY_SelectedItem, m_uSelected, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1528 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1529 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1530 hr = CommandCtrlImpl<T, t_ID>::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1531 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1532 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1533
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1534 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1535 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1536
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1537 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1538 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1539 IUISimplePropertySet* /*pCommandExecutionProperties*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1540 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1541 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1542 (void)nCmdID; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1543
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1544 HRESULT hr = S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1545 if (key == NULL) // gallery button pressed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1546 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1547 this->GetWndRibbon().OnRibbonItemSelected(this->GetID(), UI_EXECUTIONVERB_EXECUTE, UI_COLLECTION_INVALIDINDEX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1548 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1549 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1550 ATLASSERT(k_(*key) == k_SelectedItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1551 ATLASSERT(ppropvarValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1552
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1553 if SUCCEEDED(hr = UIPropertyToUInt32(*key, *ppropvarValue, &m_uSelected))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1554 this->GetWndRibbon().OnRibbonItemSelected(this->GetID(), verb, m_uSelected);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1555
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1556 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1557 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1558 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1559
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1560 // RecentItemsCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1561 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1562 template <class T, UINT t_ID, class TDocList = CRecentDocumentList>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1563 class RecentItemsCtrlImpl :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1564 public CtrlImpl<T, t_ID>,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1565 public CollectionImplBase<RecentItemsCtrlImpl<T, t_ID, TDocList>, TDocList::m_nMaxEntries_Max>,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1566 public TDocList
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1567 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1568 typedef RecentItemsCtrlImpl<T, t_ID, TDocList> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1569 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1570 typedef thisClass RecentItems;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1571
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1572 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1573 HRESULT OnGetItem(UINT uItem, REFPROPERTYKEY key, PROPVARIANT *value)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1574 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1575 ATLASSERT((INT)uItem < this->GetMaxEntries());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1576
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1577 LPCWSTR sPath = this->m_arrDocs[uItem].szDocName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1578 HRESULT hr = E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1579 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1580 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1581 case k_Label:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1582 hr = SetPropertyVal(key, this->GetWndRibbon().OnRibbonQueryRecentItemName(sPath), value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1583 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1584 case k_LabelDescription:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1585 hr = SetPropertyVal(key, sPath, value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1586 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1587 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1588 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1589 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1590 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1591
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1592 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1593 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1594
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1595 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1596 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1597 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1598 ATLASSERT(nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1599 ATLASSERT(ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1600
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1601 HRESULT hr = S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1602 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1603 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1604 case k_RecentItems:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1605 if (SAFEARRAY* psa = SafeArrayCreateVector(VT_UNKNOWN, 0, this->m_arrDocs.GetSize()))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1606 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1607 const int iLastIndex = this->m_arrDocs.GetSize() - 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1608 for (LONG i = 0; i <= iLastIndex; i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1609 SafeArrayPutElement(psa, &i, this->m_apItems[iLastIndex - i]); // reverse order
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1610
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1611 hr = SetPropertyVal(key, psa, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1612 SafeArrayDestroy(psa);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1613 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1614 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1615 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1616 hr = CtrlImpl<T, t_ID>::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1617 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1618 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1619
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1620 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1621 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1622
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1623 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1624 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1625 IUISimplePropertySet* /*pCommandExecutionProperties*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1626 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1627 ATLASSERT(nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1628 (void)nCmdID; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1629 ATLASSERT(verb == UI_EXECUTIONVERB_EXECUTE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1630 (void)verb; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1631 ATLASSERT((key) && (k_(*key) == k_SelectedItem));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1632 ATLASSERT(ppropvarValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1633
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1634 UINT32 uSel = 0xffff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1635 HRESULT hr = UIPropertyToUInt32(*key, *ppropvarValue, &uSel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1636 if SUCCEEDED(hr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1637 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1638 ATLASSERT(uSel < (UINT)this->GetMaxEntries());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1639 this->GetWndRibbon().DefCommandExecute(ID_FILE_MRU_FIRST + uSel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1640 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1641
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1642 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1643 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1644 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1645
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1646
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1647 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1648 // Ribbon stand-alone control classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1649
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1650 // FontCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1651 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1652 template <class T, UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1653 class FontCtrlImpl : public CtrlImpl<T, t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1654 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1655 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1656
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1657 CharFormat m_cf;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1658
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1659 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1660 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1661 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1662 IUISimplePropertySet* pCommandExecutionProperties)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1663 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1664 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1665 (void)nCmdID; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1666 ATLASSERT ((key) && (k_(*key) == k_FontProperties));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1667 (void)key; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1668
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1669 HRESULT hr = E_INVALIDARG;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1670 switch (verb)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1671 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1672 case UI_EXECUTIONVERB_PREVIEW:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1673 case UI_EXECUTIONVERB_EXECUTE:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1674 ATLASSERT(pCommandExecutionProperties);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1675 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1676
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1677 if (SUCCEEDED(hr = pCommandExecutionProperties->GetValue(UI_PKEY_FontProperties_ChangedProperties, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1678 m_cf << ATL::CComQIPtr<IPropertyStore>(propvar.punkVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1679 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1680
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1681 case UI_EXECUTIONVERB_CANCELPREVIEW:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1682 ATLASSERT(ppropvarValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1683 ATL::CComPtr<IPropertyStore> pStore;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1684
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1685 if (SUCCEEDED(hr = UIPropertyToInterface(UI_PKEY_FontProperties, *ppropvarValue, &pStore)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1686 m_cf << pStore;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1687 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1688 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1689
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1690 if (SUCCEEDED(hr))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1691 this->GetWndRibbon().OnRibbonFontCtrlExecute(this->GetID(), verb, &m_cf);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1692 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1693 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1694
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1695 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1696 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1697
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1698 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1699 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1700 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1701 if ((k_(key) == k_FontProperties) && (this->GetWndRibbon().OnRibbonQueryFont(t_ID, m_cf)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1702 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1703 ATL::CComQIPtr<IPropertyStore> pStore(ppropvarCurrentValue->punkVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1704 m_cf >> pStore;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1705 return SetPropertyVal(key, pStore.p, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1706 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1707 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1708 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1709 return CtrlImpl<T, t_ID>::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1710 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1711 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1712 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1713
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1714 // ColorCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1715 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1716 template <class T, UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1717 class ColorCtrlImpl : public CommandCtrlImpl<T, t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1718 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1719 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1720 ColorCtrlImpl() : m_colorType(UI_SWATCHCOLORTYPE_NOCOLOR), m_color(0x800080) /*MAGENTA*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1721 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1722
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1723 UINT32 m_colorType; // value in UI_SWATCHCOLORTYPE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1724 COLORREF m_color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1725 Text m_sLabels[6]; // k_MoreColorsLabel to k_ThemeColorsCategoryLabel
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1726 ATL::CSimpleArray<COLORREF> m_aColors[2];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1727 ATL::CSimpleArray<LPCWSTR> m_aTooltips[2];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1728
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1729 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1730 HRESULT SetColor(COLORREF color, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1731 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1732 if (m_colorType != UI_SWATCHCOLORTYPE_RGB)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1733 SetColorType(UI_SWATCHCOLORTYPE_RGB, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1734 m_color = color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1735 return bUpdate ? this->SetProperty(UI_PKEY_Color, color) : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1736 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1737
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1738 HRESULT SetColorType(UI_SWATCHCOLORTYPE type, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1739 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1740 m_colorType = type;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1741 return bUpdate ? this->SetProperty(UI_PKEY_ColorType, type) : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1742 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1743
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1744 HRESULT SetColorLabel(REFPROPERTYKEY key, LPCWSTR sLabel, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1745 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1746 ATLASSERT((k_(key) >= k_ThemeColorsCategoryLabel) && (k_(key) <= k_MoreColorsLabel));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1747 m_sLabels[k_(key) - k_ThemeColorsCategoryLabel] = sLabel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1748 return bUpdate ? this->SetProperty(key, sLabel) : S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1749 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1750
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1751 HRESULT SetColorArray(REFPROPERTYKEY key, COLORREF* pColor, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1752 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1753 ATLASSERT((k_(key) == k_ThemeColors) || (k_(key) == k_StandardColors));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1754
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1755 const INT ic = k_(key) - k_ThemeColors;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1756 m_aColors[ic].RemoveAll();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1757 while (*pColor != 0x800080) /*MAGENTA*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1758 m_aColors[ic].Add(*pColor++);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1759
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1760 if (bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1761 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1762 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1763 if SUCCEEDED(InitPropVariantFromUInt32Vector(m_aColors[ic].GetData(), m_aColors[ic].GetSize(), &var))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1764 return this->SetProperty(key, var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1765 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1766 return E_INVALIDARG;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1767 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1768 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1769 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1770 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1771 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1772 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1773
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1774 HRESULT SetColorTooltips(REFPROPERTYKEY key, LPCWSTR* ppsTT, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1775 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1776 ATLASSERT((k_(key) == k_ThemeColorsTooltips) || (k_(key) == k_StandardColorsTooltips));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1777
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1778 const INT ic = k_(key) - k_ThemeColorsTooltips;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1779 m_aTooltips[ic].RemoveAll();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1780 while (*ppsTT)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1781 m_aTooltips[ic].Add(*ppsTT++);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1782
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1783 if (bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1784 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1785 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1786 if SUCCEEDED(InitPropVariantFromStringVector(m_aTooltips[ic].GetData(), m_aTooltips[ic].GetSize(), &var))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1787 return this->SetProperty(key, var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1788 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1789 return E_INVALIDARG;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1790 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1791 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1792 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1793 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1794 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1795 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1796
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1797 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1798 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1799 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1800 IUISimplePropertySet* pCommandExecutionProperties)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1801 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1802 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1803 (void)nCmdID; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1804 ATLASSERT (key && (k_(*key) == k_ColorType));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1805 (void)key; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1806 ATLASSERT (ppropvarValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1807
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1808 HRESULT hr = PropVariantToUInt32(*ppropvarValue, &m_colorType);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1809 ATLASSERT(SUCCEEDED(hr));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1810
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1811 if (SUCCEEDED(hr) && (m_colorType == UI_SWATCHCOLORTYPE_RGB))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1812 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1813 ATLASSERT(pCommandExecutionProperties);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1814 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1815 if SUCCEEDED(hr = pCommandExecutionProperties->GetValue(UI_PKEY_Color, &var))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1816 hr = PropVariantToUInt32(var, &m_color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1817 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1818
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1819 if SUCCEEDED(hr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1820 this->GetWndRibbon().OnRibbonColorCtrlExecute(this->GetID(), verb, (UI_SWATCHCOLORTYPE)m_colorType/*uType*/, m_color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1821 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1822 ATLASSERT(FALSE); // something was wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1823
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1824 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1825 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1826
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1827 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1828 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1829 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1830 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1831
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1832 HRESULT hr = E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1833
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1834 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1835 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1836 case k_ColorType:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1837 hr = SetPropertyVal(key, m_colorType, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1838 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1839 case k_Color:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1840 if (m_color == 0x800080) /*MAGENTA*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1841 m_color = this->GetWndRibbon().OnRibbonQueryColor(this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1842 hr = SetPropertyVal(key, m_color, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1843 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1844 case k_ColorMode:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1845 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1846 case k_ThemeColorsCategoryLabel:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1847 case k_StandardColorsCategoryLabel:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1848 case k_RecentColorsCategoryLabel:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1849 case k_AutomaticColorLabel:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1850 case k_NoColorLabel:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1851 case k_MoreColorsLabel:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1852 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1853 const UINT iLabel = k_(key) - k_ThemeColorsCategoryLabel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1854 if (m_sLabels[iLabel].IsEmpty())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1855 if (LPCWSTR psLabel = this->GetWndRibbon().OnRibbonQueryColorLabel(this->GetID(), key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1856 m_sLabels[iLabel] = psLabel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1857 if (!m_sLabels[iLabel].IsEmpty())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1858 hr = SetPropertyVal(key, (LPCWSTR)m_sLabels[iLabel], ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1859 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1860 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1861 case k_ThemeColors:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1862 case k_StandardColors:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1863 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1864 const INT ic = k_(key) - k_ThemeColors;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1865 if (!m_aColors[ic].GetSize())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1866 if (COLORREF* pColor = this->GetWndRibbon().OnRibbonQueryColorArray(this->GetID(), key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1867 SetColorArray(key, pColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1868 if (INT iMax = m_aColors[ic].GetSize())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1869 hr = InitPropVariantFromUInt32Vector(m_aColors[ic].GetData(), iMax, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1870 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1871 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1872 case k_ThemeColorsTooltips:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1873 case k_StandardColorsTooltips:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1874 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1875 const INT ic = k_(key) - k_ThemeColorsTooltips;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1876 if (m_aTooltips[ic].GetSize() == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1877 if (LPCWSTR* ppsTT = this->GetWndRibbon().OnRibbonQueryColorTooltips(this->GetID(), key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1878 SetColorTooltips(key, ppsTT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1879 if (INT iMax = m_aTooltips[ic].GetSize())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1880 hr = InitPropVariantFromStringVector(m_aTooltips[ic].GetData(), iMax, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1881 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1882 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1883 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1884 hr = CommandCtrlImpl<T, t_ID>::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1885 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1886 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1887
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1888 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1889 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1890 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1891
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1892 // SpinnerCtrlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1893 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1894 template <class T, UINT t_ID, typename V = LONG>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1895 class SpinnerCtrlImpl : public CtrlImpl<T, t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1896 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1897 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1898 SpinnerCtrlImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1899 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1900 m_Values[0] = m_Values[2] = m_Values[4] = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1901 m_Values[1] = 100;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1902 m_Values[3] = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1903 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1904
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1905 V m_Values[5];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1906 // k_DecimalValue = 201, k_MaxValue = 203, k_MinValue, k_Increment, k_DecimalPlaces
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1907
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1908 Text m_FormatString;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1909 Text m_RepresentativeString;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1910
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1911 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1912 HRESULT SetDecimalPlaces(V vPlaces, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1913 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1914 return SetValue(UI_PKEY_DecimalPlaces, vPlaces, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1915 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1916
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1917 HRESULT SetMin(V vMin, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1918 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1919 return SetValue(UI_PKEY_MinValue, vMin, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1920 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1921
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1922 HRESULT SetMax(V vMax, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1923 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1924 return SetValue(UI_PKEY_MaxValue, vMax, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1925 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1926
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1927 HRESULT SetVal(V vVal, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1928 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1929 return SetValue(UI_PKEY_DecimalValue, vVal, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1930 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1931
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1932 HRESULT SetIncrement(V vIncrement, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1933 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1934 return SetValue(UI_PKEY_Increment, vIncrement, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1935 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1936
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1937 HRESULT SetFormatString(LPCWSTR sFormat, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1938 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1939 return SetText(UI_PKEY_FormatString, sFormat, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1940 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1941
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1942 HRESULT SetRepresentativeString(LPCWSTR sRepresentative, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1943 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1944 return SetText(UI_PKEY_RepresentativeString, sRepresentative, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1945 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1946
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1947 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1948 HRESULT SetText(REFPROPERTYKEY key, LPCWSTR sText, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1949 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1950 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1951 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1952 case k_FormatString:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1953 m_FormatString = sText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1954 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1955 case k_RepresentativeString:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1956 m_RepresentativeString = sText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1957 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1958 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1959 return CtrlImpl::SetText(key, sText, bUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1960 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1961
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1962 return bUpdate ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1963 this->GetWndRibbon().InvalidateProperty(this->GetID(), key) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1964 S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1965 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1966
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1967 HRESULT SetValue(REFPROPERTYKEY key, V val, bool bUpdate = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1968 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1969 ATLASSERT((k_(key) <= k_DecimalPlaces) && (k_(key) >= k_DecimalValue));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1970
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1971 const INT iVal = k_(key) == k_DecimalValue ? 0 : k_(key) - k_StringValue;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1972 m_Values[iVal] = val;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1973
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1974 if (bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1975 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1976 if(k_(key) == k_DecimalValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1977 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1978 DECIMAL decVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1979 InitDecimal(val, &decVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1980 return this->SetProperty(key, &decVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1981 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1982 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1983 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1984 return this->GetWndRibbon().InvalidateProperty(this->GetID(), key);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1985 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1986 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1987 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1988 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1989 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1990 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1991 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1992
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1993 HRESULT QueryValue(REFPROPERTYKEY key, LONG* plVal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1994 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1995 return this->GetWndRibbon().OnRibbonQuerySpinnerValue(this->GetID(), key, plVal) ? S_OK : S_FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1996 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1997
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1998 HRESULT QueryValue(REFPROPERTYKEY key, DOUBLE* pdVal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1999 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2000 return this->GetWndRibbon().OnRibbonQueryFloatSpinnerValue(this->GetID(), key, pdVal) ? S_OK : S_FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2001 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2002
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2003 HRESULT OnGetValue(REFPROPERTYKEY key, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2004 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2005 ATLASSERT((k_(key) <= k_DecimalPlaces) && (k_(key) >= k_DecimalValue));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2006
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2007 const INT iVal = k_(key) == k_DecimalValue ? 0 : k_(key) - k_StringValue;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2008
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2009 QueryValue(key, m_Values + iVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2010
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2011 if (k_(key) == k_DecimalPlaces)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2012 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2013 return SetPropertyVal(key, m_Values[iVal], ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2014 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2015 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2016 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2017 DECIMAL decVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2018 InitDecimal(m_Values[iVal], &decVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2019 return SetPropertyVal(key, &decVal, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2020 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2021 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2022
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2023 HRESULT OnGetText(REFPROPERTYKEY key, Text& sVal, PROPVARIANT* ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2024 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2025 if (LPCWSTR sNew = this->GetWndRibbon().OnRibbonQueryText(this->GetID(), key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2026 sVal = sNew;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2027 return SetPropertyVal(key, (LPCWSTR)sVal, ppv);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2028 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2029
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2030 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2031 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2032 IUISimplePropertySet* /*pCommandExecutionProperties*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2033 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2034 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2035 (void)nCmdID; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2036 ATLASSERT (key && (k_(*key) == k_DecimalValue));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2037 (void)key; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2038 ATLASSERT (verb == UI_EXECUTIONVERB_EXECUTE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2039 (void)verb; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2040
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2041 DECIMAL decVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2042
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2043 HRESULT hr = UIPropertyToDecimal(UI_PKEY_DecimalValue, *ppropvarValue, &decVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2044 hr = InitVal(m_Values[0], &decVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2045
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2046 this->GetWndRibbon().OnRibbonSpinnerCtrlExecute(this->GetID(), &m_Values[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2047
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2048 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2049 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2050
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2051 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2052 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2053 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2054 ATLASSERT (nCmdID == this->GetID());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2055
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2056 HRESULT hr = E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2057 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2058 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2059 case k_DecimalPlaces:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2060 case k_DecimalValue:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2061 case k_Increment:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2062 case k_MaxValue:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2063 case k_MinValue:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2064 hr = OnGetValue(key, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2065 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2066 case k_FormatString:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2067 if (m_FormatString.IsEmpty())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2068 return OnGetText(key, m_FormatString, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2069 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2070 case k_RepresentativeString:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2071 if (m_RepresentativeString.IsEmpty())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2072 return OnGetText(key, m_RepresentativeString, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2073 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2074 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2075 hr = CtrlImpl<T, t_ID>::DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2076 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2077 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2078
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2079 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2080 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2081
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2082 // decimal conversion helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2083 static HRESULT InitDecimal(LONG& val, DECIMAL* pDecimal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2084 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2085 return ::VarDecFromI4(val, pDecimal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2086 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2087
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2088 static HRESULT InitDecimal(DOUBLE& val, DECIMAL* pDecimal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2089 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2090 return ::VarDecFromR8(val, pDecimal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2091 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2092
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2093 static HRESULT InitVal(LONG& val, const DECIMAL* pDecimal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2094 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2095 return ::VarI4FromDec(pDecimal, &val);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2096 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2097
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2098 static HRESULT InitVal(DOUBLE& val, const DECIMAL* pDecimal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2099 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2100 return ::VarR8FromDec(pDecimal, &val);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2101 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2102 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2103
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2104 // CRibbonImpl Ribbon implementation class
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2105 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2106 template <class T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2107 class CRibbonImpl :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2108 public CRibbonUpdateUI<T>,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2109 public ICtrl,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2110 public IUIApplication,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2111 public IUICommandHandler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2112 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2113 typedef CRibbonImpl<T> thisClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2114 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2115 typedef thisClass Ribbon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2116 typedef T WndRibbon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2117
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2118 CRibbonImpl() : m_bRibbonUI(false), m_hgRibbonSettings(NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2119 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2120 #ifdef _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2121 m_cRef = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2122 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2123 pWndRibbon = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2124 HRESULT hr = ::CoInitialize(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2125 if(SUCCEEDED(hr))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2126 if (RunTimeHelper::IsRibbonUIAvailable())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2127 hr = m_pIUIFramework.CoCreateInstance(CLSID_UIRibbonFramework);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2128 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2129 ATLTRACE2(atlTraceUI, 0, _T("Ribbon UI not available\n"));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2130
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2131 if FAILED(hr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2132 ATLTRACE2(atlTraceUI, 0, _T("Ribbon construction failed\n"));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2133
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2134 ATLASSERT(SUCCEEDED(hr));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2135 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2137 virtual ~CRibbonImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2138 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2139 ::GlobalFree(m_hgRibbonSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2140 m_pIUIFramework.Release();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2141 ::CoUninitialize();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2142 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2143
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2144 ICtrl& GetRibbonCtrl(UINT)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2145 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2146 return static_cast<ICtrl&>(*this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2147 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2148
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2149 ATL::CComPtr<IUIFramework> m_pIUIFramework;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2150 bool m_bRibbonUI;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2151 HGLOBAL m_hgRibbonSettings;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2152
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2153 bool IsRibbonUI()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2154 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2155 return m_bRibbonUI;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2156 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2157
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2158 IUIFramework* GetIUIFrameworkPtr()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2159 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2160 return m_pIUIFramework;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2161 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2162
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2163 template <typename I>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2164 I* GetRibbonViewPtr(UINT32 uID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2165 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2166 ATLASSERT(m_pIUIFramework);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2167 ATL::CComPtr<I> pI;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2168 return m_pIUIFramework->GetView(uID, __uuidof(I), (void**) &pI) == S_OK ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2169 pI :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2170 NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2171 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2172
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2173 IUIRibbon* GetRibbonPtr()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2174 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2175 return GetRibbonViewPtr<IUIRibbon>(0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2176 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2177
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2178 IUIContextualUI* GetMenuPtr(UINT32 uID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2179 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2180 ATLASSERT(uID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2181 return GetRibbonViewPtr<IUIContextualUI>(uID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2182 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2183
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2184 UINT GetRibbonHeight()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2185 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2186 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2187
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2188 UINT32 cy = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2189 if (ATL::CComPtr<IUIRibbon> pIUIRibbon = GetRibbonPtr())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2190 pIUIRibbon->GetHeight(&cy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2191 return cy;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2192 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2193
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2194 HRESULT CreateRibbon(LPCWSTR sResName = L"APPLICATION_RIBBON")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2195 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2196 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2197 ATLASSERT(GetIUIFrameworkPtr() && !IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2198 ATLASSERT(pT->IsWindow());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2199
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2200 HRESULT hr = m_pIUIFramework->Initialize(pT->m_hWnd, this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2202 if (hr == S_OK)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2203 hr = m_pIUIFramework->LoadUI(ModuleHelper::GetResourceInstance(), sResName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2205 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2208 HRESULT DestroyRibbon()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2209 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2210 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2211 ATLASSERT(GetIUIFrameworkPtr() && IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2212 ATLASSERT(pT->IsWindow());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2213
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2214 HRESULT hRes = m_pIUIFramework->Destroy();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2215 if (!RunTimeHelper::IsWin7())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2216 pT->SetWindowRgn(NULL, TRUE); // Vista Basic bug workaround
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2217 return hRes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2218 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2219
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2220 // Ribbon persistency
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2221 HRESULT operator >>(IStream* pIStream)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2222 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2223 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2224 ATLASSERT(pIStream);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2225
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2226 HRESULT hr = E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2227 if (ATL::CComPtr<IUIRibbon> pIUIRibbon = GetRibbonPtr())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2228 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2229 const LARGE_INTEGER li0 = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2230 pIStream->Seek(li0, STREAM_SEEK_SET, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2231 hr = pIUIRibbon->SaveSettingsToStream(pIStream);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2232 pIStream->Commit(STGC_DEFAULT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2233 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2234
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2235 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2236 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2237
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2238 HRESULT operator <<(IStream* pIStream)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2239 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2240 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2241 ATLASSERT(pIStream);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2242
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2243 HRESULT hr = E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2244 if (ATL::CComPtr<IUIRibbon> pIUIRibbon = GetRibbonPtr())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2245 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2246 const LARGE_INTEGER li0 = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2247 pIStream->Seek(li0, STREAM_SEEK_SET, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2248 hr = pIUIRibbon->LoadSettingsFromStream(pIStream);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2249 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2250
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2251 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2252 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2253
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2254 void ResetRibbonSettings()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2255 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2256 if (m_hgRibbonSettings != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2257 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2258 ::GlobalFree(m_hgRibbonSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2259 m_hgRibbonSettings = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2260 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2261 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2262
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2263 HRESULT SaveRibbonSettings()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2264 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2265 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2266 ATLASSERT(static_cast<T*>(this)->IsWindow());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2267
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2268 HRESULT hr = E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2269 ATL::CComPtr<IStream> pIStream;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2270
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2271 if SUCCEEDED(hr = ::CreateStreamOnHGlobal(m_hgRibbonSettings, FALSE, &pIStream))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2272 hr = *this >> pIStream;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2273
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2274 if (SUCCEEDED(hr) && (m_hgRibbonSettings == NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2275 hr = ::GetHGlobalFromStream(pIStream, &m_hgRibbonSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2276
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2277 if FAILED(hr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2278 ResetRibbonSettings();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2279
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2280 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2281 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2282
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2283 HRESULT RestoreRibbonSettings()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2284 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2285 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2286 ATLASSERT(m_hgRibbonSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2287 ATLASSERT(static_cast<T*>(this)->IsWindow());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2288
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2289 HRESULT hr = E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2290 ATL::CComPtr<IStream> pIStream;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2291
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2292 if SUCCEEDED(hr = ::CreateStreamOnHGlobal(m_hgRibbonSettings, FALSE, &pIStream))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2293 hr = *this << pIStream;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2294
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2295 if FAILED(hr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2296 ResetRibbonSettings();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2297
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2298 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2299 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2300
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2301 // QAT dock states
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2302 UI_CONTROLDOCK GetQATDock()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2303 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2304 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2305 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2306
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2307 UINT32 uDock = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2308 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2309 ATL::CComQIPtr<IPropertyStore>pIPS(GetRibbonPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2310
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2311 if ((pIPS != NULL) && SUCCEEDED(pIPS->GetValue(UI_PKEY_QuickAccessToolbarDock, &propvar)) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2312 SUCCEEDED(UIPropertyToUInt32(UI_PKEY_QuickAccessToolbarDock, propvar, &uDock)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2313 return (UI_CONTROLDOCK)uDock;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2314
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2315 ATLASSERT(FALSE); // something was wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2316 return (UI_CONTROLDOCK)0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2317 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2318
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2319 bool SetQATDock(UI_CONTROLDOCK dockState)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2320 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2321 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2322 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2323
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2324 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2325 ATLVERIFY(SUCCEEDED(SetPropertyVal(UI_PKEY_QuickAccessToolbarDock, dockState, &propvar)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2326
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2327 ATL::CComQIPtr<IPropertyStore>pIPS(GetRibbonPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2328 if ((pIPS != NULL) && SUCCEEDED(pIPS->SetValue(UI_PKEY_QuickAccessToolbarDock, propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2329 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2330 pIPS->Commit();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2331 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2332 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2333
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2334 ATLASSERT(FALSE); // something was wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2335 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2336 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2337
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2338 // Ribbon display states
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2339 bool GetRibbonDisplayState(REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2340 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2341 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2342 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2343 ATLASSERT((k_(key) == k_Viewable) || (k_(key) == k_Minimized));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2344
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2345 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2346 ATL::CComQIPtr<IPropertyStore>pIPS(GetRibbonPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2347
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2348 if ((pIPS != NULL) && SUCCEEDED(pIPS->GetValue(key, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2349 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2350 BOOL bState = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2351 if SUCCEEDED(UIPropertyToBoolean(key, propvar, &bState))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2352 return (bState != FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2353 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2354
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2355 ATLASSERT(FALSE); // something was wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2356 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2357 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2358
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2359 bool SetRibbonDisplayState(REFPROPERTYKEY key, bool bState = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2360 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2361 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2362 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2363 ATLASSERT((k_(key) == k_Viewable) || (k_(key) == k_Minimized));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2364
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2365 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2366 ATLVERIFY(SUCCEEDED(SetPropertyVal(key, bState, &propvar)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2367
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2368 ATL::CComQIPtr<IPropertyStore>pIPS(GetRibbonPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2369
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2370 if ((pIPS != NULL) && SUCCEEDED(pIPS->SetValue(key, propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2371 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2372 pIPS->Commit();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2373 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2374 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2375
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2376 ATLASSERT(FALSE); // something was wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2377 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2378 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2379
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2380 bool IsRibbonMinimized()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2381 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2382 return GetRibbonDisplayState(UI_PKEY_Minimized);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2383 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2384
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2385 bool MinimizeRibbon(bool bMinimize = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2386 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2387 return SetRibbonDisplayState(UI_PKEY_Minimized, bMinimize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2388 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2389
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2390 bool IsRibbonHidden()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2391 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2392 return !GetRibbonDisplayState(UI_PKEY_Viewable);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2393 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2394
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2395 bool HideRibbon(bool bHide = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2396 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2397 return SetRibbonDisplayState(UI_PKEY_Viewable, !bHide);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2398 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2399
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2400 // Ribbon colors
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2401 UI_HSBCOLOR GetRibbonColor(REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2402 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2403 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2404 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2405 ATLASSERT((k_(key) >= k_GlobalBackgroundColor) && (k_(key) <= k_GlobalTextColor));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2406
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2407 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2408 ATL::CComQIPtr<IPropertyStore>pIPS(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2409
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2410 if ((pIPS != NULL) && SUCCEEDED(pIPS->GetValue(key, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2411 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2412 UINT32 color = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2413 if SUCCEEDED(UIPropertyToUInt32(key, propvar, &color))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2414 return color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2415 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2416
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2417 ATLASSERT(FALSE); // something was wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2418 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2419 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2420
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2421 bool SetRibbonColor(REFPROPERTYKEY key, UI_HSBCOLOR color)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2422 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2423 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2424 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2425 ATLASSERT((k_(key) >= k_GlobalBackgroundColor) && (k_(key) <= k_GlobalTextColor));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2426
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2427 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2428 ATLVERIFY(SUCCEEDED(SetPropertyVal(key, color, &propvar)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2429
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2430 ATL::CComQIPtr<IPropertyStore>pIPS(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2431
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2432 if ((pIPS != NULL) && SUCCEEDED(pIPS->SetValue(key, propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2433 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2434 pIPS->Commit();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2435 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2436 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2437
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2438 ATLASSERT(FALSE); // something was wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2439 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2440 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2441
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2442 // Ribbon modes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2443 HRESULT SetRibbonModes(INT32 iModes)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2444 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2445 ATLASSERT(IsRibbonUI());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2446 return GetIUIFrameworkPtr()->SetModes(iModes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2447 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2448
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2449 // Ribbon contextual tab
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2450 UI_CONTEXTAVAILABILITY GetRibbonContextAvail(UINT32 uID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2451 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2452 ATLASSERT(GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2453
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2454 PROPVARIANT propvar;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2455 if (IsRibbonUI() &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2456 SUCCEEDED(GetIUIFrameworkPtr()->GetUICommandProperty(uID, UI_PKEY_ContextAvailable, &propvar)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2457 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2458 UINT uav;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2459 if (SUCCEEDED(PropVariantToUInt32(propvar, &uav)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2460 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2461 CUpdateUIBase::UIEnable(uID, uav != UI_CONTEXTAVAILABILITY_NOTAVAILABLE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2462 CUpdateUIBase::UISetCheck(uID, uav == UI_CONTEXTAVAILABILITY_ACTIVE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2463 return (UI_CONTEXTAVAILABILITY)uav;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2464 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2465 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2466
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2467 return UI_CONTEXTAVAILABILITY_NOTAVAILABLE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2468 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2469
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2470 HRESULT SetRibbonContextAvail(UINT32 uID, UI_CONTEXTAVAILABILITY cav)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2471 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2472 CUpdateUIBase::UIEnable(uID, cav != UI_CONTEXTAVAILABILITY_NOTAVAILABLE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2473 CUpdateUIBase::UISetCheck(uID, cav == UI_CONTEXTAVAILABILITY_ACTIVE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2474
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2475 return SetProperty((WORD)uID, UI_PKEY_ContextAvailable, UINT32(cav));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2476 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2477
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2478 // Ribbon context menu
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2479 bool HasRibbonMenu(UINT32 uID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2480 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2481 ATL::CComPtr<IUIContextualUI> pI = GetMenuPtr(uID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2482 return pI != NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2483 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2484
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2485 HRESULT TrackRibbonMenu(UINT32 uID, INT32 x, INT32 y)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2486 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2487 ATLASSERT(HasRibbonMenu(uID));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2488
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2489 return IsRibbonUI() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2490 ATL::CComPtr<IUIContextualUI>(GetMenuPtr(uID))->ShowAtLocation(x, y) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2491 E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2492 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2493
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2494 HRESULT TrackRibbonMenu(UINT32 uID, LPARAM lParam)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2495 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2496 return TrackRibbonMenu(uID, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2497 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2498
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2499 // Overrideables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2500 HBITMAP OnRibbonQueryImage(UINT nCmdID, REFPROPERTYKEY /*key*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2501 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2502 return DefRibbonQueryImage(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2503 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2504
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2505 LPCWSTR OnRibbonQueryText(UINT nCmdID, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2506 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2507 return DefRibbonQueryText(nCmdID, key);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2508 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2509
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2510 bool OnRibbonQueryState(UINT nCmdID, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2511 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2512 return DefRibbonQueryState(nCmdID, key);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2513 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2514
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2515 UI_CONTEXTAVAILABILITY OnRibbonQueryTabAvail(UINT nCmdID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2516 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2517 DWORD dwState = this->UIGetState(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2518 return ((dwState & CUpdateUIBase::UPDUI_DISABLED) == CUpdateUIBase::UPDUI_DISABLED) ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2519 UI_CONTEXTAVAILABILITY_NOTAVAILABLE :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2520 (((dwState & CUpdateUIBase::UPDUI_CHECKED) == CUpdateUIBase::UPDUI_CHECKED) ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2521 UI_CONTEXTAVAILABILITY_ACTIVE :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2522 UI_CONTEXTAVAILABILITY_AVAILABLE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2523 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2524
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2525 LPCWSTR OnRibbonQueryComboText(UINT32 /*uCtrlID*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2526 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2527 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2528 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2529
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2530 LPCWSTR OnRibbonQueryCategoryText(UINT32 /*uCtrlID*/, UINT32 /*uCat*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2531 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2532 return L"Category";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2533 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2534
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2535 UINT32 OnRibbonQueryItemCategory(UINT32 /*uCtrlID*/, UINT32 /*uItem*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2536 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2537 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2538 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2539
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2540 LPCWSTR OnRibbonQueryItemText(UINT32 uCtrlID, UINT32 uItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2541 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2542 return DefRibbonQueryItemText(uCtrlID, uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2543 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2544
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2545 bool OnRibbonQuerySelectedItem(UINT32 /*uCtrlID*/, UINT32& /*uSel*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2546 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2547 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2548 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2549
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2550 HBITMAP OnRibbonQueryItemImage(UINT32 uCtrlID, UINT32 uItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2551 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2552 return DefRibbonQueryItemImage(uCtrlID, uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2553 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2554
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2555 UINT32 OnRibbonQueryItemCommand(UINT32 uCtrlID, UINT32 uItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2556 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2557 return DefRibbonQueryItemCommand(uCtrlID, uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2558 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2559
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2560 UI_COMMANDTYPE OnRibbonQueryItemCommandType(UINT32 /*uCtrlID*/, UINT32 /*uItem*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2561 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2562 return UI_COMMANDTYPE_ACTION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2563 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2564
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2565 LPCWSTR OnRibbonQueryRecentItemName(LPCWSTR sPath)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2566 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2567 return ::PathFindFileName(sPath);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2568 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2569
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2570 bool OnRibbonQueryFont(UINT /*nId*/, CHARFORMAT2& /*cf*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2571 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2572 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2573 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2574
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2575 bool OnRibbonQuerySpinnerValue(UINT /*nCmdID*/, REFPROPERTYKEY /*key*/, LONG* /*pVal*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2576 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2577 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2578 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2579
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2580 bool OnRibbonQueryFloatSpinnerValue(UINT /*nCmdID*/, REFPROPERTYKEY /*key*/, DOUBLE* /*pVal*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2581 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2582 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2583 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2584
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2585 COLORREF OnRibbonQueryColor(UINT /*nCmdID*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2586 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2587 return 0x800080; /*MAGENTA*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2588 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2589
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2590 LPCWSTR OnRibbonQueryColorLabel(UINT /*nCmdID*/, REFPROPERTYKEY /*key*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2591 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2592 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2593 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2594
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2595 COLORREF* OnRibbonQueryColorArray(UINT /*nCmdID*/, REFPROPERTYKEY /*key*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2596 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2597 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2598 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2599
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2600 LPCWSTR* OnRibbonQueryColorTooltips(UINT /*nCmdID*/, REFPROPERTYKEY /*key*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2601 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2602 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2603 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2604
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2605 bool OnRibbonItemSelected(UINT32 uCtrlID, UI_EXECUTIONVERB verb, UINT32 uItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2606 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2607 DefCommandExecute(MAKELONG(uCtrlID, verb), uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2608 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2609 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2610
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2611 void OnRibbonColorCtrlExecute(UINT32 uCtrlID, UI_EXECUTIONVERB verb, UI_SWATCHCOLORTYPE uType, COLORREF color)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2612 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2613 DefRibbonColorCtrlExecute(uCtrlID, verb, uType, color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2614 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2615
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2616 void OnRibbonFontCtrlExecute(UINT32 uCtrlID, UI_EXECUTIONVERB verb, CHARFORMAT2* pcf)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2617 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2618 DefCommandExecute(MAKELONG(uCtrlID, verb), (LPARAM)pcf);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2619 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2620
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2621 void OnRibbonSpinnerCtrlExecute(UINT32 uCtrlID, LONG* pVal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2622 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2623 DefCommandExecute(uCtrlID, *pVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2624 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2625
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2626 void OnRibbonSpinnerCtrlExecute(UINT32 uCtrlID, DOUBLE* pVal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2627 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2628 DefCommandExecute(uCtrlID, (LPARAM)pVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2629 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2630
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2631 void OnRibbonCommandExecute(UINT32 uCmdID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2632 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2633 DefCommandExecute(uCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2634 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2635
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2636 // Default implementations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2637 HBITMAP DefRibbonQueryImage(UINT nCmdID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2638 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2639 return AtlLoadBitmapImage(nCmdID, LR_CREATEDIBSECTION);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2640 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2641
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2642 bool DefRibbonQueryState(UINT nCmdID, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2643 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2644 DWORD dwState = this->UIGetState(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2645 bool bRet = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2646 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2647 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2648 case k_BooleanValue:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2649 bRet = (dwState & CUpdateUIBase::UPDUI_CHECKED) == CUpdateUIBase::UPDUI_CHECKED;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2650 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2651 case k_Enabled:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2652 bRet = (dwState & CUpdateUIBase::UPDUI_DISABLED) != CUpdateUIBase::UPDUI_DISABLED;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2653 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2654 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2655 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2656 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2657 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2658
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2659 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2660 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2661
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2662 LPCTSTR DefRibbonQueryText(UINT nCmdID, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2663 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2664 static WCHAR sText[RIBBONUI_MAX_TEXT] = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2665
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2666 if (k_(key) == k_Label)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2667 return this->UIGetText(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2668
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2669 if (ATL::AtlLoadString(nCmdID, sText, RIBBONUI_MAX_TEXT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2670 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2671 PWCHAR pTitle = wcschr(sText, L'\n');
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2672 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2673 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2674 case k_Keytip:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2675 if (PWCHAR pAmp = wcschr(sText, L'&'))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2676 pTitle = pAmp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2677 if (pTitle != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2678 *(pTitle + 2) = NULL; // fall through
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2679 case k_TooltipTitle:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2680 return pTitle ? ++pTitle : NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2681 case k_TooltipDescription:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2682 case k_LabelDescription:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2683 if (pTitle != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2684 *pTitle = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2685 return sText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2686 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2687 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2688
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2689 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2690 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2691
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2692 LPCWSTR DefRibbonQueryItemText(UINT32 uCtrlID, UINT32 uItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2693 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2694 return DefRibbonQueryText(uCtrlID + 1 + uItem, UI_PKEY_LabelDescription);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2695 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2696
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2697 HBITMAP DefRibbonQueryItemImage(UINT32 uCtrlID, UINT32 uItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2698 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2699 return DefRibbonQueryImage(uCtrlID + 1 + uItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2700 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2701
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2702 UINT32 DefRibbonQueryItemCommand(UINT32 uCtrlID, UINT32 uItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2703 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2704 return uCtrlID + 1 + uItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2705 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2706
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2707 void DefRibbonColorCtrlExecute(UINT32 uCtrlID, UI_EXECUTIONVERB verb, UI_SWATCHCOLORTYPE uType, COLORREF color)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2708 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2709 switch(uType)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2710 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2711 case UI_SWATCHCOLORTYPE_RGB:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2712 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2713 case UI_SWATCHCOLORTYPE_AUTOMATIC:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2714 color = ::GetSysColor(COLOR_WINDOWTEXT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2715 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2716 case UI_SWATCHCOLORTYPE_NOCOLOR:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2717 color = ::GetSysColor(COLOR_WINDOW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2718 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2719 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2720 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2721 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2722 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2723
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2724 DefCommandExecute(MAKELONG(uCtrlID, verb), color);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2725 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2726
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2727 void DefCommandExecute(UINT32 uCmd, LPARAM lParam = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2728 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2729 static_cast<T*>(this)->PostMessage(WM_COMMAND, uCmd, lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2730 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2731
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2732 // Elements setting helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2733 HRESULT InvalidateCtrl(UINT32 nID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2734 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2735 return IsRibbonUI() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2736 GetIUIFrameworkPtr()->InvalidateUICommand(nID, UI_INVALIDATIONS_ALLPROPERTIES, NULL) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2737 E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2738 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2739
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2740 HRESULT InvalidateProperty(UINT32 nID, REFPROPERTYKEY key, UI_INVALIDATIONS flags = UI_INVALIDATIONS_PROPERTY)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2741 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2742 return IsRibbonUI() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2743 GetIUIFrameworkPtr()->InvalidateUICommand(nID, flags, &key) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2744 E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2745 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2746
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2747 template <typename V>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2748 HRESULT SetProperty(WORD wID, REFPROPERTYKEY key, V val)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2749 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2750 if (IsRibbonUI())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2751 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2752 PROPVARIANT var;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2753 if (SUCCEEDED(RibbonUI::SetPropertyVal(key, val, &var)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2754 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2755 return SetProperty(wID, key, var);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2756 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2757 return E_INVALIDARG;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2758 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2759 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2760 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2761 return E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2762 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2763 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2764
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2765 template <>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2766 HRESULT SetProperty(WORD nID, REFPROPERTYKEY key, PROPVARIANT var)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2767 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2768 return IsRibbonUI() ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2769 GetIUIFrameworkPtr()->SetUICommandProperty(nID, key, var) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2770 E_FAIL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2771 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2772
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2773 // Interfaces
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2774 // IUIApplication
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2775 STDMETHODIMP OnViewChanged(UINT32, UI_VIEWTYPE, IUnknown*, UI_VIEWVERB verb, INT32)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2776 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2777 switch (verb)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2778 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2779 case UI_VIEWVERB_CREATE:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2780 m_bRibbonUI = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2781 if (m_hgRibbonSettings != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2782 RestoreRibbonSettings();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2783 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2784 case UI_VIEWVERB_SIZE:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2785 static_cast<T*>(this)->UpdateLayout(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2786 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2787 case UI_VIEWVERB_DESTROY:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2788 SaveRibbonSettings();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2789 m_bRibbonUI = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2790 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2791 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2792
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2793 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2794 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2795
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2796 STDMETHODIMP OnCreateUICommand(UINT32 nCmdID, UI_COMMANDTYPE typeID, IUICommandHandler** ppCommandHandler)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2797 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2798 this->UIAddRibbonElement(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2799 if (typeID == UI_COMMANDTYPE_CONTEXT)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2800 CUpdateUIBase::UIEnable(nCmdID, false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2801 *ppCommandHandler = this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2802 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2803 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2804
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2805 STDMETHODIMP OnDestroyUICommand(UINT32 nCmdID, UI_COMMANDTYPE, IUICommandHandler*)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2806 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2807 this->UIRemoveRibbonElement(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2808 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2809 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2810
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2811 // IUICommandHandler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2812 STDMETHODIMP Execute(UINT nCmdID,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2813 UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2814 const PROPERTYKEY* key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2815 const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2816 IUISimplePropertySet* pCommandExecutionProperties)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2817 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2818 T* pT =static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2819 return pT->GetRibbonCtrl(nCmdID).DoExecute(nCmdID, verb, key, ppropvarValue, pCommandExecutionProperties);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2820 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2821
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2822 STDMETHODIMP UpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2823 const PROPVARIANT* ppropvarCurrentValue, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2824 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2825 T* pT =static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2826 return pT->GetRibbonCtrl(nCmdID).DoUpdateProperty(nCmdID, key, ppropvarCurrentValue, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2827 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2828
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2829 #ifdef _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2830 // IUnknown methods (heavyweight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2831 STDMETHODIMP_(ULONG) AddRef()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2832 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2833 return InterlockedIncrement(&m_cRef);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2834 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2835
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2836 STDMETHODIMP_(ULONG) Release()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2837 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2838 LONG cRef = InterlockedDecrement(&m_cRef);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2839 if (cRef == 0) // NoOp for breakpoint
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2840 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2841 cRef = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2842 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2843
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2844 return cRef;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2845 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2846
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2847 STDMETHODIMP QueryInterface(REFIID iid, void** ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2848 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2849 if (ppv == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2850 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2851 return E_POINTER;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2852 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2853 else if ((iid == __uuidof(IUnknown)) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2854 (iid == __uuidof(IUICommandHandler)) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2855 (iid == __uuidof(IUIApplication)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2856 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2857 *ppv = this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2858 AddRef();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2859 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2860 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2861 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2862 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2863 return E_NOINTERFACE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2864 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2865 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2866
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2867 LONG m_cRef;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2868 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2869 // IUnknown methods (lightweight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2870 STDMETHODIMP QueryInterface(REFIID iid, void** ppv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2871 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2872 if ((iid == __uuidof(IUnknown)) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2873 (iid == __uuidof(IUICommandHandler)) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2874 (iid == __uuidof(IUIApplication)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2875 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2876 *ppv = this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2877 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2878 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2879 return E_NOINTERFACE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2880 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2881 ULONG STDMETHODCALLTYPE AddRef()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2882 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2883 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2884 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2885 ULONG STDMETHODCALLTYPE Release()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2886 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2887 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2888 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2889 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2890
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2891 // CRibbonImpl ICtrl implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2892 virtual HRESULT DoExecute(UINT nCmdID, UI_EXECUTIONVERB verb,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2893 const PROPERTYKEY* key, const PROPVARIANT* ppropvarValue,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2894 IUISimplePropertySet* /*pCommandExecutionProperties*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2895 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2896 if (key != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2897 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2898 if(k_(*key) != k_BooleanValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2899 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2900 ATLTRACE2(atlTraceUI, 0, _T("Control ID %d is not handled\n"), nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2901 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2902 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2903 BOOL bChecked = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2904 ATLVERIFY(SUCCEEDED(PropVariantToBoolean(*ppropvarValue, &bChecked)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2905 CUpdateUIBase::UISetCheck(nCmdID, bChecked);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2906 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2907
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2908 ATLASSERT(verb == UI_EXECUTIONVERB_EXECUTE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2909 (void)verb; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2910
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2911 static_cast<T*>(this)->OnRibbonCommandExecute(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2912
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2913 return S_OK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2914 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2915
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2916 virtual HRESULT DoUpdateProperty(UINT nCmdID, REFPROPERTYKEY key,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2917 const PROPVARIANT* /*ppropvarCurrentValue*/, PROPVARIANT* ppropvarNewValue)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2918 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2919 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2920 HRESULT hr = E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2921 switch (k_(key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2922 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2923 case k_LargeImage:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2924 case k_LargeHighContrastImage:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2925 case k_SmallImage:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2926 case k_SmallHighContrastImage:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2927 if (HBITMAP hbm = pT->OnRibbonQueryImage(nCmdID, key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2928 hr = SetPropertyVal(key, GetImage(hbm, UI_OWNERSHIP_TRANSFER), ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2929 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2930 case k_Label:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2931 case k_Keytip:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2932 case k_TooltipTitle:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2933 case k_TooltipDescription:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2934 case k_LabelDescription:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2935 if (LPCWSTR sText = pT->OnRibbonQueryText(nCmdID, key))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2936 hr = SetPropertyVal(key, sText, ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2937 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2938 case k_BooleanValue:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2939 case k_Enabled:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2940 hr = SetPropertyVal(key, pT->OnRibbonQueryState(nCmdID, key), ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2941 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2942 case k_ContextAvailable:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2943 hr = SetPropertyVal(key, pT->OnRibbonQueryTabAvail(nCmdID), ppropvarNewValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2944 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2945 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2946
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2947 return hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2948 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2949
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2950 // CRibbonImpl::CRibbonXXXCtrl specialized classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2951 //CRibbonComboCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2952 template <UINT t_ID, size_t t_items, size_t t_categories = 0>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2953 class CRibbonComboCtrl : public CollectionCtrlImpl<T, t_ID, ComboCollectionImpl<CRibbonComboCtrl<t_ID, t_items, t_categories>, t_items, t_categories>>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2954 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2955 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2956 CRibbonComboCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2957 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2958 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2959
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2960 // CRibbonItemGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2961 template <UINT t_ID, size_t t_items, size_t t_categories = 0>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2962 class CRibbonItemGalleryCtrl : public CollectionCtrlImpl<T, t_ID, ItemCollectionImpl<CRibbonItemGalleryCtrl<t_ID, t_items, t_categories>, t_items, t_categories>>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2963 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2964 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2965 CRibbonItemGalleryCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2966 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2967 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2968
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2969 // CRibbonCommandGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2970 template <UINT t_ID, size_t t_items, size_t t_categories = 0>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2971 class CRibbonCommandGalleryCtrl : public CollectionCtrlImpl<T, t_ID, CommandCollectionImpl<CRibbonCommandGalleryCtrl<t_ID, t_items, t_categories>, t_items, t_categories>>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2972 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2973 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2974 CRibbonCommandGalleryCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2975 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2976 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2977
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2978 // CRibbonToolbarGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2979 template <UINT t_ID, UINT t_idTB, size_t t_size>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2980 class CRibbonToolbarGalleryCtrl : public ToolbarGalleryCtrlImpl<T, t_ID, t_idTB, t_size>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2981 { };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2982
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2983 // CRibbonSimpleComboCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2984 template <UINT t_ID, size_t t_size>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2985 class CRibbonSimpleComboCtrl : public SimpleCollectionCtrlImpl<T, t_ID, t_size>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2986 { };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2987
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2988 // CRibbonSimpleGalleryCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2989 template <UINT t_ID, size_t t_size, UI_COMMANDTYPE t_CommandType = UI_COMMANDTYPE_ACTION>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2990 class CRibbonSimpleGalleryCtrl : public SimpleCollectionCtrlImpl<T, t_ID, t_size, t_CommandType>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2991 { };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2992
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2993 //CRibbonRecentItemsCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2994 template <UINT t_ID, class TDocList = CRecentDocumentList>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2995 class CRibbonRecentItemsCtrl : public RecentItemsCtrlImpl<T, t_ID, TDocList>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2996 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2997 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2998 CRibbonRecentItemsCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2999 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3000 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3001
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3002 // CRibbonColorCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3003 template <UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3004 class CRibbonColorCtrl : public ColorCtrlImpl<T, t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3005 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3006 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3007 CRibbonColorCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3008 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3009 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3010
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3011 //CRibbonFontCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3012 template <UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3013 class CRibbonFontCtrl : public FontCtrlImpl<T, t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3014 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3015 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3016 CRibbonFontCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3017 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3018 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3019
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3020 // CRibbonSpinnerCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3021 template <UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3022 class CRibbonSpinnerCtrl : public SpinnerCtrlImpl<T, t_ID, LONG>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3023 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3024 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3025 CRibbonSpinnerCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3026 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3027 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3028
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3029 // CRibbonFloatSpinnerCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3030 template <UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3031 class CRibbonFloatSpinnerCtrl : public SpinnerCtrlImpl<T, t_ID, DOUBLE>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3032 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3033 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3034 CRibbonFloatSpinnerCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3035 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3036 this->m_Values[4] = 1; // 1 decimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3037 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3038 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3039
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3040 // CRibbonCommandCtrl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3041 template <UINT t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3042 class CRibbonCommandCtrl : public CommandCtrlImpl<T, t_ID>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3043 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3044 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3045 CRibbonCommandCtrl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3046 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3047 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3048
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3049 // Control classes access to T instance (re-initialized in constructor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3050 static T* pWndRibbon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3051 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3052
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3053 template <class T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3054 __declspec(selectany) T* CRibbonImpl<T>::pWndRibbon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3055
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3056 // Control map element
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3057 #pragma warning(push)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3058 #pragma warning(disable: 4510 610 4512) // missing default constructor, can't be instatiated, assignment operator could not be generated
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3059 typedef struct
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3060 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3061 UINT uID;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3062 ICtrl& ctrl;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3063 } _ribbonCtrl;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3064 #pragma warning(pop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3065
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3066 } // namespace RibbonUI
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3067
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3068
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3069 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3070 // RibbonUI Control map
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3071
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3072 // Control map macros
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3073 #define BEGIN_RIBBON_CONTROL_MAP(theClass) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3074 WTL::RibbonUI::ICtrl& GetRibbonCtrl(UINT id) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3075 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3076 WTL::RibbonUI::_ribbonCtrl _ctrls[] = \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3077 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3078
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3079 #define RIBBON_CONTROL(member) {member.GetID(), static_cast<WTL::RibbonUI::ICtrl&>(member)},
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3080
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3081 #define END_RIBBON_CONTROL_MAP() \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3082 {0, *this} \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3083 }; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3084 int i = 0; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3085 for(; i < _countof(_ctrls) - 1; i++) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3086 if (_ctrls[i].uID == id) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3087 break; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3088 return _ctrls[i].ctrl; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3089 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3090
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3091 // Control message map macros
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3092 #define RIBBON_GALLERY_CONTROL_HANDLER(id, func) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3093 if((uMsg == WM_COMMAND) && (id == LOWORD(wParam))) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3094 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3095 bHandled = TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3096 lResult = func((UI_EXECUTIONVERB)HIWORD(wParam), LOWORD(wParam), (UINT)lParam, bHandled); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3097 if(bHandled) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3098 return TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3099 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3101 #define RIBBON_COMBO_CONTROL_HANDLER(id, func) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3102 RIBBON_GALLERY_CONTROL_HANDLER(id, func)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3103
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3104 #define RIBBON_FONT_CONTROL_HANDLER(id, func) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3105 if((uMsg == WM_COMMAND) && (id == LOWORD(wParam))) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3106 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3107 bHandled = TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3108 lResult = func((UI_EXECUTIONVERB)HIWORD(wParam), LOWORD(wParam), (CHARFORMAT2*)lParam, bHandled); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3109 if(bHandled) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3110 return TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3111 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3112
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3113 #define RIBBON_COLOR_CONTROL_HANDLER(id, func) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3114 if((uMsg == WM_COMMAND) && (id == LOWORD(wParam))) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3115 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3116 bHandled = TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3117 lResult = func((UI_EXECUTIONVERB)HIWORD(wParam), LOWORD(wParam), (COLORREF)lParam, bHandled); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3118 if(bHandled) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3119 return TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3120 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3121
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3122 #define RIBBON_SPINNER_CONTROL_HANDLER(id, func) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3123 if((uMsg == WM_COMMAND) && (id == wParam)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3124 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3125 bHandled = TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3126 lResult = func((WORD)wParam, (LONG)lParam, bHandled); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3127 if(bHandled) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3128 return TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3129 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3130
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3131 #define RIBBON_FLOATSPINNER_CONTROL_HANDLER(id, func) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3132 if((uMsg == WM_COMMAND) && (id == wParam)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3133 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3134 bHandled = TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3135 lResult = func((WORD)wParam, (DOUBLE*)lParam, bHandled); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3136 if(bHandled) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3137 return TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3138 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3139
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3140 // Handler prototypes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3141 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3142 LRESULT OnRibbonGalleryCtrl(UI_EXECUTIONVERB verb, WORD wID, UINT uSel, BOOL& bHandled);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3143 LRESULT OnRibbonComboCtrl(UI_EXECUTIONVERB verb, WORD wID, UINT uSel, BOOL& bHandled);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3144 LRESULT OnRibbonFontCtrl(UI_EXECUTIONVERB verb, WORD wID, CHARFORMAT2* pcf, BOOL& bHandled);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3145 LRESULT OnRibbonColorCtrl(UI_EXECUTIONVERB verb, WORD wID, COLORREF color, BOOL& bHandled);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3146 LRESULT OnRibbonSpinnerCtrl(WORD wID, LONG lVal, BOOL& bHandled);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3147 LRESULT OnRibbonFloatSpinnerCtrl(WORD wID, DOUBLE* pdVal, BOOL& bHandled);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3148 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3149
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3151 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3152 // Ribbon frame classes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3153
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3154 // CRibbonFrameWindowImplBase
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3155 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3156 template <class T, class TFrameImpl>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3157 class ATL_NO_VTABLE CRibbonFrameWindowImplBase : public TFrameImpl, public RibbonUI::CRibbonImpl<T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3158 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3159 typedef TFrameImpl baseFrame;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3160 bool m_bUseCommandBarBitmaps;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3161 bool m_bWin7Fix;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3162
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3163 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3164 // Construction
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3165 CRibbonFrameWindowImplBase(bool bUseCommandBarBitmaps = true) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3166 m_bUseCommandBarBitmaps(bUseCommandBarBitmaps), m_bWin7Fix(false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3167 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3168 __if_not_exists(T::m_CmdBar)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3169 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3170 m_bUseCommandBarBitmaps = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3171 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3172 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3173
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3174 // Win7 Aero fix helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3175 void ResetFrame()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3176 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3177 const MARGINS margins = { 0, 0, 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3178 ::DwmExtendFrameIntoClientArea(this->m_hWnd, &margins);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3179 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3181 INT CalcWin7Fix()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3182 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3183 ResetFrame();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3184 RECT rc = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3185 ::AdjustWindowRectEx(&rc, T::GetWndStyle(0), this->GetMenu() != NULL, T::GetWndExStyle(0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3186 return -rc.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3187 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3188
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3189 bool NeedWin7Fix()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3190 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3191 BOOL bComp = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3192 return m_bWin7Fix && RunTimeHelper::IsWin7() && SUCCEEDED(DwmIsCompositionEnabled(&bComp)) && bComp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3193 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3194
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3195 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3196 bool UseCommandBarBitmaps(bool bUse)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3197 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3198 __if_exists(T::m_CmdBar)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3199 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3200 return m_bUseCommandBarBitmaps = bUse;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3201 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3202 __if_not_exists(T::m_CmdBar)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3203 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3204 (void)bUse; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3205 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3207 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3208
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3209 bool ShowRibbonUI(bool bShow, INT32 imodes = UI_MAKEAPPMODE(0), LPCWSTR sResName = L"APPLICATION_RIBBON")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3210 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3211 if (!RunTimeHelper::IsRibbonUIAvailable())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3212 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3213
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3214 ATLASSERT(this->GetIUIFrameworkPtr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3215
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3216 if (this->IsRibbonUI() == bShow)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3217 return bShow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3218
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3219 bool bVisible = (this->IsWindowVisible() != FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3220 if(bVisible && !bShow)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3221 this->SetRedraw(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3222
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3223 if (bShow && ::IsWindow(this->m_hWndToolBar))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3224 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3225 ::ShowWindow(this->m_hWndToolBar, SW_HIDE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3226 UpdateLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3227 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3228
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3229 m_bWin7Fix = !bShow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3230
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3231 HRESULT hr = bShow ? this->CreateRibbon(sResName) : this->DestroyRibbon();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3232
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3233 m_bWin7Fix = SUCCEEDED(hr) && !bShow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3234
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3235 if (SUCCEEDED(hr))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3236 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3237 if(::IsWindow(this->m_hWndToolBar) && !bShow)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3238 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3239 ::ShowWindow(this->m_hWndToolBar, SW_SHOWNA);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3240 UpdateLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3241 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3242 else if (bShow)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3243 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3244 this->PostMessage(WM_SIZE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3245 this->SetRibbonModes(imodes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3246 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3247 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3248
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3249 if(bVisible && !bShow)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3250 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3251 this->SetRedraw(TRUE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3252 this->RedrawWindow(NULL, NULL, RDW_FRAME | RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3253 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3254
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3255 return SUCCEEDED(hr) ? bShow : !bShow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3256 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3257
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3258 // Overrideables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3259 HBITMAP OnRibbonQueryImage(UINT nCmdID, REFPROPERTYKEY key)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3260 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3261 if ((key == UI_PKEY_SmallImage) && m_bUseCommandBarBitmaps)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3262 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3263 if (HBITMAP hbm = GetCommandBarBitmap(nCmdID))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3264 return (HBITMAP)::CopyImage(hbm, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3265 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3266
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3267 return this->DefRibbonQueryImage(nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3268 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3269
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3270 BEGIN_MSG_MAP(CRibbonFrameWindowImplBase)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3271 if (!this->IsRibbonUI() && NeedWin7Fix())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3272 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3273 MESSAGE_HANDLER(WM_SIZING, OnSizing)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3274 MESSAGE_HANDLER(WM_SIZE, OnSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3275 MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3276 MESSAGE_HANDLER(WM_NCCALCSIZE, OnNCCalcSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3277 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3278 CHAIN_MSG_MAP(CRibbonUpdateUI<T>)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3279 CHAIN_MSG_MAP(baseFrame)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3280 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3281
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3282 // Message handlers for Win7 Aero
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3283 LRESULT OnSizing(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3284 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3285 switch (wParam)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3286 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3287 case WMSZ_TOP:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3288 case WMSZ_TOPLEFT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3289 case WMSZ_TOPRIGHT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3290 this->SetWindowPos(NULL, (LPRECT)lParam, SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3291 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3292 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3293 this->DefWindowProc();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3294 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3295 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3296
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3297 return 1; // handled
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3298 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3299
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3300 LRESULT OnSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3301 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3302 if (wParam != SIZE_MINIMIZED)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3303 this->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3304
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3305 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3306 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3307 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3308
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3309 LRESULT OnActivate(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3310 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3311 if(wParam != WA_INACTIVE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3312 this->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3313
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3314 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3315 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3316 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3317
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3318 LRESULT OnNCCalcSize(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3319 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3320 ATLASSERT(!this->IsRibbonUI() && NeedWin7Fix());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3321
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3322 LRESULT lRet = this->DefWindowProc();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3323
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3324 if(wParam)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3325 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3326 LPNCCALCSIZE_PARAMS pParams = (LPNCCALCSIZE_PARAMS)lParam;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3327 pParams->rgrc[0].top = pParams->rgrc[1].top + CalcWin7Fix();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3328 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3329
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3330 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3331 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3332
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3333 // Overrides
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3334 void UpdateLayout(BOOL bResizeBars = TRUE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3335 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3336 RECT rect = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3337 this->GetClientRect(&rect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3338
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3339 if (this->IsRibbonUI() && !this->IsRibbonHidden())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3340 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3341 rect.top += this->GetRibbonHeight();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3342 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3343 else if (!this->IsRibbonUI() && NeedWin7Fix())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3344 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3345 ResetFrame();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3346 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3347
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3348 // position bars and offset their dimensions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3349 this->UpdateBarsPosition(rect, bResizeBars);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3350
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3351 // resize client window
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3352 if(this->m_hWndClient != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3353 ::SetWindowPos(this->m_hWndClient, NULL, rect.left, rect.top,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3354 rect.right - rect.left, rect.bottom - rect.top,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3355 SWP_NOZORDER | SWP_NOACTIVATE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3356 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3357
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3358 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3359 HBITMAP GetCommandBarBitmap(UINT nCmdID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3360 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3361 __if_exists (T::m_CmdBar)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3362 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3363 ATLASSERT(RunTimeHelper::IsVista());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3364 T* pT =static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3365 int nIndex = pT->m_CmdBar.m_arrCommand.Find((WORD&)nCmdID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3366 return (nIndex == -1) ? NULL : pT->m_CmdBar.m_arrVistaBitmap[nIndex];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3367 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3368 __if_not_exists (T::m_CmdBar)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3369 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3370 (void)nCmdID; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3371 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3372 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3373 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3374 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3375
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3376 // CRibbonFrameWindowImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3377 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3378 template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CFrameWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3379 class ATL_NO_VTABLE CRibbonFrameWindowImpl : public CRibbonFrameWindowImplBase<T, CFrameWindowImpl<T, TBase, TWinTraits>>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3380 { };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3381
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3382 // CRibbonMDIFrameWindowImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3383 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3384 template <class T, class TBase = CMDIWindow, class TWinTraits = ATL::CFrameWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3385 class ATL_NO_VTABLE CRibbonMDIFrameWindowImpl : public CRibbonFrameWindowImplBase<T, CMDIFrameWindowImpl<T, TBase, TWinTraits>>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3386 { };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3387
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3388
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3389 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3390 // CRibbonPersist helper for RibbonUI persistency
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3391
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3392 class CRibbonPersist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3393 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3394 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3395 CRibbonPersist(LPCWSTR sAppKey)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3396 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3397 ATLASSERT(sAppKey && *sAppKey);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3398 m_Key.Create(HKEY_CURRENT_USER, sAppKey);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3399 ATLASSERT(m_Key.m_hKey);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3400 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3401
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3402 ATL::CRegKey m_Key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3403
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3404 LONG Save(bool bRibbonUI, HGLOBAL hgSettings = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3405 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3406 ATL::CRegKey key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3407 const DWORD dwUI = bRibbonUI;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3408
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3409 LONG lRet = key.Create(m_Key, L"Ribbon");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3410 if(lRet != ERROR_SUCCESS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3411 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3412
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3413 lRet = key.SetDWORDValue(L"UI", dwUI);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3414 if(lRet != ERROR_SUCCESS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3415 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3416
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3417 if (hgSettings != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3418 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3419 LPBYTE pVal = (LPBYTE)::GlobalLock(hgSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3420 if (pVal != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3421 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3422 lRet = key.SetBinaryValue(L"Settings", pVal, (ULONG)::GlobalSize(hgSettings));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3423 ::GlobalUnlock(hgSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3424 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3425 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3426 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3427 lRet = GetLastError();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3428 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3429 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3430
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3431 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3432 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3433
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3434 LONG Restore(bool& bRibbonUI, HGLOBAL& hgSettings)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3435 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3436 ATLASSERT(hgSettings == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3437
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3438 ATL::CRegKey key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3439
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3440 LONG lRet = key.Open(m_Key, L"Ribbon");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3441 if(lRet != ERROR_SUCCESS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3442 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3443
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3444 DWORD dwUI = 0xffff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3445 lRet = key.QueryDWORDValue(L"UI", dwUI);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3446 if(lRet == ERROR_SUCCESS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3447 bRibbonUI = dwUI == 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3448 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3449 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3450
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3451 ULONG ulSize = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3452 lRet = key.QueryBinaryValue(L"Settings", NULL, &ulSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3453 if (lRet == ERROR_SUCCESS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3454 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3455 ATLASSERT(ulSize != 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3456
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3457 hgSettings = ::GlobalAlloc(GHND, ulSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3458 if (hgSettings != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3459 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3460 LPBYTE pData = (LPBYTE)::GlobalLock(hgSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3461 if (pData != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3462 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3463 lRet = key.QueryBinaryValue(L"Settings", pData, &ulSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3464 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3465 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3466 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3467 lRet = GetLastError();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3468 ::GlobalFree(hgSettings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3469 hgSettings = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3470 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3471 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3472 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3473 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3474 lRet = GetLastError();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3475 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3476 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3477 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3478 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3479
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3480 LONG Delete()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3481 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3482 return m_Key.DeleteSubKey(L"Ribbon");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3483 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3484 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3485
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3486 } // namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3487
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3488 #endif // __ATLRIBBON_H__