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

📄 mainfrm.cpp

📁 离线的RSS阅读器
💻 CPP
📖 第 1 页 / 共 2 页
字号:

		//返回请求的XML的地址,保存在*URL中
		//在此处解析XML


		//判断该URL在当前目录下面是否存在
		CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);

		DirNode *data = (DirNode*)view->getSelData();
		if (data==NULL)
		{
			AfxMessageBox("请先选择一个分类");
			return ;
		}
		if (data->type)
		{
			return;
		}
		MyTreeNode *child = data->firstChild;
		while (child)
		{
			//遍历当前目录的每一个子节点,和每一个频道子节点URL进行比较
			if (child->type==1)
			{
				ChannelNode *cchild = (ChannelNode*)child;
				if (!strcmp(cchild->url,url))
				{
					AfxMessageBox("频道已经存在");
					return;
				}
			}
			child = child->nextSubling;
		}
		//向网络上面请求xml数据,并解析
		Channel * channel = XMLGetChannelByURL(url);
		if (!channel->items)
		{
			AfxMessageBox("RSS源路径不正确");
			return;
		}
		//添加频道
		view->addChannel(channel);
		CItemListView* listview=(CItemListView*)m_spli2.GetPane(0,0);
		listview->showChannel(channel->items);
		delete url;
	}
}

//删除频道
void CMainFrame::OnCategoryDelete() 
{
	// TODO: Add your command handler code here
	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	if (!view->deleteCategory(true))
	{
		if (AfxMessageBox(TEXT("是否删除该分类及其所有子频道"),MB_OKCANCEL)==IDOK)
		{
			view->deleteCategory(false);
		}
	}
}



void CMainFrame::OnCategoryModify() 
{
	// TODO: Add your command handler code here
	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	view->modifyCategory();
}

//显示一个频道的项
void CMainFrame::onShowChannel(){
	//获取当前选中的频道的id
	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	int id = view->getSelId();
	//从数据库中获取当前频道的数据
	ItemList *itemlist = DBGetItemById(id,channelDB);
	//显示当前频道的数据
	CItemListView *listView = (CItemListView*)m_spli2.GetPane(0,0);
	listView->showChannel(itemlist);
}

//删除频道
void CMainFrame::onDeleteChannel(){
	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	view->deleteChannel();
}

//更新频道
void CMainFrame::onUpdateChannel(){
	m_wndStatusBar.SetPaneText(0,TEXT("正在更新"));
	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	MyTreeNode *node = view->getSelData();
	/*updateAllChannel(node)*/;
	CItemListView *view1 = (CItemListView*)m_spli2.GetPane(0,0);
	//AfxBeginThread((AFX_THREADPROC)updateAllChannel,node);
	if (node->type!=1)
	{
		return;
	}
	ChannelNode *channelNode = (ChannelNode*)node;
	updateThreadFun(channelNode);
// 	Channel *channel = XMLGetChannelByURL(channelNode->url);
// 	view1->showChannel(channel->items);
// 	DBUpdateChannel(channelNode->id,channel->items,db);
	ItemList *items = DBGetItemById(channelNode->id,NULL);
	view1->showChannel(items);
	m_wndStatusBar.SetPaneText(0,TEXT("完成"));
}

//查找
void CMainFrame::onSearchChannel(){
	OnCategorySearch();
}

//查找
void CMainFrame::OnCategorySearch() 
{
	// TODO: Add your command handler code here
	//获取查找的相关参数
	char c1 = ' ',c2 = ' ',c3 = ' ';
	char *start = &c1;
	char *end = &c2;
	char *key = &c3;
	int type = 0;
	CSearchDlg *dlg = new CSearchDlg(&key,&type,&start,&end);
	if(dlg->DoModal()==1){
		CChannelListView *view = (CChannelListView *)m_spli1.GetPane(0,0);
		ItemList *result = search((MyTreeNode*)view->getSelData(),key,start,end,type);
		CItemListView *listview = (CItemListView*)m_spli2.GetPane(0,0);	
		listview->showChannel(result);
	}
}

int _updateAllFun(void *param){
	MyTreeNode *root = (MyTreeNode*)param;
	while (root)
	{
		updateAllChannel(root);
		root = root->nextSubling;
	}
	return 0;
}
//全部更新
void CMainFrame::OnUpdateALL(){
	
 	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	MyTreeNode *root = view->getChannelRoot();

	MyTreeNode *dir = view->getSelData();

	if (!dir)
	{
		AfxBeginThread((AFX_THREADPROC)_updateAllFun,root);
	}
	else{
		AfxBeginThread((AFX_THREADPROC)updateAllChannel,dir);
	}
	
}

//更新菜单的状态
void CMainFrame::OnUpdateTreeSelect(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CChannelListView *view = (CChannelListView *)m_spli1.GetPane(0,0);
	if (view->getSelData()==NULL||view->getSelData()->type!=0||!view->focus())
	{
		pCmdUI->Enable(false);
	}
	
}


//更新菜单的状态
void CMainFrame::OnUpdateRss(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CChannelListView *view = (CChannelListView *)m_spli1.GetPane(0,0);
	if (view->getSelData()==NULL||view->getSelData()->type!=1||!view->focus())
	{
		pCmdUI->Enable(false);
	}
}

//更新菜单的状态
void CMainFrame::OnUpdateChannelAndCategory(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CChannelListView *view = (CChannelListView *)m_spli1.GetPane(0,0);
	if (view->getSelData()==NULL||!view->focus())
	{
		pCmdUI->Enable(false);
	}
}



void CMainFrame::OnChannelSortAuthor() 
{
	// TODO: Add your command handler code here
	this->sortItem(2,-1);
}

void CMainFrame::OnChannelSortDown() 
{
	// TODO: Add your command handler code here
	this->sortItem(-1,0);
}

void CMainFrame::sortItem(int type,int arc){
	CItemListView *view = (CItemListView*)m_spli2.GetPane(0,0);
	view->sort(type,arc);

	CMenu *mainMenu = this->GetMenu();
	CMenu *sortMenu = mainMenu->GetSubMenu(2)->GetSubMenu(4);
	if (type>0)
	{
		sortMenu->CheckMenuItem(0,MF_UNCHECKED|MF_BYPOSITION);
		sortMenu->CheckMenuItem(1,MF_UNCHECKED|MF_BYPOSITION);
		sortMenu->CheckMenuItem(2,MF_UNCHECKED|MF_BYPOSITION);
		sortMenu->CheckMenuItem(type-1,MF_CHECKED|MF_BYPOSITION);
	}
	if (arc!=-1)
	{
		if (arc)
		{
			sortMenu->CheckMenuItem(4,MF_CHECKED|MF_BYPOSITION);
			sortMenu->CheckMenuItem(5,MF_UNCHECKED|MF_BYPOSITION);
		}
		else{
			sortMenu->CheckMenuItem(5,MF_CHECKED|MF_BYPOSITION);
			sortMenu->CheckMenuItem(4,MF_UNCHECKED|MF_BYPOSITION);
		}
	}
}

void CMainFrame::OnChannelSortTitle() 
{
	// TODO: Add your command handler code here
	this->sortItem(1,-1);
}

void CMainFrame::OnChannelSortUp() 
{
	// TODO: Add your command handler code here
	this->sortItem(-1,1);
}

void CMainFrame::OnChannelSortTime() 
{
	// TODO: Add your command handler code here
	this->sortItem(3,-1);
}

void CMainFrame::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	MyTreeNode *root = view->getChannelRoot();
	while (root)
	{
		MyTreeNode *temp = root;
		root = root->nextSubling;
		deleteTree(temp);
	}

	root = view->getCollectTreeRootData();
	while (root)
	{
		MyTreeNode *temp = root;
		root = root->nextSubling;
		deleteTree(temp);
	}

	CItemListView *view2 = (CItemListView*)m_spli2.GetPane(0,0);
	ItemList *listRoot = view2->getCurItems();
	while (listRoot)
	{
		ItemList *temp = listRoot;
		listRoot = listRoot->nextItem;
		delete temp;
	}

	CFrameWnd::OnClose();
}

void CMainFrame::newRootCategory(){
	CChannelListView *view = (CChannelListView*)m_spli1.GetPane(0,0);
	view->newCategoryRoot();
}

void CMainFrame::findALL(char *key){
	AfxMessageBox("暂时没有实现");
	ItemList *items = DBFindAll(key);	
}

void CMainFrame::OnCategoryNewRoot() 
{
	// TODO: Add your command handler code here
	this->newRootCategory();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -