1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_sw.hxx" 24 25 #include "swtypes.hxx" 26 #include "swrect.hxx" 27 #include "scroll.hxx" 28 29 #define SCROLL_LINE_SIZE 250 30 31 SwScrollbar::SwScrollbar( Window *pWin, sal_Bool bHoriz ) : 32 ScrollBar( pWin, 33 WinBits( WB_3DLOOK | WB_HIDE | ( bHoriz ? WB_HSCROLL : WB_VSCROLL) ) ), 34 bHori( bHoriz ), 35 bAuto( sal_False ), 36 bThumbEnabled( sal_True ), 37 bVisible(sal_False), 38 bSizeSet(sal_False) 39 { 40 // SSA: --- RTL --- no mirroring for horizontal scrollbars 41 if( bHoriz ) 42 EnableRTL( sal_False ); 43 } 44 45 SwScrollbar::~SwScrollbar() {} 46 47 /*------------------------------------------------------------------------ 48 Beschreibung: wird nach einer Änderung der Dokumentgröße gerufen, um den 49 Range des Scrollbars neu einzustellen. 50 ------------------------------------------------------------------------*/ 51 52 void SwScrollbar::DocSzChgd( const Size &rSize ) 53 { 54 aDocSz = rSize; 55 SetRange( Range( 0, bHori ? rSize.Width() : rSize.Height()) ); 56 const sal_uLong nVisSize = GetVisibleSize(); 57 SetLineSize( SCROLL_LINE_SIZE ); 58 // SetLineSize( nVisSize * 10 / 100 ); 59 SetPageSize( nVisSize * 77 / 100 ); 60 } 61 62 /*------------------------------------------------------------------------ 63 Beschreibung: wird nach einer Veränderung des sichtbaren Ausschnitts 64 gerufen. 65 ------------------------------------------------------------------------*/ 66 67 void SwScrollbar::ViewPortChgd( const Rectangle &rRect ) 68 { 69 long nThumb, nVisible; 70 if( bHori ) 71 { 72 nThumb = rRect.Left(); 73 nVisible = rRect.GetWidth(); 74 } 75 else 76 { 77 nThumb = rRect.Top(); 78 nVisible = rRect.GetHeight(); 79 } 80 81 SetVisibleSize( nVisible ); 82 DocSzChgd(aDocSz); 83 if ( bThumbEnabled ) 84 SetThumbPos( nThumb ); 85 if(bAuto) 86 AutoShow(); 87 } 88 89 /*-----------------10/21/97 02:48pm----------------- 90 91 --------------------------------------------------*/ 92 void SwScrollbar::ExtendedShow( sal_Bool bSet ) 93 { 94 bVisible = bSet; 95 if( (!bSet || !bAuto) && IsUpdateMode() && bSizeSet) 96 ScrollBar::Show(bSet); 97 } 98 99 /*-----------------10/21/97 03:23pm----------------- 100 101 --------------------------------------------------*/ 102 void SwScrollbar::SetPosSizePixel( const Point& rNewPos, const Size& rNewSize ) 103 { 104 ScrollBar::SetPosSizePixel(rNewPos, rNewSize); 105 bSizeSet = sal_True; 106 if(bVisible) 107 ExtendedShow(); 108 109 } 110 111 /*-----------------14.04.98 11:38------------------- 112 113 --------------------------------------------------*/ 114 void SwScrollbar::SetAuto(sal_Bool bSet) 115 { 116 if(bAuto != bSet) 117 { 118 bAuto = bSet; 119 120 // automatisch versteckt - dann anzeigen 121 if(!bAuto && bVisible && !ScrollBar::IsVisible()) 122 ExtendedShow(sal_True); 123 else if(bAuto) 124 AutoShow(); // oder automatisch verstecken 125 } 126 } 127 /*-----------------14.04.98 11:43------------------- 128 129 --------------------------------------------------*/ 130 void SwScrollbar::AutoShow() 131 { 132 long nVis = GetVisibleSize(); 133 long nLen = GetRange().Len(); 134 { 135 if( nVis >= nLen - 1) 136 { 137 if(ScrollBar::IsVisible()) 138 ScrollBar::Show(sal_False); 139 } 140 else if ( !ScrollBar::IsVisible() && 141 (!bHori || nVis) ) // Optimierung für Browser. 142 // Horizontaler Scrollbar per default aus. 143 { 144 ScrollBar::Show(sal_True); 145 } 146 } 147 } 148 149 /* vim: set noet sw=4 ts=4: */ 150