📄 cosd.cpp
字号:
if (target!=-1)
{
lvSwapItems(IDC_LV_OSD_LINES,target,dragitem);
lv2osdFormat();
dragitem=target;
}
return TRUE;
}
break;
case WM_LBUTTONUP:
if (dragitem!=-1)
{
dragitem=-1;
ReleaseCapture();
return TRUE;
}
break;
}
return TconfPageDec::msgProc(uMsg,wParam,lParam);
}
void TOSDpageDec::onLineUp(void)
{
int ii=lvGetSelItem(IDC_LV_OSD_LINES);
if (ii>=1)
{
lvSwapItems(IDC_LV_OSD_LINES,ii,ii-1);
lv2osdFormat();
}
}
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::onPresets(void)
{
int ii=cbxGetCurSel(IDC_CBX_OSD_PRESETS);
const char_t *curPresetName=(const char_t*)cbxGetCurItemData(IDC_CBX_OSD_PRESETS);
const char_t *startupPresetName=cfgGetStr(IDFF_OSDstartPreset);
enum
{
IDC_MNI_OSD_PRESETS_NEW =6000,
IDC_MNI_OSD_PRESETS_SAVEAS_NEW,
IDC_MNI_OSD_PRESETS_RENAME,
IDC_MNI_OSD_PRESETS_DELETE,
IDC_MNI_OSD_PRESETS_ONSTARTUP,
IDC_MNI_OSD_PRESETS_SAVEAS,
IDC_MNI_OSD_PRESETS_SAVEONLY
};
HMENU hm=CreatePopupMenu(),hmSaveAs=NULL;
int ord=0;
insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_NEW,_l("New"),false);
int size=deciD->getOSDpresetCount2();
if (size>1)
{
hmSaveAs=CreatePopupMenu();
int ord2=0;
for (int i=0;i<size;i++)
{
const char_t *name2=deciD->getOSDpresetName2(i);
if (stricmp(curPresetName,name2)!=0)
insertMenuItem(hmSaveAs,ord2,IDC_MNI_OSD_PRESETS_SAVEAS+i,name2,false);
}
insertSeparator(hmSaveAs,ord2);
insertMenuItem(hmSaveAs,ord2,IDC_MNI_OSD_PRESETS_SAVEAS_NEW,_l("New preset..."),false);
insertSubmenu(hm,ord,_l("Save preset to..."),hmSaveAs);
}
else
insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_SAVEAS_NEW,_l("Save as..."),false);
insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_RENAME,_l("Rename preset..."),false);enable(hm,2,ii!=0);
insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_DELETE,_l("Delete preset"),false);enable(hm,3,ii!=0);
insertSeparator(hm,ord);
insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_ONSTARTUP,_l("Show on startup"),stricmp(startupPresetName,curPresetName)==0);
if (cfgGet(IDFF_OSDisSave))
{
insertSeparator(hm,ord);
insertMenuItem(hm,ord,IDC_MNI_OSD_PRESETS_SAVEONLY,_l("Don't display, only save data to file"),!!cfgGet(IDFF_OSDsaveOnly));
}
RECT r;
GetWindowRect(GetDlgItem(m_hwnd,IDC_BT_OSD_PRESETS),&r);
POINT p={0,r.bottom-r.top};
ClientToScreen(GetDlgItem(m_hwnd,IDC_BT_OSD_PRESETS),&p);
int cmd=TrackPopupMenu(_(hm),TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD,p.x,p.y,0,m_hwnd,NULL);
PostMessage(m_hwnd,WM_NULL,0,0);
if (cmd!=0)
if (cmd==IDC_MNI_OSD_PRESETS_SAVEONLY)
cfgSet(IDFF_OSDsaveOnly,1-cfgGet(IDFF_OSDsaveOnly));
else if (cmd>=IDC_MNI_OSD_PRESETS_SAVEAS)
{
char_t format[256];strcpy(format,deciD->getOSDpresetFormat2(curPresetName));
char_t newPreset[40];GetMenuString(hmSaveAs,cmd,newPreset,40,MF_BYCOMMAND);
deciD->setOSDpresetFormat(newPreset,format);
}
else
switch (cmd)
{
case IDC_MNI_OSD_PRESETS_RENAME:
{
char_t newPresetName[40];strcpy(newPresetName,curPresetName);
if (inputString(_(-IDD_OSD,_l("New preset name")),_(-IDD_OSD,_l("Enter new preset name")),newPresetName,40))
if (newPresetName[0] && findPreset(newPresetName)==CB_ERR)
{
deciD->setOSDpresetName(ii,newPresetName);
cfgSet(IDFF_OSDcurPreset,newPresetName);
if (strcmp(startupPresetName,curPresetName)==0)
cfgSet(IDFF_OSDstartPreset,newPresetName);
osds2dlg();
}
else
err(_(-IDD_OSD,_l("Preset already exists")));
break;
}
case IDC_MNI_OSD_PRESETS_SAVEAS_NEW:
{
char_t newPresetName[40];strcpy(newPresetName,curPresetName);
if (inputString(_(-IDD_OSD,_l("New preset name")),_(-IDD_OSD,_l("Enter new preset name")),newPresetName,40))
if (newPresetName[0] && findPreset(newPresetName)==CB_ERR)
{
char_t format[256];strcpy(format,deciD->getOSDpresetFormat2(curPresetName));
deciD->addOSDpreset(newPresetName,format);
cfgSet(IDFF_OSDcurPreset,newPresetName);
osds2dlg();
}
else
err(_(-IDD_OSD,_l("Preset already exists")));
break;
}
case IDC_MNI_OSD_PRESETS_DELETE:
if (MessageBox(m_hwnd,_(-IDD_OSD,_l("Do you really want to delete current OSD preset?")),_(-IDD_OSD,_l("Delete preset")),MB_ICONQUESTION|MB_YESNO)==IDYES)
{
deciD->deleteOSDpreset(curPresetName);
cfgSet(IDFF_OSDcurPreset,_l("default"));
if (strcmp(curPresetName,startupPresetName)==0)
cfgSet(IDFF_OSDstartPreset,_l(""));
osds2dlg();
}
break;
case IDC_MNI_OSD_PRESETS_NEW:
{
char_t newPresetName[40]=_l("");
if (inputString(_(-IDD_OSD,_l("New preset name")),_(-IDD_OSD,_l("Enter new preset name")),newPresetName,40))
if (newPresetName[0] && findPreset(newPresetName)==CB_ERR)
{
deciD->addOSDpreset(newPresetName,_l(""));
cfgSet(IDFF_OSDcurPreset,newPresetName);
osds2dlg();
}
else
err(_(-IDD_OSD,_l("Preset already exists")));
break;
}
case IDC_MNI_OSD_PRESETS_ONSTARTUP:
{
if (stricmp(startupPresetName,curPresetName)==0)
{
cfgSet(IDFF_OSDstartPreset,_l(""));
osds2dlg();
}
else
{
char_t durationS[20];_itoa(cfgGet(IDFF_OSDstartDuration),durationS,10);
if (inputString(_(-IDD_OSD,_l("Startup OSD preset")),_(-IDD_OSD,_l("Number of frames to show preset")),durationS,20))
{
cfgSet(IDFF_OSDstartPreset,curPresetName);
deci->putParam(IDFF_OSDstartDuration,atoi(durationS));
osds2dlg();
}
}
break;
}
}
DestroyMenu(hm);
}
void TOSDpageDec::onSave(void)
{
char_t flnm[MAX_PATH];cfgGet(IDFF_OSDsaveFlnm,flnm,MAX_PATH);
if (dlgGetFile(true,m_hwnd,_(-IDD_OSD,_l("File where to write statistics")),_l("Comma delimited (*.csv)\0*.csv\0"),_l("csv"),flnm,_l("."),0))
{
setDlgItemText(m_hwnd,IDC_ED_OSD_SAVE,flnm);
cfgSet(IDFF_OSDsaveFlnm,flnm);
}
}
void TOSDpageDec::applySettings(void)
{
char_t flnm[MAX_PATH];
GetDlgItemText(m_hwnd,IDC_ED_OSD_SAVE,flnm,MAX_PATH);
cfgSet(IDFF_OSDsaveFlnm,flnm);
}
void TOSDpageDec::translate(void)
{
TconfPageDec::translate();
nostate=true;
ListView_DeleteAllItems(hlv);
for (int i=0;;i++)
{
LVITEM lvi;memset(&lvi,0,sizeof(lvi));
lvi.mask=LVIF_TEXT|LVIF_PARAM;
lvi.iItem=i+1;
const char_t *text;
if (deci->getInfoItem(i,(int*)&lvi.lParam,&text)!=S_OK)
break;
lvi.pszText=const_cast<char_t*>(_(IDC_LV_OSD_LINES,text));
ListView_InsertItem(hlv,&lvi);
}
nostate=false;
}
TOSDpageDec::TOSDpageDec(TffdshowPageDec *Iparent):TconfPageDec(Iparent,NULL,0)
{
dialogId=IDD_OSD;
idffInter=IDFF_isOSD;resInter=IDC_CHB_OSD;
static const TbindCheckbox<TOSDpageDec> chb[]=
{
IDC_CHB_OSD_SAVE,IDFF_OSDisSave,&TOSDpageDec::save2dlg,
0,NULL,NULL
};
bindCheckboxes(chb);
static const TbindTrackbar<TOSDpageDec> htbr[]=
{
IDC_TBR_OSD_POSX,IDFF_OSDposX,&TOSDpageDec::pos2dlg,
IDC_TBR_OSD_POSY,IDFF_OSDposY,&TOSDpageDec::pos2dlg,
0,0,NULL
};
bindHtracks(htbr);
static const TbindCombobox<TOSDpageDec> cbx[]=
{
IDC_CBX_OSD_PRESETS,IDFF_OSDcurPreset,BINDCBX_DATATEXT,&TOSDpageDec::osd2dlg,
0
};
bindComboboxes(cbx);
static const TbindButton<TOSDpageDec> bt[]=
{
IDC_BT_OSD_LINE_UP,&TOSDpageDec::onLineUp,
IDC_BT_OSD_LINE_DOWN,&TOSDpageDec::onLineDown,
IDC_BT_OSD_PRESETS,&TOSDpageDec::onPresets,
IDC_BT_OSD_SAVE,&TOSDpageDec::onSave,
0,NULL
};
bindButtons(bt);
}
//================================ TOSDpageDecVideo ================================
bool TOSDpageVideo::reset(bool testonly)
{
if (!testonly)
comptrQ<IffdshowDecVideo>(deciD)->resetOSD();
return true;
}
//================================ TOSDpageDecAudio ================================
void TOSDpageAudio::init(void)
{
TOSDpageDec::init();
static const int idPos[]={IDC_LBL_OSD_POSX,IDC_TBR_OSD_POSX,IDC_LBL_OSD_POSY,IDC_TBR_OSD_POSY,0};
enable(0,idPos);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -