Статьи:

Профиль:

Классы контроллеров VST GUI 2.2 – часть 3


Вашему вниманию предоставляется перевод документации визуального интерфейса VST GUI, которая представляет собой перечень классов и их методов, используемых для оформления внешнего вида плагинов. В данной части мы начнём рассмотрение классов, предназначенных для работы с различными контроллерами: регуляторы, кнопки и т.д.

CControl

#include <vstcontrols.h>class CControl : public CView ;

Каждый объект контроллера ( вроде COnOffButton ) описывается из своего класса. Объект управляет процессами идентификации и изменения ассоциируемого с контроллером  значения (громкость, панорама, частота и т.д.).

CControl

CControl (CRect &size, CControlListener *listener, int tag, CBitmap *pBackground = 0); );

Создаёт контроллер с заданным с помощью прямоугольника размером size, так называемым слушателем (listener) — указатель на объект который ответственный за обработку событий с этого контроллера, тэгом (tag) — заголовочной меткой контроллера, и фоновым изображением pBackground.

Оглавление
Часть 1
Часть 2
Часть 3 — Контроллеры
Часть 4 — Контроллеры

Исходный код.

~CControl

virtual ~CControl ();

Удаление объекта контроллера.

draw

virtual void draw (CDrawContext *context) ;

Рисует заданный контроллер.

update

virtual void update (CDrawContext *context);

Вызывает метод draw если значение контроллера изменено.

doIdleStuff

virtual void doIdleStuff ();

Запрашивает doIdleStuff редактора (под едактором понимается визуальный интерфейс плагина). Судя по названию — вносит некоторую случайность в значения контроллеров.

setValue

virtual void setValue (float value);

Задаёт значение контроллеру.

getValue

virtual float getValue ();

Определяет текущее значение контроллера.

setMin

virtual void setMin (float min);

Задаёт допустимое минимальное значение контроллера.

getMin

virtual float getMin ();

Возвращает текущее допустимое минимальное значение контроллера

setMax

virtual void setMax (float value);

Задаёт допустимое максимальное значение контроллера.

getMax

virtual float getMax ();

Возвращает текущее допустимое максимальное значение контроллера

setOldValue

virtual void setOldValue (float ov);

Задаёт старое значение контроллера.

getOldValue

virtual float getOldValue (void);

Возвращает старое значение контроллера.

setDefaultValue

virtual void setDefaultValue (float ov);

Задаёт значение контроллера выставленное по умолчанию.

getDefaultValue

virtual float getDefaultValue (void);

Возвращает значение контроллера выставленное по умолчанию.

setTag

virtual void setTag (long tag);

Задаёт тэг (метку) ассоциируемую с данным контроллером.

getTag

int getTag ();

Возвращает ассоциируемый с данным контроллером тэг. Использвуется для определения объекта, работа которого управляется данным контроллером.

isDirty

virtual bool isDirty ();

Возвращает ПРАВДУ если это «грязное» значение

setDirty

virtual void setDirty (const bool val = true);

Задаёт контроллеру тип «грязный» (следующее обновление прорисует его заново).

setBackground

virtual void setBackground (CBitmap *background);

Задаёт фоновое изображение.

getBackground

virtual CBitmap *getBackground ();

Возвращает фоновое изображение.

setBackOffset

virtual void setBackOffset (CPoint &offset);

Задаёт офсет фоновому изображению.

copyBackOffset

virtual void copyBackOffset ();

setWheelInc

virtual void setWheelInc (float val);

Каждый контроллер имеет параметр называемый WheelInc, который определяет шаг, с которым изменяется значение контроллера при движении колёсика мышки, данный метод позволяет задать этот параметр.

getWheelInc

virtual float getWheelInc ();

Возвращает параметр WheelInc, смотри предыдущий метод.

bounceValue

virtual void bounceValue ();

Используется для задания диапазона [vmin;vmax], в котором могут изменяться значения контроллера.

getListener

CControlListener* getListener ();

Возвращает объект-слушатель контроллера, на работу которого влияет изменение его положения.

isDoubleClick

bool isDoubleClick ();

Определяет — является ли щелок мышью частью двойного щелчка.

CControlListener

#include <vstcontrols.h>

class CControlListener;

Данный виртуальный класс используется для создания конкретного класа с функцией обратного вызова (запрашиваемой когда значение контроллера объекта изменяется).

valueChanged

virtual void valueChanged (CDrawContext *context,CControl *control);

Функция запрашивается когда значение контроллера изменяется.

Пример с исходным кодом.

COnOffButton

#include <vstcontrols.h>class COnOffButton : public CControl;

Описывает кнопку с двумя позициями. В карте изображений хранится два изображения (точнее два в одном, разделённых по вертикали). Когда значение изменяется — запрашивает объект-слушатель (на работу которого влияет положение контроллера).

COnOffButton

COnOffButton (CRect &size, CControlListener *listener, int tag, CBitmap *bitmap);

Создаёт кнопку (onOffButton) с заданным размером объектом-слушателем, тэгом и картой изображений.

size размер объекта, задаваемый с помощью прямоугольника, координаты которого задаются относительно текущего поля.
listener объект-слушатель (на работу которого влияет положение контроллера)
tag Тэг — метка с помощью которой производится идентификация данного объекта.
bitmap Изображение в котором вертикально объединены два изображения, каждое из которых показывается в соответствии с текущим состоянием кнопки вкл/выкл

Исходный код.

Пример:

CBitmap myBitmap (kMyBitmapID);
CRect size (
    kMyButton_x,
    kMyButton_y,
    kMyButton_x + myBitmap->getWidth (),
    kMyButton_y + myBitmap->getHeight () / 2
);
COnOffButton myButton (
    size,
    this,
    kMyParameter,
    myBitmap
 );
myButton->setValue (
    effect->getParameter (kMyParameter));
frame->addView (myButton);

~COnOffButton

~COnOffButton ();

Удаление объекта onOffButton. Если изображение больше не используется другими объектами то оно также удаляется.

draw

void draw (CDrawContext*);

Метод запрашивается когда контроллер необходимо нарисовать/перерисовать/обновить.

mouse

void mouse (CDrawContext *context, CPoint &where);

Запрашивается при щелчке мышью по определённому контроллеру.

CParamDisplay

#include <vstcontrols.h>class CParamDisplay : public CControl;

Данный класс описывает прямоугольник, в котором размещается текст с заданным цветом и шрифтом. Пользователь может  настроить функцию конвертирования (из типа float в тип char), стандартно формат строки »%2.2f».

CParamDisplay

CParamDisplay (CRect &size, CBitmap*background = 0, int style = 0);

Создаёт объект paramDisplay с заданным  размером прямоугольника и фоновым изображением.

size Размер области задаётся прямоугольником, координаты которого расчитываются относительно системы отсчёта данного поля.
background Возможность добавить фоновое изображение.
style Стиль форматирования, взят с метода CControlEnum : kShadowText, k3DIn, или k3DOut.

Исходный код.

~CParamDisplay

~CParamDisplay ();

Удаление объекта paramDisplay.

setFont

void setFont (CFont fontID);

Задание текущего шрифта.

getFont

CFont getFont ();

Определение текущего шрифта.

setFontColor

void setFontColor (CColor color);

Задание цвета текста.

getFontColor

CColor getFontColor ();

Определение текущего цвета текста.

setBackColor

void setBackColor (CColor color);

Задание фонового цвета фона.

getBackColor

CColor getBackColor ();

Определение текущего цвета фона

setFrameColor

void setFrameColor (CColor color);

Задание цвета текущего поля.

getFrameColor

CColor getFrameColor ();

Определение цвета заданного поля.

setShadowColor

void setShadowColor (CColor color);

Задание цвета тени текста.

getShadowColor

CColor getShadowColor ();

Возвращает цвет тени текста.

setHoriAlign

void setHoriAlign (CHoriTxtAlign hAlign);

Задаёт тип выравнивания текста.

setStringConvert

void setStringConvert (void (*stringConvert) (float value, char *string));

Задаёт значение для конвертирования текста.

Пример:

void myConvert (float value, char *string)
{
sprintf (string, «val = %.3f», value);
}

CRect myRect (kMyDisplay_left, kMyDisplay_top, kMyDisplay_right, kMyDisplay_bottom);
myDisplay = new CParamDisplay (myRect);
myDisplay->setStringConvert (myConvert);

setStringConvert

void setStringConvert (void (*stringConvert) (float value, char *string, void *userData), void *userData);

Задаёт функцию конвертирования, используемую для отображения значения. Эта функция конветирования имеет приоритет над функциями без userData.

stringConvert Значение функции конвертирования текста.
userData Может быть использована если пользователь хочет возвращать функцию конвертирования.

setString2FloatConvert

void setString2FloatConvert (void (*convert) (char *string, float &output));

Задаётся функция, которая будет использоваться для конвертирования.

setStyle

void setStyle (int val);

Задаёт новый стиль.

getStyle

int getStyle ();

Определяет текущий стиль.

setTxtFace

void setTxtFace (CTxtFace txtFace);

Задаёт новый стиль «Лицетекста». Под textFace обычно понимается текст, который используется для построения изображений из текста, с использованием символов в качестве составляющих.

getTxtFace

CTxtFace getTxtFace ();

Возвращает текущий стиль Лицетекста.

draw

void draw (CDrawContext *context);

Запрашивается когда опеделяется двойной щелчок мышью внутри границ контроллера.

setTextTransparency

void setTextTransparency (bool val);

Задаёт прозрачный режим отображения текста.

getTextTransparency

bool getTextTransparency ();

Определяет текущий режим прозрачности текста.

CTextEdit

#include <vstcontrols.h>class CTextEdit : public CParamDisplay;

Описывает прямоугольную область, в которой может быть размещён и отредактирован текст определённого цвета в определённом шрифте. Пользователь может описать функцию конвертирования типа символов, задать фоновое изображение данного поля.

CTextEdit

CTextEdit (CRect &size, CControlListener *listener, int tag, const char *txt = 0, CBitmap *background = 0, int style = 0);

Создаёт объект редактируемого текста. Ниже рассмотрены его параметры:

size Размер, задаётся с помощью прямоугольника, координаты котоого задаются относительно родительского поля.
listener Объект, на работу которого влияет положение данного контроллера.
tag Тэг, метка с помощью которой идентифицируется данный контроллер.
txt
background Фоновое изображение
style Используя одно из значений класса CControlEnum.

Ниже приведен список значений класса CControlEnum.

Класс CControlEnum

#include <vstcontrols.h>

enum CControlEnum;

Значение Описание Используется в
kHorizontal 1 CVuMeter
kVertical 1 CVuMeter
kShadowText Текст с тенью CParamDisplay
kLeft CHorizontalSlider
kRight CHorizontalSlider
kTop CVerticalSlider
kBottom CVerticalSlider
k3DIn Трёхмерный эффект входа CParamDisplay
k3DOut Трехмерный эффект выхода CParamDisplay
kPopupStyle Всплывающее меню прорисовывается под размещённым текстом. COptionMenu
kCheckStyle Проверка знаков добавляется в всплывающее меню, которое показывает текущий выбранный пункт. COptionMenu
kMultipleCheckStyle Позволяет выделять в меню несколько пунктов COptionMenu
kNoTextStyle CParamDisplay
kNoDrawStyle CParamDisplay
kDoubleClickStyle CTextEdit

~CTextEdit

~CTextEdit ();

Данный метод предназначен для удаления объекта textEdit.

setText

void setText (char *txt);

Задаёт текущий текст.

getText

void getText (char *txt);

Возвращает текущий текст.

draw

void draw (CDrawContext*);

Запрашивается когда контроллер должен быть заново прорисован.

mouse

void mouse (CDrawContext *context, CPoint& where);

Запрашивается после щелчка мыши в области курсора. После щелчка текст может быть изменён.

setTextEditConvert

void setTextEditConvert (void (*stringConvert) (char *input, char *string));

Задание значение конвертирования строки.

setTextEditConvert

void CTextEdit::setTextEditConvert (float, char*, void *userData);

Задание значение конвертирования строки.

takeFocus

void takeFocus ();

looseFocus

void looseFocus ();

COptionMenu

#include <vstcontrols.h>class COptionMenu : public CParamDisplay;

Данный класс описывает прямоугольник, в котором может быть размещён текст с заданным цветом и шрифтом. Текст центрируется в заданной области, может иметь фоновое изображение. В классе имеются два стиля с текстом с и без тени. При наведении курсора мыши на определённый объект — показывается всплывающее меню.

COptionMenu

COptionMenu (CRect &size, CControlListener *listener, int tag, CBitmap *background = 0, CBitmap *bgWhenClick = 0, int style = 0);

Создаёт всплывающее меню.

size Координаты описывающего размер области прямоугольника, заданы относительно родительского поля.
listener Объект, который выполняет действие, которое должно произойти после выбора пункта меню.
tag Тэг — метка с помощью которой идентифицируется контроллер.
background Фоновое изображение.
bgWhenClick Фоновое изображение, которое размещается после нажатия по кнопке мыши, при условии нахождения курсора в области контроллера.
style Стиль, смотри CControlEnum.

Пример:

CRect size (
    kMyMenu_left,
    kMyMenu_top,
    kMyMenu_right,
    kMyMenu_bottom
);
myBackground = new CBitmap (kMyBackgroundID);
myBackgroundOnClick = new CBitmap (
    kMyBackgroundOnClickID
);
myMenu = new COptionMenu (
    size,
    this,
    kMyParameter,
    myBackground,
    myBackgroundOnClick,
    0
);
myMenu->addEntry ("first item", -1);
...
myMenu->addEntry ("last item", -1);
myMenu->setFontColor (kBlackCColor);
myMenu->setBackColor (kWhiteCColor);
frame->addView (myMenu);

~COptionMenu

~COptionMenu ();

Удаление заданного пункта из меню.

setValue

virtual void setValue (float val);

Данный метод используется для задания определённого значения объекту меню.

addEntry

bool addEntry (char *txt, int index = -1);

Добавляет текст <txt> на позицию<index> в меню.

txt Текст, который должен быть отображён в меню, для добавления разделительной линии укажите «-».
index -1: Текст добавляется в конец меню. |  0...127 : Текст добавляется на указанную позицию в этом диапазоне.

addEntry

virtual bool addEntry (char *txt, long index);

Добавление в меню нового пункта.

getCurrent

int getCurrent (char *txt = 0);

Возвращает выделенный в данный момент пункт.

txt Может также возвращать и текст выделенного пункта.
return Номер строки, нумерация начинается с нуля.

Пример:

char itemText[10];

myMenu->getCurrent (itemText);

if (strcmp (itemText, kMyString) == 0)
    ...

или

int myItem = myMenu->getCurrent (NULL);

switch (myItem) {
    case kMyItem :
         ...
        break;
    default :
        break;
}

setCurrent

bool setCurrent (int index);

Задаёт выделение определённого пункта меню.

getEntry

bool getEntry (int index, char *txt);

Возвращает строку/пункт меню, исходя из заданного номера.

setEntry

bool setEntry (int index, char *txt);

Ассоциирует заданный текст с определённым пунктом меню.

removeEntry

bool removeEntry (int index);

Удаление определённого пункта, исходя из его номера (индекса).

removeAllEntry

bool removeAllEntry ();

Удаление из меню всех пунктов.

getNbEntries

int getNbEntries ();

Возвращает колличество пунктов в меню.

getIndex

int getIndex (char *txt);

Возвращает номер пункта меню исходя из заданого названия/текста.

checkEntry

bool checkEntry (int index, bool state);

Проверяет пункт меню исходя из его номера (работает если kMultipleCheckStyle выбран в качестве стиля).

checkEntryAlone

bool checkEntryAlone (int index);

Проверяет только один пункт меню, исходя из его номера.

isCheckEntry

bool isCheckEntry (int index);

Возвращает ПРАВДУ если заданный пункт меню выбран.

draw

void draw (CDrawContext*);

Данный метод запрашивается в случае если контроллер должен быть заново прорисован.

mouse

void mouse (CDrawContext *context, CPoint &where);

Метод запрашивается в случае если пользователь щёлкнул мышью в области контроллера. Отображается всплывающее меню. При этом where — координаты курсора мыши в пикселях, которые задаются относительно родительского поля. Смотрите также метод valueChanged класса CControlListener, который запрашивается в случае изменения значения определённого контроллера.

takeFocus

void takeFocus ();

Меню имеет фокус.

looseFocus

void looseFocus ();

Меню больше не имеет фокуса.

setNbItemsPerColumn

void setNbItemsPerColumn (long val);

Задаёт количество элементов в столбце.

getNbItemsPerColumn

long getNbItemsPerColumn ();

Определяет количество элементов в столбце.

getLastResult

long getLastResult ();

Возвращает последний выбранный пункт.

getLastItemMenu

COptionMenu *getLastItemMenu (long &idxInMenu);

setScheme

void setScheme (COptionMenuScheme*s);

Задаёт схему меню.

getScheme

COptionMenuScheme* getScheme ();

setPrefixNumbers

void setPrefixNumbers (long preCount);

Для пронумерованого меню задаёт колличество цифр/символов в номере пункта меню.

COptionMenuScheme

#include <vstcontrols.h>

class COptionMenuScheme;

Используется для задания стилистики всплывающих окон (цвет и шрифт текста, фоновый цвет и т.д.). Чтобы описать схемы меню воспользуйтесь методом setScheme класса COptionMenu.

COptionMenuScheme

COptionMenuScheme ();

Создаёт пункт схемы сплывающего меню.

~COptionMenuScheme

~COptionMenuScheme ();

Удаляет заданный пункт схемы сплывающего меню.

getItemSize

virtual void getItemSize (const char* text, CDrawContext* pContext, CPoint& size);

Возвращает размер пункта. Пунктом может быть:

  • kMenuTitle, предописанный как «-T»
  • kMenuSeparator, предописанный как »-»
  • kMenuDisable, предописанный как »-G»
  • kMenuSubMenu, предописанный как «-M»

drawItem

virtual void drawItem (const char* text, long itemId, long state, CDrawContext* pContext, const CRect& rect);

setColors

void setColors (CColor backgroundColor, CColor selectionColor,
CColor textColor, CColor hiliteTextColor, CColor disableTextColor);

Задание цвета текста и фона.

setFont

void setFont (CFont f);

Задание шрифта текста.

forget

virtual void forget ();

Используется для информирования схемы о том что одно из меню больше не используется. Когда в схеме больше нет меню — то и она удаляется.

remember

virtual void remember ();

Используется для того чтобы оповестить схему что использование меню не прекратилось.

getNbReference

virtual long getNbReference ();

Возвращает колличество меню, использованных в схеме.

CKnob

#include <vstcontrols.h>class CKnob : public CControl;
Как Вы уже вероятно поняли, данный класс описывает внешний вид кнопок.

CKnob

CKnob (CRect &size, CControlListener *listener, int tag, CBitmap *background, CBitmap *handle, CPoint &offset);

Создаёт кнопку с заданными размером, объектом-слушателем, тэгом и картой изображений.

size Размер кнопки, задаётся с помощью прямоугольника, координаты которого определяются относительно родительского поля.
listener Объект-слушатель, на работу которого влияет изменение положения этого контроллера.
tag Тэг — метка, с помощью которой индексируется данный объект.
background Фоновая карта изображений. Обычно в карте изображений кнопки хранится два (объединённых в одно) изображения, каждое из которых соответствует определённому положению кнопки.
handle Ручная карта изображений, прорисовывается с использованием прозрачности.
offset Офсет — выбранный регион изображения, который отображается.

Исходный код методов класса.

~CKnob

~CKnob ();

Удаление кнопки. Используемые кнопкой изображения также удаляются, если они больше не используются другими объектами.

draw

void draw (CDrawContext*);

Запрашивается когда данный контроллер нуждается в перерисовке. Также запрашивается в случае щелчка мыши по области контроллера. Смотрите также метод valueChanged класса CControlListener, который запрашивается когда значение контроллера изменяется.

mouse

void mouse (CDrawContext *pContext, CPoint& where);

Метод запрашивается после того как пользователь щелкнул клавишей мыши в области контроллера.  Смотрите также метод valueChanged класса CControlListener, который запрашивается когда значение контроллера изменяется.

onWheel

virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance);

Метод уже был описан, вызывается при прокруивании колёсика мышки и определяет шаг изменения параметра заданного контроллера.

onKeyDown

virtual long onKeyDown (VstKeyCode& keyCode);

Пользователь нажал на кнопку.

drawHandle

void drawHandle (CDrawContext *);

Подфункция для рисования ручкой.

setStartAngle

void setStartAngle (float val);

Задаёт изначальный угол кнопки. При этом значение val — это угол наклона в радианах [0, 2 *PI)

getStartAngle

float getStartAngle ();

Определяет и возвращает  изначальный угол кнопки. При этом значение  return — это угол наклона в радианах [0, 2 *PI)

setRangeAngle

void setRangeAngle (float val);

Задаёт диапазон, в котором изменяется угол кнопки. При этом значение  — это угол наклона в радианах (-2 *PI, 2 *PI). Значение положительное при вращении по часовой стрелке, и отрицательное при вращении против часовой стрелки.

getRangeAngle

float getRangeAngle ();

returnВозвращает диапазон, в котором изменяется угол кнопки.  При этом значение return - это угол наклона в радианах (-2 *PI, 2 *PI). Значение положительное при вращении по часовой стрелке, и отрицательное при вращении против часовой стрелки.

valueToPoint

void valueToPoint (CPoint point);

Конвертирует заданное значение в точку (вероятно имеется ввиде номер пикселя в поле)

valueFromPoint

float valueFromPoint (CPoint &point);

Конвертирует заданную точку в значение.

setInsetValue

void setInsetValue (int val);

Задаёт значению — его инверсию. При этом return возвращает угол в радианах в диапазоне (-2 *PI, 2 *PI). Значение положительное при вращении по часовой стрелке, и отрицательное при вращении против часовой стрелки.

setColorShadowHandle

void setColorShadowHandle (CColor color);

Задаёт цвет тени ручки.

setColorHandle

void setColorHandle (CColor color);

Задаёт цвет ручки (когда к ней не привязано изображение).

setHandleBitmap

void setHandleBitmap (CBitmap *bitmap);

Задаёт новое изображение ручки.

setZoomFactor

void setZoomFactor (float val);

Задаёт степень увеличения для более медленного, сглаженного режима работы.

getZoomFactor

float getZoomFactor ();

Возвращает степень увеличения.

Вы должны быть залогинены для комментирования.