/* * Copyright 2013 serso aka se.solovyev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Contact details * * Email: se.solovyev@gmail.com * Site: http://se.solovyev.org */ package org.solovyev.android.calculator.buttons; import android.util.SparseArray; import org.solovyev.android.Check; import org.solovyev.android.calculator.R; import javax.annotation.Nonnull; import javax.annotation.Nullable; import static org.solovyev.android.calculator.buttons.CppSpecialButton.cursor_left; import static org.solovyev.android.calculator.buttons.CppSpecialButton.cursor_right; import static org.solovyev.android.calculator.buttons.CppSpecialButton.open_app; public enum CppButton { /*digits*/ one(R.id.cpp_button_1, "1"), two(R.id.cpp_button_2, "2"), three(R.id.cpp_button_3, "3"), four(R.id.cpp_button_4, "4"), five(R.id.cpp_button_5, "5"), six(R.id.cpp_button_6, "6"), seven(R.id.cpp_button_7, "7"), eight(R.id.cpp_button_8, "8"), nine(R.id.cpp_button_9, "9"), zero(R.id.cpp_button_0, "0"), period(R.id.cpp_button_period, "."), brackets(R.id.cpp_button_round_brackets, "()"), memory(R.id.cpp_button_memory, CppSpecialButton.memory), settings(R.id.cpp_button_settings, CppSpecialButton.settings), settings_widget(R.id.cpp_button_settings_widget, CppSpecialButton.settings_widget), like(R.id.cpp_button_like, CppSpecialButton.like), /*last row*/ left(R.id.cpp_button_left, cursor_left), right(R.id.cpp_button_right, cursor_right), vars(R.id.cpp_button_vars, CppSpecialButton.vars), functions(R.id.cpp_button_functions, CppSpecialButton.functions), operators(R.id.cpp_button_operators, CppSpecialButton.operators), app(R.id.cpp_button_app, open_app), history(R.id.cpp_button_history, CppSpecialButton.history), /*operations*/ multiplication(R.id.cpp_button_multiplication, "×"), division(R.id.cpp_button_division, "/"), plus(R.id.cpp_button_plus, "+"), subtraction(R.id.cpp_button_subtraction, "−"), percent(R.id.cpp_button_percent, "%"), power(R.id.cpp_button_power, "^"), /*last column*/ clear(R.id.cpp_button_clear, CppSpecialButton.clear), erase(R.id.cpp_button_erase, CppSpecialButton.erase, CppSpecialButton.clear), copy(R.id.cpp_button_copy, CppSpecialButton.copy), paste(R.id.cpp_button_paste, CppSpecialButton.paste), /*equals*/ equals(R.id.cpp_button_equals, CppSpecialButton.equals); @Nonnull private static SparseArray<CppButton> buttonsByIds = new SparseArray<>(); public final int id; @Nonnull public final String action; @Nullable public final String actionLong; CppButton(int id, @Nonnull CppSpecialButton button, @Nullable CppSpecialButton buttonLong) { this(id, button.action, buttonLong == null ? null : buttonLong.getAction()); } CppButton(int id, @Nonnull CppSpecialButton button) { this(id, button, null); } CppButton(int id, @Nonnull String action, @Nullable String actionLong) { this.id = id; this.action = action; this.actionLong = actionLong; } CppButton(int id, @Nonnull String action) { this(id, action, null); } @Nullable public static CppButton getById(int buttonId) { initButtonsByIdsMap(); return buttonsByIds.get(buttonId); } private static void initButtonsByIdsMap() { Check.isMainThread(); if (buttonsByIds.size() != 0) { return; } for (CppButton button : values()) { buttonsByIds.append(button.id, button); } } }