Implement degree mode in DeskCalc.

Default is radian mode,  You set the option in the right click menu
like the other options.

Note: degree mode does not affect hyperbolic trigonometric functions.
This is how Mac Calculator, Windows Calculator, and Google Calculator
work.
This commit is contained in:
John Scipione
2012-07-30 22:35:57 -04:00
parent 93aac98d0a
commit 8ffd0477dd
7 changed files with 98 additions and 3 deletions
+24
View File
@@ -244,6 +244,10 @@ CalcView::MessageReceived(BMessage* message)
case MSG_OPTIONS_AUDIO_FEEDBACK:
ToggleAudioFeedback();
return;
case MSG_OPTIONS_ANGLE_MODE:
ToggleAngleMode();
return;
}
}
@@ -931,6 +935,7 @@ CalcView::Evaluate()
try {
ExpressionParser parser;
parser.SetDegreeMode(fOptions->degree_mode);
value = parser.Evaluate(expression.String());
} catch (ParseException e) {
BString error(e.message.String());
@@ -970,6 +975,16 @@ CalcView::ToggleAudioFeedback(void)
fAudioFeedbackItem->SetMarked(fOptions->audio_feedback);
}
void
CalcView::ToggleAngleMode(void)
{
fOptions->degree_mode = !fOptions->degree_mode;
fAngleModeRadianItem->SetMarked(!fOptions->degree_mode);
fAngleModeDegreeItem->SetMarked(fOptions->degree_mode);
}
void
CalcView::SetKeypadMode(uint8 mode)
{
@@ -1257,6 +1272,10 @@ CalcView::_CreatePopUpMenu(bool addKeypadModeMenuItems)
new BMessage(MSG_OPTIONS_AUTO_NUM_LOCK));
fAudioFeedbackItem = new BMenuItem(B_TRANSLATE("Audio Feedback"),
new BMessage(MSG_OPTIONS_AUDIO_FEEDBACK));
fAngleModeRadianItem = new BMenuItem(B_TRANSLATE("Radian Mode"),
new BMessage(MSG_OPTIONS_ANGLE_MODE));
fAngleModeDegreeItem = new BMenuItem(B_TRANSLATE("Degree Mode"),
new BMessage(MSG_OPTIONS_ANGLE_MODE));
if (addKeypadModeMenuItems) {
fKeypadModeCompactItem = new BMenuItem(B_TRANSLATE("Compact"),
new BMessage(MSG_OPTIONS_KEYPAD_MODE_COMPACT), '0');
@@ -1269,6 +1288,8 @@ CalcView::_CreatePopUpMenu(bool addKeypadModeMenuItems)
// apply current settings
fAutoNumlockItem->SetMarked(fOptions->auto_num_lock);
fAudioFeedbackItem->SetMarked(fOptions->audio_feedback);
fAngleModeRadianItem->SetMarked(!fOptions->degree_mode);
fAngleModeDegreeItem->SetMarked(fOptions->degree_mode);
// construct menu
fPopUpMenu = new BPopUpMenu("pop-up", false, false);
@@ -1277,6 +1298,9 @@ CalcView::_CreatePopUpMenu(bool addKeypadModeMenuItems)
// TODO: Enable this when we use beep events which can be configured
// in the Sounds preflet.
//fPopUpMenu->AddItem(fAudioFeedbackItem);
fPopUpMenu->AddSeparatorItem();
fPopUpMenu->AddItem(fAngleModeRadianItem);
fPopUpMenu->AddItem(fAngleModeDegreeItem);
if (addKeypadModeMenuItems) {
fPopUpMenu->AddSeparatorItem();
fPopUpMenu->AddItem(fKeypadModeCompactItem);