Changeset View
Changeset View
Standalone View
Standalone View
project/projectfiltermanager.cpp
Show First 20 Lines • Show All 46 Lines • ▼ Show 20 Line(s) | |||||
47 | 47 | | |||
48 | } | 48 | } | ||
49 | 49 | | |||
50 | Q_DECLARE_TYPEINFO(Filter, Q_MOVABLE_TYPE); | 50 | Q_DECLARE_TYPEINFO(Filter, Q_MOVABLE_TYPE); | ||
51 | 51 | | |||
52 | //END helper | 52 | //END helper | ||
53 | 53 | | |||
54 | //BEGIN private | 54 | //BEGIN private | ||
55 | struct ProjectFilterManager::Private | 55 | class KDevelop::ProjectFilterManagerPrivate | ||
56 | { | 56 | { | ||
57 | public: | ||||
57 | void pluginLoaded(IPlugin* plugin); | 58 | void pluginLoaded(IPlugin* plugin); | ||
58 | void unloadingPlugin(IPlugin* plugin); | 59 | void unloadingPlugin(IPlugin* plugin); | ||
59 | void filterChanged(IProjectFilterProvider* provider, IProject* project); | 60 | void filterChanged(IProjectFilterProvider* provider, IProject* project); | ||
60 | 61 | | |||
61 | QVector<IProjectFilterProvider*> m_filterProvider; | 62 | QVector<IProjectFilterProvider*> m_filterProvider; | ||
62 | QHash<IProject*, QVector<Filter> > m_filters; | 63 | QHash<IProject*, QVector<Filter> > m_filters; | ||
63 | 64 | | |||
64 | ProjectFilterManager* q; | 65 | ProjectFilterManager* q; | ||
65 | }; | 66 | }; | ||
66 | 67 | | |||
67 | void ProjectFilterManager::Private::pluginLoaded(IPlugin* plugin) | 68 | void ProjectFilterManagerPrivate::pluginLoaded(IPlugin* plugin) | ||
68 | { | 69 | { | ||
69 | IProjectFilterProvider* filterProvider = plugin->extension<IProjectFilterProvider>(); | 70 | IProjectFilterProvider* filterProvider = plugin->extension<IProjectFilterProvider>(); | ||
70 | if (filterProvider) { | 71 | if (filterProvider) { | ||
71 | m_filterProvider << filterProvider; | 72 | m_filterProvider << filterProvider; | ||
72 | // can't use qt5 signal slot syntax here, IProjectFilterProvider is not a QObject | 73 | // can't use qt5 signal slot syntax here, IProjectFilterProvider is not a QObject | ||
73 | QObject::connect(plugin, SIGNAL(filterChanged(KDevelop::IProjectFilterProvider*,KDevelop::IProject*)), | 74 | QObject::connect(plugin, SIGNAL(filterChanged(KDevelop::IProjectFilterProvider*,KDevelop::IProject*)), | ||
74 | q, SLOT(filterChanged(KDevelop::IProjectFilterProvider*,KDevelop::IProject*))); | 75 | q, SLOT(filterChanged(KDevelop::IProjectFilterProvider*,KDevelop::IProject*))); | ||
75 | QHash< IProject*, QVector< Filter > >::iterator it = m_filters.begin(); | 76 | QHash< IProject*, QVector< Filter > >::iterator it = m_filters.begin(); | ||
76 | while(it != m_filters.end()) { | 77 | while(it != m_filters.end()) { | ||
77 | Filter filter; | 78 | Filter filter; | ||
78 | filter.provider = filterProvider; | 79 | filter.provider = filterProvider; | ||
79 | filter.filter = filterProvider->createFilter(it.key()); | 80 | filter.filter = filterProvider->createFilter(it.key()); | ||
80 | it.value().append(filter); | 81 | it.value().append(filter); | ||
81 | ++it; | 82 | ++it; | ||
82 | } | 83 | } | ||
83 | } | 84 | } | ||
84 | } | 85 | } | ||
85 | 86 | | |||
86 | void ProjectFilterManager::Private::unloadingPlugin(IPlugin* plugin) | 87 | void ProjectFilterManagerPrivate::unloadingPlugin(IPlugin* plugin) | ||
87 | { | 88 | { | ||
88 | IProjectFilterProvider* filterProvider = plugin->extension<IProjectFilterProvider>(); | 89 | IProjectFilterProvider* filterProvider = plugin->extension<IProjectFilterProvider>(); | ||
89 | if (filterProvider) { | 90 | if (filterProvider) { | ||
90 | int idx = m_filterProvider.indexOf(qobject_cast<IProjectFilterProvider*>(plugin)); | 91 | int idx = m_filterProvider.indexOf(qobject_cast<IProjectFilterProvider*>(plugin)); | ||
91 | Q_ASSERT(idx != -1); | 92 | Q_ASSERT(idx != -1); | ||
92 | m_filterProvider.remove(idx); | 93 | m_filterProvider.remove(idx); | ||
93 | QHash< IProject*, QVector<Filter> >::iterator filtersIt = m_filters.begin(); | 94 | QHash< IProject*, QVector<Filter> >::iterator filtersIt = m_filters.begin(); | ||
94 | while(filtersIt != m_filters.end()) { | 95 | while(filtersIt != m_filters.end()) { | ||
95 | QVector<Filter>& filters = filtersIt.value(); | 96 | QVector<Filter>& filters = filtersIt.value(); | ||
96 | QVector<Filter>::iterator filter = filters.begin(); | 97 | QVector<Filter>::iterator filter = filters.begin(); | ||
97 | while(filter != filters.end()) { | 98 | while(filter != filters.end()) { | ||
98 | if ((*filter).provider == filterProvider) { | 99 | if ((*filter).provider == filterProvider) { | ||
99 | filter = filters.erase(filter); | 100 | filter = filters.erase(filter); | ||
100 | continue; | 101 | continue; | ||
101 | } | 102 | } | ||
102 | ++filter; | 103 | ++filter; | ||
103 | } | 104 | } | ||
104 | ++filtersIt; | 105 | ++filtersIt; | ||
105 | } | 106 | } | ||
106 | } | 107 | } | ||
107 | } | 108 | } | ||
108 | 109 | | |||
109 | void ProjectFilterManager::Private::filterChanged(IProjectFilterProvider* provider, IProject* project) | 110 | void ProjectFilterManagerPrivate::filterChanged(IProjectFilterProvider* provider, IProject* project) | ||
110 | { | 111 | { | ||
111 | if (!m_filters.contains(project)) { | 112 | if (!m_filters.contains(project)) { | ||
112 | return; | 113 | return; | ||
113 | } | 114 | } | ||
114 | 115 | | |||
115 | QVector< Filter >& filters = m_filters[project]; | 116 | QVector< Filter >& filters = m_filters[project]; | ||
116 | QVector<Filter>::iterator it = filters.begin(); | 117 | QVector<Filter>::iterator it = filters.begin(); | ||
117 | while(it != filters.end()) { | 118 | while(it != filters.end()) { | ||
118 | if (it->provider == provider) { | 119 | if (it->provider == provider) { | ||
119 | it->filter = provider->createFilter(project); | 120 | it->filter = provider->createFilter(project); | ||
120 | qCDebug(PROJECT) << "project filter changed, reloading" << project->name(); | 121 | qCDebug(PROJECT) << "project filter changed, reloading" << project->name(); | ||
121 | project->projectFileManager()->reload(project->projectItem()); | 122 | project->projectFileManager()->reload(project->projectItem()); | ||
122 | return; | 123 | return; | ||
123 | } | 124 | } | ||
124 | ++it; | 125 | ++it; | ||
125 | } | 126 | } | ||
126 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown provider changed its filter"); | 127 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown provider changed its filter"); | ||
127 | } | 128 | } | ||
128 | //END private | 129 | //END private | ||
129 | 130 | | |||
130 | //BEGIN | 131 | //BEGIN | ||
131 | ProjectFilterManager::ProjectFilterManager(QObject* parent) | 132 | ProjectFilterManager::ProjectFilterManager(QObject* parent) | ||
132 | : QObject(parent) | 133 | : QObject(parent) | ||
133 | , d(new ProjectFilterManager::Private) | 134 | , d(new ProjectFilterManagerPrivate) | ||
134 | { | 135 | { | ||
135 | d->q = this; | 136 | d->q = this; | ||
136 | 137 | | |||
137 | connect(ICore::self()->pluginController(), &IPluginController::pluginLoaded, | 138 | connect(ICore::self()->pluginController(), &IPluginController::pluginLoaded, | ||
138 | this, [&] (IPlugin* plugin) { d->pluginLoaded(plugin); }); | 139 | this, [&] (IPlugin* plugin) { d->pluginLoaded(plugin); }); | ||
139 | connect(ICore::self()->pluginController(), &IPluginController::unloadingPlugin, | 140 | connect(ICore::self()->pluginController(), &IPluginController::unloadingPlugin, | ||
140 | this, [&] (IPlugin* plugin) { d->unloadingPlugin(plugin); }); | 141 | this, [&] (IPlugin* plugin) { d->unloadingPlugin(plugin); }); | ||
141 | 142 | | |||
▲ Show 20 Lines • Show All 56 Lines • Show Last 20 Lines |