📄 functions.inl
字号:
case MENU_LEFT :
{
if (!VarsUi.State)
{
cUiListLeft(VarsUi.NoOfFiles,&VarsUi.FileCenter);
VarsUi.NextState = TEST_BUTTONS;
}
Action = MENU_DRAW;
}
break;
case MENU_RIGHT :
{
if (!VarsUi.State)
{
cUiListRight(VarsUi.NoOfFiles,&VarsUi.FileCenter);
VarsUi.NextState = TEST_BUTTONS;
}
Action = MENU_DRAW;
}
break;
case MENU_SELECT :
{
}
break;
default :
{
if (Action < FILETYPES)
{
if (!VarsUi.State)
{
VarsUi.FileType = Action;
VarsUi.FileCenter = 1;
VarsUi.NextState = IOMapUi.State;
}
Action = MENU_DRAW;
}
else
{
IOMapUi.State = EXIT_PRESSED;
VarsUi.State = 0;
}
}
break;
}
if (Action == MENU_DRAW)
{
switch (VarsUi.State)
{
case 0 :
{
VarsUi.FNOFState = 0;
VarsUi.State++;
}
break;
case 1 :
{
if (cUiFindNoOfFiles(VarsUi.FileType,&VarsUi.NoOfFiles) == 0)
{
if (VarsUi.NoOfFiles)
{
cUiListCalc(VarsUi.NoOfFiles,&VarsUi.FileCenter,&VarsUi.FileLeft,&VarsUi.FileRight);
VarsUi.State++;
}
else
{
VarsUi.State = 0;
IOMapUi.State = EXIT_PRESSED;
}
}
}
break;
case 2 :
{
if (cUiFindNameForFileNo(VarsUi.FileType,VarsUi.FileCenter,VarsUi.SelectedFilename) == 0)
{
VarsUi.State++;
}
}
break;
default :
{
pMapDisplay->pMenuIcons[MENUICON_LEFT] = NULL;
pMapDisplay->pMenuIcons[MENUICON_CENTER] = NULL;
pMapDisplay->pMenuIcons[MENUICON_RIGHT] = NULL;
if (VarsUi.FileLeft)
{
pMapDisplay->pMenuIcons[MENUICON_LEFT] = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_LEFT);
}
if (VarsUi.FileCenter)
{
pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_CENTER);
}
if (VarsUi.FileRight)
{
pMapDisplay->pMenuIcons[MENUICON_RIGHT] = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_RIGHT);
}
pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_5);
// Search forward for termination
VarsUi.Tmp = 0;
while ((VarsUi.SelectedFilename[VarsUi.Tmp]) && (VarsUi.Tmp < FILENAME_LENGTH))
{
VarsUi.Tmp++;
}
// Search backward for "."
while ((VarsUi.Tmp) && (VarsUi.SelectedFilename[VarsUi.Tmp] != '.'))
{
VarsUi.Tmp--;
}
if (VarsUi.Tmp > DISPLAYLINE_LENGTH)
{
VarsUi.Tmp = DISPLAYLINE_LENGTH;
}
VarsUi.DisplayBuffer[VarsUi.Tmp] = 0;
// Copy only name not ext
while (VarsUi.Tmp)
{
VarsUi.Tmp--;
VarsUi.DisplayBuffer[VarsUi.Tmp] = VarsUi.SelectedFilename[VarsUi.Tmp];
}
pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
pMapDisplay->EraseMask |= MENUICON_BITS;
pMapDisplay->UpdateMask |= (SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT));
IOMapUi.State = VarsUi.NextState;
VarsUi.State = 0;
}
break;
}
}
return (VarsUi.State);
}
//******* cUiVolume **********************************************************
UBYTE cUiVolume(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_EXIT
{
switch (Action)
{
case MENU_INIT : // Init time counter and cursor bitmap
{
VarsUi.Counter = cUiNVReadVolumeCount() + 1;
VarsUi.pTmp = (UBYTE*)Cursor;
for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)sizeof(Cursor));VarsUi.Tmp++)
{
VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
VarsUi.pTmp++;
}
Action = MENU_DRAW;
}
break;
case MENU_LEFT : // Dec
{
cUiListLeft(MAX_VOLUME + 1,&VarsUi.Counter);
IOMapUi.Volume = VarsUi.Counter - 1;
Action = MENU_DRAW;
}
break;
case MENU_RIGHT : // Inc
{
cUiListRight(MAX_VOLUME + 1,&VarsUi.Counter);
IOMapUi.Volume = VarsUi.Counter - 1;
Action = MENU_DRAW;
}
break;
case MENU_ENTER : // Enter
{
cUiNVWriteVolumeCount(VarsUi.Counter - 1);
IOMapUi.Volume = cUiNVReadVolumeCount();
pMapSound->Volume = IOMapUi.Volume;
Action = MENU_EXIT;
}
break;
case MENU_EXIT : // Leave
{
IOMapUi.Volume = cUiNVReadVolumeCount();
}
break;
}
if (Action == MENU_DRAW)
{
sprintf((char*)VarsUi.DisplayBuffer,"%u",(UWORD)VarsUi.Counter - 1);
pMapDisplay->pTextLines[TEXTLINE_3] = VarsUi.DisplayBuffer;
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
VarsUi.CursorTmp[4] = 46;
VarsUi.CursorTmp[5] = 24;
pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4));
pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
pMapDisplay->UpdateMask |= (TEXTLINE_BIT(TEXTLINE_3) | BITMAP_BIT(BITMAP_1));
}
if (Action == MENU_EXIT)
{
IOMapUi.State = EXIT_PRESSED;
}
return (0);
}
//******* cUiGetUserString ***************************************************
#define STRINGTYPES 2
#define TOPTEXT_LINE TEXTLINE_3
#define STRING_LINE TEXTLINE_5
typedef struct
{
const UBYTE Text;
const UBYTE *Figures;
const UBYTE NoOfFigures;
const UBYTE MaxStringLength;
const UBYTE WindowSize;
const SBYTE DefaultPointer;
}
STRSETS;
const UBYTE PincodeFigures[] = { "0987654321" "\x7F" "abcdefghijklmnopqrstuvwxyz " };
const UBYTE FilenameFigures[] = { "0987654321" "\x7F" "abcdefghijklmnopqrstuvwxyz " };
const STRSETS StrSets[STRINGTYPES] =
{
{ TXT_GETUSERSTRING_PIN, PincodeFigures, 37, SIZE_OF_BT_PINCODE - 1, 15, 10 },
{ TXT_GETUSERSTRING_FILENAME, FilenameFigures, 37, FILENAME_LENGTH - 4 , 15, 10 }
};
UBYTE cUiGetUserString(UBYTE Type) // 0=Pincode, 1=filename
{
UBYTE Tmp1;
SBYTE Tmp2;
if (Type < STRINGTYPES)
{
switch (VarsUi.GUSState)
{
case 0 : // Init screen
{
// Disable update and prepare screen
pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_LARGE);
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Ok;
// Set figure pointer to default
VarsUi.FigurePointer = (SBYTE)StrSets[Type].DefaultPointer;
// Calculate cursor from default string
VarsUi.GUSCursor = 0;
while ((VarsUi.GUSCursor < DISPLAYLINE_LENGTH) && VarsUi.UserString[VarsUi.GUSCursor])
{
VarsUi.GUSCursor++;
}
VarsUi.GUSNoname = TRUE;
VarsUi.GUSState++;
}
break;
case 1 : // Update user string
{
if (!(pMapDisplay->EraseMask & SCREEN_BIT(SCREEN_LARGE)))
{
// Display top text
pMapDisplay->pTextLines[TOPTEXT_LINE] = cUiGetString(StrSets[Type].Text);
pMapDisplay->UpdateMask |= TEXTLINE_BIT(TOPTEXT_LINE);
Tmp1 = 0;
while (VarsUi.UserString[Tmp1] && (Tmp1 < StrSets[Type].MaxStringLength))
{
VarsUi.DisplayText[Tmp1] = VarsUi.UserString[Tmp1];
Tmp1++;
}
if (Tmp1 < StrSets[Type].MaxStringLength)
{
VarsUi.DisplayText[Tmp1] = '_';
Tmp1++;
}
while (Tmp1 < StrSets[Type].MaxStringLength)
{
VarsUi.DisplayText[Tmp1] = ' ';
Tmp1++;
}
VarsUi.DisplayText[Tmp1] = 0;
pMapDisplay->pTextLines[STRING_LINE] = VarsUi.DisplayText;
pMapDisplay->UpdateMask |= (TEXTLINE_BIT(STRING_LINE) | SPECIAL_BIT(TOPLINE));
pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
VarsUi.GUSState++;
}
}
break;
case 2 : // Update figure string
{
if (!(pMapDisplay->EraseMask & BITMAP_BIT(BITMAP_1)))
{
Tmp2 = VarsUi.FigurePointer;
for (Tmp1 = 0;Tmp1 < 3;Tmp1++)
{
if (Tmp2)
{
Tmp2--;
}
else
{
Tmp2 = StrSets[Type].NoOfFigures - 1;
}
}
for (Tmp1 = 0;Tmp1 < 7;Tmp1++)
{
if ((Tmp1 == 3) && (StrSets[Type].Figures[Tmp2] == 0x7F))
{
pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_1);
}
else
{
pMapDisplay->pFunc(DISPLAY_CHAR,TRUE,5 + Tmp1 * 14,52,StrSets[Type].Figures[Tmp2],0);
}
if (Tmp2 < (StrSets[Type].NoOfFigures - 1))
{
Tmp2++;
}
else
{
Tmp2 = 0;
}
}
pMapDisplay->pFunc(DISPLAY_HORISONTAL_LINE,TRUE,42,47,57,0);
pMapDisplay->pFunc(DISPLAY_VERTICAL_LINE,TRUE,42,47,0,63);
pMapDisplay->pFunc(DISPLAY_VERTICAL_LINE,TRUE,57,47,0,63);
VarsUi.GUSState++;
}
}
break;
case 3 : // Get user input
{
if ((pMapButton->State[BTN4] & LONG_PRESSED_EV))
{
if (VarsUi.GUSCursor)
{
if ((VarsUi.UserString[VarsUi.GUSCursor - 1] >= 'a') && (VarsUi.UserString[VarsUi.GUSCursor - 1] <= 'z'))
{
VarsUi.UserString[VarsUi.GUSCursor - 1] -= ' ';
VarsUi.GUSState -= 2;
}
}
}
switch (cUiReadButtons())
{
case BUTTON_LEFT :
{
if (VarsUi.FigurePointer)
{
VarsUi.FigurePointer--;
}
else
{
VarsUi.FigurePointer = StrSets[Type].NoOfFigures - 1;
}
pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
VarsUi.GUSState -= 2;
}
break;
case BUTTON_ENTER :
{
switch (StrSets[Type].Figures[VarsUi.FigurePointer])
{
case 0x7F :
{
VarsUi.GUSState = 100;
}
break;
default :
{
VarsUi.GUSNoname = FALSE;
if (VarsUi.GUSCursor < StrSets[Type].MaxStringLength)
{
VarsUi.UserString[VarsUi.GUSCursor] = StrSets[Type].Figures[VarsUi.FigurePointer];
VarsUi.GUSCursor++;
VarsUi.UserString[VarsUi.GUSCursor] = 0;
VarsUi.GUSState -= 2;
}
}
break;
}
}
break;
case BUTTON_RIGHT :
{
if (VarsUi.FigurePointer < (StrSets[Type].NoOfFigures - 1))
{
VarsUi.FigurePointer++;
}
else
{
VarsUi.FigurePointer = 0;
}
pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
VarsUi.GUSState -= 2;
}
break;
case BUTTON_EXIT :
{
if (VarsUi.GUSCursor)
{
if (VarsUi.GUSNoname == TRUE)
{
VarsUi.GUSNoname = FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -