winamp/Src/Wasabi/api/skin/widgets/text.h
2024-09-24 14:54:57 +02:00

241 lines
6.3 KiB
C++

//PORTABLE
#ifndef _TEXT_H
#define _TEXT_H
#include <api/script/script.h>
#include <api/script/objects/guiobj.h>
#include <api/wnd/wndclass/guiobjwnd.h>
#include <bfc/string/StringW.h>
#include <bfc/depend.h>
#include "textbase.h"
#include <api/syscb/callbacks/svccbi.h>
#include <api/syscb/callbacks/skincb.h>
#define TEXT_PARENT TextBase
class svc_textFeed;
class TextScriptController : public GuiObjectScriptController {
public:
virtual const wchar_t *getClassName();
virtual const wchar_t *getAncestorClassName();
virtual ScriptObjectController *getAncestorController() { return guiController; }
virtual int getNumFunctions();
virtual const function_descriptor_struct *getExportedFunctions();
virtual GUID getClassGuid();
virtual ScriptObject *instantiate();
virtual void destroy(ScriptObject *o);
virtual void *encapsulate(ScriptObject *o);
virtual void deencapsulate(void *o);
private:
static function_descriptor_struct exportedFunction[];
};
extern TextScriptController *textController;
#include <api/wnd/wndclass/clickwnd.h>
#ifdef WASABI_COMPILE_MEDIACORE
#include <api/syscb/callbacks/corecbi.h>
class Text : public TEXT_PARENT, public CoreCallbackI, public DependentViewerI, public SvcCallbackI{
#else
class Text : public TEXT_PARENT, public DependentViewerI, public SvcCallbackI {
#endif
public:
Text();
virtual ~Text();
virtual int onInit();
virtual int onBufferPaint(BltCanvas *canvas, int w, int h);
virtual int onLeftButtonDown(int x, int y);
virtual int onMouseMove(int x, int y);
virtual int onLeftButtonUp(int x, int y);
virtual int getPreferences(int what);
virtual int setXuiParam(int xuihandle, int attribid, const wchar_t *name, const wchar_t *strval);
virtual const wchar_t *vcpu_getClassName();
virtual ScriptObjectController *vcpu_getController() { return textController; }
virtual int getTextWidth();
virtual int onDeferredCallback(intptr_t p1, intptr_t p2);
virtual void getBufferPaintSize(int *w, int *h);
virtual void getBufferPaintSource(RECT *r);
virtual void onNewBuffer(int w, int h) { BufferPaintWnd::onNewBuffer(w, h); invalidateTextBuffer(); }
int setTextSize(int newsize, int alt=0);
void setTickering(int enable);
void setDisplay(int disp);
void setShadowColor(ARGB32 c, int alt=0);
void setShadowX(int x, int alt=0); // relative offsets
void setShadowY(int y, int alt=0);
void setTimeTTS(int tts);
void resetTicker();
void setTimeColonWidth(int w);
int getTimeColonWidth(int def);
void setTimerOffStyle(int o);
void setTimerHours(int o);
void setTimerHoursRollover(int o);
const wchar_t *getLastText() { return lasttxt; }
void setAlternateName(const wchar_t *s);
const wchar_t *getAlternateName(void);
void setText(const wchar_t *t);
void addCBSource(const wchar_t *cbsource);
virtual void onTextChanged(const wchar_t *txt);
virtual void onSetName();
virtual void advanceTicker(int *upd);
virtual void setTimeDisplayMode(int remaining); // will only do so if text is displaying time in the first place
ARGB32 getShadowColor(int alt=0);
#ifdef WASABI_COMPILE_MEDIACORE
// core callbacks
virtual int corecb_onStatusMsg(const wchar_t *text);
virtual int corecb_onInfoChange(const wchar_t *text);
virtual int corecb_onStarted();
virtual int corecb_onStopped();
virtual int corecb_onSeeked(int newpos);
virtual int corecb_onBitrateChange(int kbps);
virtual int corecb_onSampleRateChange(int hz);
#endif
static void textOut(Canvas *canvas, int x, int y, const wchar_t *txt, wchar_t widthchar, const Wasabi::FontInfo *fontInfo);
virtual int viewer_onEvent(api_dependent *item, const GUID *classguid, int event, intptr_t param, void *ptr, size_t ptrlen);
virtual int triggerEvent(int event, intptr_t p1, intptr_t p2);
const wchar_t *getPrintedText();
virtual void svccb_onSvcRegister(FOURCC type, waServiceFactory *svc);
void initDisplay();
void invalidateTextBuffer();
enum {
TEXT_SETDISPLAY=0,
TEXT_SETTICKER,
TEXT_SETTEXT,
TEXT_SETSHADOWCOLOR,
TEXT_SETALTSHADOWCOLOR,
TEXT_SETSHADOWX,
TEXT_SETSHADOWY,
TEXT_SETALTSHADOWX,
TEXT_SETALTSHADOWY,
TEXT_SETTIMEROFFSTYLE,
TEXT_SETTIMERHOURS,
TEXT_SETTIMECOLONWIDTH,
TEXT_SETNOGRAB,
TEXT_SETSHOWLEN,
TEXT_SETFORCEFIXED,
TEXT_SETFORCEUPCASE,
TEXT_SETFORCELOCASE,
TEXT_SETCBSOURCE,
TEXT_SETWRAPPED,
TEXT_SETVALIGN,
TEXT_SETALTVALIGN,
TEXT_SETDBLCLKACTION,
TEXT_SETRCLKACTION,
TEXT_SETOFFSETX,
TEXT_SETOFFSETY,
TEXT_SETTICKERSTEP,
TEXT_SETTIMERHOURSROLLOVER,
TEXT_NUMPARAMS,
};
protected:
/*static */void CreateXMLParameters(int master_handle);
virtual void timerCallback(int id);
private:
static XMLParamPair params[];
const wchar_t *parseText(const wchar_t *s);
void registerToTextFeedService();
int size[2];
int textpos,tts,sens;
int time_tts;
int grab_x;
int cur_len;
int ticker;
int display;
int elapsed;
int fixedTimerStyle;
int nograb;
int showlen;
int forcefixed;
int timeroffstyle;
StringW displaystr;
StringW alternatename;
StringW lastText;
FilteredColor shadowcolor[2];
SkinColor sshadowcolor[2];
int shadowcolor_mode[2];
int shadowx[2], shadowy[2];
int timecolonw;
StringW deftext;
PtrList<StringW> mycbid;
StringW cbsource;
int forceupcase, forcelocase;
StringW lasttxt;
int lastautowidth;
svc_textFeed *textfeed;
StringW feed_id;
int registered_syscb;
int wrapped;
int valign[2];
int xuihandle;
int offsetx, offsety;
StringW printedtxt;
int tickerstep;
int skipn;
int skip;
int skipcfgcount;
int timerhours;
int timerhoursRollover;
int bufferinvalid;
int cachedsizew;
public:
static scriptVar script_vcpu_setText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar t);
static scriptVar script_vcpu_setAlternateText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar t);
static scriptVar script_vcpu_getText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar script_vcpu_getTextWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
static scriptVar script_vcpu_onTextChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar text);
static wchar_t s_txt[WA_MAX_PATH];
};
extern const wchar_t textXuiObjectStr[];
extern char textXuiSvcName[];
class TextXuiSvc : public XuiObjectSvc<Text, textXuiObjectStr, textXuiSvcName> {};
#endif