Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 334 → Rev 335

/Classwork/ECE5505 - Test and Verification/Final Project/Gate_BASE.h
0,0 → 1,127
#ifndef Gate_BASE_H
#define Gate_BASE_H
 
#include "GlobalDefines.h"
#include "Wire.h"
 
#define BASE_GATE_SIZE_X 100
#define BASE_GATE_SIZE_Y 80
#define ADDITONAL_INPUTS 20
#define INPUT_CIRCLE_SIZE qreal(5)
#define BORDER_OFFSET 20
#define DEFAULT_LINE_WIDTH 3
#define ENQUEUED_CIRCLE_WIDTH 20
 
#define COLOR_MAIN 0,0,0,255
#define COLOR_MAIN_SELECTED 200,0,200,255
#define COLOR_INPUT COLOR_MAIN
#define COLOR_INPUT_SELECTED 255,0,0,255
#define COLOR_OUTPUT COLOR_MAIN
#define COLOR_OUTPUT_SELECTED 0,0,255,255
#define COLOR_DEBUG 0,0,0,100
#define COLOR_DEBUG_SELECTED 0,255,0,100
#define COLOR_DEBUG_ERROR 255,0,0,200
 
#define GATE_DEFAULT_Z 0
#define WIRE_DEFAULT_Z 1
#define SELECTED_Z 2
 
class Wire;
 
typedef enum {
gate_UNKNOWN = 0,
gate_INPUT = 1,
gate_OUTPUT = 2,
gate_XOR = 3,
gate_XNOR = 4,
gate_DFF = 5,
gate_AND = 6,
gate_NAND = 7,
gate_OR = 8,
gate_NOR = 9,
gate_NOT = 10,
gate_BUFFER = 11
} gType;
 
/* Generic gate object */
class Gate_BASE : public QGraphicsObject
{
Q_OBJECT
public:
Gate_BASE(int gateID, gType type,
int numInputs, int gateLevel,
QGraphicsItem *parent = 0);
~Gate_BASE();
 
QRectF boundingRect() const;
QPainterPath shape() const;
 
// paint() should be overwritten by child classes
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)=0;
 
void setCanvasPosition(int x, int y);
void setHighlight(bool state, QColor color);
 
void reset(void);
void setInputValue(int input, logicValue value, logicValue faultyValue);
void setOutputValue(logicValue value, logicValue faultyValue);
void setEnqueued(bool value);
 
virtual void simulateToOutput()=0;
 
// Variables
int xSize, ySize;
QPoint canvasPoint;
 
int gateID;
gType gateType;
int numInputs;
int gateLevel;
 
QList<logicValue> inputValues;
QList<logicValue> inputFaultyValues;
logicValue outputValue;
logicValue outputFaultyValue;
 
QList<Gate_BASE*> fanInGates;
QList<Gate_BASE*> fanOutGates;
QList<QPointF> gateInputPoints; // Scene inputs
QPointF gateOutputPoint; // Scene outputs
 
QList<Wire*> gateInputWires;
QList<Wire*> gateOutputWires;
 
signals:
void updateStatus(QString status);
void enqueueSim(Gate_BASE *gate);
 
public slots:
 
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
 
bool auxSelected;
bool enqueued;
 
// 'Local' points for I/O
QList<QPointF> inputPoints;
QPointF outputPoint;
 
QPen defaultPen;
QBrush defaultBrush;
QFont defaultFont;
 
QPen selectedPen;
QPen highlightedPen;
 
QRectF textRect;
 
#ifdef _DEBUG
QPen debugPen;
QBrush debugBrush;
QPen debugSelectedPen;
QPen debugErrorPen;
#endif
};
 
#endif // Gate_BASE_H