File indexing completed on 2024-05-12 04:39:43

0001 /*
0002     SPDX-FileCopyrightText: 2013 Vlas Puhov <vlas.puhov@mail.ru>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef MODELSMANAGER_H
0008 #define MODELSMANAGER_H
0009 
0010 #include <QObject>
0011 #include <QString>
0012 #include <QVector>
0013 #include <QScopedPointer>
0014 
0015 #include <KConfigGroup>
0016 
0017 #include "registercontroller.h"
0018 
0019 class QAbstractItemView;
0020 class QStandardItem;
0021 class QModelIndex;
0022 
0023 namespace KDevMI {
0024 class Models;
0025 class IRegisterController;
0026 struct Register;
0027 struct RegistersGroup;
0028 class GroupsName;
0029 
0030 class ModelsManager : public QObject
0031 {
0032     Q_OBJECT
0033 
0034 public:
0035     explicit ModelsManager(QObject* parent = nullptr);
0036 
0037     ~ModelsManager() override;
0038 
0039     ///Adds new @p view with @p name, if not yet registered.
0040     ///All views removed after debug session ended.
0041     ///@return: Name of the new view.
0042     QString addView(QAbstractItemView* view);
0043 
0044     void setController(IRegisterController* rc);
0045 
0046     ///Sets @p format for the @p group, if format is valid. Does nothing otherwise.
0047     void setFormat(const QString& group, Format format);
0048 
0049     ///Returns all supported formats for @p group. The first one is current.
0050     QVector<Format> formats(const QString& group) const;
0051 
0052     ///Sets @p mode for the @p group, if mode is valid. Does nothing otherwise.
0053     void setMode(const QString& group, Mode mode);
0054 
0055     ///Returns all supported modes for @p group. The first one is current.
0056     QVector<Mode> modes(const QString& group) const;
0057 
0058 Q_SIGNALS:
0059     ///Emitted when a register in a model changed. Updated value should be send to the debugger.
0060     void registerChanged(const Register&);
0061 
0062 public Q_SLOTS:
0063     void updateModelForGroup(const RegistersGroup& group);
0064 
0065     ///Forcedly updates registers in @p group.
0066     void updateRegisters(const QString& group = QString());
0067 
0068 private:
0069     void save(const GroupsName&);
0070     void load(const GroupsName&);
0071 
0072 private Q_SLOTS:
0073     void flagChanged(const QModelIndex&);
0074 
0075     void itemChanged(QStandardItem*);
0076 
0077 private:
0078     QScopedPointer<Models> m_models;
0079 
0080     IRegisterController* m_controller = nullptr;
0081 
0082     KConfigGroup m_config;
0083 };
0084 
0085 } // end of namespace KDevMI
0086 #endif // MODELSMANAGER_H