Atlas Game Manager
A game manager for f95 and dlsite written in c++
Loading...
Searching...
No Matches
SIModel.hpp
Go to the documentation of this file.
1//
2// Created by kj16609 on 5/24/23.
3//
4
5#pragma once
6#ifndef ATLASGAMEMANAGER_SIMODEL_HPP
7#define ATLASGAMEMANAGER_SIMODEL_HPP
8
9#include <QAbstractItemModel>
10#include <QDir>
11
14
23
24struct DirInfo
25{
26 bool is_game_dir { false };
27 QString title { "" };
28 QString creator { "" };
29 QString version { "" };
30 QString engine { "" };
31
32 bool is_supporting_name { false };
34};
35
37{
38 bool is_banner { false };
40
41 bool is_preview { false };
42};
43
44struct Node
45{
46 Q_DISABLE_COPY_MOVE( Node )
47
48 std::variant< DirInfo, FileInfo > m_info { DirInfo {} };
49 QString m_path;
50
51 private:
52
53 bool m_scanned { false };
54
55 public:
56
57 Node( const QString str, Node* parent = nullptr, const bool scan_immediate = false );
58
59 QString name() const
60 {
61 const auto split_pos { m_path.lastIndexOf( QDir::separator() ) };
62 return m_path.mid( split_pos + 1 );
63 }
64
65 void scan()
66 {
67 QDir dir { m_path };
68 QFileInfo info { m_path };
69 if ( info.isFile() ) return;
70
71 //Scan all files and directories
72 for ( const auto& entry : dir.entryInfoList( QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot ) )
73 m_children.push_back( new Node( entry.absoluteFilePath(), this ) );
74
75 m_scanned = true;
76 }
77
78 bool scanned() const { return m_scanned; }
79
80 int childCount() const { return static_cast< int >( m_children.size() ); }
81
82 int row() const
83 {
84 if ( m_parent )
85 {
86 const auto& parent_children { m_parent->m_children };
87 return static_cast< int >( std::distance(
88 parent_children.begin(), std::find( parent_children.begin(), parent_children.end(), this ) ) );
89 }
90 return 0;
91 }
92
93 const Node* parent() const { return m_parent; }
94
95 const Node* child( const int idx ) const
96 {
97 if ( m_children.size() < static_cast< std::size_t >( idx ) || idx < 0 )
98 return nullptr;
99 else
100 return m_children[ static_cast< std::size_t >( idx ) ];
101 }
102
103 Node* child( const int idx )
104 {
105 if ( m_children.size() < static_cast< std::size_t >( idx ) || idx < 0 )
106 return nullptr;
107 else
108 return m_children[ static_cast< std::size_t >( idx ) ];
109 }
110
112 {
113 for ( auto& child : m_children ) delete child;
114 }
115
116 private:
117
118 std::vector< Node* > m_children {};
119 Node* m_parent { nullptr };
120};
121
122class SIModel final : public QAbstractItemModel
123{
124 Q_OBJECT
125 Q_DISABLE_COPY_MOVE( SIModel )
126
127 Node* m_root { nullptr };
128
129 public:
130
131 explicit SIModel( QObject* parent = nullptr );
132 ~SIModel() override;
133
134 void setRoot( const QString path );
135
136 QModelIndex index( int row, int column, const QModelIndex& parent ) const override;
137 QModelIndex parent( const QModelIndex& child ) const override;
138 int rowCount( const QModelIndex& parent ) const override;
139 int columnCount( const QModelIndex& parent ) const override;
140 QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override;
141};
142
143#endif //ATLASGAMEMANAGER_SIMODEL_HPP
@ TITLE
Definition QueryBuilder.cpp:31
@ ENGINE
Definition QueryBuilder.cpp:30
@ CREATOR
Definition QueryBuilder.cpp:29
SupportingType
Definition SIModel.hpp:16
@ VERSION
Definition SIModel.hpp:20
@ NoSupportingType
Definition SIModel.hpp:17
SIModel(QObject *parent=nullptr)
Definition SIModel.cpp:19
void setRoot(const QString path)
Definition SIModel.cpp:22
int columnCount(const QModelIndex &parent) const override
Definition SIModel.cpp:81
QModelIndex index(int row, int column, const QModelIndex &parent) const override
Definition SIModel.cpp:31
~SIModel() override
Definition SIModel.cpp:103
int rowCount(const QModelIndex &parent) const override
Definition SIModel.cpp:67
QModelIndex parent(const QModelIndex &child) const override
Definition SIModel.cpp:55
Node * m_root
Definition SIModel.hpp:127
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Definition SIModel.cpp:86
BannerType
Definition config.hpp:245
@ Normal
Definition config.hpp:247
Definition SIModel.hpp:25
QString engine
Definition SIModel.hpp:30
QString title
Definition SIModel.hpp:27
QString version
Definition SIModel.hpp:29
QString creator
Definition SIModel.hpp:28
bool is_supporting_name
Definition SIModel.hpp:32
SupportingType supporting_type
Definition SIModel.hpp:33
bool is_game_dir
Definition SIModel.hpp:26
Definition SIModel.hpp:37
BannerType banner_type
Definition SIModel.hpp:39
bool is_preview
Definition SIModel.hpp:41
bool is_banner
Definition SIModel.hpp:38
Definition SIModel.hpp:45
int childCount() const
Definition SIModel.hpp:80
QString m_path
Definition SIModel.hpp:49
void scan()
Definition SIModel.hpp:65
std::vector< Node * > m_children
Definition SIModel.hpp:118
~Node()
Definition SIModel.hpp:111
Node * child(const int idx)
Definition SIModel.hpp:103
const Node * child(const int idx) const
Definition SIModel.hpp:95
bool scanned() const
Definition SIModel.hpp:78
bool m_scanned
Definition SIModel.hpp:53
int row() const
Definition SIModel.hpp:82
QString name() const
Definition SIModel.hpp:59
Node(const QString str, Node *parent=nullptr, const bool scan_immediate=false)
Definition SIModel.cpp:108
std::variant< DirInfo, FileInfo > m_info
Definition SIModel.hpp:48
const Node * parent() const
Definition SIModel.hpp:93
Node * m_parent
Definition SIModel.hpp:119