mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-27 23:34:06 +00:00
Auto created groups combining
This commit is contained in:
parent
54bcfb8031
commit
c6ea89e179
|
@ -520,6 +520,9 @@ DictGroupsWidget::DictGroupsWidget( QWidget * parent ):
|
||||||
#if QT_VERSION >= 0x040500
|
#if QT_VERSION >= 0x040500
|
||||||
setMovable( true );
|
setMovable( true );
|
||||||
#endif
|
#endif
|
||||||
|
setContextMenuPolicy( Qt::CustomContextMenu );
|
||||||
|
connect( this, SIGNAL( customContextMenuRequested( QPoint ) ),
|
||||||
|
this, SLOT( contextMenu( QPoint ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -627,6 +630,19 @@ void DictGroupsWidget::addNewGroup( QString const & name )
|
||||||
setUsesScrollButtons( count() > 3 );
|
setUsesScrollButtons( count() > 3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DictGroupsWidget::addUniqueGroup( const QString & name )
|
||||||
|
{
|
||||||
|
for( int n = 0; n < count(); n++ )
|
||||||
|
if( tabText( n ) == name )
|
||||||
|
{
|
||||||
|
setCurrentIndex( n );
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
addNewGroup( name );
|
||||||
|
return currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
void DictGroupsWidget::addAutoGroups()
|
void DictGroupsWidget::addAutoGroups()
|
||||||
{
|
{
|
||||||
if( !activeDicts )
|
if( !activeDicts )
|
||||||
|
@ -707,21 +723,10 @@ void DictGroupsWidget::addAutoGroups()
|
||||||
|
|
||||||
for( QStringList::ConstIterator gr = groupList.begin(); gr != groupList.end(); ++gr )
|
for( QStringList::ConstIterator gr = groupList.begin(); gr != groupList.end(); ++gr )
|
||||||
{
|
{
|
||||||
int n;
|
if( count() )
|
||||||
for( n = 0; n < count(); n++ )
|
setCurrentIndex( count() - 1 );
|
||||||
if( *gr == tabText( n ) )
|
|
||||||
{
|
|
||||||
setCurrentIndex( n );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( n >= count() )
|
addUniqueGroup( *gr );
|
||||||
{
|
|
||||||
// group not found - add it
|
|
||||||
if( count() )
|
|
||||||
setCurrentIndex( count() - 1 );
|
|
||||||
addNewGroup( *gr );
|
|
||||||
}
|
|
||||||
|
|
||||||
// add dictionaries into the current group
|
// add dictionaries into the current group
|
||||||
QVector< sptr<Dictionary::Class> > vd = dictMap[ *gr ];
|
QVector< sptr<Dictionary::Class> > vd = dictMap[ *gr ];
|
||||||
|
@ -772,3 +777,145 @@ void DictGroupsWidget::removeAllGroups()
|
||||||
delete w;
|
delete w;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DictGroupsWidget::contextMenu( QPoint const & pos )
|
||||||
|
{
|
||||||
|
int clickedGroup = tabBar()->tabAt( pos );
|
||||||
|
if( clickedGroup < 0 )
|
||||||
|
return;
|
||||||
|
QString name = tabText( clickedGroup );
|
||||||
|
if( name.length() != 7 || name.mid( 2, 3 ) != " - " )
|
||||||
|
return;
|
||||||
|
|
||||||
|
QMenu menu( this );
|
||||||
|
|
||||||
|
QAction *combineSourceAction = new QAction( QString( tr( "Combine groups by source language to \"%1->\"" ) )
|
||||||
|
.arg( name.left( 2 ) ), &menu );
|
||||||
|
combineSourceAction->setEnabled( false );
|
||||||
|
for( int i = 0; i < count(); i++ )
|
||||||
|
{
|
||||||
|
QString str = tabText( i );
|
||||||
|
if( i != clickedGroup && str.length() == 7 && str.mid( 2, 3 ) == " - " && str.startsWith( name.left( 2 ) ) )
|
||||||
|
{
|
||||||
|
combineSourceAction->setEnabled( true );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menu.addAction( combineSourceAction );
|
||||||
|
|
||||||
|
QAction *combineTargetAction = new QAction( QString( tr( "Combine groups by target language to \"->%1\"" ) )
|
||||||
|
.arg( name.right( 2 ) ), &menu );
|
||||||
|
combineTargetAction->setEnabled( false );
|
||||||
|
for( int i = 0; i < count(); i++ )
|
||||||
|
{
|
||||||
|
QString str = tabText( i );
|
||||||
|
if( i != clickedGroup && str.length() == 7 && str.mid( 2, 3 ) == " - " && str.endsWith( name.right( 2 ) ) )
|
||||||
|
{
|
||||||
|
combineTargetAction->setEnabled( true );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menu.addAction( combineTargetAction );
|
||||||
|
|
||||||
|
QAction *combineTwoSidedAction = NULL;
|
||||||
|
int secondGroup = -1;
|
||||||
|
if( name.left( 2 ) != name.right( 2 ) )
|
||||||
|
{
|
||||||
|
combineTwoSidedAction = new QAction( QString( tr( "Make two-side translate group \"%1-%2-%1\"" ) )
|
||||||
|
.arg( name.left( 2 ) ).arg( name.right( 2 ) ), &menu );
|
||||||
|
|
||||||
|
combineTwoSidedAction->setEnabled( false );
|
||||||
|
|
||||||
|
QString str = name.right( 2 ) + " - " + name.left( 2 );
|
||||||
|
for( int i = 0; i < count(); i++ )
|
||||||
|
{
|
||||||
|
if( str == tabText( i ) )
|
||||||
|
{
|
||||||
|
secondGroup = i;
|
||||||
|
combineTwoSidedAction->setEnabled( true );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.addAction( combineTwoSidedAction );
|
||||||
|
}
|
||||||
|
|
||||||
|
QAction *result = menu.exec( mapToGlobal( pos ) );
|
||||||
|
|
||||||
|
setUpdatesEnabled( false );
|
||||||
|
int targetGroup;
|
||||||
|
|
||||||
|
if( result && result == combineSourceAction )
|
||||||
|
{
|
||||||
|
QString grBase = name.left( 2 );
|
||||||
|
setCurrentIndex( clickedGroup );
|
||||||
|
targetGroup = addUniqueGroup( grBase + "->" );
|
||||||
|
|
||||||
|
for( int i = 0; i < count(); i++ )
|
||||||
|
{
|
||||||
|
QString str = tabText( i );
|
||||||
|
if( str.length() == 7 && str.mid( 2, 3 ) == " - " && str.startsWith( grBase ) )
|
||||||
|
{
|
||||||
|
setCurrentIndex( i );
|
||||||
|
vector< sptr< Dictionary::Class > > const & dicts = getCurrentModel()->getCurrentDictionaries();
|
||||||
|
|
||||||
|
setCurrentIndex( targetGroup );
|
||||||
|
DictListModel *model = getCurrentModel();
|
||||||
|
|
||||||
|
for( unsigned j = 0; j < dicts.size(); j++ )
|
||||||
|
model->addRow( QModelIndex(), dicts[ j ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setCurrentIndex( targetGroup );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( result && result == combineTargetAction )
|
||||||
|
{
|
||||||
|
QString grBase = name.right( 2 );
|
||||||
|
|
||||||
|
setCurrentIndex( clickedGroup );
|
||||||
|
targetGroup = addUniqueGroup( "->" + grBase );
|
||||||
|
|
||||||
|
for( int i = 0; i < count(); i++ )
|
||||||
|
{
|
||||||
|
QString str = tabText( i );
|
||||||
|
if( str.length() == 7 && str.mid( 2, 3 ) == " - " && str.endsWith( grBase ) )
|
||||||
|
{
|
||||||
|
setCurrentIndex( i );
|
||||||
|
vector< sptr< Dictionary::Class > > const & dicts = getCurrentModel()->getCurrentDictionaries();
|
||||||
|
|
||||||
|
setCurrentIndex( targetGroup );
|
||||||
|
DictListModel *model = getCurrentModel();
|
||||||
|
|
||||||
|
for( unsigned j = 0; j < dicts.size(); j++ )
|
||||||
|
model->addRow( QModelIndex(), dicts[ j ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setCurrentIndex( targetGroup );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( result && result == combineTwoSidedAction )
|
||||||
|
{
|
||||||
|
setCurrentIndex( clickedGroup );
|
||||||
|
targetGroup = addUniqueGroup( name + " - " + name.left( 2 ) );
|
||||||
|
QString str = name.right( 2 ) + " - " + name.left( 2 );
|
||||||
|
|
||||||
|
for( int i = 0; i < count(); i++ )
|
||||||
|
{
|
||||||
|
if( tabText( i ) == name || tabText( i ) == str )
|
||||||
|
{
|
||||||
|
setCurrentIndex( i );
|
||||||
|
vector< sptr< Dictionary::Class > > const & dicts = getCurrentModel()->getCurrentDictionaries();
|
||||||
|
|
||||||
|
setCurrentIndex( targetGroup );
|
||||||
|
DictListModel *model = getCurrentModel();
|
||||||
|
|
||||||
|
for( unsigned j = 0; j < dicts.size(); j++ )
|
||||||
|
model->addRow( QModelIndex(), dicts[ j ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setCurrentIndex( targetGroup );
|
||||||
|
}
|
||||||
|
|
||||||
|
setUpdatesEnabled( true );
|
||||||
|
}
|
||||||
|
|
|
@ -146,6 +146,10 @@ public:
|
||||||
/// Creates new empty group with the given name
|
/// Creates new empty group with the given name
|
||||||
void addNewGroup( QString const & );
|
void addNewGroup( QString const & );
|
||||||
|
|
||||||
|
/// Creates new empty group with the given name if no such group
|
||||||
|
/// and return it index
|
||||||
|
int addUniqueGroup( QString const & name );
|
||||||
|
|
||||||
void addAutoGroups();
|
void addAutoGroups();
|
||||||
|
|
||||||
/// Returns currently chosen group's name
|
/// Returns currently chosen group's name
|
||||||
|
@ -173,6 +177,9 @@ private:
|
||||||
std::vector< sptr< Dictionary::Class > > const * allDicts;
|
std::vector< sptr< Dictionary::Class > > const * allDicts;
|
||||||
std::vector< sptr< Dictionary::Class > > const * activeDicts;
|
std::vector< sptr< Dictionary::Class > > const * activeDicts;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void contextMenu( QPoint const & );
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void showDictionaryInfo( QString const & id );
|
void showDictionaryInfo( QString const & id );
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue