[dasher: 16/21] Merge framerate/turbo mode/slow-start with ipad/multitouch/landscape



commit 02202c6af62d7db341ffe7e0f328f8fc88a90200
Merge: 58bbd20 381afb8
Author: Alan Lawrence <acl33 inf phy cam ac uk>
Date:   Tue Jul 12 19:42:29 2011 +0100

    Merge framerate/turbo mode/slow-start with ipad/multitouch/landscape
    
    Yes, this means we now get turbo mode when holding down >1 finger on iOS :)

 Data/GUI/dasher.compose.ui                   |    1 -
 Data/GUI/dasher.direct.ui                    |    1 -
 Data/GUI/dasher.fullscreen.ui                |    1 -
 Data/GUI/dasher.gameWIP.ui                   |    1 -
 Data/GUI/dasher.traditional.ui               |    1 -
 Src/DasherCore/ActionButton.cpp              |   49 --------
 Src/DasherCore/ActionButton.h                |   37 ------
 Src/DasherCore/ButtonMode.cpp                |    4 +-
 Src/DasherCore/ButtonMode.h                  |    2 +-
 Src/DasherCore/ButtonMultiPress.cpp          |   14 +-
 Src/DasherCore/ButtonMultiPress.h            |   12 +-
 Src/DasherCore/CircleStartHandler.cpp        |   10 +-
 Src/DasherCore/CircleStartHandler.h          |    5 +-
 Src/DasherCore/ClickFilter.cpp               |    2 +-
 Src/DasherCore/DashIntfScreenMsgs.cpp        |   31 +++---
 Src/DasherCore/DashIntfScreenMsgs.h          |    5 +-
 Src/DasherCore/DasherButtons.cpp             |    4 +-
 Src/DasherCore/DasherButtons.h               |    2 +-
 Src/DasherCore/DasherInterfaceBase.cpp       |  150 +++----------------------
 Src/DasherCore/DasherInterfaceBase.h         |   54 +++------
 Src/DasherCore/DasherModel.cpp               |   88 +++++----------
 Src/DasherCore/DasherModel.h                 |   66 ++++--------
 Src/DasherCore/DefaultFilter.cpp             |   33 ++++--
 Src/DasherCore/DefaultFilter.h               |   14 ++-
 Src/DasherCore/DynamicButtons.cpp            |  156 ++++++++++++++++++++++++++
 Src/DasherCore/DynamicButtons.h              |   67 +++++++++++
 Src/DasherCore/DynamicFilter.cpp             |  141 ++++--------------------
 Src/DasherCore/DynamicFilter.h               |   54 ++++------
 Src/DasherCore/FrameRate.cpp                 |    2 +-
 Src/DasherCore/FrameRate.h                   |   23 ++--
 Src/DasherCore/InputFilter.h                 |   12 +--
 Src/DasherCore/Makefile.am                   |    6 +-
 Src/DasherCore/OneButtonDynamicFilter.cpp    |   20 ++--
 Src/DasherCore/OneButtonDynamicFilter.h      |    6 +-
 Src/DasherCore/OneButtonFilter.cpp           |    4 +-
 Src/DasherCore/OneButtonFilter.h             |    2 +-
 Src/DasherCore/OneDimensionalFilter.cpp      |   10 +-
 Src/DasherCore/OneDimensionalFilter.h        |    2 +-
 Src/DasherCore/Parameters.cpp                |    1 +
 Src/DasherCore/Parameters.h                  |    2 +-
 Src/DasherCore/StartHandler.h                |    8 +-
 Src/DasherCore/StylusFilter.cpp              |   18 ++--
 Src/DasherCore/StylusFilter.h                |    6 +-
 Src/DasherCore/TwoBoxStartHandler.cpp        |    9 +-
 Src/DasherCore/TwoBoxStartHandler.h          |    3 +-
 Src/DasherCore/TwoButtonDynamicFilter.cpp    |   36 ++++---
 Src/DasherCore/TwoButtonDynamicFilter.h      |    6 +-
 Src/DasherCore/TwoPushDynamicFilter.cpp      |   28 ++---
 Src/DasherCore/TwoPushDynamicFilter.h        |   10 +-
 Src/DasherCore/UserLog.cpp                   |    5 +-
 Src/DasherCore/UserLog.h                     |    2 +-
 Src/DasherCore/UserLogBase.cpp               |   15 ++-
 Src/DasherCore/UserLogBase.h                 |    4 +-
 Src/Gtk2/DasherControl.cpp                   |   11 +-
 Src/Gtk2/DasherControl.h                     |    3 -
 Src/Gtk2/GtkDasherControl.cpp                |   10 --
 Src/Gtk2/GtkDasherControl.h                  |    2 -
 Src/Gtk2/dasher_editor_internal.cpp          |    1 -
 Src/Gtk2/dasher_editor_internal.h            |    3 -
 Src/Gtk2/dasher_main.cpp                     |   61 +----------
 Src/MacOSX/Dasher.xcodeproj/project.pbxproj  |   16 ++--
 Src/MacOSX/DasherApp.h                       |    3 -
 Src/MacOSX/DasherApp.mm                      |   12 --
 Src/MacOSX/DasherViewOpenGL.mm               |   43 ++++++-
 Src/Win32/Widgets/Canvas.cpp                 |   10 +--
 Src/iPhone/Classes/CDasherInterfaceBridge.mm |   10 +-
 Src/iPhone/Classes/EAGLView.mm               |    4 +-
 Src/iPhone/Classes/IPhoneFilters.h           |   16 ++--
 Src/iPhone/Classes/IPhoneFilters.mm          |   26 ++--
 Src/iPhone/Dasher.xcodeproj/project.pbxproj  |   12 +-
 70 files changed, 642 insertions(+), 846 deletions(-)
---
diff --cc Src/DasherCore/DashIntfScreenMsgs.cpp
index b75e145,00d35ca..a9d007c
--- a/Src/DasherCore/DashIntfScreenMsgs.cpp
+++ b/Src/DasherCore/DashIntfScreenMsgs.cpp
@@@ -81,22 -81,24 +81,25 @@@ void CDashIntfScreenMsgs::ChangeScreen(
    }
  }
  
- void CDashIntfScreenMsgs::Unpause(unsigned long lTime) {
-   if (!GetBoolParameter(BP_DASHER_PAUSED)) return;
-   while (!m_dqModalMessages.empty()) {
-     if (m_dqModalMessages.front().second) {
-       //Message has been displayed; delete it
-       delete m_dqModalMessages.front().first; //the label
-       m_dqModalMessages.pop_front();
-     } else {
-       //there are more, not-yet displayed, modal messages!
-       //These should be after any that were displayed (which have now been erased), so
-       // do not unpause; next frame will render more messages instead.
-       m_pDasherModel->ClearScheduledSteps();
-       return;
+ void CDashIntfScreenMsgs::HandleEvent(int iParameter) {
+   CDashIntfSettings::HandleEvent(iParameter);
+   if (iParameter==BP_DASHER_PAUSED && !GetBoolParameter(BP_DASHER_PAUSED)) {
+     //just unpaused.
+     while (!m_dqModalMessages.empty()) {
+       if (m_dqModalMessages.front().second) {
+         //Message has been displayed; delete it
+         delete m_dqModalMessages.front().first; //the label
+         m_dqModalMessages.pop_front();
+       } else {
+         //there are more, not-yet displayed, modal messages!
+         //These should be after any that were displayed (which have now been erased), so:
+         // do not unpause; next frame will render more messages instead.
++        m_pDasherModel->ClearScheduledSteps();
+         SetBoolParameter(BP_DASHER_PAUSED,true);
+         return;
+       }
      }
    }
-   CDasherInterfaceBase::Unpause(lTime);
  }
  
  CGameModule *CDashIntfScreenMsgs::CreateGameModule(CDasherView *pView, CDasherModel *pModel) {
diff --cc Src/DasherCore/DasherInterfaceBase.cpp
index b054572,3ae2b41..ace3b07
--- a/Src/DasherCore/DasherInterfaceBase.cpp
+++ b/Src/DasherCore/DasherInterfaceBase.cpp
@@@ -86,7 -85,7 +85,7 @@@ static char THIS_FILE[] = __FILE__
  #endif
  #endif
  
- CDasherInterfaceBase::CDasherInterfaceBase(CSettingsStore *pSettingsStore) : CSettingsUser(pSettingsStore), m_pSettingsStore(pSettingsStore), m_pDasherModel(new CDasherModel(this,this)), m_pLockLabel(NULL) {
 -CDasherInterfaceBase::CDasherInterfaceBase(CSettingsStore *pSettingsStore) : CSettingsUser(pSettingsStore), m_pSettingsStore(pSettingsStore), m_pFramerate(new CFrameRate(this)), m_pLockLabel(NULL) {
++CDasherInterfaceBase::CDasherInterfaceBase(CSettingsStore *pSettingsStore) : CSettingsUser(pSettingsStore), m_pSettingsStore(pSettingsStore), m_pDasherModel(new CDasherModel(this)), m_pFramerate(new CFrameRate(this)), m_pLockLabel(NULL) {
    
    pSettingsStore->Register(this, true);
    
diff --cc Src/DasherCore/DasherInterfaceBase.h
index 96494a7,df67d7a..82c93a5
--- a/Src/DasherCore/DasherInterfaceBase.h
+++ b/Src/DasherCore/DasherInterfaceBase.h
@@@ -423,7 -412,8 +412,9 @@@ protected
  
    CDasherScreen *m_DasherScreen;
  
 +  CDasherModel * const m_pDasherModel;
+   ///Framerate monitor; created in constructor, req'd for DynamicFilter subclasses
+   CFrameRate * const m_pFramerate;
    
   private:
    
diff --cc Src/iPhone/Classes/CDasherInterfaceBridge.mm
index 960d4bb,6a39c51..fdfa06c
--- a/Src/iPhone/Classes/CDasherInterfaceBridge.mm
+++ b/Src/iPhone/Classes/CDasherInterfaceBridge.mm
@@@ -88,17 -80,14 +88,17 @@@ void CDasherInterfaceBridge::CreateModu
                   
    RegisterModule(new CButtonMode(this, this, true, 9, "Menu Mode"));
    RegisterModule(new CButtonMode(this, this, false, 8, "Direct Mode"));
-   RegisterModule(new CTwoButtonDynamicFilter(this, this));
-   RegisterModule(new CTwoPushDynamicFilter(this, this));
+   RegisterModule(new CTwoButtonDynamicFilter(this, this, m_pFramerate));
+   RegisterModule(new CTwoPushDynamicFilter(this, this, m_pFramerate));
    
- 	RegisterModule(new CIPhoneTiltFilter(this, this, 16, m_pMouseDevice));
 -	RegisterModule(m_pTiltFilter =
 -				   new CIPhoneTiltFilter(this, this, m_pFramerate, 16, m_pMouseDevice));
 -	RegisterModule(m_pTouchFilter = 
 -				   new CIPhoneTouchFilter(this, this, m_pFramerate, 17, m_pUndoubledTouch, m_pTiltDevice));
 -	SetDefaultInputMethod(m_pTouchFilter);
++	RegisterModule(new CIPhoneTiltFilter(this, this, m_pFramerate, 16, m_pMouseDevice));
 +  //Touch filter is stylus filter with optional Tilt X....
 +  CIPhoneTouchFilter *pTouchFilter = 
-           new CIPhoneTouchFilter(this, this, 17, m_pUndoubledTouch, m_pTiltDevice);
++          new CIPhoneTouchFilter(this, this, m_pFramerate, 17, m_pUndoubledTouch, m_pTiltDevice);
 +	RegisterModule(pTouchFilter);
 +	SetDefaultInputMethod(pTouchFilter);
 +  
-   RegisterModule(new CIPhoneTwoFingerFilter(this,this,18));
++  RegisterModule(new CIPhoneTwoFingerFilter(this,this, m_pFramerate, 18));
  }
  	
  CDasherInterfaceBridge::~CDasherInterfaceBridge() {
diff --cc Src/iPhone/Classes/EAGLView.mm
index ad116f7,19e7efe..49a80d9
--- a/Src/iPhone/Classes/EAGLView.mm
+++ b/Src/iPhone/Classes/EAGLView.mm
@@@ -132,16 -116,11 +132,16 @@@ bool operator==(CGPoint p,CGPoint q) 
  }
  
  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 -	NSAssert([touches count] == 1, @"Multitouch?!");
 -	lastTouchCoords = [((UITouch *)[touches anyObject]) locationInView:self];
 -	NSAssert(!anyDown,@"Touches began when already in progress - multitouch enabled?!?!\n");
 -	anyDown = YES;
 -	dasherApp.dasherInterface->KeyDown(get_time(), 100);
 +  const unsigned long time(get_time());
 +  for (UITouch *touch in touches) {
 +    const int finger(fingerPosns.empty() ? 0 : fingerPosns.rbegin()->first+1);
 +    NSAssert(allTouches.find(touch)==allTouches.end(),@"Touch beginning already in progress?");
 +    CGPoint p=[touch locationInView:self];
 +    allTouches[touch]=finger;
 +    fingerPosns[finger]=p;
 +    //first finger with button id 100 = left button, then 101 and so on (element already inserted)
-     dasherApp.dasherInterface->KeyDown(time, allTouches.size()+99, true , p.x, p.y);
++    dasherApp.dasherInterface->KeyDown(time, allTouches.size()+99);
 +  }
  }
  
  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
@@@ -154,17 -128,13 +154,17 @@@
  }
  
  - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 -	NSAssert([touches count] == 1, @"Multitouch?!");
 -	NSAssert(anyDown,@"Touches ended when not in progress - multitouch enabled?!?!\n");
 -	lastTouchCoords = [(UITouch *)[touches anyObject] locationInView:self];
 -	dasherApp.dasherInterface->KeyUp(get_time(), 100);
 -  //finished dealing with touch-up event. Finger is now officially off the screen...
 -  lastTouchCoords.x = lastTouchCoords.y = -1;
 -  anyDown = NO;
 +  const unsigned long time(get_time());
 +  for (UITouch *touch in touches) {
 +    map<UITouch*,int>::iterator it = allTouches.find(touch);
 +    NSAssert(it != allTouches.end(), @"Release touch not in progress?");
 +    map<int,CGPoint>::iterator it2=fingerPosns.find(it->second);
 +    NSAssert(it2 != fingerPosns.end(), @"No coordinates for touch?");
 +    CGPoint p=it2->second;
 +    fingerPosns.erase(it2);
 +    allTouches.erase(it);
-     dasherApp.dasherInterface->KeyUp(time, allTouches.size()+100, true, p.x, p.y);
++    dasherApp.dasherInterface->KeyUp(time, allTouches.size()+100);
 +  }
  }
  
  - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
diff --cc Src/iPhone/Classes/IPhoneFilters.h
index 1273a3f,34b269d..6ceaf5a
--- a/Src/iPhone/Classes/IPhoneFilters.h
+++ b/Src/iPhone/Classes/IPhoneFilters.h
@@@ -21,17 -33,13 +21,17 @@@ extern NSString *DOUBLE_TOUCH_X
  
  #define TILT_FILTER "IPhone Tilt Filter"
  #define TOUCH_FILTER "IPhone Touch Filter"
 +#define TWO_FINGER_FILTER "Two-finger filter"
 +
 +namespace Dasher {
 +
  class CIPhoneTiltFilter : public COneDimensionalFilter, private IPhonePrefsObserver {
  public:
- 	CIPhoneTiltFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, ModuleID_t iID, CDasherInput *pTouch);
+ 	CIPhoneTiltFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, CFrameRate *pFramerate, ModuleID_t iID, CDasherInput *pTouch);
    ///override to enable hold-to-go
- 	virtual void KeyDown(int iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel, CUserLogBase *pUserLog);
+ 	virtual void KeyDown(unsigned long iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel, CUserLogBase *pUserLog);
    ///override to enable hold-to-go
- 	virtual void KeyUp(int iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel);
+ 	virtual void KeyUp(unsigned long iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel);
  
    ///respond to BP_DASHER_PAUSED by engaging wakelock (if !hold-to-go)
    virtual void HandleEvent(int iParameter);
@@@ -65,13 -73,4 +65,13 @@@ private
    bool bUseTiltX;
  };
  
 +class CIPhoneTwoFingerFilter : public CDefaultFilter {
 +public:
-   CIPhoneTwoFingerFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, ModuleID_t iID);
-   virtual void KeyUp(int iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel);
-   virtual void KeyDown(int iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel, CUserLogBase *pUserLog);
++  CIPhoneTwoFingerFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, CFrameRate *pFramerate, ModuleID_t iID);
++  virtual void KeyUp(unsigned long iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel);
++  virtual void KeyDown(unsigned long iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel, CUserLogBase *pUserLog);
 +  virtual bool DecorateView(CDasherView *pView, CDasherInput *pInput);
 +};
 +
 +}
  /// @}
diff --cc Src/iPhone/Classes/IPhoneFilters.mm
index bfafd71,4a511f9..8347fad
--- a/Src/iPhone/Classes/IPhoneFilters.mm
+++ b/Src/iPhone/Classes/IPhoneFilters.mm
@@@ -19,12 -19,53 +19,12 @@@ NSString *HOLD_TO_GO=@"HoldToGo"
  NSString *TILT_1D=@"Tilt1D";
  NSString * TILT_USE_TOUCH_X=@"UseTouchX";
  NSString * TOUCH_USE_TILT_X=@"UseTiltX";
 +NSString *DOUBLE_TOUCH_X=@"DoubleXCoords";
  
 - interface NSUserDefaultsObserver : NSObject {
 -  IPhonePrefsObserver *po;
 -}
 --(id)initForPrefsObserver:(IPhonePrefsObserver *)po;
 --(void)stopObserving;
 --(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
 - end
 -
 - implementation NSUserDefaultsObserver
 -
 --(id)initForPrefsObserver:(IPhonePrefsObserver *)_po {
 -  if (self = [super init]) {
 -    self->po = _po;
 -  }
 -  return self;
 -}
 -
 --(void)stopObserving {po=nil; [self autorelease];}
 -
 --(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
 -  NSAssert(object == [NSUserDefaults standardUserDefaults],@"Only observing user defaults?");
 -  if (po) po->iPhonePrefsChanged(keyPath);
 -  else [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:keyPath];
 -}
 - end
 -
 -void IPhonePrefsObserver::ObserveKeys(NSString *key,...) {
 -  va_list args;
 -  va_start(args, key);
 -  
 -  obsvr = [[NSUserDefaultsObserver alloc] initForPrefsObserver:this];
 -  while (key) {
 -    [[NSUserDefaults standardUserDefaults] addObserver:obsvr forKeyPath:key options:0 context:nil];
 -    iPhonePrefsChanged(key);
 -    key=va_arg(args, NSString *);
 -  }
 -  va_end(args);
 -}
 -
 -IPhonePrefsObserver::~IPhonePrefsObserver() {
 -  [obsvr stopObserving];
 -  [obsvr release];
 -}
 +using namespace Dasher;
  
- CIPhoneTiltFilter::CIPhoneTiltFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, ModuleID_t iID, CDasherInput *pTouch)
- : COneDimensionalFilter(pCreator, pInterface, iID, TILT_FILTER), m_pTouch(pTouch) {
+ CIPhoneTiltFilter::CIPhoneTiltFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, CFrameRate *pFramerate, ModuleID_t iID, CDasherInput *pTouch)
+ : COneDimensionalFilter(pCreator, pInterface, pFramerate, iID, TILT_FILTER), m_pTouch(pTouch) {
    ObserveKeys(HOLD_TO_GO, TILT_USE_TOUCH_X, TILT_1D, @"CircleStart", nil);
  };
  			
@@@ -130,36 -171,4 +130,36 @@@ void CIPhoneTouchFilter::ApplyTransform
      m_pTilt->GetDasherCoords(iDasherX,temp,pView);
    }
    CStylusFilter::ApplyTransform(iDasherX, iDasherY, pView);
 +}
 +
- CIPhoneTwoFingerFilter::CIPhoneTwoFingerFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, ModuleID_t iID)
- : CDefaultFilter(pCreator, pInterface, iID, TWO_FINGER_FILTER) {
++CIPhoneTwoFingerFilter::CIPhoneTwoFingerFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, CFrameRate *pFramerate, ModuleID_t iID)
++: CDefaultFilter(pCreator, pInterface, pFramerate, iID, TWO_FINGER_FILTER) {
 +}
 +
- void CIPhoneTwoFingerFilter::KeyDown(int iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel, CUserLogBase *pUserLog) {
-   if (iId==101) m_pInterface->Unpause(iTime);
++void CIPhoneTwoFingerFilter::KeyDown(unsigned long iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel, CUserLogBase *pUserLog) {
++  if (iId==101) Unpause(iTime);
 +  else if (iId!=100) CDefaultFilter::KeyDown(iTime, iId, pView, pInput, pModel, pUserLog);
 +}
 +
- void CIPhoneTwoFingerFilter::KeyUp(int iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel) {
++void CIPhoneTwoFingerFilter::KeyUp(unsigned long iTime, int iId, CDasherView *pView, CDasherInput *pInput, CDasherModel *pModel) {
 +  if (iId==101) m_pInterface->Stop();
 +  else if (iId!=100) CDefaultFilter::KeyUp(iTime, iId, pView, pInput, pModel);
 +}
 +
 +bool CIPhoneTwoFingerFilter::DecorateView(CDasherView *pView, CDasherInput *pInput) {
 +  if (GetBoolParameter(BP_DRAW_MOUSE_LINE)) {
 +    myint x[2], y[2];
 +    x[0] = m_iLastX; x[1] = 0;
 +    y[0] = m_iLastY;
 +    for (y[1] = m_iLastY - m_iLastX; ;) {
 +      if (GetBoolParameter(BP_CURVE_MOUSE_LINE))
 +        pView->DasherSpaceLine(x[0], y[0], x[1], y[1], GetLongParameter(LP_LINE_WIDTH), 1);
 +      else
 +        pView->DasherPolyline(x, y, 2, GetLongParameter(LP_LINE_WIDTH), 1);
 +      if (y[1] == m_iLastY + m_iLastX) break;
 +      y[1] = m_iLastY + m_iLastX;
 +    }
 +    return true;
 +  }
 +  return false;
  }
diff --cc Src/iPhone/Dasher.xcodeproj/project.pbxproj
index 1453409,d4a8840..6af3c32
--- a/Src/iPhone/Dasher.xcodeproj/project.pbxproj
+++ b/Src/iPhone/Dasher.xcodeproj/project.pbxproj
@@@ -251,9 -250,10 +250,10 @@@
  		3378A23F1335425300A96C5D /* AbstractXMLParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3378A23D1335425200A96C5D /* AbstractXMLParser.cpp */; };
  		3378A267133543B800A96C5D /* control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 3378A266133543B800A96C5D /* control.xml */; };
  		337ECC1B10DD5E0700D0C6A5 /* ExpansionPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 337ECC1910DD5E0700D0C6A5 /* ExpansionPolicy.cpp */; };
 +		339E340E13C6206E007A2BCC /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 339E340D13C6206E007A2BCC /* Default.png */; };
  		339F8A330FF5088000282847 /* CalibrationController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 339F8A320FF5088000282847 /* CalibrationController.mm */; };
  		33B3430813A8A927009AE0D5 /* DashIntfScreenMsgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33B3430613A8A927009AE0D5 /* DashIntfScreenMsgs.cpp */; };
+ 		33B6825013CA4CC300F0A952 /* DynamicButtons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33B6824E13CA4CC200F0A952 /* DynamicButtons.cpp */; };
 -		33C71AF20FF7B51700A20992 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 33C71AF10FF7B51700A20992 /* Default.png */; };
  		33CBB397101F422200510BF9 /* PPMPYLanguageModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33CBB395101F422200510BF9 /* PPMPYLanguageModel.cpp */; };
  		33CBB4CD101F9E5F00510BF9 /* training_czechC_CS.txt in Resources */ = {isa = PBXBuildFile; fileRef = 33CBB4C7101F9E5F00510BF9 /* training_czechC_CS.txt */; };
  		33CBB4CE101F9E5F00510BF9 /* training_englishLC_GB.txt in Resources */ = {isa = PBXBuildFile; fileRef = 33CBB4C8101F9E5F00510BF9 /* training_englishLC_GB.txt */; };
@@@ -704,6 -701,9 +702,8 @@@
  		33B342F313A8A8B2009AE0D5 /* Messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Messages.h; sourceTree = "<group>"; };
  		33B3430613A8A927009AE0D5 /* DashIntfScreenMsgs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DashIntfScreenMsgs.cpp; sourceTree = "<group>"; };
  		33B3430713A8A927009AE0D5 /* DashIntfScreenMsgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DashIntfScreenMsgs.h; sourceTree = "<group>"; };
+ 		33B6824E13CA4CC200F0A952 /* DynamicButtons.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicButtons.cpp; sourceTree = "<group>"; };
+ 		33B6824F13CA4CC200F0A952 /* DynamicButtons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicButtons.h; sourceTree = "<group>"; };
 -		33C71AF10FF7B51700A20992 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
  		33CBB395101F422200510BF9 /* PPMPYLanguageModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PPMPYLanguageModel.cpp; sourceTree = "<group>"; };
  		33CBB396101F422200510BF9 /* PPMPYLanguageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PPMPYLanguageModel.h; sourceTree = "<group>"; };
  		33CBB4C7101F9E5F00510BF9 /* training_czechC_CS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = training_czechC_CS.txt; sourceTree = "<group>"; };



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]