00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #pragma once
00030
00031 #include <vector>
00032 #include <set>
00033 #include <string>
00034 #include <windows.h>
00035
00036 #ifndef __MACHINE_INTERFACE_H
00037 #include "../mdk/MachineInterface.h"
00038 #endif
00039
00089 enum
00090 {
00091 GROUP_GLOBAL = 1,
00092 GROUP_TRACK = 2,
00093 GROUP_ATTRIBUTE = 'A',
00094
00095 ALLOW_SWITCH = 1 << 0,
00096 ALLOW_BYTE = 1 << 1,
00097 ALLOW_NOTE = 1 << 2,
00098 ALLOW_WORD = 1 << 3,
00099
00100 ALLOW_GLOBAL = 1 << 4,
00101 ALLOW_TRACK = 1 << 5,
00102 ALLOW_ATTRIBUTES = 1 << 6,
00103
00104 ALLOW_ALL_TYPES = ALLOW_SWITCH | ALLOW_BYTE | ALLOW_NOTE | ALLOW_WORD,
00105 ALLOW_ALL_GROUPS = ALLOW_GLOBAL | ALLOW_TRACK,
00106
00107 TRACK_DEFAULT = -1,
00108
00109 EVENT_HANDLER_ADD = 1 << 0,
00110 EVENT_HANDLER_DELETE = 1 << 1,
00111 EVENT_HANDLER_RENAME = 1 << 2,
00112 ALL_EVENT_HANDLERS = EVENT_HANDLER_ADD | EVENT_HANDLER_DELETE | EVENT_HANDLER_RENAME,
00113 };
00114
00116 class PeerCtrlException : public std::exception
00117 {
00118 public:
00119 PeerCtrlException(const char* msg) { m_msg = msg; }
00120
00122 virtual const char* what() const throw() { return m_msg; }
00123
00124 protected:
00125 const char* m_msg;
00126 };
00127
00130 class CPeerCtrl
00131 {
00132 public:
00134
00142 static bool OnAddMachine(CMachine *pmac);
00143
00150 static bool OnDeleteMachine(CMachine *pmac);
00151
00161 static void SetEventHandlers(CMICallbacks *pCB, int which = ALL_EVENT_HANDLERS);
00162
00164
00168 CPeerCtrl();
00169
00175 CPeerCtrl(CMachine *pmac, CMachineInterface *pmi);
00176
00179 ~CPeerCtrl();
00180
00186 void Init(CMachine *pmac, CMachineInterface *pmi);
00187
00192 void SetLabel(const std::string& label);
00193
00196 void SetLabel(const char* label);
00197
00200 void SetLabelAsTrackNumber(int t);
00201
00203
00208 void ReadFileData(CMachineDataInput * const pi);
00209
00217 void PushFileData(const char* macname, int paramnum, int group);
00218
00227 void WriteFileData(CMachineDataOutput * const po, bool backwardsCompatible = false);
00228
00230
00240 void AssignParameter(CMachine *pMachine, int group, int param, int track = TRACK_DEFAULT);
00241
00245 void UnassignParameter();
00246
00248
00250 CMachine *GetMachine();
00252 char const *GetMachineName();
00254 CMachineInfo const *GetMInfo();
00256 CMachineParameter const *GetParamInfo();
00258 char const *GetParamString();
00259
00263 char const *GetAssignmentString();
00264
00271 int GetParamNumber_Grouped();
00272
00279 int GetParamNumber_Ungrouped();
00280
00283 int GetGroup();
00284
00288 bool GotParam();
00289
00291
00308 static void BeginImmediateBatch();
00309
00312 static void EndImmediateBatch();
00313
00315
00316 # ifdef PEERLIB_NEXTTICK
00317
00322 void ControlChange_NextTick (int track, int value);
00323
00325 void ControlChange_NextTick (int value) { ControlChange_NextTick(TRACK_DEFAULT, value); }
00326 # endif
00327
00330 void ControlChange_Immediate(int track, int value);
00331
00333 void ControlChange_Immediate(int value) { ControlChange_Immediate(TRACK_DEFAULT, value); }
00334
00336
00341 virtual void onChangeAssignment() {}
00342
00344
00352 int GetMachineNamesToCombo (HWND hWnd, int ComboID, const char *ExcludeName);
00353
00361 int GetParamNamesToList (CMachine *pmac, HWND hWnd, int ListID , int TypesAllowed);
00362
00364 int GetParamNamesToCombo (CMachine *pmac, HWND hWnd, int ComboID, int TypesAllowed);
00365
00371 bool SelectMachineInCombo (HWND hWnd, int ComboID);
00372
00378 bool SelectParameterInList (HWND hWnd, int ListID);
00379
00381 bool SelectParameterInCombo (HWND hWnd, int ComboID);
00382
00389 void AssignParameter(char *MacName, char *ParaName, int track = TRACK_DEFAULT);
00390
00392
00394 static void ShowPAL();
00395
00397
00398 protected:
00399 bool m_initialised;
00400 CMICallbacks *pCB;
00401 CMachine *m_parentmac;
00402 CMachineInterface *m_parentmi;
00403 std::string m_label;
00404
00405 CMachine *m_targetmac;
00406 int m_paramn, m_group, m_track;
00407 char m_loadedname[256];
00408
00409 CMachineParameter m_attrAsParam;
00410
00411 int GetParamNamesToDlgItem(CMachine *pmac, HWND DlgItem, int AddMessage, int TypesAllowed);
00412 int FindMachine(HWND DlgItem, int SelectStringMessage);
00413 bool FindParam(HWND DlgItem, int SelectStringMessage);
00414
00415 bool FindJustLoadedMachine();
00416
00417 protected:
00418 static std::vector<CPeerCtrl*> s_instances;
00419
00420 static bool s_initialised;
00421 static void InitStatic(CMachine *pmac, CMachineInterface *pmi);
00422 static int s_hostversion;
00423
00424 static bool s_immediatebatchmode;
00425 static std::set<CMachine*> s_immediatebatch, s_attributebatch;
00426
00427 static HMODULE s_palModule;
00428
00429
00430 typedef void (__cdecl *pf_addCMICallbacks)(CMICallbacks*);
00431 typedef void (__cdecl *pf_setPeerAssignment)(
00432 void* ctrl, CMachine* source, const char* label,
00433 CMachine* target, int group, int param, int track);
00434
00435
00436 void tellPAL();
00437 };