Blame hdspmixer/src/HDSPMixerOutput.cxx

Packit 427e91
/*
Packit 427e91
 *   HDSPMixer
Packit 427e91
 *    
Packit 427e91
 *   Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
Packit 427e91
 *    
Packit 427e91
 *   This program is free software; you can redistribute it and/or modify
Packit 427e91
 *   it under the terms of the GNU General Public License as published by
Packit 427e91
 *   the Free Software Foundation; either version 2 of the License, or
Packit 427e91
 *   (at your option) any later version.
Packit 427e91
 *
Packit 427e91
 *   This program is distributed in the hope that it will be useful,
Packit 427e91
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 427e91
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 427e91
 *   GNU General Public License for more details.
Packit 427e91
 *
Packit 427e91
 *   You should have received a copy of the GNU General Public License
Packit 427e91
 *   along with this program; if not, write to the Free Software
Packit 427e91
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Packit 427e91
 */
Packit 427e91
Packit 427e91
#pragma implementation
Packit 427e91
#include "HDSPMixerOutput.h"
Packit 427e91
Packit 427e91
static char const *labels_madi_ss[64] = {
Packit 427e91
   "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",
Packit 427e91
   "9", "10", "11", "12", "13", "14", "15", "16", 
Packit 427e91
  "17", "18", "19", "20", "21", "22", "23", "24", 
Packit 427e91
  "25", "26", "27", "28", "29", "30", "31", "32", 
Packit 427e91
  "33", "34", "35", "36", "37", "38", "39", "40", 
Packit 427e91
  "41", "42", "43", "44", "45", "46", "47", "48", 
Packit 427e91
  "49", "50", "51", "52", "53", "54", "55", "56", 
Packit 427e91
  "57", "58", "59", "60", "61", "62", "63", "64"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_madi_ds[64] = {
Packit 427e91
   "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",
Packit 427e91
   "9", "10", "11", "12", "13", "14", "15", "16", 
Packit 427e91
  "17", "18", "19", "20", "21", "22", "23", "24", 
Packit 427e91
  "25", "26", "27", "28", "29", "30", "31", "32", 
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_madi_qs[16] = {
Packit 427e91
   "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",
Packit 427e91
   "9", "10", "11", "12", "13", "14", "15", "16", 
Packit 427e91
};
Packit 427e91
Packit 427e91
Packit 427e91
static char const *labels_aes32[16] = {
Packit 427e91
  "AES 1", "AES 2", "AES 3", "AES 4", "AES 5", "AES 6", "AES 7", "AES 8",
Packit 427e91
  "AES 9", "AES 10", "AES 11", "AES 12", "AES 13", "AES 14", "AES 15", "AES 16"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_raydat_ss[36] = {
Packit 427e91
  "A1.1", "A1.2", "A1.3", "A1.4", "A1.5", "A1.6", "A1.7", "A1.8",
Packit 427e91
  "A2.1", "A2.2", "A2.3", "A2.4", "A2.5", "A2.6", "A2.7", "A2.8",
Packit 427e91
  "A3.1", "A3.2", "A3.3", "A3.4", "A3.5", "A3.6", "A3.7", "A3.8",
Packit 427e91
  "A4.1", "A4.2", "A4.3", "A4.4", "A4.5", "A4.6", "A4.7", "A4.8",
Packit 427e91
  "AES.L", "AES.R",
Packit 427e91
  "SP.L", "SP.R"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_raydat_ds[20] = {
Packit 427e91
  "A1.1", "A1.2", "A1.3", "A1.4",
Packit 427e91
  "A2.1", "A2.2", "A2.3", "A2.4",
Packit 427e91
  "A3.1", "A3.2", "A3.3", "A3.4",
Packit 427e91
  "A4.1", "A4.2", "A4.3", "A4.4",
Packit 427e91
  "AES.L", "AES.R",
Packit 427e91
  "SP.L", "SP.R"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_raydat_qs[12] = {
Packit 427e91
  "A1.1", "A1.2",
Packit 427e91
  "A2.1", "A2.2",
Packit 427e91
  "A3.1", "A3.2",
Packit 427e91
  "A4.1", "A4.2",
Packit 427e91
  "AES.L", "AES.R",
Packit 427e91
  "SP.L", "SP.R"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_rpm_output[6] = {
Packit 427e91
  "Main L", "Main R", "Mon L", "Mon R", "PH L", "PH R"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_rpm_input[5] = {
Packit 427e91
  "Phono 1.L", "Phono 1.R",
Packit 427e91
  "Phono 2.L", "Phono 2.R",
Packit 427e91
  "Mic"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_aio_ss_input[18] = {
Packit 427e91
  "AN 1",  "AN 2",
Packit 427e91
  "SP.L", "SP.R",
Packit 427e91
  "AES.L",  "AES.R",
Packit 427e91
  "A 1", "A 2", "A 3", "A 4",
Packit 427e91
  "A 5", "A 6", "A 7", "A 8",
Packit 427e91
  "AEB 1", "AEB 2", "AEB 3," "AEB 4"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_aio_ss_playback[20] = {
Packit 427e91
  "AN 1",  "AN 2",
Packit 427e91
  "SP.L", "SP.R",
Packit 427e91
  "AES.L",  "AES.R",
Packit 427e91
  "A 1", "A 2", "A 3", "A 4",
Packit 427e91
  "A 5", "A 6", "A 7", "A 8",
Packit 427e91
  "PH.L", "PH.R",
Packit 427e91
  "AEB 1", "AEB 2", "AEB 3", "AEB 4"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_aio_ds_input[14] = {
Packit 427e91
  "AN 1",  "AN 2",  
Packit 427e91
  "SP.L", "SP.R",
Packit 427e91
  "AES.L",  "AES.R",
Packit 427e91
  "A 1", "A 2", "A 3", "A 4",
Packit 427e91
  "AEB 1", "AEB 2", "AEB 3", "AEB 4"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_aio_ds_playback[16] = {
Packit 427e91
  "AN 1",  "AN 2",  
Packit 427e91
  "SP.L", "SP.R",
Packit 427e91
  "AES.L",  "AES.R",
Packit 427e91
  "A 1", "A 2", "A 3", "A 4",
Packit 427e91
  "PH.L", "PH.R",
Packit 427e91
  "AEB 1", "AEB 2", "AEB 3", "AEB 4"
Packit 427e91
 };
Packit 427e91
Packit 427e91
static char const *labels_aio_qs_input[12] = {
Packit 427e91
  "AN 1",  "AN 2",
Packit 427e91
  "SP.L", "SP.R",
Packit 427e91
  "AES.L",  "AES.R",
Packit 427e91
  "A 1", "A 2",
Packit 427e91
  "AEB 1", "AEB 2", "AEB 3", "AEB 4"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_aio_qs_playback[14] = {
Packit 427e91
  "AN 1",  "AN 2",
Packit 427e91
  "SP.L", "SP.R",
Packit 427e91
  "AES.L",  "AES.R",
Packit 427e91
  "A 1", "A 2",
Packit 427e91
  "PH.L", "PH.R",
Packit 427e91
  "AEB 1", "AEB 2", "AEB 3", "AEB 4"
Packit 427e91
};
Packit 427e91
Packit 427e91
Packit 427e91
static char const *labels_mf_ss[20] = {
Packit 427e91
    "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6", "AN 7", "AN 8",
Packit 427e91
    "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8",
Packit 427e91
    "SP.L", "SP.R", "AN.L", "AN.R"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_mf_ds[16] = {
Packit 427e91
    "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6", "AN 7", "AN 8",
Packit 427e91
    "A 1", "A 2", "A 3", "A 4",
Packit 427e91
    "SP.L", "SP.R", "AN.L", "AN.R"
Packit 427e91
};
Packit 427e91
Packit 427e91
Packit 427e91
static char const *labels_df_ss[28] = {
Packit 427e91
    "A1 1", "A1 2", "A1 3", "A1 4", "A1 5", "A1 6", "A1 7", "A1 8",
Packit 427e91
    "A2 1", "A2 2", "A2 3", "A2 4", "A2 5", "A2 6", "A2 7", "A2 8",
Packit 427e91
    "A3 1", "A3 2", "A3 3", "A3 4", "A3 5", "A3 6", "A3 7", "A3 8",
Packit 427e91
    "SP.L", "SP.R", "AN.L", "AN.R"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_df_ds[16] = {
Packit 427e91
    "A1 1", "A1 2", "A1 3", "A1 4",
Packit 427e91
    "A2 1", "A2 2", "A2 3", "A2 4",
Packit 427e91
    "A3 1", "A3 2", "A3 3", "A3 4",
Packit 427e91
    "SP.L", "SP.R", "AN.L", "AN.R"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_9632_ss[16] = {
Packit 427e91
    "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8",
Packit 427e91
    "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_9632_ds[12] = {
Packit 427e91
    "A 1", "A 2", "A 3", "A 4",
Packit 427e91
    "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6"
Packit 427e91
};
Packit 427e91
Packit 427e91
static char const *labels_9632_qs[8] = {
Packit 427e91
    "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6"
Packit 427e91
};
Packit 427e91
Packit 427e91
HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x, y, w, h)
Packit 427e91
{
Packit 427e91
Packit 427e91
    for (int j = 0; j < MAX_CARDS; ++j) {
Packit 427e91
	for (int i = 0; i < NUM_PRESETS; ++i) {
Packit 427e91
	    data[j][0][i] = new HDSPMixerOutputData();
Packit 427e91
	    data[j][1][i] = new HDSPMixerOutputData();
Packit 427e91
	    data[j][2][i] = new HDSPMixerOutputData();
Packit 427e91
	}
Packit 427e91
    }
Packit 427e91
    if (num%2) {
Packit 427e91
	p_output_xpm = output_r_xpm;
Packit 427e91
    } else {
Packit 427e91
	p_output_xpm = output_xpm;
Packit 427e91
    }
Packit 427e91
    basew = (HDSPMixerWindow *)window();
Packit 427e91
    setLabels();
Packit 427e91
    out_num = num;
Packit 427e91
    fader = new HDSPMixerFader(x+4, y+19, 65535.0, out_num+1, 2);
Packit 427e91
    peak = new HDSPMixerPeak(x+3, y+4, 0);
Packit 427e91
    gain = new HDSPMixerGain(x+3, y+175, 0);
Packit 427e91
    meter = new HDSPMixerMeter(x+20, y+27, false, peak);
Packit 427e91
    end();
Packit 427e91
}
Packit 427e91
Packit 427e91
void HDSPMixerOutput::setLabels()
Packit 427e91
{
Packit 427e91
    int type = basew->cards[basew->current_card]->type;
Packit 427e91
    int sm = basew->cards[basew->current_card]->speed_mode;
Packit 427e91
Packit 427e91
    if (type == H9632) {
Packit 427e91
        switch (sm) {
Packit 427e91
            case 0:
Packit 427e91
                labels_input = labels_playback = labels_9632_ss;
Packit 427e91
                break;
Packit 427e91
            case 1:
Packit 427e91
                labels_input = labels_playback = labels_9632_ds;
Packit 427e91
                break;	
Packit 427e91
            case 2:
Packit 427e91
                labels_input = labels_playback = labels_9632_qs;
Packit 427e91
                break;
Packit 427e91
        }
Packit 427e91
        return;
Packit 427e91
    }
Packit 427e91
    
Packit 427e91
    if (type == Multiface) {
Packit 427e91
        if (sm)
Packit 427e91
            labels_input = labels_playback = labels_mf_ds;
Packit 427e91
        else 
Packit 427e91
            labels_input = labels_playback = labels_mf_ss;
Packit 427e91
        return;
Packit 427e91
    };
Packit 427e91
Packit 427e91
    if (type == RPM) {
Packit 427e91
        labels_input = labels_rpm_input;
Packit 427e91
        labels_playback = labels_rpm_output;
Packit 427e91
        return;
Packit 427e91
    };
Packit 427e91
    
Packit 427e91
    if (type == Digiface || type == H9652) {
Packit 427e91
        if (sm)
Packit 427e91
            labels_input = labels_playback = labels_df_ds;
Packit 427e91
        else
Packit 427e91
            labels_input = labels_playback = labels_df_ss;
Packit 427e91
        return;
Packit 427e91
    }
Packit 427e91
    
Packit 427e91
    
Packit 427e91
    if (HDSPeMADI == type) {
Packit 427e91
        switch (sm) {
Packit 427e91
            case 0:
Packit 427e91
                labels_input = labels_playback = labels_madi_ss;
Packit 427e91
                break;
Packit 427e91
            case 1:
Packit 427e91
                labels_input = labels_playback = labels_madi_ds;
Packit 427e91
                break;	
Packit 427e91
            case 2:
Packit 427e91
                labels_input = labels_playback = labels_madi_qs;
Packit 427e91
                break;
Packit 427e91
        }
Packit 427e91
        return;
Packit 427e91
    }
Packit 427e91
Packit 427e91
    if (HDSP_AES == type) {
Packit 427e91
        labels_input = labels_playback = labels_aes32;
Packit 427e91
        return;
Packit 427e91
    }
Packit 427e91
    
Packit 427e91
    if (HDSPeAIO == type) {
Packit 427e91
        switch (sm) {
Packit 427e91
            case 0:
Packit 427e91
                labels_input = labels_aio_ss_input;
Packit 427e91
                labels_playback = labels_aio_ss_playback;
Packit 427e91
                break;
Packit 427e91
            case 1:
Packit 427e91
                labels_input = labels_aio_ds_input;
Packit 427e91
                labels_playback = labels_aio_ds_playback;
Packit 427e91
                break;	
Packit 427e91
            case 2:
Packit 427e91
                labels_input = labels_aio_qs_input;
Packit 427e91
                labels_playback = labels_aio_ds_playback;
Packit 427e91
                break;
Packit 427e91
        }
Packit 427e91
        return;
Packit 427e91
    }
Packit 427e91
    
Packit 427e91
    if (HDSPeRayDAT == type) {
Packit 427e91
        switch (sm) {
Packit 427e91
            case 0:
Packit 427e91
                labels_input = labels_playback = labels_raydat_ss;
Packit 427e91
                break;
Packit 427e91
            case 1:
Packit 427e91
                labels_input = labels_playback = labels_raydat_ds;
Packit 427e91
                break;	
Packit 427e91
            case 2:
Packit 427e91
                labels_input = labels_playback = labels_raydat_qs;
Packit 427e91
                break;
Packit 427e91
        }
Packit 427e91
        return;
Packit 427e91
    }
Packit 427e91
    
Packit 427e91
    fprintf(stderr, "Unknown card type for output labels, assigning defaults\n");
Packit 427e91
    labels_input = labels_playback = labels_madi_ss;
Packit 427e91
}
Packit 427e91
Packit 427e91
void HDSPMixerOutput::draw_background()
Packit 427e91
{
Packit 427e91
    draw_background(x(), y(), w(), h());
Packit 427e91
}
Packit 427e91
Packit 427e91
void HDSPMixerOutput::draw_background(int xpos, int ypos, int w, int h)
Packit 427e91
{
Packit 427e91
    fl_push_clip(xpos, ypos, w, h);
Packit 427e91
    fl_draw_pixmap(p_output_xpm, x(), y());
Packit 427e91
    fl_pop_clip();    
Packit 427e91
}
Packit 427e91
Packit 427e91
void HDSPMixerOutput::draw()
Packit 427e91
{
Packit 427e91
    Fl_Widget*const* a = array();
Packit 427e91
    if (damage() & ~FL_DAMAGE_CHILD) {
Packit 427e91
	draw_background();
Packit 427e91
	fl_color(FL_FOREGROUND_COLOR);
Packit 427e91
	fl_font(FL_HELVETICA, 8);
Packit 427e91
	fl_draw(labels_playback[out_num], x()+4, y()+193, 27, 9, FL_ALIGN_CENTER);
Packit 427e91
	for (int i=children(); i--;) {
Packit 427e91
	    Fl_Widget& o = **a++;
Packit 427e91
	    draw_child(o);
Packit 427e91
	}
Packit 427e91
    } else {
Packit 427e91
	for (int i=children(); i--;) update_child(**a++);
Packit 427e91
    }
Packit 427e91
}
Packit 427e91
Packit 427e91
void HDSPMixerOutput::update_child(Fl_Widget& widget) {
Packit 427e91
    if (widget.damage() && widget.visible() && widget.type() < FL_WINDOW && fl_not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
Packit 427e91
	if ((HDSPMixerMeter *)&widget == meter) {
Packit 427e91
	    ((HDSPMixerMeter *)&widget)->fine_draw = 1;
Packit 427e91
	} else {
Packit 427e91
	    draw_background(widget.x(), widget.y(), widget.w(), widget.h());
Packit 427e91
	}
Packit 427e91
	widget.draw();
Packit 427e91
	widget.clear_damage();
Packit 427e91
    }
Packit 427e91
}
Packit 427e91