summaryrefslogtreecommitdiffstats
path: root/arts/modules/common/artsmodulescommon.idl
blob: 10ccd21812817735196e63f7eea625ca8c0c7df8 (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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*

    Copyright (C) 2000-2001 Stefan Westerfeld
                                stefan@space.twc.de
                  2001-2003 Matthias Kretz
                            kretz@kde.org
                  2002-2003 Arnold Krille
                            arnold@arnoldarts.de

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
     License as published by the Free Software Foundation; either
     version 2 of the License, or (at your option) any later version.

     This library 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
     Library General Public License for more details.

     You should have received a copy of the GNU Library General Public License
     along with this library; see the file COPYING.LIB.  If not, write to
     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     Boston, MA 02110-1301, USA.

*/

/*
* DISCLAIMER: The interfaces in artsmodules.idl (and the derived .cc/.h files)
*             DO NOT GUARANTEE BINARY COMPATIBILITY YET.
*
* They are intended for developers. You shouldn't expect that applications in
* binary form will be fully compatibile with further releases of these
* interfaces.
*/

#include <artsgui.idl>
#include <artsflow.idl>
#include <artsmidi.idl>

#include <artsmodulessynth.idl>

module Arts {

module Environment {
	interface Context {
		void addEntry(string name, object obj);
		string lookupEntry(object obj);
		void removeEntry(object obj);
	};

	interface Item;

	interface Container {
		attribute string dataDirectory;
		attribute Context context;
		readonly attribute sequence<Item> items;

		sequence<string> saveToList();
		void loadFromList(sequence<string> strlist);

		void addItem(Item item);
		Item createItem(string name);
		void removeItem(Item item);
	};

	interface Item {
		/**
		 * true if item resides inside a container
		 */
		readonly attribute boolean active;

		/**
		 * the container the item lives in
		 */
		readonly attribute Container parent;

		/**
		 * called by the container to insert/remove item from/to the
		 * environment
		 */
		void setContainer(Container container);

		/**
		 * called by the container to save the item
		 */
		sequence<string> saveToList();

		/**
		 * called by the container to restore the item
		 */
		void loadFromList(sequence<string> strlist);
	};

	interface InstrumentItem : Item {
		readonly attribute Arts::MidiPort port;
		attribute string filename;
		attribute string busname;
	};

	interface InstrumentItemGuiFactory : Arts::GuiFactory {
	};

	interface StereoEffectItem : Item {
		attribute Arts::SynthModule effect;
		attribute Arts::StereoEffectStack stack;
	};

	interface MixerChannel : Arts::StereoEffect {
		attribute string name;
	};

	interface MixerItem : Item {
		readonly attribute sequence<MixerChannel> channels;
		attribute long channelCount;
		attribute string name;
		attribute string type;
	};

	interface EffectRackItem : Item {
		Arts::StereoEffect createEffect( string type, string name );
		void delEffect( long pos );
		void routeToMaster( long pos, boolean tomaster );
		readonly attribute sequence<Arts::StereoEffect> effects;
		readonly attribute long effectCount;
		attribute string name;
	};

};

interface MixerItemGui {
	/*writeonly*/ attribute boolean active;
	/*writeonly*/ attribute long channelCount;
	/*writeonly*/ attribute string type;
	// builds a MixerItemGui for a specific MixerItem (call this exactly once)
	Widget initialize(Environment::MixerItem item);
};

interface EffectRackSlot;

interface EffectRackItemGui {
	void removeSlot( EffectRackSlot slot );
	void routeToMaster( EffectRackSlot slot, boolean tomaster );

	attribute boolean active;
	attribute string type;
	/*writeonly*/ attribute boolean addeffect;

	// builds a EffectRackItemGui for a specific EffectRackItem (call this exactly once)
	Widget initialize(Environment::EffectRackItem item);
};

interface EffectRackSlot {
	void constructor( Widget parent, Widget effect, EffectRackItemGui effectrackgui );
	/*writeonly*/ attribute boolean removeslot;
	/*writeonly*/ attribute boolean tomaster;
};

// creates: Environment::MixerItem, SimpleMixerChannel
interface MixerGuiFactory : GuiFactory {
};

// creates: Environment::EffectRackItem
interface EffectRackGuiFactory : GuiFactory {
};

};