/*********************************************************************** FUNCTION: CreateTreeView PURPOSE: Registers the TreeView control class and creates a TreeView. ***********************************************************************/ BOOL FileInfo::CreateTreeView(HWND hwnd) { DWORD dwStyle; RECT rect; INITCOMMONCONTROLSEX iccex; iccex.dwSize = sizeof( INITCOMMONCONTROLSEX ); iccex.dwICC = ICC_TREEVIEW_CLASSES; // Registers Statusbar control classes from the common control dll InitCommonControlsEx( &iccex ); // Get the coordinates of the parent window's client area GetClientRect( hwnd, &rect ); // Assign the window styles for the tree view. dwStyle = WS_VISIBLE | WS_CHILD | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS; // Create the tree-view control. hwndTV = CreateWindowEx( 0, WC_TREEVIEW, NULL, dwStyle, 0, MENU_HEIGHT, rect.right-rect.left, rect.bottom-rect.top-MENU_HEIGHT, hwnd, NULL, hInst, NULL ); // Be sure that the tree view actually was created. if( !hwndTV ) return FALSE; UpdateFileInfo(); return TRUE; }
// We are activated... LRESULT BCChildWnd::OnMDIActivated( ClsWindow *pDeactivated ) { static UINT menuIdsToEnable[] = { IDM_CLOSE, IDM_FIND, IDM_FINDNEXT, IDM_FINDPREV, IDM_TOGGLEBM, IDM_GOTO, IDM_SELECTALL, IDM_PRINT, IDM_PAGESETUP, IDM_RELOAD_FILE, IDM_OVERVIEW, IDM_SEND_AS_EMAIL, 0xFFFFFFFF }; for ( int i = 0; menuIdsToEnable[ i ] != 0xFFFFFFFF; i++ ) { m_pFrame->m_ChildMenu.EnableItem( menuIdsToEnable[ i ], MF_BYCOMMAND | MF_ENABLED ); } static UINT toolbarButtonsToEnable[] = { IDM_FIND, IDM_FINDNEXT, IDM_FINDPREV, IDM_TOGGLEBM, IDM_GOTO, IDM_SELECTALL, IDM_PRINT, IDM_PAGESETUP, IDM_RELOAD_FILE, IDM_OVERVIEW, IDM_SEND_AS_EMAIL, 0xFFFFFFFF }; for ( int i = 0; toolbarButtonsToEnable[ i ] != 0xFFFFFFFF; i++ ) { m_pFrame->m_Toolbar.EnableButton( toolbarButtonsToEnable[ i ], TRUE ); } // Update file information. UpdateFileInfo(); m_pFrame->m_Status.MultiPart(TRUE); m_pFrame->m_Status.SetLineCol(m_Brainchild.m_iLineNumber, m_Brainchild.m_iColumnNumber); // Update tab selection if necessary. m_pFrame->ActivateTab( this ); return 0; }
/*=========================================================================== * * Class CSrResourceInstance Method - bool GetFiletime (Filetime); * *=========================================================================*/ bool CSrResourceInstance::GetFiletime (dword64& Filetime) { bool Result; if (!m_HasFiletime) { Result = UpdateFileInfo(); if (!Result) return (false); } Filetime = m_Filetime; return (m_HasFiletime); }
/*=========================================================================== * * Class CSrResourceInstance Method - bool GetFilesize (Filesize); * *=========================================================================*/ bool CSrResourceInstance::GetFilesize (int64& Filesize) { bool Result; if (!m_HasFilesize) { Result = UpdateFileInfo(); if (!Result) return (false); } Filesize = m_Filesize; return (m_HasFilesize); }
void FileWatcher::Worker::Check() { m_Mutex.lock(); for (auto &kv : m_FileCallbacks) { boost::filesystem::path path = kv.first; FileEventCallback_t& callback = kv.second; FileEventFlags flags = UpdateFileInfo(path); if (flags != FileEventFlags::Nothing && callback != nullptr) { callback(path.string(), flags); } } m_Mutex.unlock(); }
void CBFileListTable::Receive ( JBroadcaster* sender, const Message& message ) { if (sender == GetFullNameDataList() && message.Is(JOrderedSetT::kElementsInserted)) { const JOrderedSetT::ElementsInserted* info = dynamic_cast<const JOrderedSetT::ElementsInserted*>(&message); assert( info != NULL ); FilesAdded(*info); } else if (sender == GetFullNameDataList() && message.Is(JOrderedSetT::kElementsRemoved)) { const JOrderedSetT::ElementsRemoved* info = dynamic_cast<const JOrderedSetT::ElementsRemoved*>(&message); assert( info != NULL ); itsFileInfo->RemoveElements(*info); if (itsFileUsage != NULL) { itsFileUsage->RemoveElements(*info); } } else if (sender == GetFullNameDataList() && message.Is(JOrderedSetT::kElementMoved)) { const JOrderedSetT::ElementMoved* info = dynamic_cast<const JOrderedSetT::ElementMoved*>(&message); assert( info != NULL ); itsFileInfo->MoveElementToIndexWithMsg(*info); if (itsFileUsage != NULL) { itsFileUsage->MoveElementToIndexWithMsg(*info); } } else if (sender == GetFullNameDataList() && message.Is(JOrderedSetT::kElementsSwapped)) { const JOrderedSetT::ElementsSwapped* info = dynamic_cast<const JOrderedSetT::ElementsSwapped*>(&message); assert( info != NULL ); itsFileInfo->SwapElementsWithMsg(*info); if (itsFileUsage != NULL) { itsFileUsage->SwapElementsWithMsg(*info); } } else if (sender == GetFullNameDataList() && message.Is(JOrderedSetT::kSorted)) { assert( 0 /* CBFileListTable can't handle full sort of file list */ ); } else if (sender == GetFullNameDataList() && message.Is(JOrderedSetT::kElementChanged)) { const JOrderedSetT::ElementChanged* info = dynamic_cast<const JOrderedSetT::ElementChanged*>(&message); assert( info != NULL ); UpdateFileInfo(info->GetFirstIndex()); } JXFileListTable::Receive(sender, message); }
void Controller::SetMp3Pos( const string& s, ULONG ulMil) { if(blnIsProcessingSetMp3Pos) return; blnIsProcessingSetMp3Pos = TRUE; ULONG ulCurFileNum; // デバッグ用の出力 TRACE1("%2d\n", ulMil); if(strFilePath != s && s != "") { // ファイル名が変わったとき if((Profile::intRepeat == REPEAT_SONG || Profile::intRepeat == REPEAT_ALBUM) && blnAlbumSoonEnds) { blnAlbumSoonEnds = FALSE; // 単曲リピートやアルバム内リピートの場合。 // ストップして再生する // 単曲リピートの場合は最後の曲、アルバム内リピートの場合は先頭の曲に移動することになる HWND hwndWinamp = pMainWnd->GetWinampWindow(); SendMessage(hwndWinamp, WM_COMMAND, WINAMP_BUTTON4, 0); SendMessage(hwndWinamp, WM_WA_IPC, intCurListPos, IPC_SETPLAYLISTPOS); Go(pMainWnd->GetCurSong()); SendMessage(hwndWinamp, WM_COMMAND, WINAMP_BUTTON2, 0); goto cleanup; } else if((Profile::intRepeat == REPEAT_ENDLESSRANDOM || Profile::intRepeat == REPEAT_RANDOM) && blnAlbumSoonEnds) { blnAlbumSoonEnds = FALSE; // ランダム再生の場合 UINT uiNextSong = GetRandomNextSong(); HWND hwndWinamp = pMainWnd->GetWinampWindow(); if(uiNextSong != -1) { SendMessage(hwndWinamp, WM_COMMAND, WINAMP_BUTTON4, 0); SendMessage(hwndWinamp, WM_WA_IPC, intCurListPos, IPC_SETPLAYLISTPOS); uiLastChangedTickCount = GetTickCount(); Go(uiNextSong); TRACE1("album random goto : %2d\n", uiNextSong); SendMessage(hwndWinamp, WM_COMMAND, WINAMP_BUTTON2, 0); SendMessage(hwndWinamp, WM_WA_IPC, pArchiveFile->GetSongHead(uiNextSong), IPC_JUMPTOTIME) ; goto cleanup; } // 次の曲がない場合は、そのまま曲情報更新する } // そのまま曲情報更新 UpdateFileInfo(s) ; SetVisiblity( TRUE) ; if(pArchiveFile->GetStatus() == ArchiveFile::Status::UNCOMPRESSED && (Profile::intRepeat == REPEAT_ENDLESSRANDOM || Profile::intRepeat == REPEAT_RANDOM)) { // ランダム再生の場合 UINT uiNextSong = GetRandomNextSong(); HWND hwndWinamp = pMainWnd->GetWinampWindow(); if(uiNextSong == -1) { // 次の曲がない場合は、プレイリストの次の曲へ SendMessage(hwndWinamp, WM_COMMAND, WINAMP_BUTTON5, 0); goto cleanup; } Go(uiNextSong); goto cleanup; } } // 無圧縮の場合 if(pArchiveFile->GetStatus() != ArchiveFile::Status::UNCOMPRESSED) { // 無圧縮以外の場合 if(Profile::blnShowOnlyArchive) { SetVisiblity( FALSE) ; } goto cleanup; } // 単曲リピートの準備 if(Profile::intRepeat != 0) { HWND hwndWinamp = pMainWnd->GetWinampWindow(); ULONG ulAlbumLength = SendMessage(hwndWinamp, WM_WA_IPC, 1, IPC_GETOUTPUTTIME); blnAlbumSoonEnds = (ulAlbumLength * 1000 - ulMil < 30 * 1000); // アルバムがもうすぐ終わるかどうかを確認 if(blnAlbumSoonEnds) { intCurListPos = SendMessage(hwndWinamp, WM_WA_IPC, 0, IPC_GETLISTPOS); } } // ファイル番号更新 ulCurFileNum = pArchiveFile->GetSongIndex(ulMil) ; if(pMainWnd->GetCurSong() != ulCurFileNum && ulCurFileNum < pArchiveFile->GetChildFileCount()) { // 曲が変わったとき TRACE2("album song changed : %d -> %d\n", pMainWnd->GetCurSong(), ulCurFileNum); if(Profile::intRepeat == REPEAT_SONG) { // 単曲リピート // pMainWnd の曲番号に飛ぶ。1つ前のはず。 Go(pMainWnd->GetCurSong()); } else if(Profile::intRepeat== REPEAT_ENDLESSRANDOM || Profile::intRepeat == REPEAT_RANDOM) { // ランダム再生中 // 再生の位置変更までにかかる誤差を飲み込むため UINT uiCurTick = GetTickCount(); if(uiCurTick - uiLastChangedTickCount > 1000) // TickCount が一周するのはまぁ無視。49.7日連続起動に一回だし、大丈夫でしょう { // ランダム再生中に次の曲へ移った UINT uiNextSong = GetRandomNextSong(); HWND hwndWinamp = pMainWnd->GetWinampWindow(); if(uiNextSong == -1) { // 次の曲がない場合は、プレイリストの次の曲へ SendMessage(hwndWinamp, WM_COMMAND, WINAMP_BUTTON5, 0); goto cleanup; } Go(uiNextSong); } } else { // 普通に再生中 pMainWnd->SetCurSong(ulCurFileNum, pArchiveFile->GetChildFile(ulCurFileNum)->GetPlayLength()) ; } } // 表示時刻更新 { ULONG u = pArchiveFile->GetSongTime(ulCurFileNum, ulMil) ; u /= 1000 ; if(ulDisplayTime != u) { pMainWnd->SetTime(u / 60, u % 60) ; ulDisplayTime = u ; } } cleanup: blnIsProcessingSetMp3Pos = FALSE; }