3 using System.Collections.Generic;
\r
5 using System.Windows;
\r
6 using System.Windows.Controls;
\r
7 using System.Windows.Data;
\r
8 using System.Windows.Documents;
\r
9 using System.Windows.Input;
\r
10 using System.Windows.Media;
\r
11 using System.Windows.Media.Imaging;
\r
12 using System.Windows.Navigation;
\r
13 using System.Windows.Shapes;
\r
15 using NT2chCtrl.html;
\r
21 /// NTResViewPanel.xaml の相互作用ロジック
\r
23 /// 2ぃとちゃん for Windowsのレス画面に表示される
\r
24 /// コントロールを定義します。IResViewインターフェースのメソッドは
\r
25 /// フレームワークから呼び出すので、削除しないで下さい。
\r
26 /// また、このコントロールの名前も変更できません。
\r
27 /// NTResViewPanel_util.csはアプリケーションフレームワークとの
\r
28 /// インターフェースとなるヘルパーメソッドを定義してありますので
\r
30 /// フレームワークから渡される2chデータのオブジェクトについては
\r
31 /// NTInterfaceDecl.csの定義を参照して下さい。
\r
32 /// 基本的にNTが先頭に着くファイル名は本ファイルを除いて編集できません。
\r
33 /// 本ファイルについては、IResViewインターフェースのメソッドが実装されている限り
\r
37 public partial class NTResViewPanel : UserControl,
\r
38 IResView , IResViewJump, IResViewSearch
\r
40 IThread mCurrentThread = null;
\r
41 //ResViewUI mResUI = null;
\r
42 ThreadHistoryUI mThreadHistoryUI = null;
\r
43 int mSavedPrevReadCount = 0;
\r
44 ResListAdapter mResListAdapter = null;
\r
46 public NTResViewPanel()
\r
48 InitializeComponent();
\r
51 private void ResViewPanel_Loaded(object sender, RoutedEventArgs e)
\r
53 mThreadHistoryPanel.Children.Clear();
\r
54 mFontSetupToolbar.Visibility = System.Windows.Visibility.Collapsed;
\r
55 mAutoScrollToolbar.Visibility = System.Windows.Visibility.Collapsed;
\r
56 mBtnResumeAutoPlay.Visibility = System.Windows.Visibility.Collapsed;
\r
59 TouchSupportScrollViewer sv =
\r
60 new TouchSupportScrollViewer(mThreadMenuScrollViewer,
\r
61 mThreadHistoryPanel);
\r
66 * 現在アクティブなスレッドを確認する為にフレームワークから
\r
69 public IThread getCurrentThread()
\r
71 return mCurrentThread;
\r
76 * アプリケーションフレームワークから、新しいスレッドを表示する要求が
\r
79 public bool OpenThread(IThread ithread)
\r
81 mCurrentThread = ithread;
\r
82 if (ithread == null)
\r
87 if (mThreadHistoryUI != null)
\r
89 mThreadHistoryUI.AddButton(ithread);
\r
90 mThreadMenuScrollViewer.ScrollToTop();
\r
93 mResListAdapter = new ResListAdapter(this, ithread, mCommand, mUtil);
\r
95 mSavedPrevReadCount = ithread.getPrevReadCount();
\r
96 if (mSavedPrevReadCount < 0)
\r
98 mSavedPrevReadCount = 0;
\r
101 mResListPanel.setAdapter(mResListAdapter, mSavedPrevReadCount);
\r
103 continueAutoScroll();
\r
105 return true;// mResUI.OpenThread(ithread, mFlowDocResView);
\r
108 private const string RES_LAYOUT_HTML_FILE = @"\res_layout.html";
\r
111 public void initResLayout(bool debug)
\r
113 if (mCommand == null)
\r
116 string path = mCommand.GetDataPath() + RES_LAYOUT_HTML_FILE;
\r
118 string htmlSource = loadHtml(path);
\r
119 //if (htmlSource == null)
\r
121 html.HtmlParser parser;
\r
122 if (!ResViewCtrlState.getInstance().init(htmlSource, mCommand, out parser)
\r
123 && debug && (parser != null && parser.hasError()))
\r
126 NTScriptDebugger debugger = new NTScriptDebugger();
\r
127 debugger.ErrorMessage = parser.getErrorMessage();
\r
128 debugger.ErrorLine = parser.getErrorLine();
\r
129 debugger.ErrorSrcIndex = parser.getErrorSrcIndex();
\r
130 debugger.HtmlSource = htmlSource;
\r
132 debugger.initParam();
\r
133 NTScriptDebugger.ShowWindow(debugger);
\r
138 //コントロール初期化時に、これまでに閲覧したスレッドの履歴リストが渡されます。
\r
139 public bool SetThreadReadHistory(List<IThreadDescription> threadDescriptionList)
\r
141 mThreadHistoryUI = new ThreadHistoryUI(mCommand,mUtil, threadDescriptionList,
\r
142 mThreadHistoryPanel);
\r
145 if(getDict().TryGetValue(PREF_PARAM.RES_VIEW_ZOOM_VALUE, out o))
\r
147 string s = o as string;
\r
151 if (double.TryParse(s, out zoom))
\r
153 //mFlowDocResView.Zoom = zoom;
\r
160 public void OnNotifyThreadUpdated(IBoard iboard)
\r
162 if (mThreadHistoryUI == null)
\r
164 mThreadHistoryUI.UpdateButton(iboard);
\r
168 //このコントロールで管理しているスレッド閲覧リストを取得する為に呼ばれます。
\r
169 public List<IThreadDescription> QueryThreadReadHistory()
\r
171 if (mThreadHistoryUI == null)
\r
173 return mThreadHistoryUI.getCurrentList();
\r
175 //オブジェクトがアンロードされる前に呼ばれます。
\r
176 //ここで、オブジェクトの永続データーを保存して下さい。
\r
177 public void SaveCurrentState()
\r
179 //double zoom = mFlowDocResView.Zoom;
\r
180 //getDict().Remove(PREF_PARAM.RES_VIEW_ZOOM_VALUE);
\r
181 //getDict().Add(PREF_PARAM.RES_VIEW_ZOOM_VALUE, zoom.ToString());
\r
185 public void ToggleFontSetupTool()
\r
187 if(mFontSetupToolbar.Visibility != System.Windows.Visibility.Collapsed)
\r
188 mFontSetupToolbar.Visibility = System.Windows.Visibility.Collapsed;
\r
190 mFontSetupToolbar.Visibility = System.Windows.Visibility.Visible;
\r
193 public void ToggleAutoScroll()
\r
195 if (mAutoScrollToolbar.Visibility != System.Windows.Visibility.Collapsed)
\r
197 mAutoScrollToolbar.Visibility = System.Windows.Visibility.Collapsed;
\r
198 mResListPanel.setAutoScroll(false, 0);
\r
202 mAutoScrollToolbar.Visibility = System.Windows.Visibility.Visible;
\r
203 mResListPanel.setAutoScroll(true, mAutoScrollSliderValue);
\r
207 public void UpdateTextSelMode(bool selMode)
\r
209 if (null == mResListAdapter)
\r
211 mResListAdapter.updateTextSelMode(selMode);
\r
214 void continueAutoScroll()
\r
216 if (mAutoScrollToolbar.Visibility == System.Windows.Visibility.Visible)
\r
218 mAutoScrollToolbar.Visibility = System.Windows.Visibility.Visible;
\r
219 mResListPanel.setAutoScroll(true, mAutoScrollSliderValue);
\r
224 * スレッドの先頭にスクロースする要求が有った時に呼ばれます。
\r
226 public void JumpToTop()
\r
228 mResListPanel.setScrollItemPosition(0);
\r
231 * スレッドの最後にスクロースする要求が有った時に呼ばれます。
\r
233 public void JumpToBottom()
\r
235 List<IRes> resList = mCurrentThread.getResList();
\r
236 int num = resList.Count;
\r
240 mResListPanel.setScrollItemPosition(num);
\r
243 * スレッドの新着にスクロースする要求が有った時に呼ばれます。
\r
245 public void JumpToNew()
\r
247 mResListPanel.setScrollItemPosition(mSavedPrevReadCount);
\r
249 public void JumpTo(int position)
\r
251 mResListPanel.setScrollItemPosition(position);
\r
253 public void InvalidateItems()
\r
255 mResListPanel.InvalidateItems();
\r
258 * スレッドの新着にスクロースする要求が有った時に呼ばれます。
\r
260 public void JumpToNextBookmark()
\r
262 int current = mResListPanel.getCurrentPosition();
\r
265 int scrollTo = mResListAdapter.NextBookmark(current);
\r
269 mResListPanel.setScrollItemPosition(scrollTo);
\r
272 //指定された検索文字列を選択状態にして下さい。
\r
273 public void SetSearchWord(string searchWord)
\r
275 int current = mResListPanel.getCurrentPosition();
\r
278 mResListAdapter.SetSearchWord(searchWord, current);
\r
280 //指定された検索文字列の後方にマッチする文字列を選択して下さい。
\r
281 public void SearchNext()
\r
283 int cursor = mResListAdapter.SearchNext();
\r
287 mResListPanel.setScrollItemPosition(cursor);
\r
289 //指定された検索文字列の前方にマッチする文字列を選択して下さい。
\r
290 public void SearchPrev()
\r
292 int cursor = mResListAdapter.SearchPrev();
\r
296 mResListPanel.setScrollItemPosition(cursor);
\r
299 private void UIElementListPanel_Loaded(object sender, RoutedEventArgs e)
\r
301 this.mResListPanel.init();
\r
304 private void btnFontReduce_Click(object sender, RoutedEventArgs e)
\r
306 mResListAdapter.ZoomOut();
\r
309 private void btnFontEnlarge_Click(object sender, RoutedEventArgs e)
\r
311 mResListAdapter.ZoomIn();
\r
314 double mAutoScrollSliderValue = 1;
\r
315 private void mAutoScrollRatioSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
\r
317 if (mAutoScrollRatio == null)
\r
320 double val = e.NewValue;
\r
323 mAutoScrollSliderValue = val;
\r
324 string s =string.Format("Current Speed x{0:0.##}", val);
\r
325 mAutoScrollRatio.Text = s;
\r
327 mResListPanel.setAutoScroll(true, val);
\r
330 private void mBtnPauseAutoPlay_Click(object sender, RoutedEventArgs e)
\r
332 mBtnResumeAutoPlay.Visibility = System.Windows.Visibility.Visible;
\r
333 mBtnPauseAutoPlay.Visibility = System.Windows.Visibility.Collapsed;
\r
334 mResListPanel.pauseAutoScroll();
\r
337 private void mBtnResumeAutoPlay_Click(object sender, RoutedEventArgs e)
\r
339 mBtnResumeAutoPlay.Visibility = System.Windows.Visibility.Collapsed;
\r
340 mBtnPauseAutoPlay.Visibility = System.Windows.Visibility.Visible;
\r
341 mResListPanel.resumeAutoScroll();
\r
343 private void mBtnReverseAutoPlay_Click(object sender, RoutedEventArgs e)
\r
345 mResListPanel.toggleScrollDirection();
\r