summaryrefslogtreecommitdiff
path: root/cui/source/tabpages/autocdlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/tabpages/autocdlg.cxx')
-rw-r--r--cui/source/tabpages/autocdlg.cxx2867
1 files changed, 2867 insertions, 0 deletions
diff --git a/cui/source/tabpages/autocdlg.cxx b/cui/source/tabpages/autocdlg.cxx
new file mode 100644
index 000000000000..0ee3c38c1e1d
--- /dev/null
+++ b/cui/source/tabpages/autocdlg.cxx
@@ -0,0 +1,2867 @@
+/*************************************************************************
+ *
+ * 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_cui.hxx"
+
+#define _SVSTDARR_STRINGSISORTDTOR
+#define _SVSTDARR_STRINGSDTOR
+#include <svl/svstdarr.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/field.hxx>
+#include <vcl/keycodes.hxx>
+#include <sot/exchange.hxx>
+#include <svtools/transfer.hxx>
+#include <unotools/syslocale.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/viewsh.hxx>
+#include <unotools/charclass.hxx>
+#include <unotools/collatorwrapper.hxx>
+#include <com/sun/star/i18n/CollatorOptions.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <comphelper/processfactory.hxx>
+#include <vcl/svapp.hxx>
+#include <sfx2/module.hxx>
+#include <sfx2/request.hxx>
+#include <sfx2/sfxsids.hrc>
+#include <svl/eitem.hxx>
+#include <svl/languageoptions.hxx>
+#include <svx/SmartTagMgr.hxx>
+#include <com/sun/star/smarttags/XSmartTagRecognizer.hpp>
+#include <com/sun/star/smarttags/XSmartTagAction.hpp>
+
+#define _OFA_AUTOCDLG_CXX
+#include "autocdlg.hxx"
+#include "autocdlg.hrc"
+#include "helpid.hrc"
+#include <editeng/acorrcfg.hxx>
+#include <editeng/svxacorr.hxx>
+#include "cuicharmap.hxx"
+#include <editeng/unolingu.hxx>
+#include <dialmgr.hxx>
+#include <svx/svxids.hrc> // SID_OPEN_SMARTTAGSOPTIONS
+
+static LanguageType eLastDialogLanguage = LANGUAGE_SYSTEM;
+
+using namespace ::com::sun::star::util;
+using namespace ::com::sun::star;
+using namespace ::rtl;
+
+static ::com::sun::star::uno::Reference<
+ ::com::sun::star::lang::XMultiServiceFactory >& GetProcessFact()
+{
+ static ::com::sun::star::uno::Reference<
+ ::com::sun::star::lang::XMultiServiceFactory > xMSF =
+ ::comphelper::getProcessServiceFactory();
+ return xMSF;
+}
+
+/*-----------------14.10.96 15.47-------------------
+
+--------------------------------------------------*/
+
+OfaAutoCorrDlg::OfaAutoCorrDlg(Window* pParent, const SfxItemSet* _pSet ) :
+ SfxTabDialog(pParent, CUI_RES( RID_OFA_AUTOCORR_DLG ), _pSet),
+ aLanguageFT( this, CUI_RES(FT_LANG )),
+ aLanguageLB( this, CUI_RES(LB_LANG ))
+{
+ BOOL bShowSWOptions = FALSE;
+ BOOL bOpenSmartTagOptions = FALSE;
+
+ if ( _pSet )
+ {
+ SFX_ITEMSET_ARG( _pSet, pItem, SfxBoolItem, SID_AUTO_CORRECT_DLG, FALSE );
+ if ( pItem && pItem->GetValue() )
+ bShowSWOptions = TRUE;
+
+ SFX_ITEMSET_ARG( _pSet, pItem2, SfxBoolItem, SID_OPEN_SMARTTAGOPTIONS, FALSE );
+ if ( pItem2 && pItem2->GetValue() )
+ bOpenSmartTagOptions = TRUE;
+ }
+
+ aLanguageFT.SetZOrder(0, WINDOW_ZORDER_FIRST);
+ aLanguageLB.SetZOrder(&aLanguageFT, WINDOW_ZORDER_BEHIND);
+ aLanguageLB.SetHelpId(HID_AUTOCORR_LANGUAGE);
+ FreeResource();
+
+ AddTabPage(RID_OFAPAGE_AUTOCORR_OPTIONS, OfaAutocorrOptionsPage::Create, 0);
+ AddTabPage(RID_OFAPAGE_AUTOFMT_APPLY, OfaSwAutoFmtOptionsPage::Create, 0);
+ AddTabPage(RID_OFAPAGE_AUTOCOMPLETE_OPTIONS, OfaAutoCompleteTabPage::Create, 0);
+ AddTabPage(RID_OFAPAGE_SMARTTAG_OPTIONS, OfaSmartTagOptionsTabPage::Create, 0);
+
+ if (!bShowSWOptions)
+ {
+ RemoveTabPage(RID_OFAPAGE_AUTOFMT_APPLY);
+ RemoveTabPage(RID_OFAPAGE_AUTOCOMPLETE_OPTIONS);
+ RemoveTabPage(RID_OFAPAGE_SMARTTAG_OPTIONS);
+ }
+ else
+ {
+ // remove smart tag tab page if no extensions are installed
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+ if ( !pOpt || !pOpt->pSmartTagMgr || 0 == pOpt->pSmartTagMgr->NumberOfRecognizers() )
+ RemoveTabPage(RID_OFAPAGE_SMARTTAG_OPTIONS);
+
+ RemoveTabPage(RID_OFAPAGE_AUTOCORR_OPTIONS);
+ }
+
+ AddTabPage(RID_OFAPAGE_AUTOCORR_REPLACE, OfaAutocorrReplacePage::Create, 0);
+ AddTabPage(RID_OFAPAGE_AUTOCORR_EXCEPT, OfaAutocorrExceptPage::Create, 0);
+ AddTabPage(RID_OFAPAGE_AUTOCORR_QUOTE, OfaQuoteTabPage::Create, 0);
+
+ // initialize languages
+ //! LANGUAGE_NONE is displayed as '[All]' and the LanguageType
+ //! will be set to LANGUAGE_DONTKNOW
+ sal_Int16 nLangList = LANG_LIST_WESTERN;
+
+ if( SvtLanguageOptions().IsCTLFontEnabled() )
+ nLangList |= LANG_LIST_CTL;
+ aLanguageLB.SetLanguageList( nLangList, TRUE, TRUE );
+ aLanguageLB.SelectLanguage( LANGUAGE_NONE );
+ USHORT nPos = aLanguageLB.GetSelectEntryPos();
+ DBG_ASSERT( LISTBOX_ENTRY_NOTFOUND != nPos, "listbox entry missing" );
+ aLanguageLB.SetEntryData( nPos, (void*)(long) LANGUAGE_DONTKNOW );
+
+ // Initialisierung funktionier fuer static nicht unter Linux - deswegen hier
+ if( LANGUAGE_SYSTEM == eLastDialogLanguage )
+ eLastDialogLanguage = Application::GetSettings().GetLanguage();
+
+ LanguageType nSelectLang = LANGUAGE_DONTKNOW;
+ nPos = aLanguageLB.GetEntryPos( (void*)(long) eLastDialogLanguage );
+ if (LISTBOX_ENTRY_NOTFOUND != nPos)
+ nSelectLang = eLastDialogLanguage;
+ aLanguageLB.SelectLanguage( nSelectLang );
+
+ aLanguageLB.SetSelectHdl(LINK(this, OfaAutoCorrDlg, SelectLanguageHdl));
+
+ Size aMinSize(aLanguageFT.CalcMinimumSize());
+ //reserve some extra space for CJK accelerators that are possible inserted
+ //later (like '(A)')
+ aLanguageFT.SetPosSizePixel( 0, 0, aMinSize.Width() + 20, 0, WINDOW_POSSIZE_WIDTH );
+
+ if ( bOpenSmartTagOptions )
+ SetCurPageId( RID_OFAPAGE_SMARTTAG_OPTIONS );
+}
+/*-----------------16.10.96 14.06-------------------
+
+--------------------------------------------------*/
+
+BOOL lcl_FindEntry( ListBox& rLB, const String& rEntry,
+ CollatorWrapper& rCmpClass )
+{
+ USHORT nCount = rLB.GetEntryCount();
+ USHORT nSelPos = rLB.GetSelectEntryPos();
+ USHORT i;
+ for(i = 0; i < nCount; i++)
+ {
+ if( 0 == rCmpClass.compareString(rEntry, rLB.GetEntry(i) ))
+ {
+ rLB.SelectEntryPos(i, TRUE);
+ return TRUE;
+ }
+ }
+ if(LISTBOX_ENTRY_NOTFOUND != nSelPos)
+ rLB.SelectEntryPos(nSelPos, FALSE);
+ return FALSE;
+}
+
+/* -----------------23.11.98 10:46-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK(OfaAutoCorrDlg, SelectLanguageHdl, ListBox*, pBox)
+{
+ USHORT nPos = pBox->GetSelectEntryPos();
+ void* pVoid = pBox->GetEntryData(nPos);
+ LanguageType eNewLang = (LanguageType)(long)pVoid;
+ //alte Einstellungen speichern und neu fuellen
+ if(eNewLang != eLastDialogLanguage)
+ {
+ USHORT nPageId = GetCurPageId();
+ if(RID_OFAPAGE_AUTOCORR_REPLACE == nPageId)
+ ((OfaAutocorrReplacePage*)GetTabPage( nPageId ))->SetLanguage(eNewLang);
+ else if(RID_OFAPAGE_AUTOCORR_EXCEPT == nPageId)
+ ((OfaAutocorrExceptPage*)GetTabPage( nPageId ))->SetLanguage(eNewLang);
+ }
+ return 0;
+}
+/*-----------------14.10.96 15.57-------------------
+
+--------------------------------------------------*/
+
+OfaAutocorrOptionsPage::OfaAutocorrOptionsPage( Window* pParent,
+ const SfxItemSet& rSet ) :
+ SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_OPTIONS ), rSet),
+ aCheckLB (this, CUI_RES(CLB_SETTINGS )),
+
+ sInput (CUI_RES(ST_USE_REPLACE )),
+ sDoubleCaps (CUI_RES(ST_CPTL_STT_WORD )),
+ sStartCap (CUI_RES(ST_CPTL_STT_SENT )),
+ sBoldUnderline (CUI_RES(ST_BOLD_UNDER )),
+ sURL (CUI_RES(ST_DETECT_URL )),
+ sNoDblSpaces (CUI_RES(STR_NO_DBL_SPACES )),
+ sDash (CUI_RES(ST_DASH ))
+{
+ FreeResource();
+
+ aCheckLB.SetHelpId(HID_OFAPAGE_AUTOCORR_CLB);
+}
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+
+OfaAutocorrOptionsPage::~OfaAutocorrOptionsPage()
+{
+}
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+
+SfxTabPage* OfaAutocorrOptionsPage::Create( Window* pParent,
+ const SfxItemSet& rSet)
+{
+ return new OfaAutocorrOptionsPage(pParent, rSet);
+}
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+
+BOOL OfaAutocorrOptionsPage::FillItemSet( SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ long nFlags = pAutoCorrect->GetFlags();
+
+ USHORT nPos = 0;
+ pAutoCorrect->SetAutoCorrFlag(Autocorrect, aCheckLB.IsChecked(nPos++));
+ pAutoCorrect->SetAutoCorrFlag(CptlSttWrd, aCheckLB.IsChecked(nPos++));
+ pAutoCorrect->SetAutoCorrFlag(CptlSttSntnc, aCheckLB.IsChecked(nPos++));
+ pAutoCorrect->SetAutoCorrFlag(ChgWeightUnderl, aCheckLB.IsChecked(nPos++));
+ pAutoCorrect->SetAutoCorrFlag(SetINetAttr, aCheckLB.IsChecked(nPos++));
+ pAutoCorrect->SetAutoCorrFlag(ChgToEnEmDash, aCheckLB.IsChecked(nPos++));
+ pAutoCorrect->SetAutoCorrFlag(IgnoreDoubleSpace, aCheckLB.IsChecked(nPos++));
+
+ BOOL bReturn = nFlags != pAutoCorrect->GetFlags();
+ if(bReturn )
+ {
+ SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
+ pCfg->SetModified();
+ pCfg->Commit();
+ }
+ return bReturn;
+}
+
+/* -----------------23.11.98 16:15-------------------
+ *
+ * --------------------------------------------------*/
+void OfaAutocorrOptionsPage::ActivatePage( const SfxItemSet& )
+{
+ ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(FALSE);
+}
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+
+void OfaAutocorrOptionsPage::Reset( const SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ const long nFlags = pAutoCorrect->GetFlags();
+
+ aCheckLB.SetUpdateMode(FALSE);
+ aCheckLB.Clear();
+
+ aCheckLB.InsertEntry(sInput);
+ aCheckLB.InsertEntry(sDoubleCaps);
+ aCheckLB.InsertEntry(sStartCap);
+ aCheckLB.InsertEntry(sBoldUnderline);
+ aCheckLB.InsertEntry(sURL);
+ aCheckLB.InsertEntry(sDash);
+ aCheckLB.InsertEntry(sNoDblSpaces);
+
+ USHORT nPos = 0;
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & Autocorrect) );
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & CptlSttWrd) );
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & CptlSttSntnc) );
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgWeightUnderl) );
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & SetINetAttr) );
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgToEnEmDash) );
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & IgnoreDoubleSpace) );
+
+ aCheckLB.SetUpdateMode(TRUE);
+}
+
+/*********************************************************************/
+/* */
+/* Hilfs-struct fuer dUserDaten der Checklistbox */
+/* */
+/*********************************************************************/
+
+struct ImpUserData
+{
+ String *pString;
+ Font* pFont;
+
+ ImpUserData(String* pText, Font* pFnt)
+ { pString = pText; pFont = pFnt;}
+};
+
+
+/*********************************************************************/
+/* */
+/* Dialog fuer Prozenteinstellung */
+/* */
+/*********************************************************************/
+
+class OfaAutoFmtPrcntSet : public ModalDialog
+{
+ OKButton aOKPB;
+ CancelButton aCancelPB;
+ FixedLine aPrcntFL;
+ MetricField aPrcntMF;
+
+ public:
+ OfaAutoFmtPrcntSet(Window* pParent) :
+ ModalDialog(pParent, CUI_RES(RID_OFADLG_PRCNT_SET)),
+ aOKPB(this, CUI_RES(BT_OK)),
+ aCancelPB(this, CUI_RES(BT_CANCEL)),
+ aPrcntFL(this, CUI_RES(FL_PRCNT)),
+ aPrcntMF(this, CUI_RES(ED_RIGHT_MARGIN))
+ {
+ FreeResource();
+ }
+ MetricField& GetPrcntFld(){return aPrcntMF;}
+};
+
+
+/*********************************************************************/
+/* */
+/* veraenderter LBoxString */
+/* */
+/*********************************************************************/
+
+class OfaImpBrwString : public SvLBoxString
+{
+public:
+
+ OfaImpBrwString( SvLBoxEntry* pEntry, USHORT nFlags,
+ const String& rStr ) : SvLBoxString(pEntry,nFlags,rStr){}
+
+ virtual void Paint( const Point& rPos, SvLBox& rDev, USHORT nFlags,
+ SvLBoxEntry* pEntry);
+};
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+
+void __EXPORT OfaImpBrwString::Paint( const Point& rPos, SvLBox& rDev, USHORT /*nFlags*/,
+ SvLBoxEntry* pEntry )
+{
+ rDev.DrawText( rPos, GetText() );
+ if(pEntry->GetUserData())
+ {
+ ImpUserData* pUserData = (ImpUserData* )pEntry->GetUserData();
+ Point aNewPos(rPos);
+ aNewPos.X() += rDev.GetTextWidth(GetText());
+ Font aOldFont( rDev.GetFont());
+ Font aFont( aOldFont );
+ if(pUserData->pFont)
+ {
+ aFont = *pUserData->pFont;
+ aFont.SetColor(aOldFont.GetColor());
+ aFont.SetSize(aOldFont.GetSize());
+ }
+ aFont.SetWeight( WEIGHT_BOLD );
+
+ BOOL bFett = TRUE;
+ USHORT nPos = 0;
+ do {
+ String sTxt( pUserData->pString->GetToken( 0, 1, nPos ));
+
+ if( bFett )
+ rDev.SetFont( aFont );
+
+ rDev.DrawText( aNewPos, sTxt );
+
+ if( STRING_NOTFOUND != nPos )
+ aNewPos.X() += rDev.GetTextWidth( sTxt );
+
+ if( bFett )
+ rDev.SetFont( aOldFont );
+
+ bFett = !bFett;
+ } while( STRING_NOTFOUND != nPos );
+ }
+}
+
+/*********************************************************************/
+/* */
+/* TabPage Autoformat anwenden */
+/* */
+/*********************************************************************/
+
+#define CBCOL_FIRST 0
+#define CBCOL_SECOND 1
+#define CBCOL_BOTH 2
+
+enum OfaAutoFmtOptions
+{
+ USE_REPLACE_TABLE,
+ CORR_UPPER,
+ BEGIN_UPPER,
+ BOLD_UNDERLINE,
+ DETECT_URL,
+ REPLACE_DASHES,
+ DEL_SPACES_AT_STT_END,
+ DEL_SPACES_BETWEEN_LINES,
+ IGNORE_DBLSPACE,
+ APPLY_NUMBERING,
+ INSERT_BORDER,
+ CREATE_TABLE,
+ REPLACE_STYLES,
+ DEL_EMPTY_NODE,
+ REPLACE_USER_COLL,
+ REPLACE_BULLETS,
+ MERGE_SINGLE_LINE_PARA
+};
+
+OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( Window* pParent,
+ const SfxItemSet& rSet ) :
+ SfxTabPage(pParent, CUI_RES(RID_OFAPAGE_AUTOFMT_APPLY), rSet),
+ aCheckLB (this, CUI_RES(CLB_SETTINGS)),
+ aEditPB (this, CUI_RES(PB_EDIT)),
+ aHeader1Expl (this, CUI_RES(FT_HEADER1_EXPLANATION)),
+ aHeader2Expl (this, CUI_RES(FT_HEADER2_EXPLANATION)),
+ sHeader1 (CUI_RES( STR_HEADER1 )),
+ sHeader2 (CUI_RES( STR_HEADER2 )),
+ sDeleteEmptyPara (CUI_RES( ST_DEL_EMPTY_PARA)),
+ sUseReplaceTbl (CUI_RES( ST_USE_REPLACE )),
+ sCptlSttWord (CUI_RES( ST_CPTL_STT_WORD)),
+ sCptlSttSent (CUI_RES( ST_CPTL_STT_SENT)),
+ sUserStyle (CUI_RES( ST_USER_STYLE )),
+ sBullet (CUI_RES( ST_BULLET )),
+ sBoldUnder (CUI_RES( ST_BOLD_UNDER )),
+ sNoDblSpaces (CUI_RES( STR_NO_DBL_SPACES)),
+ sDetectURL (CUI_RES( ST_DETECT_URL )),
+ sDash (CUI_RES( ST_DASH )),
+ sRightMargin (CUI_RES( ST_RIGHT_MARGIN )),
+ sNum (CUI_RES( STR_NUM )),
+ sBorder (CUI_RES( STR_BORDER )),
+ sTable (CUI_RES( STR_TABLE )),
+ sReplaceTemplates (CUI_RES( STR_REPLACE_TEMPLATES)),
+ sDelSpaceAtSttEnd (CUI_RES( STR_DEL_SPACES_AT_STT_END)),
+ sDelSpaceBetweenLines(CUI_RES(STR_DEL_SPACES_BETWEEN_LINES)),
+
+ nPercent ( 50 ),
+ pCheckButtonData( NULL )
+
+{
+ FreeResource();
+
+ //typ. Anfuehrungszeichen einsetzen
+ SvtSysLocale aSysLcl;
+
+ aCheckLB.SetHelpId(HID_OFAPAGE_AUTOFORMAT_CLB);
+ aCheckLB.SetWindowBits(WB_HSCROLL| WB_VSCROLL);
+
+ aCheckLB.SetSelectHdl(LINK(this, OfaSwAutoFmtOptionsPage, SelectHdl));
+ aCheckLB.SetDoubleClickHdl(LINK(this, OfaSwAutoFmtOptionsPage, EditHdl));
+
+ static long aStaticTabs[]=
+ {
+ 3, 0, 20, 40
+ };
+
+ aCheckLB.SvxSimpleTable::SetTabs(aStaticTabs);
+ String sHeader( sHeader1 );
+ sHeader += '\t';
+ sHeader += sHeader2;
+ sHeader += '\t';
+ aCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
+ HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED);
+
+ aEditPB.SetClickHdl(LINK(this, OfaSwAutoFmtOptionsPage, EditHdl));
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+SvLBoxEntry* OfaSwAutoFmtOptionsPage::CreateEntry(String& rTxt, USHORT nCol)
+{
+ SvLBoxEntry* pEntry = new SvLBoxEntry;
+
+ if ( !pCheckButtonData )
+ {
+ pCheckButtonData = new SvLBoxButtonData( &aCheckLB );
+ aCheckLB.SetCheckButtonData( pCheckButtonData );
+ }
+
+ pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff!
+
+ String sEmpty;
+ if (nCol == CBCOL_SECOND)
+ pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) ); // Leerspalte
+ else
+ pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
+
+ if (nCol == CBCOL_FIRST)
+ pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) ); // Leerspalte
+ else
+ pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
+ pEntry->AddItem( new OfaImpBrwString( pEntry, 0, rTxt ) );
+
+ return pEntry;
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+
+__EXPORT OfaSwAutoFmtOptionsPage::~OfaSwAutoFmtOptionsPage()
+{
+ delete (ImpUserData*) aCheckLB.GetUserData( REPLACE_BULLETS );
+ delete (ImpUserData*) aCheckLB.GetUserData( APPLY_NUMBERING );
+ delete (ImpUserData*) aCheckLB.GetUserData( MERGE_SINGLE_LINE_PARA );
+ delete pCheckButtonData;
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+SfxTabPage* __EXPORT OfaSwAutoFmtOptionsPage::Create( Window* pParent,
+ const SfxItemSet& rAttrSet)
+{
+ return new OfaSwAutoFmtOptionsPage(pParent, rAttrSet);
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+BOOL OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet& )
+{
+ BOOL bModified = FALSE;
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+ long nFlags = pAutoCorrect->GetFlags();
+
+ BOOL bCheck = aCheckLB.IsChecked(USE_REPLACE_TABLE, CBCOL_FIRST);
+ bModified |= pOpt->bAutoCorrect != bCheck;
+ pOpt->bAutoCorrect = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(Autocorrect,
+ aCheckLB.IsChecked(USE_REPLACE_TABLE, CBCOL_SECOND));
+
+ bCheck = aCheckLB.IsChecked(CORR_UPPER, CBCOL_FIRST);
+ bModified |= pOpt->bCptlSttWrd != bCheck;
+ pOpt->bCptlSttWrd = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(CptlSttWrd,
+ aCheckLB.IsChecked(CORR_UPPER, CBCOL_SECOND));
+
+ bCheck = aCheckLB.IsChecked(BEGIN_UPPER, CBCOL_FIRST);
+ bModified |= pOpt->bCptlSttSntnc != bCheck;
+ pOpt->bCptlSttSntnc = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(CptlSttSntnc,
+ aCheckLB.IsChecked(BEGIN_UPPER, CBCOL_SECOND));
+
+ bCheck = aCheckLB.IsChecked(BOLD_UNDERLINE, CBCOL_FIRST);
+ bModified |= pOpt->bChgWeightUnderl != bCheck;
+ pOpt->bChgWeightUnderl = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(ChgWeightUnderl,
+ aCheckLB.IsChecked(BOLD_UNDERLINE, CBCOL_SECOND));
+
+ pAutoCorrect->SetAutoCorrFlag(IgnoreDoubleSpace,
+ aCheckLB.IsChecked(IGNORE_DBLSPACE, CBCOL_SECOND));
+
+ bCheck = aCheckLB.IsChecked(DETECT_URL, CBCOL_FIRST);
+ bModified |= pOpt->bSetINetAttr != bCheck;
+ pOpt->bSetINetAttr = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(SetINetAttr,
+ aCheckLB.IsChecked(DETECT_URL, CBCOL_SECOND));
+
+ bCheck = aCheckLB.IsChecked(DEL_EMPTY_NODE, CBCOL_FIRST);
+ bModified |= pOpt->bDelEmptyNode != bCheck;
+ pOpt->bDelEmptyNode = bCheck;
+
+ bCheck = aCheckLB.IsChecked(REPLACE_USER_COLL, CBCOL_FIRST);
+ bModified |= pOpt->bChgUserColl != bCheck;
+ pOpt->bChgUserColl = bCheck;
+
+ bCheck = aCheckLB.IsChecked(REPLACE_BULLETS, CBCOL_FIRST);
+ bModified |= pOpt->bChgEnumNum != bCheck;
+ pOpt->bChgEnumNum = bCheck;
+ bModified |= aBulletFont != pOpt->aBulletFont;
+ pOpt->aBulletFont = aBulletFont;
+ bModified |= String(pOpt->cBullet) != sBulletChar;
+ pOpt->cBullet = sBulletChar.GetChar(0);
+
+ bModified |= aByInputBulletFont != pOpt->aByInputBulletFont;
+ bModified |= String(pOpt->cByInputBullet) != sByInputBulletChar;
+ pOpt->aByInputBulletFont = aByInputBulletFont;
+ pOpt->cByInputBullet = sByInputBulletChar.GetChar(0);
+
+ bCheck = aCheckLB.IsChecked(MERGE_SINGLE_LINE_PARA, CBCOL_FIRST);
+ bModified |= pOpt->bRightMargin != bCheck;
+ pOpt->bRightMargin = bCheck;
+ bModified |= nPercent != pOpt->nRightMargin;
+ pOpt->nRightMargin = (BYTE)nPercent;
+
+ bCheck = aCheckLB.IsChecked(APPLY_NUMBERING, CBCOL_SECOND);
+ bModified |= pOpt->bSetNumRule != bCheck;
+ pOpt->bSetNumRule = bCheck;
+
+ bCheck = aCheckLB.IsChecked(INSERT_BORDER, CBCOL_SECOND);
+ bModified |= pOpt->bSetBorder != bCheck;
+ pOpt->bSetBorder = bCheck;
+
+ bCheck = aCheckLB.IsChecked(CREATE_TABLE, CBCOL_SECOND);
+ bModified |= pOpt->bCreateTable != bCheck;
+ pOpt->bCreateTable = bCheck;
+
+ bCheck = aCheckLB.IsChecked(REPLACE_STYLES, CBCOL_SECOND);
+ bModified |= pOpt->bReplaceStyles != bCheck;
+ pOpt->bReplaceStyles = bCheck;
+
+ bCheck = aCheckLB.IsChecked(REPLACE_DASHES, CBCOL_FIRST);
+ bModified |= pOpt->bChgToEnEmDash != bCheck;
+ pOpt->bChgToEnEmDash = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(ChgToEnEmDash,
+ aCheckLB.IsChecked(REPLACE_DASHES, CBCOL_SECOND));
+
+ bCheck = aCheckLB.IsChecked(DEL_SPACES_AT_STT_END, CBCOL_FIRST);
+ bModified |= pOpt->bAFmtDelSpacesAtSttEnd != bCheck;
+ pOpt->bAFmtDelSpacesAtSttEnd = bCheck;
+ bCheck = aCheckLB.IsChecked(DEL_SPACES_AT_STT_END, CBCOL_SECOND);
+ bModified |= pOpt->bAFmtByInpDelSpacesAtSttEnd != bCheck;
+ pOpt->bAFmtByInpDelSpacesAtSttEnd = bCheck;
+
+ bCheck = aCheckLB.IsChecked(DEL_SPACES_BETWEEN_LINES, CBCOL_FIRST);
+ bModified |= pOpt->bAFmtDelSpacesBetweenLines != bCheck;
+ pOpt->bAFmtDelSpacesBetweenLines = bCheck;
+ bCheck = aCheckLB.IsChecked(DEL_SPACES_BETWEEN_LINES, CBCOL_SECOND);
+ bModified |= pOpt->bAFmtByInpDelSpacesBetweenLines != bCheck;
+ pOpt->bAFmtByInpDelSpacesBetweenLines = bCheck;
+
+ if(bModified || nFlags != pAutoCorrect->GetFlags())
+ {
+ SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
+ pCfg->SetModified();
+ pCfg->Commit();
+ }
+
+ return TRUE;
+}
+
+/* -----------------23.11.98 16:15-------------------
+ *
+ * --------------------------------------------------*/
+void OfaSwAutoFmtOptionsPage::ActivatePage( const SfxItemSet& )
+{
+ ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(FALSE);
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+
+void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+ const long nFlags = pAutoCorrect->GetFlags();
+
+ aCheckLB.SetUpdateMode(FALSE);
+ aCheckLB.Clear();
+
+ // Die folgenden Eintraege muessen in der selben Reihenfolge, wie im
+ // OfaAutoFmtOptions-enum eingefuegt werden!
+ aCheckLB.GetModel()->Insert(CreateEntry(sUseReplaceTbl, CBCOL_BOTH ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sCptlSttWord, CBCOL_BOTH ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sCptlSttSent, CBCOL_BOTH ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sBoldUnder, CBCOL_BOTH ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sDetectURL, CBCOL_BOTH ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sDash, CBCOL_BOTH ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sDelSpaceAtSttEnd, CBCOL_BOTH ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sDelSpaceBetweenLines, CBCOL_BOTH ));
+
+ aCheckLB.GetModel()->Insert(CreateEntry(sNoDblSpaces, CBCOL_SECOND));
+ aCheckLB.GetModel()->Insert(CreateEntry(sNum, CBCOL_SECOND));
+ aCheckLB.GetModel()->Insert(CreateEntry(sBorder, CBCOL_SECOND));
+ aCheckLB.GetModel()->Insert(CreateEntry(sTable, CBCOL_SECOND));
+ aCheckLB.GetModel()->Insert(CreateEntry(sReplaceTemplates, CBCOL_SECOND));
+ aCheckLB.GetModel()->Insert(CreateEntry(sDeleteEmptyPara, CBCOL_FIRST ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sUserStyle, CBCOL_FIRST ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sBullet, CBCOL_FIRST ));
+ aCheckLB.GetModel()->Insert(CreateEntry(sRightMargin, CBCOL_FIRST ));
+
+ aCheckLB.CheckEntryPos( USE_REPLACE_TABLE, CBCOL_FIRST, pOpt->bAutoCorrect );
+ aCheckLB.CheckEntryPos( USE_REPLACE_TABLE, CBCOL_SECOND, 0 != (nFlags & Autocorrect));
+ aCheckLB.CheckEntryPos( CORR_UPPER, CBCOL_FIRST, pOpt->bCptlSttWrd );
+ aCheckLB.CheckEntryPos( CORR_UPPER, CBCOL_SECOND, 0 != (nFlags & CptlSttWrd) );
+ aCheckLB.CheckEntryPos( BEGIN_UPPER, CBCOL_FIRST, pOpt->bCptlSttSntnc );
+ aCheckLB.CheckEntryPos( BEGIN_UPPER, CBCOL_SECOND, 0 != (nFlags & CptlSttSntnc) );
+ aCheckLB.CheckEntryPos( BOLD_UNDERLINE, CBCOL_FIRST, pOpt->bChgWeightUnderl );
+ aCheckLB.CheckEntryPos( BOLD_UNDERLINE, CBCOL_SECOND, 0 != (nFlags & ChgWeightUnderl) );
+ aCheckLB.CheckEntryPos( IGNORE_DBLSPACE, CBCOL_SECOND, 0 != (nFlags & IgnoreDoubleSpace) );
+ aCheckLB.CheckEntryPos( DETECT_URL, CBCOL_FIRST, pOpt->bSetINetAttr );
+ aCheckLB.CheckEntryPos( DETECT_URL, CBCOL_SECOND, 0 != (nFlags & SetINetAttr) );
+ aCheckLB.CheckEntryPos( REPLACE_DASHES, CBCOL_FIRST, pOpt->bChgToEnEmDash );
+ aCheckLB.CheckEntryPos( REPLACE_DASHES, CBCOL_SECOND, 0 != (nFlags & ChgToEnEmDash) );
+ aCheckLB.CheckEntryPos( DEL_SPACES_AT_STT_END, CBCOL_FIRST, pOpt->bAFmtDelSpacesAtSttEnd );
+ aCheckLB.CheckEntryPos( DEL_SPACES_AT_STT_END, CBCOL_SECOND, pOpt->bAFmtByInpDelSpacesAtSttEnd );
+ aCheckLB.CheckEntryPos( DEL_SPACES_BETWEEN_LINES, CBCOL_FIRST, pOpt->bAFmtDelSpacesBetweenLines );
+ aCheckLB.CheckEntryPos( DEL_SPACES_BETWEEN_LINES, CBCOL_SECOND, pOpt->bAFmtByInpDelSpacesBetweenLines );
+ aCheckLB.CheckEntryPos( DEL_EMPTY_NODE, CBCOL_FIRST, pOpt->bDelEmptyNode );
+ aCheckLB.CheckEntryPos( REPLACE_USER_COLL, CBCOL_FIRST, pOpt->bChgUserColl );
+ aCheckLB.CheckEntryPos( REPLACE_BULLETS, CBCOL_FIRST, pOpt->bChgEnumNum );
+
+ aBulletFont = pOpt->aBulletFont;
+ sBulletChar = pOpt->cBullet;
+ ImpUserData* pUserData = new ImpUserData(&sBulletChar, &aBulletFont);
+ aCheckLB.SetUserData( REPLACE_BULLETS, pUserData );
+
+ nPercent = pOpt->nRightMargin;
+ sMargin = ' ';
+ sMargin += String::CreateFromInt32( nPercent );
+ sMargin += '%';
+ pUserData = new ImpUserData(&sMargin, 0);
+ aCheckLB.SetUserData( MERGE_SINGLE_LINE_PARA, pUserData );
+
+ aCheckLB.CheckEntryPos( APPLY_NUMBERING, CBCOL_SECOND, pOpt->bSetNumRule );
+
+ aByInputBulletFont = pOpt->aByInputBulletFont;
+ sByInputBulletChar = pOpt->cByInputBullet;
+ ImpUserData* pUserData2 = new ImpUserData(&sByInputBulletChar, &aByInputBulletFont);
+ aCheckLB.SetUserData( APPLY_NUMBERING , pUserData2 );
+
+ aCheckLB.CheckEntryPos( MERGE_SINGLE_LINE_PARA, CBCOL_FIRST, pOpt->bRightMargin );
+ aCheckLB.CheckEntryPos( INSERT_BORDER, CBCOL_SECOND, pOpt->bSetBorder );
+ aCheckLB.CheckEntryPos( CREATE_TABLE, CBCOL_SECOND, pOpt->bCreateTable );
+ aCheckLB.CheckEntryPos( REPLACE_STYLES, CBCOL_SECOND, pOpt->bReplaceStyles );
+
+ aCheckLB.SetUpdateMode(TRUE);
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+IMPL_LINK(OfaSwAutoFmtOptionsPage, SelectHdl, OfaACorrCheckListBox*, pBox)
+{
+ aEditPB.Enable(0 != pBox->FirstSelected()->GetUserData());
+ return 0;
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+IMPL_LINK(OfaSwAutoFmtOptionsPage, EditHdl, PushButton*, EMPTYARG)
+{
+ ULONG nSelEntryPos = aCheckLB.GetSelectEntryPos();
+ if( nSelEntryPos == REPLACE_BULLETS ||
+ nSelEntryPos == APPLY_NUMBERING)
+ {
+ SvxCharacterMap *pMapDlg = new SvxCharacterMap(this);
+ ImpUserData* pUserData = (ImpUserData*)aCheckLB.FirstSelected()->GetUserData();
+ pMapDlg->SetCharFont(*pUserData->pFont);
+ pMapDlg->SetChar( pUserData->pString->GetChar(0) );
+ if(RET_OK == pMapDlg->Execute())
+ {
+ Font aFont(pMapDlg->GetCharFont());
+ *pUserData->pFont = aFont;
+ sal_UCS4 aChar = pMapDlg->GetChar();
+ // using the UCS4 constructor
+ rtl::OUString aOUStr( &aChar, 1 );
+ *pUserData->pString = aOUStr;
+ }
+ delete pMapDlg;
+ }
+ else if( MERGE_SINGLE_LINE_PARA == nSelEntryPos )
+ {
+ // Dialog fuer Prozenteinstellung
+ OfaAutoFmtPrcntSet aDlg(this);
+ aDlg.GetPrcntFld().SetValue(nPercent);
+ if(RET_OK == aDlg.Execute())
+ {
+ nPercent = (USHORT)aDlg.GetPrcntFld().GetValue();
+ sMargin = ' ';
+ sMargin += String::CreateFromInt32( nPercent );
+ sMargin += '%';
+ }
+ }
+ aCheckLB.Invalidate();
+ return 0;
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+void OfaACorrCheckListBox::SetTabs()
+{
+ SvxSimpleTable::SetTabs();
+ USHORT nAdjust = SV_LBOXTAB_ADJUST_RIGHT|SV_LBOXTAB_ADJUST_LEFT|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_ADJUST_NUMERIC|SV_LBOXTAB_FORCE;
+
+ if( aTabs.Count() > 1 )
+ {
+ SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(1);
+ pTab->nFlags &= ~nAdjust;
+ pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
+ }
+ if( aTabs.Count() > 2 )
+ {
+ SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(2);
+ pTab->nFlags &= ~nAdjust;
+ pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
+ }
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+void OfaACorrCheckListBox::CheckEntryPos(ULONG nPos, USHORT nCol, BOOL bChecked)
+{
+ if ( nPos < GetEntryCount() )
+ SetCheckButtonState(
+ GetEntry(nPos),
+ nCol,
+ bChecked ? SvButtonState( SV_BUTTON_CHECKED ) :
+ SvButtonState( SV_BUTTON_UNCHECKED ) );
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+BOOL OfaACorrCheckListBox::IsChecked(ULONG nPos, USHORT nCol)
+{
+ return GetCheckButtonState( GetEntry(nPos), nCol ) == SV_BUTTON_CHECKED;
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+void OfaACorrCheckListBox::SetCheckButtonState( SvLBoxEntry* pEntry, USHORT nCol, SvButtonState eState)
+{
+ SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
+
+ DBG_ASSERT(pItem,"SetCheckButton:Item not found");
+ if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
+ {
+ switch( eState )
+ {
+ case SV_BUTTON_CHECKED:
+ pItem->SetStateChecked();
+ break;
+
+ case SV_BUTTON_UNCHECKED:
+ pItem->SetStateUnchecked();
+ break;
+
+ case SV_BUTTON_TRISTATE:
+ pItem->SetStateTristate();
+ break;
+ }
+ InvalidateEntry( pEntry );
+ }
+}
+
+/*********************************************************************/
+/* */
+/*********************************************************************/
+
+SvButtonState OfaACorrCheckListBox::GetCheckButtonState( SvLBoxEntry* pEntry, USHORT nCol ) const
+{
+ SvButtonState eState = SV_BUTTON_UNCHECKED;
+ SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
+ DBG_ASSERT(pItem,"GetChButnState:Item not found");
+
+ if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
+ {
+ USHORT nButtonFlags = pItem->GetButtonFlags();
+ eState = pCheckButtonData->ConvertToButtonState( nButtonFlags );
+ }
+
+ return eState;
+}
+
+void OfaACorrCheckListBox::HBarClick()
+{
+ // Sortierung durch diese Ueberladung abgeklemmt
+}
+/* -----------------------------22.05.2002 11:06------------------------------
+
+ ---------------------------------------------------------------------------*/
+void OfaACorrCheckListBox::KeyInput( const KeyEvent& rKEvt )
+{
+ if(!rKEvt.GetKeyCode().GetModifier() &&
+ KEY_SPACE == rKEvt.GetKeyCode().GetCode())
+ {
+ ULONG nSelPos = GetSelectEntryPos();
+ USHORT nCol = GetCurrentTabPos() - 1;
+ if ( nCol < 2 )
+ {
+ CheckEntryPos( nSelPos, nCol, !IsChecked( nSelPos, nCol ) );
+ CallImplEventListeners( VCLEVENT_CHECKBOX_TOGGLE, (void*)GetEntry( nSelPos ) );
+ }
+ else
+ {
+ USHORT nCheck = IsChecked(nSelPos, 1) ? 1 : 0;
+ if(IsChecked(nSelPos, 0))
+ nCheck += 2;
+ nCheck--;
+ nCheck &= 3;
+ CheckEntryPos(nSelPos, 1, 0 != (nCheck & 1));
+ CheckEntryPos(nSelPos, 0, 0 != (nCheck & 2));
+ }
+ }
+ else
+ SvxSimpleTable::KeyInput(rKEvt);
+}
+/* -----------------19.11.98 15:57-------------------
+ *
+ * --------------------------------------------------*/
+struct DoubleString
+{
+ String sShort;
+ String sLong;
+ void* pUserData; // CheckBox -> form. Text Bool -> Selektionstext
+};
+typedef DoubleString* DoubleStringPtr;
+SV_DECL_PTRARR_DEL(DoubleStringArray, DoubleStringPtr, 4, 4)
+SV_IMPL_PTRARR(DoubleStringArray, DoubleStringPtr);
+
+/* -----------------19.11.98 16:07-------------------
+ *
+ * --------------------------------------------------*/
+void lcl_ClearTable(DoubleStringTable& rTable)
+{
+ DoubleStringArrayPtr pArray = rTable.Last();
+ while(pArray)
+ {
+ pArray->DeleteAndDestroy(0, pArray->Count());
+ delete pArray;
+ pArray = rTable.Prev();
+ }
+ rTable.Clear();
+}
+
+/*-----------------14.10.96 15.57-------------------
+
+--------------------------------------------------*/
+
+OfaAutocorrReplacePage::OfaAutocorrReplacePage( Window* pParent,
+ const SfxItemSet& rSet ) :
+ SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_REPLACE ), rSet),
+ aTextOnlyCB( this, CUI_RES(CB_TEXT_ONLY )),
+ aShortFT ( this, CUI_RES(FT_SHORT )),
+ aShortED ( this, CUI_RES(ED_SHORT )),
+ aReplaceFT( this, CUI_RES(FT_REPLACE )),
+ aReplaceED( this, CUI_RES(ED_REPLACE )),
+ aReplaceTLB( this, CUI_RES(TLB_REPLACE )),
+ aNewReplacePB( this, CUI_RES(PB_NEW_REPLACE )),
+ aDeleteReplacePB(this,CUI_RES(PB_DELETE_REPLACE )),
+ sModify(CUI_RES(STR_MODIFY)),
+ sNew(aNewReplacePB.GetText()),
+ pFormatText(0),
+ eLang(eLastDialogLanguage),
+ bHasSelectionText(FALSE),
+ bFirstSelect(TRUE),
+ bReplaceEditChanged(FALSE),
+ bSWriter(TRUE)
+{
+ FreeResource();
+ SfxModule *pMod = *(SfxModule**)GetAppData(SHL_WRITER);
+ bSWriter = pMod == SfxModule::GetActiveModule();
+
+ ::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
+ pCompareClass = new CollatorWrapper( GetProcessFact() );
+ pCompareCaseClass = new CollatorWrapper( GetProcessFact() );
+ pCompareClass->loadDefaultCollator( aLcl, ::com::sun::star::i18n::
+ CollatorOptions::CollatorOptions_IGNORE_CASE );
+ pCompareCaseClass->loadDefaultCollator( aLcl, 0 );
+ pCharClass = new CharClass( aLcl );
+
+ static long nTabs[] = { 2 /* Tab-Count */, 1, 61 };
+ aReplaceTLB.SetTabs( &nTabs[0], MAP_APPFONT );
+
+ aReplaceTLB.SetWindowBits(WB_HSCROLL|WB_CLIPCHILDREN);
+ aReplaceTLB.SetSelectHdl(LINK(this, OfaAutocorrReplacePage, SelectHdl));
+ aNewReplacePB.SetClickHdl( LINK(this, OfaAutocorrReplacePage, NewDelHdl));
+ aDeleteReplacePB.SetClickHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
+ aShortED.SetModifyHdl(LINK(this, OfaAutocorrReplacePage, ModifyHdl));
+ aReplaceED.SetModifyHdl(LINK(this, OfaAutocorrReplacePage, ModifyHdl));
+ aShortED.SetActionHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
+ aReplaceED.SetActionHdl(LINK(this, OfaAutocorrReplacePage, NewDelHdl));
+
+ aReplaceED.SetSpaces(TRUE);
+ aShortED.SetSpaces(TRUE);
+ aShortED.SetMaxTextLen(30);
+}
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+
+OfaAutocorrReplacePage::~OfaAutocorrReplacePage()
+{
+ delete pFormatText;
+ lcl_ClearTable(aDoubleStringTable);
+ delete pCompareClass;
+ delete pCompareCaseClass;
+ delete pCharClass;
+}
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+SfxTabPage* OfaAutocorrReplacePage::Create( Window* pParent,
+ const SfxItemSet& rSet)
+{
+ return new OfaAutocorrReplacePage(pParent, rSet);
+}
+/* -----------------20.11.98 13:26-------------------
+ *
+ * --------------------------------------------------*/
+void OfaAutocorrReplacePage::ActivatePage( const SfxItemSet& )
+{
+ if(eLang != eLastDialogLanguage)
+ SetLanguage(eLastDialogLanguage);
+ ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(TRUE);
+}
+/* -----------------20.11.98 13:26-------------------
+ *
+ * --------------------------------------------------*/
+int OfaAutocorrReplacePage::DeactivatePage( SfxItemSet* )
+{
+ return LEAVE_PAGE;
+}
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+BOOL OfaAutocorrReplacePage::FillItemSet( SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ DoubleStringArrayPtr pDoubleStringArray = aDoubleStringTable.Last();
+ while(pDoubleStringArray)
+ {
+ LanguageType eCurLang = (LanguageType)aDoubleStringTable.GetCurKey();
+ if(eCurLang != eLang) // die aktuelle Sprache wird weiter hinten behandelt
+ {
+ SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eCurLang);
+ USHORT nWordListCount = pWordList->Count();
+ USHORT nDoubleStringArrayCount = pDoubleStringArray->Count();
+ USHORT nPos = nDoubleStringArrayCount;
+ USHORT nLastPos = nPos;
+ // 1. Durchlauf: Eintraege loeschen oder veraendern:
+
+
+ for( USHORT nWordListPos = nWordListCount; nWordListPos; nWordListPos-- )
+ {
+ SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(nWordListPos - 1);
+ String sEntry(pWordPtr->GetShort());
+ // formatierter Text steht nur im Writer
+ BOOL bFound = !bSWriter && !pWordPtr->IsTextOnly();
+ while(!bFound && nPos)
+ {
+ DoubleString* pDouble = pDoubleStringArray->GetObject( nPos - 1);
+
+ if( 0 == pCompareClass->compareString(
+ sEntry, pDouble->sShort ))
+ {
+ nLastPos = nPos - 1;
+ bFound = TRUE;
+ if( !(pWordPtr->IsTextOnly() == (0 == pDouble->pUserData)
+ && 0 == pCompareCaseClass->compareString(
+ pWordPtr->GetLong(), pDouble->sLong ) ) )
+ {
+ pAutoCorrect->PutText(sEntry, pDouble->sLong, eCurLang);
+ }
+ pDoubleStringArray->DeleteAndDestroy(nPos - 1, 1);
+ break;
+ }
+ nPos--;
+ }
+ nPos = nLastPos;
+ if(!bFound)
+ {
+ pAutoCorrect->DeleteText(sEntry, eCurLang);
+ }
+ }
+ nDoubleStringArrayCount = pDoubleStringArray->Count();
+ for(USHORT nDoubleStringArrayPos = 0; nDoubleStringArrayPos < nDoubleStringArrayCount; nDoubleStringArrayPos++ )
+ {
+ //jetzt sollte es nur noch neue Eintraege geben
+ DoubleString* pDouble = pDoubleStringArray->GetObject( nDoubleStringArrayPos );
+ if(pDouble->pUserData == &bHasSelectionText)
+ pAutoCorrect->PutText( pDouble->sShort,
+ *SfxObjectShell::Current(), eCurLang );
+ else
+ {
+ pAutoCorrect->PutText( pDouble->sShort, pDouble->sLong,
+ eCurLang);
+ }
+ }
+ }
+ pDoubleStringArray->DeleteAndDestroy(0, pDoubleStringArray->Count());
+ delete pDoubleStringArray;
+ pDoubleStringArray = aDoubleStringTable.Prev();
+ }
+ aDoubleStringTable.Clear();
+ // jetzt noch die aktuelle Selektion
+ SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eLang);
+ USHORT nWordListCount = pWordList->Count();
+ USHORT nListBoxCount = (USHORT)aReplaceTLB.GetEntryCount();
+
+ aReplaceTLB.SetUpdateMode(FALSE);
+ USHORT nListBoxPos = nListBoxCount;
+ USHORT nLastListBoxPos = nListBoxPos;
+ // 1. Durchlauf: Eintraege loeschen oder veraendern:
+
+ USHORT i;
+ for( i = nWordListCount; i; i-- )
+ {
+ SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(i- 1);
+ String sEntry(pWordPtr->GetShort());
+ // formatierter Text steht nur im Writer
+ BOOL bFound = !bSWriter && !pWordPtr->IsTextOnly();
+ while(!bFound && nListBoxPos)
+ {
+ SvLBoxEntry* pEntry = aReplaceTLB.GetEntry( nListBoxPos - 1);
+ if( 0 == pCompareClass->compareString( sEntry,
+ aReplaceTLB.GetEntryText(pEntry, 0)))
+ {
+ nLastListBoxPos = nListBoxPos - 1;
+ bFound = TRUE;
+ String sLong = aReplaceTLB.GetEntryText(pEntry, 1);
+ if( !(pWordPtr->IsTextOnly() == (0 == pEntry->GetUserData())
+ && 0 == pCompareCaseClass->compareString(
+ pWordPtr->GetLong(), sLong )))
+ {
+ pAutoCorrect->PutText(sEntry, sLong, eLang);
+ }
+ aReplaceTLB.GetModel()->Remove(pEntry);
+ break;
+
+ }
+ nListBoxPos --;
+ }
+ nListBoxPos = nLastListBoxPos;
+ if(!bFound)
+ {
+ pAutoCorrect->DeleteText(sEntry, eLang);
+ }
+
+ }
+ nListBoxCount = (USHORT)aReplaceTLB.GetEntryCount();
+ for(i = 0; i < nListBoxCount; i++ )
+ {
+ //jetzt sollte es nur noch neue Eintraege geben
+ SvLBoxEntry* pEntry = aReplaceTLB.GetEntry( i );
+ String sShort = aReplaceTLB.GetEntryText(pEntry, 0);
+ if(pEntry->GetUserData() == &bHasSelectionText)
+ pAutoCorrect->PutText(sShort, *SfxObjectShell::Current(), eLang);
+ else
+ {
+ String sLong = aReplaceTLB.GetEntryText(pEntry, 1);
+ pAutoCorrect->PutText(sShort, sLong, eLang);
+ }
+ }
+
+ return FALSE;
+}
+
+/* -----------------19.11.98 13:16-------------------
+ *
+ * --------------------------------------------------*/
+void OfaAutocorrReplacePage::RefillReplaceBox(BOOL bFromReset,
+ LanguageType eOldLanguage,
+ LanguageType eNewLanguage)
+{
+ eLang = eNewLanguage;
+ if(bFromReset)
+ lcl_ClearTable(aDoubleStringTable);
+ else
+ {
+ DoubleStringArray* pArray = 0;
+ if(aDoubleStringTable.IsKeyValid(eOldLanguage))
+ {
+ pArray = aDoubleStringTable.Seek(ULONG(eOldLanguage));
+ pArray->DeleteAndDestroy(0, pArray->Count());
+ }
+ else
+ {
+ pArray = new DoubleStringArray;
+ aDoubleStringTable.Insert(ULONG(eOldLanguage), pArray);
+ }
+
+ USHORT nListBoxCount = (USHORT)aReplaceTLB.GetEntryCount();
+ USHORT i;
+ for(i = 0; i < nListBoxCount; i++)
+ {
+ DoubleString* pDouble = new DoubleString();
+ SvLBoxEntry* pEntry = aReplaceTLB.GetEntry( i );
+ pDouble->sShort = aReplaceTLB.GetEntryText(pEntry, 0);
+ pDouble->sLong = aReplaceTLB.GetEntryText(pEntry, 1);
+ pDouble->pUserData = pEntry->GetUserData();
+ pArray->Insert(pDouble, i);
+ }
+ }
+
+ aReplaceTLB.Clear();
+ if(!bSWriter)
+ {
+ if(pFormatText)
+ pFormatText->DeleteAndDestroy(0, pFormatText->Count());
+ else
+ pFormatText = new SvStringsISortDtor();
+ }
+
+ if(aDoubleStringTable.IsKeyValid(eLang))
+ {
+ DoubleStringArray* pArray = aDoubleStringTable.Seek(ULONG(eNewLanguage));
+ for(USHORT i = 0; i < pArray->Count(); i++)
+ {
+ DoubleString* pDouble = pArray->GetObject(i);
+ BOOL bTextOnly = 0 == pDouble->pUserData;
+ // formatierter Text wird nur im Writer angeboten
+ if(bSWriter || bTextOnly)
+ {
+ String sEntry(pDouble->sShort);
+ sEntry += '\t';
+ sEntry += pDouble->sLong;
+ SvLBoxEntry* pEntry = aReplaceTLB.InsertEntry(sEntry);
+ aTextOnlyCB.Check(bTextOnly);
+ if(!bTextOnly)
+ pEntry->SetUserData(pDouble->pUserData); // Das heisst: mit Formatinfo oder sogar mit Selektionstext
+ }
+ else
+ {
+ pFormatText->Insert(new String(pDouble->sShort));
+ }
+ }
+ }
+ else
+ {
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxAutocorrWordList* pWordList = pAutoCorrect->LoadAutocorrWordList(eLang);
+
+ for(USHORT i = 0; i < pWordList->Count(); i++)
+ {
+ SvxAutocorrWordPtr pWordPtr = pWordList->GetObject(i);
+ BOOL bTextOnly = pWordPtr->IsTextOnly();
+ // formatierter Text wird nur im Writer angeboten
+ if(bSWriter || bTextOnly)
+ {
+ String sEntry(pWordPtr->GetShort());
+ sEntry += '\t';
+ sEntry += pWordPtr->GetLong();
+ SvLBoxEntry* pEntry = aReplaceTLB.InsertEntry(sEntry);
+ aTextOnlyCB.Check(pWordPtr->IsTextOnly());
+ if(!bTextOnly)
+ pEntry->SetUserData(&aTextOnlyCB); // Das heisst: mit Formatinfo
+ }
+ else
+ {
+ pFormatText->Insert(new String(pWordPtr->GetShort()));
+ }
+ }
+ aNewReplacePB.Enable(FALSE);
+ aDeleteReplacePB.Enable(FALSE);
+
+ }
+
+ SfxViewShell* pViewShell = SfxViewShell::Current();
+ if( pViewShell && pViewShell->HasSelection( TRUE ) )
+ {
+ bHasSelectionText = TRUE;
+ const String sSelection( pViewShell->GetSelectionText() );
+ aReplaceED.SetText( sSelection );
+ aTextOnlyCB.Check( !bSWriter );
+ aTextOnlyCB.Enable( bSWriter && sSelection.Len() );
+ }
+ else
+ aTextOnlyCB.Enable( FALSE );
+}
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+void OfaAutocorrReplacePage::Reset( const SfxItemSet& )
+{
+ RefillReplaceBox(TRUE, eLang, eLang);
+ aShortED.GrabFocus();
+}
+
+/* -----------------23.11.98 10:33-------------------
+ *
+ * --------------------------------------------------*/
+void OfaAutocorrReplacePage::SetLanguage(LanguageType eSet)
+{
+ //save old settings an refill
+ if(eSet != eLang)
+ {
+ RefillReplaceBox(FALSE, eLang, eSet);
+ eLastDialogLanguage = eSet;
+ delete pCompareClass;
+ delete pCompareCaseClass;
+ delete pCharClass;
+
+ ::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
+ pCompareClass = new CollatorWrapper( GetProcessFact() );
+ pCompareCaseClass = new CollatorWrapper( GetProcessFact() );
+ pCompareClass->loadDefaultCollator( aLcl, ::com::sun::star::i18n::
+ CollatorOptions::CollatorOptions_IGNORE_CASE );
+ pCompareCaseClass->loadDefaultCollator( aLcl, 0 );
+ pCharClass = new CharClass( aLcl );
+ ModifyHdl(&aShortED);
+ }
+}
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+
+IMPL_LINK(OfaAutocorrReplacePage, SelectHdl, SvTabListBox*, pBox)
+{
+ if(!bFirstSelect || !bHasSelectionText)
+ {
+ SvLBoxEntry* pEntry = pBox->FirstSelected();
+ String sTmpShort(pBox->GetEntryText(pEntry, 0));
+ // wird der Text ueber den ModifyHdl gesetzt, dann steht der Cursor sonst immer am Wortanfang,
+ // obwohl man gerade hier editiert
+ BOOL bSameContent = 0 == pCompareClass->compareString(
+ sTmpShort, aShortED.GetText() );
+ Selection aSel = aShortED.GetSelection();
+ if(aShortED.GetText() != sTmpShort)
+ {
+ aShortED.SetText(sTmpShort);
+ //war es nur eine andere Schreibweise, dann muss die Selektion auch wieder gesetzt werden
+ if(bSameContent)
+ aShortED.SetSelection(aSel);
+ }
+ aReplaceED.SetText(pBox->GetEntryText(pEntry, 1));
+ // mit UserData gibt es eine Formatinfo
+ aTextOnlyCB.Check(0 == pEntry->GetUserData());
+ }
+ else
+ bFirstSelect = FALSE;
+
+ aNewReplacePB.Enable(FALSE);
+ aDeleteReplacePB.Enable();
+ return 0;
+};
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+
+IMPL_LINK(OfaAutocorrReplacePage, NewDelHdl, PushButton*, pBtn)
+{
+ SvLBoxEntry* _pEntry = aReplaceTLB.FirstSelected();
+ if(pBtn == &aDeleteReplacePB)
+ {
+ DBG_ASSERT(_pEntry, "keine Eintrag selektiert");
+ if(_pEntry)
+ {
+ aReplaceTLB.GetModel()->Remove(_pEntry);
+ ModifyHdl(&aShortED);
+ return 0;
+ }
+ }
+ if(pBtn == &aNewReplacePB || aNewReplacePB.IsEnabled())
+ {
+ SvLBoxEntry* _pNewEntry = aReplaceTLB.FirstSelected();
+ String sEntry(aShortED.GetText());
+ if(sEntry.Len() && ( aReplaceED.GetText().Len() ||
+ ( bHasSelectionText && bSWriter ) ))
+ {
+ aReplaceTLB.SetUpdateMode(FALSE);
+ USHORT nPos = USHRT_MAX;
+ sEntry += '\t';
+ sEntry += aReplaceED.GetText();
+ if(_pNewEntry)
+ {
+ nPos = (USHORT)aReplaceTLB.GetModel()->GetAbsPos(_pNewEntry);
+ aReplaceTLB.GetModel()->Remove(_pNewEntry);
+ }
+ else
+ {
+ USHORT j;
+ for( j = 0; j < aReplaceTLB.GetEntryCount(); j++ )
+ {
+ SvLBoxEntry* pReplaceEntry = aReplaceTLB.GetEntry(j);
+ if( 0 >= pCompareClass->compareString(sEntry,
+ aReplaceTLB.GetEntryText(pReplaceEntry, 0) ) )
+ break;
+ }
+ nPos = j;
+ }
+ SvLBoxEntry* pInsEntry =
+ aReplaceTLB.InsertEntry(
+ sEntry, static_cast< SvLBoxEntry * >(NULL), false,
+ nPos == USHRT_MAX ? LIST_APPEND : nPos);
+ if( !bReplaceEditChanged && !aTextOnlyCB.IsChecked())
+ pInsEntry->SetUserData(&bHasSelectionText); // neuer formatierter Text
+
+ aReplaceTLB.MakeVisible( pInsEntry );
+ aReplaceTLB.SetUpdateMode(TRUE);
+ // falls der Request aus dem ReplaceEdit kam, dann Focus in das ShortEdit setzen
+ if(aReplaceED.HasFocus())
+ aShortED.GrabFocus();
+
+ }
+ }
+ else
+ {
+ // das kann nur ein Enter in einem der beiden Edit-Felder sein und das
+ // bedeutet EndDialog() - muss im KeyInput ausgewertet werden
+ return 0;
+ }
+ ModifyHdl(&aShortED);
+ return 1;
+}
+
+/*-----------------17.10.96 07.49-------------------
+
+--------------------------------------------------*/
+IMPL_LINK(OfaAutocorrReplacePage, ModifyHdl, Edit*, pEdt)
+{
+ SvLBoxEntry* pFirstSel = aReplaceTLB.FirstSelected();
+ BOOL bShort = pEdt == &aShortED;
+ const String rEntry = pEdt->GetText();
+ const String rRepString = aReplaceED.GetText();
+ String aWordStr( pCharClass->lower( rEntry ));
+
+ if(bShort)
+ {
+ if(rEntry.Len())
+ {
+ BOOL bFound = FALSE;
+ BOOL bTmpSelEntry=FALSE;
+
+ for(USHORT i = 0; i < aReplaceTLB.GetEntryCount(); i++)
+ {
+ SvLBoxEntry* pEntry = aReplaceTLB.GetEntry( i );
+ String aTestStr=aReplaceTLB.GetEntryText(pEntry, 0);
+ if( 0 == pCompareClass->compareString(rEntry, aTestStr ))
+ {
+ if(rRepString.Len())
+ bFirstSelect = TRUE;
+ aReplaceTLB.SetCurEntry(pEntry);
+ pFirstSel = pEntry;
+ aNewReplacePB.SetText(sModify);
+ bFound= TRUE;
+ break;
+ }
+ else
+ {
+ pCharClass->toLower( aTestStr );
+ if(aTestStr.Search(aWordStr)==0 && !bTmpSelEntry)
+ {
+ aReplaceTLB.MakeVisible(pEntry);
+ bTmpSelEntry=TRUE;
+ }
+ }
+ }
+ if(!bFound)
+ {
+ aReplaceTLB.SelectAll(FALSE);
+ pFirstSel = 0;
+ aNewReplacePB.SetText(sNew);
+ if(bReplaceEditChanged)
+ aTextOnlyCB.Enable(FALSE);
+ }
+ aDeleteReplacePB.Enable(bFound);
+ }
+ else if(aReplaceTLB.GetEntryCount()>0)
+ {
+ SvLBoxEntry* pEntry = aReplaceTLB.GetEntry( 0 );
+ aReplaceTLB.MakeVisible(pEntry);
+ }
+
+ }
+ else if(!bShort)
+ {
+ bReplaceEditChanged = TRUE;
+ if(pFirstSel)
+ {
+ aNewReplacePB.SetText(sModify);
+ }
+ }
+
+ const String& rShortTxt = aShortED.GetText();
+ BOOL bEnableNew = rShortTxt.Len() &&
+ ( rRepString.Len() ||
+ ( bHasSelectionText && bSWriter )) &&
+ ( !pFirstSel || rRepString !=
+ aReplaceTLB.GetEntryText( pFirstSel, 1 ) );
+ if(bEnableNew && pFormatText)
+ {
+ for(USHORT i = 0; i < pFormatText->Count(); i++)
+ if(*pFormatText->GetObject(i) == rShortTxt)
+ {
+ bEnableNew = FALSE;
+ break;
+ }
+ }
+ aNewReplacePB.Enable(bEnableNew);
+
+ return 0;
+}
+
+/* -----------------20.11.98 13:48-------------------
+ *
+ * --------------------------------------------------*/
+
+struct StringsArrays
+{
+
+ SvStringsDtor aAbbrevStrings;
+ SvStringsDtor aDoubleCapsStrings;
+
+ StringsArrays() :
+ aAbbrevStrings(5,5), aDoubleCapsStrings(5,5) {}
+};
+typedef StringsArrays* StringsArraysPtr;
+/* -----------------19.11.98 16:07-------------------
+ *
+ * --------------------------------------------------*/
+BOOL lcl_FindInArray(SvStringsDtor& rStrings, const String& rString)
+{
+ for(USHORT i = 0; i < rStrings.Count(); i++)
+ if(rString == *rStrings.GetObject(i))
+ return TRUE;
+ return FALSE;
+}
+
+void lcl_ClearTable(StringsTable& rTable)
+{
+ StringsArraysPtr pArrays = rTable.Last();
+ while(pArrays)
+ {
+ delete pArrays;
+ pArrays = rTable.Prev();
+ }
+ rTable.Clear();
+}
+
+/*-----------------14.10.96 15.57-------------------
+
+--------------------------------------------------*/
+
+OfaAutocorrExceptPage::OfaAutocorrExceptPage( Window* pParent,
+ const SfxItemSet& rSet ) :
+ SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_EXCEPT ), rSet),
+ aAbbrevFL (this, CUI_RES(FL_ABBREV )),
+ aAbbrevED (this, CUI_RES(ED_ABBREV )),
+ aAbbrevLB (this, CUI_RES(LB_ABBREV )),
+ aNewAbbrevPB (this, CUI_RES(PB_NEWABBREV )),
+ aDelAbbrevPB (this, CUI_RES(PB_DELABBREV )),
+ aAutoAbbrevCB (this, CUI_RES(CB_AUTOABBREV )),
+ aDoubleCapsFL (this, CUI_RES(FL_DOUBLECAPS )),
+ aDoubleCapsED (this, CUI_RES(ED_DOUBLE_CAPS )),
+ aDoubleCapsLB (this, CUI_RES(LB_DOUBLE_CAPS )),
+ aNewDoublePB (this, CUI_RES(PB_NEWDOUBLECAPS)),
+ aDelDoublePB (this, CUI_RES(PB_DELDOUBLECAPS)),
+ aAutoCapsCB (this, CUI_RES(CB_AUTOCAPS )),
+ eLang(eLastDialogLanguage)
+{
+ FreeResource();
+
+ ::com::sun::star::lang::Locale aLcl( SvxCreateLocale(eLastDialogLanguage ));
+ pCompareClass = new CollatorWrapper( GetProcessFact() );
+ pCompareClass->loadDefaultCollator( aLcl, ::com::sun::star::i18n::
+ CollatorOptions::CollatorOptions_IGNORE_CASE );
+
+ aNewAbbrevPB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
+ aDelAbbrevPB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
+ aNewDoublePB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
+ aDelDoublePB.SetClickHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
+
+ aAbbrevLB.SetSelectHdl(LINK(this, OfaAutocorrExceptPage, SelectHdl));
+ aDoubleCapsLB.SetSelectHdl(LINK(this, OfaAutocorrExceptPage, SelectHdl));
+ aAbbrevED.SetModifyHdl(LINK(this, OfaAutocorrExceptPage, ModifyHdl));
+ aDoubleCapsED.SetModifyHdl(LINK(this, OfaAutocorrExceptPage, ModifyHdl));
+
+ aAbbrevED.SetActionHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
+ aDoubleCapsED.SetActionHdl(LINK(this, OfaAutocorrExceptPage, NewDelHdl));
+
+}
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+OfaAutocorrExceptPage::~OfaAutocorrExceptPage()
+{
+ lcl_ClearTable(aStringsTable);
+ delete pCompareClass;
+}
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+SfxTabPage* OfaAutocorrExceptPage::Create( Window* pParent,
+ const SfxItemSet& rSet)
+{
+ return new OfaAutocorrExceptPage(pParent, rSet);
+}
+/* -----------------20.11.98 13:26-------------------
+ *
+ * --------------------------------------------------*/
+void OfaAutocorrExceptPage::ActivatePage( const SfxItemSet& )
+{
+ if(eLang != eLastDialogLanguage)
+ SetLanguage(eLastDialogLanguage);
+ ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(TRUE);
+}
+/* -----------------20.11.98 13:26-------------------
+ *
+ * --------------------------------------------------*/
+int OfaAutocorrExceptPage::DeactivatePage( SfxItemSet* )
+{
+ return LEAVE_PAGE;
+}
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+BOOL OfaAutocorrExceptPage::FillItemSet( SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ StringsArraysPtr pArrays = aStringsTable.Last();
+ while(pArrays)
+ {
+ LanguageType eCurLang = (LanguageType)aStringsTable.GetCurKey();
+ if(eCurLang != eLang) // die aktuelle Sprache wird weiter hinten behandelt
+ {
+ SvStringsISortDtor* pWrdList = pAutoCorrect->LoadWrdSttExceptList(eCurLang);
+
+ if(pWrdList)
+ {
+ USHORT nCount = pWrdList->Count();
+ USHORT i;
+ for( i = nCount; i; )
+ {
+ String* pString = pWrdList->GetObject( --i );
+ //Eintrag finden u. gfs entfernen
+ if( !lcl_FindInArray(pArrays->aDoubleCapsStrings, *pString))
+ pWrdList->DeleteAndDestroy( i );
+ }
+ nCount = pArrays->aDoubleCapsStrings.Count();
+ for( i = 0; i < nCount; ++i )
+ {
+ String* pEntry = new String( *pArrays->aDoubleCapsStrings.GetObject( i ) );
+ if( !pWrdList->Insert( pEntry ))
+ delete pEntry;
+ }
+ pAutoCorrect->SaveWrdSttExceptList(eCurLang);
+ }
+
+ SvStringsISortDtor* pCplList = pAutoCorrect->LoadCplSttExceptList(eCurLang);
+
+ if(pCplList)
+ {
+ USHORT nCount = pCplList->Count();
+ USHORT i;
+ for( i = nCount; i; )
+ {
+ String* pString = pCplList->GetObject( --i );
+ if( !lcl_FindInArray(pArrays->aAbbrevStrings, *pString))
+ pCplList->DeleteAndDestroy( i );
+ }
+ nCount = pArrays->aAbbrevStrings.Count();
+ for( i = 0; i < nCount; ++i )
+ {
+ String* pEntry = new String( *pArrays->aAbbrevStrings.GetObject(i) );
+ if( !pCplList->Insert( pEntry ))
+ delete pEntry;
+ }
+ pAutoCorrect->SaveCplSttExceptList(eCurLang);
+ }
+ }
+ pArrays = aStringsTable.Prev();
+ }
+ aStringsTable.Clear();
+
+ SvStringsISortDtor* pWrdList = pAutoCorrect->LoadWrdSttExceptList(eLang);
+
+ if(pWrdList)
+ {
+ USHORT nCount = pWrdList->Count();
+ USHORT i;
+ for( i = nCount; i; )
+ {
+ String* pString = pWrdList->GetObject( --i );
+ if( USHRT_MAX == aDoubleCapsLB.GetEntryPos(*pString) )
+ pWrdList->DeleteAndDestroy( i );
+ }
+ nCount = aDoubleCapsLB.GetEntryCount();
+ for( i = 0; i < nCount; ++i )
+ {
+ String* pEntry = new String( aDoubleCapsLB.GetEntry( i ) );
+ if( !pWrdList->Insert( pEntry ))
+ delete pEntry;
+ }
+ pAutoCorrect->SaveWrdSttExceptList(eLang);
+ }
+
+ SvStringsISortDtor* pCplList = pAutoCorrect->LoadCplSttExceptList(eLang);
+
+ if(pCplList)
+ {
+ USHORT nCount = pCplList->Count();
+ USHORT i;
+ for( i = nCount; i; )
+ {
+ String* pString = pCplList->GetObject( --i );
+ if( USHRT_MAX == aAbbrevLB.GetEntryPos(*pString) )
+ pCplList->DeleteAndDestroy( i );
+ }
+ nCount = aAbbrevLB.GetEntryCount();
+ for( i = 0; i < nCount; ++i )
+ {
+ String* pEntry = new String( aAbbrevLB.GetEntry( i ) );
+ if( !pCplList->Insert( pEntry ))
+ delete pEntry;
+ }
+ pAutoCorrect->SaveCplSttExceptList(eLang);
+ }
+ if(aAutoAbbrevCB.IsChecked() != aAutoAbbrevCB.GetSavedValue())
+ pAutoCorrect->SetAutoCorrFlag( SaveWordCplSttLst, aAutoAbbrevCB.IsChecked());
+ if(aAutoCapsCB.IsChecked() != aAutoCapsCB.GetSavedValue())
+ pAutoCorrect->SetAutoCorrFlag( SaveWordWrdSttLst, aAutoCapsCB.IsChecked());
+ return FALSE;
+}
+
+/* -----------------23.11.98 10:33-------------------
+ *
+ * --------------------------------------------------*/
+void OfaAutocorrExceptPage::SetLanguage(LanguageType eSet)
+{
+ if(eLang != eSet)
+ {
+ //alte Einstellungen speichern und neu fuellen
+ RefillReplaceBoxes(FALSE, eLang, eSet);
+ eLastDialogLanguage = eSet;
+ delete pCompareClass;
+ pCompareClass = new CollatorWrapper( GetProcessFact() );
+ pCompareClass->loadDefaultCollator( SvxCreateLocale( eLastDialogLanguage ),
+ ::com::sun::star::i18n::
+ CollatorOptions::CollatorOptions_IGNORE_CASE );
+ ModifyHdl(&aAbbrevED);
+ ModifyHdl(&aDoubleCapsED);
+ }
+}
+/* -----------------20.11.98 14:06-------------------
+ *
+ * --------------------------------------------------*/
+void OfaAutocorrExceptPage::RefillReplaceBoxes(BOOL bFromReset,
+ LanguageType eOldLanguage,
+ LanguageType eNewLanguage)
+{
+ eLang = eNewLanguage;
+ if(bFromReset)
+ lcl_ClearTable(aStringsTable);
+ else
+ {
+ StringsArraysPtr pArrays = 0;
+ if(aStringsTable.IsKeyValid(eOldLanguage))
+ {
+ pArrays = aStringsTable.Seek(ULONG(eOldLanguage));
+ pArrays->aAbbrevStrings.DeleteAndDestroy(
+ 0, pArrays->aAbbrevStrings.Count());
+ pArrays->aDoubleCapsStrings.DeleteAndDestroy(
+ 0, pArrays->aDoubleCapsStrings.Count());
+ }
+ else
+ {
+ pArrays = new StringsArrays;
+ aStringsTable.Insert(ULONG(eOldLanguage), pArrays);
+ }
+
+ USHORT i;
+ for(i = 0; i < aAbbrevLB.GetEntryCount(); i++)
+ {
+ pArrays->aAbbrevStrings.Insert(
+ new String(aAbbrevLB.GetEntry(i)), i);
+
+ }
+ for(i = 0; i < aDoubleCapsLB.GetEntryCount(); i++)
+ {
+ pArrays->aDoubleCapsStrings.Insert(
+ new String(aDoubleCapsLB.GetEntry(i)), i);
+ }
+ }
+ aDoubleCapsLB.Clear();
+ aAbbrevLB.Clear();
+ String sTemp;
+ aAbbrevED.SetText(sTemp);
+ aDoubleCapsED.SetText(sTemp);
+
+ if(aStringsTable.IsKeyValid(eLang))
+ {
+ StringsArraysPtr pArrays = aStringsTable.Seek(ULONG(eLang));
+ USHORT i;
+ for(i = 0; i < pArrays->aAbbrevStrings.Count(); i++ )
+ {
+ aAbbrevLB.InsertEntry(*pArrays->aAbbrevStrings.GetObject(i));
+ }
+ for( i = 0; i < pArrays->aDoubleCapsStrings.Count(); i++ )
+ {
+ aDoubleCapsLB.InsertEntry(*pArrays->aDoubleCapsStrings.GetObject(i));
+ }
+ }
+ else
+ {
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ const SvStringsISortDtor* pCplList = pAutoCorrect->GetCplSttExceptList(eLang);
+ const SvStringsISortDtor* pWrdList = pAutoCorrect->GetWrdSttExceptList(eLang);
+ USHORT i;
+ for( i = 0; i < pCplList->Count(); i++ )
+ {
+ aAbbrevLB.InsertEntry(*pCplList->GetObject(i));
+ }
+ for( i = 0; i < pWrdList->Count(); i++ )
+ {
+ aDoubleCapsLB.InsertEntry(*pWrdList->GetObject(i));
+ }
+ }
+}
+
+/*-----------------14.10.96 15.58-------------------
+
+--------------------------------------------------*/
+
+void OfaAutocorrExceptPage::Reset( const SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ RefillReplaceBoxes(TRUE, eLang, eLang);
+ aAutoAbbrevCB. Check( pAutoCorrect->IsAutoCorrFlag( SaveWordCplSttLst ));
+ aAutoCapsCB. Check( pAutoCorrect->IsAutoCorrFlag( SaveWordWrdSttLst ));
+ aAutoAbbrevCB.SaveValue();
+ aAutoCapsCB.SaveValue();
+}
+
+/*-----------------16.10.96 12.27-------------------
+
+--------------------------------------------------*/
+
+
+IMPL_LINK(OfaAutocorrExceptPage, NewDelHdl, PushButton*, pBtn)
+{
+ if((pBtn == &aNewAbbrevPB || pBtn == (PushButton*)&aAbbrevED )
+ && aAbbrevED.GetText().Len())
+ {
+ aAbbrevLB.InsertEntry(aAbbrevED.GetText());
+ ModifyHdl(&aAbbrevED);
+ }
+ else if(pBtn == &aDelAbbrevPB)
+ {
+ aAbbrevLB.RemoveEntry(aAbbrevED.GetText());
+ ModifyHdl(&aAbbrevED);
+ }
+ else if((pBtn == &aNewDoublePB || pBtn == (PushButton*)&aDoubleCapsED )
+ && aDoubleCapsED.GetText().Len())
+ {
+ aDoubleCapsLB.InsertEntry(aDoubleCapsED.GetText());
+ ModifyHdl(&aDoubleCapsED);
+ }
+ else if(pBtn == &aDelDoublePB)
+ {
+ aDoubleCapsLB.RemoveEntry(aDoubleCapsED.GetText());
+ ModifyHdl(&aDoubleCapsED);
+ }
+ return 0;
+}
+
+/*-----------------16.10.96 12.57-------------------
+
+--------------------------------------------------*/
+
+IMPL_LINK(OfaAutocorrExceptPage, SelectHdl, ListBox*, pBox)
+{
+ if(pBox == &aAbbrevLB)
+ {
+ aAbbrevED.SetText(pBox->GetSelectEntry());
+ aNewAbbrevPB.Enable(FALSE);
+ aDelAbbrevPB.Enable();
+ }
+ else
+ {
+ aDoubleCapsED.SetText(pBox->GetSelectEntry());
+ aNewDoublePB.Enable(FALSE);
+ aDelDoublePB.Enable();
+ }
+ return 0;
+}
+
+/*-----------------16.10.96 13.02-------------------
+
+--------------------------------------------------*/
+
+IMPL_LINK(OfaAutocorrExceptPage, ModifyHdl, Edit*, pEdt)
+{
+// BOOL bSame = pEdt->GetText() == ->GetSelectEntry();
+ const String& sEntry = pEdt->GetText();
+ BOOL bEntryLen = 0!= sEntry.Len();
+ if(pEdt == &aAbbrevED)
+ {
+ BOOL bSame = lcl_FindEntry(aAbbrevLB, sEntry, *pCompareClass);
+ if(bSame && sEntry != aAbbrevLB.GetSelectEntry())
+ pEdt->SetText(aAbbrevLB.GetSelectEntry());
+ aNewAbbrevPB.Enable(!bSame && bEntryLen);
+ aDelAbbrevPB.Enable(bSame && bEntryLen);
+ }
+ else
+ {
+ BOOL bSame = lcl_FindEntry(aDoubleCapsLB, sEntry, *pCompareClass);
+ if(bSame && sEntry != aDoubleCapsLB.GetSelectEntry())
+ pEdt->SetText(aDoubleCapsLB.GetSelectEntry());
+ aNewDoublePB.Enable(!bSame && bEntryLen);
+ aDelDoublePB.Enable(bSame && bEntryLen);
+ }
+ return 0;
+}
+
+/*-----------------16.10.96 15.03-------------------
+
+--------------------------------------------------*/
+
+void AutoCorrEdit::KeyInput( const KeyEvent& rKEvt )
+{
+ const KeyCode aKeyCode = rKEvt.GetKeyCode();
+ const USHORT nModifier = aKeyCode.GetModifier();
+ if( aKeyCode.GetCode() == KEY_RETURN )
+ {
+ //wird bei Enter nichts getan, dann doch die Basisklasse rufen
+ // um den Dialog zu schliessen
+ if(!nModifier && !aActionLink.Call(this))
+ Edit::KeyInput(rKEvt);
+ }
+ else if(bSpaces || aKeyCode.GetCode() != KEY_SPACE)
+ Edit::KeyInput(rKEvt);
+}
+
+/*-----------------03.07.97 13:17-------------------
+
+--------------------------------------------------*/
+
+enum OfaQuoteOptions
+{
+ ADD_NONBRK_SPACE,
+ REPLACE_1ST
+};
+
+SvLBoxEntry* OfaQuoteTabPage::CreateEntry(String& rTxt, USHORT nCol)
+{
+ SvLBoxEntry* pEntry = new SvLBoxEntry;
+
+ if ( !pCheckButtonData )
+ {
+ pCheckButtonData = new SvLBoxButtonData( &aSwCheckLB );
+ aSwCheckLB.SetCheckButtonData( pCheckButtonData );
+ }
+
+ pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff!
+
+ String sEmpty;
+ if (nCol == CBCOL_SECOND)
+ pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) ); // Leerspalte
+ else
+ pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
+
+ if (nCol == CBCOL_FIRST)
+ pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) ); // Leerspalte
+ else
+ pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
+
+ pEntry->AddItem( new OfaImpBrwString( pEntry, 0, rTxt ) );
+
+ return pEntry;
+}
+
+OfaQuoteTabPage::OfaQuoteTabPage( Window* pParent, const SfxItemSet& rSet ) :
+ SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCORR_QUOTE ), rSet),
+ aCheckLB (this, CUI_RES(CLB_SETTINGS )),
+ aSwCheckLB (this, CUI_RES(CLB_SETTINGS )),
+ sHeader1 (CUI_RES( STR_HEADER1 )),
+ sHeader2 (CUI_RES( STR_HEADER2 )),
+ sNonBrkSpace (CUI_RES( ST_NON_BREAK_SPACE )),
+ sOrdinal (CUI_RES( ST_ORDINAL )),
+ pCheckButtonData ( NULL ),
+
+ aSingleFL (this, CUI_RES(FL_SINGLE )),
+ aSingleTypoCB (this, CUI_RES(CB_SGL_TYPO )),
+ aSglStartQuoteFT (this, CUI_RES(FT_SGL_STARTQUOTE )),
+ aSglStartQuotePB (this, CUI_RES(PB_SGL_STARTQUOTE )),
+ aSglStartExFT (this, CUI_RES(FT_SGSTEX )),
+ aSglEndQuoteFT (this, CUI_RES(FT_SGL_ENDQUOTE )),
+ aSglEndQuotePB (this, CUI_RES(PB_SGL_ENDQUOTE )),
+ aSglEndExFT (this, CUI_RES(FT_SGENEX )),
+ aSglStandardPB (this, CUI_RES(PB_SGL_STD )),
+
+ aDoubleFL (this, CUI_RES(FL_DOUBLE )),
+ aTypoCB (this, CUI_RES(CB_TYPO )),
+ aStartQuoteFT (this, CUI_RES(FT_STARTQUOTE )),
+ aStartQuotePB (this, CUI_RES(PB_STARTQUOTE )),
+ aDblStartExFT (this, CUI_RES(FT_DBSTEX )),
+ aEndQuoteFT (this, CUI_RES(FT_ENDQUOTE )),
+ aEndQuotePB (this, CUI_RES(PB_ENDQUOTE )),
+ aDblEndExFT (this, CUI_RES(FT_DBECEX )),
+ aDblStandardPB (this, CUI_RES(PB_DBL_STD )),
+
+ sStartQuoteDlg (CUI_RES(STR_CHANGE_START)),
+ sEndQuoteDlg (CUI_RES(STR_CHANGE_END)),
+
+ sStandard(CUI_RES(ST_STANDARD))
+{
+ FreeResource();
+
+ BOOL bShowSWOptions = FALSE;
+
+ aCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_CLB );
+ aSwCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_SW_CLB );
+
+ SFX_ITEMSET_ARG( &rSet, pItem, SfxBoolItem, SID_AUTO_CORRECT_DLG, FALSE );
+ if ( pItem && pItem->GetValue() )
+ bShowSWOptions = TRUE;
+
+ if ( bShowSWOptions )
+ {
+ static long aStaticTabs[]=
+ {
+ 3, 0, 20, 40
+ };
+
+ aSwCheckLB.SetWindowBits(WB_HSCROLL| WB_VSCROLL);
+
+ aSwCheckLB.SvxSimpleTable::SetTabs(aStaticTabs);
+ String sHeader( sHeader1 );
+ sHeader += '\t';
+ sHeader += sHeader2;
+ sHeader += '\t';
+ aSwCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
+ HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED);
+ aCheckLB.Hide( TRUE );
+ }
+ else
+ {
+ aSwCheckLB.HideTable( );
+ }
+
+ aStartQuotePB.SetClickHdl(LINK(this, OfaQuoteTabPage, QuoteHdl));
+ aEndQuotePB.SetClickHdl(LINK(this, OfaQuoteTabPage, QuoteHdl));
+ aSglStartQuotePB.SetClickHdl(LINK(this, OfaQuoteTabPage, QuoteHdl));
+ aSglEndQuotePB.SetClickHdl(LINK(this, OfaQuoteTabPage, QuoteHdl));
+ aDblStandardPB.SetClickHdl(LINK(this, OfaQuoteTabPage, StdQuoteHdl));
+ aSglStandardPB.SetClickHdl(LINK(this, OfaQuoteTabPage, StdQuoteHdl));
+
+}
+/*-----------------03.07.97 13:17-------------------
+
+--------------------------------------------------*/
+OfaQuoteTabPage::~OfaQuoteTabPage()
+{
+ delete( pCheckButtonData );
+}
+/*-----------------03.07.97 13:17-------------------
+
+--------------------------------------------------*/
+SfxTabPage* OfaQuoteTabPage::Create( Window* pParent,
+ const SfxItemSet& rAttrSet)
+{
+ return new OfaQuoteTabPage(pParent, rAttrSet);
+}
+/*-----------------03.07.97 13:18-------------------
+
+--------------------------------------------------*/
+BOOL OfaQuoteTabPage::FillItemSet( SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+
+ long nFlags = pAutoCorrect->GetFlags();
+
+ if ( aCheckLB.IsVisible( ) )
+ {
+ USHORT nPos = 0;
+ pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace, aCheckLB.IsChecked(nPos++));
+ pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber, aCheckLB.IsChecked(nPos++));
+ }
+
+ BOOL bModified = FALSE;
+ if ( aSwCheckLB.IsVisible( ) )
+ {
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+
+ BOOL bCheck = aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_FIRST);
+ bModified |= pOpt->bAddNonBrkSpace != bCheck;
+ pOpt->bAddNonBrkSpace = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,
+ aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_SECOND));
+
+ bCheck = aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_FIRST);
+ bModified |= pOpt->bChgOrdinalNumber != bCheck;
+ pOpt->bChgOrdinalNumber = bCheck;
+ pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,
+ aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_SECOND));
+ }
+
+ pAutoCorrect->SetAutoCorrFlag(ChgQuotes, aTypoCB.IsChecked());
+ pAutoCorrect->SetAutoCorrFlag(ChgSglQuotes, aSingleTypoCB.IsChecked());
+ BOOL bReturn = nFlags != pAutoCorrect->GetFlags();
+ if(cStartQuote != pAutoCorrect->GetStartDoubleQuote())
+ {
+ bReturn = TRUE;
+ sal_Unicode cUCS2 = static_cast<sal_Unicode>(cStartQuote); //TODO
+ pAutoCorrect->SetStartDoubleQuote(cUCS2);
+ }
+ if(cEndQuote != pAutoCorrect->GetEndDoubleQuote())
+ {
+ bReturn = TRUE;
+ sal_Unicode cUCS2 = static_cast<sal_Unicode>(cEndQuote); //TODO
+ pAutoCorrect->SetEndDoubleQuote(cUCS2);
+ }
+ if(cSglStartQuote != pAutoCorrect->GetStartSingleQuote())
+ {
+ bReturn = TRUE;
+ sal_Unicode cUCS2 = static_cast<sal_Unicode>(cSglStartQuote); //TODO
+ pAutoCorrect->SetStartSingleQuote(cUCS2);
+ }
+ if(cSglEndQuote != pAutoCorrect->GetEndSingleQuote())
+ {
+ bReturn = TRUE;
+ sal_Unicode cUCS2 = static_cast<sal_Unicode>(cSglEndQuote); //TODO
+ pAutoCorrect->SetEndSingleQuote(cUCS2);
+ }
+
+ if( bModified || bReturn )
+ {
+ SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
+ pCfg->SetModified();
+ pCfg->Commit();
+ }
+ return bReturn;
+}
+/* -----------------23.11.98 16:15-------------------
+ *
+ * --------------------------------------------------*/
+void OfaQuoteTabPage::ActivatePage( const SfxItemSet& )
+{
+ ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage(FALSE);
+}
+/*-----------------03.07.97 13:18-------------------
+
+--------------------------------------------------*/
+void OfaQuoteTabPage::Reset( const SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ const long nFlags = pAutoCorrect->GetFlags();
+
+ // Initialize the Sw options
+ if ( aSwCheckLB.IsVisible( ) )
+ {
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+
+ aSwCheckLB.SetUpdateMode( FALSE );
+ aSwCheckLB.Clear();
+
+ aSwCheckLB.GetModel()->Insert(CreateEntry(sNonBrkSpace, CBCOL_BOTH ));
+ aSwCheckLB.GetModel()->Insert(CreateEntry(sOrdinal, CBCOL_BOTH ));
+
+ aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE, CBCOL_FIRST, pOpt->bAddNonBrkSpace );
+ aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE, CBCOL_SECOND, 0 != (nFlags & AddNonBrkSpace) );
+ aSwCheckLB.CheckEntryPos( REPLACE_1ST, CBCOL_FIRST, pOpt->bChgOrdinalNumber );
+ aSwCheckLB.CheckEntryPos( REPLACE_1ST, CBCOL_SECOND, 0 != (nFlags & ChgOrdinalNumber) );
+
+ aSwCheckLB.SetUpdateMode( TRUE );
+ }
+
+ // Initialize the non Sw options
+ if ( aCheckLB.IsVisible( ) )
+ {
+ aCheckLB.SetUpdateMode( FALSE );
+ aCheckLB.Clear( );
+
+ aCheckLB.InsertEntry( sNonBrkSpace );
+ aCheckLB.InsertEntry( sOrdinal );
+
+ USHORT nPos = 0;
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & AddNonBrkSpace) );
+ aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgOrdinalNumber) );
+
+ aCheckLB.SetUpdateMode( TRUE );
+ }
+
+ // Initialize the quote stuffs
+ aTypoCB .Check(0 != (nFlags & ChgQuotes));
+ aSingleTypoCB .Check(0 != (nFlags & ChgSglQuotes));
+ aTypoCB .SaveValue();
+ aSingleTypoCB .SaveValue();
+
+ cStartQuote = pAutoCorrect->GetStartDoubleQuote();
+ cEndQuote = pAutoCorrect->GetEndDoubleQuote();
+ cSglStartQuote = pAutoCorrect->GetStartSingleQuote();
+ cSglEndQuote = pAutoCorrect->GetEndSingleQuote();
+
+ aSglStartExFT .SetText(ChangeStringExt_Impl(cSglStartQuote));
+ aSglEndExFT .SetText(ChangeStringExt_Impl(cSglEndQuote));
+ aDblStartExFT .SetText(ChangeStringExt_Impl(cStartQuote));
+ aDblEndExFT .SetText(ChangeStringExt_Impl(cEndQuote));
+}
+
+
+/*-----------------15.10.96 16.42-------------------
+
+--------------------------------------------------*/
+#define SGL_START 0
+#define DBL_START 1
+#define SGL_END 2
+#define DBL_END 3
+
+
+IMPL_LINK( OfaQuoteTabPage, QuoteHdl, PushButton*, pBtn )
+{
+ USHORT nMode = SGL_START;
+ if(pBtn == &aSglEndQuotePB)
+ nMode = SGL_END;
+ else if(pBtn == &aStartQuotePB)
+ nMode = DBL_START;
+ else if(pBtn == &aEndQuotePB)
+ nMode = DBL_END;
+ // Zeichenauswahl-Dialog starten
+ SvxCharacterMap* pMap = new SvxCharacterMap( this, TRUE );
+ pMap->SetCharFont( OutputDevice::GetDefaultFont(DEFAULTFONT_LATIN_TEXT,
+ LANGUAGE_ENGLISH_US, DEFAULTFONT_FLAGS_ONLYONE, 0 ));
+ pMap->SetText(nMode < SGL_END ? sStartQuoteDlg : sEndQuoteDlg );
+ sal_UCS4 cDlg;
+ //The two lines below are added by BerryJia for Bug95846 Time:2002-8-13 15:50
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ LanguageType eLang = Application::GetSettings().GetLanguage();
+ switch( nMode )
+ {
+ case SGL_START:
+ cDlg = cSglStartQuote;
+ if(cDlg == 0)
+ cDlg = pAutoCorrect->GetQuote('\'',TRUE,eLang); //add by BerryJia for Bug95846 Time:2002-8-13 15:50
+ break;
+ case SGL_END:
+ cDlg = cSglEndQuote;
+ if(cDlg == 0)
+ cDlg = pAutoCorrect->GetQuote('\'',FALSE,eLang); //add by BerryJia for Bug95846 Time:2002-8-13 15:50
+ break;
+ case DBL_START:
+ cDlg = cStartQuote;
+ if(cDlg == 0)
+ cDlg = pAutoCorrect->GetQuote('\"',TRUE,eLang); //add by BerryJia for Bug95846 Time:2002-8-13 15:50
+ break;
+ case DBL_END:
+ cDlg = cEndQuote;
+ if(cDlg == 0)
+ cDlg = pAutoCorrect->GetQuote('\"',FALSE,eLang); //add by BerryJia for Bug95846 Time:2002-8-13 15:50
+ break;
+ default:
+ DBG_ERROR("svx::OfaQuoteTabPage::QuoteHdl(), how to initialize cDlg?" );
+ cDlg = 0;
+ break;
+
+ }
+ pMap->SetChar( cDlg );
+ pMap->DisableFontSelection();
+ if(pMap->Execute() == RET_OK)
+ {
+ sal_UCS4 cNewChar = pMap->GetChar();
+ switch( nMode )
+ {
+ case SGL_START:
+ cSglStartQuote = cNewChar;
+ aSglStartExFT.SetText(ChangeStringExt_Impl(cNewChar));
+ break;
+ case SGL_END:
+ cSglEndQuote = cNewChar;
+ aSglEndExFT.SetText(ChangeStringExt_Impl(cNewChar));
+ break;
+ case DBL_START:
+ cStartQuote = cNewChar;
+ aDblStartExFT.SetText(ChangeStringExt_Impl(cNewChar));
+ break;
+ case DBL_END:
+ cEndQuote = cNewChar;
+ aDblEndExFT.SetText(ChangeStringExt_Impl(cNewChar));
+ break;
+ }
+ }
+ delete pMap;
+
+ return 0;
+}
+
+/*-----------------27.06.97 09.55-------------------
+
+--------------------------------------------------*/
+IMPL_LINK( OfaQuoteTabPage, StdQuoteHdl, PushButton*, pBtn )
+{
+ if(pBtn == &aDblStandardPB)
+ {
+ cStartQuote = 0;
+ aDblStartExFT.SetText(ChangeStringExt_Impl(0));
+ cEndQuote = 0;
+ aDblEndExFT.SetText(ChangeStringExt_Impl(0));
+
+ }
+ else
+ {
+ cSglStartQuote = 0;
+ aSglStartExFT.SetText(ChangeStringExt_Impl(0));
+ cSglEndQuote = 0;
+ aSglEndExFT.SetText(ChangeStringExt_Impl(0));
+ }
+ return 0;
+}
+
+// --------------------------------------------------
+
+String OfaQuoteTabPage::ChangeStringExt_Impl( sal_UCS4 cChar )
+{
+ if( !cChar )
+ return sStandard;
+
+ // convert codepoint value to unicode-hex string
+ sal_UCS4 aStrCodes[32] = { 0, ' ', '(', 'U', '+', '0' };
+ aStrCodes[0] = cChar;
+ int nFullLen = 5;
+ int nHexLen = 4;
+ while( (cChar >> (4*nHexLen)) != 0 )
+ ++nHexLen;
+ for( int i = nHexLen; --i >= 0;)
+ {
+ sal_UCS4 cHexDigit = ((cChar >> (4*i)) & 0x0f) + '0';
+ if( cHexDigit > '9' )
+ cHexDigit += 'A' - ('9' + 1);
+ aStrCodes[ nFullLen++ ] = cHexDigit;
+ }
+ aStrCodes[ nFullLen++ ] = ')';
+ // using the new UCS4 constructor
+ rtl::OUString aOUStr( aStrCodes, nFullLen );
+ return aOUStr;
+}
+
+OfaAutoCompleteTabPage::OfaAutoCompleteTabPage( Window* pParent,
+ const SfxItemSet& rSet )
+ : SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_AUTOCOMPLETE_OPTIONS ), rSet),
+ aCBActiv (this, CUI_RES(CB_ACTIV)),
+ aCBAppendSpace (this, CUI_RES(CB_APPEND_SPACE)),
+ aCBAsTip (this, CUI_RES(CB_AS_TIP)),
+ aCBCollect (this, CUI_RES(CB_COLLECT)),
+ aCBRemoveList (this, CUI_RES(CB_REMOVE_LIST)),
+ aFTExpandKey (this, CUI_RES(FT_EXPAND_KEY)),
+ aDCBExpandKey (this, CUI_RES(DCB_EXPAND_KEY)),
+ aFTMinWordlen (this, CUI_RES(FT_MIN_WORDLEN)),
+ aNFMinWordlen (this, CUI_RES(NF_MIN_WORDLEN)),
+ aFTMaxEntries (this, CUI_RES(FT_MAX_ENTRIES)),
+ aNFMaxEntries (this, CUI_RES(NF_MAX_ENTRIES)),
+ aLBEntries (*this, CUI_RES(LB_ENTRIES)),
+ aPBEntries (this, CUI_RES(PB_ENTRIES)),
+ pAutoCmpltList( 0 ),
+ nAutoCmpltListCnt( 0 )
+{
+ FreeResource();
+
+ // the defined KEYs
+ static const USHORT aKeyCodes[] = {
+ KEY_END,
+ KEY_RETURN,
+ KEY_SPACE,
+ KEY_RIGHT,
+ KEY_TAB,
+ 0
+ };
+
+ for( const USHORT* pKeys = aKeyCodes; *pKeys; ++pKeys )
+ {
+ KeyCode aKCode( *pKeys );
+ USHORT nPos = aDCBExpandKey.InsertEntry( aKCode.GetName() );
+ aDCBExpandKey.SetEntryData( nPos, (void*)(ULONG)*pKeys );
+ if( KEY_RETURN == *pKeys ) // default to RETURN
+ aDCBExpandKey.SelectEntryPos( nPos );
+ }
+
+ aPBEntries.SetClickHdl(LINK(this, OfaAutoCompleteTabPage, DeleteHdl));
+ aCBActiv.SetToggleHdl(LINK(this, OfaAutoCompleteTabPage, CheckHdl));
+ aCBCollect.SetToggleHdl(LINK(this, OfaAutoCompleteTabPage, CheckHdl));
+}
+
+OfaAutoCompleteTabPage::~OfaAutoCompleteTabPage()
+{
+}
+
+SfxTabPage* OfaAutoCompleteTabPage::Create( Window* pParent,
+ const SfxItemSet& rSet)
+{
+ return new OfaAutoCompleteTabPage( pParent, rSet );
+}
+
+BOOL OfaAutoCompleteTabPage::FillItemSet( SfxItemSet& )
+{
+ BOOL bModified = FALSE, bCheck;
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+ USHORT nVal;
+
+ bCheck = aCBActiv.IsChecked();
+ bModified |= pOpt->bAutoCompleteWords != bCheck;
+ pOpt->bAutoCompleteWords = bCheck;
+ bCheck = aCBCollect.IsChecked();
+ bModified |= pOpt->bAutoCmpltCollectWords != bCheck;
+ pOpt->bAutoCmpltCollectWords = bCheck;
+ bCheck = !aCBRemoveList.IsChecked(); // inverted value!
+ bModified |= pOpt->bAutoCmpltKeepList != bCheck;
+ pOpt->bAutoCmpltKeepList = bCheck;
+ bCheck = aCBAppendSpace.IsChecked();
+ bModified |= pOpt->bAutoCmpltAppendBlanc != bCheck;
+ pOpt->bAutoCmpltAppendBlanc = bCheck;
+ bCheck = aCBAsTip.IsChecked();
+ bModified |= pOpt->bAutoCmpltShowAsTip != bCheck;
+ pOpt->bAutoCmpltShowAsTip = bCheck;
+
+ nVal = (USHORT)aNFMinWordlen.GetValue();
+ bModified |= nVal != pOpt->nAutoCmpltWordLen;
+ pOpt->nAutoCmpltWordLen = nVal;
+
+ nVal = (USHORT)aNFMaxEntries.GetValue();
+ bModified |= nVal != pOpt->nAutoCmpltListLen;
+ pOpt->nAutoCmpltListLen = nVal;
+
+ nVal = aDCBExpandKey.GetSelectEntryPos();
+ if( nVal < aDCBExpandKey.GetEntryCount() )
+ {
+ ULONG nKey = (ULONG)aDCBExpandKey.GetEntryData( nVal );
+ bModified |= nKey != pOpt->nAutoCmpltExpandKey;
+ pOpt->nAutoCmpltExpandKey = (USHORT)nKey;
+ }
+
+ if( pAutoCmpltList && nAutoCmpltListCnt != aLBEntries.GetEntryCount() )
+ {
+ bModified = TRUE;
+ pOpt->pAutoCmpltList = pAutoCmpltList;
+ }
+ if( bModified )
+ {
+ SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
+ pCfg->SetModified();
+ pCfg->Commit();
+ }
+ return TRUE;
+}
+
+void OfaAutoCompleteTabPage::Reset( const SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+
+ aCBActiv.Check( 0 != pOpt->bAutoCompleteWords );
+ aCBCollect.Check( 0 != pOpt->bAutoCmpltCollectWords );
+ aCBRemoveList.Check( !pOpt->bAutoCmpltKeepList ); //inverted value!
+ aCBAppendSpace.Check( 0 != pOpt->bAutoCmpltAppendBlanc );
+ aCBAsTip.Check( 0 != pOpt->bAutoCmpltShowAsTip );
+
+ aNFMinWordlen.SetValue( pOpt->nAutoCmpltWordLen );
+ aNFMaxEntries.SetValue( pOpt->nAutoCmpltListLen );
+
+ // select the specific KeyCode:
+ {
+ ULONG nKey = pOpt->nAutoCmpltExpandKey;
+ for( USHORT n = 0, nCnt = aDCBExpandKey.GetEntryCount(); n < nCnt; ++n )
+ if( nKey == (ULONG)aDCBExpandKey.GetEntryData( n ))
+ {
+ aDCBExpandKey.SelectEntryPos( n );
+ break;
+ }
+ }
+
+ if( pOpt->pAutoCmpltList && pOpt->pAutoCmpltList->Count() )
+ {
+ pAutoCmpltList = (SvStringsISortDtor*)pOpt->pAutoCmpltList;
+ pOpt->pAutoCmpltList = 0;
+ nAutoCmpltListCnt = pAutoCmpltList->Count();
+ for( USHORT n = 0; n < nAutoCmpltListCnt; ++n )
+ {
+ const StringPtr pStr = pAutoCmpltList->GetObject( n );
+ USHORT nPos = aLBEntries.InsertEntry( *pStr );
+ aLBEntries.SetEntryData( nPos, (void*)pStr );
+ }
+ }
+ else
+ {
+ aLBEntries.Disable();
+ aPBEntries.Disable();
+ }
+
+ CheckHdl( &aCBActiv );
+ CheckHdl( &aCBCollect );
+}
+
+void OfaAutoCompleteTabPage::ActivatePage( const SfxItemSet& )
+{
+ ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage( FALSE );
+}
+
+IMPL_LINK( OfaAutoCompleteTabPage, DeleteHdl, PushButton*, EMPTYARG )
+{
+ USHORT nSelCnt = pAutoCmpltList ? aLBEntries.GetSelectEntryCount() : 0;
+ while( nSelCnt )
+ {
+ USHORT nPos = aLBEntries.GetSelectEntryPos( --nSelCnt );
+ const StringPtr pStr = (StringPtr)aLBEntries.GetEntryData( nPos );
+ aLBEntries.RemoveEntry( nPos );
+ nPos = pAutoCmpltList->GetPos( pStr );
+ if( USHRT_MAX != nPos )
+ pAutoCmpltList->Remove( nPos );
+ }
+ return 0;
+}
+
+IMPL_LINK( OfaAutoCompleteTabPage, CheckHdl, CheckBox*, pBox )
+{
+ BOOL bEnable = pBox->IsChecked();
+ if( pBox == &aCBActiv )
+ {
+ aCBAppendSpace.Enable( bEnable );
+ aCBAppendSpace.Enable( bEnable );
+ aCBAsTip.Enable( bEnable );
+ aDCBExpandKey.Enable( bEnable );
+ }
+ else if(&aCBCollect == pBox)
+ aCBRemoveList.Enable( bEnable );
+ return 0;
+}
+
+void OfaAutoCompleteTabPage::CopyToClipboard() const
+{
+ USHORT nSelCnt = aLBEntries.GetSelectEntryCount();
+ if( pAutoCmpltList && nSelCnt )
+ {
+ TransferDataContainer* pCntnr = new TransferDataContainer;
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::datatransfer::XTransferable > xRef( pCntnr );
+
+ ByteString sData;
+ const sal_Char* pLineEnd =
+#if defined(UNX)
+ "\012";
+#else
+ "\015\012";
+#endif
+
+ rtl_TextEncoding nEncode = gsl_getSystemTextEncoding();
+
+ for( USHORT n = 0; n < nSelCnt; ++n )
+ {
+ sData += ByteString( aLBEntries.GetSelectEntry( n ), nEncode );
+ sData += pLineEnd;
+ }
+ pCntnr->CopyByteString( SOT_FORMAT_STRING, sData );
+ pCntnr->CopyToClipboard( (Window*)this );
+ }
+}
+
+long OfaAutoCompleteTabPage::AutoCompleteMultiListBox::PreNotify(
+ NotifyEvent& rNEvt )
+{
+ long nHandled = MultiListBox::PreNotify( rNEvt );
+
+ if( !nHandled && EVENT_KEYUP == rNEvt.GetType() )
+ {
+ const KeyCode& rKeyCode = rNEvt.GetKeyEvent()->GetKeyCode();
+ switch( rKeyCode.GetModifier() | rKeyCode.GetCode() )
+ {
+ case KEY_DELETE:
+ rPage.DeleteHdl( 0 );
+ nHandled = 1;
+ break;
+
+ default:
+ if( KEYFUNC_COPY == rKeyCode.GetFunction() )
+ {
+ rPage.CopyToClipboard();
+ nHandled = 1;
+ }
+ break;
+ }
+ }
+ return nHandled;
+}
+
+// class OfaSmartTagOptionsTabPage ---------------------------------------------
+
+OfaSmartTagOptionsTabPage::OfaSmartTagOptionsTabPage( Window* pParent,
+ const SfxItemSet& rSet )
+ : SfxTabPage(pParent, CUI_RES( RID_OFAPAGE_SMARTTAG_OPTIONS ), rSet),
+ m_aMainCB( this, CUI_RES(CB_SMARTTAGS) ),
+ m_aSmartTagTypesLB( this, CUI_RES(LB_SMARTTAGS) ),
+ m_aPropertiesPB( this, CUI_RES(PB_SMARTTAGS) ),
+ m_aTitleFT( this, CUI_RES(FT_SMARTTAGS) )
+{
+ FreeResource();
+
+ // some options for the list box:
+ m_aSmartTagTypesLB.SetWindowBits( m_aSmartTagTypesLB.GetStyle() | WB_HSCROLL | WB_HIDESELECTION );
+ m_aSmartTagTypesLB.SetHighlightRange();
+
+ // set the handlers:
+ m_aMainCB.SetToggleHdl(LINK(this, OfaSmartTagOptionsTabPage, CheckHdl));
+ m_aPropertiesPB.SetClickHdl(LINK(this, OfaSmartTagOptionsTabPage, ClickHdl));
+ m_aSmartTagTypesLB.SetSelectHdl(LINK(this, OfaSmartTagOptionsTabPage, SelectHdl));
+}
+
+OfaSmartTagOptionsTabPage::~OfaSmartTagOptionsTabPage()
+{
+
+}
+
+SfxTabPage* OfaSmartTagOptionsTabPage::Create( Window* pParent, const SfxItemSet& rSet)
+{
+ return new OfaSmartTagOptionsTabPage( pParent, rSet );
+}
+
+/** This struct is used to associate list box entries with smart tag data
+*/
+struct ImplSmartTagLBUserData
+{
+ rtl::OUString maSmartTagType;
+ uno::Reference< smarttags::XSmartTagRecognizer > mxRec;
+ sal_Int32 mnSmartTagIdx;
+
+ ImplSmartTagLBUserData( const rtl::OUString& rSmartTagType,
+ uno::Reference< smarttags::XSmartTagRecognizer > xRec,
+ sal_Int32 nSmartTagIdx ) :
+ maSmartTagType( rSmartTagType ),
+ mxRec( xRec ),
+ mnSmartTagIdx( nSmartTagIdx ) {}
+};
+
+/** Clears m_aSmartTagTypesLB
+*/
+void OfaSmartTagOptionsTabPage::ClearListBox()
+{
+ const ULONG nCount = m_aSmartTagTypesLB.GetEntryCount();
+ for ( USHORT i = 0; i < nCount; ++i )
+ {
+ const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(i);
+ const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
+ delete pUserData;
+ }
+
+ m_aSmartTagTypesLB.Clear();
+}
+
+/** Inserts items into m_aSmartTagTypesLB
+*/
+void OfaSmartTagOptionsTabPage::FillListBox( const SmartTagMgr& rSmartTagMgr )
+{
+ // first we have to clear the list box:
+ ClearListBox();
+
+ // fill list box:
+ const sal_uInt32 nNumberOfRecognizers = rSmartTagMgr.NumberOfRecognizers();
+ const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
+ std::vector< ActionReference > aActionReferences;
+
+ for ( sal_uInt32 i = 0; i < nNumberOfRecognizers; ++i )
+ {
+ uno::Reference< smarttags::XSmartTagRecognizer > xRec = rSmartTagMgr.GetRecognizer(i);
+
+ const rtl::OUString aName = xRec->getName( aLocale );
+ const rtl::OUString aDesc = xRec->getDescription( aLocale );
+ const sal_Int32 nNumberOfSupportedSmartTags = xRec->getSmartTagCount();
+
+ for ( sal_Int32 j = 0; j < nNumberOfSupportedSmartTags; ++j )
+ {
+ const rtl::OUString aSmartTagType = xRec->getSmartTagName(j);
+ rtl::OUString aSmartTagCaption = rSmartTagMgr.GetSmartTagCaption( aSmartTagType, aLocale );
+
+ if ( !aSmartTagCaption.getLength() )
+ aSmartTagCaption = aSmartTagType;
+
+ const rtl::OUString aLBEntry = aSmartTagCaption +
+ OUString::createFromAscii(" (") +
+ aName +
+ OUString::createFromAscii(")");
+
+ SvLBoxEntry* pEntry = m_aSmartTagTypesLB.SvTreeListBox::InsertEntry( aLBEntry );
+ if ( pEntry )
+ {
+ const bool bCheck = rSmartTagMgr.IsSmartTagTypeEnabled( aSmartTagType );
+ m_aSmartTagTypesLB.SetCheckButtonState( pEntry, bCheck ? SV_BUTTON_CHECKED : SV_BUTTON_UNCHECKED );
+ pEntry->SetUserData(static_cast<void*>(new ImplSmartTagLBUserData( aSmartTagType, xRec, j ) ) );
+ }
+ }
+ }
+}
+
+/** Handler for the push button
+*/
+IMPL_LINK( OfaSmartTagOptionsTabPage, ClickHdl, PushButton*, EMPTYARG )
+{
+ const USHORT nPos = m_aSmartTagTypesLB.GetSelectEntryPos();
+ const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(nPos);
+ const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
+ uno::Reference< smarttags::XSmartTagRecognizer > xRec = pUserData->mxRec;
+ const sal_Int32 nSmartTagIdx = pUserData->mnSmartTagIdx;
+
+ const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
+ if ( xRec->hasPropertyPage( nSmartTagIdx, aLocale ) )
+ xRec->displayPropertyPage( nSmartTagIdx, aLocale );
+
+ return 0;
+}
+
+/** Handler for the check box
+*/
+IMPL_LINK( OfaSmartTagOptionsTabPage, CheckHdl, CheckBox*, EMPTYARG )
+{
+ const BOOL bEnable = m_aMainCB.IsChecked();
+ m_aSmartTagTypesLB.Enable( bEnable );
+ m_aSmartTagTypesLB.Invalidate();
+ m_aPropertiesPB.Enable( false );
+
+ // if the controls are currently enabled, we still have to check
+ // if the properties button should be disabled because the currently
+ // seleted smart tag type does not have a properties dialog.
+ // We do this by calling SelectHdl:
+ if ( bEnable )
+ SelectHdl( &m_aSmartTagTypesLB );
+
+ return 0;
+}
+
+/** Handler for the list box
+*/
+IMPL_LINK(OfaSmartTagOptionsTabPage, SelectHdl, SvxCheckListBox*, EMPTYARG)
+{
+ if ( m_aSmartTagTypesLB.GetEntryCount() < 1 )
+ return 0;
+
+ const USHORT nPos = m_aSmartTagTypesLB.GetSelectEntryPos();
+ const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(nPos);
+ const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
+ uno::Reference< smarttags::XSmartTagRecognizer > xRec = pUserData->mxRec;
+ const sal_Int32 nSmartTagIdx = pUserData->mnSmartTagIdx;
+
+ const lang::Locale aLocale( SvxCreateLocale( eLastDialogLanguage ) );
+ if ( xRec->hasPropertyPage( nSmartTagIdx, aLocale ) )
+ m_aPropertiesPB.Enable( sal_True );
+ else
+ m_aPropertiesPB.Enable( sal_False );
+
+ return 0;
+}
+
+/** Propagates the current settings to the smart tag manager.
+*/
+BOOL OfaSmartTagOptionsTabPage::FillItemSet( SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+ SmartTagMgr* pSmartTagMgr = pOpt->pSmartTagMgr;
+
+ // robust!
+ if ( !pSmartTagMgr )
+ return FALSE;
+
+ BOOL bModifiedSmartTagTypes = FALSE;
+ std::vector< rtl::OUString > aDisabledSmartTagTypes;
+
+ const ULONG nCount = m_aSmartTagTypesLB.GetEntryCount();
+
+ for ( USHORT i = 0; i < nCount; ++i )
+ {
+ const SvLBoxEntry* pEntry = m_aSmartTagTypesLB.GetEntry(i);
+ const ImplSmartTagLBUserData* pUserData = static_cast< ImplSmartTagLBUserData* >(pEntry->GetUserData());
+ const BOOL bChecked = m_aSmartTagTypesLB.IsChecked(i);
+ const BOOL bIsCurrentlyEnabled = pSmartTagMgr->IsSmartTagTypeEnabled( pUserData->maSmartTagType );
+
+ bModifiedSmartTagTypes = bModifiedSmartTagTypes || ( !bChecked != !bIsCurrentlyEnabled );
+
+ if ( !bChecked )
+ aDisabledSmartTagTypes.push_back( pUserData->maSmartTagType );
+
+ delete pUserData;
+ }
+
+ const BOOL bModifiedRecognize = ( !m_aMainCB.IsChecked() != !pSmartTagMgr->IsLabelTextWithSmartTags() );
+ if ( bModifiedSmartTagTypes || bModifiedRecognize )
+ {
+ bool bLabelTextWithSmartTags = m_aMainCB.IsChecked() ? true : false;
+ pSmartTagMgr->WriteConfiguration( bModifiedRecognize ? &bLabelTextWithSmartTags : 0,
+ bModifiedSmartTagTypes ? &aDisabledSmartTagTypes : 0 );
+ }
+
+ return TRUE;
+}
+
+/** Sets the controls based on the current settings at SmartTagMgr.
+*/
+void OfaSmartTagOptionsTabPage::Reset( const SfxItemSet& )
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
+ const SmartTagMgr* pSmartTagMgr = pOpt->pSmartTagMgr;
+
+ // robust, should not happen!
+ if ( !pSmartTagMgr )
+ return;
+
+ FillListBox( *pSmartTagMgr );
+ m_aSmartTagTypesLB.SelectEntryPos( 0 );
+ m_aMainCB.Check( pSmartTagMgr->IsLabelTextWithSmartTags() );
+ CheckHdl( &m_aMainCB );
+}
+
+void OfaSmartTagOptionsTabPage::ActivatePage( const SfxItemSet& )
+{
+ ((OfaAutoCorrDlg*)GetTabDialog())->EnableLanguage( FALSE );
+}
+