summaryrefslogtreecommitdiff
path: root/src/message.h
blob: b9d05f9b1337dd67e86f7e847c59883f02228e5a (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
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/***************************************************************************
 *            message.h
 *
 *  Wed Mar 20 15:50:57 CET 2013
 *  Copyright 2013 Bent Bisballe Nyeng
 *  deva@aasimon.org
 ****************************************************************************/

/*
 *  This file is part of DrumGizmo.
 *
 *  DrumGizmo 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.
 *
 *  DrumGizmo 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 DrumGizmo; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
 */
#ifndef __DRUMGIZMO_MESSAGE_H__
#define __DRUMGIZMO_MESSAGE_H__

#include <string>

#include "drumkit.h"

class MessageHandler;

class Message {
public:
  typedef enum {
    // Engine -> GUI Messages:
    LoadStatus, // Signal GUI the current load status.
    LoadStatusMidimap, // Signal GUI the current load status of the midimap.

    // GUI -> Engine, Engine -> Engine Messages:
    LoadDrumKit, // Signal engine to load drumkit.
    LoadMidimap, // Signal engine to load midimap.
    EngineSettingsMessage, // Request or receive engine settings.
    ChangeSettingMessage, // Update named setting in engine.
    DrumkitInfoMessage // Drumkit meta data
  } type_t;

  typedef enum {
    NormalProcessing, // Just add to the queue
    FilterMultiple, // Ignore top message if it has the same type.
    // SyncWait, // Block the send call until the message has been handled by the receiver.
  } processing_mode_t;

  virtual ~Message() {}
  virtual type_t type() = 0;
  virtual processing_mode_t processing_mode() { return NormalProcessing; }
};

class LoadStatusMessage : public Message {
public:
  type_t type() { return Message::LoadStatus; }
  processing_mode_t processing_mode() { return FilterMultiple; }
  unsigned int number_of_files;
  unsigned int numer_of_files_loaded;
  std::string current_file;
};

class LoadStatusMessageMidimap : public Message {
public:
  type_t type() { return Message::LoadStatusMidimap; }
  bool success;
};

class LoadDrumKitMessage : public Message {
public:
  type_t type() { return Message::LoadDrumKit; }
  std::string drumkitfile;
};

class LoadMidimapMessage : public Message {
public:
  type_t type() { return Message::LoadMidimap; }
  std::string midimapfile;
};

class DrumkitInfoMessage : public Message {
  public:
    type_t type() { return Message::DrumkitInfoMessage; }
    MetaData metadata;
};


class EngineSettingsMessage : public Message {
public:
  type_t type() { return Message::EngineSettingsMessage; }
  std::string midimapfile;
  bool midimap_loaded;

  std::string drumkitfile;
  bool drumkit_loaded;

  float enable_velocity_modifier;
  float velocity_modifier_falloff;
  float velocity_modifier_weight;
  float enable_velocity_randomiser;
  float velocity_randomiser_weight;
};

class ChangeSettingMessage : public Message {
public:
  typedef enum {
    enable_velocity_modifier,
    velocity_modifier_weight,
    velocity_modifier_falloff,
  } setting_name_t;

  ChangeSettingMessage(setting_name_t n, float v) {
    name = n;
    value = v;
  }

  type_t type() { return Message::ChangeSettingMessage; }

  setting_name_t name;
  float value;
};

#endif/*__DRUMGIZMO_MESSAGE_H__*/