/***************************************************************************
 *   Copyright (C) 2021 by Santiago González                               *
 *                                                                         *
 ***( see copyright.txt file at root folder )*******************************/

#pragma once

#include <QWidget>

#include "ui_memtable.h"

class Component;
class QAction;

class MemTable : public QWidget, private Ui::MemTable
{
    Q_OBJECT
    
    public:
        MemTable( QWidget* parent=0, int dataSize=256, int wordBytes=1 );

        void updateTable( QVector<int>* data );
        void setData( QVector<int>* data, int wordBytes=1 );
        void setValue( int address, int val );
        void setCellBytes( int bytes );
        void setAddrSelected( int addr ,bool jump );

    signals:
        void dataChanged( int address, int val );

    public slots:
        void on_table_itemChanged( QTableWidgetItem* item );
        void on_table_cellClicked( int row, int col ) { cellClicked( row, col ); }
        void on_table_itemEntered( QTableWidgetItem* item );
        void on_context_menu_requested( const QPoint &pos );
        void saveTable();
        void loadTable();

    private:
        void resizeTable( int dataSize );
        void setCellValue( int address, int val );
        void cellClicked( int row, int col );
        QString valToHex( int val, int bytes );
        QVector<int> toIntVector();

        int m_updtCount;
        int m_dataSize;
        int m_wordBytes;
        int m_cellBytes;
        int m_byteRatio; // m_wordBytes/m_cellBytes
        int m_addrBytes;

        bool m_blocked;

        bool m_canSaveLoad;

        QTableWidgetItem* m_hoverItem;
        QVector<int>* m_data;
};
