2019-10-04 22:47:54 +02:00
# include " vfs_dialog_tab.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
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
2019-07-21 09:44:03 +02:00
vfs_dialog_tab : : vfs_dialog_tab ( vfs_settings_info settingsInfo , std : : shared_ptr < gui_settings > guiSettings , std : : shared_ptr < emu_settings > emuSettings , QWidget * parent )
: QWidget ( parent ) , m_info ( std : : move ( settingsInfo ) ) , m_gui_settings ( std : : move ( guiSettings ) ) , m_emu_settings ( std : : move ( emuSettings ) )
2017-06-15 12:22:06 +02:00
{
2017-09-06 19:00:49 +02:00
m_dirList = 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
{
2018-02-08 23:01:43 +01:00
QListWidgetItem * item = new QListWidgetItem ( dir , m_dirList ) ;
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 )
selected_item = new QListWidgetItem ( current_dir , m_dirList ) ;
selected_item - > setSelected ( true ) ;
2017-09-06 19:00:49 +02:00
m_dirList - > setMinimumWidth ( m_dirList - > 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 ) ;
2020-01-03 20:16:58 +01:00
QPushButton * removeDir = new QPushButton ( QStringLiteral ( " - " ) ) ;
removeDir - > setToolTip ( tr ( " Remove directory " ) ) ;
2019-07-21 10:07:20 +02:00
removeDir - > setFixedWidth ( removeDir - > sizeHint ( ) . height ( ) ) ; // Make button square
removeDir - > setEnabled ( false ) ;
connect ( removeDir , & QAbstractButton : : clicked , this , & vfs_dialog_tab : : RemoveDirectory ) ;
2017-06-15 12:22:06 +02:00
QHBoxLayout * selectedConfigLayout = new QHBoxLayout ;
2018-04-07 19:36:54 +02:00
m_selectedConfigLabel = new QLabel ( current_dir . isEmpty ( ) ? EmptyPath : current_dir ) ;
2020-04-06 20:22:33 +02:00
selectedConfigLayout - > addWidget ( new QLabel ( tr ( " %0 directory: " ) . arg ( m_info . name ) ) ) ;
2017-09-06 19:00:49 +02:00
selectedConfigLayout - > addWidget ( m_selectedConfigLabel ) ;
2017-06-15 12:22:06 +02:00
selectedConfigLayout - > addStretch ( ) ;
2019-07-21 10:07:20 +02:00
selectedConfigLayout - > addWidget ( addDir ) ;
selectedConfigLayout - > addWidget ( removeDir ) ;
2017-06-15 12:22:06 +02:00
QVBoxLayout * vbox = new QVBoxLayout ;
2017-09-06 19:00:49 +02:00
vbox - > addWidget ( m_dirList ) ;
2017-06-15 12:22:06 +02:00
vbox - > addLayout ( selectedConfigLayout ) ;
setLayout ( vbox ) ;
2018-02-08 23:01:43 +01:00
connect ( m_dirList , & QListWidget : : currentItemChanged , [ this ] ( QListWidgetItem * current , QListWidgetItem * )
2017-06-15 12:22:06 +02:00
{
2018-04-07 19:36:54 +02:00
if ( ! current )
return ;
2018-02-08 23:01:43 +01:00
m_selectedConfigLabel - > setText ( current - > text ( ) . isEmpty ( ) ? EmptyPath : current - > text ( ) ) ;
2017-06-15 12:22:06 +02:00
} ) ;
2019-07-21 10:07:20 +02:00
connect ( m_dirList , & QListWidget : : currentRowChanged , [ this , removeDir ] ( int row )
{
SetCurrentRow ( row ) ;
removeDir - > setEnabled ( row > 0 ) ;
} ) ;
2017-06-15 12:22:06 +02:00
}
2018-02-08 23:01:43 +01:00
void vfs_dialog_tab : : SetSettings ( )
2017-06-15 12:22:06 +02:00
{
QStringList allDirs ;
2017-09-06 19:00:49 +02:00
for ( int i = 0 ; i < m_dirList - > count ( ) ; + + i )
2017-06-15 12:22:06 +02:00
{
2017-09-06 19:00:49 +02:00
allDirs + = m_dirList - > 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
const std : : string new_dir = m_selectedConfigLabel - > text ( ) = = EmptyPath ? " " : sstr ( m_selectedConfigLabel - > text ( ) ) ;
m_info . cfg_node - > from_string ( new_dir ) ;
m_emu_settings - > SetSetting ( m_info . settingLoc , new_dir ) ;
2017-06-15 12:22:06 +02:00
}
void vfs_dialog_tab : : Reset ( )
{
2017-09-06 19:00:49 +02:00
m_dirList - > clear ( ) ;
2018-04-07 19:36:54 +02:00
m_dirList - > setCurrentItem ( new QListWidgetItem ( qstr ( m_info . cfg_node - > def ) , m_dirList ) ) ;
2017-06-15 12:22:06 +02:00
}
void vfs_dialog_tab : : AddNewDirectory ( )
{
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 + = ' / ' ;
m_dirList - > setCurrentItem ( new QListWidgetItem ( dir , m_dirList ) ) ;
2017-06-15 12:22:06 +02:00
}
2019-07-21 10:07:20 +02:00
void vfs_dialog_tab : : RemoveDirectory ( )
{
QListWidgetItem * item = m_dirList - > takeItem ( m_currentRow ) ;
delete item ;
}