xref: /aoo4110/main/svx/source/gallery2/galbrws1.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <tools/datetime.hxx>
28*b1cdbd2cSJim Jagielski #include <unotools/datetime.hxx>
29*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
30*b1cdbd2cSJim Jagielski #include <ucbhelper/content.hxx>
31*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
32*b1cdbd2cSJim Jagielski #include "helpid.hrc"
33*b1cdbd2cSJim Jagielski #include "svx/gallery1.hxx"
34*b1cdbd2cSJim Jagielski #include "svx/galtheme.hxx"
35*b1cdbd2cSJim Jagielski #include "svx/galmisc.hxx"
36*b1cdbd2cSJim Jagielski #include "galbrws1.hxx"
37*b1cdbd2cSJim Jagielski #include <com/sun/star/util/DateTime.hpp>
38*b1cdbd2cSJim Jagielski #include "gallery.hrc"
39*b1cdbd2cSJim Jagielski #include <algorithm>
40*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
41*b1cdbd2cSJim Jagielski #include <svx/dialmgr.hxx>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx> //CHINA001
44*b1cdbd2cSJim Jagielski //CHINA001 #include <svx/dialogs.hrc> //CHINA001
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski // --------------
47*b1cdbd2cSJim Jagielski // - Namespaces -
48*b1cdbd2cSJim Jagielski // --------------
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski using namespace ::rtl;
51*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski // -----------------
54*b1cdbd2cSJim Jagielski // - GalleryButton -
55*b1cdbd2cSJim Jagielski // -----------------
DBG_NAME(GalleryButton)56*b1cdbd2cSJim Jagielski DBG_NAME(GalleryButton)
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski GalleryButton::GalleryButton( GalleryBrowser1* pParent, WinBits nWinBits ) :
59*b1cdbd2cSJim Jagielski     PushButton( pParent, nWinBits )
60*b1cdbd2cSJim Jagielski {
61*b1cdbd2cSJim Jagielski     DBG_CTOR(GalleryButton,NULL);
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski }
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
66*b1cdbd2cSJim Jagielski 
~GalleryButton()67*b1cdbd2cSJim Jagielski GalleryButton::~GalleryButton()
68*b1cdbd2cSJim Jagielski {
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski     DBG_DTOR(GalleryButton,NULL);
71*b1cdbd2cSJim Jagielski }
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
74*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKEvt)75*b1cdbd2cSJim Jagielski void GalleryButton::KeyInput( const KeyEvent& rKEvt )
76*b1cdbd2cSJim Jagielski {
77*b1cdbd2cSJim Jagielski     if( !static_cast< GalleryBrowser1* >( GetParent() )->KeyInput( rKEvt, this ) )
78*b1cdbd2cSJim Jagielski         PushButton::KeyInput( rKEvt );
79*b1cdbd2cSJim Jagielski }
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski // -----------------------
82*b1cdbd2cSJim Jagielski // - GalleryThemeListBox -
83*b1cdbd2cSJim Jagielski // -----------------------
DBG_NAME(GalleryThemeListBox)84*b1cdbd2cSJim Jagielski DBG_NAME(GalleryThemeListBox)
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski GalleryThemeListBox::GalleryThemeListBox( GalleryBrowser1* pParent, WinBits nWinBits ) :
87*b1cdbd2cSJim Jagielski 	ListBox( pParent, nWinBits )
88*b1cdbd2cSJim Jagielski {
89*b1cdbd2cSJim Jagielski     DBG_CTOR(GalleryThemeListBox,NULL);
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski     InitSettings();
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
95*b1cdbd2cSJim Jagielski 
~GalleryThemeListBox()96*b1cdbd2cSJim Jagielski GalleryThemeListBox::~GalleryThemeListBox()
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski     DBG_DTOR(GalleryThemeListBox,NULL);
100*b1cdbd2cSJim Jagielski }
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------
103*b1cdbd2cSJim Jagielski 
InitSettings()104*b1cdbd2cSJim Jagielski void GalleryThemeListBox::InitSettings()
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski 	SetBackground( Wallpaper( GALLERY_BG_COLOR ) );
107*b1cdbd2cSJim Jagielski 	SetControlBackground( GALLERY_BG_COLOR );
108*b1cdbd2cSJim Jagielski 	SetControlForeground( GALLERY_FG_COLOR );
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
112*b1cdbd2cSJim Jagielski 
DataChanged(const DataChangedEvent & rDCEvt)113*b1cdbd2cSJim Jagielski void GalleryThemeListBox::DataChanged( const DataChangedEvent& rDCEvt )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski 	if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
116*b1cdbd2cSJim Jagielski 		InitSettings();
117*b1cdbd2cSJim Jagielski 	else
118*b1cdbd2cSJim Jagielski 		ListBox::DataChanged( rDCEvt );
119*b1cdbd2cSJim Jagielski }
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
122*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)123*b1cdbd2cSJim Jagielski long GalleryThemeListBox::PreNotify( NotifyEvent& rNEvt )
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski     long nDone = 0;
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 	if( rNEvt.GetType() == EVENT_COMMAND )
128*b1cdbd2cSJim Jagielski 	{
129*b1cdbd2cSJim Jagielski 		const CommandEvent* pCEvt = rNEvt.GetCommandEvent();
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 		if( pCEvt && pCEvt->GetCommand() == COMMAND_CONTEXTMENU )
132*b1cdbd2cSJim Jagielski 			static_cast< GalleryBrowser1* >( GetParent() )->ShowContextMenu();
133*b1cdbd2cSJim Jagielski 	}
134*b1cdbd2cSJim Jagielski     else if( rNEvt.GetType() == EVENT_KEYINPUT )
135*b1cdbd2cSJim Jagielski     {
136*b1cdbd2cSJim Jagielski 		const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski         if( pKEvt )
139*b1cdbd2cSJim Jagielski             nDone = static_cast< GalleryBrowser1* >( GetParent() )->KeyInput( *pKEvt, this );
140*b1cdbd2cSJim Jagielski     }
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 	return( nDone ? nDone : ListBox::PreNotify( rNEvt ) );
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski // -------------------
146*b1cdbd2cSJim Jagielski // - GalleryBrowser1 -
147*b1cdbd2cSJim Jagielski // -------------------
DBG_NAME(GalleryBrowser1)148*b1cdbd2cSJim Jagielski DBG_NAME(GalleryBrowser1)
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski GalleryBrowser1::GalleryBrowser1(
151*b1cdbd2cSJim Jagielski     Window* pParent,
152*b1cdbd2cSJim Jagielski     const ResId& rResId,
153*b1cdbd2cSJim Jagielski     Gallery* pGallery,
154*b1cdbd2cSJim Jagielski     const ::boost::function<sal_Bool(const KeyEvent&,Window*)>& rKeyInputHandler,
155*b1cdbd2cSJim Jagielski     const ::boost::function<void(void)>& rThemeSlectionHandler)
156*b1cdbd2cSJim Jagielski     :
157*b1cdbd2cSJim Jagielski     Control               ( pParent, rResId ),
158*b1cdbd2cSJim Jagielski     maNewTheme            ( this, WB_3DLOOK ),
159*b1cdbd2cSJim Jagielski     mpThemes              ( new GalleryThemeListBox( this, WB_TABSTOP | WB_3DLOOK | WB_BORDER | WB_HSCROLL | WB_VSCROLL | WB_AUTOHSCROLL | WB_SORT ) ),
160*b1cdbd2cSJim Jagielski     mpGallery             ( pGallery ),
161*b1cdbd2cSJim Jagielski     mpExchangeData        ( new ExchangeData ),
162*b1cdbd2cSJim Jagielski     mpThemePropsDlgItemSet( NULL ),
163*b1cdbd2cSJim Jagielski     aImgNormal            ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_NORMAL ) ),
164*b1cdbd2cSJim Jagielski     aImgDefault           ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_DEFAULT ) ),
165*b1cdbd2cSJim Jagielski     aImgReadOnly          ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_READONLY ) ),
166*b1cdbd2cSJim Jagielski     aImgImported          ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_IMPORTED ) ),
167*b1cdbd2cSJim Jagielski     maKeyInputHandler(rKeyInputHandler),
168*b1cdbd2cSJim Jagielski     maThemeSlectionHandler(rThemeSlectionHandler)
169*b1cdbd2cSJim Jagielski {
170*b1cdbd2cSJim Jagielski     DBG_CTOR(GalleryBrowser1,NULL);
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 	StartListening( *mpGallery );
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 	maNewTheme.SetHelpId( HID_GALLERY_NEWTHEME );
175*b1cdbd2cSJim Jagielski 	maNewTheme.SetText( String( GAL_RESID( RID_SVXSTR_GALLERY_CREATETHEME ) ) );
176*b1cdbd2cSJim Jagielski 	maNewTheme.SetClickHdl( LINK( this, GalleryBrowser1, ClickNewThemeHdl ) );
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 	// disable creation of new themes if a writable directory is not available
179*b1cdbd2cSJim Jagielski 	if( mpGallery->GetUserURL().GetProtocol() == INET_PROT_NOT_VALID )
180*b1cdbd2cSJim Jagielski 	    maNewTheme.Disable();
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 	mpThemes->SetHelpId( HID_GALLERY_THEMELIST );
183*b1cdbd2cSJim Jagielski 	mpThemes->SetSelectHdl( LINK( this, GalleryBrowser1, SelectThemeHdl ) );
184*b1cdbd2cSJim Jagielski 	mpThemes->SetAccessibleName(String(SVX_RES( RID_SVXSTR_GALLERYPROPS_GALTHEME ) ) );
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 	for( sal_uIntPtr i = 0, nCount = mpGallery->GetThemeCount(); i < nCount; i++ )
187*b1cdbd2cSJim Jagielski 		ImplInsertThemeEntry( mpGallery->GetThemeInfo( i ) );
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 	ImplAdjustControls();
190*b1cdbd2cSJim Jagielski 	maNewTheme.Show( sal_True );
191*b1cdbd2cSJim Jagielski 	mpThemes->Show( sal_True );
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
195*b1cdbd2cSJim Jagielski 
~GalleryBrowser1()196*b1cdbd2cSJim Jagielski GalleryBrowser1::~GalleryBrowser1()
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski 	EndListening( *mpGallery );
199*b1cdbd2cSJim Jagielski 	delete mpThemes;
200*b1cdbd2cSJim Jagielski 	mpThemes = NULL;
201*b1cdbd2cSJim Jagielski     delete mpExchangeData;
202*b1cdbd2cSJim Jagielski     mpExchangeData = NULL;
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski     DBG_DTOR(GalleryBrowser1,NULL);
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
208*b1cdbd2cSJim Jagielski 
ImplInsertThemeEntry(const GalleryThemeEntry * pEntry)209*b1cdbd2cSJim Jagielski sal_uIntPtr GalleryBrowser1::ImplInsertThemeEntry( const GalleryThemeEntry* pEntry )
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski 	static const sal_Bool bShowHiddenThemes = ( getenv( "GALLERY_SHOW_HIDDEN_THEMES" ) != NULL );
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	sal_uIntPtr nRet = LISTBOX_ENTRY_NOTFOUND;
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 	if( pEntry && ( !pEntry->IsHidden() || bShowHiddenThemes ) )
216*b1cdbd2cSJim Jagielski 	{
217*b1cdbd2cSJim Jagielski 		const Image* pImage;
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski 		if( pEntry->IsImported() )
220*b1cdbd2cSJim Jagielski 			pImage = &aImgImported;
221*b1cdbd2cSJim Jagielski 		else if( pEntry->IsReadOnly() )
222*b1cdbd2cSJim Jagielski 			pImage = &aImgReadOnly;
223*b1cdbd2cSJim Jagielski 		else if( pEntry->IsDefault() )
224*b1cdbd2cSJim Jagielski 			pImage = &aImgDefault;
225*b1cdbd2cSJim Jagielski 		else
226*b1cdbd2cSJim Jagielski 			pImage = &aImgNormal;
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 		nRet = mpThemes->InsertEntry( pEntry->GetThemeName(), *pImage );
229*b1cdbd2cSJim Jagielski 	}
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 	return nRet;
232*b1cdbd2cSJim Jagielski }
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
235*b1cdbd2cSJim Jagielski 
ImplAdjustControls()236*b1cdbd2cSJim Jagielski void GalleryBrowser1::ImplAdjustControls()
237*b1cdbd2cSJim Jagielski {
238*b1cdbd2cSJim Jagielski 	const Size	aOutSize( GetOutputSizePixel() );
239*b1cdbd2cSJim Jagielski 	const long	nNewThemeHeight = LogicToPixel( Size( 0, 14 ), MAP_APPFONT ).Height();
240*b1cdbd2cSJim Jagielski     const long  nStartY = nNewThemeHeight + 4;
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski 	maNewTheme.SetPosSizePixel( Point(),
243*b1cdbd2cSJim Jagielski 								Size( aOutSize.Width(), nNewThemeHeight ) );
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 	mpThemes->SetPosSizePixel( Point( 0, nStartY ),
246*b1cdbd2cSJim Jagielski 							   Size( aOutSize.Width(), aOutSize.Height() - nStartY ) );
247*b1cdbd2cSJim Jagielski }
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
250*b1cdbd2cSJim Jagielski 
ImplFillExchangeData(const GalleryTheme * pThm,ExchangeData & rData)251*b1cdbd2cSJim Jagielski void GalleryBrowser1::ImplFillExchangeData( const GalleryTheme* pThm, ExchangeData& rData )
252*b1cdbd2cSJim Jagielski {
253*b1cdbd2cSJim Jagielski 	rData.pTheme = (GalleryTheme*) pThm;
254*b1cdbd2cSJim Jagielski 	rData.aEditedTitle = pThm->GetName();
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski 	try
257*b1cdbd2cSJim Jagielski 	{
258*b1cdbd2cSJim Jagielski 		::ucbhelper::Content aCnt( pThm->GetThmURL().GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment >() );
259*b1cdbd2cSJim Jagielski 		util::DateTime	aDateTimeModified;
260*b1cdbd2cSJim Jagielski 		DateTime		aDateTime;
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski 		aCnt.getPropertyValue( OUString::createFromAscii( "DateModified" ) ) >>= aDateTimeModified;
263*b1cdbd2cSJim Jagielski 		::utl::typeConvert( aDateTimeModified, aDateTime );
264*b1cdbd2cSJim Jagielski 		rData.aThemeChangeDate = aDateTime;
265*b1cdbd2cSJim Jagielski 		rData.aThemeChangeTime = aDateTime;
266*b1cdbd2cSJim Jagielski 	}
267*b1cdbd2cSJim Jagielski 	catch( const ucb::ContentCreationException& )
268*b1cdbd2cSJim Jagielski 	{
269*b1cdbd2cSJim Jagielski 	}
270*b1cdbd2cSJim Jagielski 	catch( const uno::RuntimeException& )
271*b1cdbd2cSJim Jagielski 	{
272*b1cdbd2cSJim Jagielski 	}
273*b1cdbd2cSJim Jagielski 	catch( const uno::Exception& )
274*b1cdbd2cSJim Jagielski 	{
275*b1cdbd2cSJim Jagielski 	}
276*b1cdbd2cSJim Jagielski }
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
279*b1cdbd2cSJim Jagielski 
ImplGetExecuteVector(::std::vector<sal_uInt16> & o_aExec)280*b1cdbd2cSJim Jagielski void GalleryBrowser1::ImplGetExecuteVector(::std::vector< sal_uInt16 >& o_aExec)
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski 	GalleryTheme*           pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this );
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 	if( pTheme )
285*b1cdbd2cSJim Jagielski 	{
286*b1cdbd2cSJim Jagielski 		sal_Bool                bUpdateAllowed, bRenameAllowed, bRemoveAllowed;
287*b1cdbd2cSJim Jagielski 		static const sal_Bool	bIdDialog = ( getenv( "GALLERY_ENABLE_ID_DIALOG" ) != NULL );
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 		if( pTheme->IsReadOnly() )
290*b1cdbd2cSJim Jagielski 			bUpdateAllowed = bRenameAllowed = bRemoveAllowed = sal_False;
291*b1cdbd2cSJim Jagielski 		else if( pTheme->IsImported() )
292*b1cdbd2cSJim Jagielski 		{
293*b1cdbd2cSJim Jagielski 			bUpdateAllowed = sal_False;
294*b1cdbd2cSJim Jagielski 			bRenameAllowed = bRemoveAllowed = sal_True;
295*b1cdbd2cSJim Jagielski 		}
296*b1cdbd2cSJim Jagielski 		else if( pTheme->IsDefault() )
297*b1cdbd2cSJim Jagielski 		{
298*b1cdbd2cSJim Jagielski 			bUpdateAllowed = bRenameAllowed = sal_True;
299*b1cdbd2cSJim Jagielski 			bRemoveAllowed = sal_False;
300*b1cdbd2cSJim Jagielski 		}
301*b1cdbd2cSJim Jagielski 		else
302*b1cdbd2cSJim Jagielski 			bUpdateAllowed = bRenameAllowed = bRemoveAllowed = sal_True;
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski         if( bUpdateAllowed && pTheme->GetObjectCount() )
305*b1cdbd2cSJim Jagielski             o_aExec.push_back( MN_ACTUALIZE );
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski         if( bRenameAllowed )
308*b1cdbd2cSJim Jagielski             o_aExec.push_back( MN_RENAME );
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski         if( bRemoveAllowed )
311*b1cdbd2cSJim Jagielski             o_aExec.push_back( MN_DELETE );
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski         if( bIdDialog && !pTheme->IsReadOnly() && !pTheme->IsImported() )
314*b1cdbd2cSJim Jagielski             o_aExec.push_back( MN_ASSIGN_ID );
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski         o_aExec.push_back( MN_PROPERTIES );
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 		mpGallery->ReleaseTheme( pTheme, *this );
319*b1cdbd2cSJim Jagielski     }
320*b1cdbd2cSJim Jagielski }
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
323*b1cdbd2cSJim Jagielski 
ImplGalleryThemeProperties(const String & rThemeName,bool bCreateNew)324*b1cdbd2cSJim Jagielski void GalleryBrowser1::ImplGalleryThemeProperties( const String & rThemeName, bool bCreateNew )
325*b1cdbd2cSJim Jagielski {
326*b1cdbd2cSJim Jagielski     DBG_ASSERT(!mpThemePropsDlgItemSet, "mpThemePropsDlgItemSet already set!");
327*b1cdbd2cSJim Jagielski     mpThemePropsDlgItemSet = new SfxItemSet( SFX_APP()->GetPool() );
328*b1cdbd2cSJim Jagielski     GalleryTheme*   pTheme = mpGallery->AcquireTheme( rThemeName, *this );
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski     ImplFillExchangeData( pTheme, *mpExchangeData );
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
333*b1cdbd2cSJim Jagielski     DBG_ASSERT(pFact, "Got no AbstractDialogFactory!");
334*b1cdbd2cSJim Jagielski     VclAbstractDialog2* pThemeProps = pFact->CreateGalleryThemePropertiesDialog( NULL, mpExchangeData, mpThemePropsDlgItemSet );
335*b1cdbd2cSJim Jagielski     DBG_ASSERT(pThemeProps, "Got no GalleryThemePropertiesDialog!");
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski     if ( bCreateNew )
338*b1cdbd2cSJim Jagielski     {
339*b1cdbd2cSJim Jagielski         pThemeProps->StartExecuteModal(
340*b1cdbd2cSJim Jagielski             LINK( this, GalleryBrowser1, EndNewThemePropertiesDlgHdl ) );
341*b1cdbd2cSJim Jagielski     }
342*b1cdbd2cSJim Jagielski     else
343*b1cdbd2cSJim Jagielski     {
344*b1cdbd2cSJim Jagielski         pThemeProps->StartExecuteModal(
345*b1cdbd2cSJim Jagielski             LINK( this, GalleryBrowser1, EndThemePropertiesDlgHdl ) );
346*b1cdbd2cSJim Jagielski     }
347*b1cdbd2cSJim Jagielski }
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
350*b1cdbd2cSJim Jagielski 
ImplEndGalleryThemeProperties(VclAbstractDialog2 * pDialog,bool bCreateNew)351*b1cdbd2cSJim Jagielski void GalleryBrowser1::ImplEndGalleryThemeProperties( VclAbstractDialog2* pDialog, bool bCreateNew )
352*b1cdbd2cSJim Jagielski {
353*b1cdbd2cSJim Jagielski     long nRet = pDialog->GetResult();
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski     if( nRet == RET_OK )
356*b1cdbd2cSJim Jagielski     {
357*b1cdbd2cSJim Jagielski         String aName( mpExchangeData->pTheme->GetName() );
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski         if( mpExchangeData->aEditedTitle.Len() && aName != mpExchangeData->aEditedTitle )
360*b1cdbd2cSJim Jagielski         {
361*b1cdbd2cSJim Jagielski             const String    aOldName( aName );
362*b1cdbd2cSJim Jagielski             String          aTitle( mpExchangeData->aEditedTitle );
363*b1cdbd2cSJim Jagielski             sal_uInt16          nCount = 0;
364*b1cdbd2cSJim Jagielski 
365*b1cdbd2cSJim Jagielski             while( mpGallery->HasTheme( aTitle ) && ( nCount++ < 16000 ) )
366*b1cdbd2cSJim Jagielski             {
367*b1cdbd2cSJim Jagielski                 aTitle = mpExchangeData->aEditedTitle;
368*b1cdbd2cSJim Jagielski                 aTitle += ' ';
369*b1cdbd2cSJim Jagielski                 aTitle += String::CreateFromInt32( nCount );
370*b1cdbd2cSJim Jagielski             }
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski             mpGallery->RenameTheme( aOldName, aTitle );
373*b1cdbd2cSJim Jagielski         }
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski         if ( bCreateNew )
376*b1cdbd2cSJim Jagielski         {
377*b1cdbd2cSJim Jagielski             mpThemes->SelectEntry( mpExchangeData->pTheme->GetName() );
378*b1cdbd2cSJim Jagielski             SelectThemeHdl( NULL );
379*b1cdbd2cSJim Jagielski         }
380*b1cdbd2cSJim Jagielski     }
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski     String aThemeName( mpExchangeData->pTheme->GetName() );
383*b1cdbd2cSJim Jagielski     mpGallery->ReleaseTheme( mpExchangeData->pTheme, *this );
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski     if ( bCreateNew && ( nRet != RET_OK ) )
386*b1cdbd2cSJim Jagielski     {
387*b1cdbd2cSJim Jagielski         mpGallery->RemoveTheme( aThemeName );
388*b1cdbd2cSJim Jagielski     }
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski     // destroy mpThemeProps asynchronously
391*b1cdbd2cSJim Jagielski     Application::PostUserEvent( LINK( this, GalleryBrowser1, DestroyThemePropertiesDlgHdl ) );
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
395*b1cdbd2cSJim Jagielski 
IMPL_LINK(GalleryBrowser1,EndNewThemePropertiesDlgHdl,VclAbstractDialog2 *,pDialog)396*b1cdbd2cSJim Jagielski IMPL_LINK( GalleryBrowser1, EndNewThemePropertiesDlgHdl, VclAbstractDialog2*, pDialog )
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski     ImplEndGalleryThemeProperties( pDialog, true );
399*b1cdbd2cSJim Jagielski     return 0L;
400*b1cdbd2cSJim Jagielski }
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
403*b1cdbd2cSJim Jagielski 
IMPL_LINK(GalleryBrowser1,EndThemePropertiesDlgHdl,VclAbstractDialog2 *,pDialog)404*b1cdbd2cSJim Jagielski IMPL_LINK( GalleryBrowser1, EndThemePropertiesDlgHdl, VclAbstractDialog2*, pDialog )
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski     ImplEndGalleryThemeProperties( pDialog, false );
407*b1cdbd2cSJim Jagielski     return 0L;
408*b1cdbd2cSJim Jagielski }
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
411*b1cdbd2cSJim Jagielski 
IMPL_LINK(GalleryBrowser1,DestroyThemePropertiesDlgHdl,VclAbstractDialog2 *,pDialog)412*b1cdbd2cSJim Jagielski IMPL_LINK( GalleryBrowser1, DestroyThemePropertiesDlgHdl, VclAbstractDialog2*, pDialog )
413*b1cdbd2cSJim Jagielski {
414*b1cdbd2cSJim Jagielski     delete pDialog;
415*b1cdbd2cSJim Jagielski     delete mpThemePropsDlgItemSet;
416*b1cdbd2cSJim Jagielski     mpThemePropsDlgItemSet = 0;
417*b1cdbd2cSJim Jagielski     return 0L;
418*b1cdbd2cSJim Jagielski }
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
421*b1cdbd2cSJim Jagielski 
ImplExecute(sal_uInt16 nId)422*b1cdbd2cSJim Jagielski void GalleryBrowser1::ImplExecute( sal_uInt16 nId )
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski 	switch( nId )
425*b1cdbd2cSJim Jagielski 	{
426*b1cdbd2cSJim Jagielski 		case( MN_ACTUALIZE ):
427*b1cdbd2cSJim Jagielski 		{
428*b1cdbd2cSJim Jagielski 			GalleryTheme*		pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this );
429*b1cdbd2cSJim Jagielski 			//CHINA001 ActualizeProgress	aActualizeProgress( this, pTheme );
430*b1cdbd2cSJim Jagielski 			SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
431*b1cdbd2cSJim Jagielski 			if(pFact)
432*b1cdbd2cSJim Jagielski 			{
433*b1cdbd2cSJim Jagielski 				VclAbstractRefreshableDialog* aActualizeProgress = pFact->CreateActualizeProgressDialog( this, pTheme );
434*b1cdbd2cSJim Jagielski 				DBG_ASSERT(aActualizeProgress, "Dialogdiet fail!");//CHINA001
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski 				aActualizeProgress->Update();  //CHINA001 aActualizeProgress.Update();
437*b1cdbd2cSJim Jagielski 				aActualizeProgress->Execute(); //CHINA001 aActualizeProgress.Execute();
438*b1cdbd2cSJim Jagielski 				mpGallery->ReleaseTheme( pTheme, *this );
439*b1cdbd2cSJim Jagielski 				delete aActualizeProgress;		//add CHINA001
440*b1cdbd2cSJim Jagielski 			}
441*b1cdbd2cSJim Jagielski 		}
442*b1cdbd2cSJim Jagielski 		break;
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski 		case( MN_DELETE  ):
445*b1cdbd2cSJim Jagielski 		{
446*b1cdbd2cSJim Jagielski 			if( QueryBox( NULL, WB_YES_NO, String( GAL_RESID( RID_SVXSTR_GALLERY_DELETETHEME ) ) ).Execute() == RET_YES )
447*b1cdbd2cSJim Jagielski 				mpGallery->RemoveTheme( mpThemes->GetSelectEntry() );
448*b1cdbd2cSJim Jagielski 		}
449*b1cdbd2cSJim Jagielski 		break;
450*b1cdbd2cSJim Jagielski 
451*b1cdbd2cSJim Jagielski 		case( MN_RENAME ):
452*b1cdbd2cSJim Jagielski 		{
453*b1cdbd2cSJim Jagielski 			GalleryTheme*	pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this );
454*b1cdbd2cSJim Jagielski 			const String	aOldName( pTheme->GetName() );
455*b1cdbd2cSJim Jagielski 			//CHINA001 TitleDialog		aDlg( this, aOldName );
456*b1cdbd2cSJim Jagielski 			SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
457*b1cdbd2cSJim Jagielski 			DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
458*b1cdbd2cSJim Jagielski 			AbstractTitleDialog* aDlg = pFact->CreateTitleDialog( this, aOldName );
459*b1cdbd2cSJim Jagielski 			DBG_ASSERT(aDlg, "Dialogdiet fail!");//CHINA001
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski 			if( aDlg->Execute() == RET_OK ) //CHINA001 if( aDlg.Execute() == RET_OK )
462*b1cdbd2cSJim Jagielski 			{
463*b1cdbd2cSJim Jagielski 				const String aNewName( aDlg->GetTitle() ); //CHINA001 aDlg.GetTitle() );
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 				if( aNewName.Len() && ( aNewName != aOldName ) )
466*b1cdbd2cSJim Jagielski 				{
467*b1cdbd2cSJim Jagielski 					String	aName( aNewName );
468*b1cdbd2cSJim Jagielski 					sal_uInt16	nCount = 0;
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski 					while( mpGallery->HasTheme( aName ) && ( nCount++ < 16000 ) )
471*b1cdbd2cSJim Jagielski 					{
472*b1cdbd2cSJim Jagielski 						aName = aNewName;
473*b1cdbd2cSJim Jagielski 						aName += ' ';
474*b1cdbd2cSJim Jagielski 						aName += String::CreateFromInt32( nCount );
475*b1cdbd2cSJim Jagielski 					}
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 					mpGallery->RenameTheme( aOldName, aName );
478*b1cdbd2cSJim Jagielski 				}
479*b1cdbd2cSJim Jagielski 			}
480*b1cdbd2cSJim Jagielski 			mpGallery->ReleaseTheme( pTheme, *this );
481*b1cdbd2cSJim Jagielski 			delete aDlg; //add CHINA001
482*b1cdbd2cSJim Jagielski 		}
483*b1cdbd2cSJim Jagielski 		break;
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski 		case( MN_ASSIGN_ID ):
486*b1cdbd2cSJim Jagielski 		{
487*b1cdbd2cSJim Jagielski 			GalleryTheme* pTheme = mpGallery->AcquireTheme( GetSelectedTheme(), *this );
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski 			if( pTheme && !pTheme->IsReadOnly() && !pTheme->IsImported() )
490*b1cdbd2cSJim Jagielski 			{
491*b1cdbd2cSJim Jagielski 				//CHINA001 GalleryIdDialog aDlg( this, pTheme );
492*b1cdbd2cSJim Jagielski 				SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
493*b1cdbd2cSJim Jagielski 				if(pFact)
494*b1cdbd2cSJim Jagielski 				{
495*b1cdbd2cSJim Jagielski 					AbstractGalleryIdDialog* aDlg = pFact->CreateGalleryIdDialog( this, pTheme );
496*b1cdbd2cSJim Jagielski 					DBG_ASSERT(aDlg, "Dialogdiet fail!");//CHINA001
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 					if( aDlg->Execute() == RET_OK ) //CHINA001 if( aDlg.Execute() == RET_OK )
499*b1cdbd2cSJim Jagielski 						pTheme->SetId( aDlg->GetId(), sal_True ); //CHINA001 pTheme->SetId( aDlg.GetId(), sal_True );
500*b1cdbd2cSJim Jagielski 					delete aDlg; //add CHINA001
501*b1cdbd2cSJim Jagielski 				}
502*b1cdbd2cSJim Jagielski 			}
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski 			mpGallery->ReleaseTheme( pTheme, *this );
505*b1cdbd2cSJim Jagielski 		}
506*b1cdbd2cSJim Jagielski 		break;
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski 		case( MN_PROPERTIES ):
509*b1cdbd2cSJim Jagielski 		{
510*b1cdbd2cSJim Jagielski             ImplGalleryThemeProperties( GetSelectedTheme(), false );
511*b1cdbd2cSJim Jagielski 		}
512*b1cdbd2cSJim Jagielski 		break;
513*b1cdbd2cSJim Jagielski 	}
514*b1cdbd2cSJim Jagielski }
515*b1cdbd2cSJim Jagielski 
516*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
517*b1cdbd2cSJim Jagielski 
Resize()518*b1cdbd2cSJim Jagielski void GalleryBrowser1::Resize()
519*b1cdbd2cSJim Jagielski {
520*b1cdbd2cSJim Jagielski 	Control::Resize();
521*b1cdbd2cSJim Jagielski 	ImplAdjustControls();
522*b1cdbd2cSJim Jagielski }
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
525*b1cdbd2cSJim Jagielski 
GetFocus()526*b1cdbd2cSJim Jagielski void GalleryBrowser1::GetFocus()
527*b1cdbd2cSJim Jagielski {
528*b1cdbd2cSJim Jagielski 	Control::GetFocus();
529*b1cdbd2cSJim Jagielski 	if( mpThemes )
530*b1cdbd2cSJim Jagielski 		mpThemes->GrabFocus();
531*b1cdbd2cSJim Jagielski }
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
534*b1cdbd2cSJim Jagielski 
Notify(SfxBroadcaster &,const SfxHint & rHint)535*b1cdbd2cSJim Jagielski void GalleryBrowser1::Notify( SfxBroadcaster&, const SfxHint& rHint )
536*b1cdbd2cSJim Jagielski {
537*b1cdbd2cSJim Jagielski 	const GalleryHint& rGalleryHint = (const GalleryHint&) rHint;
538*b1cdbd2cSJim Jagielski 
539*b1cdbd2cSJim Jagielski 	switch( rGalleryHint.GetType() )
540*b1cdbd2cSJim Jagielski 	{
541*b1cdbd2cSJim Jagielski 		case( GALLERY_HINT_THEME_CREATED ):
542*b1cdbd2cSJim Jagielski 			ImplInsertThemeEntry( mpGallery->GetThemeInfo( rGalleryHint.GetThemeName() ) );
543*b1cdbd2cSJim Jagielski 		break;
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski 		case( GALLERY_HINT_THEME_RENAMED ):
546*b1cdbd2cSJim Jagielski 		{
547*b1cdbd2cSJim Jagielski 			const sal_uInt16 nCurSelectPos = mpThemes->GetSelectEntryPos();
548*b1cdbd2cSJim Jagielski 			const sal_uInt16 nRenameEntryPos = mpThemes->GetEntryPos( rGalleryHint.GetThemeName() );
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski 			mpThemes->RemoveEntry( rGalleryHint.GetThemeName() );
551*b1cdbd2cSJim Jagielski 			ImplInsertThemeEntry( mpGallery->GetThemeInfo( rGalleryHint.GetStringData() ) );
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski 			if( nCurSelectPos == nRenameEntryPos )
554*b1cdbd2cSJim Jagielski 			{
555*b1cdbd2cSJim Jagielski 				mpThemes->SelectEntry( rGalleryHint.GetStringData() );
556*b1cdbd2cSJim Jagielski 				SelectThemeHdl( NULL );
557*b1cdbd2cSJim Jagielski 			}
558*b1cdbd2cSJim Jagielski 		}
559*b1cdbd2cSJim Jagielski 		break;
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski 		case( GALLERY_HINT_THEME_REMOVED ):
562*b1cdbd2cSJim Jagielski 		{
563*b1cdbd2cSJim Jagielski 			mpThemes->RemoveEntry( rGalleryHint.GetThemeName() );
564*b1cdbd2cSJim Jagielski 		}
565*b1cdbd2cSJim Jagielski 		break;
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski 		case( GALLERY_HINT_CLOSE_THEME ):
568*b1cdbd2cSJim Jagielski 		{
569*b1cdbd2cSJim Jagielski 			const sal_uInt16 nCurSelectPos = mpThemes->GetSelectEntryPos();
570*b1cdbd2cSJim Jagielski 			const sal_uInt16 nCloseEntryPos = mpThemes->GetEntryPos( rGalleryHint.GetThemeName() );
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski 			if( nCurSelectPos == nCloseEntryPos )
573*b1cdbd2cSJim Jagielski 			{
574*b1cdbd2cSJim Jagielski 				if( nCurSelectPos < ( mpThemes->GetEntryCount() - 1 ) )
575*b1cdbd2cSJim Jagielski 					mpThemes->SelectEntryPos( nCurSelectPos + 1 );
576*b1cdbd2cSJim Jagielski 				else if( nCurSelectPos )
577*b1cdbd2cSJim Jagielski 					mpThemes->SelectEntryPos( nCurSelectPos - 1 );
578*b1cdbd2cSJim Jagielski 				else
579*b1cdbd2cSJim Jagielski 					mpThemes->SetNoSelection();
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski 				SelectThemeHdl( NULL );
582*b1cdbd2cSJim Jagielski 			}
583*b1cdbd2cSJim Jagielski 		}
584*b1cdbd2cSJim Jagielski 		break;
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski 		default:
587*b1cdbd2cSJim Jagielski 		break;
588*b1cdbd2cSJim Jagielski 	}
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski 
591*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
592*b1cdbd2cSJim Jagielski 
ShowContextMenu()593*b1cdbd2cSJim Jagielski void GalleryBrowser1::ShowContextMenu()
594*b1cdbd2cSJim Jagielski {
595*b1cdbd2cSJim Jagielski 	Application::PostUserEvent( LINK( this, GalleryBrowser1, ShowContextMenuHdl ), this );
596*b1cdbd2cSJim Jagielski }
597*b1cdbd2cSJim Jagielski 
598*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
599*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKEvt,Window * pWindow)600*b1cdbd2cSJim Jagielski sal_Bool GalleryBrowser1::KeyInput( const KeyEvent& rKEvt, Window* pWindow )
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski     sal_Bool bRet (sal_False);
603*b1cdbd2cSJim Jagielski     if (maKeyInputHandler)
604*b1cdbd2cSJim Jagielski         bRet = maKeyInputHandler(rKEvt, pWindow);
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski     if( !bRet )
607*b1cdbd2cSJim Jagielski     {
608*b1cdbd2cSJim Jagielski         ::std::vector< sal_uInt16 > aExecVector;
609*b1cdbd2cSJim Jagielski         ImplGetExecuteVector(aExecVector);
610*b1cdbd2cSJim Jagielski         sal_uInt16                  nExecuteId = 0;
611*b1cdbd2cSJim Jagielski         sal_Bool                    bMod1 = rKEvt.GetKeyCode().IsMod1();
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski         switch( rKEvt.GetKeyCode().GetCode() )
614*b1cdbd2cSJim Jagielski         {
615*b1cdbd2cSJim Jagielski             case( KEY_INSERT ):
616*b1cdbd2cSJim Jagielski                 ClickNewThemeHdl( NULL );
617*b1cdbd2cSJim Jagielski             break;
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski             case( KEY_I ):
620*b1cdbd2cSJim Jagielski             {
621*b1cdbd2cSJim Jagielski                 if( bMod1 )
622*b1cdbd2cSJim Jagielski                    ClickNewThemeHdl( NULL );
623*b1cdbd2cSJim Jagielski             }
624*b1cdbd2cSJim Jagielski             break;
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski             case( KEY_U ):
627*b1cdbd2cSJim Jagielski             {
628*b1cdbd2cSJim Jagielski                 if( bMod1 )
629*b1cdbd2cSJim Jagielski                     nExecuteId = MN_ACTUALIZE;
630*b1cdbd2cSJim Jagielski             }
631*b1cdbd2cSJim Jagielski             break;
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski             case( KEY_DELETE ):
634*b1cdbd2cSJim Jagielski                 nExecuteId = MN_DELETE;
635*b1cdbd2cSJim Jagielski             break;
636*b1cdbd2cSJim Jagielski 
637*b1cdbd2cSJim Jagielski             case( KEY_D ):
638*b1cdbd2cSJim Jagielski             {
639*b1cdbd2cSJim Jagielski                 if( bMod1 )
640*b1cdbd2cSJim Jagielski                     nExecuteId = MN_DELETE;
641*b1cdbd2cSJim Jagielski             }
642*b1cdbd2cSJim Jagielski             break;
643*b1cdbd2cSJim Jagielski 
644*b1cdbd2cSJim Jagielski             case( KEY_R ):
645*b1cdbd2cSJim Jagielski             {
646*b1cdbd2cSJim Jagielski                 if( bMod1 )
647*b1cdbd2cSJim Jagielski                     nExecuteId = MN_RENAME;
648*b1cdbd2cSJim Jagielski             }
649*b1cdbd2cSJim Jagielski             break;
650*b1cdbd2cSJim Jagielski 
651*b1cdbd2cSJim Jagielski             case( KEY_RETURN ):
652*b1cdbd2cSJim Jagielski             {
653*b1cdbd2cSJim Jagielski                 if( bMod1 )
654*b1cdbd2cSJim Jagielski                     nExecuteId = MN_PROPERTIES;
655*b1cdbd2cSJim Jagielski             }
656*b1cdbd2cSJim Jagielski             break;
657*b1cdbd2cSJim Jagielski         }
658*b1cdbd2cSJim Jagielski 
659*b1cdbd2cSJim Jagielski         if( nExecuteId && ( ::std::find( aExecVector.begin(), aExecVector.end(), nExecuteId ) != aExecVector.end() ) )
660*b1cdbd2cSJim Jagielski         {
661*b1cdbd2cSJim Jagielski             ImplExecute( nExecuteId );
662*b1cdbd2cSJim Jagielski             bRet = sal_True;
663*b1cdbd2cSJim Jagielski         }
664*b1cdbd2cSJim Jagielski     }
665*b1cdbd2cSJim Jagielski 
666*b1cdbd2cSJim Jagielski     return bRet;
667*b1cdbd2cSJim Jagielski }
668*b1cdbd2cSJim Jagielski 
669*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
670*b1cdbd2cSJim Jagielski 
IMPL_LINK(GalleryBrowser1,ShowContextMenuHdl,void *,EMPTYARG)671*b1cdbd2cSJim Jagielski IMPL_LINK( GalleryBrowser1, ShowContextMenuHdl, void*, EMPTYARG )
672*b1cdbd2cSJim Jagielski {
673*b1cdbd2cSJim Jagielski     ::std::vector< sal_uInt16 > aExecVector;
674*b1cdbd2cSJim Jagielski     ImplGetExecuteVector(aExecVector);
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski     if( !aExecVector.empty() )
677*b1cdbd2cSJim Jagielski     {
678*b1cdbd2cSJim Jagielski 		PopupMenu aMenu( GAL_RESID( RID_SVXMN_GALLERY1 ) );
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski 		aMenu.EnableItem( MN_ACTUALIZE, ::std::find( aExecVector.begin(), aExecVector.end(), MN_ACTUALIZE ) != aExecVector.end() );
681*b1cdbd2cSJim Jagielski 		aMenu.EnableItem( MN_RENAME, ::std::find( aExecVector.begin(), aExecVector.end(), MN_RENAME ) != aExecVector.end() );
682*b1cdbd2cSJim Jagielski 		aMenu.EnableItem( MN_DELETE, ::std::find( aExecVector.begin(), aExecVector.end(), MN_DELETE ) != aExecVector.end() );
683*b1cdbd2cSJim Jagielski 		aMenu.EnableItem( MN_ASSIGN_ID, ::std::find( aExecVector.begin(), aExecVector.end(), MN_ASSIGN_ID ) != aExecVector.end() );
684*b1cdbd2cSJim Jagielski 		aMenu.EnableItem( MN_PROPERTIES, ::std::find( aExecVector.begin(), aExecVector.end(), MN_PROPERTIES ) != aExecVector.end() );
685*b1cdbd2cSJim Jagielski 		aMenu.SetSelectHdl( LINK( this, GalleryBrowser1, PopupMenuHdl ) );
686*b1cdbd2cSJim Jagielski 		aMenu.RemoveDisabledEntries();
687*b1cdbd2cSJim Jagielski 
688*b1cdbd2cSJim Jagielski 		const Rectangle aThemesRect( mpThemes->GetPosPixel(), mpThemes->GetOutputSizePixel() );
689*b1cdbd2cSJim Jagielski 		Point			aSelPos( mpThemes->GetBoundingRectangle( mpThemes->GetSelectEntryPos() ).Center() );
690*b1cdbd2cSJim Jagielski 
691*b1cdbd2cSJim Jagielski 		aSelPos.X() = Max( Min( aSelPos.X(), aThemesRect.Right() ), aThemesRect.Left() );
692*b1cdbd2cSJim Jagielski 		aSelPos.Y() = Max( Min( aSelPos.Y(), aThemesRect.Bottom() ), aThemesRect.Top() );
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski 		aMenu.Execute( this, aSelPos );
695*b1cdbd2cSJim Jagielski 	}
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski 	return 0L;
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski 
700*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
701*b1cdbd2cSJim Jagielski 
IMPL_LINK(GalleryBrowser1,PopupMenuHdl,Menu *,pMenu)702*b1cdbd2cSJim Jagielski IMPL_LINK( GalleryBrowser1, PopupMenuHdl, Menu*, pMenu )
703*b1cdbd2cSJim Jagielski {
704*b1cdbd2cSJim Jagielski     ImplExecute( pMenu->GetCurItemId() );
705*b1cdbd2cSJim Jagielski     return 0L;
706*b1cdbd2cSJim Jagielski }
707*b1cdbd2cSJim Jagielski 
708*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
709*b1cdbd2cSJim Jagielski 
IMPL_LINK(GalleryBrowser1,SelectThemeHdl,void *,EMPTYARG)710*b1cdbd2cSJim Jagielski IMPL_LINK( GalleryBrowser1, SelectThemeHdl, void*, EMPTYARG )
711*b1cdbd2cSJim Jagielski {
712*b1cdbd2cSJim Jagielski     if (maThemeSlectionHandler)
713*b1cdbd2cSJim Jagielski         maThemeSlectionHandler();
714*b1cdbd2cSJim Jagielski 	return 0L;
715*b1cdbd2cSJim Jagielski }
716*b1cdbd2cSJim Jagielski 
717*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
718*b1cdbd2cSJim Jagielski 
IMPL_LINK(GalleryBrowser1,ClickNewThemeHdl,void *,EMPTYARG)719*b1cdbd2cSJim Jagielski IMPL_LINK( GalleryBrowser1, ClickNewThemeHdl, void*, EMPTYARG )
720*b1cdbd2cSJim Jagielski {
721*b1cdbd2cSJim Jagielski 	String	aNewTheme( GAL_RESID( RID_SVXSTR_GALLERY_NEWTHEME ) );
722*b1cdbd2cSJim Jagielski 	String	aName( aNewTheme );
723*b1cdbd2cSJim Jagielski 	sal_uIntPtr	nCount = 0;
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski 	while( mpGallery->HasTheme( aName ) && ( nCount++ < 16000 ) )
726*b1cdbd2cSJim Jagielski 	{
727*b1cdbd2cSJim Jagielski 		aName = aNewTheme;
728*b1cdbd2cSJim Jagielski 		aName += ' ';
729*b1cdbd2cSJim Jagielski 		aName += String::CreateFromInt32( nCount );
730*b1cdbd2cSJim Jagielski 	}
731*b1cdbd2cSJim Jagielski 
732*b1cdbd2cSJim Jagielski 	if( !mpGallery->HasTheme( aName ) && mpGallery->CreateTheme( aName ) )
733*b1cdbd2cSJim Jagielski 	{
734*b1cdbd2cSJim Jagielski         ImplGalleryThemeProperties( aName, true );
735*b1cdbd2cSJim Jagielski 	}
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski 	return 0L;
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski 
740