diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-08-10 18:34:08 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-08-11 01:07:15 +0200 |
commit | 1782d5ad9a646ca2a6fab90da5f04c879ddaecd4 (patch) | |
tree | 9537ecd66dad2fbcb083da2ed07191727a8e10ef /gui/IconPickerDialog.cpp | |
parent | bf5f5091ef6daeaf7067f4fc8973eb068ddc52fc (diff) | |
download | MultiMC-1782d5ad9a646ca2a6fab90da5f04c879ddaecd4.tar MultiMC-1782d5ad9a646ca2a6fab90da5f04c879ddaecd4.tar.gz MultiMC-1782d5ad9a646ca2a6fab90da5f04c879ddaecd4.tar.lz MultiMC-1782d5ad9a646ca2a6fab90da5f04c879ddaecd4.tar.xz MultiMC-1782d5ad9a646ca2a6fab90da5f04c879ddaecd4.zip |
Implement icon picker, bring back raster icons.
Diffstat (limited to 'gui/IconPickerDialog.cpp')
-rw-r--r-- | gui/IconPickerDialog.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/gui/IconPickerDialog.cpp b/gui/IconPickerDialog.cpp new file mode 100644 index 00000000..27e7f3b6 --- /dev/null +++ b/gui/IconPickerDialog.cpp @@ -0,0 +1,88 @@ +#include "IconPickerDialog.h" +#include "instancedelegate.h" +#include "ui_IconPickerDialog.h" +#include <IconListModel.h> + +IconPickerDialog::IconPickerDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::IconPickerDialog) +{ + ui->setupUi(this); + auto contentsWidget = ui->iconView; + contentsWidget->setViewMode(QListView::IconMode); + contentsWidget->setFlow(QListView::LeftToRight); + contentsWidget->setIconSize(QSize(48, 48)); + contentsWidget->setMovement(QListView::Static); + contentsWidget->setResizeMode(QListView::Adjust); + contentsWidget->setSelectionMode(QAbstractItemView::SingleSelection); + contentsWidget->setSpacing(5); + contentsWidget->setWordWrap(false); + contentsWidget->setWrapping(true); + contentsWidget->setUniformItemSizes(true); + contentsWidget->setTextElideMode(Qt::ElideRight); + contentsWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + contentsWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + contentsWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + contentsWidget->setItemDelegate(new ListViewDelegate()); + + IconList * list = IconList::instance(); + contentsWidget->setModel(list); + + connect + ( + contentsWidget, + SIGNAL(doubleClicked(QModelIndex)), + SLOT(activated(QModelIndex)) + ); + + connect + ( + contentsWidget->selectionModel(), + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + SLOT(selectionChanged(QItemSelection,QItemSelection)) + ); +} + +void IconPickerDialog::activated ( QModelIndex index ) +{ + selectedIconKey = index.data(Qt::UserRole).toString(); + accept(); +} + + +void IconPickerDialog::selectionChanged ( QItemSelection selected, QItemSelection deselected ) +{ + if(selected.empty()) + return; + + QString key = selected.first().indexes().first().data(Qt::UserRole).toString(); + if(!key.isEmpty()) + selectedIconKey = key; +} + +int IconPickerDialog::exec ( QString selection ) +{ + IconList * list = IconList::instance(); + auto contentsWidget = ui->iconView; + selectedIconKey = selection; + + + int index_nr = list->getIconIndex(selection); + auto model_index = list->index(index_nr); + contentsWidget->selectionModel()->select(model_index, QItemSelectionModel::Current | QItemSelectionModel::Select); + + QMetaObject::invokeMethod(this, "delayed_scroll", Qt::QueuedConnection, Q_ARG(QModelIndex,model_index)); + return QDialog::exec(); +} + +void IconPickerDialog::delayed_scroll ( QModelIndex model_index ) +{ + auto contentsWidget = ui->iconView; + contentsWidget->scrollTo(model_index); +} + + +IconPickerDialog::~IconPickerDialog() +{ + delete ui; +} |