[dasher] Rm LP_REAL_ORIENTATION, make property of DasherView.



commit 0622725c268db6179b230aa32271082555f3ed9d
Author: Alan Lawrence <acl33 inf phy cam ac uk>
Date:   Fri Jun 24 13:45:52 2011 +0100

    Rm LP_REAL_ORIENTATION, make property of DasherView.
    
    Continuing the quest to remove so-called user preferences, that really aren't
    
    Change Gtk2 Preferences (default/custom)+(LR/RL/TB/BT) to single group
      (default/Always-LR/RL/TB/BT), and tidy code to use less gtk_*_get_name.

 Data/GUI/dasher.preferences.ui         |  121 ++++++++-------------
 Src/DasherCore/CircleStartHandler.cpp  |    5 +-
 Src/DasherCore/DasherInterfaceBase.cpp |   17 +++-
 Src/DasherCore/DasherInterfaceBase.h   |    4 +
 Src/DasherCore/DasherView.cpp          |    3 +-
 Src/DasherCore/DasherView.h            |    6 +-
 Src/DasherCore/DasherViewSquare.cpp    |   34 +++----
 Src/DasherCore/DasherViewSquare.h      |    5 +-
 Src/DasherCore/NodeCreationManager.cpp |    5 -
 Src/DasherCore/Parameters.cpp          |    1 -
 Src/DasherCore/Parameters.h            |    2 +-
 Src/Gtk2/Preferences.cpp               |  181 +++++---------------------------
 12 files changed, 121 insertions(+), 263 deletions(-)
---
diff --git a/Data/GUI/dasher.preferences.ui b/Data/GUI/dasher.preferences.ui
index dea6b2a..d8775a7 100644
--- a/Data/GUI/dasher.preferences.ui
+++ b/Data/GUI/dasher.preferences.ui
@@ -342,11 +342,11 @@ your writing speed.</property>
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkRadioButton" id="radiobutton12">
+                                      <object class="GtkRadioButton" id="radiobutton2">
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
                                         <property name="border_width">2</property>
-                                        <property name="label" translatable="yes">Custom</property>
+                                        <property name="label" translatable="yes" comments="This means that you always want to write left-to-right regardless of the normal direction for the alphabet you are using">Always Left-to-Right</property>
                                         <property name="use_underline">True</property>
                                         <property name="draw_indicator">True</property>
                                         <property name="group">radiobutton1</property>
@@ -359,85 +359,56 @@ your writing speed.</property>
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkAlignment" id="alignment19">
+                                      <object class="GtkRadioButton" id="radiobutton3">
                                         <property name="visible">True</property>
-                                        <property name="left_padding">16</property>
-                                        <child>
-                                          <object class="GtkVBox" id="vbox27">
-                                            <property name="visible">True</property>
-                                            <child>
-                                              <object class="GtkRadioButton" id="radiobutton2">
-                                                <property name="visible">True</property>
-                                                <property name="can_focus">True</property>
-                                                <property name="border_width">2</property>
-                                                <property name="label" translatable="yes">Left to Right</property>
-                                                <property name="use_underline">True</property>
-                                                <property name="draw_indicator">True</property>
-                                                <signal handler="orientation" name="clicked"/>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                              </packing>
-                                            </child>
-                                            <child>
-                                              <object class="GtkRadioButton" id="radiobutton3">
-                                                <property name="visible">True</property>
-                                                <property name="can_focus">True</property>
-                                                <property name="border_width">2</property>
-                                                <property name="label" translatable="yes">Right to Left</property>
-                                                <property name="use_underline">True</property>
-                                                <property name="draw_indicator">True</property>
-                                                <property name="group">radiobutton2</property>
-                                                <signal handler="orientation" name="clicked"/>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">1</property>
-                                              </packing>
-                                            </child>
-                                            <child>
-                                              <object class="GtkRadioButton" id="radiobutton4">
-                                                <property name="visible">True</property>
-                                                <property name="can_focus">True</property>
-                                                <property name="border_width">2</property>
-                                                <property name="label" translatable="yes">Top to Bottom</property>
-                                                <property name="use_underline">True</property>
-                                                <property name="draw_indicator">True</property>
-                                                <property name="group">radiobutton2</property>
-                                                <signal handler="orientation" name="clicked"/>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">2</property>
-                                              </packing>
-                                            </child>
-                                            <child>
-                                              <object class="GtkRadioButton" id="radiobutton5">
-                                                <property name="visible">True</property>
-                                                <property name="can_focus">True</property>
-                                                <property name="border_width">2</property>
-                                                <property name="label" translatable="yes">Bottom to Top</property>
-                                                <property name="use_underline">True</property>
-                                                <property name="draw_indicator">True</property>
-                                                <property name="group">radiobutton2</property>
-                                                <signal handler="orientation" name="clicked"/>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">3</property>
-                                              </packing>
-                                            </child>
-                                          </object>
-                                        </child>
+                                        <property name="can_focus">True</property>
+                                        <property name="border_width">2</property>
+                                        <property name="label" translatable="yes">Always Right-to-Left</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="draw_indicator">True</property>
+                                        <property name="group">radiobutton1</property>
+                                        <signal handler="orientation" name="clicked"/>
                                       </object>
                                       <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
                                         <property name="position">2</property>
                                       </packing>
                                     </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="radiobutton4">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="border_width">2</property>
+                                        <property name="label" translatable="yes">Always Top-to-Bottom</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="draw_indicator">True</property>
+                                        <property name="group">radiobutton1</property>
+                                        <signal handler="orientation" name="clicked"/>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">3</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="radiobutton5">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="border_width">2</property>
+                                        <property name="label" translatable="yes">Always Bottom-to-Top</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="draw_indicator">True</property>
+                                        <property name="group">radiobutton1</property>
+                                        <signal handler="orientation" name="clicked"/>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">4</property>
+                                      </packing>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
diff --git a/Src/DasherCore/CircleStartHandler.cpp b/Src/DasherCore/CircleStartHandler.cpp
index d5ed313..fc27cf7 100644
--- a/Src/DasherCore/CircleStartHandler.cpp
+++ b/Src/DasherCore/CircleStartHandler.cpp
@@ -47,9 +47,9 @@ void CCircleStartHandler::ComputeScreenLoc(CDasherView *pView) {
   screenint iEdgeX, iEdgeY;
   pView->Dasher2Screen(GetLongParameter(LP_OX), GetLongParameter(LP_OY) + (GetLongParameter(LP_MAX_Y)*GetLongParameter(LP_CIRCLE_PERCENT))/100, iEdgeX, iEdgeY);
 
-  int iDirection = GetLongParameter(LP_REAL_ORIENTATION);
+  const Opts::ScreenOrientations iDirection(pView->GetOrientation());
 
-  if((iDirection == 2) || (iDirection == 3)) {
+  if((iDirection == Opts::TopToBottom) || (iDirection == Opts::BottomToTop)) {
     m_iScreenRadius = iEdgeX - m_screenCircleCenter.x;
   }
   else {
@@ -108,7 +108,6 @@ void CCircleStartHandler::Timer(int iTime, dasherint mouseX, dasherint mouseY,CD
 
 void CCircleStartHandler::HandleEvent(int iParameter) {
   switch (iParameter) {
-    case LP_REAL_ORIENTATION:
     case LP_CIRCLE_PERCENT:
       //recompute geometry.
       m_iScreenRadius = -1;
diff --git a/Src/DasherCore/DasherInterfaceBase.cpp b/Src/DasherCore/DasherInterfaceBase.cpp
index 9061b7d..3cf0b2e 100644
--- a/Src/DasherCore/DasherInterfaceBase.cpp
+++ b/Src/DasherCore/DasherInterfaceBase.cpp
@@ -254,7 +254,8 @@ void CDasherInterfaceBase::HandleEvent(int iParameter) {
   case BP_DRAW_MOUSE_LINE:
     ScheduleRedraw();
     break;
-  case LP_REAL_ORIENTATION:
+  case LP_ORIENTATION:
+    m_pDasherView->SetOrientation(ComputeOrientation());
     ScheduleRedraw();
     break;
   case SP_ALPHABET_ID:
@@ -631,12 +632,22 @@ void CDasherInterfaceBase::ChangeAlphabet() {
   // Lock Dasher to prevent changes from happening while we're training.
 
   CreateNCManager();
-
+  if (m_pDasherView) m_pDasherView->SetOrientation(ComputeOrientation());
   // Apply options from alphabet
 
   //}
 }
 
+Opts::ScreenOrientations CDasherInterfaceBase::ComputeOrientation() {
+  Opts::ScreenOrientations pref(Opts::ScreenOrientations(GetLongParameter(LP_ORIENTATION)));
+  if (pref!=Opts::Alphabet) return pref;
+  if (m_pNCManager) return m_pNCManager->GetAlphabet()->GetOrientation();
+  //haven't created the NCManager yet, so not yet reached Realize, but must
+  // have been given Screen (to make View). Use default LR for now, as when
+  // we ChangeAlphabet, we'll update the view.
+  return Opts::LeftToRight;
+}
+
 void CDasherInterfaceBase::ChangeColours() {
   if(!m_ColourIO || !m_DasherScreen)
     return;
@@ -679,7 +690,7 @@ void CDasherInterfaceBase::ChangeView() {
   // TODO: Actually respond to LP_VIEW_ID parameter (although there is only one view at the moment)
 
   if(m_DasherScreen != 0 /*&& m_pDasherModel != 0*/) {
-    CDasherView *pNewView = new CDasherViewSquare(this, m_DasherScreen);
+    CDasherView *pNewView = new CDasherViewSquare(this, m_DasherScreen, ComputeOrientation());
     //the previous sends an event to all listeners registered with it, but there aren't any atm!
     // so send an event to tell them of the new view object _and_ get them to recompute coords:  
     if (m_pDasherView) m_pDasherView->TransferObserversTo(pNewView);
diff --git a/Src/DasherCore/DasherInterfaceBase.h b/Src/DasherCore/DasherInterfaceBase.h
index 8c89da0..40e7157 100644
--- a/Src/DasherCore/DasherInterfaceBase.h
+++ b/Src/DasherCore/DasherInterfaceBase.h
@@ -494,6 +494,10 @@ protected:
   void ChangeColours();
   void ChangeView();
 
+  //Compute the screen orientation to use - i.e. combining the user's
+  // preference with the alphabet.
+  Opts::ScreenOrientations ComputeOrientation();
+
   void SetupActionButtons();
   void DestroyActionButtons();
   void PositionActionButtons();
diff --git a/Src/DasherCore/DasherView.cpp b/Src/DasherCore/DasherView.cpp
index 9f767aa..9d582e6 100644
--- a/Src/DasherCore/DasherView.cpp
+++ b/Src/DasherCore/DasherView.cpp
@@ -38,7 +38,8 @@ static char THIS_FILE[] = __FILE__;
 
 /////////////////////////////////////////////////////////////////////////////
 
-CDasherView::CDasherView(CDasherScreen *DasherScreen) : m_pScreen(DasherScreen) {
+CDasherView::CDasherView(CDasherScreen *DasherScreen, Opts::ScreenOrientations orient)
+ : m_pScreen(DasherScreen), m_Orientation(orient) {
 }
 
 /////////////////////////////////////////////////////////////////////////////
diff --git a/Src/DasherCore/DasherView.h b/Src/DasherCore/DasherView.h
index 1af8f08..dbcd8a2 100644
--- a/Src/DasherCore/DasherView.h
+++ b/Src/DasherCore/DasherView.h
@@ -54,11 +54,14 @@ public:
   /// Constructor
   /// 
   /// \param DasherScreen Pointer to the CDasherScreen object used to do rendering
-  CDasherView(CDasherScreen * DasherScreen);
+  CDasherView(CDasherScreen * DasherScreen, Opts::ScreenOrientations orient);
 
   virtual ~CDasherView() {
   }
 
+  virtual void SetOrientation(Opts::ScreenOrientations newOrient) {m_Orientation=newOrient;}
+  Opts::ScreenOrientations GetOrientation() {return m_Orientation;}
+
   /// 
   /// @name Coordinate system conversion
   /// Convert between screen and Dasher coordinates
@@ -191,6 +194,7 @@ protected:
   int m_iRenderCount;
 
 private:
+  Opts::ScreenOrientations m_Orientation;
   CDasherScreen *m_pScreen;    // provides the graphics (text, lines, rectangles):
 };
 /// @}
diff --git a/Src/DasherCore/DasherViewSquare.cpp b/Src/DasherCore/DasherViewSquare.cpp
index d407fac..285575b 100644
--- a/Src/DasherCore/DasherViewSquare.cpp
+++ b/Src/DasherCore/DasherViewSquare.cpp
@@ -56,8 +56,8 @@ static char THIS_FILE[] = __FILE__;
 
 // FIXME - duplicated 'mode' code throught - needs to be fixed (actually, mode related stuff, Input2Dasher etc should probably be at least partially in some other class)
 
-CDasherViewSquare::CDasherViewSquare(CSettingsUser *pCreateFrom, CDasherScreen *DasherScreen)
-: CDasherView(DasherScreen), CSettingsUserObserver(pCreateFrom), m_Y1(4), m_Y2(0.95 * GetLongParameter(LP_MAX_Y)), m_Y3(0.05 * GetLongParameter((LP_MAX_Y))), m_bVisibleRegionValid(false) {
+CDasherViewSquare::CDasherViewSquare(CSettingsUser *pCreateFrom, CDasherScreen *DasherScreen, Opts::ScreenOrientations orient)
+: CDasherView(DasherScreen,orient), CSettingsUserObserver(pCreateFrom), m_Y1(4), m_Y2(0.95 * GetLongParameter(LP_MAX_Y)), m_Y3(0.05 * GetLongParameter((LP_MAX_Y))), m_bVisibleRegionValid(false) {
 
   //Note, nonlinearity parameters set in SetScaleFactor
   ScreenResized(DasherScreen);
@@ -65,9 +65,15 @@ CDasherViewSquare::CDasherViewSquare(CSettingsUser *pCreateFrom, CDasherScreen *
 
 CDasherViewSquare::~CDasherViewSquare() {}
 
+void CDasherViewSquare::SetOrientation(Opts::ScreenOrientations newOrient) {
+  if (newOrient == GetOrientation()) return;
+  CDasherView::SetOrientation(newOrient);
+  m_bVisibleRegionValid=false;
+  SetScaleFactor();
+}
+
 void CDasherViewSquare::HandleEvent(int iParameter) {
   switch (iParameter) {
-    case LP_REAL_ORIENTATION:
     case LP_MARGIN_WIDTH:
     case BP_NONLINEAR_Y:
     case LP_NONLINEAR_X:
@@ -169,15 +175,13 @@ CDasherViewSquare::CTextString *CDasherViewSquare::DasherDrawText(myint iDasherM
 
 void CDasherViewSquare::DoDelayedText(CTextString *pText) {
 
-  Dasher::Opts::ScreenOrientations orient = Dasher::Opts::ScreenOrientations(GetLongParameter(LP_REAL_ORIENTATION));
-
   //note that it'd be better to compute old-style font sizes here, or even after shunting
   // across according to the aiMax array, but this needs Dasher co-ordinates, which were
   // more easily available at CTextString creation time. If it really doesn't look as good,
   // can put in extra calls to Screen2Dasher....
   screenint x(pText->m_ix), y(pText->m_iy);
   pair<screenint,screenint> textDims=Screen()->TextSize(pText->m_pLabel, pText->m_iSize);
-  switch (orient) {
+  switch (GetOrientation()) {
     case Dasher::Opts::LeftToRight: {
       screenint iRight = x + textDims.first;
       if (iRight < Screen()->GetWidth()) {
@@ -788,9 +792,7 @@ void CDasherViewSquare::Screen2Dasher(screenint iInputX, screenint iInputY, myin
   screenint iScreenWidth = Screen()->GetWidth();
   screenint iScreenHeight = Screen()->GetHeight();
 
-  int eOrientation(GetLongParameter(LP_REAL_ORIENTATION));
-
-  switch(eOrientation) {
+  switch(GetOrientation()) {
   case Dasher::Opts::LeftToRight:
     iDasherX = ( iScreenWidth - iInputX ) * m_iScalingFactor / iScaleFactorX;
     iDasherY = iDasherHeight / 2 + ( iInputY - iScreenHeight / 2 ) * m_iScalingFactor / iScaleFactorY;
@@ -824,8 +826,7 @@ void CDasherViewSquare::SetScaleFactor( void )
   // note previous value = 1/0.2, i.e. a value of LP_NONLINEAR_X =~= 4.8
   m_dXlogCoeff = exp(GetLongParameter(LP_NONLINEAR_X)/3.0);
 
-  const Dasher::Opts::ScreenOrientations eOrientation(Dasher::Opts::ScreenOrientations(GetLongParameter(LP_REAL_ORIENTATION)));
-  const bool bHoriz(eOrientation == Dasher::Opts::LeftToRight || eOrientation == Dasher::Opts::RightToLeft);
+  const bool bHoriz(GetOrientation() == Dasher::Opts::LeftToRight || GetOrientation() == Dasher::Opts::RightToLeft);
   const screenint iScreenWidth(Screen()->GetWidth()), iScreenHeight(Screen()->GetHeight());
   const double dPixelsX(bHoriz ? iScreenWidth : iScreenHeight), dPixelsY(bHoriz ? iScreenHeight : iScreenWidth);
 
@@ -957,13 +958,11 @@ void CDasherViewSquare::Dasher2Screen(myint iDasherX, myint iDasherY, screenint
   screenint iScreenWidth = Screen()->GetWidth();
   screenint iScreenHeight = Screen()->GetHeight();
 
-  int eOrientation( GetLongParameter(LP_REAL_ORIENTATION) );
-
   // Note that integer division is rounded *away* from zero here to
   // ensure that this really is the inverse of the map the other way
   // around.
 
-  switch( eOrientation ) {
+  switch( GetOrientation() ) {
   case Dasher::Opts::LeftToRight:
     iScreenX = screenint(iScreenWidth -
 			 CustomIDiv((( iDasherX ) * iScaleFactorX), m_iScalingFactor));
@@ -1036,8 +1035,7 @@ void CDasherViewSquare::DasherLine2Screen(myint x1, myint y1, myint x2, myint y2
 
         //since we know both endpoints are in the same section of the screen wrt. Y nonlinearity,
         //the midpoint along the DasherY axis of both lines should be the same.
-        const Dasher::Opts::ScreenOrientations orient(Dasher::Opts::ScreenOrientations(GetLongParameter(LP_REAL_ORIENTATION)));
-        if (orient==Dasher::Opts::LeftToRight || orient==Dasher::Opts::RightToLeft) {
+        if (GetOrientation()==Dasher::Opts::LeftToRight || GetOrientation()==Dasher::Opts::RightToLeft) {
           DASHER_ASSERT(abs(pDasherMid.y - pScreenMid.y)<=1);//allow for rounding error
           if (abs(pDasherMid.x - pScreenMid.x)<=1) break; //call a straight line accurate enough
         } else {
@@ -1072,9 +1070,7 @@ void CDasherViewSquare::VisibleRegion( myint &iDasherMinX, myint &iDasherMinY, m
 
   if(!m_bVisibleRegionValid) {
 
-    int eOrientation( GetLongParameter(LP_REAL_ORIENTATION) );
-
-    switch( eOrientation ) {
+    switch( GetOrientation() ) {
     case Dasher::Opts::LeftToRight:
       Screen2Dasher(Screen()->GetWidth(),0,m_iDasherMinX,m_iDasherMinY);
       Screen2Dasher(0,Screen()->GetHeight(),m_iDasherMaxX,m_iDasherMaxY);
diff --git a/Src/DasherCore/DasherViewSquare.h b/Src/DasherCore/DasherViewSquare.h
index 5a5b0de..5414221 100644
--- a/Src/DasherCore/DasherViewSquare.h
+++ b/Src/DasherCore/DasherViewSquare.h
@@ -40,7 +40,7 @@ public:
   /// passed as parameter to the drawing functions, and data structure
   /// can be extracted from the model and passed too.
 
-  CDasherViewSquare(CSettingsUser *pCreateFrom, CDasherScreen *DasherScreen);
+  CDasherViewSquare(CSettingsUser *pCreateFrom, CDasherScreen *DasherScreen, Opts::ScreenOrientations orient);
   ~CDasherViewSquare();
 
   ///
@@ -49,6 +49,9 @@ public:
 
   virtual void HandleEvent(int iParameter);
 
+  //Override to additionally reset scale factors etc.
+  void SetOrientation(Opts::ScreenOrientations newOrient);
+
   /// Resets scale factors etc. that depend on the screen size, to be recomputed when next needed.
   void ScreenResized(CDasherScreen * NewScreen);
 
diff --git a/Src/DasherCore/NodeCreationManager.cpp b/Src/DasherCore/NodeCreationManager.cpp
index cad445c..258fd47 100644
--- a/Src/DasherCore/NodeCreationManager.cpp
+++ b/Src/DasherCore/NodeCreationManager.cpp
@@ -153,11 +153,6 @@ void CNodeCreationManager::HandleEvent(int iParameter) {
       m_iAlphNorm = iNorm-iControlSpace;
       break;
     }
-    case LP_ORIENTATION: {
-      const long iOverride(GetLongParameter(LP_ORIENTATION));
-      SetLongParameter(LP_REAL_ORIENTATION,
-                       iOverride == Dasher::Opts::AlphabetDefault ? GetAlphabet()->GetOrientation() : iOverride);
-    }
   }
 }
 
diff --git a/Src/DasherCore/Parameters.cpp b/Src/DasherCore/Parameters.cpp
index 50fc272..9678b02 100644
--- a/Src/DasherCore/Parameters.cpp
+++ b/Src/DasherCore/Parameters.cpp
@@ -66,7 +66,6 @@ const bp_table boolparamtable[] = {
 
 const lp_table longparamtable[] = {
   {LP_ORIENTATION, "ScreenOrientation", PERS, -2, "Screen Orientation"},
-  {LP_REAL_ORIENTATION, "RealOrientation", !PERS, 0, "Actual screen orientation (allowing for alphabet default)"},
   {LP_MAX_BITRATE, "MaxBitRateTimes100", PERS, 80, "Max Bit Rate Times 100"},
   {LP_FRAMERATE, "FrameRate", PERS, 3200, "Decaying average of last known frame rates, *100"},
   {LP_VIEW_ID, "ViewID", PERS, 1, "ViewID"},
diff --git a/Src/DasherCore/Parameters.h b/Src/DasherCore/Parameters.h
index bbad1a4..e3d1de1 100644
--- a/Src/DasherCore/Parameters.h
+++ b/Src/DasherCore/Parameters.h
@@ -49,7 +49,7 @@ enum {
 };
 
 enum { 
-  LP_ORIENTATION = END_OF_BPS, LP_REAL_ORIENTATION, LP_MAX_BITRATE, LP_FRAMERATE,
+  LP_ORIENTATION = END_OF_BPS, LP_MAX_BITRATE, LP_FRAMERATE,
   LP_VIEW_ID, LP_LANGUAGE_MODEL_ID, LP_DASHER_FONTSIZE, LP_MESSAGE_FONTSIZE, LP_SHAPE_TYPE,
   LP_UNIFORM, LP_YSCALE, LP_MOUSEPOSDIST, LP_STOP_IDLETIME, LP_PY_PROB_SORT_THRES, LP_MESSAGE_TIME,
   LP_LM_MAX_ORDER, LP_LM_EXCLUSION,
diff --git a/Src/Gtk2/Preferences.cpp b/Src/Gtk2/Preferences.cpp
index c3cae4b..64eb5de 100644
--- a/Src/Gtk2/Preferences.cpp
+++ b/Src/Gtk2/Preferences.cpp
@@ -103,6 +103,7 @@ struct _DasherPreferencesDialoguePrivate {
 
   // TODO: check all of these are really needed
   GtkListStore *pListStore;
+  GtkToggleButton *pAlphOrient;
   GtkToggleButton *pLRButton;
   GtkToggleButton *pRLButton;
   GtkToggleButton *pTBButton;
@@ -155,7 +156,6 @@ SpecialControl sSpecialControlTable[] = {
   {BP_MOUSEPOS_MODE, dasher_preferences_dialogue_populate_special_mouse_start, true},
   {BP_CIRCLE_START, dasher_preferences_dialogue_populate_special_mouse_start, false},
   {LP_ORIENTATION, dasher_preferences_dialogue_populate_special_orientation, true},
-  {LP_REAL_ORIENTATION, dasher_preferences_dialogue_populate_special_orientation, false},
   {APP_LP_STYLE, dasher_preferences_dialogue_populate_special_appstyle, true},
   {LP_LINE_WIDTH, dasher_preferences_dialogue_populate_special_linewidth, true},
   {LP_LANGUAGE_MODEL_ID, dasher_preferences_dialogue_populate_special_lm, true},
@@ -528,93 +528,34 @@ static void dasher_preferences_dialogue_populate_special_mouse_start(DasherPrefe
 static void dasher_preferences_dialogue_populate_special_orientation(DasherPreferencesDialogue *pSelf) {
   DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
 
+  pPrivate->pAlphOrient = GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton1"));
   pPrivate->pLRButton = GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton2"));
   pPrivate->pRLButton = GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton3"));
   pPrivate->pTBButton = GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton4"));
   pPrivate->pBTButton = GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton5"));
-
+  GtkToggleButton *pButton;
   switch (dasher_app_settings_get_long(pPrivate->pAppSettings, LP_ORIENTATION)) {
   case Dasher::Opts::Alphabet:
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton1"))) != TRUE)
-      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton1")), TRUE);
-    
-    pPrivate->bIgnoreSignals = true;
-
-    switch (dasher_app_settings_get_long(pPrivate->pAppSettings, LP_REAL_ORIENTATION)) {
-    case Dasher::Opts::LeftToRight:
-      if(gtk_toggle_button_get_active(pPrivate->pLRButton) != TRUE)
-         gtk_toggle_button_set_active(pPrivate->pLRButton, TRUE);
-      break;
-    case Dasher::Opts::RightToLeft:
-      if(gtk_toggle_button_get_active(pPrivate->pRLButton) != TRUE)
-         gtk_toggle_button_set_active(pPrivate->pRLButton, TRUE);
-      break;
-    case Dasher::Opts::TopToBottom:
-      if(gtk_toggle_button_get_active(pPrivate->pTBButton) != TRUE)
-         gtk_toggle_button_set_active(pPrivate->pTBButton, TRUE);
-      break;
-    case Dasher::Opts::BottomToTop:
-      if(gtk_toggle_button_get_active(pPrivate->pTBButton) != TRUE)
-         gtk_toggle_button_set_active(pPrivate->pTBButton, TRUE);
-      break;
-    }
-
-    pPrivate->bIgnoreSignals = false;
-
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pLRButton), FALSE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pRLButton), FALSE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pTBButton), FALSE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pBTButton), FALSE);
-    break;
+    pButton = pPrivate->pAlphOrient; break;
 
   case Dasher::Opts::LeftToRight:
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton2"))) != TRUE)
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton2")), TRUE);
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12"))) != TRUE)
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12")), TRUE);
-
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pLRButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pRLButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pTBButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pBTButton), TRUE);
-    break;
+    pButton = pPrivate->pLRButton; break;
 
   case Dasher::Opts::RightToLeft:
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton3"))) != TRUE)
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton3")), TRUE);
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12"))) != TRUE)
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12")), TRUE);
-
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pLRButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pRLButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pTBButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pBTButton), TRUE);
-    break;
+    pButton = pPrivate->pRLButton; break;
 
   case Dasher::Opts::TopToBottom:
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton4"))) != TRUE)
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton4")), TRUE);  
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12"))) != TRUE)
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12")), TRUE); 
-
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pLRButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pRLButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pTBButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pBTButton), TRUE);
-    break;
+    pButton = pPrivate->pTBButton; break;
 
   case Dasher::Opts::BottomToTop:
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton5"))) != TRUE)
-      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton5")), TRUE);
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12"))) != TRUE)
-      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "radiobutton12")), TRUE);
-
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pLRButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pRLButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pTBButton), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pBTButton), TRUE);
-    break;
+    pButton = pPrivate->pBTButton; break;
+
+  default:
+    return;
   }
+
+  if(gtk_toggle_button_get_active(pButton) != TRUE)
+    gtk_toggle_button_set_active(pButton, TRUE);
 }
 
 static void dasher_preferences_dialogue_populate_special_appstyle(DasherPreferencesDialogue *pSelf) {
@@ -765,87 +706,21 @@ extern "C" void orientation(GtkRadioButton *widget, gpointer user_data) {
   if(pPrivate->bIgnoreSignals)
     return;
 
-  // Again, this could be neater.
-  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) == TRUE) {
-#if GTK_CHECK_VERSION (2,20,0)
-    if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget)), "radiobutton1")) {
-#else
-    if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "radiobutton1")) {
-#endif
-      dasher_app_settings_set_long(pPrivate->pAppSettings, LP_ORIENTATION, Dasher::Opts::Alphabet);
-      
-      // FIXME - get rid of global variables here.
-
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pLRButton), FALSE);
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pRLButton), FALSE);
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pTBButton), FALSE);
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pBTButton), FALSE);
-
-      pPrivate->bIgnoreSignals = true;
-      
-      switch (dasher_app_settings_get_long(pPrivate->pAppSettings, LP_REAL_ORIENTATION)) {
-      case Dasher::Opts::LeftToRight:
-        if(gtk_toggle_button_get_active(pPrivate->pLRButton) != TRUE)
-           gtk_toggle_button_set_active(pPrivate->pLRButton, TRUE);
-        break;
-      case Dasher::Opts::RightToLeft:
-        if(gtk_toggle_button_get_active(pPrivate->pRLButton) != TRUE)
-           gtk_toggle_button_set_active(pPrivate->pRLButton, TRUE);
-        break;
-      case Dasher::Opts::TopToBottom:
-        if(gtk_toggle_button_get_active(pPrivate->pTBButton) != TRUE)
-           gtk_toggle_button_set_active(pPrivate->pTBButton, TRUE);
-        break;
-      case Dasher::Opts::BottomToTop:
-        if(gtk_toggle_button_get_active(pPrivate->pTBButton) != TRUE)
-           gtk_toggle_button_set_active(pPrivate->pTBButton, TRUE);
-        break;
-      }
-
-      pPrivate->bIgnoreSignals = false;
-    }
-#if GTK_CHECK_VERSION (2,20,0)
-    else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget)), "radiobutton12")) {
-#else
-    else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "radiobutton12")) {
-#endif
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pLRButton), TRUE);
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pRLButton), TRUE);
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pTBButton), TRUE);
-      gtk_widget_set_sensitive(GTK_WIDGET(pPrivate->pBTButton), TRUE);
-
-      dasher_app_settings_set_long(pPrivate->pAppSettings, LP_ORIENTATION,
-          dasher_app_settings_get_long(pPrivate->pAppSettings, LP_REAL_ORIENTATION));
-    }
-#if GTK_CHECK_VERSION (2,20,0)
-    else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget)), "radiobutton2")) {
-#else
-    else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "radiobutton2")) {
-#endif
-      dasher_app_settings_set_long(pPrivate->pAppSettings, LP_ORIENTATION, Dasher::Opts::LeftToRight);
-    }
-#if GTK_CHECK_VERSION (2,20,0)
-    else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget)), "radiobutton3")) {
-#else
-    else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "radiobutton3")) {
-#endif
-      dasher_app_settings_set_long(pPrivate->pAppSettings, LP_ORIENTATION, Dasher::Opts::RightToLeft);
-    }
-#if GTK_CHECK_VERSION (2,20,0)
-    else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget)), "radiobutton4")) {
-#else
-    else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "radiobutton4")) {
-#endif
-      dasher_app_settings_set_long(pPrivate->pAppSettings, LP_ORIENTATION, Dasher::Opts::TopToBottom);
-    }
-#if GTK_CHECK_VERSION (2,20,0)
-    else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget)), "radiobutton5")) {
-#else
-    else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "radiobutton5")) {
-#endif
-      dasher_app_settings_set_long(pPrivate->pAppSettings, LP_ORIENTATION, Dasher::Opts::BottomToTop);
-    }
+  GtkToggleButton *pButton = GTK_TOGGLE_BUTTON(widget);
+  Dasher::Opts::ScreenOrientations orient;
+  if (pButton == pPrivate->pAlphOrient) {
+    orient = Dasher::Opts::Alphabet;
+  } else if (pButton == pPrivate->pLRButton) {
+    orient = Dasher::Opts::LeftToRight;
+  } else if (pButton == pPrivate->pRLButton) {
+   orient = Dasher::Opts::RightToLeft;
+  } else if (pButton == pPrivate->pTBButton) {
+    orient = Dasher::Opts::TopToBottom;
+  } else if (pButton == pPrivate->pBTButton) {
+    orient = Dasher::Opts::BottomToTop;
   }
+  dasher_app_settings_set_long(pPrivate->pAppSettings, LP_ORIENTATION, orient);
+
 }
 
 extern "C" void ThickLineClicked(GtkWidget *widget, gpointer user_data) {



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