2013-08-28 03:38:29 +01:00
/* Copyright 2013 MultiMC Contributors
*
* Licensed under the Apache License , Version 2.0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
2013-09-17 23:00:35 +01:00
# include "MultiMC.h"
2013-08-28 03:38:29 +01:00
# include "OneSixModEditDialog.h"
# include "ModEditDialogCommon.h"
# include "ui_OneSixModEditDialog.h"
2013-09-17 23:00:35 +01:00
# include "logic/ModList.h"
# include "logic/OneSixVersion.h"
# include "logic/EnabledItemFilter.h"
# include "logic/lists/ForgeVersionList.h"
# include "gui/versionselectdialog.h"
2013-09-20 00:21:48 +01:00
# include "ProgressDialog.h"
2013-09-17 23:00:35 +01:00
2013-08-28 03:38:29 +01:00
# include <pathutils.h>
# include <QFileDialog>
2013-09-20 00:21:48 +01:00
# include <QMessageBox>
2013-08-28 03:38:29 +01:00
# include <QDebug>
# include <QEvent>
# include <QKeyEvent>
OneSixModEditDialog : : OneSixModEditDialog ( OneSixInstance * inst , QWidget * parent ) :
m_inst ( inst ) ,
QDialog ( parent ) ,
ui ( new Ui : : OneSixModEditDialog )
{
ui - > setupUi ( this ) ;
2013-09-15 23:54:39 +01:00
//libraries!
2013-08-28 03:38:29 +01:00
{
2013-09-15 23:54:39 +01:00
m_version = m_inst - > getFullVersion ( ) ;
2013-09-20 00:21:48 +01:00
main_model = new EnabledItemFilter ( this ) ;
main_model - > setActive ( true ) ;
main_model - > setSourceModel ( m_version . data ( ) ) ;
ui - > libraryTreeView - > setModel ( main_model ) ;
2013-09-15 23:54:39 +01:00
ui - > libraryTreeView - > installEventFilter ( this ) ;
2013-09-20 00:21:48 +01:00
ui - > mainClassEdit - > setText ( m_version - > mainClass ) ;
updateButtons ( ) ;
2013-08-28 03:38:29 +01:00
}
// Loader mods
{
ensureFolderPathExists ( m_inst - > loaderModsDir ( ) ) ;
m_mods = m_inst - > loaderModList ( ) ;
ui - > loaderModTreeView - > setModel ( m_mods . data ( ) ) ;
ui - > loaderModTreeView - > installEventFilter ( this ) ;
m_mods - > startWatching ( ) ;
}
// resource packs
{
ensureFolderPathExists ( m_inst - > resourcePacksDir ( ) ) ;
m_resourcepacks = m_inst - > resourcePackList ( ) ;
ui - > resPackTreeView - > setModel ( m_resourcepacks . data ( ) ) ;
ui - > resPackTreeView - > installEventFilter ( this ) ;
m_resourcepacks - > startWatching ( ) ;
}
}
OneSixModEditDialog : : ~ OneSixModEditDialog ( )
{
m_mods - > stopWatching ( ) ;
m_resourcepacks - > stopWatching ( ) ;
delete ui ;
}
2013-09-20 00:21:48 +01:00
void OneSixModEditDialog : : updateButtons ( )
{
bool customVersion = m_inst - > versionIsCustom ( ) ;
ui - > customizeBtn - > setEnabled ( ! customVersion ) ;
ui - > revertBtn - > setEnabled ( customVersion ) ;
}
void OneSixModEditDialog : : on_customizeBtn_clicked ( )
{
if ( m_inst - > customizeVersion ( ) )
{
m_version = m_inst - > getFullVersion ( ) ;
main_model - > setSourceModel ( m_version . data ( ) ) ;
updateButtons ( ) ;
}
}
void OneSixModEditDialog : : on_revertBtn_clicked ( )
{
auto reply = QMessageBox : : question ( this , tr ( " Revert? " ) , tr ( " Do you want to revert the version of this instance to its original configuration? " ) , QMessageBox : : Yes | QMessageBox : : No ) ;
if ( reply = = QMessageBox : : Yes )
{
if ( m_inst - > revertCustomVersion ( ) )
{
m_version = m_inst - > getFullVersion ( ) ;
main_model - > setSourceModel ( m_version . data ( ) ) ;
updateButtons ( ) ;
}
}
}
2013-09-17 23:00:35 +01:00
void OneSixModEditDialog : : on_forgeBtn_clicked ( )
{
VersionSelectDialog vselect ( MMC - > forgelist ( ) , this ) ;
vselect . setFilter ( 1 , m_inst - > currentVersionId ( ) ) ;
if ( vselect . exec ( ) & & vselect . selectedVersion ( ) )
{
2013-09-20 00:21:48 +01:00
if ( m_inst - > versionIsCustom ( ) )
{
auto reply = QMessageBox : : question ( this , tr ( " Revert? " ) , tr ( " This will revert any changes you did to the version up to this point. Is that OK? " ) , QMessageBox : : Yes | QMessageBox : : No ) ;
if ( reply = = QMessageBox : : Yes )
{
m_inst - > revertCustomVersion ( ) ;
m_inst - > customizeVersion ( ) ;
{
m_version = m_inst - > getFullVersion ( ) ;
main_model - > setSourceModel ( m_version . data ( ) ) ;
updateButtons ( ) ;
}
}
else return ;
}
ForgeVersionPtr forge = vselect . selectedVersion ( ) . dynamicCast < ForgeVersion > ( ) ;
if ( ! forge )
return ;
auto entry = MMC - > metacache ( ) - > resolveEntry ( " minecraftforge " , forge - > filename ) ;
if ( entry - > stale )
{
DownloadJob * fjob = new DownloadJob ( " Forge download " ) ;
fjob - > add ( forge - > universal_url , entry ) ;
ProgressDialog dlg ( this ) ;
dlg . exec ( fjob ) ;
if ( dlg . result ( ) = = QDialog : : Accepted )
{
// install
}
else
{
// failed to download forge :/
}
}
else
{
// install
}
2013-09-17 23:00:35 +01:00
}
}
2013-08-28 03:38:29 +01:00
bool OneSixModEditDialog : : loaderListFilter ( QKeyEvent * keyEvent )
{
switch ( keyEvent - > key ( ) )
{
case Qt : : Key_Delete :
on_rmModBtn_clicked ( ) ;
return true ;
case Qt : : Key_Plus :
on_addModBtn_clicked ( ) ;
return true ;
default :
break ;
}
return QDialog : : eventFilter ( ui - > loaderModTreeView , keyEvent ) ;
}
bool OneSixModEditDialog : : resourcePackListFilter ( QKeyEvent * keyEvent )
{
switch ( keyEvent - > key ( ) )
{
case Qt : : Key_Delete :
on_rmResPackBtn_clicked ( ) ;
return true ;
case Qt : : Key_Plus :
on_addResPackBtn_clicked ( ) ;
return true ;
default :
break ;
}
return QDialog : : eventFilter ( ui - > resPackTreeView , keyEvent ) ;
}
bool OneSixModEditDialog : : eventFilter ( QObject * obj , QEvent * ev )
{
if ( ev - > type ( ) ! = QEvent : : KeyPress )
{
return QDialog : : eventFilter ( obj , ev ) ;
}
QKeyEvent * keyEvent = static_cast < QKeyEvent * > ( ev ) ;
if ( obj = = ui - > loaderModTreeView )
return loaderListFilter ( keyEvent ) ;
if ( obj = = ui - > resPackTreeView )
return resourcePackListFilter ( keyEvent ) ;
return QDialog : : eventFilter ( obj , ev ) ;
}
void OneSixModEditDialog : : on_buttonBox_rejected ( )
{
close ( ) ;
}
void OneSixModEditDialog : : on_addModBtn_clicked ( )
{
2013-09-08 18:08:26 +01:00
QStringList fileNames = QFileDialog : : getOpenFileNames ( this , QApplication : : translate ( " LegacyModEditDialog " , " Select Loader Mods " ) ) ;
2013-08-28 03:38:29 +01:00
for ( auto filename : fileNames )
{
m_mods - > stopWatching ( ) ;
m_mods - > installMod ( QFileInfo ( filename ) ) ;
m_mods - > startWatching ( ) ;
}
}
void OneSixModEditDialog : : on_rmModBtn_clicked ( )
{
int first , last ;
auto list = ui - > loaderModTreeView - > selectionModel ( ) - > selectedRows ( ) ;
if ( ! lastfirst ( list , first , last ) )
return ;
m_mods - > stopWatching ( ) ;
m_mods - > deleteMods ( first , last ) ;
m_mods - > startWatching ( ) ;
}
void OneSixModEditDialog : : on_viewModBtn_clicked ( )
{
openDirInDefaultProgram ( m_inst - > loaderModsDir ( ) , true ) ;
}
void OneSixModEditDialog : : on_addResPackBtn_clicked ( )
{
2013-09-08 17:13:09 +01:00
QStringList fileNames = QFileDialog : : getOpenFileNames ( this , QApplication : : translate ( " LegacyModEditDialog " , " Select Resource Packs " ) ) ;
2013-08-28 03:38:29 +01:00
for ( auto filename : fileNames )
{
m_resourcepacks - > stopWatching ( ) ;
m_resourcepacks - > installMod ( QFileInfo ( filename ) ) ;
m_resourcepacks - > startWatching ( ) ;
}
}
void OneSixModEditDialog : : on_rmResPackBtn_clicked ( )
{
int first , last ;
auto list = ui - > resPackTreeView - > selectionModel ( ) - > selectedRows ( ) ;
if ( ! lastfirst ( list , first , last ) )
return ;
m_resourcepacks - > stopWatching ( ) ;
m_resourcepacks - > deleteMods ( first , last ) ;
m_resourcepacks - > startWatching ( ) ;
}
void OneSixModEditDialog : : on_viewResPackBtn_clicked ( )
{
openDirInDefaultProgram ( m_inst - > resourcePacksDir ( ) , true ) ;
}