OSDN Git Service

Fix a crash problem when the Diff algorithm is set to something other than default...
[winmerge-jp/winmerge-jp.git] / Src / LineFiltersList.h
1 /** 
2  * @file  LineFiltersList.h
3  *
4  * @brief Declaration file for LineFiltersList class
5  */
6 #pragma once
7
8 #include <vector>
9 #include <memory>
10 #include "UnicodeString.h"
11
12 class COptionsMgr;
13 class FilterList;
14
15 /**
16  @brief Structure for one line filter.
17  */
18 struct LineFilterItem
19 {
20         bool enabled; /**< Is filter enabled? */
21         String filterStr; /**< Filter string */
22         LineFilterItem() : enabled(false) { }
23 };
24
25 typedef std::shared_ptr<LineFilterItem> LineFilterItemPtr;
26
27 /**
28  @brief List of line filters.
29  */
30 class LineFiltersList
31 {
32 public:
33         LineFiltersList();
34         ~LineFiltersList();
35
36         void AddFilter(const String& filter, bool enabled);
37         size_t GetCount() const;
38         void Empty();
39         const LineFilterItem & GetAt(size_t ind) const;
40         void CloneFrom(const LineFiltersList *list);
41         bool Compare(const LineFiltersList *list) const;
42
43         void Initialize(COptionsMgr *pOptionsMgr);
44         void SaveFilters();
45
46         std::shared_ptr<FilterList> MakeFilterList(bool throwIfInvalid = false);
47
48 private:
49         std::vector<LineFilterItemPtr> m_items; /**< List for linefilter items */
50         COptionsMgr * m_pOptionsMgr; /**< Options-manager for storage */
51 };
52
53 /**
54  * @brief Returns count of items in the list.
55  * @return Count of filters in the list.
56  */
57 inline size_t LineFiltersList::GetCount() const
58 {
59         return m_items.size();
60 }
61
62 /**
63  * @brief Empties the list.
64  */
65 inline void LineFiltersList::Empty()
66 {
67         m_items.clear();
68 }