⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmcsdnreader.cs

📁 定义社区节点
💻 CS
📖 第 1 页 / 共 2 页
字号:
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 + -