summaryrefslogtreecommitdiff
path: root/sw/source/ui/chrdlg/chardlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/chrdlg/chardlg.cxx')
-rw-r--r--sw/source/ui/chrdlg/chardlg.cxx405
1 files changed, 405 insertions, 0 deletions
diff --git a/sw/source/ui/chrdlg/chardlg.cxx b/sw/source/ui/chrdlg/chardlg.cxx
new file mode 100644
index 000000000000..38b1ba906fdd
--- /dev/null
+++ b/sw/source/ui/chrdlg/chardlg.cxx
@@ -0,0 +1,405 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+#ifdef SW_DLLIMPLEMENTATION
+#undef SW_DLLIMPLEMENTATION
+#endif
+
+
+#include <hintids.hxx>
+
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <svl/urihelper.hxx>
+#include <svl/stritem.hxx>
+#include <editeng/flstitem.hxx>
+#include <svx/htmlmode.hxx>
+#include <svl/cjkoptions.hxx>
+
+#ifndef _CMDID_H
+#include <cmdid.h>
+#endif
+#ifndef _HELPID_H
+#include <helpid.h>
+#endif
+#include <swtypes.hxx>
+#include <errhdl.hxx>
+#ifndef _VIEW_HXX
+#include <view.hxx>
+#endif
+#include <wrtsh.hxx>
+#ifndef _DOCSH_HXX
+#include <docsh.hxx>
+#endif
+#include <uitool.hxx>
+#include <fmtinfmt.hxx>
+#include <macassgn.hxx>
+#ifndef _CHRDLG_HXX
+#include <chrdlg.hxx> // der Dialog
+#endif
+#include <swmodule.hxx>
+#include <poolfmt.hxx>
+
+#ifndef _GLOBALS_HRC
+#include <globals.hrc>
+#endif
+#ifndef _CHRDLG_HRC
+#include <chrdlg.hrc>
+#endif
+#ifndef _CHARDLG_HRC
+#include <chardlg.hrc>
+#endif
+#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+#include <com/sun/star/ui/dialogs/XFilePicker.hpp>
+#include <SwStyleNameMapper.hxx>
+#include <sfx2/filedlghelper.hxx>
+#include <sfx2/viewfrm.hxx>
+
+#include <svx/svxdlg.hxx>
+#include <svx/svxids.hrc>
+#include <svx/flagsdef.hxx>
+#include <svx/dialogs.hrc>
+
+using namespace ::com::sun::star::ui::dialogs;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::uno;
+using namespace ::sfx2;
+
+/*--------------------------------------------------------------------
+ Beschreibung: Der Traeger des Dialoges
+ --------------------------------------------------------------------*/
+
+
+SwCharDlg::SwCharDlg(Window* pParent, SwView& rVw, const SfxItemSet& rCoreSet,
+ const String* pStr, BOOL bIsDrwTxtDlg) :
+ SfxTabDialog(pParent, SW_RES(DLG_CHAR), &rCoreSet, pStr != 0),
+ rView(rVw),
+ bIsDrwTxtMode(bIsDrwTxtDlg)
+{
+ FreeResource();
+
+ // bspFonr fuer beide Bsp-TabPages
+
+ if(pStr)
+ {
+ String aTmp( GetText() );
+ aTmp += SW_RESSTR(STR_TEXTCOLL_HEADER);
+ aTmp += *pStr;
+ aTmp += ')';
+ SetText(aTmp);
+ }
+ SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
+ DBG_ASSERT(pFact, "Dialogdiet fail!");
+ AddTabPage(TP_CHAR_STD, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_CHAR_NAME ), 0 );
+ AddTabPage(TP_CHAR_EXT, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_CHAR_EFFECTS ), 0 );
+ AddTabPage(TP_CHAR_POS, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_CHAR_POSITION ), 0 );
+ AddTabPage(TP_CHAR_TWOLN, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_CHAR_TWOLINES ), 0 );
+ AddTabPage(TP_CHAR_URL, SwCharURLPage::Create, 0);
+ AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0 );
+
+ SvtCJKOptions aCJKOptions;
+ if(bIsDrwTxtMode)
+ {
+ RemoveTabPage( TP_CHAR_URL );
+ RemoveTabPage( TP_BACKGROUND );
+ RemoveTabPage( TP_CHAR_TWOLN );
+ }
+ else if(!aCJKOptions.IsDoubleLinesEnabled())
+ RemoveTabPage( TP_CHAR_TWOLN );
+}
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+SwCharDlg::~SwCharDlg()
+{
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: FontList setzen
+ --------------------------------------------------------------------*/
+
+
+
+void SwCharDlg::PageCreated( USHORT nId, SfxTabPage &rPage )
+{
+ SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
+ switch( nId )
+ {
+ case TP_CHAR_STD:
+ {
+ SvxFontListItem aFontListItem( *( (SvxFontListItem*)
+ ( rView.GetDocShell()->GetItem( SID_ATTR_CHAR_FONTLIST ) ) ) );
+ aSet.Put (SvxFontListItem( aFontListItem.GetFontList(), SID_ATTR_CHAR_FONTLIST));
+ if(!bIsDrwTxtMode)
+ aSet.Put (SfxUInt32Item(SID_FLAG_TYPE,SVX_PREVIEW_CHARACTER));
+ rPage.PageCreated(aSet);
+ }
+ break;
+ case TP_CHAR_EXT:
+ if(bIsDrwTxtMode)
+ aSet.Put (SfxUInt16Item(SID_DISABLE_CTL,DISABLE_CASEMAP));
+
+ else
+ {
+ aSet.Put (SfxUInt32Item(SID_FLAG_TYPE,SVX_PREVIEW_CHARACTER|SVX_ENABLE_FLASH));
+ }
+ rPage.PageCreated(aSet);
+ break;
+ case TP_CHAR_POS:
+ aSet.Put (SfxUInt32Item(SID_FLAG_TYPE,SVX_PREVIEW_CHARACTER));
+ rPage.PageCreated(aSet);
+ break;
+ case TP_CHAR_TWOLN:
+ aSet.Put (SfxUInt32Item(SID_FLAG_TYPE,SVX_PREVIEW_CHARACTER));
+ rPage.PageCreated(aSet);
+ break;
+ }
+}
+
+/*-----------------14.08.96 11.28-------------------
+
+--------------------------------------------------*/
+
+SwCharURLPage::SwCharURLPage( Window* pParent,
+ const SfxItemSet& rCoreSet ) :
+ SfxTabPage( pParent, SW_RES( TP_CHAR_URL ), rCoreSet ),
+ aURLFL ( this, SW_RES(FL_URL)),
+
+ aURLFT( this, SW_RES(FT_URL )),
+ aURLED( this, SW_RES(ED_URL )),
+ aTextFT( this, SW_RES(FT_TEXT )),
+ aTextED( this, SW_RES(ED_TEXT )),
+ aNameFT( this, SW_RES(FT_NAME )),
+ aNameED( this, SW_RES(ED_NAME)),
+ aTargetFrmFT( this, SW_RES(FT_TARGET )),
+ aTargetFrmLB( this, SW_RES(LB_TARGET )),
+ aURLPB( this, SW_RES(PB_URL )),
+ aEventPB( this, SW_RES(PB_EVENT )),
+ aStyleFL( this, SW_RES(FL_STYLE )),
+ aVisitedFT( this, SW_RES(FT_VISITED )),
+ aVisitedLB( this, SW_RES(LB_VISITED )),
+ aNotVisitedFT( this, SW_RES(FT_NOT_VISITED)),
+ aNotVisitedLB( this, SW_RES(LB_NOT_VISITED)),
+ pINetItem(0),
+ bModified(FALSE)
+
+{
+ FreeResource();
+
+ const SfxPoolItem* pItem;
+ SfxObjectShell* pShell;
+ if(SFX_ITEM_SET == rCoreSet.GetItemState(SID_HTML_MODE, FALSE, &pItem) ||
+ ( 0 != ( pShell = SfxObjectShell::Current()) &&
+ 0 != (pItem = pShell->GetItem(SID_HTML_MODE))))
+ {
+ USHORT nHtmlMode = ((const SfxUInt16Item*)pItem)->GetValue();
+ if(HTMLMODE_ON & nHtmlMode)
+ {
+ aStyleFL.Hide();
+ aVisitedFT.Hide();
+ aVisitedLB.Hide();
+ aNotVisitedFT.Hide();
+ aNotVisitedLB.Hide();
+ }
+ }
+
+ aURLPB.SetClickHdl (LINK( this, SwCharURLPage, InsertFileHdl));
+ aEventPB.SetClickHdl(LINK( this, SwCharURLPage, EventHdl ));
+
+ SwView *pView = ::GetActiveView();
+ ::FillCharStyleListBox(aVisitedLB, pView->GetDocShell());
+ ::FillCharStyleListBox(aNotVisitedLB, pView->GetDocShell());
+
+ TargetList* pList = new TargetList;
+ const SfxFrame& rFrame = pView->GetViewFrame()->GetTopFrame();
+ rFrame.GetTargetList(*pList);
+ USHORT nCount = (USHORT)pList->Count();
+ if( nCount )
+ {
+ USHORT i;
+
+ for ( i = 0; i < nCount; i++ )
+ {
+ aTargetFrmLB.InsertEntry(*pList->GetObject(i));
+ }
+ for ( i = nCount; i; i-- )
+ {
+ delete pList->GetObject( i - 1 );
+ }
+ }
+ delete pList;
+
+
+}
+
+/*-----------------15.08.96 09.04-------------------
+
+--------------------------------------------------*/
+
+SwCharURLPage::~SwCharURLPage()
+{
+ delete pINetItem;
+}
+
+/*-----------------14.08.96 11.31-------------------
+
+--------------------------------------------------*/
+
+void SwCharURLPage::Reset(const SfxItemSet& rSet)
+{
+ const SfxPoolItem* pItem;
+ if(SFX_ITEM_SET == rSet.GetItemState(RES_TXTATR_INETFMT, FALSE, &pItem))
+ {
+ const SwFmtINetFmt* pINetFmt = (const SwFmtINetFmt*)pItem;
+ aURLED.SetText( INetURLObject::decode( pINetFmt->GetValue(),
+ INET_HEX_ESCAPE,
+ INetURLObject::DECODE_UNAMBIGUOUS,
+ RTL_TEXTENCODING_UTF8 ));
+ aURLED.SaveValue();
+ aNameED.SetText(pINetFmt->GetName());
+ String sEntry = pINetFmt->GetVisitedFmt();
+ if( !sEntry.Len() )
+ SwStyleNameMapper::FillUIName( RES_POOLCHR_INET_VISIT, sEntry );
+ aVisitedLB.SelectEntry(sEntry);
+ sEntry = pINetFmt->GetINetFmt();
+ if(!sEntry.Len())
+ SwStyleNameMapper::FillUIName( RES_POOLCHR_INET_NORMAL, sEntry );
+ aNotVisitedLB.SelectEntry(sEntry);
+
+ aTargetFrmLB.SetText(pINetFmt->GetTargetFrame());
+ aVisitedLB. SaveValue();
+ aNotVisitedLB.SaveValue();
+ aTargetFrmLB. SaveValue();
+ pINetItem = new SvxMacroItem(FN_INET_FIELD_MACRO);
+
+ if( pINetFmt->GetMacroTbl() )
+ pINetItem->SetMacroTable( *pINetFmt->GetMacroTbl() );
+ }
+ if(SFX_ITEM_SET == rSet.GetItemState(FN_PARAM_SELECTION, FALSE, &pItem))
+ {
+ aTextED.SetText(((const SfxStringItem*)pItem)->GetValue());
+ aTextFT.Enable( FALSE );
+ aTextED.Enable( FALSE );
+ }
+}
+
+/*-----------------14.08.96 11.32-------------------
+
+--------------------------------------------------*/
+
+BOOL SwCharURLPage::FillItemSet(SfxItemSet& rSet)
+{
+ ::rtl::OUString sURL = aURLED.GetText();
+ if(sURL.getLength())
+ {
+ sURL = URIHelper::SmartRel2Abs(INetURLObject(), sURL, Link(), false );
+ // #i100683# file URLs should be normalized in the UI
+ static const sal_Char* pFile = "file:";
+ sal_Int32 nLength = ((sal_Int32)sizeof(pFile)-1);
+ if( sURL.copy(0, nLength ).equalsAsciiL( pFile, nLength ))
+ sURL = URIHelper::simpleNormalizedMakeRelative(::rtl::OUString(), sURL);
+ }
+
+ SwFmtINetFmt aINetFmt(sURL, aTargetFrmLB.GetText());
+ aINetFmt.SetName(aNameED.GetText());
+ bModified |= aURLED.GetText() != aURLED.GetSavedValue();
+ bModified |= aNameED.IsModified();
+ bModified |= aTargetFrmLB.GetSavedValue() != aTargetFrmLB.GetText();
+
+ //zuerst die gueltigen Einstellungen setzen
+ String sEntry = aVisitedLB.GetSelectEntry();
+ USHORT nId = SwStyleNameMapper::GetPoolIdFromUIName( sEntry, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT);
+ aINetFmt.SetVisitedFmtId(nId);
+ aINetFmt.SetVisitedFmt(nId == RES_POOLCHR_INET_VISIT ? aEmptyStr : sEntry);
+
+ sEntry = aNotVisitedLB.GetSelectEntry();
+ nId = SwStyleNameMapper::GetPoolIdFromUIName( sEntry, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT);
+ aINetFmt.SetINetFmtId( nId );
+ aINetFmt.SetINetFmt(nId == RES_POOLCHR_INET_NORMAL ? aEmptyStr : sEntry);
+
+ if( pINetItem && pINetItem->GetMacroTable().Count() )
+ aINetFmt.SetMacroTbl( &pINetItem->GetMacroTable() );
+
+ if(aVisitedLB.GetSavedValue() != aVisitedLB.GetSelectEntryPos())
+ bModified = TRUE;
+
+ if(aNotVisitedLB.GetSavedValue() != aNotVisitedLB.GetSelectEntryPos())
+ bModified = TRUE;
+
+ if(aTextED.IsModified())
+ {
+ bModified = TRUE;
+ rSet.Put(SfxStringItem(FN_PARAM_SELECTION, aTextED.GetText()));
+ }
+ if(bModified)
+ rSet.Put(aINetFmt);
+ return bModified;
+}
+
+
+/*-----------------14.08.96 11.30-------------------
+
+--------------------------------------------------*/
+
+SfxTabPage* SwCharURLPage::Create( Window* pParent,
+ const SfxItemSet& rAttrSet )
+{
+ return ( new SwCharURLPage( pParent, rAttrSet ) );
+}
+
+/*-----------------14.08.96 15.00-------------------
+
+--------------------------------------------------*/
+
+IMPL_LINK( SwCharURLPage, InsertFileHdl, PushButton *, EMPTYARG )
+{
+ FileDialogHelper aDlgHelper( TemplateDescription::FILEOPEN_SIMPLE, 0 );
+ if( aDlgHelper.Execute() == ERRCODE_NONE )
+ {
+ Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker();
+ aURLED.SetText(xFP->getFiles().getConstArray()[0]);
+ }
+ return 0;
+}
+/*-----------------14.08.96 15.00-------------------
+
+--------------------------------------------------*/
+
+IMPL_LINK( SwCharURLPage, EventHdl, PushButton *, EMPTYARG )
+{
+ bModified |= SwMacroAssignDlg::INetFmtDlg( this,
+ ::GetActiveView()->GetWrtShell(), pINetItem );
+ return 0;
+}
+
+