void CBookmarksView::OnLoadFile(bool mergeFlag) { if (m_list.GetItemCount() > 0) { if (mergeFlag) { if (MessageBox(LOAD_MERGE_BOOKMARKS_MSG, _T("Warning"), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2) != IDYES) { return; } } else if (MessageBox(LOAD_BOOKMARKS_MSG, _T("Warning"), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2) != IDYES) { return; } } CUnicodeFile file; std::_tstring xmlStr; file.Open(BookmarksFilePath()); if (file.IsOpen()) { file.Read(xmlStr); file.Close(); BOOL bResult = FALSE; std::_tstring bookmarks; int index = 0; bookmarks = FindTag(xmlStr, _T("bookmarks"), index); if (index >= 0) { index = 0; int col = 0; if (!mergeFlag) { m_listMaster.DeleteAllItems(); } std::_tstring bookmark, line, type, user, lineNum, column, module, attribute, attributeType, description; while (index >= 0) { bookmark = FindTag(bookmarks, _T("bookmark"), index); if (index >= 0) { int bookmarkIndex = 0; lineNum = FindTag(bookmark, _T("line"), bookmarkIndex); type = FindTag(bookmark, _T("type"), bookmarkIndex); column = FindTag(bookmark, _T("column"), bookmarkIndex); user = FindTag(bookmark, _T("user"), bookmarkIndex); module = FindTag(bookmark, _T("module"), bookmarkIndex); attribute = FindTag(bookmark, _T("attribute"), bookmarkIndex); attributeType = FindTag(bookmark, _T("attrtype"), bookmarkIndex); description = FindTag(bookmark, _T("description"), bookmarkIndex); bool foundDupe = false; for (int i = 0; i < m_listMaster.GetItemCount(); ++i) { std::_tstring lineDupe = m_listMaster.GetItemText(i, 0); std::_tstring moduleDupe = m_listMaster.GetItemText(i, 3); std::_tstring attributeDupe = m_listMaster.GetItemText(i, 4); if (lineDupe == lineNum && moduleDupe == module && attributeDupe == attribute) { foundDupe = true; } } if (!foundDupe) { if (lineNum.length() > 0 && attribute.length() > 0 && description.length() > 0) { int row = 0; col = 0; row = m_listMaster.InsertItem(col++, lineNum.c_str()); m_listMaster.SetItemText(row, col++, type.c_str()); m_listMaster.SetItemText(row, col++, user.c_str()); m_listMaster.SetItemText(row, col++, module.c_str()); m_listMaster.SetItemText(row, col++, attribute.c_str()); m_listMaster.SetItemText(row, col++, attributeType.c_str()); m_listMaster.SetItemText(row, col++, description.c_str()); BookmarkItemData *data = new BookmarkItemData; data->marked = true; data->bookmarkType = m_listMaster.StringToType(type); data->column = boost::lexical_cast<int>(column); m_listMaster.SetItemData(row, (DWORD_PTR)data); } } } } for (int i = 0; i < col; ++i) { m_list.SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER); } } DoRefresh(NULL, 0); } else { MessageBox(LOAD_UNFOUND_BOOKMARKS_MSG, _T("Warning")); } }
void CBookmarksView::OnSaveFile() { if (m_list.GetItemCount() > 0) { if (MessageBox(SAVE_BOOKMARKS_MSG, _T("Warning"), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2) != IDYES) { return; } CComPtr<IXMLWriter> writer = CreateIXMLWriter(true); writer->PushElement(_T("bookmarks")); std::_tstring bookmarks; for (int i = 0; i < m_list.GetItemCount(); ++i) { std::_tstring line = m_list.GetItemText(i, 0); std::_tstring type = m_list.GetItemText(i, 1); std::_tstring user = m_list.GetItemText(i, 2); std::_tstring module = m_list.GetItemText(i, 3); std::_tstring attribute = m_list.GetItemText(i, 4); std::_tstring attributeType = m_list.GetItemText(i, 5); std::_tstring description = m_list.GetItemText(i, 6); BookmarkItemData *data = reinterpret_cast<BookmarkItemData *>(m_list.GetItemData(i)); std::wstringstream col; col << (data->column); std::_tstring column = col.str(); writer->PushElement(_T("bookmark")); writer->PushElement(_T("line"), line); writer->PopElement(); writer->PushElement(_T("type"), type); writer->PopElement(); writer->PushElement(_T("column"), column); writer->PopElement(); writer->PushElement(_T("user"), user); writer->PopElement(); writer->PushElement(_T("module"), module); writer->PopElement(); writer->PushElement(_T("attribute"), attribute); writer->PopElement(); writer->PushElement(_T("attrtype"), attributeType); writer->PopElement(); writer->PushElement(_T("description"), description); writer->PopElement(); writer->PopElement(); // bookmark } writer->PopElement(); writer->EndDocument(bookmarks); CUnicodeFile file; file.Create(BookmarksFilePath(), GENERIC_WRITE, CREATE_ALWAYS); if (file.IsOpen()) { file.Write(bookmarks.c_str()); file.Close(); } } }