blob: 4d8cc0b38a14ca27af1d00d4f5322e94d448de65 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#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;
}
else if ( (aCode.GetCode() == KEY_F3) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
{
if ( m_pParent )
{
m_pParent->SetFocus2theAllBtn();
}
}
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;
}
else if ( (aCode.GetCode() == KEY_F3) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
{
if ( m_pParent )
{
m_pParent->SetFocus2theAllBtn();
}
}
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));
}
void SwTOXEntryTabPage::SetFocus2theAllBtn()
{
aAllLevelsPB.GrabFocus();
}
long SwTOXEntryTabPage::Notify( NotifyEvent& rNEvt )
{
if ( rNEvt.GetType() == EVENT_KEYINPUT )
{
const KeyEvent& rKEvt = *rNEvt.GetKeyEvent();
KeyCode aCode = rKEvt.GetKeyCode();
if ( (aCode.GetCode() == KEY_F4) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
{
if ( aTokenWIN.GetActiveControl() )
{
aTokenWIN.GetActiveControl()->GrabFocus();
}
}
}
return SfxTabPage::Notify( rNEvt );
}
/*-- 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()));
}
accessibleName = String(SW_RES(STR_STRUCTURE));
sAdditionalAccnameString1 = String(SW_RES(STR_ADDITIONAL_ACCNAME_STRING1));
sAdditionalAccnameString2 = String(SW_RES(STR_ADDITIONAL_ACCNAME_STRING2));
sAdditionalAccnameString3 = String(SW_RES(STR_ADDITIONAL_ACCNAME_STRING3));
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);
sal_uInt32 nIndex = GetControlIndex( TOKEN_TEXT, pEdit );
String s1 = String::CreateFromAscii(" (");
String s2 = String::CreateFromAscii(")");
String s3 = String::CreateFromAscii(", ");
String strName(accessibleName);
strName += String::CreateFromInt32(nIndex);
if ( nIndex == 1 )
{
/*Press left or right arrow to choose the structure controls*/
strName += s1;
strName += sAdditionalAccnameString2;
strName += s3;
/*Press Ctrl+Alt+A to move focus for more operations*/
strName += sAdditionalAccnameString1;
strName += s3;
/*Press Ctrl+Alt+B to move focus back to the current structure control*/
strName += sAdditionalAccnameString3;
strName += s2;
pEdit->SetAccessibleName(strName);
}
else
{
pEdit->SetAccessibleName(strName);
}
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));
}
String sSpace = String::CreateFromAscii(" ");
sal_uInt32 nIndex = GetControlIndex( rToken.eTokenType, pButton );
String sAccName = aButtonHelpTexts[rToken.eTokenType];
if ( nIndex )
{
sAccName += sSpace;
sAccName += String::CreateFromInt32(nIndex);
}
pButton->SetAccessibleName( sAccName );
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);
sal_uInt32 nIndex = GetControlIndex( TOKEN_TEXT, pEdit );
String s1 = String::CreateFromAscii(" (");
String s2 = String::CreateFromAscii(")");
String s3 = String::CreateFromAscii(", ");
String strName(accessibleName);
strName += String::CreateFromInt32(nIndex);
if ( nIndex == 1)
{
/*Press left or right arrow to choose the structure controls*/
strName += s1;
strName += sAdditionalAccnameString2;
strName += s3;
/*Press Ctrl+Alt+A to move focus for more operations*/
strName += sAdditionalAccnameString1;
strName += s3;
/*Press Ctrl+Alt+B to move focus back to the current structure control*/
strName += sAdditionalAccnameString3;
strName += s2;
pEdit->SetAccessibleName(strName);
}
else
{
pEdit->SetAccessibleName(strName);
}
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));
}
String sSpace = String::CreateFromAscii(" ");
sal_uInt32 nIndex = GetControlIndex( rToken.eTokenType, pButton );
String sAccName = aButtonHelpTexts[rToken.eTokenType];
if ( nIndex )
{
sAccName += sSpace;
sAccName += String::CreateFromInt32(nIndex);
}
pButton->SetAccessibleName( sAccName );
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();
}
}
}
void SwTokenWindow::SetFocus2theAllBtn()
{
if (m_pParent)
{
m_pParent->SetFocus2theAllBtn();
}
}
sal_uInt32 SwTokenWindow::GetControlIndex(FormTokenType eType, const Control* /* pCurControl */) const
{
//there are only one entry-text button and only one page-number button,
//so we need not add index for these two buttons.
if ( eType == TOKEN_ENTRY_TEXT || eType == TOKEN_PAGE_NUMS )
{
return 0;
}
sal_uInt32 nIndex = 0;
const Control* pControl = ((SwTokenWindow*)this)->aControlList.First();
while(pControl)
{
const SwFormToken& rNewToken = WINDOW_EDIT == pControl->GetType()
? ((SwTOXEdit*)pControl)->GetFormToken()
: ((SwTOXButton*)pControl)->GetFormToken();
if(eType == rNewToken.eTokenType)
{
nIndex++;
}
pControl = ((SwTokenWindow*)this)->aControlList.Next();
}
return nIndex;
}
/* -----------------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;
}