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