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