/************************************************************** * * 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef _VIEW_HXX #include #endif #ifndef _BASESH_HXX #include #endif #include #include #include #include #include #ifndef _POOLFMT_HRC #include #endif #include #include #include #include #include #include #include #include #include #ifndef _CMDID_H #include #endif #ifndef _HELPID_H #include #endif #ifndef _UTLUI_HRC #include #endif #ifndef _INDEX_HRC #include #endif #ifndef _CNTTAB_HRC #include #endif #ifndef _GLOBALS_HRC #include #endif #include #include #ifndef _TOXHLP_HXX #include #endif #include #ifndef _UTLUI_HRC #include "utlui.hrc" #endif #include #include 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 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 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(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(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 // //LS //LE // LS // LE // 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 position 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; }