Base TemplatePicker on QListView instead of QListWidget (#276)
This commit is contained in:
+1
-1
@@ -49,7 +49,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
bool File::newLabel( MainWindow *window )
|
bool File::newLabel( MainWindow *window )
|
||||||
{
|
{
|
||||||
SelectProductDialog dialog;
|
SelectProductDialog dialog( window );
|
||||||
dialog.exec();
|
dialog.exec();
|
||||||
|
|
||||||
auto tmplate = dialog.tmplate();
|
auto tmplate = dialog.tmplate();
|
||||||
|
|||||||
+46
-35
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "TemplatePicker.h"
|
#include "TemplatePicker.h"
|
||||||
|
|
||||||
|
#include "MiniPreviewPixmap.h"
|
||||||
#include "TemplatePickerItem.h"
|
#include "TemplatePickerItem.h"
|
||||||
|
|
||||||
#include "model/Settings.h"
|
#include "model/Settings.h"
|
||||||
@@ -98,14 +99,22 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Constructor
|
/// Constructor
|
||||||
///
|
///
|
||||||
TemplatePicker::TemplatePicker( QWidget* parent ) : QListWidget(parent)
|
TemplatePicker::TemplatePicker( QWidget* parent )
|
||||||
|
: QListView(parent)
|
||||||
{
|
{
|
||||||
|
mModel = new QStandardItemModel( this );
|
||||||
|
setModel( mModel );
|
||||||
|
|
||||||
setResizeMode( QListView::Adjust );
|
setResizeMode( QListView::Adjust );
|
||||||
setUniformItemSizes( true );
|
setUniformItemSizes( true );
|
||||||
setWordWrap( true );
|
setWordWrap( true );
|
||||||
setIconSize( QSize( TemplatePickerItem::SIZE, TemplatePickerItem::SIZE ) );
|
setIconSize( QSize( TemplatePickerItem::SIZE, TemplatePickerItem::SIZE ) );
|
||||||
|
setSpacing( 24 );
|
||||||
|
|
||||||
setMode( model::Settings::templatePickerMode() );
|
setMode( model::Settings::templatePickerMode() );
|
||||||
|
|
||||||
|
connect( selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
|
||||||
|
this, SLOT(onSelectionChanged()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -115,10 +124,9 @@ namespace glabels
|
|||||||
void TemplatePicker::setTemplates( const QList<model::Template>& tmplates )
|
void TemplatePicker::setTemplates( const QList<model::Template>& tmplates )
|
||||||
{
|
{
|
||||||
auto mode = model::Settings::templatePickerMode();
|
auto mode = model::Settings::templatePickerMode();
|
||||||
|
for ( auto& tmplate : tmplates )
|
||||||
foreach (auto& tmplate, tmplates)
|
|
||||||
{
|
{
|
||||||
new TemplatePickerItem( tmplate, mode, this );
|
mModel->appendRow( new TemplatePickerItem( tmplate, mode ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,10 +137,11 @@ namespace glabels
|
|||||||
void TemplatePicker::setMode( QListView::ViewMode mode )
|
void TemplatePicker::setMode( QListView::ViewMode mode )
|
||||||
{
|
{
|
||||||
model::Settings::setTemplatePickerMode( mode );
|
model::Settings::setTemplatePickerMode( mode );
|
||||||
|
setViewMode( mode );
|
||||||
for ( int i = 0; i < count(); i++ )
|
|
||||||
|
for ( int i = 0; i < mModel->rowCount(); i++ )
|
||||||
{
|
{
|
||||||
if (auto* tItem = dynamic_cast<TemplatePickerItem *>(item(i)))
|
if ( auto* tItem = dynamic_cast<TemplatePickerItem *>( mModel->item( i, 0 ) ) )
|
||||||
{
|
{
|
||||||
tItem->setMode( mode );
|
tItem->setMode( mode );
|
||||||
}
|
}
|
||||||
@@ -159,9 +168,10 @@ namespace glabels
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( auto* selected = selectedItem() )
|
auto selection = selectedIndexes();
|
||||||
|
if ( selection.size() )
|
||||||
{
|
{
|
||||||
scrollToItem( selected, QAbstractItemView::PositionAtCenter );
|
scrollTo( selection[0], QAbstractItemView::PositionAtCenter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,9 +192,9 @@ namespace glabels
|
|||||||
bool isoMask, bool usMask, bool otherMask,
|
bool isoMask, bool usMask, bool otherMask,
|
||||||
bool anyCategory, const QStringList& categoryIds )
|
bool anyCategory, const QStringList& categoryIds )
|
||||||
{
|
{
|
||||||
for ( int i = 0; i < count(); i++ )
|
for ( int i = 0; i < mModel->rowCount(); i++ )
|
||||||
{
|
{
|
||||||
if (auto* tItem = dynamic_cast<TemplatePickerItem *>(item(i)))
|
if ( auto* tItem = dynamic_cast<TemplatePickerItem *>( mModel->item( i, 0 ) ) )
|
||||||
{
|
{
|
||||||
bool nameMask = tItem->tmplate().name().contains( searchString, Qt::CaseInsensitive );
|
bool nameMask = tItem->tmplate().name().contains( searchString, Qt::CaseInsensitive );
|
||||||
|
|
||||||
@@ -210,19 +220,20 @@ namespace glabels
|
|||||||
|
|
||||||
if ( nameMask && sizeMask && categoryMask )
|
if ( nameMask && sizeMask && categoryMask )
|
||||||
{
|
{
|
||||||
tItem->setHidden( false );
|
setRowHidden( i, false );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tItem->setHidden( true );
|
setRowHidden( i, true );
|
||||||
tItem->setSelected( false );
|
selectionModel()->select( tItem->index(), QItemSelectionModel::Deselect );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( auto* selected = selectedItem() )
|
auto selection = selectedIndexes();
|
||||||
|
if ( selection.size() )
|
||||||
{
|
{
|
||||||
scrollToItem( selected, QAbstractItemView::PositionAtCenter );
|
scrollTo( selection[0], QAbstractItemView::PositionAtCenter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,9 +243,9 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void TemplatePicker::applyFilter( const QStringList& names )
|
void TemplatePicker::applyFilter( const QStringList& names )
|
||||||
{
|
{
|
||||||
for ( int i = 0; i < count(); i++ )
|
for ( int i = 0; i < mModel->rowCount(); i++ )
|
||||||
{
|
{
|
||||||
if (auto *tItem = dynamic_cast<TemplatePickerItem *>(item(i)))
|
if ( auto* tItem = dynamic_cast<TemplatePickerItem *>( mModel->item( i, 0 ) ) )
|
||||||
{
|
{
|
||||||
bool match = false;
|
bool match = false;
|
||||||
foreach ( QString name, names )
|
foreach ( QString name, names )
|
||||||
@@ -248,19 +259,20 @@ namespace glabels
|
|||||||
|
|
||||||
if ( match )
|
if ( match )
|
||||||
{
|
{
|
||||||
tItem->setHidden( false );
|
setRowHidden( i, false );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tItem->setHidden( true );
|
setRowHidden( i, true );
|
||||||
tItem->setSelected( false );
|
selectionModel()->select( tItem->index(), QItemSelectionModel::Deselect );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( auto* selected = selectedItem() )
|
auto selection = selectedIndexes();
|
||||||
|
if ( selection.size() )
|
||||||
{
|
{
|
||||||
scrollToItem( selected, QAbstractItemView::PositionAtCenter );
|
scrollTo( selection[0], QAbstractItemView::PositionAtCenter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,27 +282,26 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
model::Template TemplatePicker::selectedTemplate() const
|
model::Template TemplatePicker::selectedTemplate() const
|
||||||
{
|
{
|
||||||
if ( auto* tItem = selectedItem() )
|
auto selectionList = selectedIndexes();
|
||||||
|
if ( selectionList.size() )
|
||||||
{
|
{
|
||||||
return tItem->tmplate();
|
int i = selectionList[0].row();
|
||||||
|
if ( auto* tItem = dynamic_cast<TemplatePickerItem *>( mModel->item( i, 0 ) ) )
|
||||||
|
{
|
||||||
|
return tItem->tmplate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return model::Template();
|
return model::Template();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Get Currently Selected Item
|
/// Handle selection changed from selection model
|
||||||
///
|
///
|
||||||
TemplatePickerItem* TemplatePicker::selectedItem() const
|
void TemplatePicker::onSelectionChanged()
|
||||||
{
|
{
|
||||||
QList<QListWidgetItem*> items = selectedItems();
|
emit selectionChanged();
|
||||||
if ( !items.isEmpty() )
|
|
||||||
{
|
|
||||||
return dynamic_cast<TemplatePickerItem*>( items.first() );
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,12 +22,11 @@
|
|||||||
#define TemplatePicker_h
|
#define TemplatePicker_h
|
||||||
|
|
||||||
|
|
||||||
#include "TemplatePickerItem.h"
|
|
||||||
|
|
||||||
#include "model/Template.h"
|
#include "model/Template.h"
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QListWidget>
|
#include <QListView>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
|
|
||||||
namespace glabels
|
namespace glabels
|
||||||
@@ -36,7 +35,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Template Picker Widget
|
/// Template Picker Widget
|
||||||
///
|
///
|
||||||
class TemplatePicker : public QListWidget
|
class TemplatePicker : public QListView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -60,15 +59,35 @@ namespace glabels
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Methods
|
// Methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
public:
|
||||||
void applyFilter( const QString& searchString,
|
void applyFilter( const QString& searchString,
|
||||||
bool isoMask, bool usMask, bool otherMask,
|
bool isoMask, bool usMask, bool otherMask,
|
||||||
bool anyCategory, const QStringList& categoryIds );
|
bool anyCategory, const QStringList& categoryIds );
|
||||||
|
|
||||||
void applyFilter( const QStringList& names );
|
void applyFilter( const QStringList& names );
|
||||||
|
|
||||||
model::Template selectedTemplate() const;
|
model::Template selectedTemplate() const;
|
||||||
TemplatePickerItem* selectedItem() const;
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Signals
|
||||||
|
/////////////////////////////////
|
||||||
|
signals:
|
||||||
|
void selectionChanged();
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Private slots
|
||||||
|
/////////////////////////////////
|
||||||
|
private slots:
|
||||||
|
void onSelectionChanged();
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Private data
|
||||||
|
/////////////////////////////////
|
||||||
|
private:
|
||||||
|
QStandardItemModel* mModel;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -25,9 +25,8 @@
|
|||||||
|
|
||||||
#include "model/Settings.h"
|
#include "model/Settings.h"
|
||||||
|
|
||||||
#include <QHBoxLayout>
|
#include <QDebug>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QListWidgetItem>
|
|
||||||
|
|
||||||
|
|
||||||
namespace glabels
|
namespace glabels
|
||||||
@@ -37,9 +36,8 @@ namespace glabels
|
|||||||
/// Constructor
|
/// Constructor
|
||||||
///
|
///
|
||||||
TemplatePickerItem::TemplatePickerItem( const model::Template& tmplate,
|
TemplatePickerItem::TemplatePickerItem( const model::Template& tmplate,
|
||||||
QListView::ViewMode mode,
|
QListView::ViewMode mode )
|
||||||
QListWidget* parent )
|
: QStandardItem()
|
||||||
: QListWidgetItem( parent )
|
|
||||||
{
|
{
|
||||||
mTmplate = tmplate;
|
mTmplate = tmplate;
|
||||||
|
|
||||||
@@ -87,4 +85,5 @@ namespace glabels
|
|||||||
return mTmplate;
|
return mTmplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace glabels
|
} // namespace glabels
|
||||||
|
|||||||
@@ -25,7 +25,8 @@
|
|||||||
#include "model/Template.h"
|
#include "model/Template.h"
|
||||||
|
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QListWidget>
|
#include <QListView>
|
||||||
|
#include <QStandardItem>
|
||||||
|
|
||||||
|
|
||||||
namespace glabels
|
namespace glabels
|
||||||
@@ -34,7 +35,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Template Picker Item Widget
|
/// Template Picker Item Widget
|
||||||
///
|
///
|
||||||
class TemplatePickerItem : public QListWidgetItem
|
class TemplatePickerItem : public QStandardItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static const int SIZE = 80;
|
static const int SIZE = 80;
|
||||||
@@ -45,8 +46,7 @@ namespace glabels
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
TemplatePickerItem( const model::Template& tmplate,
|
TemplatePickerItem( const model::Template& tmplate,
|
||||||
QListView::ViewMode mode,
|
QListView::ViewMode mode );
|
||||||
QListWidget* parent = nullptr );
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
|||||||
@@ -478,7 +478,8 @@
|
|||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset theme="glabels-view-grid"/>
|
<iconset theme="glabels-view-grid">
|
||||||
|
<normaloff>.</normaloff>.</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
@@ -548,8 +549,8 @@
|
|||||||
<slot>onPageSizeCheckClicked()</slot>
|
<slot>onPageSizeCheckClicked()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>130</x>
|
<x>156</x>
|
||||||
<y>196</y>
|
<y>246</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>4</x>
|
<x>4</x>
|
||||||
@@ -559,7 +560,7 @@
|
|||||||
</connection>
|
</connection>
|
||||||
<connection>
|
<connection>
|
||||||
<sender>templatePicker</sender>
|
<sender>templatePicker</sender>
|
||||||
<signal>itemSelectionChanged()</signal>
|
<signal>selectionChanged()</signal>
|
||||||
<receiver>SelectProductDialog</receiver>
|
<receiver>SelectProductDialog</receiver>
|
||||||
<slot>onTemplatePickerSelectionChanged()</slot>
|
<slot>onTemplatePickerSelectionChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
@@ -580,8 +581,8 @@
|
|||||||
<slot>onPageSizeCheckClicked()</slot>
|
<slot>onPageSizeCheckClicked()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>132</x>
|
<x>158</x>
|
||||||
<y>170</y>
|
<y>215</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>2</x>
|
<x>2</x>
|
||||||
@@ -612,8 +613,8 @@
|
|||||||
<slot>onSearchEntryTextChanged()</slot>
|
<slot>onSearchEntryTextChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>107</x>
|
<x>121</x>
|
||||||
<y>102</y>
|
<y>137</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>2</x>
|
<x>2</x>
|
||||||
@@ -628,8 +629,8 @@
|
|||||||
<slot>onCategoryRadioClicked()</slot>
|
<slot>onCategoryRadioClicked()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>126</x>
|
<x>151</x>
|
||||||
<y>296</y>
|
<y>361</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
@@ -644,8 +645,8 @@
|
|||||||
<slot>onCategoryRadioClicked()</slot>
|
<slot>onCategoryRadioClicked()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>122</x>
|
<x>147</x>
|
||||||
<y>322</y>
|
<y>392</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
@@ -701,6 +702,22 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>pageSizeOtherCheck</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SelectProductDialog</receiver>
|
||||||
|
<slot>onPageSizeCheckClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>90</x>
|
||||||
|
<y>265</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>6</x>
|
||||||
|
<y>290</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
<slots>
|
<slots>
|
||||||
<slot>onSearchClearButtonClicked()</slot>
|
<slot>onSearchClearButtonClicked()</slot>
|
||||||
|
|||||||
Reference in New Issue
Block a user