item-widget-helpers.hpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /******************************************************************************
  2. Copyright (C) 2015 by Hugh Bailey <[email protected]>
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. ******************************************************************************/
  14. #pragma once
  15. /* This file exists to prevent ->deleteLater from being called on custom-made
  16. * item widgets in widgets such as list widgets. We do this to prevent things
  17. * such as references to sources/etc from getting stuck in the Qt event queue
  18. * with no way of controlling when they'll be released. */
  19. class QListWidget;
  20. class QListWidgetItem;
  21. QListWidgetItem *TakeListItem(QListWidget *widget, int row);
  22. void DeleteListItem(QListWidget *widget, QListWidgetItem *item);
  23. void ClearListItems(QListWidget *widget);
  24. template<typename QObjectPtr>
  25. void InsertQObjectByName(std::vector<QObjectPtr> &controls, QObjectPtr control)
  26. {
  27. QString name = control->objectName();
  28. auto finder = [name](QObjectPtr elem) {
  29. return name.localeAwareCompare(elem->objectName()) < 0;
  30. };
  31. auto found_at = std::find_if(controls.begin(), controls.end(), finder);
  32. controls.insert(found_at, control);
  33. }