⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setdate.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 2 页
字号:
#define SET_DATE_MAIN_FILE

#include "winav.h"
#include "gdi.h"
#include "cc.h"
#include "oswrap.h"
#include "input.h"
#include "setup.h"
#include "osd.h"
#include "mainmenu.h"
#include "setdate.h"
#include "fontindex.h"
#include "osdnd.h"

WORD aSETDATESeparate[] = {1, CHAR_SOLIDUS};

SETDATE _SETDATESetDate[MAX_SUPPORT_SETDATE_HANDLE_NUM];
HSETDATE _hSETDATESetDateStack[MAX_SUPPORT_SETDATE_HANDLE_NUM] = {SETDATE_HANDLE_FREE, SETDATE_HANDLE_FREE, SETDATE_HANDLE_FREE};
BYTE _bSETDATEBackgroundColor[MAX_SUPPORT_MENU_HANDLE_NUM];
BYTE _bSETDATEDUIStyle[MAX_SUPPORT_MENU_HANDLE_NUM];
BYTE _bSETDATEDialogCursorPos[MAX_SUPPORT_MENU_HANDLE_NUM];
HDIALOG _hSETDATEDlg[MAX_SUPPORT_MENU_HANDLE_NUM] = {DIALOG_HANDLE_INVALID, DIALOG_HANDLE_INVALID, DIALOG_HANDLE_INVALID};

extern BYTE Calendar_GetDaysofMonth(WORD u16SolarYear, WORD u8SolarMonth);

//***************************************************************************
//  Function    :   SETDATE_Initial
//  Abstract    :   When the menu is pop-up at 1st time, this initial function will be called. 
//                  Each UI can do its control initialization and draw the UI here.
//  Arguments   :   none.
//  Return      :   nonw.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
HSETDATE SETDATE_Create(PSETDATE_DATE pDisplayDate, PSETDATE_DLG_ACTION pSetDateAction)
{
    HSETDATE hSetDate;

    hSetDate = _SETDATE_GetSetDateHandle();

    if (hSetDate != SETDATE_HANDLE_INVALID)
    {
        _SETDATESetDate[hSetDate].DisplayDate.wYear = pDisplayDate->wYear;
        _SETDATESetDate[hSetDate].DisplayDate.bMonth = pDisplayDate->bMonth;
        _SETDATESetDate[hSetDate].DisplayDate.bDate = pDisplayDate->bDate;
        _SETDATESetDate[hSetDate].DisplayDate.wStartX = pDisplayDate->wStartX;
        _SETDATESetDate[hSetDate].DisplayDate.wStartY = pDisplayDate->wStartY;

        _SETDATESetDate[hSetDate].pSetDateDlgAction = pSetDateAction;
    }

    return hSetDate;
}

HSETDATE _SETDATE_GetSetDateHandle(void)
{
    BYTE i;
    for (i = 0; i < MAX_SUPPORT_SETDATE_HANDLE_NUM; i++)
    {
        if (_hSETDATESetDateStack[i] == SETDATE_HANDLE_FREE)
        {
            _hSETDATESetDateStack[i] = i;
            return _hSETDATESetDateStack[i];
        }
    }

    return SETDATE_HANDLE_INVALID;
}

void SETDATE_Show(HSETDATE hSetDate, BYTE bBackgroundColor, BYTE bUIStyle)
{
    _bSETDATEDialogCursorPos[hSetDate] = SET_DATE_DIALOG_CURSOR_POS_YEAR;

    _bSETDATEBackgroundColor[hSetDate] = bBackgroundColor;
    _bSETDATEDUIStyle[hSetDate] = bUIStyle;

    _SETDATESetDate[hSetDate].DisplayDate.wStartX += _SETDATEDlg.wStartX;
    _SETDATESetDate[hSetDate].DisplayDate.wStartY += _SETDATEDlg.wStartY+DIALOG_TITLE_HEIGHT;

    _SETDATE_DrawAllUI(hSetDate);
}

void _SETDATE_DrawAllUI(HSETDATE hSetDate)
{
    if (_hSETDATEDlg[hSetDate] == DIALOG_HANDLE_INVALID)
    {
        _hSETDATEDlg[hSetDate] = DIALOG_CreateDialog(&_SETDATEDlg, _bSETDATEDUIStyle[hSetDate]);
    }

    if (_hSETDATEDlg[hSetDate] != DIALOG_HANDLE_INVALID)
    {
        _SETDATE_InitializeGDI(_bSETDATEDUIStyle[hSetDate]);

        DIALOG_ShowDialog(_hSETDATEDlg[hSetDate], _bSETDATEBackgroundColor[hSetDate], FALSE);    
                
        //Show time
        _SETDATE_ShowDate(hSetDate);
        
        //Show the cursor
        _SETDATE_UpdateCursor(hSetDate, FALSE);
    }
}

void _SETDATE_InitializeGDI(BYTE bUIStyle)
{
    switch (bUIStyle)
	{
    case 1:
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_TEXT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_TEXT_2, FALSE);
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_HIGHLIGHT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_HIGHLIGHT_2, FALSE);
        break;
    case 2:
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_TEXT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_TEXT_3, FALSE);
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_HIGHLIGHT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_HIGHLIGHT_3, FALSE);
        break;
    case 3:
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_TEXT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_TEXT_4, FALSE);
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_HIGHLIGHT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_HIGHLIGHT_4, FALSE);
        break;
	case 0:
    default:               
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_TEXT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_TEXT_1, FALSE);
        GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_HIGHLIGHT, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_HIGHLIGHT_1, FALSE);
        break;
    }

    GDI_ChangePALEntry(SET_TIME_DIALOG_PALETTE_ENTRY_EDIT_INFO, SET_TIME_DIALOG_PALETTE_COLOR_EDIT_INFO, FALSE);

    GDI_WaitPaletteComplete();
}

//***************************************************************************
//  Function    :   SETDATE_ProcessKey
//  Abstract    :   
//  Arguments   :   none.
//  Return      :   
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void SETDATE_ProcessKey(HSETDATE hSetDate, BYTE bKey)
{
    WORD wReturn;

    if (_bSETDATEDialogCursorPos[hSetDate] == SET_TIME_DIALOG_CURSOR_POS_BUTTON)
    {
        wReturn = DIALOG_Processkey(_hSETDATEDlg[hSetDate], bKey);        
        if (wReturn == DIALOG_ACTION_NONE)
        {
            if ((bKey == KEY_UP) || (bKey == KEY_LEFT) || (bKey == KEY_RIGHT))
            {
                DIALOG_ClearCursor(_hSETDATEDlg[hSetDate]);          
                _bSETDATEDialogCursorPos[hSetDate] = SET_DATE_DIALOG_CURSOR_POS_YEAR;
                _SETDATE_UpdateCursor(hSetDate, FALSE);
            }
        }
        else if (wReturn & DIALOG_ACTION_BUTTON_PRESSED)
        {
            if (LOBYTE(wReturn) == SET_TIME_DIALOG_BUTTON_ID_OK)
            {            
                _SETDATESetDate[hSetDate].pSetDateDlgAction->SETDATE_OK_Func_Ptr(_SETDATESetDate[hSetDate].DisplayDate.wYear, _SETDATESetDate[hSetDate].DisplayDate.bMonth, _SETDATESetDate[hSetDate].DisplayDate.bDate);
            }
            else //Cancel
            {
                _SETDATESetDate[hSetDate].pSetDateDlgAction->SETDATE_CANCEL_Func_Ptr();
            }
        }        
    }
    else
    {
        wReturn = _SETDATE_EDIT_ProcessKey(hSetDate, bKey);

#ifdef NL_SOLUTION
        if (wReturn == SETDATE_EDIT_ACTION_EXCEED_ENTER)
        {
            _SETDATESetDate[hSetDate].pSetDateDlgAction->SETDATE_OK_Func_Ptr(_SETDATESetDate[hSetDate].DisplayDate.wYear, _SETDATESetDate[hSetDate].DisplayDate.bMonth, _SETDATESetDate[hSetDate].DisplayDate.bDate);
        }
#else
        if ((wReturn == SETDATE_EDIT_ACTION_EXCEED_LEFT) || (wReturn == SETDATE_EDIT_ACTION_EXCEED_RIGHT))
        {
            _bSETDATEDialogCursorPos[hSetDate] = SET_TIME_DIALOG_CURSOR_POS_BUTTON;
            if (wReturn == SETDATE_EDIT_ACTION_EXCEED_LEFT)
            {
                DIALOG_SetCursor(_hSETDATEDlg[hSetDate], SET_TIME_DIALOG_BUTTON_ID_OK);
            }
            else
            {
                DIALOG_SetCursor(_hSETDATEDlg[hSetDate], SET_TIME_DIALOG_BUTTON_ID_CANCEL);
            }
        }
#endif //NL_SOLUTION
    }
}

BYTE _SETDATE_EDIT_ProcessKey(HSETDATE hSetDate, BYTE bKey)
{
    switch (bKey)
    {
    case KEY_UP:
        {
            //updaet the date
            switch (_bSETDATEDialogCursorPos[hSetDate])
            {
            case SET_DATE_DIALOG_CURSOR_POS_YEAR:
                _SETDATESetDate[hSetDate].DisplayDate.wYear++;
                if (_SETDATESetDate[hSetDate].DisplayDate.wYear > SETDATE_MAX_YEAR)
                {
                    _SETDATESetDate[hSetDate].DisplayDate.wYear = SETDATE_MIN_YEAR;
                }
                break;
            case SET_DATE_DIALOG_CURSOR_POS_MONTH:
                _SETDATESetDate[hSetDate].DisplayDate.bMonth++;
                if (_SETDATESetDate[hSetDate].DisplayDate.bMonth > 12)
                {
                    _SETDATESetDate[hSetDate].DisplayDate.bMonth = 1;
                }
                break;
            case SET_DATE_DIALOG_CURSOR_POS_DATE:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -