From a63c7340a632c634733271332a43aac82bc73799 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 26 Aug 2013 06:30:11 +0200 Subject: Nuke the old instance model, LONG LIVE THE NEW ONE --- gui/instancemodel.cpp | 126 -------------------------------------------------- gui/instancemodel.h | 43 ----------------- gui/mainwindow.cpp | 35 +++++++------- gui/mainwindow.h | 4 +- 4 files changed, 21 insertions(+), 187 deletions(-) delete mode 100644 gui/instancemodel.cpp delete mode 100644 gui/instancemodel.h (limited to 'gui') diff --git a/gui/instancemodel.cpp b/gui/instancemodel.cpp deleted file mode 100644 index 39dea34b..00000000 --- a/gui/instancemodel.cpp +++ /dev/null @@ -1,126 +0,0 @@ -#include "instancemodel.h" -#include -#include -#include -//#include "iconcache.h" - -InstanceModel::InstanceModel ( const InstanceList& instances, QObject *parent ) - : QAbstractListModel ( parent ), m_instances ( &instances ) -{ - currentInstancesNumber = m_instances->count(); - connect(m_instances,SIGNAL(instanceAdded(int)),this,SLOT(onInstanceAdded(int))); - connect(m_instances,SIGNAL(instanceChanged(int)),this,SLOT(onInstanceChanged(int))); - connect(m_instances,SIGNAL(invalidated()),this,SLOT(onInvalidated())); -} - -void InstanceModel::onInstanceAdded ( int index ) -{ - beginInsertRows(QModelIndex(), index, index); - currentInstancesNumber ++; - endInsertRows(); -} - -void InstanceModel::onInstanceChanged ( int index ) -{ - QModelIndex mx = InstanceModel::index(index); - dataChanged(mx,mx); -} - -void InstanceModel::onInvalidated() -{ - beginResetModel(); - currentInstancesNumber = m_instances->count(); - endResetModel(); -} - - -int InstanceModel::rowCount ( const QModelIndex& parent ) const -{ - Q_UNUSED ( parent ); - return m_instances->count(); -} - -QModelIndex InstanceModel::index ( int row, int column, const QModelIndex& parent ) const -{ - Q_UNUSED ( parent ); - if ( row < 0 || row >= currentInstancesNumber ) - return QModelIndex(); - return createIndex ( row, column, ( void* ) m_instances->at ( row ).data() ); -} - -QVariant InstanceModel::data ( const QModelIndex& index, int role ) const -{ - if ( !index.isValid() ) - { - return QVariant(); - } - BaseInstance *pdata = static_cast ( index.internalPointer() ); - switch ( role ) - { - case InstancePointerRole: - { - QVariant v = qVariantFromValue((void *) pdata); - return v; - } - case Qt::DisplayRole: - { - return pdata->name(); - } - case Qt::ToolTipRole: - { - return pdata->instanceRoot(); - } - case Qt::DecorationRole: - { - IconList * ic = IconList::instance(); - // FIXME: replace with an icon cache/renderer - /* - QString path = ":/icons/instances/"; - path += pdata->iconKey(); - QIcon icon(path); - */ - QString key = pdata->iconKey(); - return ic->getIcon(key); - //else return QIcon(":/icons/multimc/scalable/apps/multimc.svg"); - } - // for now. - case KCategorizedSortFilterProxyModel::CategorySortRole: - case KCategorizedSortFilterProxyModel::CategoryDisplayRole: - { - return pdata->group(); - } - default: - break; - } - return QVariant(); -} - -Qt::ItemFlags InstanceModel::flags ( const QModelIndex& index ) const -{ - Qt::ItemFlags f; - if ( index.isValid() ) - { - f |= ( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); - } - return f; -} - -InstanceProxyModel::InstanceProxyModel ( QObject *parent ) - : KCategorizedSortFilterProxyModel ( parent ) -{ - // disable since by default we are globally sorting by date: - setCategorizedModel(true); -} - -bool InstanceProxyModel::subSortLessThan ( - const QModelIndex& left, const QModelIndex& right ) const -{ - BaseInstance *pdataLeft = static_cast ( left.internalPointer() ); - BaseInstance *pdataRight = static_cast ( right.internalPointer() ); - //kDebug() << *pdataLeft << *pdataRight; - return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0; - //return pdataLeft->name() < pdataRight->name(); -} - -#include "instancemodel.moc" - diff --git a/gui/instancemodel.h b/gui/instancemodel.h deleted file mode 100644 index 52b58081..00000000 --- a/gui/instancemodel.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once - -#include -#include "categorizedsortfilterproxymodel.h" -#include "logic/lists/InstanceList.h" -#include - -class InstanceModel : public QAbstractListModel -{ - Q_OBJECT -public: - enum AdditionalRoles - { - InstancePointerRole = 0x34B1CB48 ///< Return pointer to real instance - }; - explicit InstanceModel ( const InstanceList& instances, - QObject *parent = 0 ); - - QModelIndex index ( int row, int column = 0, - const QModelIndex& parent = QModelIndex() ) const; - int rowCount ( const QModelIndex& parent = QModelIndex() ) const; - QVariant data ( const QModelIndex& index, int role ) const; - Qt::ItemFlags flags ( const QModelIndex& index ) const; - -public slots: - void onInstanceAdded(int index); - void onInstanceChanged(int index); - void onInvalidated(); - -private: - const InstanceList* m_instances; - int currentInstancesNumber; -}; - -class InstanceProxyModel : public KCategorizedSortFilterProxyModel -{ -public: - explicit InstanceProxyModel ( QObject *parent = 0 ); - -protected: - virtual bool subSortLessThan ( const QModelIndex& left, const QModelIndex& right ) const; -}; - diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 5b6e034c..52971acf 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -63,7 +63,6 @@ #include #include -#include "instancemodel.h" #include "instancedelegate.h" #include "IconPickerDialog.h" #include "LabeledToolButton.h" @@ -108,12 +107,11 @@ MainWindow::MainWindow ( QWidget *parent ) : view->setUniformItemWidths(true); view->installEventFilter(this); - model = new InstanceModel ( instList,this ); proxymodel = new InstanceProxyModel ( this ); proxymodel->setSortRole ( KCategorizedSortFilterProxyModel::CategorySortRole ); proxymodel->setFilterRole ( KCategorizedSortFilterProxyModel::CategorySortRole ); //proxymodel->setDynamicSortFilter ( true ); - proxymodel->setSourceModel ( model ); + proxymodel->setSourceModel ( &instList ); proxymodel->sort ( 0 ); view->setFrameShape ( QFrame::NoFrame ); @@ -137,6 +135,7 @@ MainWindow::MainWindow ( QWidget *parent ) : this, SLOT(instanceChanged(const QModelIndex &,const QModelIndex &)) ); + connect(&instList,SIGNAL(dataIsInvalid()),SLOT(selectionBad())); // Load the instances. FIXME: this is not the place I'd say. instList.loadList(); @@ -160,7 +159,6 @@ MainWindow::~MainWindow() { delete ui; delete proxymodel; - delete model; delete drawer; delete assets_downloader; } @@ -228,7 +226,7 @@ void MainWindow::instanceActivated ( QModelIndex index ) { if(!index.isValid()) return; - BaseInstance * inst = (BaseInstance *) index.data(InstanceModel::InstancePointerRole).value(); + BaseInstance * inst = (BaseInstance *) index.data(InstanceList::InstancePointerRole).value(); doLogin(); } @@ -380,8 +378,7 @@ void MainWindow::on_actionDeleteInstance_triggered() QString("This is permanent! Are you sure?\nAbout to delete: ") + m_selectedInstance->name()); if (response == QMessageBox::Yes) { - QDir(m_selectedInstance->instanceRoot()).removeRecursively(); - instList.loadList(); + m_selectedInstance->nuke(); } } } @@ -596,25 +593,32 @@ void MainWindow::on_actionInstanceSettings_triggered() void MainWindow::instanceChanged( const QModelIndex& current, const QModelIndex& previous ) { - QString iconKey = "infinity"; - - if(current.isValid() && nullptr != (m_selectedInstance = (BaseInstance *) current.data(InstanceModel::InstancePointerRole).value())) + if(current.isValid() && nullptr != (m_selectedInstance = (BaseInstance *) current.data(InstanceList::InstancePointerRole).value())) { ui->instanceToolBar->setEnabled(true); - iconKey = m_selectedInstance->iconKey(); + QString iconKey = m_selectedInstance->iconKey(); renameButton->setText(m_selectedInstance->name()); ui->actionChangeInstLWJGLVersion->setEnabled(m_selectedInstance->menuActionEnabled("actionChangeInstLWJGLVersion")); ui->actionEditInstMods->setEnabled(m_selectedInstance->menuActionEnabled("actionEditInstMods")); statusBar()->clearMessage(); statusBar()->showMessage(m_selectedInstance->getStatusbarDescription()); + IconList * iconListModel = IconList::instance(); + auto ico =iconListModel->getIcon(iconKey); + ui->actionChangeInstIcon->setIcon(ico); } else { - statusBar()->clearMessage(); - ui->instanceToolBar->setEnabled(false); - renameButton->setText("Rename Instance"); + selectionBad(); } - +} + +void MainWindow::selectionBad() +{ + m_selectedInstance = nullptr; + QString iconKey = "infinity"; + statusBar()->clearMessage(); + ui->instanceToolBar->setEnabled(false); + renameButton->setText("Rename Instance"); IconList * iconListModel = IconList::instance(); auto ico =iconListModel->getIcon(iconKey); ui->actionChangeInstIcon->setIcon(ico); @@ -622,7 +626,6 @@ void MainWindow::instanceChanged( const QModelIndex& current, const QModelIndex& - void MainWindow::on_actionEditInstNotes_triggered() { if (!m_selectedInstance) diff --git a/gui/mainwindow.h b/gui/mainwindow.h index 6456346d..42f118b1 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -24,7 +24,6 @@ class LabeledToolButton; class QLabel; -class InstanceModel; class InstanceProxyModel; class KCategorizedView; class KCategoryDrawer; @@ -119,6 +118,8 @@ public slots: void instanceChanged (const QModelIndex & current,const QModelIndex & previous); + void selectionBad(); + void startTask(Task *task); void launchInstance(BaseInstance *inst, LoginResponse response); @@ -130,7 +131,6 @@ private: Ui::MainWindow *ui; KCategoryDrawer * drawer; KCategorizedView * view; - InstanceModel * model; InstanceProxyModel * proxymodel; InstanceList instList; MinecraftProcess *proc; -- cgit v1.2.3