xref: /aoo4110/main/sc/source/ui/view/editsh.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_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <com/sun/star/linguistic2/XThesaurus.hpp>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include "scitems.hxx"
34*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <svx/clipfmtitem.hxx>
37*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx>
38*b1cdbd2cSJim Jagielski #include <editeng/cntritem.hxx>
39*b1cdbd2cSJim Jagielski #include <editeng/outliner.hxx>
40*b1cdbd2cSJim Jagielski #include <editeng/unolingu.hxx>
41*b1cdbd2cSJim Jagielski #include <editeng/crsditem.hxx>
42*b1cdbd2cSJim Jagielski #include <editeng/editeng.hxx>
43*b1cdbd2cSJim Jagielski #include <editeng/editview.hxx>
44*b1cdbd2cSJim Jagielski #include <editeng/escpitem.hxx>
45*b1cdbd2cSJim Jagielski #include <editeng/flditem.hxx>
46*b1cdbd2cSJim Jagielski #include <editeng/fontitem.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/hlnkitem.hxx>
48*b1cdbd2cSJim Jagielski #include <sfx2/sidebar/EnumContext.hxx>
49*b1cdbd2cSJim Jagielski #include <editeng/postitem.hxx>
50*b1cdbd2cSJim Jagielski #include <editeng/scripttypeitem.hxx>
51*b1cdbd2cSJim Jagielski #include <editeng/shdditem.hxx>
52*b1cdbd2cSJim Jagielski #include <svl/srchitem.hxx>
53*b1cdbd2cSJim Jagielski #include <editeng/udlnitem.hxx>
54*b1cdbd2cSJim Jagielski #include <editeng/wghtitem.hxx>
55*b1cdbd2cSJim Jagielski #include <sfx2/basedlgs.hxx>
56*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
57*b1cdbd2cSJim Jagielski #include <sfx2/msg.hxx>
58*b1cdbd2cSJim Jagielski #include <sfx2/objface.hxx>
59*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
60*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
61*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
62*b1cdbd2cSJim Jagielski #include <sot/exchange.hxx>
63*b1cdbd2cSJim Jagielski #include <svtools/cliplistener.hxx>
64*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
65*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
66*b1cdbd2cSJim Jagielski #include <vcl/sound.hxx>
67*b1cdbd2cSJim Jagielski #include <sot/formats.hxx>
68*b1cdbd2cSJim Jagielski #include <svtools/transfer.hxx>
69*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski #define _EDITSH_CXX
72*b1cdbd2cSJim Jagielski #include "editsh.hxx"
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski #include "scresid.hxx"
75*b1cdbd2cSJim Jagielski #include "global.hxx"
76*b1cdbd2cSJim Jagielski #include "sc.hrc"
77*b1cdbd2cSJim Jagielski #include "scmod.hxx"
78*b1cdbd2cSJim Jagielski #include "inputhdl.hxx"
79*b1cdbd2cSJim Jagielski #include "viewutil.hxx"
80*b1cdbd2cSJim Jagielski #include "viewdata.hxx"
81*b1cdbd2cSJim Jagielski #include "document.hxx"
82*b1cdbd2cSJim Jagielski //CHINA001 #include "namepast.hxx"
83*b1cdbd2cSJim Jagielski #include "reffind.hxx"
84*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
85*b1cdbd2cSJim Jagielski //CHINA001 #include "textdlgs.hxx"
86*b1cdbd2cSJim Jagielski #include "editutil.hxx"
87*b1cdbd2cSJim Jagielski #include "globstr.hrc"
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski #define ScEditShell
90*b1cdbd2cSJim Jagielski #include "scslots.hxx"
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski #include "scui_def.hxx" //CHINA001
93*b1cdbd2cSJim Jagielski #include "scabstdlg.hxx" //CHINA001
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski TYPEINIT1( ScEditShell, SfxShell );
100*b1cdbd2cSJim Jagielski 
SFX_IMPL_INTERFACE(ScEditShell,SfxShell,ScResId (SCSTR_EDITSHELL))101*b1cdbd2cSJim Jagielski SFX_IMPL_INTERFACE(ScEditShell, SfxShell, ScResId(SCSTR_EDITSHELL))
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski 	SFX_POPUPMENU_REGISTRATION( ScResId(RID_POPUP_EDIT) );
104*b1cdbd2cSJim Jagielski }
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 
ScEditShell(EditView * pView,ScViewData * pData)107*b1cdbd2cSJim Jagielski ScEditShell::ScEditShell(EditView* pView, ScViewData* pData) :
108*b1cdbd2cSJim Jagielski 	pEditView		(pView),
109*b1cdbd2cSJim Jagielski 	pViewData		(pData),
110*b1cdbd2cSJim Jagielski 	pClipEvtLstnr	(NULL),
111*b1cdbd2cSJim Jagielski 	bPastePossible	(sal_False),
112*b1cdbd2cSJim Jagielski 	bIsInsertMode	(sal_True)
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski 	SetPool( pEditView->GetEditEngine()->GetEmptyItemSet().GetPool() );
115*b1cdbd2cSJim Jagielski 	SetUndoManager( &pEditView->GetEditEngine()->GetUndoManager() );
116*b1cdbd2cSJim Jagielski 	SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("EditCell")));
117*b1cdbd2cSJim Jagielski     SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_EditCell));
118*b1cdbd2cSJim Jagielski }
119*b1cdbd2cSJim Jagielski 
~ScEditShell()120*b1cdbd2cSJim Jagielski ScEditShell::~ScEditShell()
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski 	if ( pClipEvtLstnr )
123*b1cdbd2cSJim Jagielski 	{
124*b1cdbd2cSJim Jagielski 		pClipEvtLstnr->AddRemoveListener( pViewData->GetActiveWin(), sal_False );
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski         //  #122057# The listener may just now be waiting for the SolarMutex and call the link
127*b1cdbd2cSJim Jagielski         //  afterwards, in spite of RemoveListener. So the link has to be reset, too.
128*b1cdbd2cSJim Jagielski         pClipEvtLstnr->ClearCallbackLink();
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski 		pClipEvtLstnr->release();
131*b1cdbd2cSJim Jagielski 	}
132*b1cdbd2cSJim Jagielski }
133*b1cdbd2cSJim Jagielski 
GetMyInputHdl()134*b1cdbd2cSJim Jagielski ScInputHandler* ScEditShell::GetMyInputHdl()
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski 	return SC_MOD()->GetInputHdl( pViewData->GetViewShell() );
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski 
SetEditView(EditView * pView)139*b1cdbd2cSJim Jagielski void ScEditShell::SetEditView(EditView* pView)
140*b1cdbd2cSJim Jagielski {
141*b1cdbd2cSJim Jagielski 	pEditView = pView;
142*b1cdbd2cSJim Jagielski 	pEditView->SetInsertMode( bIsInsertMode );
143*b1cdbd2cSJim Jagielski 	SetPool( pEditView->GetEditEngine()->GetEmptyItemSet().GetPool() );
144*b1cdbd2cSJim Jagielski 	SetUndoManager( &pEditView->GetEditEngine()->GetUndoManager() );
145*b1cdbd2cSJim Jagielski }
146*b1cdbd2cSJim Jagielski 
lcl_RemoveAttribs(EditView & rEditView)147*b1cdbd2cSJim Jagielski void lcl_RemoveAttribs( EditView& rEditView )
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski 	ScEditEngineDefaulter* pEngine = static_cast<ScEditEngineDefaulter*>(rEditView.GetEditEngine());
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 	sal_Bool bOld = pEngine->GetUpdateMode();
152*b1cdbd2cSJim Jagielski 	pEngine->SetUpdateMode(sal_False);
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 	String aName = ScGlobal::GetRscString( STR_UNDO_DELETECONTENTS );
155*b1cdbd2cSJim Jagielski 	pEngine->GetUndoManager().EnterListAction( aName, aName );
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	rEditView.RemoveAttribs(sal_True);
158*b1cdbd2cSJim Jagielski 	pEngine->RepeatDefaults();		// #97226# paragraph attributes from cell formats must be preserved
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 	pEngine->GetUndoManager().LeaveListAction();
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	pEngine->SetUpdateMode(bOld);
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski 
lclInsertCharacter(EditView * pTableView,EditView * pTopView,sal_Unicode cChar)165*b1cdbd2cSJim Jagielski void lclInsertCharacter( EditView* pTableView, EditView* pTopView, sal_Unicode cChar )
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski     String aString( cChar );
168*b1cdbd2cSJim Jagielski     if( pTableView )
169*b1cdbd2cSJim Jagielski         pTableView->InsertText( aString );
170*b1cdbd2cSJim Jagielski     if( pTopView )
171*b1cdbd2cSJim Jagielski         pTopView->InsertText( aString );
172*b1cdbd2cSJim Jagielski }
173*b1cdbd2cSJim Jagielski 
Execute(SfxRequest & rReq)174*b1cdbd2cSJim Jagielski void ScEditShell::Execute( SfxRequest& rReq )
175*b1cdbd2cSJim Jagielski {
176*b1cdbd2cSJim Jagielski 	const SfxItemSet*	pReqArgs	= rReq.GetArgs();
177*b1cdbd2cSJim Jagielski 	sal_uInt16				nSlot		= rReq.GetSlot();
178*b1cdbd2cSJim Jagielski 	SfxBindings&		rBindings	= pViewData->GetBindings();
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 	ScInputHandler* pHdl = GetMyInputHdl();
181*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pHdl,"kein ScInputHandler");
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 	EditView* pTopView	 = pHdl->GetTopView();		// hat Eingabezeile den Focus?
184*b1cdbd2cSJim Jagielski 	EditView* pTableView = pHdl->GetTableView();
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pTableView,"no EditView :-(");
187*b1cdbd2cSJim Jagielski     /* #i91683# No EditView if spell-check dialog is active and positioned on
188*b1cdbd2cSJim Jagielski      * an error and user immediately (without double click or F2) selected a
189*b1cdbd2cSJim Jagielski      * text portion of that cell with the mouse and wanted to modify it. */
190*b1cdbd2cSJim Jagielski     /* FIXME: Bailing out only cures the symptom and prevents a crash, no edit
191*b1cdbd2cSJim Jagielski      * action is possible. A real fix somehow would need to create a valid
192*b1cdbd2cSJim Jagielski      * EditView from the spell-check view. */
193*b1cdbd2cSJim Jagielski     if (!pTableView)
194*b1cdbd2cSJim Jagielski         return;
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 	EditEngine* pEngine = pTableView->GetEditEngine();
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 	pHdl->DataChanging();
199*b1cdbd2cSJim Jagielski 	sal_Bool bSetSelIsRef = sal_False;
200*b1cdbd2cSJim Jagielski     sal_Bool bSetModified = sal_True;
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 	switch ( nSlot )
203*b1cdbd2cSJim Jagielski 	{
204*b1cdbd2cSJim Jagielski 		case FID_INS_CELL_CONTENTS: // Insert-Taste, weil als Acc definiert
205*b1cdbd2cSJim Jagielski 			bIsInsertMode = !pTableView->IsInsertMode();
206*b1cdbd2cSJim Jagielski 			pTableView->SetInsertMode( bIsInsertMode );
207*b1cdbd2cSJim Jagielski 			if (pTopView)
208*b1cdbd2cSJim Jagielski 				pTopView->SetInsertMode( bIsInsertMode );
209*b1cdbd2cSJim Jagielski 			rBindings.Invalidate( SID_ATTR_INSERT );
210*b1cdbd2cSJim Jagielski 			break;
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 		case SID_ATTR_INSERT:
213*b1cdbd2cSJim Jagielski 			if ( pReqArgs )
214*b1cdbd2cSJim Jagielski 			{
215*b1cdbd2cSJim Jagielski 				bIsInsertMode = ((const SfxBoolItem&)pReqArgs->Get(nSlot)).GetValue();
216*b1cdbd2cSJim Jagielski 				pTableView->SetInsertMode( bIsInsertMode );
217*b1cdbd2cSJim Jagielski 				if (pTopView)
218*b1cdbd2cSJim Jagielski 					pTopView->SetInsertMode( bIsInsertMode );
219*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( SID_ATTR_INSERT );
220*b1cdbd2cSJim Jagielski 			}
221*b1cdbd2cSJim Jagielski 			break;
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski         case SID_THES:
224*b1cdbd2cSJim Jagielski             {
225*b1cdbd2cSJim Jagielski                 String aReplaceText;
226*b1cdbd2cSJim Jagielski                 SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES , sal_False );
227*b1cdbd2cSJim Jagielski                 if (pItem2)
228*b1cdbd2cSJim Jagielski                     aReplaceText = pItem2->GetValue();
229*b1cdbd2cSJim Jagielski                 if (aReplaceText.Len() > 0)
230*b1cdbd2cSJim Jagielski                     ReplaceTextWithSynonym( *pEditView, aReplaceText );
231*b1cdbd2cSJim Jagielski             }
232*b1cdbd2cSJim Jagielski             break;
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 		case SID_COPY:
235*b1cdbd2cSJim Jagielski 			pTableView->Copy();
236*b1cdbd2cSJim Jagielski             bSetModified = sal_False;
237*b1cdbd2cSJim Jagielski 			break;
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 		case SID_CUT:
240*b1cdbd2cSJim Jagielski 			pTableView->Cut();
241*b1cdbd2cSJim Jagielski 			if (pTopView)
242*b1cdbd2cSJim Jagielski 				pTopView->DeleteSelected();
243*b1cdbd2cSJim Jagielski 			break;
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 		case SID_PASTE:
246*b1cdbd2cSJim Jagielski 			pTableView->PasteSpecial();
247*b1cdbd2cSJim Jagielski 			if (pTopView)
248*b1cdbd2cSJim Jagielski 				pTopView->Paste();
249*b1cdbd2cSJim Jagielski 			break;
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 		case SID_DELETE:
252*b1cdbd2cSJim Jagielski 			pTableView->DeleteSelected();
253*b1cdbd2cSJim Jagielski 			if (pTopView)
254*b1cdbd2cSJim Jagielski 				pTopView->DeleteSelected();
255*b1cdbd2cSJim Jagielski 			break;
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 		case SID_CELL_FORMAT_RESET:					// "Standard"
258*b1cdbd2cSJim Jagielski 			lcl_RemoveAttribs( *pTableView );
259*b1cdbd2cSJim Jagielski 			if ( pTopView )
260*b1cdbd2cSJim Jagielski 				lcl_RemoveAttribs( *pTopView );
261*b1cdbd2cSJim Jagielski 			break;
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski 		case SID_CLIPBOARD_FORMAT_ITEMS:
264*b1cdbd2cSJim Jagielski 			{
265*b1cdbd2cSJim Jagielski 				sal_uLong nFormat = 0;
266*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
267*b1cdbd2cSJim Jagielski 				if ( pReqArgs &&
268*b1cdbd2cSJim Jagielski 					 pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET &&
269*b1cdbd2cSJim Jagielski 					 pItem->ISA(SfxUInt32Item) )
270*b1cdbd2cSJim Jagielski 				{
271*b1cdbd2cSJim Jagielski 					nFormat = ((const SfxUInt32Item*)pItem)->GetValue();
272*b1cdbd2cSJim Jagielski 				}
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 				if ( nFormat )
275*b1cdbd2cSJim Jagielski 				{
276*b1cdbd2cSJim Jagielski 					if (SOT_FORMAT_STRING == nFormat)
277*b1cdbd2cSJim Jagielski 						pTableView->Paste();
278*b1cdbd2cSJim Jagielski 					else
279*b1cdbd2cSJim Jagielski 						pTableView->PasteSpecial();
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski 					if (pTopView)
282*b1cdbd2cSJim Jagielski 						pTopView->Paste();
283*b1cdbd2cSJim Jagielski 				}
284*b1cdbd2cSJim Jagielski 			}
285*b1cdbd2cSJim Jagielski 			break;
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski         case SID_PASTE_SPECIAL:
288*b1cdbd2cSJim Jagielski 			{
289*b1cdbd2cSJim Jagielski                 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
290*b1cdbd2cSJim Jagielski                 SfxAbstractPasteDialog* pDlg = pFact->CreatePasteDialog( pViewData->GetDialogParent() );
291*b1cdbd2cSJim Jagielski                 sal_uLong nFormat = 0;
292*b1cdbd2cSJim Jagielski                 if ( pDlg )
293*b1cdbd2cSJim Jagielski                 {
294*b1cdbd2cSJim Jagielski                     pDlg->Insert( SOT_FORMAT_STRING, EMPTY_STRING );
295*b1cdbd2cSJim Jagielski                     pDlg->Insert( SOT_FORMAT_RTF,    EMPTY_STRING );
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski                     TransferableDataHelper aDataHelper(
298*b1cdbd2cSJim Jagielski                         TransferableDataHelper::CreateFromSystemClipboard( pViewData->GetActiveWin() ) );
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski                     nFormat = pDlg->GetFormat( aDataHelper.GetTransferable() );
301*b1cdbd2cSJim Jagielski                     DELETEZ(pDlg);
302*b1cdbd2cSJim Jagielski                 }
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski 				// while the dialog was open, edit mode may have been stopped
305*b1cdbd2cSJim Jagielski 				if (!SC_MOD()->IsInputMode())
306*b1cdbd2cSJim Jagielski 				{
307*b1cdbd2cSJim Jagielski 					Sound::Beep();
308*b1cdbd2cSJim Jagielski 					return;
309*b1cdbd2cSJim Jagielski 				}
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski 				if (nFormat > 0)
312*b1cdbd2cSJim Jagielski 				{
313*b1cdbd2cSJim Jagielski 					if (SOT_FORMAT_STRING == nFormat)
314*b1cdbd2cSJim Jagielski 						pTableView->Paste();
315*b1cdbd2cSJim Jagielski 					else
316*b1cdbd2cSJim Jagielski 						pTableView->PasteSpecial();
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 					if (pTopView)
319*b1cdbd2cSJim Jagielski 						pTopView->Paste();
320*b1cdbd2cSJim Jagielski 				}
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski 				if (pTopView)
323*b1cdbd2cSJim Jagielski 					pTopView->GetWindow()->GrabFocus();
324*b1cdbd2cSJim Jagielski 			}
325*b1cdbd2cSJim Jagielski 			break;
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski 		case SID_SELECTALL:
328*b1cdbd2cSJim Jagielski 			{
329*b1cdbd2cSJim Jagielski 				sal_uInt16 nPar = pEngine->GetParagraphCount();
330*b1cdbd2cSJim Jagielski 				if (nPar)
331*b1cdbd2cSJim Jagielski 				{
332*b1cdbd2cSJim Jagielski 					xub_StrLen nLen = pEngine->GetTextLen(nPar-1);
333*b1cdbd2cSJim Jagielski 					pTableView->SetSelection(ESelection(0,0,nPar-1,nLen));
334*b1cdbd2cSJim Jagielski 					if (pTopView)
335*b1cdbd2cSJim Jagielski 						pTopView->SetSelection(ESelection(0,0,nPar-1,nLen));
336*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_FONT );
337*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
338*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_WEIGHT );
339*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_POSTURE );
340*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_UNDERLINE );
341*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT );
342*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED );
343*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_KERNING );
344*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_ATTR_CHAR_COLOR );
345*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_SET_SUPER_SCRIPT );
346*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( SID_SET_SUB_SCRIPT );
347*b1cdbd2cSJim Jagielski 				}
348*b1cdbd2cSJim Jagielski                 bSetModified = sal_False;
349*b1cdbd2cSJim Jagielski 			}
350*b1cdbd2cSJim Jagielski 			break;
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski 		case SID_CHARMAP:
353*b1cdbd2cSJim Jagielski 			{
354*b1cdbd2cSJim Jagielski 				sal_uInt16 nScript = pTableView->GetSelectedScriptType();
355*b1cdbd2cSJim Jagielski 				sal_uInt16 nFontWhich = ( nScript == SCRIPTTYPE_ASIAN ) ? EE_CHAR_FONTINFO_CJK :
356*b1cdbd2cSJim Jagielski 								( ( nScript == SCRIPTTYPE_COMPLEX ) ? EE_CHAR_FONTINFO_CTL :
357*b1cdbd2cSJim Jagielski 																		EE_CHAR_FONTINFO );
358*b1cdbd2cSJim Jagielski 				const SvxFontItem& rItem = (const SvxFontItem&)
359*b1cdbd2cSJim Jagielski 							pTableView->GetAttribs().Get(nFontWhich);
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 				String aString;
362*b1cdbd2cSJim Jagielski 				SvxFontItem aNewItem( EE_CHAR_FONTINFO );
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski 				const SfxItemSet *pArgs = rReq.GetArgs();
365*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem = 0;
366*b1cdbd2cSJim Jagielski 				if( pArgs )
367*b1cdbd2cSJim Jagielski 					pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), sal_False, &pItem);
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 				if ( pItem )
370*b1cdbd2cSJim Jagielski 				{
371*b1cdbd2cSJim Jagielski 					aString = ((const SfxStringItem*)pItem)->GetValue();
372*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pFtItem = NULL;
373*b1cdbd2cSJim Jagielski 					pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), sal_False, &pFtItem);
374*b1cdbd2cSJim Jagielski 					const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem );
375*b1cdbd2cSJim Jagielski 					if ( pFontItem )
376*b1cdbd2cSJim Jagielski 					{
377*b1cdbd2cSJim Jagielski 						String aFontName(pFontItem->GetValue());
378*b1cdbd2cSJim Jagielski 					    Font aFont(aFontName, Size(1,1)); // Size nur wg. CTOR
379*b1cdbd2cSJim Jagielski 						aNewItem = SvxFontItem( aFont.GetFamily(), aFont.GetName(),
380*b1cdbd2cSJim Jagielski 									aFont.GetStyleName(), aFont.GetPitch(),
381*b1cdbd2cSJim Jagielski                                     aFont.GetCharSet(), ATTR_FONT  );
382*b1cdbd2cSJim Jagielski 					}
383*b1cdbd2cSJim Jagielski 					else
384*b1cdbd2cSJim Jagielski 						aNewItem = rItem;
385*b1cdbd2cSJim Jagielski 				}
386*b1cdbd2cSJim Jagielski 				else
387*b1cdbd2cSJim Jagielski 				{
388*b1cdbd2cSJim Jagielski                     ScViewUtil::ExecuteCharMap( rItem, *pViewData->GetViewShell()->GetViewFrame(), aNewItem, aString );
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski 					// while the dialog was open, edit mode may have been stopped
391*b1cdbd2cSJim Jagielski 					if (!SC_MOD()->IsInputMode())
392*b1cdbd2cSJim Jagielski 					{
393*b1cdbd2cSJim Jagielski 						Sound::Beep();
394*b1cdbd2cSJim Jagielski 						return;
395*b1cdbd2cSJim Jagielski 					}
396*b1cdbd2cSJim Jagielski 				}
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski 				if ( aString.Len() )
399*b1cdbd2cSJim Jagielski 				{
400*b1cdbd2cSJim Jagielski 					//	if string contains WEAK characters, set all fonts
401*b1cdbd2cSJim Jagielski 					sal_uInt8 nSetScript;
402*b1cdbd2cSJim Jagielski 					ScDocument* pDoc = pViewData->GetDocument();
403*b1cdbd2cSJim Jagielski 					if ( pDoc->HasStringWeakCharacters( aString ) )
404*b1cdbd2cSJim Jagielski 						nSetScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
405*b1cdbd2cSJim Jagielski 					else
406*b1cdbd2cSJim Jagielski 						nSetScript = pDoc->GetStringScriptType( aString );
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski 					SfxItemSet aSet( pTableView->GetEmptyItemSet() );
409*b1cdbd2cSJim Jagielski 					SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, GetPool() );
410*b1cdbd2cSJim Jagielski 					aSetItem.PutItemForScriptType( nSetScript, aNewItem );
411*b1cdbd2cSJim Jagielski 					aSet.Put( aSetItem.GetItemSet(), sal_False );
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski 					//	SetAttribs an der View selektiert ein Wort, wenn nichts selektiert ist
414*b1cdbd2cSJim Jagielski 					pTableView->GetEditEngine()->QuickSetAttribs( aSet, pTableView->GetSelection() );
415*b1cdbd2cSJim Jagielski 					pTableView->InsertText(aString);
416*b1cdbd2cSJim Jagielski 					if (pTopView)
417*b1cdbd2cSJim Jagielski 						pTopView->InsertText(aString);
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski 					SfxStringItem aStringItem( SID_CHARMAP, aString );
420*b1cdbd2cSJim Jagielski 					SfxStringItem aFontItem( SID_ATTR_SPECIALCHAR, aNewItem.GetFamilyName() );
421*b1cdbd2cSJim Jagielski 					rReq.AppendItem( aFontItem );
422*b1cdbd2cSJim Jagielski 					rReq.AppendItem( aStringItem );
423*b1cdbd2cSJim Jagielski 					rReq.Done();
424*b1cdbd2cSJim Jagielski 
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski 				}
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski 				if (pTopView)
429*b1cdbd2cSJim Jagielski 					pTopView->GetWindow()->GrabFocus();
430*b1cdbd2cSJim Jagielski 			}
431*b1cdbd2cSJim Jagielski 			break;
432*b1cdbd2cSJim Jagielski 
433*b1cdbd2cSJim Jagielski 		case FID_INSERT_NAME:
434*b1cdbd2cSJim Jagielski 			{
435*b1cdbd2cSJim Jagielski 				ScDocument*		pDoc = pViewData->GetDocument();
436*b1cdbd2cSJim Jagielski 				//CHINA001 ScNamePasteDlg* pDlg = new ScNamePasteDlg( pViewData->GetDialogParent(),
437*b1cdbd2cSJim Jagielski 				//CHINA001 								pDoc->GetRangeName(), sal_False );
438*b1cdbd2cSJim Jagielski 												// "Liste" disablen
439*b1cdbd2cSJim Jagielski 				ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
440*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski 				AbstractScNamePasteDlg* pDlg = pFact->CreateScNamePasteDlg( pViewData->GetDialogParent(), pDoc->GetRangeName(), RID_SCDLG_NAMES_PASTE, sal_False );
443*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
444*b1cdbd2cSJim Jagielski 				short nRet = pDlg->Execute();
445*b1cdbd2cSJim Jagielski 				// pDlg is needed below
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski 				// while the dialog was open, edit mode may have been stopped
448*b1cdbd2cSJim Jagielski 				if (!SC_MOD()->IsInputMode())
449*b1cdbd2cSJim Jagielski 				{
450*b1cdbd2cSJim Jagielski 					Sound::Beep();
451*b1cdbd2cSJim Jagielski 					delete pDlg;
452*b1cdbd2cSJim Jagielski 					return;
453*b1cdbd2cSJim Jagielski 				}
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski 				if ( nRet == BTN_PASTE_NAME )
456*b1cdbd2cSJim Jagielski 				{
457*b1cdbd2cSJim Jagielski 					String aName = pDlg->GetSelectedName();
458*b1cdbd2cSJim Jagielski 					pTableView->InsertText(aName);
459*b1cdbd2cSJim Jagielski 					if (pTopView)
460*b1cdbd2cSJim Jagielski 						pTopView->InsertText(aName);
461*b1cdbd2cSJim Jagielski 				}
462*b1cdbd2cSJim Jagielski 				delete pDlg;
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 				if (pTopView)
465*b1cdbd2cSJim Jagielski 					pTopView->GetWindow()->GrabFocus();
466*b1cdbd2cSJim Jagielski 			}
467*b1cdbd2cSJim Jagielski 			break;
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski 		case SID_CHAR_DLG_EFFECT:
470*b1cdbd2cSJim Jagielski 		case SID_CHAR_DLG:
471*b1cdbd2cSJim Jagielski 			{
472*b1cdbd2cSJim Jagielski 				SfxItemSet aAttrs( pTableView->GetAttribs() );
473*b1cdbd2cSJim Jagielski 
474*b1cdbd2cSJim Jagielski 				SfxObjectShell* pObjSh = pViewData->GetSfxDocShell();
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 				//CHINA001 ScCharDlg* pDlg = new ScCharDlg( pViewData->GetDialogParent(), &aAttrs, pObjSh );
477*b1cdbd2cSJim Jagielski 				ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
478*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski 				SfxAbstractTabDialog* pDlg = pFact->CreateScCharDlg( pViewData->GetDialogParent(), &aAttrs,
481*b1cdbd2cSJim Jagielski 																	 pObjSh, RID_SCDLG_CHAR );
482*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
483*b1cdbd2cSJim Jagielski 				if (nSlot == SID_CHAR_DLG_EFFECT)
484*b1cdbd2cSJim Jagielski 				{
485*b1cdbd2cSJim Jagielski 					pDlg->SetCurPageId(RID_SVXPAGE_CHAR_EFFECTS);
486*b1cdbd2cSJim Jagielski 				}
487*b1cdbd2cSJim Jagielski 				short nRet = pDlg->Execute();
488*b1cdbd2cSJim Jagielski 				// pDlg is needed below
489*b1cdbd2cSJim Jagielski 
490*b1cdbd2cSJim Jagielski 				// while the dialog was open, edit mode may have been stopped
491*b1cdbd2cSJim Jagielski 				if (!SC_MOD()->IsInputMode())
492*b1cdbd2cSJim Jagielski 				{
493*b1cdbd2cSJim Jagielski 					Sound::Beep();
494*b1cdbd2cSJim Jagielski 					delete pDlg;
495*b1cdbd2cSJim Jagielski 					return;
496*b1cdbd2cSJim Jagielski 				}
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 				if ( nRet == RET_OK )
499*b1cdbd2cSJim Jagielski 				{
500*b1cdbd2cSJim Jagielski 					const SfxItemSet* pOut = pDlg->GetOutputItemSet();
501*b1cdbd2cSJim Jagielski 					pTableView->SetAttribs( *pOut );
502*b1cdbd2cSJim Jagielski 				}
503*b1cdbd2cSJim Jagielski 				delete pDlg;
504*b1cdbd2cSJim Jagielski 			}
505*b1cdbd2cSJim Jagielski 			break;
506*b1cdbd2cSJim Jagielski 
507*b1cdbd2cSJim Jagielski 		case SID_TOGGLE_REL:
508*b1cdbd2cSJim Jagielski 			{
509*b1cdbd2cSJim Jagielski 				sal_Bool bOk = sal_False;
510*b1cdbd2cSJim Jagielski 				if (pEngine->GetParagraphCount() == 1)
511*b1cdbd2cSJim Jagielski 				{
512*b1cdbd2cSJim Jagielski 					String aText = pEngine->GetText();
513*b1cdbd2cSJim Jagielski 					ESelection aSel = pEditView->GetSelection();	// aktuelle View
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski 					ScRefFinder aFinder( aText, pViewData->GetDocument() );
516*b1cdbd2cSJim Jagielski 					aFinder.ToggleRel( aSel.nStartPos, aSel.nEndPos );
517*b1cdbd2cSJim Jagielski 					if (aFinder.GetFound())
518*b1cdbd2cSJim Jagielski 					{
519*b1cdbd2cSJim Jagielski 						String aNew = aFinder.GetText();
520*b1cdbd2cSJim Jagielski 						ESelection aNewSel( 0,aFinder.GetSelStart(), 0,aFinder.GetSelEnd() );
521*b1cdbd2cSJim Jagielski 						pEngine->SetText( aNew );
522*b1cdbd2cSJim Jagielski 						pTableView->SetSelection( aNewSel );
523*b1cdbd2cSJim Jagielski 						if ( pTopView )
524*b1cdbd2cSJim Jagielski 						{
525*b1cdbd2cSJim Jagielski 							pTopView->GetEditEngine()->SetText( aNew );
526*b1cdbd2cSJim Jagielski 							pTopView->SetSelection( aNewSel );
527*b1cdbd2cSJim Jagielski 						}
528*b1cdbd2cSJim Jagielski 						bOk = sal_True;
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski 						//	Referenz wird selektiert -> beim Tippen nicht ueberschreiben
531*b1cdbd2cSJim Jagielski 						bSetSelIsRef = sal_True;
532*b1cdbd2cSJim Jagielski 					}
533*b1cdbd2cSJim Jagielski 				}
534*b1cdbd2cSJim Jagielski 				if (!bOk)
535*b1cdbd2cSJim Jagielski                     Sound::Beep();              // keine Referenzen oder mehrere Absaetze
536*b1cdbd2cSJim Jagielski 			}
537*b1cdbd2cSJim Jagielski 			break;
538*b1cdbd2cSJim Jagielski 
539*b1cdbd2cSJim Jagielski 		case SID_HYPERLINK_SETLINK:
540*b1cdbd2cSJim Jagielski 			if( pReqArgs )
541*b1cdbd2cSJim Jagielski 			{
542*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
543*b1cdbd2cSJim Jagielski 				if ( pReqArgs->GetItemState( SID_HYPERLINK_SETLINK, sal_True, &pItem ) == SFX_ITEM_SET )
544*b1cdbd2cSJim Jagielski 				{
545*b1cdbd2cSJim Jagielski 					const SvxHyperlinkItem* pHyper = (const SvxHyperlinkItem*) pItem;
546*b1cdbd2cSJim Jagielski 					const String& rName		= pHyper->GetName();
547*b1cdbd2cSJim Jagielski 					const String& rURL		= pHyper->GetURL();
548*b1cdbd2cSJim Jagielski 					const String& rTarget	= pHyper->GetTargetFrame();
549*b1cdbd2cSJim Jagielski 					SvxLinkInsertMode eMode = pHyper->GetInsertMode();
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski 					sal_Bool bDone = sal_False;
552*b1cdbd2cSJim Jagielski 					if ( eMode == HLINK_DEFAULT || eMode == HLINK_FIELD )
553*b1cdbd2cSJim Jagielski 					{
554*b1cdbd2cSJim Jagielski 						const SvxURLField* pURLField = GetURLField();
555*b1cdbd2cSJim Jagielski 						if ( pURLField )
556*b1cdbd2cSJim Jagielski 						{
557*b1cdbd2cSJim Jagielski 							//	altes Feld selektieren
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 							ESelection aSel = pTableView->GetSelection();
560*b1cdbd2cSJim Jagielski 							aSel.Adjust();
561*b1cdbd2cSJim Jagielski 							aSel.nEndPara = aSel.nStartPara;
562*b1cdbd2cSJim Jagielski 							aSel.nEndPos = aSel.nStartPos + 1;
563*b1cdbd2cSJim Jagielski 							pTableView->SetSelection( aSel );
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 							//	neues Feld einfuegen
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski 							SvxURLField aURLField( rURL, rName, SVXURLFORMAT_REPR );
568*b1cdbd2cSJim Jagielski 							aURLField.SetTargetFrame( rTarget );
569*b1cdbd2cSJim Jagielski                             SvxFieldItem aURLItem( aURLField, EE_FEATURE_FIELD );
570*b1cdbd2cSJim Jagielski 							pTableView->InsertField( aURLItem );
571*b1cdbd2cSJim Jagielski 							pTableView->SetSelection( aSel );		// select inserted field
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski 							//	#57254# jetzt doch auch Felder in der Top-View
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski 							if ( pTopView )
576*b1cdbd2cSJim Jagielski 							{
577*b1cdbd2cSJim Jagielski 								aSel = pTopView->GetSelection();
578*b1cdbd2cSJim Jagielski 								aSel.nEndPara = aSel.nStartPara;
579*b1cdbd2cSJim Jagielski 								aSel.nEndPos = aSel.nStartPos + 1;
580*b1cdbd2cSJim Jagielski 								pTopView->SetSelection( aSel );
581*b1cdbd2cSJim Jagielski 								pTopView->InsertField( aURLItem );
582*b1cdbd2cSJim Jagielski 								pTopView->SetSelection( aSel );		// select inserted field
583*b1cdbd2cSJim Jagielski 							}
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski 							bDone = sal_True;
586*b1cdbd2cSJim Jagielski 						}
587*b1cdbd2cSJim Jagielski 					}
588*b1cdbd2cSJim Jagielski 
589*b1cdbd2cSJim Jagielski 					if (!bDone)
590*b1cdbd2cSJim Jagielski 					{
591*b1cdbd2cSJim Jagielski 						pViewData->GetViewShell()->
592*b1cdbd2cSJim Jagielski 							InsertURL( rName, rURL, rTarget, (sal_uInt16) eMode );
593*b1cdbd2cSJim Jagielski 
594*b1cdbd2cSJim Jagielski 						//	InsertURL an der ViewShell schaltet bei "Button"
595*b1cdbd2cSJim Jagielski 						//	die EditShell ab, darum sofort return
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski 						return;
598*b1cdbd2cSJim Jagielski 					}
599*b1cdbd2cSJim Jagielski 				}
600*b1cdbd2cSJim Jagielski 			}
601*b1cdbd2cSJim Jagielski 			break;
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski             case SID_OPEN_HYPERLINK:
604*b1cdbd2cSJim Jagielski                 {
605*b1cdbd2cSJim Jagielski                     const SvxURLField* pURLField = GetURLField();
606*b1cdbd2cSJim Jagielski                     if ( pURLField )
607*b1cdbd2cSJim Jagielski                         ScGlobal::OpenURL( pURLField->GetURL(), pURLField->GetTargetFrame() );
608*b1cdbd2cSJim Jagielski                     return;
609*b1cdbd2cSJim Jagielski                 }
610*b1cdbd2cSJim Jagielski                 //break;
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski         case FN_INSERT_SOFT_HYPHEN:
613*b1cdbd2cSJim Jagielski             lclInsertCharacter( pTableView, pTopView, CHAR_SHY );
614*b1cdbd2cSJim Jagielski         break;
615*b1cdbd2cSJim Jagielski         case FN_INSERT_HARDHYPHEN:
616*b1cdbd2cSJim Jagielski             lclInsertCharacter( pTableView, pTopView, CHAR_NBHY );
617*b1cdbd2cSJim Jagielski         break;
618*b1cdbd2cSJim Jagielski         case FN_INSERT_HARD_SPACE:
619*b1cdbd2cSJim Jagielski             lclInsertCharacter( pTableView, pTopView, CHAR_NBSP );
620*b1cdbd2cSJim Jagielski         break;
621*b1cdbd2cSJim Jagielski         case SID_INSERT_RLM:
622*b1cdbd2cSJim Jagielski             lclInsertCharacter( pTableView, pTopView, CHAR_RLM );
623*b1cdbd2cSJim Jagielski         break;
624*b1cdbd2cSJim Jagielski         case SID_INSERT_LRM:
625*b1cdbd2cSJim Jagielski             lclInsertCharacter( pTableView, pTopView, CHAR_LRM );
626*b1cdbd2cSJim Jagielski         break;
627*b1cdbd2cSJim Jagielski         case SID_INSERT_ZWSP:
628*b1cdbd2cSJim Jagielski             lclInsertCharacter( pTableView, pTopView, CHAR_ZWSP );
629*b1cdbd2cSJim Jagielski         break;
630*b1cdbd2cSJim Jagielski         case SID_INSERT_ZWNBSP:
631*b1cdbd2cSJim Jagielski             lclInsertCharacter( pTableView, pTopView, CHAR_ZWNBSP );
632*b1cdbd2cSJim Jagielski         break;
633*b1cdbd2cSJim Jagielski 	}
634*b1cdbd2cSJim Jagielski 
635*b1cdbd2cSJim Jagielski     pHdl->DataChanged(sal_False, bSetModified);
636*b1cdbd2cSJim Jagielski 	if (bSetSelIsRef)
637*b1cdbd2cSJim Jagielski 		pHdl->SetSelIsRef(sal_True);
638*b1cdbd2cSJim Jagielski }
639*b1cdbd2cSJim Jagielski 
lcl_DisableAll(SfxItemSet & rSet)640*b1cdbd2cSJim Jagielski void lcl_DisableAll( SfxItemSet& rSet )    // disable all slots
641*b1cdbd2cSJim Jagielski {
642*b1cdbd2cSJim Jagielski     SfxWhichIter aIter( rSet );
643*b1cdbd2cSJim Jagielski     sal_uInt16 nWhich = aIter.FirstWhich();
644*b1cdbd2cSJim Jagielski     while (nWhich)
645*b1cdbd2cSJim Jagielski     {
646*b1cdbd2cSJim Jagielski         rSet.DisableItem( nWhich );
647*b1cdbd2cSJim Jagielski         nWhich = aIter.NextWhich();
648*b1cdbd2cSJim Jagielski     }
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski 
GetState(SfxItemSet & rSet)651*b1cdbd2cSJim Jagielski void __EXPORT ScEditShell::GetState( SfxItemSet& rSet )
652*b1cdbd2cSJim Jagielski {
653*b1cdbd2cSJim Jagielski     // #125326# When deactivating the view, edit mode is stopped, but the EditShell is left active
654*b1cdbd2cSJim Jagielski     // (a shell can't be removed from within Deactivate). In that state, the EditView isn't inserted
655*b1cdbd2cSJim Jagielski     // into the EditEngine, so it can have an invalid selection and must not be used.
656*b1cdbd2cSJim Jagielski     if ( !pViewData->HasEditView( pViewData->GetActivePart() ) )
657*b1cdbd2cSJim Jagielski     {
658*b1cdbd2cSJim Jagielski         lcl_DisableAll( rSet );
659*b1cdbd2cSJim Jagielski         return;
660*b1cdbd2cSJim Jagielski     }
661*b1cdbd2cSJim Jagielski 
662*b1cdbd2cSJim Jagielski 	ScInputHandler*	pHdl = GetMyInputHdl();
663*b1cdbd2cSJim Jagielski 	EditView* pActiveView = pHdl ? pHdl->GetActiveView() : pEditView;
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski 	SfxWhichIter aIter( rSet );
666*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = aIter.FirstWhich();
667*b1cdbd2cSJim Jagielski 	while (nWhich)
668*b1cdbd2cSJim Jagielski 	{
669*b1cdbd2cSJim Jagielski 		switch (nWhich)
670*b1cdbd2cSJim Jagielski 		{
671*b1cdbd2cSJim Jagielski 			case SID_ATTR_INSERT:	// Statuszeile
672*b1cdbd2cSJim Jagielski 				{
673*b1cdbd2cSJim Jagielski 					if ( pActiveView )
674*b1cdbd2cSJim Jagielski 						rSet.Put( SfxBoolItem( nWhich, pActiveView->IsInsertMode() ) );
675*b1cdbd2cSJim Jagielski 					else
676*b1cdbd2cSJim Jagielski 						rSet.Put( SfxBoolItem( nWhich, 42 ) );
677*b1cdbd2cSJim Jagielski 				}
678*b1cdbd2cSJim Jagielski 				break;
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski 			case SID_HYPERLINK_GETLINK:
681*b1cdbd2cSJim Jagielski 				{
682*b1cdbd2cSJim Jagielski 					SvxHyperlinkItem aHLinkItem;
683*b1cdbd2cSJim Jagielski 					const SvxURLField* pURLField = GetURLField();
684*b1cdbd2cSJim Jagielski 					if ( pURLField )
685*b1cdbd2cSJim Jagielski 					{
686*b1cdbd2cSJim Jagielski 						aHLinkItem.SetName( pURLField->GetRepresentation() );
687*b1cdbd2cSJim Jagielski 						aHLinkItem.SetURL( pURLField->GetURL() );
688*b1cdbd2cSJim Jagielski 						aHLinkItem.SetTargetFrame( pURLField->GetTargetFrame() );
689*b1cdbd2cSJim Jagielski 					}
690*b1cdbd2cSJim Jagielski 					else if ( pActiveView )
691*b1cdbd2cSJim Jagielski 					{
692*b1cdbd2cSJim Jagielski 						// use selected text as name for urls
693*b1cdbd2cSJim Jagielski 						String sReturn = pActiveView->GetSelected();
694*b1cdbd2cSJim Jagielski 						sReturn.Erase(255);
695*b1cdbd2cSJim Jagielski 						sReturn.EraseTrailingChars();
696*b1cdbd2cSJim Jagielski 						aHLinkItem.SetName(sReturn);
697*b1cdbd2cSJim Jagielski 					}
698*b1cdbd2cSJim Jagielski 					rSet.Put(aHLinkItem);
699*b1cdbd2cSJim Jagielski 				}
700*b1cdbd2cSJim Jagielski 				break;
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski             case SID_OPEN_HYPERLINK:
703*b1cdbd2cSJim Jagielski                 {
704*b1cdbd2cSJim Jagielski                     if ( !GetURLField() )
705*b1cdbd2cSJim Jagielski                         rSet.DisableItem( nWhich );
706*b1cdbd2cSJim Jagielski                 }
707*b1cdbd2cSJim Jagielski                 break;
708*b1cdbd2cSJim Jagielski 
709*b1cdbd2cSJim Jagielski 			case SID_TRANSLITERATE_HALFWIDTH:
710*b1cdbd2cSJim Jagielski 			case SID_TRANSLITERATE_FULLWIDTH:
711*b1cdbd2cSJim Jagielski 			case SID_TRANSLITERATE_HIRAGANA:
712*b1cdbd2cSJim Jagielski 			case SID_TRANSLITERATE_KATAGANA:
713*b1cdbd2cSJim Jagielski             case SID_INSERT_RLM:
714*b1cdbd2cSJim Jagielski             case SID_INSERT_LRM:
715*b1cdbd2cSJim Jagielski             case SID_INSERT_ZWNBSP:
716*b1cdbd2cSJim Jagielski             case SID_INSERT_ZWSP:
717*b1cdbd2cSJim Jagielski                 ScViewUtil::HideDisabledSlot( rSet, pViewData->GetBindings(), nWhich );
718*b1cdbd2cSJim Jagielski             break;
719*b1cdbd2cSJim Jagielski 
720*b1cdbd2cSJim Jagielski             case SID_THES:
721*b1cdbd2cSJim Jagielski                 {
722*b1cdbd2cSJim Jagielski                     String          aStatusVal;
723*b1cdbd2cSJim Jagielski                     LanguageType    nLang = LANGUAGE_NONE;
724*b1cdbd2cSJim Jagielski                     bool bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, *pActiveView );
725*b1cdbd2cSJim Jagielski                     rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
726*b1cdbd2cSJim Jagielski 
727*b1cdbd2cSJim Jagielski                     // disable thesaurus context menu entry if there is nothing to look up
728*b1cdbd2cSJim Jagielski                     sal_Bool bCanDoThesaurus = ScModule::HasThesaurusLanguage( nLang );
729*b1cdbd2cSJim Jagielski                     if (!bIsLookUpWord || !bCanDoThesaurus)
730*b1cdbd2cSJim Jagielski                         rSet.DisableItem( SID_THES );
731*b1cdbd2cSJim Jagielski                 }
732*b1cdbd2cSJim Jagielski                 break;
733*b1cdbd2cSJim Jagielski 
734*b1cdbd2cSJim Jagielski 
735*b1cdbd2cSJim Jagielski 		}
736*b1cdbd2cSJim Jagielski 		nWhich = aIter.NextWhich();
737*b1cdbd2cSJim Jagielski 	}
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski 
GetURLField()740*b1cdbd2cSJim Jagielski const SvxURLField* ScEditShell::GetURLField()
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski 	ScInputHandler*	pHdl = GetMyInputHdl();
743*b1cdbd2cSJim Jagielski 	EditView* pActiveView = pHdl ? pHdl->GetActiveView() : pEditView;
744*b1cdbd2cSJim Jagielski 	if ( pActiveView )
745*b1cdbd2cSJim Jagielski 	{
746*b1cdbd2cSJim Jagielski 		const SvxFieldItem*	pFieldItem = pActiveView->GetFieldAtSelection();
747*b1cdbd2cSJim Jagielski 		if (pFieldItem)
748*b1cdbd2cSJim Jagielski 		{
749*b1cdbd2cSJim Jagielski 			const SvxFieldData* pField = pFieldItem->GetField();
750*b1cdbd2cSJim Jagielski 			if ( pField && pField->ISA(SvxURLField) )
751*b1cdbd2cSJim Jagielski 				return (const SvxURLField*)pField;
752*b1cdbd2cSJim Jagielski 		}
753*b1cdbd2cSJim Jagielski 	}
754*b1cdbd2cSJim Jagielski 
755*b1cdbd2cSJim Jagielski 	return NULL;
756*b1cdbd2cSJim Jagielski }
757*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScEditShell,ClipboardChanged,TransferableDataHelper *,pDataHelper)758*b1cdbd2cSJim Jagielski IMPL_LINK( ScEditShell, ClipboardChanged, TransferableDataHelper*, pDataHelper )
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski 	if ( pDataHelper )
761*b1cdbd2cSJim Jagielski 	{
762*b1cdbd2cSJim Jagielski 		bPastePossible = ( pDataHelper->HasFormat( SOT_FORMAT_STRING ) || pDataHelper->HasFormat( SOT_FORMAT_RTF ) );
763*b1cdbd2cSJim Jagielski 
764*b1cdbd2cSJim Jagielski 		SfxBindings& rBindings = pViewData->GetBindings();
765*b1cdbd2cSJim Jagielski 		rBindings.Invalidate( SID_PASTE );
766*b1cdbd2cSJim Jagielski         rBindings.Invalidate( SID_PASTE_SPECIAL );
767*b1cdbd2cSJim Jagielski 		rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
768*b1cdbd2cSJim Jagielski 	}
769*b1cdbd2cSJim Jagielski 	return 0;
770*b1cdbd2cSJim Jagielski }
771*b1cdbd2cSJim Jagielski 
GetClipState(SfxItemSet & rSet)772*b1cdbd2cSJim Jagielski void __EXPORT ScEditShell::GetClipState( SfxItemSet& rSet )
773*b1cdbd2cSJim Jagielski {
774*b1cdbd2cSJim Jagielski 	if ( !pClipEvtLstnr )
775*b1cdbd2cSJim Jagielski 	{
776*b1cdbd2cSJim Jagielski 		// create listener
777*b1cdbd2cSJim Jagielski 		pClipEvtLstnr = new TransferableClipboardListener( LINK( this, ScEditShell, ClipboardChanged ) );
778*b1cdbd2cSJim Jagielski 		pClipEvtLstnr->acquire();
779*b1cdbd2cSJim Jagielski 		Window* pWin = pViewData->GetActiveWin();
780*b1cdbd2cSJim Jagielski 		pClipEvtLstnr->AddRemoveListener( pWin, sal_True );
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski 		// get initial state
783*b1cdbd2cSJim Jagielski 		TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( pViewData->GetActiveWin() ) );
784*b1cdbd2cSJim Jagielski 		bPastePossible = ( aDataHelper.HasFormat( SOT_FORMAT_STRING ) || aDataHelper.HasFormat( SOT_FORMAT_RTF ) );
785*b1cdbd2cSJim Jagielski 	}
786*b1cdbd2cSJim Jagielski 
787*b1cdbd2cSJim Jagielski 	SfxWhichIter aIter( rSet );
788*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = aIter.FirstWhich();
789*b1cdbd2cSJim Jagielski 	while (nWhich)
790*b1cdbd2cSJim Jagielski 	{
791*b1cdbd2cSJim Jagielski 		switch (nWhich)
792*b1cdbd2cSJim Jagielski 		{
793*b1cdbd2cSJim Jagielski 			case SID_PASTE:
794*b1cdbd2cSJim Jagielski             case SID_PASTE_SPECIAL:
795*b1cdbd2cSJim Jagielski 				if( !bPastePossible )
796*b1cdbd2cSJim Jagielski 					rSet.DisableItem( nWhich );
797*b1cdbd2cSJim Jagielski 				break;
798*b1cdbd2cSJim Jagielski 			case SID_CLIPBOARD_FORMAT_ITEMS:
799*b1cdbd2cSJim Jagielski 				if( bPastePossible )
800*b1cdbd2cSJim Jagielski 				{
801*b1cdbd2cSJim Jagielski 					SvxClipboardFmtItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS );
802*b1cdbd2cSJim Jagielski 					TransferableDataHelper aDataHelper(
803*b1cdbd2cSJim Jagielski 							TransferableDataHelper::CreateFromSystemClipboard( pViewData->GetActiveWin() ) );
804*b1cdbd2cSJim Jagielski 
805*b1cdbd2cSJim Jagielski 					if ( aDataHelper.HasFormat( SOT_FORMAT_STRING ) )
806*b1cdbd2cSJim Jagielski 						aFormats.AddClipbrdFormat( SOT_FORMAT_STRING );
807*b1cdbd2cSJim Jagielski 					if ( aDataHelper.HasFormat( SOT_FORMAT_RTF ) )
808*b1cdbd2cSJim Jagielski 						aFormats.AddClipbrdFormat( SOT_FORMAT_RTF );
809*b1cdbd2cSJim Jagielski 
810*b1cdbd2cSJim Jagielski 					rSet.Put( aFormats );
811*b1cdbd2cSJim Jagielski 				}
812*b1cdbd2cSJim Jagielski 				else
813*b1cdbd2cSJim Jagielski 					rSet.DisableItem( nWhich );
814*b1cdbd2cSJim Jagielski 				break;
815*b1cdbd2cSJim Jagielski 		}
816*b1cdbd2cSJim Jagielski 		nWhich = aIter.NextWhich();
817*b1cdbd2cSJim Jagielski 	}
818*b1cdbd2cSJim Jagielski }
819*b1cdbd2cSJim Jagielski 
lcl_InvalidateUnder(SfxBindings & rBindings)820*b1cdbd2cSJim Jagielski void lcl_InvalidateUnder( SfxBindings& rBindings )
821*b1cdbd2cSJim Jagielski {
822*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_UNDERLINE );
823*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_NONE );
824*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_SINGLE );
825*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_DOUBLE );
826*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_DOTTED );
827*b1cdbd2cSJim Jagielski }
828*b1cdbd2cSJim Jagielski 
ExecuteAttr(SfxRequest & rReq)829*b1cdbd2cSJim Jagielski void ScEditShell::ExecuteAttr(SfxRequest& rReq)
830*b1cdbd2cSJim Jagielski {
831*b1cdbd2cSJim Jagielski 	SfxItemSet			aSet( pEditView->GetEmptyItemSet() );
832*b1cdbd2cSJim Jagielski 	SfxBindings&		rBindings	= pViewData->GetBindings();
833*b1cdbd2cSJim Jagielski 	const SfxItemSet*	pArgs		= rReq.GetArgs();
834*b1cdbd2cSJim Jagielski 	sal_uInt16				nSlot		= rReq.GetSlot();
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski 	switch ( nSlot )
837*b1cdbd2cSJim Jagielski 	{
838*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_FONTHEIGHT:
839*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_FONT:
840*b1cdbd2cSJim Jagielski 			{
841*b1cdbd2cSJim Jagielski 				if (pArgs)
842*b1cdbd2cSJim Jagielski 				{
843*b1cdbd2cSJim Jagielski 					// #i78017 establish the same behaviour as in Writer
844*b1cdbd2cSJim Jagielski 					sal_uInt16 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
845*b1cdbd2cSJim Jagielski 					if (nSlot == SID_ATTR_CHAR_FONT)
846*b1cdbd2cSJim Jagielski 					{
847*b1cdbd2cSJim Jagielski 						nScript = pEditView->GetSelectedScriptType();
848*b1cdbd2cSJim Jagielski 						if (nScript == 0) nScript = ScGlobal::GetDefaultScriptType();
849*b1cdbd2cSJim Jagielski 					}
850*b1cdbd2cSJim Jagielski 
851*b1cdbd2cSJim Jagielski 					SfxItemPool& rPool = GetPool();
852*b1cdbd2cSJim Jagielski 					SvxScriptSetItem aSetItem( nSlot, rPool );
853*b1cdbd2cSJim Jagielski 					sal_uInt16 nWhich = rPool.GetWhich( nSlot );
854*b1cdbd2cSJim Jagielski 					aSetItem.PutItemForScriptType( nScript, pArgs->Get( nWhich ) );
855*b1cdbd2cSJim Jagielski 
856*b1cdbd2cSJim Jagielski 					aSet.Put( aSetItem.GetItemSet(), sal_False );
857*b1cdbd2cSJim Jagielski 				}
858*b1cdbd2cSJim Jagielski 			}
859*b1cdbd2cSJim Jagielski 			break;
860*b1cdbd2cSJim Jagielski 
861*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_COLOR:
862*b1cdbd2cSJim Jagielski 			{
863*b1cdbd2cSJim Jagielski 				if (pArgs)
864*b1cdbd2cSJim Jagielski 				{
865*b1cdbd2cSJim Jagielski 					aSet.Put( pArgs->Get( pArgs->GetPool()->GetWhich( nSlot ) ) );
866*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( nSlot );
867*b1cdbd2cSJim Jagielski 				}
868*b1cdbd2cSJim Jagielski 			}
869*b1cdbd2cSJim Jagielski 			break;
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski 		//	Toggles
872*b1cdbd2cSJim Jagielski 
873*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_WEIGHT:
874*b1cdbd2cSJim Jagielski 			{
875*b1cdbd2cSJim Jagielski 				// #i78017 establish the same behaviour as in Writer
876*b1cdbd2cSJim Jagielski 				sal_uInt16 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
877*b1cdbd2cSJim Jagielski 
878*b1cdbd2cSJim Jagielski 				SfxItemPool& rPool = GetPool();
879*b1cdbd2cSJim Jagielski 
880*b1cdbd2cSJim Jagielski 				sal_Bool bOld = sal_False;
881*b1cdbd2cSJim Jagielski 				SvxScriptSetItem aOldSetItem( nSlot, rPool );
882*b1cdbd2cSJim Jagielski 				aOldSetItem.GetItemSet().Put( pEditView->GetAttribs(), sal_False );
883*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
884*b1cdbd2cSJim Jagielski 				if ( pCore && ((const SvxWeightItem*)pCore)->GetWeight() > WEIGHT_NORMAL )
885*b1cdbd2cSJim Jagielski 					bOld = sal_True;
886*b1cdbd2cSJim Jagielski 
887*b1cdbd2cSJim Jagielski 				SvxScriptSetItem aSetItem( nSlot, rPool );
888*b1cdbd2cSJim Jagielski 				aSetItem.PutItemForScriptType( nScript,
889*b1cdbd2cSJim Jagielski 							SvxWeightItem( bOld ? WEIGHT_NORMAL : WEIGHT_BOLD, EE_CHAR_WEIGHT ) );
890*b1cdbd2cSJim Jagielski 				aSet.Put( aSetItem.GetItemSet(), sal_False );
891*b1cdbd2cSJim Jagielski 
892*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
893*b1cdbd2cSJim Jagielski 			}
894*b1cdbd2cSJim Jagielski 			break;
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_POSTURE:
897*b1cdbd2cSJim Jagielski 			{
898*b1cdbd2cSJim Jagielski 				// #i78017 establish the same behaviour as in Writer
899*b1cdbd2cSJim Jagielski 				sal_uInt16 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
900*b1cdbd2cSJim Jagielski 
901*b1cdbd2cSJim Jagielski 				SfxItemPool& rPool = GetPool();
902*b1cdbd2cSJim Jagielski 
903*b1cdbd2cSJim Jagielski 				sal_Bool bOld = sal_False;
904*b1cdbd2cSJim Jagielski 				SvxScriptSetItem aOldSetItem( nSlot, rPool );
905*b1cdbd2cSJim Jagielski 				aOldSetItem.GetItemSet().Put( pEditView->GetAttribs(), sal_False );
906*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
907*b1cdbd2cSJim Jagielski 				if ( pCore && ((const SvxPostureItem*)pCore)->GetValue() != ITALIC_NONE )
908*b1cdbd2cSJim Jagielski 					bOld = sal_True;
909*b1cdbd2cSJim Jagielski 
910*b1cdbd2cSJim Jagielski 				SvxScriptSetItem aSetItem( nSlot, rPool );
911*b1cdbd2cSJim Jagielski 				aSetItem.PutItemForScriptType( nScript,
912*b1cdbd2cSJim Jagielski 							SvxPostureItem( bOld ? ITALIC_NONE : ITALIC_NORMAL, EE_CHAR_ITALIC ) );
913*b1cdbd2cSJim Jagielski 				aSet.Put( aSetItem.GetItemSet(), sal_False );
914*b1cdbd2cSJim Jagielski 
915*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
916*b1cdbd2cSJim Jagielski 			}
917*b1cdbd2cSJim Jagielski 			break;
918*b1cdbd2cSJim Jagielski 
919*b1cdbd2cSJim Jagielski 		case SID_ULINE_VAL_NONE:
920*b1cdbd2cSJim Jagielski 			aSet.Put( SvxUnderlineItem( UNDERLINE_NONE, EE_CHAR_UNDERLINE ) );
921*b1cdbd2cSJim Jagielski 			lcl_InvalidateUnder( rBindings );
922*b1cdbd2cSJim Jagielski 			break;
923*b1cdbd2cSJim Jagielski 
924*b1cdbd2cSJim Jagielski         case SID_ATTR_CHAR_UNDERLINE:
925*b1cdbd2cSJim Jagielski         case SID_ULINE_VAL_SINGLE:
926*b1cdbd2cSJim Jagielski         case SID_ULINE_VAL_DOUBLE:
927*b1cdbd2cSJim Jagielski         case SID_ULINE_VAL_DOTTED:
928*b1cdbd2cSJim Jagielski             {
929*b1cdbd2cSJim Jagielski                 FontUnderline eOld = ((const SvxUnderlineItem&) pEditView->
930*b1cdbd2cSJim Jagielski                                     GetAttribs().Get(EE_CHAR_UNDERLINE)).GetLineStyle();
931*b1cdbd2cSJim Jagielski                 FontUnderline eNew = eOld;
932*b1cdbd2cSJim Jagielski                 switch (nSlot)
933*b1cdbd2cSJim Jagielski                 {
934*b1cdbd2cSJim Jagielski                     case SID_ATTR_CHAR_UNDERLINE:
935*b1cdbd2cSJim Jagielski                         if ( pArgs )
936*b1cdbd2cSJim Jagielski                         {
937*b1cdbd2cSJim Jagielski                             const SvxTextLineItem& rTextLineItem = static_cast< const SvxTextLineItem& >( pArgs->Get( pArgs->GetPool()->GetWhich(nSlot) ) );
938*b1cdbd2cSJim Jagielski                             eNew = rTextLineItem.GetLineStyle();
939*b1cdbd2cSJim Jagielski                         }
940*b1cdbd2cSJim Jagielski                         else
941*b1cdbd2cSJim Jagielski                         {
942*b1cdbd2cSJim Jagielski                             eNew = ( eOld != UNDERLINE_NONE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
943*b1cdbd2cSJim Jagielski                         }
944*b1cdbd2cSJim Jagielski                         break;
945*b1cdbd2cSJim Jagielski                     case SID_ULINE_VAL_SINGLE:
946*b1cdbd2cSJim Jagielski                         eNew = ( eOld == UNDERLINE_SINGLE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
947*b1cdbd2cSJim Jagielski                         break;
948*b1cdbd2cSJim Jagielski                     case SID_ULINE_VAL_DOUBLE:
949*b1cdbd2cSJim Jagielski                         eNew = ( eOld == UNDERLINE_DOUBLE ) ? UNDERLINE_NONE : UNDERLINE_DOUBLE;
950*b1cdbd2cSJim Jagielski                         break;
951*b1cdbd2cSJim Jagielski                     case SID_ULINE_VAL_DOTTED:
952*b1cdbd2cSJim Jagielski                         eNew = ( eOld == UNDERLINE_DOTTED ) ? UNDERLINE_NONE : UNDERLINE_DOTTED;
953*b1cdbd2cSJim Jagielski                         break;
954*b1cdbd2cSJim Jagielski                 }
955*b1cdbd2cSJim Jagielski                 aSet.Put( SvxUnderlineItem( eNew, EE_CHAR_UNDERLINE ) );
956*b1cdbd2cSJim Jagielski                 lcl_InvalidateUnder( rBindings );
957*b1cdbd2cSJim Jagielski             }
958*b1cdbd2cSJim Jagielski             break;
959*b1cdbd2cSJim Jagielski 
960*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_OVERLINE:
961*b1cdbd2cSJim Jagielski 			{
962*b1cdbd2cSJim Jagielski 				FontUnderline eOld = ((const SvxOverlineItem&) pEditView->
963*b1cdbd2cSJim Jagielski 									GetAttribs().Get(EE_CHAR_OVERLINE)).GetLineStyle();
964*b1cdbd2cSJim Jagielski 				FontUnderline eNew = ( eOld != UNDERLINE_NONE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
965*b1cdbd2cSJim Jagielski 				aSet.Put( SvxOverlineItem( eNew, EE_CHAR_OVERLINE ) );
966*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
967*b1cdbd2cSJim Jagielski 			}
968*b1cdbd2cSJim Jagielski 			break;
969*b1cdbd2cSJim Jagielski 
970*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_STRIKEOUT:
971*b1cdbd2cSJim Jagielski 			{
972*b1cdbd2cSJim Jagielski 				sal_Bool bOld = ((const SvxCrossedOutItem&)pEditView->GetAttribs().
973*b1cdbd2cSJim Jagielski 								Get(EE_CHAR_STRIKEOUT)).GetValue() != STRIKEOUT_NONE;
974*b1cdbd2cSJim Jagielski 				aSet.Put( SvxCrossedOutItem( bOld ? STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) );
975*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
976*b1cdbd2cSJim Jagielski 			}
977*b1cdbd2cSJim Jagielski 			break;
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_SHADOWED:
980*b1cdbd2cSJim Jagielski 			{
981*b1cdbd2cSJim Jagielski 				sal_Bool bOld = ((const SvxShadowedItem&)pEditView->GetAttribs().
982*b1cdbd2cSJim Jagielski 								Get(EE_CHAR_SHADOW)).GetValue();
983*b1cdbd2cSJim Jagielski 				aSet.Put( SvxShadowedItem( !bOld, EE_CHAR_SHADOW ) );
984*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
985*b1cdbd2cSJim Jagielski 			}
986*b1cdbd2cSJim Jagielski 			break;
987*b1cdbd2cSJim Jagielski 
988*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_CONTOUR:
989*b1cdbd2cSJim Jagielski 			{
990*b1cdbd2cSJim Jagielski 				sal_Bool bOld = ((const SvxContourItem&)pEditView->GetAttribs().
991*b1cdbd2cSJim Jagielski 								Get(EE_CHAR_OUTLINE)).GetValue();
992*b1cdbd2cSJim Jagielski 				aSet.Put( SvxContourItem( !bOld, EE_CHAR_OUTLINE ) );
993*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
994*b1cdbd2cSJim Jagielski 			}
995*b1cdbd2cSJim Jagielski 			break;
996*b1cdbd2cSJim Jagielski 
997*b1cdbd2cSJim Jagielski 		case SID_SET_SUPER_SCRIPT:
998*b1cdbd2cSJim Jagielski 			{
999*b1cdbd2cSJim Jagielski 				SvxEscapement eOld = (SvxEscapement) ((const SvxEscapementItem&)
1000*b1cdbd2cSJim Jagielski 						pEditView->GetAttribs().Get(EE_CHAR_ESCAPEMENT)).GetEnumValue();
1001*b1cdbd2cSJim Jagielski 				SvxEscapement eNew = (eOld == SVX_ESCAPEMENT_SUPERSCRIPT) ?
1002*b1cdbd2cSJim Jagielski 										SVX_ESCAPEMENT_OFF : SVX_ESCAPEMENT_SUPERSCRIPT;
1003*b1cdbd2cSJim Jagielski 				aSet.Put( SvxEscapementItem( eNew, EE_CHAR_ESCAPEMENT ) );
1004*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
1005*b1cdbd2cSJim Jagielski 			}
1006*b1cdbd2cSJim Jagielski 			break;
1007*b1cdbd2cSJim Jagielski 		case SID_SET_SUB_SCRIPT:
1008*b1cdbd2cSJim Jagielski 			{
1009*b1cdbd2cSJim Jagielski 				SvxEscapement eOld = (SvxEscapement) ((const SvxEscapementItem&)
1010*b1cdbd2cSJim Jagielski 						pEditView->GetAttribs().Get(EE_CHAR_ESCAPEMENT)).GetEnumValue();
1011*b1cdbd2cSJim Jagielski 				SvxEscapement eNew = (eOld == SVX_ESCAPEMENT_SUBSCRIPT) ?
1012*b1cdbd2cSJim Jagielski 										SVX_ESCAPEMENT_OFF : SVX_ESCAPEMENT_SUBSCRIPT;
1013*b1cdbd2cSJim Jagielski 				aSet.Put( SvxEscapementItem( eNew, EE_CHAR_ESCAPEMENT ) );
1014*b1cdbd2cSJim Jagielski 				rBindings.Invalidate( nSlot );
1015*b1cdbd2cSJim Jagielski 			}
1016*b1cdbd2cSJim Jagielski 			break;
1017*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_KERNING:
1018*b1cdbd2cSJim Jagielski 			{
1019*b1cdbd2cSJim Jagielski 				if(pArgs)
1020*b1cdbd2cSJim Jagielski 				{
1021*b1cdbd2cSJim Jagielski 					aSet.Put ( pArgs->Get(pArgs->GetPool()->GetWhich(nSlot)));
1022*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( nSlot );
1023*b1cdbd2cSJim Jagielski 				}
1024*b1cdbd2cSJim Jagielski 			}
1025*b1cdbd2cSJim Jagielski 			break;
1026*b1cdbd2cSJim Jagielski 	}
1027*b1cdbd2cSJim Jagielski 
1028*b1cdbd2cSJim Jagielski 	//
1029*b1cdbd2cSJim Jagielski 	//	anwenden
1030*b1cdbd2cSJim Jagielski 	//
1031*b1cdbd2cSJim Jagielski 
1032*b1cdbd2cSJim Jagielski 	EditEngine* pEngine = pEditView->GetEditEngine();
1033*b1cdbd2cSJim Jagielski 	sal_Bool bOld = pEngine->GetUpdateMode();
1034*b1cdbd2cSJim Jagielski 	pEngine->SetUpdateMode(sal_False);
1035*b1cdbd2cSJim Jagielski 
1036*b1cdbd2cSJim Jagielski 	pEditView->SetAttribs( aSet );
1037*b1cdbd2cSJim Jagielski 
1038*b1cdbd2cSJim Jagielski 	pEngine->SetUpdateMode(bOld);
1039*b1cdbd2cSJim Jagielski 	pEditView->Invalidate();
1040*b1cdbd2cSJim Jagielski 
1041*b1cdbd2cSJim Jagielski 	ScInputHandler* pHdl = GetMyInputHdl();
1042*b1cdbd2cSJim Jagielski 	pHdl->SetModified();
1043*b1cdbd2cSJim Jagielski 
1044*b1cdbd2cSJim Jagielski 	rReq.Done();
1045*b1cdbd2cSJim Jagielski }
1046*b1cdbd2cSJim Jagielski 
GetAttrState(SfxItemSet & rSet)1047*b1cdbd2cSJim Jagielski void ScEditShell::GetAttrState(SfxItemSet &rSet)
1048*b1cdbd2cSJim Jagielski {
1049*b1cdbd2cSJim Jagielski     if ( !pViewData->HasEditView( pViewData->GetActivePart() ) )    // #125326#
1050*b1cdbd2cSJim Jagielski     {
1051*b1cdbd2cSJim Jagielski         lcl_DisableAll( rSet );
1052*b1cdbd2cSJim Jagielski         return;
1053*b1cdbd2cSJim Jagielski     }
1054*b1cdbd2cSJim Jagielski 
1055*b1cdbd2cSJim Jagielski 	SfxItemSet aAttribs = pEditView->GetAttribs();
1056*b1cdbd2cSJim Jagielski 	rSet.Put( aAttribs );
1057*b1cdbd2cSJim Jagielski 
1058*b1cdbd2cSJim Jagielski 	//	choose font info according to selection script type
1059*b1cdbd2cSJim Jagielski 
1060*b1cdbd2cSJim Jagielski 	sal_uInt16 nScript = pEditView->GetSelectedScriptType();
1061*b1cdbd2cSJim Jagielski 	if (nScript == 0) nScript = ScGlobal::GetDefaultScriptType();
1062*b1cdbd2cSJim Jagielski 
1063*b1cdbd2cSJim Jagielski     // #i55929# input-language-dependent script type (depends on input language if nothing selected)
1064*b1cdbd2cSJim Jagielski     sal_uInt16 nInputScript = nScript;
1065*b1cdbd2cSJim Jagielski     if ( !pEditView->GetSelection().HasRange() )
1066*b1cdbd2cSJim Jagielski     {
1067*b1cdbd2cSJim Jagielski         LanguageType nInputLang = pViewData->GetActiveWin()->GetInputLanguage();
1068*b1cdbd2cSJim Jagielski         if (nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
1069*b1cdbd2cSJim Jagielski             nInputScript = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
1070*b1cdbd2cSJim Jagielski     }
1071*b1cdbd2cSJim Jagielski 
1072*b1cdbd2cSJim Jagielski     // #i55929# according to spec, nInputScript is used for font and font height only
1073*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_UNKNOWN )
1074*b1cdbd2cSJim Jagielski 		ScViewUtil::PutItemScript( rSet, aAttribs, EE_CHAR_FONTINFO, nInputScript );
1075*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( EE_CHAR_FONTHEIGHT ) != SFX_ITEM_UNKNOWN )
1076*b1cdbd2cSJim Jagielski 		ScViewUtil::PutItemScript( rSet, aAttribs, EE_CHAR_FONTHEIGHT, nInputScript );
1077*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( EE_CHAR_WEIGHT ) != SFX_ITEM_UNKNOWN )
1078*b1cdbd2cSJim Jagielski 		ScViewUtil::PutItemScript( rSet, aAttribs, EE_CHAR_WEIGHT, nScript );
1079*b1cdbd2cSJim Jagielski 	if ( rSet.GetItemState( EE_CHAR_ITALIC ) != SFX_ITEM_UNKNOWN )
1080*b1cdbd2cSJim Jagielski 		ScViewUtil::PutItemScript( rSet, aAttribs, EE_CHAR_ITALIC, nScript );
1081*b1cdbd2cSJim Jagielski 
1082*b1cdbd2cSJim Jagielski 	//	Unterstreichung
1083*b1cdbd2cSJim Jagielski 
1084*b1cdbd2cSJim Jagielski 	SfxItemState eState = aAttribs.GetItemState( EE_CHAR_UNDERLINE, sal_True );
1085*b1cdbd2cSJim Jagielski 	if ( eState == SFX_ITEM_DONTCARE )
1086*b1cdbd2cSJim Jagielski 	{
1087*b1cdbd2cSJim Jagielski 		rSet.InvalidateItem( SID_ULINE_VAL_NONE );
1088*b1cdbd2cSJim Jagielski 		rSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
1089*b1cdbd2cSJim Jagielski 		rSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
1090*b1cdbd2cSJim Jagielski 		rSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
1091*b1cdbd2cSJim Jagielski 	}
1092*b1cdbd2cSJim Jagielski 	else
1093*b1cdbd2cSJim Jagielski 	{
1094*b1cdbd2cSJim Jagielski 		FontUnderline eUnderline = ((const SvxUnderlineItem&)
1095*b1cdbd2cSJim Jagielski 					aAttribs.Get(EE_CHAR_UNDERLINE)).GetLineStyle();
1096*b1cdbd2cSJim Jagielski 		sal_uInt16 nId = SID_ULINE_VAL_NONE;
1097*b1cdbd2cSJim Jagielski 		switch (eUnderline)
1098*b1cdbd2cSJim Jagielski 		{
1099*b1cdbd2cSJim Jagielski 			case UNDERLINE_SINGLE:	nId = SID_ULINE_VAL_SINGLE;	break;
1100*b1cdbd2cSJim Jagielski 			case UNDERLINE_DOUBLE:	nId = SID_ULINE_VAL_DOUBLE;	break;
1101*b1cdbd2cSJim Jagielski 			case UNDERLINE_DOTTED:	nId = SID_ULINE_VAL_DOTTED;	break;
1102*b1cdbd2cSJim Jagielski 			default:
1103*b1cdbd2cSJim Jagielski 				break;
1104*b1cdbd2cSJim Jagielski 		}
1105*b1cdbd2cSJim Jagielski 		rSet.Put( SfxBoolItem( nId, sal_True ) );
1106*b1cdbd2cSJim Jagielski 	}
1107*b1cdbd2cSJim Jagielski 
1108*b1cdbd2cSJim Jagielski 	//!	Testen, ob Klammer-Hervorhebung aktiv ist !!!!
1109*b1cdbd2cSJim Jagielski 	ScInputHandler* pHdl = GetMyInputHdl();
1110*b1cdbd2cSJim Jagielski 	if ( pHdl && pHdl->IsFormulaMode() )
1111*b1cdbd2cSJim Jagielski 		rSet.ClearItem( EE_CHAR_WEIGHT );	// hervorgehobene Klammern hier nicht
1112*b1cdbd2cSJim Jagielski 
1113*b1cdbd2cSJim Jagielski 	SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
1114*b1cdbd2cSJim Jagielski 					aAttribs.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
1115*b1cdbd2cSJim Jagielski 	if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
1116*b1cdbd2cSJim Jagielski 	{
1117*b1cdbd2cSJim Jagielski 		rSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, sal_True ) );
1118*b1cdbd2cSJim Jagielski 	}
1119*b1cdbd2cSJim Jagielski 	else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
1120*b1cdbd2cSJim Jagielski 	{
1121*b1cdbd2cSJim Jagielski 		rSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, sal_True ) );
1122*b1cdbd2cSJim Jagielski 	}
1123*b1cdbd2cSJim Jagielski 	pViewData->GetBindings().Invalidate( SID_SET_SUPER_SCRIPT );
1124*b1cdbd2cSJim Jagielski 	pViewData->GetBindings().Invalidate( SID_SET_SUB_SCRIPT );
1125*b1cdbd2cSJim Jagielski 
1126*b1cdbd2cSJim Jagielski 	eState = aAttribs.GetItemState( EE_CHAR_KERNING, sal_True );
1127*b1cdbd2cSJim Jagielski 	pViewData->GetBindings().Invalidate( SID_ATTR_CHAR_KERNING );
1128*b1cdbd2cSJim Jagielski 	if ( eState == SFX_ITEM_DONTCARE )
1129*b1cdbd2cSJim Jagielski 	{
1130*b1cdbd2cSJim Jagielski 	//	rSet.InvalidateItem( SID_ATTR_CHAR_KERNING );
1131*b1cdbd2cSJim Jagielski 		rSet.InvalidateItem(EE_CHAR_KERNING);
1132*b1cdbd2cSJim Jagielski 	}
1133*b1cdbd2cSJim Jagielski }
1134*b1cdbd2cSJim Jagielski 
GetSelectionText(sal_Bool bWholeWord)1135*b1cdbd2cSJim Jagielski String ScEditShell::GetSelectionText( sal_Bool bWholeWord )
1136*b1cdbd2cSJim Jagielski {
1137*b1cdbd2cSJim Jagielski 	String aStrSelection;
1138*b1cdbd2cSJim Jagielski 
1139*b1cdbd2cSJim Jagielski     if ( pViewData->HasEditView( pViewData->GetActivePart() ) )    // #125326#
1140*b1cdbd2cSJim Jagielski     {
1141*b1cdbd2cSJim Jagielski         if ( bWholeWord )
1142*b1cdbd2cSJim Jagielski         {
1143*b1cdbd2cSJim Jagielski             EditEngine* pEngine = pEditView->GetEditEngine();
1144*b1cdbd2cSJim Jagielski             ESelection  aSel = pEditView->GetSelection();
1145*b1cdbd2cSJim Jagielski             String      aStrCurrentDelimiters = pEngine->GetWordDelimiters();
1146*b1cdbd2cSJim Jagielski 
1147*b1cdbd2cSJim Jagielski             pEngine->SetWordDelimiters( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(" .,;\"'")) );
1148*b1cdbd2cSJim Jagielski             aStrSelection = pEngine->GetWord( aSel.nEndPara, aSel.nEndPos );
1149*b1cdbd2cSJim Jagielski             pEngine->SetWordDelimiters( aStrCurrentDelimiters );
1150*b1cdbd2cSJim Jagielski         }
1151*b1cdbd2cSJim Jagielski         else
1152*b1cdbd2cSJim Jagielski         {
1153*b1cdbd2cSJim Jagielski             aStrSelection = pEditView->GetSelected();
1154*b1cdbd2cSJim Jagielski         }
1155*b1cdbd2cSJim Jagielski     }
1156*b1cdbd2cSJim Jagielski 
1157*b1cdbd2cSJim Jagielski 	return aStrSelection;
1158*b1cdbd2cSJim Jagielski }
1159*b1cdbd2cSJim Jagielski 
ExecuteUndo(SfxRequest & rReq)1160*b1cdbd2cSJim Jagielski void ScEditShell::ExecuteUndo(SfxRequest& rReq)
1161*b1cdbd2cSJim Jagielski {
1162*b1cdbd2cSJim Jagielski 	//	#81733# Undo must be handled here because it's called for both EditViews
1163*b1cdbd2cSJim Jagielski 
1164*b1cdbd2cSJim Jagielski 	ScInputHandler* pHdl = GetMyInputHdl();
1165*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pHdl,"no ScInputHandler");
1166*b1cdbd2cSJim Jagielski 	EditView* pTopView	 = pHdl->GetTopView();
1167*b1cdbd2cSJim Jagielski 	EditView* pTableView = pHdl->GetTableView();
1168*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pTableView,"no EditView");
1169*b1cdbd2cSJim Jagielski 
1170*b1cdbd2cSJim Jagielski 	pHdl->DataChanging();
1171*b1cdbd2cSJim Jagielski 
1172*b1cdbd2cSJim Jagielski 	const SfxItemSet* pReqArgs = rReq.GetArgs();
1173*b1cdbd2cSJim Jagielski 	sal_uInt16 nSlot = rReq.GetSlot();
1174*b1cdbd2cSJim Jagielski 	switch ( nSlot )
1175*b1cdbd2cSJim Jagielski 	{
1176*b1cdbd2cSJim Jagielski 		case SID_UNDO:
1177*b1cdbd2cSJim Jagielski 		case SID_REDO:
1178*b1cdbd2cSJim Jagielski 			{
1179*b1cdbd2cSJim Jagielski 				sal_Bool bIsUndo = ( nSlot == SID_UNDO );
1180*b1cdbd2cSJim Jagielski 
1181*b1cdbd2cSJim Jagielski 				sal_uInt16 nCount = 1;
1182*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
1183*b1cdbd2cSJim Jagielski 				if ( pReqArgs && pReqArgs->GetItemState( nSlot, sal_True, &pItem ) == SFX_ITEM_SET )
1184*b1cdbd2cSJim Jagielski 					nCount = ((const SfxUInt16Item*)pItem)->GetValue();
1185*b1cdbd2cSJim Jagielski 
1186*b1cdbd2cSJim Jagielski 				for (sal_uInt16 i=0; i<nCount; i++)
1187*b1cdbd2cSJim Jagielski 				{
1188*b1cdbd2cSJim Jagielski 					if ( bIsUndo )
1189*b1cdbd2cSJim Jagielski 					{
1190*b1cdbd2cSJim Jagielski 						pTableView->Undo();
1191*b1cdbd2cSJim Jagielski 						if (pTopView)
1192*b1cdbd2cSJim Jagielski 							pTopView->Undo();
1193*b1cdbd2cSJim Jagielski 					}
1194*b1cdbd2cSJim Jagielski 					else
1195*b1cdbd2cSJim Jagielski 					{
1196*b1cdbd2cSJim Jagielski 						pTableView->Redo();
1197*b1cdbd2cSJim Jagielski 						if (pTopView)
1198*b1cdbd2cSJim Jagielski 							pTopView->Redo();
1199*b1cdbd2cSJim Jagielski 					}
1200*b1cdbd2cSJim Jagielski 				}
1201*b1cdbd2cSJim Jagielski 			}
1202*b1cdbd2cSJim Jagielski 			break;
1203*b1cdbd2cSJim Jagielski 	}
1204*b1cdbd2cSJim Jagielski 	pViewData->GetBindings().InvalidateAll(sal_False);
1205*b1cdbd2cSJim Jagielski 
1206*b1cdbd2cSJim Jagielski 	pHdl->DataChanged();
1207*b1cdbd2cSJim Jagielski }
1208*b1cdbd2cSJim Jagielski 
GetUndoState(SfxItemSet & rSet)1209*b1cdbd2cSJim Jagielski void ScEditShell::GetUndoState(SfxItemSet &rSet)
1210*b1cdbd2cSJim Jagielski {
1211*b1cdbd2cSJim Jagielski 	//	Undo state is taken from normal ViewFrame state function
1212*b1cdbd2cSJim Jagielski 
1213*b1cdbd2cSJim Jagielski 	SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame();
1214*b1cdbd2cSJim Jagielski 	if ( pViewFrm && GetUndoManager() )
1215*b1cdbd2cSJim Jagielski 	{
1216*b1cdbd2cSJim Jagielski 		SfxWhichIter aIter(rSet);
1217*b1cdbd2cSJim Jagielski 		sal_uInt16 nWhich = aIter.FirstWhich();
1218*b1cdbd2cSJim Jagielski 		while( nWhich )
1219*b1cdbd2cSJim Jagielski 		{
1220*b1cdbd2cSJim Jagielski 			pViewFrm->GetSlotState( nWhich, NULL, &rSet );
1221*b1cdbd2cSJim Jagielski 			nWhich = aIter.NextWhich();
1222*b1cdbd2cSJim Jagielski 		}
1223*b1cdbd2cSJim Jagielski 	}
1224*b1cdbd2cSJim Jagielski 
1225*b1cdbd2cSJim Jagielski 	//	disable if no action in input line EditView
1226*b1cdbd2cSJim Jagielski 
1227*b1cdbd2cSJim Jagielski 	ScInputHandler* pHdl = GetMyInputHdl();
1228*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pHdl,"no ScInputHandler");
1229*b1cdbd2cSJim Jagielski 	EditView* pTopView = pHdl->GetTopView();
1230*b1cdbd2cSJim Jagielski 	if (pTopView)
1231*b1cdbd2cSJim Jagielski 	{
1232*b1cdbd2cSJim Jagielski 		::svl::IUndoManager& rTopMgr = pTopView->GetEditEngine()->GetUndoManager();
1233*b1cdbd2cSJim Jagielski 		if ( rTopMgr.GetUndoActionCount() == 0 )
1234*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_UNDO );
1235*b1cdbd2cSJim Jagielski 		if ( rTopMgr.GetRedoActionCount() == 0 )
1236*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_REDO );
1237*b1cdbd2cSJim Jagielski 	}
1238*b1cdbd2cSJim Jagielski }
1239*b1cdbd2cSJim Jagielski 
ExecuteTrans(SfxRequest & rReq)1240*b1cdbd2cSJim Jagielski void ScEditShell::ExecuteTrans( SfxRequest& rReq )
1241*b1cdbd2cSJim Jagielski {
1242*b1cdbd2cSJim Jagielski 	sal_Int32 nType = ScViewUtil::GetTransliterationType( rReq.GetSlot() );
1243*b1cdbd2cSJim Jagielski 	if ( nType )
1244*b1cdbd2cSJim Jagielski 	{
1245*b1cdbd2cSJim Jagielski 		ScInputHandler* pHdl = GetMyInputHdl();
1246*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pHdl, "no ScInputHandler" );
1247*b1cdbd2cSJim Jagielski 
1248*b1cdbd2cSJim Jagielski 		EditView* pTopView	 = pHdl->GetTopView();
1249*b1cdbd2cSJim Jagielski 		EditView* pTableView = pHdl->GetTableView();
1250*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pTableView, "no EditView" );
1251*b1cdbd2cSJim Jagielski 
1252*b1cdbd2cSJim Jagielski 		pHdl->DataChanging();
1253*b1cdbd2cSJim Jagielski 
1254*b1cdbd2cSJim Jagielski 		pTableView->TransliterateText( nType );
1255*b1cdbd2cSJim Jagielski 		if (pTopView)
1256*b1cdbd2cSJim Jagielski 			pTopView->TransliterateText( nType );
1257*b1cdbd2cSJim Jagielski 
1258*b1cdbd2cSJim Jagielski 		pHdl->DataChanged();
1259*b1cdbd2cSJim Jagielski 	}
1260*b1cdbd2cSJim Jagielski }
1261