/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"


#include "fuolbull.hxx"
#include <vcl/msgbox.hxx>
#include <svl/intitem.hxx>
#include <editeng/outliner.hxx>
#include <editeng/eeitem.hxx>
#include <sfx2/request.hxx>
#include <svl/intitem.hxx>

#include <editeng/editdata.hxx>
#include <svx/svxids.hrc>
#include "OutlineView.hxx"
#include "OutlineViewShell.hxx"
#include "DrawViewShell.hxx"
#ifndef SD_WINDOW_SHELL_HXX
#include "Window.hxx"
#endif
#include "drawdoc.hxx"
#include "sdabstdlg.hxx"

namespace sd {

TYPEINIT1( FuOutlineBullet, FuPoor );

/*************************************************************************
|*
|* Konstruktor
|*
\************************************************************************/

FuOutlineBullet::FuOutlineBullet(ViewShell* pViewShell, ::sd::Window* pWindow,
								 ::sd::View* pView, SdDrawDocument* pDoc,
								 SfxRequest& rReq)
	   : FuPoor(pViewShell, pWindow, pView, pDoc, rReq)
{
}

FunctionReference FuOutlineBullet::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
{
	FunctionReference xFunc( new FuOutlineBullet( pViewSh, pWin, pView, pDoc, rReq ) );
	xFunc->DoExecute(rReq);
	return xFunc;
}

void FuOutlineBullet::DoExecute( SfxRequest& rReq )
{
	const SfxItemSet* pArgs = rReq.GetArgs();

	if( !pArgs )
	{
		// ItemSet fuer Dialog fuellen
		SfxItemSet aEditAttr( mpDoc->GetPool() );
		mpView->GetAttributes( aEditAttr );

		SfxItemSet aNewAttr( mpViewShell->GetPool(),
							 EE_ITEMS_START, EE_ITEMS_END );
		aNewAttr.Put( aEditAttr, sal_False );

		// Dialog hochfahren und ausfuehren
		SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
		SfxAbstractTabDialog* pDlg = pFact ? pFact->CreateSdOutlineBulletTabDlg( NULL, &aNewAttr, mpView ) : 0;
		if( pDlg )
		{
			sal_uInt16 nResult = pDlg->Execute();

			switch( nResult )
			{
				case RET_OK:
				{
					SfxItemSet aSet( *pDlg->GetOutputItemSet() );

	                OutlinerView* pOLV = mpView->GetTextEditOutlinerView();

	                std::auto_ptr< OutlineViewModelChangeGuard > aGuard;

	                if (mpView->ISA(OutlineView))
	                {
		                pOLV = static_cast<OutlineView*>(mpView)
                            ->GetViewByWindow(mpViewShell->GetActiveWindow());

		                aGuard.reset( new OutlineViewModelChangeGuard( static_cast<OutlineView&>(*mpView) ) );
	                }

                    if( pOLV )
                        pOLV->EnableBullets();

					rReq.Done( aSet );
					pArgs = rReq.GetArgs();
				}
				break;

				default:
				{
					delete pDlg;
					return;
				}
			}

			delete pDlg;
		}
	}

	// nicht direkt an pOlView, damit SdDrawView::SetAttributes
	// Aenderungen auf der Masterpage abfangen und in eine
	// Vorlage umleiten kann
	mpView->SetAttributes(*pArgs);

/* #i35937#
	// evtl. Betroffene Felder invalidieren
	mpViewShell->Invalidate( FN_NUM_BULLET_ON );
*/
}



} // end of namespace sd
