2010年12月16日 (木)

YouTubeビューアー 0.3.0

YouTubeビューアーの更新です。

今回ようやくお気に入り機能を実装しました。画面右上のメニューボタンからお気に入り画面を呼び出すことができます。お気に入りを追加するには、まず追加したい動画や検索結果を開き、タイトルの右側にあるメニューボタンから「お気に入りに追加」を選んでください。

また、動画のコメントなどを日本語に翻訳する機能を付けました。これはGoogle Language APIを利用したもので、翻訳精度的には……参考程度には使えるかと。

次回以降の更新ではYouTube同様に高機能なAPIを公開しているUstreamに対応する予定です。

更新内容

・[機能追加]動画・プレイリストの説明やコメントを日本語に翻訳する機能を追加した(Google Language API)。
・[機能追加]動画のタイトルやURL、説明、コメントなどをクリップボードにコピーする機能を追加した。
・[不具合修正]再検索でカテゴリーや言語の変更が反映されない場合がある不具合を修正した。
・[機能追加]お気に入り機能を追加した(YouTubeのお気に入りではなく、アプリケーション独自の機能)。

ダウンロード

Lite Streaming Video Viewer 0.3.0(2010/12/16)
Windows用のYouTubeビューアー。.NET 4.0のインストールが必要になります。
LiteStreamingVideoViewer_0.3.0.zip(87,594バイト)

2010年11月 4日 (木)

YouTubeビューアー 0.2.0

YouTubeビューアーの更新です。

更新内容

・[機能追加]最近開いた動画の一覧を表示する機能を追加しました。
・[機能追加]最新の情報に更新する機能を追加しました。
・[機能追加]動画にコメントを投稿する機能を追加しました。
・[機能追加]動画を評価する機能を追加しました。
・[機能追加]プレイヤーのサイズ、検索オプション、フィルターなどのオプションを追加しました。

ダウンロード

Lite Streaming Video Viewer 0.2.0(2010/11/4)
Windows用のYouTubeビューアー。.NET 4.0のインストールが必要になります。
LiteStreamingVideoViewer_0.2.0.zip(68,677バイト)

2010年10月26日 (火)

YouTubeビューアー 0.1.0

YouTubeビューアーの更新です。

更新内容

・[不具合修正]タブ移動やページ移動をしたときにスクロール位置が正しく設定されない不具合を修正した。
・[仕様変更]検索結果を2段組で表示するように変更した。
・[機能追加]YouTubeへのログイン機能を追加した。
・[機能追加]ユーザーのアクティビティー、お気に入り、プレイリストを表示する機能を追加した。

ダウンロード

Lite Streaming Video Viewer 0.1.0(2010/10/26)
Windows用のYouTubeビューアー。.NET 4.0のインストールが必要になります。
LiteStreamingVideoViewer_0.1.0.zip(59,339バイト)

WPF備忘録 (2)

Visual Studioのバージョンが変わったので、新しい記事で引き続き備忘録を残していこうと思います(随時更新)。Visual Studio 2010、C# 4.0を使用しています。

WPF備忘録


MediaElementはリソースの動画ファイルを再生できない

参照:MediaElementクラス


非同期処理 (2)

Threadクラスを使う

new Thread(method).Start();

ThreadPoolクラスを使う

ThreadPool.QueueUserWorkItem(method);

・デリゲートを使う

delegate.BeginInvoke(parameters, new AsyncCallback(callback));

BackgroundWorkerクラスを使う

Taskを使う

new Task(method).Start();
// または
Task.Factory.StartNew(method);

アニメーションGIFを表示するには

参照:How to use an animated gif?

2010年10月10日 (日)

YouTubeビューアー

YouTubeの検索機能はどうも自分と相性が悪いようで、見たい動画がなかなか見つけられないことがあったので、YouTube Data APIを使ったビューアーを作ってみました。Visual Studio 2010で何か作ってみたいというのもあったので、早速使っています。

Litevideoviewer1

Litevideoviewer2

起動直後は検索フォームしかありません。なにか適当なキーワードを入れて検索してください。作ったきっかけの通り、見たい動画が決まっているユーザーには向いていますが、何か面白い動画が見たいなというユーザーには向いていません。

主な機能は、動画検索や動画再生のほかに動画情報の表示(コメント、動画レスポンス、関連動画)、ユーザー情報の表示(フレンド、購読チャンネル)などがあります。再生リストやチャンネルの検索、またYouTubeへのログイン(およびログイン後に行えること全般)には対応していません。

分かりづらい機能について補足します。動画のタイトルやユーザーの名前などの一部のリンクは、右クリックするとメニューが表示されます。また、検索欄にYouTubeの動画やユーザープロフィールのアドレスを入力すると、このソフト内で開くことができます。

ダウンロード

Lite Video Viewer Version 0.0.1(2010/10/10)
Windows用のYouTubeビューアー。.NET 4.0のインストールが必要になります。
LiteVideoViewer_0.0.1.zip(50,867バイト)

2010年4月11日 (日)

Lite Viewer Version 0.2.0

Lite Viewerの更新です。画像ウィンドウにファイル操作機能と、「画像の表示サイズ」オプションを変更する機能を追加しています。

更新内容

機能追加
・ファイル一覧、画像ウィンドウに「パスのコピー」機能を追加
・画像ウィンドウにファイル操作機能(削除、切り取り、コピー)を追加
・画像ウィンドウに全画面表示機能を追加
・画像ウィンドウに「選択して閉じる」機能(現在の画像ファイルをファイル一覧から選択して閉じる)を追加
・画像ウィンドウに「画像の表示サイズ」オプションを変更する機能を追加
・画像ウィンドウの拡大、回転機能について、1回あたりの変化量を指定するオプションを追加
・画像ウィンドウの背景色を指定するオプションを追加

不具合修正
・画像ウィンドウの拡大、縮小コマンドが機能しない不具合を修正
・画像ファイルを削除できない不具合を修正
・オプションの保存に失敗する不具合を修正(これはひどい不具合!)

ダウンロード

Lite Viewer Version 0.2.0(2010/4/11)
Windows用の画像ビューア。XP以前のOSでは.NET 3.0のインストールが必要になります。
LiteViewer_0.2.0.zip(87,111バイト)

2010年4月 1日 (木)

Lite Viewer Version 0.1.0

Lite Viewerの更新です。おもにファイル操作機能を追加しています。また、アイコンに影を付けると(=DropShadowEffectを使うと)重くなるようなので、オン/オフを切り替えられるオプションを追加しました。

更新内容

機能追加
・アイコンに影を付けるかどうかを指定するオプションを追加
・移動メニュー項目(表示 - 移動)の配下に最近移動したフォルダを表示する処理を追加
・ファイル操作が行われたときにフォルダツリー、ファイル一覧に自動で反映する処理を追加
・ファイル一覧に編集機能(新規フォルダの作成、削除、名前の変更、切り取り、コピー、貼り付け)を追加

不具合修正
・不正なパス(存在しない、アクセス権がない)が指定されたときの処理を追加
・最近開いたファイルの項目数上限が機能しない不具合を修正

ダウンロード

Lite Viewer Version 0.1.0(2010/4/1)
Windows用の画像ビューア。XP以前のOSでは.NET 3.0のインストールが必要になります。
LiteViewer_0.1.0.zip(76,138バイト)

2010年3月17日 (水)

Lite Viewer

画像ビューアを作ってみました。この頃勉強していたVirtualizingPanelを使ってみたり、MVVMデザインパターンを導入したりしています。

エクスプローラのようなメインウィンドウ上で、画像ファイルをダブルクリックすると画像ウィンドウが開きます。画像ファイルはBMP、GIF、JPG、PNG形式に対応しています。

Liteviewer

Liteviewer2

今のところ売りとなる機能はとくにないですが、少しずつ機能追加していけたらと考えています。

ダウンロード

Lite Viewer Version 0.0.1(2010/3/17)
Windows用の画像ビューア。XP以前のOSでは.NET 3.0のインストールが必要になります。
LiteViewer_0.0.1.zip(53,029バイト)

2010年3月 4日 (木)

VirtualizingPanelの実装 (2)

前回の記事で取り上げたVirtualizingTilePanelクラスを使用していて、いくつか気付いたことがあったので追記します。

ListViewのカスタムビュー(ViewBaseを継承したクラス)を作成し、その項目レイアウトパネルとしてVirtualizingTilePanelクラスを使用してみました。

ListView.BringIntoViewが機能しない

VirtualizingPanel.BringIndexIntoViewをオーバーライドして、指定された項目が表示される位置までスクロールさせてやる必要があります。

選択した項目の全体が表示されない

画面のはじっこで見切れている項目を選択したときに、自動的にスクロールして項目の全体を表示させるには、IScrollInfo.MakeVisibleを実装します。パラメタとして渡されるVisual=ListViewItem(コンテナクラス)が表示される位置までスクロールします。

キーによるフォーカス移動が一部機能しない

↑、↓、PageUp、PageDownなどのキーを押してフォーカス移動するとき、現在画面に表示されている項目の範囲外へ移動できません。原因は、そもそもVirtualizingTilePanelクラスは仮想化により範囲外の項目を生成しないためです。

これを解決するには、最初の項目(Homeキーの遷移先)、最後の項目(Endキーの遷移先)、表示範囲の1つ上の行(↑、PageUpキーの遷移先)、同じく1つ下の行(↓、PageDownキーの遷移先)については、たとえ表示範囲外であっても生成するようにします。

参照:
Dan Crevier's Blog
Ythos Ltd - Writing VirtualizingPanels in WPF is hard

2010年2月21日 (日)

VirtualizingPanelの実装

レイアウトに使用するPanelの中でも異色なVirtualizingPanel。とくにたくさんの項目をリストへ一度に読み込む場合、その性能が気になります。そこで、画面に表示される範囲の項目だけ処理を行うことで性能向上を計るコンポーネント……を作るための抽象クラスがVirtualizingPanelのようです。

これを実装したクラスはVirtualizingStackPanelの一つのみ。つまり、StackPanelで満足できない場合、自分で実装しなければいけません。

次の記事(英語)でVirtualizingPanelの実装について丁寧に説明されているようです(英語力がないので読めてません)。ここで紹介されているソースコード(VirtualizingTilePanelクラス)をありがたくダウンロードして、解読した備忘録を残します。

参照:Dan Crevier's Blog


はじめに、VirtualizingTilePanelクラスは、項目をWrapPanelのように配置するVirtualizingPanelの実装。ただし、水平方向のみをサポートし、項目のサイズは一定になる。

IScrollInfoの実装

VirtualizingPanelの継承と同時にIScrollInfoを実装し、スクロール周りの設定や情報を管理する。

・IScrollInfo.ExtentWidth/ExtentHeight: コンテンツの大きさ
・IScrollInfo.ViewportWidth/ViewportHeight: 表示範囲の大きさ、「表示範囲>=コンテンツ」なら、すべてのコンテンツが見えている状態
・IScrollInfo.HorizontalOffset/VerticalOffset: 表示範囲のオフセット

MeasureOverrideのオーバーライド

MeasureOverrideをオーバーライド。まずスクロール情報(ExtentとViewport)を更新する。次に、表示する範囲を求め、その範囲に含まれる項目だけ生成、InternalChildrenに追加する。このとき、範囲から漏れた生成済みの項目は解放している(※1)。

ArrangeOverrideのオーバーライド

ArrangeOverrideをオーバーライド。InternalChildrenに詰め込んだUIElementを配置する。

OnItemsChangedのオーバーライド

OnItemsChanged(親ItemsControlでItemsに変更があった)をオーバーライド。項目が削除された・置き換えられた・順序が変わった場合、変更のあった範囲の項目をInternalChildrenから解放する。

項目の生成

項目の生成にはItemContainerGeneratorを使う。ItemContainerGeneratorが項目の管理に使用するインデックス情報GeneratorPositionは以下の通り(分かりづらいよこれ)。

・GeneratorPosition.Index: 生成済み項目だけにふられる連番、未生成項目には直前の生成済み項目の番号が入る(無ければ「-1」)
・GeneratorPosition.Offset: 生成済み項目なら「0」、未生成項目なら直前の生成済み項目からのオフセット

※1 VirtualStackPanelのRecyclingモードでは、おそらく、解放せずにメモリに保持する(参照:VirtualizationMode列挙体IRecyclingItemContainerGeneratorインターフェイス)。

«WPF備忘録