456 lines
14 KiB
C++
456 lines
14 KiB
C++
/*************************************************************************
|
|
*
|
|
* $RCSfile: chardlg.cxx,v $
|
|
*
|
|
* $Revision: 1.15 $
|
|
*
|
|
* last change: $Author: os $ $Date: 2002-10-25 10:07:46 $
|
|
*
|
|
* 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
|
|
|
|
#ifndef _HINTIDS_HXX
|
|
#include <hintids.hxx>
|
|
#endif
|
|
|
|
#ifndef _MSGBOX_HXX //autogen
|
|
#include <vcl/msgbox.hxx>
|
|
#endif
|
|
#ifndef SVTOOLS_URIHELPER_HXX
|
|
#include <svtools/urihelper.hxx>
|
|
#endif
|
|
#ifndef _SFXSTRITEM_HXX
|
|
#include <svtools/stritem.hxx>
|
|
#endif
|
|
#ifndef _SVX_CHARDLG_HXX //autogen
|
|
#include <svx/chardlg.hxx>
|
|
#endif
|
|
#ifndef _SVX_BACKGRND_HXX //autogen
|
|
#include <svx/backgrnd.hxx>
|
|
#endif
|
|
#ifndef _SVX_HTMLMODE_HXX //autogen
|
|
#include <svx/htmlmode.hxx>
|
|
#endif
|
|
#ifndef _SVTOOLS_CJKOPTIONS_HXX
|
|
#include <svtools/cjkoptions.hxx>
|
|
#endif
|
|
|
|
#ifndef _CMDID_H
|
|
#include <cmdid.h>
|
|
#endif
|
|
#ifndef _HELPID_H
|
|
#include <helpid.h>
|
|
#endif
|
|
#ifndef _SWTYPES_HXX
|
|
#include <swtypes.hxx>
|
|
#endif
|
|
#ifndef _UIPARAM_HXX
|
|
#include <uiparam.hxx>
|
|
#endif
|
|
#ifndef _ERRHDL_HXX
|
|
#include <errhdl.hxx>
|
|
#endif
|
|
#ifndef _VIEW_HXX
|
|
#include <view.hxx>
|
|
#endif
|
|
#ifndef _WRTSH_HXX
|
|
#include <wrtsh.hxx>
|
|
#endif
|
|
#ifndef _DOCSH_HXX
|
|
#include <docsh.hxx>
|
|
#endif
|
|
#ifndef _UITOOL_HXX
|
|
#include <uitool.hxx>
|
|
#endif
|
|
#ifndef _FMTINFMT_HXX //autogen
|
|
#include <fmtinfmt.hxx>
|
|
#endif
|
|
#ifndef _MACASSGN_HXX
|
|
#include <macassgn.hxx>
|
|
#endif
|
|
#ifndef _CHRDLG_HXX
|
|
#include <chrdlg.hxx> // der Dialog
|
|
#endif
|
|
#ifndef _SWMODULE_HXX
|
|
#include <swmodule.hxx>
|
|
#endif
|
|
#ifndef _POOLFMT_HXX
|
|
#include <poolfmt.hxx>
|
|
#endif
|
|
|
|
#ifndef _GLOBALS_HRC
|
|
#include <globals.hrc>
|
|
#endif
|
|
#ifndef _CHRDLG_HRC
|
|
#include <chrdlg.hrc>
|
|
#endif
|
|
#ifndef _CHARDLG_HRC
|
|
#include <chardlg.hrc>
|
|
#endif
|
|
#ifndef _COM_SUN_STAR_UI_DIALOGS_TEMPLATEDESCRIPTION_HPP_
|
|
#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
|
|
#endif
|
|
#ifndef _COM_SUN_STAR_UI_DIALOGS_XFILEPICKER_HPP_
|
|
#include <com/sun/star/ui/dialogs/XFilePicker.hpp>
|
|
#endif
|
|
#ifndef _SWSTYLENAMEMAPPER_HXX
|
|
#include <SwStyleNameMapper.hxx>
|
|
#endif
|
|
#ifndef _FILEDLGHELPER_HXX
|
|
#include <sfx2/filedlghelper.hxx>
|
|
#endif
|
|
|
|
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);
|
|
}
|
|
|
|
//OS: Unter OS/2 darf die erste TabPage nie per RemoveTabPage entfernt werden
|
|
AddTabPage(TP_CHAR_STD, SvxCharNamePage::Create, 0);
|
|
AddTabPage(TP_CHAR_EXT, SvxCharEffectsPage::Create, 0);
|
|
AddTabPage(TP_CHAR_POS, SvxCharPositionPage::Create, 0);
|
|
AddTabPage(TP_CHAR_TWOLN, SvxCharTwoLinesPage::Create, 0);
|
|
AddTabPage(TP_CHAR_URL, SwCharURLPage::Create, 0);
|
|
AddTabPage(TP_BACKGROUND,SvxBackgroundTabPage::Create, 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 )
|
|
{
|
|
switch( nId )
|
|
{
|
|
case TP_CHAR_STD:
|
|
((SvxCharNamePage&)rPage).SetFontList( *( (SvxFontListItem*)
|
|
( rView.GetDocShell()->GetItem( SID_ATTR_CHAR_FONTLIST ) ) ) );
|
|
if(!bIsDrwTxtMode)
|
|
((SvxCharNamePage&)rPage).SetPreviewBackgroundToCharacter();
|
|
break;
|
|
case TP_CHAR_EXT:
|
|
if(bIsDrwTxtMode)
|
|
((SvxCharEffectsPage&)rPage).DisableControls(DISABLE_CASEMAP);
|
|
else
|
|
{
|
|
((SvxCharEffectsPage&)rPage).SetPreviewBackgroundToCharacter();
|
|
((SvxCharEffectsPage&)rPage).EnableFlash();
|
|
}
|
|
break;
|
|
case TP_CHAR_POS:
|
|
((SvxCharPositionPage&)rPage).SetPreviewBackgroundToCharacter();
|
|
break;
|
|
case TP_CHAR_TWOLN:
|
|
((SvxCharTwoLinesPage&)rPage).SetPreviewBackgroundToCharacter();
|
|
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 )),
|
|
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)),
|
|
aEventPB( this, SW_RES(PB_EVENT )),
|
|
aURLPB( this, SW_RES(PB_URL )),
|
|
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* pFrame = pView->GetViewFrame()->GetTopFrame();
|
|
pFrame->GetTargetList(*pList);
|
|
USHORT nCount = (USHORT)pList->Count();
|
|
if( nCount )
|
|
{
|
|
for ( USHORT 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)
|
|
{
|
|
String sURL = aURLED.GetText();
|
|
if(sURL.Len())
|
|
sURL = URIHelper::SmartRelToAbs(sURL);
|
|
SwFmtINetFmt aINetFmt(sURL, aTargetFrmLB.GetText());
|
|
aINetFmt.SetName(aNameED.GetText());
|
|
SwWrtShell &rSh = ::GetActiveView()->GetWrtShell();
|
|
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, GET_POOLID_CHRFMT);
|
|
aINetFmt.SetVisitedFmtId(nId);
|
|
aINetFmt.SetVisitedFmt(nId == RES_POOLCHR_INET_VISIT ? aEmptyStr : sEntry);
|
|
|
|
sEntry = aNotVisitedLB.GetSelectEntry();
|
|
nId = SwStyleNameMapper::GetPoolIdFromUIName( sEntry, 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 *, pBtn )
|
|
{
|
|
FileDialogHelper aDlgHelper( TemplateDescription::FILEOPEN_SIMPLE, 0 );
|
|
if( aDlgHelper.Execute() == ERRCODE_NONE )
|
|
{
|
|
Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker();
|
|
aURLED.SetText(URIHelper::SmartRelToAbs(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;
|
|
}
|
|
|
|
|