Subversion Repositories svn.mios32

Rev

Rev 1762 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
877 tk 1
/* -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- */
2
// $Id: MiosStudio.h 2180 2015-06-14 19:21:59Z tk $
3
/*
4
 * MIDI Monitor Component
5
 *
6
 * ==========================================================================
7
 *
8
 *  Copyright (C) 2010 Thorsten Klose (tk@midibox.org)
9
 *  Licensed for personal non-commercial use only.
10
 *  All other rights reserved.
11
 *
12
 * ==========================================================================
13
 */
14
 
15
#ifndef _MIOS_STUDIO_H
16
#define _MIOS_STUDIO_H
17
 
926 tk 18
#include "../includes.h"
878 tk 19
#include <queue>
877 tk 20
 
21
#include "UploadWindow.h"
22
#include "MidiMonitor.h"
23
#include "MiosTerminal.h"
24
#include "MidiKeyboard.h"
927 tk 25
#include "SysexTool.h"
1003 tk 26
#include "OscTool.h"
932 tk 27
#include "Midio128Tool.h"
935 tk 28
#include "MbCvTool.h"
1131 tk 29
#include "MbhpMfTool.h"
1502 tk 30
#include "SysexLibrarian.h"
1542 tk 31
#include "MiosFileBrowser.h"
1502 tk 32
#include "../SysexPatchDb.h"
891 tk 33
#include "../UploadHandler.h"
877 tk 34
 
35
class MiosStudio
36
    : public Component
878 tk 37
    , public MidiInputCallback
937 tk 38
    , public MenuBarModel
39
    , public ApplicationCommandTarget
878 tk 40
    , public Timer
877 tk 41
{
42
public:
937 tk 43
    enum CommandIDs {
1626 tk 44
        enableMonitors             = 0x1010,
45
        enableUpload               = 0x1011,
46
        enableTerminal             = 0x1012,
47
        enableKeyboard             = 0x1013,
48
        rescanDevices              = 0x1100,
937 tk 49
        showSysexTool              = 0x2000,
1003 tk 50
        showOscTool                = 0x2001,
51
        showMidio128Tool           = 0x2002,
52
        showMbCvTool               = 0x2003,
1131 tk 53
        showMbhpMfTool             = 0x2004,
1502 tk 54
        showSysexLibrarian         = 0x2005,
1542 tk 55
        showMiosFileBrowser        = 0x2006,
937 tk 56
        showMiosStudioPage         = 0x3000,
57
        showTroubleshootingPage    = 0x3001,
58
    };
59
 
877 tk 60
    //==============================================================================
61
    MiosStudio();
62
    ~MiosStudio();
63
 
64
    //==============================================================================
1762 tk 65
    void redirectIOToConsole();
66
 
67
    //==============================================================================
877 tk 68
    void paint (Graphics& g);
69
    void resized();
70
 
878 tk 71
    //==============================================================================
1759 tk 72
    bool runningInBatchMode(void);
73
 
74
    //==============================================================================
878 tk 75
    void handleIncomingMidiMessage(MidiInput* source, const MidiMessage& message);
877 tk 76
 
878 tk 77
    void timerCallback();
78
 
928 tk 79
    void sendMidiMessage(MidiMessage &message);
937 tk 80
    void closeMidiPorts(void);
878 tk 81
 
82
    void setMidiInput(const String &port);
908 tk 83
    String getMidiInput(void);
878 tk 84
    void setMidiOutput(const String &port);
908 tk 85
    String getMidiOutput(void);
878 tk 86
 
1724 tk 87
    StringArray getMenuBarNames();
88
    PopupMenu getMenuForIndex(int topLevelMenuIndex, const String& menuName);
937 tk 89
    void menuItemSelected(int menuItemID, int topLevelMenuIndex);
90
 
91
    ApplicationCommandTarget* getNextCommandTarget();
92
    void getAllCommands(Array <CommandID>& commands);
1012 philetaylo 93
#if JUCE_MAJOR_VERSION==1 && JUCE_MINOR_VERSION<51
937 tk 94
    void getCommandInfo(const CommandID commandID, ApplicationCommandInfo& result);
1012 philetaylo 95
#else
96
    void getCommandInfo(CommandID commandID, ApplicationCommandInfo& result);
97
#endif
98
    bool perform(const InvocationInfo& info);
937 tk 99
 
1626 tk 100
    void updateLayout(void);
101
 
878 tk 102
    AudioDeviceManager audioDeviceManager;
103
 
891 tk 104
    UploadHandler *uploadHandler;
105
 
927 tk 106
    // Windows opened by Tools button in Upload Window
107
    SysexToolWindow *sysexToolWindow;
1003 tk 108
    OscToolWindow *oscToolWindow;
932 tk 109
    Midio128ToolWindow *midio128ToolWindow;
935 tk 110
    MbCvToolWindow *mbCvToolWindow;
1131 tk 111
    MbhpMfToolWindow *mbhpMfToolWindow;
1502 tk 112
    SysexLibrarianWindow *sysexLibrarianWindow;
1542 tk 113
    MiosFileBrowserWindow *miosFileBrowserWindow;
927 tk 114
 
1502 tk 115
    //==============================================================================
116
    SysexPatchDb *sysexPatchDb;
117
 
118
    //==============================================================================
1762 tk 119
    int initialGuiX; // if -1: centered
120
    int initialGuiY; // if -1: centered
121
    String initialGuiTitle;
122
 
123
    //==============================================================================
949 philetaylo 124
    // This is needed by MSVC in debug mode (please #ifdef if it causes Mac problems)
125
    juce_UseDebuggingNewOperator
878 tk 126
protected:
877 tk 127
    //==============================================================================
1759 tk 128
    bool batchMode;
2180 tk 129
    bool duggleMode;
1759 tk 130
    String commandLineErrorMessages;
131
    String commandLineInfoMessages;
132
    String inPortFromCommandLine;
133
    String outPortFromCommandLine;
134
 
135
    StringArray batchJobs;
136
    unsigned batchWaitCounter;
137
 
138
    //==============================================================================
877 tk 139
    UploadWindow *uploadWindow;
140
    MidiMonitor *midiInMonitor;
141
    MidiMonitor *midiOutMonitor;
142
    MiosTerminal *miosTerminal;
143
    MidiKeyboard *midiKeyboard;
144
 
1626 tk 145
    Array<Component *> layoutHComps;
877 tk 146
    StretchableLayoutManager horizontalLayout;
147
    StretchableLayoutResizerBar* horizontalDividerBar1;
148
    StretchableLayoutResizerBar* horizontalDividerBar2;
149
    StretchableLayoutResizerBar* horizontalDividerBar3;
150
 
1626 tk 151
    Array<Component *> layoutVComps;
877 tk 152
    StretchableLayoutManager verticalLayoutMonitors;
153
    StretchableLayoutResizerBar* verticalDividerBarMonitors;
154
 
927 tk 155
    ResizableCornerComponent *resizer;
156
    ComponentBoundsConstrainer resizeLimits;
157
 
878 tk 158
    // TK: the Juce specific "MidiBuffer" sporatically throws an assertion when overloaded
159
    // therefore I'm using a std::queue instead
891 tk 160
    std::queue<MidiMessage> midiInQueue;
928 tk 161
    CriticalSection midiInQueueLock;
878 tk 162
    uint8 runningStatus;
928 tk 163
 
891 tk 164
    std::queue<MidiMessage> midiOutQueue;
928 tk 165
    CriticalSection midiOutQueueLock;
877 tk 166
 
939 tk 167
    Array<uint8> sysexReceiveBuffer;
168
 
917 tk 169
    int initialMidiScanCounter;
170
 
937 tk 171
    // the command manager object used to dispatch command events
172
    ApplicationCommandManager* commandManager;
173
 
877 tk 174
    //==============================================================================
175
    // (prevent copy constructor and operator= being generated..)
176
    MiosStudio (const MiosStudio&);
177
    const MiosStudio& operator= (const MiosStudio&);
178
};
179
 
180
#endif /* _MIOS_STUDIO_H */