1ff0525f2SOliver-Rainer Wittmann /**************************************************************
2*fb399032Smseidel *
3ff0525f2SOliver-Rainer Wittmann * Licensed to the Apache Software Foundation (ASF) under one
4ff0525f2SOliver-Rainer Wittmann * or more contributor license agreements. See the NOTICE file
5ff0525f2SOliver-Rainer Wittmann * distributed with this work for additional information
6ff0525f2SOliver-Rainer Wittmann * regarding copyright ownership. The ASF licenses this file
7ff0525f2SOliver-Rainer Wittmann * to you under the Apache License, Version 2.0 (the
8ff0525f2SOliver-Rainer Wittmann * "License"); you may not use this file except in compliance
9ff0525f2SOliver-Rainer Wittmann * with the License. You may obtain a copy of the License at
10*fb399032Smseidel *
11ff0525f2SOliver-Rainer Wittmann * http://www.apache.org/licenses/LICENSE-2.0
12*fb399032Smseidel *
13ff0525f2SOliver-Rainer Wittmann * Unless required by applicable law or agreed to in writing,
14ff0525f2SOliver-Rainer Wittmann * software distributed under the License is distributed on an
15ff0525f2SOliver-Rainer Wittmann * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16ff0525f2SOliver-Rainer Wittmann * KIND, either express or implied. See the License for the
17ff0525f2SOliver-Rainer Wittmann * specific language governing permissions and limitations
18ff0525f2SOliver-Rainer Wittmann * under the License.
19*fb399032Smseidel *
20ff0525f2SOliver-Rainer Wittmann *************************************************************/
21ff0525f2SOliver-Rainer Wittmann
22*fb399032Smseidel
23*fb399032Smseidel
24ff0525f2SOliver-Rainer Wittmann #include "precompiled_sw.hxx"
25ff0525f2SOliver-Rainer Wittmann
26ff0525f2SOliver-Rainer Wittmann #include "PageSizeControl.hxx"
27ff0525f2SOliver-Rainer Wittmann #include "PagePropertyPanel.hxx"
28ff0525f2SOliver-Rainer Wittmann #include "PagePropertyPanel.hrc"
29ff0525f2SOliver-Rainer Wittmann
30ff0525f2SOliver-Rainer Wittmann #include <cmdid.h>
31ff0525f2SOliver-Rainer Wittmann #include <swtypes.hxx>
32ff0525f2SOliver-Rainer Wittmann
33ff0525f2SOliver-Rainer Wittmann #include <svx/sidebar/ValueSetWithTextControl.hxx>
34ff0525f2SOliver-Rainer Wittmann
35ff0525f2SOliver-Rainer Wittmann #include <tools/inetmime.hxx>
36f120fe41SAndre Fischer #include <editeng/paperinf.hxx>
37f120fe41SAndre Fischer #include <sfx2/bindings.hxx>
38f120fe41SAndre Fischer #include <sfx2/dispatch.hxx>
39f120fe41SAndre Fischer
40ff0525f2SOliver-Rainer Wittmann
41ff0525f2SOliver-Rainer Wittmann namespace sw { namespace sidebar {
42ff0525f2SOliver-Rainer Wittmann
PageSizeControl(Window * pParent,PagePropertyPanel & rPanel,const Paper ePaper,const sal_Bool bLandscape,const FieldUnit eFUnit)43ff0525f2SOliver-Rainer Wittmann PageSizeControl::PageSizeControl(
44*fb399032Smseidel Window* pParent,
45*fb399032Smseidel PagePropertyPanel& rPanel,
46*fb399032Smseidel const Paper ePaper,
47*fb399032Smseidel const sal_Bool bLandscape,
48*fb399032Smseidel const FieldUnit eFUnit )
49*fb399032Smseidel : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_SIZE) )
50*fb399032Smseidel , mpSizeValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::TEXT_TEXT, this, SW_RES(VS_SIZE) ) )
51*fb399032Smseidel , maMoreButton( this, SW_RES(CB_SIZE_MORE) )
52*fb399032Smseidel , maWidthHeightField( this, SW_RES(FLD_WIDTH_HEIGHT) )
53*fb399032Smseidel , mePaper( ePaper )
54*fb399032Smseidel , maPaperList()
55*fb399032Smseidel , mrPagePropPanel(rPanel)
56ff0525f2SOliver-Rainer Wittmann {
57*fb399032Smseidel maWidthHeightField.Hide();
58*fb399032Smseidel SetFieldUnit( maWidthHeightField, eFUnit );
59*fb399032Smseidel
60*fb399032Smseidel maPaperList.push_back( PAPER_A3 );
61*fb399032Smseidel maPaperList.push_back( PAPER_A4 );
62*fb399032Smseidel maPaperList.push_back( PAPER_A5 );
63*fb399032Smseidel maPaperList.push_back( PAPER_B4_ISO );
64*fb399032Smseidel maPaperList.push_back( PAPER_B5_ISO );
65*fb399032Smseidel maPaperList.push_back( PAPER_ENV_C5 );
66*fb399032Smseidel maPaperList.push_back( PAPER_LETTER );
67*fb399032Smseidel maPaperList.push_back( PAPER_LEGAL );
68*fb399032Smseidel
69*fb399032Smseidel mpSizeValueSet->SetStyle( mpSizeValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT );
70*fb399032Smseidel mpSizeValueSet->SetColor( GetSettings().GetStyleSettings().GetMenuColor() );
71*fb399032Smseidel
72*fb399032Smseidel sal_uInt16 nSelectedItem = 0;
73*fb399032Smseidel {
74*fb399032Smseidel XubString aMetricStr;
75*fb399032Smseidel {
76*fb399032Smseidel const XubString aText = maWidthHeightField.GetText();
77*fb399032Smseidel for (short i = aText.Len() - 1; i >= 0; i--)
78*fb399032Smseidel {
79*fb399032Smseidel xub_Unicode c = aText.GetChar(i);
80*fb399032Smseidel if ( INetMIME::isAlpha(c) || (c == '\'') || (c == '\"') || (c == '%') )
81*fb399032Smseidel {
82*fb399032Smseidel aMetricStr.Insert(c, 0);
83*fb399032Smseidel }
84*fb399032Smseidel else
85*fb399032Smseidel {
86*fb399032Smseidel if (aMetricStr.Len())
87*fb399032Smseidel {
88*fb399032Smseidel break;
89*fb399032Smseidel }
90*fb399032Smseidel }
91*fb399032Smseidel }
92*fb399032Smseidel }
93*fb399032Smseidel
94*fb399032Smseidel const LocaleDataWrapper& localeDataWrapper = maWidthHeightField.GetLocaleDataWrapper();
95*fb399032Smseidel String WidthStr;
96*fb399032Smseidel String HeightStr;
97*fb399032Smseidel String ItemText2;
98*fb399032Smseidel for ( ::std::vector< Paper >::size_type nPaperIdx = 0;
99*fb399032Smseidel nPaperIdx < maPaperList.size();
100*fb399032Smseidel ++nPaperIdx )
101*fb399032Smseidel {
102*fb399032Smseidel Size aPaperSize = SvxPaperInfo::GetPaperSize( maPaperList[ nPaperIdx ] );
103*fb399032Smseidel if ( bLandscape )
104*fb399032Smseidel {
105*fb399032Smseidel Swap( aPaperSize );
106*fb399032Smseidel }
107*fb399032Smseidel maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Width() ), FUNIT_TWIP );
108*fb399032Smseidel WidthStr = localeDataWrapper.getNum(
109*fb399032Smseidel maWidthHeightField.GetValue(),
110*fb399032Smseidel maWidthHeightField.GetDecimalDigits(),
111*fb399032Smseidel maWidthHeightField.IsUseThousandSep(),
112*fb399032Smseidel maWidthHeightField.IsShowTrailingZeros() );
113*fb399032Smseidel
114*fb399032Smseidel maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Height() ), FUNIT_TWIP);
115*fb399032Smseidel HeightStr = localeDataWrapper.getNum(
116*fb399032Smseidel maWidthHeightField.GetValue(),
117*fb399032Smseidel maWidthHeightField.GetDecimalDigits(),
118*fb399032Smseidel maWidthHeightField.IsUseThousandSep(),
119*fb399032Smseidel maWidthHeightField.IsShowTrailingZeros() );
120*fb399032Smseidel
121*fb399032Smseidel ItemText2 = WidthStr;
122*fb399032Smseidel ItemText2 += String::CreateFromAscii(" x ");
123*fb399032Smseidel ItemText2 += HeightStr;
124*fb399032Smseidel ItemText2 += String::CreateFromAscii(" ");
125*fb399032Smseidel ItemText2 += aMetricStr;
126*fb399032Smseidel
127*fb399032Smseidel mpSizeValueSet->AddItem(
128*fb399032Smseidel SvxPaperInfo::GetName( maPaperList[ nPaperIdx ] ),
129*fb399032Smseidel ItemText2,
130*fb399032Smseidel 0 );
131*fb399032Smseidel
132*fb399032Smseidel if ( maPaperList[ nPaperIdx ] == mePaper )
133*fb399032Smseidel {
134*fb399032Smseidel nSelectedItem = nPaperIdx + 1;
135*fb399032Smseidel }
136*fb399032Smseidel }
137*fb399032Smseidel }
138*fb399032Smseidel
139*fb399032Smseidel mpSizeValueSet->SetNoSelection();
140*fb399032Smseidel mpSizeValueSet->SetSelectHdl( LINK(this, PageSizeControl,ImplSizeHdl ) );
141*fb399032Smseidel mpSizeValueSet->Show();
142*fb399032Smseidel
143*fb399032Smseidel mpSizeValueSet->SelectItem( nSelectedItem );
144*fb399032Smseidel mpSizeValueSet->Format();
145*fb399032Smseidel mpSizeValueSet->StartSelection();
146*fb399032Smseidel
147*fb399032Smseidel maMoreButton.SetClickHdl( LINK( this, PageSizeControl, MoreButtonClickHdl_Impl ) );
148*fb399032Smseidel maMoreButton.GrabFocus();
149*fb399032Smseidel
150*fb399032Smseidel FreeResource();
151ff0525f2SOliver-Rainer Wittmann }
152ff0525f2SOliver-Rainer Wittmann
153ff0525f2SOliver-Rainer Wittmann
~PageSizeControl(void)154ff0525f2SOliver-Rainer Wittmann PageSizeControl::~PageSizeControl(void)
155ff0525f2SOliver-Rainer Wittmann {
156*fb399032Smseidel delete mpSizeValueSet;
157ff0525f2SOliver-Rainer Wittmann }
158ff0525f2SOliver-Rainer Wittmann
159ff0525f2SOliver-Rainer Wittmann
IMPL_LINK(PageSizeControl,ImplSizeHdl,void *,pControl)160ff0525f2SOliver-Rainer Wittmann IMPL_LINK(PageSizeControl, ImplSizeHdl, void *, pControl)
161ff0525f2SOliver-Rainer Wittmann {
162*fb399032Smseidel mpSizeValueSet->SetNoSelection();
163*fb399032Smseidel if ( pControl == mpSizeValueSet )
164*fb399032Smseidel {
165*fb399032Smseidel const sal_uInt16 nSelectedPaper = mpSizeValueSet->GetSelectItemId();
166*fb399032Smseidel const Paper ePaper = maPaperList[nSelectedPaper - 1];
167*fb399032Smseidel if ( ePaper != mePaper )
168*fb399032Smseidel {
169*fb399032Smseidel mePaper = ePaper;
170*fb399032Smseidel mrPagePropPanel.ExecuteSizeChange( mePaper );
171*fb399032Smseidel }
172*fb399032Smseidel }
173*fb399032Smseidel
174*fb399032Smseidel mrPagePropPanel.ClosePageSizePopup();
175*fb399032Smseidel return 0;
176ff0525f2SOliver-Rainer Wittmann }
177ff0525f2SOliver-Rainer Wittmann
IMPL_LINK(PageSizeControl,MoreButtonClickHdl_Impl,void *,EMPTYARG)178ff0525f2SOliver-Rainer Wittmann IMPL_LINK(PageSizeControl, MoreButtonClickHdl_Impl, void *, EMPTYARG)
179ff0525f2SOliver-Rainer Wittmann {
180*fb399032Smseidel mrPagePropPanel.GetBindings()->GetDispatcher()->Execute( FN_FORMAT_PAGE_SETTING_DLG, SFX_CALLMODE_ASYNCHRON );
181ff0525f2SOliver-Rainer Wittmann
182*fb399032Smseidel mrPagePropPanel.ClosePageSizePopup();
183*fb399032Smseidel return 0;
184ff0525f2SOliver-Rainer Wittmann }
185ff0525f2SOliver-Rainer Wittmann
186ff0525f2SOliver-Rainer Wittmann
187ff0525f2SOliver-Rainer Wittmann } } // end of namespace sw::sidebar
188ff0525f2SOliver-Rainer Wittmann
189*fb399032Smseidel /* vim: set noet sw=4 ts=4: */
190