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 <vcl/builderfactory.hxx>
11 : #include "LimitBox.hxx"
12 : #include "dbu_qry.hrc"
13 : #include "moduledbu.hxx"
14 :
15 : #define ALL_STRING ModuleRes(STR_QUERY_LIMIT_ALL).toString()
16 : #define ALL_INT -1
17 :
18 : namespace global{
19 :
20 : /// Default values
21 : sal_Int64 aDefLimitAry[] =
22 : {
23 : 5,
24 : 10,
25 : 20,
26 : 50
27 : };
28 :
29 : }
30 :
31 : namespace dbaui
32 : {
33 :
34 :
35 0 : LimitBox::LimitBox( vcl::Window* pParent, WinBits nStyle )
36 0 : : NumericBox( pParent, nStyle )
37 : {
38 0 : SetShowTrailingZeros( false );
39 0 : SetDecimalDigits( 0 );
40 0 : SetMin( -1 );
41 0 : SetMax( SAL_MAX_INT64 );
42 0 : LoadDefaultLimits();
43 :
44 : Size aSize(
45 0 : GetSizePixel().Width(),
46 0 : CalcWindowSizePixel(GetEntryCount() + 1) );
47 0 : SetSizePixel(aSize);
48 0 : }
49 :
50 0 : OUString LimitBox::CreateFieldText( sal_Int64 nValue ) const
51 : {
52 0 : if( nValue == ALL_INT )
53 0 : return ALL_STRING;
54 : else
55 0 : return NumericBox::CreateFieldText( nValue );
56 : }
57 :
58 0 : void LimitBox::Reformat()
59 : {
60 :
61 0 : if( GetText() == ALL_STRING )
62 : {
63 0 : SetValue( ALL_INT );
64 : }
65 : ///Reformat only when text is not All
66 : else
67 : {
68 : ///Not allow user to type in -1
69 0 : if( GetText() == "-1" )
70 : {
71 0 : Undo();
72 : }
73 : else
74 0 : NumericBox::Reformat();
75 : }
76 0 : }
77 :
78 0 : void LimitBox::ReformatAll()
79 : {
80 : ///First entry is All, which do not need numeric reformat
81 0 : if ( GetEntryCount() > 0 )
82 : {
83 0 : RemoveEntryAt( 0 );
84 0 : NumericBox::ReformatAll();
85 0 : InsertValue( ALL_INT, 0);
86 : }
87 : else
88 : {
89 0 : NumericBox::ReformatAll();
90 : }
91 0 : }
92 :
93 0 : Size LimitBox::GetOptimalSize() const
94 : {
95 0 : return CalcBlockSize(10,1);
96 : }
97 :
98 : ///Initialize entries
99 0 : void LimitBox::LoadDefaultLimits()
100 : {
101 0 : InsertValue( ALL_INT );
102 :
103 : const unsigned nSize =
104 0 : sizeof(global::aDefLimitAry)/sizeof(global::aDefLimitAry[0]);
105 0 : for( unsigned nIndex = 0; nIndex< nSize; ++nIndex)
106 : {
107 0 : InsertValue( global::aDefLimitAry[nIndex] );
108 : }
109 0 : }
110 :
111 0 : VCL_BUILDER_FACTORY_ARGS( LimitBox, WB_DROPDOWN | WB_VSCROLL )
112 :
113 36 : } ///dbaui namespace
114 :
115 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|