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