204 lines
4.4 KiB
C++
Raw Normal View History

2014-01-06 02:40:24 +00:00
//
// GUIManager.cpp
//
// Created by James Alliban on 25/06/2013.
//
#include "GUIManager.h"
void GUIManager::setup()
{
ofAddListener(ofEvents().keyPressed, this, &GUIManager::keyPressed);
ofAddListener(ofEvents().exit, this, &GUIManager::exit);
currentUIID = 0;
dim = 16;
toggleDim = 16;
canvasW = 320;
canvasH = ofGetScreenHeight();
xInit = OFX_UI_GLOBAL_WIDGET_SPACING;
length = canvasW - xInit* 2;
toggleSize = 32;
spacerW = canvasW - xInit* 2;
spacerH = 1;
color = ofColor(100, 100, 210, 230);
isVisible = false;
isAutoSave = true;
buildTopBarGUI();
}
bool GUIManager::getVisible()
{
return isVisible;
}
void GUIManager::buildTopBarGUI()
{
topBarGui = new ofxUICanvas(canvasW, 0, 600, 146);
topBarGui->setColorBack(color);
topBarGui->setName(TOP_TITLE);
topBarGui->addWidgetRight(new ofxUIFPS(OFX_UI_FONT_MEDIUM));
topBarGui->addWidgetRight(new ofxUILabelToggle(true, TOP_AUTO_SAVE));
topBarGui->addWidgetRight(new ofxUILabelButton(false, TOP_SAVE));
topBarGui->addWidgetRight(new ofxUILabelButton(false, TOP_PREVIOUS));
topBarGui->addWidgetRight(new ofxUILabelButton(false, TOP_NEXT));
topBarGui->autoSizeToFitWidgets();
ofAddListener(topBarGui->newGUIEvent, this, &GUIManager::topBarGUIEvent);
finaliseCanvas(topBarGui, false);
}
ofxUICanvas* GUIManager::getNewGUI(string title)
{
ofxUICanvas* gui = new ofxUICanvas(0, 0, canvasW, canvasH);
gui->setColorBack(color);
gui->setName(title);
gui->addWidgetDown(new ofxUILabel(gui->getName(), OFX_UI_FONT_MEDIUM));
gui->addSpacer(spacerW, spacerH);
return gui;
}
void GUIManager::finaliseCanvas(ofxUICanvas* gui, bool isAddedToArray)
{
string name = gui->getName();
string xmlPath = "GUI/" + name + "GuiPageSettings.xml";
gui->loadSettings(xmlPath);
gui->setVisible(false);
gui->autoSizeToFitWidgets();
if (isAddedToArray) guiPages.push_back(gui);
}
void GUIManager::topBarGUIEvent(ofxUIEventArgs &e) //---------------- Top bar
{
string name = e.widget->getName();
if (name == TOP_AUTO_SAVE)
{
ofxUIToggle *toggle = (ofxUIToggle *)e.widget;
isAutoSave = toggle->getValue();
}
else if (name == TOP_SAVE)
{
saveSettings();
}
else if (name == TOP_NEXT)
{
ofxUIButton *button = (ofxUIButton *)e.widget;
if (button->getValue()) nextPage();
}
else if (name == TOP_PREVIOUS)
{
ofxUIButton *button = (ofxUIButton *)e.widget;
if (button->getValue()) previousPage();
}
}
void GUIManager::keyPressed(ofKeyEventArgs& eventArgs) //int key)
{
printf("keyPressed - key = %c \n", eventArgs.key);
switch (eventArgs.key)
{
case '[':
previousPage();
break;
case ']':
nextPage();
break;
case ' ':
toggleVisible();
}
}
void GUIManager::nextPage()
{
printf("next\n");
++currentUIID;
showGUI();
}
void GUIManager::previousPage()
{
printf("prev\n");
--currentUIID;
if (currentUIID < 0) currentUIID = guiPages.size() - 1;
showGUI();
}
void GUIManager::showGUI()
{
for (int i = 0; i < (int)guiPages.size(); i++)
{
guiPages[i]->setVisible(false);
}
isVisible = true;
if (guiPages.size() > 0)
{
int newVisibleGUIID = currentUIID % (int)guiPages.size();
guiPages[newVisibleGUIID]->setVisible(true);
}
topBarGui->setVisible(true);
}
void GUIManager::toggleVisible()
{
isVisible = !isVisible;
if (isVisible)
{
showGUI();
}
else
{
for (int i = 0; i < (int)guiPages.size(); i++)
{
guiPages[i]->setVisible(false);
}
topBarGui->setVisible(false);
}
}
void GUIManager::saveSettings()
{
for (int i = 0; i < (int)guiPages.size(); i++)
{
string xmlPath = "GUI/" + guiPages[i]->getName() + "guiPagesettings.xml";
guiPages[i]->saveSettings(xmlPath);
}
//topBarGui->saveSettings("GUI/" + topBarGui->getName() + "guiPagesettings.xml");
}
void GUIManager::setGUIColour()
{
for (int i = 0; i < (int)guiPages.size(); i++)
{
guiPages[i]->setColorBack(color);
}
topBarGui->setColorBack(color);
}
void GUIManager::exit(ofEventArgs& eventArgs)
{
if (isAutoSave) saveSettings();
delete topBarGui;
for (int i = 0; i < guiPages.size(); i++)
delete guiPages[i];
}