From 557dd8031d3b8221e2664a8149401226a67d0f08 Mon Sep 17 00:00:00 2001 From: Mathias Bauer Date: Thu, 10 Dec 2009 19:12:58 +0100 Subject: #i107450#: move ThesaurusDialog and HyphenWordDialog to cui --- cui/source/dialogs/hyphen.cxx | 516 +++++++++++++++++++++++++++++++++++++++++ cui/source/dialogs/hyphen.hrc | 48 ++++ cui/source/dialogs/hyphen.src | 146 ++++++++++++ cui/source/dialogs/makefile.mk | 4 + cui/source/dialogs/thesdlg.cxx | 494 +++++++++++++++++++++++++++++++++++++++ cui/source/dialogs/thesdlg.hrc | 62 +++++ cui/source/dialogs/thesdlg.src | 211 +++++++++++++++++ cui/source/factory/dlgfact.cxx | 51 ++++ cui/source/factory/dlgfact.hxx | 26 ++- cui/source/inc/cuires.hrc | 4 + cui/source/inc/helpid.hrc | 5 +- cui/source/inc/hyphen.hxx | 122 ++++++++++ cui/source/inc/thesdlg.hxx | 124 ++++++++++ 13 files changed, 1810 insertions(+), 3 deletions(-) create mode 100644 cui/source/dialogs/hyphen.cxx create mode 100644 cui/source/dialogs/hyphen.hrc create mode 100644 cui/source/dialogs/hyphen.src create mode 100644 cui/source/dialogs/thesdlg.cxx create mode 100644 cui/source/dialogs/thesdlg.hrc create mode 100644 cui/source/dialogs/thesdlg.src create mode 100644 cui/source/inc/hyphen.hxx create mode 100644 cui/source/inc/thesdlg.hxx (limited to 'cui') diff --git a/cui/source/dialogs/hyphen.cxx b/cui/source/dialogs/hyphen.cxx new file mode 100644 index 000000000000..dca6c2ff6dcd --- /dev/null +++ b/cui/source/dialogs/hyphen.cxx @@ -0,0 +1,516 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: hyphen.cxx,v $ + * $Revision: 1.14 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_cui.hxx" + +// include --------------------------------------------------------------- +#include +#include +#include +#include +#include "cuires.hrc" +#include "hyphen.hrc" +#include +#include "hyphen.hxx" +#include +#include +#include +#include +#include +#include "dialmgr.hxx" + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::linguistic2; + +#undef S2U +#undef U2S +//#define S2U(s) StringToOUString(s, CHARSET_SYSTEM) +//#define U2S(s) OUStringToString(s, CHARSET_SYSTEM) + +// define ---------------------------------------------------------------- + +#define HYPHHERE '-' +#define CONTINUE_HYPH USHRT_MAX + +// Dies ist nur ein Hack, weil an dieser Stelle das extern char aus hmwrap +// nicht bekannt ist, wird demnaechst in hmwrap durch ein define ersetzt. +#define SW_SOFT_HYPHEN '=' + +// class SvxHyphenEdit --------------------------------------------------- + +SvxHyphenEdit::SvxHyphenEdit( Window* pParent, const ResId& rResId ) : + + Edit( pParent, rResId ) +{ +} + +// ----------------------------------------------------------------------- + +void SvxHyphenEdit::KeyInput( const KeyEvent& rKEvt ) +{ +// sal_uInt16 nMod = rKEvt.GetKeyCode().GetModifier(); + sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode(); + + switch ( nCode ) + { + case KEY_LEFT: + ( (SvxHyphenWordDialog*)GetParent() )->SelLeft(); + break; + + case KEY_RIGHT: + ( (SvxHyphenWordDialog*)GetParent() )->SelRight(); + break; + + case KEY_TAB: + case KEY_ESCAPE: + case KEY_RETURN: + Edit::KeyInput(rKEvt); + break; + default: + Control::KeyInput( rKEvt ); // An den Dialog weiterleiten + break; + } +} + +// class SvxHyphenWordDialog --------------------------------------------- + +SvxHyphenWordDialog::SvxHyphenWordDialog( const String &rWord, LanguageType nLang, + Window* pParent, + Reference< XHyphenator > &xHyphen, + SvxSpellWrapper* pWrapper ) : + SfxModalDialog( pParent, CUI_RES( RID_SVXDLG_HYPHENATE ) ), + + aWordFT ( this, CUI_RES( FT_WORD ) ), + aWordEdit ( this, CUI_RES( ED_WORD ) ), + aLeftBtn ( this, CUI_RES( BTN_LEFT ) ), + aRightBtn ( this, CUI_RES( BTN_RIGHT ) ), + aOkBtn ( this, CUI_RES( BTN_HYPH_CUT ) ), + aCancelBtn ( this, CUI_RES( BTN_HYPH_CANCEL ) ), + aContBtn ( this, CUI_RES( BTN_HYPH_CONTINUE ) ), + aDelBtn ( this, CUI_RES( BTN_HYPH_DELETE ) ), + aHelpBtn ( this, CUI_RES( BTN_HYPH_HELP ) ), + aLabel ( GetText() ), + pHyphWrapper ( pWrapper ), + xHyphenator ( xHyphen ), + aActWord ( rWord ), + nActLanguage ( nLang ), + nHyphPos ( 0 ), + nOldPos ( 0 ), + bBusy ( sal_False ) +{ + aContBtn.SetClickHdl( + LINK( this, SvxHyphenWordDialog, ContinueHdl_Impl ) ); + aOkBtn.SetClickHdl( LINK( this, SvxHyphenWordDialog, CutHdl_Impl ) ); + aDelBtn.SetClickHdl( LINK( this, SvxHyphenWordDialog, DeleteHdl_Impl ) ); + aCancelBtn.SetClickHdl( + LINK( this, SvxHyphenWordDialog, CancelHdl_Impl ) ); + aLeftBtn.SetClickHdl( LINK( this, SvxHyphenWordDialog, Left_Impl ) ); + aRightBtn.SetClickHdl( LINK( this, SvxHyphenWordDialog, Right_Impl ) ); + + aWordEdit.SetGetFocusHdl( + LINK( this, SvxHyphenWordDialog, GetFocusHdl_Impl ) ); + + Reference< XHyphenatedWord > xHyphWord( pWrapper ? + pWrapper->GetLast() : Reference< XInterface > () , UNO_QUERY ); + DBG_ASSERT(xHyphWord.is(), "missing hyphenated word"); + nMaxHyphenationPos = xHyphWord.is() ? xHyphWord->getHyphenationPos() : 0; + SetLabel_Impl( nLang ); + + InitControls_Impl(); + aWordEdit.GrabFocus(); + + FreeResource(); + + // disable controls if service is not available + if (!xHyphenator.is()) + Enable( sal_False ); +} + +// ----------------------------------------------------------------------- + +void SvxHyphenWordDialog::SelLeft() +{ + String aTxt( aWordEdit.GetText() ); + + for ( xub_StrLen i = nOldPos + 1; i-- > 0 ; ) + { + DBG_ASSERT(i <= aTxt.Len(), "index out of range"); + if( aTxt.GetChar( i ) == sal_Unicode( SW_SOFT_HYPHEN ) ) + { + aTxt.SetChar( i, sal_Unicode( HYPHHERE ) ); + + if ( nOldPos != 0 && nOldPos != aTxt.Len() ) + aTxt.SetChar( nOldPos, sal_Unicode( SW_SOFT_HYPHEN ) ); + nOldPos = i; + aWordEdit.SetText( aTxt ); + aWordEdit.GrabFocus(); + aWordEdit.SetSelection( Selection( i, i + 1 ) ); + break; + } + } + nHyphPos = GetHyphIndex_Impl(); + EnableLRBtn_Impl(); +} + +// ----------------------------------------------------------------------- + +void SvxHyphenWordDialog::SelRight() +{ + String aTxt( aWordEdit.GetText() ); + + for ( xub_StrLen i = nOldPos + 1; i < aTxt.Len(); ++i ) + { + if( aTxt.GetChar( i ) == sal_Unicode( SW_SOFT_HYPHEN ) ) + { + aTxt.SetChar( i, sal_Unicode( HYPHHERE ) ); + + if ( nOldPos != 0 && nOldPos != aTxt.Len() ) + aTxt.SetChar( nOldPos, sal_Unicode( SW_SOFT_HYPHEN ) ); + nOldPos = i; + aWordEdit.SetText( aTxt ); + aWordEdit.GrabFocus(); + aWordEdit.SetSelection( Selection( i, i + 1 ) ); + break; + } + } + nHyphPos = GetHyphIndex_Impl(); + EnableLRBtn_Impl(); +} + +// ----------------------------------------------------------------------- + +void SvxHyphenWordDialog::EnableLRBtn_Impl() +{ + String aTxt( aWordEdit.GetText() ); + xub_StrLen nLen = aTxt.Len(); + xub_StrLen i; + + aRightBtn.Disable(); + for ( i = nOldPos + 2; i < nLen; ++i ) + { + if ( aTxt.GetChar( i ) == sal_Unicode( SW_SOFT_HYPHEN ) ) + { + aRightBtn.Enable(); + break; + } + } + + DBG_ASSERT(nOldPos < aTxt.Len(), "nOldPos out of range"); + if (nOldPos >= aTxt.Len()) + nOldPos = aTxt.Len() - 1; + aLeftBtn.Disable(); + for ( i = nOldPos; i-- > 0; ) + { + if ( aTxt.GetChar( i ) == sal_Unicode( SW_SOFT_HYPHEN ) ) + { + aLeftBtn.Enable(); + break; + } + } +} + +// ----------------------------------------------------------------------- + + +void SvxHyphenWordDialog::SetLabel_Impl( LanguageType nLang ) +{ + String aLangStr( SvtLanguageTable::GetLanguageString( nLang ) ); + String aTmp( aLabel ); + aTmp.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " (" ) ); + aTmp.Append( aLangStr ); + aTmp.Append( sal_Unicode( ')' ) ); + SetText( aTmp ); +} + +// ----------------------------------------------------------------------- + +String SvxHyphenWordDialog::EraseUnusableHyphens_Impl( + Reference< XPossibleHyphens > &rxPossHyph, + sal_uInt16 _nMaxHyphenationPos ) +{ + // returns a String showing only those hyphen positions which will result + // in a line break if hyphenation is done there + + String aTxt; + DBG_ASSERT(rxPossHyph.is(), "missing possible hyphens"); + if (rxPossHyph.is()) + { + aTxt = String( rxPossHyph->getPossibleHyphens() ); + + Sequence< sal_Int16 > aHyphenationPositions( + rxPossHyph->getHyphenationPositions() ); + sal_Int32 nLen = aHyphenationPositions.getLength(); + const sal_Int16 *pHyphenationPos = aHyphenationPositions.getConstArray(); + + // find position nIdx after which all hyphen positions are unusable + xub_StrLen nIdx = STRING_NOTFOUND, + nPos; + if (nLen) + { + xub_StrLen nStart = 0; + for (sal_Int32 i = 0; i < nLen; ++i) + { + if (pHyphenationPos[i] > _nMaxHyphenationPos) + break; + else + { + // find corresponding hyphen pos in string + nPos = aTxt.Search( sal_Unicode( SW_SOFT_HYPHEN ), nStart ); + + if (nStart == STRING_NOTFOUND) + break; + else + { + nIdx = nPos; + nStart = nPos + 1; + } + } + } + } + DBG_ASSERT(nIdx != STRING_NOTFOUND, "no usable hyphenation position"); + + // remove not usable hyphens from string + nPos = nIdx == STRING_NOTFOUND ? 0 : nIdx + 1; + String aTmp( sal_Unicode( SW_SOFT_HYPHEN ) ), + aEmpty; + while (nPos != STRING_NOTFOUND) + nPos = aTxt.SearchAndReplace( aTmp, aEmpty, nPos + 1 ); + } + return aTxt; +} + +// ----------------------------------------------------------------------- + +void SvxHyphenWordDialog::InitControls_Impl() +{ + String aTxt; + xPossHyph = NULL; + if (xHyphenator.is()) + { + lang::Locale aLocale( SvxCreateLocale(nActLanguage) ); + xPossHyph = xHyphenator->createPossibleHyphens( aActWord, aLocale, + Sequence< PropertyValue >() ); + if (xPossHyph.is()) + { + aTxt = EraseUnusableHyphens_Impl( xPossHyph, nMaxHyphenationPos ); + } + SetLabel_Impl( nActLanguage ); + } + aWordEdit.SetText( aTxt ); + + nOldPos = aTxt.Len(); + SelLeft(); + EnableLRBtn_Impl(); +} + +// ----------------------------------------------------------------------- + +void SvxHyphenWordDialog::ContinueHyph_Impl( sal_uInt16 nInsPos ) +{ + if ( nInsPos != CONTINUE_HYPH && xPossHyph.is()) + { + if (nInsPos) + { + //String aTmp( U2S( xPossHyph->getPossibleHyphens() ) ); + String aTmp( aWordEdit.GetText() ); + DBG_ASSERT(nInsPos <= aTmp.Len() - 2, "wrong hyphen position"); + + sal_uInt16 nIdxPos = 0; + sal_uInt16 i = 0; + sal_Unicode c; + while (i < aTmp.Len() && HYPHHERE != (c = aTmp.GetChar(i++)) ) + { + if (SW_SOFT_HYPHEN == c) + nIdxPos++; + } + + Sequence< sal_Int16 > aSeq = xPossHyph->getHyphenationPositions(); + sal_Int32 nLen = aSeq.getLength(); + DBG_ASSERT(nLen, "empty sequence"); + DBG_ASSERT(nIdxPos < nLen, "index out of range"); + if (nLen && nIdxPos < nLen) + { + nInsPos = aSeq.getConstArray()[ nIdxPos ]; + pHyphWrapper->InsertHyphen( nInsPos ); + } + } + else + { + //! calling with 0 as argument will remove hyphens! + pHyphWrapper->InsertHyphen( nInsPos ); + } + } + + if ( pHyphWrapper->FindSpellError() ) + { + Reference< XHyphenatedWord > xHyphWord( pHyphWrapper->GetLast(), UNO_QUERY ); + + // adapt actual word and language to new found hyphenation result + if(xHyphWord.is()) + { + aActWord = String( xHyphWord->getWord() ); + nActLanguage = SvxLocaleToLanguage( xHyphWord->getLocale() ); + nMaxHyphenationPos = xHyphWord->getHyphenationPos(); + InitControls_Impl(); + } + } + else + EndDialog( RET_OK ); +} + +// ----------------------------------------------------------------------- + +sal_uInt16 SvxHyphenWordDialog::GetHyphIndex_Impl() +{ + sal_uInt16 nPos = 0; + String aTxt(aWordEdit.GetText()); + + for ( sal_uInt16 i=0 ; i < aTxt.Len(); ++i ) + { + sal_Unicode nChar = aTxt.GetChar( i ); + + if ( nChar == HYPHHERE ) + break; + + if ( nChar != SW_SOFT_HYPHEN ) + nPos++; + } + return nPos; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxHyphenWordDialog, CutHdl_Impl, Button *, EMPTYARG ) +{ + if( !bBusy ) + { + bBusy = sal_True; + ContinueHyph_Impl( nHyphPos ); + bBusy = sal_False; + } + return 0; +} +IMPL_LINK_INLINE_END( SvxHyphenWordDialog, CutHdl_Impl, Button *, EMPTYARG ) + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxHyphenWordDialog, DeleteHdl_Impl, Button *, EMPTYARG ) +{ + if( !bBusy ) + { + bBusy = sal_True; + ContinueHyph_Impl(); + bBusy = sal_False; + } + return 0; +} +IMPL_LINK_INLINE_END( SvxHyphenWordDialog, DeleteHdl_Impl, Button *, EMPTYARG ) + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxHyphenWordDialog, ContinueHdl_Impl, Button *, EMPTYARG ) +{ + if( !bBusy ) + { + bBusy = sal_True; + ContinueHyph_Impl( CONTINUE_HYPH ); + bBusy = sal_False; + } + return 0; +} +IMPL_LINK_INLINE_END( SvxHyphenWordDialog, ContinueHdl_Impl, Button *, EMPTYARG ) + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxHyphenWordDialog, CancelHdl_Impl, Button *, EMPTYARG ) +{ + if( !bBusy ) + { + bBusy = sal_True; + pHyphWrapper->SpellEnd(); + EndDialog( RET_CANCEL ); + bBusy = sal_False; + } + return 0; +} +IMPL_LINK_INLINE_END( SvxHyphenWordDialog, CancelHdl_Impl, Button *, EMPTYARG ) + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxHyphenWordDialog, Left_Impl, Button *, EMPTYARG ) +{ + if( !bBusy ) + { + bBusy = sal_True; + SelLeft(); + bBusy = sal_False; + } + return 0; +} +IMPL_LINK_INLINE_END( SvxHyphenWordDialog, Left_Impl, Button *, EMPTYARG ) + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxHyphenWordDialog, Right_Impl, Button *, EMPTYARG ) +{ + if( !bBusy ) + { + bBusy = sal_True; + SelRight(); + bBusy = sal_False; + } + return 0; +} +IMPL_LINK_INLINE_END( SvxHyphenWordDialog, Right_Impl, Button *, EMPTYARG ) + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxHyphenWordDialog, GetFocusHdl_Impl, Edit *, EMPTYARG ) +{ + aWordEdit.SetSelection( Selection( nOldPos, nOldPos + 1 ) ); + return 0; +} +IMPL_LINK_INLINE_END( SvxHyphenWordDialog, GetFocusHdl_Impl, Edit *, EMPTYARG ) + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxHyphenWordDialog, LangError_Impl, void *, nLang ) +{ + // Status anzeigen + String aErr( SvtLanguageTable::GetLanguageString( (LanguageType)(sal_IntPtr)nLang ) ); + aErr += CUI_RESSTR( RID_SVXSTR_HMERR_CHECKINSTALL ); + InfoBox( this, aErr ).Execute(); + return 0; +} + + diff --git a/cui/source/dialogs/hyphen.hrc b/cui/source/dialogs/hyphen.hrc new file mode 100644 index 000000000000..a87b7b6588b8 --- /dev/null +++ b/cui/source/dialogs/hyphen.hrc @@ -0,0 +1,48 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: hyphen.hrc,v $ + * $Revision: 1.4 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _SVX_HYPHEN_HRC +#define _SVX_HYPHEN_HRC + +// defines ------------------------------------------------------------------ + +#define ED_WORD 10 +#define BTN_LEFT 11 +#define BTN_RIGHT 12 +#define FT_WORD 13 + +#define BTN_HYPH_CONTINUE 20 +#define BTN_HYPH_DELETE 21 +#define BTN_HYPH_CUT 22 +#define BTN_HYPH_CANCEL 23 +#define BTN_HYPH_HELP 24 + + +#endif + diff --git a/cui/source/dialogs/hyphen.src b/cui/source/dialogs/hyphen.src new file mode 100644 index 000000000000..230bdedaa22f --- /dev/null +++ b/cui/source/dialogs/hyphen.src @@ -0,0 +1,146 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: hyphen.src,v $ + * $Revision: 1.24 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + // include --------------------------------------------------------------- +#include "helpid.hrc" +#include "cuires.hrc" +#include "hyphen.hrc" + +String RID_SVXSTR_HMERR_CHECKINSTALL +{ + /* ### ACHTUNG: Neuer Text in Resource? ist für die Prüfung nicht verfügbar. \nÃœberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache : ist f³r die Pr³fung nicht verf³gbar. \nšberpr³fen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gew³nschte Sprache */ + /* ### ACHTUNG: Neuer Text in Resource? ist für die Prüfung nicht verfügbar. \nÃœberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache : ist f³r die Pr³fung nicht verf³gbar. \nšberpr³fen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gew³nschte Sprache */ + Text [ en-US ] = "is not available for spellchecking\nPlease check your installation and install the desired language\n" ; +}; + + // RID_SVXDLG_HYPHENATE -------------------------------------------------- +ModalDialog RID_SVXDLG_HYPHENATE +{ + HelpId = HID_HYPHENATE ; + Size = MAP_APPFONT ( 188 , 100 ) ; + OutputSize = TRUE ; + SvLook = TRUE ; + Text [ en-US ] = "Hyphenation" ; + Moveable = TRUE ; + Edit ED_WORD + { + BORDER = TRUE ; + Pos = MAP_APPFONT ( 6 , 17 ) ; + Size = MAP_APPFONT ( 120 , 12 ) ; + TABSTOP = TRUE ; + LEFT = TRUE ; + }; + ImageButton BTN_LEFT + { + Pos = MAP_APPFONT ( 6 , 33 ) ; + Size = MAP_APPFONT ( 14 , 14 ) ; + TABSTOP = TRUE ; + SYMBOL = IMAGEBUTTON_ARROW_LEFT ; + }; + ImageButton BTN_RIGHT + { + Pos = MAP_APPFONT ( 22 , 33 ) ; + Size = MAP_APPFONT ( 14 , 14 ) ; + TABSTOP = TRUE ; + Symbol = IMAGEBUTTON_ARROW_RIGHT ; + }; + FixedText FT_WORD + { + Pos = MAP_APPFONT ( 6 , 6 ) ; + Size = MAP_APPFONT ( 120 , 8 ) ; + Text [ en-US ] = "~Word" ; + }; + PushButton BTN_HYPH_CONTINUE + { + Pos = MAP_APPFONT ( 132 , 43 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text [ en-US ] = "~Next" ; + TABSTOP = TRUE ; + }; + PushButton BTN_HYPH_DELETE + { + Pos = MAP_APPFONT ( 132 , 60 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text [ en-US ] = "~Remove" ; + TABSTOP = TRUE ; + }; + OKButton BTN_HYPH_CUT + { + Pos = MAP_APPFONT ( 132 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text [ en-US ] = "~Hyphenate" ; + TABSTOP = TRUE ; + DEFBUTTON = TRUE ; + }; + CancelButton BTN_HYPH_CANCEL + { + Pos = MAP_APPFONT ( 132 , 23 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TABSTOP = TRUE ; + }; + HelpButton BTN_HYPH_HELP + { + Pos = MAP_APPFONT ( 132 , 80 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TABSTOP = TRUE ; + }; +}; + // ******************************************************************* EOF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cui/source/dialogs/makefile.mk b/cui/source/dialogs/makefile.mk index f7d597a219a1..43cf1c18c0f8 100755 --- a/cui/source/dialogs/makefile.mk +++ b/cui/source/dialogs/makefile.mk @@ -54,6 +54,7 @@ SRC1FILES = \ gallery.src \ grfflt.src \ hangulhanjadlg.src \ + hyphen.src \ hlmarkwn.src \ hyperdlg.src \ iconcdlg.src \ @@ -69,6 +70,7 @@ SRC1FILES = \ srchxtra.src \ svuidlg.src \ tbxform.src \ + thesdlg.src \ zoom.src \ @@ -89,6 +91,7 @@ SLOFILES+=\ $(SLO)$/hlmailtp.obj \ $(SLO)$/hlmarkwn.obj \ $(SLO)$/hltpbase.obj \ + $(SLO)$/hyphen.obj \ $(SLO)$/iconcdlg.obj \ $(SLO)$/insdlg.obj \ $(SLO)$/insrc.obj \ @@ -106,6 +109,7 @@ SLOFILES+=\ $(SLO)$/SpellDialog.obj \ $(SLO)$/splitcelldlg.obj \ $(SLO)$/srchxtra.obj \ + $(SLO)$/thesdlg.obj \ $(SLO)$/zoom.obj \ diff --git a/cui/source/dialogs/thesdlg.cxx b/cui/source/dialogs/thesdlg.cxx new file mode 100644 index 000000000000..5cd53e5521c6 --- /dev/null +++ b/cui/source/dialogs/thesdlg.cxx @@ -0,0 +1,494 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: thesdlg.cxx,v $ + * $Revision: 1.21 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_cui.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cuires.hrc" +#include "thesdlg.hrc" +#include +#include +#include +#include "dialmgr.hxx" +#include + +using namespace ::com::sun::star; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::linguistic2; + +#undef S2U +#undef U2S +//#define S2U(s) StringToOUString(s, CHARSET_SYSTEM) +//#define U2S(s) OUStringToString(s, CHARSET_SYSTEM) + + +// GetReplaceEditString ------------------------------- + +static void GetReplaceEditString( String &rText ) +{ + // The strings returned by the thesaurus saometimes have some + // explanation text put in between '(' and ')' or a trailing '*'. + // These parts should not be put in the ReplaceEdit Text that may get + // inserted into the document. Thus we strip them from the text. + + xub_StrLen nPos = rText.Search( sal_Unicode('(') ); + while (STRING_NOTFOUND != nPos) + { + xub_StrLen nEnd = rText.Search( sal_Unicode(')'), nPos ); + if (STRING_NOTFOUND != nEnd) + rText.Erase( nPos, nEnd-nPos+1 ); + else + break; + nPos = rText.Search( sal_Unicode('(') ); + } + + nPos = rText.Search( sal_Unicode('*') ); + if (STRING_NOTFOUND != nPos) + rText.Erase( nPos ); + + // remove any possible remaining ' ' that may confuse the thesaurus + // when it gets called with the text + rText.EraseLeadingAndTrailingChars( sal_Unicode(' ') ); +} + +// struct ThesDlg_Impl --------------------------------------------------- + +struct ThesDlg_Impl +{ + Reference< XThesaurus > xThesaurus; + ::rtl::OUString aLookUpText; + sal_Int16 nLookUpLanguage; + + ThesDlg_Impl( Reference< XThesaurus > & xThes ); + SfxErrorContext* pErrContext; // ErrorContext, + // w"ahrend der Dialog oben ist +}; + +ThesDlg_Impl::ThesDlg_Impl(Reference< XThesaurus > & xThes) : + xThesaurus (xThes) +{ + pErrContext = NULL; + nLookUpLanguage = LANGUAGE_NONE; +} + + +// class SvxThesaurusLanguageDlg_Impl ------------------------------------ + +class SvxThesaurusLanguageDlg_Impl : public ModalDialog +{ +private: + SvxLanguageBox aLangLB; + FixedLine aLangFL; + OKButton aOKBtn; + CancelButton aCancelBtn; + HelpButton aHelpBtn; + + DECL_LINK( DoubleClickHdl_Impl, ListBox * ); + +public: + SvxThesaurusLanguageDlg_Impl( Window* pParent ); + + sal_uInt16 GetLanguage() const; + void SetLanguage( sal_uInt16 nLang ); +}; + +// ----------------------------------------------------------------------- + + +SvxThesaurusLanguageDlg_Impl::SvxThesaurusLanguageDlg_Impl( Window* pParent ) : + + ModalDialog( pParent, CUI_RES( RID_SVXDLG_THES_LANGUAGE ) ), + + aLangLB ( this, CUI_RES( LB_THES_LANGUAGE ) ), + aLangFL ( this, CUI_RES( FL_THES_LANGUAGE ) ), + aOKBtn ( this, CUI_RES( BTN_LANG_OK ) ), + aCancelBtn ( this, CUI_RES( BTN_LANG_CANCEL ) ), + aHelpBtn ( this, CUI_RES( BTN_LANG_HELP ) ) +{ + FreeResource(); + + aLangLB.SetLanguageList( LANG_LIST_THES_USED, FALSE, FALSE ); + aLangLB.SetDoubleClickHdl( + LINK( this, SvxThesaurusLanguageDlg_Impl, DoubleClickHdl_Impl ) ); +} + + +// ----------------------------------------------------------------------- + +sal_uInt16 SvxThesaurusLanguageDlg_Impl::GetLanguage() const +{ + sal_uInt16 nLang = aLangLB.GetSelectLanguage(); + return nLang; +} + +// ----------------------------------------------------------------------- + +void SvxThesaurusLanguageDlg_Impl::SetLanguage( sal_uInt16 nLang ) +{ + aLangLB.SelectLanguage( nLang ); +} + +// ----------------------------------------------------------------------- + +IMPL_LINK_INLINE_START( SvxThesaurusLanguageDlg_Impl, DoubleClickHdl_Impl, ListBox *, EMPTYARG ) +{ + EndDialog( RET_OK ); + return 0; +} +IMPL_LINK_INLINE_END( SvxThesaurusLanguageDlg_Impl, DoubleClickHdl_Impl, ListBox *, EMPTYARG ) + +// class SvxThesaurusDialog ---------------------------------------------- + + +// ----------------------------------------------------------------------- + + +SvxThesaurusDialog::SvxThesaurusDialog( Window* pParent, Reference< XThesaurus > xThes, + const String &rWord, sal_Int16 nLanguage) : + + SvxStandardDialog( pParent, CUI_RES( RID_SVXDLG_THESAURUS ) ), + + aWordText ( this, CUI_RES( FT_WORD ) ), + aWordLB ( this, CUI_RES( LB_WORD ) ), + aReplaceText( this, CUI_RES( FT_REPL ) ), + aReplaceEdit( this, CUI_RES( ED_REPL ) ), + aMeanText ( this, CUI_RES( FT_MEAN ) ), + aMeanLB ( this, CUI_RES( LB_MEAN ) ), + aSynonymText( this, CUI_RES( FT_SYNON ) ), + aSynonymLB ( this, CUI_RES( LB_SYNON ) ), + aVarFL ( this, CUI_RES( FL_VAR ) ), + aOkBtn ( this, CUI_RES( BTN_THES_OK ) ), + aCancelBtn ( this, CUI_RES( BTN_THES_CANCEL ) ), + aLookUpBtn ( this, CUI_RES( BTN_LOOKUP ) ), + aLangBtn ( this, CUI_RES( BTN_LANGUAGE ) ), + aHelpBtn ( this, CUI_RES( BTN_THES_HELP ) ), + aErrStr ( CUI_RES( STR_ERR_WORDNOTFOUND ) ) +{ + pImpl = new ThesDlg_Impl( xThes ); + pImpl->aLookUpText = ::rtl::OUString( rWord ); + pImpl->nLookUpLanguage = nLanguage; + pImpl->pErrContext = + new SfxErrorContext( ERRCTX_SVX_LINGU_THESAURUS, String(), this, + RID_SVXERRCTX, &DIALOG_MGR() ); + + aLangBtn.SetClickHdl( LINK( this, SvxThesaurusDialog, LanguageHdl_Impl ) ); + aLookUpBtn.SetClickHdl( LINK( this, SvxThesaurusDialog, LookUpHdl_Impl ) ); + aMeanLB.SetSelectHdl( LINK( this, SvxThesaurusDialog, EntryHdl_Impl ) ); + aSynonymLB.SetSelectHdl( LINK( this, SvxThesaurusDialog, SynonymHdl_Impl ) ); + Link aLink = LINK( this, SvxThesaurusDialog, SelectHdl_Impl ); + aMeanLB.SetDoubleClickHdl( aLink ); + aSynonymLB.SetDoubleClickHdl( aLink ); + aWordLB.SetSelectHdl( aLink ); + + FreeResource(); + + ::rtl::OUString aTmp( rWord ); + linguistic::RemoveHyphens( aTmp ); + linguistic::ReplaceControlChars( aTmp ); + aReplaceEdit.SetText( aTmp ); + aWordLB.InsertEntry( aTmp ); + aWordLB.SelectEntry( aTmp ); + + Init_Impl( nLanguage ); + + // disable controls if service is missing + if (!pImpl->xThesaurus.is()) + Enable( sal_False ); +} + + +// ----------------------------------------------------------------------- + +SvxThesaurusDialog::~SvxThesaurusDialog() +{ + delete pImpl->pErrContext; + delete pImpl; +} + +// ----------------------------------------------------------------------- + +uno::Sequence< Reference< XMeaning > > SAL_CALL + SvxThesaurusDialog::queryMeanings_Impl( + ::rtl::OUString& rTerm, + const Locale& rLocale, + const beans::PropertyValues& rProperties ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + uno::Sequence< Reference< XMeaning > > aMeanings( + pImpl->xThesaurus->queryMeanings( rTerm, rLocale, rProperties ) ); + + // text with '.' at the end? + if (0 == aMeanings.getLength() && rTerm.getLength() && + rTerm.getStr()[ rTerm.getLength() - 1 ] == '.') + { + // try again without trailing '.' chars. It may be a word at the + // end of a sentence and not an abbreviation... + String aTxt( rTerm ); + aTxt.EraseTrailingChars( '.' ); + aMeanings = pImpl->xThesaurus->queryMeanings( aTxt, rLocale, rProperties ); + if (aMeanings.getLength()) + { + rTerm = aTxt; + } + } + + return aMeanings; +} + +// ----------------------------------------------------------------------- + +sal_uInt16 SvxThesaurusDialog::GetLanguage() const +{ + return pImpl->nLookUpLanguage; +} + +// ----------------------------------------------------------------------- + +void SvxThesaurusDialog::UpdateMeaningBox_Impl( uno::Sequence< Reference< XMeaning > > *pMeaningSeq ) +{ + // create temporary meaning list if not supplied from somewhere else + sal_Bool bTmpSeq = sal_False; + if (!pMeaningSeq && pImpl->xThesaurus.is()) + { + bTmpSeq = sal_True; + lang::Locale aLocale( SvxCreateLocale( pImpl->nLookUpLanguage ) ); + uno::Sequence< Reference< XMeaning > > aTmpMean = queryMeanings_Impl( + pImpl->aLookUpText, aLocale, Sequence< PropertyValue >() ); + + pMeaningSeq = new Sequence< Reference< XMeaning > > ( aTmpMean ); + + // set new replace edit text if a different look up text was used + // see: queryMeanings_Impl + aReplaceEdit.SetText( pImpl->aLookUpText ); + } + + sal_Int32 nMeaningCount = pMeaningSeq ? pMeaningSeq->getLength() : 0; + const Reference< XMeaning > *pMeaning = pMeaningSeq ? pMeaningSeq->getConstArray() : NULL; + aMeanLB.Clear(); + for ( sal_Int32 i = 0; i < nMeaningCount; ++i ) + aMeanLB.InsertEntry( pMeaning[i]->getMeaning() ); + + // remove temporary meaning list + if (bTmpSeq) + delete pMeaningSeq; + + if (aMeanLB.GetEntryCount() > 0) + aMeanLB.SelectEntryPos(0); + UpdateSynonymBox_Impl(); +} + + +// ----------------------------------------------------------------------- +void SvxThesaurusDialog::UpdateSynonymBox_Impl() +{ + + aSynonymLB.Clear(); + + sal_uInt16 nPos = aMeanLB.GetSelectEntryPos(); // active meaning pos + if (nPos != LISTBOX_ENTRY_NOTFOUND && pImpl->xThesaurus.is()) + { + // get Reference< XMeaning > for selected meaning + lang::Locale aLocale( SvxCreateLocale( pImpl->nLookUpLanguage ) ); + Reference< XMeaning > xMeaning = queryMeanings_Impl( + pImpl->aLookUpText, aLocale, Sequence< PropertyValue >() ) + .getConstArray()[ nPos ]; + + uno::Sequence< ::rtl::OUString > aSynonyms; + if (xMeaning.is()) + aSynonyms = xMeaning->querySynonyms(); + + sal_Int32 nSynonymCount = aSynonyms.getLength(); + const ::rtl::OUString *pSynonym = aSynonyms.getConstArray(); + for ( sal_Int32 i=0; i < nSynonymCount; ++i ) + aSynonymLB.InsertEntry( pSynonym[i] ); + } + +} + +// ----------------------------------------------------------------------- + +void SvxThesaurusDialog::Apply() +{ +} + +// ----------------------------------------------------------------------- +void SvxThesaurusDialog::Init_Impl(sal_Int16 nLanguage) +{ + // Sprache anpassen + String aStr( GetText() ); + aStr.Erase( aStr.Search( sal_Unicode( '(' ) ) - 1 ); + aStr.Append( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( " (" ) ) ); + //aStr += GetLanguageString( (LanguageType)pImpl->pThesaurus->GetLanguage() ); + aStr += SvtLanguageTable::GetLanguageString( (LanguageType) nLanguage ); + aStr.Append( sal_Unicode( ')' ) ); + SetText( aStr ); // Text der Window-Leiste setzen (Wort + Sprache) + + // adapt meanings according to (new) language + UpdateMeaningBox_Impl(); +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxThesaurusDialog, LookUpHdl_Impl, Button *, pBtn ) +{ + + EnterWait(); + + String aText( aReplaceEdit.GetText() ); + + ::rtl::OUString aOldLookUpText = pImpl->aLookUpText; + pImpl->aLookUpText = ::rtl::OUString( aText ); + + uno::Sequence< Reference< XMeaning > > aMeanings; + if (pImpl->xThesaurus.is()) + aMeanings = queryMeanings_Impl( + pImpl->aLookUpText, + SvxCreateLocale( pImpl->nLookUpLanguage ), + Sequence< PropertyValue >() ); + + LeaveWait(); + if ( aMeanings.getLength() == 0 ) + { + if( pBtn == &aCancelBtn ) // called via double click + { + pImpl->aLookUpText = aOldLookUpText; + } + else + { + UpdateMeaningBox_Impl( &aMeanings ); + if( pBtn == &aLookUpBtn ) + InfoBox( this, aErrStr ).Execute(); + } + return 0; + } + + UpdateMeaningBox_Impl( &aMeanings ); + + if ( aWordLB.GetEntryPos( aText ) == LISTBOX_ENTRY_NOTFOUND ) + aWordLB.InsertEntry( aText ); + + aWordLB.SelectEntry( aText ); + aMeanLB.SelectEntryPos( 0 ); + + String aStr( aMeanLB.GetSelectEntry() ); + GetReplaceEditString( aStr ); + aReplaceEdit.SetText( aStr ); + aSynonymLB.SetNoSelection(); + + return 0; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxThesaurusDialog, LanguageHdl_Impl, Button *, EMPTYARG ) +{ + if (!pImpl->xThesaurus.is()) + return 0; + + SvxThesaurusLanguageDlg_Impl aDlg( this ); + sal_uInt16 nLang = pImpl->nLookUpLanguage; + aDlg.SetLanguage( nLang ); + + if ( aDlg.Execute() == RET_OK ) + { + nLang = aDlg.GetLanguage(); + if (pImpl->xThesaurus->hasLocale( SvxCreateLocale( nLang ) )) + pImpl->nLookUpLanguage = nLang; + UpdateMeaningBox_Impl(); + Init_Impl( nLang ); + } + + return 0; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxThesaurusDialog, SynonymHdl_Impl, ListBox *, EMPTYARG ) +{ + if ( aSynonymLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ) + { + String aStr( aSynonymLB.GetSelectEntry() ); + GetReplaceEditString( aStr ); + aReplaceEdit.SetText( aStr ); + } + return 0; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxThesaurusDialog, SelectHdl_Impl, ListBox *, pBox ) +{ + String aStr( pBox->GetSelectEntry() ); + GetReplaceEditString( aStr ); + aReplaceEdit.SetText( aStr ); + + //! 'aCancelBtn' is used to indicate that the handler is called as result + //! of a double click action. + LookUpHdl_Impl( &aCancelBtn /* ??? &aLookUpBtn */ ); + + return 0; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxThesaurusDialog, EntryHdl_Impl, ListBox *, EMPTYARG ) +{ + + UpdateSynonymBox_Impl(); + + return 0; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxThesaurusDialog, SpellErrorHdl_Impl, void *, pError ) +{ + // Der "ubergebene Pointer pError ist die falsche Sprachen-Nummer + LanguageType eLang = (LanguageType)(sal_uIntPtr)pError; + String aErr( SvtLanguageTable::GetLanguageString( eLang ) ); + // Fehlermeldung ausgeben + ErrorHandler::HandleError( + *new StringErrorInfo( ERRCODE_SVX_LINGU_LANGUAGENOTEXISTS, aErr ) ); + return 0; +} + diff --git a/cui/source/dialogs/thesdlg.hrc b/cui/source/dialogs/thesdlg.hrc new file mode 100644 index 000000000000..4292de929236 --- /dev/null +++ b/cui/source/dialogs/thesdlg.hrc @@ -0,0 +1,62 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: thesdlg.hrc,v $ + * $Revision: 1.4 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _SVX_THESDLG_HRC +#define _SVX_THESDLG_HRC + +// defines --------------------------------------------------------------- + +#define BTN_THES_OK 10 +#define BTN_THES_CANCEL 11 +#define BTN_LANGUAGE 12 +#define BTN_THES_HELP 13 +#define BTN_LOOKUP 14 +#define FT_WORD 15 +#define LB_WORD 16 +#define FT_MEAN 17 +#define LB_MEAN 18 +#define FT_SYNON 19 +#define LB_SYNON 20 +#define FT_REPL 21 +#define ED_REPL 22 +#define FL_VAR 23 + +#define STR_ERR_WORDNOTFOUND 30 + +// LanguageDialog -------------------------------------------------------- + +#define LB_THES_LANGUAGE 10 +#define FL_THES_LANGUAGE 11 +#define BTN_LANG_OK 12 +#define BTN_LANG_CANCEL 12 +#define BTN_LANG_HELP 13 + + +#endif + diff --git a/cui/source/dialogs/thesdlg.src b/cui/source/dialogs/thesdlg.src new file mode 100644 index 000000000000..5e13fad9da49 --- /dev/null +++ b/cui/source/dialogs/thesdlg.src @@ -0,0 +1,211 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: thesdlg.src,v $ + * $Revision: 1.23 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + // include --------------------------------------------------------------- +#include "cuires.hrc" +#include "thesdlg.hrc" +#include "helpid.hrc" +#include // SID_THESAURUS + +// pragma ---------------------------------------------------------------- + + // RID_SVXDLG_THES ------------------------------------------------------- +ModalDialog RID_SVXDLG_THESAURUS +{ + HelpId = SID_THESAURUS ; + OutputSize = TRUE ; + Size = MAP_APPFONT ( 285 , 116 ) ; + Text [ en-US ] = "Thesaurus" ; + Moveable = TRUE ; + SvLook = TRUE ; + OkButton BTN_THES_OK + { + Pos = MAP_APPFONT ( 219 , 6 ) ; + Size = MAP_APPFONT ( 60 , 14 ) ; + DefButton = TRUE ; + }; + CancelButton BTN_THES_CANCEL + { + Pos = MAP_APPFONT ( 219 , 23 ) ; + Size = MAP_APPFONT ( 60 , 14 ) ; + }; + PushButton BTN_LOOKUP + { + Pos = MAP_APPFONT ( 219 , 40 ) ; + Size = MAP_APPFONT ( 60 , 14 ) ; + Text [ en-US ] = "~Search" ; + }; + PushButton BTN_LANGUAGE + { + Pos = MAP_APPFONT ( 219 , 57 ) ; + Size = MAP_APPFONT ( 60 , 14 ) ; + Text [ en-US ] = "~Language..." ; + }; + HelpButton BTN_THES_HELP + { + Pos = MAP_APPFONT ( 219 , 77 ) ; + Size = MAP_APPFONT ( 60 , 14 ) ; + }; + FixedText FT_WORD + { + Pos = MAP_APPFONT ( 12 , 14 ) ; + Size = MAP_APPFONT ( 96 , 8 ) ; + Text [ en-US ] = "~Word" ; + LEFT = TRUE ; + }; + ListBox LB_WORD + { + DropDown = TRUE ; + Pos = MAP_APPFONT ( 12 , 25 ) ; + Size = MAP_APPFONT ( 96 , 65 ) ; + }; + FixedText FT_MEAN + { + Pos = MAP_APPFONT ( 12 , 43 ) ; + Size = MAP_APPFONT ( 96 , 8 ) ; + Text [ en-US ] = "~Meaning " ; + LEFT = TRUE ; + }; + ListBox LB_MEAN + { + BORDER = TRUE ; + Pos = MAP_APPFONT ( 12 , 55 ) ; + Size = MAP_APPFONT ( 96 , 50 ) ; + AutoHScroll = TRUE ; + }; + FixedText FT_SYNON + { + Pos = MAP_APPFONT ( 111 , 43 ) ; + Size = MAP_APPFONT ( 96 , 8 ) ; + Text [ en-US ] = "Sy~nonym" ; + LEFT = TRUE ; + }; + ListBox LB_SYNON + { + BORDER = TRUE ; + Pos = MAP_APPFONT ( 111 , 55 ) ; + Size = MAP_APPFONT ( 96 , 50 ) ; + AutoHScroll = TRUE ; + }; + FixedText FT_REPL + { + Pos = MAP_APPFONT ( 111 , 14 ) ; + Size = MAP_APPFONT ( 96 , 8 ) ; + Text [ en-US ] = "~Replace" ; + LEFT = TRUE ; + }; + Edit ED_REPL + { + BORDER = TRUE ; + Pos = MAP_APPFONT ( 111 , 25 ) ; + Size = MAP_APPFONT ( 96 , 12 ) ; + LEFT = TRUE ; + }; + FixedLine FL_VAR + { + Pos = MAP_APPFONT ( 6 , 3 ) ; + Size = MAP_APPFONT ( 207 , 8 ) ; + Text [ en-US ] = "Variations" ; + }; + String STR_ERR_WORDNOTFOUND + { + Text [ en-US ] = "Word not found in thesaurus" ; + }; +}; + // RID_SVXDLG_THES_LANGUAGE ---------------------------------------------- +ModalDialog RID_SVXDLG_THES_LANGUAGE +{ + HelpId = HID_THES_LANGUAGE ; + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 170 , 86 ) ; + /* ### ACHTUNG: Neuer Text in Resource? Sprache auswählen : Sprache auswõhlen */ + /* ### ACHTUNG: Neuer Text in Resource? Sprache auswählen : Sprache auswõhlen */ + Text [ en-US ] = "Select Language" ; + Moveable = TRUE ; + ListBox LB_THES_LANGUAGE + { + Border = TRUE ; + Pos = MAP_APPFONT ( 12 , 14 ) ; + Size = MAP_APPFONT ( 90 , 60 ) ; + Sort = TRUE ; + }; + FixedLine FL_THES_LANGUAGE + { + Pos = MAP_APPFONT ( 6 , 3 ) ; + Size = MAP_APPFONT ( 102 , 8 ) ; + Text [ en-US ] = "Selection" ; + }; + OKButton BTN_LANG_OK + { + Pos = MAP_APPFONT ( 114 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + DefButton = TRUE ; + }; + CancelButton BTN_LANG_CANCEL + { + Pos = MAP_APPFONT ( 114 , 23 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + }; + HelpButton BTN_LANG_HELP + { + Pos = MAP_APPFONT ( 114 , 43 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + }; +}; + // ********************************************************************** EOF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx index 10095922f523..d781333f9d47 100644 --- a/cui/source/factory/dlgfact.cxx +++ b/cui/source/factory/dlgfact.cxx @@ -103,6 +103,8 @@ #include "macroass.hxx" #include "acccfg.hxx" #include "insrc.hxx" +#include "hyphen.hxx" +#include "thesdlg.hxx" using namespace ::com::sun::star; using namespace ::com::sun::star::frame; @@ -119,6 +121,8 @@ IMPL_ABSTDLG_BASE(AbstractTabDialog_Impl); IMPL_ABSTDLG_BASE(AbstractSvxDistributeDialog_Impl); IMPL_ABSTDLG_BASE(AbstractHangulHanjaConversionDialog_Impl); IMPL_ABSTDLG_BASE(AbstractFmShowColsDialog_Impl); +IMPL_ABSTDLG_BASE(AbstractHyphenWordDialog_Impl) +IMPL_ABSTDLG_BASE(AbstractThesaurusDialog_Impl) AbstractSvxZoomDialog_Impl::~AbstractSvxZoomDialog_Impl() \ { @@ -356,6 +360,36 @@ String AbstractHangulHanjaConversionDialog_Impl::GetCurrentSuggestion( ) const return pDlg->GetCurrentSuggestion(); } +String AbstractThesaurusDialog_Impl::GetWord() +{ + return pDlg->GetWord(); +}; + +sal_uInt16 AbstractThesaurusDialog_Impl::GetLanguage() const +{ + return pDlg->GetLanguage(); +}; + +Window* AbstractThesaurusDialog_Impl::GetWindow() +{ + return pDlg; +} + +void AbstractHyphenWordDialog_Impl::SelLeft() +{ + pDlg->SelLeft(); +} + +void AbstractHyphenWordDialog_Impl::SelRight() +{ + pDlg->SelRight(); +} + +Window* AbstractHyphenWordDialog_Impl::GetWindow() +{ + return pDlg; +} + Reference < com::sun::star::embed::XEmbeddedObject > AbstractInsertObjectDialog_Impl::GetObject() { return pDlg->GetObject(); @@ -1107,6 +1141,23 @@ AbstractHangulHanjaConversionDialog* AbstractDialogFactory_Impl::CreateHangulHan return new AbstractHangulHanjaConversionDialog_Impl( pDlg ); } +AbstractThesaurusDialog* AbstractDialogFactory_Impl::CreateThesaurusDialog( Window* pParent, + ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XThesaurus > xThesaurus, + const String &rWord, sal_Int16 nLanguage ) +{ + SvxThesaurusDialog* pDlg = new SvxThesaurusDialog( pParent, xThesaurus, rWord, nLanguage ); + return new AbstractThesaurusDialog_Impl( pDlg ); +} + +AbstractHyphenWordDialog* AbstractDialogFactory_Impl::CreateHyphenWordDialog( Window* pParent, + const String &rWord, LanguageType nLang, + ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XHyphenator > &xHyphen, + SvxSpellWrapper* pWrapper ) +{ + SvxHyphenWordDialog* pDlg = new SvxHyphenWordDialog( rWord, nLang, pParent, xHyphen, pWrapper ); + return new AbstractHyphenWordDialog_Impl( pDlg ); +} + AbstractFmShowColsDialog * AbstractDialogFactory_Impl::CreateFmShowColsDialog( Window* pParent ) { FmShowColsDialog* pDlg = new FmShowColsDialog( pParent); diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx index eb3c7b932597..5773cb8292dd 100644 --- a/cui/source/factory/dlgfact.hxx +++ b/cui/source/factory/dlgfact.hxx @@ -66,6 +66,8 @@ class SvPasteObjectDialog; class SvBaseLinksDlg; class SvxTransformTabDialog; class SvxCaptionTabDialog; +class SvxThesaurusDialog; +class SvxHyphenWordDialog; namespace svx{ class HangulHanjaConversionDialog; @@ -184,7 +186,22 @@ class AbstractHangulHanjaConversionDialog_Impl: public AbstractHangulHanjaConver virtual String GetCurrentSuggestion( ) const; }; -// for HangulHanjaConversionDialog end +class AbstractThesaurusDialog_Impl : public AbstractThesaurusDialog +{ + DECL_ABSTDLG_BASE(AbstractThesaurusDialog_Impl,SvxThesaurusDialog) + virtual String GetWord(); + virtual sal_uInt16 GetLanguage() const; + virtual Window* GetWindow(); +}; + + +class AbstractHyphenWordDialog_Impl: public AbstractHyphenWordDialog +{ + DECL_ABSTDLG_BASE(AbstractHyphenWordDialog_Impl,SvxHyphenWordDialog) + virtual void SelLeft(); + virtual void SelRight(); + virtual Window* GetWindow(); +}; // for FmShowColsDialog begin class FmShowColsDialog; @@ -633,6 +650,13 @@ public: virtual AbstractHangulHanjaConversionDialog * CreateHangulHanjaConversionDialog( Window* _pParent, //add for HangulHanjaConversionDialog CHINA001 HangulHanjaConversion::ConversionDirection _ePrimaryDirection ); + virtual AbstractThesaurusDialog* CreateThesaurusDialog( Window*, ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XThesaurus > xThesaurus, + const String &rWord, sal_Int16 nLanguage ); + + virtual AbstractHyphenWordDialog* CreateHyphenWordDialog( Window*, + const String &rWord, LanguageType nLang, + ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XHyphenator > &xHyphen, + SvxSpellWrapper* pWrapper ); virtual AbstractFmShowColsDialog * CreateFmShowColsDialog( Window* pParent ); //add for FmShowColsDialog virtual AbstractSvxZoomDialog * CreateSvxZoomDialog( Window* pParent, //add for SvxZoomDialog diff --git a/cui/source/inc/cuires.hrc b/cui/source/inc/cuires.hrc index c054d66c4645..7b3530384611 100644 --- a/cui/source/inc/cuires.hrc +++ b/cui/source/inc/cuires.hrc @@ -218,6 +218,10 @@ #define RID_SVX_WND_COMMON_LINGU ( RID_SVX_START + 0 ) #define RID_SVX_GRFFILTER_DLG_EMBOSS_TAB (RID_SVX_START + 337) #define RID_SVXDLG_SEARCHATTR (RID_SVX_START + 22) +#define RID_SVXDLG_HYPHENATE (RID_SVX_START + 30) +#define RID_SVXDLG_THESAURUS (RID_SVX_START + 31) +#define RID_SVXDLG_THES_LANGUAGE (RID_SVX_START + 38) +#define RID_SVXSTR_HMERR_CHECKINSTALL (RID_SVX_START + 94) // hyperlink dialog #define RID_SVXDLG_NEWHYPERLINK (RID_SVX_START + 227) diff --git a/cui/source/inc/helpid.hrc b/cui/source/inc/helpid.hrc index ad0f7ad12a89..74cb35e2b460 100644 --- a/cui/source/inc/helpid.hrc +++ b/cui/source/inc/helpid.hrc @@ -347,7 +347,7 @@ #define HID_PAGE_TEXTATTR (HID_CUI_START + 308) #define HID_TEXTATTR_CTL_POSITION (HID_CUI_START + 309) #define HID_TRANS_POSITION_SIZE (HID_CUI_START + 310) -// free +#define HID_HYPHENATE (HID_CUI_START + 311) #define HID_SVXPAGE_CHAR_NAME (HID_CUI_START + 312) #define HID_SVXPAGE_CHAR_EFFECTS (HID_CUI_START + 313) #define HID_SVXPAGE_CHAR_POSITION (HID_CUI_START + 314) @@ -373,6 +373,7 @@ #define HID_MACRO_HEADERTABLISTBOX (HID_CUI_START + 335) #define HID_GALLERY_ENTER_TITLE (HID_CUI_START + 336) #define HID_GALLERY_TITLE_EDIT (HID_CUI_START + 337) +#define HID_THES_LANGUAGE (HID_CUI_START + 338) // please adjust ACT_SVX_HID_END2 below if you add entries here! @@ -380,7 +381,7 @@ // Overrun check --------------------------------------------------------- // ----------------------------------------------------------------------- -#define ACT_CUI_HID_END HID_CUI_START + 337 +#define ACT_CUI_HID_END HID_CUI_START + 338 #if ACT_CUI_HID_END > HID_CUI_END #error Resource-Ueberlauf in #line, #file diff --git a/cui/source/inc/hyphen.hxx b/cui/source/inc/hyphen.hxx new file mode 100644 index 000000000000..d91b0e342230 --- /dev/null +++ b/cui/source/inc/hyphen.hxx @@ -0,0 +1,122 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: hyphen.hxx,v $ + * $Revision: 1.5 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _SVX_HYPHEN_HXX +#define _SVX_HYPHEN_HXX + +// include --------------------------------------------------------------- + +#include +#include +#include +#include +#include + +// forward --------------------------------------------------------------- + +namespace com{namespace sun{namespace star{ +namespace linguistic2{ + class XHyphenator; + class XPossibleHyphens; +}}}} + +class SvxSpellWrapper; + +// class SvxHyphenEdit --------------------------------------------------- + +class SvxHyphenEdit : public Edit +{ +public: + SvxHyphenEdit( Window* pParent, const ResId& rResId ); + +protected: + virtual void KeyInput( const KeyEvent &rKEvt ); +}; + +// class SvxHyphenWordDialog --------------------------------------------- + +class SvxHyphenWordDialog : public SfxModalDialog +{ +public: + SvxHyphenWordDialog( const String &rWord, LanguageType nLang, + Window* pParent, + ::com::sun::star::uno::Reference< + ::com::sun::star::linguistic2::XHyphenator > &xHyphen, + SvxSpellWrapper* pWrapper ); + + void SelLeft(); + void SelRight(); + +private: + FixedText aWordFT; + SvxHyphenEdit aWordEdit; + ImageButton aLeftBtn; + ImageButton aRightBtn; + OKButton aOkBtn; + CancelButton aCancelBtn; + PushButton aContBtn; + PushButton aDelBtn; + HelpButton aHelpBtn; + String aLabel; + SvxSpellWrapper* pHyphWrapper; + ::com::sun::star::uno::Reference< + ::com::sun::star::linguistic2::XHyphenator > xHyphenator; + ::com::sun::star::uno::Reference< + ::com::sun::star::linguistic2::XPossibleHyphens > xPossHyph; + String aActWord; // actual (to be displayed) word + LanguageType nActLanguage; // and language + sal_uInt16 nMaxHyphenationPos; // right most valid hyphenation pos + sal_uInt16 nHyphPos; + sal_uInt16 nOldPos; + sal_Bool bBusy; + + void EnableLRBtn_Impl(); + void SetLabel_Impl( LanguageType nLang ); + String EraseUnusableHyphens_Impl( + ::com::sun::star::uno::Reference< + ::com::sun::star::linguistic2::XPossibleHyphens > &rxPossHyph, + sal_uInt16 nMaxHyphenationPos ); + + void InitControls_Impl(); + void ContinueHyph_Impl( sal_uInt16 nInsPos = 0 ); + sal_uInt16 GetHyphIndex_Impl(); + + DECL_LINK( CutHdl_Impl, Button* ); + DECL_LINK( DeleteHdl_Impl, Button* ); + DECL_LINK( ContinueHdl_Impl, Button* ); + DECL_LINK( CancelHdl_Impl, Button* ); + DECL_LINK( Left_Impl, Button* ); + DECL_LINK( Right_Impl, Button* ); + DECL_LINK( GetFocusHdl_Impl, Edit* ); + DECL_LINK( LangError_Impl, void* ); +}; + + +#endif + diff --git a/cui/source/inc/thesdlg.hxx b/cui/source/inc/thesdlg.hxx new file mode 100644 index 000000000000..bf5fb812946b --- /dev/null +++ b/cui/source/inc/thesdlg.hxx @@ -0,0 +1,124 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: thesdlg.hxx,v $ + * $Revision: 1.3 $ + * + * 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 + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _SVX_THESDLG_HXX +#define _SVX_THESDLG_HXX + +// include --------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include +#include + +// forward --------------------------------------------------------------- + +struct ThesDlg_Impl; + +class SvxThesaurusLanguageDlg_Impl; + +namespace com { namespace sun { namespace star { + namespace linguistic2 { + class XThesaurus; + class XMeaning; + } + namespace lang { + struct Locale; + } +}}} + +// class SvxThesaurusDialog ---------------------------------------------- + +class SvxThesaurusDialog : public SvxStandardDialog +{ +public: + friend class SvxThesaurusLanguageDlg_Impl; + + SvxThesaurusDialog( Window* pParent, + ::com::sun::star::uno::Reference< + ::com::sun::star::linguistic2::XThesaurus > xThesaurus, + const String &rWord, sal_Int16 nLanguage ); + ~SvxThesaurusDialog(); + + String GetWord() { return aReplaceEdit.GetText(); } + + sal_uInt16 GetLanguage() const; + +private: + FixedText aWordText; + ListBox aWordLB; + FixedText aReplaceText; + Edit aReplaceEdit; + FixedText aMeanText; + ListBox aMeanLB; + FixedText aSynonymText; + ListBox aSynonymLB; + FixedLine aVarFL; + + OKButton aOkBtn; + CancelButton aCancelBtn; + PushButton aLookUpBtn; + PushButton aLangBtn; + HelpButton aHelpBtn; + + String aErrStr; + + ThesDlg_Impl* pImpl; // always != NULL + + virtual void Apply(); + + void UpdateSynonymBox_Impl(); + void UpdateMeaningBox_Impl( + ::com::sun::star::uno::Sequence< + ::com::sun::star::uno::Reference< + ::com::sun::star::linguistic2::XMeaning > > *pMeaningSeq = NULL ); + void Init_Impl(sal_Int16 nLanguage); + + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XMeaning > > + SAL_CALL queryMeanings_Impl( + ::rtl::OUString& rTerm, + const ::com::sun::star::lang::Locale& rLocale, + const ::com::sun::star::beans::PropertyValues& rProperties ) + throw(::com::sun::star::lang::IllegalArgumentException, + ::com::sun::star::uno::RuntimeException); + // Handler + DECL_LINK( SelectHdl_Impl, ListBox * ); + DECL_LINK( SynonymHdl_Impl, ListBox * ); + DECL_LINK( LookUpHdl_Impl, Button * ); + DECL_LINK( LanguageHdl_Impl, Button * ); + DECL_LINK( EntryHdl_Impl, ListBox * ); + DECL_LINK( SpellErrorHdl_Impl, void * ); +}; + +#endif + -- cgit v1.2.3