Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDlgListPicker.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "KisDlgListPicker.h"
8#include "ui_KisDlgListPicker.h"
9
10#include <QListWidgetItem>
11
12#include <kstandardguiitem.h>
13
14
16{
17
18};
19
20KisDlgListPicker::KisDlgListPicker(QString windowTitle, QString availableString, QString currentString,
21 QList<QString> available, QList<QVariant> availableData,
22 QList<QString> chosen, QList<QVariant> chosenData,
23 QWidget *parent) :
24 QDialog(parent),
25 ui(new Ui::KisDlgListPicker),
26 m_d(new Private)
27{
28 ui->setupUi(this);
29
30 this->setWindowTitle(windowTitle);
31 ui->label->setText(availableString);
32 ui->label_2->setText(currentString);
33
34 KGuiItem::assign(ui->btnBox->button(QDialogButtonBox::Ok), KStandardGuiItem::ok());
35 KGuiItem::assign(ui->btnBox->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
36
37 int i = 0;
38 Q_FOREACH(QString name, available) {
39 QListWidgetItem *item = new QListWidgetItem(name);
40 item->setData(Qt::UserRole, availableData[i]);
41 ui->lstAvailable->addItem(item);
42 i++;
43 }
44 i = 0;
45 Q_FOREACH(QString name, chosen) {
46 QListWidgetItem *item = new QListWidgetItem(name);
47 item->setData(Qt::UserRole, chosenData[i]);
48 ui->lstCurrent->addItem(item);
49 i++;
50 }
51
52 ui->lstAvailable->sortItems(); // sort alphabetically by name
53
54 connect(ui->btnAdd, SIGNAL(clicked()), SLOT(slotMoveRight()));
55 connect(ui->btnRemove, SIGNAL(clicked()), SLOT(slotMoveLeft()));
56
57 connect(ui->btnDown, SIGNAL(clicked()), SLOT(slotMoveDown()));
58 connect(ui->btnUp, SIGNAL(clicked()), SLOT(slotMoveUp()));
59}
60
65
67{
68 QList<QVariant> chosenData;
69 for (int i = 0; i < ui->lstCurrent->count(); i++) {
70 chosenData.append(ui->lstCurrent->item(i)->data(Qt::UserRole));
71 }
72 return chosenData;
73}
74
76{
77 QListWidgetItem *item = ui->lstAvailable->currentItem();
78 if (!item) return;
79
80 const int prevPosition = ui->lstAvailable->row(item) - 1;
81 const int newPosition = ui->lstCurrent->currentRow() + 1;
82
83 ui->lstAvailable->takeItem(ui->lstAvailable->row(item));
84 ui->lstAvailable->setCurrentRow(qMax(0, prevPosition));
85 ui->lstCurrent->insertItem(newPosition, item);
86 ui->lstCurrent->setCurrentItem(item);
87}
88
90{
91 QListWidgetItem *item = ui->lstCurrent->currentItem();
92 if (!item) return;
93
94 const int prevPosition = ui->lstCurrent->row(item) - 1;
95 const int newPosition = ui->lstAvailable->currentRow() + 1;
96
97 ui->lstCurrent->takeItem(ui->lstCurrent->row(item));
98 ui->lstCurrent->setCurrentRow(qMax(0, prevPosition));
99 ui->lstAvailable->insertItem(newPosition, item);
100 ui->lstAvailable->setCurrentItem(item);
101}
102
104{
105 QListWidgetItem *item = ui->lstCurrent->currentItem();
106 if (!item) return;
107
108 int position = ui->lstCurrent->row(item);
109
110 if (position <= 0) return;
111
112 ui->lstCurrent->takeItem(ui->lstCurrent->row(item));
113 ui->lstCurrent->insertItem(position - 1, item);
114 ui->lstCurrent->setCurrentItem(item);
115}
116
118{
119 QListWidgetItem *item = ui->lstCurrent->currentItem();
120 if (!item) return;
121
122 int position = ui->lstCurrent->row(item);
123
124 if (position >= ui->lstCurrent->count() - 1) return;
125
126 ui->lstCurrent->takeItem(ui->lstCurrent->row(item));
127 ui->lstCurrent->insertItem(position + 1, item);
128 ui->lstCurrent->setCurrentItem(item);
129}
130
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
~KisDlgListPicker() override
QList< QVariant > getChosenData()
Ui::KisDlgListPicker * ui
KisDlgListPicker(QString windowTitle, QString availableString, QString currentString, QList< QString > available, QList< QVariant > availableData, QList< QString > chosen, QList< QVariant > currentData, QWidget *parent=0)