nx-hbmenu/common/menu.h
Chris Bradel 45efcfcb98
added momentum to touch drags (#124)
* added momentum to touch drags
2020-06-26 11:35:11 -04:00

140 lines
3.0 KiB
C

#pragma once
#ifndef _WIN32
#include <arpa/inet.h>
#else
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <ws2tcpip.h>
#undef DrawText
#undef MessageBox
#endif
#define ENTRY_NAMELENGTH 0x200
#define ENTRY_AUTHORLENGTH 0x100
#define ENTRY_VERLENGTH 0x10
#define ENTRY_ARGBUFSIZE 0x400
typedef enum
{
ENTRY_TYPE_FILE,
ENTRY_TYPE_FOLDER,
ENTRY_TYPE_THEME,
ENTRY_TYPE_FILEASSOC,
ENTRY_TYPE_FILE_OTHER,
} MenuEntryType;
typedef struct menuEntry_s_tag menuEntry_s;
typedef struct menu_s_tag menu_s;
struct menu_s_tag
{
menuEntry_s *firstEntry, *lastEntry;
int nEntries;
int curEntry;
int xPos;
int slideSpeed;
char dirname[PATH_MAX+1];
};
typedef struct
{
char* dst;
uint32_t buf[ENTRY_ARGBUFSIZE/sizeof(uint32_t)];
struct in_addr nxlink_host;
} argData_s;
struct menuEntry_s_tag
{
menu_s* menu;
menuEntry_s* next;
MenuEntryType type;
char path[PATH_MAX+8];
char starpath[PATH_MAX+8];
argData_s args;
bool fileassoc_type;//0=file_extension, 1 = filename
char fileassoc_str[PATH_MAX+1];//file_extension/filename
char name[ENTRY_NAMELENGTH+1];
char author[ENTRY_AUTHORLENGTH+1];
char version[ENTRY_VERLENGTH+1];
uint8_t *icon;
size_t icon_size;
uint8_t *icon_gfx;
uint8_t *icon_gfx_small;
bool starred;
NacpStruct *nacp;
};
typedef enum
{
IMAGE_MODE_RGB24,
IMAGE_MODE_RGBA32
} ImageMode;
extern double menuTimer;
#ifdef __cplusplus
extern "C" {
#endif
void menuEntryInit(menuEntry_s* me, MenuEntryType type);
void menuEntryFree(menuEntry_s* me, bool skip_icongfx);
bool fileExists(const char* path);
bool menuEntryLoad(menuEntry_s* me, const char* name, bool shortcut, bool check_exists);
void menuEntryParseIcon(menuEntry_s* me);
uint8_t *downscaleImg(const uint8_t *image, int srcWidth, int srcHeight, int destWidth, int destHeight, ImageMode mode);
void menuEntryParseNacp(menuEntry_s* me);
void menuEntryFileassocLoad(const char* filepath);
menuEntry_s* menuCreateEntry(MenuEntryType type);
void menuFileassocAddEntry(menuEntry_s* me);
void menuDeleteEntry(menuEntry_s* me, bool skip_icongfx);
menu_s* menuGetCurrent(void);
menu_s* menuFileassocGetCurrent(void);
void menuReorder (void);
int menuScan(const char* target);
int themeMenuScan(const char* target);
int menuFileassocScan(const char* target);
void launchMenuEntryTask(menuEntry_s* arg);
void toggleStarState(menuEntry_s* arg);
void launchApplyThemeTask(menuEntry_s* arg);
void launchMenuBackTask();
void launchMenuNetloaderTask();
char *menuGetRootPath(void);
char *menuGetRootBasePath(void);
void menuHandleAButton(void);
void menuHandleXButton(void);
bool menuIsNetloaderActive(void);
#ifdef __cplusplus
}
#endif
static inline char* getExtension(const char* str)
{
const char* p;
for (p = str+strlen(str); p >= str && *p != '.'; p--);
return (char*)p;
}
static inline char* getSlash(const char* str)
{
const char* p;
for (p = str+strlen(str); p >= str && *p != '/'; p--);
return (char*)p;
}