📄 kingbookdoc.cpp
字号:
/// <summary>响应添加图书事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>显示图书信息对话框; 添加图书; 产生新的图书信息文件;更新所有视图, 显示新图书的详细.<br/>
/// 新图书所属的分类,已经在TreeView中选中.
/// </remarks>
void CKingBookDoc::OnAddBook()
{
// 新的图书(包括ID)
Library::Book bookNewInfo;
CBookInfoDlg infoDlg(_T("添加图书"), bookNewInfo);
if( infoDlg.DoModal() == IDOK) // 确定 添加
{
// 图书信息
bookNewInfo = infoDlg.GetBookInfo();
try{
this->bookLib.AddNewBook(Library::BookObject(this->m_strShownBookClass), bookNewInfo);
this->bookLib.Save();
this->m_strShownBook = bookNewInfo.GetID();
this->CreateBookInfoFile(bookNewInfo.GetID());
// 更新视图
this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
}
catch(Library::KXmlFileException &e)
{
AfxMessageBox(e.what());
}
}
}
/// <summary>响应删除图书事件.删除在ListView中选中的图书.</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>删除图书;更新所有视图.<br/>
/// <b>不确定性</b>ListView中不一定选中哪本图书, InfoView中不一定显示哪种内容.
/// </remarks>
void CKingBookDoc::OnDeleteBook()
{
// 确认对话框
try{
this->bookLib.DeleteBook(this->m_strShownBook);
this->bookLib.Save();
// 更新视图
this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
}
catch(Library::KXmlFileException &e)
{
AfxMessageBox(e.what());
}
}
/// <summary>响应编辑分类的信息事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>
/// <b>步骤:</b>
/// <list type="number">
/// <item><description>显示分类信息对话框<c>CBookClassInfoDLg</c>, 修改现有的分类信息</description></item>
/// <item><description>修改分类的信息, 更新图书数据文件</description></item>
/// <item><description>更新所有视图, 但是只有TreeView需要响应这个消息而更新视图</description></item>
/// </list>
/// </remarks>
void CKingBookDoc::OnEditBookclass()
{
// TODO: BookClass 的默认构造函数
// DONE:
Library::BookClass bookClassOldInfo;
this->bookLib.GetBookClassInfo(Library::BookObject(this->m_strShownBookClass), bookClassOldInfo);
CBookClassInfoDLg infoDlg(_T("编辑分类信息"), bookClassOldInfo);
if(infoDlg.DoModal() == IDOK) // 确认修改
{
Library::BookClass bookClassNewInfo = infoDlg.GetBookClassInfo();
try{
this->bookLib.ModifyBookClassInfo(bookClassOldInfo, bookClassNewInfo);
this->bookLib.Save();
// 更新视图, 告诉TreeView在树中修改节点标题
this->UpdateAllViews(NULL, IDUP_DOC_BOOKCLASS_EDIT);
}
catch(Library::KXmlFileException &e)
{
AfxMessageBox(e.what());
}
}
}
/// <summary>响应添加子分类事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>新添加的分类的父分类, 在TreeView中已经选中<br/>
/// <b>步骤:</b>
/// <list type="number">
/// <item><description>显示分类信息对话框<c>CBookClassInfoDLg</c>, 添加新分类的信息</description></item>
/// <item><description>添加分类的信息, 更新图书数据文件</description></item>
/// <item><description>更新所有视图</description></item>
/// </list>
/// </remarks>
void CKingBookDoc::OnAddSubBookclass()
{
Library::BookClass subBookClass;
//this->bookLib.GetBookClassInfo(Library::BookObject(this->m_strShownBookClass), bookClassOldInfo);
CBookClassInfoDLg infoDlg(_T("添加子分类"), subBookClass);
if(infoDlg.DoModal() == IDOK) // 确认添加
{
subBookClass = infoDlg.GetBookClassInfo();
try{
this->bookLib.AddNewBookClass(subBookClass, Library::BookObject(this->m_strShownBookClass));
this->bookLib.Save();
this->m_strShownBookClass = subBookClass.GetID();
// 更新视图, 告诉TreeView在树中添加新节点
this->UpdateAllViews(NULL, IDUP_DOC_BOOKCLASS_ADD);
}
catch(Library::KXmlFileException &e)
{
AfxMessageBox(e.what());
}
}
}
/// <summary>相应删除分类</summary>
/// <summary>响应删除分类事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>没有警告信息.<br/>
/// <b>步骤:</b>
/// <list type="number">
/// <item><description>删除图书, 更新数据文件</description></item>
/// <item><description>更新所有视图</description></item>
/// </list>
/// </remarks>
void CKingBookDoc::OnDeleteBookclass()
{
try{
this->bookLib.DeleteBookClass(this->m_strShownBookClass);
this->bookLib.Save();
// 更新视图
this->UpdateAllViews(NULL, IDUP_DOC_BOOKCLASS_DEL);
}
catch(Library::KXmlFileException &e)
{
AfxMessageBox(e.what());
}
}
void CKingBookDoc::SetTitle(LPCTSTR lpszTitle)
{
CDocument::SetTitle(_T("Kingbook 电子图书管理"));
}
// 相应添加到收藏夹
/// <summary>响应添加到收藏夹事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>在ListView中选中的图书, 将被添加到收藏夹.
/// </remarks>
void CKingBookDoc::OnAddtoFavorite()
{
// AfxMessageBox(_T("OnAddtoFavorite"));
try{
this->bookLib.AddToFavorite(this->m_strShownBook);
this->bookLib.Save();
}
catch(Library::KXmlFileException &e)
{
AfxMessageBox(e.what());
}
}
/// <summary>响应从收藏夹删除事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>
/// </remarks>
void CKingBookDoc::OnDelfromFavorite()
{
// AfxMessageBox(_T("OnAddtoFavorite"));
try{
this->bookLib.DeleteFromFavorite(this->m_strShownBook);
this->bookLib.Save();
// 更新视图
this->UpdateAllViews(NULL, IDUP_DOC_BOOK);
}
catch(Library::KXmlFileException &e)
{
AfxMessageBox(e.what());
}
}
BOOL CKingBookDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
return TRUE;
//if (!CDocument::OnOpenDocument(lpszPathName))
// return FALSE;
/// / TODO: 在此添加您专用的创建代码
//return TRUE;
}
/// <summary>响应批量添加图书事件</summary>
/// <returns>void</returns>
/// <exception>NULL</exception>
/// <remarks>
/// </remarks>
void CKingBookDoc::OnAddBatchBook()
{
CAddbatDlg batDlg("批量添加图书");
// batDlg.SetWizardMode();
if(batDlg.DoModal() == IDOK)
{
int nCount = batDlg.booksInfo.size();
for(int i = 0; i < nCount; i ++)
{
this->bookLib.AddNewBook(Library::BookObject(this->m_strShownBookClass),
batDlg.booksInfo[i]);
}
this->bookLib.Save();
}
}
/// <summary>Infoview(HtmlView)中显示图书的详细信息, 需要一个文件, 以便用IE显示. 这个函数产生文件</summary>
/// <param name="bookID">[IN]ListView中选中图书的ID</param>
/// <param name="force">[IN]ListView中选中图书的ID</param>
/// <returns>返回产生的文件的文件名</returns>
/// <exception>这个函数不抛出异常</exception>
/// <remarks></remarks>
CString CKingBookDoc::CreateBookInfoFile(const std::string& bookID, bool force)
{
Library::Book bookInfo;
this->bookLib.GetBookInfo(Library::BookObject(bookID), bookInfo);
std::string fileName = ((CKingBookApp*)AfxGetApp())->GetTemp();
fileName = fileName + "\\" + this->m_strShownBook + ".xml";
if(force ) // 强制重新创建
{
std::string xslt = ((CKingBookApp*)AfxGetApp())->GetXslt();
bookInfo.SaveToFile(fileName, xslt);
return fileName.c_str();
}
// 测试文件是否已经存在, 如果不存在, 重新创建
HANDLE hFile;
hFile = CreateFile(fileName.c_str(), // file to open
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE) // 不存在
{
std::string xslt = ((CKingBookApp*)AfxGetApp())->GetXslt();
bookInfo.SaveToFile(fileName, xslt);
}
return fileName.c_str();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -