1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_fpicker.hxx"
30 
31 #ifndef _DIALOGCUSTOMCONTROLS_CXX_
32 #include "dialogcustomcontrols.hxx"
33 #endif
34 #include <osl/diagnose.h>
35 
36 //-----------------------------------
37 //
38 //-----------------------------------
39 
40 CDialogCustomControlBase::CDialogCustomControlBase(HWND aControlHandle, HWND aParentHandle) :
41 	m_CustomControlHandle(aControlHandle),
42 	m_ParentHandle(aParentHandle)
43 {
44 }
45 
46 //-----------------------------------
47 //
48 //-----------------------------------
49 
50 void SAL_CALL CDialogCustomControlBase::SetFont(HFONT hFont)
51 {
52 	SendMessage(
53 		m_CustomControlHandle,
54 		WM_SETFONT,
55 		(WPARAM)hFont,
56 		(LPARAM)sal_True);
57 }
58 
59 //-----------------------------------
60 //
61 //-----------------------------------
62 
63 void SAL_CALL CDialogCustomControlBase::AlignToBuddy(HWND aBuddyHandle)
64 {
65 	OSL_PRECOND(IsWindow(aBuddyHandle),"Invalid buddy window handle");
66 
67 	RECT rcBuddy;
68 	GetWindowRect(aBuddyHandle,&rcBuddy);
69 
70 	POINT pt = {rcBuddy.left,rcBuddy.top};
71 	ScreenToClient(m_ParentHandle,&pt);
72 
73 	int cx_new = rcBuddy.right - rcBuddy.left;
74 	int cy_new = rcBuddy.bottom - rcBuddy.top;
75 
76 	// keep the vertical position because
77 	// the Windows dialog controler does
78 	// this job
79 	RECT rcMe;
80 	GetWindowRect(m_CustomControlHandle,&rcMe);
81 
82 	POINT ptMe = {rcMe.left,rcMe.top};
83 	ScreenToClient(m_ParentHandle,&ptMe);
84 
85 	SetWindowPos(
86 		m_CustomControlHandle,
87 		HWND_TOP,
88 		pt.x,
89 		ptMe.y,
90 		cx_new,
91 		cy_new,
92 		SWP_NOACTIVATE);
93 }
94 
95 //-----------------------------------
96 //
97 //-----------------------------------
98 
99 CDummyCustomControl::CDummyCustomControl(HWND, HWND)
100 {
101 }
102 
103 //-----------------------------------
104 //
105 //-----------------------------------
106 
107 void SAL_CALL CDummyCustomControl::Align()
108 {
109 	// do nothing
110 }
111 
112 //-----------------------------------
113 //
114 //-----------------------------------
115 
116 void SAL_CALL CDummyCustomControl::SetFont(HFONT)
117 {
118 	// do nothing
119 }
120 
121 //-----------------------------------
122 //
123 //-----------------------------------
124 
125 CStaticCustomControl::CStaticCustomControl(HWND aControlHandle, HWND aParentHandle) :
126 	CDialogCustomControlBase(aControlHandle,aParentHandle)
127 {
128 }
129 
130 //-----------------------------------
131 // Align to the "File name" static
132 // text of the standard FileOpen dlg
133 //-----------------------------------
134 
135 void SAL_CALL CStaticCustomControl::Align()
136 {
137 	AlignToBuddy(GetDlgItem(m_ParentHandle,stc3));
138 }
139 
140 //-----------------------------------
141 //
142 //-----------------------------------
143 
144 CPushButtonCustomControl::CPushButtonCustomControl(HWND aControlHandle, HWND aParentHandle) :
145 	CDialogCustomControlBase(aControlHandle,aParentHandle)
146 {
147 }
148 
149 //-----------------------------------
150 // Align to the "OK" button of the
151 // standard FileOpen dlg
152 //-----------------------------------
153 
154 void SAL_CALL CPushButtonCustomControl::Align()
155 {
156 	AlignToBuddy(GetDlgItem(m_ParentHandle,IDCANCEL));
157 }
158 
159 //-----------------------------------
160 //
161 //-----------------------------------
162 
163 CComboboxCustomControl::CComboboxCustomControl(HWND aControlHandle, HWND aParentHandle) :
164 	CDialogCustomControlBase(aControlHandle,aParentHandle)
165 {
166 }
167 
168 //-----------------------------------
169 // Align to the "File name" combobox
170 // of the standard FileOpen dlg
171 //-----------------------------------
172 
173 void SAL_CALL CComboboxCustomControl::Align()
174 {
175 	AlignToBuddy(GetDlgItem(m_ParentHandle,cmb1));
176 }
177 
178 //-----------------------------------
179 //
180 //-----------------------------------
181 
182 CCheckboxCustomControl::CCheckboxCustomControl(HWND aControlHandle, HWND aParentHandle) :
183 	CDialogCustomControlBase(aControlHandle,aParentHandle)
184 {
185 }
186 
187 //-----------------------------------
188 // Align to the "File name" combobox
189 // of the standard FileOpen dlg
190 //-----------------------------------
191 
192 void SAL_CALL CCheckboxCustomControl::Align()
193 {
194 	AlignToBuddy(GetDlgItem(m_ParentHandle,cmb1));
195 }
196