12ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
32ee96f1cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
42ee96f1cSAndrew Rist * or more contributor license agreements. See the NOTICE file
52ee96f1cSAndrew Rist * distributed with this work for additional information
62ee96f1cSAndrew Rist * regarding copyright ownership. The ASF licenses this file
72ee96f1cSAndrew Rist * to you under the Apache License, Version 2.0 (the
82ee96f1cSAndrew Rist * "License"); you may not use this file except in compliance
92ee96f1cSAndrew Rist * with the License. You may obtain a copy of the License at
102ee96f1cSAndrew Rist *
112ee96f1cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
122ee96f1cSAndrew Rist *
132ee96f1cSAndrew Rist * Unless required by applicable law or agreed to in writing,
142ee96f1cSAndrew Rist * software distributed under the License is distributed on an
152ee96f1cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
162ee96f1cSAndrew Rist * KIND, either express or implied. See the License for the
172ee96f1cSAndrew Rist * specific language governing permissions and limitations
182ee96f1cSAndrew Rist * under the License.
192ee96f1cSAndrew Rist *
202ee96f1cSAndrew Rist *************************************************************/
212ee96f1cSAndrew Rist
222ee96f1cSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cui.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir // include ---------------------------------------------------------------
28cdf0e10cSrcweir #include <tools/shl.hxx>
29cdf0e10cSrcweir #include <tools/urlobj.hxx>
30cdf0e10cSrcweir #include <vcl/msgbox.hxx>
31cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
32cdf0e10cSrcweir #include <sfx2/app.hxx>
33cdf0e10cSrcweir #include <sfx2/module.hxx>
34cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx>
35cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
36cdf0e10cSrcweir
37cdf0e10cSrcweir #define _SVX_TPHATCH_CXX
38cdf0e10cSrcweir
39cdf0e10cSrcweir #include <cuires.hrc>
40cdf0e10cSrcweir #include "tabarea.hrc"
41cdf0e10cSrcweir //#include "dlgname.hrc"
42cdf0e10cSrcweir #include "helpid.hrc"
43cdf0e10cSrcweir #include "svx/xattr.hxx"
44cdf0e10cSrcweir #include <svx/xpool.hxx>
45cdf0e10cSrcweir #include <svx/xtable.hxx>
46cdf0e10cSrcweir #include "svx/drawitem.hxx"
47cdf0e10cSrcweir #include "cuitabarea.hxx"
48cdf0e10cSrcweir #include "defdlgname.hxx" //CHINA001 #include "dlgname.hxx"
49cdf0e10cSrcweir #include <svx/svxdlg.hxx> //CHINA001
50cdf0e10cSrcweir #include <dialmgr.hxx>
51cdf0e10cSrcweir #include "svx/dlgutil.hxx"
52cdf0e10cSrcweir #include <svx/dialmgr.hxx>
53cdf0e10cSrcweir #include "paragrph.hrc"
54cdf0e10cSrcweir #include <svx/dialogs.hrc>
55cdf0e10cSrcweir
56cdf0e10cSrcweir #define DLGWIN this->GetParent()->GetParent()
57cdf0e10cSrcweir
58cdf0e10cSrcweir #define BITMAP_WIDTH 32
59cdf0e10cSrcweir #define BITMAP_HEIGHT 12
60cdf0e10cSrcweir
61cdf0e10cSrcweir /*************************************************************************
62cdf0e10cSrcweir |*
63cdf0e10cSrcweir |* Dialog zum Aendern und Definieren der Schraffuren
64cdf0e10cSrcweir |*
65cdf0e10cSrcweir \************************************************************************/
66cdf0e10cSrcweir
SvxHatchTabPage(Window * pParent,const SfxItemSet & rInAttrs)67cdf0e10cSrcweir SvxHatchTabPage::SvxHatchTabPage
68cdf0e10cSrcweir (
69cdf0e10cSrcweir Window* pParent,
70cdf0e10cSrcweir const SfxItemSet& rInAttrs
71cdf0e10cSrcweir ) :
72cdf0e10cSrcweir
73cdf0e10cSrcweir SvxTabPage ( pParent, CUI_RES( RID_SVXPAGE_HATCH ), rInAttrs ),
74cdf0e10cSrcweir
75cdf0e10cSrcweir aFtDistance ( this, CUI_RES( FT_LINE_DISTANCE ) ),
76cdf0e10cSrcweir aMtrDistance ( this, CUI_RES( MTR_FLD_DISTANCE ) ),
77cdf0e10cSrcweir aFtAngle ( this, CUI_RES( FT_LINE_ANGLE ) ),
78cdf0e10cSrcweir aMtrAngle ( this, CUI_RES( MTR_FLD_ANGLE ) ),
79cdf0e10cSrcweir aCtlAngle ( this, CUI_RES( CTL_ANGLE ),
80cdf0e10cSrcweir RP_RB, 200, 80, CS_ANGLE ),
81cdf0e10cSrcweir aFlProp ( this, CUI_RES( FL_PROP ) ),
82cdf0e10cSrcweir aFtLineType ( this, CUI_RES( FT_LINE_TYPE ) ),
83cdf0e10cSrcweir aLbLineType ( this, CUI_RES( LB_LINE_TYPE ) ),
84cdf0e10cSrcweir aFtLineColor ( this, CUI_RES( FT_LINE_COLOR ) ),
85cdf0e10cSrcweir aLbLineColor ( this, CUI_RES( LB_LINE_COLOR ) ),
86cdf0e10cSrcweir aLbHatchings ( this, CUI_RES( LB_HATCHINGS ) ),
87cdf0e10cSrcweir aCtlPreview ( this, CUI_RES( CTL_PREVIEW ) ),
88cdf0e10cSrcweir aBtnAdd ( this, CUI_RES( BTN_ADD ) ),
89cdf0e10cSrcweir aBtnModify ( this, CUI_RES( BTN_MODIFY ) ),
90cdf0e10cSrcweir aBtnDelete ( this, CUI_RES( BTN_DELETE ) ),
91cdf0e10cSrcweir aBtnLoad ( this, CUI_RES( BTN_LOAD ) ),
92cdf0e10cSrcweir aBtnSave ( this, CUI_RES( BTN_SAVE ) ),
93cdf0e10cSrcweir
94cdf0e10cSrcweir rOutAttrs ( rInAttrs ),
95c7be74b1SArmin Le Grand maColorTab(),
96c7be74b1SArmin Le Grand maHatchingList(),
97cdf0e10cSrcweir
98cdf0e10cSrcweir pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ),
99cdf0e10cSrcweir aXFStyleItem ( XFILL_HATCH ),
100cdf0e10cSrcweir aXHatchItem ( String(), XHatch() ),
101cdf0e10cSrcweir aXFillAttr ( pXPool ),
102cdf0e10cSrcweir rXFSet ( aXFillAttr.GetItemSet() )
103cdf0e10cSrcweir
104cdf0e10cSrcweir {
105cdf0e10cSrcweir aBtnLoad.SetModeImage( Image( CUI_RES( RID_SVXIMG_LOAD_H ) ), BMP_COLOR_HIGHCONTRAST );
106cdf0e10cSrcweir aBtnSave.SetModeImage( Image( CUI_RES( RID_SVXIMG_SAVE_H ) ), BMP_COLOR_HIGHCONTRAST );
107cdf0e10cSrcweir
108cdf0e10cSrcweir FreeResource();
109cdf0e10cSrcweir
110cdf0e10cSrcweir // diese Page braucht ExchangeSupport
111cdf0e10cSrcweir SetExchangeSupport();
112cdf0e10cSrcweir
113cdf0e10cSrcweir // Metrik einstellen
114cdf0e10cSrcweir FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
115cdf0e10cSrcweir
116cdf0e10cSrcweir switch ( eFUnit )
117cdf0e10cSrcweir {
118cdf0e10cSrcweir case FUNIT_M:
119cdf0e10cSrcweir case FUNIT_KM:
120cdf0e10cSrcweir eFUnit = FUNIT_MM;
121cdf0e10cSrcweir break;
122cdf0e10cSrcweir default: ;//prevent warning
123cdf0e10cSrcweir }
124cdf0e10cSrcweir SetFieldUnit( aMtrDistance, eFUnit );
125cdf0e10cSrcweir
126cdf0e10cSrcweir // PoolUnit ermitteln
127cdf0e10cSrcweir SfxItemPool* pPool = rOutAttrs.GetPool();
128cdf0e10cSrcweir DBG_ASSERT( pPool, "Wo ist der Pool?" );
129cdf0e10cSrcweir ePoolUnit = pPool->GetMetric( SID_ATTR_FILL_HATCH );
130cdf0e10cSrcweir
131cdf0e10cSrcweir // Setzen des Output-Devices
132cdf0e10cSrcweir rXFSet.Put( aXFStyleItem );
133cdf0e10cSrcweir rXFSet.Put( aXHatchItem );
134cdf0e10cSrcweir aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
135cdf0e10cSrcweir
136cdf0e10cSrcweir aLbHatchings.SetSelectHdl( LINK( this, SvxHatchTabPage, ChangeHatchHdl_Impl ) );
137cdf0e10cSrcweir
138cdf0e10cSrcweir Link aLink = LINK( this, SvxHatchTabPage, ModifiedHdl_Impl );
139cdf0e10cSrcweir aMtrDistance.SetModifyHdl( aLink );
140cdf0e10cSrcweir aMtrAngle.SetModifyHdl( aLink );
141cdf0e10cSrcweir aLbLineType.SetSelectHdl( aLink );
142cdf0e10cSrcweir aLbLineColor.SetSelectHdl( aLink );
143cdf0e10cSrcweir
144cdf0e10cSrcweir aBtnAdd.SetClickHdl( LINK( this, SvxHatchTabPage, ClickAddHdl_Impl ) );
145cdf0e10cSrcweir aBtnModify.SetClickHdl(
146cdf0e10cSrcweir LINK( this, SvxHatchTabPage, ClickModifyHdl_Impl ) );
147cdf0e10cSrcweir aBtnDelete.SetClickHdl(
148cdf0e10cSrcweir LINK( this, SvxHatchTabPage, ClickDeleteHdl_Impl ) );
149cdf0e10cSrcweir aBtnLoad.SetClickHdl( LINK( this, SvxHatchTabPage, ClickLoadHdl_Impl ) );
150cdf0e10cSrcweir aBtnSave.SetClickHdl( LINK( this, SvxHatchTabPage, ClickSaveHdl_Impl ) );
151cdf0e10cSrcweir
152cdf0e10cSrcweir aCtlPreview.SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
153cdf0e10cSrcweir
154cdf0e10cSrcweir aCtlPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
155cdf0e10cSrcweir aLbHatchings.SetAccessibleName( String(CUI_RES(STR_LB_HATCHINGSTYLE)) );
156cdf0e10cSrcweir aCtlAngle.SetAccessibleRelationMemberOf( &aFlProp );
157cdf0e10cSrcweir aLbHatchings.SetAccessibleRelationMemberOf( &aFlProp );
158cdf0e10cSrcweir aBtnAdd.SetAccessibleRelationMemberOf( &aFlProp );
159cdf0e10cSrcweir aBtnModify.SetAccessibleRelationMemberOf( &aFlProp );
160cdf0e10cSrcweir aBtnDelete.SetAccessibleRelationMemberOf( &aFlProp );
161cdf0e10cSrcweir aLbHatchings.SetAccessibleRelationLabeledBy(&aLbHatchings);
162cdf0e10cSrcweir }
163cdf0e10cSrcweir
164cdf0e10cSrcweir // -----------------------------------------------------------------------
165cdf0e10cSrcweir
Construct()166cdf0e10cSrcweir void SvxHatchTabPage::Construct()
167cdf0e10cSrcweir {
168cdf0e10cSrcweir // Farbtabelle
169c7be74b1SArmin Le Grand aLbLineColor.Fill( maColorTab );
170cdf0e10cSrcweir
171cdf0e10cSrcweir // Schraffurentabelle
172c7be74b1SArmin Le Grand aLbHatchings.Fill( maHatchingList );
173cdf0e10cSrcweir }
174cdf0e10cSrcweir
175cdf0e10cSrcweir // -----------------------------------------------------------------------
176cdf0e10cSrcweir
ActivatePage(const SfxItemSet & rSet)177cdf0e10cSrcweir void SvxHatchTabPage::ActivatePage( const SfxItemSet& rSet )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir sal_uInt16 nPos;
180cdf0e10cSrcweir sal_uInt16 nCount;
181cdf0e10cSrcweir
182cdf0e10cSrcweir if( *pDlgType == 0 ) // Flaechen-Dialog
183cdf0e10cSrcweir {
184cdf0e10cSrcweir *pbAreaTP = sal_False;
185cdf0e10cSrcweir
186c7be74b1SArmin Le Grand if( maColorTab.get() )
187cdf0e10cSrcweir {
188cdf0e10cSrcweir // ColorTable
189cdf0e10cSrcweir if( *pnColorTableState & CT_CHANGED ||
190cdf0e10cSrcweir *pnColorTableState & CT_MODIFIED )
191cdf0e10cSrcweir {
192cdf0e10cSrcweir if( *pnColorTableState & CT_CHANGED )
193c7be74b1SArmin Le Grand maColorTab = ( (SvxAreaTabDialog*) DLGWIN )->GetNewColorTable();
194cdf0e10cSrcweir
195cdf0e10cSrcweir // LbLineColor
196cdf0e10cSrcweir nPos = aLbLineColor.GetSelectEntryPos();
197cdf0e10cSrcweir aLbLineColor.Clear();
198c7be74b1SArmin Le Grand aLbLineColor.Fill( maColorTab );
199cdf0e10cSrcweir nCount = aLbLineColor.GetEntryCount();
200cdf0e10cSrcweir if( nCount == 0 )
201cdf0e10cSrcweir ; // Dieser Fall sollte nicht auftreten
202cdf0e10cSrcweir else if( nCount <= nPos )
203cdf0e10cSrcweir aLbLineColor.SelectEntryPos( 0 );
204cdf0e10cSrcweir else
205cdf0e10cSrcweir aLbLineColor.SelectEntryPos( nPos );
206cdf0e10cSrcweir
207cdf0e10cSrcweir ModifiedHdl_Impl( this );
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
210cdf0e10cSrcweir // Ermitteln (evtl. abschneiden) des Namens und in
211cdf0e10cSrcweir // der GroupBox darstellen
212cdf0e10cSrcweir String aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
213c7be74b1SArmin Le Grand INetURLObject aURL( maHatchingList->GetPath() );
214cdf0e10cSrcweir
215c7be74b1SArmin Le Grand aURL.Append( maHatchingList->GetName() );
216cdf0e10cSrcweir DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
217cdf0e10cSrcweir
218cdf0e10cSrcweir if ( aURL.getBase().getLength() > 18 )
219cdf0e10cSrcweir {
220cdf0e10cSrcweir aString += String(aURL.getBase()).Copy( 0, 15 );
221cdf0e10cSrcweir aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
222cdf0e10cSrcweir }
223cdf0e10cSrcweir else
224cdf0e10cSrcweir aString += String(aURL.getBase());
225cdf0e10cSrcweir
226cdf0e10cSrcweir if( *pPageType == PT_HATCH && *pPos != LISTBOX_ENTRY_NOTFOUND )
227cdf0e10cSrcweir {
228cdf0e10cSrcweir aLbHatchings.SelectEntryPos( *pPos );
229cdf0e10cSrcweir }
230cdf0e10cSrcweir // Farben koennten geloescht worden sein
231cdf0e10cSrcweir ChangeHatchHdl_Impl( this );
232cdf0e10cSrcweir
233cdf0e10cSrcweir *pPageType = PT_HATCH;
234cdf0e10cSrcweir *pPos = LISTBOX_ENTRY_NOTFOUND;
235cdf0e10cSrcweir }
236cdf0e10cSrcweir }
237cdf0e10cSrcweir
238cdf0e10cSrcweir rXFSet.Put ( ( XFillColorItem& ) rSet.Get(XATTR_FILLCOLOR) );
239cdf0e10cSrcweir rXFSet.Put ( ( XFillBackgroundItem&)rSet.Get(XATTR_FILLBACKGROUND) );
240cdf0e10cSrcweir aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
241cdf0e10cSrcweir aCtlPreview.Invalidate();
242cdf0e10cSrcweir }
243cdf0e10cSrcweir
244cdf0e10cSrcweir // -----------------------------------------------------------------------
245cdf0e10cSrcweir
DeactivatePage(SfxItemSet * _pSet)246cdf0e10cSrcweir int SvxHatchTabPage::DeactivatePage( SfxItemSet* _pSet )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir if ( CheckChanges_Impl() == -1L )
249cdf0e10cSrcweir return KEEP_PAGE;
250cdf0e10cSrcweir
251cdf0e10cSrcweir if( _pSet )
252cdf0e10cSrcweir FillItemSet( *_pSet );
253cdf0e10cSrcweir
254cdf0e10cSrcweir return LEAVE_PAGE;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
257cdf0e10cSrcweir // -----------------------------------------------------------------------
258cdf0e10cSrcweir
CheckChanges_Impl()259cdf0e10cSrcweir long SvxHatchTabPage::CheckChanges_Impl()
260cdf0e10cSrcweir {
261cdf0e10cSrcweir if( aMtrDistance.GetText() != aMtrDistance.GetSavedValue() ||
262cdf0e10cSrcweir aMtrAngle.GetText() != aMtrAngle.GetSavedValue() ||
263cdf0e10cSrcweir aLbLineType.GetSelectEntryPos() != aLbLineType.GetSavedValue() ||
264cdf0e10cSrcweir aLbLineColor.GetSelectEntryPos() != aLbLineColor.GetSavedValue() ||
265cdf0e10cSrcweir aLbHatchings.GetSelectEntryPos() != aLbHatchings.GetSavedValue() )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir ResMgr& rMgr = CUI_MGR();
268cdf0e10cSrcweir Image aWarningBoxImage = WarningBox::GetStandardImage();
269cdf0e10cSrcweir SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
270cdf0e10cSrcweir DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
271cdf0e10cSrcweir AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( DLGWIN, RID_SVXDLG_MESSBOX,
272cdf0e10cSrcweir SVX_RESSTR( RID_SVXSTR_HATCH ),
273cdf0e10cSrcweir CUI_RESSTR( RID_SVXSTR_ASK_CHANGE_HATCH ),
274cdf0e10cSrcweir &aWarningBoxImage );
275cdf0e10cSrcweir DBG_ASSERT(aMessDlg, "Dialogdiet fail!");//CHINA001
276cdf0e10cSrcweir aMessDlg->SetButtonText( MESS_BTN_1, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_1,
277cdf0e10cSrcweir String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) );
278cdf0e10cSrcweir aMessDlg->SetButtonText( MESS_BTN_2, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_2,
279cdf0e10cSrcweir String( ResId( RID_SVXSTR_ADD, rMgr ) ) );
280cdf0e10cSrcweir
281cdf0e10cSrcweir short nRet = aMessDlg->Execute(); //CHINA001 short nRet = aMessDlg.Execute();
282cdf0e10cSrcweir
283cdf0e10cSrcweir switch( nRet )
284cdf0e10cSrcweir {
285cdf0e10cSrcweir case RET_BTN_1: // Aendern
286cdf0e10cSrcweir {
287cdf0e10cSrcweir ClickModifyHdl_Impl( this );
288cdf0e10cSrcweir }
289cdf0e10cSrcweir break;
290cdf0e10cSrcweir
291cdf0e10cSrcweir case RET_BTN_2: // Hinzufuegen
292cdf0e10cSrcweir {
293cdf0e10cSrcweir ClickAddHdl_Impl( this );
294cdf0e10cSrcweir }
295cdf0e10cSrcweir break;
296cdf0e10cSrcweir
297cdf0e10cSrcweir case RET_CANCEL:
298cdf0e10cSrcweir // return( -1L ); <-- wuerde die Seite nicht verlassen
299cdf0e10cSrcweir break;
300cdf0e10cSrcweir // return( sal_True ); // Abbruch
301cdf0e10cSrcweir }
302cdf0e10cSrcweir delete aMessDlg; //add by CHINA001
303cdf0e10cSrcweir }
304cdf0e10cSrcweir
305cdf0e10cSrcweir sal_uInt16 nPos = aLbHatchings.GetSelectEntryPos();
306cdf0e10cSrcweir if( nPos != LISTBOX_ENTRY_NOTFOUND )
307cdf0e10cSrcweir *pPos = nPos;
308cdf0e10cSrcweir return 0L;
309cdf0e10cSrcweir }
310cdf0e10cSrcweir
311cdf0e10cSrcweir // -----------------------------------------------------------------------
312cdf0e10cSrcweir
FillItemSet(SfxItemSet & rSet)313cdf0e10cSrcweir sal_Bool SvxHatchTabPage::FillItemSet( SfxItemSet& rSet )
314cdf0e10cSrcweir {
315cdf0e10cSrcweir if( *pDlgType == 0 && *pbAreaTP == sal_False ) // Flaechen-Dialog
316cdf0e10cSrcweir {
317cdf0e10cSrcweir if( *pPageType == PT_HATCH )
318cdf0e10cSrcweir {
319cdf0e10cSrcweir // CheckChanges(); <-- doppelte Abfrage ?
320cdf0e10cSrcweir
321cdf0e10cSrcweir XHatch* pXHatch = NULL;
322cdf0e10cSrcweir String aString;
323cdf0e10cSrcweir sal_uInt16 nPos = aLbHatchings.GetSelectEntryPos();
324cdf0e10cSrcweir if( nPos != LISTBOX_ENTRY_NOTFOUND )
325cdf0e10cSrcweir {
326c7be74b1SArmin Le Grand pXHatch = new XHatch( maHatchingList->GetHatch( nPos )->GetHatch() );
327cdf0e10cSrcweir aString = aLbHatchings.GetSelectEntry();
328cdf0e10cSrcweir }
329cdf0e10cSrcweir // Farbverlauf wurde (unbekannt) uebergeben
330cdf0e10cSrcweir else
331cdf0e10cSrcweir {
332cdf0e10cSrcweir pXHatch = new XHatch( aLbLineColor.GetSelectEntryColor(),
333cdf0e10cSrcweir (XHatchStyle) aLbLineType.GetSelectEntryPos(),
334cdf0e10cSrcweir GetCoreValue( aMtrDistance, ePoolUnit ),
335cdf0e10cSrcweir static_cast<long>(aMtrAngle.GetValue() * 10) );
336cdf0e10cSrcweir }
337cdf0e10cSrcweir DBG_ASSERT( pXHatch, "XHatch konnte nicht erzeugt werden" );
338cdf0e10cSrcweir rSet.Put( XFillStyleItem( XFILL_HATCH ) );
339cdf0e10cSrcweir rSet.Put( XFillHatchItem( aString, *pXHatch ) );
340cdf0e10cSrcweir
341cdf0e10cSrcweir delete pXHatch;
342cdf0e10cSrcweir }
343cdf0e10cSrcweir }
344cdf0e10cSrcweir return sal_True;
345cdf0e10cSrcweir }
346cdf0e10cSrcweir
347cdf0e10cSrcweir // -----------------------------------------------------------------------
348cdf0e10cSrcweir
Reset(const SfxItemSet & rSet)349cdf0e10cSrcweir void SvxHatchTabPage::Reset( const SfxItemSet& rSet )
350cdf0e10cSrcweir {
351cdf0e10cSrcweir // aLbHatchings.SelectEntryPos( 0 );
352cdf0e10cSrcweir ChangeHatchHdl_Impl( this );
353cdf0e10cSrcweir
354cdf0e10cSrcweir // Status der Buttons ermitteln
355c7be74b1SArmin Le Grand if( maHatchingList.get() && maHatchingList->Count() )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir aBtnModify.Enable();
358cdf0e10cSrcweir aBtnDelete.Enable();
359cdf0e10cSrcweir aBtnSave.Enable();
360cdf0e10cSrcweir }
361cdf0e10cSrcweir else
362cdf0e10cSrcweir {
363cdf0e10cSrcweir aBtnModify.Disable();
364cdf0e10cSrcweir aBtnDelete.Disable();
365cdf0e10cSrcweir aBtnSave.Disable();
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
368cdf0e10cSrcweir rXFSet.Put ( ( XFillColorItem& ) rSet.Get(XATTR_FILLCOLOR) );
369cdf0e10cSrcweir rXFSet.Put ( ( XFillBackgroundItem&)rSet.Get(XATTR_FILLBACKGROUND) );
370cdf0e10cSrcweir aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
371cdf0e10cSrcweir aCtlPreview.Invalidate();
372cdf0e10cSrcweir }
373cdf0e10cSrcweir
374cdf0e10cSrcweir // -----------------------------------------------------------------------
375cdf0e10cSrcweir
Create(Window * pWindow,const SfxItemSet & rSet)376cdf0e10cSrcweir SfxTabPage* SvxHatchTabPage::Create( Window* pWindow,
377cdf0e10cSrcweir const SfxItemSet& rSet )
378cdf0e10cSrcweir {
379cdf0e10cSrcweir return new SvxHatchTabPage( pWindow, rSet );
380cdf0e10cSrcweir }
381cdf0e10cSrcweir
382cdf0e10cSrcweir //------------------------------------------------------------------------
383cdf0e10cSrcweir
IMPL_LINK(SvxHatchTabPage,ModifiedHdl_Impl,void *,p)384cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ModifiedHdl_Impl, void *, p )
385cdf0e10cSrcweir {
386cdf0e10cSrcweir if( p == &aMtrAngle )
387cdf0e10cSrcweir {
388cdf0e10cSrcweir // Setzen des Winkels im AngleControl
389cdf0e10cSrcweir switch( aMtrAngle.GetValue() )
390cdf0e10cSrcweir {
391cdf0e10cSrcweir case 135: aCtlAngle.SetActualRP( RP_LT ); break;
392cdf0e10cSrcweir case 90: aCtlAngle.SetActualRP( RP_MT ); break;
393cdf0e10cSrcweir case 45: aCtlAngle.SetActualRP( RP_RT ); break;
394cdf0e10cSrcweir case 180: aCtlAngle.SetActualRP( RP_LM ); break;
395cdf0e10cSrcweir case 0: aCtlAngle.SetActualRP( RP_RM ); break;
396cdf0e10cSrcweir case 225: aCtlAngle.SetActualRP( RP_LB ); break;
397cdf0e10cSrcweir case 270: aCtlAngle.SetActualRP( RP_MB ); break;
398cdf0e10cSrcweir case 315: aCtlAngle.SetActualRP( RP_RB ); break;
399cdf0e10cSrcweir default: aCtlAngle.SetActualRP( RP_MM ); break;
400cdf0e10cSrcweir }
401cdf0e10cSrcweir }
402cdf0e10cSrcweir
403cdf0e10cSrcweir XHatch aXHatch( aLbLineColor.GetSelectEntryColor(),
404cdf0e10cSrcweir (XHatchStyle) aLbLineType.GetSelectEntryPos(),
405cdf0e10cSrcweir GetCoreValue( aMtrDistance, ePoolUnit ),
406cdf0e10cSrcweir static_cast<long>(aMtrAngle.GetValue() * 10) );
407cdf0e10cSrcweir
408cdf0e10cSrcweir rXFSet.Put( XFillHatchItem( String(), aXHatch ) );
409cdf0e10cSrcweir aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
410cdf0e10cSrcweir
411cdf0e10cSrcweir aCtlPreview.Invalidate();
412cdf0e10cSrcweir
413cdf0e10cSrcweir return 0L;
414cdf0e10cSrcweir }
415cdf0e10cSrcweir
416cdf0e10cSrcweir //------------------------------------------------------------------------
417cdf0e10cSrcweir
IMPL_LINK(SvxHatchTabPage,ChangeHatchHdl_Impl,void *,EMPTYARG)418cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ChangeHatchHdl_Impl, void *, EMPTYARG )
419cdf0e10cSrcweir {
420cdf0e10cSrcweir XHatch* pHatch = NULL;
421cdf0e10cSrcweir int nPos = aLbHatchings.GetSelectEntryPos();
422cdf0e10cSrcweir
423cdf0e10cSrcweir if( nPos != LISTBOX_ENTRY_NOTFOUND )
424c7be74b1SArmin Le Grand pHatch = new XHatch( ( (XHatchEntry*) maHatchingList->GetHatch( nPos ) )->GetHatch() );
425cdf0e10cSrcweir else
426cdf0e10cSrcweir {
427cdf0e10cSrcweir const SfxPoolItem* pPoolItem = NULL;
428cdf0e10cSrcweir if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLSTYLE ), sal_True, &pPoolItem ) )
429cdf0e10cSrcweir {
430cdf0e10cSrcweir if( ( XFILL_HATCH == (XFillStyle) ( ( const XFillStyleItem* ) pPoolItem )->GetValue() ) &&
431cdf0e10cSrcweir ( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), sal_True, &pPoolItem ) ) )
432cdf0e10cSrcweir {
433cdf0e10cSrcweir pHatch = new XHatch( ( ( const XFillHatchItem* ) pPoolItem )->GetHatchValue() );
434cdf0e10cSrcweir }
435cdf0e10cSrcweir }
436cdf0e10cSrcweir if( !pHatch )
437cdf0e10cSrcweir {
438cdf0e10cSrcweir aLbHatchings.SelectEntryPos( 0 );
439cdf0e10cSrcweir nPos = aLbHatchings.GetSelectEntryPos();
440cdf0e10cSrcweir if( nPos != LISTBOX_ENTRY_NOTFOUND )
441c7be74b1SArmin Le Grand pHatch = new XHatch( ( (XHatchEntry*) maHatchingList->GetHatch( nPos ) )->GetHatch() );
442cdf0e10cSrcweir }
443cdf0e10cSrcweir }
444cdf0e10cSrcweir if( pHatch )
445cdf0e10cSrcweir {
446cdf0e10cSrcweir aLbLineType.SelectEntryPos(
447cdf0e10cSrcweir sal::static_int_cast< sal_uInt16 >( pHatch->GetHatchStyle() ) );
448cdf0e10cSrcweir // Wenn der Eintrag nicht in der Listbox ist, wird die Farbe
449cdf0e10cSrcweir // temporaer hinzugenommen
450cdf0e10cSrcweir aLbLineColor.SetNoSelection();
451cdf0e10cSrcweir aLbLineColor.SelectEntry( pHatch->GetColor() );
452cdf0e10cSrcweir if( aLbLineColor.GetSelectEntryCount() == 0 )
453cdf0e10cSrcweir {
454cdf0e10cSrcweir aLbLineColor.InsertEntry( pHatch->GetColor(), String() );
455cdf0e10cSrcweir aLbLineColor.SelectEntry( pHatch->GetColor() );
456cdf0e10cSrcweir }
457cdf0e10cSrcweir SetMetricValue( aMtrDistance, pHatch->GetDistance(), ePoolUnit );
458cdf0e10cSrcweir aMtrAngle.SetValue( pHatch->GetAngle() / 10 );
459cdf0e10cSrcweir
460cdf0e10cSrcweir // Setzen des Winkels im AngleControl
461cdf0e10cSrcweir switch( aMtrAngle.GetValue() )
462cdf0e10cSrcweir {
463cdf0e10cSrcweir case 135: aCtlAngle.SetActualRP( RP_LT ); break;
464cdf0e10cSrcweir case 90: aCtlAngle.SetActualRP( RP_MT ); break;
465cdf0e10cSrcweir case 45: aCtlAngle.SetActualRP( RP_RT ); break;
466cdf0e10cSrcweir case 180: aCtlAngle.SetActualRP( RP_LM ); break;
467cdf0e10cSrcweir case 0: aCtlAngle.SetActualRP( RP_RM ); break;
468cdf0e10cSrcweir case 225: aCtlAngle.SetActualRP( RP_LB ); break;
469cdf0e10cSrcweir case 270: aCtlAngle.SetActualRP( RP_MB ); break;
470cdf0e10cSrcweir case 315: aCtlAngle.SetActualRP( RP_RB ); break;
471cdf0e10cSrcweir default: aCtlAngle.SetActualRP( RP_MM ); break;
472cdf0e10cSrcweir }
473cdf0e10cSrcweir
474cdf0e10cSrcweir // Backgroundcolor
475cdf0e10cSrcweir /*
476cdf0e10cSrcweir const SfxPoolItem* pPoolItem = NULL;
477cdf0e10cSrcweir if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLBACKGROUND ), sal_True, &pPoolItem ) )
478cdf0e10cSrcweir {
479cdf0e10cSrcweir rXFSet.Put ( XFillBackgroundItem( ( ( XFillBackgroundItem* )pPoolItem)->GetValue() ) );
480cdf0e10cSrcweir if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) )
481cdf0e10cSrcweir {
482cdf0e10cSrcweir Color aColor( ( ( const XFillColorItem* ) pPoolItem )->GetValue() );
483cdf0e10cSrcweir rXFSet.Put( XFillColorItem( String(), aColor ) );
484cdf0e10cSrcweir }
485cdf0e10cSrcweir }
486cdf0e10cSrcweir */
487cdf0e10cSrcweir // ItemSet fuellen und an aCtlPreview weiterleiten
488cdf0e10cSrcweir rXFSet.Put( XFillHatchItem( String(), *pHatch ) );
489cdf0e10cSrcweir aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
490cdf0e10cSrcweir
491cdf0e10cSrcweir aCtlPreview.Invalidate();
492cdf0e10cSrcweir delete pHatch;
493cdf0e10cSrcweir }
494cdf0e10cSrcweir aMtrDistance.SaveValue();
495cdf0e10cSrcweir aMtrAngle.SaveValue();
496cdf0e10cSrcweir aLbLineType.SaveValue();
497cdf0e10cSrcweir aLbLineColor.SaveValue();
498cdf0e10cSrcweir aLbHatchings.SaveValue();
499cdf0e10cSrcweir
500cdf0e10cSrcweir return 0L;
501cdf0e10cSrcweir }
502cdf0e10cSrcweir
503cdf0e10cSrcweir //------------------------------------------------------------------------
504cdf0e10cSrcweir
IMPL_LINK(SvxHatchTabPage,ClickAddHdl_Impl,void *,EMPTYARG)505cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickAddHdl_Impl, void *, EMPTYARG )
506cdf0e10cSrcweir {
507cdf0e10cSrcweir ResMgr& rMgr = CUI_MGR();
508cdf0e10cSrcweir String aNewName( SVX_RES( RID_SVXSTR_HATCH ) );
509cdf0e10cSrcweir String aDesc( CUI_RES( RID_SVXSTR_DESC_HATCH ) );
510cdf0e10cSrcweir String aName;
511cdf0e10cSrcweir
512c7be74b1SArmin Le Grand long nCount = maHatchingList.get() ? maHatchingList->Count() : 0;
513cdf0e10cSrcweir long j = 1;
514cdf0e10cSrcweir sal_Bool bDifferent = sal_False;
515cdf0e10cSrcweir
516cdf0e10cSrcweir while( !bDifferent )
517cdf0e10cSrcweir {
518cdf0e10cSrcweir aName = aNewName;
519cdf0e10cSrcweir aName += sal_Unicode(' ');
520cdf0e10cSrcweir aName += UniString::CreateFromInt32( j++ );
521cdf0e10cSrcweir bDifferent = sal_True;
522cdf0e10cSrcweir
523cdf0e10cSrcweir for( long i = 0; i < nCount && bDifferent; i++ )
524c7be74b1SArmin Le Grand if( aName == maHatchingList->GetHatch( i )->GetName() )
525cdf0e10cSrcweir bDifferent = sal_False;
526cdf0e10cSrcweir }
527cdf0e10cSrcweir
528cdf0e10cSrcweir SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
529cdf0e10cSrcweir DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
530cdf0e10cSrcweir AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
531cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
532cdf0e10cSrcweir WarningBox* pWarnBox = NULL;
533cdf0e10cSrcweir sal_uInt16 nError = RID_SVXSTR_WARN_NAME_DUPLICATE;
534cdf0e10cSrcweir
535cdf0e10cSrcweir while( pDlg->Execute() == RET_OK )
536cdf0e10cSrcweir {
537cdf0e10cSrcweir pDlg->GetName( aName );
538cdf0e10cSrcweir
539cdf0e10cSrcweir bDifferent = sal_True;
540cdf0e10cSrcweir
541cdf0e10cSrcweir for( long i = 0; i < nCount && bDifferent; i++ )
542c7be74b1SArmin Le Grand if( aName == maHatchingList->GetHatch( i )->GetName() )
543cdf0e10cSrcweir bDifferent = sal_False;
544cdf0e10cSrcweir
545cdf0e10cSrcweir if( bDifferent ) {
546cdf0e10cSrcweir nError = 0;
547cdf0e10cSrcweir break;
548cdf0e10cSrcweir }
549cdf0e10cSrcweir
550cdf0e10cSrcweir if( !pWarnBox )
551cdf0e10cSrcweir {
552cdf0e10cSrcweir pWarnBox = new WarningBox( DLGWIN,
553cdf0e10cSrcweir WinBits( WB_OK_CANCEL ),
554cdf0e10cSrcweir String( ResId( nError, rMgr ) ) );
555cdf0e10cSrcweir pWarnBox->SetHelpId( HID_WARN_NAME_DUPLICATE );
556cdf0e10cSrcweir }
557cdf0e10cSrcweir
558cdf0e10cSrcweir if( pWarnBox->Execute() != RET_OK )
559cdf0e10cSrcweir break;
560cdf0e10cSrcweir }
561cdf0e10cSrcweir //Rectangle aDlgRect( pDlg->GetPosPixel(), pDlg->GetSizePixel() );
562cdf0e10cSrcweir delete pDlg;
563cdf0e10cSrcweir delete pWarnBox;
564cdf0e10cSrcweir
565cdf0e10cSrcweir if( !nError )
566cdf0e10cSrcweir {
567cdf0e10cSrcweir XHatch aXHatch( aLbLineColor.GetSelectEntryColor(),
568cdf0e10cSrcweir (XHatchStyle) aLbLineType.GetSelectEntryPos(),
569cdf0e10cSrcweir GetCoreValue( aMtrDistance, ePoolUnit ),
570cdf0e10cSrcweir static_cast<long>(aMtrAngle.GetValue() * 10) );
571cdf0e10cSrcweir XHatchEntry* pEntry = new XHatchEntry( aXHatch, aName );
572cdf0e10cSrcweir
573c7be74b1SArmin Le Grand maHatchingList->Insert( pEntry, nCount );
574cdf0e10cSrcweir
575*3e407bd8SArmin Le Grand aLbHatchings.Append( *pEntry, maHatchingList->GetUiBitmap( nCount ) );
576cdf0e10cSrcweir
577cdf0e10cSrcweir aLbHatchings.SelectEntryPos( aLbHatchings.GetEntryCount() - 1 );
578cdf0e10cSrcweir
579cdf0e10cSrcweir #ifdef WNT
580cdf0e10cSrcweir // hack: #31355# W.P.
581cdf0e10cSrcweir Rectangle aRect( aLbHatchings.GetPosPixel(), aLbHatchings.GetSizePixel() );
582cdf0e10cSrcweir if( sal_True ) { // ??? overlapped with pDlg
583cdf0e10cSrcweir // and srolling
584cdf0e10cSrcweir Invalidate( aRect );
585cdf0e10cSrcweir //aLbHatchings.Invalidate();
586cdf0e10cSrcweir }
587cdf0e10cSrcweir #endif
588cdf0e10cSrcweir
589cdf0e10cSrcweir // Flag fuer modifiziert setzen
590cdf0e10cSrcweir *pnHatchingListState |= CT_MODIFIED;
591cdf0e10cSrcweir
592cdf0e10cSrcweir ChangeHatchHdl_Impl( this );
593cdf0e10cSrcweir }
594cdf0e10cSrcweir
595cdf0e10cSrcweir // Status der Buttons ermitteln
596c7be74b1SArmin Le Grand if( maHatchingList.get() && maHatchingList->Count() )
597cdf0e10cSrcweir {
598cdf0e10cSrcweir aBtnModify.Enable();
599cdf0e10cSrcweir aBtnDelete.Enable();
600cdf0e10cSrcweir aBtnSave.Enable();
601cdf0e10cSrcweir }
602cdf0e10cSrcweir return 0L;
603cdf0e10cSrcweir }
604cdf0e10cSrcweir
605cdf0e10cSrcweir //------------------------------------------------------------------------
606cdf0e10cSrcweir
IMPL_LINK(SvxHatchTabPage,ClickModifyHdl_Impl,void *,EMPTYARG)607cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickModifyHdl_Impl, void *, EMPTYARG )
608cdf0e10cSrcweir {
609cdf0e10cSrcweir sal_uInt16 nPos = aLbHatchings.GetSelectEntryPos();
610cdf0e10cSrcweir
611cdf0e10cSrcweir if ( nPos != LISTBOX_ENTRY_NOTFOUND )
612cdf0e10cSrcweir {
613cdf0e10cSrcweir ResMgr& rMgr = CUI_MGR();
614cdf0e10cSrcweir String aNewName( SVX_RES( RID_SVXSTR_HATCH ) );
615cdf0e10cSrcweir String aDesc( CUI_RES( RID_SVXSTR_DESC_HATCH ) );
616c7be74b1SArmin Le Grand String aName( maHatchingList->GetHatch( nPos )->GetName() );
617cdf0e10cSrcweir String aOldName = aName;
618cdf0e10cSrcweir
619cdf0e10cSrcweir SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
620cdf0e10cSrcweir DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
621cdf0e10cSrcweir AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
622cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
623cdf0e10cSrcweir
624c7be74b1SArmin Le Grand long nCount = maHatchingList.get() ? maHatchingList->Count() : 0;
625cdf0e10cSrcweir sal_Bool bDifferent = sal_False;
626cdf0e10cSrcweir sal_Bool bLoop = sal_True;
627cdf0e10cSrcweir while( bLoop && pDlg->Execute() == RET_OK )
628cdf0e10cSrcweir {
629cdf0e10cSrcweir pDlg->GetName( aName );
630cdf0e10cSrcweir bDifferent = sal_True;
631cdf0e10cSrcweir
632cdf0e10cSrcweir for( long i = 0; i < nCount && bDifferent; i++ )
633cdf0e10cSrcweir {
634c7be74b1SArmin Le Grand if( aName == maHatchingList->GetHatch( i )->GetName() &&
635cdf0e10cSrcweir aName != aOldName )
636cdf0e10cSrcweir bDifferent = sal_False;
637cdf0e10cSrcweir }
638cdf0e10cSrcweir
639cdf0e10cSrcweir if( bDifferent )
640cdf0e10cSrcweir {
641cdf0e10cSrcweir bLoop = sal_False;
642cdf0e10cSrcweir XHatch aXHatch( aLbLineColor.GetSelectEntryColor(),
643cdf0e10cSrcweir (XHatchStyle) aLbLineType.GetSelectEntryPos(),
644cdf0e10cSrcweir GetCoreValue( aMtrDistance, ePoolUnit ),
645cdf0e10cSrcweir static_cast<long>(aMtrAngle.GetValue() * 10) );
646cdf0e10cSrcweir
647cdf0e10cSrcweir XHatchEntry* pEntry = new XHatchEntry( aXHatch, aName );
648cdf0e10cSrcweir
649c7be74b1SArmin Le Grand delete maHatchingList->Replace( pEntry, nPos );
650cdf0e10cSrcweir
651*3e407bd8SArmin Le Grand aLbHatchings.Modify( *pEntry, nPos, maHatchingList->GetUiBitmap( nPos ) );
652cdf0e10cSrcweir
653cdf0e10cSrcweir aLbHatchings.SelectEntryPos( nPos );
654cdf0e10cSrcweir
655cdf0e10cSrcweir // Werte sichern fuer Changes-Erkennung ( -> Methode )
656cdf0e10cSrcweir aMtrDistance.SaveValue();
657cdf0e10cSrcweir aMtrAngle.SaveValue();
658cdf0e10cSrcweir aLbLineType.SaveValue();
659cdf0e10cSrcweir aLbLineColor.SaveValue();
660cdf0e10cSrcweir aLbHatchings.SaveValue();
661cdf0e10cSrcweir
662cdf0e10cSrcweir // Flag fuer modifiziert setzen
663cdf0e10cSrcweir *pnHatchingListState |= CT_MODIFIED;
664cdf0e10cSrcweir }
665cdf0e10cSrcweir else
666cdf0e10cSrcweir {
667cdf0e10cSrcweir WarningBox aBox( DLGWIN, WinBits( WB_OK ),String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) );
668cdf0e10cSrcweir aBox.SetHelpId( HID_WARN_NAME_DUPLICATE );
669cdf0e10cSrcweir aBox.Execute();
670cdf0e10cSrcweir }
671cdf0e10cSrcweir }
672cdf0e10cSrcweir delete( pDlg );
673cdf0e10cSrcweir }
674cdf0e10cSrcweir return 0L;
675cdf0e10cSrcweir }
676cdf0e10cSrcweir
677cdf0e10cSrcweir //------------------------------------------------------------------------
678cdf0e10cSrcweir
IMPL_LINK(SvxHatchTabPage,ClickDeleteHdl_Impl,void *,EMPTYARG)679cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG )
680cdf0e10cSrcweir {
681cdf0e10cSrcweir sal_uInt16 nPos = aLbHatchings.GetSelectEntryPos();
682cdf0e10cSrcweir
683cdf0e10cSrcweir if( nPos != LISTBOX_ENTRY_NOTFOUND )
684cdf0e10cSrcweir {
685cdf0e10cSrcweir QueryBox aQueryBox( DLGWIN, WinBits( WB_YES_NO | WB_DEF_NO ),
686cdf0e10cSrcweir String( CUI_RES( RID_SVXSTR_ASK_DEL_HATCH ) ) );
687cdf0e10cSrcweir
688cdf0e10cSrcweir if( aQueryBox.Execute() == RET_YES )
689cdf0e10cSrcweir {
690c7be74b1SArmin Le Grand delete maHatchingList->Remove( nPos );
691cdf0e10cSrcweir aLbHatchings.RemoveEntry( nPos );
692cdf0e10cSrcweir aLbHatchings.SelectEntryPos( 0 );
693cdf0e10cSrcweir
694cdf0e10cSrcweir aCtlPreview.Invalidate();
695cdf0e10cSrcweir
696cdf0e10cSrcweir ChangeHatchHdl_Impl( this );
697cdf0e10cSrcweir
698cdf0e10cSrcweir // Flag fuer modifiziert setzen
699cdf0e10cSrcweir *pnHatchingListState |= CT_MODIFIED;
700cdf0e10cSrcweir }
701cdf0e10cSrcweir }
702cdf0e10cSrcweir // Status der Buttons ermitteln
703c7be74b1SArmin Le Grand if( !maHatchingList.get() || !maHatchingList->Count() )
704cdf0e10cSrcweir {
705cdf0e10cSrcweir aBtnModify.Disable();
706cdf0e10cSrcweir aBtnDelete.Disable();
707cdf0e10cSrcweir aBtnSave.Disable();
708cdf0e10cSrcweir }
709cdf0e10cSrcweir return 0L;
710cdf0e10cSrcweir }
711cdf0e10cSrcweir
712cdf0e10cSrcweir // -----------------------------------------------------------------------
713cdf0e10cSrcweir
IMPL_LINK(SvxHatchTabPage,ClickLoadHdl_Impl,void *,EMPTYARG)714cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickLoadHdl_Impl, void *, EMPTYARG )
715cdf0e10cSrcweir {
716cdf0e10cSrcweir ResMgr& rMgr = CUI_MGR();
717cdf0e10cSrcweir sal_uInt16 nReturn = RET_YES;
718cdf0e10cSrcweir
719cdf0e10cSrcweir if ( *pnHatchingListState & CT_MODIFIED )
720cdf0e10cSrcweir {
721cdf0e10cSrcweir nReturn = WarningBox( DLGWIN, WinBits( WB_YES_NO_CANCEL ),
722cdf0e10cSrcweir String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute();
723cdf0e10cSrcweir
724cdf0e10cSrcweir if ( nReturn == RET_YES )
725c7be74b1SArmin Le Grand maHatchingList->Save();
726cdf0e10cSrcweir }
727cdf0e10cSrcweir
728cdf0e10cSrcweir if ( nReturn != RET_CANCEL )
729cdf0e10cSrcweir {
730cdf0e10cSrcweir ::sfx2::FileDialogHelper aDlg(
731cdf0e10cSrcweir com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
732cdf0e10cSrcweir 0 );
733cdf0e10cSrcweir String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soh" ) );
734cdf0e10cSrcweir aDlg.AddFilter( aStrFilterType, aStrFilterType );
735cdf0e10cSrcweir INetURLObject aFile( SvtPathOptions().GetPalettePath() );
736cdf0e10cSrcweir aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
737cdf0e10cSrcweir
738cdf0e10cSrcweir if( aDlg.Execute() == ERRCODE_NONE )
739cdf0e10cSrcweir {
740cdf0e10cSrcweir INetURLObject aURL( aDlg.GetPath() );
741cdf0e10cSrcweir INetURLObject aPathURL( aURL );
742cdf0e10cSrcweir
743cdf0e10cSrcweir aPathURL.removeSegment();
744cdf0e10cSrcweir aPathURL.removeFinalSlash();
745cdf0e10cSrcweir
746cdf0e10cSrcweir // Liste speichern
747c7be74b1SArmin Le Grand XHatchListSharedPtr aHatchList(XPropertyListFactory::CreateSharedXHatchList(aPathURL.GetMainURL(INetURLObject::NO_DECODE)));
748c7be74b1SArmin Le Grand aHatchList->SetName( aURL.getName() );
749c7be74b1SArmin Le Grand if( aHatchList->Load() )
750cdf0e10cSrcweir {
751c7be74b1SArmin Le Grand if( aHatchList.get() )
752cdf0e10cSrcweir {
753c7be74b1SArmin Le Grand maHatchingList = aHatchList;
754c7be74b1SArmin Le Grand ( (SvxAreaTabDialog*) DLGWIN )->SetNewHatchingList( maHatchingList );
755cdf0e10cSrcweir
756cdf0e10cSrcweir aLbHatchings.Clear();
757c7be74b1SArmin Le Grand aLbHatchings.Fill( maHatchingList );
758cdf0e10cSrcweir Reset( rOutAttrs );
759cdf0e10cSrcweir
760c7be74b1SArmin Le Grand maHatchingList->SetName( aURL.getName() );
761cdf0e10cSrcweir
762cdf0e10cSrcweir // Ermitteln (evtl. abschneiden) des Namens und in
763cdf0e10cSrcweir // der GroupBox darstellen
764cdf0e10cSrcweir String aString( ResId( RID_SVXSTR_TABLE, rMgr ) );
765cdf0e10cSrcweir aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
766cdf0e10cSrcweir
767cdf0e10cSrcweir if ( aURL.getBase().getLength() > 18 )
768cdf0e10cSrcweir {
769cdf0e10cSrcweir aString += String(aURL.getBase()).Copy( 0, 15 );
770cdf0e10cSrcweir aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
771cdf0e10cSrcweir }
772cdf0e10cSrcweir else
773cdf0e10cSrcweir aString += String(aURL.getBase());
774cdf0e10cSrcweir
775cdf0e10cSrcweir // Flag fuer gewechselt setzen
776cdf0e10cSrcweir *pnHatchingListState |= CT_CHANGED;
777cdf0e10cSrcweir // Flag fuer modifiziert entfernen
778cdf0e10cSrcweir *pnHatchingListState &= ~CT_MODIFIED;
779cdf0e10cSrcweir }
780cdf0e10cSrcweir }
781cdf0e10cSrcweir else
782cdf0e10cSrcweir ErrorBox( DLGWIN, WinBits( WB_OK ),
783cdf0e10cSrcweir String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute();
784cdf0e10cSrcweir }
785cdf0e10cSrcweir }
786cdf0e10cSrcweir
787cdf0e10cSrcweir // Status der Buttons ermitteln
788c7be74b1SArmin Le Grand if ( maHatchingList.get() && maHatchingList->Count() )
789cdf0e10cSrcweir {
790cdf0e10cSrcweir aBtnModify.Enable();
791cdf0e10cSrcweir aBtnDelete.Enable();
792cdf0e10cSrcweir aBtnSave.Enable();
793cdf0e10cSrcweir }
794cdf0e10cSrcweir else
795cdf0e10cSrcweir {
796cdf0e10cSrcweir aBtnModify.Disable();
797cdf0e10cSrcweir aBtnDelete.Disable();
798cdf0e10cSrcweir aBtnSave.Disable();
799cdf0e10cSrcweir }
800cdf0e10cSrcweir return 0L;
801cdf0e10cSrcweir }
802cdf0e10cSrcweir
803cdf0e10cSrcweir // -----------------------------------------------------------------------
804cdf0e10cSrcweir
IMPL_LINK(SvxHatchTabPage,ClickSaveHdl_Impl,void *,EMPTYARG)805cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickSaveHdl_Impl, void *, EMPTYARG )
806cdf0e10cSrcweir {
807cdf0e10cSrcweir ::sfx2::FileDialogHelper aDlg(
808cdf0e10cSrcweir com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
809cdf0e10cSrcweir String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soh" ) );
810cdf0e10cSrcweir aDlg.AddFilter( aStrFilterType, aStrFilterType );
811cdf0e10cSrcweir
812cdf0e10cSrcweir INetURLObject aFile( SvtPathOptions().GetPalettePath() );
813cdf0e10cSrcweir DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
814cdf0e10cSrcweir
815c7be74b1SArmin Le Grand if( maHatchingList.get() && maHatchingList->GetName().Len() )
816cdf0e10cSrcweir {
817c7be74b1SArmin Le Grand aFile.Append( maHatchingList->GetName() );
818cdf0e10cSrcweir
819cdf0e10cSrcweir if( !aFile.getExtension().getLength() )
820cdf0e10cSrcweir aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "soh" ) ) );
821cdf0e10cSrcweir }
822cdf0e10cSrcweir
823cdf0e10cSrcweir aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
824cdf0e10cSrcweir if ( aDlg.Execute() == ERRCODE_NONE )
825cdf0e10cSrcweir {
826cdf0e10cSrcweir INetURLObject aURL( aDlg.GetPath() );
827cdf0e10cSrcweir INetURLObject aPathURL( aURL );
828cdf0e10cSrcweir
829cdf0e10cSrcweir aPathURL.removeSegment();
830cdf0e10cSrcweir aPathURL.removeFinalSlash();
831cdf0e10cSrcweir
832c7be74b1SArmin Le Grand maHatchingList->SetName( aURL.getName() );
833c7be74b1SArmin Le Grand maHatchingList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
834cdf0e10cSrcweir
835c7be74b1SArmin Le Grand if( maHatchingList->Save() )
836cdf0e10cSrcweir {
837cdf0e10cSrcweir // Ermitteln (evtl. abschneiden) des Namens und in
838cdf0e10cSrcweir // der GroupBox darstellen
839cdf0e10cSrcweir String aString( CUI_RES( RID_SVXSTR_TABLE ) );
840cdf0e10cSrcweir aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
841cdf0e10cSrcweir
842cdf0e10cSrcweir if ( aURL.getBase().getLength() > 18 )
843cdf0e10cSrcweir {
844cdf0e10cSrcweir aString += String(aURL.getBase()).Copy( 0, 15 );
845cdf0e10cSrcweir aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
846cdf0e10cSrcweir }
847cdf0e10cSrcweir else
848cdf0e10cSrcweir aString += String(aURL.getBase());
849cdf0e10cSrcweir
850cdf0e10cSrcweir // Flag fuer gespeichert setzen
851cdf0e10cSrcweir *pnHatchingListState |= CT_SAVED;
852cdf0e10cSrcweir // Flag fuer modifiziert entfernen
853cdf0e10cSrcweir *pnHatchingListState &= ~CT_MODIFIED;
854cdf0e10cSrcweir }
855cdf0e10cSrcweir else
856cdf0e10cSrcweir {
857cdf0e10cSrcweir ErrorBox( DLGWIN, WinBits( WB_OK ),
858cdf0e10cSrcweir String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ).Execute();
859cdf0e10cSrcweir }
860cdf0e10cSrcweir }
861cdf0e10cSrcweir
862cdf0e10cSrcweir return 0L;
863cdf0e10cSrcweir }
864cdf0e10cSrcweir
865cdf0e10cSrcweir //------------------------------------------------------------------------
866cdf0e10cSrcweir
PointChanged(Window * pWindow,RECT_POINT eRcPt)867cdf0e10cSrcweir void SvxHatchTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
868cdf0e10cSrcweir {
869cdf0e10cSrcweir if( pWindow == &aCtlAngle )
870cdf0e10cSrcweir {
871cdf0e10cSrcweir switch( eRcPt )
872cdf0e10cSrcweir {
873cdf0e10cSrcweir case RP_LT: aMtrAngle.SetValue( 135 ); break;
874cdf0e10cSrcweir case RP_MT: aMtrAngle.SetValue( 90 ); break;
875cdf0e10cSrcweir case RP_RT: aMtrAngle.SetValue( 45 ); break;
876cdf0e10cSrcweir case RP_LM: aMtrAngle.SetValue( 180 ); break;
877cdf0e10cSrcweir case RP_RM: aMtrAngle.SetValue( 0 ); break;
878cdf0e10cSrcweir case RP_LB: aMtrAngle.SetValue( 225 ); break;
879cdf0e10cSrcweir case RP_MB: aMtrAngle.SetValue( 270 ); break;
880cdf0e10cSrcweir case RP_RB: aMtrAngle.SetValue( 315 ); break;
881cdf0e10cSrcweir case RP_MM: break;
882cdf0e10cSrcweir }
883cdf0e10cSrcweir ModifiedHdl_Impl( this );
884cdf0e10cSrcweir }
885cdf0e10cSrcweir }
886cdf0e10cSrcweir
887cdf0e10cSrcweir
DataChanged(const DataChangedEvent & rDCEvt)888cdf0e10cSrcweir void SvxHatchTabPage::DataChanged( const DataChangedEvent& rDCEvt )
889cdf0e10cSrcweir {
890cdf0e10cSrcweir if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
891cdf0e10cSrcweir aCtlPreview.SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
892cdf0e10cSrcweir
893cdf0e10cSrcweir SvxTabPage::DataChanged( rDCEvt );
894cdf0e10cSrcweir }
895cdf0e10cSrcweir
896