void TpresetsPage::onNew(int menuCmd) { if (menuCmd==0) { HMENU hmn=LoadMenu(hi,MAKEINTRESOURCE(IDR_MENU_PRESET)),hmn2=_(GetSubMenu(hmn,0)) ; RECT r; GetWindowRect(GetDlgItem(m_hwnd,IDC_BT_PRESET_NEW_MENU),&r); menuCmd=TrackPopupMenu(hmn2,TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD,r.left-1,r.bottom,0,m_hwnd,0); DestroyMenu(hmn); } switch (menuCmd) { case ID_MNI_PRESET_NEWFROMDEFAULT: { addNewPreset((*parent->localPresets)[0]->copy()); break; } case ID_MNI_PRESET_NEWFROMSELECTED: { addNewPreset((*parent->localPresets)[lvGetSelItem(IDC_LV_PRESETS)]->copy()); break; } case ID_MNI_PRESET_NEW_FROMFILE: { strings files; if (dlgOpenFiles(m_hwnd,_(-IDD_PRESETS,_l("Load ffdshow preset")),presetfilter,presetext,files,_l("."),0)) for (strings::const_iterator fileDlgFlnm=files.begin(); fileDlgFlnm!=files.end(); fileDlgFlnm++) { Tpreset *newPreset=parent->localPresets->newPreset(NULL); if (!newPreset->loadFile(fileDlgFlnm->c_str())) { delete newPreset; } else { addNewPreset(newPreset); } } } break; } }
void TcodecsPage::dlg2options(int id) { int ii=lvGetSelItem(IDC_LV_INCODECS); if (isIn(ii,0,(int)formats.size())) { int optionId = 0; switch(id) { case IDC_CHB_CODEC_OPT1: optionId=0; break; case IDC_CHB_CODEC_OPT2: optionId=1; break; case IDC_CHB_CODEC_OPT3: optionId=2; break; case IDC_CHB_CODEC_OPT4: optionId=3; break; } const Tformat::Toption &o=formats[ii].options[optionId]; int idff=o.id; int val=cfgGet(idff); if (getCheck(id)) { val|=o.val; } else { val&=~o.val; } cfgSet(idff,val); } }
void TpresetsPage::onRename(int menuCmd) { const char_t *AVIname=deci->getSourceName(); if (menuCmd==0) { HMENU hmn=LoadMenu(hi,MAKEINTRESOURCE(IDR_MENU_PRESET)),hmn2=_(GetSubMenu(hmn,1)); RECT r; GetWindowRect(GetDlgItem(m_hwnd,IDC_BT_PRESET_RENAME_MENU),&r); if (AVIname[0]=='\0') { EnableMenuItem(hmn2,1,MF_BYPOSITION|MF_GRAYED); } menuCmd=TrackPopupMenu(hmn2,TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD,r.left-1,r.bottom,0,m_hwnd,0); DestroyMenu(hmn); } int i=lvGetSelItem(IDC_LV_PRESETS); if (menuCmd==ID_MNI_PRESET_RENAMETOFILE) { char_t presetName[MAX_PATH]; Tpreset::normalizePresetName(presetName, AVIname, countof(presetName)); parent->localPresets->nextUniqueName(presetName, countof(presetName)); renamePreset(presetName); InvalidateRect(hlv,NULL,FALSE); } else if (menuCmd==ID_MNI_PRESET_RENAMETOEXE) { char_t presetName[MAX_PATH]; Tpreset::normalizePresetName(presetName, deci->getExeflnm(), countof(presetName)); parent->localPresets->nextUniqueName(presetName, countof(presetName)); renamePreset(presetName); InvalidateRect(hlv,NULL,FALSE); } else if (menuCmd==ID_MNI_PRESET_RENAME) { SetFocus(hlv); ListView_EditLabel(hlv,i); } }
void TcodecsPage::translate(void) { TconfPageBase::translate(); ListView_SetColumnText(hlv,0,_(IDC_LV_INCODECS,_l("Format"))); ListView_SetColumnText(hlv,1,_(IDC_LV_INCODECS,_l("Decoder"))); ListView_SetColumnText(hlv,2,_(IDC_LV_INCODECS,thirdCol)); options2dlg(lvGetSelItem(IDC_LV_INCODECS)); }
void TOSDpageDec::onLineDown(void) { int ii = lvGetSelItem(IDC_LV_OSD_LINES); if (ii != -1 && ii < ListView_GetItemCount(hlv) - 1) { lvSwapItems(IDC_LV_OSD_LINES, ii, ii + 1); lv2osdFormat(); } }
void TOSDpageDec::onLineUp(void) { int ii = lvGetSelItem(IDC_LV_OSD_LINES); if (ii >= 1) { lvSwapItems(IDC_LV_OSD_LINES, ii, ii - 1); lv2osdFormat(); } }
void TconvolverPage::onManualFileClear(void) { int i=lvGetSelItem(IDC_LV_CONVOLVER_FILES); if (i!=-1) { cfgSet(speakersIdffs[i],_l("")); speakerFormats[i].clear(); ListView_RedrawItems(hlv,i,i); } }
void TpresetsPage::onSaveToFile(void) { int i=lvGetSelItem(IDC_LV_PRESETS); char_t presetFlnm[MAX_PATH]; _splitpath_s((*parent->localPresets)[i]->presetName, NULL, 0, NULL, 0, presetFlnm, countof(presetFlnm), NULL, 0); if (dlgGetFile(true,m_hwnd,_(-IDD_PRESETS,_l("Save ffdshow preset")),presetfilter,presetext,presetFlnm,_l("."),0)) { (*parent->localPresets)[i]->saveFile(presetFlnm); } }
void TconvolverPage::onManualFileSet(void) { int i=lvGetSelItem(IDC_LV_CONVOLVER_FILES); if (i!=-1) if (ffstring flnm=selectFile(speakersIdffs[i])) { speakerFormats[i]=getWavDesc(flnm.c_str(),IDC_LV_CONVOLVER_FILES); ListView_RedrawItems(hlv,i,i); } }
void TconvolverPage::mapping2dlg(void) { int mapping=cfgGet(IDFF_convolverMappingMode); setCheck(IDC_CHB_CONVOLVER_MAPPING,mapping); static const int idAuto[]= {IDC_LBL_CONVOLVER_FILE,IDC_ED_CONVOLVER_FILE,IDC_BT_CONVOLVER_FILE,IDC_LBL_CONVOLVER_WAV_FORMAT2,0}; static const int idManual[]= {IDC_LV_CONVOLVER_FILES,IDC_BT_CONVOLVER_FILES_SET,IDC_BT_CONVOLVER_FILES_CLEAR,0}; enable(mapping==0,idAuto); enable(mapping!=0,idManual); enableMapping(mapping!=0 && lvGetSelItem(IDC_LV_CONVOLVER_FILES)!=-1); }
void TkeysPage::beginKeyChange(void) { if (keyChanging != -1) { return; } int i = lvGetSelItem(IDC_LV_KEYS); if (i == -1) { return; } keyChanging = i; ListView_RedrawItems(hlv, i, i); }
void TpresetsPage::onReadFromFile(void) { int i=lvGetSelItem(IDC_LV_PRESETS); char_t presetFlnm[MAX_PATH]; _splitpath_s((*parent->localPresets)[i]->presetName, NULL, 0, NULL, 0, presetFlnm, countof(presetFlnm), NULL, 0); if (dlgGetFile(false,m_hwnd,_(-IDD_PRESETS,_l("Load ffdshow preset")),presetfilter,presetext,presetFlnm,_l("."),0)) { char_t presetName[MAX_PATH]; ff_strncpy(presetName,(*parent->localPresets)[i]->presetName,MAX_PATH); (*parent->localPresets)[i]->loadFile(presetFlnm); ff_strncpy((*parent->localPresets)[i]->presetName, presetName, countof((*parent->localPresets)[i]->presetName)); parent->selectPreset(presetName); cfg2dlg(); parent->setChange(); } }
void TpresetsPage::onRemove(void) { int i=lvGetSelItem(IDC_LV_PRESETS); if (i!=0 && MessageBox(m_hwnd,_(-IDD_PRESETS,_l("Do you really want to remove selected preset?")),_(-IDD_PRESETS,_l("Removing preset")),MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2)==IDYES) { char_t presetName[1024]; ListView_GetItemText(hlv,i,0,presetName,1023); if (deciD->isDefaultPreset(presetName)) { cfgSet(IDFF_defaultPreset,(*parent->localPresets)[0]->presetName); // [0] is protected(Remove bottun is inactivated, thus cannot be removed), it's safe to assume default preset is not [0]. } parent->localPresets->removePreset(presetName); ListView_SetItemCountEx(hlv,parent->localPresets->size(),0); ListView_GetItemText(hlv,0,0,presetName,1023); parent->selectPreset(presetName); cfg2dlg(); parent->setChange(); } }
void TcodecsPage::moveCBX(bool isscroll) { if (isscroll && !IsWindowVisible(hcbx)) { return; } LVCOLUMN lvc0,lvc1; lvc0.mask=lvc1.mask=LVCF_WIDTH; ListView_GetColumn(hlv,0,&lvc0); ListView_GetColumn(hlv,1,&lvc1); RECT lvr; GetWindowRect(hlv,&lvr); RECT pr; GetWindowRect(GetParent(hlv),&pr); OffsetRect(&lvr,-pr.left,-pr.top); RECT ir; int iItem=lvGetSelItem(IDC_LV_INCODECS); ListView_GetItemRect(hlv,iItem,&ir,LVIR_BOUNDS); MoveWindow(hcbx,lvr.left+lvc0.cx+3,lvr.top+ir.top-1,lvc1.cx,12,TRUE); show(true,IDC_CBX_INCODECS); SetWindowPos(hcbx,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW); SetFocus(hcbx); }
void TgenericPage::cfg2dlg(void) { flags.clear(); if (sup_gray(codecId)) { flags.push_back(std::make_tuple(_(IDC_LV_GENERIC,_l("Greyscale")),IDFF_enc_gray,1,false)); } nostate=true; int iig=lvGetSelItem(IDC_LV_GENERIC); ListView_DeleteAllItems(hlv); for (Tflags::const_iterator f=flags.begin(); f!=flags.end(); f++) { LVITEM lvi; memset(&lvi,0,sizeof(lvi)); lvi.mask=LVIF_TEXT|LVIF_PARAM; lvi.pszText=LPTSTR(std::get<NAME-1>(*f)); lvi.lParam=LPARAM(&*f); lvi.iItem=100; int ii=ListView_InsertItem(hlv,&lvi); ListView_SetCheckState(hlv,ii,cfgGet(std::get<IDFF-1>(*f))&std::get<VAL-1>(*f)); } lvSetSelItem(IDC_LV_GENERIC,iig); nostate=false; }
INT_PTR TconvolverPage::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: cfgSet(IDFF_lvConvolverWidth0,ListView_GetColumnWidth(hlv,0)); cfgSet(IDFF_lvConvolverWidth1,ListView_GetColumnWidth(hlv,1)); cfgSet(IDFF_lvConvolverWidth2,ListView_GetColumnWidth(hlv,2)); cfgSet(IDFF_lvConvolverSelected,lvGetSelItem(IDC_LV_CONVOLVER_FILES)); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_ED_CONVOLVER_FILE: if (HIWORD(wParam)==EN_CHANGE && !isSetWindowText) { char_t flnm[MAX_PATH]; GetDlgItemText(m_hwnd,IDC_ED_CONVOLVER_FILE,flnm,MAX_PATH); cfgSet(IDFF_convolverFile,flnm); format2dlg(flnm); } return TRUE; } break; case WM_NOTIFY: { NMHDR *nmhdr=LPNMHDR(lParam); if (nmhdr->hwndFrom==hlv && nmhdr->idFrom==IDC_LV_CONVOLVER_FILES) switch (nmhdr->code) { case LVN_ITEMCHANGED: { NMLISTVIEW *nmlv=LPNMLISTVIEW(lParam); enableMapping(nmlv->iItem!=-1); return TRUE; } case NM_DBLCLK: { NMITEMACTIVATE *nmia=(NMITEMACTIVATE*)lParam; if (nmia->iItem==-1 || nmia->iSubItem!=1) { return FALSE; } onManualFileSet(); return TRUE; } case LVN_GETDISPINFO: { NMLVDISPINFO *nmdi=(NMLVDISPINFO*)lParam; int i=nmdi->item.iItem; if (i==-1) { break; } if (nmdi->item.mask&LVIF_TEXT) switch (nmdi->item.iSubItem) { case 0: { static const int speakers[]= {SPEAKER_FRONT_LEFT,SPEAKER_FRONT_RIGHT,SPEAKER_FRONT_CENTER,SPEAKER_LOW_FREQUENCY,SPEAKER_BACK_LEFT,SPEAKER_BACK_RIGHT}; strcpy(nmdi->item.pszText,_(IDC_LV_CONVOLVER_FILES,TsampleFormat::getSpeakerName(speakers[i]))); break; } case 1: { int dx=ListView_GetColumnWidth(hlv,1); char_t flnm[MAX_PATH]; cfgGet(speakersIdffs[i],flnm,MAX_PATH); HDC dc=GetDC(hlv); HGDIOBJ old=SelectObject(dc,(HGDIOBJ)SendMessage(hlv,WM_GETFONT,0,0)); PathCompactPath(dc,flnm,std::max(20,dx-15)); SelectObject(dc,old); ReleaseDC(hlv,dc); strcpy(nmdi->item.pszText,flnm); break; } case 2: if (const char_t *flnm=cfgGetStr(speakersIdffs[i])) if (flnm[0] && !speakerFormats[i]) { speakerFormats[i]=getWavDesc(flnm,IDC_LV_CONVOLVER_FILES); } strcpy(nmdi->item.pszText,speakerFormats[i].c_str()); break; } return TRUE; } } break; } } return TconfPageDecAudio::msgProc(uMsg,wParam,lParam); }
INT_PTR TcodecsPage::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: cfgSet(IDFF_lvCodecsWidth0,ListView_GetColumnWidth(hlv,0)); cfgSet(IDFF_lvCodecsWidth1,ListView_GetColumnWidth(hlv,1)); cfgSet(IDFF_lvCodecsWidth2,ListView_GetColumnWidth(hlv,2)); cfgSet(IDFF_lvCodecsSelected,lvGetSelItem(IDC_LV_INCODECS)); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CBX_INCODECS: if (HIWORD(wParam)==CBN_SELCHANGE && IsWindowVisible(hcbx)) { int ii=lvGetSelItem(IDC_LV_INCODECS); int idff=formats[ii].idff; cfgSet(idff,(int)cbxGetCurItemData(IDC_CBX_INCODECS)); options2dlg(ii); return TRUE; } break; case IDC_CHB_CODEC_OPT1: case IDC_CHB_CODEC_OPT2: case IDC_CHB_CODEC_OPT3: case IDC_CHB_CODEC_OPT4: dlg2options(LOWORD(wParam)); return TRUE; } break; case WM_NOTIFY: { NMHDR *nmhdr=LPNMHDR(lParam); if (nmhdr->hwndFrom==hlv && nmhdr->idFrom==IDC_LV_INCODECS) switch (nmhdr->code) { case LVN_GETDISPINFO: { NMLVDISPINFO *nmdi=(NMLVDISPINFO*)lParam; int i=nmdi->item.iItem; if (i==-1) { break; } if (nmdi->item.mask&LVIF_TEXT) switch (nmdi->item.iSubItem) { case 0: strcpy(nmdi->item.pszText,_(IDC_LV_INCODECS,formats[i].descr)); break; case 1: strcpy(nmdi->item.pszText,_(IDC_LV_INCODECS,formats[i].getDecoderName(cfgGet(formats[i].idff)))); break; case 2: strcpy(nmdi->item.pszText,_(IDC_LV_INCODECS,formats[i].hint)); break; } return TRUE; } case LVN_GETINFOTIP: { NMLVGETINFOTIP *nmit=(NMLVGETINFOTIP*)lParam; if (nmit->iItem!=-1 && nmit->iSubItem==0) { ff_strncpy(nmit->pszText,formats[nmit->iItem].hint,nmit->cchTextMax); } return TRUE; } case LVN_ITEMCHANGED: { NMLISTVIEW *nmlv=LPNMLISTVIEW(lParam); if (nmlv->iItem!=curitem) { curitem=-1; show(false,IDC_CBX_INCODECS); options2dlg(nmlv->iItem); } return TRUE; } case NM_CLICK: { NMITEMACTIVATE *nmia=LPNMITEMACTIVATE(lParam); if (nmia->iItem!=-1 && nmia->iSubItem==1) { beginCodecChange(nmia->iItem); } else { show(false,IDC_CBX_INCODECS); } return TRUE; } } break; } } return TconfPageBase::msgProc(uMsg,wParam,lParam); }