DatabaseWindow: UI changes
This commit is contained in:
parent
564c7b09e2
commit
adeed21976
@ -1,36 +1,30 @@
|
|||||||
#include <gtkmm/box.h>
|
#include <gtkmm/box.h>
|
||||||
#include <gtkmm/button.h>
|
#include <gtkmm/button.h>
|
||||||
|
#include <gtkmm/filechooserdialog.h>
|
||||||
|
#include <gtkmm/liststore.h>
|
||||||
#include <gtkmm/messagedialog.h>
|
#include <gtkmm/messagedialog.h>
|
||||||
#include <gtkmm/scrolledwindow.h>
|
#include <gtkmm/scrolledwindow.h>
|
||||||
|
#include <iostream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "databasewindow.hpp"
|
#include "databasewindow.hpp"
|
||||||
#include "filesystem.hpp"
|
#include "filesystem.hpp"
|
||||||
#include "functions.hpp"
|
#include "functions.hpp"
|
||||||
|
#include "gtkfunctions.hpp"
|
||||||
#include "progresswindow.hpp"
|
#include "progresswindow.hpp"
|
||||||
#include "tv_rename.hpp"
|
#include "tv_rename.hpp"
|
||||||
|
|
||||||
DatabaseWindow::~DatabaseWindow() {
|
DatabaseWindow::~DatabaseWindow() {
|
||||||
auto children = get_children();
|
auto children = get_children();
|
||||||
size_t max = children.size();
|
freeChildren( children );
|
||||||
size_t index{};
|
|
||||||
while ( index < max ) {
|
|
||||||
if ( auto *p = dynamic_cast< Gtk::Container * >( children[index] ) ) {
|
|
||||||
auto temp = p->get_children();
|
|
||||||
children.insert( children.end(), temp.begin(), temp.end() );
|
|
||||||
max = children.size();
|
|
||||||
}
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
for ( int i = max - 1; i >= 0; i-- ) {
|
|
||||||
delete children[i];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseWindow::DatabaseWindow( bool _linux,
|
DatabaseWindow::DatabaseWindow(
|
||||||
Glib::RefPtr< Gtk::Application > _app )
|
bool _linux, std::map< std::string, std::string > &_language_map,
|
||||||
: linux( _linux ), app( _app ) {
|
Glib::RefPtr< Gtk::Application > _app )
|
||||||
|
: linux( _linux ), language_map( _language_map ), app( _app ) {
|
||||||
set_title( "Database" );
|
set_title( "Database" );
|
||||||
|
property_modal().set_value( true );
|
||||||
|
|
||||||
set_default_size( 550, 350 );
|
set_default_size( 550, 350 );
|
||||||
set_resizable( false );
|
set_resizable( false );
|
||||||
@ -87,19 +81,37 @@ DatabaseWindow::DatabaseWindow( bool _linux,
|
|||||||
row[m_columns_database.m_col_show] = x["SHOW"];
|
row[m_columns_database.m_col_show] = x["SHOW"];
|
||||||
row[m_columns_database.m_col_path] = x["PATH"];
|
row[m_columns_database.m_col_path] = x["PATH"];
|
||||||
row[m_columns_database.m_col_lang] = x["LANGUAGE"];
|
row[m_columns_database.m_col_lang] = x["LANGUAGE"];
|
||||||
|
row[m_columns_database.m_col_lang_full] = language_map[x["LANGUAGE"]];
|
||||||
row[m_columns_database.m_col_show_id] = x["TVID"];
|
row[m_columns_database.m_col_show_id] = x["TVID"];
|
||||||
row[m_columns_database.m_col_dvd] = x["DVD"] == "1";
|
row[m_columns_database.m_col_dvd] = x["DVD"] == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tree_database->append_column( "Show", m_columns_database.m_col_show );
|
m_tree_database->append_column( "Show", m_columns_database.m_col_show );
|
||||||
m_tree_database->append_column_editable( "Path",
|
m_tree_database->append_column( "Path", m_columns_database.m_col_path );
|
||||||
m_columns_database.m_col_path );
|
m_tree_database->append_column( "Language", m_combo_language );
|
||||||
m_tree_database->append_column_editable( "Language",
|
|
||||||
m_columns_database.m_col_lang );
|
|
||||||
m_tree_database->append_column_editable( "ID",
|
|
||||||
m_columns_database.m_col_show_id );
|
|
||||||
m_tree_database->append_column_editable( "DVD",
|
m_tree_database->append_column_editable( "DVD",
|
||||||
m_columns_database.m_col_dvd );
|
m_columns_database.m_col_dvd );
|
||||||
|
m_tree_database->signal_button_press_event().connect(
|
||||||
|
sigc::mem_fun( *this, &DatabaseWindow::treeViewClick ) );
|
||||||
|
|
||||||
|
auto model = Gtk::ListStore::create( m_columns_language );
|
||||||
|
m_combo_language.property_model().set_value( model );
|
||||||
|
m_combo_language.property_editable().set_value( true );
|
||||||
|
m_combo_language.property_text_column().set_value( 1 );
|
||||||
|
m_combo_language.property_has_entry().set_value( false );
|
||||||
|
|
||||||
|
m_combo_language.signal_changed().connect(
|
||||||
|
sigc::mem_fun( *this, &DatabaseWindow::languageChange ) );
|
||||||
|
|
||||||
|
for ( const auto &x : language_map ) {
|
||||||
|
auto row = model->append();
|
||||||
|
( *row )[m_columns_language.m_col_code] = x.first;
|
||||||
|
( *row )[m_columns_language.m_col_language] = x.second;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set text of m_combo_language to m_columns_database.m_col_lang_full
|
||||||
|
m_tree_database->get_column( 2 )->add_attribute(
|
||||||
|
m_combo_language, "text", m_columns_database.m_col_lang_full );
|
||||||
|
|
||||||
button_save->signal_clicked().connect(
|
button_save->signal_clicked().connect(
|
||||||
sigc::mem_fun( *this, &DatabaseWindow::save ) );
|
sigc::mem_fun( *this, &DatabaseWindow::save ) );
|
||||||
@ -114,6 +126,64 @@ DatabaseWindow::DatabaseWindow( bool _linux,
|
|||||||
show_all_children();
|
show_all_children();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DatabaseWindow::languageChange( const Glib::ustring &str,
|
||||||
|
const Gtk::TreeIter &it ) {
|
||||||
|
auto lang_row = *it;
|
||||||
|
auto database_row = *( m_model->get_iter( str ) );
|
||||||
|
database_row[m_columns_database.m_col_lang] =
|
||||||
|
std::string( lang_row[m_columns_language.m_col_code] );
|
||||||
|
database_row[m_columns_database.m_col_lang_full] =
|
||||||
|
std::string( lang_row[m_columns_language.m_col_language] );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DatabaseWindow::treeViewClick( GdkEventButton *event ) {
|
||||||
|
Gtk::TreeModel::Path path;
|
||||||
|
Gtk::TreeViewColumn *column;
|
||||||
|
// these variables are unused, but required for get_path_at_pos
|
||||||
|
int x_column, y_column;
|
||||||
|
m_tree_database->get_path_at_pos( event->x, event->y, path, column,
|
||||||
|
x_column, y_column );
|
||||||
|
if ( column->get_title() == "Show" ) {
|
||||||
|
// set default values
|
||||||
|
id_search = "_";
|
||||||
|
show_search = "_";
|
||||||
|
lang_search = "_";
|
||||||
|
sw.reset( new SearchWindow( show_search, id_search, lang_search,
|
||||||
|
language_map ) );
|
||||||
|
sw->signal_hide().connect(
|
||||||
|
sigc::mem_fun( *this, &DatabaseWindow::finishedSearch ) );
|
||||||
|
|
||||||
|
app->add_window( *sw );
|
||||||
|
sw->show();
|
||||||
|
} else if ( column->get_title() == "Path" ) {
|
||||||
|
Gtk::FileChooserDialog dialog( "Select a directory",
|
||||||
|
Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER );
|
||||||
|
dialog.set_transient_for( *this );
|
||||||
|
dialog.add_button( "_Cancel", Gtk::RESPONSE_CANCEL );
|
||||||
|
dialog.add_button( "Select", Gtk::RESPONSE_OK );
|
||||||
|
auto result = dialog.run();
|
||||||
|
if ( result == Gtk::RESPONSE_OK ) {
|
||||||
|
auto selection = m_tree_database->get_selection();
|
||||||
|
auto row = *( selection->get_selected() );
|
||||||
|
( *row )[m_columns_database.m_col_path] = dialog.get_filename();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseWindow::finishedSearch() {
|
||||||
|
app->remove_window( *sw );
|
||||||
|
sw.reset();
|
||||||
|
if ( id_search == "_" || show_search == "_" || lang_search == "_" )
|
||||||
|
return;
|
||||||
|
auto selection = m_tree_database->get_selection();
|
||||||
|
auto row = *( selection->get_selected() );
|
||||||
|
( *row )[m_columns_database.m_col_show] = show_search;
|
||||||
|
( *row )[m_columns_database.m_col_show_id] = id_search;
|
||||||
|
( *row )[m_columns_database.m_col_lang] = lang_search;
|
||||||
|
( *row )[m_columns_database.m_col_lang_full] = language_map[lang_search];
|
||||||
|
}
|
||||||
|
|
||||||
void DatabaseWindow::save() {
|
void DatabaseWindow::save() {
|
||||||
if ( changed_rows.size() == 0 )
|
if ( changed_rows.size() == 0 )
|
||||||
return;
|
return;
|
||||||
|
@ -1,15 +1,20 @@
|
|||||||
#ifndef GTKMM_DATABASE_WINDOW
|
#ifndef GTKMM_DATABASE_WINDOW
|
||||||
#define GTKMM_DATABASE_WINDOW
|
#define GTKMM_DATABASE_WINDOW
|
||||||
|
|
||||||
|
#include <gtkmm/cellrenderercombo.h>
|
||||||
#include <gtkmm/treestore.h>
|
#include <gtkmm/treestore.h>
|
||||||
#include <gtkmm/treeview.h>
|
#include <gtkmm/treeview.h>
|
||||||
#include <gtkmm/window.h>
|
#include <gtkmm/window.h>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
|
#include "searchwindow.hpp"
|
||||||
|
|
||||||
class DatabaseWindow : public Gtk::Window {
|
class DatabaseWindow : public Gtk::Window {
|
||||||
public:
|
public:
|
||||||
DatabaseWindow() = delete;
|
DatabaseWindow() = delete;
|
||||||
DatabaseWindow( bool _linux, Glib::RefPtr< Gtk::Application > _app );
|
DatabaseWindow( bool _linux,
|
||||||
|
std::map< std::string, std::string > &_language_map,
|
||||||
|
Glib::RefPtr< Gtk::Application > _app );
|
||||||
virtual ~DatabaseWindow();
|
virtual ~DatabaseWindow();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -18,6 +23,9 @@ private:
|
|||||||
void changed( const Gtk::TreeModel::Path & /*UNUSED*/,
|
void changed( const Gtk::TreeModel::Path & /*UNUSED*/,
|
||||||
const Gtk::TreeModel::iterator &row );
|
const Gtk::TreeModel::iterator &row );
|
||||||
void quit();
|
void quit();
|
||||||
|
bool treeViewClick( GdkEventButton *event );
|
||||||
|
void languageChange( const Glib::ustring &str, const Gtk::TreeIter &it );
|
||||||
|
void finishedSearch();
|
||||||
|
|
||||||
void errorPath( const std::string &path );
|
void errorPath( const std::string &path );
|
||||||
void errorID( const std::string &show_id );
|
void errorID( const std::string &show_id );
|
||||||
@ -28,6 +36,16 @@ private:
|
|||||||
protected:
|
protected:
|
||||||
Gtk::TreeView *m_tree_database = new Gtk::TreeView();
|
Gtk::TreeView *m_tree_database = new Gtk::TreeView();
|
||||||
|
|
||||||
|
class LanguageColumns : public Gtk::TreeModel::ColumnRecord {
|
||||||
|
public:
|
||||||
|
LanguageColumns() {
|
||||||
|
add( m_col_code );
|
||||||
|
add( m_col_language );
|
||||||
|
}
|
||||||
|
Gtk::TreeModelColumn< std::string > m_col_code;
|
||||||
|
Gtk::TreeModelColumn< std::string > m_col_language;
|
||||||
|
};
|
||||||
|
|
||||||
class DatabaseColumns : public Gtk::TreeModel::ColumnRecord {
|
class DatabaseColumns : public Gtk::TreeModel::ColumnRecord {
|
||||||
public:
|
public:
|
||||||
DatabaseColumns() {
|
DatabaseColumns() {
|
||||||
@ -35,6 +53,7 @@ protected:
|
|||||||
add( m_col_show );
|
add( m_col_show );
|
||||||
add( m_col_path );
|
add( m_col_path );
|
||||||
add( m_col_lang );
|
add( m_col_lang );
|
||||||
|
add( m_col_lang_full );
|
||||||
add( m_col_show_id );
|
add( m_col_show_id );
|
||||||
add( m_col_dvd );
|
add( m_col_dvd );
|
||||||
}
|
}
|
||||||
@ -42,15 +61,24 @@ protected:
|
|||||||
Gtk::TreeModelColumn< std::string > m_col_show;
|
Gtk::TreeModelColumn< std::string > m_col_show;
|
||||||
Gtk::TreeModelColumn< std::string > m_col_path;
|
Gtk::TreeModelColumn< std::string > m_col_path;
|
||||||
Gtk::TreeModelColumn< std::string > m_col_lang;
|
Gtk::TreeModelColumn< std::string > m_col_lang;
|
||||||
|
Gtk::TreeModelColumn< std::string > m_col_lang_full;
|
||||||
Gtk::TreeModelColumn< std::string > m_col_show_id;
|
Gtk::TreeModelColumn< std::string > m_col_show_id;
|
||||||
Gtk::TreeModelColumn< bool > m_col_dvd;
|
Gtk::TreeModelColumn< bool > m_col_dvd;
|
||||||
};
|
};
|
||||||
|
|
||||||
DatabaseColumns m_columns_database;
|
DatabaseColumns m_columns_database;
|
||||||
|
LanguageColumns m_columns_language;
|
||||||
|
|
||||||
Glib::RefPtr< Gtk::TreeStore > m_model;
|
Glib::RefPtr< Gtk::TreeStore > m_model;
|
||||||
|
Gtk::CellRendererCombo m_combo_language;
|
||||||
|
|
||||||
bool linux;
|
bool linux;
|
||||||
|
std::map< std::string, std::string > &language_map;
|
||||||
Glib::RefPtr< Gtk::Application > app;
|
Glib::RefPtr< Gtk::Application > app;
|
||||||
|
std::unique_ptr< SearchWindow > sw{ nullptr };
|
||||||
|
std::string show_search;
|
||||||
|
std::string id_search;
|
||||||
|
std::string lang_search;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GTKMM_MAIN_WINDOW
|
#endif // GTKMM_MAIN_WINDOW
|
||||||
|
Loading…
Reference in New Issue
Block a user