
#include <TGUI/TGUI.hpp>

#define THEME_CONFIG_FILE "data/widgets/Black.conf"

// TODO: //
/*
Stuff to do later...

*	Correct rendering and positions of piano keys
*	Add 9x9 -1 button grid
	*	Test opacity functionallity

*	Import rtmidi functions
*	Start hardware talk with Novaton LAunchPad Mini & LaunchKey Mini
	*	Sync hardware keypress

*	Build tracker/sequencer window
*	Add audio play/load/save
	*	Determine preffered audio formats
*	Implement sequence load/save
	*	Determine sequence file logic
*/

int main()
{
	sf::RenderWindow window(sf::VideoMode(960, 600), "RexKeyPad");
	tgui::Gui gui(window);

	if (gui.setGlobalFont("data/DroidSansMono.ttf") == false)
		return 1;

	tgui::Checkbox::Ptr syncbox(gui);
	syncbox->load(THEME_CONFIG_FILE);
	syncbox->setPosition(810,20);
	syncbox->setText("Invert");
	syncbox->setSize(32, 32);

	tgui::Checkbox::Ptr hwsyncbox(gui);
	hwsyncbox->load(THEME_CONFIG_FILE);
	hwsyncbox->setPosition(810,80);
	hwsyncbox->setText("Hardware");
	hwsyncbox->setSize(32, 32);

	const int vertical_control_separator = 100;

	tgui::Scrollbar::Ptr scrollbar1(gui);
	scrollbar1->load(THEME_CONFIG_FILE);
	scrollbar1->setVerticalScroll(true);
	scrollbar1->setPosition(20, 20);
	scrollbar1->setSize(18, 256);
	scrollbar1->setMaximum(127);
	scrollbar1->setLowValue(8);

	tgui::Knob::Ptr knob1(gui);
	knob1->load("data/widgets/Knob/Knob.conf");
	knob1->setPosition(55, 235);
	knob1->setSize(40, 40);
	knob1->setStartRotation(127);
	knob1->setValue(0);
	knob1->setEndRotation(-128);
	knob1->setMinimum(0);
	knob1->setMaximum(127);

	tgui::Scrollbar::Ptr scrollbar2(gui);
	scrollbar2->load(THEME_CONFIG_FILE);
	scrollbar2->setVerticalScroll(true);
	scrollbar2->setPosition(20+(vertical_control_separator), 20);
	scrollbar2->setSize(18, 256);
	scrollbar2->setMaximum(127);
	scrollbar2->setLowValue(8);

	tgui::Knob::Ptr knob2(gui);
	knob2->load("data/widgets/knob/knob.conf");
	knob2->setPosition(55+(vertical_control_separator), 235);
	knob2->setSize(40, 40);
	knob2->setStartRotation(127);
	knob2->setValue(0);
	knob2->setEndRotation(-128);
	knob2->setMinimum(0);
	knob2->setMaximum(127);

	tgui::Scrollbar::Ptr scrollbar3(gui);
	scrollbar3->load(THEME_CONFIG_FILE);
	scrollbar3->setVerticalScroll(true);
	scrollbar3->setPosition(20+(vertical_control_separator*2), 20);
	scrollbar3->setSize(18, 256);
	scrollbar3->setMaximum(127);
	scrollbar3->setLowValue(8);

	tgui::Knob::Ptr knob3(gui);
	knob3->load("data/widgets/knob/knob.conf");
	knob3->setPosition(55+(vertical_control_separator*2), 235);
	knob3->setSize(40, 40);
	knob3->setStartRotation(127);
	knob3->setValue(0);
	knob3->setEndRotation(-128);
	knob3->setMinimum(0);
	knob3->setMaximum(127);

	tgui::Scrollbar::Ptr scrollbar4(gui);
	scrollbar4->load(THEME_CONFIG_FILE);
	scrollbar4->setVerticalScroll(true);
	scrollbar4->setPosition(20 + (vertical_control_separator * 3), 20);
	scrollbar4->setSize(18, 256);
	scrollbar4->setMaximum(127);
	scrollbar4->setLowValue(8);

	tgui::Knob::Ptr knob4(gui);
	knob4->load("data/widgets/knob/knob.conf");
	knob4->setPosition(55 + (vertical_control_separator * 3), 235);
	knob4->setSize(40, 40);
	knob4->setStartRotation(127);
	knob4->setValue(0);
	knob4->setEndRotation(-128);
	knob4->setMinimum(0);
	knob4->setMaximum(127);

	tgui::Scrollbar::Ptr scrollbar5(gui);
	scrollbar5->load(THEME_CONFIG_FILE);
	scrollbar5->setVerticalScroll(true);
	scrollbar5->setPosition(20 + (vertical_control_separator * 4), 20);
	scrollbar5->setSize(18, 256);
	scrollbar5->setMaximum(127);
	scrollbar5->setLowValue(8);

	tgui::Knob::Ptr knob5(gui);
	knob5->load("data/widgets/knob/knob.conf");
	knob5->setPosition(55 + (vertical_control_separator * 4), 235);
	knob5->setSize(40, 40);
	knob5->setStartRotation(127);
	knob5->setValue(0);
	knob5->setEndRotation(-128);
	knob5->setMinimum(0);
	knob5->setMaximum(127);

	tgui::Scrollbar::Ptr scrollbar6(gui);
	scrollbar6->load(THEME_CONFIG_FILE);
	scrollbar6->setVerticalScroll(true);
	scrollbar6->setPosition(20 + (vertical_control_separator * 5), 20);
	scrollbar6->setSize(18, 256);
	scrollbar6->setMaximum(127);
	scrollbar6->setLowValue(8);

	tgui::Knob::Ptr knob6(gui);
	knob6->load("data/widgets/knob/knob.conf");
	knob6->setPosition(55 + (vertical_control_separator * 5), 237);
	knob6->setSize(40, 40);
	knob6->setStartRotation(127);
	knob6->setValue(0);
	knob6->setEndRotation(-128);
	knob6->setMinimum(0);
	knob6->setMaximum(127);

	tgui::Scrollbar::Ptr scrollbar7(gui);
	scrollbar7->load(THEME_CONFIG_FILE);
	scrollbar7->setVerticalScroll(true);
	scrollbar7->setPosition(20 + (vertical_control_separator * 6), 20);
	scrollbar7->setSize(18, 256);
	scrollbar7->setMaximum(127);
	scrollbar7->setLowValue(8);

	tgui::Knob::Ptr knob7(gui);
	knob7->load("data/widgets/knob/knob.conf");
	knob7->setPosition(55 + (vertical_control_separator * 6), 237);
	knob7->setSize(40, 40);
	knob7->setStartRotation(127);
	knob7->setValue(0);
	knob7->setEndRotation(-128);
	knob7->setMinimum(0);
	knob7->setMaximum(127);

	tgui::Scrollbar::Ptr scrollbar8(gui);
	scrollbar8->load(THEME_CONFIG_FILE);
	scrollbar8->setVerticalScroll(true);
	scrollbar8->setPosition(20 + (vertical_control_separator * 7), 20);
	scrollbar8->setSize(18, 256);
	scrollbar8->setMaximum(127);
	scrollbar8->setLowValue(8);

	tgui::Knob::Ptr knob8(gui);
	knob8->load("data/widgets/knob/knob.conf");
	knob8->setPosition(55 + (vertical_control_separator * 7), 238);
	knob8->setSize(40, 40);
	knob8->setStartRotation(127);
	knob8->setValue(0);
	knob8->setEndRotation(-128);
	knob8->setMinimum(0);
	knob8->setMaximum(127);

	/* Callback handling*/
	#define Knob_CALLBACK_ID 10
	#define KnobScroll_CALLBACK_ID 20

	bool invert_Knob_SYNC=false;

	knob1->bindCallback(tgui::Knob::ValueChanged);
	knob1->setCallbackId(Knob_CALLBACK_ID +1);
	knob2->bindCallback(tgui::Knob::ValueChanged);
	knob2->setCallbackId(Knob_CALLBACK_ID + 2);
	knob3->bindCallback(tgui::Knob::ValueChanged);
	knob3->setCallbackId(Knob_CALLBACK_ID + 3);
	knob4->bindCallback(tgui::Knob::ValueChanged);
	knob4->setCallbackId(Knob_CALLBACK_ID + 4);
	knob5->bindCallback(tgui::Knob::ValueChanged);
	knob5->setCallbackId(Knob_CALLBACK_ID + 5);
	knob6->bindCallback(tgui::Knob::ValueChanged);
	knob6->setCallbackId(Knob_CALLBACK_ID + 6);
	knob7->bindCallback(tgui::Knob::ValueChanged);
	knob7->setCallbackId(Knob_CALLBACK_ID + 7);
	knob8->bindCallback(tgui::Knob::ValueChanged);
	knob8->setCallbackId(Knob_CALLBACK_ID + 8);

	syncbox->bindCallback(tgui::Checkbox::Checked);
	syncbox->bindCallback(tgui::Checkbox::Unchecked);
	syncbox->setCallbackId(Knob_CALLBACK_ID + 9);

	scrollbar1->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar1->setCallbackId(KnobScroll_CALLBACK_ID + 1);
	scrollbar2->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar2->setCallbackId(KnobScroll_CALLBACK_ID + 2);
	scrollbar3->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar3->setCallbackId(KnobScroll_CALLBACK_ID + 3);
	scrollbar4->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar4->setCallbackId(KnobScroll_CALLBACK_ID + 4);
	scrollbar5->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar5->setCallbackId(KnobScroll_CALLBACK_ID + 5);
	scrollbar6->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar6->setCallbackId(KnobScroll_CALLBACK_ID + 6);
	scrollbar7->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar7->setCallbackId(KnobScroll_CALLBACK_ID + 7);
	scrollbar8->bindCallback(tgui::Scrollbar::ValueChanged);
	scrollbar8->setCallbackId(KnobScroll_CALLBACK_ID + 8);

	/* Piano keys */

	#define PIANO_KEY_BLACK 30
	#define PIANO_KEY_WHITE 45

	/*
	tgui::Button::Ptr PianoKey1(gui);
	PianoKey1->load("data/widgets/keys_lower.conf");
	PianoKey1->setPosition(10, 416);
	PianoKey1->setCallbackId(1);
	PianoKey1->bindCallback(PIANO_KEY_WHITE);
	PianoKey1->setSize(300, 40);

	tgui::Button::Ptr PianoKey2(gui);
	PianoKey2->load("data/widgets/keys_lower.conf");
	PianoKey2->setPosition(40, 25);
	PianoKey2->setCallbackId(1);
	PianoKey2->bindCallback(PIANO_KEY_WHITE + 1);
	PianoKey2->setSize(300, 40);

	tgui::Button::Ptr PianoKey3(gui);
	PianoKey3->load("data/widgets/keys_lower.conf");
	PianoKey3->setPosition(40, 25);
	PianoKey3->setCallbackId(1);
	PianoKey3->bindCallback(PIANO_KEY_WHITE + 2);
	PianoKey3->setSize(300, 40);

	tgui::Button::Ptr PianoKey4(gui);
	PianoKey4->load("data/widgets/keys_lower.conf");
	PianoKey4->setPosition(40, 25);
	PianoKey4->setCallbackId(1);
	PianoKey4->bindCallback(PIANO_KEY_WHITE + 3);
	PianoKey4->setSize(300, 40);

	tgui::Button::Ptr PianoKey5(gui);
	PianoKey5->load("data/widgets/keys_lower.conf");
	PianoKey5->setPosition(40, 25);
	PianoKey5->setCallbackId(1);
	PianoKey5->bindCallback(PIANO_KEY_WHITE + 4);
	PianoKey5->setSize(300, 40);

	tgui::Button::Ptr PianoKey6(gui);
	PianoKey6->load("data/widgets/keys_lower.conf");
	PianoKey6->setPosition(40, 25);
	PianoKey6->setCallbackId(1);
	PianoKey6->bindCallback(PIANO_KEY_WHITE + 5);
	PianoKey6->setSize(300, 40);

	tgui::Button::Ptr PianoKey7(gui);
	PianoKey7->load("data/widgets/keys_lower.conf");
	PianoKey7->setPosition(40, 25);
	PianoKey7->setCallbackId(1);
	PianoKey7->bindCallback(PIANO_KEY_WHITE + 6);
	PianoKey7->setSize(300, 40);

	tgui::Button::Ptr PianoKey8(gui);
	PianoKey8->load("data/widgets/keys_lower.conf");
	PianoKey8->setPosition(40, 25);
	PianoKey8->setCallbackId(1);
	PianoKey8->bindCallback(PIANO_KEY_WHITE + 7);
	PianoKey8->setSize(300, 40);

	tgui::Button::Ptr PianoKey9(gui);
	PianoKey9->load("data/widgets/keys_lower.conf");
	PianoKey9->setPosition(40, 25);
	PianoKey9->setCallbackId(1);
	PianoKey9->bindCallback(PIANO_KEY_WHITE + 8);
	PianoKey9->setSize(300, 40);

	tgui::Button::Ptr PianoKey10(gui);
	PianoKey10->load("data/widgets/keys_lower.conf");
	PianoKey10->setPosition(40, 25);
	PianoKey10->setCallbackId(1);
	PianoKey10->bindCallback(PIANO_KEY_WHITE + 9);
	PianoKey10->setSize(300, 40);

	tgui::Button::Ptr PianoKey11(gui);
	PianoKey11->load("data/widgets/keys_lower.conf");
	PianoKey11->setPosition(40, 25);
	PianoKey11->setCallbackId(1);
	PianoKey11->bindCallback(PIANO_KEY_WHITE + 10);
	PianoKey11->setSize(300, 40);

	tgui::Button::Ptr PianoKey12(gui);
	PianoKey12->load("data/widgets/keys_lower.conf");
	PianoKey12->setPosition(40, 25);
	PianoKey12->setCallbackId(1);
	PianoKey12->bindCallback(PIANO_KEY_WHITE + 11);
	PianoKey12->setSize(300, 40);

	tgui::Button::Ptr PianoKey13(gui);
	PianoKey13->load("data/widgets/keys_lower.conf");
	PianoKey13->setPosition(40, 25);
	PianoKey13->setCallbackId(1);
	PianoKey13->bindCallback(PIANO_KEY_WHITE + 12);
	PianoKey13->setSize(300, 40);

	tgui::Button::Ptr PianoKey14(gui);
	PianoKey14->load("data/widgets/keys_lower.conf");
	PianoKey14->setPosition(40, 25);
	PianoKey14->setCallbackId(1);
	PianoKey14->bindCallback(PIANO_KEY_WHITE + 13);
	PianoKey14->setSize(300, 40);

	tgui::Button::Ptr PianoKey15(gui);
	PianoKey15->load("data/widgets/keys_lower.conf");
	PianoKey15->setPosition(40, 25);
	PianoKey15->setCallbackId(1);
	PianoKey15->bindCallback(PIANO_KEY_WHITE + 14);
	PianoKey15->setSize(300, 40);

	tgui::Button::Ptr PianoKeyA(gui);
	PianoKeyA->load("data/widgets/keys_upper.conf");
	PianoKeyA->setPosition(40, 25);
	PianoKeyA->setCallbackId(1);
	PianoKeyA->bindCallback(PIANO_KEY_WHITE);
	PianoKeyA->setSize(300, 40);

	tgui::Button::Ptr PianoKeyB(gui);
	PianoKeyB->load("data/widgets/keys_upper.conf");
	PianoKeyB->setPosition(40, 25);
	PianoKeyB->setCallbackId(1);
	PianoKeyB->bindCallback(PIANO_KEY_WHITE + 1);
	PianoKeyB->setSize(300, 40);

	tgui::Button::Ptr PianoKeyC(gui);
	PianoKeyC->load("data/widgets/keys_upper.conf");
	PianoKeyC->setPosition(40, 25);
	PianoKeyC->setCallbackId(1);
	PianoKeyC->bindCallback(PIANO_KEY_WHITE + 2);
	PianoKeyC->setSize(300, 40);

	tgui::Button::Ptr PianoKeyD(gui);
	PianoKeyD->load("data/widgets/keys_upper.conf");
	PianoKeyD->setPosition(40, 25);
	PianoKeyD->setCallbackId(1);
	PianoKeyD->bindCallback(PIANO_KEY_WHITE + 3);
	PianoKeyD->setSize(300, 40);

	tgui::Button::Ptr PianoKeyE(gui);
	PianoKeyE->load("data/widgets/keys_upper.conf");
	PianoKeyE->setPosition(40, 25);
	PianoKeyE->setCallbackId(1);
	PianoKeyE->bindCallback(PIANO_KEY_WHITE + 4);
	PianoKeyE->setSize(300, 40);

	tgui::Button::Ptr PianoKeyF(gui);
	PianoKeyF->load("data/widgets/keys_upper.conf");
	PianoKeyF->setPosition(40, 25);
	PianoKeyF->setCallbackId(1);
	PianoKeyF->bindCallback(PIANO_KEY_WHITE + 5);
	PianoKeyF->setSize(300, 40);

	tgui::Button::Ptr PianoKeyG(gui);
	PianoKeyG->load("data/widgets/keys_upper.conf");
	PianoKeyG->setPosition(40, 25);
	PianoKeyG->setCallbackId(1);
	PianoKeyG->bindCallback(PIANO_KEY_WHITE + 6);
	PianoKeyG->setSize(300, 40);

	tgui::Button::Ptr PianoKeyH(gui);
	PianoKeyH->load("data/widgets/keys_upper.conf");
	PianoKeyH->setPosition(40, 25);
	PianoKeyH->setCallbackId(1);
	PianoKeyH->bindCallback(PIANO_KEY_WHITE + 7);
	PianoKeyH->setSize(300, 40);

	tgui::Button::Ptr PianoKeyI(gui);
	PianoKeyI->load("data/widgets/keys_upper.conf");
	PianoKeyI->setPosition(40, 25);
	PianoKeyI->setCallbackId(1);
	PianoKeyI->bindCallback(PIANO_KEY_WHITE + 8);
	PianoKeyI->setSize(300, 40);

	tgui::Button::Ptr PianoKeyJ(gui);
	PianoKeyJ->load("data/widgets/keys_upper.conf");
	PianoKeyJ->setPosition(40, 25);
	PianoKeyJ->setCallbackId(1);
	PianoKeyJ->bindCallback(PIANO_KEY_WHITE + 9);
	PianoKeyJ->setSize(300, 40);
	*/

	/* Misc */

	tgui::Label::Ptr label(gui);
	label->load(THEME_CONFIG_FILE);
	label->setText("Sync");
	label->setPosition(870, 57);
	label->setTextColor(sf::Color(200, 200, 200));
	label->setTextSize(24);

	/*
	tgui::ComboBox::Ptr comboBox(gui);
	comboBox->load(THEME_CONFIG_FILE);
	comboBox->setSize(120, 21);
	comboBox->setPosition(210, 440);
	comboBox->addItem("Item 1");
	comboBox->addItem("Item 2");
	comboBox->addItem("Item 3");
	comboBox->setSelectedItem("Item 2");
	
	tgui::ListBox::Ptr listBox(gui);
	listBox->load(THEME_CONFIG_FILE);
	listBox->setSize(150, 120);
	listBox->setItemHeight(20);
	listBox->setPosition(40, 440);
	listBox->addItem("Item 1");
	listBox->addItem("Item 2");
	listBox->addItem("Item 3");

	tgui::LoadingBar::Ptr loadingbar(gui);
	loadingbar->load(THEME_CONFIG_FILE);
	loadingbar->setPosition(40, 330);
	loadingbar->setSize(300, 30);
	loadingbar->setValue(35);

	tgui::Tab::Ptr tab(gui);
	tab->load(THEME_CONFIG_FILE);
	tab->setPosition(40, 370);
	tab->add("Item 1");
	tab->add("Item 2");
	tab->add("Item 3"); */

	
	// initalize defaults
	knob1->setValue(0);
	knob2->setValue(0);
	knob3->setValue(0);
	knob4->setValue(0);
	knob5->setValue(0);
	knob6->setValue(0);
	knob7->setValue(0);
	knob8->setValue(0);
	
	scrollbar1->setValue(127);
	scrollbar2->setValue(127);
	scrollbar3->setValue(127);
	scrollbar4->setValue(127);
	scrollbar5->setValue(127);
	scrollbar6->setValue(127);
	scrollbar7->setValue(127);
	scrollbar8->setValue(127);
	
	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();

			gui.handleEvent(event);
		}

		// Callback handling

		tgui::Callback callback;
		while (gui.pollCallback(callback))
		{
			int value;

			switch(callback.id)
			{
				// Knobs
				case Knob_CALLBACK_ID + 1:
				{
					value=knob1->getValue();
					
					if (invert_Knob_SYNC == true) scrollbar1->setValue(value); // works but sync is flipped
					else scrollbar1->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 2:
				{
					value = knob2->getValue();

					if (invert_Knob_SYNC == true) scrollbar2->setValue(value / 3); // works but sync is flipped
					else scrollbar2->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 3:
				{
					value = knob3->getValue();

					if (invert_Knob_SYNC == true) scrollbar3->setValue(value / 3); // works but sync is flipped
					else scrollbar3->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 4:
				{
					value = knob4->getValue();

					if (invert_Knob_SYNC == true) scrollbar4->setValue(value / 3); // works but sync is flipped
					else scrollbar4->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 5:
				{
					value = knob5->getValue();

					if (invert_Knob_SYNC == true) scrollbar5->setValue(value / 3); // works but sync is flipped
					else scrollbar5->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 6:
				{
					value = knob6->getValue();

					if (invert_Knob_SYNC == true) scrollbar6->setValue(value / 3); // works but sync is flipped
					else scrollbar6->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 7:
				{
					value = knob7->getValue();

					if (invert_Knob_SYNC == true) scrollbar7->setValue(value / 3); // works but sync is flipped
					else scrollbar7->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 8:
				{
					value = knob8->getValue();

					if (invert_Knob_SYNC == true) scrollbar8->setValue(value / 3); // works but sync is flipped
					else scrollbar8->setValue(128 - value); // default
					break;
				}
				case Knob_CALLBACK_ID + 9:
				{
					invert_Knob_SYNC = !invert_Knob_SYNC;
					break;
				}
				case KnobScroll_CALLBACK_ID + 1:
				{
					value = scrollbar1->getValue();

					if (invert_Knob_SYNC == true) knob1->setValue(value); // works but sync is flipped
					else knob1->setValue(128 - value); // default
					break;
				}
				case KnobScroll_CALLBACK_ID + 2:
				{
					value = scrollbar2->getValue();

					if (invert_Knob_SYNC == true) knob2->setValue(value * 3); // works but sync is flipped
					else knob2->setValue(128 - value); // default
					break;
				}
				case KnobScroll_CALLBACK_ID + 3:
				{
					value = scrollbar3->getValue();

					if (invert_Knob_SYNC == true) knob3->setValue(value * 3); // works but sync is flipped
					else knob3->setValue(128 - value); // default
					break;
				}
				case KnobScroll_CALLBACK_ID + 4:
				{
					value = scrollbar4->getValue();

					if (invert_Knob_SYNC == true) knob4->setValue(value * 3); // works but sync is flipped
					else knob4->setValue(128 - value); // default
					break;
				}
				case KnobScroll_CALLBACK_ID + 5:
				{
					value = scrollbar5->getValue();

					if (invert_Knob_SYNC == true) knob5->setValue(value * 3); // works but sync is flipped
					else knob5->setValue(128 - value); // default
					break;
				}
				case KnobScroll_CALLBACK_ID + 6:
				{
					value = scrollbar6->getValue();

					if (invert_Knob_SYNC == true) knob6->setValue(value * 3); // works but sync is flipped
					else knob6->setValue(128 - value); // default
					break;
				}
				case KnobScroll_CALLBACK_ID + 7:
				{
					value = scrollbar7->getValue();

					if (invert_Knob_SYNC == true) knob7->setValue(value * 3); // works but sync is flipped
					else knob7->setValue(128 - value); // default
					break;
				}
				case KnobScroll_CALLBACK_ID + 8:
				{
					value = scrollbar8->getValue();

					if (invert_Knob_SYNC == true) knob8->setValue(value * 3); // works but sync is flipped
					else knob8->setValue(128 - value); // default
					break;
				}
			}
		}

		// misc

		window.clear();
		gui.draw();
		window.display();
	}

	return 0;
}

