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

📄 plxuilib.c

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 C
📖 第 1 页 / 共 5 页
字号:
   {"image/jpeg",					"jpeg"},
   {"image/pipeg",					"jfjf"},
   {"image/tiff",					"tiff"},
   {"image/tiff",					"tif"},
   {"image/png",					"png"},
   {"image/vnd.wap.wbmp",			"wbmp"},
   
   {"text/plain",					"txt"},
   {"text/plain",					"c"},
   {"text/plain",					"h"},
   {"text/plain",					"bas"},
   {"text/richtext",				"rtx"},
   {"text/html",					"htm"},
   {"text/html",					"html"},
   {"text/html",					"stm"},
   {"text/xml",						"xml"},
   {"text/rtf",						"rtf"},
   {"text/rtf",						"css"},
   {"text/css",						"css"},
   {"text/x-vard",					"vcf"},
   {"text/x-versit",				"ver"},
   {"text/x-calendar",				"vcs"},
   {"text/calendar",				"vcs"},
   {"text/x-imelody",				"imy"},

   {"video/mpeg",					"mpeg"},
   {"video/mpeg",					"mp2"},
   {"video/mpeg",					"mpa"},
   {"video/mpeg",					"mpe"},
   {"video/mpeg",					"mpg"},
   {"video/mpeg",					"mpv2"},
   {"video/3gpp",					"3gp"},
   {"video/quicktime",				"mov"},
   {"video/quicktime",				"qt"},
   {"video/x-la-asf",				"lsf"},
   {"video/x-la-asf",				"lsx"},
   {"video/x-ms-asf",				"asf"},
   {"video/x-ms-asf",				"asr"},
   {"video/x-ms-asf",				"asx"},
   {"video/x-msvideo",				"avi"},
   {"video/x-pn-realaudio",			"rm"},
   {"video/x-sgi-movie",			"movie"},
   {"multipart/mixed", ""},
   {NULL, NULL}
};

static char * lookUpContentTable 
	(const char * name, const char * ext);
static void FMoniterOnExit (void);
static unsigned char FMoniterOnDelete (void * data);
static unsigned long GetFreeFsSize(WCHAR * path);
static void FMoniterEntry (void);
static void DisplayMediaInfo (void);
static void MediaInfoEntry (void);
static void MediaOptionEntry (void);
static void PreviewMedia (void);
static void MakeMediaInfo (void);
static int CheckMediaType (char * ext);
#ifdef _SAVEDATA_TEMPFILE
static int SaveTempFile (WCHAR * dstPath, WCHAR * ext, void * data, int datalen);
static void SelectPath (void);
#endif

void PLIB_SaveDownloadData (void * data, int datalen, const char * contentType, 
                            const WCHAR* defFileName, int preview, void (*callback)(PLIBEVENT event))
{
	char * extention = NULL;
    
    if ( gUserNotify.cbSaveData )
        return;

    if ( data == NULL || datalen <= 0 ) {
        return;
    }

//    if ( contentType >= CONTYPECOUNT ) // invalid content type
//        return;

    gUserNotify.cbSaveData = callback;

    memset ((char*)&gSaveDataPara, 0, sizeof(gSaveDataPara));

	if ( defFileName ) {
		int length;
		char ext[(MAX_SAVEDATA_EXT+1)*2];
		WCHAR * ptr = myunicodestrchr (defFileName, '.');
		if ( ptr != NULL ) {
			UnicodeToAnsii ((char *)ext, (char *)(ptr+1));
			extention = lookUpContentTable (NULL, (const char *)ext);
			if ( extention ) {
				AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
			}
			else {
				extention = lookUpContentTable (contentType, NULL);
				if ( extention ) {
					AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
				}
				else {
					pfnUnicodeStrcpy ((char*)gSaveDataPara.ext, (char*)(ptr+1));
				}
			}
            length = ptr - defFileName;
            length = (length > MAX_SAVEDATA_NAME) ? MAX_SAVEDATA_NAME : length;
            memcpy ((char*)gSaveDataPara.name, (char*)defFileName, length*sizeof(WCHAR));
            gSaveDataPara.name[length] = 0x0000;
		}
		else {
			extention = lookUpContentTable (contentType, NULL);
			if ( extention ) {
				AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
			}
			pfnUnicodeStrncpy ((char*)gSaveDataPara.name, (char*)defFileName, MAX_SAVEDATA_NAME);
		}
	}
	else {
		extention = lookUpContentTable (contentType, NULL);
		if ( extention ) {
			AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
		}
		gSaveDataPara.name[0] = 0x0000;
	}

#ifdef _SAVEDATA_TEMPFILE
	gSaveDataPara.fhandle = SaveTempFile (gSaveDataPara.tmppath, gSaveDataPara.ext, data, datalen);
    if ( gSaveDataPara.fhandle <= 0 ) {
        if ( callback ) {
            gUserNotify.cbSaveData = NULL;
            callback (PEVENT_FSFAIL);
        }
        return;
    }
	gSaveDataPara.fsize = datalen;
#else
    gSaveDataPara.pdata = PlxAppMalloc (datalen);
    if ( gSaveDataPara.pdata == NULL ) {
		if ( callback ) {
            gUserNotify.cbSaveData = NULL;
            callback (PEVENT_FSFAIL);
        }
		return;
    }
    memcpy ((char*)gSaveDataPara.pdata, (char*)data, datalen);
    gSaveDataPara.datalen = datalen;
#endif

	EntryNewScreen (SCR_ID_PLX_UIL_FMONITOR, FMoniterOnExit, NULL, NULL);
	SetDelScrnIDCallbackHandler(SCR_ID_PLX_UIL_FMONITOR, FMoniterOnDelete);
#ifdef UILIB_DEBUG
	PlxTrace ("[PLXUILIB] before MediaInfoEntry preview = %d...", preview);
#endif

	if ( preview ) {
		MediaInfoEntry ();
	}
	else {
		SelectPath ();
	}
}

#ifdef SIMCOM_6217
static void cbInteralSelPath (void* info)
#else
static void cbInteralSelPath (void* info, int count)
#endif
{
    /* user select back */
    if ( info == NULL ) {
        SavedataNotify (PEVENT_USERABORT);
        return;
    }

    pfnUnicodeStrcpy ((char*)gSaveDataPara.path, (char*)info);
    InputFilenameEntry ();
}

static void SelectPath (void)
{
	FMGR_FILTER filter;

	AnsiiToUnicodeString ((char*)gSaveDataPara.path, (char*)DEFAULTPATH);
	FMGR_FILTER_INIT (&filter);
	FMGR_FILTER_SET(&filter, FMGR_TYPE_FOLDER);
	
#ifdef PROJECT_SIMCOM_6217
	mmi_fmgr_select_path_and_enter (APP_MULTIMEDIA, FMGR_SELECT_FOLDER, filter,
		(char*)gSaveDataPara.path, (PsFuncPtr)cbInteralSelPath);
#else
	mmi_fmgr_select_path_and_enter (APP_MULTIMEDIA, FMGR_SELECT_FOLDER, filter,
		(char*)gSaveDataPara.path, (PsExtFuncPtr)cbInteralSelPath);
#endif
}

static void MediaInfoOnExit (void);
static void MediaInfoOnCancel (void);
static void MediaInfoEntry (void)
{
    U8*	guiBuffer=NULL;
	int len;

	EntryNewScreen (SCR_ID_PLX_UIL_MEDIAINFO, 
		MediaInfoOnExit, MediaInfoEntry, NULL);
#ifdef UILIB_DEBUG
	PlxTrace ("[PLXUILIB] MediaInfoEntry...");
#endif

	MakeMediaInfo ();

	len = pfnUnicodeStrlen ((char *)gSaveDataPara.info) * 2;
    ShowCategory74Screen(STR_ID_PLX_UIL_INFO, IMG_ID_PLX_UIL_INFO, 
                        STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS,
                        STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
						(U8*)gSaveDataPara.info, len, guiBuffer);

    SetLeftSoftkeyFunction (MediaOptionEntry, KEY_EVENT_UP);
	SetRightSoftkeyFunction(MediaInfoOnCancel, KEY_EVENT_UP);
}

static void MediaInfoOnExit (void)
{

}

static void MediaInfoOnCancel (void)
{
	SavedataNotify (PEVENT_USERABORT);
}

static void MediaOptionOnCancel (void);
static void MediaOptionOnHilight (S32 idx);
static void MediaOptionEntry (void)
{
	U16 numItems;
	U16 nStrItemList[2];	/* only done and input method */
	U8* guiBuffer;

	EntryNewScreen(SCR_ID_PLX_UIL_MEDIAOPTION, NULL, MediaOptionEntry, NULL);
	guiBuffer = GetCurrGuiBuffer (SCR_ID_PLX_UIL_MEDIAOPTION);
	SetParentHandler (MENU_ID_PLX_UIL_MEDIAOPTION);
	numItems = GetNumOfChild (MENU_ID_PLX_UIL_MEDIAOPTION);
	GetSequenceStringIds(MENU_ID_PLX_UIL_MEDIAOPTION, nStrItemList);
	RegisterHighlightHandler (MediaOptionOnHilight);
	ShowCategory52Screen (STR_GLOBAL_OPTIONS, 0, 
						  STR_GLOBAL_OK, IMG_GLOBAL_OK,
						  STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
						  numItems, nStrItemList, (U16*)gIndexIconsImageList,
						  NULL, 0, 0,  guiBuffer );
	SetRightSoftkeyFunction (MediaOptionOnCancel, KEY_EVENT_UP);
	SetKeyHandler (MediaOptionOnCancel, KEY_LEFT_ARROW, KEY_EVENT_DOWN);    
}

static void MediaOptionOnCancel (void)
{
    GoBackHistory ();
}

static void MediaOptionOnHilight (S32 idx)
{
    if ( idx == 0 ) {
        SetLeftSoftkeyFunction (PreviewMedia, KEY_EVENT_UP);
		ClearKeyHandler (KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
	}
    else {
    	SetLeftSoftkeyFunction (SelectPath, KEY_EVENT_UP);
	    SetKeyHandler (SelectPath, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
    }
}

static void PreviewImage (void);
static void PreviewAudio (void);
static void PreviewVideo (void);

static void PreviewMedia (void)
{
	char ext[12];
	int type;

	UnicodeToAnsii ((char *)ext, (char *)gSaveDataPara.ext);
	type = CheckMediaType (ext);

	switch (type) {
	case MEDIA_IMAGE :
		PreviewImage ();
		break;
	case MEDIA_AUDIO :
		PreviewAudio ();
		break;
	case MEDIA_VIDEO :
		PreviewVideo ();
		break;
	default:
		DisplayPopup ((U8*)GetString(STR_ID_PLX_UIL_NOTSUPPORT), IMG_GLOBAL_ERROR, 1, 
			UI_POPUP_NOTIFYDURATION_TIME, ERROR_TONE);
		break;
	}
}

#include "gdi_include.h"
#include "wgui_categories_multimedia.h"
static void PreviewImage (void)
{
	EntryNewScreen(SCR_ID_PLX_UIL_PREVIEW, NULL,
                   PreviewImage, NULL);

	ShowCategory222Screen(	STR_ID_PLX_UIL_PREVIEW,
							IMG_ID_PLX_UIL_PREVIEW,
							0,	0,
							STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
							GDI_COLOR_WHITE,
							NULL,
							(char *)gSaveDataPara.tmppath,
							0,
							NULL);


   ClearAllKeyHandler();
   SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
}

#ifdef __MMI_AUDIO_PLAYER__
#include "mdi_datatype.h"
#include "AudioPlayerDef.h"
#include "AudioPlayerPlayList.h"
#include "AudioPlayerProt.h"
#endif
static void PreviewAudio (void)
{
#ifndef __MMI_AUDIO_PLAYER__
	DisplayPopup (STR_ID_PLX_UIL_NOTSUPPORT, IMG_GLOBAL_ERROR, 1, 
		UI_POPUP_NOTIFYDURATION_TIME, ERROR_TONE);
#else	
	mmi_audply_single_play((PU16)gSaveDataPara.tmppath, NULL);
#endif
}

#ifdef __MMI_VIDEO__
#include "VdoPlyGProt.h"
#endif

static void PreviewVideo (void)
{
#ifndef __MMI_VIDEO__
	DisplayPopup ((U8 *)GetString(STR_ID_PLX_UIL_NOTSUPPORT), IMG_GLOBAL_ERROR, 1, 
		UI_POPUP_NOTIFYDURATION_TIME, ERROR_TONE);
#else
	mmi_vdoply_entry_player_screen_from_file((char *)gSaveDataPara.tmppath, 0);
#endif
}

static void MakeMediaSize (char * out, int size);
static void MakeMediaInfo (void)
{
	char t[32];

	pfnUnicodeStrcpy (gSaveDataPara.info, 
		GetString(STR_ID_PLX_UIL_TYPE));

	AnsiiToUnicodeString(t, "\r\n");
	pfnUnicodeStrcat (gSaveDataPara.info, t);
	if ( pfnUnicodeStrlen ((char*)gSaveDataPara.ext) > 0 )
		pfnUnicodeStrcat (gSaveDataPara.info, (char*)gSaveDataPara.ext);
	else
		pfnUnicodeStrcat (gSaveDataPara.info, GetString(STR_ID_PLX_UIL_UNKNOWN));
	AnsiiToUnicodeString(t, "\r\n");
	pfnUnicodeStrcat (gSaveDataPara.info, t);

	pfnUnicodeStrcat (gSaveDataPara.info, 
		GetString(STR_ID_PLX_UIL_SIZE));

	AnsiiToUnicodeString(t, "\r\n");
	pfnUnicodeStrcat (gSaveDataPara.info, t);
	
    MakeMediaSize (t, gSaveDataPara.fsize);
	pfnUnicodeStrcat (gSaveDataPara.info, t);
}

static void MakeMediaSize (char * out, int size)
{
    int num, num1, num2;
    char t[32];

    num = (size * 10 + 1023) / 1024;

    num1 = num / 10;
    num2 = num % 10;

    if ( num1 == 0 ) {
        sprintf (t, "%dB", size);
    }
    else if ( num2 == 0 ) {
        sprintf (t, "%dK", num1);
    }
    else {
        sprintf (t, "%d.%dK", num1, num2);
    }

	AnsiiToUnicodeString(out, t);
}

static void FMoniterEntry (void)
{

}

static void FMoniterOnExit (void)
{
	history    ScrDA; /* Variable to hold the history data*/
 
	ScrDA.scrnID = SCR_ID_PLX_UIL_FMONITOR;
	ScrDA.entryFuncPtr = FMoniterEntry;
 
	AddHistory(ScrDA);
}


static unsigned char FMoniterOnDelete (void * inhis)
{
	/* unexpected exit */
	if ( !gSaveDataPara.isback ) {
		SAVEDATACALLBACK callback = gUserNotify.cbSaveData;

#ifdef _SAVEDATA_TEMPFILE
		if ( gSaveDataPara.fhandle > 0 ) {
			FS_Delete (gSaveDataPara.tmppath);
		}
#else
	 if ( gSaveDataPara.pdata )
		    PlxAppFree (gSaveDataPara.pdata);
#endif
		if ( callback ) {
			gUserNotify.cbSaveData = NULL;
			callback (PEVENT_BACKIDLE);
		}
	}

	return 0;
}

static void InputFilenameEntry (void)
{
	unsigned char* guiBuffer;
    
	EntryNewScreen (SCR_ID_PLX_UIL_INPUT, NULL, InputFilenameEntry, NULL);
	guiBuffer = GetCurrGuiBuffer (SCR_ID_PLX_UIL_INPUT);
	ShowCategory5Screen ( STR_ID_PLX_UIL_FILENAME, 0,
						  STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS,
						  STR_GLOBAL_BACK, IMG_GLOBAL_BACK, 
						  INPUT_TYPE_ALPHANUMERIC_SENTENCECASE,
						  (unsigned char*) gSaveDataPara.name,

⌨️ 快捷键说明

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