diff options
author | Daniel Jones <admin@danieljon.es> | 2020-07-24 16:18:13 +0930 |
---|---|---|
committer | Daniel Jones <admin@danieljon.es> | 2020-07-24 16:18:13 +0930 |
commit | 58118770e0dd3de973d4b9e5e6e52c0bf520ff9c (patch) | |
tree | 211fcd0e2619e8e3a5d2d8166ca0e2d48b6008c4 | |
parent | 3a429d84c0e38b4a33834400aa0213082b634d55 (diff) | |
download | foxlogicgates-master.tar.gz foxlogicgates-master.zip |
-rw-r--r-- | Gate.cpp | 7 | ||||
-rw-r--r-- | Gate.h | 1 | ||||
-rw-r--r-- | MainWindow.cpp | 30 | ||||
-rw-r--r-- | MainWindow.h | 6 | ||||
-rw-r--r-- | icons.h | 26 |
5 files changed, 68 insertions, 2 deletions
@@ -73,6 +73,13 @@ void Gate::update_state() break; } + case PULSE: + { + if (output_state) + output_state = false; + break; + } + case OUTPUT: { if (input_gate1 && input_gate1->get_output_state() == true) @@ -36,6 +36,7 @@ class Gate : public Object XOR, XNOR, NAND3, + PULSE, }; Gate(GATE_TYPE type = INPUT, int x = 0, int y = 0, int width = 70, int height = 50, int id = -1); diff --git a/MainWindow.cpp b/MainWindow.cpp index 72a53d7..a738b26 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -30,6 +30,7 @@ FXDEFMAP(MainWindow) MainWindow_Map[]= FXMAPFUNC(SEL_KEYRELEASE, 0, MainWindow::on_key_release), /* toolbox */ FXMAPFUNC(SEL_COMMAND, MainWindow::ID_BUTTON_INPUT, MainWindow::input_button_press), + FXMAPFUNC(SEL_COMMAND, MainWindow::ID_BUTTON_PULSE, MainWindow::pulse_button_press), FXMAPFUNC(SEL_COMMAND, MainWindow::ID_BUTTON_OUTPUT, MainWindow::output_button_press), FXMAPFUNC(SEL_COMMAND, MainWindow::ID_BUTTON_AND, MainWindow::and_button_press), FXMAPFUNC(SEL_COMMAND, MainWindow::ID_BUTTON_NAND, MainWindow::nand_button_press), @@ -71,6 +72,7 @@ MainWindow::create() { FXMainWindow::create(); INPUT_icon->create(); + PULSE_icon->create(); OUTPUT_icon->create(); AND_icon->create(); NAND_icon->create(); @@ -94,6 +96,7 @@ MainWindow::create_ui() /* icons */ INPUT_icon = new FXGIFIcon(app, INPUT_icon_data, IMAGE_KEEP); + PULSE_icon = new FXGIFIcon(app, PULSE_icon_data, IMAGE_KEEP); OUTPUT_icon = new FXGIFIcon(app, OUTPUT_icon_data, IMAGE_KEEP); AND_icon = new FXGIFIcon(app, AND_icon_data, IMAGE_KEEP); NAND_icon = new FXGIFIcon(app, NAND_icon_data, IMAGE_KEEP); @@ -112,6 +115,7 @@ MainWindow::create_ui() new FXLabel(toolsFrame, "Toolbox", NULL, JUSTIFY_CENTER_X|LAYOUT_FILL_X); new FXHorizontalSeparator(toolsFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X); new FXButton(toolsFrame, "", INPUT_icon, this, MainWindow::ID_BUTTON_INPUT, BUTTON_NORMAL|LAYOUT_FILL_X); + new FXButton(toolsFrame, "", PULSE_icon, this, MainWindow::ID_BUTTON_PULSE, BUTTON_NORMAL|LAYOUT_FILL_X); new FXButton(toolsFrame, "", OUTPUT_icon, this, MainWindow::ID_BUTTON_OUTPUT, BUTTON_NORMAL|LAYOUT_FILL_X); new FXButton(toolsFrame, "AND", AND_icon, this, MainWindow::ID_BUTTON_AND, BUTTON_NORMAL|LAYOUT_FILL_X); new FXButton(toolsFrame, "NAND", NAND_icon, this, MainWindow::ID_BUTTON_NAND, BUTTON_NORMAL|LAYOUT_FILL_X); @@ -203,6 +207,20 @@ MainWindow::draw() break; } + case Gate::PULSE: + { + if (gate1->get_output_state() == true) + { + /* input is switched on, indicate so */ + dc_image.setForeground(FXRGB(255, 255, 0)); + dc_image.fillRectangle(gate1->get_x(), gate1->get_y(), gate1->get_width(), gate1->get_height()); + dc_image.setForeground(FXRGB(0,0,0)); + } + dc_image.drawIcon(PULSE_icon, gate1->get_x(), gate1->get_y()); + break; + } + + case Gate::OUTPUT: { if (gate1->get_output_state() == true) @@ -1402,7 +1420,7 @@ MainWindow::on_right_mouse_down(FXObject*, FXSelector, void *ptr) case Object::GATE: { Gate *gate = (Gate*)object; - if (gate->get_gate_type() == Gate::INPUT) + if (gate->get_gate_type() == Gate::INPUT || gate->get_gate_type() == Gate::PULSE) { /* toggle state */ gate->set_state(!gate->get_output_state()); @@ -1576,6 +1594,16 @@ MainWindow::input_button_press(FXObject *sender, FXSelector sel, void *ptr) } long +MainWindow::pulse_button_press(FXObject *sender, FXSelector sel, void *ptr) +{ + selected_object = nullptr; + selected_object_type = Object::GATE; + selected_gate_type = Gate::PULSE; + return 1; +} + + +long MainWindow::output_button_press(FXObject *sender, FXSelector sel, void *ptr) { selected_object = nullptr; diff --git a/MainWindow.h b/MainWindow.h index a443e71..b7dd4de 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -53,6 +53,7 @@ class MainWindow : public FXMainWindow enum { ID_CANVAS = FXMainWindow::ID_LAST, ID_BUTTON_INPUT, + ID_BUTTON_PULSE, ID_BUTTON_OUTPUT, ID_BUTTON_AND, ID_BUTTON_NAND, @@ -80,6 +81,7 @@ class MainWindow : public FXMainWindow long on_mouse_move(FXObject*,FXSelector,void* ptr); /* toolbox */ long input_button_press(FXObject*,FXSelector,void* ptr); + long pulse_button_press(FXObject*,FXSelector,void* ptr); long output_button_press(FXObject*,FXSelector,void* ptr); long and_button_press(FXObject*,FXSelector,void* ptr); long nand_button_press(FXObject*,FXSelector,void* ptr); @@ -153,6 +155,7 @@ class MainWindow : public FXMainWindow /* icons */ FXGIFIcon *INPUT_icon; FXGIFIcon *OUTPUT_icon; + FXGIFIcon *PULSE_icon; FXGIFIcon *AND_icon; FXGIFIcon *NAND_icon; FXGIFIcon *NAND3_icon; @@ -165,6 +168,7 @@ class MainWindow : public FXMainWindow /* buttons */ FXButton *INPUT_button; + FXButton *PULSE_button; FXButton *OUTPUT_button; FXButton *AND_button; FXButton *NAND_button; @@ -221,7 +225,7 @@ class Thread : public FXThread { while (1) { - FXThread::sleep(70000000); + FXThread::sleep(40000000); sig->signal(); }; return 0; @@ -199,6 +199,32 @@ const unsigned char OUTPUT_icon_data[]={ 0x02,0x00,0x3b }; +/* created by reswrap from file icons/PULSE_icon_data.gif */ +const unsigned char PULSE_icon_data[]={ + 0x47,0x49,0x46,0x38,0x39,0x61,0x46,0x00,0x32,0x00,0x80,0x01,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0x21,0xfe,0x26,0x4d,0x61,0x64,0x65,0x20,0x66,0x6f,0x72,0x20,0x66, + 0x6f,0x78,0x6c,0x6f,0x67,0x69,0x63,0x67,0x61,0x74,0x65,0x73,0x20,0x62,0x79,0x20, + 0x44,0x61,0x6e,0x69,0x65,0x6c,0x20,0x4a,0x6f,0x6e,0x65,0x73,0x00,0x21,0xf9,0x04, + 0x01,0x0a,0x00,0x01,0x00,0x2c,0x00,0x00,0x00,0x00,0x46,0x00,0x32,0x00,0x00,0x02, + 0xfe,0x8c,0x8f,0xa9,0xcb,0xed,0x0f,0xa3,0x9c,0xb4,0xda,0x8b,0x0d,0xd8,0xbc,0xfb, + 0x0f,0x86,0xe2,0xb8,0x45,0xe4,0x89,0xa6,0xa0,0x09,0x64,0x6e,0xc3,0xb1,0xef,0x9c, + 0xc4,0x50,0x49,0xe7,0xf6,0x83,0xe7,0xf3,0xee,0xe8,0xf9,0x5c,0x40,0x58,0x6b,0xf8, + 0x2a,0x32,0x84,0xc8,0x8b,0x72,0xc1,0x6c,0x56,0x9e,0x8a,0xa8,0x74,0x42,0xad,0x1d, + 0xaf,0x96,0x2c,0xc2,0xca,0xbd,0x81,0xb5,0xe1,0xee,0xf8,0xbb,0x2d,0x4b,0xbc,0x87, + 0xb3,0xba,0xea,0xd6,0x1c,0x57,0x72,0x72,0x60,0xec,0x69,0xd3,0xd9,0xf5,0xfb,0x3e, + 0xed,0xd7,0xa7,0xf5,0x21,0x47,0xe8,0x07,0xb8,0x34,0x97,0x86,0xc3,0xc4,0x88,0x18, + 0xa8,0x27,0x38,0x58,0x98,0x28,0xe9,0x68,0x67,0x05,0xa6,0x59,0x92,0x07,0x67,0xa9, + 0x88,0xf9,0xd8,0xa9,0x67,0x18,0x33,0x8a,0x56,0xd8,0xd9,0x08,0x0a,0x35,0x4a,0x77, + 0x78,0x98,0xa9,0xe8,0x0a,0x78,0xc9,0x63,0x0b,0x37,0x5b,0x09,0xe9,0x89,0xca,0x1b, + 0xc4,0x9a,0x2b,0xf3,0x8b,0xb6,0x65,0x23,0xeb,0xbb,0xf9,0xd8,0x8b,0x67,0x18,0x7b, + 0xfc,0x57,0x1a,0x07,0x79,0x76,0x1a,0x92,0xda,0x73,0x0d,0x2b,0xf6,0x86,0x35,0x3d, + 0xdd,0xbd,0x7d,0x1b,0xce,0xb2,0x6c,0x47,0x0e,0x6c,0xee,0x8b,0x6e,0xa4,0x1e,0xc9, + 0xde,0x3e,0x0c,0xdf,0xea,0x2e,0x39,0x5f,0x2c,0x7f,0x8f,0xcf,0xad,0x3f,0xc9,0xdf, + 0x4f,0x2a,0x1f,0x40,0x3e,0xc4,0xfa,0x11,0x04,0xd7,0xed,0xa0,0x8a,0x85,0x0c,0xb5, + 0xdd,0x6a,0x08,0xb1,0x61,0xb9,0x88,0x14,0x51,0x00,0xbc,0x88,0x31,0xe3,0x8b,0x01, + 0x02,0x00,0x3b + }; + /* created by reswrap from file icons/XNOR_icon_data.gif */ const unsigned char XNOR_icon_data[]={ 0x47,0x49,0x46,0x38,0x39,0x61,0x46,0x00,0x32,0x00,0x80,0x01,0x00,0x00,0x00,0x00, |