X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpretor/preprocessor/faust-0.9.47mr3/architecture/iPhone/CocoaUI.h diff --git a/interpretor/preprocessor/faust-0.9.47mr3/architecture/iPhone/CocoaUI.h b/interpretor/preprocessor/faust-0.9.47mr3/architecture/iPhone/CocoaUI.h deleted file mode 100644 index 775f3b6..0000000 --- a/interpretor/preprocessor/faust-0.9.47mr3/architecture/iPhone/CocoaUI.h +++ /dev/null @@ -1,604 +0,0 @@ -/************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2004-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either version 3 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - -#import -#import "iPhoneViewController.h" - -#include "misc.h" - -#include -#include - -using namespace std; - -/****************************************************************************** -******************************************************************************* - - GRAPHIC USER INTERFACE (v2) - abstract interfaces - -******************************************************************************* -*******************************************************************************/ - -//typedef void (*uiCallback)(float val, void* data); - -//================= -// COCOA part -//================= - -class UI; - -@interface uiItem : NSObject -{ - UI* fGUI; - float* fZone; - float fCache; -} - -- (id)initWithValues:(UI*)ui:(float*)zone; -- (void)modifyZone:(float)v; -- (float)cache; -- (void)reflectZone; - -@end - -/** - * Graphic User Interface : abstract definition - */ - -class UI -{ - typedef list clist; - typedef map zmap; - - protected: - - static list fGuiList; - zmap fZoneMap; - bool fStopped; - - public: - - UI() : fStopped(false) - { - fGuiList.push_back(this); - } - - virtual ~UI() - { - // suppression de this dans fGuiList - } - - // -- registerZone(z,c) : zone management - - void registerZone(float* z, uiItem* c) - { - if (fZoneMap.find(z) == fZoneMap.end()) { - fZoneMap[z] = new clist(); - } - fZoneMap[z]->push_back(c); - } - - // -- saveState(filename) : save the value of every zone to a file - - void saveState(const char* filename) - { - ofstream f(filename); - - if (!f.is_open()) { - } else { - for (zmap::iterator i = fZoneMap.begin(); i != fZoneMap.end(); i++) { - f << *(i->first) << ' '; - } - } - - f << endl; - f.close(); - } - - // -- recallState(filename) : load the value of every zone from a file - - void recallState(const char* filename) - { - ifstream f(filename); - if (f.good()) { - for (zmap::iterator i = fZoneMap.begin(); i != fZoneMap.end(); i++) { - f >> *(i->first); - } - } - f.close(); - updateAllZones(); - } - - void updateAllZones(); - - void updateZone(float* z); - - static void updateAllGuis() - { - list::iterator g; - for (g = fGuiList.begin(); g != fGuiList.end(); g++) { - (*g)->updateAllZones(); - } - } - - // -- active widgets - - virtual void addButton(const char* label, float* zone) = 0; - virtual void addToggleButton(const char* label, float* zone) = 0; - virtual void addCheckButton(const char* label, float* zone) = 0; - virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float step) = 0; - virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) = 0; - virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) = 0; - - // -- passive widgets - - virtual void addNumDisplay(const char* label, float* zone, int precision) = 0; - virtual void addTextDisplay(const char* label, float* zone, const char* names[], float min, float max) = 0; - virtual void addHorizontalBargraph(const char* label, float* zone, float min, float max) = 0; - virtual void addVerticalBargraph(const char* label, float* zone, float min, float max) = 0; - - //void addCallback(float* zone, uiCallback foo, void* data); - - // -- widget's layouts - - virtual void openFrameBox(const char* label) = 0; - virtual void openTabBox(const char* label) = 0; - virtual void openHorizontalBox(const char* label) = 0; - virtual void openVerticalBox(const char* label) = 0; - - // -- extra widget's layouts - - virtual void openDialogBox(const char* label, float* zone) = 0; - virtual void openEventBox(const char* label) = 0; - virtual void openHandleBox(const char* label) = 0; - virtual void openExpanderBox(const char* label, float* zone) = 0; - - virtual void closeBox() = 0; - - virtual void show() {}; - virtual void run() {}; - - void stop() { fStopped = true; } - bool stopped() { return fStopped; } - - virtual void declare(float* zone, const char* key, const char* value) {} -}; - -/** - * Update all user items reflecting zone z - */ - -void UI::updateZone(float* z) -{ - float v = *z; - clist* l = fZoneMap[z]; - - for (clist::iterator c = l->begin(); c != l->end(); c++) { - if ([(*c) cache] != v) [(*c) reflectZone]; - } -} - -/** - * Update all user items not up to date - */ - -inline void UI::updateAllZones() -{ - for (zmap::iterator m = fZoneMap.begin(); m != fZoneMap.end(); m++) { - float* z = m->first; - clist* l = m->second; - float v = *z; - for (clist::iterator c = l->begin(); c != l->end(); c++) { - if ([(*c) cache] != v) [(*c) reflectZone]; - } - } -} - -/* -inline void UI::addCallback(float* zone, uiCallback foo, void* data) -{ - new uiCallbackItem(this, zone, foo, data); -}; -*/ - -#define WIDGET_SLICE 50.f -#define OFFSET_Y 80.f - -#define SCREEN_WIDTH 320 -#define SCREEN_HEIGHT 480 - -@implementation uiItem - -- (id)initWithValues:(UI*)ui:(float*)zone -{ - fGUI = ui; - fZone = zone; - fCache = -123456.654321; - ui->registerZone(zone, self); - return self; -} - -- (void)modifyZone:(float)v -{ - fCache = v; - - if (*fZone != v) { - *fZone = v; - fGUI->updateZone(fZone); - } -} - -- (float)cache -{ - return fCache; -} - -// To implement in subclasses - -- (void)reflectZone -{} - -@end - -// -------------------------- Slider ----------------------------------- - -@interface uiSlider : uiItem -{ - UISlider* fSlider; - UITextField* fTextField; -} - -- (void)changed:(UISlider*)sender; -- (void)reflectZone; -- (id)initWithValues:(int)index:(UI*)ui:(iPhoneViewController*)controler:(const char*)label:(float*)zone:(float)init:(float)min:(float)max:(float)step; - -@end - -@implementation uiSlider - -- (id)initWithValues:(int)index:(UI*)ui:(iPhoneViewController*)controler:(const char*)name:(float*)zone:(float)init:(float)min:(float)max:(float)step -{ - if (self = [super initWithValues:ui:zone]) { - - CGRect labelFrame = CGRectMake(0.0, OFFSET_Y + WIDGET_SLICE * index - 5.f, 130.0, 30.0); - UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; - [label setFont:[UIFont boldSystemFontOfSize:12]]; - label.textAlignment = UITextAlignmentCenter; - [label setText:[[NSString alloc] initWithCString:name encoding:NSASCIIStringEncoding]]; - label.textColor = [UIColor blackColor ]; - label.backgroundColor = [UIColor lightGrayColor]; - [controler.view addSubview:label]; - - CGRect frame = CGRectMake(130.0f, OFFSET_Y + WIDGET_SLICE * index, 110.0f, 7.0f); - fSlider = [[UISlider alloc] initWithFrame:frame]; - [fSlider addTarget:self action:@selector(changed:)forControlEvents:UIControlEventValueChanged]; - fSlider.minimumValue = min; - fSlider.maximumValue = max; - fSlider.continuous = YES; - fSlider.value = init; - [controler.view addSubview:fSlider]; - - CGRect textFieldFrame = CGRectMake(250.0, OFFSET_Y + WIDGET_SLICE * index, 60.0, 20.0); - fTextField = [[UITextField alloc] initWithFrame:textFieldFrame]; - [fTextField setBorderStyle:UITextBorderStyleLine]; - fTextField.textAlignment = UITextAlignmentCenter; - [fTextField setEnabled:NO]; - [fTextField setTextColor:[UIColor blackColor]]; - [fTextField setFont:[UIFont systemFontOfSize:14]]; - [fTextField setPlaceholder:[NSString stringWithFormat:@"%1.2f", init]]; - [fTextField setBackgroundColor:[UIColor whiteColor]]; - [fTextField setAdjustsFontSizeToFitWidth:YES]; - fTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation; - [controler.view addSubview:fTextField]; - } - return self; -} - -- (void)changed:(UISlider*)sender -{ - [self modifyZone:sender.value]; - [fTextField setPlaceholder:[NSString stringWithFormat:@"%1.2f", sender.value]]; -} - -- (void)reflectZone; -{ - float v = *fZone; - fCache = v; - fSlider.value = v; - [fTextField setPlaceholder:[NSString stringWithFormat:@"%1.2f", v]]; -} - -- (void)dealloc -{ - [fSlider release]; - [fTextField release]; - [super dealloc]; -} - -@end - -// --------------------------- Press button --------------------------- - -#define kStdButtonWidth 100.0 -#define kStdButtonHeight 40.0 - -@interface uiButton : uiItem -{ - UIButton* fButton; -} - -- (void)pressed:(UIButton*)sender; -- (void)released:(UIButton*)sender; -- (void)reflectZone; -- (id)initWithValues:(int)index:(UI*)ui:(iPhoneViewController*)controler:(const char*)label:(float*)zone; - -@end - -@implementation uiButton - -- (id)initWithValues:(int)index:(UI*)ui:(iPhoneViewController*)controler:(const char*)name:(float*)zone -{ - if (self = [super initWithValues:ui:zone]) { - fButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; - fButton.frame = CGRectMake(SCREEN_WIDTH/2 - kStdButtonWidth/2, OFFSET_Y + WIDGET_SLICE * index - 5.f, kStdButtonWidth, kStdButtonHeight); - [fButton setTitle:[[NSString alloc] initWithCString:name encoding:NSASCIIStringEncoding] forState:UIControlStateNormal]; - fButton.backgroundColor = [UIColor clearColor]; - [fButton addTarget:self action:@selector(pressed:) forControlEvents:UIControlEventTouchDown]; - [fButton addTarget:self action:@selector(released:) forControlEvents:UIControlEventTouchUpInside]; - [controler.view addSubview:fButton]; - } - return self; -} - -- (void)pressed:(UIButton*)sender -{ - [self modifyZone:1.0f]; -} - -- (void)released:(UIButton*)sender -{ - [self modifyZone:0.0f]; -} - -- (void)reflectZone -{ - float v = *fZone; - fCache = v; - //if (v > 0.0) gtk_button_pressed(fButton); else gtk_button_released(fButton); -} - -- (void)dealloc -{ - [fButton release]; - [super dealloc]; -} - -@end - -// ------------------------------ Num Entry ----------------------------------- - -@interface uiNumEntry : uiItem -{ - UITextField* fTextField; -} - -- (id)initWithValues:(int)index:(UI*)ui:(iPhoneViewController*)controler:(const char*)label:(float*)zone:(float)init:(float)min:(float)max:(float)step; - -@end - -@implementation uiNumEntry - -- (id)initWithValues:(int)index:(UI*)ui:(iPhoneViewController*)controler:(const char*)label:(float*)zone:(float)init:(float)min:(float)max:(float)step -{ - if (self = [super initWithValues:ui:zone]) { - CGRect textFieldFrame = CGRectMake(SCREEN_WIDTH/2 - kStdButtonWidth/2, OFFSET_Y + WIDGET_SLICE * index - 5.f, kStdButtonWidth, kStdButtonHeight); - fTextField = [[UITextField alloc] initWithFrame:textFieldFrame]; - [fTextField setTextColor:[UIColor blackColor]]; - [fTextField setFont:[UIFont systemFontOfSize:14]]; - [fTextField setPlaceholder:@""]; - [fTextField setBackgroundColor:[UIColor whiteColor]]; - fTextField.keyboardType = UIKeyboardTypeDefault; - - [controler.view addSubview:fTextField]; - } - return self; -} - -- (void)dealloc -{ - [fTextField release]; - [super dealloc]; -} - -@end - - -class CocoaUI : public UI -{ - -private: - - UIWindow* fWindow; - iPhoneViewController* fViewController; - MY_Meta* fMetadata; - - list fWidgetList; - - void insert(const char* label, uiItem* widget) - { - fWidgetList.push_back(widget); - [fViewController.view setContentSize:CGSizeMake(320, WIDGET_SLICE * fWidgetList.size() + 100.f)]; - } - -public: - - // -- Labels and metadata - - // virtual void declare (float* zone, const char* key, const char* value); - // virtual int checkLabelOptions (GtkWidget* widget, const string& fullLabel, string& simplifiedLabel); - // virtual void checkForTooltip (float* zone, GtkWidget* widget); - - // -- layout groups - - CocoaUI(UIWindow* window, iPhoneViewController* viewController, MY_Meta* metadata) - { - fViewController = viewController; - fWindow = window; - fMetadata = metadata; - - CGRect titleFrame = CGRectMake(0.0, 0.0f, 320.0, 75.0); - UIView *titleView = [[UIView alloc] initWithFrame:titleFrame]; - titleView.backgroundColor = [UIColor brownColor]; - [fViewController.view addSubview:titleView]; - - if (fMetadata->find("name") != fMetadata->end()) { - const char* name = (*fMetadata->find("name")).second; - CGRect labelFrame = CGRectMake(0.0, 20.0f, 320.0, 30.0); - UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; - [label setFont:[UIFont boldSystemFontOfSize:18]]; - label.textAlignment = UITextAlignmentCenter; - [label setText:[[NSString alloc] initWithCString:name encoding:NSASCIIStringEncoding]]; - label.textColor = [UIColor blackColor ]; - label.backgroundColor = [UIColor brownColor]; - [fViewController.view addSubview:label]; - } - - if (fMetadata->find("author") != fMetadata->end()) { - const char* name = (*fMetadata->find("author")).second; - CGRect labelFrame = CGRectMake(0.0, 45.0f, 320.0, 30.0); - UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; - [label setFont:[UIFont boldSystemFontOfSize:14]]; - label.textAlignment = UITextAlignmentCenter; - [label setText:[[NSString alloc] initWithCString:name encoding:NSASCIIStringEncoding]]; - label.textColor = [UIColor blackColor ]; - label.backgroundColor = [UIColor brownColor]; - [fViewController.view addSubview:label]; - } - - [window addSubview:viewController.view]; - [window makeKeyAndVisible]; - } - - ~CocoaUI() - { - [fViewController release]; - [fWindow release]; - } - - virtual void openFrameBox(const char* label) - {} - virtual void openTabBox(const char* label = "") - {} - virtual void openHorizontalBox(const char* label = "") - {} - virtual void openVerticalBox(const char* label = "") - {} - - // -- extra widget's layouts - - virtual void openDialogBox(const char* label, float* zone) - {} - virtual void openEventBox(const char* label = "") - {} - virtual void openHandleBox(const char* label = "") - {} - virtual void openExpanderBox(const char* label, float* zone) - {} - - virtual void closeBox() - {} - - //virtual void adjustStack(int n); - - // -- active widgets - - virtual void addButton(const char* label, float* zone) - { - uiItem* item = [[uiButton alloc] initWithValues:fWidgetList.size():this:fViewController:label:zone]; - insert(label, item); - } - virtual void addToggleButton(const char* label, float* zone) - {} - virtual void addCheckButton(const char* label, float* zone) - {} - virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float step) - { - uiItem* item = [[uiSlider alloc] initWithValues:fWidgetList.size():this:fViewController:label:zone:init:min:max:step]; - insert(label, item); - } - virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) - { - uiItem* item = [[uiSlider alloc] initWithValues:fWidgetList.size():this:fViewController:label:zone:init:min:max:step]; - insert(label, item); - } - virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) - { - uiItem* item = [[uiNumEntry alloc] initWithValues:fWidgetList.size():this:fViewController:label:zone:init:min:max:step]; - insert(label, item); - } - - // -- passive display widgets - - virtual void addNumDisplay(const char* label, float* zone, int precision) - {} - virtual void addTextDisplay(const char* label, float* zone, const char* names[], float min, float max) - {} - virtual void addHorizontalBargraph(const char* label, float* zone, float min, float max) - {} - virtual void addVerticalBargraph(const char* label, float* zone, float min, float max) - {} - - virtual void show() - {} - virtual void run() - {} - - virtual void declare(float* zone, const char* key, const char* value) - {} - -}; - - -// global static fields - -list UI::fGuiList; - -/* -bool GTKUI::fInitialized = false; -map GTKUI::fGuiSize; -map GTKUI::fTooltip; -*/