📄 frmcsdnreader.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using feiyun0112.cnblogs.com.CSDNReader.Model;
using feiyun0112.cnblogs.com.CSDNReader.Controls;
using feiyun0112.cnblogs.com.CSDNReader.Functions;
using System.Net;
namespace feiyun0112.cnblogs.com.CSDNReader
{
public partial class frmCSDNReader : Form
{
private Icon _CSDNIcon;
private Icon _CSDNNewIcon;
private object _refrashRoomLock = new object();
public frmCSDNReader()
{
InitializeComponent();
Variant.MainForm = this;
Variant.CurrentUser = new User();
//任务栏上的图标
this._CSDNIcon = Properties.Resources.CSDN;
this._CSDNNewIcon = Properties.Resources.CSDNNew;
InitEvents();
InitTree();
}
private void frmCSDNReader_Load(object sender, EventArgs e)
{
Variant.CurrentUser = (User)CommonFunc.DeserializeObject(Variant.UserFileName);
timerRefresh.Interval = 1;
timerRefresh.Enabled = true;
timerMessage.Interval = 1;
timerMessage.Enabled = true;
timerHideInfo.Interval = 1;
timerHideInfo.Enabled = true;
this.Text = "CSDN Reader V " + Setting.Version;
}
/// <summary>
/// 初始化事件
/// </summary>
private void InitEvents()
{
//有新帖子
DelegateFunc.RefreshTopicsEvent += new DelegateRefreshTopics(this.RefreshRoom);
//登陆成功
DelegateFunc.LoginEvent += new DelegateLogin(this.RefreshUser);
//刷新状态栏上的信息
DelegateFunc.RefreshInfoEvent += new DelegateRefreshInfo(this.RefreshInfo);
}
/// <summary>
/// 卸载事件
/// </summary>
/// <param name="strInfo"></param>
private void UnloadEvents()
{
//有新帖子
DelegateFunc.RefreshTopicsEvent -= new DelegateRefreshTopics(this.RefreshRoom);
//登陆成功
DelegateFunc.LoginEvent -= new DelegateLogin(this.RefreshUser);
//刷新状态栏上的信息
DelegateFunc.RefreshInfoEvent -= new DelegateRefreshInfo(this.RefreshInfo);
}
private void RefreshInfo(string strInfo)
{
if (this.InvokeRequired)
{
DelegateRefreshInfo d = new DelegateRefreshInfo(RefreshInfo);
this.Invoke(d, new object[] { strInfo });
}
else
{
stuInfo.Text = strInfo;
timerHideInfo.Enabled = true;
}
}
private void RefreshUser()
{
if (this.InvokeRequired)
{
DelegateLogin d = new DelegateLogin(RefreshUser);
this.Invoke(d);
}
else
{
if (Variant.CurrentUser == null ||string.IsNullOrEmpty( Variant.CurrentUser.Name))
{
this.stuUser.Text = "未登录";
}
else
{
this.stuUser.Text = Variant.CurrentUser.Name;
}
}
}
private void RefreshRoom(int intRoomID, bool blnNoRead, bool blnCountChanged)
{
if (this.InvokeRequired)
{
DelegateRefreshTopics d = new DelegateRefreshTopics(RefreshRoom);
this.Invoke(d, new object[] { intRoomID, blnNoRead, blnCountChanged });
}
else
{
lock (_refrashRoomLock)
{
if (blnNoRead)
{
this.TrayIcon.Icon = this._CSDNNewIcon;
}
Room r = listTopics.Tag as Room;
if (r != null && r.ID == intRoomID)
{
ListViewFunc.RefreshListView(intRoomID);
}
TreeviewFunc.RefreshTreeview(TreeRoom.Nodes, intRoomID, blnNoRead, blnCountChanged);
}
}
}
private static void InitTree()
{
TreeviewFunc.FillNode();
}
#region 社区
#region 添加
private void mnuRoom_Add_Click(object sender, EventArgs e)
{
AddRoom();
}
private void tnRoom_Add_Click(object sender, EventArgs e)
{
AddRoom();
}
private static void AddRoom()
{
Model.Room room = Room.AddRoom();
if(room!=null)
{
TreeviewFunc.AddRoom(room);
}
}
#endregion 添加
#region 修改
private void btnRoom_Edit_Click(object sender, EventArgs e)
{
EditRoom();
}
private void mnuRoom_Edit_Click(object sender, EventArgs e)
{
EditRoom();
}
private void EditRoom()
{
if (Model.Variant.CurrentRoom != null)
{
Model.Room room = Model.Room.EditRoom(Model.Variant.CurrentRoom);
if (room != null)
{
TreeviewFunc.EditRoom(Model.Variant.CurrentRoom, room);
tpTopics.Text = room.Name;
}
}
}
#endregion 修改
#region 删除
private void btnRoom_Del_Click(object sender, EventArgs e)
{
DelRoom();
}
private void mnuRoom_Del_Click(object sender, EventArgs e)
{
DelRoom();
}
private static void DelRoom()
{
if (Model.Variant.CurrentRoom != null)
{
if (MsgFunc.ShowQuestion(string.Format("确定删除 {0} 吗?", Model.Variant.CurrentRoom.Name)) == DialogResult.Yes)
{
TreeviewFunc.DelRoom(Model.Variant.CurrentRoom);
}
}
}
#endregion 删除
private void mnuRoom_Exit_Click(object sender, EventArgs e)
{
this.ExitApplication();
}
private void ExitApplication()
{
UnloadEvents();
this.TrayIcon.Visible = false;
base.Hide();
Application.Exit();
}
#endregion 社区
#region 帖子
private void mnuTopic_Open_Click(object sender, EventArgs e)
{
this.ShowTopic();
}
private void ShowTopic()
{
MakeReaded();
timerShowTopic.Stop();
timerShowTopic.Start();
}
private void mnuTopic_OpenAll_Click(object sender, EventArgs e)
{
bool blnReaded = false;
foreach (ListViewItem item1 in listTopics.Items)
{
Topic t = item1.Tag as Topic;
if ((t != null) && !t.HaveRead)
{
if (!t.HaveRead && !t.ReadAgain)
{
blnReaded = true;
TopicTabPage tpTopic = t.TabPage;
if (tpTopic == null)
{
tpTopic = new TopicTabPage();
tabTopics.TabPages.Add(tpTopic);
}
t.TabPage = tpTopic;
tpTopic.Topic = t;
}
t.HaveRead = true;
ListViewFunc.setListviewItemFont(item1, t);
}
}
if (blnReaded) this.TrayIcon.Icon = this._CSDNIcon;
Room r = listTopics.Tag as Room;
if (r != null)
{
r.UnreadItems = -1;
r.Items = -1;
TreeviewFunc.MarkRoomReaded(TreeRoom.Nodes, r.ID);
}
}
private void mnuTopic_OpenIE_Click(object sender, EventArgs e)
{
this.ShowTopic2();
}
private void ShowTopic2()
{
ListViewItem item1 = this.listTopics.FocusedItem;
if (item1 != null)
{
Topic t = item1.Tag as Topic;
if ((t != null))
{
System.Diagnostics.Process.Start(t.URL);
}
}
}
/// <summary>
/// 获得打开帖子的最新内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mnuTopic_Refresh_Click(object sender, EventArgs e)
{
foreach (TabPage tab in tabTopics.TabPages )
{
TopicTabPage tb = tab as TopicTabPage;
if (tb!=null)
{
tb.Topic = tb.Topic;
}
}
}
private void mnuTopic_Readed_Click(object sender, EventArgs e)
{
MakeReaded();
}
private void MakeReaded()
{
timerMarkRead.Stop();
timerMarkRead.Start();
}
private void mnuPopTopic_Readed_Click(object sender, EventArgs e)
{
MakeReaded();
}
private void mnuPopTopic_OpenIE_Click(object sender, EventArgs e)
{
this.ShowTopic2();
}
#endregion 帖子
#region TreeRoom event
private void TreeRoom_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
TreeNode node1 = this.TreeRoom.GetNodeAt(e.X, e.Y);
this.TreeRoom.SelectedNode = node1;
}
}
/// <summary>
/// TreeViewEX控件需要的事件,用来显示帖子数(未读/总数)
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private string TreeRoom_GetNodeInfo(System.Windows.Forms.TreeNode node)
{
Room r = (Room)node.Tag;
if (r == null || r.IsGroup )
{
return null;
}
int num1 = r.UnreadItems;
////int num2 = r.Items;
////return (num1 + "/" + num2);
return num1.ToString();
}
private void TreeRoom_AfterExpand(object sender, TreeViewEventArgs e)
{
if (e.Node.Nodes.Count > 0)
{
e.Node.SelectedImageKey = "folderopen";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -