view Source/GUI.cpp @ 0:2fa9c10568d1

Initial setup.
author martinm_home <martin.morrell@eecs.qmul.ac.uk>
date Tue, 14 Aug 2012 09:34:15 +0100
parents
children 503cbcdd0b2a
line wrap: on
line source
//-----------------------------------------------------------------------------
// VSTGUI: Graphical User Interface Framework for VST plugins : 
//
// Version 3.5
//
//-----------------------------------------------------------------------------
// VSTGUI LICENSE
// © 2008, Steinberg Media Technologies, All Rights Reserved
//-----------------------------------------------------------------------------
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
// 
//   * Redistributions of source code must retain the above copyright notice, 
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation 
//     and/or other materials provided with the distribution.
//   * Neither the name of the Steinberg Media Technologies nor the names of its
//     contributors may be used to endorse or promote products derived from this 
//     software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A  PARTICULAR PURPOSE ARE DISCLAIMED. 
// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  OF THIS SOFTWARE, EVEN IF ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGE.
//-----------------------------------------------------------------------------

#include "GUI.h"
#include <stdio.h>
#include <vstgui.h>




//------------------------------------------------------------------------------------
AEffGUIEditor* createEditor (AudioEffectX* effect)
{
	return new MyEditor (effect);
}

//------------------------------------------------------------------------------------
MyEditor::MyEditor (void* ptr)
: AEffGUIEditor (ptr)
{
    //CBitmap* plugin_background = new CBitmap ("icme_plugin.png");
    rect.left   = 0;
    rect.top    = 0;
    rect.right  = 545;//plugin_background->getWidth ();
    rect.bottom = 360;//plugin_background->getHeight ();
}

//------------------------------------------------------------------------------------
bool MyEditor::open (void* ptr)
{
	
	//Knob Images
	knob_360 = new CBitmap ("360_knob.png");
	knob_red = new CBitmap ("red_knob.png");
	knob_blue = new CBitmap ("blue_knob.png");
	knob_red_blue = new CBitmap ("red_blue_knob.png");
	knob_mode2 = new CBitmap ("mode2_knob.png");
	knob_mode4 = new CBitmap ("mode4_knob.png");
	
    bRotations = new CBitmap ("rotations.png");
    bZoom = new CBitmap ("zoom.png");
    bStereo = new CBitmap ("stereo.png");
    bName = new CBitmap ("my_name.png");
	
	
	//-- first we create the frame
    //CBitmap* plugin_background = new CBitmap ("icme_plugin.png");
	//CRect frameSize (0, 0, plugin_background->getWidth (), plugin_background->getHeight ());
	frameSize (0, 0, 545, 360);
	CFrame* newFrame = new CFrame (frameSize, ptr, this);
	newFrame->setBackgroundColor (CColor(23,25,26,255));    //CColor(47,51,53,255)
    

    
    
    
    
    //-- IMPLEMENTATION OF SWITCHES AND KNOBS --//
	//-- TEXT DISPLAYES FOR SWITCHES AND KNOBS --//
	kDisplayText = CColor(255,255,255,255);//(R,G,B,Alpha)
	kDisplayBackground = CColor(94,102,106,255);//(R,G,B,Alpha)
	kLabelText = CColor(82,116,193,255);//(R,G,B,Alpha)	
	kBlank = CColor(0,0,0,0);
    
    
	textDepth = 15;
	textDepthLarge = 20;
	labelOffset = -20;
	displayOffset = 7;
	
	
	//Transforms
    int transformsSep = 25;
	int transformsHoz = transformsSep;
	int transformsEl = 50;
	transformsDisplay(transformsHoz, transformsEl, transformsSep, newFrame);
	
	
	
	//Zooming
	//int zoomHoz = transformsHoz+ 0.5*(knob_red_blue->getWidth()+transformsSep);
	//int zoomEl = transformsEl + textDepth + textDepthLarge + knob_red_blue->getHeight()/110+ 40 ;
	int zoomHoz = transformsHoz + 3*knob_red_blue->getWidth() + 6*transformsSep;
	int zoomEl = transformsEl;
	int zoomSep = transformsSep;
	zoomDisplay(zoomHoz, zoomEl, zoomSep, newFrame);
	
	
	
	//Stereo Decoding
	int stereoHoz = transformsHoz;
	int stereoEl = transformsEl + knob_mode2->getHeight()/2 + displayOffset + textDepth + 2*transformsSep;
	int stereoSep = transformsSep;
	stereoDisplay(stereoHoz, stereoEl, stereoSep, newFrame);
	
    
    //My Name
    nameDisplay(stereoHoz, stereoEl, stereoSep, newFrame);
 
    
    
    
    //Stereo Plot
    //    CRect size (20, 150, 50, 180);
    //    CPoint offset (0, 0);
    //    CBitmap* hPolarPlot = new CBitmap ("pink.png");
    //PolarPlot = new MyPlot(mySize, this, 0, pink, offset);
    //PolarPlot = new MyPlot;
    
    
    
	
	//Forget Images
	knob_360->forget();
	knob_red->forget();
	knob_blue->forget();
	knob_red_blue->forget();
	knob_mode2->forget();
	knob_mode4->forget();
    
    bRotations->forget ();
	bZoom->forget ();
    bStereo->forget ();
    bName->forget ();
	
    
	//-- remember our controls so that we can sync them with the state of the effect
	controls[kRotate] = knobRotate;
	controls[kTilt] = knobTilt;
	controls[kTumble] = knobTumble;
	controls[kZoomMethod] = knobZoomMethod;
	controls[kZoom] = knobZoom;
	controls[kWidth] = knobWidth;
	controls[kPattern] = knobPattern;
	controls[kMode] = knobMode;
	controls[kRearVerb] = knobRearVerb;
	controls[kHiVerb] = knobHiVerb;
	
    
    
    
	//newFrame->addView (new LineStyleTestView (CRect (0, 0, 0, 0)));
    
	//-- set the member frame to the newly created frame
	//-- we do it this way because it is possible that the setParameter method is called 
	//-- in between of constructing the frame and it's controls
	frame = newFrame;
    
	//-- sync parameters
	for (int i = 0; i < kNumParameters; i++)
		setParameter (i, effect->getParameter (i));

    
	return true;
}



//------------------------------------------------------------------------------------
void MyEditor::close ()
{
	//-- on close we need to delete the frame object.
	//-- once again we make sure that the member frame variable is set to zero before we delete it
	//-- so that calls to setParameter won't crash.
    
    
}


//------------------------------------------------------------------------------------
void MyEditor::transformsDisplay(int &transformsHoz, int &transformsEl, int &transformsSep, CFrame* newFrame)
{
    CRect transSize = CRect (0, 0, bRotations->getWidth (),bRotations->getHeight ());
    transSize.offset(transformsHoz-transformsSep/2, transformsEl+labelOffset-textDepthLarge);
	CView* transforms_view = new CView (transSize);
    transforms_view->setBackground (bRotations);
    newFrame->addView (transforms_view);
    
	//Rotate
	r (0, 0, knob_red_blue->getWidth (), knob_red_blue->getHeight () / 101);
	r.offset(transformsHoz, transformsEl);
	knobRotate = new CAnimKnob (r, this, kRotate, 101, knob_360->getHeight () / 101, knob_360, CPoint (0, 0));//101, 64, 
	newFrame->addView (knobRotate);
	//knobRotate->forget ();
	
	//Tilt
	r.offset(knob_red_blue->getWidth()+transformsSep, 0);
	knobTilt = new CAnimKnob (r, this, kTilt, 101, knob_360->getHeight () / 101, knob_360, CPoint (0, 0));
	newFrame->addView (knobTilt);
	//knobTilt->forget ();
	
	//Tumble
	r.offset(knob_red_blue->getWidth()+transformsSep, 0);
	knobTumble = new CAnimKnob (r, this, kTumble, 101, knob_360->getHeight () / 101, knob_360, CPoint (0, 0));
	newFrame->addView (knobTumble);
	//knobTumble->forget ();
	
	
	
	
	
	
	
	
    //--CTextLabel--------------------------------------
    //Label Rotate
    LabelSize (0, 0, knob_red_blue->getWidth (), textDepth); 
    LabelSize.offset (transformsHoz, transformsEl+labelOffset);
    CTextLabel* labelRotate = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelRotate->setFont (kNormalFontSmall); 
    labelRotate->setFontColor (kLabelText); 
    labelRotate->setBackColor (kBlank); 
    labelRotate->setFrameColor (kBlank);
    labelRotate->setText("Rotate");
    newFrame->addView (labelRotate);
	
	//Label Tilt
	LabelSize.offset (knob_red_blue->getWidth()+transformsSep, 0);
    CTextLabel* labelTilt = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelTilt->setFont (kNormalFontSmall); 
    labelTilt->setFontColor (kLabelText); 
    labelTilt->setBackColor (kBlank); 
    labelTilt->setFrameColor (kBlank);
    labelTilt->setText("Tilt");
    newFrame->addView (labelTilt);
	
	//Label Tumble
	LabelSize.offset (knob_red_blue->getWidth()+transformsSep, 0);
    CTextLabel* labelTumble = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelTumble->setFont (kNormalFontSmall); 
    labelTumble->setFontColor (kLabelText); 
    labelTumble->setBackColor (kBlank); 
    labelTumble->setFrameColor (kBlank);
    labelTumble->setText("Tumble");
    newFrame->addView (labelTumble);
	
	
	//Label Section
    LabelSize (0, 0, knob_red_blue->getWidth ()*3 + transformsSep*2, textDepthLarge); 
    LabelSize.offset (transformsHoz, transformsEl+labelOffset - textDepthLarge);
    CTextLabel* labelTransforms = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelTransforms->setFont (kNormalFontBig); 
    labelTransforms->setFontColor (kLabelText); 
    labelTransforms->setBackColor (kBlank); 
    labelTransforms->setFrameColor (kBlank);
    labelTransforms->setText("Transforms");
    newFrame->addView (labelTransforms);
	
	
	
	
	//--CTextLabel--------------------------------------
	//Rotate Value
	DisplaySize (0, 0, knob_red_blue->getWidth (), textDepth); 
	DisplaySize.offset (transformsHoz, transformsEl+knob_red_blue->getHeight()/110+displayOffset);
	paramRotate = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramRotate->setHoriAlign(kCenterText);
	paramRotate->setFont (kNormalFontVerySmall); 
	paramRotate->setFontColor (kDisplayText); 
	paramRotate->setBackColor (kDisplayBackground); 
	paramRotate->setFrameColor (kBlackCColor); 
	newFrame->addView (paramRotate); 
	paramRotate->setText("TEST");
	
	
	//Tilt Value 
	DisplaySize.offset (knob_red_blue->getWidth()+transformsSep, 0);
	paramTilt = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramTilt->setHoriAlign(kCenterText);
	paramTilt->setFont (kNormalFontVerySmall); 
	paramTilt->setFontColor (kDisplayText); 
	paramTilt->setBackColor (kDisplayBackground); 
	paramTilt->setFrameColor (kBlackCColor); 
	newFrame->addView (paramTilt); 
	
	
	//Tumble Value
	DisplaySize.offset (knob_red_blue->getWidth()+transformsSep, 0);
	paramTumble = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramTumble->setHoriAlign(kCenterText);
	paramTumble->setFont (kNormalFontVerySmall); 
	paramTumble->setFontColor (kDisplayText); 
	paramTumble->setBackColor (kDisplayBackground); 
	paramTumble->setFrameColor (kBlackCColor); 
	newFrame->addView (paramTumble); 
}


//------------------------------------------------------------------------------------
void MyEditor::zoomDisplay(int &zoomHoz, int &zoomEl, int &zoomSep, CFrame* newFrame)
{
    CRect zoomSize = CRect (0, 0, bZoom->getWidth (),bZoom->getHeight ());
    zoomSize.offset(zoomHoz-zoomSep/2, zoomEl+labelOffset-textDepthLarge);
	CView* zoom_view = new CView (zoomSize);
    zoom_view->setBackground (bZoom);
    newFrame->addView (zoom_view);
    
	//ZoomMethod
	CRect r (0, 0, knob_red_blue->getWidth (), knob_red_blue->getHeight () / 101);
	r.offset(zoomHoz, zoomEl);
	knobZoomMethod = new CHorizontalSwitch (r, this, kZoomMethod, 4, knob_mode4->getHeight () / 4, 4, knob_mode4, CPoint (0, 0));
	newFrame->addView (knobZoomMethod);
	//knobZoomMethod->forget ();
	
	//Zoom
	r.offset(knob_mode4->getWidth()+zoomSep, 0);
	knobZoom = new CAnimKnob (r, this, kZoom, 101, knob_red_blue->getHeight () / 101, knob_red_blue, CPoint (0, 0));
	newFrame->addView (knobZoom);
	//knobZoom->forget ();
	
	
	//--CTextLabel--------------------------------------
    //Label ZoomMethod
    LabelSize (0, 0, knob_red_blue->getWidth (), textDepth); 
    LabelSize.offset (zoomHoz, zoomEl+labelOffset);
    CTextLabel* labelZoomMethod = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelZoomMethod->setFont (kNormalFontSmall); 
    labelZoomMethod->setFontColor (kLabelText); 
    labelZoomMethod->setBackColor (kBlank); 
    labelZoomMethod->setFrameColor (kBlank);
    labelZoomMethod->setText("Zoom Type");
    newFrame->addView (labelZoomMethod);
	
	//Label Zoom
	LabelSize.offset (knob_mode4->getWidth()+zoomSep, 0);
    CTextLabel* labelZoom = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelZoom->setFont (kNormalFontSmall); 
    labelZoom->setFontColor (kLabelText); 
    labelZoom->setBackColor (kBlank); 
    labelZoom->setFrameColor (kBlank);
    labelZoom->setText("Zoom");
    newFrame->addView (labelZoom);
	
	//Label Section
    LabelSize (0, 0, knob_red_blue->getWidth ()*2 + zoomSep*1, textDepthLarge); 
    LabelSize.offset (zoomHoz, zoomEl+labelOffset - textDepthLarge);
    CTextLabel* labelTransforms = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelTransforms->setFont (kNormalFontBig); 
    labelTransforms->setFontColor (kLabelText); 
    labelTransforms->setBackColor (kBlank); 
    labelTransforms->setFrameColor (kBlank);
    labelTransforms->setText("Zooming");
    newFrame->addView (labelTransforms);
	
	
	//--CTextLabel--------------------------------------
	//Zoom Method
	DisplaySize (0, 0, knob_red_blue->getWidth (), textDepth); 
	DisplaySize.offset (zoomHoz, zoomEl+knob_red_blue->getHeight()/110+displayOffset);
	paramZoomMethod = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramZoomMethod->setHoriAlign(kCenterText);
	paramZoomMethod->setFont (kNormalFontVerySmall); 
	paramZoomMethod->setFontColor (kDisplayText); 
	paramZoomMethod->setBackColor (kDisplayBackground); 
	paramZoomMethod->setFrameColor (kBlackCColor); 
	newFrame->addView (paramZoomMethod); 
	
	//Zoom Value 
	DisplaySize.offset (knob_red_blue->getWidth()+zoomSep, 0);
	paramZoom = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramZoom->setHoriAlign(kCenterText);
	paramZoom->setFont (kNormalFontVerySmall); 
	paramZoom->setFontColor (kDisplayText); 
	paramZoom->setBackColor (kDisplayBackground); 
	paramZoom->setFrameColor (kBlackCColor); 
	newFrame->addView (paramZoom); 
	
}


//------------------------------------------------------------------------------------
void MyEditor::stereoDisplay(int &stereoHoz, int &stereoEl, int &stereoSep, CFrame* newFrame)
{
    CRect stereoSize = CRect (0, 0, bStereo->getWidth (),bStereo->getHeight ());
    stereoSize.offset(stereoHoz-stereoSep/2, stereoEl+labelOffset-textDepthLarge);
	CView* stereo_view = new CView (stereoSize);
    stereo_view->setBackground (bStereo);
    newFrame->addView (stereo_view);
    
	//Mode
	r (0, 0, knob_mode2->getWidth (), knob_mode2->getHeight () / 2);
	r.offset(stereoHoz, stereoEl);
	knobMode = new CHorizontalSwitch (r, this, kMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
	newFrame->addView (knobMode);
	//knobMode->forget ();
	
	//Width
	r.offset(knob_mode2->getWidth()+stereoSep, 0);
	knobWidth = new CAnimKnob (r, this, kWidth, 101, knob_red->getHeight () / 101, knob_red, CPoint (0, 0));
	newFrame->addView (knobWidth);
	//knobWidth->forget ();
	
	//Pattern
	r.offset(knob_red_blue->getWidth()+stereoSep, 0);
	knobPattern = new CAnimKnob (r, this, kPattern, 101, knob_blue->getHeight () / 101, knob_blue, CPoint (0, 0));
	newFrame->addView (knobPattern);
	//knobPattern->forget ();
	
	//RearVerb
	r.offset(knob_mode2->getWidth()+stereoSep*4, 0);
	knobRearVerb = new CAnimKnob (r, this, kRearVerb, 101, knob_red_blue->getHeight () / 101, knob_red, CPoint (0, 0));
	newFrame->addView (knobRearVerb);
	//knobRearVerb->forget ();
	
	//HiVerb
	r.offset(knob_red_blue->getWidth()+stereoSep, 0);
	knobHiVerb = new CAnimKnob (r, this, kHiVerb, 101, knob_red_blue->getHeight () / 101, knob_blue, CPoint (0, 0));
	newFrame->addView (knobHiVerb);
	//knobHiVerb->forget ();
	
	
	
	
	
	
	
	
	
    //--CTextLabel--------------------------------------
    //Label Mode
    LabelSize (0, 0, knob_red_blue->getWidth (), textDepth); 
    LabelSize.offset (stereoHoz, stereoEl+labelOffset);
    CTextLabel* labelMode = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelMode->setFont (kNormalFontSmall); 
    labelMode->setFontColor (kLabelText); 
    labelMode->setBackColor (kBlank); 
    labelMode->setFrameColor (kBlank);
    labelMode->setText("Mode");
    newFrame->addView (labelMode);    
	
	//Label Width
	LabelSize.offset (knob_red_blue->getWidth()+stereoSep, 0);
    CTextLabel* labelWidth = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelWidth->setFont (kNormalFontSmall); 
    labelWidth->setFontColor (kLabelText); 
    labelWidth->setBackColor (kBlank); 
    labelWidth->setFrameColor (kBlank);
    labelWidth->setText("Width");
    newFrame->addView (labelWidth);
	
	//Label Pattern
	LabelSize.offset (knob_red_blue->getWidth()+stereoSep, 0);
    CTextLabel* labelPattern = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelPattern->setFont (kNormalFontSmall); 
    labelPattern->setFontColor (kLabelText); 
    labelPattern->setBackColor (kBlank); 
    labelPattern->setFrameColor (kBlank);
    labelPattern->setText("Pattern");
    newFrame->addView (labelPattern);
	
	//Label RearVerb
	LabelSize.offset (knob_red_blue->getWidth()+stereoSep*4, 0);
    CTextLabel* labelRearVerb = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelRearVerb->setFont (kNormalFontSmall); 
    labelRearVerb->setFontColor (kLabelText); 
    labelRearVerb->setBackColor (kBlank); 
    labelRearVerb->setFrameColor (kBlank);
    labelRearVerb->setText("RearVerb");
    newFrame->addView (labelRearVerb);
	
	//Label HiVerb
	LabelSize.offset (knob_red_blue->getWidth()+stereoSep, 0);
    CTextLabel* labelHiVerb = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelHiVerb->setFont (kNormalFontSmall); 
    labelHiVerb->setFontColor (kLabelText); 
    labelHiVerb->setBackColor (kBlank); 
    labelHiVerb->setFrameColor (kBlank);
    labelHiVerb->setText("HiVerb");
    newFrame->addView (labelHiVerb);
	
	
	
	
	
	
	//Label Section
    LabelSize (0, 0, knob_red_blue->getWidth ()*5 + stereoSep*7, textDepthLarge); 
    LabelSize.offset (stereoHoz, stereoEl+labelOffset - textDepthLarge);
    CTextLabel* labelStereo = new CTextLabel (LabelSize, 0, 0, kCenterText); 
    labelStereo->setFont (kNormalFontBig); 
    labelStereo->setFontColor (kLabelText); 
    labelStereo->setBackColor (kBlank); 
    labelStereo->setFrameColor (kBlank);
    labelStereo->setText("Stereo Decoding & Reverb");
    newFrame->addView (labelStereo);
	
	
	
	
	//--CTextLabel--------------------------------------
	//Mode Value
	DisplaySize (0, 0, knob_red_blue->getWidth (), textDepth); 
	DisplaySize.offset (stereoHoz, stereoEl+knob_red_blue->getHeight()/110+displayOffset);
	paramMode = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramMode->setHoriAlign(kCenterText);
	paramMode->setFont (kNormalFontVerySmall); 
	paramMode->setFontColor (kDisplayText); 
	paramMode->setBackColor (kDisplayBackground); 
	paramMode->setFrameColor (kBlackCColor); 
	newFrame->addView (paramMode);
    paramMode->forget();
	
	//Width Value 
	DisplaySize.offset (knob_red_blue->getWidth()+stereoSep, 0);
	paramWidth = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramWidth->setHoriAlign(kCenterText);
	paramWidth->setFont (kNormalFontVerySmall); 
	paramWidth->setFontColor (kDisplayText); 
	paramWidth->setBackColor (kDisplayBackground); 
	paramWidth->setFrameColor (kBlackCColor); 
	newFrame->addView (paramWidth);
    paramWidth->forget();
	
	//Pattern Value
	DisplaySize.offset (knob_red_blue->getWidth()+stereoSep, 0);
	paramPattern = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramPattern->setHoriAlign(kCenterText);
	paramPattern->setFont (kNormalFontVerySmall); 
	paramPattern->setFontColor (kDisplayText); 
	paramPattern->setBackColor (kDisplayBackground); 
	paramPattern->setFrameColor (kBlackCColor); 
	newFrame->addView (paramPattern);
    paramPattern->forget();
    
	//RearVerb Value 
	DisplaySize.offset (knob_red_blue->getWidth()+stereoSep*4, 0);
	paramRearVerb = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramRearVerb->setHoriAlign(kCenterText);
	paramRearVerb->setFont (kNormalFontVerySmall); 
	paramRearVerb->setFontColor (kDisplayText); 
	paramRearVerb->setBackColor (kDisplayBackground); 
	paramRearVerb->setFrameColor (kBlackCColor); 
	newFrame->addView (paramRearVerb);
    paramRearVerb->forget();
	
	//HiVerb Value
	DisplaySize.offset (knob_red_blue->getWidth()+stereoSep, 0);
	paramHiVerb = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramHiVerb->setHoriAlign(kCenterText);
	paramHiVerb->setFont (kNormalFontVerySmall); 
	paramHiVerb->setFontColor (kDisplayText); 
	paramHiVerb->setBackColor (kDisplayBackground); 
	paramHiVerb->setFrameColor (kBlackCColor); 
	newFrame->addView (paramHiVerb);
    paramHiVerb->forget();
    
    //ModeStereo Value
	DisplaySize.offset (-7*stereoSep-4*knob_red->getWidth(), 0);
	paramModeStereo = new CTextLabel (DisplaySize, 0, 0, kCenterText); 
	paramModeStereo->setHoriAlign(kCenterText);
	paramModeStereo->setFont (kNormalFontVerySmall); 
	paramModeStereo->setFontColor (kDisplayText); 
	paramModeStereo->setBackColor (kDisplayBackground); 
	paramModeStereo->setFrameColor (kBlackCColor); 
	newFrame->addView (paramModeStereo);
    paramModeStereo->forget();
}



//------------------------------------------------------------------------------------
void MyEditor::nameDisplay(int &nameHoz, int &nameEl, int &nameSep, CFrame* newFrame)
{
    CRect nameSize = CRect (0, 0, bName->getWidth (),bName->getHeight ());
    nameSize.offset(nameHoz-nameSep/2, nameEl+knob_mode2->getHeight()/2+displayOffset+textDepth+nameSep/2);
	CView* name_view = new CView (nameSize);
    name_view->setBackground (bName);
    newFrame->addView (name_view);
    
    LabelSize (0, 0, 160, textDepth); 
    LabelSize.offset(nameHoz, nameEl+knob_mode2->getHeight()/2+displayOffset+textDepth+nameSep/2+40);
    //LabelSize.offset (nameHoz, nameEl+labelOffset);
    CTextLabel *vendor_version = new CTextLabel(LabelSize, 0, 0, kLeftText);
    
    char text[100];
    int i1=(int)floor(VERSION/1000.0);
    int i2= (int)floor((VERSION-i1*1000)/100.0);
    int i3= (int)floor((VERSION-i1*1000-i2*100)/10.0);
    int i4= (int)floor(VERSION-i1*1000-i2*100-i3*10);
    sprintf(text, "Version: %d.%d.%d.%d", i1, i2,i3,i4);
    vendor_version->setText(text);
    vendor_version->setFont (kNormalFontSmall); 
    vendor_version->setFontColor (kLabelText); 
    vendor_version->setHoriAlign(kLeftText);
    vendor_version->setBackColor (kBlank); 
    vendor_version->setFrameColor (kBlank);
    newFrame->addView (vendor_version);
    vendor_version->forget();
    
    LabelSize.offset(0, -20);
    bitMode = new CTextLabel(LabelSize, 0, 0, kLeftText);
    int b = effect->getParameter(50);
    sprintf(text,"Bit Mode: %d", b);
    bitMode->setText(text);
    bitMode->setFont (kNormalFontSmall); 
    bitMode->setFontColor (kLabelText); 
    bitMode->setHoriAlign(kLeftText);
    bitMode->setBackColor (kBlank); 
    bitMode->setFrameColor (kBlank);
    newFrame->addView (bitMode);
    
    
    
}




//------------------------------------------------------------------------------------
void MyEditor::stereoPlot(int &plotHoz, int &plotEl)
{
	
}


//------------------------------------------------------------------------------------
void MyEditor::suspendDisplay()
{
    suspend = new CTextLabel(frameSize, 0, 0, kCenterText);
	suspend->setBackColor(CColor(23,25,26,150));
    suspend->setFont (kNormalFontVeryBig);
    suspend->setFontColor (CColor (255,255,255,255));
    suspend->setText("Currently Suspended");
    getFrame()->addView (suspend);
}

//------------------------------------------------------------------------------------
void MyEditor::resumeDisplay()
{
    getFrame()->removeView(suspend);
}



//------------------------------------------------------------------------------------
void MyEditor::valueChanged (CControl* pControl)
{
	//-- valueChanged is called whenever the user changes one of the controls in the User Interface (UI)
	effect->setParameterAutomated (pControl->getTag (), pControl->getValue ());
    
    //Change the display directly by the knob. Not accurate due to the internal parameter not being used, so the value shown and internally used might not match.
    setParameter (pControl->getTag (), pControl->getValue ());
}

//------------------------------------------------------------------------------------
void MyEditor::setParameter (VstInt32 index, float value)
{
    //paramModeStereo->setText("tits");
	//-- setParameter is called when the host automates one of the effects parameter.
	//-- The UI should reflect this state so we set the value of the control to the new value.
	//-- VSTGUI will automaticly redraw changed controls in the next idle (as this call happens to be in the process thread).
	if (frame && index < kNumParameters)
	{        //First write the value into the GUI value container
		controls[index]->setValue (value);
        
        //Call getParameterDisplay to get the char to display
        getParameterDisplay (index, &displayText);
	}
    else if (frame && index == 100) {
        suspendDisplay();
    }
    else if (frame && index == 101) {
        resumeDisplay();
    }
    
    
}


//------------------------------------------------------------------------
void MyEditor::getParameterDisplay (VstInt32 index, char *text)   //GET display value shown for Parameters
{
	effect->getParameterDisplay(index, text);
	switch (index)
	{
        case kMode :
            paramModeStereo->setText(text);
            break;
		case kWidth:
			paramWidth->setText(text);
			break;
		case kPattern:
			paramPattern->setText(text);
			break;
		case kRotate :
			paramRotate->setText(text);
			break;
		case kTilt:
			paramTilt->setText(text);
			break;
		case kTumble:
			paramTumble->setText(text);
			break;
		case kZoom:
			paramZoom->setText(text);
			break;
		case kZoomMethod:
			paramZoomMethod->setText(text);
			break;
		case kRearVerb :
			paramRearVerb->setText(text);
			break;
		case kHiVerb :
			paramHiVerb->setText(text);
			break;
	}	
}










//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------