KT24-1110_65E-HA-651B/apps/soundbox/ui/lcd_simple/my_demo.c
2024-11-10 18:44:17 +08:00

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