diff options
Diffstat (limited to 'sw/source/ui/index/cnttab.cxx')
-rw-r--r-- | sw/source/ui/index/cnttab.cxx | 4553 |
1 files changed, 4553 insertions, 0 deletions
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx new file mode 100644 index 000000000000..905caaf6f0ef --- /dev/null +++ b/sw/source/ui/index/cnttab.cxx @@ -0,0 +1,4553 @@ +/************************************************************************* + * + * 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 <rsc/rscsfx.hxx> +#include <vcl/msgbox.hxx> +#include <vcl/help.hxx> +#include <svl/stritem.hxx> +#include <svl/urihelper.hxx> +#include <unotools/pathoptions.hxx> +#include <sfx2/request.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/docfile.hxx> +#include <svx/dialogs.hrc> +#include <svx/svxdlg.hxx> +#include <svx/flagsdef.hxx> +#include <svx/simptabl.hxx> +#include <com/sun/star/ui/dialogs/TemplateDescription.hpp> +#include <com/sun/star/ui/dialogs/XFilePicker.hpp> +#include <com/sun/star/ui/dialogs/XFilterManager.hpp> +#include <svtools/indexentryres.hxx> +#include <editeng/unolingu.hxx> +#include <column.hxx> +#include <fmtfsize.hxx> +#include <shellio.hxx> +#include <authfld.hxx> +#include <swtypes.hxx> +#include <wrtsh.hxx> +#ifndef _VIEW_HXX +#include <view.hxx> +#endif +#ifndef _BASESH_HXX +#include <basesh.hxx> +#endif +#include <outline.hxx> +#include <cnttab.hxx> +#include <swuicnttab.hxx> +#include <formedt.hxx> +#include <poolfmt.hxx> +#ifndef _POOLFMT_HRC +#include <poolfmt.hrc> +#endif +#include <uitool.hxx> +#include <fmtcol.hxx> +#include <fldbas.hxx> +#include <expfld.hxx> +#include <unotools.hxx> +#include <unotxdoc.hxx> +#include <docsh.hxx> +#include <swmodule.hxx> +#include <modcfg.hxx> + +#ifndef _CMDID_H +#include <cmdid.h> +#endif +#ifndef _HELPID_H +#include <helpid.h> +#endif +#ifndef _UTLUI_HRC +#include <utlui.hrc> +#endif +#ifndef _INDEX_HRC +#include <index.hrc> +#endif +#ifndef _CNTTAB_HRC +#include <cnttab.hrc> +#endif +#ifndef _GLOBALS_HRC +#include <globals.hrc> +#endif +#include <SwStyleNameMapper.hxx> +#include <sfx2/filedlghelper.hxx> +#ifndef _TOXHLP_HXX +#include <toxwrap.hxx> +#endif +#include <chpfld.hxx> + +#ifndef _UTLUI_HRC +#include "utlui.hrc" +#endif + +#include <sfx2/app.hxx> + +#include <unomid.h> +using namespace ::com::sun::star; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::uno; +using namespace com::sun::star::ui::dialogs; +using ::rtl::OUString; +using namespace ::sfx2; +#include <svtools/editbrowsebox.hxx> + +static const sal_Unicode aDeliStart = '['; //fuer die form +static const sal_Unicode aDeliEnd = ']'; //fuer die form + +#define POS_GRF 0 +#define POS_OLE 1 +#define POS_TABLE 2 +#define POS_FRAME 3 + +#define IDX_FILE_EXTENSION String::CreateFromAscii( \ + RTL_CONSTASCII_STRINGPARAM( "*.sdi" )) + + +/* -----------------14.06.99 13:10------------------- + + --------------------------------------------------*/ +String lcl_CreateAutoMarkFileDlg( const String& rURL, + const String& rFileString, sal_Bool bOpen ) +{ + String sRet; + + FileDialogHelper aDlgHelper( bOpen ? + TemplateDescription::FILEOPEN_SIMPLE : TemplateDescription::FILESAVE_AUTOEXTENSION, 0 ); + uno::Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker(); + + uno::Reference<XFilterManager> xFltMgr(xFP, UNO_QUERY); + String sCurFltr( IDX_FILE_EXTENSION ); + xFltMgr->appendFilter( rFileString, sCurFltr ); + xFltMgr->setCurrentFilter( rFileString ) ; + + String& rLastSaveDir = (String&)SFX_APP()->GetLastSaveDirectory(); + String sSaveDir = rLastSaveDir; + + if( rURL.Len() ) + xFP->setDisplayDirectory( rURL ); + else + { + SvtPathOptions aPathOpt; + xFP->setDisplayDirectory( aPathOpt.GetUserConfigPath() ); + } + + if( aDlgHelper.Execute() == ERRCODE_NONE ) + { + sRet = xFP->getFiles().getConstArray()[0]; + } + rLastSaveDir = sSaveDir; + return sRet; +} +/* -----------------------------19.01.00 11:09-------------------------------- + + ---------------------------------------------------------------------------*/ +struct AutoMarkEntry +{ + String sSearch; + String sAlternative; + String sPrimKey; + String sSecKey; + String sComment; + sal_Bool bCase; + sal_Bool bWord; + + AutoMarkEntry() : + bCase(sal_False), + bWord(sal_False){} +}; +typedef AutoMarkEntry* AutoMarkEntryPtr; +SV_DECL_PTRARR_DEL(AutoMarkEntryArr, AutoMarkEntryPtr, 0, 4) +SV_IMPL_PTRARR(AutoMarkEntryArr, AutoMarkEntryPtr); + +typedef ::svt::EditBrowseBox SwEntryBrowseBox_Base; +class SwEntryBrowseBox : public SwEntryBrowseBox_Base +{ + Edit aCellEdit; + ::svt::CheckBoxControl aCellCheckBox; + + String sSearch; + String sAlternative; + String sPrimKey; + String sSecKey; + String sComment; + String sCaseSensitive; + String sWordOnly; + String sYes; + String sNo; + + AutoMarkEntryArr aEntryArr; + + ::svt::CellControllerRef xController; + ::svt::CellControllerRef xCheckController; + + long nCurrentRow; + sal_Bool bModified; + + + void SetModified() {bModified = sal_True;} + +protected: + virtual sal_Bool SeekRow( long nRow ); +// virtual void PaintField( OutputDevice& rDev, const awt::Rectangle& rRect, +// sal_uInt16 nColumnId ) const; + virtual void PaintCell(OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColId) const; + virtual void InitController(::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol); + virtual ::svt::CellController* GetController(long nRow, sal_uInt16 nCol); + virtual sal_Bool SaveModified(); + +public: + SwEntryBrowseBox(Window* pParent, const ResId& rId, + BrowserMode nMode = 0 ); + void ReadEntries(SvStream& rInStr); + void WriteEntries(SvStream& rOutStr); + + sal_Bool IsModified()const; + + virtual String GetCellText( long nRow, sal_uInt16 nColumn ) const; +}; + +class SwAutoMarkDlg_Impl : public ModalDialog +{ + OKButton aOKPB; + CancelButton aCancelPB; + HelpButton aHelpPB; + + SwEntryBrowseBox aEntriesBB; + FixedLine aEntriesFL; + + String sAutoMarkURL; + const String sAutoMarkType; + + sal_Bool bCreateMode; + + DECL_LINK(OkHdl, OKButton*); +public: + SwAutoMarkDlg_Impl(Window* pParent, const String& rAutoMarkURL, + const String& rAutoMarkType, sal_Bool bCreate); + ~SwAutoMarkDlg_Impl(); + +}; +/* -----------------04.11.99 11:02------------------- + + --------------------------------------------------*/ +sal_uInt16 CurTOXType::GetFlatIndex() const +{ + sal_uInt16 nRet = static_cast< sal_uInt16 >(eType); + if(eType == TOX_USER && nIndex) + { + nRet = static_cast< sal_uInt16 >(TOX_AUTHORITIES + nIndex); + } + return nRet; +} +/************************************************************************* + +*************************************************************************/ +#define EDIT_MINWIDTH 15 + +/* -----------------14.06.99 12:12------------------- + + --------------------------------------------------*/ +SwMultiTOXTabDialog::SwMultiTOXTabDialog(Window* pParent, const SfxItemSet& rSet, + SwWrtShell &rShell, + SwTOXBase* pCurTOX, + sal_uInt16 nToxType, sal_Bool bGlobal) : + SfxTabDialog( pParent, SW_RES(DLG_MULTI_TOX), &rSet), + aExampleContainerWIN(this, SW_RES(WIN_EXAMPLE)), + aExampleWIN( &aExampleContainerWIN, 0 ), + aShowExampleCB( this, SW_RES(CB_SHOWEXAMPLE)), + pMgr( new SwTOXMgr( &rShell ) ), + rSh(rShell), + pExampleFrame(0), + pParamTOXBase(pCurTOX), + sUserDefinedIndex(SW_RES(ST_USERDEFINEDINDEX)), + nInitialTOXType(nToxType), + + bEditTOX(sal_False), + bExampleCreated(sal_False), + bGlobalFlag(bGlobal) +{ + FreeResource(); + + aExampleWIN.SetPosSizePixel(aExampleContainerWIN.GetPosPixel(), + aExampleContainerWIN.GetSizePixel()); + + eCurrentTOXType.eType = TOX_CONTENT; + eCurrentTOXType.nIndex = 0; + + sal_uInt16 nUserTypeCount = rSh.GetTOXTypeCount(TOX_USER); + nTypeCount = nUserTypeCount + 6; + pFormArr = new SwForm*[nTypeCount]; + pDescArr = new SwTOXDescription*[nTypeCount]; + pxIndexSectionsArr = new SwIndexSections_Impl*[nTypeCount]; + //the standard user index is on position TOX_USER + //all user user indexes follow after position TOX_AUTHORITIES + if(pCurTOX) + { + bEditTOX = sal_True; + } + for(int i = nTypeCount - 1; i > -1; i--) + { + pFormArr[i] = 0; + pDescArr[i] = 0; + pxIndexSectionsArr[i] = new SwIndexSections_Impl; + if(pCurTOX) + { + eCurrentTOXType.eType = pCurTOX->GetType(); + sal_uInt16 nArrayIndex = static_cast< sal_uInt16 >(eCurrentTOXType.eType); + if(eCurrentTOXType.eType == TOX_USER) + { + //which user type is it? + for(sal_uInt16 nUser = 0; nUser < nUserTypeCount; nUser++) + { + const SwTOXType* pTemp = rSh.GetTOXType(TOX_USER, nUser); + if(pCurTOX->GetTOXType() == pTemp) + { + eCurrentTOXType.nIndex = nUser; + nArrayIndex = static_cast< sal_uInt16 >(nUser > 0 ? TOX_AUTHORITIES + nUser : TOX_USER); + break; + } + } + } + pFormArr[nArrayIndex] = new SwForm(pCurTOX->GetTOXForm()); + pDescArr[nArrayIndex] = CreateTOXDescFromTOXBase(pCurTOX); + if(TOX_AUTHORITIES == eCurrentTOXType.eType) + { + const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) + rSh.GetFldType(RES_AUTHORITY, aEmptyStr); + if(pFType) + { + String sBrackets; + if(pFType->GetPrefix()) + sBrackets += pFType->GetPrefix(); + if(pFType->GetSuffix()) + sBrackets += pFType->GetSuffix(); + pDescArr[nArrayIndex]->SetAuthBrackets(sBrackets); + pDescArr[nArrayIndex]->SetAuthSequence(pFType->IsSequence()); + } + else + { + pDescArr[nArrayIndex]->SetAuthBrackets(C2S("[]")); + } + } + } + } + SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "Dialogdiet fail!"); + AddTabPage(TP_TOX_SELECT, SwTOXSelectTabPage::Create, 0); + AddTabPage(TP_TOX_STYLES, SwTOXStylesTabPage::Create, 0); + AddTabPage(TP_COLUMN, SwColumnPage::Create, 0); + AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0 ); + AddTabPage(TP_TOX_ENTRY, SwTOXEntryTabPage::Create, 0); + if(!pCurTOX) + SetCurPageId(TP_TOX_SELECT); + + aShowExampleCB.SetClickHdl(LINK(this, SwMultiTOXTabDialog, ShowPreviewHdl)); + + aShowExampleCB.Check( SW_MOD()->GetModuleConfig()->IsShowIndexPreview()); + + aExampleContainerWIN.SetAccessibleName(aShowExampleCB.GetText()); + SetViewAlign( WINDOWALIGN_LEFT ); + // SetViewWindow does not work if the dialog is visible! + + if(!aShowExampleCB.IsChecked()) + SetViewWindow( &aExampleContainerWIN ); + + Point aOldPos = GetPosPixel(); + ShowPreviewHdl(0); + Point aNewPos = GetPosPixel(); + //72040: initial position may be left of the view - that has to be corrected + if(aNewPos.X() < 0) + SetPosPixel(aOldPos); +} +/*-- 14.06.99 13:11:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwMultiTOXTabDialog::~SwMultiTOXTabDialog() +{ + SW_MOD()->GetModuleConfig()->SetShowIndexPreview(aShowExampleCB.IsChecked()); + + for(sal_uInt16 i = 0; i < nTypeCount; i++) + { + delete pFormArr[i]; + delete pDescArr[i]; + delete pxIndexSectionsArr[i]; + } + delete[] pxIndexSectionsArr; + + delete[] pFormArr; + delete[] pDescArr; + delete pMgr; + delete pExampleFrame; +} +/*-- 14.06.99 13:11:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwMultiTOXTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) +{ + if( TP_BACKGROUND == nId ) + { + SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); + aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, SVX_SHOW_SELECTOR)); + rPage.PageCreated(aSet); + } + else if(TP_COLUMN == nId ) + { + const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)GetInputSetImpl()->Get(RES_FRM_SIZE); + + ((SwColumnPage&)rPage).SetPageWidth(rSize.GetWidth()); + } + else if(TP_TOX_ENTRY == nId) + ((SwTOXEntryTabPage&)rPage).SetWrtShell(rSh); + if(TP_TOX_SELECT == nId) + { + ((SwTOXSelectTabPage&)rPage).SetWrtShell(rSh); + if(USHRT_MAX != nInitialTOXType) + ((SwTOXSelectTabPage&)rPage).SelectType((TOXTypes)nInitialTOXType); + } +} +/*-- 14.06.99 13:11:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +short SwMultiTOXTabDialog::Ok() +{ + short nRet = SfxTabDialog::Ok(); + SwTOXDescription& rDesc = GetTOXDescription(eCurrentTOXType); + SwTOXBase aNewDef(*rSh.GetDefaultTOXBase( eCurrentTOXType.eType, sal_True )); + + sal_uInt16 nIndex = static_cast< sal_uInt16 >(eCurrentTOXType.eType); + if(eCurrentTOXType.eType == TOX_USER && eCurrentTOXType.nIndex) + { + nIndex = static_cast< sal_uInt16 >(TOX_AUTHORITIES + eCurrentTOXType.nIndex); + } + + if(pFormArr[nIndex]) + { + rDesc.SetForm(*pFormArr[nIndex]); + aNewDef.SetTOXForm(*pFormArr[nIndex]); + } + rDesc.ApplyTo(aNewDef); + if(!bGlobalFlag) + pMgr->UpdateOrInsertTOX( + rDesc, 0, GetOutputItemSet()); + else if(bEditTOX) + pMgr->UpdateOrInsertTOX( + rDesc, &pParamTOXBase, GetOutputItemSet()); + + if(!eCurrentTOXType.nIndex) + rSh.SetDefaultTOXBase(aNewDef); + + return nRet; +} +/* -----------------16.06.99 11:59------------------- + + --------------------------------------------------*/ +SwForm* SwMultiTOXTabDialog::GetForm(CurTOXType eType) +{ + sal_uInt16 nIndex = eType.GetFlatIndex(); + if(!pFormArr[nIndex]) + pFormArr[nIndex] = new SwForm(eType.eType); + return pFormArr[nIndex]; +} +/* -----------------09.09.99 11:29------------------- + + --------------------------------------------------*/ +SwTOXDescription& SwMultiTOXTabDialog::GetTOXDescription(CurTOXType eType) +{ + sal_uInt16 nIndex = eType.GetFlatIndex(); + if(!pDescArr[nIndex]) + { + const SwTOXBase* pDef = rSh.GetDefaultTOXBase( eType.eType ); + if(pDef) + pDescArr[nIndex] = CreateTOXDescFromTOXBase(pDef); + else + { + pDescArr[nIndex] = new SwTOXDescription(eType.eType); + if(eType.eType == TOX_USER) + pDescArr[nIndex]->SetTitle(sUserDefinedIndex); + else + pDescArr[nIndex]->SetTitle( + rSh.GetTOXType(eType.eType, 0)->GetTypeName()); + } + if(TOX_AUTHORITIES == eType.eType) + { + const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) + rSh.GetFldType(RES_AUTHORITY, aEmptyStr); + if(pFType) + { + String sBrackets(pFType->GetPrefix()); + sBrackets += pFType->GetSuffix(); + pDescArr[nIndex]->SetAuthBrackets(sBrackets); + pDescArr[nIndex]->SetAuthSequence(pFType->IsSequence()); + } + else + { + pDescArr[nIndex]->SetAuthBrackets(C2S("[]")); + } + } + else if(TOX_INDEX == eType.eType) + pDescArr[nIndex]->SetMainEntryCharStyle(SW_RESSTR(STR_POOLCHR_IDX_MAIN_ENTRY)); + + } + return *pDescArr[nIndex]; +} +/* -----------------09.09.99 11:36------------------- + + --------------------------------------------------*/ +SwTOXDescription* SwMultiTOXTabDialog::CreateTOXDescFromTOXBase( + const SwTOXBase*pCurTOX) +{ + SwTOXDescription * pDesc = new SwTOXDescription(pCurTOX->GetType()); + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + pDesc->SetStyleNames(pCurTOX->GetStyleNames(i), i); + pDesc->SetAutoMarkURL(rSh.GetTOIAutoMarkURL()); + pDesc->SetTitle(pCurTOX->GetTitle()); + + + pDesc->SetContentOptions(pCurTOX->GetCreateType()); + if(pDesc->GetTOXType() == TOX_INDEX) + pDesc->SetIndexOptions(pCurTOX->GetOptions()); + pDesc->SetMainEntryCharStyle(pCurTOX->GetMainEntryCharStyle()); + if(pDesc->GetTOXType() != TOX_INDEX) + pDesc->SetLevel((sal_uInt8)pCurTOX->GetLevel()); + pDesc->SetCreateFromObjectNames(pCurTOX->IsFromObjectNames()); + pDesc->SetSequenceName(pCurTOX->GetSequenceName()); + pDesc->SetCaptionDisplay(pCurTOX->GetCaptionDisplay()); + pDesc->SetFromChapter(pCurTOX->IsFromChapter()); + pDesc->SetReadonly(pCurTOX->IsProtected()); + pDesc->SetOLEOptions(pCurTOX->GetOLEOptions()); + pDesc->SetLevelFromChapter(pCurTOX->IsLevelFromChapter()); + pDesc->SetLanguage(pCurTOX->GetLanguage()); + pDesc->SetSortAlgorithm(pCurTOX->GetSortAlgorithm()); + return pDesc; +} + +/* -----------------------------29.12.99 09:53-------------------------------- + + ---------------------------------------------------------------------------*/ + +IMPL_LINK( SwMultiTOXTabDialog, ShowPreviewHdl, CheckBox *, pBox ) +{ + if(aShowExampleCB.IsChecked()) + { + if(!pExampleFrame && !bExampleCreated) + { + bExampleCreated = sal_True; + String sTemplate( String::CreateFromAscii( + RTL_CONSTASCII_STRINGPARAM("internal")) ); + sTemplate += INET_PATH_TOKEN; + sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM("idxexample") ); + String sTemplateWithoutExt( sTemplate ); +#ifndef MAC_WITHOUT_EXT + sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".odt") ); +#endif + + SvtPathOptions aOpt; + // 6.0 (extension .sxw) + sal_Bool bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE ); + +#ifndef MAC_WITHOUT_EXT + if( !bExist ) + { + // 6.0 (extension .sxw) + sTemplate = sTemplateWithoutExt; + sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".sxw") ); + bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE ); + } + if( !bExist ) + { + // 5.0 (extension .vor) + sTemplate = sTemplateWithoutExt; + sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".sdw") ); + bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE ); + } +#endif + + if(!bExist) + { + String sInfo(SW_RES(STR_FILE_NOT_FOUND)); + sInfo.SearchAndReplaceAscii( "%1", sTemplate ); + sInfo.SearchAndReplaceAscii( "%2", aOpt.GetTemplatePath() ); + InfoBox aInfo(GetParent(), sInfo); + aInfo.Execute(); + } + else + { + Link aLink(LINK(this, SwMultiTOXTabDialog, CreateExample_Hdl)); + pExampleFrame = new SwOneExampleFrame( + aExampleWIN, EX_SHOW_ONLINE_LAYOUT, &aLink, &sTemplate); + + if(!pExampleFrame->IsServiceAvailable()) + { + pExampleFrame->CreateErrorMessage(0); + } + } + aShowExampleCB.Show(pExampleFrame && pExampleFrame->IsServiceAvailable()); + } + } + sal_Bool bSetViewWindow = aShowExampleCB.IsChecked() + && pExampleFrame && pExampleFrame->IsServiceAvailable(); + + aExampleContainerWIN.Show( bSetViewWindow ); + SetViewWindow( bSetViewWindow ? &aExampleContainerWIN : 0 ); + + Window *pTopmostParent = this; + while(pTopmostParent->GetParent()) + pTopmostParent = pTopmostParent->GetParent(); + ::Rectangle aRect(GetClientWindowExtentsRelative(pTopmostParent)); + ::Point aPos = aRect.TopLeft(); + Size aSize = GetSizePixel(); + if(pBox) + AdjustLayout(); + long nDiffWidth = GetSizePixel().Width() - aSize.Width(); + aPos.X() -= nDiffWidth; + SetPosPixel(aPos); + + return 0; +} + + +/* -----------------05.07.99 09:49------------------- + + --------------------------------------------------*/ +sal_Bool SwMultiTOXTabDialog::IsNoNum(SwWrtShell& rSh, const String& rName) +{ + SwTxtFmtColl* pColl = rSh.GetParaStyle(rName); + //if(pColl && pColl->GetOutlineLevel() == NO_NUMBERING) //#outline level,zhaojianwei + if(pColl && ! pColl->IsAssignedToListLevelOfOutlineStyle()) //<-end,zhaojianwei + return sal_True; + + sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL); + if(nId != USHRT_MAX && + //rSh.GetTxtCollFromPool(nId)->GetOutlineLevel() == NO_NUMBERING) //#outline level,zhaojianwei + ! rSh.GetTxtCollFromPool(nId)->IsAssignedToListLevelOfOutlineStyle()) //<-end,zhaojianwei + return sal_True; + + return sal_False; +} +/* -----------------14.07.99 16:01------------------- + + --------------------------------------------------*/ +class SwIndexTreeLB : public SvTreeListBox +{ + const HeaderBar* pHeaderBar; +public: + SwIndexTreeLB(Window* pWin, const ResId& rResId) : + SvTreeListBox(pWin, rResId), pHeaderBar(0){} + + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual long GetTabPos( SvLBoxEntry*, SvLBoxTab* ); + void SetHeaderBar(const HeaderBar* pHB) {pHeaderBar = pHB;} +}; +/* -----------------14.07.99 16:03------------------- + + --------------------------------------------------*/ +long SwIndexTreeLB::GetTabPos( SvLBoxEntry* pEntry, SvLBoxTab* pTab) +{ + long nData = (long)pEntry->GetUserData(); + if(nData != USHRT_MAX) + { + long nPos = pHeaderBar->GetItemRect( static_cast< sal_uInt16 >(101 + nData) ).TopLeft().X(); + nData = nPos; + } + else + nData = 0; + nData += pTab->GetPos(); + return nData; +} +/* -----------------25.08.99 11:14------------------- + + --------------------------------------------------*/ +void SwIndexTreeLB::KeyInput( const KeyEvent& rKEvt ) +{ + SvLBoxEntry* pEntry = FirstSelected(); + KeyCode aCode = rKEvt.GetKeyCode(); + sal_Bool bChanged = sal_False; + if(pEntry) + { + long nLevel = (long)pEntry->GetUserData(); + if(aCode.GetCode() == KEY_ADD ) + { + if(nLevel < MAXLEVEL - 1) + nLevel++; + else if(nLevel == USHRT_MAX) + nLevel = 0; + bChanged = sal_True; + } + else if(aCode.GetCode() == KEY_SUBTRACT) + { + if(!nLevel) + nLevel = USHRT_MAX; + else if(nLevel != USHRT_MAX) + nLevel--; + bChanged = sal_True; + } + if(bChanged) + { + pEntry->SetUserData((void*)nLevel); + Invalidate(); + } + } + if(!bChanged) + SvTreeListBox::KeyInput(rKEvt); +} + +/* -----------------16.07.99 10:01------------------- + + --------------------------------------------------*/ +class SwHeaderTree : public Control +{ + HeaderBar aStylesHB; + SwIndexTreeLB aStylesTLB; + +public: + SwHeaderTree(Window* pParent, const ResId rResId); + + HeaderBar& GetHeaderBar() {return aStylesHB;} + SwIndexTreeLB& GetTreeListBox() { return aStylesTLB;} + + virtual void GetFocus(); +}; +/* -----------------16.07.99 10:11------------------- + + --------------------------------------------------*/ +SwHeaderTree::SwHeaderTree(Window* pParent, const ResId rResId) : + Control(pParent, rResId), + aStylesHB( this, ResId(HB_STYLES, *rResId.GetResMgr())), + aStylesTLB( this, ResId(TLB_STYLES, *rResId.GetResMgr())) +{ + FreeResource(); + aStylesHB.SetStyle(aStylesHB.GetStyle()|WB_BUTTONSTYLE|WB_TABSTOP|WB_BORDER); + Size aHBSize(aStylesHB.GetSizePixel()); + aHBSize.Height() = aStylesHB.CalcWindowSizePixel().Height(); + aStylesHB.SetSizePixel(aHBSize); + aStylesTLB.SetPosPixel(Point(0, aHBSize.Height())); + Size aTLBSize(aStylesHB.GetSizePixel()); + aTLBSize.Height() = GetOutputSizePixel().Height() - aHBSize.Height(); + aStylesTLB.SetSizePixel(aTLBSize); + aStylesTLB.SetHeaderBar(&aStylesHB); +} +/* -----------------25.08.99 10:38------------------- + + --------------------------------------------------*/ +void SwHeaderTree::GetFocus() +{ + Control::GetFocus(); + aStylesTLB.GrabFocus(); +} +/* -----------------13.07.99 15:29------------------- + + --------------------------------------------------*/ +class SwAddStylesDlg_Impl : public SfxModalDialog +{ + OKButton aOk; + CancelButton aCancel; + HelpButton aHelp; + + FixedLine aStylesFL; + SwHeaderTree aHeaderTree; + ImageButton aLeftPB; + ImageButton aRightPB; + + String sHBFirst; + String* pStyleArr; + + DECL_LINK(OkHdl, OKButton*); + DECL_LINK(LeftRightHdl, PushButton*); + DECL_LINK(HeaderDragHdl, HeaderBar*); + +public: + SwAddStylesDlg_Impl(Window* pParent, SwWrtShell& rWrtSh, String rStringArr[]); + ~SwAddStylesDlg_Impl(); +}; +/* -----------------13.07.99 15:39------------------- + + --------------------------------------------------*/ +SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(Window* pParent, + SwWrtShell& rWrtSh, String rStringArr[]) : + SfxModalDialog(pParent, SW_RES(DLG_ADD_IDX_STYLES)), + aOk( this, SW_RES(PB_OK )), + aCancel( this, SW_RES(PB_CANCEL )), + aHelp( this, SW_RES(PB_HELP )), + + aStylesFL( this, SW_RES(FL_STYLES )), + aHeaderTree(this, SW_RES(TR_HEADER )), + aLeftPB( this, SW_RES(PB_LEFT )), + aRightPB( this, SW_RES(PB_RIGHT )), + + sHBFirst( SW_RES(ST_HB_FIRST)), + pStyleArr(rStringArr) +{ + FreeResource(); + + aHeaderTree.SetAccessibleRelationMemberOf(&aStylesFL); + aLeftPB.SetAccessibleRelationMemberOf(&aStylesFL); + aRightPB.SetAccessibleRelationMemberOf(&aStylesFL); + + aLeftPB.SetModeImage( Image( SW_RES( IMG_ALL_LEFT_HC ) ), BMP_COLOR_HIGHCONTRAST ); + aRightPB.SetModeImage( Image( SW_RES( IMG_ALL_RIGHT_HC ) ), BMP_COLOR_HIGHCONTRAST ); + + aOk.SetClickHdl(LINK(this, SwAddStylesDlg_Impl, OkHdl)); + aLeftPB.SetClickHdl(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl)); + aRightPB.SetClickHdl(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl)); + + HeaderBar& rHB = aHeaderTree.GetHeaderBar(); + rHB.SetEndDragHdl(LINK(this, SwAddStylesDlg_Impl, HeaderDragHdl)); + + long nWidth = rHB.GetSizePixel().Width(); + sal_uInt16 i; + + nWidth /= 14; + nWidth--; + rHB.InsertItem( 100, sHBFirst, 4 * nWidth ); + for( i = 1; i <= MAXLEVEL; i++) + rHB.InsertItem( 100 + i, String::CreateFromInt32(i), nWidth ); + rHB.Show(); + + SwIndexTreeLB& rTLB = aHeaderTree.GetTreeListBox(); + rTLB.SetStyle(rTLB.GetStyle()|WB_CLIPCHILDREN|WB_SORT); + //aStylesTLB.SetSelectHdl(LINK(this, SwAddStylesDlg_Impl, SelectHdl)); + rTLB.GetModel()->SetSortMode(SortAscending); + for(i = 0; i < MAXLEVEL; ++i) + { + String sStyles(rStringArr[i]); + for(sal_uInt16 nToken = 0; nToken < sStyles.GetTokenCount(TOX_STYLE_DELIMITER); nToken++) + { + String sTmp(sStyles.GetToken(nToken, TOX_STYLE_DELIMITER)); + SvLBoxEntry* pEntry = rTLB.InsertEntry(sTmp); + pEntry->SetUserData(reinterpret_cast<void*>(i)); + } + } + // now the other styles + // + const SwTxtFmtColl *pColl = 0; + const sal_uInt16 nSz = rWrtSh.GetTxtFmtCollCount(); + + for ( sal_uInt16 j = 0;j < nSz; ++j ) + { + pColl = &rWrtSh.GetTxtFmtColl(j); + if(pColl->IsDefault()) + continue; + + const String& rName = pColl->GetName(); + + if(rName.Len() > 0) + { + SvLBoxEntry* pEntry = rTLB.First(); + sal_Bool bFound = sal_False; + while(pEntry && !bFound) + { + if(rTLB.GetEntryText(pEntry) == rName) + bFound = sal_True; + pEntry = rTLB.Next(pEntry); + } + if(!bFound) + { + rTLB.InsertEntry(rName)->SetUserData((void*)USHRT_MAX); + } + } + } + rTLB.GetModel()->Resort(); +} + +/* -----------------13.07.99 15:39------------------- + + --------------------------------------------------*/ +SwAddStylesDlg_Impl::~SwAddStylesDlg_Impl() +{ +} +/* -----------------13.07.99 15:39------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwAddStylesDlg_Impl, OkHdl, OKButton*, EMPTYARG) +{ + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + pStyleArr[i].Erase(); + + SwIndexTreeLB& rTLB = aHeaderTree.GetTreeListBox(); + SvLBoxEntry* pEntry = rTLB.First(); + while(pEntry) + { + long nLevel = (long)pEntry->GetUserData(); + if(nLevel != USHRT_MAX) + { + String sName(rTLB.GetEntryText(pEntry)); + if(pStyleArr[nLevel].Len()) + pStyleArr[nLevel] += TOX_STYLE_DELIMITER; + pStyleArr[nLevel] += sName; + } + pEntry = rTLB.Next(pEntry); + } + + //TODO write back style names + EndDialog(RET_OK); + return 0; +} +/* -----------------16.07.99 09:27------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwAddStylesDlg_Impl, HeaderDragHdl, HeaderBar*, EMPTYARG) +{ + aHeaderTree.GetTreeListBox().Invalidate(); + return 0; +} +/* -----------------13.07.99 15:39------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwAddStylesDlg_Impl, LeftRightHdl, PushButton*, pBtn) +{ + sal_Bool bLeft = pBtn == &aLeftPB; + SvLBoxEntry* pEntry = aHeaderTree.GetTreeListBox().FirstSelected(); + if(pEntry) + { + long nLevel = (long)pEntry->GetUserData(); + if(bLeft) + { + if(!nLevel) + nLevel = USHRT_MAX; + else if(nLevel != USHRT_MAX) + nLevel--; + } + else + { + if(nLevel < MAXLEVEL - 1) + nLevel++; + else if(nLevel == USHRT_MAX) + nLevel = 0; + } + pEntry->SetUserData((void*)nLevel); + aHeaderTree.GetTreeListBox().Invalidate(); + } + return 0; +} + +/*-- 14.06.99 13:11:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwTOXSelectTabPage::SwTOXSelectTabPage(Window* pParent, const SfxItemSet& rAttrSet) : + SfxTabPage(pParent, SW_RES(TP_TOX_SELECT), rAttrSet), + + aTypeTitleFL( this, SW_RES(FL_TYPETITLE )), + aTitleFT( this, SW_RES(FT_TITLE )), + aTitleED( this, SW_RES(ED_TITLE )), + aTypeFT( this, SW_RES(FT_TYPE )), + aTypeLB( this, SW_RES(LB_TYPE )), + aReadOnlyCB( this, SW_RES(CB_READONLY )), + + aAreaFL( this, SW_RES(FL_AREA )), + aAreaFT( this, SW_RES(FT_AREA )), + aAreaLB( this, SW_RES(LB_AREA )), + aLevelFT( this, SW_RES(FT_LEVEL )), + aLevelNF( this, SW_RES(NF_LEVEL )), + + aCreateFromFL( this, SW_RES(FL_CREATEFROM )), + aFromHeadingsCB( this, SW_RES(CB_FROMHEADINGS )), +// aChapterDlgPB( this, SW_RES(PB_CHAPTERDLG )),//#outline level,removed by zhaojianwei + aAddStylesCB( this, SW_RES(CB_ADDSTYLES )), + aAddStylesPB( this, SW_RES(PB_ADDSTYLES )), + + aFromTablesCB( this, SW_RES(CB_FROMTABLES )), + aFromFramesCB( this, SW_RES(CB_FROMFRAMES )), + aFromGraphicsCB( this, SW_RES(CB_FROMGRAPHICS )), + aFromOLECB( this, SW_RES(CB_FROMOLE )), + aLevelFromChapterCB(this, SW_RES(CB_LEVELFROMCHAPTER )), + + aFromCaptionsRB( this, SW_RES(RB_FROMCAPTIONS )), + aFromObjectNamesRB( this, SW_RES(RB_FROMOBJECTNAMES )), + + aCaptionSequenceFT( this, SW_RES(FT_CAPTIONSEQUENCE )), + aCaptionSequenceLB( this, SW_RES(LB_CAPTIONSEQUENCE )), + aDisplayTypeFT( this, SW_RES(FT_DISPLAYTYPE )), + aDisplayTypeLB( this, SW_RES(LB_DISPLAYTYPE )), + + aTOXMarksCB( this, SW_RES(CB_TOXMARKS )), + + aIdxOptionsFL( this, SW_RES(FL_IDXOPTIONS )), + aCollectSameCB( this, SW_RES(CB_COLLECTSAME )), + aUseFFCB( this, SW_RES(CB_USEFF )), + aUseDashCB( this, SW_RES(CB_USE_DASH )), + aCaseSensitiveCB( this, SW_RES(CB_CASESENSITIVE )), + aInitialCapsCB( this, SW_RES(CB_INITIALCAPS )), + aKeyAsEntryCB( this, SW_RES(CB_KEYASENTRY )), + aFromFileCB( this, SW_RES(CB_FROMFILE )), + aAutoMarkPB( this, SW_RES(MB_AUTOMARK )), + + aFromNames( SW_RES(RES_SRCTYPES )), + aFromObjCLB( this, SW_RES(CLB_FROMOBJ )), + aFromObjFL( this, SW_RES(FL_FROMOBJ )), + + aSequenceCB( this, SW_RES(CB_SEQUENCE )), + aBracketFT( this, SW_RES(FT_BRACKET )), + aBracketLB( this, SW_RES(LB_BRACKET )), + aAuthorityFormatFL( this, SW_RES(FL_AUTHORITY )), + + aSortOptionsFL( this, SW_RES(FL_SORTOPTIONS )), + aLanguageFT( this, SW_RES(FT_LANGUAGE )), + aLanguageLB( this, SW_RES(LB_LANGUAGE )), + aSortAlgorithmFT( this, SW_RES(FT_SORTALG )), + aSortAlgorithmLB( this, SW_RES(LB_SORTALG )), + + pIndexRes(0), + + sAutoMarkType(SW_RES(ST_AUTOMARK_TYPE)), + sAddStyleUser(SW_RES(ST_USER_ADDSTYLE)), + bFirstCall(sal_True) +{ + aBracketLB.InsertEntry(String(SW_RES(ST_NO_BRACKET)), 0); + + aAddStylesPB.SetAccessibleRelationMemberOf(&aCreateFromFL); + aAddStylesPB.SetAccessibleRelationLabeledBy(&aAddStylesCB); + aAddStylesPB.SetAccessibleName(aAddStylesCB.GetText()); + + FreeResource(); + + pIndexEntryWrapper = new IndexEntrySupplierWrapper(); + + aLanguageLB.SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN, + sal_False, sal_False, sal_False ); + + sAddStyleContent = aAddStylesCB.GetText(); + + aCBLeftPos1 = aFromHeadingsCB.GetPosPixel(); + aCBLeftPos2 = aAddStylesCB.GetPosPixel(); + aCBLeftPos3 = aTOXMarksCB.GetPosPixel(); + + ResStringArray& rNames = aFromNames.GetNames(); + for(sal_uInt16 i = 0; i < rNames.Count(); i++) + { + aFromObjCLB.InsertEntry(rNames.GetString(i)); + aFromObjCLB.SetEntryData( i, (void*)rNames.GetValue(i) ); + } + aFromObjCLB.SetHelpId(HID_OLE_CHECKLB); + + SetExchangeSupport(); + aTypeLB.SetSelectHdl(LINK(this, SwTOXSelectTabPage, TOXTypeHdl)); + + aAddStylesPB.SetClickHdl(LINK(this, SwTOXSelectTabPage, AddStylesHdl)); + //aChapterDlgPB.SetClickHdl(LINK(this, SwTOXSelectTabPage, ChapterHdl));//#outline level,removed by zhaojianwei + + PopupMenu* pMenu = aAutoMarkPB.GetPopupMenu(); + pMenu->SetActivateHdl(LINK(this, SwTOXSelectTabPage, MenuEnableHdl)); + pMenu->SetSelectHdl(LINK(this, SwTOXSelectTabPage, MenuExecuteHdl)); + + Link aLk = LINK(this, SwTOXSelectTabPage, CheckBoxHdl); + aAddStylesCB .SetClickHdl(aLk); + aFromHeadingsCB .SetClickHdl(aLk); + aTOXMarksCB .SetClickHdl(aLk); + aFromFileCB .SetClickHdl(aLk); + aCollectSameCB .SetClickHdl(aLk); + aUseFFCB .SetClickHdl(aLk); + aUseDashCB .SetClickHdl(aLk); + aInitialCapsCB .SetClickHdl(aLk); + aKeyAsEntryCB .SetClickHdl(aLk); + + Link aModifyLk = LINK(this, SwTOXSelectTabPage, ModifyHdl); + aTitleED.SetModifyHdl(aModifyLk); + aLevelNF.SetModifyHdl(aModifyLk); + aSortAlgorithmLB.SetSelectHdl(aModifyLk); + + aLk = LINK(this, SwTOXSelectTabPage, RadioButtonHdl); + aFromCaptionsRB.SetClickHdl(aLk); + aFromObjectNamesRB.SetClickHdl(aLk); + RadioButtonHdl(&aFromCaptionsRB); + + aLanguageLB.SetSelectHdl(LINK(this, SwTOXSelectTabPage, LanguageHdl)); + aTypeLB.SelectEntryPos(0); + aTitleED.SaveValue(); +} +/*-- 14.06.99 13:11:41--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwTOXSelectTabPage::~SwTOXSelectTabPage() +{ + delete pIndexRes; + delete pIndexEntryWrapper; +} +/* -----------------21.10.99 17:03------------------- + + --------------------------------------------------*/ +void SwTOXSelectTabPage::SetWrtShell(SwWrtShell& rSh) +{ + sal_uInt16 nUserTypeCount = rSh.GetTOXTypeCount(TOX_USER); + if(nUserTypeCount > 1) + { + //insert all new user indexes names after the standard user index + sal_uInt16 nPos = aTypeLB.GetEntryPos((void*)(sal_uInt32)TO_USER); + nPos++; + for(sal_uInt16 nUser = 1; nUser < nUserTypeCount; nUser++) + { + nPos = aTypeLB.InsertEntry(rSh.GetTOXType(TOX_USER, nUser)->GetTypeName(), nPos); + sal_uInt32 nEntryData = nUser << 8; + nEntryData |= TO_USER; + aTypeLB.SetEntryData(nPos, (void*)nEntryData); + } + } +} +/* -----------------14.06.99 13:10------------------- + + --------------------------------------------------*/ +sal_Bool SwTOXSelectTabPage::FillItemSet( SfxItemSet& ) +{ + return sal_True; +} +/* -----------------25.08.99 14:31------------------- + + --------------------------------------------------*/ +long lcl_TOXTypesToUserData(CurTOXType eType) +{ + sal_uInt16 nRet = TOX_INDEX; + switch(eType.eType) + { + case TOX_INDEX : nRet = TO_INDEX; break; + case TOX_USER : + { + nRet = eType.nIndex << 8; + nRet |= TO_USER; + } + break; + case TOX_CONTENT : nRet = TO_CONTENT; break; + case TOX_ILLUSTRATIONS:nRet = TO_ILLUSTRATION; break; + case TOX_OBJECTS : nRet = TO_OBJECT; break; + case TOX_TABLES : nRet = TO_TABLE; break; + case TOX_AUTHORITIES : nRet = TO_AUTHORITIES; break; + } + return nRet; +} +//----------------------------------------------------------------- +void SwTOXSelectTabPage::SelectType(TOXTypes eSet) +{ + CurTOXType eCurType (eSet, 0); + + long nData = lcl_TOXTypesToUserData(eCurType); + aTypeLB.SelectEntryPos(aTypeLB.GetEntryPos((void*)nData)); + aTypeFT.Enable(sal_False); + aTypeLB.Enable(sal_False); + TOXTypeHdl(&aTypeLB); +} + +/*-- 14.06.99 13:10:45--------------------------------------------------- + + -----------------------------------------------------------------------*/ +//----------------------------------------------------------------- +CurTOXType lcl_UserData2TOXTypes(sal_uInt16 nData) +{ + CurTOXType eRet; + + switch(nData&0xff) + { + case TO_INDEX : eRet.eType = TOX_INDEX; break; + case TO_USER : + { + eRet.eType = TOX_USER; + eRet.nIndex = (nData&0xff00) >> 8; + } + break; + case TO_CONTENT : eRet.eType = TOX_CONTENT; break; + case TO_ILLUSTRATION: eRet.eType = TOX_ILLUSTRATIONS; break; + case TO_OBJECT : eRet.eType = TOX_OBJECTS; break; + case TO_TABLE : eRet.eType = TOX_TABLES; break; + case TO_AUTHORITIES : eRet.eType = TOX_AUTHORITIES; break; + default: DBG_ERROR("what a type?"); + } + return eRet; +} +/* -----------------02.09.99 08:16------------------- + + --------------------------------------------------*/ +void SwTOXSelectTabPage::ApplyTOXDescription() +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); + SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType); + aReadOnlyCB.Check(rDesc.IsReadonly()); + if(aTitleED.GetText() == aTitleED.GetSavedValue()) + { + if(rDesc.GetTitle()) + aTitleED.SetText(*rDesc.GetTitle()); + else + aTitleED.SetText(aEmptyStr); + aTitleED.SaveValue(); + } + + aAreaLB.SelectEntryPos(rDesc.IsFromChapter() ? 1 : 0); + + if(aCurType.eType != TOX_INDEX) + aLevelNF.SetValue(rDesc.GetLevel()); //content, user + + sal_uInt16 nCreateType = rDesc.GetContentOptions(); + + //user + content + sal_Bool bHasStyleNames = sal_False; + sal_uInt16 i; + + for( i = 0; i < MAXLEVEL; i++) + if(rDesc.GetStyleNames(i).Len()) + { + bHasStyleNames = sal_True; + break; + } + aAddStylesCB.Check(bHasStyleNames && (nCreateType & nsSwTOXElement::TOX_TEMPLATE)); + + aFromOLECB. Check( 0 != (nCreateType & nsSwTOXElement::TOX_OLE) ); + aFromTablesCB. Check( 0 != (nCreateType & nsSwTOXElement::TOX_TABLE) ); + aFromGraphicsCB.Check( 0 != (nCreateType & nsSwTOXElement::TOX_GRAPHIC) ); + aFromFramesCB. Check( 0 != (nCreateType & nsSwTOXElement::TOX_FRAME) ); + + aLevelFromChapterCB.Check(rDesc.IsLevelFromChapter()); + + //all but illustration and table + aTOXMarksCB.Check( 0 != (nCreateType & nsSwTOXElement::TOX_MARK) ); + + //content + if(TOX_CONTENT == aCurType.eType) + { + aFromHeadingsCB.Check( 0 != (nCreateType & nsSwTOXElement::TOX_OUTLINELEVEL) ); + //aChapterDlgPB.Enable(aFromHeadingsCB.IsChecked());//#outline level,removed by zhaojianwei + aAddStylesCB.SetText(sAddStyleContent); + aAddStylesPB.Enable(aAddStylesCB.IsChecked()); + } + //index only + else if(TOX_INDEX == aCurType.eType) + { + sal_uInt16 nIndexOptions = rDesc.GetIndexOptions(); + aCollectSameCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_SAME_ENTRY) ); + aUseFFCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_FF) ); + aUseDashCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_DASH) ); + if(aUseFFCB.IsChecked()) + aUseDashCB.Enable(sal_False); + else if(aUseDashCB.IsChecked()) + aUseFFCB.Enable(sal_False); + + aCaseSensitiveCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_CASE_SENSITIVE) ); + aInitialCapsCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_INITIAL_CAPS) ); + aKeyAsEntryCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_KEY_AS_ENTRY) ); + } + else if(TOX_ILLUSTRATIONS == aCurType.eType || + TOX_TABLES == aCurType.eType) + { + aFromObjectNamesRB.Check(rDesc.IsCreateFromObjectNames()); + aFromCaptionsRB.Check(!rDesc.IsCreateFromObjectNames()); + aCaptionSequenceLB.SelectEntry(rDesc.GetSequenceName()); + aDisplayTypeLB.SelectEntryPos( static_cast< sal_uInt16 >(rDesc.GetCaptionDisplay()) ); + RadioButtonHdl(&aFromCaptionsRB); + + } + else if(TOX_OBJECTS == aCurType.eType) + { + long nOLEData = rDesc.GetOLEOptions(); + for(sal_uInt16 nFromObj = 0; nFromObj < aFromObjCLB.GetEntryCount(); nFromObj++) + { + long nData = (long)aFromObjCLB.GetEntryData(nFromObj); + aFromObjCLB.CheckEntryPos(nFromObj, 0 != (nData & nOLEData)); + } + } + else if(TOX_AUTHORITIES == aCurType.eType) + { + String sBrackets(rDesc.GetAuthBrackets()); + if(!sBrackets.Len() || sBrackets.EqualsAscii(" ")) + aBracketLB.SelectEntryPos(0); + else + aBracketLB.SelectEntry(sBrackets); + aSequenceCB.Check(rDesc.IsAuthSequence()); + } + aAutoMarkPB.Enable(aFromFileCB.IsChecked()); + + for(i = 0; i < MAXLEVEL; i++) + aStyleArr[i] = rDesc.GetStyleNames(i); + + aLanguageLB.SelectLanguage(rDesc.GetLanguage()); + LanguageHdl(0); + for( long nCnt = 0; nCnt < aSortAlgorithmLB.GetEntryCount(); ++nCnt ) + { + const String* pEntryData = (const String*)aSortAlgorithmLB.GetEntryData( (sal_uInt16)nCnt ); + DBG_ASSERT(pEntryData, "no entry data available"); + if( pEntryData && *pEntryData == rDesc.GetSortAlgorithm()) + { + aSortAlgorithmLB.SelectEntryPos( (sal_uInt16)nCnt ); + break; + } + } +} +/* -----------------09.09.99 11:57------------------- + + --------------------------------------------------*/ +void SwTOXSelectTabPage::FillTOXDescription() +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); + SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType); + rDesc.SetTitle(aTitleED.GetText()); + rDesc.SetFromChapter(1 == aAreaLB.GetSelectEntryPos()); + sal_uInt16 nContentOptions = 0; + if(aTOXMarksCB.IsVisible() && aTOXMarksCB.IsChecked()) + nContentOptions |= nsSwTOXElement::TOX_MARK; + + sal_uInt16 nIndexOptions = rDesc.GetIndexOptions()&nsSwTOIOptions::TOI_ALPHA_DELIMITTER; + switch(rDesc.GetTOXType()) + { + case TOX_CONTENT: + if(aFromHeadingsCB.IsChecked()) + nContentOptions |= nsSwTOXElement::TOX_OUTLINELEVEL; + break; + case TOX_USER: + { + rDesc.SetTOUName(aTypeLB.GetSelectEntry()); + + if(aFromOLECB.IsChecked()) + nContentOptions |= nsSwTOXElement::TOX_OLE; + if(aFromTablesCB.IsChecked()) + nContentOptions |= nsSwTOXElement::TOX_TABLE; + if(aFromFramesCB.IsChecked()) + nContentOptions |= nsSwTOXElement::TOX_FRAME; + if(aFromGraphicsCB.IsChecked()) + nContentOptions |= nsSwTOXElement::TOX_GRAPHIC; + } + break; + case TOX_INDEX: + { + nContentOptions = nsSwTOXElement::TOX_MARK; + + if(aCollectSameCB.IsChecked()) + nIndexOptions |= nsSwTOIOptions::TOI_SAME_ENTRY; + if(aUseFFCB.IsChecked()) + nIndexOptions |= nsSwTOIOptions::TOI_FF; + if(aUseDashCB.IsChecked()) + nIndexOptions |= nsSwTOIOptions::TOI_DASH; + if(aCaseSensitiveCB.IsChecked()) + nIndexOptions |= nsSwTOIOptions::TOI_CASE_SENSITIVE; + if(aInitialCapsCB.IsChecked()) + nIndexOptions |= nsSwTOIOptions::TOI_INITIAL_CAPS; + if(aKeyAsEntryCB.IsChecked()) + nIndexOptions |= nsSwTOIOptions::TOI_KEY_AS_ENTRY; + if(aFromFileCB.IsChecked()) + rDesc.SetAutoMarkURL(sAutoMarkURL); + else + rDesc.SetAutoMarkURL(aEmptyStr); + } + break; + case TOX_ILLUSTRATIONS: + case TOX_TABLES : + rDesc.SetCreateFromObjectNames(aFromObjectNamesRB.IsChecked()); + rDesc.SetSequenceName(aCaptionSequenceLB.GetSelectEntry()); + rDesc.SetCaptionDisplay((SwCaptionDisplay)aDisplayTypeLB.GetSelectEntryPos()); + break; + case TOX_OBJECTS: + { + long nOLEData = 0; + for(sal_uInt16 i = 0; i < aFromObjCLB.GetEntryCount(); i++) + { + if(aFromObjCLB.IsChecked(i)) + { + long nData = (long)aFromObjCLB.GetEntryData(i); + nOLEData |= nData; + } + } + rDesc.SetOLEOptions((sal_uInt16)nOLEData); + } + break; + case TOX_AUTHORITIES: + { + if(aBracketLB.GetSelectEntryPos()) + rDesc.SetAuthBrackets(aBracketLB.GetSelectEntry()); + else + rDesc.SetAuthBrackets(aEmptyStr); + rDesc.SetAuthSequence(aSequenceCB.IsChecked()); + } + break; + } + + rDesc.SetLevelFromChapter( aLevelFromChapterCB.IsVisible() && + aLevelFromChapterCB.IsChecked()); + if(aTOXMarksCB.IsChecked() && aTOXMarksCB.IsVisible()) + nContentOptions |= nsSwTOXElement::TOX_MARK; + if(aFromHeadingsCB.IsChecked() && aFromHeadingsCB.IsVisible()) + nContentOptions |= nsSwTOXElement::TOX_OUTLINELEVEL; + if(aAddStylesCB.IsChecked() && aAddStylesCB.IsVisible()) + nContentOptions |= nsSwTOXElement::TOX_TEMPLATE; + + rDesc.SetContentOptions(nContentOptions); + rDesc.SetIndexOptions(nIndexOptions); + rDesc.SetLevel( static_cast< sal_uInt8 >(aLevelNF.GetValue()) ); + + rDesc.SetReadonly(aReadOnlyCB.IsChecked()); + + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + rDesc.SetStyleNames(aStyleArr[i], i); + + rDesc.SetLanguage(aLanguageLB.GetSelectLanguage()); + const String* pEntryData = (const String*)aSortAlgorithmLB.GetEntryData( + aSortAlgorithmLB.GetSelectEntryPos() ); + DBG_ASSERT(pEntryData, "no entry data available"); + if(pEntryData) + rDesc.SetSortAlgorithm(*pEntryData); +} +/* -----------------05.07.99 15:09------------------- + + --------------------------------------------------*/ +void SwTOXSelectTabPage::Reset( const SfxItemSet& ) +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + SwWrtShell& rSh = pTOXDlg->GetWrtShell(); + const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); + long nData = lcl_TOXTypesToUserData(aCurType); + aTypeLB.SelectEntryPos(aTypeLB.GetEntryPos((void*)nData)); + + sAutoMarkURL = INetURLObject::decode( rSh.GetTOIAutoMarkURL(), + INET_HEX_ESCAPE, + INetURLObject::DECODE_UNAMBIGUOUS, + RTL_TEXTENCODING_UTF8 ); + aFromFileCB.Check( 0 != sAutoMarkURL.Len() ); + + aCaptionSequenceLB.Clear(); + sal_uInt16 i, nCount = rSh.GetFldTypeCount(RES_SETEXPFLD); + for (i = 0; i < nCount; i++) + { + SwFieldType *pType = rSh.GetFldType( i, RES_SETEXPFLD ); + if( pType->Which() == RES_SETEXPFLD && + ((SwSetExpFieldType *) pType)->GetType() & nsSwGetSetExpType::GSE_SEQ ) + aCaptionSequenceLB.InsertEntry(pType->GetName()); + } + + if(pTOXDlg->IsTOXEditMode()) + { + aTypeFT.Enable(sal_False); + aTypeLB.Enable(sal_False); + } + TOXTypeHdl(&aTypeLB); + CheckBoxHdl(&aAddStylesCB); +} +/*-- 14.06.99 13:10:52--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwTOXSelectTabPage::ActivatePage( const SfxItemSet& ) +{ + //nothing to do +} +/*-- 14.06.99 13:11:00--------------------------------------------------- + + -----------------------------------------------------------------------*/ +int SwTOXSelectTabPage::DeactivatePage( SfxItemSet* _pSet ) +{ + if(_pSet) + _pSet->Put(SfxUInt16Item(FN_PARAM_TOX_TYPE, + (sal_uInt16)(long)aTypeLB.GetEntryData( aTypeLB.GetSelectEntryPos() ))); + FillTOXDescription(); + return LEAVE_PAGE; +} +/* -----------------14.06.99 13:10------------------- + + --------------------------------------------------*/ +SfxTabPage* SwTOXSelectTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet) +{ + return new SwTOXSelectTabPage(pParent, rAttrSet); +} +/* -----------------14.06.99 13:10------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXSelectTabPage, TOXTypeHdl, ListBox*, pBox) +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + if(!bFirstCall) + { + // save current values into the proper TOXDescription + FillTOXDescription(); + } + bFirstCall = sal_False; + const sal_uInt16 nType = sal::static_int_cast< sal_uInt16 >(reinterpret_cast< sal_uIntPtr >( + pBox->GetEntryData( pBox->GetSelectEntryPos() ))); + CurTOXType eCurType = lcl_UserData2TOXTypes(nType); + pTOXDlg->SetCurrentTOXType(eCurType); + + aAreaLB.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) ); + aLevelFT.Show( 0 != (nType & (TO_CONTENT)) ); + aLevelNF.Show( 0 != (nType & (TO_CONTENT)) ); + aLevelFromChapterCB.Show( 0 != (nType & (TO_USER)) ); + aAreaFT.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) ); + aAreaFL.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) ); + + aFromHeadingsCB.Show( 0 != (nType & (TO_CONTENT)) ); + // aChapterDlgPB.Show( 0 != (nType & (TO_CONTENT)) );//#outline level,removed by zhaojianwei + aAddStylesCB.Show( 0 != (nType & (TO_CONTENT|TO_USER)) ); + aAddStylesPB.Show( 0 != (nType & (TO_CONTENT|TO_USER)) ); + + aFromTablesCB.Show( 0 != (nType & (TO_USER)) ); + aFromFramesCB.Show( 0 != (nType & (TO_USER)) ); + aFromGraphicsCB.Show( 0 != (nType & (TO_USER)) ); + aFromOLECB.Show( 0 != (nType & (TO_USER)) ); + + aFromCaptionsRB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); + aFromObjectNamesRB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); + + aTOXMarksCB.Show( 0 != (nType & (TO_CONTENT|TO_USER)) ); + + aCreateFromFL.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_TABLE)) ); + aCaptionSequenceFT.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); + aCaptionSequenceLB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); + aDisplayTypeFT.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); + aDisplayTypeLB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); + + aSequenceCB.Show( 0 != (nType & TO_AUTHORITIES) ); + aBracketFT.Show( 0 != (nType & TO_AUTHORITIES) ); + aBracketLB.Show( 0 != (nType & TO_AUTHORITIES) ); + aAuthorityFormatFL.Show( 0 != (nType & TO_AUTHORITIES) ); + + sal_Bool bEnableSortLanguage = 0 != (nType & (TO_INDEX|TO_AUTHORITIES)); + aSortOptionsFL.Show(bEnableSortLanguage); + aLanguageFT.Show(bEnableSortLanguage); + aLanguageLB.Show(bEnableSortLanguage); + aSortAlgorithmFT.Show(bEnableSortLanguage); + aSortAlgorithmLB.Show(bEnableSortLanguage); + + //if(nType & TO_CONTENT) //#outline level,removed by zhaojianwei + //{ + //Point aPos(aAddStylesPB.GetPosPixel()); + //aPos.X() = aChapterDlgPB.GetPosPixel().X(); + //aAddStylesPB.SetPosPixel(aPos); + //} + //else if( nType & TO_ILLUSTRATION )//<-removed end. + // initialize button positions + + //#i111993# add styles button has two different positions + if( !aAddStylesPosDef.X() ) + { + aAddStylesPosDef = ( aAddStylesPB.GetPosPixel() ); + // move left! + Point aPos(aAddStylesPosDef); + aPos.X() -= 2 * aAddStylesPB.GetSizePixel().Width(); + aAddStylesPosUser = aPos; + } + + if( nType & TO_ILLUSTRATION ) //add by zhaojianwei + aCaptionSequenceLB.SelectEntry( SwStyleNameMapper::GetUIName( + RES_POOLCOLL_LABEL_ABB, aEmptyStr )); + else if( nType & TO_TABLE ) + aCaptionSequenceLB.SelectEntry( SwStyleNameMapper::GetUIName( + RES_POOLCOLL_LABEL_TABLE, aEmptyStr )); + else if( nType & TO_USER ) + { + aAddStylesCB.SetText(sAddStyleUser); + aAddStylesPB.SetPosPixel(aAddStylesPosUser); + } + else if( nType & TO_CONTENT ) + { + aAddStylesPB.SetPosPixel(aAddStylesPosDef); + } + + aCollectSameCB.Show( 0 != (nType & TO_INDEX) ); + aUseFFCB.Show( 0 != (nType & TO_INDEX) ); + aUseDashCB.Show( 0 != (nType & TO_INDEX) ); + aCaseSensitiveCB.Show( 0 != (nType & TO_INDEX) ); + aInitialCapsCB.Show( 0 != (nType & TO_INDEX) ); + aKeyAsEntryCB.Show( 0 != (nType & TO_INDEX) ); + aFromFileCB.Show( 0 != (nType & TO_INDEX) ); + aAutoMarkPB.Show( 0 != (nType & TO_INDEX) ); +// aCreateAutoMarkPB.Show(nType &TO_INDEX); +// aEditAutoMarkPB.Show(nType & TO_INDEX); + + aIdxOptionsFL.Show( 0 != (nType & TO_INDEX) ); + + //object index + aFromObjCLB.Show( 0 != (nType & TO_OBJECT) ); + aFromObjFL.Show( 0 != (nType & TO_OBJECT) ); + + //move controls + aAddStylesCB.SetPosPixel(nType & TO_USER ? aCBLeftPos1 : aCBLeftPos2); + Point aPBPos(aAddStylesPB.GetPosPixel()); + aPBPos.Y() = nType & TO_USER ? aCBLeftPos1.Y() : aCBLeftPos2.Y(); + aAddStylesPB.SetPosPixel(aPBPos); + aTOXMarksCB.SetPosPixel(nType & TO_USER ? aCBLeftPos2 : aCBLeftPos3); + //set control values from the proper TOXDescription + { + ApplyTOXDescription(); + } + ModifyHdl(0); + return 0; +} +/* -----------------30.11.99 12:48------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXSelectTabPage, ModifyHdl, void*, EMPTYARG) +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + if(pTOXDlg) + { + FillTOXDescription(); + pTOXDlg->CreateOrUpdateExample(pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_SELECT); + } + return 0; +} +/* -----------------05.07.99 10:13------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXSelectTabPage, CheckBoxHdl, CheckBox*, pBox ) +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); + if(TOX_CONTENT == aCurType.eType) + { + //at least one of the three CheckBoxes must be checked + if(!aAddStylesCB.IsChecked() && !aFromHeadingsCB.IsChecked() && !aTOXMarksCB.IsChecked()) + { + //TODO: InfoBox? + pBox->Check(sal_True); + } + aAddStylesPB.Enable(aAddStylesCB.IsChecked()); + //aChapterDlgPB.Enable(aFromHeadingsCB.IsChecked());//#outline level,removed by zhaojianwei + } + if(TOX_USER == aCurType.eType) + { + aAddStylesPB.Enable(aAddStylesCB.IsChecked()); + } + else if(TOX_INDEX == aCurType.eType) + { + aAutoMarkPB.Enable(aFromFileCB.IsChecked()); + aUseFFCB.Enable(aCollectSameCB.IsChecked() && !aUseDashCB.IsChecked()); + aUseDashCB.Enable(aCollectSameCB.IsChecked() && !aUseFFCB.IsChecked()); + aCaseSensitiveCB.Enable(aCollectSameCB.IsChecked()); + } + ModifyHdl(0); + return 0; +}; +/* -----------------14.07.99 14:21------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXSelectTabPage, RadioButtonHdl, RadioButton*, EMPTYARG ) +{ + sal_Bool bEnable = aFromCaptionsRB.IsChecked(); + aCaptionSequenceFT.Enable(bEnable); + aCaptionSequenceLB.Enable(bEnable); + aDisplayTypeFT.Enable(bEnable); + aDisplayTypeLB.Enable(bEnable); + ModifyHdl(0); + return 0; +} +/* -----------------------------06.06.01 09:33-------------------------------- + + ---------------------------------------------------------------------------*/ +IMPL_LINK(SwTOXSelectTabPage, LanguageHdl, ListBox*, pBox) +{ + Locale aLcl( SvxCreateLocale( aLanguageLB.GetSelectLanguage() ) ); + Sequence< OUString > aSeq = pIndexEntryWrapper->GetAlgorithmList( aLcl ); + + if( !pIndexRes ) + pIndexRes = new IndexEntryRessource(); + + String sOldString; + void* pUserData; + if( 0 != (pUserData = aSortAlgorithmLB.GetEntryData( aSortAlgorithmLB.GetSelectEntryPos())) ) + sOldString = *(String*)pUserData; + void* pDel; + sal_uInt16 nEnd = aSortAlgorithmLB.GetEntryCount(); + for( sal_uInt16 n = 0; n < nEnd; ++n ) + if( 0 != ( pDel = aSortAlgorithmLB.GetEntryData( n )) ) + delete (String*)pDel; + aSortAlgorithmLB.Clear(); + + sal_uInt16 nInsPos; + String sAlg, sUINm; + nEnd = static_cast< sal_uInt16 >(aSeq.getLength()); + for( sal_uInt16 nCnt = 0; nCnt < nEnd; ++nCnt ) + { + sUINm = pIndexRes->GetTranslation( sAlg = aSeq[ nCnt ] ); + nInsPos = aSortAlgorithmLB.InsertEntry( sUINm ); + aSortAlgorithmLB.SetEntryData( nInsPos, new String( sAlg )); + if( sAlg == sOldString ) + aSortAlgorithmLB.SelectEntryPos( nInsPos ); + } + + if( LISTBOX_ENTRY_NOTFOUND == aSortAlgorithmLB.GetSelectEntryPos() ) + aSortAlgorithmLB.SelectEntryPos( 0 ); + + if(pBox) + ModifyHdl(0); + return 0; +}; +/* -----------------14.06.99 13:10------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXSelectTabPage, TOXAreaHdl, ListBox*, pBox) +{ + DBG_WARNING("not implemented"); + switch((long)pBox->GetEntryData( pBox->GetSelectEntryPos() )) + { + case AREA_DOCUMENT : break; + case AREA_CHAPTER : break; + } + return 0; +} + +//#outline level, removed by zhaojianwei +//It is no longer used! +///* -----------------14.06.99 13:10------------------- +// +// --------------------------------------------------*/ +//IMPL_LINK(SwTOXSelectTabPage, ChapterHdl, PushButton*, pButton) +//{ +// SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); +// SwWrtShell& rSh = pTOXDlg->GetWrtShell(); +// +// SfxItemSet aTmp(rSh.GetView().GetPool(), FN_PARAM_1, FN_PARAM_1); +// SwOutlineTabDialog* pDlg = new SwOutlineTabDialog(pButton, &aTmp, rSh); +// +// if(RET_OK == pDlg->Execute()) +// { +// CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); +// SwForm* pForm = ((SwMultiTOXTabDialog*)GetTabDialog())->GetForm(aCurType); +// // jetzt muss ueberprueft werden, ob dem sdbcx::Index Ueberschriftenvorlagen +// // zugewiesen wurden +// String sStr; +// for(sal_uInt16 i = 0; i < MAXLEVEL; i++) +// { +// sal_Bool bNum = !SwMultiTOXTabDialog::IsNoNum(rSh, pForm->GetTemplate( i + 1 )); +// if(bNum) +// { +// //es gibt getrennte Resourcebereiche fuer die Inhaltsverzeichnisse +// if(i < 5) +// SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_TOX_CNTNT1 + i), sStr ); +// else +// SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_TOX_CNTNT6 + i - 5), sStr ); +// pForm->SetTemplate( i + 1, sStr ); +// } +// } +// +// } +// delete pDlg; +// return 0; +//} +/* -----------------14.06.99 13:10------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXSelectTabPage, AddStylesHdl, PushButton*, pButton) +{ + SwAddStylesDlg_Impl* pDlg = new SwAddStylesDlg_Impl(pButton, + ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(), + aStyleArr); + pDlg->Execute(); + delete pDlg; + ModifyHdl(0); + return 0; +} +/* -----------------------------19.01.00 10:59-------------------------------- + + ---------------------------------------------------------------------------*/ + +IMPL_LINK(SwTOXSelectTabPage, MenuEnableHdl, Menu*, pMenu) +{ + pMenu->EnableItem(MN_AUTOMARK_EDIT, sAutoMarkURL.Len() > 0); + return 0; +} + +IMPL_LINK(SwTOXSelectTabPage, MenuExecuteHdl, Menu*, pMenu) +{ + const String sSaveAutoMarkURL = sAutoMarkURL; + switch(pMenu->GetCurItemId()) + { + case MN_AUTOMARK_OPEN: + sAutoMarkURL = lcl_CreateAutoMarkFileDlg( + sAutoMarkURL, sAutoMarkType, sal_True); + break; + case MN_AUTOMARK_NEW : + sAutoMarkURL = lcl_CreateAutoMarkFileDlg( + sAutoMarkURL, sAutoMarkType, sal_False); + if( !sAutoMarkURL.Len() ) + break; + //no break + case MN_AUTOMARK_EDIT: + { + sal_Bool bNew = pMenu->GetCurItemId()== MN_AUTOMARK_NEW; + SwAutoMarkDlg_Impl* pAutoMarkDlg = new SwAutoMarkDlg_Impl( + &aAutoMarkPB, sAutoMarkURL, sAutoMarkType, bNew ); + + if( RET_OK != pAutoMarkDlg->Execute() && bNew ) + sAutoMarkURL = sSaveAutoMarkURL; + delete pAutoMarkDlg; + + } + break; + } + return 0; +} + +/* -----------------16.06.99 10:46------------------- + + --------------------------------------------------*/ +class SwTOXEdit : public Edit +{ + SwFormToken aFormToken; + Link aPrevNextControlLink; + sal_Bool bNextControl; + SwTokenWindow* m_pParent; +public: + SwTOXEdit( Window* pParent, SwTokenWindow* pTokenWin, + const SwFormToken& aToken) + : Edit( pParent, WB_BORDER|WB_TABSTOP|WB_CENTER), + aFormToken(aToken), + bNextControl(sal_False), + m_pParent( pTokenWin ) + { + SetHelpId( HID_TOX_ENTRY_EDIT ); + } + + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void RequestHelp( const HelpEvent& rHEvt ); + + sal_Bool IsNextControl() const {return bNextControl;} + void SetPrevNextLink( const Link& rLink ) {aPrevNextControlLink = rLink;} + + const SwFormToken& GetFormToken() + { + aFormToken.sText = GetText(); + return aFormToken; + } + + void SetCharStyleName(const String& rSet, sal_uInt16 nPoolId) + { + aFormToken.sCharStyleName = rSet; + aFormToken.nPoolId = nPoolId; + } + + void AdjustSize(); +}; + +//--------------------------------------------------- +void SwTOXEdit::RequestHelp( const HelpEvent& rHEvt ) +{ + if(!m_pParent->CreateQuickHelp(this, aFormToken, rHEvt)) + Edit::RequestHelp(rHEvt); +} +//--------------------------------------------------- +void SwTOXEdit::KeyInput( const KeyEvent& rKEvt ) +{ + const Selection& rSel = GetSelection(); + sal_uInt16 nTextLen = GetText().Len(); + if( (rSel.A() == rSel.B() && + !rSel.A() ) || rSel.A() == nTextLen ) + { + sal_Bool bCall = sal_False; + KeyCode aCode = rKEvt.GetKeyCode(); + if(aCode.GetCode() == KEY_RIGHT && rSel.A() == nTextLen) + { + bNextControl = sal_True; + bCall = sal_True; + } + else if(aCode.GetCode() == KEY_LEFT && !rSel.A() ) + { + bNextControl = sal_False; + bCall = sal_True; + } + + if(bCall && aPrevNextControlLink.IsSet()) + aPrevNextControlLink.Call(this); + + } + Edit::KeyInput(rKEvt); +} +/* -----------------16.07.99 12:41------------------- + + --------------------------------------------------*/ +void SwTOXEdit::AdjustSize() +{ + Size aSize(GetSizePixel()); + Size aTextSize(GetTextWidth(GetText()), GetTextHeight()); + aTextSize = LogicToPixel(aTextSize); + aSize.Width() = aTextSize.Width() + EDIT_MINWIDTH; + SetSizePixel(aSize); +} + +//--------------------------------------------------- +//--------------------------------------------------- +class SwTOXButton : public PushButton +{ + SwFormToken aFormToken; + Link aPrevNextControlLink; + sal_Bool bNextControl; + SwTokenWindow* m_pParent; +public: + SwTOXButton( Window* pParent, SwTokenWindow* pTokenWin, + const SwFormToken& rToken) + : PushButton(pParent, WB_BORDER|WB_TABSTOP), + aFormToken(rToken), + bNextControl(sal_False), + m_pParent(pTokenWin) + { + SetHelpId(HID_TOX_ENTRY_BUTTON); + } + + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void RequestHelp( const HelpEvent& rHEvt ); + + sal_Bool IsNextControl() const {return bNextControl;} + void SetPrevNextLink(const Link& rLink) {aPrevNextControlLink = rLink;} + const SwFormToken& GetFormToken() const {return aFormToken;} + + void SetCharStyleName(const String& rSet, sal_uInt16 nPoolId) + { + aFormToken.sCharStyleName = rSet; + aFormToken.nPoolId = nPoolId; + } + + void SetTabPosition(SwTwips nSet) + { aFormToken.nTabStopPosition = nSet; } + + void SetFillChar( sal_Unicode cSet ) + { aFormToken.cTabFillChar = cSet; } + + void SetTabAlign(SvxTabAdjust eAlign) + { aFormToken.eTabAlign = eAlign;} + +//---> i89791 + //used for entry number format, in TOC only + //needed for different UI dialog position + void SetEntryNumberFormat(sal_uInt16 nSet) { + switch(nSet) + { + default: + case 0: + aFormToken.nChapterFormat = CF_NUMBER; + break; + case 1: + aFormToken.nChapterFormat = CF_NUM_NOPREPST_TITLE; + break; + } + } + + void SetChapterInfo(sal_uInt16 nSet) { + switch(nSet) + { + default: + case 0: + aFormToken.nChapterFormat = CF_NUM_NOPREPST_TITLE; + break; + case 1: + aFormToken.nChapterFormat = CF_TITLE; + break; + case 2: + aFormToken.nChapterFormat = CF_NUMBER_NOPREPST; + break; + } + } +//<--- + sal_uInt16 GetChapterInfo() const{ return aFormToken.nChapterFormat;} + + void SetOutlineLevel( sal_uInt16 nSet ) { aFormToken.nOutlineLevel = nSet;}//i53420 + sal_uInt16 GetOutlineLevel() const{ return aFormToken.nOutlineLevel;} + + void SetLinkEnd() + { + DBG_ASSERT(TOKEN_LINK_START == aFormToken.eTokenType, + "call SetLinkEnd for link start only!"); + aFormToken.eTokenType = TOKEN_LINK_END; + aFormToken.sText.AssignAscii(SwForm::aFormLinkEnd); + SetText(aFormToken.sText); + } + void SetLinkStart() + { + DBG_ASSERT(TOKEN_LINK_END == aFormToken.eTokenType, + "call SetLinkStart for link start only!"); + aFormToken.eTokenType = TOKEN_LINK_START; + aFormToken.sText.AssignAscii(SwForm::aFormLinkStt); + SetText(aFormToken.sText); + } +}; + +//--------------------------------------------------- +void SwTOXButton::KeyInput( const KeyEvent& rKEvt ) +{ + sal_Bool bCall = sal_False; + KeyCode aCode = rKEvt.GetKeyCode(); + if(aCode.GetCode() == KEY_RIGHT) + { + bNextControl = sal_True; + bCall = sal_True; + } + else if(aCode.GetCode() == KEY_LEFT ) + { + bNextControl = sal_False; + bCall = sal_True; + } + else if(aCode.GetCode() == KEY_DELETE) + { + m_pParent->RemoveControl(this, sal_True); + //this is invalid here + return; + } + if(bCall && aPrevNextControlLink.IsSet()) + aPrevNextControlLink.Call(this); + else + PushButton::KeyInput(rKEvt); +} +//--------------------------------------------------- +void SwTOXButton::RequestHelp( const HelpEvent& rHEvt ) +{ + if(!m_pParent->CreateQuickHelp(this, aFormToken, rHEvt)) + Button::RequestHelp(rHEvt); +} +/* -----------------------------23.12.99 14:28-------------------------------- + + ---------------------------------------------------------------------------*/ +SwIdxTreeListBox::SwIdxTreeListBox(SwTOXEntryTabPage* pPar, const ResId& rResId) : + SvTreeListBox(pPar, rResId), + pParent(pPar) +{ +} +/* -----------------------------23.12.99 14:19-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwIdxTreeListBox::RequestHelp( const HelpEvent& rHEvt ) +{ + if( rHEvt.GetMode() & HELPMODE_QUICK ) + { + Point aPos( ScreenToOutputPixel( rHEvt.GetMousePosPixel() )); + SvLBoxEntry* pEntry = GetEntry( aPos ); + if( pEntry ) + { + sal_uInt16 nLevel = static_cast< sal_uInt16 >(GetModel()->GetAbsPos(pEntry)); + String sEntry = pParent->GetLevelHelp(++nLevel); + if('*' == sEntry) + sEntry = GetEntryText(pEntry); + if(sEntry.Len()) + { + SvLBoxTab* pTab; + SvLBoxItem* pItem = GetItem( pEntry, aPos.X(), &pTab ); + if( pItem && SV_ITEM_ID_LBOXSTRING == pItem->IsA()) + { + aPos = GetEntryPosition( pEntry ); + + aPos.X() = GetTabPos( pEntry, pTab ); + Size aSize( pItem->GetSize( this, pEntry ) ); + + if((aPos.X() + aSize.Width()) > GetSizePixel().Width()) + aSize.Width() = GetSizePixel().Width() - aPos.X(); + + aPos = OutputToScreenPixel(aPos); + Rectangle aItemRect( aPos, aSize ); + Help::ShowQuickHelp( this, aItemRect, sEntry, + QUICKHELP_LEFT|QUICKHELP_VCENTER ); + } + } + } + } + else + SvTreeListBox::RequestHelp(rHEvt); +} +//--------------------------------------------------- +SwTOXEntryTabPage::SwTOXEntryTabPage(Window* pParent, const SfxItemSet& rAttrSet) : + SfxTabPage(pParent, SW_RES(TP_TOX_ENTRY), rAttrSet), + aLevelFT(this, SW_RES(FT_LEVEL )), + aLevelLB(this, SW_RES(LB_LEVEL )), + aEntryFL(this, SW_RES(FL_ENTRY )), + + aTokenFT(this, SW_RES(FT_TOKEN )), + aTokenWIN(this, SW_RES(WIN_TOKEN )), + aAllLevelsPB(this, SW_RES(PB_ALL_LEVELS )), + + aEntryNoPB(this, SW_RES(PB_ENTRYNO )), + aEntryPB(this, SW_RES(PB_ENTRY )), + aTabPB(this, SW_RES(PB_TAB )), + aChapterInfoPB(this, SW_RES(PB_CHAPTERINFO )), + aPageNoPB(this, SW_RES(PB_PAGENO )), + aHyperLinkPB(this, SW_RES(PB_HYPERLINK )), + + aAuthFieldsLB(this, SW_RES(LB_AUTHFIELD )), + aAuthInsertPB(this, SW_RES(PB_AUTHINSERT )), + aAuthRemovePB(this, SW_RES(PB_AUTHREMOVE )), + + aCharStyleFT(this, SW_RES(FT_CHARSTYLE )), + aCharStyleLB(this, SW_RES(LB_CHARSTYLE )), + aEditStylePB(this, SW_RES(PB_EDITSTYLE )), + + aChapterEntryFT(this, SW_RES(FT_CHAPTERENTRY )), + aChapterEntryLB(this, SW_RES(LB_CHAPTERENTRY )), + + aNumberFormatFT(this, SW_RES(FT_ENTRY_NO )),//i53420 + aNumberFormatLB(this, SW_RES(LB_ENTRY_NO )), + aEntryOutlineLevelFT(this, SW_RES(FT_LEVEL_OL )),//i53420 + aEntryOutlineLevelNF(this, SW_RES(NF_LEVEL_OL )), + + aFillCharFT(this, SW_RES(FT_FILLCHAR )), + aFillCharCB(this, SW_RES(CB_FILLCHAR )), + aTabPosFT(this, SW_RES(FT_TABPOS )), + aTabPosMF(this, SW_RES(MF_TABPOS )), + aAutoRightCB(this, SW_RES(CB_AUTORIGHT )), + aFormatFL(this, SW_RES(FL_FORMAT )), + + + aRelToStyleCB(this, SW_RES(CB_RELTOSTYLE )), + aMainEntryStyleFT(this, SW_RES(FT_MAIN_ENTRY_STYLE)), + aMainEntryStyleLB(this, SW_RES(LB_MAIN_ENTRY_STYLE)), + aAlphaDelimCB(this, SW_RES(CB_ALPHADELIM )), + aCommaSeparatedCB(this, SW_RES(CB_COMMASEPARATED )), + + aSortDocPosRB(this, SW_RES(RB_DOCPOS )), + aSortContentRB(this, SW_RES(RB_SORTCONTENT )), + aSortingFL(this, SW_RES(FL_SORTING )), + + aFirstKeyFT(this, SW_RES(FT_FIRSTKEY )), + aFirstKeyLB(this, SW_RES(LB_FIRSTKEY )), + aFirstSortUpRB(this, SW_RES(RB_SORTUP1 )), + aFirstSortDownRB(this, SW_RES(RB_SORTDOWN1 )), + + aSecondKeyFT(this, SW_RES(FT_SECONDKEY )), + aSecondKeyLB(this, SW_RES(LB_SECONDKEY )), + aSecondSortUpRB(this, SW_RES(RB_SORTUP2 )), + aSecondSortDownRB(this, SW_RES(RB_SORTDOWN2 )), + + aThirdKeyFT(this, SW_RES(FT_THIRDDKEY )), + aThirdKeyLB(this, SW_RES(LB_THIRDKEY )), + aThirdSortUpRB(this, SW_RES(RB_SORTUP3 )), + aThirdSortDownRB(this, SW_RES(RB_SORTDOWN3 )), + + aSortKeyFL(this, SW_RES(FL_SORTKEY )), + + sDelimStr( SW_RES(STR_DELIM)), + sAuthTypeStr( SW_RES(ST_AUTHTYPE)), + + sNoCharStyle( SW_RES(STR_NO_CHAR_STYLE)), + sNoCharSortKey( SW_RES(STR_NOSORTKEY )), + m_pCurrentForm(0), + bInLevelHdl(sal_False) +{ + aEditStylePB.SetAccessibleRelationMemberOf(&aEntryFL); + aHyperLinkPB.SetAccessibleRelationMemberOf(&aEntryFL); + aPageNoPB.SetAccessibleRelationMemberOf(&aEntryFL); + aTabPB.SetAccessibleRelationMemberOf(&aEntryFL); + aEntryPB.SetAccessibleRelationMemberOf(&aEntryFL); + aEntryNoPB.SetAccessibleRelationMemberOf(&aEntryFL); + aAllLevelsPB.SetAccessibleRelationMemberOf(&aEntryFL); + aTokenWIN.SetAccessibleRelationMemberOf(&aEntryFL); + aTokenWIN.SetAccessibleRelationLabeledBy(&aTokenFT); + + Image aSortUpHC(SW_RES(IMG_SORTUP_HC )); + aFirstSortUpRB.SetModeRadioImage(aSortUpHC,BMP_COLOR_HIGHCONTRAST); + aSecondSortUpRB.SetModeRadioImage(aSortUpHC,BMP_COLOR_HIGHCONTRAST); + aThirdSortUpRB.SetModeRadioImage(aSortUpHC,BMP_COLOR_HIGHCONTRAST); + + Image aSortDownHC(SW_RES(IMG_SORTDOWN_HC )); + aFirstSortDownRB.SetModeRadioImage(aSortDownHC,BMP_COLOR_HIGHCONTRAST); + aSecondSortDownRB.SetModeRadioImage(aSortDownHC,BMP_COLOR_HIGHCONTRAST); + aThirdSortDownRB.SetModeRadioImage(aSortDownHC,BMP_COLOR_HIGHCONTRAST); + FreeResource(); + + sLevelStr = aLevelFT.GetText(); + aLevelLB.SetStyle( aLevelLB.GetStyle() | WB_HSCROLL ); + aLevelLB.SetSpaceBetweenEntries(0); + aLevelLB.SetSelectionMode( SINGLE_SELECTION ); + aLevelLB.SetHighlightRange(); // select full width + aLevelLB.SetHelpId(HID_INSERT_INDEX_ENTRY_LEVEL_LB); + aLevelLB.Show(); + + aLastTOXType.eType = (TOXTypes)USHRT_MAX; + aLastTOXType.nIndex = 0; + //aLevelGBSize = aLevelGB.GetSizePixel(); + aLevelFLSize = aLevelFT.GetSizePixel(); + + SetExchangeSupport(); + aEntryNoPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); + aEntryPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); + aChapterInfoPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); + aPageNoPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); + aTabPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); + aHyperLinkPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); + aEditStylePB.SetClickHdl(LINK(this, SwTOXEntryTabPage, EditStyleHdl)); + aLevelLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, LevelHdl)); + aTokenWIN.SetButtonSelectedHdl(LINK(this, SwTOXEntryTabPage, TokenSelectedHdl)); + aTokenWIN.SetModifyHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); + aCharStyleLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, StyleSelectHdl)); + aCharStyleLB.InsertEntry(sNoCharStyle); + aChapterEntryLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, ChapterInfoHdl)); + aEntryOutlineLevelNF.SetModifyHdl(LINK(this, SwTOXEntryTabPage, ChapterInfoOutlineHdl)); + aNumberFormatLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, NumberFormatHdl)); + + aTabPosMF.SetModifyHdl(LINK(this, SwTOXEntryTabPage, TabPosHdl)); + aFillCharCB.SetModifyHdl(LINK(this, SwTOXEntryTabPage, FillCharHdl)); + aAutoRightCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, AutoRightHdl)); + aAuthInsertPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl)); + aAuthRemovePB.SetClickHdl(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl)); + aSortDocPosRB.SetClickHdl(LINK(this, SwTOXEntryTabPage, SortKeyHdl)); + aSortContentRB.SetClickHdl(LINK(this, SwTOXEntryTabPage, SortKeyHdl)); + aAllLevelsPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, AllLevelsHdl)); + + aAlphaDelimCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); + aCommaSeparatedCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); + aRelToStyleCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); + + FieldUnit aMetric = ::GetDfltMetric(sal_False); + SetMetric(aTabPosMF, aMetric); + + aSortDocPosRB.Check(); + + aFillCharCB.SetMaxTextLen(1); + aFillCharCB.InsertEntry(' '); + aFillCharCB.InsertEntry('.'); + aFillCharCB.InsertEntry('-'); + aFillCharCB.InsertEntry('_'); + + aButtonPositions[0] = aEntryNoPB.GetPosPixel(); + aButtonPositions[1] = aEntryPB.GetPosPixel(); + aButtonPositions[2] = aChapterInfoPB.GetPosPixel(); + aButtonPositions[3] = aPageNoPB.GetPosPixel(); + aButtonPositions[4] = aTabPB.GetPosPixel(); + + aRelToStylePos = aRelToStyleCB.GetPosPixel(); + aRelToStyleIdxPos = aCommaSeparatedCB.GetPosPixel(); + aRelToStyleIdxPos.Y() += + (aRelToStyleIdxPos.Y() - aAlphaDelimCB.GetPosPixel().Y()); + aEditStylePB.Enable(sal_False); + +//get position for Numbering and other stuff + aChapterEntryFTPosition = aChapterEntryFT.GetPosPixel(); + aEntryOutlineLevelFTPosition = aEntryOutlineLevelFT.GetPosPixel(); + nBiasToEntryPoint = aEntryOutlineLevelNF.GetPosPixel().X() - + aEntryOutlineLevelFT.GetPosPixel().X(); + + //fill the types in + sal_uInt16 i; + for( i = 0; i < AUTH_FIELD_END; i++) + { + String sTmp(SW_RES(STR_AUTH_FIELD_START + i)); + sal_uInt16 nPos = aAuthFieldsLB.InsertEntry(sTmp); + aAuthFieldsLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(i))); + } + sal_uInt16 nPos = aFirstKeyLB.InsertEntry(sNoCharSortKey); + aFirstKeyLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX))); + nPos = aSecondKeyLB.InsertEntry(sNoCharSortKey); + aSecondKeyLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX))); + nPos = aThirdKeyLB.InsertEntry(sNoCharSortKey); + aThirdKeyLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX))); + + for( i = 0; i < AUTH_FIELD_END; i++) + { + String sTmp(aAuthFieldsLB.GetEntry(i)); + void* pEntryData = aAuthFieldsLB.GetEntryData(i); + nPos = aFirstKeyLB.InsertEntry(sTmp); + aFirstKeyLB.SetEntryData(nPos, pEntryData); + nPos = aSecondKeyLB.InsertEntry(sTmp); + aSecondKeyLB.SetEntryData(nPos, pEntryData); + nPos = aThirdKeyLB.InsertEntry(sTmp); + aThirdKeyLB.SetEntryData(nPos, pEntryData); + } + aFirstKeyLB.SelectEntryPos(0); + aSecondKeyLB.SelectEntryPos(0); + aThirdKeyLB.SelectEntryPos(0); +} +/* -----------------30.11.99 13:37------------------- + pVoid is used as signal to change all levels of the example + --------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, ModifyHdl, void*, pVoid) +{ + UpdateDescriptor(); + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + + if(pTOXDlg) + { + sal_uInt16 nCurLevel = static_cast< sal_uInt16 >(aLevelLB.GetModel()->GetAbsPos(aLevelLB.FirstSelected()) + 1); + if(aLastTOXType.eType == TOX_CONTENT && pVoid) + nCurLevel = USHRT_MAX; + pTOXDlg->CreateOrUpdateExample( + pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_ENTRY, nCurLevel); + } + return 0; +} + +/*-- 16.06.99 10:47:33--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwTOXEntryTabPage::~SwTOXEntryTabPage() +{ +} +/*-- 16.06.99 10:47:33--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwTOXEntryTabPage::FillItemSet( SfxItemSet& ) +{ + // nothing to do + return sal_True; +} +/*-- 16.06.99 10:47:34--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwTOXEntryTabPage::Reset( const SfxItemSet& ) +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); + m_pCurrentForm = pTOXDlg->GetForm(aCurType); + if(TOX_INDEX == aCurType.eType) + { + SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType); + String sMainEntryCharStyle = rDesc.GetMainEntryCharStyle(); + if(sMainEntryCharStyle.Len()) + { + if( LISTBOX_ENTRY_NOTFOUND == + aMainEntryStyleLB.GetEntryPos(sMainEntryCharStyle)) + aMainEntryStyleLB.InsertEntry( + sMainEntryCharStyle); + aMainEntryStyleLB.SelectEntry(sMainEntryCharStyle); + } + else + aMainEntryStyleLB.SelectEntry(sNoCharStyle); + aAlphaDelimCB.Check( 0 != (rDesc.GetIndexOptions() & nsSwTOIOptions::TOI_ALPHA_DELIMITTER) ); + } + aRelToStyleCB.Check(m_pCurrentForm->IsRelTabPos()); + aCommaSeparatedCB.Check(m_pCurrentForm->IsCommaSeparated()); +} +/*-- 16.06.99 10:47:34--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void lcl_ChgWidth(Window& rWin, long nDiff) +{ + Size aTempSz(rWin.GetSizePixel()); + aTempSz.Width() += nDiff; + rWin.SetSizePixel(aTempSz); +} +/* ---------------------------------------------------------------------- + + -----------------------------------------------------------------------*/ +void lcl_ChgXPos(Window& rWin, long nDiff) +{ + Point aTempPos(rWin.GetPosPixel()); + aTempPos.X() += nDiff; + rWin.SetPosPixel(aTempPos); +} +/* ---------------------------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwTOXEntryTabPage::ActivatePage( const SfxItemSet& /*rSet*/) +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); + + m_pCurrentForm = pTOXDlg->GetForm(aCurType); + if( !( aLastTOXType == aCurType )) + { + sal_Bool bToxIsAuthorities = TOX_AUTHORITIES == aCurType.eType; + sal_Bool bToxIsIndex = TOX_INDEX == aCurType.eType; + sal_Bool bToxIsContent = TOX_CONTENT == aCurType.eType; + + aLevelLB.Clear(); + for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++) + { + if(bToxIsAuthorities) + aLevelLB.InsertEntry( SwAuthorityFieldType::GetAuthTypeName( + (ToxAuthorityType) (i - 1)) ); + else if( bToxIsIndex ) + { + if(i == 1) + aLevelLB.InsertEntry( sDelimStr ); + else + aLevelLB.InsertEntry( String::CreateFromInt32(i - 1) ); + } + else + aLevelLB.InsertEntry(String::CreateFromInt32(i)); + } + if(bToxIsAuthorities) + { + // + SwWrtShell& rSh = pTOXDlg->GetWrtShell(); + const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) + rSh.GetFldType(RES_AUTHORITY, aEmptyStr); + if(pFType) + { + if(pFType->IsSortByDocument()) + aSortDocPosRB.Check(); + else + { + aSortContentRB.Check(); + sal_uInt16 nKeyCount = pFType->GetSortKeyCount(); + if(0 < nKeyCount) + { + const SwTOXSortKey* pKey = pFType->GetSortKey(0); + aFirstKeyLB.SelectEntryPos( + aFirstKeyLB.GetEntryPos((void*)(sal_uInt32)pKey->eField)); + aFirstSortUpRB.Check(pKey->bSortAscending); + aFirstSortDownRB.Check(!pKey->bSortAscending); + } + if(1 < nKeyCount) + { + const SwTOXSortKey* pKey = pFType->GetSortKey(1); + aSecondKeyLB.SelectEntryPos( + aSecondKeyLB.GetEntryPos((void*)(sal_uInt32)pKey->eField)); + aSecondSortUpRB.Check(pKey->bSortAscending); + aSecondSortDownRB.Check(!pKey->bSortAscending); + } + if(2 < nKeyCount) + { + const SwTOXSortKey* pKey = pFType->GetSortKey(2); + aThirdKeyLB.SelectEntryPos( + aThirdKeyLB.GetEntryPos((void*)(sal_uInt32)pKey->eField)); + aThirdSortUpRB.Check(pKey->bSortAscending); + aThirdSortDownRB.Check(!pKey->bSortAscending); + } + } + } + SortKeyHdl(aSortDocPosRB.IsChecked() ? &aSortDocPosRB : &aSortContentRB); + aLevelFT.SetText(sAuthTypeStr); + } + else + aLevelFT.SetText(sLevelStr); + + long nDiff = 0; + if( bToxIsAuthorities ? aLevelFT.GetSizePixel() == aLevelFLSize + : aLevelFT.GetSizePixel() != aLevelFLSize ) + { + nDiff = aLevelFLSize.Width(); + if( !bToxIsAuthorities ) + nDiff *= -1; + } + + if(nDiff) + { +// lcl_ChgWidth(aLevelFL, nDiff); + lcl_ChgWidth(aLevelFT, nDiff); + lcl_ChgWidth(aLevelLB, nDiff); + lcl_ChgXPos(aCharStyleFT, nDiff); + lcl_ChgXPos(aCharStyleLB, nDiff); + lcl_ChgWidth(aCharStyleLB, -nDiff); + // lcl_ChgXPos(aEditStylePB, -nDiff); + lcl_ChgXPos(aFillCharFT, nDiff); + lcl_ChgXPos(aFillCharCB, nDiff); + lcl_ChgXPos(aTabPosFT, nDiff); + lcl_ChgXPos(aTabPosMF, nDiff); + lcl_ChgXPos(aAutoRightCB, nDiff); + lcl_ChgXPos(aAuthFieldsLB, nDiff); + lcl_ChgXPos(aAuthInsertPB, nDiff); + lcl_ChgXPos(aAuthRemovePB, nDiff); + lcl_ChgXPos(aTokenFT, nDiff); + lcl_ChgXPos(aTokenWIN, nDiff); + lcl_ChgWidth(aTokenWIN, -nDiff); + lcl_ChgXPos(aSortDocPosRB, nDiff); + lcl_ChgXPos(aSortContentRB, nDiff); + lcl_ChgXPos(aFormatFL, nDiff); + lcl_ChgWidth(aFormatFL, -nDiff); + lcl_ChgXPos(aSortingFL, nDiff); + lcl_ChgWidth(aSortingFL, -nDiff); + lcl_ChgXPos(aEntryFL, nDiff); + lcl_ChgWidth(aEntryFL, -nDiff); + + lcl_ChgXPos(aFirstKeyFT, nDiff); + lcl_ChgXPos(aFirstKeyLB, nDiff); + lcl_ChgXPos(aSecondKeyFT, nDiff); + lcl_ChgXPos(aSecondKeyLB, nDiff); + lcl_ChgXPos(aThirdKeyFT, nDiff); + lcl_ChgXPos(aThirdKeyLB, nDiff); + lcl_ChgXPos(aSortKeyFL, nDiff); + + lcl_ChgWidth(aFirstKeyLB, -nDiff); + lcl_ChgWidth(aSecondKeyLB, -nDiff); + lcl_ChgWidth(aThirdKeyLB, -nDiff); + lcl_ChgWidth(aSortKeyFL, -nDiff); + } + Link aLink = aLevelLB.GetSelectHdl(); + aLevelLB.SetSelectHdl(Link()); + aLevelLB.Select( aLevelLB.GetEntry( bToxIsIndex ? 1 : 0 ) ); + aLevelLB.SetSelectHdl(aLink); + + // sort token buttons + aEntryNoPB.SetPosPixel(aButtonPositions[0]); + aEntryPB.SetPosPixel(aButtonPositions[ bToxIsContent ? 1 : 0]); + aChapterInfoPB.SetPosPixel(aButtonPositions[2]); + aPageNoPB.SetPosPixel(aButtonPositions[3]); + sal_uInt16 nBtPos = 1; + if( bToxIsContent ) + nBtPos = 2; + else if( bToxIsAuthorities ) + nBtPos = 4; + aTabPB.SetPosPixel(aButtonPositions[nBtPos]); + aHyperLinkPB.SetPosPixel(aButtonPositions[4]); + + //show or hide controls + aEntryNoPB.Show( bToxIsContent ); + aHyperLinkPB.Show( bToxIsContent ); + aRelToStyleCB.Show( !bToxIsAuthorities ); + aChapterInfoPB.Show( !bToxIsContent && !bToxIsAuthorities); + aEntryPB.Show( !bToxIsAuthorities ); + aPageNoPB.Show( !bToxIsAuthorities ); + aAuthFieldsLB.Show( bToxIsAuthorities ); + aAuthInsertPB.Show( bToxIsAuthorities ); + aAuthRemovePB.Show( bToxIsAuthorities ); + aFormatFL.Show( !bToxIsAuthorities ); + aSortDocPosRB.Show( bToxIsAuthorities ); + aSortContentRB.Show( bToxIsAuthorities ); + aSortingFL.Show( bToxIsAuthorities ); + aFirstKeyFT.Show( bToxIsAuthorities ); + aFirstKeyLB.Show( bToxIsAuthorities ); + aSecondKeyFT.Show( bToxIsAuthorities ); + aSecondKeyLB.Show( bToxIsAuthorities ); + aThirdKeyFT.Show( bToxIsAuthorities ); + aThirdKeyLB.Show( bToxIsAuthorities ); + aSortKeyFL.Show( bToxIsAuthorities ); + aFirstSortUpRB.Show( bToxIsAuthorities ); + aFirstSortDownRB.Show( bToxIsAuthorities ); + aSecondSortUpRB.Show( bToxIsAuthorities ); + aSecondSortDownRB.Show( bToxIsAuthorities ); + aThirdSortUpRB.Show( bToxIsAuthorities ); + aThirdSortDownRB.Show( bToxIsAuthorities ); + + aRelToStyleCB.SetPosPixel( bToxIsIndex ? aRelToStyleIdxPos + : aRelToStylePos ); + +// aRecalcTabCB.Show( aCurType.eType == TOX_CONTENT); + + aMainEntryStyleFT.Show( bToxIsIndex ); + aMainEntryStyleLB.Show( bToxIsIndex ); + aAlphaDelimCB.Show( bToxIsIndex ); + aCommaSeparatedCB.Show( bToxIsIndex ); + } + aLastTOXType = aCurType; + + //invalidate PatternWindow + aTokenWIN.SetInvalid(); + LevelHdl(&aLevelLB); +} +/* -----------------30.11.99 15:04------------------- + + --------------------------------------------------*/ +void SwTOXEntryTabPage::UpdateDescriptor() +{ + WriteBackLevel(); + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aLastTOXType); + if(TOX_INDEX == aLastTOXType.eType) + { + String sTemp(aMainEntryStyleLB.GetSelectEntry()); + rDesc.SetMainEntryCharStyle(sNoCharStyle == sTemp ? aEmptyStr : sTemp); + sal_uInt16 nIdxOptions = rDesc.GetIndexOptions() & ~nsSwTOIOptions::TOI_ALPHA_DELIMITTER; + if(aAlphaDelimCB.IsChecked()) + nIdxOptions |= nsSwTOIOptions::TOI_ALPHA_DELIMITTER; + rDesc.SetIndexOptions(nIdxOptions); + } + else if(TOX_AUTHORITIES == aLastTOXType.eType) + { + rDesc.SetSortByDocument(aSortDocPosRB.IsChecked()); + SwTOXSortKey aKey1, aKey2, aKey3; + aKey1.eField = (ToxAuthorityField)(sal_uIntPtr)aFirstKeyLB.GetEntryData( + aFirstKeyLB.GetSelectEntryPos()); + aKey1.bSortAscending = aFirstSortUpRB.IsChecked(); + aKey2.eField = (ToxAuthorityField)(sal_uIntPtr)aSecondKeyLB.GetEntryData( + aSecondKeyLB.GetSelectEntryPos()); + aKey2.bSortAscending = aSecondSortUpRB.IsChecked(); + aKey3.eField = (ToxAuthorityField)(sal_uIntPtr)aThirdKeyLB.GetEntryData( + aThirdKeyLB.GetSelectEntryPos()); + aKey3.bSortAscending = aThirdSortUpRB.IsChecked(); + + + rDesc.SetSortKeys(aKey1, aKey2, aKey3); + } + SwForm* pCurrentForm = pTOXDlg->GetForm(aLastTOXType); + if(aRelToStyleCB.IsVisible()) + { + pCurrentForm->SetRelTabPos(aRelToStyleCB.IsChecked()); + } + if(aCommaSeparatedCB.IsVisible()) + pCurrentForm->SetCommaSeparated(aCommaSeparatedCB.IsChecked()); +} +/*-- 16.06.99 10:47:34--------------------------------------------------- + + -----------------------------------------------------------------------*/ +int SwTOXEntryTabPage::DeactivatePage( SfxItemSet* /*pSet*/) +{ + UpdateDescriptor(); + return LEAVE_PAGE; +} +/*-- 16.06.99 10:47:34--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SfxTabPage* SwTOXEntryTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet) +{ + return new SwTOXEntryTabPage(pParent, rAttrSet); +} +/*-- 16.06.99 10:47:35--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, EditStyleHdl, PushButton*, pBtn) +{ + if( LISTBOX_ENTRY_NOTFOUND != aCharStyleLB.GetSelectEntryPos()) + { + SfxStringItem aStyle(SID_STYLE_EDIT, aCharStyleLB.GetSelectEntry()); + SfxUInt16Item aFamily(SID_STYLE_FAMILY, SFX_STYLE_FAMILY_CHAR); + // TODO: WrtShell? +// SwPtrItem aShell(FN_PARAM_WRTSHELL, pWrtShell); + Window* pDefDlgParent = Application::GetDefDialogParent(); + Application::SetDefDialogParent( pBtn ); + ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(). + GetView().GetViewFrame()->GetDispatcher()->Execute( + SID_STYLE_EDIT, SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_MODAL, + &aStyle, &aFamily/*, &aShell*/, 0L); + Application::SetDefDialogParent( pDefDlgParent ); + } + return 0; +} +/* -----------------04.10.99 11:34------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, RemoveInsertAuthHdl, PushButton*, pButton) +{ + sal_Bool bInsert = pButton == &aAuthInsertPB; + if(bInsert) + { + sal_uInt16 nSelPos = aAuthFieldsLB.GetSelectEntryPos(); + String sToInsert(aAuthFieldsLB.GetSelectEntry()); + SwFormToken aInsert(TOKEN_AUTHORITY); + aInsert.nAuthorityField = (sal_uInt16)(sal_uIntPtr)aAuthFieldsLB.GetEntryData(nSelPos); + aTokenWIN.InsertAtSelection(String::CreateFromAscii( + SwForm::aFormAuth), aInsert); + aAuthFieldsLB.RemoveEntry(sToInsert); + aAuthFieldsLB.SelectEntryPos( nSelPos ? nSelPos - 1 : 0); + } + else + { + Control* pCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(WINDOW_EDIT != pCtrl->GetType(), "Remove should be disabled"); + if( WINDOW_EDIT != pCtrl->GetType() ) + { + //fill it into the ListBox + const SwFormToken& rToken = ((SwTOXButton*)pCtrl)->GetFormToken(); + PreTokenButtonRemoved(rToken); + aTokenWIN.RemoveControl((SwTOXButton*)pCtrl); + } + } + ModifyHdl(0); + return 0; +} +/* -----------------------------17.01.00 13:44-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwTOXEntryTabPage::PreTokenButtonRemoved(const SwFormToken& rToken) +{ + //fill it into the ListBox + sal_uInt32 nData = rToken.nAuthorityField; + String sTemp(SW_RES(STR_AUTH_FIELD_START + nData)); + sal_uInt16 nPos = aAuthFieldsLB.InsertEntry(sTemp); + aAuthFieldsLB.SetEntryData(nPos, (void*)(nData)); +} +/*-- 16.06.99 10:47:35--------------------------------------------------- + +This function inizializes the default value in the Token +put here the UI dependent initializations + -----------------------------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, InsertTokenHdl, PushButton*, pBtn) +{ + String sText; + FormTokenType eTokenType = TOKEN_ENTRY_NO; + String sCharStyle; + sal_uInt16 nChapterFormat = CF_NUMBER; // i89791 + if(pBtn == &aEntryNoPB) + { + sText.AssignAscii(SwForm::aFormEntryNum); + eTokenType = TOKEN_ENTRY_NO; + } + else if(pBtn == &aEntryPB) + { + if( TOX_CONTENT == m_pCurrentForm->GetTOXType() ) + { + sText.AssignAscii( SwForm::aFormEntryTxt ); + eTokenType = TOKEN_ENTRY_TEXT; + } + else + { + sText.AssignAscii( SwForm::aFormEntry); + eTokenType = TOKEN_ENTRY; + } + } + else if(pBtn == &aChapterInfoPB) + { + sText.AssignAscii( SwForm::aFormChapterMark); + eTokenType = TOKEN_CHAPTER_INFO; + nChapterFormat = CF_NUM_NOPREPST_TITLE; // i89791 + } + else if(pBtn == &aPageNoPB) + { + sText.AssignAscii(SwForm::aFormPageNums); + eTokenType = TOKEN_PAGE_NUMS; + } + else if(pBtn == &aHyperLinkPB) + { + sText.AssignAscii(SwForm::aFormLinkStt); + eTokenType = TOKEN_LINK_START; + sCharStyle = String(SW_RES(STR_POOLCHR_INET_NORMAL)); + } + else if(pBtn == &aTabPB) + { + sText.AssignAscii(SwForm::aFormTab); + eTokenType = TOKEN_TAB_STOP; + } + SwFormToken aInsert(eTokenType); + aInsert.sCharStyleName = sCharStyle; + aInsert.nTabStopPosition = 0; + aInsert.nChapterFormat = nChapterFormat; // i89791 + aTokenWIN.InsertAtSelection(sText, aInsert); + ModifyHdl(0); + return 0; +} +/* -----------------------------14.01.00 11:53-------------------------------- + + ---------------------------------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, AllLevelsHdl, PushButton*, EMPTYARG) +{ + //get current level + //write it into all levels + if(aTokenWIN.IsValid()) + { + String sNewToken = aTokenWIN.GetPattern(); + for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++) + m_pCurrentForm->SetPattern(i, sNewToken); + // + ModifyHdl(this); + } + return 0; +} + +/* -----------------02.12.99 12:40------------------- + + --------------------------------------------------*/ +void SwTOXEntryTabPage::WriteBackLevel() +{ + if(aTokenWIN.IsValid()) + { + String sNewToken = aTokenWIN.GetPattern(); + sal_uInt16 nLastLevel = aTokenWIN.GetLastLevel(); + if(nLastLevel != USHRT_MAX) + m_pCurrentForm->SetPattern(nLastLevel + 1, sNewToken ); + } +} +/*-- 16.06.99 10:47:35--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, LevelHdl, SvTreeListBox*, pBox) +{ + if(bInLevelHdl) + return 0; + bInLevelHdl = sal_True; + WriteBackLevel(); + + sal_uInt16 nLevel = static_cast< sal_uInt16 >(pBox->GetModel()->GetAbsPos(pBox->FirstSelected())); + aTokenWIN.SetForm(*m_pCurrentForm, nLevel); + if(TOX_AUTHORITIES == m_pCurrentForm->GetTOXType()) + { + //fill the types in + aAuthFieldsLB.Clear(); + for( sal_uInt32 i = 0; i < AUTH_FIELD_END; i++) + { + String sTmp(SW_RES(STR_AUTH_FIELD_START + i)); + sal_uInt16 nPos = aAuthFieldsLB.InsertEntry(sTmp); + aAuthFieldsLB.SetEntryData(nPos, (void*)(i)); + } + + // #i21237# + SwFormTokens aPattern = m_pCurrentForm->GetPattern(nLevel + 1); + SwFormTokens::iterator aIt = aPattern.begin();; + + while(aIt != aPattern.end()) + { + SwFormToken aToken = *aIt; // #i21237# + if(TOKEN_AUTHORITY == aToken.eTokenType) + { + sal_uInt32 nSearch = aToken.nAuthorityField; + sal_uInt16 nLstBoxPos = aAuthFieldsLB.GetEntryPos( (void*) nSearch ); + DBG_ASSERT(LISTBOX_ENTRY_NOTFOUND != nLstBoxPos, "Entry not found?"); + aAuthFieldsLB.RemoveEntry(nLstBoxPos); + } + + aIt++; // #i21237# + } + aAuthFieldsLB.SelectEntryPos(0); + } + bInLevelHdl = sal_False; + pBox->GrabFocus(); + return 0; +} +/* -----------------20.10.99 13:16------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, SortKeyHdl, RadioButton*, pButton) +{ + sal_Bool bEnable = &aSortContentRB == pButton; + aFirstKeyFT.Enable(bEnable); + aFirstKeyLB.Enable(bEnable); + aSecondKeyFT.Enable(bEnable); + aSecondKeyLB.Enable(bEnable); + aThirdKeyFT.Enable(bEnable); + aThirdKeyLB.Enable(bEnable); + aSortKeyFL.Enable(bEnable); + aFirstSortUpRB.Enable(bEnable); + aFirstSortDownRB.Enable(bEnable); + aSecondSortUpRB.Enable(bEnable); + aSecondSortDownRB.Enable(bEnable); + aThirdSortUpRB.Enable(bEnable); + aThirdSortDownRB.Enable(bEnable); + return 0; +} +/* -----------------01.07.99 12:21------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, TokenSelectedHdl, SwFormToken*, pToken) +{ + if(pToken->sCharStyleName.Len()) + aCharStyleLB.SelectEntry(pToken->sCharStyleName); + else + aCharStyleLB.SelectEntry(sNoCharStyle); + //StyleSelectHdl(&aCharStyleLB); + + String sEntry = aCharStyleLB.GetSelectEntry(); + aEditStylePB.Enable(sEntry != sNoCharStyle); + + if(pToken->eTokenType == TOKEN_CHAPTER_INFO) + { +//---> i89791 + switch(pToken->nChapterFormat) + { + default: + aChapterEntryLB.SetNoSelection();//to alert the user + break; + case CF_NUM_NOPREPST_TITLE: + aChapterEntryLB.SelectEntryPos(0); + break; + case CF_TITLE: + aChapterEntryLB.SelectEntryPos(1); + break; + case CF_NUMBER_NOPREPST: + aChapterEntryLB.SelectEntryPos(2); + break; + } +//<--- +//i53420 +//move into position the fixed text +// aEntryOutlineLevelFT.SetPosPixel( aEntryOutlineLevelFTPosition ); +// // then the entry +// Point aPoint; +// aPoint.Y() = aEntryOutlineLevelFTPosition.Y(); +// aPoint.X() = aEntryOutlineLevelFTPosition.X() + nBiasToEntryPoint; +// aEntryOutlineLevelNF.SetPosPixel( aPoint ); + + aEntryOutlineLevelNF.SetValue(pToken->nOutlineLevel); + } + +//i53420 + if(pToken->eTokenType == TOKEN_ENTRY_NO) + { +//move into position the fixed text +// aEntryOutlineLevelFT.SetPosPixel( aChapterEntryFTPosition ); +// // then the entry +// Point aPoint; +// aPoint.Y() = aChapterEntryFTPosition.Y(); +// aPoint.X() = aChapterEntryFTPosition.X() + nBiasToEntryPoint; +// aEntryOutlineLevelNF.SetPosPixel( aPoint ); + + aEntryOutlineLevelNF.SetValue(pToken->nOutlineLevel); + sal_uInt16 nFormat = 0; + if( pToken->nChapterFormat == CF_NUM_NOPREPST_TITLE ) + nFormat = 1; + aNumberFormatLB.SelectEntryPos(nFormat); + } + + sal_Bool bTabStop = TOKEN_TAB_STOP == pToken->eTokenType; + aFillCharFT.Show(bTabStop); + aFillCharCB.Show(bTabStop); + aTabPosFT.Show(bTabStop); + aTabPosMF.Show(bTabStop); + aAutoRightCB.Show(bTabStop); + aAutoRightCB.Enable(bTabStop); + if(bTabStop) + { + aTabPosMF.SetValue(aTabPosMF.Normalize(pToken->nTabStopPosition), FUNIT_TWIP); + aAutoRightCB.Check(SVX_TAB_ADJUST_END == pToken->eTabAlign); + aFillCharCB.SetText(pToken->cTabFillChar); + aTabPosFT.Enable(!aAutoRightCB.IsChecked()); + aTabPosMF.Enable(!aAutoRightCB.IsChecked()); + } + else + { + aTabPosMF.Enable(sal_False); + } + + sal_Bool bIsChapterInfo = pToken->eTokenType == TOKEN_CHAPTER_INFO; + sal_Bool bIsEntryNumber = pToken->eTokenType == TOKEN_ENTRY_NO; + aChapterEntryFT.Show( bIsChapterInfo ); + aChapterEntryLB.Show( bIsChapterInfo ); + aEntryOutlineLevelFT.Show( bIsChapterInfo || bIsEntryNumber ); + aEntryOutlineLevelNF.Show( bIsChapterInfo || bIsEntryNumber ); + aNumberFormatFT.Show( bIsEntryNumber ); + aNumberFormatLB.Show( bIsEntryNumber ); + + + //now enable the visible buttons + //- inserting the same type of control is not allowed + //- some types of controls can only appear once (EntryText EntryNumber) + + if(aEntryNoPB.IsVisible()) + { + aEntryNoPB.Enable(TOKEN_ENTRY_NO != pToken->eTokenType ); + } + if(aEntryPB.IsVisible()) + { + aEntryPB.Enable(TOKEN_ENTRY_TEXT != pToken->eTokenType && + !aTokenWIN.Contains(TOKEN_ENTRY_TEXT) + && !aTokenWIN.Contains(TOKEN_ENTRY)); + } + + if(aChapterInfoPB.IsVisible()) + { + aChapterInfoPB.Enable(TOKEN_CHAPTER_INFO != pToken->eTokenType); + } + if(aPageNoPB.IsVisible()) + { + aPageNoPB.Enable(TOKEN_PAGE_NUMS != pToken->eTokenType && + !aTokenWIN.Contains(TOKEN_PAGE_NUMS)); + } + if(aTabPB.IsVisible()) + { + aTabPB.Enable(!bTabStop); + } + if(aHyperLinkPB.IsVisible()) + { + aHyperLinkPB.Enable(TOKEN_LINK_START != pToken->eTokenType && + TOKEN_LINK_END != pToken->eTokenType); + } + //table of authorities + if(aAuthInsertPB.IsVisible()) + { + sal_Bool bText = TOKEN_TEXT == pToken->eTokenType; + aAuthInsertPB.Enable(bText && aAuthFieldsLB.GetSelectEntry().Len()); + aAuthRemovePB.Enable(!bText); + } + + return 0; +} +/* -----------------01.07.99 12:36------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, StyleSelectHdl, ListBox*, pBox) +{ + String sEntry = pBox->GetSelectEntry(); + sal_uInt16 nId = (sal_uInt16)(long)pBox->GetEntryData(pBox->GetSelectEntryPos()); + aEditStylePB.Enable(sEntry != sNoCharStyle); + if(sEntry == sNoCharStyle) + sEntry.Erase(); + Control* pCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(pCtrl, "no active control?"); + if(pCtrl) + { + if(WINDOW_EDIT == pCtrl->GetType()) + ((SwTOXEdit*)pCtrl)->SetCharStyleName(sEntry, nId); + else + ((SwTOXButton*)pCtrl)->SetCharStyleName(sEntry, nId); + + } + ModifyHdl(0); + return 0; +} +/* -----------------------------11.01.00 12:54-------------------------------- + + ---------------------------------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, ChapterInfoHdl, ListBox*, pBox) +{ + sal_uInt16 nPos = pBox->GetSelectEntryPos(); + if(LISTBOX_ENTRY_NOTFOUND != nPos) + { + Control* pCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(pCtrl, "no active control?"); + if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) + ((SwTOXButton*)pCtrl)->SetChapterInfo(nPos); + + ModifyHdl(0); + } + return 0; +} + +IMPL_LINK(SwTOXEntryTabPage, ChapterInfoOutlineHdl, NumericField*, pField) +{ + const sal_uInt16 nLevel = static_cast<sal_uInt8>(pField->GetValue()); + + Control* pCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(pCtrl, "no active control?"); + if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) + ((SwTOXButton*)pCtrl)->SetOutlineLevel(nLevel); + + ModifyHdl(0); + return 0; +} + +IMPL_LINK(SwTOXEntryTabPage, NumberFormatHdl, ListBox*, pBox) +{ + const sal_uInt16 nPos = pBox->GetSelectEntryPos(); + + if(LISTBOX_ENTRY_NOTFOUND != nPos) + { + Control* pCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(pCtrl, "no active control?"); + if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) + { + ((SwTOXButton*)pCtrl)->SetEntryNumberFormat(nPos);//i89791 + } + ModifyHdl(0); + } + return 0; +} + +/* -----------------19.08.99 15:37------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, TabPosHdl, MetricField*, pField) +{ + Control* pCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(pCtrl && WINDOW_EDIT != pCtrl->GetType() && + TOKEN_TAB_STOP == ((SwTOXButton*)pCtrl)->GetFormToken().eTokenType, + "no active style::TabStop control?"); + if( pCtrl && WINDOW_EDIT != pCtrl->GetType() ) + { + ((SwTOXButton*)pCtrl)->SetTabPosition( static_cast< SwTwips >( + pField->Denormalize( pField->GetValue( FUNIT_TWIP )))); + } + ModifyHdl(0); + return 0; +} +/* -----------------09.09.99 15:37------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, FillCharHdl, ComboBox*, pBox) +{ + Control* pCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(pCtrl && WINDOW_EDIT != pCtrl->GetType() && + TOKEN_TAB_STOP == ((SwTOXButton*)pCtrl)->GetFormToken().eTokenType, + "no active style::TabStop control?"); + if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) + { + sal_Unicode cSet; + if( pBox->GetText().Len() ) + cSet = pBox->GetText().GetChar(0); + else + cSet = ' '; + ((SwTOXButton*)pCtrl)->SetFillChar( cSet ); + } + ModifyHdl(0); + return 0; +} + +/*-- 16.06.99 10:47:36--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwTOXEntryTabPage, AutoRightHdl, CheckBox*, pBox) +{ + //the most right style::TabStop is usually right aligned + Control* pCurCtrl = aTokenWIN.GetActiveControl(); + DBG_ASSERT(WINDOW_EDIT != pCurCtrl->GetType() && + ((SwTOXButton*)pCurCtrl)->GetFormToken().eTokenType == TOKEN_TAB_STOP, + "no style::TabStop selected!"); + + const SwFormToken& rToken = ((SwTOXButton*)pCurCtrl)->GetFormToken(); + sal_Bool bChecked = pBox->IsChecked(); + if(rToken.eTokenType == TOKEN_TAB_STOP) + ((SwTOXButton*)pCurCtrl)->SetTabAlign( + bChecked ? SVX_TAB_ADJUST_END : SVX_TAB_ADJUST_LEFT); + aTabPosFT.Enable(!bChecked); + aTabPosMF.Enable(!bChecked); + ModifyHdl(0); + return 0; +} +/* -----------------16.06.99 11:00------------------- + + --------------------------------------------------*/ +void SwTOXEntryTabPage::SetWrtShell(SwWrtShell& rSh) +{ + SwDocShell* pDocSh = rSh.GetView().GetDocShell(); + ::FillCharStyleListBox(aCharStyleLB, pDocSh, sal_True, sal_True); + const String sDefault(SW_RES(STR_POOLCOLL_STANDARD)); + for(sal_uInt16 i = 0; i < aCharStyleLB.GetEntryCount(); i++) + { + String sEntry = aCharStyleLB.GetEntry(i); + if(sDefault != sEntry) + { + aMainEntryStyleLB.InsertEntry( sEntry ); + aMainEntryStyleLB.SetEntryData(i, aCharStyleLB.GetEntryData(i)); + } + } + aMainEntryStyleLB.SelectEntry( SwStyleNameMapper::GetUIName( + RES_POOLCHR_IDX_MAIN_ENTRY, aEmptyStr )); +} +/* -----------------------------23.12.99 14:23-------------------------------- + + ---------------------------------------------------------------------------*/ +String SwTOXEntryTabPage::GetLevelHelp(sal_uInt16 nLevel) const +{ + String sRet; + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); + if( TOX_INDEX == aCurType.eType ) + SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(1 == nLevel ? RES_POOLCOLL_TOX_IDXBREAK + : RES_POOLCOLL_TOX_IDX1 + nLevel-2), sRet ); + + else if( TOX_AUTHORITIES == aCurType.eType ) + { + //wildcard -> show entry text + sRet = '*'; + } + return sRet; +} +/* -----------------16.06.99 15:18------------------- + + --------------------------------------------------*/ + +SwTokenWindow::SwTokenWindow(SwTOXEntryTabPage* pParent, const ResId& rResId) : + Window( pParent, rResId ), + aLeftScrollWin(this, ResId(WIN_LEFT_SCROLL, *rResId.GetResMgr() )), + aCtrlParentWin(this, ResId(WIN_CTRL_PARENT, *rResId.GetResMgr() )), + aRightScrollWin(this, ResId(WIN_RIGHT_SCROLL, *rResId.GetResMgr() )), + pForm(0), + nLevel(0), + bValid(sal_False), + sCharStyle(ResId(STR_CHARSTYLE, *rResId.GetResMgr())), + pActiveCtrl(0), + m_pParent(pParent) +{ + SetStyle(GetStyle()|WB_TABSTOP|WB_DIALOGCONTROL); + SetHelpId(HID_TOKEN_WINDOW); + for(sal_uInt16 i = 0; i < TOKEN_END; i++) + { + sal_uInt16 nTextId = STR_BUTTON_TEXT_START + i; + if( STR_TOKEN_ENTRY_TEXT == nTextId ) + nTextId = STR_TOKEN_ENTRY; + aButtonTexts[i] = String(ResId(nTextId, *rResId.GetResMgr())); + + sal_uInt16 nHelpId = STR_BUTTON_HELP_TEXT_START + i; + if(STR_TOKEN_HELP_ENTRY_TEXT == nHelpId) + nHelpId = STR_TOKEN_HELP_ENTRY; + aButtonHelpTexts[i] = String(ResId(nHelpId, *rResId.GetResMgr())); + } + + FreeResource(); + + Link aLink(LINK(this, SwTokenWindow, ScrollHdl)); + aLeftScrollWin.SetClickHdl(aLink); + aRightScrollWin.SetClickHdl(aLink); +} +/* -----------------01.07.99 12:17------------------- + + --------------------------------------------------*/ +SwTokenWindow::~SwTokenWindow() +{ +// for(sal_uInt16 i = GetItemCount(); i ; i--) +// RemoveItem(i - 1); + + for( sal_uInt32 n = 0; n < aControlList.Count(); ++n ) + { + Control* pControl = aControlList.GetObject( n ); + pControl->SetGetFocusHdl( Link() ); + pControl->SetLoseFocusHdl( Link() ); + } + + for( sal_uLong i = aControlList.Count(); i; ) + { + Control* pControl = aControlList.Remove( --i ); + delete pControl; + } +} +/* -----------------16.06.99 13:56------------------- + + --------------------------------------------------*/ +void SwTokenWindow::SetForm(SwForm& rForm, sal_uInt16 nL) +{ + SetActiveControl(0); + bValid = sal_True; + if(pForm) + { + //apply current level settings to the form + for( sal_uLong i = aControlList.Count(); i; ) + { + Control* pControl = aControlList.Remove( --i ); + delete pControl; + } + } + nLevel = nL; + pForm = &rForm; + //now the display + if(nLevel < MAXLEVEL || rForm.GetTOXType() == TOX_AUTHORITIES) + { + Size aToolBoxSize = GetSizePixel(); + + // #i21237# + SwFormTokens aPattern = pForm->GetPattern(nLevel + 1); + SwFormTokens::iterator aIt = aPattern.begin(); + sal_Bool bLastWasText = sal_False; //assure alternating text - code - text + + Control* pSetActiveControl = 0; + while(aIt != aPattern.end()) // #i21237# + { + SwFormToken aToken(*aIt); // #i21237# + + if(TOKEN_TEXT == aToken.eTokenType) + { + DBG_ASSERT(!bLastWasText, "text following text is invalid"); + Control* pCtrl = InsertItem(aToken.sText, aToken); + bLastWasText = sal_True; + if(!GetActiveControl()) + SetActiveControl(pCtrl); + } + else + { + if( !bLastWasText ) + { + bLastWasText = sal_True; + SwFormToken aTemp(TOKEN_TEXT); + Control* pCtrl = InsertItem(aEmptyStr, aTemp); + if(!pSetActiveControl) + pSetActiveControl = pCtrl; + } + const sal_Char* pTmp = 0; + switch( aToken.eTokenType ) + { + case TOKEN_ENTRY_NO: pTmp = SwForm::aFormEntryNum; break; + case TOKEN_ENTRY_TEXT: pTmp = SwForm::aFormEntryTxt; break; + case TOKEN_ENTRY: pTmp = SwForm::aFormEntry; break; + case TOKEN_TAB_STOP: pTmp = SwForm::aFormTab; break; + case TOKEN_PAGE_NUMS: pTmp = SwForm::aFormPageNums; break; + case TOKEN_CHAPTER_INFO:pTmp = SwForm::aFormChapterMark; break; + case TOKEN_LINK_START: pTmp = SwForm::aFormLinkStt; break; + case TOKEN_LINK_END: pTmp = SwForm::aFormLinkEnd; break; + case TOKEN_AUTHORITY: pTmp = SwForm::aFormAuth; break; + default:; //prevent warning + } + + InsertItem( pTmp ? String::CreateFromAscii(pTmp) + : aEmptyStr, aToken ); + bLastWasText = sal_False; + } + + aIt++; // #i21237# + } + if(!bLastWasText) + { + bLastWasText = sal_True; + SwFormToken aTemp(TOKEN_TEXT); + Control* pCtrl = InsertItem(aEmptyStr, aTemp); + if(!pSetActiveControl) + pSetActiveControl = pCtrl; + } + SetActiveControl(pSetActiveControl); + } + AdjustScrolling(); +} +/* -----------------19.08.99 13:00------------------- + + --------------------------------------------------*/ +void SwTokenWindow::SetActiveControl(Control* pSet) +{ + if( pSet != pActiveCtrl ) + { + pActiveCtrl = pSet; + if( pActiveCtrl ) + { + pActiveCtrl->GrabFocus(); + //it must be a SwTOXEdit + const SwFormToken* pFToken; + if( WINDOW_EDIT == pActiveCtrl->GetType() ) + pFToken = &((SwTOXEdit*)pActiveCtrl)->GetFormToken(); + else + pFToken = &((SwTOXButton*)pActiveCtrl)->GetFormToken(); + + SwFormToken aTemp( *pFToken ); + aButtonSelectedHdl.Call( &aTemp ); + } + } +} + +/* -----------------17.06.99 09:53------------------- + + --------------------------------------------------*/ +Control* SwTokenWindow::InsertItem(const String& rText, const SwFormToken& rToken) +{ + Control* pRet = 0; + Control* pLast = aControlList.Last(); + Size aControlSize(GetOutputSizePixel()); + Point aControlPos; + if( pLast ) + { + aControlSize = pLast->GetSizePixel(); + aControlPos = pLast->GetPosPixel(); + aControlPos.X() += aControlSize.Width(); + } + if(TOKEN_TEXT == rToken.eTokenType) + { + SwTOXEdit* pEdit = new SwTOXEdit(&aCtrlParentWin, this, rToken); + pEdit->SetPosPixel(aControlPos); + aControlList.Insert(pEdit, aControlList.Count()); + pEdit->SetText(rText); + Size aEditSize(aControlSize); + aEditSize.Width() = pEdit->GetTextWidth(rText) + EDIT_MINWIDTH; + pEdit->SetSizePixel(aEditSize); + pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize )); + pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl)); + pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl)); + pEdit->Show(); + pRet = pEdit; + } + else + { + SwTOXButton* pButton = new SwTOXButton(&aCtrlParentWin, this, rToken); + pButton->SetPosPixel(aControlPos); + aControlList.Insert(pButton, aControlList.Count()); + Size aEditSize(aControlSize); + aEditSize.Width() = pButton->GetTextWidth(rText) + 5; +// pButton->SetControlBackground(aCtrlColor); +// pButton->SetControlForeground(aTextColor); + pButton->SetSizePixel(aEditSize); + pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl)); + pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl)); + if(TOKEN_AUTHORITY != rToken.eTokenType) + pButton->SetText(aButtonTexts[rToken.eTokenType]); + else + { + //use the first two chars as symbol + String sTmp(SwAuthorityFieldType::GetAuthFieldName( + (ToxAuthorityField)rToken.nAuthorityField)); + pButton->SetText(sTmp.Copy(0, 2)); + } + pButton->Show(); + pRet = pButton; + } + return pRet; +} +/* -----------------16.07.99 11:50------------------- + + --------------------------------------------------*/ +void SwTokenWindow::InsertAtSelection( + const String& rText, + const SwFormToken& rToken) +{ + DBG_ASSERT(pActiveCtrl, "no active control!"); + if(!pActiveCtrl) + return; + SwFormToken aToInsertToken(rToken); + if(TOKEN_LINK_START == aToInsertToken.eTokenType) + { + //determine if start or end of hyperlink is appropriate + //eventually change a following link start into a link end + // groups of LS LE should be ignored + // <insert> + //LS <insert> + //LE <insert> + //<insert> LS + //<insert> LE + //<insert> + sal_Bool bPreStartLinkFound = sal_False; // + sal_Bool bPreEndLinkFound = sal_False; + + const Control* pControl = aControlList.First(); + const Control* pExchange = 0; + while( pControl && pActiveCtrl != pControl ) + { + if( WINDOW_EDIT != pControl->GetType()) + { + const SwFormToken& rNewToken = + ((SwTOXButton*)pControl)->GetFormToken(); + if( TOKEN_LINK_START == rNewToken.eTokenType ) + { + bPreStartLinkFound = sal_True; + pExchange = 0; + } + else if(TOKEN_LINK_END == rNewToken.eTokenType) + { + if( bPreStartLinkFound ) + bPreStartLinkFound = sal_False; + else + { + bPreEndLinkFound = sal_False; + pExchange = pControl; + } + } + } + pControl = aControlList.Next(); + } + + sal_Bool bPostLinkEndFound = sal_False; + sal_Bool bPostLinkStartFound = sal_False; + if(!bPreStartLinkFound && !bPreEndLinkFound) + while(pControl) + { + if( pControl != pActiveCtrl && + WINDOW_EDIT != pControl->GetType()) + { + const SwFormToken& rNewToken = + ((SwTOXButton*)pControl)->GetFormToken(); + if( TOKEN_LINK_START == rNewToken.eTokenType ) + { + if(bPostLinkStartFound) + break; + bPostLinkStartFound = sal_True; + pExchange = pControl; + } + else if(TOKEN_LINK_END == rNewToken.eTokenType ) + { + if(bPostLinkStartFound) + { + bPostLinkStartFound = sal_False; + pExchange = 0; + } + else + { + bPostLinkEndFound = sal_True; + } + break; + } + } + pControl = aControlList.Next(); + } + + if(bPreStartLinkFound) + { + aToInsertToken.eTokenType = TOKEN_LINK_END; + aToInsertToken.sText = aButtonTexts[TOKEN_LINK_END]; + } + + if(bPostLinkStartFound) + { + DBG_ASSERT(pExchange, "no control to exchange?"); + if(pExchange) + { + ((SwTOXButton*)pExchange)->SetLinkEnd(); + ((SwTOXButton*)pExchange)->SetText(aButtonTexts[TOKEN_LINK_END]); + } + } + + if(bPreEndLinkFound) + { + DBG_ASSERT(pExchange, "no control to exchange?"); + if(pExchange) + { + ((SwTOXButton*)pExchange)->SetLinkStart(); + ((SwTOXButton*)pExchange)->SetText(aButtonTexts[TOKEN_LINK_START]); + } + } + } + + //if the active control is text then insert a new button at the selection + //else replace the button + sal_uInt32 nActivePos = aControlList.GetPos(pActiveCtrl); + sal_uInt32 nInsertPos = nActivePos; + + Size aControlSize(GetOutputSizePixel()); + if( WINDOW_EDIT == pActiveCtrl->GetType()) + { + nInsertPos++; + Selection aSel = ((SwTOXEdit*)pActiveCtrl)->GetSelection(); + aSel.Justify(); + String sEditText = ((SwTOXEdit*)pActiveCtrl)->GetText(); + String sLeft = sEditText.Copy( 0, static_cast< sal_uInt16 >(aSel.A()) ); + String sRight = sEditText.Copy( static_cast< sal_uInt16 >(aSel.B()), + static_cast< sal_uInt16 >(sEditText.Len() - aSel.B())); + + ((SwTOXEdit*)pActiveCtrl)->SetText(sLeft); + ((SwTOXEdit*)pActiveCtrl)->AdjustSize(); + + SwFormToken aTmpToken(TOKEN_TEXT); + SwTOXEdit* pEdit = new SwTOXEdit(&aCtrlParentWin, this, aTmpToken); + aControlList.Insert(pEdit, nActivePos + 1); + pEdit->SetText(sRight); + pEdit->SetSizePixel(aControlSize); + pEdit->AdjustSize(); + pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize )); + pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl)); + pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl)); + pEdit->Show(); + } + else + { + aControlList.Remove(pActiveCtrl); + pActiveCtrl->Hide(); + delete pActiveCtrl; + } + + //now the new button + SwTOXButton* pButton = new SwTOXButton(&aCtrlParentWin, this, aToInsertToken); + aControlList.Insert(pButton, nInsertPos); + pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl)); + pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl)); + if(TOKEN_AUTHORITY != aToInsertToken.eTokenType) + pButton->SetText(aButtonTexts[aToInsertToken.eTokenType]); + else + { + //use the first two chars as symbol + String sTmp(SwAuthorityFieldType::GetAuthFieldName( + (ToxAuthorityField)aToInsertToken.nAuthorityField)); + pButton->SetText(sTmp.Copy(0, 2)); + } + + Size aEditSize(GetOutputSizePixel()); + aEditSize.Width() = pButton->GetTextWidth(rText) + 5; + pButton->SetSizePixel(aEditSize); + pButton->Check(sal_True); + pButton->Show(); + SetActiveControl(pButton); + + AdjustPositions(); +} +/* -----------------19.08.99 12:42------------------- + + --------------------------------------------------*/ +void SwTokenWindow::RemoveControl(SwTOXButton* pDel, sal_Bool bInternalCall ) +{ + if(bInternalCall && TOX_AUTHORITIES == pForm->GetTOXType()) + m_pParent->PreTokenButtonRemoved(pDel->GetFormToken()); + + sal_uInt32 nActivePos = aControlList.GetPos(pDel); + DBG_ASSERT(nActivePos != 0xffffffff, "Control does not exist!"); + // the two neighbours of the box must be merged + // the properties of the right one will be lost + DBG_ASSERT(nActivePos && nActivePos < aControlList.Count() - 1, + "Button at first or last position?"); + aControlList.Seek(nActivePos - 1); + Control* pLeftEdit = aControlList.GetCurObject(); + aControlList.Seek(nActivePos + 1); + Control* pRightEdit = aControlList.GetCurObject(); + String sTemp(((SwTOXEdit*)pLeftEdit)->GetText()); + sTemp += ((SwTOXEdit*)pRightEdit)->GetText(); + ((SwTOXEdit*)pLeftEdit)->SetText(sTemp); + ((SwTOXEdit*)pLeftEdit)->AdjustSize(); + + aControlList.Remove(pRightEdit); + delete pRightEdit; + + aControlList.Remove(pDel); + pActiveCtrl->Hide(); + delete pActiveCtrl; + SetActiveControl(pLeftEdit); + AdjustPositions(); + if(aModifyHdl.IsSet()) + aModifyHdl.Call(0); +} + +/* -----------------16.07.99 12:39------------------- + + --------------------------------------------------*/ +void SwTokenWindow::AdjustPositions() +{ + if(aControlList.Count() > 1) + { + Control* pCtrl = aControlList.First(); + Point aNextPos = pCtrl->GetPosPixel(); + aNextPos.X() += pCtrl->GetSizePixel().Width(); + while(0 != (pCtrl = aControlList.Next())) + { + pCtrl->SetPosPixel(aNextPos); + aNextPos.X() += pCtrl->GetSizePixel().Width(); + } + AdjustScrolling(); + } +}; +/* -----------------------------16.08.00 13:22-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwTokenWindow::MoveControls(long nOffset) +{ + // move the complete list + Control* pCtrl = aControlList.First(); + do + { + Point aPos = pCtrl->GetPosPixel(); + aPos.X() += nOffset; + pCtrl->SetPosPixel(aPos); + }while(0 != (pCtrl = aControlList.Next())); +} +/* -----------------------------14.01.00 13:03-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwTokenWindow::AdjustScrolling() +{ + if(aControlList.Count() > 1) + { + //validate scroll buttons + Control* pLastCtrl = aControlList.Last(); + Control* pFirstCtrl = aControlList.First(); + long nSpace = aCtrlParentWin.GetSizePixel().Width(); + long nWidth = pLastCtrl->GetPosPixel().X() - pFirstCtrl->GetPosPixel().X() + + pLastCtrl->GetSizePixel().Width(); + sal_Bool bEnable = nWidth > nSpace; + //the active control must be visible + if(bEnable && pActiveCtrl) + { + Point aActivePos(pActiveCtrl->GetPosPixel()); + long nMove = 0; + if(aActivePos.X() < 0) + nMove = -aActivePos.X(); + else if((aActivePos.X() + pActiveCtrl->GetSizePixel().Width()) > nSpace) + nMove = -(aActivePos.X() + pActiveCtrl->GetSizePixel().Width() - nSpace); + if(nMove) + MoveControls(nMove); + aLeftScrollWin.Enable(aControlList.First()->GetPosPixel().X() < 0); + Control* pCtrl = aControlList.Last(); + aRightScrollWin.Enable((pCtrl->GetPosPixel().X() + pCtrl->GetSizePixel().Width()) > nSpace); + } + else + { + if(pFirstCtrl) + { + //if the control fits into the space then the first control must be at postion 0 + long nFirstPos = pFirstCtrl->GetPosPixel().X(); + if(nFirstPos != 0) + MoveControls(-nFirstPos); + } + aRightScrollWin.Enable(sal_False); + aLeftScrollWin.Enable(sal_False); + } + } +} +/* -----------------------------14.01.00 13:57-------------------------------- + + ---------------------------------------------------------------------------*/ +IMPL_LINK(SwTokenWindow, ScrollHdl, ImageButton*, pBtn ) +{ + if(aControlList.Count()) + { + const long nSpace = aCtrlParentWin.GetSizePixel().Width(); +#if OSL_DEBUG_LEVEL > 1 + //find all start/end positions and print it + String sMessage(String::CreateFromAscii("Space: ")); + sMessage += String::CreateFromInt32(nSpace); + sMessage += String::CreateFromAscii(" | "); + Control* pDebugCtrl = aControlList.First(); + do + { + long nDebugXPos = pDebugCtrl->GetPosPixel().X(); + long nDebugWidth = pDebugCtrl->GetSizePixel().Width(); + sMessage += String::CreateFromInt32( nDebugXPos ); + sMessage += String::CreateFromAscii(" "); + sMessage += String::CreateFromInt32(nDebugXPos + nDebugWidth); + sMessage += String::CreateFromAscii(" | "); + + }while(0 != (pDebugCtrl = aControlList.Next())); + +#endif + + long nMove = 0; + if(pBtn == &aLeftScrollWin) + { + //find the first completely visible control (left edge visible) + for(sal_uInt16 i = 0; i < aControlList.Count(); i++ ) + { + Control* pCtrl = aControlList.GetObject(i); + long nXPos = pCtrl->GetPosPixel().X(); + if(nXPos >= 0) + { + if(!i) + //move the current control to the left edge + nMove = -nXPos; + else + //move the left neighbor to the start position + nMove = -aControlList.GetObject(i - 1)->GetPosPixel().X(); + break; + } + } + } + else + { + //find the first completely visible control (left edge visible) + for(sal_uLong i = aControlList.Count(); i; i-- ) + { + Control* pCtrl = aControlList.GetObject(i - 1); + long nCtrlWidth = pCtrl->GetSizePixel().Width(); + long nXPos = pCtrl->GetPosPixel().X() + nCtrlWidth; + if(nXPos <= nSpace) + { + if( i < aControlList.Count()) + { + //move the right neighbor to the right edge right aligned + Control* pRight = aControlList.GetObject(i); + nMove = nSpace - pRight->GetPosPixel().X() - pRight->GetSizePixel().Width(); + } + break; + } + } + + //move it left until it's completely visible + } + if(nMove) + { + // move the complete list + Control* pCtrl = aControlList.First(); + do + { + Point aPos = pCtrl->GetPosPixel(); + aPos.X() += nMove; + pCtrl->SetPosPixel(aPos); + }while(0 != (pCtrl = aControlList.Next())); + aLeftScrollWin.Enable(aControlList.First()->GetPosPixel().X() < 0); + pCtrl = aControlList.Last(); + aRightScrollWin.Enable((pCtrl->GetPosPixel().X() + pCtrl->GetSizePixel().Width()) > nSpace); + +#if OSL_DEBUG_LEVEL > 1 + sMessage.AppendAscii("Move: "); + sMessage += String::CreateFromInt32(nMove); + GetParent()->GetParent()->GetParent()->SetText(sMessage); +#endif + } + } + return 0; +} +/* -----------------17.06.99 11:59------------------- + + --------------------------------------------------*/ +String SwTokenWindow::GetPattern() const +{ + String sRet; + const Control* pControl = ((SwTokenWindow*)this)->aControlList.First(); + while(pControl) + { + const SwFormToken& rNewToken = WINDOW_EDIT == pControl->GetType() + ? ((SwTOXEdit*)pControl)->GetFormToken() + : ((SwTOXButton*)pControl)->GetFormToken(); + + //TODO: prevent input of TOX_STYLE_DELIMITER in KeyInput + sRet += rNewToken.GetString(); + + pControl = ((SwTokenWindow*)this)->aControlList.Next(); + } + return sRet; +} +/* -----------------19.08.99 11:27------------------- + Description: Check if a control of the specified + TokenType is already contained in the list + --------------------------------------------------*/ +sal_Bool SwTokenWindow::Contains(FormTokenType eSearchFor) const +{ + sal_Bool bRet = sal_False; + const Control* pControl = ((SwTokenWindow*)this)->aControlList.First(); + while(pControl) + { + const SwFormToken& rNewToken = WINDOW_EDIT == pControl->GetType() + ? ((SwTOXEdit*)pControl)->GetFormToken() + : ((SwTOXButton*)pControl)->GetFormToken(); + + if(eSearchFor == rNewToken.eTokenType) + { + bRet = sal_True; + break; + } + pControl = ((SwTokenWindow*)this)->aControlList.Next(); + } + return bRet; +} +//--------------------------------------------------- +sal_Bool SwTokenWindow::CreateQuickHelp(Control* pCtrl, + const SwFormToken& rToken, + const HelpEvent& rHEvt) +{ + sal_Bool bRet = sal_False; + if( rHEvt.GetMode() & HELPMODE_QUICK ) + { + sal_Bool bBalloon = Help::IsBalloonHelpEnabled(); + String sEntry; + if(bBalloon || rToken.eTokenType != TOKEN_AUTHORITY) + sEntry = (aButtonHelpTexts[rToken.eTokenType]); + if(rToken.eTokenType == TOKEN_AUTHORITY ) + { + sEntry += SwAuthorityFieldType::GetAuthFieldName( + (ToxAuthorityField) rToken.nAuthorityField); + } + + Point aPos = OutputToScreenPixel(pCtrl->GetPosPixel()); + Rectangle aItemRect( aPos, pCtrl->GetSizePixel() ); + if(rToken.eTokenType == TOKEN_TAB_STOP ) + { +// sEntry += '\n'; +// sEntry += rToken.nTabStopPosition; + } + else + { + if(rToken.sCharStyleName.Len()) + { + if(bBalloon) + sEntry += '\n'; + else + sEntry += ' '; + sEntry += sCharStyle; + sEntry += rToken.sCharStyleName; + } + } + if(bBalloon) + { + Help::ShowBalloon( this, aPos, aItemRect, sEntry ); + } + else + Help::ShowQuickHelp( this, aItemRect, sEntry, + QUICKHELP_LEFT|QUICKHELP_VCENTER ); + bRet = sal_True; + } + return bRet; +} +/* -----------------------------14.01.00 12:22-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwTokenWindow::Resize() +{ + Size aCompleteSize(GetOutputSizePixel()); + + Point aRightPos(aRightScrollWin.GetPosPixel()); + Size aRightSize(aRightScrollWin.GetSizePixel()); + + Size aMiddleSize(aCtrlParentWin.GetSizePixel()); + + long nMove = aCompleteSize.Width() - aRightSize.Width() - aRightPos.X(); + + aRightPos.X() += nMove; + aRightScrollWin.SetPosPixel(aRightPos); + aMiddleSize.Width() += nMove; + aCtrlParentWin.SetSizePixel(aMiddleSize); +} + +/* -----------------16.06.99 15:23------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTokenWindow, EditResize, Edit*, pEdit) +{ + ((SwTOXEdit*)pEdit)->AdjustSize(); + AdjustPositions(); + if(aModifyHdl.IsSet()) + aModifyHdl.Call(0); + return 0; +} +/* -----------------16.06.99 15:56------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTokenWindow, NextItemHdl, SwTOXEdit*, pEdit) +{ + sal_uInt16 nPos = (sal_uInt16)aControlList.GetPos(pEdit); + if( (nPos && !pEdit->IsNextControl()) || + (nPos < aControlList.Count() - 1 && pEdit->IsNextControl())) + { + aControlList.Seek(nPos); + Control* pNextPrev = pEdit->IsNextControl() ? aControlList.Next() : aControlList.Prev(); + nPos += pEdit->IsNextControl() ? 1 : -1; + pNextPrev->GrabFocus(); + ((SwTOXButton*)pNextPrev)->Check(); + AdjustScrolling(); + } + return 0; +} +/* -----------------17.06.99 08:58------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTokenWindow, TbxFocusHdl, SwTOXEdit*, pEdit) +{ + for(sal_uInt16 i = 0; i < aControlList.Count(); i++) + { + Control* pControl = aControlList.First(); + while(pControl) + { + if(WINDOW_EDIT != pControl->GetType() ) + ((SwTOXButton*)pControl)->Check(sal_False); + pControl = aControlList.Next(); + } + } + SetActiveControl(pEdit); + return 0; +} +/* -----------------17.06.99 10:05------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTokenWindow, NextItemBtnHdl, SwTOXButton*, pBtn ) +{ + sal_uInt16 nPos = (sal_uInt16)aControlList.GetPos(pBtn); + if( (nPos && !pBtn->IsNextControl()) || + (nPos < aControlList.Count() - 1 && pBtn->IsNextControl())) + { + aControlList.Seek(nPos); + sal_Bool bNext = pBtn->IsNextControl(); + Control* pNextPrev = bNext ? aControlList.Next() : aControlList.Prev(); + pNextPrev->GrabFocus(); + Selection aSel(0, 0); + if(!bNext) + { + sal_uInt16 nLen = ((SwTOXEdit*)pNextPrev)->GetText().Len(); + aSel.A() = nLen; + aSel.B() = nLen; + } + ((SwTOXEdit*)pNextPrev)->SetSelection(aSel); + pBtn->Check(sal_False); + AdjustScrolling(); + } + return 0; +} + +/* -----------------17.06.99 10:04------------------- + + --------------------------------------------------*/ +IMPL_LINK(SwTokenWindow, TbxFocusBtnHdl, SwTOXButton*, pBtn ) +{ + for(sal_uInt16 i = 0; i < aControlList.Count(); i++) + { + Control* pControl = aControlList.First(); + while(pControl) + { + if(WINDOW_EDIT != pControl->GetType() ) + ((SwTOXButton*)pControl)->Check(pBtn == pControl); + pControl = aControlList.Next(); + } + } + SetActiveControl(pBtn); + return 0; +} +/* -----------------------------28.01.2002 12:22------------------------------ + + ---------------------------------------------------------------------------*/ +void SwTokenWindow::GetFocus() +{ + if(GETFOCUS_TAB & GetGetFocusFlags()) + { + Control* pFirst = aControlList.First(); + if(pFirst) + { + pFirst->GrabFocus(); + SetActiveControl(pFirst); + AdjustScrolling(); + } + } +} +/* -----------------25.03.99 15:17------------------- + * + * --------------------------------------------------*/ +SwTOXStylesTabPage::SwTOXStylesTabPage(Window* pParent, const SfxItemSet& rAttrSet ) : + SfxTabPage(pParent, SW_RES(TP_TOX_STYLES), rAttrSet), + aFormatFL(this, SW_RES(FL_FORMAT )), + aLevelFT2(this, SW_RES(FT_LEVEL )), + aLevelLB(this, SW_RES(LB_LEVEL )), + aAssignBT(this, SW_RES(BT_ASSIGN )), + aTemplateFT(this, SW_RES(FT_TEMPLATE)), + aParaLayLB(this, SW_RES(LB_PARALAY )), + aStdBT(this, SW_RES(BT_STD )), + aEditStyleBT(this, SW_RES(BT_EDIT_STYLE )), + m_pCurrentForm(0) +{ + FreeResource(); + + SetExchangeSupport( sal_True ); + + aAssignBT.SetModeImage( Image( SW_RES( IMG_ONE_LEFT_HC ) ), BMP_COLOR_HIGHCONTRAST ); + + aEditStyleBT.SetClickHdl (LINK( this, SwTOXStylesTabPage, EditStyleHdl)); + aAssignBT.SetClickHdl (LINK( this, SwTOXStylesTabPage, AssignHdl)); + aStdBT.SetClickHdl (LINK( this, SwTOXStylesTabPage, StdHdl)); + aParaLayLB.SetSelectHdl (LINK( this, SwTOXStylesTabPage, EnableSelectHdl)); + aLevelLB.SetSelectHdl (LINK( this, SwTOXStylesTabPage, EnableSelectHdl)); + aParaLayLB.SetDoubleClickHdl(LINK( this, SwTOXStylesTabPage, DoubleClickHdl)); + + aStdBT.SetAccessibleRelationMemberOf(&aFormatFL); + aAssignBT.SetAccessibleRelationMemberOf(&aFormatFL); + aEditStyleBT.SetAccessibleRelationMemberOf(&aFormatFL); + +} +/* -----------------25.03.99 15:17------------------- + * + * --------------------------------------------------*/ +SwTOXStylesTabPage::~SwTOXStylesTabPage() +{ + delete m_pCurrentForm; +} +/* -----------------25.03.99 15:17------------------- + * + * --------------------------------------------------*/ +sal_Bool SwTOXStylesTabPage::FillItemSet( SfxItemSet& ) +{ + return sal_True; +} +/* -----------------25.03.99 15:17------------------- + * + * --------------------------------------------------*/ +void SwTOXStylesTabPage::Reset( const SfxItemSet& rSet ) +{ + ActivatePage(rSet); +} +/* -----------------25.03.99 15:17------------------- + * + * --------------------------------------------------*/ +void SwTOXStylesTabPage::ActivatePage( const SfxItemSet& ) +{ + m_pCurrentForm = new SwForm(GetForm()); + aParaLayLB.Clear(); + aLevelLB.Clear(); + + // kein Hyperlink fuer Benutzerverzeichnisse + + sal_uInt16 i, nSize = m_pCurrentForm->GetFormMax(); + + // form-Pattern anzeigen ohne Titel + + //1. TemplateEntry anzeigen + String aStr( SW_RES( STR_TITLE )); + if( m_pCurrentForm->GetTemplate( 0 ).Len() ) + { + aStr += ' '; + aStr += aDeliStart; + aStr += m_pCurrentForm->GetTemplate( 0 ); + aStr += aDeliEnd; + } + aLevelLB.InsertEntry(aStr); + + for( i=1; i < nSize; ++i ) + { + if( TOX_INDEX == m_pCurrentForm->GetTOXType() && + FORM_ALPHA_DELIMITTER == i ) + aStr = SW_RESSTR(STR_ALPHA); + else + { + aStr = SW_RESSTR(STR_LEVEL); + aStr += String::CreateFromInt32( + TOX_INDEX == m_pCurrentForm->GetTOXType() ? i - 1 : i ); + } + String aCpy( aStr ); + + if( m_pCurrentForm->GetTemplate( i ).Len() ) + { + aCpy += ' '; + aCpy += aDeliStart; + aCpy += m_pCurrentForm->GetTemplate( i ); + aCpy += aDeliEnd; + } + aLevelLB.InsertEntry( aCpy ); + } + + // Templates initialisieren + const SwTxtFmtColl *pColl; + SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); + const sal_uInt16 nSz = rSh.GetTxtFmtCollCount(); + + for( i = 0; i < nSz; ++i ) + if( !(pColl = &rSh.GetTxtFmtColl( i ))->IsDefault() ) + aParaLayLB.InsertEntry( pColl->GetName() ); + + // Pool-Collections abfragen und fuer das Verzeichnis setzen + for( i = 0; i < m_pCurrentForm->GetFormMax(); ++i ) + { + aStr = m_pCurrentForm->GetTemplate( i ); + if( aStr.Len() && + LISTBOX_ENTRY_NOTFOUND == aParaLayLB.GetEntryPos( aStr )) + aParaLayLB.InsertEntry( aStr ); + } + + EnableSelectHdl(&aParaLayLB); +} +/* -----------------25.03.99 15:17------------------- + * + * --------------------------------------------------*/ +int SwTOXStylesTabPage::DeactivatePage( SfxItemSet* /*pSet*/ ) +{ + GetForm() = *m_pCurrentForm; + return LEAVE_PAGE; +} + +/* -----------------25.03.99 15:17------------------- + * + * --------------------------------------------------*/ +SfxTabPage* SwTOXStylesTabPage::Create( Window* pParent, + const SfxItemSet& rAttrSet) +{ + return new SwTOXStylesTabPage(pParent, rAttrSet); +} +/* -----------------26.03.99 12:47------------------- + * + * --------------------------------------------------*/ +IMPL_LINK( SwTOXStylesTabPage, EditStyleHdl, Button *, pBtn ) +{ + if( LISTBOX_ENTRY_NOTFOUND != aParaLayLB.GetSelectEntryPos()) + { + SfxStringItem aStyle(SID_STYLE_EDIT, aParaLayLB.GetSelectEntry()); + SfxUInt16Item aFamily(SID_STYLE_FAMILY, SFX_STYLE_FAMILY_PARA); +// SwPtrItem aShell(FN_PARAM_WRTSHELL, pWrtShell); + Window* pDefDlgParent = Application::GetDefDialogParent(); + Application::SetDefDialogParent( pBtn ); + SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); + rSh.GetView().GetViewFrame()->GetDispatcher()->Execute( + SID_STYLE_EDIT, SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_MODAL, + &aStyle, &aFamily/*, &aShell*/, 0L); + Application::SetDefDialogParent( pDefDlgParent ); + } + return 0; +} +/*-------------------------------------------------------------------- + Beschreibung: Vorlagen zuweisen + --------------------------------------------------------------------*/ +IMPL_LINK( SwTOXStylesTabPage, AssignHdl, Button *, EMPTYARG ) +{ + sal_uInt16 nLevPos = aLevelLB.GetSelectEntryPos(); + sal_uInt16 nTemplPos = aParaLayLB.GetSelectEntryPos(); + if(nLevPos != LISTBOX_ENTRY_NOTFOUND && + nTemplPos != LISTBOX_ENTRY_NOTFOUND) + { + String aStr(aLevelLB.GetEntry(nLevPos)); + sal_uInt16 nDelPos = aStr.Search(aDeliStart); + if(nDelPos != STRING_NOTFOUND) + aStr.Erase(nDelPos-1); + aStr += ' '; + aStr += aDeliStart; + aStr += aParaLayLB.GetSelectEntry(); + + m_pCurrentForm->SetTemplate(nLevPos, aParaLayLB.GetSelectEntry()); + + aStr += aDeliEnd; + + aLevelLB.RemoveEntry(nLevPos); + aLevelLB.InsertEntry(aStr, nLevPos); + aLevelLB.SelectEntry(aStr); + ModifyHdl(0); + } + return 0; +} +/* -----------------26.03.99 09:10------------------- + * + * --------------------------------------------------*/ +IMPL_LINK( SwTOXStylesTabPage, StdHdl, Button *, EMPTYARG ) +{ + sal_uInt16 nPos = aLevelLB.GetSelectEntryPos(); + if(nPos != LISTBOX_ENTRY_NOTFOUND) + { String aStr(aLevelLB.GetEntry(nPos)); + sal_uInt16 nDelPos = aStr.Search(aDeliStart); + if(nDelPos != STRING_NOTFOUND) + aStr.Erase(nDelPos-1); + aLevelLB.RemoveEntry(nPos); + aLevelLB.InsertEntry(aStr, nPos); + aLevelLB.SelectEntry(aStr); + m_pCurrentForm->SetTemplate(nPos, aEmptyStr); + ModifyHdl(0); + } + return 0; +} +/* -----------------26.03.99 09:11------------------- + * + * --------------------------------------------------*/ +IMPL_LINK_INLINE_START( SwTOXStylesTabPage, DoubleClickHdl, Button *, EMPTYARG ) +{ + String aTmpName( aParaLayLB.GetSelectEntry() ); + SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); + + if(aParaLayLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND && + (aLevelLB.GetSelectEntryPos() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName))) + AssignHdl(&aAssignBT); + return 0; +} +IMPL_LINK_INLINE_END( SwTOXStylesTabPage, DoubleClickHdl, Button *, EMPTYARG ) +/*-------------------------------------------------------------------- + Beschreibung: nur wenn selektiert enable + --------------------------------------------------------------------*/ +IMPL_LINK( SwTOXStylesTabPage, EnableSelectHdl, ListBox *, EMPTYARG ) +{ + //UpdatePattern(); + aStdBT.Enable(aLevelLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND); + + SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); + String aTmpName(aParaLayLB.GetSelectEntry()); + aAssignBT.Enable(aParaLayLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND && + LISTBOX_ENTRY_NOTFOUND != aLevelLB.GetSelectEntryPos() && + (aLevelLB.GetSelectEntryPos() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName))); + aEditStyleBT.Enable(aParaLayLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ); + return 0; +} +/* -----------------------------18.01.00 16:54-------------------------------- + + ---------------------------------------------------------------------------*/ +IMPL_LINK(SwTOXStylesTabPage, ModifyHdl, void*, EMPTYARG) +{ + SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); + if(pTOXDlg) + { + GetForm() = *m_pCurrentForm; + pTOXDlg->CreateOrUpdateExample(pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_STYLES); + } + return 0; +} +/****************************************************************************** + +******************************************************************************/ +#define ITEM_SEARCH 1 +#define ITEM_ALTERNATIVE 2 +#define ITEM_PRIM_KEY 3 +#define ITEM_SEC_KEY 4 +#define ITEM_COMMENT 5 +#define ITEM_CASE 6 +#define ITEM_WORDONLY 7 + + +SwEntryBrowseBox::SwEntryBrowseBox(Window* pParent, const ResId& rId, + BrowserMode nMode ) : + SwEntryBrowseBox_Base( pParent, rId, nMode, + BROWSER_KEEPSELECTION | + BROWSER_COLUMNSELECTION | + BROWSER_MULTISELECTION | + BROWSER_TRACKING_TIPS | + BROWSER_HLINESFULL | + BROWSER_VLINESFULL | + BROWSER_AUTO_VSCROLL| + BROWSER_HIDECURSOR ), + aCellEdit(&GetDataWindow(), 0), + aCellCheckBox(&GetDataWindow()), + + sSearch( ResId(ST_SEARCH, *rId.GetResMgr() )), + sAlternative( ResId(ST_ALTERNATIVE, *rId.GetResMgr() )), + sPrimKey( ResId(ST_PRIMKEY, *rId.GetResMgr() )), + sSecKey( ResId(ST_SECKEY, *rId.GetResMgr() )), + sComment( ResId(ST_COMMENT, *rId.GetResMgr() )), + sCaseSensitive( ResId(ST_CASESENSITIVE, *rId.GetResMgr() )), + sWordOnly( ResId(ST_WORDONLY, *rId.GetResMgr() )), + sYes( ResId(ST_TRUE, *rId.GetResMgr() )), + sNo( ResId(ST_FALSE, *rId.GetResMgr() )), + bModified(sal_False) +{ + FreeResource(); + aCellCheckBox.GetBox().EnableTriState(sal_False); + xController = new ::svt::EditCellController(&aCellEdit); + xCheckController = new ::svt::CheckBoxCellController(&aCellCheckBox); + + ////////////////////////////////////////////////////////////////////// + // HACK: BrowseBox invalidiert nicht ihre Childs, wie es eigentlich sein sollte. + // Deshalb wird WB_CLIPCHILDREN zurueckgesetzt, wodurch das Invalidieren + // der Childs erzwungen wird. + WinBits aStyle = GetStyle(); + if( aStyle & WB_CLIPCHILDREN ) + { + aStyle &= ~WB_CLIPCHILDREN; + SetStyle( aStyle ); + } + const String* aTitles[7] = + { + &sSearch, + &sAlternative, + &sPrimKey, + &sSecKey, + &sComment, + &sCaseSensitive, + &sWordOnly + }; + + long nWidth = GetSizePixel().Width(); + nWidth /=7; + --nWidth; + for(sal_uInt16 i = 1; i < 8; i++) + InsertDataColumn( i, *aTitles[i - 1], nWidth, + HIB_STDSTYLE, HEADERBAR_APPEND ); + +} +/* -----------------------------19.01.00 11:29-------------------------------- + + ---------------------------------------------------------------------------*/ +sal_Bool SwEntryBrowseBox::SeekRow( long nRow ) +{ + nCurrentRow = nRow; + return sal_True; +} +/* -----------------------------19.01.00 15:32-------------------------------- + + ---------------------------------------------------------------------------*/ +String SwEntryBrowseBox::GetCellText(long nRow, sal_uInt16 nColumn) const +{ + const String* pRet = &aEmptyStr; + if(aEntryArr.Count() > nRow) + { + AutoMarkEntry* pEntry = aEntryArr[ static_cast< sal_uInt16 >(nRow) ]; + switch(nColumn) + { + case ITEM_SEARCH :pRet = &pEntry->sSearch; break; + case ITEM_ALTERNATIVE :pRet = &pEntry->sAlternative; break; + case ITEM_PRIM_KEY :pRet = &pEntry->sPrimKey ; break; + case ITEM_SEC_KEY :pRet = &pEntry->sSecKey ; break; + case ITEM_COMMENT :pRet = &pEntry->sComment ; break; + case ITEM_CASE :pRet = pEntry->bCase ? &sYes : &sNo; break; + case ITEM_WORDONLY :pRet = pEntry->bWord ? &sYes : &sNo; break; + } + } + return *pRet; +} + +/* -----------------------------19.01.00 11:29-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwEntryBrowseBox::PaintCell(OutputDevice& rDev, + const Rectangle& rRect, sal_uInt16 nColumnId) const +{ + String sPaint = GetCellText( nCurrentRow, nColumnId ); + sal_uInt16 nStyle = TEXT_DRAW_CLIP | TEXT_DRAW_CENTER; + rDev.DrawText( rRect, sPaint, nStyle ); +} +/* -----------------------------19.01.00 14:51-------------------------------- + + ---------------------------------------------------------------------------*/ +::svt::CellController* SwEntryBrowseBox::GetController(long /*nRow*/, sal_uInt16 nCol) +{ + return nCol < ITEM_CASE ? xController : xCheckController; +} +/* -----------------------------19.01.00 15:36-------------------------------- + + ---------------------------------------------------------------------------*/ +sal_Bool SwEntryBrowseBox::SaveModified() +{ + SetModified(); + sal_uInt16 nRow = static_cast< sal_uInt16 >(GetCurRow()); + sal_uInt16 nCol = GetCurColumnId(); + + String sNew; + sal_Bool bVal = sal_False; + ::svt::CellController* pController = 0; + if(nCol < ITEM_CASE) + { + pController = xController; + sNew = ((::svt::EditCellController*)pController)->GetEditImplementation()->GetText( LINEEND_LF ); + } + else + { + pController = xCheckController; + bVal = ((::svt::CheckBoxCellController*)pController)->GetCheckBox().IsChecked(); + } + AutoMarkEntry* pEntry = nRow >= aEntryArr.Count() ? new AutoMarkEntry + : aEntryArr[nRow]; + switch(nCol) + { + case ITEM_SEARCH : pEntry->sSearch = sNew; break; + case ITEM_ALTERNATIVE : pEntry->sAlternative = sNew; break; + case ITEM_PRIM_KEY : pEntry->sPrimKey = sNew; break; + case ITEM_SEC_KEY : pEntry->sSecKey = sNew; break; + case ITEM_COMMENT : pEntry->sComment = sNew; break; + case ITEM_CASE : pEntry->bCase = bVal; break; + case ITEM_WORDONLY : pEntry->bWord = bVal; break; + } + if(nRow >= aEntryArr.Count()) + { + aEntryArr.Insert( pEntry, aEntryArr.Count() ); + RowInserted(nRow, 1, sal_True, sal_True); + if(nCol < ITEM_WORDONLY) + { + pController->ClearModified(); + GoToRow( nRow ); + } + } + return sal_True; +} +/* -----------------------------19.01.00 14:32-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwEntryBrowseBox::InitController( + ::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol) +{ + String rTxt = GetCellText( nRow, nCol ); + if(nCol < ITEM_CASE) + { + rController = xController; + ::svt::CellController* pController = xController; + ((::svt::EditCellController*)pController)->GetEditImplementation()->SetText( rTxt ); + } + else + { + rController = xCheckController; + ::svt::CellController* pController = xCheckController; + ((::svt::CheckBoxCellController*)pController)->GetCheckBox().Check( + rTxt == sYes ); + } +} +/* -----------------------------19.01.00 12:19-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwEntryBrowseBox::ReadEntries(SvStream& rInStr) +{ + AutoMarkEntry* pToInsert = 0; + const String sZero('0'); + rtl_TextEncoding eTEnc = gsl_getSystemTextEncoding(); + while( !rInStr.GetError() && !rInStr.IsEof() ) + { + String sLine; + rInStr.ReadByteStringLine( sLine, eTEnc ); + + // # -> comment + // ; -> delimiter between entries -> + // Format: TextToSearchFor;AlternativeString;PrimaryKey;SecondaryKey + // Leading and trailing blanks are ignored + if( sLine.Len() ) + { + //comments are contained in separate lines but are put into the struct of the following data + //line (if available) + if( '#' != sLine.GetChar(0) ) + { + if( !pToInsert ) + pToInsert = new AutoMarkEntry; + + sal_uInt16 nSttPos = 0; + pToInsert->sSearch = sLine.GetToken(0, ';', nSttPos ); + pToInsert->sAlternative = sLine.GetToken(0, ';', nSttPos ); + pToInsert->sPrimKey = sLine.GetToken(0, ';', nSttPos ); + pToInsert->sSecKey = sLine.GetToken(0, ';', nSttPos ); + + String sStr = sLine.GetToken(0, ';', nSttPos ); + pToInsert->bCase = sStr.Len() && sStr != sZero; + + sStr = sLine.GetToken(0, ';', nSttPos ); + pToInsert->bWord = sStr.Len() && sStr != sZero; + + aEntryArr.Insert( pToInsert, aEntryArr.Count() ); + pToInsert = 0; + } + else + { + if(pToInsert) + aEntryArr.Insert(pToInsert, aEntryArr.Count()); + pToInsert = new AutoMarkEntry; + pToInsert->sComment = sLine; + pToInsert->sComment.Erase(0, 1); + } + } + } + if( pToInsert ) + aEntryArr.Insert(pToInsert, aEntryArr.Count()); + RowInserted(0, aEntryArr.Count() + 1, sal_True); +} +/* -----------------------------19.01.00 12:19-------------------------------- + + ---------------------------------------------------------------------------*/ +void SwEntryBrowseBox::WriteEntries(SvStream& rOutStr) +{ + //check if the current controller is modified + sal_uInt16 nCol = GetCurColumnId(); + ::svt::CellController* pController; + if(nCol < ITEM_CASE) + pController = xController; + else + pController = xCheckController; + if(pController ->IsModified()) + GoToColumnId(nCol < ITEM_CASE ? ++nCol : --nCol ); + + rtl_TextEncoding eTEnc = gsl_getSystemTextEncoding(); + for(sal_uInt16 i = 0; i < aEntryArr.Count();i++) + { + AutoMarkEntry* pEntry = aEntryArr[i]; + if(pEntry->sComment.Len()) + { + String sWrite('#'); + sWrite += pEntry->sComment; + rOutStr.WriteByteStringLine( sWrite, eTEnc ); + } + + String sWrite( pEntry->sSearch ); + sWrite += ';'; + sWrite += pEntry->sAlternative; + sWrite += ';'; + sWrite += pEntry->sPrimKey; + sWrite += ';'; + sWrite += pEntry->sSecKey; + sWrite += ';'; + sWrite += pEntry->bCase ? '1' : '0'; + sWrite += ';'; + sWrite += pEntry->bWord ? '1' : '0'; + + if( sWrite.Len() > 5 ) + rOutStr.WriteByteStringLine( sWrite, eTEnc ); + } +} +/* -----------------------------21.01.00 11:49-------------------------------- + + ---------------------------------------------------------------------------*/ +sal_Bool SwEntryBrowseBox::IsModified()const +{ + if(bModified) + return sal_True; + + + //check if the current controller is modified + sal_uInt16 nCol = GetCurColumnId(); + ::svt::CellController* pController; + if(nCol < ITEM_CASE) + pController = xController; + else + pController = xCheckController; + return pController ->IsModified(); +} +/* -----------------------------19.01.00 11:29-------------------------------- + + ---------------------------------------------------------------------------*/ +SwAutoMarkDlg_Impl::SwAutoMarkDlg_Impl(Window* pParent, const String& rAutoMarkURL, + const String& rAutoMarkType, sal_Bool bCreate) : + ModalDialog(pParent, SW_RES(DLG_CREATE_AUTOMARK)), + aOKPB( this, SW_RES(PB_OK )), + aCancelPB( this, SW_RES(PB_CANCEL )), + aHelpPB( this, SW_RES(PB_HELP )), + aEntriesBB( this, SW_RES(BB_ENTRIES )), + aEntriesFL( this, SW_RES(FL_ENTRIES )), + sAutoMarkURL(rAutoMarkURL), + sAutoMarkType(rAutoMarkType), + bCreateMode(bCreate) +{ + FreeResource(); + aOKPB.SetClickHdl(LINK(this, SwAutoMarkDlg_Impl, OkHdl)); + + String sTitle = GetText(); + sTitle.AppendAscii( RTL_CONSTASCII_STRINGPARAM(": ")); + sTitle += sAutoMarkURL; + SetText(sTitle); + sal_Bool bError = sal_False; + if( bCreateMode ) + aEntriesBB.RowInserted(0, 1, sal_True); + else + { + SfxMedium aMed( sAutoMarkURL, STREAM_STD_READ, sal_False ); + if( aMed.GetInStream() && !aMed.GetInStream()->GetError() ) + aEntriesBB.ReadEntries( *aMed.GetInStream() ); + else + bError = sal_True; + } + + if(bError) + EndDialog(RET_CANCEL); +} +/* -----------------------------19.01.00 11:12-------------------------------- + + ---------------------------------------------------------------------------*/ +SwAutoMarkDlg_Impl::~SwAutoMarkDlg_Impl() +{ +} +/* -----------------------------19.01.00 16:43-------------------------------- + + ---------------------------------------------------------------------------*/ +IMPL_LINK(SwAutoMarkDlg_Impl, OkHdl, OKButton*, EMPTYARG) +{ + sal_Bool bError = sal_False; + if(aEntriesBB.IsModified() || bCreateMode) + { + SfxMedium aMed( sAutoMarkURL, + bCreateMode ? STREAM_WRITE + : STREAM_WRITE| STREAM_TRUNC, + sal_False ); + SvStream* pStrm = aMed.GetOutStream(); + pStrm->SetStreamCharSet( RTL_TEXTENCODING_MS_1253 ); + if( !pStrm->GetError() ) + { + aEntriesBB.WriteEntries( *pStrm ); + aMed.Commit(); + } + else + bError = sal_True; + } + if( !bError ) + EndDialog(RET_OK); + return 0; +} + |