2020-12-05 13:08:24 +01:00
# include "vfs_dialog_tab.h"
2020-11-06 18:45:06 +01:00
# include "Utilities/Config.h"
2017-06-15 12:22:06 +02:00
# include <QFileDialog>
# include <QCoreApplication>
2020-02-22 20:42:49 +01:00
# include <QHBoxLayout>
2019-07-21 10:07:20 +02:00
# include <QPushButton>
2017-06-15 12:22:06 +02:00
2021-09-23 20:12:06 +02:00
constexpr auto qstr = QString : : fromStdString ;
2017-11-27 22:31:15 +01:00
inline std : : string sstr ( const QString & _in ) { return _in . toStdString ( ) ; }
2017-06-15 12:22:06 +02:00
2021-09-23 20:12:06 +02:00
vfs_dialog_tab : : vfs_dialog_tab ( vfs_settings_info settingsInfo , std : : shared_ptr < gui_settings > guiSettings , QWidget * parent )
: QWidget ( parent ) , m_info ( std : : move ( settingsInfo ) ) , m_gui_settings ( std : : move ( guiSettings ) )
2017-06-15 12:22:06 +02:00
{
2021-04-10 14:39:18 +02:00
m_dir_dist = new QListWidget ( this ) ;
2017-06-15 12:22:06 +02:00
QStringList alldirs = m_gui_settings - > GetValue ( m_info . listLocation ) . toStringList ( ) ;
2018-02-08 23:01:43 +01:00
const QString current_dir = qstr ( m_info . cfg_node - > to_string ( ) ) ;
QListWidgetItem * selected_item = nullptr ;
2017-06-15 12:22:06 +02:00
2017-09-19 20:07:04 +02:00
for ( const QString & dir : alldirs )
2017-06-15 12:22:06 +02:00
{
2021-04-10 14:39:18 +02:00
QListWidgetItem * item = new QListWidgetItem ( dir , m_dir_dist ) ;
2018-02-08 23:01:43 +01:00
if ( dir = = current_dir )
selected_item = item ;
2017-06-15 12:22:06 +02:00
}
2017-07-11 01:27:58 +02:00
2018-02-08 23:01:43 +01:00
// We must show the currently selected config.
if ( ! selected_item )
2021-04-10 14:39:18 +02:00
selected_item = new QListWidgetItem ( current_dir , m_dir_dist ) ;
2018-02-08 23:01:43 +01:00
selected_item - > setSelected ( true ) ;
2021-04-10 14:39:18 +02:00
m_dir_dist - > setMinimumWidth ( m_dir_dist - > sizeHintForColumn ( 0 ) ) ;
2017-06-15 12:22:06 +02:00
2020-01-03 20:16:58 +01:00
QPushButton * addDir = new QPushButton ( QStringLiteral ( " + " ) ) ;
addDir - > setToolTip ( tr ( " Add new directory " ) ) ;
2019-07-21 10:07:20 +02:00
addDir - > setFixedWidth ( addDir - > sizeHint ( ) . height ( ) ) ; // Make button square
connect ( addDir , & QAbstractButton : : clicked , this , & vfs_dialog_tab : : AddNewDirectory ) ;
2021-04-10 14:39:18 +02:00
QPushButton * button_remove_dir = new QPushButton ( QStringLiteral ( " - " ) ) ;
button_remove_dir - > setToolTip ( tr ( " Remove directory " ) ) ;
button_remove_dir - > setFixedWidth ( button_remove_dir - > sizeHint ( ) . height ( ) ) ; // Make button square
button_remove_dir - > setEnabled ( false ) ;
connect ( button_remove_dir , & QAbstractButton : : clicked , this , & vfs_dialog_tab : : RemoveDirectory ) ;
2019-07-21 10:07:20 +02:00
2021-04-10 14:39:18 +02:00
QHBoxLayout * selected_config_layout = new QHBoxLayout ;
m_selected_config_label = new QLabel ( current_dir . isEmpty ( ) ? EmptyPath : current_dir ) ;
selected_config_layout - > addWidget ( new QLabel ( tr ( " %0 directory: " ) . arg ( m_info . name ) ) ) ;
selected_config_layout - > addWidget ( m_selected_config_label ) ;
selected_config_layout - > addStretch ( ) ;
selected_config_layout - > addWidget ( addDir ) ;
selected_config_layout - > addWidget ( button_remove_dir ) ;
2017-06-15 12:22:06 +02:00
QVBoxLayout * vbox = new QVBoxLayout ;
2021-04-10 14:39:18 +02:00
vbox - > addWidget ( m_dir_dist ) ;
vbox - > addLayout ( selected_config_layout ) ;
2017-06-15 12:22:06 +02:00
setLayout ( vbox ) ;
2021-04-10 14:39:18 +02:00
connect ( m_dir_dist , & QListWidget : : currentRowChanged , button_remove_dir , [ this , button_remove_dir ] ( int row )
2017-06-15 12:22:06 +02:00
{
2021-04-10 14:39:18 +02:00
QListWidgetItem * item = m_dir_dist - > item ( row ) ;
m_selected_config_label - > setText ( ( item & & ! item - > text ( ) . isEmpty ( ) ) ? item - > text ( ) : EmptyPath ) ;
button_remove_dir - > setEnabled ( item & & row > 0 ) ;
2019-07-21 10:07:20 +02:00
} ) ;
2017-06-15 12:22:06 +02:00
}
2021-04-07 23:05:18 +02:00
void vfs_dialog_tab : : SetSettings ( ) const
2017-06-15 12:22:06 +02:00
{
QStringList allDirs ;
2021-04-10 14:39:18 +02:00
for ( int i = 0 ; i < m_dir_dist - > count ( ) ; + + i )
2017-06-15 12:22:06 +02:00
{
2021-04-10 14:39:18 +02:00
allDirs + = m_dir_dist - > item ( i ) - > text ( ) ;
2017-06-15 12:22:06 +02:00
}
m_gui_settings - > SetValue ( m_info . listLocation , allDirs ) ;
2018-02-08 23:01:43 +01:00
2021-04-10 14:39:18 +02:00
const std : : string new_dir = m_selected_config_label - > text ( ) = = EmptyPath ? " " : sstr ( m_selected_config_label - > text ( ) ) ;
2018-02-08 23:01:43 +01:00
m_info . cfg_node - > from_string ( new_dir ) ;
2017-06-15 12:22:06 +02:00
}
2021-04-07 23:05:18 +02:00
void vfs_dialog_tab : : Reset ( ) const
2017-06-15 12:22:06 +02:00
{
2021-04-10 14:39:18 +02:00
m_dir_dist - > clear ( ) ;
m_dir_dist - > setCurrentItem ( new QListWidgetItem ( qstr ( m_info . cfg_node - > def ) , m_dir_dist ) ) ;
2017-06-15 12:22:06 +02:00
}
2021-04-07 23:05:18 +02:00
void vfs_dialog_tab : : AddNewDirectory ( ) const
2017-06-15 12:22:06 +02:00
{
2020-02-15 15:33:14 +01:00
QString dir = QFileDialog : : getExistingDirectory ( nullptr , tr ( " Choose a directory " ) , QCoreApplication : : applicationDirPath ( ) , QFileDialog : : DontResolveSymlinks ) ;
2018-04-07 19:36:54 +02:00
if ( dir . isEmpty ( ) )
return ;
if ( ! dir . endsWith ( " / " ) )
dir + = ' / ' ;
2021-04-10 14:39:18 +02:00
m_dir_dist - > setCurrentItem ( new QListWidgetItem ( dir , m_dir_dist ) ) ;
2017-06-15 12:22:06 +02:00
}
2019-07-21 10:07:20 +02:00
2021-04-07 23:05:18 +02:00
void vfs_dialog_tab : : RemoveDirectory ( ) const
2019-07-21 10:07:20 +02:00
{
2021-04-10 14:39:18 +02:00
const int row = m_dir_dist - > currentRow ( ) ;
if ( row > 0 )
{
QListWidgetItem * item = m_dir_dist - > item ( row ) ;
delete item ;
}
2019-07-21 10:07:20 +02:00
}