/* TemplatePicker.cpp * * Copyright (C) 2013 Jaye Evins * * This file is part of gLabels-qt. * * gLabels-qt is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gLabels-qt is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with gLabels-qt. If not, see . */ #include "TemplatePicker.h" #include "TemplatePickerItem.h" #include namespace glabels { /// /// Constructor /// TemplatePicker::TemplatePicker( QWidget *parent ) : QListWidget(parent) { setViewMode( QListView::IconMode ); setResizeMode( QListView::Adjust ); setSpacing( 24 ); setWordWrap( true ); setUniformItemSizes( true ); setIconSize( QSize(TemplatePickerItem::SIZE, TemplatePickerItem::SIZE) ); } /// /// Set List of Templates to Pick From /// void TemplatePicker::setTemplates( const QList &tmplates ) { foreach (model::Template *tmplate, tmplates) { new TemplatePickerItem( tmplate, this ); } } /// /// Apply Filter to Narrow Template Choices by search criteria /// void TemplatePicker::applyFilter( const QString& searchString, bool isoMask, bool usMask, bool otherMask, bool anyCategory, const QStringList& categoryIds ) { foreach ( QListWidgetItem *item, findItems( "*", Qt::MatchWildcard ) ) { if (auto *tItem = dynamic_cast(item)) { bool nameMask = tItem->tmplate()->name().contains( searchString, Qt::CaseInsensitive ); bool sizeMask = (isoMask && tItem->tmplate()->isSizeIso()) || (usMask && tItem->tmplate()->isSizeUs()) || (otherMask && tItem->tmplate()->isSizeOther()); bool categoryMask; if ( anyCategory ) { categoryMask = true; } else { categoryMask = false; foreach ( QString id, categoryIds ) { categoryMask = categoryMask || tItem->tmplate()->hasCategory( id ); } } if ( nameMask && sizeMask && categoryMask ) { item->setHidden( false ); } else { item->setHidden( true ); item->setSelected( false ); } } } } /// /// Apply Filter to Narrow Template Choices by a list of names /// void TemplatePicker::applyFilter( const QStringList& names ) { foreach ( QListWidgetItem *item, findItems( "*", Qt::MatchWildcard ) ) { if (auto *tItem = dynamic_cast(item)) { bool match = false; foreach ( QString name, names ) { if ( tItem->tmplate()->name() == name ) { match = true; break; } } if ( match ) { item->setHidden( false ); } else { item->setHidden( true ); item->setSelected( false ); } } } } /// /// Get Currently Selected Template /// const model::Template *TemplatePicker::selectedTemplate() { QList items = selectedItems(); if ( !items.isEmpty() ) { if (auto *tItem = dynamic_cast(items.first())) { return tItem->tmplate(); } } return nullptr; } } // namespace glabels