312 lines
11 KiB
C
312 lines
11 KiB
C
#include "ui/ui.h"
|
|
#include "app_config.h"
|
|
#include "ui/ui_api.h"
|
|
#include "app_task.h"
|
|
#include "system/timer.h"
|
|
#include "key_event_deal.h"
|
|
#include "audio_config.h"
|
|
#include "jiffies.h"
|
|
#include "ui/ui_simple/ui_res.h"
|
|
#include "ui/lcd_simple/ui.h"
|
|
#include "app_msg.h"
|
|
#include "ui/lcd_simple/ui_mainmenu.h"
|
|
|
|
#if (TCFG_UI_ENABLE&&(CONFIG_UI_STYLE == STYLE_UI_SIMPLE))
|
|
|
|
////FM任务下菜单////
|
|
MENULIST FM_Main; //FM任务主菜单
|
|
MENULIST FM_Seek;
|
|
////FM任务下菜单ID////
|
|
const u16 FM_Main_ItemString[8] =
|
|
{fmenu16, sreplay1, fmenu1, fmenu15, fmenu2, fmenu3, fm_vol, mstop5};
|
|
|
|
const u16 FM_Seek_ItemString[3] =
|
|
{fm_manual, fmautoload, fm_switch};
|
|
|
|
static void DEMO_MenuInit(void)
|
|
{
|
|
FM_Main.ItemSum = 8;
|
|
FM_Main.ActiveItemNum = 1; //菜单选中时的图标ID
|
|
FM_Main.IconID[0] = ACTIVE; //菜单选中时的图标ID
|
|
FM_Main.IconID[1] = UNACTIVE; //菜单未选中时的图标ID
|
|
FM_Main.TitleID = 0;//vstopm1; //菜单的标题字符串ID号,0代表无标题
|
|
FM_Main.ItemString = FM_Main_ItemString;
|
|
|
|
FM_Seek.ItemSum = 3;
|
|
FM_Seek.ActiveItemNum = 1; //菜单选中时的图标ID
|
|
FM_Seek.IconID[0] = ACTIVE; //菜单选中时的图标ID
|
|
FM_Seek.IconID[1] = UNACTIVE; //菜单未选中时的图标ID
|
|
FM_Seek.TitleID = 0;//vstopm1; //菜单的标题字符串ID号,0代表无标题
|
|
FM_Seek.ItemString = FM_Seek_ItemString;
|
|
}
|
|
|
|
static void UI_MenuSelectOn(uint8 showitemnum)
|
|
{
|
|
TurnPixelReverse_Rect(MENUICONWIDTH, showitemnum * 2, SCR_WIDTH - SCROLLBARWIDTH - 1, showitemnum * 2 + 1);
|
|
ResShowPic(ACTIVE, 0, showitemnum * 16);
|
|
}
|
|
|
|
static u8 volume_adjust(u8 mode)
|
|
{
|
|
static u8 test = 0;
|
|
if (mode == UI_SLIDER_INC) {
|
|
test ++;
|
|
}
|
|
|
|
if (mode == UI_SLIDER_DEC) {
|
|
if (test) {
|
|
test--;
|
|
}
|
|
}
|
|
printf(">>>>%s %d %d<<<<\n", __func__, __LINE__, test);
|
|
return test;
|
|
}
|
|
|
|
static void UpdateMenu(MENULIST *Mlist)
|
|
{
|
|
u8 i;
|
|
static u8 itembegin;
|
|
if (Mlist->TitleID > 0) {
|
|
itembegin = 1;
|
|
} else {
|
|
itembegin = 0;
|
|
}
|
|
|
|
if (CurrentScreenNum < NeedScreenSumViaItem - 1) {
|
|
for (i = itembegin; i < MENUITEMSUMPERSCR; i++) {
|
|
ResShowPic(Mlist->IconID[1], 0, i * MENUITEMHEIGHT);
|
|
ResShowMultiString(MENUICONWIDTH, i * MENUITEMHEIGHT, Mlist->ItemString[(i - itembegin) + (CurrentScreenNum * (MENUITEMSUMPERSCR - itembegin))]);
|
|
}
|
|
} else { //到达最后一屏,只显示剩下的菜单项目
|
|
for (i = itembegin; i < LaseScreenRemainMenuItem + itembegin; i++) {
|
|
ResShowPic(Mlist->IconID[1], 0, i * MENUITEMHEIGHT);
|
|
ResShowMultiString(MENUICONWIDTH, i * MENUITEMHEIGHT, Mlist->ItemString[(i - itembegin) + (CurrentScreenNum * (MENUITEMSUMPERSCR - itembegin))]);
|
|
}
|
|
}
|
|
}
|
|
|
|
static u8 SetFMArrow(uint8 Start_x, uint8 Start_y)
|
|
{
|
|
uint8 FMArrowPixelBuf[7] = {0x10, 0x30, 0x5F, 0x81, 0x5F, 0x30, 0x10};
|
|
uint8 x;
|
|
|
|
if ((Start_x > SCR_WIDTH - 7) || (Start_y > LCDPAGE)) {
|
|
return false;
|
|
}
|
|
|
|
for (x = Start_x; x < Start_x + 7; x++) {
|
|
LCDBuff[Start_y][x] = FMArrowPixelBuf[x - Start_x];
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//菜单//
|
|
static u8 DEMO_UI_MenuList(MENULIST *Mlist)
|
|
{
|
|
uint8 autoruntime = MENUWAITTIME;
|
|
uint8 i = 0;
|
|
uint8 minusbase;
|
|
int msg[16];
|
|
bool redraw = true;
|
|
|
|
memset(&LCDBuff[0][0], 0x00, (SCR_HEIGHT / 8)*SCR_WIDTH);
|
|
|
|
if (Mlist->TitleID > 0) { //有菜单标题 菜单项目数为3
|
|
minusbase = (Mlist->ActiveItemNum + (MENUITEMSUMPERSCR - 1) - 1) / (MENUITEMSUMPERSCR - 1) - 1;
|
|
MenuItemSelectOnNum = Mlist->ActiveItemNum - minusbase * (MENUITEMSUMPERSCR - 1);
|
|
NeedScreenSumViaItem = (Mlist->ItemSum + (MENUITEMSUMPERSCR - 1) - 1) / (MENUITEMSUMPERSCR - 1);
|
|
LaseScreenRemainMenuItem = Mlist->ItemSum % (MENUITEMSUMPERSCR - 1);
|
|
if (LaseScreenRemainMenuItem == 0) {
|
|
LaseScreenRemainMenuItem = (MENUITEMSUMPERSCR - 1);
|
|
}
|
|
CurrentScreenNum = (Mlist->ActiveItemNum - 1) / (MENUITEMSUMPERSCR - 1);
|
|
ResShowMultiString(0, 0, Mlist->TitleID); //显示菜单图标
|
|
|
|
UpdateMenu(Mlist);
|
|
} else { //没有菜单标题 菜单项目数为4
|
|
MenuItemSelectOnNum = (Mlist->ActiveItemNum - 1) % (MENUITEMSUMPERSCR); //当前屏的活动菜单
|
|
NeedScreenSumViaItem = (Mlist->ItemSum + MENUITEMSUMPERSCR - 1) / MENUITEMSUMPERSCR; //需要分几屏显示
|
|
LaseScreenRemainMenuItem = Mlist->ItemSum % MENUITEMSUMPERSCR;
|
|
|
|
if (LaseScreenRemainMenuItem == 0) {
|
|
LaseScreenRemainMenuItem = (MENUITEMSUMPERSCR);
|
|
}
|
|
|
|
CurrentScreenNum = (Mlist->ActiveItemNum - 1) / MENUITEMSUMPERSCR;
|
|
|
|
UpdateMenu(Mlist);
|
|
}
|
|
UI_MenuSelectOn(MenuItemSelectOnNum);
|
|
|
|
while (1) {
|
|
app_task_get_msg(msg, ARRAY_SIZE(msg), 1);
|
|
switch (msg[0]) {
|
|
case APP_MSG_SYS_EVENT:
|
|
printf("%s demo key = %d value = %x\n", __func__, msg[1], msg[2]);
|
|
switch (msg[1]) {
|
|
case KEY_OK:
|
|
return Mlist->ItemString[Mlist->ActiveItemNum - 1];
|
|
break;
|
|
case KEY_MENU:
|
|
break;
|
|
case KEY_DOWN:
|
|
autoruntime = MENUWAITTIME;
|
|
Mlist->ActiveItemNum -= 1;
|
|
if ((Mlist->ActiveItemNum <= 0) && (Mlist->TitleID > 0)) {
|
|
Mlist->ActiveItemNum = Mlist->ItemSum;
|
|
CurrentScreenNum = NeedScreenSumViaItem - 1;
|
|
MenuItemSelectOnNum = LaseScreenRemainMenuItem + 1;
|
|
} else if ((Mlist->ActiveItemNum <= 0) && (Mlist->TitleID <= 0)) {
|
|
Mlist->ActiveItemNum = Mlist->ItemSum;
|
|
CurrentScreenNum = NeedScreenSumViaItem - 1;
|
|
MenuItemSelectOnNum = LaseScreenRemainMenuItem;
|
|
}
|
|
|
|
MenuItemSelectOnNum -= 1;
|
|
if ((MenuItemSelectOnNum <= 0) && (Mlist->TitleID > 0)) {
|
|
MenuItemSelectOnNum = 3;
|
|
CurrentScreenNum -= 1;
|
|
if (CurrentScreenNum < 0) {
|
|
CurrentScreenNum = 0;
|
|
}
|
|
} else if ((MenuItemSelectOnNum < 0) && (Mlist->TitleID <= 0)) {
|
|
MenuItemSelectOnNum = 3;
|
|
CurrentScreenNum -= 1;
|
|
if (CurrentScreenNum < 0) {
|
|
CurrentScreenNum = 0;
|
|
}
|
|
}
|
|
redraw = true;
|
|
|
|
break;
|
|
case KEY_UP:
|
|
autoruntime = MENUWAITTIME;
|
|
Mlist->ActiveItemNum += 1;
|
|
if ((Mlist->ActiveItemNum > Mlist->ItemSum) && (Mlist->TitleID > 0)) {
|
|
Mlist->ActiveItemNum = 1;
|
|
CurrentScreenNum = 0;
|
|
MenuItemSelectOnNum = 0;
|
|
} else if ((Mlist->ActiveItemNum > Mlist->ItemSum) && (Mlist->TitleID <= 0)) {
|
|
Mlist->ActiveItemNum = 1;
|
|
CurrentScreenNum = 0;
|
|
MenuItemSelectOnNum = -1;
|
|
}
|
|
|
|
|
|
MenuItemSelectOnNum += 1;
|
|
if ((MenuItemSelectOnNum > 3) && (Mlist->TitleID > 0)) {
|
|
MenuItemSelectOnNum = 1;
|
|
CurrentScreenNum += 1;
|
|
if (CurrentScreenNum >= NeedScreenSumViaItem) {
|
|
CurrentScreenNum = 0;
|
|
}
|
|
} else if ((MenuItemSelectOnNum > 3) && (Mlist->TitleID <= 0)) {
|
|
MenuItemSelectOnNum = 0;
|
|
CurrentScreenNum += 1;
|
|
if (CurrentScreenNum >= NeedScreenSumViaItem) {
|
|
CurrentScreenNum = 0;
|
|
}
|
|
}
|
|
redraw = true;
|
|
|
|
case MSG_HALF_SECOND:
|
|
autoruntime--;
|
|
if (!autoruntime) {
|
|
return mstop5;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return 0xff;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (redraw) {
|
|
redraw = false;
|
|
memset(&LCDBuff[0][0], 0x00, (SCR_HEIGHT / 8)*SCR_WIDTH);
|
|
if (Mlist->TitleID > 0) { //有菜单标题 菜单项目数为3
|
|
ResShowMultiString(0, 0, Mlist->TitleID);
|
|
UpdateMenu(Mlist);
|
|
} else { //没有菜单标题 菜单项目数为4
|
|
UpdateMenu(Mlist);
|
|
}
|
|
UI_MenuSelectOn(MenuItemSelectOnNum);
|
|
|
|
SetScrollBar(SCR_WIDTH - SCROLLBARWIDTH); //滚动条
|
|
//滑动块设置
|
|
if (Mlist->ItemSum == 8) {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, Mlist->ActiveItemNum - 1);
|
|
} else if (Mlist->ItemSum < 8) {
|
|
if (Mlist->ActiveItemNum == 1) {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, 0);
|
|
} else if (Mlist->ActiveItemNum == Mlist->ItemSum) {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, 7);
|
|
} else if (Mlist->ItemSum <= 4) {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, Mlist->ActiveItemNum * 2 - 1);
|
|
} else if (Mlist->ItemSum == 5 && Mlist->ActiveItemNum == 2) {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, 2);
|
|
} else {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, 8 * Mlist->ActiveItemNum / Mlist->ItemSum);
|
|
}
|
|
} else if (Mlist->ItemSum > 8) {
|
|
if (Mlist->ActiveItemNum == 1) {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, 0);
|
|
}
|
|
if (Mlist->ActiveItemNum == Mlist->ItemSum) {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, 7);
|
|
} else {
|
|
SetSlideBlock(SCR_WIDTH - SCROLLBARWIDTH + 1, 8 * Mlist->ActiveItemNum / Mlist->ItemSum);
|
|
}
|
|
}
|
|
draw_lcd(0, LCDPAGE);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void demo_simple_ui_mode()
|
|
{
|
|
int msg[16];
|
|
DEMO_MenuInit();
|
|
while (1) {
|
|
app_task_get_msg(msg, ARRAY_SIZE(msg), 1);
|
|
switch (msg[0]) {
|
|
case APP_MSG_SYS_EVENT:
|
|
printf("ui %s key = %d value = %x\n", __func__, msg[1], msg[2]);
|
|
switch (msg[1]) {
|
|
case KEY_OK:
|
|
UI_mainmenu(APP_FM_TASK);
|
|
DEMO_UI_MenuList(&FM_Main);
|
|
DEMO_UI_MenuList(&FM_Seek);
|
|
/* UI_mainmenu(APP_RECORD_TASK); */
|
|
ui_simple_key_msg_post(KEY_OK, 0);
|
|
break;
|
|
case KEY_MENU:
|
|
break;
|
|
case KEY_DOWN:
|
|
break;
|
|
case KEY_UP:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|