15b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
35b190011SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
45b190011SAndrew Rist * or more contributor license agreements. See the NOTICE file
55b190011SAndrew Rist * distributed with this work for additional information
65b190011SAndrew Rist * regarding copyright ownership. The ASF licenses this file
75b190011SAndrew Rist * to you under the Apache License, Version 2.0 (the
85b190011SAndrew Rist * "License"); you may not use this file except in compliance
95b190011SAndrew Rist * with the License. You may obtain a copy of the License at
105b190011SAndrew Rist *
115b190011SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
125b190011SAndrew Rist *
135b190011SAndrew Rist * Unless required by applicable law or agreed to in writing,
145b190011SAndrew Rist * software distributed under the License is distributed on an
155b190011SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165b190011SAndrew Rist * KIND, either express or implied. See the License for the
175b190011SAndrew Rist * specific language governing permissions and limitations
185b190011SAndrew Rist * under the License.
195b190011SAndrew Rist *
205b190011SAndrew Rist *************************************************************/
215b190011SAndrew Rist
22cdf0e10cSrcweir #include "precompiled_sd.hxx"
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "PreviewValueSet.hxx"
25cdf0e10cSrcweir #include <vcl/image.hxx>
26cdf0e10cSrcweir
27*37fee4fdSAndre Fischer
287a32b0c8SAndre Fischer namespace sd { namespace sidebar {
29cdf0e10cSrcweir
30cdf0e10cSrcweir
PreviewValueSet(::Window * pParent)317a32b0c8SAndre Fischer PreviewValueSet::PreviewValueSet (::Window* pParent)
327a32b0c8SAndre Fischer : ValueSet (pParent, WB_TABSTOP),
33cdf0e10cSrcweir maPreviewSize(10,10),
34cdf0e10cSrcweir mnBorderWidth(3),
35cdf0e10cSrcweir mnBorderHeight(3),
36cdf0e10cSrcweir mnMaxColumnCount(-1)
37cdf0e10cSrcweir {
38cdf0e10cSrcweir SetStyle (
39cdf0e10cSrcweir GetStyle()
40cdf0e10cSrcweir & ~(WB_ITEMBORDER)// | WB_MENUSTYLEVALUESET)
41cdf0e10cSrcweir // | WB_FLATVALUESET);
42cdf0e10cSrcweir );
43cdf0e10cSrcweir SetColCount(2);
44cdf0e10cSrcweir SetExtraSpacing (2);
45cdf0e10cSrcweir }
46cdf0e10cSrcweir
47cdf0e10cSrcweir
48cdf0e10cSrcweir
49cdf0e10cSrcweir
~PreviewValueSet(void)50cdf0e10cSrcweir PreviewValueSet::~PreviewValueSet (void)
51cdf0e10cSrcweir {
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
54cdf0e10cSrcweir
55cdf0e10cSrcweir
56cdf0e10cSrcweir
SetPreviewSize(const Size & rSize)57cdf0e10cSrcweir void PreviewValueSet::SetPreviewSize (const Size& rSize)
58cdf0e10cSrcweir {
59cdf0e10cSrcweir maPreviewSize = rSize;
60cdf0e10cSrcweir }
61cdf0e10cSrcweir
62cdf0e10cSrcweir
63cdf0e10cSrcweir
64cdf0e10cSrcweir
SetRightMouseClickHandler(const Link & rLink)65cdf0e10cSrcweir void PreviewValueSet::SetRightMouseClickHandler (const Link& rLink)
66cdf0e10cSrcweir {
67cdf0e10cSrcweir maRightMouseClickHandler = rLink;
68cdf0e10cSrcweir }
69cdf0e10cSrcweir
70cdf0e10cSrcweir
71cdf0e10cSrcweir
72cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rEvent)73cdf0e10cSrcweir void PreviewValueSet::MouseButtonDown (const MouseEvent& rEvent)
74cdf0e10cSrcweir {
75cdf0e10cSrcweir if (rEvent.IsRight())
76cdf0e10cSrcweir maRightMouseClickHandler.Call(reinterpret_cast<void*>(
77cdf0e10cSrcweir &const_cast<MouseEvent&>(rEvent)));
78cdf0e10cSrcweir else
79cdf0e10cSrcweir ValueSet::MouseButtonDown (rEvent);
80cdf0e10cSrcweir
81cdf0e10cSrcweir }
82cdf0e10cSrcweir
83cdf0e10cSrcweir
84cdf0e10cSrcweir
85cdf0e10cSrcweir
Resize(void)86cdf0e10cSrcweir void PreviewValueSet::Resize (void)
87cdf0e10cSrcweir {
88cdf0e10cSrcweir ValueSet::Resize ();
89cdf0e10cSrcweir
90cdf0e10cSrcweir Size aWindowSize (GetOutputSizePixel());
91cdf0e10cSrcweir if (aWindowSize.Width()>0 && aWindowSize.Height()>0)
92cdf0e10cSrcweir {
93cdf0e10cSrcweir Rearrange();
94cdf0e10cSrcweir }
95cdf0e10cSrcweir }
96cdf0e10cSrcweir
97cdf0e10cSrcweir
98cdf0e10cSrcweir
99cdf0e10cSrcweir
Rearrange(bool bForceRequestResize)100cdf0e10cSrcweir void PreviewValueSet::Rearrange (bool bForceRequestResize)
101cdf0e10cSrcweir {
102cdf0e10cSrcweir sal_uInt16 nNewColumnCount (CalculateColumnCount (
103cdf0e10cSrcweir GetOutputSizePixel().Width()));
104cdf0e10cSrcweir sal_uInt16 nNewRowCount (CalculateRowCount (nNewColumnCount));
105cdf0e10cSrcweir
106cdf0e10cSrcweir SetColCount(nNewColumnCount);
107cdf0e10cSrcweir SetLineCount(nNewRowCount);
108cdf0e10cSrcweir }
109cdf0e10cSrcweir
110cdf0e10cSrcweir
111cdf0e10cSrcweir
112cdf0e10cSrcweir
CalculateColumnCount(int nWidth) const113cdf0e10cSrcweir sal_uInt16 PreviewValueSet::CalculateColumnCount (int nWidth) const
114cdf0e10cSrcweir {
115cdf0e10cSrcweir int nColumnCount = 0;
116cdf0e10cSrcweir if (nWidth > 0)
117cdf0e10cSrcweir {
118cdf0e10cSrcweir nColumnCount = nWidth / (maPreviewSize.Width() + 2*mnBorderWidth);
119cdf0e10cSrcweir if (nColumnCount < 1)
120cdf0e10cSrcweir nColumnCount = 1;
121cdf0e10cSrcweir else if (mnMaxColumnCount>0 && nColumnCount>mnMaxColumnCount)
122cdf0e10cSrcweir nColumnCount = mnMaxColumnCount;
123cdf0e10cSrcweir }
124cdf0e10cSrcweir return (sal_uInt16)nColumnCount;
125cdf0e10cSrcweir }
126cdf0e10cSrcweir
127cdf0e10cSrcweir
128cdf0e10cSrcweir
129cdf0e10cSrcweir
CalculateRowCount(sal_uInt16 nColumnCount) const130cdf0e10cSrcweir sal_uInt16 PreviewValueSet::CalculateRowCount (sal_uInt16 nColumnCount) const
131cdf0e10cSrcweir {
132cdf0e10cSrcweir int nRowCount = 0;
133cdf0e10cSrcweir int nItemCount = GetItemCount();
134cdf0e10cSrcweir if (nColumnCount > 0)
135cdf0e10cSrcweir {
136cdf0e10cSrcweir nRowCount = (nItemCount+nColumnCount-1) / nColumnCount;
137cdf0e10cSrcweir if (nRowCount < 1)
138cdf0e10cSrcweir nRowCount = 1;
139cdf0e10cSrcweir }
140cdf0e10cSrcweir
141cdf0e10cSrcweir return (sal_uInt16)nRowCount;
142cdf0e10cSrcweir }
143cdf0e10cSrcweir
144cdf0e10cSrcweir
145cdf0e10cSrcweir
146cdf0e10cSrcweir
GetPreferredWidth(sal_Int32 nHeight)147cdf0e10cSrcweir sal_Int32 PreviewValueSet::GetPreferredWidth (sal_Int32 nHeight)
148cdf0e10cSrcweir {
149cdf0e10cSrcweir int nPreferredWidth (maPreviewSize.Width() + 2*mnBorderWidth);
150cdf0e10cSrcweir
151cdf0e10cSrcweir // Get height of each row.
152cdf0e10cSrcweir int nItemHeight (maPreviewSize.Height() + 2*mnBorderHeight);
153cdf0e10cSrcweir
154cdf0e10cSrcweir // Calculate the row- and column count and from the later the preferred
155cdf0e10cSrcweir // width.
156cdf0e10cSrcweir int nRowCount = nHeight / nItemHeight;
157cdf0e10cSrcweir if (nRowCount > 0)
158cdf0e10cSrcweir {
159cdf0e10cSrcweir int nColumnCount = (GetItemCount()+nRowCount-1) / nRowCount;
160cdf0e10cSrcweir if (nColumnCount > 0)
161cdf0e10cSrcweir nPreferredWidth = (maPreviewSize.Width() + 2*mnBorderWidth)
162cdf0e10cSrcweir * nColumnCount;
163cdf0e10cSrcweir }
164cdf0e10cSrcweir
165cdf0e10cSrcweir return nPreferredWidth;
166cdf0e10cSrcweir }
167cdf0e10cSrcweir
168cdf0e10cSrcweir
169cdf0e10cSrcweir
170cdf0e10cSrcweir
GetPreferredHeight(sal_Int32 nWidth)171cdf0e10cSrcweir sal_Int32 PreviewValueSet::GetPreferredHeight (sal_Int32 nWidth)
172cdf0e10cSrcweir {
173cdf0e10cSrcweir int nRowCount (CalculateRowCount(CalculateColumnCount(nWidth)));
174cdf0e10cSrcweir int nItemHeight (maPreviewSize.Height());
175cdf0e10cSrcweir
176cdf0e10cSrcweir return nRowCount * (nItemHeight + 2*mnBorderHeight);
177cdf0e10cSrcweir }
178cdf0e10cSrcweir
179cdf0e10cSrcweir
180cdf0e10cSrcweir
181cdf0e10cSrcweir
1827a32b0c8SAndre Fischer } } // end of namespace sd::sidebar
183