summaryrefslogtreecommitdiff
path: root/sw/source/ui/index/swuiidxmrk.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/index/swuiidxmrk.cxx')
-rw-r--r--sw/source/ui/index/swuiidxmrk.cxx1959
1 files changed, 1959 insertions, 0 deletions
diff --git a/sw/source/ui/index/swuiidxmrk.cxx b/sw/source/ui/index/swuiidxmrk.cxx
new file mode 100644
index 000000000000..6083da00da06
--- /dev/null
+++ b/sw/source/ui/index/swuiidxmrk.cxx
@@ -0,0 +1,1959 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+#ifdef SW_DLLIMPLEMENTATION
+#undef SW_DLLIMPLEMENTATION
+#endif
+
+#include "swuiidxmrk.hxx"
+#include <hintids.hxx>
+#ifndef _HELPID_H
+#include <helpid.h>
+#endif
+#define _SVSTDARR_STRINGSSORT
+#include <svl/svstdarr.hxx>
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/util/SearchOptions.hpp>
+#include <com/sun/star/util/SearchFlags.hpp>
+#include <com/sun/star/i18n/TransliterationModules.hpp>
+#include <svl/stritem.hxx>
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <sfx2/dispatch.hxx>
+#include <svl/eitem.hxx>
+#include <svtools/txtcmp.hxx>
+#include <editeng/scripttypeitem.hxx>
+#include <svl/itemset.hxx>
+#include <editeng/langitem.hxx>
+#include "editeng/unolingu.hxx"
+#include <swtypes.hxx>
+#include <idxmrk.hxx>
+#include <txttxmrk.hxx>
+#include <wrtsh.hxx>
+#ifndef _VIEW_HXX
+#include <view.hxx>
+#endif
+#include <multmrk.hxx>
+#include <swundo.hxx> // fuer Undo-Ids
+#ifndef _CMDID_H
+#include <cmdid.h>
+#endif
+#ifndef _INDEX_HRC
+#include <index.hrc>
+#endif
+#ifndef _IDXMRK_HRC
+#include <idxmrk.hrc>
+#endif
+#include <swmodule.hxx>
+#include <fldmgr.hxx>
+#include <fldbas.hxx>
+#include <utlui.hrc>
+#include <swcont.hxx>
+#include <svl/cjkoptions.hxx>
+#include <ndtxt.hxx>
+#include <breakit.hxx>
+#include <SwRewriter.hxx>
+#include <undobj.hxx>
+
+#include "swuiidxmrk.hxx"
+#include <unomid.h>
+
+
+#define POS_CONTENT 0
+#define POS_INDEX 1
+#define POS_USER 2
+
+static sal_uInt16 nTypePos = 1; // TOX_INDEX as standard
+static sal_uInt16 nKey1Pos = USHRT_MAX;
+
+static sal_uInt16 nKey2Pos = USHRT_MAX;
+
+using namespace com::sun::star;
+using namespace com::sun::star::i18n;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::util;
+using namespace com::sun::star::i18n;
+using ::rtl::OUString;
+using namespace ::comphelper;
+using namespace ::com::sun::star;
+
+/*--------------------------------------------------------------------
+ Beschreibung: Dialog zum Einfuegen einer Verzeichnismarkierung
+ --------------------------------------------------------------------*/
+SwIndexMarkDlg::SwIndexMarkDlg(Window *pParent,
+ sal_Bool bNewDlg,
+ const ResId& rResId,
+ sal_Int32 _nOptionsId, SwWrtShell& rWrtShell ) :
+ Window(pParent, rResId),
+ aTypeFT (this, SW_RES(LBL_INDEX )),
+ aTypeDCB(this, SW_RES(DCB_INDEX )),
+ aNewBT(this, SW_RES(BT_NEW )),
+
+ aEntryFT(this, SW_RES(LBL_ENTRY )),
+ aEntryED(this, SW_RES(SL_ENTRY )),
+ aPhoneticFT0(this, SW_RES(FT_PHONETIC_1 )),
+ aPhoneticED0(this, SW_RES(ED_PHONETIC_1 )),
+
+ aKeyFT(this, SW_RES(LBL_KEY )),
+ aKeyDCB(this, SW_RES(DCB_KEY )),
+ aPhoneticFT1(this, SW_RES(FT_PHONETIC_2 )),
+ aPhoneticED1(this, SW_RES(ED_PHONETIC_2 )),
+
+ aKey2FT(this, SW_RES(LBL_KEY2 )),
+ aKey2DCB(this, SW_RES(DCB_KEY2 )),
+ aPhoneticFT2(this, SW_RES(FT_PHONETIC_3 )),
+ aPhoneticED2(this, SW_RES(ED_PHONETIC_3 )),
+
+ aLevelFT(this, SW_RES(LBL_LEVEL )),
+ aLevelED(this, SW_RES(SL_LEVEL )),
+ aMainEntryCB(this, SW_RES(CB_MAIN_ENTRY )),
+ aApplyToAllCB(this,SW_RES(CB_APPLY_TO_ALL)),
+ aSearchCaseSensitiveCB(this, SW_RES(CB_CASESENSITIVE )),
+ aSearchCaseWordOnlyCB(this, SW_RES(CB_WORDONLY )),
+
+ aIndexFL(this, SW_RES(FL_INDEX )),
+
+ aOKBT(this, SW_RES(BT_OK )),
+ aCancelBT(this, SW_RES(BT_CANCEL )),
+ aHelpBT(this, SW_RES(BT_HELP )),
+ aDelBT(this, SW_RES(BT_DEL )),
+
+ aPrevSameBT(this,SW_RES(BT_PREVSAME)),
+ aNextSameBT(this,SW_RES(BT_NXTSAME)),
+ aPrevBT(this, SW_RES(BT_PREV )),
+ aNextBT(this, SW_RES(BT_NXT )),
+
+ nOptionsId( _nOptionsId ),
+ bDel(sal_False),
+ bNewMark(bNewDlg),
+ bSelected(sal_False),
+
+ bPhoneticED0_ChangedByUser(FALSE),
+ bPhoneticED1_ChangedByUser(FALSE),
+ bPhoneticED2_ChangedByUser(FALSE),
+ nLangForPhoneticReading(2052),
+ bIsPhoneticReadingEnabled(FALSE),
+ xExtendedIndexEntrySupplier(NULL),
+ pTOXMgr(0),
+ pSh(&rWrtShell)
+{
+ if( SvtCJKOptions().IsCJKFontEnabled() )
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMSF = getProcessServiceFactory();
+
+ xExtendedIndexEntrySupplier =
+ uno::Reference< i18n::XExtendedIndexEntrySupplier > (
+ xMSF->createInstance( C2U("com.sun.star.i18n.IndexEntrySupplier") ),
+ uno::UNO_QUERY );
+ }
+
+ SetStyle(GetStyle()|WB_DIALOGCONTROL);
+ FreeResource();
+ aOKBT .SetHelpId(HID_INSERT_IDX_MRK_OK );
+ aCancelBT .SetHelpId(HID_INSERT_IDX_MRK_CLOSE );
+ aDelBT .SetHelpId(HID_INSERT_IDX_MRK_DELETE );
+ aNewBT .SetHelpId(HID_INSERT_IDX_MRK_NEW );
+ aPrevBT .SetHelpId(HID_INSERT_IDX_MRK_PREV );
+ aPrevSameBT .SetHelpId(HID_INSERT_IDX_MRK_PREV_SAME );
+ aNextBT .SetHelpId(HID_INSERT_IDX_MRK_NEXT );
+ aNextSameBT .SetHelpId(HID_INSERT_IDX_MRK_NEXT_SAME );
+ aTypeDCB .SetHelpId(HID_INSERT_IDX_MRK_TYPE );
+ aEntryED .SetHelpId(HID_INSERT_IDX_MRK_ENTRY );
+ aKeyDCB .SetHelpId(HID_INSERT_IDX_MRK_PRIM_KEY );
+ aKey2DCB .SetHelpId(HID_INSERT_IDX_MRK_SEC_KEY );
+ aLevelED .SetHelpId(HID_INSERT_IDX_MRK_LEVEL );
+ aMainEntryCB .SetHelpId(HID_INSERT_IDX_MRK_MAIN_ENTRY);
+ aApplyToAllCB .SetHelpId(HID_INSERT_IDX_MRK_APPLY_ALL );
+ aPhoneticED0 .SetHelpId(HID_INSERT_IDX_MRK_PHONETIC_READING );
+ aPhoneticED1 .SetHelpId(HID_INSERT_IDX_MRK_PHONETIC_READING );
+ aPhoneticED2 .SetHelpId(HID_INSERT_IDX_MRK_PHONETIC_READING );
+
+ aSearchCaseSensitiveCB.SetHelpId( HID_INSERT_IDX_MRK_SRCH_CASESENSITIVE );
+ aSearchCaseWordOnlyCB.SetHelpId( HID_INSERT_IDX_MRK_SRCH_WORDONLY );
+
+
+ GetParent()->SetText( SW_RESSTR( bNewMark ? STR_IDXMRK_INSERT : STR_IDXMRK_EDIT));
+
+ aDelBT.SetClickHdl(LINK(this,SwIndexMarkDlg, DelHdl));
+ aPrevBT.SetClickHdl(LINK(this,SwIndexMarkDlg, PrevHdl));
+ aPrevSameBT.SetClickHdl(LINK(this,SwIndexMarkDlg, PrevSameHdl));
+ aNextBT.SetClickHdl(LINK(this,SwIndexMarkDlg, NextHdl));
+ aNextSameBT.SetClickHdl(LINK(this,SwIndexMarkDlg, NextSameHdl));
+ //aTypeDCB.SetModifyHdl(LINK(this,SwIndexMarkDlg, ModifyHdl));
+ aTypeDCB.SetSelectHdl(LINK(this,SwIndexMarkDlg, ModifyHdl));
+ aKeyDCB.SetModifyHdl(LINK(this,SwIndexMarkDlg, KeyDCBModifyHdl));
+ aKey2DCB.SetModifyHdl(LINK(this,SwIndexMarkDlg, KeyDCBModifyHdl));
+ aOKBT.SetClickHdl(LINK(this,SwIndexMarkDlg, InsertHdl));
+ aCancelBT.SetClickHdl(LINK(this,SwIndexMarkDlg, CloseHdl));
+ aEntryED.SetModifyHdl(LINK(this,SwIndexMarkDlg, ModifyHdl));
+ aNewBT.SetClickHdl(LINK(this, SwIndexMarkDlg, NewUserIdxHdl));
+ aApplyToAllCB.SetClickHdl(LINK(this, SwIndexMarkDlg, SearchTypeHdl));
+ aPhoneticED0.SetModifyHdl(LINK(this,SwIndexMarkDlg, PhoneticEDModifyHdl));
+ aPhoneticED1.SetModifyHdl(LINK(this,SwIndexMarkDlg, PhoneticEDModifyHdl));
+ aPhoneticED2.SetModifyHdl(LINK(this,SwIndexMarkDlg, PhoneticEDModifyHdl));
+
+ if(bNewMark)
+ {
+ aDelBT.Hide();
+
+ {
+ ImageList aTempList( SW_RES( IMG_NAVI_ENTRYBMPH ) );
+ aNewBT.SetModeImage( aTempList.GetImage( SID_SW_START + CONTENT_TYPE_INDEX ), BMP_COLOR_HIGHCONTRAST );
+ }
+
+ {
+ ImageList aTempList( SW_RES( IMG_NAVI_ENTRYBMP ) );
+ aNewBT.SetModeImage( aTempList.GetImage( SID_SW_START + CONTENT_TYPE_INDEX ), BMP_COLOR_NORMAL );
+ }
+ }
+ else
+ {
+ aNewBT.Hide();
+ OKButton aTmp(this, WB_HIDE);
+ aOKBT.SetText( aTmp.GetText() );
+ }
+
+ aEntryED.GrabFocus();
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Controls neu initialisieren mit der aktuellen
+ Markierung
+ --------------------------------------------------------------------*/
+
+
+void SwIndexMarkDlg::InitControls()
+{
+ DBG_ASSERT(pSh && pTOXMgr, "Shell nicht da?");
+ // Inhalts-Verzeichnis
+ const SwTOXType* pType = pTOXMgr->GetTOXType(TOX_CONTENT, 0);
+ ASSERT(pType, "Kein Verzeichnistyp !!");
+ String sTmpTypeSelection;
+ if(aTypeDCB.GetSelectEntryCount())
+ sTmpTypeSelection = aTypeDCB.GetSelectEntry();
+ aTypeDCB.Clear();
+ aTypeDCB.InsertEntry(pType->GetTypeName());
+
+ // Stichwort-Verzeichnis
+ pType = pTOXMgr->GetTOXType(TOX_INDEX, 0);
+ ASSERT(pType, "Kein Verzeichnistyp !!");
+ aTypeDCB.InsertEntry(pType->GetTypeName());
+
+ // Benutzerverzeichnisse
+ sal_uInt16 nCount = pSh->GetTOXTypeCount(TOX_USER);
+ sal_uInt16 i;
+ for( i = 0; i < nCount; ++i )
+ aTypeDCB.InsertEntry( pSh->GetTOXType(TOX_USER, i)->GetTypeName() );
+
+ // KeyWords Primary einlesen
+ SvStringsSort aArr;
+ nCount = pSh->GetTOIKeys( TOI_PRIMARY, aArr );
+ for(i=0; i < nCount; ++i)
+ aKeyDCB.InsertEntry( *aArr[ i ] );
+
+ // KeyWords Secondary einlesen
+ nCount = pSh->GetTOIKeys( TOI_SECONDARY, aArr );
+ for(i=0; i < nCount; ++i)
+ aKey2DCB.InsertEntry( *aArr[ i ] );
+
+ UpdateLanguageDependenciesForPhoneticReading();
+
+ // Aktueller Eintrag
+ const SwTOXMark* pMark = pTOXMgr->GetCurTOXMark();
+ if( pMark && !bNewMark)
+ {
+ // Controls-Handling
+
+ // nur wenn mehr als eins vorhanden
+ // wenn gleich landet es auf dem gleichen Eintrag
+ pSh->SttCrsrMove();
+
+ const SwTOXMark* pMoveMark;
+ sal_Bool bShow = sal_False;
+
+ pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_PRV );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_NXT ), bShow = sal_True;
+ aPrevBT.Enable( pMoveMark != pMark );
+ pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_NXT );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_PRV ), bShow = sal_True;
+ aNextBT.Enable( pMoveMark != pMark );
+ if( bShow )
+ {
+ aPrevBT.Show();
+ aNextBT.Show();
+ bShow = sal_False;
+ }
+
+ pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_PRV );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_SAME_NXT ), bShow = sal_True;
+ aPrevSameBT.Enable( pMoveMark != pMark );
+ pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_NXT );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_SAME_PRV ), bShow = sal_True;
+ aNextSameBT.Enable( pMoveMark != pMark );
+ if( bShow )
+ {
+ aNextSameBT.Show();
+ aPrevSameBT.Show();
+ }
+ pSh->EndCrsrMove();
+
+ aTypeFT.Show();
+
+ aTypeDCB.Enable(sal_False);
+ aTypeFT.Enable(sal_False);
+
+ UpdateDialog();
+ }
+ else
+ { // aktuelle Selektion (1.Element) anzeigen ????
+ sal_uInt16 nCnt = pSh->GetCrsrCnt();
+ if (nCnt < 2)
+ {
+ bSelected = !pSh->HasSelection();
+ aOrgStr = pSh->GetView().GetSelectionTextParam(sal_True, sal_False);
+ aEntryED.SetText(aOrgStr);
+
+ //alle gleichen Eintraege aufzunehmen darf nur im Body und auch da nur
+ //bei vorhandener einfacher Selektion erlaubt werden
+ const sal_uInt16 nFrmType = pSh->GetFrmType(0,sal_True);
+ aApplyToAllCB.Show();
+ aSearchCaseSensitiveCB.Show();
+ aSearchCaseWordOnlyCB.Show();
+ aApplyToAllCB.Enable(0 != aOrgStr.Len() &&
+ 0 == (nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FLY_ANY )));
+ SearchTypeHdl(&aApplyToAllCB);
+ }
+
+ // Verzeichnistyp ist default
+ if( sTmpTypeSelection.Len() &&
+ LISTBOX_ENTRY_NOTFOUND != aTypeDCB.GetEntryPos( sTmpTypeSelection ) )
+ aTypeDCB.SelectEntry(sTmpTypeSelection);
+ else
+ aTypeDCB.SelectEntry(aTypeDCB.GetEntry(nTypePos));
+ ModifyHdl(&aTypeDCB);
+ }
+}
+
+void SwIndexMarkDlg::UpdateLanguageDependenciesForPhoneticReading()
+{
+ //no phonetic reading if no global cjk support
+ if( !xExtendedIndexEntrySupplier.is() )
+ {
+ bIsPhoneticReadingEnabled = FALSE;
+ return;
+ }
+ bIsPhoneticReadingEnabled = TRUE;
+
+ //get the current language
+ if(!bNewMark) //if dialog is opened to iterate existing marks
+ {
+ ASSERT(pTOXMgr, "need TOXMgr")
+ if(!pTOXMgr)
+ return;
+ SwTOXMark* pMark = pTOXMgr->GetCurTOXMark();
+ ASSERT(pMark, "need current SwTOXMark");
+ if(!pMark)
+ return;
+ SwTxtTOXMark* pTxtTOXMark = pMark->GetTxtTOXMark();
+ ASSERT(pTxtTOXMark, "need current SwTxtTOXMark");
+ if(!pTxtTOXMark)
+ return;
+ const SwTxtNode* pTxtNode = pTxtTOXMark->GetpTxtNd();
+ ASSERT(pTxtNode, "need current SwTxtNode");
+ if(!pTxtNode)
+ return;
+ xub_StrLen nTextIndex = *pTxtTOXMark->GetStart();
+ nLangForPhoneticReading = pTxtNode->GetLang( nTextIndex );
+ }
+ else //if dialog is opened to create a new mark
+ {
+ USHORT nScriptType = pSh->GetScriptType();
+ USHORT nWhich;
+ switch(nScriptType)
+ {
+ case SCRIPTTYPE_ASIAN: nWhich = RES_CHRATR_CJK_LANGUAGE; break;
+ case SCRIPTTYPE_COMPLEX:nWhich = RES_CHRATR_CTL_LANGUAGE; break;
+ //case SCRIPTTYPE_LATIN:
+ default:nWhich = RES_CHRATR_LANGUAGE; break;
+ }
+ SfxItemSet aLangSet(pSh->GetAttrPool(), nWhich, nWhich);
+ pSh->GetCurAttr(aLangSet);
+ nLangForPhoneticReading = ((const SvxLanguageItem&)aLangSet.Get(nWhich)).GetLanguage();
+ }
+
+ /*
+ //enable phonetic reading dependent on the current language
+ {
+ lang::Locale aLocale( SvxCreateLocale( LanguageType( nLangForPhoneticReading ) ) );
+ bIsPhoneticReadingEnabled = xExtendedIndexEntrySupplier->usePhoneticEntry( aLocale );
+ }
+ */
+}
+
+String SwIndexMarkDlg::GetDefaultPhoneticReading( const String& rText )
+{
+ if( !bIsPhoneticReadingEnabled )
+ return aEmptyStr;
+
+ lang::Locale aLocale( SvxCreateLocale( LanguageType( nLangForPhoneticReading ) ) );
+ return xExtendedIndexEntrySupplier->getPhoneticCandidate(rText, aLocale);
+}
+
+/* -----------------07.09.99 10:43-------------------
+ Change the content of aEntryED if text is selected
+ --------------------------------------------------*/
+
+void SwIndexMarkDlg::Activate()
+{
+ // aktuelle Selektion (1.Element) anzeigen ????
+ if(bNewMark)
+ {
+ sal_uInt16 nCnt = pSh->GetCrsrCnt();
+ if (nCnt < 2)
+ {
+ bSelected = !pSh->HasSelection();
+ aOrgStr = pSh->GetView().GetSelectionTextParam(sal_True, sal_False);
+ aEntryED.SetText(aOrgStr);
+
+ //alle gleichen Eintraege aufzunehmen darf nur im Body und auch da nur
+ //bei vorhandener einfacher Selektion erlaubt werden
+ const sal_uInt16 nFrmType = pSh->GetFrmType(0,sal_True);
+ aApplyToAllCB.Show();
+ aSearchCaseSensitiveCB.Show();
+ aSearchCaseWordOnlyCB.Show();
+ aApplyToAllCB.Enable(0 != aOrgStr.Len() &&
+ 0 == (nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FLY_ANY )));
+ SearchTypeHdl(&aApplyToAllCB);
+ }
+ ModifyHdl(&aTypeDCB);
+ }
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Ok-Button auswerten
+ --------------------------------------------------------------------*/
+void SwIndexMarkDlg::Apply()
+{
+ InsertUpdate();
+ if(bSelected)
+ pSh->ResetSelect(0, sal_False);
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Aenderungen uebernehmen
+ --------------------------------------------------------------------*/
+
+
+void SwIndexMarkDlg::InsertUpdate()
+{
+ pSh->StartUndo(bDel ? UNDO_INDEX_ENTRY_DELETE : UNDO_INDEX_ENTRY_INSERT);
+ pSh->StartAllAction();
+
+ SwRewriter aRewriter;
+
+ if( bNewMark )
+ {
+ InsertMark();
+
+ if ( pTOXMgr->GetCurTOXMark())
+ aRewriter.AddRule(UNDO_ARG1, pTOXMgr->GetCurTOXMark()->GetText());
+ }
+ else if( !pSh->HasReadonlySel() )
+ {
+ if ( pTOXMgr->GetCurTOXMark())
+ aRewriter.AddRule(UNDO_ARG1,
+ pTOXMgr->GetCurTOXMark()->GetText());
+
+ if( bDel )
+ pTOXMgr->DeleteTOXMark();
+ else if( pTOXMgr->GetCurTOXMark() )
+ UpdateMark();
+ }
+
+ pSh->EndAllAction();
+ pSh->EndUndo(bDel ? UNDO_INDEX_ENTRY_DELETE : UNDO_INDEX_ENTRY_INSERT);
+
+ if((nTypePos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry())) == LISTBOX_ENTRY_NOTFOUND)
+ nTypePos = 0;
+
+ nKey1Pos = aKeyDCB.GetEntryPos(aKeyDCB.GetText());
+ nKey2Pos = aKey2DCB.GetEntryPos(aKey2DCB.GetText());
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Marke einfuegen
+ --------------------------------------------------------------------*/
+static void lcl_SelectSameStrings(SwWrtShell& rSh, BOOL bWordOnly, BOOL bCaseSensitive)
+{
+ rSh.Push();
+
+ SearchOptions aSearchOpt(
+ SearchAlgorithms_ABSOLUTE,
+ ( bWordOnly ? SearchFlags::NORM_WORD_ONLY : 0 ),
+ rSh.GetSelTxt(), OUString(),
+ SvxCreateLocale( GetAppLanguage() ),
+ 0, 0, 0,
+ (bCaseSensitive
+ ? 0
+ : TransliterationModules_IGNORE_CASE) );
+
+ rSh.ClearMark();
+ BOOL bCancel;
+
+ //todo/mba: assuming that notes should not be searched
+ BOOL bSearchInNotes = FALSE;
+ rSh.Find( aSearchOpt, bSearchInNotes, DOCPOS_START, DOCPOS_END, bCancel,
+ (FindRanges)(FND_IN_SELALL|FND_IN_BODYONLY), FALSE );
+}
+
+
+void SwIndexMarkDlg::InsertMark()
+{
+ sal_uInt16 nPos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry());
+ TOXTypes eType = nPos == POS_CONTENT ? TOX_CONTENT :
+ nPos == POS_INDEX ? TOX_INDEX : TOX_USER;
+
+ SwTOXMarkDescription aDesc(eType);
+
+ sal_uInt16 nLevel = (sal_uInt16)aLevelED.Denormalize(aLevelED.GetValue());
+ switch(nPos)
+ {
+ case POS_CONTENT : break;
+ case POS_INDEX: // Stichwortverzeichnismarke
+ {
+ UpdateKeyBoxes();
+ String aPrim(aKeyDCB.GetText());
+ String aSec(aKey2DCB.GetText());
+ aDesc.SetPrimKey(aPrim);
+ aDesc.SetSecKey(aSec);
+ aDesc.SetMainEntry(aMainEntryCB.IsChecked());
+ aDesc.SetPhoneticReadingOfAltStr(aPhoneticED0.GetText());
+ aDesc.SetPhoneticReadingOfPrimKey(aPhoneticED1.GetText());
+ aDesc.SetPhoneticReadingOfSecKey(aPhoneticED2.GetText());
+ }
+ break;
+ default: // Userdefinedverz.-Marke
+ {
+ String aName(aTypeDCB.GetSelectEntry());
+ aDesc.SetTOUName(aName);
+ }
+ }
+ if (aOrgStr != aEntryED.GetText())
+ aDesc.SetAltStr(aEntryED.GetText());
+ BOOL bApplyAll = aApplyToAllCB.IsChecked();
+ BOOL bWordOnly = aSearchCaseWordOnlyCB.IsChecked();
+ BOOL bCaseSensitive = aSearchCaseSensitiveCB.IsChecked();
+
+ pSh->StartAllAction();
+ // hier muessen alle gleichen Strings selektiert werden
+ // damit der Eintrag auf alle gleichen Strings angewandt wird
+ if(bApplyAll)
+ {
+ lcl_SelectSameStrings(*pSh, bWordOnly, bCaseSensitive);
+ }
+ aDesc.SetLevel(nLevel);
+ SwTOXMgr aMgr(pSh);
+ aMgr.InsertTOXMark(aDesc);
+ if(bApplyAll)
+ pSh->Pop(FALSE);
+
+ pSh->EndAllAction();
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Marke Updaten
+ --------------------------------------------------------------------*/
+
+
+void SwIndexMarkDlg::UpdateMark()
+{
+ String aAltText(aEntryED.GetText());
+ String* pAltText = aOrgStr != aEntryED.GetText() ? &aAltText : 0;
+ //empty alternative texts are not allowed
+ if(pAltText && !pAltText->Len())
+ return;
+
+ UpdateKeyBoxes();
+
+ sal_uInt16 nPos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry());
+ TOXTypes eType = TOX_USER;
+ if(POS_CONTENT == nPos)
+ eType = TOX_CONTENT;
+ else if(POS_INDEX == nPos)
+ eType = TOX_INDEX;
+
+ SwTOXMarkDescription aDesc(eType);
+ aDesc.SetLevel( static_cast< int >(aLevelED.GetValue()) );
+ if(pAltText)
+ aDesc.SetAltStr(*pAltText);
+
+ String aPrim(aKeyDCB.GetText());
+ if(aPrim.Len())
+ aDesc.SetPrimKey(aPrim);
+ String aSec(aKey2DCB.GetText());
+ if(aSec.Len())
+ aDesc.SetSecKey(aSec);
+
+ if(eType == TOX_INDEX)
+ {
+ aDesc.SetPhoneticReadingOfAltStr(aPhoneticED0.GetText());
+ aDesc.SetPhoneticReadingOfPrimKey(aPhoneticED1.GetText());
+ aDesc.SetPhoneticReadingOfSecKey(aPhoneticED2.GetText());
+ }
+ aDesc.SetMainEntry(aMainEntryCB.IsVisible() && aMainEntryCB.IsChecked());
+ pTOXMgr->UpdateTOXMark(aDesc);
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Neue Keys eintragen
+ --------------------------------------------------------------------*/
+
+
+void SwIndexMarkDlg::UpdateKeyBoxes()
+{
+ String aKey(aKeyDCB.GetText());
+ sal_uInt16 nPos = aKeyDCB.GetEntryPos(aKey);
+
+ if(nPos == LISTBOX_ENTRY_NOTFOUND && aKey.Len() > 0)
+ { // neuen Key erzeugen
+ aKeyDCB.InsertEntry(aKey);
+ }
+
+ aKey = aKey2DCB.GetText();
+ nPos = aKey2DCB.GetEntryPos(aKey);
+
+ if(nPos == LISTBOX_ENTRY_NOTFOUND && aKey.Len() > 0)
+ { // neuen Key erzeugen
+ aKey2DCB.InsertEntry(aKey);
+ }
+}
+/* -----------------13.10.99 15:10-------------------
+
+ --------------------------------------------------*/
+class SwNewUserIdxDlg : public ModalDialog
+{
+ OKButton aOKPB;
+ CancelButton aCancelPB;
+ HelpButton aHelpPB;
+ FixedLine aNameFL;
+ FixedText aNameFT;
+ Edit aNameED;
+
+ SwIndexMarkDlg* pDlg;
+
+ DECL_LINK( ModifyHdl, Edit*);
+
+ public:
+ SwNewUserIdxDlg(SwIndexMarkDlg* pParent) :
+ ModalDialog(pParent, SW_RES(DLG_NEW_USER_IDX)),
+ aOKPB(this, SW_RES( PB_OK )),
+ aCancelPB(this, SW_RES( PB_CANCEL )),
+ aHelpPB(this, SW_RES( PB_HELP )),
+ aNameFL(this, SW_RES( FL_NAME )),
+ aNameFT(this, SW_RES( FT_NAME )),
+ aNameED(this, SW_RES( ED_NAME )),
+ pDlg(pParent)
+ {
+ FreeResource();
+ aNameED.SetModifyHdl(LINK(this, SwNewUserIdxDlg, ModifyHdl));
+ aOKPB.Enable(sal_False);
+ aNameED.GrabFocus();
+ }
+
+ virtual void Apply();
+ String GetName(){return aNameED.GetText();}
+};
+void SwNewUserIdxDlg::Apply()
+{
+}
+
+IMPL_LINK( SwNewUserIdxDlg, ModifyHdl, Edit*, pEdit)
+{
+ aOKPB.Enable(pEdit->GetText().Len() && !pDlg->IsTOXType(pEdit->GetText()));
+ return 0;
+}
+
+IMPL_LINK( SwIndexMarkDlg, NewUserIdxHdl, Button*, EMPTYARG)
+{
+ SwNewUserIdxDlg* pDlg = new SwNewUserIdxDlg(this);
+ if(RET_OK == pDlg->Execute())
+ {
+ String sNewName(pDlg->GetName());
+ aTypeDCB.InsertEntry(sNewName);
+ aTypeDCB.SelectEntry(sNewName);
+ }
+ delete pDlg;
+ return 0;
+}
+/* -----------------------------17.01.00 12:18--------------------------------
+
+ ---------------------------------------------------------------------------*/
+IMPL_LINK( SwIndexMarkDlg, SearchTypeHdl, CheckBox*, pBox)
+{
+ sal_Bool bEnable = pBox->IsChecked() && pBox->IsEnabled();
+ aSearchCaseWordOnlyCB.Enable(bEnable);
+ aSearchCaseSensitiveCB.Enable(bEnable);
+ return 0;
+}
+/* -----------------07.09.99 10:30-------------------
+
+ --------------------------------------------------*/
+IMPL_LINK( SwIndexMarkDlg, InsertHdl, Button *, pButton )
+{
+ Apply();
+ //close the dialog if only one entry is available
+ if(!bNewMark && !aPrevBT.IsVisible() && !aNextBT.IsVisible())
+ CloseHdl(pButton);
+ return 0;
+}
+/* -----------------07.09.99 10:29-------------------
+
+ --------------------------------------------------*/
+IMPL_LINK( SwIndexMarkDlg, CloseHdl, Button *, EMPTYARG )
+{
+ if(bNewMark)
+ {
+ sal_uInt16 nSlot = FN_INSERT_IDX_ENTRY_DLG;
+ SfxViewFrame::Current()->GetDispatcher()->Execute(nSlot,
+ SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD);
+ }
+ else
+ {
+ ((SwIndexMarkModalDlg*)GetParent())->EndDialog(RET_CANCEL);
+ }
+ return 0;
+}
+/*--------------------------------------------------------------------
+ Beschreibung: VerzeichnisTyp auswaehlen nur bei Einfuegen
+ --------------------------------------------------------------------*/
+IMPL_LINK( SwIndexMarkDlg, ModifyHdl, ListBox *, pBox )
+{
+ if(&aTypeDCB == pBox)
+ {
+ // Verzeichnistyp setzen
+ sal_uInt16 nPos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry());
+ sal_Bool bLevelEnable = sal_False,
+ bKeyEnable = sal_False,
+ bSetKey2 = sal_False,
+ bKey2Enable = sal_False,
+ bEntryHasText = sal_False,
+ bKey1HasText = sal_False,
+ bKey2HasText = sal_False;
+ if(nPos == POS_INDEX)
+ {
+ if(aEntryED.GetText().Len())
+ bEntryHasText = sal_True;
+ aPhoneticED0.SetText(GetDefaultPhoneticReading(aEntryED.GetText()));
+
+ bKeyEnable = sal_True;
+ aKeyDCB.SetText(aKeyDCB.GetEntry(nKey1Pos));
+ aPhoneticED1.SetText(GetDefaultPhoneticReading(aKeyDCB.GetText()));
+ if(aKeyDCB.GetText().Len() > 0)
+ {
+ bKey1HasText = bSetKey2 = bKey2Enable = sal_True;
+ aKey2DCB.SetText(aKey2DCB.GetEntry(nKey2Pos));
+ aPhoneticED2.SetText(GetDefaultPhoneticReading(aKey2DCB.GetText()));
+ if(aKey2DCB.GetText().Len())
+ bKey2HasText = sal_True;
+ }
+ }
+ else
+ {
+ bLevelEnable = sal_True;
+ aLevelED.SetMax(MAXLEVEL);
+ aLevelED.SetValue(aLevelED.Normalize(0));
+ bSetKey2 = sal_True;
+ }
+ aLevelFT.Show(bLevelEnable);
+ aLevelED.Show(bLevelEnable);
+ aMainEntryCB.Show(nPos == POS_INDEX);
+
+ aKeyFT.Enable(bKeyEnable);
+ aKeyDCB.Enable(bKeyEnable);
+ if ( bSetKey2 )
+ {
+ aKey2DCB.Enable(bKey2Enable);
+ aKey2FT.Enable(bKey2Enable);
+ }
+ aPhoneticFT0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled);
+ aPhoneticFT1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled);
+ aPhoneticFT2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled);
+ }
+ else //aEntryED !!aEntryED is not a ListBox but a Edit
+ {
+ BOOL bHasText = (aEntryED.GetText().Len()>0);
+ if(!bHasText)
+ {
+ aPhoneticED0.SetText(aEmptyStr);
+ bPhoneticED0_ChangedByUser = FALSE;
+ }
+ else if(!bPhoneticED0_ChangedByUser)
+ aPhoneticED0.SetText(GetDefaultPhoneticReading(aEntryED.GetText()));
+
+ aPhoneticFT0.Enable(bHasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED0.Enable(bHasText&&bIsPhoneticReadingEnabled);
+ }
+ aOKBT.Enable(!pSh->HasReadonlySel() &&
+ (aEntryED.GetText().Len() || pSh->GetCrsrCnt(sal_False)));
+ return 0;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+IMPL_LINK_INLINE_START( SwIndexMarkDlg, NextHdl, Button *, EMPTYARG )
+{
+ InsertUpdate();
+ pTOXMgr->NextTOXMark();
+ UpdateDialog();
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwIndexMarkDlg, NextHdl, Button *, EMPTYARG )
+
+
+IMPL_LINK_INLINE_START( SwIndexMarkDlg, NextSameHdl, Button *, EMPTYARG )
+{
+ InsertUpdate();
+ pTOXMgr->NextTOXMark(sal_True);
+ UpdateDialog();
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwIndexMarkDlg, NextSameHdl, Button *, EMPTYARG )
+
+
+IMPL_LINK_INLINE_START( SwIndexMarkDlg, PrevHdl, Button *, EMPTYARG )
+{
+ InsertUpdate();
+ pTOXMgr->PrevTOXMark();
+ UpdateDialog();
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwIndexMarkDlg, PrevHdl, Button *, EMPTYARG )
+
+
+IMPL_LINK_INLINE_START( SwIndexMarkDlg, PrevSameHdl, Button *, EMPTYARG )
+{
+ InsertUpdate();
+ pTOXMgr->PrevTOXMark(sal_True);
+ UpdateDialog();
+
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwIndexMarkDlg, PrevSameHdl, Button *, EMPTYARG )
+
+
+IMPL_LINK( SwIndexMarkDlg, DelHdl, Button *, EMPTYARG )
+{
+ bDel = sal_True;
+ InsertUpdate();
+ bDel = sal_False;
+
+ if(pTOXMgr->GetCurTOXMark())
+ UpdateDialog();
+ else
+ {
+ CloseHdl(&aCancelBT);
+ SfxViewFrame::Current()->GetBindings().Invalidate(FN_EDIT_IDX_ENTRY_DLG);
+ }
+ return 0;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Dialoganzeige erneuern
+ --------------------------------------------------------------------*/
+
+
+void SwIndexMarkDlg::UpdateDialog()
+{
+ DBG_ASSERT(pSh && pTOXMgr, "Shell nicht da?");
+ SwTOXMark* pMark = pTOXMgr->GetCurTOXMark();
+ ASSERT(pMark, "Keine aktuelle Markierung");
+ if(!pMark)
+ return;
+
+ ViewShell::SetCareWin( GetParent() );
+
+ aOrgStr = pMark->GetText();
+ aEntryED.SetText(aOrgStr);
+
+ // Verzeichnistyp setzen
+ sal_Bool bLevelEnable = sal_True,
+ bKeyEnable = sal_False,
+ bKey2Enable = sal_False,
+ bEntryHasText = sal_False,
+ bKey1HasText = sal_False,
+ bKey2HasText = sal_False;
+
+ TOXTypes eCurType = pMark->GetTOXType()->GetType();
+ if(TOX_INDEX == eCurType)
+ {
+ bLevelEnable = sal_False;
+ bKeyEnable = sal_True;
+ bKey1HasText = bKey2Enable = 0 != pMark->GetPrimaryKey().Len();
+ bKey2HasText = 0 != pMark->GetSecondaryKey().Len();
+ bEntryHasText = 0 != pMark->GetText().Len();
+ aKeyDCB.SetText( pMark->GetPrimaryKey() );
+ aKey2DCB.SetText( pMark->GetSecondaryKey() );
+ aPhoneticED0.SetText( pMark->GetTextReading() );
+ aPhoneticED1.SetText( pMark->GetPrimaryKeyReading() );
+ aPhoneticED2.SetText( pMark->GetSecondaryKeyReading() );
+ aMainEntryCB.Check(pMark->IsMainEntry());
+ }
+ else if(TOX_CONTENT == eCurType || TOX_USER == eCurType)
+ {
+ aLevelED.SetValue(aLevelED.Normalize(pMark->GetLevel()));
+ }
+ aKeyFT.Enable(bKeyEnable);
+ aKeyDCB.Enable(bKeyEnable);
+ aLevelED.SetMax(MAXLEVEL);
+ aLevelFT.Show(bLevelEnable);
+ aLevelED.Show(bLevelEnable);
+ aMainEntryCB.Show(!bLevelEnable);
+ aKey2FT.Enable(bKey2Enable);
+ aKey2DCB.Enable(bKey2Enable);
+
+ UpdateLanguageDependenciesForPhoneticReading();
+ aPhoneticFT0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled);
+ aPhoneticFT1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled);
+ aPhoneticFT2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled);
+
+ // Verzeichnis-Typ setzen
+ aTypeDCB.SelectEntry(pMark->GetTOXType()->GetTypeName());
+
+ // Next - Prev - Buttons setzen
+ pSh->SttCrsrMove();
+ if( aPrevBT.IsVisible() )
+ {
+ const SwTOXMark* pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_PRV );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_NXT );
+ aPrevBT.Enable( pMoveMark != pMark );
+ pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_NXT );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_PRV );
+ aNextBT.Enable( pMoveMark != pMark );
+ }
+
+ if( aPrevSameBT.IsVisible() )
+ {
+ const SwTOXMark* pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_PRV );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_SAME_NXT );
+ aPrevSameBT.Enable( pMoveMark != pMark );
+ pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_NXT );
+ if( pMoveMark != pMark )
+ pSh->GotoTOXMark( *pMoveMark, TOX_SAME_PRV );
+ aNextSameBT.Enable( pMoveMark != pMark );
+ }
+
+ sal_Bool bEnable = !pSh->HasReadonlySel();
+ aOKBT.Enable( bEnable );
+ aDelBT.Enable( bEnable );
+ aEntryED.SetReadOnly( !bEnable );
+ aLevelED.SetReadOnly( !bEnable );
+ aKeyDCB.SetReadOnly( !bEnable );
+ aKey2DCB.SetReadOnly( !bEnable );
+
+ pSh->SelectTxtAttr( RES_TXTATR_TOXMARK, pMark->GetTxtTOXMark() );
+ // we need the point at the start of the attribut
+ pSh->SwapPam();
+
+ pSh->EndCrsrMove();
+}
+
+/*--------------------------------------------------------------------
+ Remind wether the edit boxes for Phonetic reading are changed manually
+ --------------------------------------------------------------------*/
+
+IMPL_LINK( SwIndexMarkDlg, PhoneticEDModifyHdl, Edit *, pEdit )
+{
+ if(&aPhoneticED0 == pEdit)
+ {
+ bPhoneticED0_ChangedByUser = pEdit->GetText().Len()>0;
+ }
+ else if(&aPhoneticED1 == pEdit)
+ {
+ bPhoneticED1_ChangedByUser = pEdit->GetText().Len()>0;
+ }
+ else if(&aPhoneticED2 == pEdit)
+ {
+ bPhoneticED2_ChangedByUser = pEdit->GetText().Len()>0;
+ }
+ return 0;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Enable Disable des 2. Schluessels
+ --------------------------------------------------------------------*/
+
+IMPL_LINK( SwIndexMarkDlg, KeyDCBModifyHdl, ComboBox *, pBox )
+{
+ if(&aKeyDCB == pBox)
+ {
+ sal_Bool bEnable = pBox->GetText().Len() > 0;
+ if(!bEnable)
+ {
+ aKey2DCB.SetText(aEmptyStr);
+ aPhoneticED1.SetText(aEmptyStr);
+ aPhoneticED2.SetText(aEmptyStr);
+ bPhoneticED1_ChangedByUser = FALSE;
+ bPhoneticED2_ChangedByUser = FALSE;
+ }
+ else
+ {
+ if(pBox->IsInDropDown())
+ {
+ //reset bPhoneticED1_ChangedByUser if a completly new string is selected
+ bPhoneticED1_ChangedByUser = FALSE;
+ }
+ if(!bPhoneticED1_ChangedByUser)
+ aPhoneticED1.SetText(GetDefaultPhoneticReading(pBox->GetText()));
+ }
+ aKey2DCB.Enable(bEnable);
+ aKey2FT.Enable(bEnable);
+ }
+ else if(&aKey2DCB == pBox)
+ {
+ if(!(pBox->GetText().Len()>0))
+ {
+ aPhoneticED2.SetText(aEmptyStr);
+ bPhoneticED2_ChangedByUser = FALSE;
+ }
+ else
+ {
+ if(pBox->IsInDropDown())
+ {
+ //reset bPhoneticED1_ChangedByUser if a completly new string is selected
+ bPhoneticED2_ChangedByUser = FALSE;
+ }
+ if(!bPhoneticED2_ChangedByUser)
+ aPhoneticED2.SetText(GetDefaultPhoneticReading(pBox->GetText()));
+ }
+ }
+ sal_Bool bKey1HasText = (0 != aKeyDCB.GetText().Len());
+ sal_Bool bKey2HasText = (0 != aKey2DCB.GetText().Len());
+
+ aPhoneticFT1.Enable(bKey1HasText&&bIsPhoneticReadingEnabled);
+ aPhoneticED1.Enable(bKey1HasText&bIsPhoneticReadingEnabled);
+ aPhoneticFT2.Enable(bKey2HasText&bIsPhoneticReadingEnabled);
+ aPhoneticED2.Enable(bKey2HasText&bIsPhoneticReadingEnabled);
+
+ return 0;
+}
+
+/*-----------------25.02.94 21:19-------------------
+ dtor ueberladen
+--------------------------------------------------*/
+
+
+SwIndexMarkDlg::~SwIndexMarkDlg()
+{
+ delete pTOXMgr;
+ ViewShell::SetCareWin( 0 );
+}
+/* -----------------07.09.99 08:41-------------------
+
+ --------------------------------------------------*/
+void SwIndexMarkDlg::ReInitDlg(SwWrtShell& rWrtShell, SwTOXMark* pCurTOXMark)
+{
+ pSh = &rWrtShell;
+ delete pTOXMgr;
+ pTOXMgr = new SwTOXMgr(pSh);
+ if(pCurTOXMark)
+ {
+ for(USHORT i = 0; i < pTOXMgr->GetTOXMarkCount(); i++)
+ if(pTOXMgr->GetTOXMark(i) == pCurTOXMark)
+ {
+ pTOXMgr->SetCurTOXMark(i);
+ break;
+ }
+ }
+ InitControls();
+}
+/* -----------------06.10.99 10:00-------------------
+
+ --------------------------------------------------*/
+SwIndexMarkFloatDlg::SwIndexMarkFloatDlg(SfxBindings* _pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent,
+ SfxChildWinInfo* pInfo,
+ sal_Bool bNew) :
+SfxModelessDialog(_pBindings, pChild, pParent, SvtCJKOptions().IsCJKFontEnabled()?SW_RES(DLG_INSIDXMARK_CJK):SW_RES(DLG_INSIDXMARK)),
+ aDlg(this, bNew, SW_RES(WIN_DLG), SvtCJKOptions().IsCJKFontEnabled()?DLG_INSIDXMARK_CJK:DLG_INSIDXMARK, *::GetActiveWrtShell())
+{
+ FreeResource();
+ aDlg.ReInitDlg(*::GetActiveWrtShell());
+ Initialize(pInfo);
+}
+/* -----------------06.10.99 10:27-------------------
+
+ --------------------------------------------------*/
+void SwIndexMarkFloatDlg::Activate()
+{
+ SfxModelessDialog::Activate();
+ aDlg.Activate();
+}
+
+void SwIndexMarkFloatDlg::ReInitDlg(SwWrtShell& rWrtShell)
+{
+ aDlg.ReInitDlg( rWrtShell );
+}
+
+/* -----------------06.10.99 10:35-------------------
+
+ --------------------------------------------------*/
+SwIndexMarkModalDlg::SwIndexMarkModalDlg(Window *pParent, SwWrtShell& rSh, SwTOXMark* pCurTOXMark) :
+SvxStandardDialog(pParent, SvtCJKOptions().IsCJKFontEnabled()?SW_RES(DLG_EDIT_IDXMARK_CJK):SW_RES(DLG_EDIT_IDXMARK)),
+ aDlg(this, sal_False, SW_RES(WIN_DLG), SvtCJKOptions().IsCJKFontEnabled()?DLG_EDIT_IDXMARK_CJK:DLG_EDIT_IDXMARK, rSh)
+{
+ FreeResource();
+ aDlg.ReInitDlg(rSh, pCurTOXMark);
+}
+/* -----------------06.10.99 10:46-------------------
+
+ --------------------------------------------------*/
+void SwIndexMarkModalDlg::Apply()
+{
+ aDlg.Apply();
+}
+/* -----------------16.09.99 14:19-------------------
+
+ --------------------------------------------------*/
+class SwCreateAuthEntryDlg_Impl : public ModalDialog
+{
+ FixedLine aEntriesFL;
+
+ FixedText* pFixedTexts[AUTH_FIELD_END];
+ ListBox* pTypeListBox;
+ ComboBox* pIdentifierBox;
+ Edit* pEdits[AUTH_FIELD_END];
+
+ OKButton aOKBT;
+ CancelButton aCancelBT;
+ HelpButton aHelpBT;
+
+ Link aShortNameCheckLink;
+
+ SwWrtShell& rWrtSh;
+
+ sal_Bool m_bNewEntryMode;
+ sal_Bool m_bNameAllowed;
+
+ DECL_LINK(IdentifierHdl, ComboBox*);
+ DECL_LINK(ShortNameHdl, Edit*);
+ DECL_LINK(EnableHdl, ListBox* pBox);
+
+public:
+ SwCreateAuthEntryDlg_Impl(Window* pParent,
+ const String pFields[],
+ SwWrtShell& rSh,
+ sal_Bool bNewEntry,
+ sal_Bool bCreate);
+ ~SwCreateAuthEntryDlg_Impl();
+
+ String GetEntryText(ToxAuthorityField eField) const;
+
+ void SetCheckNameHdl(const Link& rLink) {aShortNameCheckLink = rLink;}
+
+};
+/*-- 15.09.99 08:43:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct TextInfo
+{
+ sal_uInt16 nToxField;
+ sal_uInt16 nHelpId;
+};
+static const TextInfo aTextInfoArr[] =
+{
+ {AUTH_FIELD_IDENTIFIER, HID_AUTH_FIELD_IDENTIFIER },
+ {AUTH_FIELD_AUTHORITY_TYPE, HID_AUTH_FIELD_AUTHORITY_TYPE },
+ {AUTH_FIELD_AUTHOR, HID_AUTH_FIELD_AUTHOR },
+ {AUTH_FIELD_TITLE, HID_AUTH_FIELD_TITLE },
+ {AUTH_FIELD_YEAR, HID_AUTH_FIELD_YEAR },
+ {AUTH_FIELD_PUBLISHER, HID_AUTH_FIELD_PUBLISHER },
+ {AUTH_FIELD_ADDRESS, HID_AUTH_FIELD_ADDRESS },
+ {AUTH_FIELD_ISBN, HID_AUTH_FIELD_ISBN },
+ {AUTH_FIELD_CHAPTER, HID_AUTH_FIELD_CHAPTER },
+ {AUTH_FIELD_PAGES, HID_AUTH_FIELD_PAGES },
+ {AUTH_FIELD_EDITOR, HID_AUTH_FIELD_EDITOR },
+ {AUTH_FIELD_EDITION, HID_AUTH_FIELD_EDITION },
+ {AUTH_FIELD_BOOKTITLE, HID_AUTH_FIELD_BOOKTITLE },
+ {AUTH_FIELD_VOLUME, HID_AUTH_FIELD_VOLUME },
+ {AUTH_FIELD_HOWPUBLISHED, HID_AUTH_FIELD_HOWPUBLISHED },
+ {AUTH_FIELD_ORGANIZATIONS, HID_AUTH_FIELD_ORGANIZATIONS },
+ {AUTH_FIELD_INSTITUTION, HID_AUTH_FIELD_INSTITUTION },
+ {AUTH_FIELD_SCHOOL, HID_AUTH_FIELD_SCHOOL },
+ {AUTH_FIELD_REPORT_TYPE, HID_AUTH_FIELD_REPORT_TYPE },
+ {AUTH_FIELD_MONTH, HID_AUTH_FIELD_MONTH },
+ {AUTH_FIELD_JOURNAL, HID_AUTH_FIELD_JOURNAL },
+ {AUTH_FIELD_NUMBER, HID_AUTH_FIELD_NUMBER },
+ {AUTH_FIELD_SERIES, HID_AUTH_FIELD_SERIES },
+ {AUTH_FIELD_ANNOTE, HID_AUTH_FIELD_ANNOTE },
+ {AUTH_FIELD_NOTE, HID_AUTH_FIELD_NOTE },
+ {AUTH_FIELD_URL, HID_AUTH_FIELD_URL },
+ {AUTH_FIELD_CUSTOM1, HID_AUTH_FIELD_CUSTOM1 },
+ {AUTH_FIELD_CUSTOM2, HID_AUTH_FIELD_CUSTOM2 },
+ {AUTH_FIELD_CUSTOM3, HID_AUTH_FIELD_CUSTOM3 },
+ {AUTH_FIELD_CUSTOM4, HID_AUTH_FIELD_CUSTOM4 },
+ {AUTH_FIELD_CUSTOM5, HID_AUTH_FIELD_CUSTOM5 }
+};
+
+sal_Bool SwAuthMarkDlg::bIsFromComponent = sal_True;
+
+SwAuthMarkDlg::SwAuthMarkDlg( Window *pParent,
+ const ResId& rResId,
+ sal_Bool bNewDlg) :
+ Window(pParent, rResId),
+ aFromComponentRB( this, ResId(RB_FROMCOMPONENT, *rResId.GetResMgr() )),
+ aFromDocContentRB( this, ResId(RB_FROMDOCCONTENT, *rResId.GetResMgr() )),
+
+ aAuthorFT( this, ResId(FT_AUTHOR, *rResId.GetResMgr() )),
+ aAuthorFI( this, ResId(FI_AUTHOR, *rResId.GetResMgr() )),
+ aTitleFT( this, ResId(FT_TITLE, *rResId.GetResMgr() )),
+ aTitleFI( this, ResId(FI_TITLE, *rResId.GetResMgr() )),
+ aEntryFT( this, ResId(FT_ENTRY, *rResId.GetResMgr() )),
+ aEntryED( this, ResId(ED_ENTRY, *rResId.GetResMgr() )),
+ aEntryLB( this, ResId(LB_ENTRY, *rResId.GetResMgr() )),
+
+ aEntryFL( this, ResId(FL_ENTRY, *rResId.GetResMgr() )),
+
+ aOKBT( this, ResId(PB_OK, *rResId.GetResMgr() )),
+ aCancelBT( this, ResId(PB_CANCEL, *rResId.GetResMgr() )),
+ aHelpBT( this, ResId(PB_HELP, *rResId.GetResMgr() )),
+ aCreateEntryPB(this,ResId(PB_CREATEENTRY, *rResId.GetResMgr())),
+ aEditEntryPB(this, ResId(PB_EDITENTRY, *rResId.GetResMgr())),
+
+ sChangeST( ResId(ST_CHANGE, *rResId.GetResMgr())),
+ bNewEntry(bNewDlg),
+ bBibAccessInitialized(sal_False),
+
+ pSh(0)
+{
+ SetStyle(GetStyle()|WB_DIALOGCONTROL);
+ FreeResource();
+
+ aFromComponentRB.SetHelpId(HID_AUTH_MARK_DLG_FROM_COMP_RB);
+ aFromDocContentRB.SetHelpId(HID_AUTH_MARK_DLG_FROM_DOC_RB );
+ aEntryED.SetHelpId(HID_AUTH_MARK_DLG_ID_LISTBOX );
+ aEntryLB.SetHelpId(HID_AUTH_MARK_DLG_ID_LISTBOX );
+
+ aFromComponentRB.Show(bNewEntry);
+ aFromDocContentRB.Show(bNewEntry);
+ aFromComponentRB.Check(bIsFromComponent);
+ aFromDocContentRB.Check(!bIsFromComponent);
+
+ aOKBT .SetHelpId(HID_INSERT_AUTH_MRK_OK );
+ aCancelBT .SetHelpId(HID_INSERT_AUTH_MRK_CLOSE);
+ aEntryED .SetHelpId(HID_INSERT_AUTH_MRK_ENTRY );
+ aCreateEntryPB .SetHelpId(HID_INSERT_AUTH_MRK_CREATE_ENTRY );
+ aEditEntryPB .SetHelpId(HID_INSERT_AUTH_MRK_EDIT_ENTRY );
+
+ aOKBT.SetClickHdl(LINK(this,SwAuthMarkDlg, InsertHdl));
+ aCancelBT.SetClickHdl(LINK(this,SwAuthMarkDlg, CloseHdl));
+ aCreateEntryPB.SetClickHdl(LINK(this,SwAuthMarkDlg, CreateEntryHdl));
+ aEditEntryPB.SetClickHdl(LINK(this,SwAuthMarkDlg, CreateEntryHdl));
+ aFromComponentRB.SetClickHdl(LINK(this,SwAuthMarkDlg, ChangeSourceHdl));
+ aFromDocContentRB.SetClickHdl(LINK(this,SwAuthMarkDlg, ChangeSourceHdl));
+ aEntryED.SetModifyHdl(LINK(this,SwAuthMarkDlg, EditModifyHdl));
+
+ GetParent()->SetText(String(SW_RES(
+ bNewEntry ? STR_AUTHMRK_INSERT : STR_AUTHMRK_EDIT)));
+ aEntryED.Show(!bNewEntry);
+ aEntryLB.Show(bNewEntry);
+ if(!bNewEntry)
+ {
+ aOKBT.SetText(sChangeST);
+ }
+ else
+ {
+ aEntryLB.SetSelectHdl(LINK(this, SwAuthMarkDlg, CompEntryHdl));
+ }
+}
+/*-- 15.09.99 08:43:25---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SwAuthMarkDlg::~SwAuthMarkDlg()
+{
+}
+/*-- 15.09.99 08:43:25---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwAuthMarkDlg::ReInitDlg(SwWrtShell& rWrtShell)
+{
+ pSh = &rWrtShell;
+ InitControls();
+}
+/* -----------------15.09.99 08:57-------------------
+
+ --------------------------------------------------*/
+IMPL_LINK( SwAuthMarkDlg, CloseHdl, PushButton *, EMPTYARG )
+{
+ if(bNewEntry)
+ {
+ sal_uInt16 nSlot = FN_INSERT_AUTH_ENTRY_DLG;
+ SfxViewFrame::Current()->GetDispatcher()->Execute(nSlot,
+ SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD);
+ }
+ else
+ {
+ ((SwAuthMarkModalDlg*)GetParent())->EndDialog(RET_CANCEL);
+ }
+ return 0;
+}
+/* -----------------06.12.99 13:54-------------------
+
+ --------------------------------------------------*/
+static String lcl_FindColumnEntry(const beans::PropertyValue* pFields, sal_Int32 nLen, const String& rColumnTitle)
+{
+ String sRet;
+ OUString uColumnTitle = rColumnTitle;
+ for(sal_uInt16 i = 0; i < nLen; i++)
+ {
+ OUString uTmp;
+ if(pFields[i].Name == uColumnTitle &&
+ (pFields[i].Value >>= uTmp))
+ {
+ sRet = String(uTmp);
+ break;
+ }
+ }
+ return sRet;
+}
+/* -----------------------------07.12.99 15:39--------------------------------
+
+ ---------------------------------------------------------------------------*/
+IMPL_LINK( SwAuthMarkDlg, CompEntryHdl, ListBox*, pBox)
+{
+ String sEntry(pBox->GetSelectEntry());
+ if(bIsFromComponent)
+ {
+ if(xBibAccess.is() && sEntry.Len())
+ {
+ OUString uEntry(sEntry);
+ if(xBibAccess->hasByName(uEntry))
+ {
+ uno::Any aEntry(xBibAccess->getByName(uEntry));
+ uno::Sequence<beans::PropertyValue> aFieldProps;
+ if(aEntry >>= aFieldProps)
+ {
+ const beans::PropertyValue* pProps = aFieldProps.getConstArray();
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END && i < aFieldProps.getLength(); i++)
+ {
+ m_sFields[i] = lcl_FindColumnEntry(
+ pProps, aFieldProps.getLength(), m_sColumnTitles[i]);
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if(sEntry.Len())
+ {
+ const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
+ pSh->GetFldType(RES_AUTHORITY, aEmptyStr);
+ const SwAuthEntry* pEntry = pFType ? pFType->GetEntryByIdentifier(sEntry) : 0;
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ m_sFields[i] = pEntry ?
+ pEntry->GetAuthorField((ToxAuthorityField)i) : aEmptyStr;
+ }
+ }
+ if(!pBox->GetSelectEntry().Len())
+ {
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ m_sFields[i] = aEmptyStr;
+ }
+ aAuthorFI.SetText(m_sFields[AUTH_FIELD_AUTHOR]);
+ aTitleFI.SetText(m_sFields[AUTH_FIELD_TITLE]);
+ return 0;
+}
+
+/* -----------------15.09.99 08:57-------------------
+
+ --------------------------------------------------*/
+IMPL_LINK( SwAuthMarkDlg, InsertHdl, PushButton *, EMPTYARG )
+{
+ //insert or update the SwAuthorityField...
+ if(pSh)
+ {
+ sal_Bool bDifferent = sal_False;
+ DBG_ASSERT(m_sFields[AUTH_FIELD_IDENTIFIER].Len() , "No Id is set!");
+ DBG_ASSERT(m_sFields[AUTH_FIELD_AUTHORITY_TYPE].Len() , "No authority type is set!");
+ //check if the entry already exists with different content
+ const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
+ pSh->GetFldType(RES_AUTHORITY, aEmptyStr);
+ const SwAuthEntry* pEntry = pFType ?
+ pFType->GetEntryByIdentifier( m_sFields[AUTH_FIELD_IDENTIFIER])
+ : 0;
+ if(pEntry)
+ {
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END && !bDifferent; i++)
+ bDifferent |= m_sFields[i] != pEntry->GetAuthorField((ToxAuthorityField)i);
+ if(bDifferent)
+ {
+ QueryBox aQuery(this, SW_RES(DLG_CHANGE_AUTH_ENTRY));
+ if(RET_YES != aQuery.Execute())
+ return 0;
+ }
+ }
+
+ SwFldMgr aMgr(pSh);
+ String sFields;
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ {
+ sFields += m_sFields[i];
+ sFields += TOX_STYLE_DELIMITER;
+ }
+ if(bNewEntry)
+ {
+ if(bDifferent)
+ {
+ SwAuthEntry aNewData;
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ aNewData.SetAuthorField((ToxAuthorityField)i, m_sFields[i]);
+ pSh->ChangeAuthorityData(&aNewData);
+ }
+ SwInsertFld_Data aData(TYP_AUTHORITY, 0, sFields, aEmptyStr, 0 );
+ aMgr.InsertFld( aData );
+ }
+ else if(aMgr.GetCurFld())
+ {
+ aMgr.UpdateCurFld(0, sFields, aEmptyStr);
+ }
+ }
+ if(!bNewEntry)
+ CloseHdl(0);
+ return 0;
+}
+/* -----------------17.09.99 13:06-------------------
+
+ --------------------------------------------------*/
+IMPL_LINK(SwAuthMarkDlg, CreateEntryHdl, PushButton*, pButton)
+{
+ sal_Bool bCreate = pButton == &aCreateEntryPB;
+ String sOldId = m_sCreatedEntry[0];
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ m_sCreatedEntry[i] = bCreate ? aEmptyStr : m_sFields[i];
+ SwCreateAuthEntryDlg_Impl aDlg(pButton,
+ bCreate ? m_sCreatedEntry : m_sFields,
+ *pSh, bNewEntry, bCreate);
+ if(bNewEntry)
+ {
+ aDlg.SetCheckNameHdl(LINK(this, SwAuthMarkDlg, IsEntryAllowedHdl));
+ }
+ if(RET_OK == aDlg.Execute())
+ {
+ if(bCreate && sOldId.Len())
+ {
+ aEntryLB.RemoveEntry(sOldId);
+ }
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ {
+ m_sFields[i] = aDlg.GetEntryText((ToxAuthorityField)i);
+ m_sCreatedEntry[i] = m_sFields[i];
+ }
+ if(bNewEntry && !aFromDocContentRB.IsChecked())
+ {
+ aFromDocContentRB.Check(sal_True);
+ ChangeSourceHdl(&aFromDocContentRB);
+ }
+ if(bCreate)
+ {
+ DBG_ASSERT(LISTBOX_ENTRY_NOTFOUND ==
+ aEntryLB.GetEntryPos(m_sFields[AUTH_FIELD_IDENTIFIER]),
+ "entry exists!");
+ aEntryLB.InsertEntry(m_sFields[AUTH_FIELD_IDENTIFIER]);
+ aEntryLB.SelectEntry(m_sFields[AUTH_FIELD_IDENTIFIER]);
+ }
+ aEntryED.SetText(m_sFields[AUTH_FIELD_IDENTIFIER]);
+ aAuthorFI.SetText(m_sFields[AUTH_FIELD_AUTHOR]);
+ aTitleFI.SetText(m_sFields[AUTH_FIELD_TITLE]);
+ aOKBT.Enable();
+ }
+ return 0;
+}
+/* -----------------------------20.12.99 14:26--------------------------------
+
+ ---------------------------------------------------------------------------*/
+IMPL_LINK(SwAuthMarkDlg, ChangeSourceHdl, RadioButton*, pButton)
+{
+ sal_Bool bFromComp = (pButton == &aFromComponentRB);
+ bIsFromComponent = bFromComp;
+ aCreateEntryPB.Enable(!bIsFromComponent);
+ aEntryLB.Clear();
+ if(bIsFromComponent)
+ {
+ if(!bBibAccessInitialized)
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMSF = getProcessServiceFactory();
+ xBibAccess = uno::Reference< container::XNameAccess > (
+ xMSF->createInstance( C2U("com.sun.star.frame.Bibliography") ),
+ uno::UNO_QUERY );
+ uno::Reference< beans::XPropertySet > xPropSet(xBibAccess, uno::UNO_QUERY);
+ OUString uPropName(C2U("BibliographyDataFieldNames"));
+ if(xPropSet.is() && xPropSet->getPropertySetInfo()->hasPropertyByName(uPropName))
+ {
+ uno::Any aNames = xPropSet->getPropertyValue(uPropName);
+ uno::Sequence<beans::PropertyValue> aSeq;
+ if( aNames >>= aSeq)
+ {
+ const beans::PropertyValue* pArr = aSeq.getConstArray();
+ for(sal_uInt16 i = 0; i < aSeq.getLength(); i++)
+ {
+ String sTitle = pArr[i].Name;
+ sal_Int16 nField = 0;
+ pArr[i].Value >>= nField;
+ if(nField >= 0 && nField < AUTH_FIELD_END)
+ m_sColumnTitles[nField] = sTitle;
+ }
+ }
+ }
+ bBibAccessInitialized = sal_True;
+ }
+ if(xBibAccess.is())
+ {
+ uno::Sequence<OUString> aIdentifiers = xBibAccess->getElementNames();
+ const OUString* pNames = aIdentifiers.getConstArray();
+ for(sal_uInt16 i = 0; i < aIdentifiers.getLength(); i++)
+ {
+ aEntryLB.InsertEntry(pNames[i]);
+ }
+ }
+ }
+ else
+ {
+ const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
+ pSh->GetFldType(RES_AUTHORITY, aEmptyStr);
+ if(pFType)
+ {
+ SvStringsDtor aIds;
+ pFType->GetAllEntryIdentifiers( aIds );
+ for(sal_uInt16 n = 0; n < aIds.Count(); n++)
+ aEntryLB.InsertEntry(*aIds.GetObject(n));
+ }
+ if(m_sCreatedEntry[AUTH_FIELD_IDENTIFIER].Len())
+ aEntryLB.InsertEntry(m_sCreatedEntry[AUTH_FIELD_IDENTIFIER]);
+ }
+ aEntryLB.SelectEntryPos(0);
+ CompEntryHdl(&aEntryLB);
+ return 0;
+}
+/* -----------------15.10.2002 13:16-----------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK(SwAuthMarkDlg, EditModifyHdl, Edit*, pEdit)
+{
+ Link aAllowed = LINK(this, SwAuthMarkDlg, IsEntryAllowedHdl);
+ long nResult = aAllowed.Call(pEdit);
+ aOKBT.Enable(nResult > 0);
+ if(nResult)
+ {
+ String sEntry(pEdit->GetText());
+ m_sFields[AUTH_FIELD_IDENTIFIER] = sEntry;
+ m_sCreatedEntry[AUTH_FIELD_IDENTIFIER] = sEntry;
+ }
+ return 0;
+};
+/* -----------------------------20.12.99 15:11--------------------------------
+
+ ---------------------------------------------------------------------------*/
+IMPL_LINK(SwAuthMarkDlg, IsEntryAllowedHdl, Edit*, pEdit)
+{
+ String sEntry = pEdit->GetText();
+ sal_Bool bAllowed = sal_False;
+ if(sEntry.Len())
+ {
+ if(aEntryLB.GetEntryPos(sEntry) != LISTBOX_ENTRY_NOTFOUND)
+ return 0;
+ else if(bIsFromComponent)
+ {
+ const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
+ pSh->GetFldType(RES_AUTHORITY, aEmptyStr);
+ bAllowed = !pFType || !pFType->GetEntryByIdentifier(sEntry);
+ }
+ else
+ {
+ bAllowed = !xBibAccess.is() || !xBibAccess->hasByName(sEntry);
+ }
+ }
+ return bAllowed;
+}
+/* -----------------21.09.99 14:19-------------------
+
+ --------------------------------------------------*/
+void SwAuthMarkDlg::InitControls()
+{
+ DBG_ASSERT(pSh, "Shell nicht da?");
+ SwField* pField = pSh->GetCurFld();
+ ASSERT(bNewEntry || pField, "Keine aktuelle Markierung");
+ if(bNewEntry)
+ {
+ ChangeSourceHdl(aFromComponentRB.IsChecked() ? &aFromComponentRB : &aFromDocContentRB);
+ aCreateEntryPB.Enable(!aFromComponentRB.IsChecked());
+ if(!aFromComponentRB.IsChecked() && m_sCreatedEntry[0].Len())
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ m_sFields[i] = m_sCreatedEntry[i];
+ }
+ if(bNewEntry || !pField || pField->GetTyp()->Which() != RES_AUTHORITY)
+ return;
+
+ const SwAuthEntry* pEntry = ((SwAuthorityFieldType*)pField->GetTyp())->
+ GetEntryByHandle(((SwAuthorityField*)pField)->GetHandle());
+
+ DBG_ASSERT(pEntry, "No authority entry found");
+ if(!pEntry)
+ return;
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ m_sFields[i] = pEntry->GetAuthorField((ToxAuthorityField)i);
+
+ aEntryED.SetText(pEntry->GetAuthorField(AUTH_FIELD_IDENTIFIER));
+ aAuthorFI.SetText(pEntry->GetAuthorField(AUTH_FIELD_AUTHOR));
+ aTitleFI.SetText(pEntry->GetAuthorField(AUTH_FIELD_TITLE));
+}
+/* -----------------------------05.09.2002 09:44------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SwAuthMarkDlg::Activate()
+{
+ aOKBT.Enable(!pSh->HasReadonlySel());
+ Window::Activate();
+}
+/* -----------------16.09.99 14:27-------------------
+
+ --------------------------------------------------*/
+SwCreateAuthEntryDlg_Impl::SwCreateAuthEntryDlg_Impl(Window* pParent,
+ const String pFields[],
+ SwWrtShell& rSh,
+ sal_Bool bNewEntry,
+ sal_Bool bCreate) :
+ ModalDialog(pParent, SW_RES(DLG_CREATE_AUTH_ENTRY)),
+ aEntriesFL(this, SW_RES(FL_ENTRIES )),
+ pTypeListBox(0),
+ pIdentifierBox(0),
+ aOKBT(this, SW_RES(PB_OK )),
+ aCancelBT(this, SW_RES(PB_CANCEL )),
+ aHelpBT(this, SW_RES(PB_HELP )),
+ rWrtSh(rSh),
+ m_bNewEntryMode(bNewEntry),
+ m_bNameAllowed(sal_True)
+{
+ FreeResource();
+ Point aFLPos(aEntriesFL.GetPosPixel());
+ Point aTL1(aFLPos);
+ Size aFLSz(aEntriesFL.GetSizePixel().Width(), GetSizePixel().Height());
+ long nControlSpace = aFLSz.Width() / 4;
+ long nControlWidth = nControlSpace - 2 * aTL1.X();
+ aTL1.X() *= 2;
+ aTL1.Y() *= 5;
+ Point aTR1(aTL1);
+ aTR1.X() += nControlSpace;
+ Point aTL2(aTR1);
+ aTL2.X() += nControlSpace;
+ Point aTR2(aTL2);
+ aTR2.X() += nControlSpace;
+ Size aFixedTextSize(aFLSz);
+ Size aTmpSz(8,10);
+ aTmpSz = LogicToPixel(aTmpSz, MAP_APPFONT);
+ aFixedTextSize.Height() = aTmpSz.Width();
+ Size aEditSize(aFixedTextSize);
+ aFixedTextSize.Width() = nControlWidth + aFLPos.X();
+ aEditSize.Height() = aTmpSz.Height();
+ aEditSize.Width() = nControlWidth;
+
+ sal_uInt16 nOffset = static_cast< sal_uInt16 >(aTmpSz.Width() * 3 / 2);
+ sal_Bool bLeft = sal_True;
+ Window* pRefWindow = 0;
+ for(sal_uInt16 nIndex = 0; nIndex < AUTH_FIELD_END; nIndex++)
+ {
+ const TextInfo aCurInfo = aTextInfoArr[nIndex];
+
+ pFixedTexts[nIndex] = new FixedText(this);
+ if(nIndex)
+ pFixedTexts[nIndex]->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND );
+ else
+ pFixedTexts[nIndex]->SetZOrder( 0, WINDOW_ZORDER_FIRST );
+
+ pRefWindow = pFixedTexts[nIndex];
+
+ pFixedTexts[nIndex]->SetSizePixel(aFixedTextSize);
+ pFixedTexts[nIndex]->SetPosPixel(bLeft ? aTL1 : aTL2);
+ pFixedTexts[nIndex]->SetText(SW_RES(STR_AUTH_FIELD_START + aCurInfo.nToxField));
+ pFixedTexts[nIndex]->Show();
+ pEdits[nIndex] = 0;
+ if( AUTH_FIELD_AUTHORITY_TYPE == aCurInfo.nToxField )
+ {
+ pTypeListBox = new ListBox(this, WB_DROPDOWN|WB_BORDER);
+ pTypeListBox->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND );
+ pRefWindow = pTypeListBox;
+ for(sal_uInt16 j = 0; j < AUTH_TYPE_END; j++)
+ pTypeListBox->InsertEntry(String(SW_RES(STR_AUTH_TYPE_START + j)));
+ if(pFields[aCurInfo.nToxField].Len())
+ {
+ sal_uInt16 nIndexPos = static_cast< sal_uInt16 >(pFields[aCurInfo.nToxField].ToInt32());
+ pTypeListBox->SelectEntryPos(nIndexPos);
+ }
+ Size aTmp(aEditSize);
+ aTmp.Height() *= 4;
+ pTypeListBox->SetSizePixel(aTmp);
+ pTypeListBox->SetPosPixel(bLeft ? aTR1 : aTR2);
+ pTypeListBox->Show();
+ pTypeListBox->SetSelectHdl(LINK(this, SwCreateAuthEntryDlg_Impl, EnableHdl));
+ pTypeListBox->SetHelpId(aCurInfo.nHelpId);
+
+ }
+ else if(AUTH_FIELD_IDENTIFIER == aCurInfo.nToxField && !m_bNewEntryMode)
+ {
+ pIdentifierBox = new ComboBox(this, WB_BORDER|WB_DROPDOWN);
+ pIdentifierBox->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND );
+ pRefWindow = pIdentifierBox;
+
+ pIdentifierBox->SetSelectHdl(LINK(this,
+ SwCreateAuthEntryDlg_Impl, IdentifierHdl));
+
+
+ const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
+ rSh.GetFldType(RES_AUTHORITY, aEmptyStr);
+ if(pFType)
+ {
+ SvStringsDtor aIds;
+ pFType->GetAllEntryIdentifiers( aIds );
+ for(sal_uInt16 n = 0; n < aIds.Count(); n++)
+ pIdentifierBox->InsertEntry(*aIds.GetObject(n));
+ }
+ pIdentifierBox->SetText(pFields[aCurInfo.nToxField]);
+ Size aTmp(aEditSize);
+ aTmp.Height() *= 4;
+ pIdentifierBox->SetSizePixel(aTmp);
+ pIdentifierBox->SetPosPixel(bLeft ? aTR1 : aTR2);
+ pIdentifierBox->Show();
+ pIdentifierBox->SetHelpId(aCurInfo.nHelpId);
+ }
+ else
+ {
+ pEdits[nIndex] = new Edit(this, WB_BORDER);
+ pEdits[nIndex]->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND );
+ pRefWindow = pEdits[nIndex];
+ pEdits[nIndex]->SetSizePixel(aEditSize);
+ pEdits[nIndex]->SetPosPixel(bLeft ? aTR1 : aTR2);
+ pEdits[nIndex]->SetText(pFields[aCurInfo.nToxField]);
+ pEdits[nIndex]->Show();
+ pEdits[nIndex]->SetHelpId(aCurInfo.nHelpId);
+ if(AUTH_FIELD_IDENTIFIER == aCurInfo.nToxField)
+ {
+ pEdits[nIndex]->SetModifyHdl(LINK(this, SwCreateAuthEntryDlg_Impl, ShortNameHdl));
+ m_bNameAllowed = pFields[nIndex].Len() > 0;
+ if(!bCreate)
+ {
+ pFixedTexts[nIndex]->Enable(sal_False);
+ pEdits[nIndex]->Enable(sal_False);
+ }
+ }
+ }
+ if(bLeft)
+ {
+ aTL1.Y() += nOffset;
+ aTR1.Y() += nOffset;
+ }
+ else
+ {
+ aTL2.Y() += nOffset;
+ aTR2.Y() += nOffset;
+ }
+ bLeft = !bLeft;
+ }
+ EnableHdl(pTypeListBox);
+
+ long nHeightDiff = - aFLSz.Height();
+ aFLSz.Height() = aTL1.Y();
+ nHeightDiff += aFLSz.Height();
+// aEntriesFL.SetSizePixel(aFLSz);
+ Size aDlgSize(GetSizePixel());
+ aDlgSize.Height() += nHeightDiff;
+ SetSizePixel(aDlgSize);
+
+}
+/* -----------------16.09.99 14:47-------------------
+
+ --------------------------------------------------*/
+SwCreateAuthEntryDlg_Impl::~SwCreateAuthEntryDlg_Impl()
+{
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ {
+ delete pFixedTexts[i];
+ delete pEdits[i];
+ }
+ delete pTypeListBox;
+ delete pIdentifierBox;
+}
+/* -----------------16.09.99 14:27-------------------
+
+ --------------------------------------------------*/
+String SwCreateAuthEntryDlg_Impl::GetEntryText(ToxAuthorityField eField) const
+{
+ String sRet;
+ if( AUTH_FIELD_AUTHORITY_TYPE == eField )
+ {
+ DBG_ASSERT(pTypeListBox, "No ListBox");
+ sRet = String::CreateFromInt32(pTypeListBox->GetSelectEntryPos());
+ }
+ else if( AUTH_FIELD_IDENTIFIER == eField && !m_bNewEntryMode)
+ {
+ DBG_ASSERT(pIdentifierBox, "No ComboBox");
+ sRet = pIdentifierBox->GetText();
+ }
+ else
+ {
+ for(sal_uInt16 nIndex = 0; nIndex < AUTH_FIELD_END; nIndex++)
+ {
+ const TextInfo aCurInfo = aTextInfoArr[nIndex];
+ if(aCurInfo.nToxField == eField)
+ {
+ sRet = pEdits[nIndex]->GetText();
+ break;
+ }
+ }
+ }
+ return sRet;
+}
+/* -----------------21.09.99 13:54-------------------
+
+ --------------------------------------------------*/
+IMPL_LINK(SwCreateAuthEntryDlg_Impl, IdentifierHdl, ComboBox*, pBox)
+{
+ const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
+ rWrtSh.GetFldType(RES_AUTHORITY, aEmptyStr);
+ if(pFType)
+ {
+ const SwAuthEntry* pEntry = pFType->GetEntryByIdentifier(
+ pBox->GetText());
+ if(pEntry)
+ {
+ for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++)
+ {
+ if(AUTH_FIELD_IDENTIFIER == i)
+ continue;
+ if(AUTH_FIELD_AUTHORITY_TYPE == i)
+ pTypeListBox->SelectEntry(
+ pEntry->GetAuthorField((ToxAuthorityField)i));
+ else
+ pEdits[i]->SetText(
+ pEntry->GetAuthorField((ToxAuthorityField)i));
+ }
+ }
+ }
+ return 0;
+}
+/* -----------------------------20.12.99 15:07--------------------------------
+
+ ---------------------------------------------------------------------------*/
+
+IMPL_LINK(SwCreateAuthEntryDlg_Impl, ShortNameHdl, Edit*, pEdit)
+{
+ if(aShortNameCheckLink.IsSet())
+ {
+ sal_Bool bEnable = 0 != aShortNameCheckLink.Call(pEdit);
+ m_bNameAllowed |= bEnable;
+ aOKBT.Enable(pTypeListBox->GetSelectEntryCount() && bEnable);
+ }
+ return 0;
+}
+/* -----------------------------20.12.99 15:54--------------------------------
+
+ ---------------------------------------------------------------------------*/
+IMPL_LINK(SwCreateAuthEntryDlg_Impl, EnableHdl, ListBox*, pBox)
+{
+ aOKBT.Enable(m_bNameAllowed && pBox->GetSelectEntryCount());
+ return 0;
+};
+/* -----------------06.10.99 10:00-------------------
+
+ --------------------------------------------------*/
+SwAuthMarkFloatDlg::SwAuthMarkFloatDlg(SfxBindings* _pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent,
+ SfxChildWinInfo* pInfo,
+ sal_Bool bNew) :
+ SfxModelessDialog(_pBindings, pChild, pParent, SW_RES(DLG_INSAUTHMARK)),
+ aDlg(this, SW_RES(WIN_DLG), bNew)
+{
+ FreeResource();
+ Initialize(pInfo);
+ SwWrtShell* pWrtShell = ::GetActiveWrtShell();
+ DBG_ASSERT(pWrtShell, "No shell?");
+ aDlg.ReInitDlg(*pWrtShell);
+}
+/* -----------------06.10.99 10:27-------------------
+
+ --------------------------------------------------*/
+void SwAuthMarkFloatDlg::Activate()
+{
+ SfxModelessDialog::Activate();
+ aDlg.Activate();
+}
+
+void SwAuthMarkFloatDlg::ReInitDlg(SwWrtShell& rWrtShell)
+{
+ aDlg.ReInitDlg( rWrtShell );
+}
+
+/* -----------------06.10.99 10:35-------------------
+
+ --------------------------------------------------*/
+SwAuthMarkModalDlg::SwAuthMarkModalDlg(Window *pParent, SwWrtShell& rSh) :
+ SvxStandardDialog(pParent, SW_RES(DLG_EDIT_AUTHMARK)),
+ aDlg(this, SW_RES(WIN_DLG), sal_False)
+{
+ FreeResource();
+ aDlg.ReInitDlg(rSh);
+}
+/* -----------------06.10.99 10:46-------------------
+
+ --------------------------------------------------*/
+void SwAuthMarkModalDlg::Apply()
+{
+ aDlg.InsertHdl(0);
+}
+