libIntegra
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
interface_definition.h
Go to the documentation of this file.
1 /* libIntegra modular audio framework
2  *
3  * Copyright (C) 2007 Birmingham City University
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
18  * USA.
19  */
20 
30 #ifndef INTEGRA_INTERFACE_DEFINITION_API_H
31 #define INTEGRA_INTERFACE_DEFINITION_API_H
32 
33 #include "common_typedefs.h"
34 #include "guid_helper.h"
35 #include "value.h"
36 
37 #include <list>
38 
39 #include <time.h>
40 
41 namespace integra_api
42 {
43  class IInterfaceDefinition;
44  class IInterfaceInfo;
45  class IEndpointDefinition;
46  class IControlInfo;
47  class IStateInfo;
48  class IConstraint;
49  class IValueRange;
50  class IValueScale;
51  class IStreamInfo;
52  class IWidgetDefinition;
53  class IWidgetPosition;
54  class IImplementationInfo;
55 
57  typedef std::list<IEndpointDefinition *> endpoint_definition_list;
58 
60  typedef std::list<IWidgetDefinition *> widget_definition_list;
61 
62 
66  class INTEGRA_API IInterfaceDefinition
67  {
68  protected:
70  public:
71  virtual ~IInterfaceDefinition() {}
72 
75  {
82  MODULE_SHIPPED_WITH_INTEGRA = 1,
83 
91 
101 
109  MODULE_IN_DEVELOPMENT
110  };
111 
118  virtual const GUID &get_module_guid() const = 0;
119 
126  virtual const GUID &get_origin_guid() const = 0;
127 
134  virtual module_source get_module_source() const = 0;
135 
140  virtual const IInterfaceInfo &get_interface_info() const = 0;
141 
146  virtual const endpoint_definition_list &get_endpoint_definitions() const = 0;
147 
152  virtual const widget_definition_list &get_widget_definitions() const = 0;
153 
158  virtual const IImplementationInfo *get_implementation_info() const = 0;
159  };
160 
161 
165  class INTEGRA_API IInterfaceInfo
166  {
167  protected:
168  IInterfaceInfo() {}
169  public:
170  virtual ~IInterfaceInfo() {}
171 
176  virtual const string &get_name() const = 0;
177 
181  virtual const string &get_label() const = 0;
182 
187  virtual const string &get_description() const = 0;
188 
193  virtual const string_set &get_tags() const = 0;
194 
197  virtual const string &get_author() const = 0;
198 
201  virtual const struct tm &get_created_date() const = 0;
202 
205  virtual const struct tm &get_modified_date() const = 0;
206  };
207 
208 
212  class INTEGRA_API IEndpointDefinition
213  {
214  protected:
216  public:
217  virtual ~IEndpointDefinition() {}
218 
221  {
230  CONTROL = 1,
231 
237  STREAM
238  };
239 
245  virtual const string &get_name() const = 0;
246 
249  virtual const string &get_label() const = 0;
250 
255  virtual const string &get_description() const = 0;
256 
261  virtual endpoint_type get_type() const = 0;
262 
267  virtual const IControlInfo *get_control_info() const = 0;
268 
273  virtual const IStreamInfo *get_stream_info() const = 0;
274 
277  virtual bool is_audio_stream() const = 0;
278  };
279 
280 
284  class INTEGRA_API IControlInfo
285  {
286  protected:
287  IControlInfo() {}
288  public:
289  virtual ~IControlInfo() {}
290 
293  {
297  STATEFUL = 1,
298 
302  BANG
303  };
304 
309  virtual control_type get_type() const = 0;
310 
316  virtual const IStateInfo *get_state_info() const = 0;
317 
323  virtual bool get_can_be_source() const = 0;
324 
330  virtual bool get_can_be_target() const = 0;
331  };
332 
333 
337  class INTEGRA_API IStateInfo
338  {
339  protected:
340  IStateInfo() {}
341  public:
342  virtual ~IStateInfo() {}
343 
345  virtual CValue::type get_type() const = 0;
346 
348  virtual const IConstraint &get_constraint() const = 0;
349 
351  virtual const CValue &get_default_value() const = 0;
352 
354  virtual const IValueScale *get_value_scale() const = 0;
355 
362  virtual const value_map &get_state_labels() const = 0;
363 
368  virtual bool test_constraint( const CValue &value ) const = 0;
369  };
370 
371 
378  class INTEGRA_API IConstraint
379  {
380  protected:
381  IConstraint() {}
382  public:
383  virtual ~IConstraint() {}
384 
389  virtual const IValueRange *get_value_range() const = 0;
390 
395  virtual const value_set *get_allowed_states() const = 0;
396  };
397 
398 
407  class INTEGRA_API IValueRange
408  {
409  protected:
410  IValueRange() {}
411  public:
412  virtual ~IValueRange() {}
413 
414  virtual const CValue &get_minimum() const = 0;
415  virtual const CValue &get_maximum() const = 0;
416  };
417 
418 
427  class INTEGRA_API IValueScale
428  {
429  protected:
430  IValueScale() {}
431  public:
432  virtual ~IValueScale() {}
433 
434  /* enumeration of supported scale types */
435  enum scale_type
436  {
437  /* no scaling - value should be directly proportional to input */
438  LINEAR = 1,
439 
440  /* value should be proportional to <constant root>^input */
441  EXPONENTIAL,
442 
443  /* value should be proportional to 10*log10( input ) */
444  DECIBEL
445  };
446 
448  virtual scale_type get_scale_type() const = 0;
449  };
450 
451 
455  class INTEGRA_API IStreamInfo
456  {
457  protected:
458  IStreamInfo() {}
459  public:
460  virtual ~IStreamInfo() {}
461 
467  {
468  AUDIO = 1
469  };
470 
475  {
476  INPUT = 1,
477  OUTPUT
478  };
479 
481  virtual stream_type get_type() const = 0;
482 
484  virtual stream_direction get_direction() const = 0;
485  };
486 
487 
495  class INTEGRA_API IWidgetDefinition
496  {
497  protected:
498  IWidgetDefinition() {}
499  public:
500  virtual ~IWidgetDefinition() {}
501 
507  virtual const string &get_type() const = 0;
508 
515  virtual const string &get_label() const = 0;
516 
521  virtual const IWidgetPosition &get_position() const = 0;
522 
529  virtual const string_map &get_attribute_mappings() const = 0;
530  };
531 
532 
536  class INTEGRA_API IWidgetPosition
537  {
538  protected:
539  IWidgetPosition() {}
540  public:
541  virtual ~IWidgetPosition() {}
542 
543  virtual float get_x() const = 0;
544  virtual float get_y() const = 0;
545  virtual float get_width() const = 0;
546  virtual float get_height() const = 0;
547  };
548 
549 
553  class INTEGRA_API IImplementationInfo
554  {
555  protected:
557  public:
558  virtual ~IImplementationInfo() {}
559 
566  virtual unsigned int get_checksum() const = 0;
567  };
568 }
569 
570 
571 #endif
572 
Container for info about an Endpoint in an Integra Module interface.
Definition: interface_definition.h:212
Information about an Integra Module interface.
Definition: interface_definition.h:165
Stateful-control-specific info about an Endpoint in an Integra Module interface.
Definition: interface_definition.h:337
Information about an Integra Module's implementation.
Definition: interface_definition.h:553
type
Definition: value.h:52
Base class for the concrete value classes CIntegerValue, CFloatValue and CStringValue.
Definition: value.h:42
Definition of a widget in an Integra Module interface.
Definition: interface_definition.h:495
module_source
Definition: interface_definition.h:74
3rd party modules
Definition: interface_definition.h:90
Control-specific info about an Endpoint in an Integra Module interface.
Definition: interface_definition.h:284
control_type
Definition: interface_definition.h:292
Definition: common_typedefs.h:45
Defines class CGuidHelper, and guid containers.
Definition of a widget position.
Definition: interface_definition.h:536
Info about how numeric stateful controls should be scaled.
Definition: interface_definition.h:427
Top level container for an Integra Module interface.
Definition: interface_definition.h:66
Definition of a stateful control's constraint.
Definition: interface_definition.h:378
Stream-specific info about an Endpoint in an Integra Module interface.
Definition: interface_definition.h:455
Embedded modules.
Definition: interface_definition.h:100
Base class and type-specific subclasses to represent values.
endpoint_type
Definition: interface_definition.h:220
stream_type
Definition: interface_definition.h:466
Definition of a value-range type constraint.
Definition: interface_definition.h:407
stream_direction
Definition: interface_definition.h:474
#defines and typedefs used throughout the application