1 /*
2  * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
3  *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
4  *
5  * This file is part of lsp-plugins
6  * Created on: 6 мая 2018 г.
7  *
8  * lsp-plugins is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * any later version.
12  *
13  * lsp-plugins is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with lsp-plugins. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef UI_TK_UTIL_LSPFILEFILTER_H_
23 #define UI_TK_UTIL_LSPFILEFILTER_H_
24 
25 namespace lsp
26 {
27     namespace tk
28     {
29         class LSPFileFilter
30         {
31             private:
32                 LSPFileFilter & operator = (const LSPFileFilter &);
33 
34             protected:
35                 class FilterItem: public LSPFileFilterItem
36                 {
37                     private:
38                         friend class LSPFileFilter;
39 
40                     protected:
41                         LSPFileFilter *pFilter;
42 
43                     protected:
44                         virtual void        sync();
45 
bind(LSPFileFilter * filter)46                         inline void bind(LSPFileFilter *filter)     { pFilter = filter; }
47 
48                     public:
FilterItem()49                         explicit inline FilterItem()                { pFilter = NULL; }
50                 };
51 
52             protected:
53                 ssize_t                 nDefault;
54                 cvector<FilterItem>     vItems;
55 
56             protected:
57                 virtual status_t item_updated(size_t idx, LSPFileFilterItem *flt);
58 
59                 virtual status_t item_removed(size_t idx, LSPFileFilterItem *flt);
60 
61                 virtual status_t item_added(size_t idx, LSPFileFilterItem *flt);
62 
63                 virtual void default_updated(ssize_t idx);
64 
65             public:
66                 explicit LSPFileFilter();
67                 virtual ~LSPFileFilter();
68 
69             public:
size()70                 inline size_t   size() const        { return vItems.size(); }
get_default()71                 inline ssize_t  get_default() const { return nDefault; }
72                 status_t        clear();
73 
74                 ssize_t         add(const LSPFileFilterItem *item);
75                 status_t        insert(size_t index, const LSPFileFilterItem *item);
76                 status_t        remove(size_t index, LSPFileFilterItem *res);
77 
78                 LSPFileFilterItem *get(size_t index);
79                 const LSPFileFilterItem *get(size_t index) const;
80 
81                 status_t        set(size_t index, const LSPFileFilterItem *item);
82 
83                 status_t        set_default(size_t value);
84         };
85 
86     } /* namespace tk */
87 } /* namespace lsp */
88 
89 #endif /* UI_TK_UTIL_LSPFILEFILTER_H_ */
90