improving the input context
This commit is contained in:
parent
12a938e653
commit
26f8e1b936
@ -10,8 +10,8 @@ public:
|
|||||||
QVector< QString > candidates;
|
QVector< QString > candidates;
|
||||||
};
|
};
|
||||||
|
|
||||||
QskHunspellCompositionModel::QskHunspellCompositionModel() :
|
QskHunspellCompositionModel::QskHunspellCompositionModel( QObject* parent ):
|
||||||
QskInputCompositionModel(),
|
Inherited( parent ),
|
||||||
m_data( new PrivateData() )
|
m_data( new PrivateData() )
|
||||||
{
|
{
|
||||||
#if 1
|
#if 1
|
||||||
|
@ -10,8 +10,10 @@
|
|||||||
|
|
||||||
class QskHunspellCompositionModel : public QskInputCompositionModel
|
class QskHunspellCompositionModel : public QskInputCompositionModel
|
||||||
{
|
{
|
||||||
|
using Inherited = QskInputCompositionModel;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QskHunspellCompositionModel();
|
QskHunspellCompositionModel( QObject* parent = nullptr );
|
||||||
virtual ~QskHunspellCompositionModel() override;
|
virtual ~QskHunspellCompositionModel() override;
|
||||||
|
|
||||||
virtual bool supportsSuggestions() const override final;
|
virtual bool supportsSuggestions() const override final;
|
||||||
|
@ -62,7 +62,8 @@ public:
|
|||||||
int groupIndex;
|
int groupIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
QskInputCompositionModel::QskInputCompositionModel():
|
QskInputCompositionModel::QskInputCompositionModel( QObject* parent ):
|
||||||
|
QObject( parent ),
|
||||||
m_data( new PrivateData )
|
m_data( new PrivateData )
|
||||||
{
|
{
|
||||||
m_data->groupIndex = 0;
|
m_data->groupIndex = 0;
|
||||||
|
@ -20,7 +20,7 @@ class QskInputCompositionModel : public QObject
|
|||||||
Q_PROPERTY( QVector< Qt::Key > groups READ groups NOTIFY groupsChanged )
|
Q_PROPERTY( QVector< Qt::Key > groups READ groups NOTIFY groupsChanged )
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QskInputCompositionModel();
|
QskInputCompositionModel( QObject* parent = nullptr );
|
||||||
virtual ~QskInputCompositionModel();
|
virtual ~QskInputCompositionModel();
|
||||||
|
|
||||||
// to determine whether to show the suggestion bar:
|
// to determine whether to show the suggestion bar:
|
||||||
|
@ -31,7 +31,7 @@ QskInputContext::QskInputContext() :
|
|||||||
{
|
{
|
||||||
setObjectName( "InputContext" );
|
setObjectName( "InputContext" );
|
||||||
|
|
||||||
m_data->compositionModel = new QskInputCompositionModel();
|
m_data->compositionModel = new QskInputCompositionModel( this );
|
||||||
|
|
||||||
connect( m_data->compositionModel, &QskInputCompositionModel::candidatesChanged,
|
connect( m_data->compositionModel, &QskInputCompositionModel::candidatesChanged,
|
||||||
this, &QskInputContext::handleCandidatesChanged );
|
this, &QskInputContext::handleCandidatesChanged );
|
||||||
@ -40,7 +40,7 @@ QskInputContext::QskInputContext() :
|
|||||||
this, &QskInputContext::setInputPanel );
|
this, &QskInputContext::setInputPanel );
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
setCompositionModel( QLocale::Chinese, new QskPinyinCompositionModel() );
|
setCompositionModel( QLocale::Chinese, new QskPinyinCompositionModel( this ) );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setInputPanel( qskSetup->inputPanel() );
|
setInputPanel( qskSetup->inputPanel() );
|
||||||
@ -48,11 +48,10 @@ QskInputContext::QskInputContext() :
|
|||||||
|
|
||||||
QskInputContext::~QskInputContext()
|
QskInputContext::~QskInputContext()
|
||||||
{
|
{
|
||||||
|
#if 1
|
||||||
if ( m_data->inputPanel )
|
if ( m_data->inputPanel )
|
||||||
delete m_data->inputPanel;
|
delete m_data->inputPanel;
|
||||||
|
#endif
|
||||||
qDeleteAll( m_data->compositionModels );
|
|
||||||
delete m_data->compositionModel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QskInputContext::isValid() const
|
bool QskInputContext::isValid() const
|
||||||
@ -60,14 +59,19 @@ bool QskInputContext::isValid() const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QskInputContext::hasCapability( Capability ) const
|
||||||
|
{
|
||||||
|
// what is QPlatformInputContext::HiddenTextCapability ???
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void QskInputContext::update( Qt::InputMethodQueries queries )
|
void QskInputContext::update( Qt::InputMethodQueries queries )
|
||||||
{
|
{
|
||||||
if ( !m_data->inputItem )
|
if ( m_data->inputItem == nullptr )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QInputMethodQueryEvent queryEvent( queries );
|
QInputMethodQueryEvent queryEvent( queries );
|
||||||
if ( !QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ) )
|
QCoreApplication::sendEvent( m_data->inputItem, &queryEvent );
|
||||||
return;
|
|
||||||
|
|
||||||
// Qt::ImCursorRectangle
|
// Qt::ImCursorRectangle
|
||||||
// Qt::ImFont
|
// Qt::ImFont
|
||||||
@ -219,6 +223,11 @@ QLocale QskInputContext::locale() const
|
|||||||
return m_data->inputPanel ? m_data->inputPanel->locale() : QLocale();
|
return m_data->inputPanel ? m_data->inputPanel->locale() : QLocale();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Qt::LayoutDirection QskInputContext::inputDirection() const
|
||||||
|
{
|
||||||
|
return Inherited::inputDirection();
|
||||||
|
}
|
||||||
|
|
||||||
void QskInputContext::setFocusObject( QObject* focusObject )
|
void QskInputContext::setFocusObject( QObject* focusObject )
|
||||||
{
|
{
|
||||||
if ( focusObject == nullptr )
|
if ( focusObject == nullptr )
|
||||||
@ -245,8 +254,7 @@ void QskInputContext::setFocusObject( QObject* focusObject )
|
|||||||
if( inputItemChanged )
|
if( inputItemChanged )
|
||||||
{
|
{
|
||||||
QInputMethodQueryEvent queryEvent( Qt::ImEnabled );
|
QInputMethodQueryEvent queryEvent( Qt::ImEnabled );
|
||||||
if ( !QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ) )
|
QCoreApplication::sendEvent( m_data->inputItem, &queryEvent );
|
||||||
return;
|
|
||||||
|
|
||||||
if ( !queryEvent.value( Qt::ImEnabled ).toBool() )
|
if ( !queryEvent.value( Qt::ImEnabled ).toBool() )
|
||||||
{
|
{
|
||||||
@ -302,7 +310,7 @@ void QskInputContext::invokeAction( QInputMethod::Action action, int cursorPosit
|
|||||||
{
|
{
|
||||||
auto model = compositionModel();
|
auto model = compositionModel();
|
||||||
|
|
||||||
switch ( static_cast< QskVirtualKeyboard::Action >( action ) )
|
switch ( static_cast< int >( action ) )
|
||||||
{
|
{
|
||||||
case QskVirtualKeyboard::Compose:
|
case QskVirtualKeyboard::Compose:
|
||||||
{
|
{
|
||||||
@ -323,6 +331,11 @@ void QskInputContext::invokeAction( QInputMethod::Action action, int cursorPosit
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case QInputMethod::Click:
|
||||||
|
case QInputMethod::ContextMenu:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,4 +395,25 @@ void QskInputContext::setInputPanel( QskVirtualKeyboard* inputPanel )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QskInputContext::reset()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void QskInputContext::commit()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QskInputContext::eventFilter( QObject* object, QEvent* event )
|
||||||
|
{
|
||||||
|
if ( object == m_data->inputItem )
|
||||||
|
return filterEvent( event );
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QskInputContext::filterEvent( const QEvent* )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#include "moc_QskInputContext.cpp"
|
#include "moc_QskInputContext.cpp"
|
||||||
|
@ -24,6 +24,7 @@ public:
|
|||||||
virtual ~QskInputContext();
|
virtual ~QskInputContext();
|
||||||
|
|
||||||
virtual bool isValid() const override;
|
virtual bool isValid() const override;
|
||||||
|
virtual bool hasCapability( Capability ) const override;
|
||||||
|
|
||||||
virtual void update( Qt::InputMethodQueries ) override;
|
virtual void update( Qt::InputMethodQueries ) override;
|
||||||
virtual void invokeAction( QInputMethod::Action, int ) override;
|
virtual void invokeAction( QInputMethod::Action, int ) override;
|
||||||
@ -35,14 +36,21 @@ public:
|
|||||||
virtual void hideInputPanel() override;
|
virtual void hideInputPanel() override;
|
||||||
virtual bool isInputPanelVisible() const override;
|
virtual bool isInputPanelVisible() const override;
|
||||||
|
|
||||||
|
virtual void reset() override;
|
||||||
|
virtual void commit() override;
|
||||||
|
|
||||||
virtual void setFocusObject( QObject* ) override;
|
virtual void setFocusObject( QObject* ) override;
|
||||||
|
|
||||||
virtual QLocale locale() const override;
|
virtual QLocale locale() const override;
|
||||||
|
virtual Qt::LayoutDirection inputDirection() const override;
|
||||||
|
|
||||||
void setCompositionModel( const QLocale&, QskInputCompositionModel* );
|
void setCompositionModel( const QLocale&, QskInputCompositionModel* );
|
||||||
|
|
||||||
Q_INVOKABLE QQuickItem* inputItem();
|
Q_INVOKABLE QQuickItem* inputItem();
|
||||||
|
|
||||||
|
virtual bool eventFilter( QObject*, QEvent * ) override;
|
||||||
|
virtual bool filterEvent( const QEvent* ) override;
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void handleCandidatesChanged();
|
void handleCandidatesChanged();
|
||||||
void setInputPanel( QskVirtualKeyboard* );
|
void setInputPanel( QskVirtualKeyboard* );
|
||||||
|
@ -18,8 +18,8 @@ public:
|
|||||||
QVector< Qt::Key > groups;
|
QVector< Qt::Key > groups;
|
||||||
};
|
};
|
||||||
|
|
||||||
QskPinyinCompositionModel::QskPinyinCompositionModel():
|
QskPinyinCompositionModel::QskPinyinCompositionModel( QObject* parent ):
|
||||||
QskInputCompositionModel(),
|
Inherited( parent ),
|
||||||
m_data( new PrivateData )
|
m_data( new PrivateData )
|
||||||
{
|
{
|
||||||
#if 1
|
#if 1
|
||||||
@ -124,5 +124,3 @@ void QskPinyinCompositionModel::handleGroupIndexChanged()
|
|||||||
{
|
{
|
||||||
// ### implement
|
// ### implement
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "moc_QskPinyinCompositionModel.cpp"
|
|
||||||
|
@ -10,10 +10,10 @@
|
|||||||
|
|
||||||
class QskPinyinCompositionModel : public QskInputCompositionModel
|
class QskPinyinCompositionModel : public QskInputCompositionModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
using Inherited = QskInputCompositionModel;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QskPinyinCompositionModel();
|
QskPinyinCompositionModel( QObject* parent = nullptr );
|
||||||
virtual ~QskPinyinCompositionModel() override;
|
virtual ~QskPinyinCompositionModel() override;
|
||||||
|
|
||||||
virtual bool supportsSuggestions() const override final;
|
virtual bool supportsSuggestions() const override final;
|
||||||
|
@ -24,8 +24,10 @@ static inline void qskBindSignals( const QQuickTextInput* wrappedInput,
|
|||||||
QObject::connect( wrappedInput, &QQuickTextInput::textChanged,
|
QObject::connect( wrappedInput, &QQuickTextInput::textChanged,
|
||||||
input, [ input ] { input->Q_EMIT textChanged( input->text() ); } );
|
input, [ input ] { input->Q_EMIT textChanged( input->text() ); } );
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)
|
||||||
QObject::connect( wrappedInput, &QQuickTextInput::textEdited,
|
QObject::connect( wrappedInput, &QQuickTextInput::textEdited,
|
||||||
input, [ input ] { input->Q_EMIT textEdited( input->text() ); } );
|
input, [ input ] { input->Q_EMIT textEdited( input->text() ); } );
|
||||||
|
#endif
|
||||||
|
|
||||||
QObject::connect( wrappedInput, &QQuickTextInput::textChanged,
|
QObject::connect( wrappedInput, &QQuickTextInput::textChanged,
|
||||||
input, [ input ] { input->Q_EMIT textChanged( input->text() ); } );
|
input, [ input ] { input->Q_EMIT textChanged( input->text() ); } );
|
||||||
@ -42,8 +44,10 @@ static inline void qskBindSignals( const QQuickTextInput* wrappedInput,
|
|||||||
QObject::connect( wrappedInput, &QQuickTextInput::readOnlyChanged,
|
QObject::connect( wrappedInput, &QQuickTextInput::readOnlyChanged,
|
||||||
input, &QskTextInput::readOnlyChanged );
|
input, &QskTextInput::readOnlyChanged );
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
|
||||||
QObject::connect( wrappedInput, &QQuickTextInput::overwriteModeChanged,
|
QObject::connect( wrappedInput, &QQuickTextInput::overwriteModeChanged,
|
||||||
input, &QskTextInput::overwriteModeChanged );
|
input, &QskTextInput::overwriteModeChanged );
|
||||||
|
#endif
|
||||||
|
|
||||||
QObject::connect( wrappedInput, &QQuickTextInput::maximumLengthChanged,
|
QObject::connect( wrappedInput, &QQuickTextInput::maximumLengthChanged,
|
||||||
input, &QskTextInput::maximumLengthChanged );
|
input, &QskTextInput::maximumLengthChanged );
|
||||||
@ -232,9 +236,12 @@ void QskTextInput::setFontRole( int role )
|
|||||||
polish();
|
polish();
|
||||||
resetImplicitSize();
|
resetImplicitSize();
|
||||||
|
|
||||||
qskUpdateInputMethod( this,
|
Qt::InputMethodQueries queries = Qt::ImCursorRectangle | Qt::ImFont;
|
||||||
Qt::ImCursorRectangle | Qt::ImFont | Qt::ImAnchorRectangle );
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
|
||||||
|
queries |= Qt::ImAnchorRectangle;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
qskUpdateInputMethod( this, queries );
|
||||||
Q_EMIT fontRoleChanged();
|
Q_EMIT fontRoleChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -374,17 +381,29 @@ QString QskTextInput::displayText() const
|
|||||||
|
|
||||||
QString QskTextInput::preeditText() const
|
QString QskTextInput::preeditText() const
|
||||||
{
|
{
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
|
||||||
return m_data->textInput->preeditText();
|
return m_data->textInput->preeditText();
|
||||||
|
#else
|
||||||
|
return QString();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QskTextInput::overwriteMode() const
|
bool QskTextInput::overwriteMode() const
|
||||||
{
|
{
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
|
||||||
return m_data->textInput->overwriteMode();
|
return m_data->textInput->overwriteMode();
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskTextInput::setOverwriteMode( bool overwrite )
|
void QskTextInput::setOverwriteMode( bool overwrite )
|
||||||
{
|
{
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
|
||||||
m_data->textInput->setOverwriteMode( overwrite );
|
m_data->textInput->setOverwriteMode( overwrite );
|
||||||
|
#else
|
||||||
|
Q_UNUSED( overwrite )
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QskTextInput::autoScroll() const
|
bool QskTextInput::autoScroll() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user