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