improving the input context

This commit is contained in:
Uwe Rathmann 2018-04-04 12:05:01 +02:00
parent 12a938e653
commit 26f8e1b936
9 changed files with 86 additions and 24 deletions

View File

@ -10,8 +10,8 @@ public:
QVector< QString > candidates;
};
QskHunspellCompositionModel::QskHunspellCompositionModel() :
QskInputCompositionModel(),
QskHunspellCompositionModel::QskHunspellCompositionModel( QObject* parent ):
Inherited( parent ),
m_data( new PrivateData() )
{
#if 1

View File

@ -10,8 +10,10 @@
class QskHunspellCompositionModel : public QskInputCompositionModel
{
using Inherited = QskInputCompositionModel;
public:
QskHunspellCompositionModel();
QskHunspellCompositionModel( QObject* parent = nullptr );
virtual ~QskHunspellCompositionModel() override;
virtual bool supportsSuggestions() const override final;

View File

@ -62,7 +62,8 @@ public:
int groupIndex;
};
QskInputCompositionModel::QskInputCompositionModel():
QskInputCompositionModel::QskInputCompositionModel( QObject* parent ):
QObject( parent ),
m_data( new PrivateData )
{
m_data->groupIndex = 0;

View File

@ -20,7 +20,7 @@ class QskInputCompositionModel : public QObject
Q_PROPERTY( QVector< Qt::Key > groups READ groups NOTIFY groupsChanged )
public:
QskInputCompositionModel();
QskInputCompositionModel( QObject* parent = nullptr );
virtual ~QskInputCompositionModel();
// to determine whether to show the suggestion bar:

View File

@ -31,7 +31,7 @@ QskInputContext::QskInputContext() :
{
setObjectName( "InputContext" );
m_data->compositionModel = new QskInputCompositionModel();
m_data->compositionModel = new QskInputCompositionModel( this );
connect( m_data->compositionModel, &QskInputCompositionModel::candidatesChanged,
this, &QskInputContext::handleCandidatesChanged );
@ -40,7 +40,7 @@ QskInputContext::QskInputContext() :
this, &QskInputContext::setInputPanel );
#if 1
setCompositionModel( QLocale::Chinese, new QskPinyinCompositionModel() );
setCompositionModel( QLocale::Chinese, new QskPinyinCompositionModel( this ) );
#endif
setInputPanel( qskSetup->inputPanel() );
@ -48,11 +48,10 @@ QskInputContext::QskInputContext() :
QskInputContext::~QskInputContext()
{
#if 1
if ( m_data->inputPanel )
delete m_data->inputPanel;
qDeleteAll( m_data->compositionModels );
delete m_data->compositionModel;
#endif
}
bool QskInputContext::isValid() const
@ -60,14 +59,19 @@ bool QskInputContext::isValid() const
return true;
}
bool QskInputContext::hasCapability( Capability ) const
{
// what is QPlatformInputContext::HiddenTextCapability ???
return true;
}
void QskInputContext::update( Qt::InputMethodQueries queries )
{
if ( !m_data->inputItem )
if ( m_data->inputItem == nullptr )
return;
QInputMethodQueryEvent queryEvent( queries );
if ( !QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ) )
return;
QCoreApplication::sendEvent( m_data->inputItem, &queryEvent );
// Qt::ImCursorRectangle
// Qt::ImFont
@ -219,6 +223,11 @@ QLocale QskInputContext::locale() const
return m_data->inputPanel ? m_data->inputPanel->locale() : QLocale();
}
Qt::LayoutDirection QskInputContext::inputDirection() const
{
return Inherited::inputDirection();
}
void QskInputContext::setFocusObject( QObject* focusObject )
{
if ( focusObject == nullptr )
@ -245,8 +254,7 @@ void QskInputContext::setFocusObject( QObject* focusObject )
if( inputItemChanged )
{
QInputMethodQueryEvent queryEvent( Qt::ImEnabled );
if ( !QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ) )
return;
QCoreApplication::sendEvent( m_data->inputItem, &queryEvent );
if ( !queryEvent.value( Qt::ImEnabled ).toBool() )
{
@ -302,7 +310,7 @@ void QskInputContext::invokeAction( QInputMethod::Action action, int cursorPosit
{
auto model = compositionModel();
switch ( static_cast< QskVirtualKeyboard::Action >( action ) )
switch ( static_cast< int >( action ) )
{
case QskVirtualKeyboard::Compose:
{
@ -323,6 +331,11 @@ void QskInputContext::invokeAction( QInputMethod::Action action, int cursorPosit
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"

View File

@ -24,6 +24,7 @@ public:
virtual ~QskInputContext();
virtual bool isValid() const override;
virtual bool hasCapability( Capability ) const override;
virtual void update( Qt::InputMethodQueries ) override;
virtual void invokeAction( QInputMethod::Action, int ) override;
@ -35,14 +36,21 @@ public:
virtual void hideInputPanel() override;
virtual bool isInputPanelVisible() const override;
virtual void reset() override;
virtual void commit() override;
virtual void setFocusObject( QObject* ) override;
virtual QLocale locale() const override;
virtual Qt::LayoutDirection inputDirection() const override;
void setCompositionModel( const QLocale&, QskInputCompositionModel* );
Q_INVOKABLE QQuickItem* inputItem();
virtual bool eventFilter( QObject*, QEvent * ) override;
virtual bool filterEvent( const QEvent* ) override;
private Q_SLOTS:
void handleCandidatesChanged();
void setInputPanel( QskVirtualKeyboard* );

View File

@ -18,8 +18,8 @@ public:
QVector< Qt::Key > groups;
};
QskPinyinCompositionModel::QskPinyinCompositionModel():
QskInputCompositionModel(),
QskPinyinCompositionModel::QskPinyinCompositionModel( QObject* parent ):
Inherited( parent ),
m_data( new PrivateData )
{
#if 1
@ -124,5 +124,3 @@ void QskPinyinCompositionModel::handleGroupIndexChanged()
{
// ### implement
}
#include "moc_QskPinyinCompositionModel.cpp"

View File

@ -10,10 +10,10 @@
class QskPinyinCompositionModel : public QskInputCompositionModel
{
Q_OBJECT
using Inherited = QskInputCompositionModel;
public:
QskPinyinCompositionModel();
QskPinyinCompositionModel( QObject* parent = nullptr );
virtual ~QskPinyinCompositionModel() override;
virtual bool supportsSuggestions() const override final;

View File

@ -24,8 +24,10 @@ static inline void qskBindSignals( const QQuickTextInput* wrappedInput,
QObject::connect( wrappedInput, &QQuickTextInput::textChanged,
input, [ input ] { input->Q_EMIT textChanged( input->text() ); } );
#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)
QObject::connect( wrappedInput, &QQuickTextInput::textEdited,
input, [ input ] { input->Q_EMIT textEdited( input->text() ); } );
#endif
QObject::connect( wrappedInput, &QQuickTextInput::textChanged,
input, [ input ] { input->Q_EMIT textChanged( input->text() ); } );
@ -42,8 +44,10 @@ static inline void qskBindSignals( const QQuickTextInput* wrappedInput,
QObject::connect( wrappedInput, &QQuickTextInput::readOnlyChanged,
input, &QskTextInput::readOnlyChanged );
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
QObject::connect( wrappedInput, &QQuickTextInput::overwriteModeChanged,
input, &QskTextInput::overwriteModeChanged );
#endif
QObject::connect( wrappedInput, &QQuickTextInput::maximumLengthChanged,
input, &QskTextInput::maximumLengthChanged );
@ -232,9 +236,12 @@ void QskTextInput::setFontRole( int role )
polish();
resetImplicitSize();
qskUpdateInputMethod( this,
Qt::ImCursorRectangle | Qt::ImFont | Qt::ImAnchorRectangle );
Qt::InputMethodQueries queries = Qt::ImCursorRectangle | Qt::ImFont;
#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
queries |= Qt::ImAnchorRectangle;
#endif
qskUpdateInputMethod( this, queries );
Q_EMIT fontRoleChanged();
}
}
@ -374,17 +381,29 @@ QString QskTextInput::displayText() const
QString QskTextInput::preeditText() const
{
#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
return m_data->textInput->preeditText();
#else
return QString();
#endif
}
bool QskTextInput::overwriteMode() const
{
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
return m_data->textInput->overwriteMode();
#else
return false;
#endif
}
void QskTextInput::setOverwriteMode( bool overwrite )
{
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
m_data->textInput->setOverwriteMode( overwrite );
#else
Q_UNUSED( overwrite )
#endif
}
bool QskTextInput::autoScroll() const