mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-27 15:24:05 +00:00
opt: support UP/Down arrow key in headword UI (#1358)
* opt:refactor the code * opt: headwords dialog response to the Up/Down Key * opt: when the headword come from headword dialog ,not focus * [autofix.ci] apply automated fixes --------- Co-authored-by: YiFang Xiao <yifang.xiao@noreply.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
2877e1bb0b
commit
c15cbbf607
|
@ -4,6 +4,7 @@
|
|||
#include "instances.hh"
|
||||
#include <set>
|
||||
#include <QBuffer>
|
||||
#include <utility>
|
||||
|
||||
namespace Instances {
|
||||
|
||||
|
@ -27,7 +28,7 @@ Group::Group( Config::Group const & cfgGroup,
|
|||
auto dictMap = Dictionary::dictToMap( allDictionaries );
|
||||
|
||||
for ( auto const & dict : cfgGroup.dictionaries ) {
|
||||
std::string dictId = dict.id.toStdString();
|
||||
std::string const dictId = dict.id.toStdString();
|
||||
|
||||
if ( dictMap.contains( dictId ) ) {
|
||||
groupDicts.insert( dictId, dictMap[ dictId ] );
|
||||
|
@ -37,9 +38,8 @@ Group::Group( Config::Group const & cfgGroup,
|
|||
|
||||
// Remove inactive dictionaries
|
||||
if ( !inactiveGroup.dictionaries.isEmpty() ) {
|
||||
set< string, std::less<> > inactiveSet;
|
||||
for ( auto const & dict : inactiveGroup.dictionaries ) {
|
||||
string dictId = dict.id.toStdString();
|
||||
string const dictId = dict.id.toStdString();
|
||||
groupDicts.remove( dictId );
|
||||
dictOrderList.removeOne( dictId );
|
||||
}
|
||||
|
@ -51,15 +51,15 @@ Group::Group( Config::Group const & cfgGroup,
|
|||
}
|
||||
}
|
||||
|
||||
Group::Group( QString const & name_ ):
|
||||
Group::Group( QString name_ ):
|
||||
id( 0 ),
|
||||
name( name_ )
|
||||
name( std::move( name_ ) )
|
||||
{
|
||||
}
|
||||
|
||||
Group::Group( unsigned id_, QString const & name_ ):
|
||||
Group::Group( unsigned id_, QString name_ ):
|
||||
id( id_ ),
|
||||
name( name_ )
|
||||
name( std::move( name_ ) )
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -102,9 +102,9 @@ void Group::checkMutedDictionaries( Config::MutedDictionaries * mutedDictionarie
|
|||
Config::MutedDictionaries temp;
|
||||
|
||||
for ( auto const & dict : dictionaries ) {
|
||||
QString id = QString::fromStdString( dict->getId() );
|
||||
if ( mutedDictionaries->contains( id ) )
|
||||
temp.insert( id );
|
||||
auto dictId = QString::fromStdString( dict->getId() );
|
||||
if ( mutedDictionaries->contains( dictId ) )
|
||||
temp.insert( dictId );
|
||||
}
|
||||
*mutedDictionaries = temp;
|
||||
}
|
||||
|
@ -139,9 +139,9 @@ void complementDictionaryOrder( Group & group,
|
|||
for ( unsigned x = inactiveDictionaries.dictionaries.size(); x--; )
|
||||
presentIds.insert( inactiveDictionaries.dictionaries[ x ]->getId() );
|
||||
|
||||
for ( unsigned x = 0; x < dicts.size(); ++x ) {
|
||||
if ( presentIds.find( dicts[ x ]->getId() ) == presentIds.end() )
|
||||
group.dictionaries.push_back( dicts[ x ] );
|
||||
for ( const auto & dict : dicts ) {
|
||||
if ( presentIds.find( dict->getId() ) == presentIds.end() )
|
||||
group.dictionaries.push_back( dict );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -149,7 +149,7 @@ void updateNames( Config::Group & group, vector< sptr< Dictionary::Class > > con
|
|||
{
|
||||
|
||||
for ( unsigned x = group.dictionaries.size(); x--; ) {
|
||||
std::string id = group.dictionaries[ x ].id.toStdString();
|
||||
std::string const id = group.dictionaries[ x ].id.toStdString();
|
||||
|
||||
for ( unsigned y = allDictionaries.size(); y--; )
|
||||
if ( allDictionaries[ y ]->getId() == id ) {
|
||||
|
@ -161,8 +161,8 @@ void updateNames( Config::Group & group, vector< sptr< Dictionary::Class > > con
|
|||
|
||||
void updateNames( Config::Groups & groups, vector< sptr< Dictionary::Class > > const & allDictionaries )
|
||||
{
|
||||
for ( int x = 0; x < groups.size(); ++x )
|
||||
updateNames( groups[ x ], allDictionaries );
|
||||
for ( auto & group : groups )
|
||||
updateNames( group, allDictionaries );
|
||||
}
|
||||
|
||||
void updateNames( Config::Class & cfg, vector< sptr< Dictionary::Class > > const & allDictionaries )
|
||||
|
|
|
@ -33,9 +33,9 @@ struct Group
|
|||
Config::Group const & inactiveGroup );
|
||||
|
||||
/// Creates an empty group.
|
||||
explicit Group( QString const & name_ );
|
||||
explicit Group( QString name_ );
|
||||
|
||||
Group( unsigned id, QString const & name_ );
|
||||
Group( unsigned id, QString name_ );
|
||||
|
||||
/// Makes the configuration group from the current contents.
|
||||
Config::Group makeConfigGroup();
|
||||
|
|
|
@ -168,11 +168,28 @@ void DictHeadwords::savePos()
|
|||
bool DictHeadwords::eventFilter( QObject * obj, QEvent * ev )
|
||||
{
|
||||
if ( obj == ui.headersListView && ev->type() == QEvent::KeyPress ) {
|
||||
QKeyEvent * kev = static_cast< QKeyEvent * >( ev );
|
||||
auto * kev = dynamic_cast< QKeyEvent * >( ev );
|
||||
if ( kev->key() == Qt::Key_Return || kev->key() == Qt::Key_Enter ) {
|
||||
itemClicked( ui.headersListView->currentIndex() );
|
||||
return true;
|
||||
}
|
||||
else if ( kev->key() == Qt::Key_Up ) {
|
||||
auto index = ui.headersListView->currentIndex();
|
||||
if ( index.row() == 0 )
|
||||
return true;
|
||||
auto preIndex = ui.headersListView->model()->index( index.row() - 1, index.column() );
|
||||
ui.headersListView->setCurrentIndex( preIndex );
|
||||
return true;
|
||||
}
|
||||
else if ( kev->key() == Qt::Key_Down ) {
|
||||
auto index = ui.headersListView->currentIndex();
|
||||
//last row.
|
||||
if ( index.row() == ui.headersListView->model()->rowCount() - 1 )
|
||||
return true;
|
||||
auto preIndex = ui.headersListView->model()->index( index.row() + 1, index.column() );
|
||||
ui.headersListView->setCurrentIndex( preIndex );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return QDialog::eventFilter( obj, ev );
|
||||
}
|
||||
|
@ -278,12 +295,11 @@ void DictHeadwords::showHeadwordsNumber()
|
|||
.arg( QString::number( model->totalCount() ), QString::number( proxy->rowCount() ) ) );
|
||||
}
|
||||
|
||||
// TODO , the ui and the code mixed together , this is not the right way to do this. need future refactor
|
||||
void DictHeadwords::loadAllSortedWords( QProgressDialog & progress )
|
||||
{
|
||||
const int headwordsNumber = model->totalCount();
|
||||
|
||||
QMutexLocker _( &mutex );
|
||||
QMutexLocker const _( &mutex );
|
||||
if ( sortedWords.isEmpty() ) {
|
||||
QSet< QString > allHeadwords;
|
||||
|
||||
|
@ -330,10 +346,10 @@ void DictHeadwords::saveHeadersToFile()
|
|||
exportPath = QDir::homePath();
|
||||
}
|
||||
|
||||
QString fileName = QFileDialog::getSaveFileName( this,
|
||||
tr( "Save headwords to file" ),
|
||||
exportPath,
|
||||
tr( "Text files (*.txt);;All files (*.*)" ) );
|
||||
QString const fileName = QFileDialog::getSaveFileName( this,
|
||||
tr( "Save headwords to file" ),
|
||||
exportPath,
|
||||
tr( "Text files (*.txt);;All files (*.*)" ) );
|
||||
if ( fileName.size() == 0 )
|
||||
return;
|
||||
|
||||
|
|
|
@ -2422,7 +2422,10 @@ void MainWindow::translateInputFinished( bool checkModifiers )
|
|||
respondToTranslationRequest( word, checkModifiers );
|
||||
}
|
||||
|
||||
void MainWindow::respondToTranslationRequest( QString const & word, bool checkModifiers, QString const & scrollTo )
|
||||
void MainWindow::respondToTranslationRequest( QString const & word,
|
||||
bool checkModifiers,
|
||||
QString const & scrollTo,
|
||||
bool focus )
|
||||
{
|
||||
if ( !word.isEmpty() ) {
|
||||
Qt::KeyboardModifiers mods = QApplication::keyboardModifiers();
|
||||
|
@ -2436,7 +2439,9 @@ void MainWindow::respondToTranslationRequest( QString const & word, bool checkMo
|
|||
activateWindow();
|
||||
}
|
||||
|
||||
focusArticleView();
|
||||
if ( focus ) {
|
||||
focusArticleView();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3618,7 +3623,7 @@ void MainWindow::headwordReceived( const QString & word, const QString & ID )
|
|||
{
|
||||
toggleMainWindow( true );
|
||||
setInputLineText( word, WildcardPolicy::EscapeWildcards, NoPopupChange );
|
||||
respondToTranslationRequest( word, false, ArticleView::scrollToFromDictionaryId( ID ) );
|
||||
respondToTranslationRequest( word, false, ArticleView::scrollToFromDictionaryId( ID ), false );
|
||||
}
|
||||
|
||||
void MainWindow::updateFavoritesMenu()
|
||||
|
|
|
@ -249,7 +249,10 @@ private:
|
|||
|
||||
QString unescapeTabHeader( QString const & header );
|
||||
|
||||
void respondToTranslationRequest( QString const & word, bool checkModifiers, QString const & scrollTo = QString() );
|
||||
void respondToTranslationRequest( QString const & word,
|
||||
bool checkModifiers,
|
||||
QString const & scrollTo = QString(),
|
||||
bool focus = true );
|
||||
|
||||
void updateSuggestionList();
|
||||
void updateSuggestionList( QString const & text );
|
||||
|
|
Loading…
Reference in a new issue