diff options
Diffstat (limited to 'sw/source/ui/shells/textsh.cxx')
-rw-r--r-- | sw/source/ui/shells/textsh.cxx | 1043 |
1 files changed, 1043 insertions, 0 deletions
diff --git a/sw/source/ui/shells/textsh.cxx b/sw/source/ui/shells/textsh.cxx new file mode 100644 index 000000000000..1e06a1478da7 --- /dev/null +++ b/sw/source/ui/shells/textsh.cxx @@ -0,0 +1,1043 @@ +/************************************************************************* + * + * $RCSfile: textsh.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:14:47 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifdef PRECOMPILED +#include "ui_pch.hxx" +#endif + +#pragma hdrstop + +#define _SW_FRMVALID_HXX +#ifndef _HINTIDS_HXX +#include <hintids.hxx> +#endif +#ifndef _UIPARAM_HXX +#include <uiparam.hxx> +#endif + + +#ifndef __RSC //autogen +#include <tools/errinf.hxx> +#endif +#ifndef _SVDVIEW_HXX //autogen +#include <svx/svdview.hxx> +#endif +#ifndef _OFF_APP_HXX //autogen +#include <offmgr/app.hxx> +#endif +#ifndef _PLUGIN_HXX //autogen wg. SvPlugInObject +#include <so3/plugin.hxx> +#endif +#ifndef _SFXPTITEM_HXX //autogen +#include <svtools/ptitem.hxx> +#endif +#ifndef _SFXSTRITEM_HXX //autogen +#include <svtools/stritem.hxx> +#endif +#ifndef _SFXMSG_HXX //autogen +#include <sfx2/msg.hxx> +#endif +#ifndef _MSGBOX_HXX //autogen +#include <vcl/msgbox.hxx> +#endif +#ifndef _SFX_FCONTNR_HXX //autogen +#include <sfx2/fcontnr.hxx> +#endif +#ifndef _SVX_HLNKITEM_HXX //autogen +#include <svx/hlnkitem.hxx> +#endif +#ifndef _SBASLTID_HRC //autogen +#include <offmgr/sbasltid.hrc> +#endif +#ifndef _SVX_SRCHITEM_HXX //autogen +#include <svx/srchitem.hxx> +#endif +#ifndef _SVX_CHARMAP_HXX //autogen +#include <svx/charmap.hxx> +#endif +#ifndef _SFXDISPATCH_HXX //autogen +#include <sfx2/dispatch.hxx> +#endif +#ifndef _SFX_DOCFILT_HACK_HXX //autogen +#include <sfx2/docfilt.hxx> +#endif +#ifndef _SFXDOCFILE_HXX //autogen +#include <sfx2/docfile.hxx> +#endif +#ifndef SVTOOLS_URIHELPER_HXX +#include <svtools/urihelper.hxx> +#endif +#ifndef __SBX_SBXVARIABLE_HXX //autogen +#include <svtools/sbxvar.hxx> +#endif +#ifndef _SFX_WHITER_HXX //autogen +#include <svtools/whiter.hxx> +#endif +#ifndef _SFXREQUEST_HXX //autogen +#include <sfx2/request.hxx> +#endif +#ifndef _SVX_OPAQITEM_HXX //autogen +#include <svx/opaqitem.hxx> +#endif +#ifndef _SVX_FONTITEM_HXX //autogen +#include <svx/fontitem.hxx> +#endif +#ifndef _SVX_ADJITEM_HXX //autogen +#include <svx/adjitem.hxx> +#endif +#ifndef _SVX_BOXITEM_HXX //autogen +#include <svx/boxitem.hxx> +#endif +#ifndef _SVX_SIZEITEM_HXX //autogen +#include <svx/sizeitem.hxx> +#endif +#ifndef _MySVXACORR_HXX +#include <svx/svxacorr.hxx> +#endif +#ifndef _FILTER_HXX //autogen +#include <svtools/filter.hxx> +#endif +#ifndef SMDLL_HXX +#include <starmath/smdll0.hxx> +#endif +#ifndef _SCHDLL0_HXX +#include <sch/schdll0.hxx> +#endif +#ifndef _SCH_DLL_HXX +#include <sch/schdll.hxx> +#endif +#ifndef _SCH_MEMCHRT_HXX +#include <sch/memchrt.hxx> +#endif +#ifndef _SIMDLL_HXX +#include <sim2/simdll0.hxx> +#endif +#ifndef _SVX_HTMLMODE_HXX +#include <svx/htmlmode.hxx> +#endif +#ifndef _SVX_PFILEDLG_HXX //autogen wg. SvxPluginFileDlg +#include <svx/pfiledlg.hxx> +#endif +#ifndef _OFA_HTMLCFG_HXX //autogen +#include <offmgr/htmlcfg.hxx> +#endif +#ifndef _OFAACCFG_HXX //autogen +#include <offmgr/ofaaccfg.hxx> +#endif + +#ifndef _SWWDOCSH_HXX //autogen +#include <wdocsh.hxx> +#endif +#ifndef _FMTINFMT_HXX //autogen +#include <fmtinfmt.hxx> +#endif +#ifndef _FMTCLDS_HXX //autogen +#include <fmtclds.hxx> +#endif +#ifndef _FMTSRND_HXX //autogen +#include <fmtsrnd.hxx> +#endif +#ifndef _FMTFSIZE_HXX //autogen +#include <fmtfsize.hxx> +#endif +#ifndef _SWMODULE_HXX +#include <swmodule.hxx> +#endif +#ifndef _WRTSH_HXX +#include <wrtsh.hxx> +#endif +#ifndef _VIEW_HXX +#include <view.hxx> +#endif +#ifndef _DOCSH_HXX +#include <docsh.hxx> +#endif +#ifndef _UITOOL_HXX +#include <uitool.hxx> +#endif +#ifndef _CMDID_H +#include <cmdid.h> +#endif +#ifndef _GLOBALS_HRC +#include <globals.hrc> +#endif +#ifndef _FRMMGR_HXX +#include <frmmgr.hxx> +#endif +#ifndef _TEXTSH_HXX +#include <textsh.hxx> +#endif +#ifndef _INSTABLE_HXX +#include <instable.hxx> +#endif +#ifndef _FRMFMT_HXX +#include <frmfmt.hxx> +#endif +#ifndef _TABLEMGR_HXX +#include <tablemgr.hxx> +#endif +#ifndef _SWUNDO_HXX +#include <swundo.hxx> // fuer Undo-IDs +#endif +#ifndef _SHELLIO_HXX +#include <shellio.hxx> +#endif +#ifndef _FRMDLG_HXX +#include <frmdlg.hxx> +#endif +#ifndef _USRPREF_HXX +#include <usrpref.hxx> +#endif +#ifndef _SWTABLE_HXX +#include <swtable.hxx> +#endif +#ifndef _TBLAFMT_HXX +#include <tblafmt.hxx> +#endif +#ifndef _INSRULE_HXX +#include <insrule.hxx> +#endif +#ifndef _CAPTION_HXX +#include <caption.hxx> +#endif +#ifndef _IDXMRK_HXX +#include <idxmrk.hxx> +#endif +#ifndef _POOLFMT_HXX +#include <poolfmt.hxx> +#endif + +#ifndef _SHELLS_HRC +#include <shells.hrc> +#endif +#ifndef _POPUP_HRC +#include <popup.hrc> +#endif +#ifndef _SWERROR_H +#include <swerror.h> +#endif +#ifndef _MODOPT_HXX //autogen +#include <modcfg.hxx> +#endif +#ifndef _COLUMN_HXX +#include <column.hxx> +#endif + +#define SwTextShell +#define Paragraph +#define HyphenZone +#define TextFont +#define DropCap +#ifndef _ITEMDEF_HXX +#include <itemdef.hxx> +#endif +#ifndef _SWSLOTS_HXX +#include <swslots.hxx> +#endif + +#define C2S(cChar) UniString::CreateFromAscii(cChar) + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + +SFX_IMPL_INTERFACE(SwTextShell, SwBaseShell, SW_RES(STR_SHELLNAME_TEXT)) +{ + SFX_POPUPMENU_REGISTRATION(SW_RES(MN_TEXT_POPUPMENU)); + SFX_OBJECTBAR_REGISTRATION(SFX_OBJECTBAR_OBJECT, SW_RES(RID_TEXT_TOOLBOX)); + SFX_OBJECTMENU_REGISTRATION(SID_OBJECTMENU0, SW_RES(MN_OBJECTMENU_TEXT)); + SFX_CHILDWINDOW_REGISTRATION(FN_EDIT_FORMULA); + SFX_CHILDWINDOW_REGISTRATION(SID_INSERT_DIAGRAM); + SFX_CHILDWINDOW_REGISTRATION(FN_INSERT_FIELD); + SFX_CHILDWINDOW_REGISTRATION(FN_INSERT_IDX_ENTRY_DLG); + SFX_CHILDWINDOW_REGISTRATION(FN_INSERT_AUTH_ENTRY_DLG); +} + + + +TYPEINIT1(SwTextShell,SwBaseShell) + + + +void SwTextShell::ExecInsert(SfxRequest &rReq) +{ + SwWrtShell &rSh = GetShell(); + + ASSERT( !rSh.IsObjSelected() && !rSh.IsFrmSelected(), + "Falsche Shell auf dem Dispatcher" ); + + const SfxItemSet *pArgs = rReq.GetArgs(); + const SfxPoolItem* pItem = 0; + USHORT nSlot = rReq.GetSlot(); + if(pArgs) + pArgs->GetItemState(nSlot, FALSE, &pItem ); + + switch( nSlot ) + { + case FN_INSERT_SOFT_HYPHEN: + if( CHAR_SOFTHYPHEN != rSh.SwCrsrShell::GetChar( TRUE, 0 ) && + CHAR_SOFTHYPHEN != rSh.SwCrsrShell::GetChar( TRUE, -1 )) + rSh.Insert( String( CHAR_SOFTHYPHEN ) ); + break; + + case FN_INSERT_HARDHYPHEN: + case FN_INSERT_HARD_SPACE: + { + sal_Unicode cIns = FN_INSERT_HARD_SPACE == nSlot ? CHAR_HARDBLANK + : CHAR_HARDHYPHEN; + + SvxAutoCorrect* pACorr = OFF_APP()->GetAutoCorrConfig()->GetAutoCorrect(); + if( pACorr && pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd | + ChgFractionSymbol | ChgOrdinalNumber | + ChgToEnEmDash | SetINetAttr | Autocorrect )) + rSh.AutoCorrect( *pACorr, cIns ); + else + rSh.Insert( String( cIns ) ); + } + break; + + case FN_INSERT_BREAK: + rSh.SplitNode(); + break; + case FN_INSERT_PAGEBREAK: + rSh.InsertPageBreak(); + break; + case FN_INSERT_LINEBREAK: + rSh.InsertLineBreak(); + break; + case FN_INSERT_COLUMN_BREAK: + rSh.InsertColumnBreak(); + break; + case SID_HYPERLINK_SETLINK: + if (pItem) + InsertHyperlink(*((const SvxHyperlinkItem *)pItem)); + break; + case SID_INSERT_SOUND: + case SID_INSERT_VIDEO: + { + SvxPluginFileDlg aDlg( &GetView().GetViewFrame()->GetWindow(), nSlot ); + + if ( RET_OK == aDlg.Execute() ) + { + // URL ermitteln + String aStrURL( aDlg.GetPath() ); + aStrURL = URIHelper::SmartRelToAbs( aStrURL ); + + INetURLObject* pURL = new INetURLObject(); + pURL->SetSmartProtocol( INET_PROT_FILE ); + + if ( pURL->SetURL( aStrURL, INetURLObject::WAS_ENCODED ) ) + { + SvFactory * pFactory = SvFactory::GetDefaultPlugInFactory(); + SvStorageRef aStor = new SvStorage( aEmptyStr, STREAM_STD_READWRITE ); + SvPlugInObjectRef xObj = &pFactory->CreateAndInit( *pFactory, aStor ); + xObj->SetPlugInMode( (USHORT)PLUGIN_EMBEDED ); + xObj->SetURL( *pURL ); + SvPlugInObject* pObj = &xObj; + SvInPlaceObjectRef *pxIns = new SvInPlaceObjectRef(pObj); + rSh.Insert( pxIns, 0, TRUE, nSlot); + } + } + } + break; + case SID_INSERT_OBJECT: + case SID_INSERT_PLUGIN: + case SID_INSERT_APPLET: + case SID_INSERT_FLOATINGFRAME: + rSh.Insert( (SvInPlaceObjectRef*)0, 0, TRUE, nSlot); + break; + + case SID_INSERT_DIAGRAM: + { + if ( !SFX_APP()->HasFeature( SFX_FEATURE_SCHART ) ) + break; + if(!rReq.IsAPI()) + { + SfxViewFrame* pVFrame = GetView().GetViewFrame(); + pVFrame->ToggleChildWindow( SID_INSERT_DIAGRAM ); + } + else + { + const SwFrmFmt* pTFmt = rSh.GetTableFmt(); + if( pTFmt && !rSh.IsTblComplexForChart() ) + { + SchMemChart* pData = 0; + rSh.UpdateChartData( pTFmt->GetName(), pData ); + + SwTableFUNC( &rSh, FALSE ).InsertChart( *pData ); + rSh.LaunchOLEObj(); + + delete pData; + } + else + { + rSh.Insert( 0, SCH_MOD()->pSchChartDocShellFactory ); + } + SvInPlaceObjectRef xOLE = rSh.GetOLEObj(); + if(pItem && xOLE.Is()) + { + Size aSize(((SvxSizeItem*)pItem)->GetSize()); + aSize = OutputDevice::LogicToLogic + ( aSize, MapMode( MAP_TWIP ), MapMode( MAP_100TH_MM ) ); + + if(aSize.Width() > MINLAY&& aSize.Height()> MINLAY) + { + Rectangle aRect = xOLE->GetVisArea(); + aRect.SetSize(aSize); + xOLE->SetVisArea( aRect ); + } + } + } + } + break; + + case FN_INSERT_SIM: + { + rSh.Insert( 0, SIM_MOD()->pSimDrawDocShellFactory ); + } + break; + + case FN_INSERT_SMA: + { + rSh.Insert( 0, SM_MOD()->pSmDocShellFactory ); + } + break; + + case FN_INSERT_TABLE: + if( !rSh.GetTableFmt() && !(rSh.GetFrmType(0,TRUE) & FRMTYPE_FOOTNOTE)) + { + SwView &rView = GetView(); // Da GetView() nach Shellwechsel nicht mehr geht + BOOL bHTMLMode = 0 != (::GetHtmlMode(rView.GetDocShell())&HTMLMODE_ON); + BOOL bCallEndUndo = FALSE; + + if( !pArgs && rSh.IsSelection() && !rSh.IsInClickToEdit() ) + { + const SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig(); + USHORT nInsTblFlags = pModOpt->GetInsTblFlags(bHTMLMode); + + rSh.StartUndo(UNDO_INSTABLE); + bCallEndUndo = TRUE; + + BOOL bInserted = rSh.TextToTable('\t', HORI_FULL, nInsTblFlags); + rSh.EnterStdMode(); + if (bInserted) + rView.AutoCaption(TABLE_CAP); + } + else + { + USHORT nCols = 0; + USHORT nRows = 0; + USHORT nInsTblFlags = ALL_TBL_INS_ATTR; + String aTableName; + SwTableAutoFmt* pTAFmt = 0; + + if( pArgs && pArgs->Count() >= 2 ) + { + nCols = ((SfxUInt16Item &)pArgs->Get(SID_ATTR_TABLE_COLUMN)).GetValue(); + nRows = ((SfxUInt16Item &)pArgs->Get(SID_ATTR_TABLE_ROW)).GetValue(); + + const SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig(); + nInsTblFlags = pModOpt->GetInsTblFlags(bHTMLMode); + } + + if( !nCols || !nRows ) + { + SwInsTableDlg *pDlg = new SwInsTableDlg(rView); + if( RET_OK == pDlg->Execute() ) + { + pDlg->GetValues( aTableName, nRows, nCols, nInsTblFlags, pTAFmt ); + } + delete pDlg; + } + + if( nCols && nRows ) + { + rSh.StartUndo(UNDO_INSTABLE); + bCallEndUndo = TRUE; + + rSh.StartAllAction(); + if( rSh.HasSelection() ) + rSh.DelRight(); + + rSh.InsertTable( nRows, nCols, HORI_FULL, nInsTblFlags, pTAFmt ); + rSh.MoveTable( fnTablePrev, fnTableStart ); + + if( aTableName.Len() && !rSh.GetTblStyle( aTableName ) ) + rSh.GetTableFmt()->SetName( aTableName ); + + rSh.EndAllAction(); + rView.AutoCaption(TABLE_CAP); + } + delete pTAFmt; + } + if( bCallEndUndo ) + rSh.EndUndo(UNDO_INSTABLE); // wegen moegl. Shellwechsel + } + break; + + case FN_INSERT_FRAME_INTERACT_NOCOL: + case FN_INSERT_FRAME_INTERACT: + { + USHORT nCols = 1; + if(FN_INSERT_FRAME_INTERACT_NOCOL != nSlot && + pArgs &&pArgs->GetItemState(SID_ATTR_COLUMNS, FALSE, &pItem) == SFX_ITEM_SET) + nCols = ((SfxUInt16Item *)pItem)->GetValue(); + GetView().InsFrmMode(nCols); + } + break; + case FN_INSERT_FRAME: + { + const int nSel = rSh.GetSelectionType(); + + BOOL bSingleCol = FALSE; + if( 0!= PTR_CAST(SwWebDocShell, GetView().GetDocShell()) ) + { + OfaHtmlOptions* pHtmlOpt = OFF_APP()->GetHtmlOptions(); + USHORT nExport = pHtmlOpt->GetExportMode(); + if( HTML_CFG_MSIE == nExport || + HTML_CFG_HTML32 == nExport || + HTML_CFG_MSIE_40 == nExport || + HTML_CFG_HTML32 == nExport ) + { + bSingleCol = TRUE; + } + + } + // Rahmen neu anlegen + SwFlyFrmAttrMgr aMgr( TRUE, GetShellPtr(), FRMMGR_TYPE_TEXT ); + static USHORT __READONLY_DATA aFrmAttrRange[] = + { + RES_FRMATR_BEGIN, RES_FRMATR_END-1, + SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, + FN_GET_PRINT_AREA, FN_GET_PRINT_AREA, + SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE, + FN_SET_FRM_NAME, FN_SET_FRM_NAME, + SID_HTML_MODE, SID_HTML_MODE, + 0 + }; + + SfxItemSet aSet(GetPool(), aFrmAttrRange ); + aSet.Put(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(GetView().GetDocShell()))); + const SwRect &rPg = GetShell().GetAnyCurRect(RECT_PAGE); + SwFmtFrmSize aFrmSize(ATT_VAR_SIZE, rPg.Width(), rPg.Height()); + aFrmSize.SetWhich(GetPool().GetWhich(SID_ATTR_PAGE_SIZE)); + aSet.Put(aFrmSize); + + const SwRect &rPr = GetShell().GetAnyCurRect(RECT_PAGE_PRT); + SwFmtFrmSize aPrtSize(ATT_VAR_SIZE, rPr.Width(), rPr.Height()); + aPrtSize.SetWhich(GetPool().GetWhich(FN_GET_PRINT_AREA)); + aSet.Put(aPrtSize); + + aSet.Put(aMgr.GetAttrSet()); + aSet.SetParent( aMgr.GetAttrSet().GetParent() ); + + // Minimalgroesse in Spalten l”schen + SvxBoxInfoItem aBoxInfo((SvxBoxInfoItem &)aSet.Get(SID_ATTR_BORDER_INNER)); + aBoxInfo.SetMinDist(FALSE); + aSet.Put(aBoxInfo); + + SwFrmDlg* pDlg = new SwFrmDlg(GetView().GetViewFrame(), &GetView().GetViewFrame()->GetWindow(), aSet, TRUE); + + if(pDlg->Execute() && pDlg->GetOutputItemSet()) + { + GetShell().StartAllAction(); + GetShell().StartUndo(UNDO_INSERT); + + const SfxItemSet* pOutSet = pDlg->GetOutputItemSet(); + aMgr.SetAttrSet(*pOutSet); + + // beim ClickToEditFeld erst die Selektion loeschen + if( GetShell().IsInClickToEdit() ) + GetShell().DelRight(); + + aMgr.InsertFlyFrm(); + + + GetView().AutoCaption(FRAME_CAP); + GetShell().EndUndo(UNDO_INSERT); + GetShell().EndAllAction(); + } + + DELETEZ(pDlg); + break; + } + case FN_INSERT_HRULER: + { + String sPath; + BOOL bSimpleLine = FALSE; + BOOL bRet = FALSE; + Window* pParent = GetView().GetWindow(); + SwInsertGrfRulerDlg* pDlg = new SwInsertGrfRulerDlg( + pParent , + GetView().GetDocShell()); + // MessageBox fuer fehlende Grafiken + if(!pDlg->HasImages()) + InfoBox( pParent, SW_RES(MSG_NO_RULER)).Execute(); + if(RET_OK == pDlg->Execute()) + { + sPath = pDlg->GetGraphicName(); + bSimpleLine = pDlg->IsSimpleLine(); + } + delete pDlg; + rSh.StartAllAction(); + rSh.StartUndo(UIUNDO_INSERT_RULER); + if(bSimpleLine) + { + if(!(rSh.IsSttOfPara() && rSh.IsEndOfPara())) // kein leerer Absatz? + rSh.SplitNode( FALSE, FALSE ); // dann Platz schaffen + rSh.SplitNode( FALSE, FALSE ); + rSh.Left(); + rSh.SetTxtFmtColl( rSh.GetTxtCollFromPool( RES_POOLCOLL_HTML_HR )); + rSh.Right(); + bRet = TRUE; + } + else if(sPath.Len()) + { + if (!pFrmMgr) + pFrmMgr = new SwFlyFrmAttrMgr( TRUE, &rSh, FRMMGR_TYPE_GRF ); + // am FrmMgr muessen die richtigen Parameter eingestellt werden + + pFrmMgr->SetAnchor(FLY_IN_CNTNT); + + rSh.SplitNode( FALSE, FALSE ); + rSh.SplitNode( FALSE, FALSE ); + rSh.Left(); + rSh.SetAttr(SvxAdjustItem(SVX_ADJUST_CENTER,RES_PARATR_ADJUST )); + if(GRFILTER_OK == InsertGraphic(sPath, aEmptyStr, TRUE, 0, 0 )) + bRet = TRUE; + rSh.EnterStdMode(); + rSh.Right(); + DELETEZ(pFrmMgr); + } + rSh.EndAllAction(); + rSh.EndUndo(UIUNDO_INSERT_RULER); + rReq.SetReturnValue(SfxBoolItem(nSlot, bRet)); + } + break; + case FN_FORMAT_COLUMN : + { + SwColumnDlg* pColDlg = new SwColumnDlg(GetView().GetWindow(), rSh); + pColDlg->Execute(); + delete pColDlg; + } + break; + + case FN_SECTION_APPENDNODE: + rReq.SetReturnValue( SfxBoolItem( nSlot, rSh.AppendNodeInSection() )); + break; + + default: + ASSERT( !this, "falscher Dispatcher" ); + return; + } +} + + + +void SwTextShell::StateInsert( SfxItemSet &rSet ) +{ + USHORT nHtmlMode = ::GetHtmlMode(GetView().GetDocShell()); + SfxWhichIter aIter( rSet ); + SwWrtShell &rSh = GetShell(); + USHORT nWhich = aIter.FirstWhich(); + while ( nWhich ) + { + switch ( nWhich ) + { + case SID_INSERT_SOUND: + case SID_INSERT_VIDEO: + if ( GetShell().IsSelFrmMode() || + !SvxPluginFileDlg::IsAvailable( nWhich ) || + SFX_CREATE_MODE_EMBEDDED == GetView().GetDocShell()->GetCreateMode() ) + { + rSet.DisableItem( nWhich ); + } + break; + + case SID_INSERT_DIAGRAM: + if( !SFX_APP()->HasFeature( SFX_FEATURE_SCHART ) ) + { + rSet.DisableItem( nWhich ); + break; + } + + case FN_INSERT_SIM: + if( FN_INSERT_SIM == nWhich && + !SFX_APP()->HasFeature( SFX_FEATURE_SIMAGE ) ) + { + rSet.DisableItem( nWhich ); + break; + } + + case FN_INSERT_SMA: + if( FN_INSERT_SMA == nWhich && + !SFX_APP()->HasFeature( SFX_FEATURE_SMATH ) ) + { + rSet.DisableItem( nWhich ); + break; + } + + case SID_INSERT_FLOATINGFRAME: + case SID_INSERT_OBJECT: + case SID_INSERT_PLUGIN: + case SID_INSERT_APPLET: + { + SfxObjectCreateMode eMode = + GetView().GetDocShell()->GetCreateMode(); + + if( +#ifndef SOLAR_JAVA + nWhich == SID_INSERT_APPLET || +#endif + eMode == SFX_CREATE_MODE_EMBEDDED || + (nWhich == SID_INSERT_DIAGRAM && rSh.IsCrsrInTbl() && + rSh.IsTblComplexForChart() && + !GetView().GetViewFrame()->GetChildWindow( + SID_INSERT_DIAGRAM)) ) + rSet.DisableItem( nWhich ); + else if( GetShell().IsSelFrmMode()) + rSet.DisableItem( nWhich ); + else if(SID_INSERT_FLOATINGFRAME == nWhich && nHtmlMode&HTMLMODE_ON) + { + OfaHtmlOptions* pHtmlOpt = OFF_APP()->GetHtmlOptions(); + USHORT nExport = pHtmlOpt->GetExportMode(); + if(HTML_CFG_MSIE_40 != nExport && HTML_CFG_WRITER != nExport ) + rSet.DisableItem(nWhich); + } + } + break; + case FN_INSERT_FRAME_INTERACT_NOCOL : + case FN_INSERT_FRAME_INTERACT: + { + if ( GetShell().IsSelFrmMode() || + (0 != (nHtmlMode & HTMLMODE_ON) && 0 == (nHtmlMode & HTMLMODE_SOME_ABS_POS))) + rSet.DisableItem(nWhich); + } + break; + case SID_HYPERLINK_GETLINK: + { + SfxItemSet aSet(GetPool(), RES_TXTATR_INETFMT, RES_TXTATR_INETFMT); + rSh.GetAttr( aSet ); + + SvxHyperlinkItem aHLinkItem; + const SfxPoolItem* pItem; + if(SFX_ITEM_SET == aSet.GetItemState(RES_TXTATR_INETFMT, FALSE, &pItem)) + { + const SwFmtINetFmt* pINetFmt = (const SwFmtINetFmt*)pItem; + aHLinkItem.SetURL(pINetFmt->GetValue()); + aHLinkItem.SetTargetFrame(pINetFmt->GetTargetFrame()); + aHLinkItem.SetIntName(pINetFmt->GetName()); + const SvxMacro *pMacro = pINetFmt->GetMacro( SFX_EVENT_MOUSEOVER_OBJECT ); + if( pMacro ) + aHLinkItem.SetMacro(HYPERDLG_EVENT_MOUSEOVER_OBJECT, *pMacro); + + pMacro = pINetFmt->GetMacro( SFX_EVENT_MOUSECLICK_OBJECT ); + if( pMacro ) + aHLinkItem.SetMacro(HYPERDLG_EVENT_MOUSECLICK_OBJECT, *pMacro); + + pMacro = pINetFmt->GetMacro( SFX_EVENT_MOUSEOUT_OBJECT ); + if( pMacro ) + aHLinkItem.SetMacro(HYPERDLG_EVENT_MOUSEOUT_OBJECT, *pMacro); + + // Text des Links besorgen + rSh.StartAction(); + rSh.CreateCrsr(); + rSh.SwCrsrShell::SelectTxtAttr(RES_TXTATR_INETFMT,TRUE); + String sLinkName = rSh.GetSelTxt(); + aHLinkItem.SetName(sLinkName); + aHLinkItem.SetInsertMode(HLINK_FIELD); + rSh.DestroyCrsr(); + rSh.EndAction(); + } + else + { + String sReturn = rSh.GetSelTxt(); + sReturn.Erase(255); + sReturn.EraseTrailingChars(); + aHLinkItem.SetName(sReturn); + } + + aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() | + ((nHtmlMode & HTMLMODE_ON) != 0 ? HLINK_HTMLMODE : 0))); + aHLinkItem.SetMacroEvents ( HYPERDLG_EVENT_MOUSEOVER_OBJECT| + HYPERDLG_EVENT_MOUSECLICK_OBJECT | HYPERDLG_EVENT_MOUSEOUT_OBJECT ); + + rSet.Put(aHLinkItem); + } + break; + + case FN_INSERT_FRAME: + if(rSh.IsSelFrmMode()) + { + const int nSel = rSh.GetSelectionType(); + if( (SwWrtShell::SEL_GRF | SwWrtShell::SEL_OLE ) & nSel ) + rSet.DisableItem(nWhich); + } + break; + case FN_INSERT_HRULER : + if(rSh.IsReadOnlyAvailable() && rSh.HasReadonlySel() ) + rSet.DisableItem(nWhich); + break; + + case FN_SECTION_APPENDNODE: + if( !rSh.CanInsertNodeAtEndOfSection() ) + rSet.DisableItem(nWhich); + break; + } + nWhich = aIter.NextWhich(); + } +} + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + +void SwTextShell::ExecDelete(SfxRequest &rReq) +{ + SwWrtShell &rSh = GetShell(); + switch( rReq.GetSlot() ) + { + case FN_DELETE_SENT: + if( rSh.IsTableMode() ) + { + rSh.DeleteRow(); + rSh.EnterStdMode(); + } + else + rSh.DelToEndOfSentence(); + break; + case FN_DELETE_BACK_SENT: + rSh.DelToStartOfSentence(); + break; + case FN_DELETE_WORD: + rSh.DelNxtWord(); + break; + case FN_DELETE_BACK_WORD: + rSh.DelPrvWord(); + break; + case FN_DELETE_LINE: + rSh.DelToEndOfLine(); + break; + case FN_DELETE_BACK_LINE: + rSh.DelToStartOfLine(); + break; + case FN_DELETE_PARA: + rSh.DelToEndOfPara(); + break; + case FN_DELETE_BACK_PARA: + rSh.DelToStartOfPara(); + break; + case FN_DELETE_WHOLE_LINE: + rSh.DelLine(); + break; + default: + ASSERT(!this, "falscher Dispatcher"); + return; + } +} + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + + + +SwTextShell::SwTextShell(SwView &rView) : + SwBaseShell(rView), pPostItFldMgr( 0 ), pInsGrfSetPtr( 0 ) +{ + SetName(String::CreateFromAscii("Text")); + SetHelpId(SW_TEXTSHELL); +} + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + +SwTextShell::~SwTextShell() +{ +} + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + +void SwTextShell::InsertSymbol(const String& rChars, const String& rFontName) +{ + SwWrtShell &rSh = GetShell(); + String aChars( rChars ); + + SfxItemSet aSet( GetPool(), RES_CHRATR_FONT, RES_CHRATR_FONT ); + rSh.GetAttr( aSet ); + SvxFontItem aFont( (SvxFontItem &) aSet.Get( RES_CHRATR_FONT )); + Font aNewFont(rFontName, Size(1,1)); // Size nur wg. CTOR + + if( !rChars.Len() ) + { + // Eingestellten Font als Default + SvxCharacterMap* pDlg = new SvxCharacterMap(&GetView().GetViewFrame()->GetWindow(), FALSE); + + Font aDlgFont( pDlg->GetCharFont() ); + SwViewOption aOpt(*GetShell().GetViewOptions()); + String sSymbolFont = aOpt.GetSymbolFont(); + if(!rFontName.Len() && sSymbolFont.Len()) + aDlgFont.SetName(sSymbolFont); + else + aDlgFont.SetName( aFont.GetFamilyName() ); + + pDlg->SetCharFont( aDlgFont ); + + if( RET_OK == pDlg->Execute() ) + { + aChars = pDlg->GetCharacters(); + aNewFont = pDlg->GetCharFont(); + aOpt.SetSymbolFont(aNewFont.GetName()); + SW_MOD()->ApplyUsrPref(aOpt, &GetView()); + } + delete pDlg; + } + + if( aChars.Len() ) + { + rSh.StartAllAction(); + + // Selektierten Inhalt loeschen + rSh.StartUndo( UNDO_INSERT ); + if ( rSh.HasSelection() ) + { + rSh.DelRight(); + aSet.ClearItem(); + rSh.GetAttr( aSet ); + aFont = (SvxFontItem &) aSet.Get( RES_CHRATR_FONT ); + } + + // Zeichen einfuegen + rSh.Insert( aChars ); + + // Muss der Font geaendert werden + if( aNewFont.GetName() != aFont.GetFamilyName() ) + { + SvxFontItem aNewFontItem( aFont ); + aNewFontItem.GetFamilyName() = aNewFont.GetName(); + aNewFontItem.GetFamily() = aNewFont.GetFamily(); + aNewFontItem.GetPitch() = aNewFont.GetPitch(); + aNewFontItem.GetCharSet() = aNewFont.GetCharSet(); + aSet.Put(aNewFontItem); + + rSh.SetMark(); + rSh.ExtendSelection( FALSE, aChars.Len() ); + rSh.SetAttr( aSet, SETATTR_DONTEXPAND | SETATTR_NOFORMATATTR ); + if( !rSh.IsCrsrPtAtEnd() ) + rSh.SwapPam(); + rSh.ClearMark(); + rSh.UpdateAttr(); + } + + rSh.EndAllAction(); + rSh.EndUndo( UNDO_INSERT ); + } +} + + +/*------------------------------------------------------------------------ + + $Log: not supported by cvs2svn $ + Revision 1.356 2000/09/18 16:06:06 willem.vandorp + OpenOffice header added. + + Revision 1.355 2000/09/08 08:12:52 os + Change: Set/Toggle/Has/Knows/Show/GetChildWindow + + Revision 1.354 2000/08/17 11:40:16 jp + remove the SW graphicmanager + + Revision 1.353 2000/08/07 20:40:21 jp + ExectInsert: don't insert a softhyphen behind/befor another sofhyphen + + Revision 1.352 2000/08/04 10:54:23 jp + Soft-/HardHyphens & HardBlanks changed from attribute to unicode character; remove unused methods + + Revision 1.351 2000/07/26 16:27:20 jp + Bug #77158#: remove the unused code + + Revision 1.350 2000/07/07 13:24:57 jp + must changes VCL + + Revision 1.349 2000/06/27 17:43:21 jp + Bug #76332#: internal SplitNode don't insert a new node before a table + + Revision 1.348 2000/06/26 13:17:56 os + INetURLObject::SmartRelToAbs removed + + Revision 1.347 2000/06/20 14:49:23 os + #70060# less occurences of columns in HTML + + Revision 1.346 2000/05/26 07:21:33 os + old SW Basic API Slots removed + + Revision 1.345 2000/05/10 11:53:02 os + Basic API removed + + Revision 1.344 2000/05/09 14:41:35 os + BASIC interface partially removed + +------------------------------------------------------------------------*/ + + |