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