From d351537afeb41a38c5cb3eb5f3a06b13002cdab3 Mon Sep 17 00:00:00 2001 From: mhogomchungu Date: Tue, 7 Jan 2025 14:12:52 +0300 Subject: [PATCH] make it possible for library tab to be affected key combo --- src/basicdownloader.cpp | 2 +- src/batchdownloader.cpp | 2 +- src/configure.cpp | 6 +++--- src/library.cpp | 5 +++-- src/playlistdownloader.cpp | 2 +- src/tableWidget.cpp | 32 ++++++++++++++------------- src/tableWidget.h | 40 +++++++++++++++++++++++++++++++++- src/utility.cpp | 22 ------------------- src/utility.h | 44 +++++++++++++++++++++++++++++++++++++- 9 files changed, 108 insertions(+), 47 deletions(-) diff --git a/src/basicdownloader.cpp b/src/basicdownloader.cpp index e07691c9..1064e157 100644 --- a/src/basicdownloader.cpp +++ b/src/basicdownloader.cpp @@ -33,7 +33,7 @@ basicdownloader::basicdownloader( const Context& ctx ) : m_settings( m_ctx.Settings() ), m_ui( m_ctx.Ui() ), m_tabManager( m_ctx.TabManager() ), - m_tableList( *m_ui.bdTableWidgetList,m_ctx.mainWidget().font() ), + m_tableList( *m_ui.bdTableWidgetList,0,m_ctx.mainWidget().font() ), m_hiddenTable( m_bogusTableOriginal,m_ctx.mainWidget().font(),0,m_settings.textAlignment() ) { m_ui.pbPasteClipboard->setIcon( m_settings.getIcon( "clipboard" ) ) ; diff --git a/src/batchdownloader.cpp b/src/batchdownloader.cpp index 2c0b07c2..b2b09cff 100644 --- a/src/batchdownloader.cpp +++ b/src/batchdownloader.cpp @@ -35,7 +35,7 @@ batchdownloader::batchdownloader( const Context& ctx ) : m_mainWindow( m_ctx.mainWidget() ), m_tabManager( m_ctx.TabManager() ), m_table( *m_ui.tableWidgetBD,m_ctx.mainWidget().font(),1,m_settings.textAlignment() ), - m_tableWidgetBDList( *m_ui.TableWidgetBatchDownloaderList,m_ctx.mainWidget().font() ), + m_tableWidgetBDList( *m_ui.TableWidgetBatchDownloaderList,0,m_ctx.mainWidget().font() ), m_defaultVideoThumbnail( m_settings.defaultVideoThumbnailIcon( settings::tabName::batch ) ), m_ccmd( m_ctx,*m_ui.pbBDCancel,m_settings ), m_ccmd_metadata( m_ctx,*m_ui.pbBDCancel,m_settings ), diff --git a/src/configure.cpp b/src/configure.cpp index daf28d47..02cb9273 100644 --- a/src/configure.cpp +++ b/src/configure.cpp @@ -38,9 +38,9 @@ configure::configure( const Context& ctx ) : m_mainWindow( m_ctx.mainWidget() ), m_tabManager( m_ctx.TabManager() ), m_engines( m_ctx.Engines() ), - m_tablePresetOptions( *m_ui.tableWidgetConfigurePresetOptions,m_ctx.mainWidget().font() ), - m_tableUrlToDefaultEngine( *m_ui.tableWidgetConfigureUrl,m_ctx.mainWidget().font() ), - m_tableDefaultDownloadOptions( *m_ui.tableWidgetEnginesDefaultOptions,m_ctx.mainWidget().font() ), + m_tablePresetOptions( *m_ui.tableWidgetConfigurePresetOptions,0,m_ctx.mainWidget().font() ), + m_tableUrlToDefaultEngine( *m_ui.tableWidgetConfigureUrl,0,m_ctx.mainWidget().font() ), + m_tableDefaultDownloadOptions( *m_ui.tableWidgetEnginesDefaultOptions,0,m_ctx.mainWidget().font() ), m_presetOptions( m_ctx,m_settings ), m_downloadDefaultOptions( m_ctx,"downloadDefaultOptions.json" ), m_downloadEngineDefaultOptions( m_ctx,"downloadEngineDefaultOptions.json" ) diff --git a/src/library.cpp b/src/library.cpp index a46fef0a..6cef31e3 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -33,7 +33,7 @@ library::library( const Context& ctx ) : m_settings( m_ctx.Settings() ), m_enabled( m_settings.enableLibraryTab() ), m_ui( m_ctx.Ui() ), - m_table( *m_ui.tableWidgetLibrary,m_ctx.mainWidget().font() ), + m_table( *m_ui.tableWidgetLibrary,0,m_ctx.mainWidget().font() ), m_downloadFolder( QDir::fromNativeSeparators( m_settings.downloadFolder() ) ), m_currentPath( m_downloadFolder ), m_folderIcon( m_settings.getIcon( "folder" ).pixmap( 30,40 ) ), @@ -187,8 +187,9 @@ void library::init_done() } } -void library::keyPressed( utility::mainWindowKeyCombo ) +void library::keyPressed( utility::mainWindowKeyCombo m ) { + utility::keyPressed( m_table,m ) ; } void library::enableAll() diff --git a/src/playlistdownloader.cpp b/src/playlistdownloader.cpp index d5f8d4fb..ad1ae025 100644 --- a/src/playlistdownloader.cpp +++ b/src/playlistdownloader.cpp @@ -34,7 +34,7 @@ playlistdownloader::playlistdownloader( Context& ctx ) : m_mainWindow( m_ctx.mainWidget() ), m_tabManager( m_ctx.TabManager() ), m_table( *m_ui.tableWidgetPl,m_ctx.mainWidget().font(),1,m_settings.textAlignment() ), - m_subscriptionTable( *m_ui.tableWidgetPlDownloaderSubscription,m_ctx.mainWidget().font() ), + m_subscriptionTable( *m_ui.tableWidgetPlDownloaderSubscription,0,m_ctx.mainWidget().font() ), m_ccmd( m_ctx,*m_ui.pbPLCancel,m_settings ), m_defaultVideoThumbnailIcon( m_settings.defaultVideoThumbnailIcon( settings::tabName::playlist ) ), m_banner( m_table ), diff --git a/src/tableWidget.cpp b/src/tableWidget.cpp index 0eb21142..a355bca8 100644 --- a/src/tableWidget.cpp +++ b/src/tableWidget.cpp @@ -386,22 +386,10 @@ void tableWidget::removeRow( int s ) void tableWidget::removeAllSelected() { - std::vector< int > selected ; + utility::removeAllSelected( m_table,[ this ]( int row ){ - auto col = m_table.columnCount() - 1 ; - - for( int i = 0 ; i < m_table.rowCount() ; i++ ){ - - if( m_table.item( i,col )->isSelected() ){ - - selected.emplace_back( i ) ; - } - } - - for( auto it = selected.rbegin() ; it != selected.rend() ; it++ ){ - - this->removeRow( *it ) ; - } + this->removeRow( row ) ; + } ) ; } void tableWidget::hideRow( int row ) @@ -580,3 +568,17 @@ void tableWidget::setColumnNumbersTo( int m ) m_table.insertColumn( 0 ) ; } } + +baseRemoveAllSelected::~baseRemoveAllSelected() +{ +} + +void tableMiniWidgetRemoveAllSelected( QTableWidget& table, + std::unique_ptr< baseRemoveAllSelected > function ) +{ + utility::removeAllSelected( table,[ function = std::move( function ) ]( int row ){ + + //auto& m = *function ; + ( *function )( row ) ; + } ) ; +} diff --git a/src/tableWidget.h b/src/tableWidget.h index c88fdfb5..682281ee 100644 --- a/src/tableWidget.h +++ b/src/tableWidget.h @@ -339,11 +339,21 @@ class tableWidget Qt::Alignment m_textAlignment ; } ; +class baseRemoveAllSelected +{ +public: + virtual void operator()( int ) = 0 ; + virtual ~baseRemoveAllSelected() ; +private: +} ; + +void tableMiniWidgetRemoveAllSelected( QTableWidget&,std::unique_ptr< baseRemoveAllSelected > ) ; + template< typename Stuff,size_t COLUMN_COUNT > class tableMiniWidget { public: - tableMiniWidget( QTableWidget& t,const QFont& ) : m_table( t ) + tableMiniWidget( QTableWidget& t,int s,const QFont& ) : m_table( t ),m_startPosition( s ) { tableWidget::setTableWidget( m_table,tableWidget::tableWidgetOptions() ) ; } @@ -380,6 +390,29 @@ class tableMiniWidget auto header = m_table.horizontalHeader() ; QObject::connect( header,&QHeaderView::sectionClicked,std::move( t ) ) ; + } + void removeAllSelected() + { + class meaw : public baseRemoveAllSelected + { + public: + meaw( tableMiniWidget< Stuff,COLUMN_COUNT >& m ) : m_parent( m ) + { + } + void operator()( int row ) override + { + m_parent.removeRow( row ) ; + } + ~meaw() + { + } + private: + tableMiniWidget< Stuff,COLUMN_COUNT >& m_parent ; + } ; + + auto s = std::make_unique< meaw >( *this ) ; + + tableMiniWidgetRemoveAllSelected( m_table,std::move( s ) ) ; } void setUpHeaderMenu() { @@ -405,6 +438,10 @@ class tableMiniWidget { return m_table.rowCount() ; } + int startPosition() const + { + return m_startPosition ; + } void selectRow( QTableWidgetItem * current,QTableWidgetItem * previous,int s ) { if( previous ){ @@ -865,6 +902,7 @@ class tableMiniWidget } int m_columnClicked = -1 ; QTableWidget& m_table ; + int m_startPosition ; std::vector< Stuff > m_stuff ; }; diff --git a/src/utility.cpp b/src/utility.cpp index 72d95548..09dd24ae 100644 --- a/src/utility.cpp +++ b/src/utility.cpp @@ -2448,28 +2448,6 @@ bool utility::Qt6Version() #endif } -void utility::keyPressed( tableWidget& table,utility::mainWindowKeyCombo m ) -{ - if( m == utility::mainWindowKeyCombo::CTRL_A ){ - - auto& t = table.get() ; - - auto first = table.startPosition() ; - - for( int row = 0 ; row < t.rowCount() ; row++ ){ - - for( int column = first ; column < t.columnCount() ; column++ ){ - - t.item( row,column )->setSelected( true ) ; - } - } - - }else if( m == utility::mainWindowKeyCombo::CTRL_D ){ - - table.removeAllSelected() ; - } -} - QString utility::OSXApplicationDirPath() { return QCoreApplication::applicationDirPath() ; diff --git a/src/utility.h b/src/utility.h index e4ebcfdd..36b23e21 100644 --- a/src/utility.h +++ b/src/utility.h @@ -504,7 +504,49 @@ namespace utility enum class mainWindowKeyCombo{ CTRL_D,CTRL_A } ; - void keyPressed( tableWidget&,utility::mainWindowKeyCombo ) ; + template< typename Table > + inline void keyPressed( Table& table,utility::mainWindowKeyCombo m ) + { + if( m == utility::mainWindowKeyCombo::CTRL_A ){ + + auto& t = table.get() ; + + auto first = table.startPosition() ; + + for( int row = 0 ; row < t.rowCount() ; row++ ){ + + for( int column = first ; column < t.columnCount() ; column++ ){ + + t.item( row,column )->setSelected( true ) ; + } + } + + }else if( m == utility::mainWindowKeyCombo::CTRL_D ){ + + table.removeAllSelected() ; + } + } + + template< typename Function > + void removeAllSelected( QTableWidget& t,Function function ) + { + std::vector< int > selected ; + + auto col = t.columnCount() - 1 ; + + for( int i = 0 ; i < t.rowCount() ; i++ ){ + + if( t.item( i,col )->isSelected() ){ + + selected.emplace_back( i ) ; + } + } + + for( auto it = selected.rbegin() ; it != selected.rend() ; it++ ){ + + function( *it ) ; + } + } struct downLoadOptions {