summaryrefslogtreecommitdiffstats
path: root/arts/builder/scomponent.h
blob: 7867e542196c99ecb3aa0f30ae77084e32e423f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
    /*

    Copyright (C) 1999 Stefan Westerfeld
                       stefan@space.twc.de

    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 2 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, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1307, USA.

    */

#ifndef __SCOMPONENT_H__
#define __SCOMPONENT_H__

#include <qstring.h>
#include <list>

class ModulePort;
class QPainter;
class QPixmap;

class StructureCanvas {
public:
	virtual void redrawRect(int x, int y, int width, int height) = 0;
};

class StructureComponent {
protected:
	StructureCanvas *canvas;

	int _x, _y;
	bool _selected, _visible;

	virtual bool moveInternal(int x, int y) = 0;

public:
	StructureComponent(StructureCanvas *canvas);
	virtual ~StructureComponent();

	// type

	enum ComponentType { ctModule, ctPort };
	virtual ComponentType type() = 0;
	
	// TODO: connection & autorouter

	virtual ModulePort *portAt(int segment, int x, int y) = 0;
	virtual void dumpPorts(std::list<ModulePort *>& ports) = 0;

	// visibility
	bool visible();
	void show();
	void hide();
	void redraw();

	// drawing
	virtual bool drawNeedsBackground(int segment) = 0;
	virtual void drawSegment(QPainter *dest, int cellsize, int segment) = 0;
	virtual QPixmap *pixmap() = 0;
	virtual QString name() = 0;

	// space checking & positioning (dimensions in cells)
	bool move(int x, int y);
	int x() const;
	int y() const;
	virtual int width() const = 0;
	virtual int height() const = 0;

	// selection
	bool selected();
	void setSelected(bool newselection);

	// creation and destruction are handled via standard
	// constructors/destructors
};

#endif