1ff0525f2SOliver-Rainer Wittmann /**************************************************************
2*344957f7Smseidel *
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*344957f7Smseidel *
11ff0525f2SOliver-Rainer Wittmann * http://www.apache.org/licenses/LICENSE-2.0
12*344957f7Smseidel *
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*344957f7Smseidel *
20ff0525f2SOliver-Rainer Wittmann *************************************************************/
21ff0525f2SOliver-Rainer Wittmann
22*344957f7Smseidel
23*344957f7Smseidel
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*344957f7Smseidel Window* pParent,
45*344957f7Smseidel PagePropertyPanel& rPanel,
46*344957f7Smseidel const Paper ePaper,
47*344957f7Smseidel const sal_Bool bLandscape,
48*344957f7Smseidel const FieldUnit eFUnit )
49*344957f7Smseidel : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_SIZE) )
50*344957f7Smseidel , mpSizeValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::TEXT_TEXT, this, SW_RES(VS_SIZE) ) )
51*344957f7Smseidel , maMoreButton( this, SW_RES(CB_SIZE_MORE) )
52*344957f7Smseidel , maWidthHeightField( this, SW_RES(FLD_WIDTH_HEIGHT) )
53*344957f7Smseidel , mePaper( ePaper )
54*344957f7Smseidel , maPaperList()
55*344957f7Smseidel , mrPagePropPanel(rPanel)
56ff0525f2SOliver-Rainer Wittmann {
57*344957f7Smseidel maWidthHeightField.Hide();
58*344957f7Smseidel SetFieldUnit( maWidthHeightField, eFUnit );
59*344957f7Smseidel
60*344957f7Smseidel maPaperList.push_back( PAPER_A3 );
61*344957f7Smseidel maPaperList.push_back( PAPER_A4 );
62*344957f7Smseidel maPaperList.push_back( PAPER_A5 );
63*344957f7Smseidel maPaperList.push_back( PAPER_B4_ISO );
64*344957f7Smseidel maPaperList.push_back( PAPER_B5_ISO );
65*344957f7Smseidel maPaperList.push_back( PAPER_ENV_C5 );
66*344957f7Smseidel maPaperList.push_back( PAPER_LETTER );
67*344957f7Smseidel maPaperList.push_back( PAPER_LEGAL );
68*344957f7Smseidel
69*344957f7Smseidel mpSizeValueSet->SetStyle( mpSizeValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT );
70*344957f7Smseidel mpSizeValueSet->SetColor( GetSettings().GetStyleSettings().GetMenuColor() );
71*344957f7Smseidel
72*344957f7Smseidel sal_uInt16 nSelectedItem = 0;
73*344957f7Smseidel {
74*344957f7Smseidel XubString aMetricStr;
75*344957f7Smseidel {
76*344957f7Smseidel const XubString aText = maWidthHeightField.GetText();
77*344957f7Smseidel for (short i = aText.Len() - 1; i >= 0; i--)
78*344957f7Smseidel {
79*344957f7Smseidel xub_Unicode c = aText.GetChar(i);
80*344957f7Smseidel if ( INetMIME::isAlpha(c) || (c == '\'') || (c == '\"') || (c == '%') )
81*344957f7Smseidel {
82*344957f7Smseidel aMetricStr.Insert(c, 0);
83*344957f7Smseidel }
84*344957f7Smseidel else
85*344957f7Smseidel {
86*344957f7Smseidel if (aMetricStr.Len())
87*344957f7Smseidel {
88*344957f7Smseidel break;
89*344957f7Smseidel }
90*344957f7Smseidel }
91*344957f7Smseidel }
92*344957f7Smseidel }
93*344957f7Smseidel
94*344957f7Smseidel const LocaleDataWrapper& localeDataWrapper = maWidthHeightField.GetLocaleDataWrapper();
95*344957f7Smseidel String WidthStr;
96*344957f7Smseidel String HeightStr;
97*344957f7Smseidel String ItemText2;
98*344957f7Smseidel for ( ::std::vector< Paper >::size_type nPaperIdx = 0;
99*344957f7Smseidel nPaperIdx < maPaperList.size();
100*344957f7Smseidel ++nPaperIdx )
101*344957f7Smseidel {
102*344957f7Smseidel Size aPaperSize = SvxPaperInfo::GetPaperSize( maPaperList[ nPaperIdx ] );
103*344957f7Smseidel if ( bLandscape )
104*344957f7Smseidel {
105*344957f7Smseidel Swap( aPaperSize );
106*344957f7Smseidel }
107*344957f7Smseidel maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Width() ), FUNIT_TWIP );
108*344957f7Smseidel WidthStr = localeDataWrapper.getNum(
109*344957f7Smseidel maWidthHeightField.GetValue(),
110*344957f7Smseidel maWidthHeightField.GetDecimalDigits(),
111*344957f7Smseidel maWidthHeightField.IsUseThousandSep(),
112*344957f7Smseidel maWidthHeightField.IsShowTrailingZeros() );
113*344957f7Smseidel
114*344957f7Smseidel maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Height() ), FUNIT_TWIP);
115*344957f7Smseidel HeightStr = localeDataWrapper.getNum(
116*344957f7Smseidel maWidthHeightField.GetValue(),
117*344957f7Smseidel maWidthHeightField.GetDecimalDigits(),
118*344957f7Smseidel maWidthHeightField.IsUseThousandSep(),
119*344957f7Smseidel maWidthHeightField.IsShowTrailingZeros() );
120*344957f7Smseidel
121*344957f7Smseidel ItemText2 = WidthStr;
122*344957f7Smseidel ItemText2 += String::CreateFromAscii(" x ");
123*344957f7Smseidel ItemText2 += HeightStr;
124*344957f7Smseidel ItemText2 += String::CreateFromAscii(" ");
125*344957f7Smseidel ItemText2 += aMetricStr;
126*344957f7Smseidel
127*344957f7Smseidel mpSizeValueSet->AddItem(
128*344957f7Smseidel SvxPaperInfo::GetName( maPaperList[ nPaperIdx ] ),
129*344957f7Smseidel ItemText2,
130*344957f7Smseidel 0 );
131*344957f7Smseidel
132*344957f7Smseidel if ( maPaperList[ nPaperIdx ] == mePaper )
133*344957f7Smseidel {
134*344957f7Smseidel nSelectedItem = nPaperIdx + 1;
135*344957f7Smseidel }
136*344957f7Smseidel }
137*344957f7Smseidel }
138*344957f7Smseidel
139*344957f7Smseidel mpSizeValueSet->SetNoSelection();
140*344957f7Smseidel mpSizeValueSet->SetSelectHdl( LINK(this, PageSizeControl,ImplSizeHdl ) );
141*344957f7Smseidel mpSizeValueSet->Show();
142*344957f7Smseidel
143*344957f7Smseidel mpSizeValueSet->SelectItem( nSelectedItem );
144*344957f7Smseidel mpSizeValueSet->Format();
145*344957f7Smseidel mpSizeValueSet->StartSelection();
146*344957f7Smseidel
147*344957f7Smseidel maMoreButton.SetClickHdl( LINK( this, PageSizeControl, MoreButtonClickHdl_Impl ) );
148*344957f7Smseidel maMoreButton.GrabFocus();
149*344957f7Smseidel
150*344957f7Smseidel FreeResource();
151ff0525f2SOliver-Rainer Wittmann }
152ff0525f2SOliver-Rainer Wittmann
153ff0525f2SOliver-Rainer Wittmann
~PageSizeControl(void)154ff0525f2SOliver-Rainer Wittmann PageSizeControl::~PageSizeControl(void)
155ff0525f2SOliver-Rainer Wittmann {
156*344957f7Smseidel 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*344957f7Smseidel mpSizeValueSet->SetNoSelection();
163*344957f7Smseidel if ( pControl == mpSizeValueSet )
164*344957f7Smseidel {
165*344957f7Smseidel const sal_uInt16 nSelectedPaper = mpSizeValueSet->GetSelectItemId();
166*344957f7Smseidel const Paper ePaper = maPaperList[nSelectedPaper - 1];
167*344957f7Smseidel if ( ePaper != mePaper )
168*344957f7Smseidel {
169*344957f7Smseidel mePaper = ePaper;
170*344957f7Smseidel mrPagePropPanel.ExecuteSizeChange( mePaper );
171*344957f7Smseidel }
172*344957f7Smseidel }
173*344957f7Smseidel
174*344957f7Smseidel mrPagePropPanel.ClosePageSizePopup();
175*344957f7Smseidel 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*344957f7Smseidel mrPagePropPanel.GetBindings()->GetDispatcher()->Execute( FN_FORMAT_PAGE_SETTING_DLG, SFX_CALLMODE_ASYNCHRON );
181ff0525f2SOliver-Rainer Wittmann
182*344957f7Smseidel mrPagePropPanel.ClosePageSizePopup();
183*344957f7Smseidel return 0;
184ff0525f2SOliver-Rainer Wittmann }
185ff0525f2SOliver-Rainer Wittmann
186ff0525f2SOliver-Rainer Wittmann
187ff0525f2SOliver-Rainer Wittmann } } // end of namespace sw::sidebar
188ff0525f2SOliver-Rainer Wittmann
189*344957f7Smseidel /* vim: set noet sw=4 ts=4: */
190