📄 partfileconvert.cpp
字号:
if (pfconverting->removeSource) {
bWorking = finder.FindFile(folder+_T("\\")+filepartindex+_T(".*"));
while (bWorking)
{
bWorking = finder.FindNextFile();
_tunlink(finder.GetFilePath());
}
if (pfconverting->partmettype==PMT_SPLITTED)
RemoveDirectory(folder+_T("\\"));
}
return CONV_OK;
}
void CPartFileConvert::UpdateGUI(float percent,CString text, bool fullinfo) {
if (m_convertgui==NULL) return;
m_convertgui->pb_current.SetPos(percent);
CString buffer;
buffer.Format(_T("%.2f %%"),percent);
m_convertgui->SetDlgItemText(IDC_CONV_PROZENT,buffer);
if (!text.IsEmpty())
m_convertgui->SetDlgItemText(IDC_CONV_PB_LABEL,text);
if (fullinfo) {
m_convertgui->SetDlgItemText(IDC_CURJOB,pfconverting->folder);
}
}
void CPartFileConvert::UpdateGUI(ConvertJob* job){
if (m_convertgui==NULL) return;
m_convertgui->UpdateJobInfo(job);
}
void CPartFileConvert::ShowGUI(){
if (m_convertgui)
m_convertgui->SetForegroundWindow();
else {
m_convertgui= new CModeless();
m_convertgui->Create( IDD_CONVERTPARTFILES , CWnd::GetDesktopWindow() );//, );
InitWindowStyles(m_convertgui);
m_convertgui->ShowWindow(SW_SHOW);
m_convertgui->AddAnchor(IDC_CONV_PB_CURRENT, TOP_LEFT, TOP_RIGHT);
m_convertgui->AddAnchor(IDC_CURJOB, TOP_LEFT, TOP_RIGHT);
m_convertgui->AddAnchor(IDC_CONV_PB_LABEL, TOP_LEFT, TOP_RIGHT);
m_convertgui->AddAnchor(IDC_CONV_PROZENT, TOP_RIGHT);
m_convertgui->AddAnchor(IDC_JOBLIST, TOP_LEFT, BOTTOM_RIGHT);
m_convertgui->AddAnchor(IDC_ADDITEM, BOTTOM_LEFT);
m_convertgui->AddAnchor(IDC_RETRY, BOTTOM_LEFT);
m_convertgui->AddAnchor(IDC_CONVREMOVE, BOTTOM_LEFT);
m_convertgui->AddAnchor(IDC_HIDECONVDLG, BOTTOM_RIGHT);
HICON importicon;
importicon=theApp.LoadIcon(_T("CONVERT"),16,16);
//importicon=theApp.LoadIcon(IDI_IMPORT);
m_convertgui->SetIcon(importicon,FALSE);
// init gui
m_convertgui->pb_current.SetRange(0,100);
m_convertgui->joblist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_convertgui->joblist.ModifyStyle(LVS_SINGLESEL,0);
if (!pfconverting==NULL) {
UpdateGUI(pfconverting);
UpdateGUI(50,GetResString(IDS_IMP_FETCHSTATUS),true);
}
Localize();
// fill joblist
ConvertJob* job;
for(POSITION pos = m_jobs.GetHeadPosition(); pos != NULL; m_jobs.GetNext(pos)){
job=m_jobs.GetAt(pos);
m_convertgui->AddJob(job);
UpdateGUI(job);
}
}
}
void CPartFileConvert::Localize() {
if (!m_convertgui)
return;
for (int i=0;i<4;i++)
m_convertgui->joblist.DeleteColumn(0);
m_convertgui->joblist.InsertColumn(0, GetResString(IDS_DL_FILENAME) ,LVCFMT_LEFT,350,0);
m_convertgui->joblist.InsertColumn(1,GetResString(IDS_STATUS),LVCFMT_LEFT,110,1);
m_convertgui->joblist.InsertColumn(2,GetResString(IDS_DL_SIZE),LVCFMT_LEFT,150,2);
m_convertgui->joblist.InsertColumn(3,GetResString(IDS_FILEHASH),LVCFMT_LEFT,150,3);
// set gui labels
m_convertgui->SetDlgItemText(IDC_ADDITEM,GetResString(IDS_IMP_ADDBTN));
m_convertgui->SetDlgItemText(IDC_RETRY,GetResString(IDS_IMP_RETRYBTN));
m_convertgui->SetDlgItemText(IDC_CONVREMOVE,GetResString(IDS_IMP_REMOVEBTN));
m_convertgui->SetDlgItemText(IDC_HIDECONVDLG,GetResString(IDS_FD_CLOSE));
m_convertgui->SetWindowText(GetResString(IDS_IMPORTSPLPF));
}
void CPartFileConvert::CloseGUI(){
if (m_convertgui==NULL) return;
m_convertgui->DestroyWindow();
ClosedGUI();
}
void CPartFileConvert::ClosedGUI() {
m_convertgui=NULL;
}
void CPartFileConvert::RemoveAllJobs(){
for(POSITION pos = m_jobs.GetHeadPosition(); pos != NULL; m_jobs.GetNext(pos)){
if (m_convertgui) m_convertgui->RemoveJob(m_jobs.GetAt(pos));
delete m_jobs.GetAt(pos);
}
m_jobs.RemoveAll();
}
void CPartFileConvert::RemoveJob(ConvertJob* job){
for(POSITION pos = m_jobs.GetHeadPosition(); pos != NULL; m_jobs.GetNext(pos)){
ConvertJob* del=m_jobs.GetAt(pos);
if (del==job) {
if (m_convertgui) m_convertgui->RemoveJob(del);
m_jobs.RemoveAt(pos);
delete del;
if (m_jobs.GetCount()==0) return;
}
}
}
void CPartFileConvert::RemoveAllSuccJobs(){
for(POSITION pos = m_jobs.GetHeadPosition(); pos != NULL; m_jobs.GetNext(pos)){
ConvertJob* del=m_jobs.GetAt(pos);
if (del->state==CONV_OK) {
if (m_convertgui) m_convertgui->RemoveJob(del);
m_jobs.RemoveAt(pos);
delete del;
}
}
}
CString CPartFileConvert::GetReturncodeText(int ret) {
switch (ret) {
case CONV_OK : return GetResString(IDS_DL_TRANSFCOMPL);
case CONV_INPROGRESS : return GetResString(IDS_IMP_INPROGR);
case CONV_OUTOFDISKSPACE : return GetResString(IDS_IMP_ERR_DISKSP);
case CONV_PARTMETNOTFOUND : return GetResString(IDS_IMP_ERR_PARTMETIO);
case CONV_IOERROR : return GetResString(IDS_IMP_ERR_IO);
case CONV_FAILED : return GetResString(IDS_IMP_ERR_FAILED);
case CONV_QUEUE : return GetResString(IDS_IMP_STATUSQUEUED);
case CONV_ALREADYEXISTS : return GetResString(IDS_IMP_ALRDWL);
case CONV_BADFORMAT : return GetResString(IDS_IMP_ERR_BADFORMAT);
default: return _T("?");
}
}
// Modless Dialog Implementation
// CModeless dialog
IMPLEMENT_DYNAMIC(CModeless, CDialog)
CModeless::CModeless(CWnd* pParent /*=NULL*/)
: CResizableDialog(CModeless::IDD, pParent)
{
m_pParent = pParent;
}
CModeless::~CModeless()
{
}
void CModeless::DoDataExchange(CDataExchange* pDX)
{
CResizableDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CONV_PB_CURRENT, pb_current);
DDX_Control(pDX, IDC_JOBLIST, joblist);
}
BEGIN_MESSAGE_MAP(CModeless, CResizableDialog)
ON_BN_CLICKED(IDC_HIDECONVDLG, OnBnClickedOk)
ON_BN_CLICKED(IDC_ADDITEM, OnAddFolder)
ON_BN_CLICKED(IDC_RETRY,RetrySel)
ON_BN_CLICKED(IDC_CONVREMOVE,RemoveSel)
END_MESSAGE_MAP()
// CModeless message handlers
void CModeless::OnBnClickedOk()
{
DestroyWindow();
}
void CModeless::OnCancel() {
DestroyWindow();
}
void CModeless::PostNcDestroy()
{
CPartFileConvert::ClosedGUI();
CResizableDialog::PostNcDestroy();
delete this;
}
void CModeless::OnAddFolder() {
// browse...
LPMALLOC pMalloc = NULL;
if (SHGetMalloc(&pMalloc) == NOERROR)
{
// buffer - a place to hold the file system pathname
TCHAR buffer[MAX_PATH];
// This struct holds the various options for the dialog
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = buffer;
CString title=GetResString(IDS_IMP_SELFOLDER);
bi.lpszTitle = title.GetBuffer(title.GetLength());
bi.ulFlags = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_NONEWFOLDERBUTTON | BIF_SHAREABLE ;
bi.lpfn = NULL;
// Now cause the dialog to appear.
LPITEMIDLIST pidlRoot;
if((pidlRoot = SHBrowseForFolder(&bi)) != NULL)
{
bool removesrc;
int reply=IDNO;
if (thePrefs.IsExtControlsEnabled())
reply=AfxMessageBox(GetResString(IDS_IMP_DELSRC), MB_YESNOCANCEL | MB_DEFBUTTON2 );
if (reply!=IDCANCEL){
removesrc = (reply==IDYES);
//
// Again, almost undocumented. How to get a ASCII pathname
// from the LPITEMIDLIST struct. I guess you just have to
// "know" this stuff.
//
if(SHGetPathFromIDList(pidlRoot, buffer)){
// Do something with the converted string.
CPartFileConvert::ScanFolderToAdd(CString(buffer), removesrc);
}
}
// Free the returned item identifier list using the
// shell's task allocator!Arghhhh.
pMalloc->Free(pidlRoot);
}
pMalloc->Release();
}
}
void CModeless::UpdateJobInfo(ConvertJob* job) {
if (job==NULL) {
SetDlgItemText(IDC_CURJOB, GetResString(IDS_FSTAT_WAITING) );
SetDlgItemText(IDC_CONV_PROZENT, _T(""));
pb_current.SetPos(0);
SetDlgItemText(IDC_CONV_PB_LABEL,_T(""));
return;
}
CString buffer;
// search jobitem in listctrl
LVFINDINFO find;
find.flags = LVFI_PARAM;
find.lParam = (LPARAM)job;
sint32 itemnr = joblist.FindItem(&find);
if (itemnr != (-1)) {
joblist.SetItemText(itemnr,0, job->filename.IsEmpty()?job->folder:job->filename );
joblist.SetItemText(itemnr,1, CPartFileConvert::GetReturncodeText(job->state) );
buffer="";
if (job->size>0)
buffer.Format(GetResString(IDS_IMP_SIZE),CastItoXBytes(job->size, false, false),CastItoXBytes(job->spaceneeded, false, false));
joblist.SetItemText(itemnr,2, buffer );
joblist.SetItemText(itemnr,3, job->filehash);
} else {
// AddJob(job); why???
}
}
void CModeless::RemoveJob(ConvertJob* job) {
// search jobitem in listctrl
LVFINDINFO find;
find.flags = LVFI_PARAM;
find.lParam = (LPARAM)job;
sint32 itemnr = joblist.FindItem(&find);
if (itemnr != (-1)) {
joblist.DeleteItem(itemnr);
}
}
void CModeless::AddJob(ConvertJob* job) {
int ix=joblist.InsertItem(LVIF_TEXT|LVIF_PARAM,joblist.GetItemCount(),job->folder,0,0,0,(LPARAM)job);
joblist.SetItemText(ix,1,CPartFileConvert::GetReturncodeText(job->state));
}
void CModeless::RemoveSel() {
if (joblist.GetSelectedCount()==0) return;
ConvertJob* job;
POSITION pos = joblist.GetFirstSelectedItemPosition();
while(pos != NULL)
{
int index = joblist.GetNextSelectedItem(pos);
if(index > -1)
{
job=(ConvertJob*)joblist.GetItemData(index);
if (job->state != CONV_INPROGRESS) {
RemoveJob(job); // from list
CPartFileConvert::RemoveJob(job);
pos = joblist.GetFirstSelectedItemPosition();
}
}
}
}
void CModeless::RetrySel(){
if (joblist.GetSelectedCount()==0) return;
ConvertJob* job;
POSITION pos = joblist.GetFirstSelectedItemPosition();
while(pos != NULL)
{
int index = joblist.GetNextSelectedItem(pos);
if(index > -1)
{
job=(ConvertJob*)joblist.GetItemData(index);
if (job->state != CONV_OK && job->state !=CONV_INPROGRESS) {
UpdateJobInfo(job);
job->state=CONV_QUEUE;
}
}
}
CPartFileConvert::StartThread();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -