const TCHAR *GetText(bool refresh, bool noBroadcast = false) const
 {
     clib::recursive_mutex::scoped_lock proc(m_mutex);
     if (!m_eclFetched || refresh)
     {
         CUnicodeFile file;
         file.Open(m_path);
         std::_tstring ecl;
         file.Read(ecl);
         file.Close();
         m_ecl = ecl.c_str();
         m_eclFetched = true;
     }
     return m_ecl;
 }
    bool Save(IAttributeVector & attributes, bool noBroadcast = false)
    {
        clib::recursive_mutex::scoped_lock proc(m_mutex);
        for(IAttributeVector::iterator itr = attributes.begin(); itr != attributes.end(); ++itr)
        {
            std::_tstring newModFile;
            bool inCurrentAttr = false;
            bool alreadyExisted = false;

            typedef std::vector<std::_tstring> split_vector_type;
            split_vector_type SplitVec; 
            boost::algorithm::split(SplitVec, m_modFile, boost::algorithm::is_any_of("\r\n"), boost::algorithm::token_compress_on);

            for (split_vector_type::const_iterator itr2 = SplitVec.begin(); itr2 != SplitVec.end(); ++itr2)
            {
                std::_tstring line = *itr2;
                std::_tstring origline = line;
                if (boost::algorithm::istarts_with(line, IMPORT_MARKER))
                {
                    boost::algorithm::ireplace_first(line, IMPORT_MARKER, _T(""));
                    boost::algorithm::trim(line);
                    inCurrentAttr = boost::algorithm::iequals(line, itr->get()->GetQualifiedLabel());
                    if (inCurrentAttr)
                    {
                        newModFile += (boost::_tformat(_T("%1%%2%\r\n%3%\r\n")) % IMPORT_MARKER % itr->get()->GetQualifiedLabel() % itr->get()->GetText(true, noBroadcast)).str();
                        alreadyExisted = true;
                        continue;
                    }
                }
                if (!inCurrentAttr)
                {
                    newModFile += origline + _T("\r\n");
                }
            }
            if (!alreadyExisted)
                newModFile += (boost::_tformat(_T("%1%%2%\r\n%3%\r\n")) % IMPORT_MARKER % itr->get()->GetQualifiedLabel() % itr->get()->GetText(true, noBroadcast)).str();
            m_modFile = newModFile.c_str();
        }

        CUnicodeFile file;
        if (file.Create(pathToWString(m_path).c_str()))
        {
            file.Write(m_modFile);
            file.Close();
        }

        return true;
    }
Beispiel #3
0
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"));
    }
}
Beispiel #4
0
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();
        }
    }
}