8 enum_items_callback_retrieve_item() : m_item(0) {}
22 enum_items_callback_retrieve_selection() : m_state(false) {}
28 inline bool get_state() {
return m_state;}
35 enum_items_callback_retrieve_selection_mask(
bit_array_var & p_out) : m_out(p_out) {}
38 m_out.
set(p_index,b_selected);
62 if (b_selected) m_out.
add_item(p_location);
71 enum_items_callback_count_selection(
t_size p_max) : m_max(p_max), m_counter(0) {}
76 if (++m_counter >= m_max)
return false;
81 inline t_size get_count() {
return m_counter;}
103 enum_items_callback_retrieve_selection callback;
105 return callback.get_state();
117 enum_items_callback_retrieve_item callback;
119 p_out = callback.get_item();
128 if (p_delta==0)
return true;
144 if (playlist == pfc_infinite)
return 0;
157 if (playlist == pfc_infinite)
return pfc_infinite;
164 if (playlist == pfc_infinite)
return false;
206 else return pfc_infinite;
218 if (playlist != pfc_infinite)
return playlist_rename(playlist,p_name,p_name_len);
291 if (content.
get_size() == 0)
return false;
298 for(
t_size walk = 0; walk < old.
get_size(); ++walk) itemsOld += old[walk];
299 for(
t_size walk = 0; walk < content.
get_size(); ++walk) itemsNew += content[walk];
302 bool gotNew =
false, filterNew =
false, gotRemove =
false;
304 const bool state = !itemsOld.
have_item(content[walk]);
305 if (state) gotNew =
true;
306 else filterNew =
true;
307 filterMask.set(walk, state);
310 const bool state = !itemsNew.
have_item(old[walk]);
311 if (state) gotRemove =
true;
312 removeMask.set(walk, state);
314 if (!gotNew && !gotRemove)
return false;
354 if (!api->filter_items(p_data,temp))
370 if (!api->process_locations(p_urls,temp,
true,0,0,p_parentwnd))
return false;
453 if (playlist == pfc_infinite) out =
"NJET";
470 enum_items_callback_count_selection callback(p_max);
472 return callback.get_count();
485 if (index == pfc_infinite)
return false;
502 if (
stricmp_utf8_ex(temp,temp.length(),p_name,p_name_length) == 0)
return n;
520 if (index != pfc_infinite)
return index;
525 static const char new_playlist_text[] =
"New Playlist";
527 for(
t_size walk = 2; ; walk++) {
529 namebuffer << new_playlist_text <<
" (" << walk <<
")";
567 if (playlist == pfc_infinite)
589 m_table.
set(p_index,found);
590 if (found) m_found++;
594 inline t_size get_found()
const {
return m_found;}
601 if (playlist_max != pfc_infinite)
606 for(playlist_num = 0; playlist_num < playlist_max; playlist_num++ )
609 if (playlist_item_count == pfc_infinite)
break;
611 enum_items_callback_remove_list callback(temp,table);
613 if (callback.get_found()>0)
622 if (m == pfc_infinite)
return false;
623 enum_items_callback_retrieve_all_items callback(out);
634 if (playlist == pfc_infinite)
return ~0;
641 if (playlist == pfc_infinite)
return false;
648 if (playlist == pfc_infinite)
return false;
662 if (idx >= total) idx = total-1;
687 if (idx == pfc_infinite)
return false;
698 m_notify->on_aborted();
701 m_notify->on_completion(m_data);
748 p_delta = - ( (-p_delta) % (
t_ssize)total );
750 p_delta = p_delta % total;
753 if (active == pfc_infinite) {
756 active = (
t_size)(p_delta - 1);
758 active = (total + p_delta);
761 active = (
t_size) (active + total + p_delta) % total;
770 enum_items_callback_get_selected_count() : m_found() {}
771 t_size get_count()
const {
return m_found;}
773 if (b_selected) m_found++;
781 enum_items_callback_get_selected_count callback;
783 return callback.get_count();
789 enum_items_callback_find_item(
metadb_handle_ptr p_lookingFor) : m_result(pfc_infinite), m_lookingFor(p_lookingFor) {}
790 t_size result()
const {
return m_result;}
792 if (p_location == m_lookingFor) {
805 enum_items_callback_find_item_selected(
metadb_handle_ptr p_lookingFor) : m_result(pfc_infinite), m_lookingFor(p_lookingFor) {}
806 t_size result()
const {
return m_result;}
808 if (b_selected && p_location == m_lookingFor) {
822 enum_items_callback_find_item callback(p_item);
824 t_size result = callback.result();
825 if (result == pfc_infinite)
return false;
830 enum_items_callback_find_item_selected callback(p_item);
832 t_size result = callback.result();
833 if (result == pfc_infinite)
return false;
845 if (playlist == pfc_infinite)
return false;
850 if (playlist == pfc_infinite)
return pfc_infinite;
864 const t_size total = recycler_get_count();
865 for(
t_size walk = 0; walk < total; ++walk) {
t_size playlist_get_selected_count(t_size p_playlist, bit_array const &p_mask)
t_size activeplaylist_get_item_count()
void to_handles_async_ex(t_uint32 p_op_flags, HWND p_parentwnd, service_ptr_t< process_locations_notify > p_notify)
Generic service for receiving notifications about async operation completion. Used by various other s...
metadb_handle_ptr m_handle
t_size recycler_find_by_id(t_uint32 id)
const t_item * get_ptr() const
void activeplaylist_item_format_title(t_size p_item, titleformat_hook *p_hook, pfc::string_base &out, const service_ptr_t< titleformat_object > &p_script, titleformat_text_filter *p_filter, play_control::t_display_level p_playback_info_level)
virtual void recycler_restore(t_size which)=0
Template implementing reference-counting features of service_base. Intended for dynamic instantiation...
bool activeplaylist_redo_restore()
virtual bool playlist_lock_is_present(t_size p_playlist)=0
int SHARED_EXPORT stricmp_utf8_ex(const char *p1, t_size len1, const char *p2, t_size len2)
bool playlist_add_locations(t_size p_playlist, const pfc::list_base_const_t< const char * > &p_urls, bool p_select, HWND p_parentwnd)
bool highlight_playing_item()
Helper; highlights currently playing item; returns true on success or false on failure (not playing o...
t_size add_item(const T &item)
void activeplaylist_set_selection_single(t_size p_item, bool p_state)
void reset_playing_playlist()
metadb_handle_list m_handles
bool playlist_insert_items_filter(t_size p_playlist, t_size p_base, const pfc::list_base_const_t< metadb_handle_ptr > &p_data, bool p_select)
Generic variable bit_array implementation. Needs to be initialized with requested array size before ...
void playlist_clear(t_size p_playlist)
Clears contents of specified playlist (removes all items from it).
virtual bool playlist_is_redo_available(t_size p_playlist)=0
Returns whether a redo restore point is available for specified playlist.
virtual void playlist_set_selection(t_size p_playlist, const bit_array &p_affected, const bit_array &p_status)=0
Selects/deselects items on specified playlist.
void playlist_get_selected_items(t_size p_playlist, pfc::list_base_t< metadb_handle_ptr > &out)
bool playlist_insert_locations(t_size p_playlist, t_size p_base, const pfc::list_base_const_t< const char * > &p_urls, bool p_select, HWND p_parentwnd)
bool operator!=(const t_playback_queue_item &p_item) const
void playlist_get_items(t_size p_playlist, pfc::list_base_t< metadb_handle_ptr > &out, const bit_array &p_mask)
virtual bool playlist_rename(t_size p_index, const char *p_name, t_size p_name_length)=0
Renames specified playlist.
void add_items(const t_in &in)
bool activeplaylist_get_item_handle(metadb_handle_ptr &item, t_size p_item)
bool operator==(const t_playback_queue_item &p_item) const
bool playlist_is_item_selected(t_size p_playlist, t_size p_item)
Helper; returns whether specified item on specified playlist is selected or not.
Bit array interface class, constant version (you can only retrieve values). Range of valid indexes d...
t_size playlist_get_selection_count(t_size p_playlist, t_size p_max)
bool playlist_get_focus_item_handle(metadb_handle_ptr &p_item, t_size p_playlist)
virtual bool remove_playlists(const bit_array &p_mask)=0
Removes playlists according to specified mask. See also: bit_array.
t_size activeplaylist_set_focus_by_handle(metadb_handle_ptr p_item)
bit_array_table_t< bool > bit_array_table
virtual t_size create_playlist(const char *p_name, t_size p_name_length, t_size p_index)=0
Creates a new playlist.
bool activeplaylist_is_undo_available()
virtual t_size playlist_insert_items(t_size p_playlist, t_size p_base, const pfc::list_base_const_t< metadb_handle_ptr > &data, const bit_array &p_selection)=0
Inserts new items into specified playlist, at specified position.
virtual bool playlist_reorder_items(t_size p_playlist, const t_size *p_order, t_size p_count)=0
Reorders items in specified playlist according to specified permutation.
virtual void set_active_playlist(t_size p_index)=0
Sets active playlist (infinite to set no active playlist).
t_uint32 activeplaylist_lock_get_filter_mask()
t_size find_playlist(const char *p_name, t_size p_name_length=~0)
void filter_mask(const bit_array &mask)
bit_array_var_table_t< bool > bit_array_var_table
void activeplaylist_get_all_items(pfc::list_base_t< metadb_handle_ptr > &out)
Set this flag to make the progress dialog not steal focus on creation.
bool playlist_get_item_handle(metadb_handle_ptr &p_out, t_size p_playlist, t_size p_item)
Helper; retrieves metadb_handle of the specified playlist item. Returns true on success, false on failure (invalid parameters).
void activeplaylist_enum_items(enum_items_callback &p_callback, const bit_array &p_mask)
Set this to disable presorting (according to user settings) and duplicate removal in output list...
bool activeplaylist_undo_restore()
virtual t_size get_active_playlist()=0
Retrieves index of active playlist; infinite if no playlist is active.
Negation of another array. Valid index range is the same as valid index range of the parameter array...
bool have_item(const t_param &p_item) const
Same as contains().
virtual bool playlist_is_undo_available(t_size p_playlist)=0
Returns whether an undo restore point is available for specified playlist.
void playlist_get_selection_mask(t_size p_playlist, bit_array_var &out)
Retrieves selection map of specific playlist, using bit_array_var interface.
virtual bool playlist_execute_default_action(t_size p_playlist, t_size p_item)=0
Executes default doubleclick/enter action for specified item on specified playlist (starts playing th...
bool playlist_update_content(t_size playlist, metadb_handle_list_cref content, bool bUndoBackup)
Changes contents of the specified playlist to the specified items, trying to reuse existing playlist ...
bool activeplaylist_find_item(metadb_handle_ptr p_item, t_size &p_result)
bool activeplaylist_remove_items(const bit_array &mask)
void playlist_activate_delta(int p_delta)
bool get_all_items(pfc::list_base_t< metadb_handle_ptr > &out)
t_size create_playlist_autoname(t_size p_index=~0)
Set this flag to delay the progress dialog becoming visible, so it does not appear at all during shor...
t_size find_or_create_playlist_unlocked(const char *p_name, t_size p_name_length=~0)
virtual interface IDataObject * create_dataobject(const pfc::list_base_const_t< metadb_handle_ptr > &p_data)=0
Creates an IDataObject from specified metadb_handle list. The caller is responsible for releasing the...
t_size playlist_set_focus_by_handle(t_size p_playlist, metadb_handle_ptr p_item)
virtual void set(t_size n, bool val)=0
static void g_make_selection_move_permutation(t_size *p_output, t_size p_count, const bit_array &p_selection, int p_delta)
t_size activeplaylist_insert_items(t_size p_base, const pfc::list_base_const_t< metadb_handle_ptr > &data, const bit_array &p_selection)
virtual void set_playing_playlist(t_size p_index)=0
Sets playlist from which items to be played are taken from.
virtual void playlist_ensure_visible(t_size p_playlist, t_size p_item)=0
Tells playlist renderers to make sure that specified item is visible.
void activeplaylist_get_items(pfc::list_base_t< metadb_handle_ptr > &out, const bit_array &p_mask)
bool activeplaylist_is_item_selected(t_size p_item)
string8_fastalloc string_formatter
void set_size(t_size p_size)
bool remove_playlist(t_size p_playlist)
Helper; removes single playlist of specified index.
virtual void playlist_item_format_title(t_size p_playlist, t_size p_item, titleformat_hook *p_hook, pfc::string_base &p_out, const service_ptr_t< titleformat_object > &p_script, titleformat_text_filter *p_filter, playback_control::t_display_level p_playback_info_level)=0
Renders information about specified playlist item, using specified titleformatting script parameters...
bool activeplaylist_insert_items_filter(t_size p_base, const pfc::list_base_const_t< metadb_handle_ptr > &p_data, bool p_select)
bool activeplaylist_get_focus_item_handle(metadb_handle_ptr &item)
bool playlist_find_item(t_size p_playlist, metadb_handle_ptr p_item, t_size &p_result)
void activeplaylist_get_selection_mask(bit_array_var &out)
bool activeplaylist_rename(const char *p_name, t_size p_name_len)
void to_handles_async(bool p_filter, HWND p_parentwnd, service_ptr_t< process_locations_notify > p_notify)
void activeplaylist_ensure_visible(t_size p_item)
bool activeplaylist_replace_item(t_size p_item, const metadb_handle_ptr &p_new_item)
void playlist_get_all_items(t_size p_playlist, pfc::list_base_t< metadb_handle_ptr > &out)
void create_move_items_permutation(t_size *p_output, t_size p_count, const class bit_array &p_selection, int p_delta)
Creates a permutation that moves selected items in a list box by the specified delta-offset.
virtual void playlist_enum_items(t_size p_playlist, enum_items_callback &p_callback, const bit_array &p_mask)=0
Enumerates contents of specified playlist.
bool activeplaylist_add_items(const pfc::list_base_const_t< metadb_handle_ptr > &data, const bit_array &p_selection)
virtual void playlist_undo_backup(t_size p_playlist)=0
Creates an undo restore point for specified playlist.
bool activeplaylist_reorder_items(const t_size *order, t_size count)
virtual void playlist_set_focus_item(t_size p_playlist, t_size p_item)=0
Sets index of focus item on specified playlist; use infinite to set no focus item.
Bit array interface class, variable version (you can both set and retrieve values). As with the constant version, valid index range depends on the context.
bool playlist_find_item_selected(t_size p_playlist, metadb_handle_ptr p_item, t_size &p_result)
bool activeplaylist_get_name(pfc::string_base &p_out)
bool playlist_add_items_filter(t_size p_playlist, const pfc::list_base_const_t< metadb_handle_ptr > &p_data, bool p_select)
t_size activeplaylist_get_selection_count(t_size p_max)
t_display_level
Type used to indicate level of dynamic playback-related info displayed. Safe to use with <> opereator...
bool activeplaylist_sort_by_format(const char *spec, bool p_sel_only)
bool activeplaylist_add_items_filter(const pfc::list_base_const_t< metadb_handle_ptr > &p_data, bool p_select)
bool activeplaylist_insert_locations(t_size p_base, const pfc::list_base_const_t< const char * > &p_urls, bool p_select, HWND p_parentwnd)
bool playlist_move_selection(t_size p_playlist, int p_delta)
Moves selected items up/down in the playlist by specified offset.
virtual bool get_playing_item_location(t_size *p_playlist, t_size *p_index)=0
Retrieves playlist position of currently playing item.
Callback interface for playlist enumeration methods.
void activeplaylist_move_selection(int p_delta)
bool to_handles(pfc::list_base_t< metadb_handle_ptr > &p_out, bool p_filter, HWND p_parentwnd)
virtual bool playlist_remove_items(t_size p_playlist, const bit_array &mask)=0
Removes specified items from specified playlist. Returns true on success or false on failure (playlis...
pfc::sized_int_t< sizeof(size_t) >::t_signed t_ssize
t_size activeplaylist_get_focus_item()
void activeplaylist_clear_selection()
void activeplaylist_clear()
void playlist_clear_selection(t_size p_playlist)
bool activeplaylist_is_redo_available()
virtual t_size playlist_get_item_count(t_size p_playlist)=0
Retrieves number of items on specified playlist.
virtual bool process_locations(const pfc::list_base_const_t< const char * > &p_urls, pfc::list_base_t< metadb_handle_ptr > &p_out, bool p_filter, const char *p_restrict_mask_override, const char *p_exclude_mask_override, HWND p_parentwnd)=0
Converts one or more paths to a list of metadb_handles; displays a progress dialog. Note that this function creates modal dialog and does not return until the operation has completed.
void activeplaylist_set_selection(const bit_array &affected, const bit_array &status)
bool activeplaylist_add_locations(const pfc::list_base_const_t< const char * > &p_urls, bool p_select, HWND p_parentwnd)
void playlist_remove_selection(t_size p_playlist, bool p_crop=false)
virtual bool on_item(t_size p_index, const metadb_handle_ptr &p_location, bool b_selected)=0
bool remove_playlist_switch(t_size p_playlist)
Helper; removes single playlist of specified index, and switches to another playlist when possible...
bool activeplaylist_execute_default_action(t_size p_item)
virtual bool playlist_replace_item(t_size p_playlist, t_size p_item, const metadb_handle_ptr &p_new_item)=0
Replaces specified item on specified playlist. Returns true on success or false on failure (playlist ...
virtual bool playlist_get_name(t_size p_playlist, pfc::string_base &p_out)=0
Retrieves name of specified playlist. Should never fail unless the parameters are invalid...
void activeplaylist_get_selected_items(pfc::list_base_t< metadb_handle_ptr > &out)
pfc::com_ptr_t< interface IDataObject > create_dataobject_ex(metadb_handle_list_cref data)
Helper - returns a pfc::com_ptr_t<> rather than a raw pointer.
void activeplaylist_set_focus_item(t_size p_item)
virtual bool playlist_redo_restore(t_size p_playlist)=0
Reverts specified playlist to next redo restore point and generates an undo restore point...
void playlist_set_selection_single(t_size p_playlist, t_size p_item, bool p_state)
virtual t_size get_playlist_count()=0
Retrieves number of playlists.
void activeplaylist_undo_backup()
static bool guess_reorder_pattern(pfc::array_t< t_size > &out, const t_list1 &from, const t_list2 &to)
virtual bool playlist_undo_restore(t_size p_playlist)=0
Reverts specified playlist to last undo restore point and generates a redo restore point...
virtual t_uint32 playlist_lock_get_filter_mask(t_size p_playlist)=0
Helper template used to easily access core services. Usage: static_api_ptr_t api; api->doso...
t_size find_or_create_playlist(const char *p_name, t_size p_name_length=~0)
void active_playlist_fix()
pfc::string_list_impl m_paths
void recycler_restore_by_id(t_uint32 id)
void activeplaylist_remove_selection(bool p_crop=false)
void remove_items_from_all_playlists(const pfc::list_base_const_t< metadb_handle_ptr > &p_data)
virtual void on_completion(unsigned p_code)=0
Called when an async operation has been completed. Note that on_completion is always called from main...
bool process_location(const char *url, pfc::list_base_t< metadb_handle_ptr > &out, bool filter, const char *p_mask, const char *p_exclude, HWND p_parentwnd)
Helper - calls process_locations() with a single URL. See process_locations() for more info...
virtual t_size playlist_get_focus_item(t_size p_playlist)=0
Retrieves index of focus item on specified playlist; returns infinite when no item has focus...
virtual bool playlist_sort_by_format(t_size p_playlist, const char *p_pattern, bool p_sel_only)=0
Sorts specified playlist - entire playlist or selection only - by specified title formatting pattern...
virtual t_uint32 recycler_get_id(t_size which)=0
bool playlist_add_items(t_size playlist, const pfc::list_base_const_t< metadb_handle_ptr > &data, const bit_array &p_selection)