📄 mainfrm.cpp
字号:
//返回请求的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 + -