| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sw.hxx" |
| |
| |
| #include <sfx2/msg.hxx> |
| #include <svl/srchitem.hxx> |
| #include <sfx2/dispatch.hxx> |
| #include <sfx2/templdlg.hxx> |
| #include <svx/srchdlg.hxx> |
| #include <basic/sbxobj.hxx> |
| #include <uivwimp.hxx> |
| #include <svx/fmshell.hxx> |
| #include <svx/extrusionbar.hxx> |
| #include <svx/fontworkbar.hxx> |
| |
| #include <sfx2/objface.hxx> |
| #include <swmodule.hxx> |
| #include <unotxvw.hxx> |
| #include <swtypes.hxx> |
| #include <cmdid.h> |
| #include <globals.hrc> |
| #include <wrtsh.hxx> |
| #include <edtwin.hxx> |
| #include <wgrfsh.hxx> |
| #include <wfrmsh.hxx> |
| #include <wolesh.hxx> |
| #include <wtabsh.hxx> |
| #include <wlistsh.hxx> |
| #include <wformsh.hxx> |
| #include <wtextsh.hxx> |
| #include <barcfg.hxx> |
| #include <doc.hxx> |
| |
| // EIGENTLICH nicht moeglich !! |
| #include <beziersh.hxx> |
| #include <drawsh.hxx> |
| #include <drwtxtsh.hxx> |
| #include <annotsh.hxx> |
| |
| #include <wview.hxx> |
| #include <wdocsh.hxx> |
| #include <web.hrc> |
| #include <shells.hrc> |
| |
| #define SwWebView |
| #define Frames |
| #define Graphics |
| #define OLEObjects |
| #define Controls |
| #define Text |
| #define Frame |
| #define Graphic |
| #define Object |
| #define Draw |
| #define DrawText |
| #define TextInTable |
| #define ListInText |
| #define ListInTable |
| #define Page |
| #include <swslots.hxx> |
| |
| |
| SFX_IMPL_NAMED_VIEWFACTORY(SwWebView, "Default") |
| { |
| SFX_VIEW_REGISTRATION(SwWebDocShell); |
| } |
| |
| SFX_IMPL_INTERFACE( SwWebView, SwView, SW_RES(RID_WEBTOOLS_TOOLBOX) ) |
| { |
| SFX_CHILDWINDOW_REGISTRATION(SfxTemplateDialogWrapper::GetChildWindowId()); |
| SFX_CHILDWINDOW_REGISTRATION(SvxSearchDialogWrapper::GetChildWindowId()); |
| SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_TOOLS| |
| SFX_VISIBILITY_STANDARD|SFX_VISIBILITY_SERVER, |
| SW_RES(RID_WEBTOOLS_TOOLBOX) ); |
| } |
| |
| TYPEINIT1(SwWebView,SwView) |
| |
| /*-----------------22.01.97 14.27------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| SwWebView::SwWebView(SfxViewFrame* _pFrame, SfxViewShell* _pShell) : |
| SwView(_pFrame, _pShell) |
| { |
| } |
| |
| /*-----------------22.01.97 14.27------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| SwWebView::~SwWebView() |
| { |
| } |
| |
| /*-----------------23.01.97 09.01------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| void SwWebView::SelectShell() |
| { |
| // Entscheidung, ob UpdateTable gerufen werden muss |
| sal_Bool bUpdateTable = sal_False; |
| const SwFrmFmt* pCurTableFmt = GetWrtShell().GetTableFmt(); |
| if(pCurTableFmt && pCurTableFmt != GetLastTblFrmFmt()) |
| { |
| bUpdateTable = sal_True; // kann erst spaeter ausgefuehrt werden |
| } |
| SetLastTblFrmFmt(pCurTableFmt); |
| //SEL_TBL und SEL_TBL_CELLS koennen verodert sein! |
| int nNewSelectionType = (GetWrtShell().GetSelectionType() |
| & ~nsSelectionType::SEL_TBL_CELLS); |
| |
| int _nSelectionType = GetSelectionType(); |
| if ( nNewSelectionType == _nSelectionType ) |
| { |
| GetViewFrame()->GetBindings().InvalidateAll( sal_False ); |
| if ( _nSelectionType & nsSelectionType::SEL_OLE || |
| _nSelectionType & nsSelectionType::SEL_GRF ) |
| //Fuer Grafiken und OLE kann sich natuerlich das Verb aendern! |
| ImpSetVerb( nNewSelectionType ); |
| } |
| else |
| { |
| |
| // DELETEZ(pxSelectionObj); //Selektionsobjekt loeschen |
| SfxDispatcher &rDispatcher = *GetViewFrame()->GetDispatcher(); |
| SwToolbarConfigItem *pBarCfg = SW_MOD()->GetWebToolbarConfig(); |
| |
| if( GetCurShell() ) |
| { |
| rDispatcher.Flush(); // alle gecachten Shells wirklich loeschen |
| |
| //Zur alten Selektion merken welche Toolbar sichtbar war |
| sal_Int32 nId = rDispatcher.GetObjectBarId( SFX_OBJECTBAR_OBJECT ); |
| if ( nId ) |
| pBarCfg->SetTopToolbar( _nSelectionType, nId ); |
| |
| SfxShell *pSfxShell; |
| sal_uInt16 i; |
| for ( i = 0; sal_True; ++i ) |
| { |
| pSfxShell = rDispatcher.GetShell( i ); |
| if ( !( pSfxShell->ISA( SwBaseShell ) || |
| pSfxShell->ISA( SwDrawTextShell ) || pSfxShell->ISA( SwAnnotationShell ) ) ) |
| break; |
| } |
| pSfxShell = rDispatcher.GetShell( --i ); |
| ASSERT( pSfxShell, "My Shell ist lost in space" ); |
| rDispatcher.Pop( *pSfxShell, SFX_SHELL_POP_UNTIL | SFX_SHELL_POP_DELETE); |
| } |
| |
| sal_Bool bInitFormShell = sal_False; |
| if( !GetFormShell() ) |
| { |
| bInitFormShell = sal_True; |
| SetFormShell( new FmFormShell( this ) ); |
| rDispatcher.Push( *GetFormShell() ); |
| } |
| |
| sal_Bool bSetExtInpCntxt = sal_False; |
| _nSelectionType = nNewSelectionType; |
| SetSelectionType( _nSelectionType ); |
| ShellModes eShellMode; |
| |
| if ( _nSelectionType & nsSelectionType::SEL_OLE ) |
| { |
| eShellMode = SHELL_MODE_OBJECT; |
| SetShell( new SwWebOleShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| else if ( _nSelectionType & nsSelectionType::SEL_FRM |
| || _nSelectionType & nsSelectionType::SEL_GRF) |
| { |
| eShellMode = SHELL_MODE_FRAME; |
| SetShell( new SwWebFrameShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| if(_nSelectionType & nsSelectionType::SEL_GRF ) |
| { |
| eShellMode = SHELL_MODE_GRAPHIC; |
| SetShell( new SwWebGrfShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| } |
| else if ( _nSelectionType & nsSelectionType::SEL_FRM ) |
| { |
| eShellMode = SHELL_MODE_FRAME; |
| SetShell( new SwWebFrameShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| else if ( _nSelectionType & nsSelectionType::SEL_DRW ) |
| { |
| eShellMode = SHELL_MODE_DRAW; |
| SetShell( new svx::ExtrusionBar( this ) ); |
| rDispatcher.Push( *GetCurShell() ); |
| |
| eShellMode = SHELL_MODE_DRAW; |
| SetShell( new svx::FontworkBar( this ) ); |
| rDispatcher.Push( *GetCurShell() ); |
| |
| SetShell( new SwDrawShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| if ( _nSelectionType & nsSelectionType::SEL_BEZ ) |
| { |
| eShellMode = SHELL_MODE_BEZIER; |
| SetShell( new SwBezierShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| |
| } |
| else if ( _nSelectionType & nsSelectionType::SEL_DRW_FORM ) |
| { |
| eShellMode = SHELL_MODE_DRAW_FORM; |
| SetShell( new SwWebDrawFormShell( *this )); |
| |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| else if ( _nSelectionType & nsSelectionType::SEL_DRW_TXT ) |
| { |
| eShellMode = SHELL_MODE_DRAWTEXT; |
| rDispatcher.Push( *(new SwBaseShell( *this )) ); |
| SetShell( new SwDrawTextShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| else if ( _nSelectionType & nsSelectionType::SEL_POSTIT ) |
| { |
| eShellMode = SHELL_MODE_POSTIT; |
| SetShell( new SwAnnotationShell( *this ) ); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| else |
| { |
| bSetExtInpCntxt = sal_True; |
| eShellMode = SHELL_MODE_TEXT; |
| if ( _nSelectionType & nsSelectionType::SEL_NUM ) |
| { |
| eShellMode = SHELL_MODE_LIST_TEXT; |
| SetShell( new SwWebListShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| SetShell( new SwWebTextShell(*this)); |
| rDispatcher.Push( *GetCurShell() ); |
| if ( _nSelectionType & nsSelectionType::SEL_TBL ) |
| { |
| eShellMode = eShellMode == SHELL_MODE_LIST_TEXT ? SHELL_MODE_TABLE_LIST_TEXT |
| : SHELL_MODE_TABLE_TEXT; |
| SetShell( new SwWebTableShell( *this )); |
| rDispatcher.Push( *GetCurShell() ); |
| } |
| } |
| ImpSetVerb( _nSelectionType ); |
| GetViewImpl()->SetShellMode(eShellMode); |
| |
| if( !GetDocShell()->IsReadOnly() ) |
| { |
| if( bSetExtInpCntxt && GetWrtShell().HasReadonlySel() ) |
| bSetExtInpCntxt = sal_False; |
| |
| InputContext aCntxt( GetEditWin().GetInputContext() ); |
| aCntxt.SetOptions( bSetExtInpCntxt |
| ? (aCntxt.GetOptions() | |
| ( INPUTCONTEXT_TEXT | |
| INPUTCONTEXT_EXTTEXTINPUT )) |
| : (aCntxt.GetOptions() & ~ |
| ( INPUTCONTEXT_TEXT | |
| INPUTCONTEXT_EXTTEXTINPUT )) ); |
| GetEditWin().SetInputContext( aCntxt ); |
| } |
| |
| //Zur neuen Selektion die Toolbar aktivieren, die auch beim letzten Mal |
| //aktiviert war |
| //Vorher muss ein Flush() sein, betrifft aber lt. MBA nicht das UI und ist |
| //kein Performance-Problem |
| // TODO/LATER: maybe now the Flush() command is superfluous?! |
| rDispatcher.Flush(); |
| |
| Point aPnt = GetEditWin().GetPointerPosPixel(); |
| aPnt = GetEditWin().PixelToLogic(aPnt); |
| GetEditWin().UpdatePointer(aPnt); |
| |
| if ( bInitFormShell && GetWrtShell().GetDrawView() ) |
| GetFormShell()->SetView( PTR_CAST( FmFormView, |
| GetWrtShell().GetDrawView())); |
| |
| |
| } |
| GetViewImpl()->GetUNOObject_Impl()->NotifySelChanged(); |
| |
| //Guenstiger Zeitpunkt fuer die Kommunikation mit OLE-Objekten? |
| if ( GetDocShell()->GetDoc()->IsOLEPrtNotifyPending() ) |
| GetDocShell()->GetDoc()->PrtOLENotify( sal_False ); |
| |
| //jetzt das Tabellen-Update |
| if(bUpdateTable) |
| GetWrtShell().UpdateTable(); |
| } |
| |
| |
| |
| |