diff --git a/mainwindow.cpp b/mainwindow.cpp index ca41346..e4d98dc 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -6,11 +6,13 @@ #include #include #include +#include #include "filesystem.hpp" #include "functions.hpp" #include "mainwindow.hpp" #include "databasewindow.hpp" +#include "progresswindow.hpp" #include "tv_rename.hpp" void MainWindow::chooseFile() { @@ -364,6 +366,13 @@ MainWindow::MainWindow( const Glib::RefPtr< Gtk::Application > &ptr ) submenu->append(*item); + item = new Gtk::MenuItem(); + item->set_label("Change pattern"); + item->signal_activate().connect( + sigc::mem_fun( *this, &MainWindow::dbPattern ) ); + + submenu->append(*item); + std::vector left_aligned_widgets = {m_label_show, m_label_language, m_entry_show, m_combo_language, m_label_dir, m_entry_dir, m_label_pattern, m_entry_pattern, m_button_pattern, @@ -482,8 +491,7 @@ MainWindow::MainWindow( const Glib::RefPtr< Gtk::Application > &ptr ) sigc::mem_fun( *this, &MainWindow::patternHelp ) ); // show everything except possible shows and items related to them - box->show(); - box->show_all_children(); + show_all_children(); m_check_linux->set_active( true ); m_label_possible->hide(); m_combo_possible->hide(); @@ -492,7 +500,18 @@ MainWindow::MainWindow( const Glib::RefPtr< Gtk::Application > &ptr ) } void MainWindow::dbUpdate() { - updateDB( !m_check_linux->get_active() ); + auto *pw = new ProgressWindow; + app->add_window( *pw ); + auto app_ptr = app; + + pw->signal_hide().connect( + [pw, app_ptr](){ + app_ptr->remove_window( *pw ); + delete pw; + }); + std::thread t( updateDB, !m_check_linux->get_active(), pw ); + t.detach(); + pw->show(); } void MainWindow::dbClean() { @@ -500,7 +519,18 @@ void MainWindow::dbClean() { } void MainWindow::dbRefresh() { - refreshDB( !m_check_linux->get_active() ); + auto *pw = new ProgressWindow; + app->add_window( *pw ); + auto app_ptr = app; + + pw->signal_hide().connect( + [pw, app_ptr](){ + app_ptr->remove_window( *pw ); + delete pw; + }); + std::thread t( refreshDB, !m_check_linux->get_active(), pw ); + t.detach(); + pw->show(); } void MainWindow::dbAdd() { @@ -526,12 +556,26 @@ void MainWindow::dbAdd() { std::cout << show << " " << language_code << " " << show_id << std::endl; - addToDB( show, m_entry_dir->get_text(), language_code, show_id, - m_entry_pattern->get_text(), !m_check_linux->get_active(), m_check_dvd->get_active() ); + auto *pw = new ProgressWindow; + app->add_window( *pw ); + auto app_ptr = app; + + pw->signal_hide().connect( + [pw, app_ptr](){ + app_ptr->remove_window( *pw ); + delete pw; + }); + + std::thread t( addToDB, std::ref( show ), m_entry_dir->get_text(), + std::ref( language_code ), std::ref( show_id ), + m_entry_pattern->get_text(), !m_check_linux->get_active(), + m_check_dvd->get_active(), pw ); + t.detach(); + pw->show(); } void MainWindow::dbManage() { - auto *dbWindow = new DatabaseWindow( !m_check_linux->get_active() ); + auto *dbWindow = new DatabaseWindow( !m_check_linux->get_active(), app ); app->add_window( *dbWindow ); auto app_ptr = app; @@ -543,3 +587,33 @@ void MainWindow::dbManage() { dbWindow->show(); } + +void MainWindow::dbPattern() { + // Create a custom dialog box for pattern change + std::unique_ptr dialog( new Gtk::Dialog( "Change pattern", *this ) ); + dialog->set_default_size( 350, 0 ); + auto content = dialog->get_content_area(); + + auto pattern = getDBPattern(); + + std::unique_ptr pattern_entry( new Gtk::Entry ); + content->pack_start( *pattern_entry ); + + dialog->add_button( "_Cancel", Gtk::RESPONSE_CANCEL ); + dialog->add_button( "_OK", Gtk::RESPONSE_OK ); + dialog->show_all_children(); + + dialog->signal_response().connect( + [&pattern, &pattern_entry]( int response ){ + if( response == Gtk::RESPONSE_OK ) + pattern = pattern_entry->get_text(); + }); + + pattern_entry->set_text( pattern ); + + auto response = dialog->run(); + + if( response == Gtk::RESPONSE_OK ) { + changeDBPattern( pattern ); + } +} diff --git a/mainwindow.hpp b/mainwindow.hpp index acb0b83..640481e 100644 --- a/mainwindow.hpp +++ b/mainwindow.hpp @@ -35,6 +35,7 @@ private: void dbRefresh(); void dbAdd(); void dbManage(); + void dbPattern(); protected: Gtk::Button *m_button_dir = new Gtk::Button();