iKnowItemBankPanel Archive

image以前公開したiKnow ItemBankPanel for VisualStudioをM-V-VMパターンを使って書き直しています。まだ途中ですが、一応辞書を引いて結果を表示するとこまでは出来たので、M-V-VMパターンの参考までに公開してみます。WPF自体よく分かっていなかった前のコードと比べると見違えるような綺麗さになりましたw

 

SharpLab.IKnow.ItemBankPanes.zip

 

添付ビヘイビアでTextBoxにCommandを実装してみた – SharpLab.の添付ビヘイビアは上の検索ツールバーで、添付ビヘイビア試してみた – SharpLab.で紹介した添付ビヘイビアは検索結果を表示しているListBoxで実際に使用しています。

M-V-VMパターンの威力

埋め草までに、ViewのXAMLコードを貼っておきます。このアプリではUIロジックに複雑なところがなかったので、実際、コードビハインドにイベントハンドラを書かずに済みました。ボタンクリックやTextBoxでのEnterキー押下時の処理は、全てCommandを使ってViewModelに移譲しています。

<UserControl x:Class="SharpLab.IKnow.ItemBankPane.ItemBankPaneView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SharpLab.IKnow.ItemBankPane"
	>
    <UserControl.Resources>
    	<ResourceDictionary>
			<local:ItemBankPaneViewModel x:Key="viewModel" />
		</ResourceDictionary>
	</UserControl.Resources>
	<UserControl.DataContext>
		<Binding Mode="OneTime" Source="{StaticResource viewModel}" />
	</UserControl.DataContext>
	<DockPanel>
		<ToolBar DockPanel.Dock="Top" Height="30" VerticalAlignment="Top">
			<TextBox local:TextBoxBehavior.Command="{Binding Mode=OneTime, Path=StartSearchCommand}"  HorizontalAlignment="Left" Text="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Path=Keyword}" VerticalAlignment="Top" Width="184" />
			<Button Command="{Binding Mode=OneTime, Path=StartSearchCommand}" Content="Search"></Button>
		</ToolBar>
		<ContentControl>
				<local:ResultPageView DataContext="{Binding Mode=OneTime, Path=ResultPage}" />
		</ContentControl>
	</DockPanel>
</UserControl>
<UserControl x:Class="SharpLab.IKnow.ItemBankPane.ResultPageView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:local="clr-namespace:SharpLab.IKnow.ItemBankPane"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="300" d:DesignHeight="300"
    >
	<UserControl.Resources>
		<ResourceDictionary>
			<ResourceDictionary.MergedDictionaries>
				<ResourceDictionary Source="Resources/ResultPageResources.xaml"/>
				<ResourceDictionary Source="Resources/VocabularyViewerStyle.xaml"/>
			</ResourceDictionary.MergedDictionaries>
		</ResourceDictionary>
	</UserControl.Resources>
	<Grid DockPanel.Dock="Bottom">
		<Grid.RowDefinitions>
			<RowDefinition />
			<RowDefinition Height="35" />
		</Grid.RowDefinitions>
		<Grid.ColumnDefinitions>
			<ColumnDefinition />
			<ColumnDefinition Width="40" />
			<ColumnDefinition />
		</Grid.ColumnDefinitions>
		<ListBox Name="VocabularyViewer" Grid.Row="0" Grid.ColumnSpan="3" ItemsSource="{Binding Mode=OneWay, NotifyOnTargetUpdated=true, Path=Items}" Style="{StaticResource VocabularyViewerStyle}" />
		<Button Grid.Row="1"  Grid.Column="0" Margin="6,6,6,6" Command="{Binding Mode=OneTime, Path=NavigatePrevPageCommand}" Content="Prev"/>
		<Button Grid.Row="1" Grid.Column="2" Margin="6,6,6,6" Command="{Binding Mode=OneTime, Path=NavigateNextPageCommand}" Content="Next"/>
		<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Mode=OneWay, Path=PageCounter}" HorizontalAlignment="Center" VerticalAlignment="Center" />
	</Grid>
</UserControl>
<UserControl x:Class="SharpLab.IKnow.ItemBankPane.ItemView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SharpLab.IKnow.ItemBankPane"
	>

	<UserControl.Resources>
		<ResourceDictionary>
			<ResourceDictionary.MergedDictionaries>
				<ResourceDictionary Source="Resources/PlusButton.xaml"/>
				<ResourceDictionary Source="Resources/PlayButton.xaml"/>
				<ResourceDictionary Source="Resources/SentenceListViewerStyle.xaml"/>
			</ResourceDictionary.MergedDictionaries>
		</ResourceDictionary>
	</UserControl.Resources>

	<DockPanel>
		<Expander x:Name="Sentences" DockPanel.Dock="Bottom" TabIndex="3" Visibility="{Binding Mode=OneTime, Path=SentencesVisility}" >
			<Expander.Header>
				<TextBlock Text="Example Sentences:" />
			</Expander.Header>
			<ItemsControl Name="SentenceListViewer" ItemsSource="{Binding Mode=OneTime, Path=Sentences}" Style="{StaticResource SentenceListViewerStyle}"  />
		</Expander>
		<!--DropDown="{DynamicResource VocabularyViewerItemContextMenu}"-->
		<local:DropDownButton DockPanel.Dock="Right" Width="24" Height="24" Style="{StaticResource PlusButtonStyle}"  TabIndex="1" Margin="0,0,8,0" />
		<DockPanel DockPanel.Dock="Top" LastChildFill="true">
			<MediaElement x:Name="mp3Player" LoadedBehavior="Manual" Source="{Binding Mode=OneTime, Path=CueSound}" Width="0"  Height="0"  />
			<Button DockPanel.Dock="Left" Width="18" Height="18" Margin="2,0,4,0" TabIndex="0" Style="{StaticResource PlayButtonStyle}" Command="{Binding Mode=OneTime, Path=PlaySoundCommand}" CommandParameter="{Binding ElementName=mp3Player}" />
			<ContentControl Content="{Binding Mode=OneTime, Path=CueText}" IsTabStop="False" />
		</DockPanel>
		<TextBlock DockPanel.Dock="Top" FontSize="12" Margin="20,0,0,0" Text="{Binding Mode=OneTime, Path=Meaning}" TextWrapping="Wrap" />
	</DockPanel>
</UserControl>
<UserControl x:Class="SharpLab.IKnow.ItemBankPane.SentenceView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:local="clr-namespace:SharpLab.IKnow.ItemBankPane"
	>
	<UserControl.Resources>
		<local:StringToTextBlockConverter x:Key="StringToTextBlockConverter" />
	</UserControl.Resources>

	<UserControl.Content>
		<Binding Path="Text" Mode="OneTime"  Converter="{StaticResource StringToTextBlockConverter}" />
	</UserControl.Content>
</UserControl>

昨日、iKnow Developers Conferenceというイベントに行ってきました。iKnowを提供しているCeregoによる催しで、iKnowの中の人によるWeb APIなどの今後の方向性の説明と、LT、Developer Challengeの結果発表、飲み会、という流れで行われました。

中の人による話には、これから増える予定のAPIの話もちらほらあり、どれもうまく使えば中々面白そうなものが揃っていました。transliterationを引くためのAPIはもうすぐらしいので、期待したいですね。積極的に多言語化を図っており、中国語の文ではピンインを取得できるのが素敵です。また、OAuthを使わないとOpenIDで利用しているユーザーは利用できないよ、という話もあったのですが、これは初耳でした。OpenIDについて調べねば…。

LTではそれぞれ面白いお話が色々と。流行りなのか、大半の人はiPhoneかRubyに絡めているような印象を受けました。が、その中で異彩を放っていたのは@isocchiさんのLT。DSを絡めた作品が出てくるとは思っていなかったので、これにはかなり驚きました。マジコンを使っているので、一般に配布するとなると色々問題があるのかもしれませんが、それはともかく、デモは観ていて興味をそそられるものでした。iPhoneはスタイラスによる入力ではなく、指によるタッチ入力にチューニングされているという話があったので、iPhone向けに作り直すのは難しいようですが、それならWindowsMobile(Silverlight2 for Mobileとか(Mobile版でもスタイラスイベントやインクはオミットされないはず…。))やAndroidならどうかなぁと思ってみたり。

Developer Challenge。まだ結果発表ページが出来ていないですが、洋楽の歌詞データベースとiKnowのリスト作成機能を組み合わせたサイトと、iPhone向けアプリが賞をとっていました。自分のiKnow ItemBankPanel for WordiKnow ItemBankPanel for VisualStudioは残念ながら駄目でした。まぁ作り込みが甘かったし機能も限られていたから仕方ない…。他にも色々応募作があったようなので見てみたいですね。

飲み会。@isocchiさんの隣。自分と同じ大学生ということを知り、少し話をさせてもらったのですが、やっぱりこうやって勉強会に来られている人は出来る方が多いですね。自分は一年後あの位技術のレパートリーを増やせているだろうか…。
また、iKnowの中の人である、@dominiekさんや@novさんにも挨拶出来ました。iKnow ItemBankPanelもそこそこ気に入ってもらえていたようで、良かった良かった。

が、その際、ちょっと話をするのにも事欠く今の英語力は、絶対なんとかしないとなと思ったり。特にSpeaking能力。Native同士の会話に割って入るような、多人数の会話ではなく、Native対自分というような一対一の状況、それであれば普通こちらのレベルに合わせて向こうが喋るスピード、言い回しのレベルを調整してくれるので、Listening能力はそれほど問題にはならないのですが、Speaking能力が低くて自分が言いたいことをすぐその場で英語で表現できなければどうしようもないので…。いやはや。難しいですね。そういえば、今学期の英語のプレゼンの授業でもそうでした。プレゼンをひたすら行うのは、一方的に喋るだけということもあって、まぁ楽勝だったのですが、質疑応答は非常に難儀するものでした。いつか英語で当意即妙な答えを返せるようになりたいですね…。

JAN
15

iKnow ItemBankPanel for Word公開!

Published:2009-01-15 20:47:31 UTC

iKnow APIを使ったアプリケーション第二弾。

iKnow ItemBankPanel for Word

iKnowという英語のeラーニングサイトが公開されているWeb APIを使い、英和・和英辞書機能を提供するMicrosoft Office Wordアドインです。iKnow ItemBankPanel for VisualStudioをVisualStudio向けだけに留めておくのも勿体ない、ということで作成しました。Visual Studioは使わなくとも、Wordを使う人は多いでしょう。Wordで英語のドキュメントを読む、或いは書くときに役立てて頂ければと思います。

このアドインはWordの「校閲」タブ内に追加された「iKnow ItemBankPanel」ボタンから表示され、英和・和英辞書検索ができます。また、このアドインから、検索した単語をiKnowの単語リストへ追加することが可能です。

また、あわせてiKnow ItemBankPanel for Word 及びiKnow ItemBankPanel for VisualStudioのソースコードを公開しました。時間がおしていた関係もあって、かなり散らかったソースコードになっているので、ほんとは公開できたものではないのですが・・・。まぁ敢えて見るところがあるとしたら、VisualStudioのアドインのインストーラ、アンインストーラの作成方法位でしょうか。出来るだけ早く、リファクタリングして差し替えたいと思います。

JAN
13

7 ようやく、先月の後半から作り始めたVisualStudioのアドインが一応の完成をみました。

iKnow ItemBankPanel for VisualStudio

iKnowという英語のeラーニングサイトが公開されているWeb APIを使い、英和・和英辞書機能を提供するVisualStudioアドインです。
これでiKnow! API KICK OFF! Developer Challenge – iKnow!というコンテストに応募する予定です。

このアドインはVisualStudioのツールペインとして表示され、ソースコードエディタのコンテキストメニューから選択語の検索などができます。また、このアドインから、検索した単語をiKnowの単語リストへ追加することが可能です。

プログラムを書く途中、識別子名を決める時に引く、あるいは他人のコードを読んでいるときに分からなかった単語を引く、といった使い方を想定しています。また、引いた単語をiKnowのリストに登録できるので、その分からなかった単語をiKnowのアプリで学習することが出来るというのも結構重宝する機能だと思っています。 最近はめっきりさぼってしまっていますが、iKnowは自分のお気に入りのWebサービスの一つで、TOEFLの勉強につかったりしていました。

なお、iKnow ItemBankPanel for VisualStudioのソースコードは近いうちに公開する予定です。慣れないWPFを使ったせいもあって、かなり散らかったソースコードになっているので、あまり公開できたものではないのですが…。