diff --git a/glabels/Icons.h b/glabels/Icons.h
index 07e95ba..4222d56 100644
--- a/glabels/Icons.h
+++ b/glabels/Icons.h
@@ -541,6 +541,26 @@ namespace glabels
}
};
+
+ class ViewGrid : public QIcon
+ {
+ public:
+ ViewGrid()
+ {
+ addPixmap( QPixmap( ":icons/flat/22x22/glabels-view-grid.svg" ) );
+ }
+ };
+
+
+ class ViewList : public QIcon
+ {
+ public:
+ ViewList()
+ {
+ addPixmap( QPixmap( ":icons/flat/22x22/glabels-view-list.svg" ) );
+ }
+ };
+
}
}
diff --git a/glabels/PropertiesView.cpp b/glabels/PropertiesView.cpp
index dce1cd4..3203ccb 100644
--- a/glabels/PropertiesView.cpp
+++ b/glabels/PropertiesView.cpp
@@ -18,6 +18,7 @@
* along with gLabels-qt. If not, see .
*/
+
#include "PropertiesView.h"
#include "SelectProductDialog.h"
@@ -100,11 +101,12 @@ namespace glabels
///
void PropertiesView::onLabelSizeChanged()
{
- const model::Template* tmplate = mModel->tmplate();
- const model::Frame* frame = tmplate->frames().first();
- bool isRotated = mModel->rotate();
+ auto* tmplate = mModel->tmplate();
+ auto* frame = tmplate->frames().first();
+ bool isRotated = mModel->rotate();
preview->setTemplate( tmplate );
+ preview->setShowArrow( true );
preview->setRotate( isRotated );
const model::Vendor* vendor = model::Db::lookupVendorFromName( tmplate->brand() );
@@ -129,15 +131,9 @@ namespace glabels
}
descriptionLabel->setText( tmplate->description() );
-
- QString pgSizeString = model::Db::lookupPaperNameFromId( tmplate->paperId() );
- pageSizeLabel->setText( pgSizeString );
-
- QString labelSizeString = frame->sizeDescription( mUnits );
- labelSizeLabel->setText( labelSizeString );
-
- QString layoutString = frame->layoutDescription();
- layoutLabel->setText( layoutString );
+ pageSizeLabel->setText( tmplate->paperDescription( mUnits ) );
+ labelSizeLabel->setText( frame->sizeDescription( mUnits ) );
+ layoutLabel->setText( frame->layoutDescription() );
QStringList list = model::Db::getNameListOfSimilarTemplates( tmplate->name() );
if ( list.isEmpty() )
diff --git a/glabels/SelectProductDialog.cpp b/glabels/SelectProductDialog.cpp
index aa12356..2d9a261 100644
--- a/glabels/SelectProductDialog.cpp
+++ b/glabels/SelectProductDialog.cpp
@@ -18,8 +18,10 @@
* along with gLabels-qt. If not, see .
*/
+
#include "SelectProductDialog.h"
+#include "Icons.h"
#include "NotebookUtil.h"
#include "TemplatePickerItem.h"
@@ -36,9 +38,10 @@ namespace glabels
/// Constructor
///
SelectProductDialog::SelectProductDialog( QWidget *parent )
- : QDialog(parent), mCanceled(false)
+ : QDialog(parent)
{
setupUi( this );
+ productInfoWidget->setVisible( false );
pageSizeIsoCheck->setChecked( model::Settings::searchIsoPaperSizes() );
pageSizeUsCheck->setChecked( model::Settings::searchUsPaperSizes() );
@@ -65,6 +68,17 @@ namespace glabels
NotebookUtil::establishSize( modeNotebook );
+ if ( templatePicker->mode() == QListView::IconMode )
+ {
+ viewModeButton->setIcon( Icons::ViewList() );
+ viewModeButton->setToolTip( tr( "List View" ) );
+ }
+ else
+ {
+ viewModeButton->setIcon( Icons::ViewGrid() );
+ viewModeButton->setToolTip( tr( "Grid View" ) );
+ }
+
QList tmplates = model::Db::templates();
templatePicker->setTemplates( tmplates );
@@ -82,7 +96,7 @@ namespace glabels
///
const model::Template* SelectProductDialog::tmplate() const
{
- if ( !mCanceled )
+ if ( mHasSelection )
{
return templatePicker->selectedTemplate();
}
@@ -189,13 +203,83 @@ namespace glabels
}
+ ///
+ /// View Mode Button Clicked Slot
+ ///
+ void SelectProductDialog::onViewModeButtonClicked()
+ {
+ if ( templatePicker->mode() == QListView::IconMode )
+ {
+ templatePicker->setMode( QListView::ListMode );
+
+ viewModeButton->setIcon( Icons::ViewList() );
+ viewModeButton->setToolTip( tr( "List View" ) );
+ }
+ else
+ {
+ templatePicker->setMode( QListView::IconMode );
+
+ viewModeButton->setIcon( Icons::ViewGrid() );
+ viewModeButton->setToolTip( tr( "Grid View" ) );
+ }
+ }
+
+
///
/// Template Picker Selection Changed Slot
///
void SelectProductDialog::onTemplatePickerSelectionChanged()
{
- // Delay close. This should make the selection more apparent to the user.
- mTimer.start( 125, this );
+ auto* tmplate = templatePicker->selectedTemplate();
+ if ( !tmplate )
+ {
+ productInfoWidget->setVisible( false );
+ selectButton->setEnabled( false );
+ return;
+ }
+
+ auto* frame = tmplate->frames().first();
+
+ preview->setTemplate( tmplate );
+
+ const model::Vendor* vendor = model::Db::lookupVendorFromName( tmplate->brand() );
+ if ( (vendor != nullptr) && (vendor->url() != nullptr) )
+ {
+ QString markup = QString( "%2" ).arg( vendor->url(), vendor->name() );
+ vendorLabel->setText( markup );
+ }
+ else
+ {
+ vendorLabel->setText( tmplate->brand() );
+ }
+
+ if ( tmplate->productUrl() != nullptr )
+ {
+ QString markup = QString( "%2" ).arg( tmplate->productUrl(), tmplate->part() );
+ partLabel->setText( markup );
+ }
+ else
+ {
+ partLabel->setText( tmplate->part() );
+ }
+
+ descriptionLabel->setText( tmplate->description() );
+ pageSizeLabel->setText( tmplate->paperDescription( model::Settings::units() ) );
+ labelSizeLabel->setText( frame->sizeDescription( model::Settings::units() ) );
+ layoutLabel->setText( frame->layoutDescription() );
+
+ productInfoWidget->setVisible( true );
+ selectButton->setEnabled( true );
+ }
+
+
+ ///
+ /// Select Button Clicked Slot
+ ///
+ void SelectProductDialog::onSelectButtonClicked()
+ {
+ mHasSelection = true;
+ close();
}
@@ -204,17 +288,6 @@ namespace glabels
///
void SelectProductDialog::onCancelButtonClicked()
{
- mCanceled = true;
- close();
- }
-
-
- ///
- /// Cancel Button Clicked Slot
- ///
- void SelectProductDialog::timerEvent( QTimerEvent *event )
- {
- mTimer.stop();
close();
}
diff --git a/glabels/SelectProductDialog.h b/glabels/SelectProductDialog.h
index 524d574..dbcf89e 100644
--- a/glabels/SelectProductDialog.h
+++ b/glabels/SelectProductDialog.h
@@ -24,8 +24,6 @@
#include "ui_SelectProductDialog.h"
-#include
-
namespace glabels
{
@@ -60,17 +58,12 @@ namespace glabels
void onPageSizeCheckClicked();
void onCategoryRadioClicked();
void onCategoryCheckClicked();
+ void onViewModeButtonClicked();
void onTemplatePickerSelectionChanged();
+ void onSelectButtonClicked();
void onCancelButtonClicked();
- /////////////////////////////////
- // Events
- /////////////////////////////////
- protected:
- void timerEvent(QTimerEvent *event) override;
-
-
/////////////////////////////////
// Private methods
/////////////////////////////////
@@ -82,14 +75,12 @@ namespace glabels
// Private data
/////////////////////////////////
private:
- QBasicTimer mTimer;
-
QMap mCheckToCategoryMap;
QList mCheckList;
QStringList mCategoryIdList;
- bool mCanceled;
-
+ bool mHasSelection { false };
+
};
}
diff --git a/glabels/SimplePreview.cpp b/glabels/SimplePreview.cpp
index eb0d941..b108e1d 100644
--- a/glabels/SimplePreview.cpp
+++ b/glabels/SimplePreview.cpp
@@ -18,6 +18,7 @@
* along with gLabels-qt. If not, see .
*/
+
#include "SimplePreview.h"
#include "RollTemplatePath.h"
@@ -61,7 +62,7 @@ namespace glabels
/// Constructor
///
SimplePreview::SimplePreview( QWidget *parent )
- : QGraphicsView(parent), mTmplate(nullptr), mRotateFlag(false)
+ : QGraphicsView(parent)
{
mScene = new QGraphicsScene();
setScene( mScene );
@@ -84,6 +85,16 @@ namespace glabels
}
+ ///
+ /// Show Arrow Property Setter
+ ///
+ void SimplePreview::setShowArrow( bool showArrow )
+ {
+ mShowArrow = showArrow;
+ update();
+ }
+
+
///
/// Rotate Property Setter
///
@@ -132,7 +143,10 @@ namespace glabels
drawPaper();
drawLabels();
- drawArrow();
+ if ( mShowArrow )
+ {
+ drawArrow();
+ }
}
}
diff --git a/glabels/SimplePreview.h b/glabels/SimplePreview.h
index b8ca7dd..9d29924 100644
--- a/glabels/SimplePreview.h
+++ b/glabels/SimplePreview.h
@@ -52,6 +52,7 @@ namespace glabels
/////////////////////////////////
public:
void setTemplate( const model::Template *tmplate );
+ void setShowArrow( bool showArrow );
void setRotate( bool rotateFlag );
@@ -77,10 +78,11 @@ namespace glabels
// Private Data
/////////////////////////////////
private:
- const model::Template* mTmplate;
- bool mRotateFlag;
+ const model::Template* mTmplate { nullptr };
+ bool mShowArrow { false };
+ bool mRotateFlag { false };
- QGraphicsScene* mScene;
+ QGraphicsScene* mScene { nullptr };
};
diff --git a/glabels/TemplatePicker.cpp b/glabels/TemplatePicker.cpp
index cfe1017..d47f6e1 100644
--- a/glabels/TemplatePicker.cpp
+++ b/glabels/TemplatePicker.cpp
@@ -18,11 +18,78 @@
* along with gLabels-qt. If not, see .
*/
+
#include "TemplatePicker.h"
#include "TemplatePickerItem.h"
+#include "model/Settings.h"
+
+#include
+#include
#include
+#include
+#include
+
+#include
+
+
+namespace
+{
+
+ //
+ // Custom item delegate to render text as HTML in List View
+ //
+ // Based on solutions at
+ // https://stackoverflow.com/questions/1956542/how-to-make-item-view-render-rich-html-text-in-qt/1956781#1956781
+ // Note: assumes that the text rectangle does not need to be resized, so does not reimplement sizeHint().
+ // This delegate does not work correctly in IconMode, and may not work correctly in other applications,
+ // for instance, when the height is not dominated by the icon.
+ //
+ class HtmlDelegate : public QStyledItemDelegate
+ {
+ protected:
+ void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const override;
+ };
+
+
+ void HtmlDelegate::paint( QPainter* painter,
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index) const
+ {
+ auto opt = option;
+ initStyleOption( &opt, index );
+
+ QStyle *style = opt.widget? opt.widget->style() : QApplication::style();
+
+ QTextDocument doc;
+ doc.setHtml( opt.text );
+
+ /// Painting everything other than text
+ opt.text = QString();
+ style->drawControl( QStyle::CE_ItemViewItem, &opt, painter );
+
+ QAbstractTextDocumentLayout::PaintContext ctx;
+
+ // Highlighting text if item is selected
+ if ( opt.state & QStyle::State_Selected )
+ {
+ ctx.palette.setColor( QPalette::Text, opt.palette.color( QPalette::Active, QPalette::HighlightedText ) );
+ }
+ else
+ {
+ ctx.palette.setColor( QPalette::Text, opt.palette.color( QPalette::Active, QPalette::Text ) );
+ }
+
+ QRect textRect = style->subElementRect( QStyle::SE_ItemViewItemText, &opt );
+ painter->save();
+ painter->translate( textRect.topLeft() );
+ painter->setClipRect( textRect.translated( -textRect.topLeft() ) );
+ doc.documentLayout()->draw( painter, ctx );
+ painter->restore();
+ }
+
+}
namespace glabels
@@ -31,29 +98,83 @@ namespace glabels
///
/// Constructor
///
- TemplatePicker::TemplatePicker( QWidget *parent ) : QListWidget(parent)
+ TemplatePicker::TemplatePicker( QWidget* parent ) : QListWidget(parent)
{
- setViewMode( QListView::IconMode );
setResizeMode( QListView::Adjust );
- setSpacing( 24 );
- setWordWrap( true );
setUniformItemSizes( true );
- setIconSize( QSize(TemplatePickerItem::SIZE, TemplatePickerItem::SIZE) );
+ setWordWrap( true );
+ setIconSize( QSize( TemplatePickerItem::SIZE, TemplatePickerItem::SIZE ) );
+
+ setMode( model::Settings::templatePickerMode() );
}
///
/// Set List of Templates to Pick From
///
- void TemplatePicker::setTemplates( const QList &tmplates )
+ void TemplatePicker::setTemplates( const QList& tmplates )
{
+ auto mode = model::Settings::templatePickerMode();
+
foreach (model::Template *tmplate, tmplates)
{
- new TemplatePickerItem( tmplate, this );
+ new TemplatePickerItem( tmplate, mode, this );
}
}
+ ///
+ /// Set View Mode
+ ///
+ void TemplatePicker::setMode( QListView::ViewMode mode )
+ {
+ model::Settings::setTemplatePickerMode( mode );
+
+ for ( unsigned int i = 0; i < count(); i++ )
+ {
+ if (auto* tItem = dynamic_cast(item(i)))
+ {
+ tItem->setMode( mode );
+ }
+ }
+
+ switch ( mode )
+ {
+
+ case QListView::IconMode:
+ setItemDelegate( new QStyledItemDelegate() ); // Use default delegate
+ setViewMode( QListView::IconMode );
+ setSpacing( 24 );
+ break;
+
+ case QListView::ListMode:
+ setItemDelegate( new HtmlDelegate() );
+ setViewMode( QListView::ListMode );
+ setSpacing( 8 );
+ break;
+
+ default:
+ qWarning() << "TemplatePicker: unknown mode!";
+ break;
+
+ }
+
+ if ( auto* selected = selectedItem() )
+ {
+ scrollToItem( selected, QAbstractItemView::PositionAtCenter );
+ }
+ }
+
+
+ ///
+ /// Get current View Mode
+ ///
+ QListView::ViewMode TemplatePicker::mode() const
+ {
+ return model::Settings::templatePickerMode();
+ }
+
+
///
/// Apply Filter to Narrow Template Choices by search criteria
///
@@ -61,9 +182,9 @@ namespace glabels
bool isoMask, bool usMask, bool otherMask,
bool anyCategory, const QStringList& categoryIds )
{
- foreach ( QListWidgetItem *item, findItems( "*", Qt::MatchWildcard ) )
+ for ( unsigned int i = 0; i < count(); i++ )
{
- if (auto *tItem = dynamic_cast(item))
+ if (auto* tItem = dynamic_cast(item(i)))
{
bool nameMask = tItem->tmplate()->name().contains( searchString, Qt::CaseInsensitive );
@@ -89,15 +210,20 @@ namespace glabels
if ( nameMask && sizeMask && categoryMask )
{
- item->setHidden( false );
+ tItem->setHidden( false );
}
else
{
- item->setHidden( true );
- item->setSelected( false );
+ tItem->setHidden( true );
+ tItem->setSelected( false );
}
}
}
+
+ if ( auto* selected = selectedItem() )
+ {
+ scrollToItem( selected, QAbstractItemView::PositionAtCenter );
+ }
}
@@ -106,9 +232,9 @@ namespace glabels
///
void TemplatePicker::applyFilter( const QStringList& names )
{
- foreach ( QListWidgetItem *item, findItems( "*", Qt::MatchWildcard ) )
+ for ( unsigned int i = 0; i < count(); i++ )
{
- if (auto *tItem = dynamic_cast(item))
+ if (auto *tItem = dynamic_cast(item(i)))
{
bool match = false;
foreach ( QString name, names )
@@ -122,33 +248,50 @@ namespace glabels
if ( match )
{
- item->setHidden( false );
+ tItem->setHidden( false );
}
else
{
- item->setHidden( true );
- item->setSelected( false );
+ tItem->setHidden( true );
+ tItem->setSelected( false );
}
}
}
+
+ if ( auto* selected = selectedItem() )
+ {
+ scrollToItem( selected, QAbstractItemView::PositionAtCenter );
+ }
}
///
/// Get Currently Selected Template
///
- const model::Template *TemplatePicker::selectedTemplate()
+ const model::Template* TemplatePicker::selectedTemplate() const
{
- QList items = selectedItems();
- if ( !items.isEmpty() )
+ if ( auto* tItem = selectedItem() )
{
- if (auto *tItem = dynamic_cast(items.first()))
- {
- return tItem->tmplate();
- }
+ return tItem->tmplate();
}
return nullptr;
}
+
+ ///
+ /// Get Currently Selected Item
+ ///
+ TemplatePickerItem* TemplatePicker::selectedItem() const
+ {
+ QList items = selectedItems();
+ if ( !items.isEmpty() )
+ {
+ return dynamic_cast( items.first() );
+ }
+
+ return nullptr;
+ }
+
+
} // namespace glabels
diff --git a/glabels/TemplatePicker.h b/glabels/TemplatePicker.h
index 99428a4..78186f0 100644
--- a/glabels/TemplatePicker.h
+++ b/glabels/TemplatePicker.h
@@ -22,6 +22,8 @@
#define TemplatePicker_h
+#include "TemplatePickerItem.h"
+
#include "model/Template.h"
#include
@@ -38,19 +40,21 @@ namespace glabels
{
Q_OBJECT
-
/////////////////////////////////
// Life Cycle
/////////////////////////////////
public:
- TemplatePicker( QWidget *parent = nullptr );
+ TemplatePicker( QWidget* parent = nullptr );
/////////////////////////////////
// Properties
/////////////////////////////////
public:
- void setTemplates( const QList &tmplates );
+ void setTemplates( const QList& tmplates );
+
+ void setMode( QListView::ViewMode mode );
+ QListView::ViewMode mode() const;
/////////////////////////////////
@@ -62,7 +66,9 @@ namespace glabels
void applyFilter( const QStringList& names );
- const model::Template *selectedTemplate();
+ const model::Template* selectedTemplate() const;
+ TemplatePickerItem* selectedItem() const;
+
};
diff --git a/glabels/TemplatePickerItem.cpp b/glabels/TemplatePickerItem.cpp
index 7c695d3..43ec4c7 100644
--- a/glabels/TemplatePickerItem.cpp
+++ b/glabels/TemplatePickerItem.cpp
@@ -18,10 +18,13 @@
* along with gLabels-qt. If not, see .
*/
+
#include "TemplatePickerItem.h"
#include "MiniPreviewPixmap.h"
+#include "model/Settings.h"
+
#include
#include
#include
@@ -33,19 +36,49 @@ namespace glabels
///
/// Constructor
///
- TemplatePickerItem::TemplatePickerItem( model::Template *tmplate, QListWidget *parent )
- : QListWidgetItem(parent)
+ TemplatePickerItem::TemplatePickerItem( model::Template* tmplate,
+ QListView::ViewMode mode,
+ QListWidget* parent )
+ : QListWidgetItem( parent )
{
mTmplate = tmplate;
setIcon( QIcon( MiniPreviewPixmap( tmplate, SIZE, SIZE ) ) );
- setText( tmplate->name() );
- setToolTip( tmplate->name() );
+ setMode( mode );
setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
}
+ ///
+ /// Configure for given View Mode
+ ///
+ void TemplatePickerItem::setMode( QListView::ViewMode mode )
+ {
+ auto* frame = mTmplate->frames().first();
+
+ switch ( mode )
+ {
+
+ case QListView::IconMode:
+ setText( mTmplate->name() );
+ break;
+
+ case QListView::ListMode:
+ setText( "" + mTmplate->name() + "
" +
+ mTmplate->description() + "
" +
+ frame->sizeDescription( model::Settings::units() ) + "
" +
+ frame->layoutDescription() );
+ break;
+
+ default:
+ qWarning() << "TemplatePickerItem: unknown mode!";
+ break;
+
+ }
+ }
+
+
///
/// Template Property Getter
///
diff --git a/glabels/TemplatePickerItem.h b/glabels/TemplatePickerItem.h
index 67b63d8..a67b3de 100644
--- a/glabels/TemplatePickerItem.h
+++ b/glabels/TemplatePickerItem.h
@@ -39,11 +39,21 @@ namespace glabels
public:
static const int SIZE = 80;
+
/////////////////////////////////
// Life Cycle
/////////////////////////////////
public:
- TemplatePickerItem( model::Template *tmplate, QListWidget *parent = nullptr );
+ TemplatePickerItem( model::Template* tmplate,
+ QListView::ViewMode mode,
+ QListWidget* parent = nullptr );
+
+
+ /////////////////////////////////
+ // Manipulate widget
+ /////////////////////////////////
+ public:
+ void setMode( QListView::ViewMode mode );
/////////////////////////////////
diff --git a/glabels/icons.qrc b/glabels/icons.qrc
index 7baf897..0d14373 100644
--- a/glabels/icons.qrc
+++ b/glabels/icons.qrc
@@ -63,6 +63,8 @@
icons/flat/22x22/glabels-valign-text-bottom.svg
icons/flat/22x22/glabels-valign-text-middle.svg
icons/flat/22x22/glabels-valign-text-top.svg
+ icons/flat/22x22/glabels-view-grid.svg
+ icons/flat/22x22/glabels-view-list.svg
icons/flat/22x22/glabels-zoom-in.svg
icons/flat/22x22/glabels-zoom-one-to-one.svg
icons/flat/22x22/glabels-zoom-out.svg
diff --git a/glabels/icons/flat/22x22/glabels-view-grid.svg b/glabels/icons/flat/22x22/glabels-view-grid.svg
new file mode 100644
index 0000000..84ce781
--- /dev/null
+++ b/glabels/icons/flat/22x22/glabels-view-grid.svg
@@ -0,0 +1,15 @@
+
diff --git a/glabels/icons/flat/22x22/glabels-view-list.svg b/glabels/icons/flat/22x22/glabels-view-list.svg
new file mode 100644
index 0000000..fac51e7
--- /dev/null
+++ b/glabels/icons/flat/22x22/glabels-view-list.svg
@@ -0,0 +1,21 @@
+
diff --git a/glabels/ui/SelectProductDialog.ui b/glabels/ui/SelectProductDialog.ui
index b7f8c48..798cb5b 100644
--- a/glabels/ui/SelectProductDialog.ui
+++ b/glabels/ui/SelectProductDialog.ui
@@ -6,8 +6,8 @@
0
0
- 997
- 823
+ 1078
+ 796
@@ -22,273 +22,505 @@
true
-
+
-
-
+
-
-
-
-
-
-
-
- 0
- 0
-
-
-
- 0
-
-
-
- Search all
-
-
-
-
-
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+
+ Search all
+
+
+
-
+
+
-
+
+
+ 6
+
+
+ 6
+
-
-
-
- 6
-
-
- 6
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 220
- 0
-
-
-
- Search
-
-
- true
-
-
-
-
-
- -
-
+
-
+
0
0
- 0
+ 220
0
-
- false
+
+ Search
-
- Filter by paper size
+
+ true
-
- false
-
-
- false
-
-
-
-
-
-
- 3
-
-
-
-
-
- ISO sizes
-
-
-
- -
-
-
- US sizes
-
-
-
- -
-
-
- Other
-
-
-
-
-
-
-
-
- -
-
-
- Filter by category
-
-
-
- 3
-
-
-
-
-
- All
-
-
-
- -
-
-
- Selected
-
-
-
- -
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- 3
-
-
- 20
-
-
-
-
-
-
-
- -
-
-
- Qt::Vertical
+
-
+
+
+
+ 0
+ 0
+
-
+
- 20
- 3
+ 0
+ 0
-
+
+ false
+
+
+ Filter by paper size
+
+
+ false
+
+
+ false
+
+
+ -
+
+
+ 3
+
+
-
+
+
+ ISO sizes
+
+
+
+ -
+
+
+ US sizes
+
+
+
+ -
+
+
+ Other
+
+
+
+
+
+
+
- -
-
-
- Search entire product database.
-
-
- true
+
-
+
+
+ Filter by category
+
+
+ 3
+
+
-
+
+
+ All
+
+
+
+ -
+
+
+ Selected
+
+
+
+ -
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ 3
+
+
+ 20
+
+
+
+
+
+
+
-
-
-
- Recent
-
-
- -
-
-
- Select from recently used products.
-
-
- true
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
-
-
-
-
- -
-
-
-
- 140
- 0
-
-
-
- false
-
-
-
-
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 3
+
+
+
+
+ -
+
+
+ Search entire product database.
+
+
+ true
+
+
+
+
+
+
+
+ Recent
+
+
+ -
+
+
+ Select from recently used products.
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
-
-
-
-
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- &Cancel
-
-
-
-
+
+
+
+ 500
+ 0
+
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 300
+ 0
+
+
+
+ Product information
+
+
+
-
+
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Vendor:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ TextLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Part #:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ TextLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Description:
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ TextLabel
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+ true
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Page size:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ TextLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Label size:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ TextLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Layout:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ TextLabel
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+
+
+
+ :/icons/flat/22x22/glabels-view-grid.svg:/icons/flat/22x22/glabels-view-grid.svg
+
+
+
+ 22
+ 22
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ &Cancel
+
+
+ false
+
+
+
+ -
+
+
+ false
+
+
+ Select
+
+
@@ -300,6 +532,11 @@
QListWidget
+
+ glabels::SimplePreview
+ QGraphicsView
+
+
@@ -312,8 +549,8 @@
onPageSizeCheckClicked()
- 78
- 184
+ 130
+ 196
4
@@ -344,8 +581,8 @@
onPageSizeCheckClicked()
- 80
- 161
+ 132
+ 170
2
@@ -360,8 +597,8 @@
onCancelButtonClicked()
- 955
- 648
+ 981
+ 783
689
@@ -376,8 +613,8 @@
onSearchEntryTextChanged()
- 93
- 104
+ 107
+ 102
2
@@ -392,8 +629,8 @@
onCategoryRadioClicked()
- 76
- 270
+ 126
+ 296
0
@@ -408,8 +645,8 @@
onCategoryRadioClicked()
- 72
- 294
+ 122
+ 322
1
@@ -433,6 +670,38 @@
+
+ selectButton
+ clicked()
+ SelectProductDialog
+ onSelectButtonClicked()
+
+
+ 1022
+ 769
+
+
+ 1067
+ 682
+
+
+
+
+ viewModeButton
+ clicked()
+ SelectProductDialog
+ onViewModeButtonClicked()
+
+
+ 20
+ 760
+
+
+ -2
+ 762
+
+
+
onSearchClearButtonClicked()
@@ -444,5 +713,6 @@
onPageSizeCheckClicked()
onCategoryRadioClicked()
onModeTabChanged()
+ onViewModeButtonClicked()
diff --git a/model/Settings.cpp b/model/Settings.cpp
index a90bce8..481941b 100644
--- a/model/Settings.cpp
+++ b/model/Settings.cpp
@@ -18,6 +18,7 @@
* along with gLabels-qt. If not, see .
*/
+
#include "Settings.h"
#include
@@ -262,6 +263,28 @@ namespace glabels
}
+ QListView::ViewMode Settings::templatePickerMode()
+ {
+ QString defaultMode = "icon";
+
+ mInstance->beginGroup( "TemplatePicker" );
+ QString returnMode = mInstance->value( "viewMode", defaultMode ).toString();
+ mInstance->endGroup();
+
+ return returnMode == "icon" ? QListView::IconMode : QListView::ListMode;
+ }
+
+
+ void Settings::setTemplatePickerMode( QListView::ViewMode viewMode )
+ {
+ mInstance->beginGroup( "TemplatePicker" );
+ mInstance->setValue( "viewMode", viewMode == QListView::IconMode ? "icon" : "list" );
+ mInstance->endGroup();
+
+ emit mInstance->changed();
+ }
+
+
QStringList Settings::recentTemplateList()
{
QStringList defaultList;
diff --git a/model/Settings.h b/model/Settings.h
index 38034bc..a797f26 100644
--- a/model/Settings.h
+++ b/model/Settings.h
@@ -24,6 +24,7 @@
#include "Distance.h"
+#include
#include
#include
@@ -87,6 +88,9 @@ namespace glabels
static QStringList searchCategoryList();
static void setSearchCategoryList( const QStringList& searchCategoryList );
+ static QListView::ViewMode templatePickerMode();
+ static void setTemplatePickerMode( QListView::ViewMode viewMode );
+
static QStringList recentTemplateList();
static void addToRecentTemplateList( const QString& name );
@@ -94,7 +98,7 @@ namespace glabels
static QStringList recentFileList();
static void addToRecentFileList( const QString& filePath );
-
+
private:
static Settings* mInstance;
static const int mMaxRecentFiles{5};
diff --git a/model/Template.cpp b/model/Template.cpp
index d434d58..28dfe18 100644
--- a/model/Template.cpp
+++ b/model/Template.cpp
@@ -18,10 +18,12 @@
* along with gLabels-qt. If not, see .
*/
+
#include "Template.h"
#include "Db.h"
#include "FrameContinuous.h"
+#include "StrUtil.h"
#include
@@ -190,6 +192,30 @@ namespace glabels
}
+ QString Template::paperDescription( const Units& units ) const
+ {
+ if ( mPaperId == "other" )
+ {
+ if ( units.toEnum() == Units::IN )
+ {
+ QString wStr = StrUtil::formatFraction( mPageWidth.in() );
+ QString hStr = StrUtil::formatFraction( mPageHeight.in() );
+
+ return QString("%1 x %2 %3").arg(wStr).arg(hStr).arg(units.toTrName());
+ }
+ else
+ {
+ return QString("%1 x %2 %3")
+ .arg(mPageWidth.inUnits(units), 0, 'g', 5)
+ .arg(mPageHeight.inUnits(units), 0, 'g', 5)
+ .arg(units.toTrName());
+ }
+ }
+
+ return Db::lookupPaperNameFromId( mPaperId );
+ }
+
+
QString Template::paperId() const
{
return mPaperId;
diff --git a/model/Template.h b/model/Template.h
index 2f90509..3decf5b 100644
--- a/model/Template.h
+++ b/model/Template.h
@@ -73,6 +73,7 @@ namespace glabels
QString part() const;
QString description() const;
+ QString paperDescription( const Units& units ) const;
QString paperId() const;
Distance pageWidth() const;
Distance pageHeight() const;
diff --git a/templates/avery-other-templates.xml b/templates/avery-other-templates.xml
index 25ccfbd..0dbd27d 100644
--- a/templates/avery-other-templates.xml
+++ b/templates/avery-other-templates.xml
@@ -10,7 +10,7 @@
-
diff --git a/templates/canon-other-templates.xml b/templates/canon-other-templates.xml
index d61ae61..ec4d3d0 100644
--- a/templates/canon-other-templates.xml
+++ b/templates/canon-other-templates.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/templates/dymo-other-templates.xml b/templates/dymo-other-templates.xml
index a06f1cb..d06574b 100644
--- a/templates/dymo-other-templates.xml
+++ b/templates/dymo-other-templates.xml
@@ -74,7 +74,7 @@
-
+
@@ -86,7 +86,7 @@
-
+
@@ -98,7 +98,7 @@
-
+
@@ -110,7 +110,7 @@
-
+
@@ -122,7 +122,7 @@
-
+
@@ -135,7 +135,7 @@
-
+
@@ -147,7 +147,7 @@
-
+
@@ -160,7 +160,7 @@
-
+
@@ -172,7 +172,7 @@
-
+
@@ -185,7 +185,7 @@
-
+
@@ -197,7 +197,7 @@
-
+
@@ -209,7 +209,7 @@
-
+
@@ -221,7 +221,7 @@
-
+
@@ -234,7 +234,7 @@
-
+
@@ -246,7 +246,7 @@
-
+
@@ -259,7 +259,7 @@
-
+
diff --git a/templates/felga-templates.xml b/templates/felga-templates.xml
index 4807a27..8dabcff 100644
--- a/templates/felga-templates.xml
+++ b/templates/felga-templates.xml
@@ -7,14 +7,14 @@
-
+
-
+
diff --git a/templates/hisago-templates.xml b/templates/hisago-templates.xml
index 6856345..f549eb9 100644
--- a/templates/hisago-templates.xml
+++ b/templates/hisago-templates.xml
@@ -1092,7 +1092,7 @@
-
+
@@ -1101,7 +1101,7 @@
-
+
@@ -1110,7 +1110,7 @@
-
+
@@ -1119,7 +1119,7 @@
-
+
@@ -1128,7 +1128,7 @@
-
+
@@ -1161,7 +1161,7 @@
-
+
@@ -1170,7 +1170,7 @@
-
+
@@ -1179,7 +1179,7 @@
-
+
@@ -1188,7 +1188,7 @@
-
+
@@ -1197,7 +1197,7 @@
-
+
@@ -1206,7 +1206,7 @@
-
+
@@ -1215,7 +1215,7 @@
-
+
@@ -1224,7 +1224,7 @@
-
+
diff --git a/templates/jac-iso-templates.xml b/templates/jac-iso-templates.xml
index 4f74c04..bd1da40 100644
--- a/templates/jac-iso-templates.xml
+++ b/templates/jac-iso-templates.xml
@@ -463,7 +463,7 @@
-
+
@@ -475,7 +475,7 @@
-
+
@@ -487,7 +487,7 @@
-
+
@@ -499,7 +499,7 @@
-
+
@@ -511,7 +511,7 @@
-
+
@@ -523,7 +523,7 @@
-
+
@@ -535,7 +535,7 @@
-
+
@@ -548,7 +548,7 @@
-
+
@@ -561,7 +561,7 @@
-
+
@@ -574,7 +574,7 @@
-
+
@@ -587,7 +587,7 @@
-
+
@@ -599,7 +599,7 @@
-
+
diff --git a/templates/misc-other-templates.xml b/templates/misc-other-templates.xml
index 568eb4f..2b35fce 100644
--- a/templates/misc-other-templates.xml
+++ b/templates/misc-other-templates.xml
@@ -37,7 +37,7 @@
-
diff --git a/translations/glabels_C.ts b/translations/glabels_C.ts
index a0e3af4..28ce850 100644
--- a/translations/glabels_C.ts
+++ b/translations/glabels_C.ts
@@ -756,6 +756,42 @@
&Cancel
+
+ Product information
+
+
+
+ Vendor:
+
+
+
+ TextLabel
+
+
+
+ Part #:
+
+
+
+ Description:
+
+
+
+ Page size:
+
+
+
+ Label size:
+
+
+
+ Layout:
+
+
+
+ Select
+
+
StartupView
@@ -2079,6 +2115,17 @@
+
+ glabels::SelectProductDialog
+
+ List View
+
+
+
+ Grid View
+
+
+
glabels::SimplePreview