123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #ifndef NULLSOFT_API_PLAYLIST_COLOURISER_H
- #define NULLSOFT_API_PLAYLIST_COLOURISER_H
- /*
- ** Wasabi Playlist Colouriser API Interface v1.0
- ** Note: This requires JTFE v1.2 and higher to work
- ** (Released: 28/09/2010)
- **
- **
- ** This header file provides the interfaces implemented by the JTFE plugin for other plugins and services to
- ** be able to make use of it's playlist colouriser which allows for highlighting of playlist entries in a
- ** different style to that currently defined by the skin in use to make for example queued items more visible.
- **
- ** The interface allows for controlling aspects of the text colour and the background of playlist item entries
- ** as long as they exist in the playlist editor or there is data to show e.g. you cannot change the text colour
- ** of the time entry if there is no time entry shown such as for missing files or streams of unknown length).
- **
- ** When specifying a colour, if you want the default skin colours to be used then you need to set the colour to
- ** be -1
- **
- ** To use this api assumes you know already how to make use of the wasabi service based system
- ** (see the more complete examples provided in the SDK).
- **
- **
- ** Example:
- **
- ** The following psuedo code shows how to show a flashing inverted selection on the first item being queried in
- ** the current playlist editor's contents.
- **
- ** // this will setup an inverted entry when the playlist is queried to be painted
- ** // you could setup a timer to cause a playlist painting event to make it flash
- ** // if you toggle the returned state on and off in the ExampleCheck(..) callback
- ** Colouriser ExampleColouriser = {COLOURISER_FULL_BKGND | COLOURISER_FULL_TEXT |
- ** COLOURISER_INVERTED | COLOURISER_INVERTED_TEXT,
- ** 0,-1,-1,-1,-1, ExampleCheck};
- **
- ** int ExampleCheck(int idx, wchar_t* file){
- ** // will only apply the colouring on the first playlist item
- ** return (idx == 0);
- ** }
- **
- ** // use this to get an instance of the service (returns null or 1 on error or not supported)
- ** if(!WASABI_API_COLOURISER) ServiceBuild(WASABI_API_COLOURISER,PlaylistColouriserApiGUID);
- **
- **
- ** // this can be used to add or update an existing colouriser instance
- ** // using COLOURISER_DISABLED in the flags to disable it if not needed
- ** if(!WASABI_API_COLOURISER->ColouriserExists(&ExampleColouriser)){
- ** WASABI_API_COLOURISER->AddColouriser(&ExampleColouriser);
- ** }
- ** else{
- ** WASABI_API_COLOURISER->UpdateColouriser(&ExampleColouriser);
- ** }
- **
- ** // with the above, if you wanted to change the code to just change the text
- ** // colour of playlist item then you could use something like the following:
- ** ExampleColouriser.flags = COLOURISER_FULL_TEXT;
- ** ExampleColouriser.main_text = ExcludeColouriser.time_text = <specify_your_colour>;
- */
- #if (_MSC_VER <= 1200)
- typedef int intptr_t;
- #endif
- #ifdef __cplusplus
- #include <bfc/dispatch.h>
- typedef struct{
- #define COLOURISER_TIME_BKGND 0x01 // override the time column background colour - uses time_bkgnd
- #define COLOURISER_MAIN_BKGND 0x02 // override the main column background colour - uses main_bkgnd
- #define COLOURISER_MAIN_BKGND_ALT 0x04 // allows for a different colour for the main column background
- #define COLOURISER_FULL_BKGND COLOURISER_MAIN_BKGND | COLOURISER_TIME_BKGND
- #define COLOURISER_TIME_TEXT 0x10 // override the time column text colour - uses time_text
- #define COLOURISER_MAIN_TEXT 0x20 // override the main column text colour - uses main_text
- #define COLOURISER_FULL_TEXT COLOURISER_TIME_TEXT | COLOURISER_MAIN_TEXT
- #define COLOURISER_BLEND 0x40 // will attempt to blend the colour with the existing colours
- #define COLOURISER_DISABLED 0x1000 // set this when you require your colouriser to be ignored
- #define COLOURISER_INVERTED 0x2000 // if colours are specified as -1 then use the inverse of the current skin values
- #define COLOURISER_INVERTED_TEXT 0x4000 // if colours are specified as -1 then use the inverse of the current skin values
- // this will only be used if COLOURISER_INVERTED is already specified
- int flags; // determine which colours are to be used / handled
- int _me; // used to identify the colouriser - don't alter!!!
-
- // when using ColouriserColour(..) the value for query_colour is shown to the right
- COLORREF time_bkgnd; // 0
- COLORREF main_bkgnd; // 1
- COLORREF time_text; // 2
- COLORREF main_text; // 3
- // callback function to see if the colouriser's colours need to be used on the passed playlist item
- int (*check)(int entry_index, wchar_t* entry_filepath);
- } Colouriser;
- class api_playlist_colouriser : public Dispatchable
- {
- protected:
- api_playlist_colouriser() {}
- ~api_playlist_colouriser() {}
- public:
- BOOL AddColouriser(Colouriser* colouriser);
- Colouriser* UpdateColouriser(Colouriser* colouriser);
- BOOL ColourPicker(HWND parent_hwnd, UINT control_id, UINT options_id, Colouriser* colouriser, wchar_t* window_title, wchar_t* button_text);
- BOOL ColouriserExists(Colouriser* colouriser);
- COLORREF ColouriserColour(COLORREF current_colour, UINT query_colour);
- public:
- DISPATCH_CODES
- {
- API_COLOURISER_ADD = 1,
- API_COLOURISER_UPDATE = 2,
- API_COLOURISER_COLOURPICKER = 3,
- API_COLOURISER_EXISTS = 4,
- API_COLOURISER_COLOUR = 5,
- };
- };
- inline BOOL api_playlist_colouriser::AddColouriser(Colouriser* colouriser)
- {
- return _call(API_COLOURISER_ADD, (BOOL)0, colouriser);
- }
- inline Colouriser* api_playlist_colouriser::UpdateColouriser(Colouriser* colouriser)
- {
- return _call(API_COLOURISER_UPDATE, (Colouriser*)0, colouriser);
- }
- inline BOOL api_playlist_colouriser::ColourPicker(HWND parent_hwnd, UINT control_id, UINT options_id, Colouriser* colouriser, wchar_t* window_title, wchar_t* button_text)
- {
- return _call(API_COLOURISER_COLOURPICKER, (BOOL)0, parent_hwnd, control_id, options_id, colouriser, window_title, button_text);
- }
- inline BOOL api_playlist_colouriser::ColouriserExists(Colouriser* colouriser)
- {
- return _call(API_COLOURISER_EXISTS, (BOOL)0, colouriser);
- }
- inline COLORREF api_playlist_colouriser::ColouriserColour(COLORREF current_colour, UINT query_colour)
- {
- return _call(API_COLOURISER_COLOUR, (COLORREF)0, current_colour, query_colour);
- }
- #endif
- // {B8B8DA7C-1F35-4a6d-95FA-C7E9651D5DC0}
- static const GUID PlaylistColouriserApiGUID =
- { 0xb8b8da7c, 0x1f35, 0x4a6d, { 0x95, 0xfa, 0xc7, 0xe9, 0x65, 0x1d, 0x5d, 0xc0 } };
- #endif
|