void g_update_taskbar_buttons_now(bool b_init) { if (main_window::g_ITaskbarList3.is_valid()) { static_api_ptr_t<playback_control> play_api; bool b_is_playing = play_api->is_playing(); bool b_is_paused = play_api->is_paused(); const WCHAR * ttips[6] = {L"Stop", L"Previous", (b_is_playing && !b_is_paused ? L"Pause" : L"Play"), L"Next", L"Random"}; INT_PTR bitmap_indices[] = {0, 1, (b_is_playing && !b_is_paused ? 2 : 3), 4, 5}; THUMBBUTTON tb[tabsize(bitmap_indices)]; memset(&tb, 0, sizeof(tb)); size_t i; for (i=0; i<tabsize(bitmap_indices); i++) { tb[i].dwMask = THB_BITMAP|THB_TOOLTIP/*|THB_FLAGS*/; tb[i].iId = taskbar_buttons::ID_FIRST + i; tb[i].iBitmap =bitmap_indices[i]; wcscpy_s(tb[i].szTip, tabsize(tb[i].szTip), ttips[i]); //if (tb[i].iId == ID_STOP && !b_is_playing) // tb[i].dwFlags |= THBF_DISABLED; } if (b_init) main_window::g_ITaskbarList3->ThumbBarAddButtons(g_main_window, tabsize(tb), tb); else main_window::g_ITaskbarList3->ThumbBarUpdateButtons(g_main_window, tabsize(tb), tb); } }
UTF8API_EXPORT BOOL uShellNotifyIcon(DWORD action,HWND wnd,UINT id,UINT callbackmsg,HICON icon,const char * tip) { NOTIFYICONDATA nid; NOTIFYICONDATA * p_nid = &nid; #ifdef UNICODE NOTIFYICONDATA_NEW nid_new; if (is_win2k_or_newer()) { memset(&nid_new,0,sizeof(nid_new)); nid_new.cbSize = sizeof(nid_new); nid_new.hWnd = wnd; nid_new.uID = id; nid_new.uFlags = 0; if (callbackmsg) { nid_new.uFlags |= NIF_MESSAGE; nid_new.uCallbackMessage = callbackmsg; } if (icon) { nid_new.uFlags |= NIF_ICON; nid_new.hIcon = icon; } if (tip) { nid_new.uFlags |= NIF_TIP; _tcsncpy(nid_new.szTip,string_os_from_utf8(tip),tabsize(nid_new.szTip)-1); } p_nid = reinterpret_cast<NOTIFYICONDATAW*>(&nid_new); } else #endif { memset(&nid,0,sizeof(nid)); nid.cbSize = sizeof(nid); nid.hWnd = wnd; nid.uID = id; nid.uFlags = 0; if (callbackmsg) { nid.uFlags |= NIF_MESSAGE; nid.uCallbackMessage = callbackmsg; } if (icon) { nid.uFlags |= NIF_ICON; nid.hIcon = icon; } if (tip) { nid.uFlags |= NIF_TIP; _tcsncpy(nid.szTip,string_os_from_utf8(tip),tabsize(nid.szTip)-1); } } return do_action(action,p_nid); }
static bool get_separated_index (t_size combined_index, t_size & index, t_size & subindex) { index = 0; subindex = 0; while (index < tabsize(g_artwork_sources) && g_artwork_sources[index].m_scripts->get_count() <= combined_index) { combined_index -= g_artwork_sources[index].m_scripts->get_count(); index++; } subindex = combined_index; return (index < tabsize(g_artwork_sources) && subindex < g_artwork_sources[index].m_scripts->get_count()); }
BOOL ShellNotifyIconEx(DWORD action, HWND wnd, UINT id, UINT callbackmsg, HICON icon, const char * tip, const char * balloon_title, const char * balloon_msg) { NOTIFYICONDATA nid; memset(&nid, 0, sizeof(nid)); nid.cbSize = NOTIFYICONDATA_V2_SIZE; nid.hWnd = wnd; nid.uID = id; if (callbackmsg) { nid.uFlags |= NIF_MESSAGE; nid.uCallbackMessage = callbackmsg; } if (icon) { nid.uFlags |= NIF_ICON; nid.hIcon = icon; } if (tip) { nid.uFlags |= NIF_TIP; _tcsncpy_s(nid.szTip, pfc::stringcvt::string_os_from_utf8(tip), tabsize(nid.szTip) - 1); } nid.dwInfoFlags = NIIF_INFO | NIIF_NOSOUND; //if (balloon_title || balloon_msg) { nid.uFlags |= NIF_INFO; if (balloon_title) _tcsncpy_s(nid.szInfoTitle, pfc::stringcvt::string_os_from_utf8(balloon_title), tabsize(nid.szInfoTitle) - 1); if (balloon_msg) _tcsncpy_s(nid.szInfo, pfc::stringcvt::string_os_from_utf8(balloon_msg), tabsize(nid.szInfo) - 1); } return run_action(action, reinterpret_cast<NOTIFYICONDATA*>(&nid)); }
BOOL ShellNotifyIcon(DWORD action, HWND wnd, UINT id, UINT version, UINT callbackmsg, HICON icon, const char * tip) { NOTIFYICONDATA nid; memset(&nid, 0, sizeof(nid)); nid.cbSize = NOTIFYICONDATA_V2_SIZE; nid.hWnd = wnd; nid.uID = id; nid.uFlags = 0; if (action & NIM_SETVERSION) nid.uVersion = version; if (callbackmsg) { nid.uFlags |= NIF_MESSAGE; nid.uCallbackMessage = callbackmsg; } if (icon) { nid.uFlags |= NIF_ICON; nid.hIcon = icon; } if (tip) { nid.uFlags |= NIF_TIP; _tcsncpy_s(nid.szTip, pfc::stringcvt::string_os_from_utf8(tip), tabsize(nid.szTip) - 1); } return run_action(action, &nid); }
virtual void notify_save_inline_edit(const char * value) { if (m_edit_index < tabsize(g_artwork_sources) && m_edit_subindex < g_artwork_sources[m_edit_index].m_scripts->get_count() ) { pfc::string8 & dest = (*g_artwork_sources[m_edit_index].m_scripts)[m_edit_subindex]; if (strcmp(dest, value)) { dest = value; pfc::list_t<t_list_view::t_item_insert> items; items.set_count(1); { items[0].m_groups.add_item(g_artwork_sources[m_edit_index].m_name); items[0].m_subitems.add_item(dest); } replace_items(m_edit_combined_index, items); m_changed = true; } } m_edit_subindex = pfc_infinite; m_edit_index = pfc_infinite; m_edit_combined_index = pfc_infinite; }
BOOL on_message(HWND wnd,UINT msg,WPARAM wp,LPARAM lp) { switch(msg) { case WM_INITDIALOG: { m_wnd = wnd; HWND wnd_tab = GetDlgItem(wnd, IDC_TAB1); unsigned n, count = tabsize(g_tabs_appearance); for (n=0; n<count; n++) { uTabCtrl_InsertItemText(wnd_tab, n, g_tabs_appearance[n]->get_name()); } TabCtrl_SetCurSel(wnd_tab, cfg_child_appearance); make_child(); } break; case WM_DESTROY: m_wnd = NULL; break; case WM_NOTIFY: switch (((LPNMHDR)lp)->idFrom) { case IDC_TAB1: switch (((LPNMHDR)lp)->code) { case TCN_SELCHANGE: { cfg_child_appearance = TabCtrl_GetCurSel(GetDlgItem(wnd, IDC_TAB1)); make_child(); } break; } break; } break; case WM_PARENTNOTIFY: switch(wp) { case WM_DESTROY: { if (m_wnd_child && (HWND)lp == m_wnd_child) m_wnd_child = NULL; } break; } break; } return 0; }
unsigned playlist_mclick_actions::id_to_idx(unsigned id) { unsigned n, count = tabsize(g_pma_actions); for (n=0;n<count;n++) { if (g_pma_actions[n].id == id) return n; } return 0; }
virtual bool get_help_url(pfc::string_base & p_out) { p_out = "http://yuo.be/wiki/dop:dop"; if (cfg_child < tabsize(g_tabs) && cfg_child >= 0) { g_tabs[cfg_child]->get_help_url(p_out); } return true; }
unsigned audio_chunk::g_channel_config_from_wfx(DWORD p_wfx) { unsigned ret = 0; unsigned n; for(n=0;n<tabsize(g_translation_table);n++) { if (p_wfx & g_translation_table[n].m_wfx) ret |= g_translation_table[n].m_native; } return ret; }
DWORD audio_chunk::g_channel_config_to_wfx(unsigned p_config) { DWORD ret = 0; unsigned n; for(n=0;n<tabsize(g_translation_table);n++) { if (p_config & g_translation_table[n].m_native) ret |= g_translation_table[n].m_wfx; } return ret; }
t_size g_get_info_secion_index_by_name (const char * p_name) { t_size i, count = tabsize(g_info_sections); for (i=0; i<count; i++) { if (!stricmp_utf8(p_name, g_info_sections[i].name)) return i; } return 4; }
t_size g_get_info_secion_index_by_id (t_size id) { t_size i, count = tabsize(g_info_sections); for (i=0; i<count; i++) { if (g_info_sections[i].id == id) return i; } return pfc_infinite; }
static t_size get_combined_index( t_size index, t_size subindex) { t_size i=0, ret = 0; while (i < tabsize(g_artwork_sources) && i < index) { ret += g_artwork_sources[i].m_scripts->get_count(); i++; } ret += subindex; return ret; }
static const char * optimize_infoname(const char * p_string) { for(t_size n=0;n<tabsize(standard_infonames);n++) { const char * stdstring = standard_infonames[n]; if (/*p_string[0] == stdstring[0] && */strcmp(p_string,stdstring) == 0) { return stdstring; } } return NULL; }
UTF8API_EXPORT BOOL uShellNotifyIconEx(DWORD action,HWND wnd,UINT id,UINT callbackmsg,HICON icon,const char * tip,const char * balloon_title,const char * balloon_msg) { //if (!balloon_title && !balloon_msg) return uShellNotifyIcon(action,wnd,id,callbackmsg,icon,tip); #ifdef UNICODE if (!is_win2k_or_newer()) return FALSE; NOTIFYICONDATA_NEW nid; memset(&nid,0,sizeof(nid)); nid.cbSize = sizeof(nid); nid.hWnd = wnd; nid.uID = id; if (callbackmsg) { nid.uFlags |= NIF_MESSAGE; nid.uCallbackMessage = callbackmsg; } if (icon) { nid.uFlags |= NIF_ICON; nid.hIcon = icon; } if (tip) { nid.uFlags |= NIF_TIP; _tcsncpy(nid.szTip,string_os_from_utf8(tip),tabsize(nid.szTip)-1); } nid.dwInfoFlags = NIIF_INFO | NIIF_NOSOUND; //if (balloon_title || balloon_msg) { nid.uFlags |= NIF_INFO; if (balloon_title) _tcsncpy(nid.szInfoTitle,string_os_from_utf8(balloon_title),tabsize(nid.szInfoTitle)-1); if (balloon_msg) _tcsncpy(nid.szInfo,string_os_from_utf8(balloon_msg),tabsize(nid.szInfo)-1); } return do_action(action,reinterpret_cast<NOTIFYICONDATA*>(&nid)); #else return FALSE; #endif }
static void get_group_combined_index (t_size index, t_size & combined_index_start, t_size & count) { combined_index_start = 0; count = 0; t_size i = 0; while (i < tabsize(g_artwork_sources) && i < index) { combined_index_start += g_artwork_sources[i].m_scripts->get_count(); i++; } count = g_artwork_sources[index].m_scripts->get_count(); //return (index < tabsize(g_artwork_sources) && subindex < g_artwork_sources[index].m_scripts->get_count()); }
BOOL CALLBACK DialogProc(HWND wnd,UINT msg,WPARAM wp,LPARAM lp) { switch(msg) { case WM_INITDIALOG: { HWND wnd_tab = GetDlgItem(wnd, IDC_TAB1); //uSendMessage(wnd_tab, TCM_SETMINTABWIDTH, 0, 35); unsigned n, count = tabsize(g_tabs); for (n=0; n<count; n++) { uTabCtrl_InsertItemText(wnd_tab, n, g_tabs[n]->get_name()); } TabCtrl_SetCurSel(wnd_tab, cfg_child); make_child(wnd); } break; case WM_DESTROY: break; case WM_NOTIFY: switch (((LPNMHDR)lp)->idFrom) { case IDC_TAB1: switch (((LPNMHDR)lp)->code) { case TCN_SELCHANGE: { cfg_child = TabCtrl_GetCurSel(GetDlgItem(wnd, IDC_TAB1)); make_child(wnd); } break; } break; } break; case WM_PARENTNOTIFY: switch(wp) { case WM_DESTROY: { if (child && (HWND)lp == child) child = 0; } break; } break; } return 0; }
void refresh_me(HWND wnd) { initialising = true; #if 0 HWND wnd_edit = GetDlgItem(wnd, IDC_FRONT); uSetWindowText(wnd_edit, artwork_panel::cfg_front); wnd_edit = GetDlgItem(wnd, IDC_BACK); uSetWindowText(wnd_edit, artwork_panel::cfg_back); wnd_edit = GetDlgItem(wnd, IDC_DISC); uSetWindowText(wnd_edit, artwork_panel::cfg_disc); //wnd_edit = GetDlgItem(wnd, IDC_ICON); //uSetWindowText(wnd_edit, artwork_panel::cfg_icon); #endif m_source_list.remove_items(bit_array_true()); t_size index, indexcount = tabsize(g_artwork_sources); for (index = 0; index < indexcount; index++) { t_size subindex, subindexcount = g_artwork_sources[index].m_scripts->get_count(); pfc::array_t<t_list_view::t_item_insert> items; items.set_count(subindexcount); for (subindex=0; subindex<subindexcount; subindex++) { items[subindex].m_groups.add_item(g_artwork_sources[index].m_name); items[subindex].m_subitems.add_item((*g_artwork_sources[index].m_scripts)[subindex]); } m_source_list.insert_items(m_source_list.get_item_count(), items.get_count(), items.get_ptr()); } HWND wnd_combo = GetDlgItem(wnd, IDC_FB2KARTWORK); ComboBox_AddString(wnd_combo, L"Disabled"); ComboBox_AddString(wnd_combo, L"Embedded artwork"); ComboBox_AddString(wnd_combo, L"Embedded and external artwork"); ComboBox_SetCurSel(wnd_combo, artwork_panel::cfg_fb2k_artwork_mode); wnd_combo = GetDlgItem(wnd, IDC_EDGESTYLE); ComboBox_AddString(wnd_combo, L"None"); ComboBox_AddString(wnd_combo, L"Sunken"); ComboBox_AddString(wnd_combo, L"Grey"); ComboBox_SetCurSel(wnd_combo, artwork_panel::cfg_edge_style); initialising = false; }
void make_child(HWND wnd) { //HWND wnd_destroy = child; if (child) { ShowWindow(child, SW_HIDE); DestroyWindow(child); child=0; } HWND wnd_tab = GetDlgItem(wnd, IDC_TAB1); RECT tab; GetWindowRect(wnd_tab,&tab); MapWindowPoints(HWND_DESKTOP, wnd, (LPPOINT)&tab, 2); TabCtrl_AdjustRect(wnd_tab,FALSE,&tab); unsigned count = tabsize(g_tabs); if (cfg_child >= count) cfg_child = 0; if (cfg_child < count && cfg_child >= 0) { child = g_tabs[cfg_child]->create(wnd); } //SetWindowPos(wnd_tab,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); if (child) { //uxtheme_ptr uxtheme_api; //if (uxtheme_handle::g_create(uxtheme_api)) { EnableThemeDialogTexture(child, ETDT_ENABLETAB); } } SetWindowPos(child, 0, tab.left, tab.top, tab.right-tab.left, tab.bottom-tab.top, SWP_NOZORDER); SetWindowPos(wnd_tab,HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); ShowWindow(child, SW_SHOWNORMAL); }
void make_child() { //HWND wnd_destroy = child; if (m_wnd_child) { ShowWindow(m_wnd_child, SW_HIDE); DestroyWindow(m_wnd_child); m_wnd_child=NULL; } HWND wnd_tab = GetDlgItem(m_wnd, IDC_TAB1); RECT tab; GetWindowRect(wnd_tab,&tab); MapWindowPoints(HWND_DESKTOP, m_wnd, (LPPOINT)&tab, 2); TabCtrl_AdjustRect(wnd_tab,FALSE,&tab); unsigned count = tabsize(g_tabs_appearance); if (cfg_child_appearance >= count) cfg_child_appearance = 0; if (cfg_child_appearance < count && cfg_child_appearance >= 0) { m_wnd_child = g_tabs_appearance[cfg_child_appearance]->create(m_wnd); } //SetWindowPos(child,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); if (m_wnd_child) { EnableThemeDialogTexture(m_wnd_child, ETDT_ENABLETAB); } SetWindowPos(m_wnd_child, 0, tab.left, tab.top, tab.right-tab.left, tab.bottom-tab.top, SWP_NOZORDER); SetWindowPos(wnd_tab,HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); ShowWindow(m_wnd_child, SW_SHOWNORMAL); //UpdateWindow(child); }
static const char * optimize_infoname(const char * p_string) { t_size index; if (!pfc::binarySearch<pfc::comparator_strcmp>::run(standard_infonames,0,tabsize(standard_infonames),p_string,index)) return NULL; return standard_infonames[index]; }
BOOL CALLBACK playlists_dropdown::SortDialogProc(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_INITDIALOG: { uSetWindowLong(wnd, DWL_USER, lp); HWND hCombo = uGetDlgItem(wnd, IDC_SORT_STRING); cfg::sort_string.setup_dropdown(hCombo); if (!cfg::sort_string.is_empty()) { ComboBox_SetCurSel(hCombo, 0); ComboBox_SetEditSel(hCombo, 0, -1); } SetFocus(hCombo); } return 1; case WM_CONTEXTMENU: { const HWND source = (HWND) wp; if (source != NULL && source == GetDlgItem(wnd, IDC_SORT_STRING)) { cfg::sort_string.on_context(source, lp); return TRUE; } } break; case WM_COMMAND: switch (wp) { case IDOK: { uGetDlgItemText(wnd, IDC_SORT_STRING, *reinterpret_cast< pfc::string_base * >(uGetWindowLong(wnd, DWL_USER))); pfc::string8 pattern; if (uGetDlgItemText(wnd, IDC_SORT_STRING, pattern)) { cfg::sort_string.add_item(pattern); } EndDialog(wnd, 1); } break; case IDCANCEL: EndDialog(wnd, 0); break; case IDC_FIELDS: { HMENU menu = CreatePopupMenu(); uAppendMenu(menu, MF_STRING | MF_GRAYED | MF_DISABLED, 0, "Copy to clipboard:"); uAppendMenu(menu, MF_SEPARATOR, 0, 0); for (int i = 1; i < tabsize(g_fields_list); i++) { if (!g_fields_list[i].label) break; // Only basic fields uAppendMenu(menu, MF_STRING, i, g_fields_list[i].label); } RECT rc; GetWindowRect(GetDlgItem(wnd, IDC_FIELDS), &rc); int cmd = TrackPopupMenu(menu, TPM_NONOTIFY | TPM_RETURNCMD, rc.left, rc.bottom, 0, GetDlgItem(wnd, IDC_FIELDS), 0); DestroyMenu(menu); if (cmd >= 0 && cmd < tabsize(g_fields_list) && !!g_fields_list[cmd].label) { uSetClipboardString(g_fields_list[cmd].label); } } break; } break; case WM_CLOSE: EndDialog(wnd, 0); break; } return 0; }
unsigned artwork_reader_ng_t::read_artwork(abort_callback & p_abort) { TRACK_CALL_TEXT("artwork_reader_ng_t::read_artwork"); m_bitmaps.remove_all(); bool b_loaded=false, b_extracter_attempted=false;; pfc::chain_list_v2_t<GUID>::const_iterator walk; album_art_extractor_instance_ptr p_extractor; { walk = m_requestIds.first(); for(; walk.is_valid(); ++walk) { bool b_found = false; album_art_data_ptr data; try { pfc::list_t<pfc::string8> to; if (m_repositories.query(*walk, to)) { pfc::string8 path; t_size i, count = to.get_count(); for (i=0; i<count && !b_found; i++) { if (m_handle->format_title_legacy(NULL, path, to[i], NULL)) { const char * image_extensions[] = {"jpg", "jpeg", "gif", "bmp", "png"}; t_size i, count = tabsize(image_extensions); bool b_absolute = path.find_first(':') != pfc_infinite || path.get_ptr()[0] == '\\'; pfc::string8 realPath; if (b_absolute) realPath = path; else realPath << pfc::string_directory(m_handle->get_path()) << "\\" << path; bool b_search = (realPath.find_first('*') != pfc_infinite) || (realPath.find_first('?') != pfc_infinite); bool b_search_matched = false; if (b_search) { const char * pMainPath = realPath; if (!stricmp_utf8_partial(pMainPath, "file://")) pMainPath += 7; puFindFile pSearcher = uFindFirstFile(pfc::string8() << pMainPath << ".*"); pfc::string8 searchPath = realPath; realPath.reset(); if (pSearcher) { do { const char * pResult = pSearcher->GetFileName(); for (i=0; i<count; i++) { if (!stricmp_utf8(pfc::string_extension(pResult), image_extensions[i])) { realPath << pfc::string_directory(searchPath) << "\\" << pResult; b_search_matched = true; break; } } } while (!b_search_matched && pSearcher->FindNext()); delete pSearcher; } } if (!b_search || b_search_matched) { { file::ptr file; if (b_search) { pfc::string8 canPath; filesystem::g_get_canonical_path(realPath, canPath); if (!filesystem::g_is_remote_or_unrecognized(canPath)) filesystem::g_open(file, canPath, filesystem::open_mode_read, p_abort); } else { for (i=0; i<count; i++) { pfc::string8 canPath; try { filesystem::g_get_canonical_path(pfc::string8() << realPath << "." << image_extensions[i], canPath); if (!filesystem::g_is_remote_or_unrecognized(canPath)) { filesystem::g_open(file, canPath, filesystem::open_mode_read, p_abort); break; } } catch (exception_io const &) { }; } } if (file.is_valid()) { service_ptr_t<album_art_data_impl> ptr = new service_impl_t<album_art_data_impl>; ptr->from_stream(file.get_ptr(), pfc::downcast_guarded<t_size>(file->get_size_ex(p_abort)), p_abort); b_found = true; data = ptr; } } } } } } } catch(const exception_aborted &) { throw; } catch (pfc::exception const &) { } #if 1 if (!b_found && m_native_artwork_reader_mode == artwork_panel::fb2k_artwork_embedded_and_external) { album_art_extractor_instance_v2::ptr artwork_api_v2; if (static_api_test_t<album_art_manager_v2>()) { artwork_api_v2 = static_api_ptr_t<album_art_manager_v2>()->open(pfc::list_single_ref_t<metadb_handle_ptr>(m_handle), pfc::list_single_ref_t<GUID>(*walk), p_abort); } else m_api->open(m_handle->get_path(),p_abort); { try { if (artwork_api_v2.is_valid()) data = artwork_api_v2->query(*walk, p_abort); else data = m_api->query(*walk,p_abort); b_found=true; } catch(const exception_aborted &) { throw; } catch (exception_io_not_found const &) { } catch(pfc::exception const & e) { console::formatter() << "Requested Album Art entry could not be retrieved: " << e.what(); } } } else if (!b_found && m_native_artwork_reader_mode == artwork_panel::fb2k_artwork_embedded) { { try { if (!b_extracter_attempted) { b_extracter_attempted=true; p_extractor = artwork_panel::g_get_album_art_extractor_instance(m_handle->get_path(),p_abort); } if (p_extractor.is_valid()) { data = p_extractor->query(*walk,p_abort); b_found=true; } } catch(const exception_aborted &) { throw; } catch (exception_io_not_found const &) { } catch(exception_io const & e) { console::formatter() << "Requested Album Art entry could not be retrieved: " << e.what(); } } } if (data.is_valid()) { m_bitmaps.set(*walk,pfc::rcnew_t< gdi_object_t<HBITMAP>::ptr_t >(g_create_hbitmap_from_data(data, m_cx, m_cy, m_back, m_reflection))); GdiFlush(); } } #endif #if 1 //if (!b_found) { walk = m_requestIds.first(); if (walk.is_valid() && !m_bitmaps.have_item(*walk)) { pfc::rcptr_t< gdi_object_t<HBITMAP>::ptr_t > bm; m_manager->request_nocover_image(bm, m_cx, m_cy, m_back, m_reflection, p_abort); if (bm.is_valid() && bm->is_valid()) { m_bitmaps.set(*walk,bm); GdiFlush(); } } } #endif } return 1; }
BOOL CMyPreferences::OnInitDialog(CWindow, LPARAM) { char temp[16]; SendDlgItemMessage( IDC_INDEFINITE, BM_SETCHECK, cfg_indefinite ); SendDlgItemMessage( IDC_WRITE, BM_SETCHECK, cfg_write ); SendDlgItemMessage( IDC_WNSFE, BM_SETCHECK, cfg_write_nsfe ); SendDlgItemMessage( IDC_NSFEPL, BM_SETCHECK, cfg_nsfe_ignore_playlists ); SendDlgItemMessage( IDC_NSF4011, BM_SETCHECK, cfg_nsf_ignore_w4011 ); SendDlgItemMessage( IDC_ANTISURROUND, BM_SETCHECK, cfg_spc_anti_surround ); SendDlgItemMessage( IDC_GD3JAPANESE, BM_SETCHECK, cfg_vgm_gd3_prefers_japanese ); SendDlgItemMessage( IDC_EFFECTS, BM_SETCHECK, cfg_effects_enable ); print_time_crap( cfg_default_length, (char *)&temp ); uSetDlgItemText( m_hWnd, IDC_DLENGTH, (char *)&temp ); print_time_crap( cfg_default_fade, (char *)&temp ); uSetDlgItemText( m_hWnd, IDC_DFADE, (char *)&temp ); CWindow w; w = GetDlgItem( IDC_SLIDER_BASS ); ::SendMessage( w, TBM_SETRANGE, 0, MAKELONG( 0, 255 ) ); ::SendMessage( w, TBM_SETPOS, 1, cfg_effects_bass ); w = GetDlgItem( IDC_SLIDER_TREBLE ); ::SendMessage( w, TBM_SETRANGE, 0, MAKELONG( 0, 255 ) ); ::SendMessage( w, TBM_SETPOS, 1, cfg_effects_treble ); w = GetDlgItem( IDC_SLIDER_ECHO_DEPTH ); ::SendMessage( w, TBM_SETRANGE, 0, MAKELONG( 0, 255 ) ); ::SendMessage( w, TBM_SETPOS, 1, cfg_effects_echo_depth ); int n,o; for(n=IDC_FORMAT_NSF,o=0;n<=IDC_FORMAT_SFM;n++,o++) { SendDlgItemMessage( n, BM_SETCHECK, cfg_format_enable & ( 1 << o ) ); } for(n=tabsize(srate_tab);n--;) { if (srate_tab[n] != cfg_sample_rate) { itoa(srate_tab[n], temp, 10); cfg_history_rate.add_item(temp); } } itoa( cfg_sample_rate, temp, 10 ); cfg_history_rate.add_item(temp); w = GetDlgItem( IDC_SAMPLERATE ); cfg_history_rate.setup_dropdown( w ); ::SendMessage( w, CB_SETCURSEL, 0, 0 ); w = GetDlgItem( IDC_VGMLOOPCOUNT ); uSendMessageText( w, CB_ADDSTRING, 0, "none" ); for (n = 1; n <= 10; n++) { itoa( n, temp, 10 ); uSendMessageText( w, CB_ADDSTRING, 0, temp ); } ::SendMessage( w, CB_SETCURSEL, cfg_vgm_loop_count, 0 ); enable_vgm_loop_count( !cfg_indefinite ); w = GetDlgItem( IDC_INTERPOLATION ); uSendMessageText( w, CB_ADDSTRING, 0, "None" ); uSendMessageText( w, CB_ADDSTRING, 0, "Linear" ); uSendMessageText( w, CB_ADDSTRING, 0, "Gaussian" ); uSendMessageText( w, CB_ADDSTRING, 0, "Cubic" ); uSendMessageText( w, CB_ADDSTRING, 0, "Sinc" ); ::SendMessage( w, CB_SETCURSEL, cfg_spc_interpolation + 2, 0 ); union { RECT r; POINT p [2]; }; w = GetDlgItem( IDC_GROUPBOX ); w.GetClientRect( &r ); w.MapWindowPoints( m_hWnd, &p [1], 1 ); CreateLogo( m_hWnd, p [1].x + 2, p [1].y - 181 ); return FALSE; }
LRESULT playlist_view::on_message(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_NCCREATE: wnd_playlist = wnd; initialised = true; list_playlist.add_item(this); g_playlist_message_window.add_ref(); break; case WM_CREATE: { pfc::com_ptr_t<IDropTarget_playlist> IDT_playlist = new IDropTarget_playlist(this); RegisterDragDrop(wnd, IDT_playlist.get_ptr()); if (true) { m_theme = IsThemeActive() && IsAppThemed() ? OpenThemeData(wnd, L"ListView") : NULL; SetWindowTheme(wnd, L"Explorer", NULL); } m_always_show_focus = config_object::g_get_data_bool_simple(standard_config_objects::bool_playback_follows_cursor, false); on_playlist_font_change(); create_header(true); drawing_enabled = true; m_cache.initialise(); } return 0; case WM_DESTROY: m_edit_save = false; exit_inline_edit(); m_cache.deinitialise(); RevokeDragDrop(wnd); SendMessage(wnd, WM_SETFONT, 0, 0); SendMessage(wnd_header, WM_SETFONT, 0, 0); { if (m_theme) CloseThemeData(m_theme); m_theme = NULL; } m_selection_holder.release(); break; case WM_NCDESTROY: g_playlist_message_window.release(); wnd_playlist = 0; initialised = false; list_playlist.remove_item(this); m_shown = false; // if (!list_playlist.get_count()) // { // g_playlist_entries.rebuild_all(); // } break; case WM_THEMECHANGED: { if (m_theme) CloseThemeData(m_theme); m_theme = IsThemeActive() && IsAppThemed() ? OpenThemeData(wnd, L"ListView") : 0; } break; case WM_SHOWWINDOW: if (wp == TRUE && lp == 0 && !m_shown) { static_api_ptr_t<playlist_manager> playlist_api; ensure_visible(playlist_api->activeplaylist_get_focus_item()); m_shown = true; } break; case WM_WINDOWPOSCHANGED: { LPWINDOWPOS lpwp = (LPWINDOWPOS)lp; if (!(lpwp->flags & SWP_NOSIZE)) { on_size(lpwp->cx, lpwp->cy); } } break; case WM_ERASEBKGND: return TRUE; break; case WM_PAINT: { PAINTSTRUCT ps; HDC dc_paint = BeginPaint(wnd, &ps); RECT rc_update, rc_playlist; get_playlist_rect(&rc_playlist); rc_update = ps.rcPaint; if (rc_update.top<rc_playlist.top) rc_update.top = rc_playlist.top; if (rc_update.bottom >= rc_update.top) { int item_height = get_item_height(); int start_item = (rc_update.top - rc_playlist.top) / item_height; int end_item = (rc_update.bottom - rc_playlist.top) / item_height; if (((end_item - start_item) + 1)*item_height < rc_update.bottom - rc_update.top) end_item++; { draw_items(dc_paint, start_item, 1 + (end_item - start_item)); } } EndPaint(wnd, &ps); } return 0; case WM_SETREDRAW: drawing_enabled = (wp != 0); return 0; case WM_MOUSEACTIVATE: if (GetFocus() != wnd) m_no_next_edit = true; return MA_ACTIVATE; case WM_UPDATEUISTATE: RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE); break; case WM_KILLFOCUS: RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); m_selection_holder.release(); break; case WM_SETFOCUS: //if (msg == WM_SETFOCUS && (HWND)wp != wnd) //m_no_next_edit = true; RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); m_selection_holder = static_api_ptr_t<ui_selection_manager>()->acquire(); m_selection_holder->set_playlist_selection_tracking(); break; case WM_GETDLGCODE: return DLGC_WANTALLKEYS; case WM_KEYDOWN: { static_api_ptr_t<playlist_manager> playlist_api; uie::window_ptr p_this = this; //DWORD vk_slash = VkKeyScan('/'); if (wp == VK_CONTROL) g_drag_lmb = true; if (m_prevent_wm_char_processing = process_keydown(msg, lp, wp, true)) return 0; else { SendMessage(wnd, WM_CHANGEUISTATE, MAKEWPARAM(UIS_CLEAR, UISF_HIDEFOCUS), NULL); if (wp == VK_HOME || wp == VK_DOWN || wp == VK_END || wp == VK_PRIOR || wp == VK_NEXT || wp == VK_UP) { int focus = playlist_api->activeplaylist_get_focus_item(); int total = playlist_api->activeplaylist_get_item_count(); if ((wp == VK_HOME || wp == VK_PRIOR || wp == VK_UP)) { // if (focus == 0) return 0; } if ((wp == VK_END || wp == VK_NEXT || wp == VK_DOWN)) { // if (focus == total - 1) return 0; } SCROLLINFO si; memset(&si, 0, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_PAGE | SIF_POS; GetScrollInfo(wnd_playlist, SB_VERT, &si); int offset = 0; int scroll = scroll_item_offset; if (wp == VK_HOME) scroll = 0; else if (wp == VK_PRIOR && focus == scroll_item_offset) scroll -= si.nPage; else if (wp == VK_UP) { if (focus <= scroll_item_offset) scroll = focus - 1; else if (focus > si.nPos + si.nPage - 1) scroll = focus - 1 - si.nPage + 1; } else if (wp == VK_DOWN) { if (focus < scroll_item_offset) scroll = focus + 1; else if (focus >= si.nPos + si.nPage - 1) scroll = focus + 1 - si.nPage + 1; } else if (wp == VK_END) scroll = total - 1; else if (wp == VK_NEXT && focus == si.nPos + si.nPage - 1) scroll += si.nPage; drawing_enabled = false; si.nPos = scroll; si.fMask = SIF_POS; scroll_item_offset = SetScrollInfo(wnd_playlist, SB_VERT, &si, true); if (wp == VK_HOME) offset = 0 - focus; else if (wp == VK_PRIOR) offset = scroll_item_offset - focus; else if (wp == VK_END) offset = total - focus - 1; else if (wp == VK_NEXT) offset = get_last_viewable_item() - focus; else if (wp == VK_DOWN) offset = 1; else if (wp == VK_UP) offset = -1; //if (offset) process_keydown(offset, ((HIWORD(lp) & KF_ALTDOWN) != 0), drawing_enabled, (HIWORD(lp) & KF_REPEAT) != 0); drawing_enabled = true; RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); return 0; } else if (wp == VK_SPACE) { int focus = playlist_api->activeplaylist_get_focus_item(); set_sel_single(focus, true, false, false); return 0; } else if (wp == VK_RETURN) { bool ctrl_down = 0 != (GetKeyState(VK_CONTROL) & KF_UP); int focus = playlist_api->activeplaylist_get_focus_item(); unsigned active = playlist_api->get_active_playlist(); if (ctrl_down) { if (active != -1 && focus != -1) playlist_api->queue_add_item_playlist(active, focus); } else { // playlist_api->set_playing_playlist(active); unsigned focus = playlist_api->activeplaylist_get_focus_item(); //unsigned active = playlist_api->get_active_playlist(); //playlist_api->playlist_set_playback_cursor(active, focus); playlist_api->activeplaylist_execute_default_action(focus); //static_api_ptr_t<play_control>()->play_start(play_control::track_command_settrack); } return 0; } else if (wp == VK_SHIFT) { if (!(HIWORD(lp) & KF_REPEAT)) g_shift_item_start = playlist_api->activeplaylist_get_focus_item(); } else if (wp == VK_F2) { unsigned count = g_get_cache().active_column_get_active_count(); if (count) { unsigned focus = playlist_api->activeplaylist_get_focus_item(); if (focus != pfc_infinite) { t_size i, pcount = playlist_api->activeplaylist_get_item_count(); bit_array_bittable sel(pcount); playlist_api->activeplaylist_get_selection_mask(sel); pfc::list_t<t_size> indices; indices.prealloc(32); for (i = 0; i<pcount; i++) if (sel[i]) indices.add_item(i); /*t_size start = focus, end = focus; if (sel[start] && pcount) { while (start>0 && sel[start-1]) start--; while (end<pcount-1 && sel[end+1]) end++; }*/ unsigned count = g_get_cache().active_column_get_active_count(); unsigned column; for (column = 0; column<count; column++) { if (!g_get_columns()[g_get_cache().active_column_active_to_actual(column)]->edit_field.is_empty()) { //create_inline_edit_v2(start, end-start+1, column); create_inline_edit_v2(indices, column); break; } } } } } else if (wp == VK_DELETE) { playlist_api->activeplaylist_undo_backup(); playlist_api->activeplaylist_remove_selection(); } else if (wp == VK_F3) { standard_commands::main_playlist_search(); } /*else if (vk_slash != -1 && wp == LOWORD(vk_slash)) { HWND wnd_search = m_searcher.create(wnd); on_size(); ShowWindow(wnd_search, SW_SHOWNORMAL); ; }*/ } } break; case WM_CHAR: if (!m_prevent_wm_char_processing) { //if (!(HIWORD(lp) & KF_REPEAT)) { if ((GetKeyState(VK_CONTROL) & KF_UP)) { static_api_ptr_t<playlist_manager> playlist_api; if (wp == 1) //Ctrl-A { playlist_api->activeplaylist_set_selection(bit_array_true(), bit_array_true()); return 0; } else if (wp == 26) //Ctrl-Z { playlist_api->activeplaylist_undo_restore(); return 0; } else if (wp == 25) //Ctrl-Y { playlist_api->activeplaylist_redo_restore(); return 0; } else if (wp == 24) //Ctrl-X { playlist_utils::cut(); return 0; } else if (wp == 3) //Ctrl-C { playlist_utils::copy(); return 0; } else if (wp == 6) //Ctrl-F { standard_commands::main_playlist_search(); return 0; } else if (wp == 22) //Ctrl-V { playlist_utils::paste(wnd); return 0; } } } } break; case WM_KEYUP: if (process_keydown(msg, lp, wp, true)) return 0; break; case WM_SYSKEYUP: if (process_keydown(msg, lp, wp, true)) return 0; break; case WM_SYSKEYDOWN: { uie::window_ptr p_this = this; if (m_prevent_wm_char_processing = process_keydown(msg, lp, wp, true)) return 0; } break; case WM_LBUTTONDOWN: { if (0 && g_tooltip) { MSG message; memset(&message, 0, sizeof(MSG)); message.hwnd = wnd; message.message = msg; message.wParam = wp; message.lParam = lp; uSendMessage(g_tooltip, TTM_RELAYEVENT, 0, (LPARAM)&message); } bool b_was_focused = GetFocus() == wnd; if (!b_was_focused) m_no_next_edit = true; //#ifdef INLINE_EDIT exit_inline_edit(); // g_no_next_edit = false; //#endif dragged = false; SetFocus(wnd); SetCapture(wnd); static_api_ptr_t<playlist_manager> playlist_api; g_drag_lmb = true; int focus = playlist_api->activeplaylist_get_focus_item(); drag_start_lmb.x = GET_X_LPARAM(lp); drag_start_lmb.y = GET_Y_LPARAM(lp); int item_height = get_item_height(); int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)); // int idx = ((GET_Y_LPARAM(lp) -get_header_height()) / item_height) + scroll_item_offset; // if( idx >= 0 && idx <playlist_api->activeplaylist_get_item_count() && GET_X_LPARAM(lp) < g_playlist_entries.get_total_width_actual()) if (idx >= 0) { // playlist_oper * playlist_api = playlist_api; // playlist_api->set_playback_cursor(idx); //#ifdef INLINE_EDIT m_prev_sel = (playlist_api->activeplaylist_is_item_selected(idx) && !m_wnd_edit && (playlist_api->activeplaylist_get_selection_count(2) == 1)); //#endif if (!is_visible(idx)) SendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0); if (wp & MK_CONTROL && wp & MK_SHIFT) { playlist_api->activeplaylist_move_selection(idx - focus); dragged = true; drag_type = 0; } else if (wp & MK_SHIFT) { drag_type = 2; dragitem = idx, dragstartitem = idx; int n = (cfg_alternative_sel ? focus : g_shift_item_start), t = idx; bool focus_sel = playlist_api->activeplaylist_is_item_selected(focus); set_sel_range(n, t, (cfg_alternative_sel != 0), (cfg_alternative_sel ? !focus_sel : false)); playlist_api->activeplaylist_set_focus_item(idx); dragged = true; } else if (wp & MK_CONTROL) { /* drag_type = 2; dragitem = idx,dragstartitem=idx; set_sel_single(idx, false, true, false); dragged = true;*/ } else if (playlist_api->activeplaylist_is_item_selected(idx)) { drag_type = 1; dragitem = idx, dragstartitem = idx; playlist_api->activeplaylist_undo_backup(); playlist_api->activeplaylist_set_focus_item(idx); dragged = false; } else { drag_type = 2; dragitem = idx, dragstartitem = idx;//item irrelevant actually; set_sel_single(idx, false, true, true); /* bit_array_bittable mask(playlist_api->activeplaylist_get_item_count()); // playlist_api->activeplaylist_is_item_selected_mask(mask); int n, t = playlist_api->activeplaylist_get_item_count(); for (n = 0;n <t;n++) { if (n==idx) mask.set(n, true); else mask.set(n, false); } console::info("crap"); playlist_api->set_sel_mask(mask); playlist_api->activeplaylist_set_focus_item(idx);*/ dragged = false; } } else { // console::info("wow"); // bit_array_bittable mask(playlist_api->activeplaylist_get_item_count()); playlist_api->activeplaylist_set_selection(bit_array_true(), bit_array_false()); dragged = true; drag_type = 0; } } break; case WM_RBUTTONUP: m_no_next_edit = false; break; case WM_MBUTTONUP: { m_no_next_edit = false; unsigned idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)); playlist_mclick_actions::run(cfg_playlist_middle_action, idx != -1, idx); } break; case WM_LBUTTONUP: { if (0 && g_tooltip) { MSG message; memset(&message, 0, sizeof(MSG)); message.hwnd = wnd; message.message = msg; message.wParam = wp; message.lParam = lp; uSendMessage(g_tooltip, TTM_RELAYEVENT, 0, (LPARAM)&message); } ReleaseCapture(); g_drag_lmb = false; int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), true); //((GET_Y_LPARAM(lp) -get_header_height()) / get_item_height()) + scroll_item_offset; static_api_ptr_t<playlist_manager> playlist_api; if (!dragged) { if (wp & MK_CONTROL) { // int idx_down = hittest_item(drag_start_lmb.x, drag_start_lmb.y); if (idx >= 0) set_sel_single(idx, true, true, false); } else { // int item_height = get_item_height(); // int idx = ((GET_Y_LPARAM(lp) - get_header_height()) / item_height) + scroll_item_offset; if (idx >= 0 /*&& idx < playlist_api->activeplaylist_get_item_count() && (GET_X_LPARAM(lp) < g_playlist_entries.get_total_width_actual())*/) { if (!m_no_next_edit && cfg_inline_edit && playlist_api->activeplaylist_is_item_selected(idx) && m_prev_sel /*&& !dragged*/) { //if (m_no_next_edit && GetCapture() == wnd) ReleaseCapture(); { exit_inline_edit(); if (main_window::config_get_inline_metafield_edit_mode() != main_window::mode_disabled) { m_edit_index = idx; long width; m_edit_column = hittest_column(GET_X_LPARAM(lp), width); if (m_edit_column >= 0 && !g_get_columns()[g_get_cache().active_column_active_to_actual(m_edit_column)]->edit_field.is_empty()) { m_edit_timer = (SetTimer(wnd, EDIT_TIMER_ID, GetDoubleClickTime(), 0) != 0); } } } } int focus = playlist_api->activeplaylist_get_focus_item(); set_sel_single(focus, false, false, true); } } } dragged = true; drag_type = 0; dragstartitem = 0; dragitem = 0; //#ifdef INLINE_EDIT m_no_next_edit = false; //#endif } break; case WM_MOUSEMOVE: { if (0 && g_tooltip) { MSG message; memset(&message, 0, sizeof(MSG)); message.hwnd = wnd; message.message = msg; message.wParam = wp; message.lParam = lp; uSendMessage(g_tooltip, TTM_RELAYEVENT, 0, (LPARAM)&message); } const unsigned cx_drag = (unsigned)abs(GetSystemMetrics(SM_CXDRAG)); const unsigned cy_drag = (unsigned)abs(GetSystemMetrics(SM_CYDRAG)); if (!g_dragging && ((g_dragging1 && wp & MK_RBUTTON && (abs(drag_start.x - GET_X_LPARAM(lp)) > cx_drag || abs(drag_start.y - GET_Y_LPARAM(lp)) > cy_drag)) || (g_drag_lmb && (wp & MK_LBUTTON) && (wp & MK_CONTROL) && (abs(drag_start_lmb.x - GET_X_LPARAM(lp)) > 3 || abs(drag_start_lmb.y - GET_Y_LPARAM(lp)) > 3)))) { static_api_ptr_t<playlist_manager> playlist_api; metadb_handle_list data; playlist_api->activeplaylist_get_selected_items(data); if (data.get_count() > 0) { static_api_ptr_t<playlist_incoming_item_filter> incoming_api; IDataObject * pDataObject = incoming_api->create_dataobject(data); if (pDataObject) { //RegisterClipboardFormat(_T("foo_ui_columns"); if (g_tooltip) { DestroyWindow(g_tooltip); g_tooltip = 0; last_idx = -1; last_column = -1; } DWORD blah; { pfc::com_ptr_t<IDropSource_playlist> p_IDropSource_playlist = new IDropSource_playlist(this); DoDragDrop(pDataObject, p_IDropSource_playlist.get_ptr(), DROPEFFECT_COPY, &blah); } pDataObject->Release(); } } data.remove_all(); g_dragging = false; g_dragging1 = false; g_drag_lmb = false; if (wp & MK_LBUTTON) { dragged = true; drag_type = 0; dragstartitem = 0; dragitem = 0; } } if (cfg_tooltip && (GET_Y_LPARAM(lp) > get_header_height())) { int item_height = get_item_height(); int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)); long cx; int column = hittest_column(GET_X_LPARAM(lp), cx); // unsigned act_col = g_cache.active_column_active_to_actual(column); if (column >= 0 && idx >= 0) { if (last_idx != (idx) || last_column != column) { if (!cfg_tooltips_clipped || is_item_clipped(idx, column)) { pfc::string8 src; g_cache.active_get_display_name(idx, column, src); pfc::string8 temp; titleformat_compiler::remove_color_marks(src, temp); temp.replace_char(9, 0x20); CreateToolTip(temp); } else { DestroyWindow(g_tooltip); g_tooltip = 0; last_idx = -1; last_column = -1; } POINT a; a.x = cx + 3; a.y = (idx - scroll_item_offset) * item_height + get_header_height(); ClientToScreen(wnd_playlist, &a); tooltip.top = a.y; tooltip.bottom = a.y + item_height; tooltip.left = a.x; tooltip.right = a.x + get_column_width(column); } last_idx = idx; last_column = column; } else { DestroyWindow(g_tooltip); g_tooltip = 0; last_idx = -1; last_column = -1; } } if (drag_type && (wp & MK_LBUTTON) && !(GetKeyState(VK_SHIFT) & KF_UP) && !(GetKeyState(VK_CONTROL) & KF_UP)) { RECT rc; get_playlist_rect(&rc); static_api_ptr_t<playlist_manager> playlist_api; int total = playlist_api->activeplaylist_get_item_count(); int item_height = get_item_height(); int valid_idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), false); int idx = hittest_item_no_scroll(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), false); // (GET_Y_LPARAM(lp) - get_header_height()) / (item_height); int items_count = ((rc.bottom - rc.top) / item_height) + 1; if ((idx + scroll_item_offset) != dragitem || GET_Y_LPARAM(lp) < get_header_height()) //(idx + scroll_item_offset) < playlist_api->activeplaylist_get_item_count() { if (idx >= items_count - 1) { bool need_redrawing = false; int focus = playlist_api->activeplaylist_get_focus_item(); SCROLLINFO si; memset(&si, 0, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_POS; GetScrollInfo(wnd_playlist, SB_VERT, &si); int old_offset = si.nPos; si.nPos += 3; scroll_item_offset = SetScrollInfo(wnd_playlist, SB_VERT, &si, true); if (old_offset != scroll_item_offset) need_redrawing = true; int t = scroll_item_offset + items_count - 2; //n=dragitem, if (t > total) t = total - 1; if (t != dragitem) { drawing_enabled = false; if (drag_type == 1) playlist_api->activeplaylist_move_selection((rc.bottom - rc.top) / item_height + scroll_item_offset - focus - 1); else if (drag_type == 2) { set_sel_range(dragstartitem, t, false); playlist_api->activeplaylist_set_focus_item(t); } dragitem = t; drawing_enabled = true; need_redrawing = true; } if (need_redrawing) RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } else if (idx < 0 || GET_Y_LPARAM(lp) < get_header_height() || GET_Y_LPARAM(lp) < 0) { int focus = playlist_api->activeplaylist_get_focus_item(); bool need_redrawing = false; SCROLLINFO si; memset(&si, 0, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_POS; GetScrollInfo(wnd_playlist, SB_VERT, &si); int old_offset = si.nPos; si.nPos -= 3; scroll_item_offset = SetScrollInfo(wnd_playlist, SB_VERT, &si, true); if (old_offset != scroll_item_offset) need_redrawing = true; if (dragitem != scroll_item_offset) { drawing_enabled = false; if (drag_type == 1) playlist_api->activeplaylist_move_selection(scroll_item_offset - focus); else if (drag_type == 2) { set_sel_range(dragstartitem, scroll_item_offset, false); playlist_api->activeplaylist_set_focus_item(scroll_item_offset); RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } dragitem = scroll_item_offset; drawing_enabled = true; need_redrawing = true; } if (need_redrawing) RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } else { int focus = playlist_api->activeplaylist_get_focus_item(); if (drag_type == 1) playlist_api->activeplaylist_move_selection(idx + scroll_item_offset - focus); else if (drag_type == 2) { if (valid_idx >= 0) { drawing_enabled = false; set_sel_range(dragstartitem, valid_idx, false); playlist_api->activeplaylist_set_focus_item(valid_idx); drawing_enabled = true; RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } } dragitem = valid_idx; dragged = true; } } } else if (!(wp & MK_LBUTTON)) drag_type = 0; } break; case WM_LBUTTONDBLCLK: { int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), true); if (idx >= 0) { //#ifdef INLINE_EDIT exit_inline_edit(); m_no_next_edit = true; //#endif //if (!is_visible(idx)) uSendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0),0); #if 0 // DEATH's code case WM_LBUTTONDBLCLK: { int idx = item_from_point((short)HIWORD(lp)); if (idx >= 0 && idx<(int)m_api->activeplaylist_get_item_count()) { m_api->activeplaylist_set_focus_item(idx); static_api_ptr_t<play_control>()->play_start(play_control::TRACK_COMMAND_SETTRACK); } } return 0; #endif static_api_ptr_t<playlist_manager> playlist_api; //unsigned active = playlist_api->get_active_playlist(); // playlist_api->set_playing_playlist(active); //playlist_api->playlist_set_playback_cursor(active, idx); //playlist_api->queue_flush(); unsigned focus = playlist_api->activeplaylist_get_focus_item(); playlist_api->activeplaylist_execute_default_action(focus); } else if (cfg_playlist_double.get_value().m_command != pfc::guid_null) { mainmenu_commands::g_execute(cfg_playlist_double.get_value().m_command); } dragged = true; } break; case WM_RBUTTONDOWN: { if (wnd_playlist) SetFocus(wnd_playlist); g_dragging1 = true; drag_start.x = GET_X_LPARAM(lp); drag_start.y = GET_Y_LPARAM(lp); static_api_ptr_t<playlist_manager> playlist_api; // int item_height = get_item_height(); // int idx = ((GET_Y_LPARAM(lp) - get_header_height()) / item_height) + scroll_item_offset; int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), true); if (idx != -1 && !is_visible(idx)) SendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0); if (idx >= 0 /*&& idx < playlist_api->activeplaylist_get_item_count() && (GET_X_LPARAM(lp) < g_playlist_entries.get_total_width_actual())*/) { if (!playlist_api->activeplaylist_is_item_selected(idx) && !(GetKeyState(VK_CONTROL) & KF_UP)) { set_sel_single(idx, false, false, true); } playlist_api->activeplaylist_set_focus_item(idx); } } break; case WM_MOUSEWHEEL: {//GET_WHEEL_DELTA_WPARAM exit_inline_edit(); if (1 || (wp & MK_CONTROL)) { LONG_PTR style = GetWindowLongPtr(wnd_playlist, GWL_STYLE); if (!(style & WS_VSCROLL) || ((wp & MK_CONTROL) && (style & WS_HSCROLL))) { if ((style & WS_HSCROLL)) { SCROLLINFO si; memset(&si, 0, sizeof(SCROLLINFO)); si.fMask = SIF_PAGE; si.cbSize = sizeof(SCROLLINFO); GetScrollInfo(wnd, SB_HORZ, &si); int new_pos = horizontal_offset; int old_pos = horizontal_offset; unsigned scroll_lines = GetNumScrollLines(); int zDelta = short(HIWORD(wp)); if (scroll_lines == -1) { scroll_lines = si.nPage > 1 ? si.nPage - 1 : 1; } else scroll_lines *= 3; int delta = MulDiv(zDelta, scroll_lines, 120); if (!si.nPage) si.nPage++; if (delta < 0 && delta*-1 > si.nPage) { delta = si.nPage*-1; if (delta >1) delta--; } else if (delta > 0 && delta > si.nPage) { delta = si.nPage; if (delta >1) delta--; } scroll(scroll_horizontally, scroll_position_delta, -delta); } return 1; } } SCROLLINFO si; memset(&si, 0, sizeof(SCROLLINFO)); si.fMask = SIF_PAGE; si.cbSize = sizeof(SCROLLINFO); GetScrollInfo(wnd, SB_VERT, &si); int new_pos = scroll_item_offset; int old_pos = scroll_item_offset; unsigned scroll_lines = GetNumScrollLines(); int zDelta = short(HIWORD(wp)); if (scroll_lines == -1) { scroll_lines = si.nPage > 1 ? si.nPage - 1 : 1; } int delta = MulDiv(zDelta, scroll_lines, 120); if (!si.nPage) si.nPage++; if (delta < 0 && delta*-1 > si.nPage) { delta = si.nPage*-1; if (delta >1) delta--; } else if (delta > 0 && delta > si.nPage) { delta = si.nPage; if (delta >1) delta--; } scroll(scroll_vertically, scroll_position_delta, -delta); } return 1; case WM_VSCROLL: { exit_inline_edit(); scroll(scroll_vertically, scroll_sb, LOWORD(wp)); } return 0; case WM_HSCROLL: { exit_inline_edit(); scroll(scroll_horizontally, scroll_sb, LOWORD(wp)); } return 0; case WM_MENUSELECT: { if (HIWORD(wp) & MF_POPUP) { m_status_override.release(); } else { if (g_main_menu_a.is_valid() || g_main_menu_b.is_valid()) { unsigned id = LOWORD(wp); bool set = false; pfc::string8 desc; if (g_main_menu_a.is_valid() && id < MENU_B_BASE) { set = g_main_menu_a->get_description(id - MENU_A_BASE, desc); } else if (g_main_menu_b.is_valid()) { contextmenu_node * node = g_main_menu_b->find_by_id(id - MENU_B_BASE); if (node) set = node->get_description(desc); } service_ptr_t<ui_status_text_override> p_status_override; if (set) { get_host()->override_status_text_create(p_status_override); if (p_status_override.is_valid()) { p_status_override->override_text(desc); } } m_status_override = p_status_override; } } } break; case WM_CONTEXTMENU: { uie::window_ptr p_this_temp = this; if ((HWND)wp == wnd_header) { POINT pt = { (short)LOWORD(lp), (short)HIWORD(lp) }; POINT temp; temp.x = pt.x; temp.y = pt.y; ScreenToClient(wnd_header, &temp); HDHITTESTINFO hittest; hittest.pt.x = temp.x; hittest.pt.y = temp.y; uSendMessage(wnd_header, HDM_HITTEST, 0, (LPARAM)&hittest); enum { IDM_ASC = 1, IDM_DES = 2, IDM_SEL_ASC, IDM_SEL_DES, IDM_AUTOSIZE, IDM_PREFS, IDM_EDIT_COLUMN, IDM_CUSTOM_BASE }; HMENU menu = CreatePopupMenu(); HMENU selection_menu = CreatePopupMenu(); if (!(hittest.flags & HHT_NOWHERE)) { uAppendMenu(menu, (MF_STRING), IDM_ASC, "&Sort ascending"); uAppendMenu(menu, (MF_STRING), IDM_DES, "Sort &descending"); uAppendMenu(selection_menu, (MF_STRING), IDM_SEL_ASC, "Sort a&scending"); uAppendMenu(selection_menu, (MF_STRING), IDM_SEL_DES, "Sort d&escending"); uAppendMenu(menu, MF_STRING | MF_POPUP, (UINT)selection_menu, "Se&lection"); uAppendMenu(menu, (MF_SEPARATOR), 0, ""); uAppendMenu(menu, (MF_STRING), IDM_EDIT_COLUMN, "&Edit this column"); uAppendMenu(menu, (MF_SEPARATOR), 0, ""); uAppendMenu(menu, (MF_STRING | (cfg_nohscroll ? MF_CHECKED : MF_UNCHECKED)), IDM_AUTOSIZE, "&Auto-sizing columns"); uAppendMenu(menu, (MF_STRING), IDM_PREFS, "&Preferences"); uAppendMenu(menu, (MF_SEPARATOR), 0, ""); pfc::string8 playlist_name; static_api_ptr_t<playlist_manager> playlist_api; playlist_api->activeplaylist_get_name(playlist_name); pfc::string8_fast_aggressive filter, name; int s, e = columns.get_count(); for (s = 0; s<e; s++) { bool add = false; switch (columns[s]->filter_type) { case FILTER_NONE: { add = true; break; } case FILTER_SHOW: { if (wildcard_helper::test(playlist_name, columns[s]->filter, true)) { add = true; /* g_columns.get_string(s, name, STRING_NAME); uAppendMenu(menu,MF_STRING|MF_CHECKED,IDM_CUSTOM_BASE+s,name);*/ } } break; case FILTER_HIDE: { if (!wildcard_helper::test(playlist_name, columns[s]->filter, true)) { add = true; /* g_columns.get_string(s, name, STRING_NAME); uAppendMenu(menu,MF_STRING|MF_CHECKED,IDM_CUSTOM_BASE+s,name);*/ } } break; } if (add) { uAppendMenu(menu, MF_STRING | (columns[s]->show ? MF_CHECKED : MF_UNCHECKED), IDM_CUSTOM_BASE + s, columns[s]->name); } } } else { uAppendMenu(menu, (MF_STRING | (cfg_nohscroll ? MF_CHECKED : MF_UNCHECKED)), IDM_AUTOSIZE, "&Auto-sizing columns"); uAppendMenu(menu, (MF_STRING), IDM_PREFS, "&Preferences"); } menu_helpers::win32_auto_mnemonics(menu); int cmd = TrackPopupMenu(menu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, pt.x, pt.y, 0, wnd, 0); DestroyMenu(menu); if (cmd == IDM_ASC) { g_set_sort(hittest.iItem, false); } else if (cmd == IDM_DES) { g_set_sort(hittest.iItem, true); } else if (cmd == IDM_SEL_ASC) { g_set_sort(hittest.iItem, false, true); } else if (cmd == IDM_SEL_DES) { g_set_sort(hittest.iItem, true, true); } else if (cmd == IDM_EDIT_COLUMN) { g_set_tab("Columns"); cfg_cur_prefs_col = g_cache.active_column_active_to_actual(hittest.iItem); //get_idx static_api_ptr_t<ui_control>()->show_preferences(columns::config_get_playlist_view_guid()); } else if (cmd == IDM_AUTOSIZE) { cfg_nohscroll = cfg_nohscroll == 0; update_all_windows(); pvt::ng_playlist_view_t::g_on_autosize_change(); } else if (cmd == IDM_PREFS) { static_api_ptr_t<ui_control>()->show_preferences(columns::config_get_main_guid()); } else if (cmd >= IDM_CUSTOM_BASE) { if (t_size(cmd - IDM_CUSTOM_BASE) < columns.get_count()) { columns[cmd - IDM_CUSTOM_BASE]->show = !columns[cmd - IDM_CUSTOM_BASE]->show; //g_columns //if (!cfg_nohscroll) g_save_columns(); //g_cache.flush_all(); g_reset_columns(); update_all_windows(); pvt::ng_playlist_view_t::g_on_columns_change(); } } return 0; } else if ((HWND)wp == wnd) { //DWORD mp = GetMessagePos(); POINT px, pt = { GET_X_LPARAM(lp), GET_Y_LPARAM(lp) }; static_api_ptr_t<playlist_manager> playlist_api; if (playlist_api->activeplaylist_get_selection_count(1) > 0 && 1) { if (pt.x == -1 && pt.y == -1) { int focus = playlist_api->activeplaylist_get_focus_item(); unsigned last = get_last_viewable_item(); if (focus == -1 || focus < scroll_item_offset || focus > last) { px.x = 0; px.y = 0; } else { RECT rc; get_playlist_rect(&rc); px.x = 0; unsigned item_height = get_item_height(); px.y = (focus - scroll_item_offset)*(item_height)+item_height / 2 + rc.top; } pt = px; MapWindowPoints(wnd, HWND_DESKTOP, &pt, 1); } else { px = pt; ScreenToClient(wnd, &px); //int idx = hittest_item(px.x, px.y); //if (!is_visible(idx)) // SendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0),0); } // int idx = hittest_item(px.x, px.y); enum { ID_PLAY = 1, ID_CUT, ID_COPY, ID_PASTE, ID_SELECTION, ID_CUSTOM_BASE = 0x8000 }; HMENU menu = CreatePopupMenu();//LoadMenu(core_api::get_my_instance(),MAKEINTRESOURCE(IDR_TREEPOPUP)); service_ptr_t<mainmenu_manager> p_manager_selection; service_ptr_t<contextmenu_manager> p_manager_context; p_manager_selection = standard_api_create_t<mainmenu_manager>(); contextmenu_manager::g_create(p_manager_context); if (p_manager_selection.is_valid()) { p_manager_selection->instantiate(mainmenu_groups::edit_part2_selection); p_manager_selection->generate_menu_win32(menu, ID_SELECTION, ID_CUSTOM_BASE - ID_SELECTION, standard_config_objects::query_show_keyboard_shortcuts_in_menus() ? contextmenu_manager::FLAG_SHOW_SHORTCUTS : 0); if (GetMenuItemCount(menu) > 0) uAppendMenu(menu, MF_SEPARATOR, 0, ""); } AppendMenu(menu, MF_STRING, ID_CUT, L"Cut"); AppendMenu(menu, MF_STRING, ID_COPY, L"Copy"); if (playlist_utils::check_clipboard()) AppendMenu(menu, MF_STRING, ID_PASTE, L"Paste"); AppendMenu(menu, MF_SEPARATOR, 0, NULL); if (p_manager_context.is_valid()) { const keyboard_shortcut_manager::shortcut_type shortcuts[] = { keyboard_shortcut_manager::TYPE_CONTEXT_PLAYLIST, keyboard_shortcut_manager::TYPE_CONTEXT }; p_manager_context->set_shortcut_preference(shortcuts, tabsize(shortcuts)); p_manager_context->init_context_playlist(standard_config_objects::query_show_keyboard_shortcuts_in_menus() ? contextmenu_manager::FLAG_SHOW_SHORTCUTS : 0); p_manager_context->win32_build_menu(menu, ID_CUSTOM_BASE, -1); } menu_helpers::win32_auto_mnemonics(menu); MENU_A_BASE = ID_SELECTION; MENU_B_BASE = ID_CUSTOM_BASE; g_main_menu_a = p_manager_selection; g_main_menu_b = p_manager_context; int cmd = TrackPopupMenu(menu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, pt.x, pt.y, 0, wnd, 0); if (m_status_override.is_valid()) { m_status_override.release(); } DestroyMenu(menu); if (cmd) { if (cmd == ID_CUT) { playlist_utils::cut(); } else if (cmd == ID_COPY) { playlist_utils::copy(); } else if (cmd == ID_PASTE) { playlist_utils::paste(wnd); } else if (cmd >= ID_SELECTION && cmd<ID_CUSTOM_BASE) { if (p_manager_selection.is_valid()) { p_manager_selection->execute_command(cmd - ID_SELECTION); } } else if (cmd >= ID_CUSTOM_BASE) { if (p_manager_context.is_valid()) { p_manager_context->execute_by_id(cmd - ID_CUSTOM_BASE); } } } g_main_menu_a.release(); g_main_menu_b.release(); } // contextmenu_manager::win32_run_menu_context_playlist(wnd, 0, config_object::g_get_data_bool_simple(standard_config_objects::bool_show_keyboard_shortcuts_in_menus, true) ? contextmenu_manager::FLAG_SHOW_SHORTCUTS : 0); } } return 0; //#ifdef INLINE_EDIT case WM_PARENTNOTIFY: { if (wp == WM_DESTROY) { if (m_wnd_edit && (HWND)lp == m_wnd_edit) m_wnd_edit = 0; } } break; case MSG_KILL_INLINE_EDIT: exit_inline_edit(); return 0; #if 1 case WM_COMMAND: switch (wp) { case (EN_CHANGE << 16) | 667: { m_edit_changed = true; } break; } break; #endif case WM_TIMER: { if (wp == EDIT_TIMER_ID) { create_inline_edit_v2(m_edit_index, m_edit_column); if (m_edit_timer) { KillTimer(wnd_playlist, EDIT_TIMER_ID); m_edit_timer = false; } return 0; } } break; //#endif case WM_NOTIFY: switch (((LPNMHDR)lp)->idFrom) { case ID_PLAYLIST_TOOLTIP: switch (((LPNMHDR)lp)->code) { case TTN_SHOW: RECT rc, rc_tt; rc = tooltip; GetWindowRect(g_tooltip, &rc_tt); int offset = MulDiv(get_item_height() - rc_tt.bottom + rc_tt.top, 1, 2); rc.top += offset; SetWindowPos(g_tooltip, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); return TRUE; } break; case 5001: switch (((LPNMHDR)lp)->code) { case HDN_BEGINTRACKA: case HDN_BEGINTRACKW: { return (cfg_nohscroll ? TRUE : FALSE); } case HDN_ENDDRAG: { if (((LPNMHEADERA)lp)->iButton == 0) { if (((LPNMHEADERA)lp)->pitem && (((LPNMHEADERA)lp)->pitem->mask & HDI_ORDER)) { int from = ((LPNMHEADERA)lp)->iItem; int to = ((LPNMHEADERA)lp)->pitem->iOrder; if (to >= 0 && from != to) { int act_from = g_cache.active_column_active_to_actual(from), act_to = g_cache.active_column_active_to_actual(to); columns.move(act_from, act_to); //if (!cfg_nohscroll) g_save_columns(); g_reset_columns(); update_all_windows(); pvt::ng_playlist_view_t::g_on_columns_change(); } } else { } } return (TRUE); } case HDN_DIVIDERDBLCLICK: if (!cfg_nohscroll) { static_api_ptr_t<playlist_manager> playlist_api; HDC hdc; hdc = GetDC(wnd_playlist); int size; pfc::string8 text; SelectObject(hdc, g_font); int w = 0, n, t = playlist_api->activeplaylist_get_item_count(); for (n = 0; n<t; n++) { // playlist_api->format_title(n, text, g_playlist_entries.get_display_spec(((LPNMHEADER)lp)->iItem), NULL); g_cache.active_get_display_name(n, ((LPNMHEADER)lp)->iItem, text); size = ui_helpers::get_text_width_color(hdc, text, text.length()); if (size > w) w = size; } // g_playlist_entries.get_column(((LPNMHEADER)lp)->iItem)->_set_width(w+5); columns[g_cache.active_column_active_to_actual(((LPNMHEADER)lp)->iItem)]->width = w + 15; ReleaseDC(wnd_playlist, hdc); update_all_windows(); g_save_columns(); pvt::ng_playlist_view_t::g_on_column_widths_change(); } return 0; case HDN_ITEMCLICK: { bool des = false; static_api_ptr_t<playlist_manager> playlist_api; unsigned col; bool descending; bool sorted = g_cache.active_get_playlist_sort(col, &descending); if (sorted && col == ((LPNMHEADER)lp)->iItem) des = !descending; g_set_sort(((LPNMHEADER)lp)->iItem, des /*, playlist_api->activeplaylist_get_selection_count(1) && cfg_sortsel != 0*/); } break; case HDN_ITEMCHANGED: { if (!cfg_nohscroll) { if (((LPNMHEADER)lp)->pitem->mask & HDI_WIDTH) columns[g_cache.active_column_active_to_actual(((LPNMHEADER)lp)->iItem)]->width = ((LPNMHEADER)lp)->pitem->cxy; update_all_windows(wnd_header); g_save_columns(); pvt::ng_playlist_view_t::g_on_column_widths_change(); } } break; } break; } } return uDefWindowProc(wnd, msg, wp, lp); }
virtual bool open_path_internal(file::ptr p_filehint,const char * p_path,t_input_open_reason p_reason,abort_callback & p_abort,bool p_from_redirect,bool p_skip_hints) { if (p_reason == input_open_info_write) throw exception_io_unsupported_format();//our input does not support retagging. pfc::string8 base, ext; base = p_path; t_size extpos = base.find_last('.'); if (extpos >= base.scan_filename()) { // is ext ext.set_string(base + extpos); base.truncate(extpos); } else { ext = ""; } if (m_autoprobe) { // try some known suffixes bool found = false; unsigned n; pfc::string8 work(base); t_size baselen = base.get_length(); for(n=0;n<tabsize(g_known_suffix_table);n++) { const char *head_suffix = g_known_suffix_table[n].head_suffix; const char *body_suffix = g_known_suffix_table[n].body_suffix; work.truncate(baselen); work << head_suffix << ext; if (!filesystem::g_exists(work, p_abort)) continue; work.truncate(baselen); work << body_suffix << ext; if (!filesystem::g_exists(work, p_abort)) continue; m_head.suffix = head_suffix; m_body.suffix = body_suffix; found = true; break; } if (!found) return false; } m_head.path.reset(); m_head.path << base << m_head.suffix << ext; filesystem::g_get_canonical_path(m_head.path, m_head.path); try { open_path_helper(m_head.input, NULL, m_head.path, p_abort, p_from_redirect, p_skip_hints); } catch (exception_io_not_found) { return false; } m_body.path.reset(); m_body.path << base << m_body.suffix << ext; filesystem::g_get_canonical_path(m_body.path, m_body.path); try { open_path_helper(m_body.input, NULL, m_body.path, p_abort, p_from_redirect, p_skip_hints); } catch (exception_io_not_found) { console::formatter() << "loop twofiles: body file not found: \"" << file_path_display(m_body.path) << "\""; return false; } if (m_head.input.is_empty() || m_body.input.is_empty()) return false; m_points.remove_all(); loop_event_point_twofiles_eof * point = new service_impl_t<loop_event_point_twofiles_eof>(); m_points.add_item(point); switch_points(m_points); file_info_impl p_info; m_head.input->get_info(0, p_info, p_abort); m_head.samples = p_info.info_get_length_samples(); p_info.reset(); m_body.input->get_info(0, p_info, p_abort); m_body.samples = p_info.info_get_length_samples(); switch_to(m_head); return true; }
track_property_callback_itemproperties::track_property_callback_itemproperties() : m_values(tabsize(g_info_sections)) { }
unsigned playlist_mclick_actions::get_count() { return tabsize(g_pma_actions); }
BOOL CALLBACK playlists_dropdown::preferences::DisplayDlgProc(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case MSG_UPDATEPREVIEW: { static_api_ptr_t<playlist_manager> pm; t_size playlist = pm->get_active_playlist(); if (playlist != pfc_infinite) { static_api_ptr_t<titleformat_compiler> cmp; titleformat_object::ptr title_format; if (cmp->compile(title_format, cfg::title_string)) { titleformat_hook_impl_splitter hook(titleformat_hook_impl_splitter( &title_format_hook(playlist, false), &titleformat_hook_impl_list(playlist, pm->get_playlist_count()))); pfc::string8 title; title_format->run(&hook, title, NULL); pfc::string8 preview; cmp->remove_color_marks(title, preview); preview.replace_char('\t', ' '); uSetDlgItemText(wnd, IDC_PREVIEW, preview); } else { uSetDlgItemText(wnd, IDC_PREVIEW, "COMPILATION ERROR"); } } else { uSetDlgItemText(wnd, IDC_PREVIEW, "N/A"); } } break; case WM_COMMAND: switch (wp) { // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // GENERAL // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= case IDC_SHOW_ICONS: cfg::show_icons = uButton_GetCheck(wnd, IDC_SHOW_ICONS); playlists_dropdown::g_reload_icons(); playlists_dropdown::g_update_all_sizes(); playlists_dropdown::g_redraw_all(); break; case IDC_ICON_UTILS: { HMENU menu = CreatePopupMenu(); uAppendMenu(menu, MF_STRING, 1, "Clear custom icons history"); uAppendMenu(menu, MF_STRING, 2, "Reset all icons to default"); RECT rc; GetWindowRect(GetDlgItem(wnd, IDC_ICON_UTILS), &rc); int cmd = TrackPopupMenu(menu, TPM_NONOTIFY | TPM_RETURNCMD, rc.left, rc.bottom, 0, GetDlgItem(wnd, IDC_ICON_UTILS), 0); DestroyMenu(menu); if (cmd == 1 && uMessageBox(wnd, "Are you sure you want to clear all custom icons history?", "Continue?", MB_YESNO) == IDYES) { cfg::custom_icons_history.reset(); } else if (cmd == 2 && uMessageBox(wnd, "Are you sure you want to reset all icons to default?", "Continue?", MB_YESNO) == IDYES) { try { static_api_ptr_t<playlist_manager_v2> pm2; for (int i = 0, total = pm2->get_playlist_count(); i < total; i++) { pm2->playlist_remove_property(i, guid_icon_path); } } catch(...) { } } playlists_dropdown::g_reload_icons(); playlists_dropdown::g_update_all_sizes(); playlists_dropdown::g_redraw_all(); } break; case IDC_MIN_VISIBLE | EN_CHANGE << 16: cfg::min_visible = uGetDlgItemInt(wnd, IDC_MIN_VISIBLE, NULL, true); playlists_dropdown::g_update_all_min_visible(); break; case IDC_FORMATTING_STRING | EN_CHANGE << 16: if (TabCtrl_GetDlgCurSel(wnd, IDC_FS_TAB) == 0) { uGetDlgItemText(wnd, IDC_FORMATTING_STRING, cfg::title_string); uSendMessage(wnd, MSG_UPDATEPREVIEW, 0, 0); } else { uGetDlgItemText(wnd, IDC_FORMATTING_STRING, cfg::style_string); } uEnableWindow(uGetDlgItem(wnd, IDC_APPLY), true); break; // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // PADDING // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= case IDC_PADDING_TOP | EN_CHANGE << 16: cfg::padding.get_value().top = uGetDlgItemInt(wnd, IDC_PADDING_TOP, NULL, true); playlists_dropdown::g_update_all_sizes(); playlists_dropdown::g_redraw_all(); break; case IDC_PADDING_RIGHT | EN_CHANGE << 16: cfg::padding.get_value().right = uGetDlgItemInt(wnd, IDC_PADDING_RIGHT, NULL, true); playlists_dropdown::g_update_all_sizes(); playlists_dropdown::g_redraw_all(); break; case IDC_PADDING_BOTTOM | EN_CHANGE << 16: cfg::padding.get_value().bottom = uGetDlgItemInt(wnd, IDC_PADDING_BOTTOM, NULL, true); playlists_dropdown::g_update_all_sizes(); playlists_dropdown::g_redraw_all(); break; case IDC_PADDING_LEFT | EN_CHANGE << 16: cfg::padding.get_value().left = uGetDlgItemInt(wnd, IDC_PADDING_LEFT, NULL, true); playlists_dropdown::g_update_all_sizes(); playlists_dropdown::g_redraw_all(); break; // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // FIELDS BUTTON // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= case IDC_FIELDS: { HMENU menu = CreatePopupMenu(); for (int i = 1; i < tabsize(g_fields_list); i++) { uAppendMenu(menu, !!g_fields_list[i].label ? MF_STRING : MF_SEPARATOR, i, g_fields_list[i].label); } RECT rc; GetWindowRect(GetDlgItem(wnd, IDC_FIELDS), &rc); int cmd = TrackPopupMenu(menu, TPM_NONOTIFY | TPM_RETURNCMD, rc.left, rc.bottom, 0, GetDlgItem(wnd, IDC_FIELDS), 0); DestroyMenu(menu); if (cmd >= 0 && cmd < tabsize(g_fields_list) && !!g_fields_list[cmd].label) { uSendDlgItemMessageText(wnd, IDC_FORMATTING_STRING, EM_REPLACESEL, TRUE, g_fields_list[cmd].label); SetFocus(GetDlgItem(wnd, IDC_FORMATTING_STRING)); } } break; // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // APPLY // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= case IDC_APPLY: apply_config(); uEnableWindow(uGetDlgItem(wnd, IDC_APPLY), FALSE); break; } break; case WM_INITDIALOG: { EnableTheming(wnd); // Setup "Display/Style" TabControl HWND hTabWnd = uGetDlgItem(wnd, IDC_FS_TAB); uTabCtrl_InsertItemText(hTabWnd, 0, "Display"); uTabCtrl_InsertItemText(hTabWnd, 1, "Style"); TabCtrl_SetCurSel(hTabWnd, cfg::last_fs_tab); uSetDlgItemText(wnd, IDC_FORMATTING_STRING, get_formatting_string(TabCtrl_GetCurSel(hTabWnd))); uButton_SetCheck(wnd, IDC_SHOW_ICONS, cfg::show_icons); SetDlgSpinner(wnd, IDC_MIN_VISIBLE_SPIN, IDC_MIN_VISIBLE, 1, 1000, cfg::min_visible); SetDlgSpinner(wnd, IDC_PADDING_TOP_SPIN, IDC_PADDING_TOP, 0, 1024, cfg::padding.get_value().top); SetDlgSpinner(wnd, IDC_PADDING_RIGHT_SPIN, IDC_PADDING_RIGHT, 0, 1024, cfg::padding.get_value().right); SetDlgSpinner(wnd, IDC_PADDING_BOTTOM_SPIN, IDC_PADDING_BOTTOM, 0, 1024, cfg::padding.get_value().bottom); SetDlgSpinner(wnd, IDC_PADDING_LEFT_SPIN, IDC_PADDING_LEFT, 0, 1024, cfg::padding.get_value().left); uEnableWindow(uGetDlgItem(wnd, IDC_APPLY), FALSE); SendMessage(wnd, MSG_UPDATEPREVIEW, 0, 0); } break; case WM_DESTROY: cfg::last_fs_tab = TabCtrl_GetDlgCurSel(wnd, IDC_FS_TAB); break; case WM_NOTIFY: if (((LPNMHDR) lp)->idFrom == IDC_FS_TAB && ((LPNMHDR) lp)->code == TCN_SELCHANGE) { uSetDlgItemText(wnd, IDC_FORMATTING_STRING, get_formatting_string(TabCtrl_GetDlgCurSel(wnd, IDC_FS_TAB))); } break; default: return false; } return true; }