Ejemplo n.º 1
0
/***********************************************************************

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;
}
Ejemplo n.º 2
0
// 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);
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 7
0
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;
}