summaryrefslogtreecommitdiff
path: root/sd/source/ui/sidebar/PreviewValueSet.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/sidebar/PreviewValueSet.cxx')
-rw-r--r--sd/source/ui/sidebar/PreviewValueSet.cxx185
1 files changed, 185 insertions, 0 deletions
diff --git a/sd/source/ui/sidebar/PreviewValueSet.cxx b/sd/source/ui/sidebar/PreviewValueSet.cxx
new file mode 100644
index 000000000000..556073f242e5
--- /dev/null
+++ b/sd/source/ui/sidebar/PreviewValueSet.cxx
@@ -0,0 +1,185 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#include "precompiled_sd.hxx"
+
+#include "PreviewValueSet.hxx"
+#include <vcl/image.hxx>
+
+
+namespace sd { namespace sidebar {
+
+
+PreviewValueSet::PreviewValueSet (::Window* pParent)
+ : ValueSet (pParent, WB_TABSTOP),
+ maPreviewSize(10,10),
+ mnBorderWidth(3),
+ mnBorderHeight(3),
+ mnMaxColumnCount(-1)
+{
+ SetStyle (
+ GetStyle()
+ & ~(WB_ITEMBORDER)// | WB_MENUSTYLEVALUESET)
+ // | WB_FLATVALUESET);
+ );
+ SetColCount(2);
+ SetExtraSpacing (2);
+}
+
+
+
+
+PreviewValueSet::~PreviewValueSet (void)
+{
+}
+
+
+
+
+void PreviewValueSet::SetPreviewSize (const Size& rSize)
+{
+ maPreviewSize = rSize;
+}
+
+
+
+
+void PreviewValueSet::SetRightMouseClickHandler (const Link& rLink)
+{
+ maRightMouseClickHandler = rLink;
+}
+
+
+
+
+void PreviewValueSet::MouseButtonDown (const MouseEvent& rEvent)
+{
+ if (rEvent.IsRight())
+ maRightMouseClickHandler.Call(reinterpret_cast<void*>(
+ &const_cast<MouseEvent&>(rEvent)));
+ else
+ ValueSet::MouseButtonDown (rEvent);
+
+}
+
+
+
+
+void PreviewValueSet::Resize (void)
+{
+ ValueSet::Resize ();
+
+ Size aWindowSize (GetOutputSizePixel());
+ if (aWindowSize.Width()>0 && aWindowSize.Height()>0)
+ {
+ Rearrange();
+ }
+}
+
+
+
+
+void PreviewValueSet::Rearrange (bool bForceRequestResize)
+{
+ sal_uInt16 nOldColumnCount (GetColCount());
+ sal_uInt16 nOldRowCount (GetLineCount());
+
+ sal_uInt16 nNewColumnCount (CalculateColumnCount (
+ GetOutputSizePixel().Width()));
+ sal_uInt16 nNewRowCount (CalculateRowCount (nNewColumnCount));
+
+ SetColCount(nNewColumnCount);
+ SetLineCount(nNewRowCount);
+}
+
+
+
+
+sal_uInt16 PreviewValueSet::CalculateColumnCount (int nWidth) const
+{
+ int nColumnCount = 0;
+ if (nWidth > 0)
+ {
+ nColumnCount = nWidth / (maPreviewSize.Width() + 2*mnBorderWidth);
+ if (nColumnCount < 1)
+ nColumnCount = 1;
+ else if (mnMaxColumnCount>0 && nColumnCount>mnMaxColumnCount)
+ nColumnCount = mnMaxColumnCount;
+ }
+ return (sal_uInt16)nColumnCount;
+}
+
+
+
+
+sal_uInt16 PreviewValueSet::CalculateRowCount (sal_uInt16 nColumnCount) const
+{
+ int nRowCount = 0;
+ int nItemCount = GetItemCount();
+ if (nColumnCount > 0)
+ {
+ nRowCount = (nItemCount+nColumnCount-1) / nColumnCount;
+ if (nRowCount < 1)
+ nRowCount = 1;
+ }
+
+ return (sal_uInt16)nRowCount;
+}
+
+
+
+
+sal_Int32 PreviewValueSet::GetPreferredWidth (sal_Int32 nHeight)
+{
+ int nPreferredWidth (maPreviewSize.Width() + 2*mnBorderWidth);
+
+ // Get height of each row.
+ int nItemHeight (maPreviewSize.Height() + 2*mnBorderHeight);
+
+ // Calculate the row- and column count and from the later the preferred
+ // width.
+ int nRowCount = nHeight / nItemHeight;
+ if (nRowCount > 0)
+ {
+ int nColumnCount = (GetItemCount()+nRowCount-1) / nRowCount;
+ if (nColumnCount > 0)
+ nPreferredWidth = (maPreviewSize.Width() + 2*mnBorderWidth)
+ * nColumnCount;
+ }
+
+ return nPreferredWidth;
+}
+
+
+
+
+sal_Int32 PreviewValueSet::GetPreferredHeight (sal_Int32 nWidth)
+{
+ int nRowCount (CalculateRowCount(CalculateColumnCount(nWidth)));
+ int nItemHeight (maPreviewSize.Height());
+
+ return nRowCount * (nItemHeight + 2*mnBorderHeight);
+}
+
+
+
+
+} } // end of namespace sd::sidebar