xref: /trunk/main/sw/source/ui/sidebar/PageSizeControl.cxx (revision d8dff77764cb74143fabc617dc8ee25d946bae78)
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 
23 
24 #include "precompiled_sw.hxx"
25 
26 #include "PageSizeControl.hxx"
27 #include "PagePropertyPanel.hxx"
28 #include "PagePropertyPanel.hrc"
29 
30 #include <cmdid.h>
31 #include <swtypes.hxx>
32 
33 #include <svx/sidebar/ValueSetWithTextControl.hxx>
34 
35 #include <tools/inetmime.hxx>
36 #include <editeng/paperinf.hxx>
37 #include <sfx2/bindings.hxx>
38 #include <sfx2/dispatch.hxx>
39 
40 
41 namespace sw { namespace sidebar {
42 
43 PageSizeControl::PageSizeControl(
44     Window* pParent,
45     PagePropertyPanel& rPanel,
46     const Paper ePaper,
47     const sal_Bool bLandscape,
48     const FieldUnit eFUnit )
49     : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_SIZE) )
50     , mpSizeValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::TEXT_TEXT, this, SW_RES(VS_SIZE) ) )
51     , maMoreButton( this, SW_RES(CB_SIZE_MORE) )
52     , maWidthHeightField( this, SW_RES(FLD_WIDTH_HEIGHT) )
53     , mePaper( ePaper )
54     , maPaperList()
55     , mrPagePropPanel(rPanel)
56 {
57     maWidthHeightField.Hide();
58     SetFieldUnit( maWidthHeightField, eFUnit );
59 
60     maPaperList.push_back( PAPER_A3 );
61     maPaperList.push_back( PAPER_A4 );
62     maPaperList.push_back( PAPER_A5 );
63     maPaperList.push_back( PAPER_B4_ISO );
64     maPaperList.push_back( PAPER_B5_ISO );
65     maPaperList.push_back( PAPER_ENV_C5 );
66     maPaperList.push_back( PAPER_LETTER );
67     maPaperList.push_back( PAPER_LEGAL );
68 
69     mpSizeValueSet->SetStyle( mpSizeValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT );
70     mpSizeValueSet->SetColor( GetSettings().GetStyleSettings().GetMenuColor() );
71 
72     sal_uInt16 nSelectedItem = 0;
73     {
74         XubString aMetricStr;
75         {
76             const XubString aText = maWidthHeightField.GetText();
77             for (short i = aText.Len() - 1; i >= 0; i--)
78             {
79                 xub_Unicode c = aText.GetChar(i);
80                 if ( INetMIME::isAlpha(c) || (c == '\'') || (c == '\"') || (c == '%') )
81                 {
82                     aMetricStr.Insert(c, 0);
83                 }
84                 else
85                 {
86                     if (aMetricStr.Len())
87                     {
88                         break;
89                     }
90                 }
91             }
92         }
93 
94         const LocaleDataWrapper& localeDataWrapper = maWidthHeightField.GetLocaleDataWrapper();
95         String WidthStr;
96         String HeightStr;
97         String ItemText2;
98         for ( ::std::vector< Paper >::size_type nPaperIdx = 0;
99               nPaperIdx < maPaperList.size();
100               ++nPaperIdx )
101         {
102             Size aPaperSize = SvxPaperInfo::GetPaperSize( maPaperList[ nPaperIdx ] );
103             if ( bLandscape )
104             {
105                 Swap( aPaperSize );
106             }
107             maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Width() ), FUNIT_TWIP );
108             WidthStr = localeDataWrapper.getNum(
109                 maWidthHeightField.GetValue(),
110                 maWidthHeightField.GetDecimalDigits(),
111                 maWidthHeightField.IsUseThousandSep(),
112                 maWidthHeightField.IsShowTrailingZeros() );
113 
114             maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Height() ), FUNIT_TWIP);
115             HeightStr = localeDataWrapper.getNum(
116                 maWidthHeightField.GetValue(),
117                 maWidthHeightField.GetDecimalDigits(),
118                 maWidthHeightField.IsUseThousandSep(),
119                 maWidthHeightField.IsShowTrailingZeros() );
120 
121             ItemText2 = WidthStr;
122             ItemText2 += String::CreateFromAscii(" x ");
123             ItemText2 += HeightStr;
124             ItemText2 += String::CreateFromAscii(" ");
125             ItemText2 += aMetricStr;
126 
127             mpSizeValueSet->AddItem(
128                 SvxPaperInfo::GetName( maPaperList[ nPaperIdx ] ),
129                 ItemText2,
130                 0 );
131 
132             if ( maPaperList[ nPaperIdx ] == mePaper )
133             {
134                 nSelectedItem = nPaperIdx + 1;
135             }
136         }
137     }
138 
139     mpSizeValueSet->SetNoSelection();
140     mpSizeValueSet->SetSelectHdl( LINK(this, PageSizeControl,ImplSizeHdl ) );
141     mpSizeValueSet->Show();
142 
143     mpSizeValueSet->SelectItem( nSelectedItem );
144     mpSizeValueSet->Format();
145     mpSizeValueSet->StartSelection();
146 
147     maMoreButton.SetClickHdl( LINK( this, PageSizeControl, MoreButtonClickHdl_Impl ) );
148     maMoreButton.GrabFocus();
149 
150     FreeResource();
151 }
152 
153 
154 PageSizeControl::~PageSizeControl(void)
155 {
156     delete mpSizeValueSet;
157 }
158 
159 
160 IMPL_LINK(PageSizeControl, ImplSizeHdl, void *, pControl)
161 {
162     mpSizeValueSet->SetNoSelection();
163     if ( pControl == mpSizeValueSet )
164     {
165         const sal_uInt16 nSelectedPaper = mpSizeValueSet->GetSelectItemId();
166         const Paper ePaper = maPaperList[nSelectedPaper - 1];
167         if ( ePaper != mePaper )
168         {
169             mePaper = ePaper;
170             mrPagePropPanel.ExecuteSizeChange( mePaper );
171         }
172     }
173 
174     mrPagePropPanel.ClosePageSizePopup();
175     return 0;
176 }
177 
178 IMPL_LINK(PageSizeControl, MoreButtonClickHdl_Impl, void *, EMPTYARG)
179 {
180     mrPagePropPanel.GetBindings()->GetDispatcher()->Execute( FN_FORMAT_PAGE_SETTING_DLG, SFX_CALLMODE_ASYNCHRON );
181 
182     mrPagePropPanel.ClosePageSizePopup();
183     return 0;
184 }
185 
186 
187 } } // end of namespace sw::sidebar
188 
189 /* vim: set noet sw=4 ts=4: */
190