mirror of
https://github.com/jorenchik/mdemory.git
synced 2026-03-22 00:26:21 +00:00
partial impl of the group question widget
This commit is contained in:
@@ -238,7 +238,7 @@ void CreateMdems(std::vector<Question*>& questions) {
|
|||||||
mdems[i]->wBack->layout()->addWidget(label);
|
mdems[i]->wBack->layout()->addWidget(label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mdems[i]->labelCount = groups.size();
|
mdems[i]->labelCount = elements.size();
|
||||||
}
|
}
|
||||||
if (!mdems[i]->wMdem->isVisible()) {
|
if (!mdems[i]->wMdem->isVisible()) {
|
||||||
mdems[i]->wMdem->show();
|
mdems[i]->wMdem->show();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <qwidget.h>
|
#include <qwidget.h>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
#include <QDropEvent>
|
#include <QDropEvent>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "trainWindow.h"
|
#include "trainWindow.h"
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
@@ -53,12 +54,14 @@ QListView *itemListView;
|
|||||||
|
|
||||||
QStandardItemModel *orderModel;
|
QStandardItemModel *orderModel;
|
||||||
|
|
||||||
class CustomListView : public QListView
|
QWidget *wGroupQuestion;
|
||||||
|
|
||||||
|
class OrderListView : public QListView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CustomListView(QWidget *parent = nullptr) : QListView(parent) {}
|
explicit OrderListView(QWidget *parent = nullptr) : QListView(parent) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void dropEvent(QDropEvent *event) override
|
void dropEvent(QDropEvent *event) override
|
||||||
@@ -81,9 +84,38 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MoveListView : public QListView
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit MoveListView(QWidget *parent = nullptr) : QListView(parent) {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void dropEvent(QDropEvent *event) override
|
||||||
|
{
|
||||||
|
QModelIndex sourceIndex = currentIndex();
|
||||||
|
QModelIndex targetIndex = indexAt(event->pos());
|
||||||
|
|
||||||
|
if (sourceIndex.isValid() && targetIndex.isValid()) {
|
||||||
|
QStandardItemModel *model = qobject_cast<QStandardItemModel *>(this->model());
|
||||||
|
if (model) {
|
||||||
|
QVariant sourceData = model->data(sourceIndex);
|
||||||
|
QVariant targetData = model->data(targetIndex);
|
||||||
|
model->setData(sourceIndex, targetData);
|
||||||
|
model->setData(targetIndex, sourceData);
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#include "trainWindow.moc"
|
#include "trainWindow.moc"
|
||||||
|
|
||||||
CustomListView *orderList;
|
OrderListView *orderList;
|
||||||
|
|
||||||
QStandardItem *makeItem(std::string content, bool isCheckable) {
|
QStandardItem *makeItem(std::string content, bool isCheckable) {
|
||||||
auto *item = new QStandardItem();
|
auto *item = new QStandardItem();
|
||||||
@@ -131,7 +163,7 @@ void initTrainWindow() {
|
|||||||
auto listStyle =
|
auto listStyle =
|
||||||
"QListView {"
|
"QListView {"
|
||||||
" background-color: white;"
|
" background-color: white;"
|
||||||
" border: 1px solid black;"
|
" border: 0px solid black;"
|
||||||
"}"
|
"}"
|
||||||
"QListView::item::first {"
|
"QListView::item::first {"
|
||||||
" padding: 5px 0 0 0;"
|
" padding: 5px 0 0 0;"
|
||||||
@@ -178,7 +210,7 @@ void initTrainWindow() {
|
|||||||
|
|
||||||
{ // Make order list.
|
{ // Make order list.
|
||||||
orderModel = new QStandardItemModel();
|
orderModel = new QStandardItemModel();
|
||||||
orderList = new CustomListView();
|
orderList = new OrderListView();
|
||||||
orderList->setModel(orderModel);
|
orderList->setModel(orderModel);
|
||||||
|
|
||||||
orderList->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
orderList->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||||
@@ -234,10 +266,14 @@ void initTrainWindow() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{ // Make group question view.
|
{ // Make group question view.
|
||||||
auto wGroupQuestion = new QWidget();
|
wGroupQuestion = new QWidget();
|
||||||
|
wGroupQuestion->setStyleSheet(
|
||||||
|
"border:none;"
|
||||||
|
);
|
||||||
auto hGroupQuestion = new QHBoxLayout();
|
auto hGroupQuestion = new QHBoxLayout();
|
||||||
wGroupQuestion->setLayout(hGroupQuestion);
|
wGroupQuestion->setLayout(hGroupQuestion);
|
||||||
|
|
||||||
|
// Items on the left.
|
||||||
auto itemScroll = new QScrollArea();
|
auto itemScroll = new QScrollArea();
|
||||||
auto vItems = new QVBoxLayout();
|
auto vItems = new QVBoxLayout();
|
||||||
itemScroll->setLayout(vItems);
|
itemScroll->setLayout(vItems);
|
||||||
@@ -245,22 +281,44 @@ void initTrainWindow() {
|
|||||||
itemListView = new QListView();
|
itemListView = new QListView();
|
||||||
itemListView->setModel(itemModel);
|
itemListView->setModel(itemModel);
|
||||||
itemListView->setStyleSheet(listStyle);
|
itemListView->setStyleSheet(listStyle);
|
||||||
for (int i = 0; i < 50; ++i) {
|
itemListView->setDragEnabled(true);
|
||||||
itemModel->appendRow(makeItem("Item I", false));
|
itemListView->setDragDropMode(QAbstractItemView::DragDrop);
|
||||||
}
|
itemListView->setDefaultDropAction(Qt::MoveAction);
|
||||||
vItems->addWidget(itemListView);
|
vItems->addWidget(itemListView);
|
||||||
hGroupQuestion->addWidget(itemScroll);
|
hGroupQuestion->addWidget(itemScroll);
|
||||||
|
|
||||||
|
// Items on the right.
|
||||||
auto wGroupBox = new QWidget();
|
auto wGroupBox = new QWidget();
|
||||||
auto vGroupBox = new QVBoxLayout();
|
auto vGroupBox = new QVBoxLayout();
|
||||||
auto groupScroll = new QScrollArea();
|
auto wGroups = new QScrollArea();
|
||||||
auto vGroups = new QVBoxLayout();
|
auto vGroups = new QVBoxLayout();
|
||||||
|
auto groupSpacer = new QSpacerItem(50, 50, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||||
|
|
||||||
wGroupBox->setLayout(vGroupBox);
|
wGroupBox->setLayout(vGroupBox);
|
||||||
vGroupBox->addWidget(groupScroll);
|
wGroups->setLayout(vGroups);
|
||||||
groupScroll->setLayout(vGroups);
|
|
||||||
hGroupQuestion->addWidget(wGroupBox);
|
hGroupQuestion->addWidget(wGroupBox);
|
||||||
|
vGroupBox->addWidget(wGroups);
|
||||||
|
|
||||||
|
{
|
||||||
|
auto groupLabel = new QLabel("Group I");
|
||||||
|
auto scrollArea = new QScrollArea();
|
||||||
|
auto groupModel = new QStandardItemModel();
|
||||||
|
auto groupList = new QListView();
|
||||||
|
groupList->setModel(groupModel);
|
||||||
|
groupList->setMaximumHeight(100);
|
||||||
|
vGroups->addWidget(groupLabel);
|
||||||
|
vGroups->addWidget(groupList);
|
||||||
|
groupList->setStyleSheet(listStyle);
|
||||||
|
groupList->setAcceptDrops(true);
|
||||||
|
groupList->setDragDropMode(QAbstractItemView::DragDrop);
|
||||||
|
groupList->setDefaultDropAction(Qt::MoveAction);
|
||||||
|
}
|
||||||
|
vGroups->addItem(groupSpacer);
|
||||||
|
|
||||||
|
std::cout << wGroupBox->geometry().height() << std::endl;
|
||||||
|
|
||||||
itemListView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
itemListView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||||
|
wGroupQuestion->hide();
|
||||||
questionBox->layout()->addWidget(wGroupQuestion);
|
questionBox->layout()->addWidget(wGroupQuestion);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,6 +335,7 @@ void hideQuestionElements() {
|
|||||||
answerText->hide();
|
answerText->hide();
|
||||||
orderList->hide();
|
orderList->hide();
|
||||||
listView->hide();
|
listView->hide();
|
||||||
|
wGroupQuestion->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupAnswerQuestion(MultiElementQuestion *question) {
|
void setupAnswerQuestion(MultiElementQuestion *question) {
|
||||||
@@ -362,7 +421,17 @@ void setupMultiChoiceQuestion(MultiElementQuestion *question) {
|
|||||||
void setupGroupQuestion(GroupQuestion *question) {
|
void setupGroupQuestion(GroupQuestion *question) {
|
||||||
hideQuestionElements();
|
hideQuestionElements();
|
||||||
|
|
||||||
// TODO
|
lQuestionText->setText(
|
||||||
|
QString::fromStdString(question->QuestionText)
|
||||||
|
);
|
||||||
|
lQuestionText->show();
|
||||||
|
|
||||||
|
wGroupQuestion->show();
|
||||||
|
for (auto group: question->Groups) {
|
||||||
|
for (auto item: group.elements) {
|
||||||
|
itemModel->appendRow(makeItem(item, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto showAnswer = [](bool checked) {
|
auto showAnswer = [](bool checked) {
|
||||||
QObject::disconnect(btnTriggerAnswer, 0, 0, 0);
|
QObject::disconnect(btnTriggerAnswer, 0, 0, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user