2 using System.Collections.Generic;
\r
4 using System.Windows;
\r
5 using System.Windows.Controls;
\r
6 using System.Windows.Data;
\r
7 using System.Windows.Media;
\r
8 using System.Windows.Documents;
\r
10 using NT2chView.NtNet;
\r
11 using NT2chView.NtFile;
\r
12 using NT2chView.NtHtml;
\r
13 using System.Threading;
\r
14 using System.Windows.Threading;
\r
15 using System.Windows.Controls.Primitives;
\r
16 using System.Diagnostics;
\r
17 using System.Collections.ObjectModel;
\r
18 using System.Windows.Media.Imaging;
\r
20 using System.Windows.Input;
\r
27 public partial class MainWindow : Window
\r
29 //List<string> mFavoriteBoardList = new List<string>();
\r
30 //List<string> mFavoriteThreadList = new List<string>();
\r
32 public void AddGraphic(string path)
\r
34 tabCtrlMain.SelectedItem = tabItemGraphics;
\r
35 mGraphicsPanel.AddGraphic(path);
\r
38 public void OpenMoviePanel(string id)
\r
40 tabCtrlMain.SelectedItem = tabItemMovie;
\r
41 mMoviePanel.NavigateYoutube(id);
\r
44 void constructNgTabItem(TabItem ti)
\r
46 NTNgItems ngItem = NTNgItems.getContext();
\r
47 List<string> list;// = ngItem.getNgWords();
\r
48 int idx = cmbNgEditKind.SelectedIndex;
\r
52 list = ngItem.getNgWords();
\r
55 list = ngItem.getNgNames();
\r
58 list = ngItem.getNgIds();
\r
64 StringBuilder sb = new StringBuilder(64);
\r
65 foreach (string s in list)
\r
66 sb.Append(s).Append('\n');
\r
68 if(txtNgEdit != null)
\r
69 txtNgEdit.Text = sb.ToString();
\r
73 /*void removeFavoriteThread(string description)
\r
75 if (description.Trim().Length == 0)
\r
77 int len = mFavoriteThreadList.Count;
\r
79 for (; idx < len; idx++)
\r
81 if (mFavoriteThreadList[idx].Equals(description))
\r
87 mFavoriteThreadList.RemoveAt(idx);
\r
91 void removeFavoriteBoard(string description)
\r
93 if (description.Trim().Length == 0)
\r
95 int len = mFavoriteBoardList.Count;
\r
97 for (; idx < len; idx++)
\r
99 if (mFavoriteBoardList[idx].Equals(description))
\r
105 mFavoriteBoardList.RemoveAt(idx);
\r
111 public void addFavoriteBoard(string description)
\r
113 if (description.Trim().Length == 0)
\r
116 /*foreach (string s in mFavoriteBoardList)
\r
117 if (s.Equals(description))
\r
120 //ListBoxItem item = new ListBoxItem();
\r
121 //item.Tag = description;
\r
122 //item.Content = description;
\r
123 mFavoriteBoardList.Add(description);*/
\r
124 //NTFileAccess.addFavoriteBoardToFile(description);
\r
125 NTFavoriteBoard fb = mFavoriteData.addBoardByDescription(description, false);
\r
126 mFavoritePanel.addBoard(fb);
\r
130 public void addFavoriteThread(NTThreadTitle thread)
\r
132 string description = thread.mDat + NTTextUtiles.YEN_VALUE[0]
\r
133 + thread.mBoard.mName + NTTextUtiles.YEN_VALUE[0]
\r
136 if (description.Trim().Length == 0)
\r
139 string[] values = description.Split(NTTextUtiles.YEN_VALUE);
\r
140 if (values.Length < 3)
\r
143 NTFavoriteThread ft = mFavoriteData.addThreadByDescription(description, false, true);
\r
147 mFavoritePanel.addThread(ft);
\r
150 /*foreach (string s in mFavoriteThreadList)
\r
151 if (s.Equals(description))
\r
154 mFavoriteThreadList.Add(description);*/
\r
159 public void removeFavoriteThread(NTThreadTitle thread)
\r
161 string description = thread.mDat + NTTextUtiles.YEN_VALUE[0]
\r
162 + thread.mBoard.mName + NTTextUtiles.YEN_VALUE[0]
\r
165 if (description.Trim().Length == 0)
\r
168 string[] values = description.Split(NTTextUtiles.YEN_VALUE);
\r
169 if (values.Length < 3)
\r
172 int idx = mFavoriteData.findThread(thread.getBoard().getName(), thread.getDatName(), thread.getTitle());
\r
176 NTFavoriteThread ft = mFavoriteData.getThreadList()[idx];
\r
180 mFavoritePanel.removeThread(ft);
\r
183 if (!mFavoriteData.removeThreadByDescription(description, true))
\r
186 /*foreach (string s in mFavoriteThreadList)
\r
187 if (s.Equals(description))
\r
190 mFavoriteThreadList.Remove(description);*/
\r
194 public void appendBoardToExternalCategoryTree(NTBoard board)
\r
196 NTCategory exCate = NTDataRoot.getExternalBoards();
\r
197 mCategoryPanel.addExternalCategory(exCate);
\r
198 if (mCategoryPanel.isExternalCategorySelected())
\r
200 mBoardPanel.BoardTable = exCate.mBoardList;
\r
205 public void removeBoardFromExternalCategoryTree(string boardName)
\r
207 if (mCategoryPanel.isExternalCategorySelected())
\r
209 NTCategory exCate = NTDataRoot.getExternalBoards();
\r
210 mBoardPanel.BoardTable = exCate.mBoardList;
\r
216 //static readonly string[] LIST_COLUMN_HEADERS =
\r
217 // { " No. ", "スレッドタイトル", "レス数 ", " 既読 "," 未読 ", "最終取得日", "最終書込日" };
\r
218 // static readonly string[] LIST_COLUMN_HEADERS_PNAME =
\r
219 // { "SeqNo", "Title", "ResCnt", "ReadCnt", "RemainCnt","LastMod", "LastWrite" };
\r
221 TabItem constructResViewTabItem(NTThreadTitle thread)
\r
224 if (0 <= (idx = searchThreadFromTabItems(thread)))
\r
226 return tabCtrlDat.Items[idx] as TabItem;
\r
229 StackPanel sp = new StackPanel();
\r
230 sp.Orientation = Orientation.Horizontal;
\r
233 sp.Margin = new Thickness(0);
\r
234 ContextMenu cm = new System.Windows.Controls.ContextMenu();
\r
235 sp.ContextMenu = cm;
\r
236 setThreadTabHeaderContextMenu(thread, sp.ContextMenu);
\r
239 sp.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(threadTab_MouseLeftButtonDown);
\r
240 sp.MouseEnter += sp_MouseEnter;
\r
241 sp.MouseLeave += sp_MouseLeave;
\r
242 TextBlock tb = new TextBlock();
\r
243 string title = thread.Title.Trim();
\r
244 if (title.Length > 20)
\r
245 tb.Text = title.Substring(0, 20);
\r
251 tb.ContextMenu = cm;
\r
252 sp.Children.Add(tb);
\r
253 tb = new TextBlock();
\r
255 tb.VerticalAlignment = System.Windows.VerticalAlignment.Center;
\r
257 Button btn = new Button();
\r
260 btn.Click += new RoutedEventHandler(btnDatTabItemClose_Click);
\r
261 //btn.MouseEnter += btn_MouseEnter;
\r
264 sp.Children.Add(btn);
\r
268 TabItem tabItem = new TabItem();
\r
269 tabItem.Header = sp;
\r
270 tabItem.Tag = thread;
\r
272 tabItem.GotFocus += new RoutedEventHandler(tabItem_GotFocus);
\r
273 tabCtrlDat.Items.Add(tabItem);
\r
278 void sp_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
\r
280 StackPanel sp = sender as StackPanel;
\r
283 if (sp.Children.Count < 2)
\r
285 TextBlock tb = sp.Children[0] as TextBlock;
\r
288 Button btn = sp.Children[1] as Button;
\r
292 string s = tb.Tag as string;
\r
295 //if (s.Length > 20)
\r
296 // s.Substring(0, 20);
\r
304 void sp_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
\r
306 StackPanel sp = sender as StackPanel;
\r
309 if(sp.Children.Count < 2)
\r
311 TextBlock tb = sp.Children[0] as TextBlock;
\r
314 Button btn = sp.Children[1] as Button;
\r
318 string s = tb.Tag as string;
\r
321 //if (s.Length > 20)
\r
322 // s.Substring(0, 20);
\r
324 int len = s.Length;
\r
325 //len = (len < 4) ? 2 : len - 1;
\r
326 s = s.Substring(0, --len);
\r
335 /* void btn_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
\r
337 Button btn = sender as Button;
\r
341 ContextMenu cm = btn.ContextMenu;
\r
345 //throw new NotImplementedException();
\r
348 DateTime mMouseMovetime = DateTime.Now;
\r
350 void document_MouseMove(object sender, MouseEventArgs e)
\r
352 //NTDebug.l("+++ AAA +++");
\r
353 DateTime dt = DateTime.Now;
\r
354 TimeSpan ts = dt.Subtract(mMouseMovetime);
\r
355 if(2 < ((int)(ts.TotalSeconds))){
\r
356 //NTDebug.l("+++ BBB +++");
\r
357 mMouseMovetime = DateTime.Now;
\r
359 //throw new NotImplementedException();
\r
362 void UpdateThread(NTThreadTitle thread)
\r
364 NTBoard board = thread.mBoard;
\r
365 //int oldReadCnt = thread.mResCnt;
\r
367 if (board.mMachiBBS)
\r
369 //updateResViewTabItemMachiBBS(thread);
\r
374 //if (0 > (idx = searchThreadFromTabItems(thread)))
\r
381 thread.mPrevReadCnt = thread.ReadCnt;
\r
384 if (!NTHttpAccess.getDat(board.mAddress, board.mName, thread.mDat, thread.Title))
\r
386 NTDebug.l("getting the dat data failed.");
\r
390 string strDat = NTFileAccess.retrieveDatFromFile(board.mName, thread.mDat);
\r
391 if (null == strDat)
\r
397 thread.parseDat(strDat);
\r
398 thread.updateReadCntOnCloud();
\r
400 int numRead;// = thread.ReadCnt;
\r
404 NTFileAccess.retrieveDatAttrToFile(board.mName, thread.mDat,
\r
405 out numRead, out writes, out bookmarkes, out lastWrite);
\r
408 if (thread.ReadCnt > thread.mPrevReadCnt)
\r
410 int wroteNo = thread.findWroteMsg(thread.mPrevReadCnt + 1);
\r
413 thread.addWriteTag(wroteNo);
\r
414 thread.addBookmark(wroteNo);
\r
415 writes = thread.mWriteNoList.ToArray();
\r
416 bookmarkes = thread.mBookmarkList.ToArray();
\r
417 NTRes res = thread.findRes(wroteNo);
\r
420 res.mWroteMsg = true;
\r
421 res.mBookmark = true;
\r
428 NTFileAccess.storeDatAttrToFile(board.mName, thread.mDat, thread.ResCnt, writes, bookmarkes);
\r
429 thread.LastMod = DateTime.Now.ToString();
\r
433 if (numRead > 0 && thread.mPrevReadCnt == numRead)
\r
439 thread.mPrevReadCnt = numRead;
\r
441 mResPanel.OpenThread(thread);
\r
443 if (numRead < thread.ResCnt)
\r
445 Thread th = new Thread(ResTabUpdate);
\r
449 mFavoritePanel.OnNotifyBoardUpdate(board);
\r
453 public void ResTabUpdate()
\r
455 Thread.Sleep(1000);
\r
457 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
\r
458 (ThreadStart)delegate()
\r
460 mResPanel.JumpToNew();
\r
461 IThread ithread = mResPanel.getCurrentThread();
\r
462 NTThreadTitle thread = ithread as NTThreadTitle;
\r
463 if (thread != null)
\r
465 thread.mPrevReadCnt = thread.ReadCnt;
\r
466 NTBoard board = thread.mBoard;
\r
468 mFavoritePanel.OnNotifyBoardUpdate(board);
\r
477 public void NgEdit_setResSection(NTRes res)
\r
479 tabItemNgEdit.IsSelected = true;
\r
481 string name = res.mName;
\r
482 string id = res.mId;
\r
483 string msg = res.mMsg;
\r
485 txtNgNameEdit.Text = name;
\r
486 txtNgIdEdit.Text = id;
\r
487 txtNgWordEdit.Text = NTTextFormat.removeTag(msg);// parseResMsgForNgWord(msg);
\r
490 void lv_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
\r
492 NTDebug.l("R-Button Down on LIstView.");
\r
493 //throw new NotImplementedException();
\r
497 void SubjectListHeader_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
\r
499 TextBlock tb = sender as TextBlock;
\r
503 ListView lv = tb.Tag as ListView;
\r
507 NTBoard board = lv.Tag as NTBoard;
\r
511 ObservableCollection<NTThreadTitle> list = lv.ItemsSource as ObservableCollection<NTThreadTitle>;
\r
515 List<NTThreadTitle> sortList = new List<NTThreadTitle>();
\r
516 foreach (NTThreadTitle tt in list)
\r
522 //board.mThreadListSortStack;
\r
523 foreach (string s in board.mThreadListSortStack)
\r
525 if (s.Equals(tb.Text))
\r
527 board.mThreadListSortStack.Remove(s);
\r
531 //board.mThreadListSortStack.Add(tb.Text);
\r
533 //foreach (string s in board.mThreadListSortStack)
\r
539 sortList.Sort(SubjectListSortBySeqNo);
\r
542 sortList.Sort(SubjectListSortByTitle);
\r
545 sortList.Sort(SubjectListSortByResCnt);
\r
548 sortList.Sort(SubjectListSortByReadCnt);
\r
551 sortList.Sort(SubjectListSortByRemainCnt);
\r
554 sortList.Sort(SubjectListSortByLastMod);
\r
557 sortList.Sort(SubjectListSortByLastWrite);
\r
562 foreach (NTThreadTitle tt in sortList)
\r
566 static int SubjectListSortBySeqNo(NTThreadTitle thread1, NTThreadTitle thread2)
\r
568 return thread1.SeqNo - thread2.SeqNo;
\r
571 static int SubjectListSortByTitle(NTThreadTitle thread1, NTThreadTitle thread2)
\r
573 return thread2.Title.CompareTo(thread1.Title);
\r
575 static int SubjectListSortByResCnt(NTThreadTitle thread1, NTThreadTitle thread2)
\r
577 return thread2.ResCnt - thread1.ResCnt;
\r
579 static int SubjectListSortByReadCnt(NTThreadTitle thread1, NTThreadTitle thread2)
\r
581 return thread2.ReadCnt - thread1.ReadCnt;
\r
583 static int SubjectListSortByRemainCnt(NTThreadTitle thread1, NTThreadTitle thread2)
\r
585 return thread2.RemainCnt - thread1.RemainCnt;
\r
587 static int SubjectListSortByLastMod(NTThreadTitle thread1, NTThreadTitle thread2)
\r
589 DateTime dt1 = DateTime.MinValue;
\r
590 DateTime dt2 = DateTime.MinValue;
\r
593 dt1 = DateTime.Parse(thread1.LastMod);
\r
598 dt2 = DateTime.Parse(thread2.LastMod);
\r
602 return dt2.CompareTo(dt1);
\r
605 static int SubjectListSortByLastWrite(NTThreadTitle thread1, NTThreadTitle thread2)
\r
607 DateTime dt1 = DateTime.MinValue;
\r
608 DateTime dt2 = DateTime.MinValue;
\r
611 dt1 = DateTime.Parse(thread1.LastWrite);
\r
616 dt2 = DateTime.Parse(thread2.LastWrite);
\r
620 return dt2.CompareTo(dt1);
\r
625 void lv_SelectionChanged(object sender, SelectionChangedEventArgs e)
\r
627 //NTDebug.l("TEST");
\r
629 //lv.SelectionMode = SelectionMode.Single;
\r
631 if (!(sender is ListView))
\r
634 lv = (ListView)sender;
\r
635 object o = lv.SelectedItem;
\r
636 if (!(o is NTThreadTitle))
\r
639 NTThreadTitle tt = (NTThreadTitle)o;
\r
645 public bool OpenNewBoard(NTBoard board)
\r
647 string strSubject = null;
\r
648 if (!board.mDataInit)
\r
651 if (!NTFileAccess.isSubjectExsists(board.mName))
\r
652 if (!NTHttpAccess.getSubject(board.mAddress, board.mName))
\r
655 strSubject = NTFileAccess.retrieveSubjectDataFromFile(board.mName);
\r
656 if (strSubject == null)
\r
659 if (!board.parseSubjectData(strSubject, mFavoriteData))
\r
665 public void OpenNewThread(NTThreadTitle thread)
\r
667 if (thread == null)
\r
672 string strDatName = thread.mDat;
\r
674 NTBoard board = thread.mBoard;
\r
676 if (board.mMachiBBS)
\r
678 bRet = NTHttpAccess.getMachiBBSDat(board.mAddress, board.mName, thread.mDat, thread.Title);
\r
679 strDatName = NTHttpUtils.ridSuffixFromCgiName(thread.mDat);
\r
680 strDat = NTFileAccess.retrieveDatFromFile(board.mName, strDatName);
\r
681 if (null == strDat)
\r
686 if (!thread.mLocalDat)
\r
688 bRet = NTHttpAccess.getDat(board.mAddress, board.mName, thread.mDat, thread.Title);
\r
690 else if (NTUserPreference.MaruIsEnabled)
\r
692 string sid = NTMaru.getSessionId();
\r
693 bRet = NTHttpAccess.getDatFromKako(board.mAddress, board.mName,
\r
694 thread.mDat, thread.Title, sid);
\r
696 strDat = NTFileAccess.retrieveDatFromFile(board.mName, thread.mDat);
\r
697 if (null == strDat)
\r
701 if (thread.Title.Length == 0)
\r
703 string strTitle = NTFileAccess.retrieveTitleFromDat(strDat);
\r
704 if (strTitle != null)
\r
706 thread.Title = strTitle;
\r
707 NTFileAccess.storeDatTitle(board.mName, strDatName/*thread.mDat*/, strTitle);
\r
710 bool cloudData = false;
\r
711 if (NTUserPreference.NTCloudIsEnabled)
\r
713 string strThreadAttr ;
\r
714 if (NTUserPreference.NTUserCloudIsEnabled)
\r
716 strThreadAttr = NTHttpAccess.UserCloudQueryAttrValue(board.mName, thread.mDat);
\r
720 strThreadAttr = NTHttpAccess.ntQueryAttrValue(board.mName, thread.mDat);
\r
722 if (strThreadAttr != null)
\r
725 thread.parseAttr(strThreadAttr);
\r
730 thread.mPrevReadCnt = thread.ReadCnt;
\r
732 thread.parseDat(strDat);
\r
736 thread.updateReadCntOnCloud();
\r
742 NTFileAccess.retrieveDatAttrToFile(board.mName, strDatName,//thread.mDat,
\r
743 out numRead, out writes, out bookmarkes, out lastWrite);
\r
746 writes = thread.mWriteNoList.ToArray();
\r
747 bookmarkes = thread.mBookmarkList.ToArray();
\r
751 thread.mWriteNoList.Clear();
\r
752 thread.mWriteNoList.AddRange(writes);
\r
753 thread.mBookmarkList.Clear();
\r
754 thread.mBookmarkList.AddRange(bookmarkes);
\r
757 thread.setupBookmark();
\r
758 thread.setupWriteTag();
\r
759 if (numRead < thread.ResCnt || cloudData)
\r
761 NTFileAccess.storeDatAttrToFile(board.mName, strDatName/*thread.mDat*/, thread.ResCnt, writes, bookmarkes);
\r
762 thread.LastMod = DateTime.Now.ToString();
\r
766 thread.LastMod = lastWrite;
\r
768 thread.mPrevReadCnt = (thread.mPrevReadCnt < numRead) ? numRead : thread.mPrevReadCnt;
\r
771 mResPanel.OpenThread(thread);
\r
773 if (numRead < thread.ResCnt)
\r
775 Thread th = new Thread(ResTabUpdate);
\r
780 TabItem item = constructResViewTabItem(tt/*, true*/);
\r
783 if (item.Content == null || tt.ResCnt > tt.ReadCnt)
\r
785 string savedTitle = tt.Title;
\r
786 constructResContent(item);
\r
787 if (savedTitle.Length == 0 && tt.Title.Length > 0)
\r
789 StackPanel sp = item.Header as StackPanel;
\r
792 if(sp.Children.Count > 0)
\r
794 TextBlock tb = sp.Children[0] as TextBlock;
\r
797 if (tt.Title.Length > 20)
\r
798 tb.Text = tt.Title.Substring(0, 20);
\r
800 tb.Text = tt.Title;
\r
807 tabCtrlDat.SelectedItem = item;
\r
814 void UpdateBoardTabItem(NTBoard board)
\r
818 if (0 > (idx = searchBoardFromTabItemIndex(board)))
\r
820 MessageBox.Show("開かれた板が見つかりません。");
\r
824 TabItem ti = (TabItem)tabCtrlSubject.Items[idx];
\r
826 constructBoardTabItemContent(board, ti);
\r
835 void constructBoardTabItem(NTBoard board /*, bool fromWeb*/)
\r
838 if (0 <= (idx = searchBoardFromTabItemIndex(board)))
\r
840 tabCtrlSubject.SelectedIndex = idx;
\r
845 if (!NTHttpAccess.getSubject(board.mAddress, board.mName))
\r
849 string strSubject = NTFileAccess.retrieveSubjectDataFromFile(board.mName);
\r
851 if (null == strSubject)
\r
854 if (!board.parseSubjectData(strSubject))
\r
858 TabItem tabItem = new TabItem();
\r
859 StackPanel sp = new StackPanel();
\r
860 sp.Orientation = Orientation.Horizontal;
\r
862 ContextMenu cm = new System.Windows.Controls.ContextMenu();
\r
863 sp.ContextMenu = cm;
\r
864 setBoardTabHeaderContextMenu(board, cm);
\r
865 sp.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(boardTab_MouseLeftButtonDown);
\r
866 //sp.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(sp_MouseLeftButtonUp);
\r
867 sp.MouseEnter +=sp_MouseEnter;
\r
868 sp.MouseLeave +=sp_MouseLeave;
\r
870 sp.Margin = new Thickness(0);
\r
872 TextBlock tb = new TextBlock();
\r
873 string boardName = board.mName;
\r
874 if(boardName.Length < 3)
\r
875 boardName = " " + boardName + " ";
\r
876 else if(boardName.Length == 3)
\r
877 boardName = boardName + " ";
\r
878 tb.Text = boardName;
\r
879 tb.Tag = boardName;
\r
880 sp.Children.Add(tb);
\r
881 tb = new TextBlock();
\r
883 tb.VerticalAlignment = System.Windows.VerticalAlignment.Center;
\r
886 Button btn = new Button();
\r
891 btn.Click += new RoutedEventHandler(btnSubjectTabItemClose_Click);
\r
892 sp.Children.Add(btn);
\r
894 tabItem.Header = sp;
\r
895 tabItem.Tag = board;
\r
896 tabCtrlSubject.Items.Add(tabItem);
\r
897 tabCtrlSubject.SelectionChanged += tabCtrlSubject_SelectionChanged;
\r
900 //NTThreadTitle mSelectedThreadTitle = null;
\r
901 //NTBoard mSelectedBoard = null;
\r
904 private int mDoubleCickTime = System.Windows.Forms.SystemInformation.DoubleClickTime;
\r
905 private int mFirstClickTime = 0;
\r
906 void boardTab_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
\r
908 NTDebug.l("Enterinf MouseDown");
\r
910 if (mSelectedBoard == null)
\r
912 if (sender is StackPanel)
\r
914 StackPanel sp = (StackPanel)sender;
\r
915 if (sp.Tag is NTBoard)
\r
917 mSelectedBoard = (NTBoard)sp.Tag;
\r
918 DateTime dt = DateTime.Now;
\r
919 mFirstClickTime = dt.Second*1000 + dt.Millisecond;
\r
925 DateTime dt = DateTime.Now;
\r
926 int clickTime = dt.Second*1000 + dt.Millisecond;
\r
927 clickTime -= mFirstClickTime;
\r
928 if (clickTime <= mDoubleCickTime)
\r
930 if (sender is StackPanel)
\r
932 StackPanel sp = (StackPanel)sender;
\r
933 if (sp.Tag is NTBoard)
\r
935 if (mSelectedBoard.Equals(sp.Tag))
\r
937 NTDebug.l("Dbl Clicked!");
\r
938 UpdateBoardTabItem(mSelectedBoard);
\r
942 mSelectedBoard = null;
\r
943 mFirstClickTime = 0;
\r
947 if (sender is StackPanel)
\r
949 StackPanel sp = (StackPanel)sender;
\r
950 if (sp.Tag is NTBoard)
\r
952 mSelectedBoard = (NTBoard)sp.Tag;
\r
953 mFirstClickTime = dt.Second * 1000 + dt.Millisecond;
\r
960 void threadTab_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
\r
962 NTDebug.l("Entering MouseDown");
\r
963 if (mSelectedThreadTitle == null)
\r
965 if (sender is StackPanel)
\r
967 StackPanel sp = (StackPanel)sender;
\r
968 if (sp.Tag is NTThreadTitle)
\r
970 mSelectedThreadTitle = (NTThreadTitle)sp.Tag;
\r
971 DateTime dt = DateTime.Now;
\r
972 mFirstClickTime = dt.Second * 1000 + dt.Millisecond;
\r
978 DateTime dt = DateTime.Now;
\r
979 int clickTime = dt.Second * 1000 + dt.Millisecond;
\r
980 clickTime -= mFirstClickTime;
\r
981 if (clickTime <= mDoubleCickTime)
\r
983 if (sender is StackPanel)
\r
985 StackPanel sp = (StackPanel)sender;
\r
986 if (sp.Tag is NTThreadTitle)
\r
988 if (mSelectedThreadTitle.Equals(sp.Tag))
\r
990 NTDebug.l("Dbl Clicked!");
\r
991 //UpdateBoardTabItem(mSelectedBoard);
\r
992 //updateResViewTabItem(mSelectedThreadTitle);
\r
996 mSelectedThreadTitle = null;
\r
997 mFirstClickTime = 0;
\r
1001 if (sender is StackPanel)
\r
1003 StackPanel sp = (StackPanel)sender;
\r
1004 if (sp.Tag is NTThreadTitle)
\r
1006 mSelectedThreadTitle = (NTThreadTitle)sp.Tag;
\r
1007 mFirstClickTime = dt.Second * 1000 + dt.Millisecond;
\r
1014 public NTThreadTitle findSelectedThreadTitle()
\r
1016 object o = tabCtrlDat.SelectedItem;
\r
1017 TabItem item = o as TabItem;
\r
1021 NTDebug.l(item.Header.ToString());
\r
1022 object o2 = item.Tag;
\r
1023 NTThreadTitle thread = o2 as NTThreadTitle;
\r
1030 void storeOpenedBoardList()
\r
1032 List<IBoard> boardList = mSubjectPanel.QueryOpenedBoardList();
\r
1033 if (boardList == null)
\r
1035 int cnt = boardList.Count;
\r
1036 string[] list = new string[cnt];
\r
1037 for (int i = 0; i < cnt; i++)
\r
1039 list[i] = boardList[i].getName();
\r
1042 /*int cnt = tabCtrlSubject.Items.Count;
\r
1043 string[] list = new string[cnt];
\r
1044 for (int i = 0; i < cnt; i++)
\r
1046 object o = tabCtrlSubject.Items[i];
\r
1048 if (!(o is TabItem))
\r
1050 if (!((((TabItem)o).Tag) is NTBoard))
\r
1053 NTBoard b = (NTBoard)(((TabItem)o).Tag);
\r
1054 list[i] = b.mName;
\r
1057 NTPersistentFileAccess.storeOpenedBoards(list);
\r
1061 void storeOpenedThreadList()
\r
1064 int cnt = tabCtrlDat.Items.Count;
\r
1065 string[] list = new string[cnt];
\r
1066 for (int i = 0; i < cnt; i++)
\r
1068 object o = tabCtrlDat.Items[i];
\r
1070 if (!(o is TabItem))
\r
1072 if (!((((TabItem)o).Tag) is NTThreadTitle))
\r
1075 NTThreadTitle tt = (NTThreadTitle)(((TabItem)o).Tag);
\r
1076 list[i] =tt.mDat + "," + tt.mBoard.mName;
\r
1079 NTPersistentFileAccess.storeOpenedThreads(list);
\r
1084 int searchBoardFromTabItemIndex(NTBoard board)
\r
1086 for (int i = 0; i < tabCtrlSubject.Items.Count; i++)
\r
1088 object o = tabCtrlSubject.Items[i];
\r
1090 if (!(o is TabItem))
\r
1092 if (!((((TabItem)o).Tag) is NTBoard))
\r
1095 NTBoard b = (NTBoard)(((TabItem)o).Tag);
\r
1097 if (board.mName.Equals(b.mName))
\r
1103 int searchTabItemIndexFromTabCtrl(TabControl ctrl, TabItem item)
\r
1105 for (int i = 0; i < ctrl.Items.Count; i++)
\r
1107 if (item.Equals(tabCtrlDat.Items[i]))
\r
1113 TabItem searchBoardFromTabItem(NTBoard board)
\r
1115 int idex = searchBoardFromTabItemIndex(board);
\r
1119 return tabCtrlSubject.Items[idex] as TabItem;
\r
1123 int searchThreadFromTabItems(NTThreadTitle thread)
\r
1126 for (int i = 0; i < tabCtrlDat.Items.Count; i++)
\r
1128 object o = tabCtrlDat.Items[i];
\r
1130 if (!(o is TabItem))
\r
1132 if (!((((TabItem)o).Tag) is NTThreadTitle))
\r
1135 NTThreadTitle tt = (NTThreadTitle)(((TabItem)o).Tag);
\r
1137 if (thread.Title.Equals(tt.Title))
\r
1144 public void removeThreadFromTabCtrl(NTThreadTitle tt)
\r
1147 int idx = searchThreadFromTabItems(tt);
\r
1151 tabCtrlDat.Items.RemoveAt(idx);
\r
1153 int cnt = tabCtrlDat.Items.Count;
\r
1156 if (tabCtrlDat.SelectedIndex < 0)
\r
1158 tabCtrlDat.SelectedIndex = cnt - 1;
\r
1162 TabItem item = tabCtrlDat.SelectedItem as TabItem;
\r
1166 if (item.Content == null)
\r
1167 constructResContent(item);
\r
1175 public static ScrollViewer findScrollViewer(FlowDocumentScrollViewer flowDocumentScrollViewer)
\r
1177 if (VisualTreeHelper.GetChildrenCount(flowDocumentScrollViewer) == 0)
\r
1182 // Border is the first child of first child of a ScrolldocumentViewer
\r
1183 DependencyObject firstChild = VisualTreeHelper.GetChild(flowDocumentScrollViewer, 0);
\r
1184 if (firstChild == null)
\r
1189 Decorator border = VisualTreeHelper.GetChild(firstChild, 0) as Decorator;
\r
1191 if (border == null)
\r
1196 return border.Child as ScrollViewer;
\r