improving the input context
This commit is contained in:
parent
12a938e653
commit
26f8e1b936
@ -10,8 +10,8 @@ public:
|
||||
QVector< QString > candidates;
|
||||
};
|
||||
|
||||
QskHunspellCompositionModel::QskHunspellCompositionModel() :
|
||||
QskInputCompositionModel(),
|
||||
QskHunspellCompositionModel::QskHunspellCompositionModel( QObject* parent ):
|
||||
Inherited( parent ),
|
||||
m_data( new PrivateData() )
|
||||
{
|
||||
#if 1
|
||||
|
@ -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;
|
||||
|
@ -62,7 +62,8 @@ public:
|
||||
int groupIndex;
|
||||
};
|
||||
|
||||
QskInputCompositionModel::QskInputCompositionModel():
|
||||
QskInputCompositionModel::QskInputCompositionModel( QObject* parent ):
|
||||
QObject( parent ),
|
||||
m_data( new PrivateData )
|
||||
{
|
||||
m_data->groupIndex = 0;
|
||||
|
@ -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:
|
||||
|
@ -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"
|
||||
|
@ -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* );
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user