-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblemwidgets.h
More file actions
86 lines (72 loc) · 1.96 KB
/
problemwidgets.h
File metadata and controls
86 lines (72 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#ifndef PROBLEMWIDGETS_H
#define PROBLEMWIDGETS_H
#include "progressmanager.h"
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QScrollArea>
#include <QFile>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QPainter>
#include <QFrame>
#include <QEvent>
#include <QMouseEvent>
struct ProblemData {
QString id;
QString title;
QString difficulty;
QString path;
QStringList topics;
// From user_progress.json
bool isSolved = false;
bool isStarred = false;
int attempts = 0;
};
// A small chip for "Array", "DP" tags — color-coded by category
class TagLabel : public QLabel {
public:
TagLabel(const QString &text, QWidget *parent = nullptr);
};
class ProblemCard : public QFrame {
Q_OBJECT
public:
explicit ProblemCard(const ProblemData &data, QWidget *parent = nullptr);
void updateSolvedState(bool solved);
QLabel *statusLabel;
signals:
void openRequested(QString path);
protected:
void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
bool event(QEvent *e) override;
private:
void setupUi(const ProblemData &data);
QString buildCardStyleSheet() const;
QColor getDifficultyColor(const QString &diff);
QColor difficultyColor;
ProblemData m_data;
};
class ProblemBrowser : public QWidget {
Q_OBJECT
public:
explicit ProblemBrowser(ProgressManager *pm, QWidget *parent = nullptr);
void loadFromJson(const QString &filePath);
signals:
void navigateToEditor(QString problemPath);
private:
void setupHeader();
void updateHeaderStats();
QVBoxLayout *listLayout;
QWidget *scrollContent;
QWidget *m_headerWidget;
QLabel *m_statsLabel;
ProgressManager *progressManager;
QMap<QString, ProblemCard*> cardMap;
private slots:
void onProgressChanged(const QString &problemId);
};
#endif // PROBLEMWIDGETS_H