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