view MessageOrganiser.h @ 44:d810aa9ca03a

times. cosmetic stuff
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Mon, 15 Dec 2014 17:33:41 +0000
parents 4ad0d218f890
children 2396eb9dcddd
line wrap: on
line source
//
//  MessageOrganiser.h
//  tweakathlon
//
//  Created by Robert Tubb on 10/12/2013.
//
// This object handles the mapping from GUI to params
//
// and sends their messages to PD and eventLogger
#pragma once
#include "eventLogger.h"
#include <map.h>
#include <vector>
#include <string>
#include "boost/bind.hpp"
#include "boost/function.hpp"

#include <UIElement.h>
#include <Buttron.h>
#include <ButtronSlider.h>
#include <ButtronXY.h>
#include "TestController.h"
#include "timeController.h"
#include "PDSynthWrapper.h"
#include "ofxTimer.h"
#include "sliderPanel.h"
//#include "testApp.h"
#include "targetSymbol.h"
#include "3Dbox.h"
#include "6Dbox.h"
#include "TextPanel.h"
#include "CountdownText.h"
#include "buttonPanel.h"
#include "ExplorePresetManager.h"
#include "IconPanel.h"

// should be called TIMED TEST MESSAGE ORGANISER ?

// event logger needs to know
// which controls were showing in what mode
// which controls were mapped to what param
// what was the target sound params
// all the updates of control movements, submit, quit etc

// this is the bit that handles mapping from UI elements to synth i.e testApp DOESNT DO THAT

// has links to panel sliders can show hide them

// controls flow of stuff

//---------------------------------------------------------------------
//---------------------------------------------------------------------
extern TimeController timeController;

extern EventLogger eventLogger;

extern ExplorePresetManager expPresetManager;

//typedef boost::function<void(void)> AppModeChangeFunction;

class MessageOrganiser {
    
public:
    void init(PDSynthWrapper& cs, PDSynthWrapper& ts);    // could template for ui element type??
    void mapButtonToAction(UIElement* control, int mappingID);
    void setupDefaultMapping(controlPanelType whichInterfaceAreWeUsing);
    void setControlPanel(SliderPanel* p);
    void setBottomPanel(ButtonPanel * ntb);
    void setIconPanel(IconPanel * ip);
    void setSkipButton(Buttron* b);
    void setInstructionPanel(TextPanel * ip);
    void setSeqNumPanel(TextPanel * snp);
    void setScoreNumPanel(TextPanel * snp);
    void setDistanceSlider(ButtronSlider * s);
    void setMiddlePanel(TextPanel* tp);
    //-----------------------------------------------------------------------------
    void hideMyPanels();
    void showMyPanels();
    void midiFromLeap(int ctl_num, int ctl_val);
    void setPanelType(controlPanelType p);
    void update();
protected:

    PDSynthWrapper candidateSynth;
    PDSynthWrapper targetSynth;
    ButtonPanel* bottomPanel; // shows during test : play buttons and submit
    SliderPanel* controlPanel;
    
    IconPanel* presetIconPanel;
    TextPanel* instructionPanel;
    TextPanel * seqNumPanel;
    TextPanel * scoreNumPanel;
    TextPanel* middlePanel;
    map<int,UIElement*> currentMapping; // could get more sophisticated if not 1-1 ?
    
    vector<int> getMappingIDsFromSynths();
    void triggerCandidateSound();
    void paramChangeCallback(int mappingID, int value);
    void sendSynthValuesAgain();
    void setAllSlidersToValues(vector<int> values);
    void setCandidateAndSlidersToRandom();
    void setSlidersToCandidate();
    // we want to set UI object
    void setUIToParam(int index, int value);
    void mapControlToParam(UIElement* control, int mappingID);
    
    void showSeqNum(int num);
    void showScoreNum(int num);
    
    //-----------------------------------------------------------------------------
    
    void mapSlidersToParams(vector<UIElement*> elems, vector<int> mids);
    void mapXYToParams(ButtronXY* control, int mappingIDX, int mappingIDY);
    
    void mapControlToParam(UIElement* control, string paramName);
    virtual void buttonPressCallback(int mappingID, int value);
    
    void setSlidersToTarget();
    void setSlidersToDefault();
    void showTargetAsHints();
    bool onlyChangeCandidateOnTrigger;
    bool okToGetMidi;
    controlPanelType panelType;
    ButtronSlider * distanceSlider;
    Buttron* skipButton;
    
};