blob: 07f7d26928f4685dc8d42b0a78cbd574fdc2178e [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SVX_HANGUL_HANJA_DLG_HXX
#define SVX_HANGUL_HANJA_DLG_HXX
#include <vcl/dialog.hxx>
#include <vcl/button.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/combobox.hxx>
#include <vcl/fixed.hxx>
#include <vcl/scrbar.hxx>
#include <svx/checklbx.hxx>
#include <editeng/hangulhanja.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <editeng/unolingu.hxx>
#include <com/sun/star/linguistic2/XConversionDictionaryList.hpp>
#include <svtools/valueset.hxx>
#include <vector>
#include <memory> // for auto_ptr
class SvxCommonLinguisticControl;
//.............................................................................
namespace svx
{
//.............................................................................
//=========================================================================
//= HangulHanjaConversionDialog
//=========================================================================
class SuggestionSet : public ValueSet
{
public:
SuggestionSet( Window* pParent );
virtual ~SuggestionSet();
virtual void UserDraw( const UserDrawEvent& rUDEvt );
void ClearSet();
};
class SuggestionDisplay : public Control
{
public:
SuggestionDisplay( Window* pParent, const ResId& rResId );
virtual ~SuggestionDisplay();
void DisplayListBox( bool bDisplayListBox );
void SetSelectHdl( const Link& rLink );
void Clear();
void InsertEntry( const XubString& rStr );
void SelectEntryPos( sal_uInt16 nPos );
sal_uInt16 GetEntryCount() const;
XubString GetEntry( sal_uInt16 nPos ) const;
XubString GetSelectEntry() const;
virtual void StateChanged( StateChangedType nStateChange );
virtual void KeyInput( const KeyEvent& rKEvt );
virtual void KeyUp( const KeyEvent& rKEvt );
virtual void Activate();
virtual void Deactivate();
virtual void GetFocus();
virtual void LoseFocus();
virtual void Command( const CommandEvent& rCEvt );
DECL_LINK( SelectSuggestionHdl, Control* );
void SetHelpIds();
private:
void implUpdateDisplay();
Control& implGetCurrentControl();
private:
bool m_bDisplayListBox;//otherwise ValueSet
SuggestionSet m_aValueSet;
ListBox m_aListBox;
Link m_aSelectLink;
bool m_bInSelectionUpdate;
};
class HangulHanjaConversionDialog : public ModalDialog
{
private:
::std::auto_ptr< SvxCommonLinguisticControl >
m_pPlayground; // order matters: before all other controls!
PushButton m_aFind;
SuggestionDisplay m_aSuggestions;
FixedText m_aFormat;
RadioButton m_aSimpleConversion;
RadioButton m_aHangulBracketed;
RadioButton m_aHanjaBracketed;
::std::auto_ptr< RadioButton > m_pHanjaAbove;
::std::auto_ptr< RadioButton > m_pHanjaBelow;
::std::auto_ptr< RadioButton > m_pHangulAbove;
::std::auto_ptr< RadioButton > m_pHangulBelow;
FixedText m_aConversion;
CheckBox m_aHangulOnly;
CheckBox m_aHanjaOnly;
CheckBox m_aReplaceByChar;
CheckBox* m_pIgnoreNonPrimary;
bool m_bDocumentMode;
// are we working for a document? This is normally true, but in case
// the user uses the "find" functionality, we switch to working
// with what the user entered, which then does not have any relation to
// the document anymore. Some functionality must be disabled then
Link m_aOptionsChangedLink;
Link m_aClickByCharacterLink;
public:
HangulHanjaConversionDialog(
Window* _pParent,
editeng::HangulHanjaConversion::ConversionDirection _ePrimaryDirection );
~HangulHanjaConversionDialog( );
public:
void SetOptionsChangedHdl( const Link& _rHdl );
void SetIgnoreHdl( const Link& _rHdl );
void SetIgnoreAllHdl( const Link& _rHdl );
void SetChangeHdl( const Link& _rHdl );
void SetChangeAllHdl( const Link& _rHdl );
void SetClickByCharacterHdl( const Link& _rHdl );
void SetConversionFormatChangedHdl( const Link& _rHdl );
void SetFindHdl( const Link& _rHdl );
String GetCurrentString( ) const;
void SetCurrentString(
const String& _rNewString,
const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rSuggestions,
bool _bOriginatesFromDocument = true
);
void FocusSuggestion( );
// retrieves the current suggestion
String GetCurrentSuggestion( ) const;
void SetConversionFormat( editeng::HangulHanjaConversion::ConversionFormat _eType );
editeng::HangulHanjaConversion::ConversionFormat GetConversionFormat( ) const;
void SetByCharacter( sal_Bool _bByCharacter );
void SetConversionDirectionState( sal_Bool _bTryBothDirections, editeng::HangulHanjaConversion::ConversionDirection _ePrimaryConversionDirection );
// should text which does not match the primary conversion direction be ignored?
sal_Bool GetUseBothDirections( ) const;
// get current conversion direction to use
// (return argument if GetUseBothDirections is true)
editeng::HangulHanjaConversion::ConversionDirection GetDirection( editeng::HangulHanjaConversion::ConversionDirection eDefaultDirection ) const;
// enables or disbales the checkboxes for ruby formatted replacements
void EnableRubySupport( sal_Bool bVal );
private:
DECL_LINK( OnClose, void* );
DECL_LINK( OnOption, void* );
DECL_LINK( OnSuggestionModified, void* );
DECL_LINK( OnSuggestionSelected, void* );
DECL_LINK( OnConversionDirectionClicked, CheckBox* );
DECL_LINK( ClickByCharacterHdl, CheckBox* );
// fill the suggestion list box with suggestions for the actual input
void FillSuggestions( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rSuggestions );
};
typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XConversionDictionary > > HHDictList;
class HangulHanjaOptionsDialog : public ModalDialog
{
private:
FixedText m_aUserdefdictFT;
SvxCheckListBox m_aDictsLB;
FixedLine m_aOptionsFL;
CheckBox m_aIgnorepostCB;
CheckBox m_aShowrecentlyfirstCB;
CheckBox m_aAutoreplaceuniqueCB;
PushButton m_aNewPB;
PushButton m_aEditPB;
PushButton m_aDeletePB;
OKButton m_aOkPB;
CancelButton m_aCancelPB;
HelpButton m_aHelpPB;
SvLBoxButtonData* m_pCheckButtonData;
HHDictList m_aDictList;
::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XConversionDictionaryList > m_xConversionDictionaryList;
DECL_LINK( OkHdl, void* );
DECL_LINK( OnNew, void* );
DECL_LINK( OnEdit, void* );
DECL_LINK( OnDelete, void* );
DECL_LINK( DictsLB_SelectHdl, void* );
DECL_LINK( NewDictHdl, void* );
DECL_LINK( EditDictHdl, void* );
DECL_LINK( DeleteDictHdl, void* );
void Init( void ); // reads settings from core and init controls
public:
HangulHanjaOptionsDialog( Window* _pParent );
virtual ~HangulHanjaOptionsDialog();
void AddDict( const String& _rName, bool _bChecked );
};
class HangulHanjaNewDictDialog : public ModalDialog
{
private:
FixedLine m_aNewDictFL;
FixedText m_aDictNameFT;
Edit m_aDictNameED;
OKButton m_aOkBtn;
CancelButton m_aCancelBtn;
HelpButton m_aHelpBtn;
bool m_bEntered;
DECL_LINK( OKHdl, void* );
DECL_LINK( ModifyHdl, void* );
protected:
public:
HangulHanjaNewDictDialog( Window* _pParent );
virtual ~HangulHanjaNewDictDialog();
bool GetName( String& _rRetName ) const;
};
class SuggestionList;
class SuggestionEdit : public Edit
{
private:
SuggestionEdit* m_pPrev;
SuggestionEdit* m_pNext;
ScrollBar& m_rScrollBar;
bool ShouldScroll( bool _bUp ) const;
void DoJump( bool _bUp );
public:
SuggestionEdit( Window* pParent, const ResId& rResId,
ScrollBar& _rScrollBar,
SuggestionEdit* _pPrev, SuggestionEdit* _pNext );
virtual ~SuggestionEdit();
virtual long PreNotify( NotifyEvent& rNEvt );
};
class HangulHanjaEditDictDialog : public ModalDialog
{
private:
const String m_aEditHintText;
HHDictList& m_rDictList;
sal_uInt32 m_nCurrentDict;
String m_aOriginal;
SuggestionList* m_pSuggestions;
FixedText m_aBookFT;
ListBox m_aBookLB;
FixedText m_aOriginalFT;
ComboBox m_aOriginalLB;
FixedText m_aSuggestionsFT;
SuggestionEdit m_aEdit1;
SuggestionEdit m_aEdit2;
SuggestionEdit m_aEdit3;
SuggestionEdit m_aEdit4;
ScrollBar m_aScrollSB;
PushButton m_aNewPB;
PushButton m_aDeletePB;
HelpButton m_aHelpPB;
CancelButton m_aClosePB;
sal_uInt16 m_nTopPos;
bool m_bModifiedSuggestions;
bool m_bModifiedOriginal;
DECL_LINK( OriginalModifyHdl, void* );
DECL_LINK( ScrollHdl, void* );
DECL_LINK( EditModifyHdl1, Edit* );
DECL_LINK( EditModifyHdl2, Edit* );
DECL_LINK( EditModifyHdl3, Edit* );
DECL_LINK( EditModifyHdl4, Edit* );
DECL_LINK( BookLBSelectHdl, void* );
DECL_LINK( NewPBPushHdl, void* );
DECL_LINK( DeletePBPushHdl, void* );
void InitEditDictDialog( sal_uInt32 _nSelDict );
void UpdateOriginalLB( void );
void UpdateSuggestions( void );
void UpdateButtonStates();
void SetEditText( Edit& _rEdit, sal_uInt16 _nEntryNum );
void EditModify( Edit* _pEdit, sal_uInt8 _nEntryOffset );
void EditFocusLost( Edit* _pEdit, sal_uInt8 _nEntryOffset );
bool DeleteEntryFromDictionary( const ::rtl::OUString& rEntry, const ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XConversionDictionary >& xDict );
public:
HangulHanjaEditDictDialog( Window* _pParent, HHDictList& _rDictList, sal_uInt32 _nSelDict );
~HangulHanjaEditDictDialog();
void UpdateScrollbar( void );
};
//.............................................................................
} // namespace svx
//.............................................................................
#endif // SVX_HANGUL_HANJA_HXX