[dasher] Rm LP_REAL_ORIENTATION, make property of DasherView.
- From: Patrick Welche <pwelche src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dasher] Rm LP_REAL_ORIENTATION, make property of DasherView.
- Date: Tue, 12 Jul 2011 15:28:03 +0000 (UTC)
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]