Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include "sortkeydlg.hxx"
11 : #include "sortdlg.hxx"
12 : #include <vcl/layout.hxx>
13 :
14 0 : ScSortKeyItem::ScSortKeyItem(vcl::Window* pParent)
15 : {
16 0 : m_pUIBuilder = new VclBuilder(pParent, getUIRootDir(), "modules/scalc/ui/sortkey.ui");
17 :
18 0 : get(m_pFrame, "SortKeyFrame");
19 0 : get(m_pFlSort, "sortft");
20 0 : get(m_pLbSort, "sortlb");
21 0 : get(m_pBtnUp, "up");
22 0 : get(m_pBtnDown, "down");
23 0 : }
24 :
25 0 : long ScSortKeyItem::getItemHeight() const
26 : {
27 0 : return VclContainer::getLayoutRequisition(*m_pFrame).Height();
28 : }
29 :
30 0 : void ScSortKeyItem::DisableField()
31 : {
32 0 : m_pFrame->Disable();
33 0 : }
34 :
35 0 : void ScSortKeyItem::EnableField()
36 : {
37 0 : m_pFrame->Enable();
38 0 : }
39 :
40 0 : ScSortKeyWindow::ScSortKeyWindow(SfxTabPage* pParent, ScSortKeyItems& rSortKeyItems)
41 0 : : mrSortKeyItems(rSortKeyItems)
42 : {
43 0 : pParent->get(m_pBox, "SortKeyWindow");
44 0 : if (!mrSortKeyItems.empty())
45 0 : nItemHeight = mrSortKeyItems.front().getItemHeight();
46 : else
47 : {
48 0 : ScSortKeyItem aTemp(m_pBox);
49 0 : nItemHeight = aTemp.getItemHeight();
50 : }
51 0 : }
52 :
53 0 : ScSortKeyWindow::~ScSortKeyWindow()
54 : {
55 0 : dispose();
56 0 : }
57 :
58 0 : void ScSortKeyWindow::dispose()
59 : {
60 0 : m_pBox.disposeAndClear();
61 0 : mrSortKeyItems.clear();
62 0 : }
63 :
64 0 : void ScSortKeyWindow::AddSortKey( sal_uInt16 nItemNumber )
65 : {
66 0 : ScSortKeyItem* pSortKeyItem = new ScSortKeyItem(m_pBox);
67 :
68 : // Set Sort key number
69 0 : OUString aLine = pSortKeyItem->m_pFlSort->GetText() +
70 0 : OUString::number( nItemNumber );
71 0 : pSortKeyItem->m_pFlSort->SetText( aLine );
72 :
73 0 : mrSortKeyItems.push_back(pSortKeyItem);
74 0 : }
75 :
76 0 : void ScSortKeyWindow::DoScroll(sal_Int32 nNewPos)
77 : {
78 0 : m_pBox->SetPosPixel(Point(0, nNewPos));
79 0 : }
80 :
81 0 : ScSortKeyCtrl::ScSortKeyCtrl(SfxTabPage* pParent, ScSortKeyItems& rItems)
82 : : m_aSortWin(pParent, rItems)
83 0 : , m_rScrolledWindow(*pParent->get<VclScrolledWindow>("SortCriteriaPage"))
84 0 : , m_rVertScroll(m_rScrolledWindow.getVertScrollBar())
85 : {
86 0 : m_rScrolledWindow.setUserManagedScrolling(true);
87 :
88 0 : m_rVertScroll.EnableDrag();
89 0 : m_rVertScroll.Show(m_rScrolledWindow.GetStyle() & WB_VSCROLL);
90 :
91 0 : m_rVertScroll.SetRangeMin( 0 );
92 0 : m_rVertScroll.SetVisibleSize( 0xFFFF );
93 :
94 0 : Link<> aScrollLink = LINK( this, ScSortKeyCtrl, ScrollHdl );
95 0 : m_rVertScroll.SetScrollHdl( aScrollLink );
96 0 : }
97 :
98 0 : void ScSortKeyCtrl::dispose()
99 : {
100 0 : m_aSortWin.dispose();
101 0 : }
102 :
103 0 : void ScSortKeyCtrl::checkAutoVScroll()
104 : {
105 0 : WinBits nBits = m_rScrolledWindow.GetStyle();
106 0 : if (nBits & WB_VSCROLL)
107 0 : return;
108 0 : if (nBits & WB_AUTOVSCROLL)
109 : {
110 0 : bool bShow = m_rVertScroll.GetRangeMax() > m_rVertScroll.GetVisibleSize();
111 0 : if (bShow != m_rVertScroll.IsVisible())
112 0 : m_rVertScroll.Show(bShow);
113 : }
114 : }
115 :
116 0 : void ScSortKeyCtrl::setScrollRange()
117 : {
118 0 : sal_Int32 nScrollOffset = m_aSortWin.GetItemHeight();
119 0 : sal_Int32 nVisibleItems = m_rScrolledWindow.getVisibleChildSize().Height() / nScrollOffset;
120 0 : m_rVertScroll.SetPageSize( nVisibleItems - 1 );
121 0 : m_rVertScroll.SetVisibleSize( nVisibleItems );
122 0 : m_rVertScroll.Scroll();
123 0 : checkAutoVScroll();
124 0 : }
125 :
126 0 : IMPL_LINK( ScSortKeyCtrl, ScrollHdl, ScrollBar*, pScrollBar )
127 : {
128 0 : sal_Int32 nOffset = m_aSortWin.GetItemHeight();
129 0 : nOffset *= pScrollBar->GetThumbPos();
130 0 : m_aSortWin.DoScroll( -nOffset );
131 0 : return 0;
132 : }
133 :
134 0 : void ScSortKeyCtrl::AddSortKey( sal_uInt16 nItem )
135 : {
136 0 : m_rVertScroll.SetRangeMax( nItem );
137 0 : m_rVertScroll.DoScroll( nItem );
138 0 : m_aSortWin.AddSortKey( nItem );
139 0 : checkAutoVScroll();
140 0 : }
141 :
142 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|