* @brief Save data from member variables to path-file. * @param [in] path Path to project file. * @param [out] sError Error string if error happened. * @return true if saving succeeded, false if error happened. */
| 385 | * @return true if saving succeeded, false if error happened. |
| 386 | */ |
| 387 | bool ProjectFile::Save(const String& path) const |
| 388 | { |
| 389 | FileStream out(toUTF8(path), FileStream::out | FileStream::trunc); |
| 390 | XMLWriter writer(out, XMLWriter::WRITE_XML_DECLARATION | XMLWriter::PRETTY_PRINT); |
| 391 | writer.startDocument(); |
| 392 | writer.startElement("", "", Root_element_name); |
| 393 | { |
| 394 | for (auto& item : m_items) |
| 395 | { |
| 396 | writer.startElement("", "", Paths_element_name); |
| 397 | { |
| 398 | if (!item.m_paths.GetLeft().empty()) |
| 399 | writeElement(writer, Left_element_name, toUTF8(item.m_paths.GetLeft())); |
| 400 | if (!item.m_paths.GetMiddle().empty()) |
| 401 | writeElement(writer, Middle_element_name, toUTF8(item.m_paths.GetMiddle())); |
| 402 | if (!item.m_paths.GetRight().empty()) |
| 403 | writeElement(writer, Right_element_name, toUTF8(item.m_paths.GetRight())); |
| 404 | if (!item.GetLeftDesc().empty()) |
| 405 | writeElement(writer, Left_desc_element_name, toUTF8(item.GetLeftDesc())); |
| 406 | if (!item.GetMiddleDesc().empty()) |
| 407 | writeElement(writer, Middle_desc_element_name, toUTF8(item.GetMiddleDesc())); |
| 408 | if (!item.GetRightDesc().empty()) |
| 409 | writeElement(writer, Right_desc_element_name, toUTF8(item.GetRightDesc())); |
| 410 | if (item.m_bSaveFilter && !item.GetFilter().empty()) |
| 411 | writeElement(writer, Filter_element_name, toUTF8(item.GetFilter())); |
| 412 | if (item.m_bSaveSubfolders) |
| 413 | writeElement(writer, Subfolders_element_name, item.GetSubfolders() != 0 ? "1" : "0"); |
| 414 | writeElement(writer, Left_ro_element_name, item.GetLeftReadOnly() ? "1" : "0"); |
| 415 | if (!item.m_paths.GetMiddle().empty()) |
| 416 | writeElement(writer, Middle_ro_element_name, item.GetMiddleReadOnly() ? "1" : "0"); |
| 417 | writeElement(writer, Right_ro_element_name, item.GetRightReadOnly() ? "1" : "0"); |
| 418 | if (item.m_bSaveUnpacker && !item.GetUnpacker().empty()) |
| 419 | writeElement(writer, Unpacker_element_name, toUTF8(item.GetUnpacker())); |
| 420 | if (item.m_bSavePrediffer && !item.GetPrediffer().empty()) |
| 421 | writeElement(writer, Prediffer_element_name, toUTF8(item.GetPrediffer())); |
| 422 | if (item.GetWindowType() != -1) |
| 423 | writeElement(writer, Window_type_element_name, std::to_string(item.GetWindowType())); |
| 424 | if (item.GetWindowType() == 2 /* table */) |
| 425 | { |
| 426 | const tchar_t delim = item.GetTableDelimiter(); |
| 427 | const tchar_t quote = item.GetTableQuote(); |
| 428 | writeElement(writer, Table_delimiter_element_name, toUTF8(String(&delim, 1))); |
| 429 | writeElement(writer, Table_quote_element_name, toUTF8(String("e, 1))); |
| 430 | writeElement(writer, Table_allownewlinesinquotes_element_name, item.GetTableAllowNewLinesInQuotes() ? "1" : "0"); |
| 431 | } |
| 432 | if (item.m_bSaveIgnoreWhite) |
| 433 | writeElement(writer, White_spaces_element_name, std::to_string(item.GetIgnoreWhite())); |
| 434 | if (item.m_bSaveIgnoreBlankLines) |
| 435 | writeElement(writer, Ignore_blank_lines_element_name, item.GetIgnoreBlankLines() ? "1" : "0"); |
| 436 | if (item.m_bSaveIgnoreCase) |
| 437 | writeElement(writer, Ignore_case_element_name, item.GetIgnoreCase() ? "1" : "0"); |
| 438 | if (item.m_bSaveIgnoreEol) |
| 439 | writeElement(writer, Ignore_cr_diff_element_name, item.GetIgnoreEol() ? "1" : "0"); |
| 440 | if (item.m_bSaveIgnoreNumbers) |
| 441 | writeElement(writer, Ignore_numbers_element_name, item.GetIgnoreNumbers() ? "1" : "0"); |
| 442 | if (item.m_bSaveIgnoreCodepage) |
| 443 | writeElement(writer, Ignore_codepage_diff_element_name, item.GetIgnoreCodepage() ? "1" : "0"); |
| 444 | if (item.m_bSaveIgnoreMissingTrailingEol) |