void GtkToolkitFileChooser::FilterChanged() { GtkFileFilter* current_filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(m_dialog)); if (m_action == GTK_FILE_CHOOSER_ACTION_SAVE && current_filter) { int filter_index = GetSelectedFilter(); gchar * current_full_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_dialog)); if (current_full_filename) { char* current_filename = basename((char *)current_full_filename); GString *file_extension; // or use gchar file_extension = static_cast<GString*>(g_slist_nth_data(m_extensions, filter_index)); if (file_extension) { char *extension = (char *)file_extension->str; int extpos = 0; for (size_t i=0; i< strlen(extension); i++) if (extension[i] == '.') extpos = i; if (extpos > 0 && strlen(extension) > 2 && strstr(extension, "*.") && !strstr(extension, "*.*")) // Check this one { GString *current_filename_g = g_string_new(current_filename); if (current_filename_g) { char *ptr = (char *)current_filename; int len = strlen(ptr); int pos = len; for (int i=0; i<len; i++) if (ptr[i] == '.') pos = i; g_string_erase(current_filename_g, (gssize)pos, (gssize)(len-pos)); g_string_append(current_filename_g, (gchar*)extension+extpos); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(m_dialog), current_filename_g->str); gchar * current_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(m_dialog)); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(m_dialog), current_folder); g_free(current_folder); g_string_free(current_filename_g, TRUE); } } } g_free(current_full_filename); // Check this one } } }
void CSharedDirsTreeCtrl::OnContextMenu(CWnd* pWnd, CPoint point) { CDirectoryItem* pSelectedDir = GetSelectedFilter(); if (pSelectedDir != NULL && pSelectedDir->m_eItemType != SDI_UNSHAREDDIRECTORY && pSelectedDir->m_eItemType != SDI_FILESYSTEMPARENT){ int iSelectedItems = m_pSharedFilesCtrl->GetItemCount(); int iCompleteFileSelected = -1; UINT uPrioMenuItem = 0; bool bFirstItem = true; for (int i = 0; i < iSelectedItems; i++) { const CKnownFile* pFile = (CKnownFile*)m_pSharedFilesCtrl->GetItemData(i); int iCurCompleteFile = pFile->IsPartFile() ? 0 : 1; if (bFirstItem) iCompleteFileSelected = iCurCompleteFile; else if (iCompleteFileSelected != iCurCompleteFile) iCompleteFileSelected = -1; UINT uCurPrioMenuItem = 0; if (pFile->IsAutoUpPriority()) uCurPrioMenuItem = MP_PRIOAUTO; else if (pFile->GetUpPriority() == PR_VERYLOW) uCurPrioMenuItem = MP_PRIOVERYLOW; else if (pFile->GetUpPriority() == PR_LOW) uCurPrioMenuItem = MP_PRIOLOW; else if (pFile->GetUpPriority() == PR_NORMAL) uCurPrioMenuItem = MP_PRIONORMAL; else if (pFile->GetUpPriority() == PR_HIGH) uCurPrioMenuItem = MP_PRIOHIGH; else if (pFile->GetUpPriority() == PR_VERYHIGH) uCurPrioMenuItem = MP_PRIOVERYHIGH; else ASSERT(0); if (bFirstItem) uPrioMenuItem = uCurPrioMenuItem; else if (uPrioMenuItem != uCurPrioMenuItem) uPrioMenuItem = 0; bFirstItem = false; } bool bWideRangeSelection = true; if(pSelectedDir->m_nCatFilter != -1 || pSelectedDir->m_eItemType == SDI_NO){ // just avoid that users get bad ideas by showing the comment/delete-option for the "all" selections // as the same comment for all files/all incimplete files/ etc is probably not too usefull // - even if it can be done in other ways if the user really wants to do it bWideRangeSelection = false; } m_SharedFilesMenu.EnableMenuItem((UINT_PTR)m_PrioMenu.m_hMenu, iSelectedItems > 0 ? MF_ENABLED : MF_GRAYED); m_PrioMenu.CheckMenuRadioItem(MP_PRIOVERYLOW, MP_PRIOAUTO, uPrioMenuItem, 0); m_SharedFilesMenu.EnableMenuItem(MP_OPENFOLDER, (pSelectedDir != NULL && pSelectedDir->m_eItemType == SDI_NO) ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(MP_REMOVE, (iCompleteFileSelected > 0 && !bWideRangeSelection) ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(MP_CMT, (iSelectedItems > 0 && !bWideRangeSelection) ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(MP_DETAIL, iSelectedItems > 0 ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(thePrefs.GetShowCopyEd2kLinkCmd() ? MP_GETED2KLINK : MP_SHOWED2KLINK, iSelectedItems > 0 ? MF_ENABLED : MF_GRAYED); CTitleMenu WebMenu; WebMenu.CreateMenu(); WebMenu.AddMenuTitle(NULL, true); int iWebMenuEntries = theWebServices.GetFileMenuEntries(&WebMenu); UINT flag2 = (iWebMenuEntries == 0 || iSelectedItems != 1) ? MF_GRAYED : MF_STRING; m_SharedFilesMenu.AppendMenu(flag2 | MF_POPUP, (UINT_PTR)WebMenu.m_hMenu, GetResString(IDS_WEBSERVICES), _T("WEB")); GetPopupMenuPos(*this, point); m_SharedFilesMenu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this); m_SharedFilesMenu.RemoveMenu(m_SharedFilesMenu.GetMenuItemCount()-1,MF_BYPOSITION); VERIFY( WebMenu.DestroyMenu() ); } else if(pSelectedDir != NULL && pSelectedDir->m_eItemType == SDI_UNSHAREDDIRECTORY){ m_ShareDirsMenu.EnableMenuItem(MP_UNSHAREDIR, FileSystemTreeIsShared(pSelectedDir->m_strFullPath) ? MF_ENABLED : MF_GRAYED); m_ShareDirsMenu.EnableMenuItem(MP_UNSHAREDIRSUB, (FileSystemTreeIsShared(pSelectedDir->m_strFullPath) || FileSystemTreeHasSharedSubdirectory(pSelectedDir->m_strFullPath)) ? MF_ENABLED : MF_GRAYED); m_ShareDirsMenu.EnableMenuItem(MP_SHAREDIR, !FileSystemTreeIsShared(pSelectedDir->m_strFullPath) ? MF_ENABLED : MF_GRAYED); m_ShareDirsMenu.EnableMenuItem(MP_SHAREDIRSUB, FileSystemTreeHasSubdirectories(pSelectedDir->m_strFullPath) ? MF_ENABLED : MF_GRAYED); GetPopupMenuPos(*this, point); m_ShareDirsMenu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this); } }
BOOL CSharedDirsTreeCtrl::OnCommand(WPARAM wParam, LPARAM lParam) { CTypedPtrList<CPtrList, CKnownFile*> selectedList; int iSelectedItems = m_pSharedFilesCtrl->GetItemCount(); for (int i = 0; i < iSelectedItems; i++) { selectedList.AddTail((CKnownFile*)m_pSharedFilesCtrl->GetItemData(i)); } CDirectoryItem* pSelectedDir = GetSelectedFilter(); // folder based if (pSelectedDir != NULL){ switch (wParam){ case MP_OPENFOLDER: if (pSelectedDir && pSelectedDir->m_eItemType == SDI_NO){ ShellExecute(NULL, _T("open"), pSelectedDir->m_strFullPath, NULL, NULL, SW_SHOW); } break; case MP_SHAREDIR: EditSharedDirectories(pSelectedDir, true, false); break; case MP_SHAREDIRSUB: EditSharedDirectories(pSelectedDir, true, true); break; case MP_UNSHAREDIR: EditSharedDirectories(pSelectedDir, false, false); break; case MP_UNSHAREDIRSUB: EditSharedDirectories(pSelectedDir, false, true); break; } } // file based if (selectedList.GetCount() > 0 && pSelectedDir != NULL) { CKnownFile* file = NULL; if (selectedList.GetCount() == 1) file = selectedList.GetHead(); switch (wParam){ case MP_GETED2KLINK:{ CString str; POSITION pos = selectedList.GetHeadPosition(); while (pos != NULL) { file = selectedList.GetNext(pos); if (!str.IsEmpty()) str += _T("\r\n"); str += CreateED2kLink(file); } theApp.CopyTextToClipboard(str); break; } // file operations case MP_REMOVE: case MPG_DELETE:{ if (IDNO == AfxMessageBox(GetResString(IDS_CONFIRM_FILEDELETE),MB_ICONWARNING | MB_ICONQUESTION | MB_DEFBUTTON2 | MB_YESNO)) return TRUE; m_pSharedFilesCtrl->SetRedraw(FALSE); bool bRemovedItems = false; while (!selectedList.IsEmpty()) { CKnownFile* myfile = selectedList.RemoveHead(); if (!myfile || myfile->IsPartFile()) continue; BOOL delsucc = FALSE; if (!PathFileExists(myfile->GetFilePath())) delsucc = TRUE; else{ // Delete if (!thePrefs.GetRemoveToBin()){ delsucc = DeleteFile(myfile->GetFilePath()); } else{ // delete to recycle bin :( TCHAR todel[MAX_PATH+1]; memset(todel, 0, sizeof todel); _tcsncpy(todel, myfile->GetFilePath(), ARRSIZE(todel)-2); SHFILEOPSTRUCT fp = {0}; fp.wFunc = FO_DELETE; fp.hwnd = theApp.emuledlg->m_hWnd; fp.pFrom = todel; fp.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_SILENT;// | FOF_NOERRORUI delsucc = (SHFileOperation(&fp) == 0); } } if (delsucc){ theApp.sharedfiles->RemoveFile(myfile); bRemovedItems = true; if (myfile->IsKindOf(RUNTIME_CLASS(CPartFile))) theApp.emuledlg->transferwnd->downloadlistctrl.ClearCompleted(static_cast<CPartFile*>(myfile)); } else{ CString strError; strError.Format( GetResString(IDS_ERR_DELFILE) + _T("\r\n\r\n%s"), myfile->GetFilePath(), GetErrorMessage(GetLastError())); AfxMessageBox(strError); } } m_pSharedFilesCtrl->SetRedraw(TRUE); if (bRemovedItems) m_pSharedFilesCtrl->AutoSelectItem(); break; } case MP_CMT: ShowFileDialog(selectedList, IDD_COMMENT); break; case MPG_ALTENTER: case MP_DETAIL: ShowFileDialog(selectedList); break; case MP_SHOWED2KLINK: ShowFileDialog(selectedList, IDD_ED2KLINK); break; case MP_PRIOVERYLOW: case MP_PRIOLOW: case MP_PRIONORMAL: case MP_PRIOHIGH: case MP_PRIOVERYHIGH: case MP_PRIOAUTO: { POSITION pos = selectedList.GetHeadPosition(); while (pos != NULL) { CKnownFile* file = selectedList.GetNext(pos); switch (wParam) { case MP_PRIOVERYLOW: file->SetAutoUpPriority(false); file->SetUpPriority(PR_VERYLOW); m_pSharedFilesCtrl->UpdateFile(file); break; case MP_PRIOLOW: file->SetAutoUpPriority(false); file->SetUpPriority(PR_LOW); m_pSharedFilesCtrl->UpdateFile(file); break; case MP_PRIONORMAL: file->SetAutoUpPriority(false); file->SetUpPriority(PR_NORMAL); m_pSharedFilesCtrl->UpdateFile(file); break; case MP_PRIOHIGH: file->SetAutoUpPriority(false); file->SetUpPriority(PR_HIGH); m_pSharedFilesCtrl->UpdateFile(file); break; case MP_PRIOVERYHIGH: file->SetAutoUpPriority(false); file->SetUpPriority(PR_VERYHIGH); m_pSharedFilesCtrl->UpdateFile(file); break; case MP_PRIOAUTO: file->SetAutoUpPriority(true); file->UpdateAutoUpPriority(); m_pSharedFilesCtrl->UpdateFile(file); break; } } break; } default: if (wParam>=MP_WEBURL && wParam<=MP_WEBURL+256){ theWebServices.RunURL(file, wParam); } break; } } return TRUE; }
void CSharedDirsTreeCtrl::FilterTreeReloadTree(){ m_bCreatingTree = true; // store current selection CDirectoryItem* pOldSelectedItem = NULL; if (GetSelectedFilter() != NULL){ pOldSelectedItem = GetSelectedFilter()->CloneContent(); } // create the tree substructure of directories we want to show POSITION pos = m_pRootDirectoryItem->liSubDirectories.GetHeadPosition(); while (pos != NULL){ CDirectoryItem* pCurrent = m_pRootDirectoryItem->liSubDirectories.GetNext(pos); // clear old items DeleteChildItems(pCurrent); switch( pCurrent->m_eItemType ){ case SDI_ALL: break; case SDI_INCOMING:{ CString strMainIncDir = thePrefs.GetIncomingDir(); if (strMainIncDir.Right(1) == "\\"){ strMainIncDir = strMainIncDir.Left(strMainIncDir.GetLength()-1); } if (thePrefs.GetCatCount() > 1){ m_strliCatIncomingDirs.RemoveAll(); for (int i = 0; i < thePrefs.GetCatCount(); i++){ Category_Struct* pCatStruct = thePrefs.GetCategory(i); if (pCatStruct != NULL){ CString strCatIncomingPath = pCatStruct->incomingpath; if (strCatIncomingPath.Right(1) == "\\"){ strCatIncomingPath = strCatIncomingPath.Left(strCatIncomingPath.GetLength()-1); } if (!strCatIncomingPath.IsEmpty() && strCatIncomingPath.CompareNoCase(strMainIncDir) != 0 && m_strliCatIncomingDirs.Find(strCatIncomingPath) == NULL) { m_strliCatIncomingDirs.AddTail(strCatIncomingPath); CString strName = strCatIncomingPath; if (strName.Right(1) == "\\"){ strName = strName.Left(strName.GetLength()-1); } strName = strName.Right(strName.GetLength() - (strName.ReverseFind('\\')+1)); CDirectoryItem* pCatInc = new CDirectoryItem(strCatIncomingPath, 0, SDI_CATINCOMING); pCatInc->m_htItem = InsertItem(TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE, strName, 5, 5, 0, 0, (LPARAM)pCatInc, pCurrent->m_htItem, TVI_LAST); pCurrent->liSubDirectories.AddTail(pCatInc); } } } } break; } case SDI_TEMP: if (thePrefs.GetCatCount() > 1){ for (int i = 0; i < thePrefs.GetCatCount(); i++){ Category_Struct* pCatStruct = thePrefs.GetCategory(i); if (pCatStruct != NULL){ //temp dir CDirectoryItem* pCatTemp = new CDirectoryItem(CString(""), 0, SDI_TEMP, i); pCatTemp->m_htItem = InsertItem(TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE, CString(pCatStruct->title), 3, 3, 0, 0, (LPARAM)pCatTemp, pCurrent->m_htItem, TVI_LAST); pCurrent->liSubDirectories.AddTail(pCatTemp); } } } break; case SDI_DIRECTORY: // add subdirectories FilterTreeAddSubDirectories(pCurrent, m_strliSharedDirs); break; default: ASSERT( false ); } } // restore selection HTREEITEM htOldSection; if (pOldSelectedItem != NULL && (htOldSection = m_pRootDirectoryItem->FindItem(pOldSelectedItem)) != NULL){ Select(htOldSection, TVGN_CARET); EnsureVisible(htOldSection); } else if( GetSelectedItem() == NULL && !m_pRootDirectoryItem->liSubDirectories.IsEmpty()){ Select(m_pRootDirectoryItem->liSubDirectories.GetHead()->m_htItem, TVGN_CARET); } delete pOldSelectedItem; m_bCreatingTree = false; }