diff options
| author | Daniel Jones <admin@danieljon.es> | 2020-06-23 16:34:19 +0930 | 
|---|---|---|
| committer | Daniel Jones <admin@danieljon.es> | 2020-06-23 16:34:19 +0930 | 
| commit | be0be659c1accba0cf3dea89e8e9e820216d9d3a (patch) | |
| tree | 94f6bed9a00f0d5be3ee13414a5beadfc1d3d24a /MainWindow.h | |
| download | foxlogicgates-be0be659c1accba0cf3dea89e8e9e820216d9d3a.tar.gz foxlogicgates-be0be659c1accba0cf3dea89e8e9e820216d9d3a.zip | |
first commit, basic logic works
Diffstat (limited to 'MainWindow.h')
| -rw-r--r-- | MainWindow.h | 119 | 
1 files changed, 119 insertions, 0 deletions
| diff --git a/MainWindow.h b/MainWindow.h new file mode 100644 index 0000000..e99f7ce --- /dev/null +++ b/MainWindow.h @@ -0,0 +1,119 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <fx.h> +#include <FXScrollArea.h> +#include <FXMessageBox.h> +#include <time.h> +#include <vector> +#include <algorithm> +#include <memory> +#include <string> +#include <fxkeys.h> +#include "Gate.h" +#include "icons.h" + +class MainWindow : public FXMainWindow +{ +	FXDECLARE(MainWindow) + +	public: +		explicit MainWindow(FXApp* a); +		~MainWindow(); +		virtual void create(); + +		/* Event system */ +		// Messages for our class +		enum { +			ID_CANVAS       = FXMainWindow::ID_LAST, +			ID_BUTTON_INPUT, +			ID_BUTTON_OUTPUT, +			ID_BUTTON_AND, +			ID_BUTTON_OR, +			ID_BUTTON_NOT, +		}; + +		/* Event handlers */ +		long on_paint(FXObject*,FXSelector,void* ptr); +		long on_left_mouse_down(FXObject*,FXSelector,void* ptr); +		long on_left_mouse_up(FXObject*,FXSelector,void* ptr); +		long on_right_mouse_down(FXObject*,FXSelector,void* ptr); +		long on_key_press(FXObject*,FXSelector,void* ptr); +		long on_key_release(FXObject*,FXSelector,void* ptr); +		long on_mouse_move(FXObject*,FXSelector,void* ptr); +		/* toolbox */ +		long input_button_press(FXObject*,FXSelector,void* ptr); +		long output_button_press(FXObject*,FXSelector,void* ptr); +		long and_button_press(FXObject*,FXSelector,void* ptr); +		long or_button_press(FXObject*,FXSelector,void* ptr); +		long not_button_press(FXObject*,FXSelector,void* ptr); +		 +		/* selected gate */ +		Gate *selected_gate = nullptr; + +		FXApp *get_app(){ return app; }; + + +	protected: +		MainWindow(){} + +	private: +		void create_ui(); +		void draw(); +		Gate *find_gate_at(int x, int y); +		Gate *find_gate_by_id(int id); + +		FXHorizontalFrame *contents; +		FXVerticalFrame   *canvasFrame; +		FXVerticalFrame   *toolsFrame; +		FXScrollWindow 	*scroll_area; +		FXCanvas *canvas; +		FXBMPImage *canvas_image; +		FXApp *app; + +		/* icons */ +		FXGIFIcon *INPUT_icon; +		FXGIFIcon *OUTPUT_icon; +		FXGIFIcon *AND_icon; +		FXGIFIcon *OR_icon; +		FXGIFIcon *NOT_icon; + +		/* buttons */ +		FXButton *INPUT_button; +		FXButton *OUTPUT_button; +		FXButton *AND_button; +		FXButton *OR_button; +		FXButton *NOT_button; + +		Gate::GATE_TYPE selected_gate_type = Gate::NONE; // the type of gate we will place + +		/* mouse */ +		bool lmouse_down = false; +		bool rmouse_down = false; +		bool dragging_link = false; +		int mouse_x; +		int mouse_y; + +		/* keyboard */ +		bool lshift_down = false; + +		/* general */ +		std::vector<std::unique_ptr<Gate>> gates; +}; + +#endif // MAINWINDOW_H | 
