File: ags_pattern_envelope.h

package info (click to toggle)
gsequencer 7.7.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 71,040 kB
  • sloc: ansic: 1,145,949; xml: 31,016; cpp: 9,487; sh: 5,798; makefile: 3,845; perl: 155; sed: 16; python: 11
file content (143 lines) | stat: -rw-r--r-- 4,257 bytes parent folder | download | duplicates (3)
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
/* GSequencer - Advanced GTK Sequencer
 * Copyright (C) 2005-2025 Joël Krähemann
 *
 * This file is part of GSequencer.
 *
 * GSequencer 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.
 *
 * GSequencer 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 GSequencer.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __AGS_PATTERN_ENVELOPE_H__
#define __AGS_PATTERN_ENVELOPE_H__

#include <glib.h>
#include <glib-object.h>

#include <gtk/gtk.h>

#include <ags/libags.h>
#include <ags/libags-audio.h>
#include <ags/libags-gui.h>

G_BEGIN_DECLS

#define AGS_TYPE_PATTERN_ENVELOPE                (ags_pattern_envelope_get_type())
#define AGS_PATTERN_ENVELOPE(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PATTERN_ENVELOPE, AgsPatternEnvelope))
#define AGS_PATTERN_ENVELOPE_CLASS(class)        (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PATTERN_ENVELOPE, AgsPatternEnvelopeClass))
#define AGS_IS_PATTERN_ENVELOPE(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PATTERN_ENVELOPE))
#define AGS_IS_PATTERN_ENVELOPE_CLASS(class)     (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PATTERN_ENVELOPE))
#define AGS_PATTERN_ENVELOPE_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PATTERN_ENVELOPE, AgsPatternEnvelopeClass))

#define AGS_PATTERN_ENVELOPE_DEFAULT_VERSION "7.6.0"
#define AGS_PATTERN_ENVELOPE_DEFAULT_BUILD_ID "Mon Jan 20 21:04:41 UTC 2025"

#define AGS_PATTERN_ENVELOPE_SCALE_WIDTH (250)

typedef struct _AgsPatternEnvelope AgsPatternEnvelope;
typedef struct _AgsPatternEnvelopeClass AgsPatternEnvelopeClass;

typedef enum{
  AGS_PATTERN_ENVELOPE_NO_UPDATE      = 1,
}AgsPatternEnvelopeFlags;

typedef enum{
  AGS_PATTERN_ENVELOPE_COLUMN_EDIT,
  AGS_PATTERN_ENVELOPE_COLUMN_PLOT,
  AGS_PATTERN_ENVELOPE_COLUMN_PRESET_NAME,
  AGS_PATTERN_ENVELOPE_COLUMN_AUDIO_CHANNEL_START,
  AGS_PATTERN_ENVELOPE_COLUMN_AUDIO_CHANNEL_END,
  AGS_PATTERN_ENVELOPE_COLUMN_PAD_START,
  AGS_PATTERN_ENVELOPE_COLUMN_PAD_END,
  AGS_PATTERN_ENVELOPE_COLUMN_X_START,
  AGS_PATTERN_ENVELOPE_COLUMN_X_END,
  AGS_PATTERN_ENVELOPE_COLUMN_LAST,
}AgsPatternEnvelopeColumn;

struct _AgsPatternEnvelope
{
  GtkBox box;

  guint flags;
  guint connectable_flags;

  gchar *version;
  gchar *build_id;

  GtkCheckButton *enabled;
  
  AgsCartesian *cartesian;

  GtkTreeView *tree_view;

  GtkSpinButton *audio_channel_start;
  GtkSpinButton *audio_channel_end;
  
  GtkSpinButton *pad_start;
  GtkSpinButton *pad_end;

  GtkSpinButton *x_start;
  GtkSpinButton *x_end;
  
  AgsDial *attack_x;
  AgsDial *attack_y;
  
  AgsDial *decay_x;
  AgsDial *decay_y;

  AgsDial *sustain_x;
  AgsDial *sustain_y;

  AgsDial *release_x;
  AgsDial *release_y;

  AgsDial *ratio;

  GtkCheckButton *enable_envelope_lfo;

  GtkDialog *rename;
  
  GtkButton *move_up;
  GtkButton *move_down;
  GtkButton *add;
  GtkButton *remove;
};

struct _AgsPatternEnvelopeClass
{
  GtkBoxClass box;
};

GType ags_pattern_envelope_get_type(void);

void ags_pattern_envelope_set_preset_property(AgsPatternEnvelope *pattern_envelope,
					      AgsPreset *preset,
					      gchar *property_name, GValue *value);

AgsPreset* ags_pattern_envelope_get_active_preset(AgsPatternEnvelope *pattern_envelope);

void ags_pattern_envelope_load_preset(AgsPatternEnvelope *pattern_envelope);
void ags_pattern_envelope_add_preset(AgsPatternEnvelope *pattern_envelope,
				     gchar *preset_name);
void ags_pattern_envelope_remove_preset(AgsPatternEnvelope *pattern_envelope,
					guint nth);

void ags_pattern_envelope_reset_control(AgsPatternEnvelope *pattern_envelope);
void ags_pattern_envelope_reset_tree_view(AgsPatternEnvelope *pattern_envelope);

void ags_pattern_envelope_plot(AgsPatternEnvelope *pattern_envelope);

AgsPatternEnvelope* ags_pattern_envelope_new();

G_END_DECLS

#endif /*__AGS_PATTERN_ENVELOPE_H__*/