Skip to content

Commit

Permalink
#41 - delay for and gate
Browse files Browse the repository at this point in the history
  • Loading branch information
NourhanEssam committed Feb 22, 2016
1 parent 9aba5aa commit 9fab4de
Show file tree
Hide file tree
Showing 11 changed files with 81 additions and 85 deletions.
6 changes: 2 additions & 4 deletions logicsim.pro
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ SOURCES += src/main.cpp \
src/connectionline.cpp \
src/workspacetab.cpp \
src/pin.cpp \
src/delaysdialog.cpp \
src/delaymanager.cpp
src/delaysdialog.cpp

HEADERS += src/mainwindow.h \
src/canvas.h \
Expand All @@ -38,8 +37,7 @@ HEADERS += src/mainwindow.h \
src/gates.h \
src/workspacetab.h \
src/pin.h \
src/delaysdialog.h \
src/delaymanager.h
src/delaysdialog.h

FORMS += src/mainwindow.ui \
src/delaysdialog.ui
Expand Down
2 changes: 1 addition & 1 deletion src/canvas.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class Canvas : public QGraphicsScene
Private* const d;

private slots:
void getCanvasDelays(int delay);
//void getCanvasDelays(int delay);
};

} // namespace Logicsim
Expand Down
25 changes: 0 additions & 25 deletions src/delaymanager.cpp

This file was deleted.

20 changes: 0 additions & 20 deletions src/delaymanager.h

This file was deleted.

55 changes: 46 additions & 9 deletions src/delaysdialog.cpp
Original file line number Diff line number Diff line change
@@ -1,32 +1,69 @@
#include "delaysdialog.h"
#include "ui_delaysdialog.h"

delaysDialog::delaysDialog(QWidget *parent) :
QDialog(parent),

namespace Logicsim
{
DelaysDialog* DelaysDialog::m_instance = 0;

DelaysDialog::DelaysDialog() :
QDialog(0),
ui(new Ui::delaysDialog)
{
m_delays[Component::AndGate] = 800;
m_delays[Component::OrGate] = 15;
m_delays[Component::NotGate] = 0;
m_delays[Component::XorGate] = 0;
m_delays[Component::XnorGate] = 0;
m_delays[Component::NandGate] = 0;
m_delays[Component::NorGate] = 0;

ui->setupUi(this);
andDelay = 0;
orDelay = 0;

ui->spinBox_and->setRange(0,1000000);
ui->spinBox_and->setSingleStep(100);
ui->spinBox_and->setValue(m_delays[Component::AndGate]);

ui->spinBox_or->setRange(0,1000000);
ui->spinBox_or->setSingleStep(100);
ui->spinBox_or->setValue(m_delays[Component::OrGate]);
}

delaysDialog::~delaysDialog()
DelaysDialog *DelaysDialog::instance()
{
if(m_instance == 0)
m_instance = new DelaysDialog();

return m_instance;
}

DelaysDialog::~DelaysDialog()
{
delete ui;
}

void delaysDialog::on_spinBox_and_valueChanged(int arg1)
int DelaysDialog::gateDelay(Component::Type t)
{
return m_delays[t];
}

void DelaysDialog::showDialog()
{
andDelay = arg1;
this->exec();
}

void delaysDialog::on_buttonBox_accepted()
void DelaysDialog::on_spinBox_and_valueChanged(int arg1)
{
emit sendDelays(andDelay);

}

void DelaysDialog::on_buttonBox_accepted()
{

}

void DelaysDialog::on_spinBox_or_valueChanged(int arg1)
{

}
}
21 changes: 14 additions & 7 deletions src/delaysdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,37 @@
#define DELAYSDIALOG_H

#include <QDialog>
#include "component.h"

namespace Ui {
class delaysDialog;
}

class delaysDialog : public QDialog
namespace Logicsim {
class DelaysDialog : public QDialog
{
Q_OBJECT

public:
explicit delaysDialog(QWidget *parent = 0);
~delaysDialog();
static DelaysDialog* instance();
~DelaysDialog();

int gateDelay(Component::Type t);
public Q_SLOTS:
void showDialog();
private slots:
void on_spinBox_and_valueChanged(int arg1);

void on_buttonBox_accepted();
void on_spinBox_or_valueChanged(int arg1);

private:
static DelaysDialog* m_instance;
DelaysDialog();
Ui::delaysDialog *ui;
qint32 andDelay,orDelay;
QMap<Component::Type, int> m_delays;

signals:
void sendDelays(int delay1);
void sendDelays(int delay1,int delay2);
};

}
#endif // DELAYSDIALOG_H
5 changes: 3 additions & 2 deletions src/gate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,10 @@ void Gate::updateConnection()
if(maxInput() > 1)
d->in2->updateConnectedLine();
}
void Gate::outputCalculated(Pin::Value val)
void Gate::outputCalculated()
{
emit outputChanged(val);
qDebug() << "OUTPUTOISDHFAISD OAUSDFO ";
emit outputChanged(out_logic);
}

} // namespace Logicsim
6 changes: 3 additions & 3 deletions src/gate.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ class Gate : public Component
Pin * in2();

void setMaxInput(qint16 mi);
Pin::Value out_logic;
public Q_SLOTS:
virtual void calcOutput()=0;
void outputCalculated();

Q_SIGNALS:
void outputChanged(Pin::Value value);

private slots:
void outputCalculated(Pin::Value val);

private:
class Private;
Private* const d;
Expand Down
16 changes: 8 additions & 8 deletions src/gates.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
#include <QPainter>
#include <QTimer>

// Local includes

#include "delaysdialog.h"

namespace Logicsim
{

Expand All @@ -17,7 +21,6 @@ AndGate::AndGate()
{
setMetaTypeId(qRegisterMetaType<AndGate>("AndGate"));
setToolTip("And Gate");
delay = 0;
}

AndGate::AndGate(const AndGate &g)
Expand All @@ -43,7 +46,7 @@ void AndGate::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q

void AndGate::calcOutput()
{
Pin::Value out_logic;
// Pin::Value out_logic;
/*
foreach (Node * n, inputList())
{
Expand All @@ -67,19 +70,16 @@ void AndGate::calcOutput()
qDebug() << "calculate AND called";
qDebug() << out_logic;
//emit outputChanged(out_logic);
QTimer::singleShot(delay,this,SLOT(outputCalculated(out_logic)));
QTimer::singleShot(DelaysDialog::instance()->gateDelay(componentType()),
this,
SLOT(outputCalculated()));
}

QString AndGate::imageUrl() const
{
return QString(":/gates/and");
}

void AndGate::setDelay(int d)
{
delay = d;
}

// ===================== OrGate ===================


Expand Down
4 changes: 0 additions & 4 deletions src/gates.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ class AndGate: public Gate
{ Gate::mouseMoveEvent(e); }
public Q_SLOTS:
void calcOutput() ;//;//override;
void setDelay(int d);

private:
int delay;
};

// ===================== OrGate =================
Expand Down
6 changes: 4 additions & 2 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ MainWindow::MainWindow(QWidget *parent)

connect(d->tabWidget, SIGNAL(tabCloseRequested(int)),
this, SLOT(tabAboutToBeClosed(int)));

connect(this,SIGNAL(actiondelaysTriggered()),
DelaysDialog::instance(),SLOT(showDialog()));
}

MainWindow::~MainWindow()
Expand Down Expand Up @@ -307,9 +310,8 @@ void MainWindow::on_actiondelays_triggered()
// {
// connect(this,SIGNAL(delaysForCanvas(int)),c,SLOT()
// }
// if (!dialog->exec()) return;
// if (!dialog->exec()) return;
emit actiondelaysTriggered();

}

void MainWindow::getDelays(int delay)
Expand Down

0 comments on commit 9fab4de

Please sign in to comment.