/* * Copyright (C) OpenTX * * Based on code named * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef _GUI_H_ #define _GUI_H_ #include "gui_common.h" #include "menus.h" #include "popups.h" #define MENUS_SCROLLBAR_WIDTH 0 #if defined(PCBX7D) #define HEADER_LINE 0 #define HEADER_LINE_COLUMNS #else #define HEADER_LINE 1 #define HEADER_LINE_COLUMNS 0, #endif #define MENU_COLUMNS 1 #define COLUMN_X 0 #define drawFieldLabel(x, y, str) lcdDrawTextAlignedLeft(y, str) #define NUM_BODY_LINES (LCD_LINES-1) #define MENU_HEADER_HEIGHT FH #define MENU_INIT_VPOS 0 #define CURVE_SIDE_WIDTH (LCD_H/2) #define CURVE_CENTER_X (LCD_W-CURVE_SIDE_WIDTH-2) #define CURVE_CENTER_Y (LCD_H/2) #define MIXES_2ND_COLUMN (12*FW) // Temporary no highlight extern uint8_t noHighlightCounter; #define NO_HIGHLIGHT() (noHighlightCounter > 0) #define START_NO_HIGHLIGHT() do { noHighlightCounter = 25; } while(0) #if !defined(CPUM64) void drawSlider(coord_t x, coord_t y, uint8_t value, uint8_t max, uint8_t attr); #elif defined(GRAPHICS) void display5posSlider(coord_t x, coord_t y, uint8_t value, uint8_t attr); #define drawSlider(x, y, value, max, attr) lcdDrawNumber(x, y, value, attr|LEFT) #else #define drawSlider(x, y, value, max, attr) lcdDrawNumber(x, y, value, attr|LEFT) #endif #if defined(NAVIGATION_POT1) extern int16_t p1valdiff; #else #define p1valdiff 0 #endif #if defined(NAVIGATION_POT2) extern int8_t p2valdiff; #else #define p2valdiff 0 #endif extern int8_t checkIncDec_Ret; // global helper vars #define EDIT_SELECT_MENU -1 #define EDIT_SELECT_FIELD 0 #define EDIT_MODIFY_FIELD 1 #define EDIT_MODIFY_STRING 2 extern int8_t s_editMode; // global editmode // checkIncDec flags #define EE_GENERAL 0x01 #define EE_MODEL 0x02 #define NO_INCDEC_MARKS 0x04 #define INCDEC_SWITCH 0x08 #define INCDEC_SOURCE 0x10 #define INCDEC_REP10 0x40 #define NO_DBLKEYS 0x80 #if defined(CPUARM) #define INCDEC_DECLARE_VARS(f) uint8_t incdecFlag = (f); IsValueAvailable isValueAvailable = NULL #define INCDEC_SET_FLAG(f) incdecFlag = (f) #define INCDEC_ENABLE_CHECK(fn) isValueAvailable = fn #define CHECK_INCDEC_PARAM(event, var, min, max) checkIncDec(event, var, min, max, incdecFlag, isValueAvailable) #elif defined(CPUM64) #define INCDEC_DECLARE_VARS(f) #define INCDEC_SET_FLAG(f) #define INCDEC_ENABLE_CHECK(fn) #define CHECK_INCDEC_PARAM(event, var, min, max) checkIncDec(event, var, min, max, EE_MODEL) #else #define INCDEC_DECLARE_VARS(f) uint8_t incdecFlag = (f) #define INCDEC_SET_FLAG(f) incdecFlag = (f) #define INCDEC_ENABLE_CHECK(fn) #define CHECK_INCDEC_PARAM(event, var, min, max) checkIncDec(event, var, min, max, incdecFlag) #endif // mawrow special values #define TITLE_ROW ((uint8_t)-1) #define HIDDEN_ROW ((uint8_t)-2) #if defined(CPUARM) struct CheckIncDecStops { const int count; const int stops[]; int min() const { return stops[0]; } int max() const { return stops[count-1]; } bool contains(int value) const { for (int i=0; i= 0x0e) void repeatLastCursorMove(event_t event); #define REPEAT_LAST_CURSOR_MOVE() { if (EVT_KEY_MASK(event) >= 0x0e) putEvent(event); else repeatLastCursorMove(event); } #define MOVE_CURSOR_FROM_HERE() if (menuHorizontalPosition > 0) REPEAT_LAST_CURSOR_MOVE() #else #define IS_ROTARY_LEFT(evt) (0) #define IS_ROTARY_RIGHT(evt) (0) #define IS_ROTARY_BREAK(evt) (0) #define IS_ROTARY_LONG(evt) (0) #define IS_ROTARY_EVENT(evt) (0) void repeatLastCursorMove(event_t event); #define REPEAT_LAST_CURSOR_MOVE() repeatLastCursorMove(event) #define MOVE_CURSOR_FROM_HERE() REPEAT_LAST_CURSOR_MOVE() #endif // TODO enum #if defined(PCBX7D) #define EDIT_MODE_INIT 0 #else #define EDIT_MODE_INIT -1 #endif typedef int (*FnFuncP) (int x); void drawFunction(FnFuncP fn, uint8_t offset=0); uint8_t switchToMix(uint8_t source); void deleteExpoMix(uint8_t expo, uint8_t idx); void drawCheckBox(coord_t x, coord_t y, uint8_t value, LcdFlags attr); extern const pm_uchar sticks[] PROGMEM; void drawSplash(); void drawScreenIndex(uint8_t index, uint8_t count, uint8_t attr); void drawStick(coord_t centrex, int16_t xval, int16_t yval); void drawPotsBars(); void doMainScreenGraphics(); inline void drawProgressBar(const char * label) { // TODO } inline void updateProgressBar(int num, int den) { // TODO } inline void drawSleepBitmap() { // TODO } #if !defined(CPUM64) void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t count, uint8_t visible); #endif #if defined(PCBTARANIS) void drawAlertBox(const pm_char * title, const pm_char * text, const char * action); #endif #if defined(VOICE) #define ALERT_SOUND_ARG , uint8_t sound #else #define ALERT_SOUND_ARG #endif void showAlertBox(const pm_char * title, const pm_char * text, const char * action ALERT_SOUND_ARG); #define SET_SCROLLBAR_X(x) #define LOAD_MODEL_BITMAP() #define IS_MAIN_VIEW_DISPLAYED() menuHandlers[0] == menuMainView #if defined(TELEMETRY_FRSKY) #define IS_TELEMETRY_VIEW_DISPLAYED() menuHandlers[0] == menuViewTelemetryFrsky #else #define IS_TELEMETRY_VIEW_DISPLAYED() false #endif #define IS_OTHER_VIEW_DISPLAYED() false #if defined(CPUARM) void editCurveRef(coord_t x, coord_t y, CurveRef & curve, event_t event, LcdFlags flags); #endif #if defined(FLIGHT_MODES) void displayFlightModes(coord_t x, coord_t y, FlightModesType value); FlightModesType editFlightModes(coord_t x, coord_t y, event_t event, FlightModesType value, uint8_t attr); #else #define displayFlightModes(...) #endif #endif // _GUI_H_