Implemented TemplateDesigner.

This commit is contained in:
Jim Evins
2018-04-07 22:24:09 -04:00
parent 6379ba9cef
commit a0e1dae5cf
40 changed files with 4397 additions and 73 deletions
+1
View File
@@ -83,6 +83,7 @@ find_package (Qt5Test 5.4 QUIET)
# (not recommended -- only for testing -- also not portable)
#
#add_compile_options("-Wall" "-Werror" "-Wpedantic")
add_compile_options("-g")
#=======================================
+2 -4
View File
@@ -25,10 +25,8 @@ gLabels-qt is the development version of the next major version of gLabels (4.0)
gLabels-qt has been under off-and-on development for several years..
It is still missing several features to bring it in parity with glabels-3.4. These include
- Batch mode
- Compatability with older glabels files
- Custom product templates designer
- Online manual
- Compatability with older glabels project files
- An online manual
## Download
+3 -3
View File
@@ -7,9 +7,9 @@ This document is a reference for manually creating *gLabels* product templates.
Location | Description
-----------------------------------------|-----------------------------------------
${prefix}/share/libglabels-qt/templates/ | Predefined templates distributed with glabels.
${XDG_CONFIG_HOME}/libglabels/templates | User defined templates created with the gLabels Template Designer.
------------------------------------------|-----------------------------------------
${prefix}/share/glabels-qt/templates/ | Predefined templates distributed with glabels.
${XDG_CONFIG_HOME}/glabels.org/glabels-qt | User defined templates created with the gLabels Product Template Designer. **Do not place manually created templates here!**
${HOME}/.glabels | Manually created templates should be placed here.
+14
View File
@@ -33,6 +33,7 @@ set (glabels_sources
SelectProductDialog.cpp
SimplePreview.cpp
StartupView.cpp
TemplateDesigner.cpp
TemplatePicker.cpp
TemplatePickerItem.cpp
UndoRedoModel.cpp
@@ -61,6 +62,7 @@ set (glabels_qobject_headers
SelectProductDialog.h
SimplePreview.h
StartupView.h
TemplateDesigner.h
TemplatePicker.h
UndoRedoModel.h
)
@@ -74,6 +76,18 @@ set (glabels_forms
ui/PropertiesView.ui
ui/SelectProductDialog.ui
ui/StartupView.ui
ui/TemplateDesignerIntroPage.ui
ui/TemplateDesignerNamePage.ui
ui/TemplateDesignerPageSizePage.ui
ui/TemplateDesignerShapePage.ui
ui/TemplateDesignerRectPage.ui
ui/TemplateDesignerRoundPage.ui
ui/TemplateDesignerEllipsePage.ui
ui/TemplateDesignerCdPage.ui
ui/TemplateDesignerNLayoutsPage.ui
ui/TemplateDesignerOneLayoutPage.ui
ui/TemplateDesignerTwoLayoutPage.ui
ui/TemplateDesignerApplyPage.ui
)
set (glabels_resource_files
+11
View File
@@ -22,6 +22,7 @@
#include "MainWindow.h"
#include "SelectProductDialog.h"
#include "TemplateDesigner.h"
#include "model/FileUtil.h"
#include "model/Model.h"
@@ -221,6 +222,16 @@ namespace glabels
}
///
/// Template Designer
///
void File::templateDesigner( MainWindow *window )
{
TemplateDesigner dialog( window );
dialog.exec();
}
///
/// Close file
///
+1
View File
@@ -46,6 +46,7 @@ namespace glabels
static void open( MainWindow *window );
static bool save( MainWindow *window );
static bool saveAs( MainWindow *window );
static void templateDesigner( MainWindow *window );
static void close( MainWindow *window );
static void exit();
+2 -2
View File
@@ -246,7 +246,7 @@ namespace glabels
fileSaveAsAction->setStatusTip( tr("Save current gLabels project to a different name") );
connect( fileSaveAsAction, SIGNAL(triggered()), this, SLOT(fileSaveAs()) );
fileTemplateDesignerAction = new QAction( tr("Template &Designer..."), this );
fileTemplateDesignerAction = new QAction( tr("Product Template &Designer..."), this );
fileTemplateDesignerAction->setStatusTip( tr("Create custom templates") );
connect( fileTemplateDesignerAction, SIGNAL(triggered()), this, SLOT(fileTemplateDesigner()) );
@@ -1041,7 +1041,7 @@ namespace glabels
///
void MainWindow::fileTemplateDesigner()
{
qDebug() << "ACTION: file->Template Designer";
File::templateDesigner( this );
}
File diff suppressed because it is too large Load Diff
+289
View File
@@ -0,0 +1,289 @@
/* TemplateDesigner.h
*
* Copyright (C) 2018 Jim Evins <evins@snaught.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef TemplateDesigner_h
#define TemplateDesigner_h
#include "ui_TemplateDesignerIntroPage.h"
#include "ui_TemplateDesignerNamePage.h"
#include "ui_TemplateDesignerPageSizePage.h"
#include "ui_TemplateDesignerShapePage.h"
#include "ui_TemplateDesignerRectPage.h"
#include "ui_TemplateDesignerRoundPage.h"
#include "ui_TemplateDesignerEllipsePage.h"
#include "ui_TemplateDesignerCdPage.h"
#include "ui_TemplateDesignerNLayoutsPage.h"
#include "ui_TemplateDesignerOneLayoutPage.h"
#include "ui_TemplateDesignerTwoLayoutPage.h"
#include "ui_TemplateDesignerApplyPage.h"
#include "model/Template.h"
#include <QWizard>
#include <QWizardPage>
namespace glabels
{
///
/// About Dialog Widget
///
class TemplateDesigner : public QWizard
{
Q_OBJECT
// My subpages are my friends :-)
friend class TemplateDesignerIntroPage;
friend class TemplateDesignerNamePage;
friend class TemplateDesignerPageSizePage;
friend class TemplateDesignerShapePage;
friend class TemplateDesignerRectPage;
friend class TemplateDesignerRoundPage;
friend class TemplateDesignerEllipsePage;
friend class TemplateDesignerCdPage;
friend class TemplateDesignerNLayoutsPage;
friend class TemplateDesignerOneLayoutPage;
friend class TemplateDesignerTwoLayoutPage;
friend class TemplateDesignerApplyPage;
/////////////////////////////////
// Life Cycle
/////////////////////////////////
public:
TemplateDesigner( QWidget *parent = nullptr );
/////////////////////////////////
// Private methods
/////////////////////////////////
private:
int nextId() const override;
double itemWidth();
double itemHeight();
double itemXWaste();
double itemYWaste();
model::Template* buildTemplate();
void printTestSheet();
void loadFromTemplate( const model::Template* tmplate );
bool isBasedOnCopy();
/////////////////////////////////
// Private methods
/////////////////////////////////
private:
bool mIsBasedOnCopy;
};
//
// Intro Page
//
class TemplateDesignerIntroPage : public QWizardPage, public Ui::TemplateDesignerIntroPage
{
Q_OBJECT
public:
TemplateDesignerIntroPage( QWidget* parent = nullptr );
bool isComplete() const override;
private slots:
void onCopyButtonClicked();
void onNewButtonClicked();
};
//
// Name Page
//
class TemplateDesignerNamePage : public QWizardPage, public Ui::TemplateDesignerNamePage
{
Q_OBJECT
public:
TemplateDesignerNamePage( QWidget* parent = nullptr );
bool isComplete() const override;
private slots:
void onChanged();
private:
bool mCanContinue = false;
};
//
// Page Size Page
//
class TemplateDesignerPageSizePage : public QWizardPage, public Ui::TemplateDesignerPageSizePage
{
Q_OBJECT
public:
TemplateDesignerPageSizePage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
private slots:
void onComboChanged();
};
//
// Shape Page
//
class TemplateDesignerShapePage : public QWizardPage, public Ui::TemplateDesignerShapePage
{
Q_OBJECT
public:
TemplateDesignerShapePage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
};
//
// Rect Page
//
class TemplateDesignerRectPage : public QWizardPage, public Ui::TemplateDesignerRectPage
{
Q_OBJECT
public:
TemplateDesignerRectPage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
};
//
// Round Page
//
class TemplateDesignerRoundPage : public QWizardPage, public Ui::TemplateDesignerRoundPage
{
Q_OBJECT
public:
TemplateDesignerRoundPage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
};
//
// Ellipse Page
//
class TemplateDesignerEllipsePage : public QWizardPage, public Ui::TemplateDesignerEllipsePage
{
Q_OBJECT
public:
TemplateDesignerEllipsePage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
};
//
// Cd Page
//
class TemplateDesignerCdPage : public QWizardPage, public Ui::TemplateDesignerCdPage
{
Q_OBJECT
public:
TemplateDesignerCdPage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
};
//
// NLayouts Page
//
class TemplateDesignerNLayoutsPage : public QWizardPage, public Ui::TemplateDesignerNLayoutsPage
{
Q_OBJECT
public:
TemplateDesignerNLayoutsPage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
};
//
// OneLayout Page
//
class TemplateDesignerOneLayoutPage : public QWizardPage, public Ui::TemplateDesignerOneLayoutPage
{
Q_OBJECT
public:
TemplateDesignerOneLayoutPage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
private slots:
void onChanged();
void onPrintButtonClicked();
};
//
// TwoLayout Page
//
class TemplateDesignerTwoLayoutPage : public QWizardPage, public Ui::TemplateDesignerTwoLayoutPage
{
Q_OBJECT
public:
TemplateDesignerTwoLayoutPage( QWidget* parent = nullptr );
void initializePage() override;
void cleanupPage() override;
private slots:
void onChanged();
void onPrintButtonClicked();
};
//
// Apply Page
//
class TemplateDesignerApplyPage : public QWizardPage, public Ui::TemplateDesignerApplyPage
{
Q_OBJECT
public:
TemplateDesignerApplyPage( QWidget* parent = nullptr );
bool validatePage();
};
}
#endif // TemplateDesigner_h
+11
View File
@@ -2,8 +2,19 @@
<RCC version="1.0">
<qresource>
<file>images/glabels-label-designer.png</file>
<file>images/glabels-logo.png</file>
<file>images/checkerboard.png</file>
<file>images/TemplateDesigner/wizard-banner.png</file>
<file>images/TemplateDesigner/ex-1layout.png</file>
<file>images/TemplateDesigner/ex-2layouts.png</file>
<file>images/TemplateDesigner/ex-cd-size.png</file>
<file>images/TemplateDesigner/ex-ellipse-size.png</file>
<file>images/TemplateDesigner/ex-rect-size.png</file>
<file>images/TemplateDesigner/ex-round-size.png</file>
</qresource>
</RCC>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

+69
View File
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerApplyPage</class>
<widget class="QWidget" name="TemplateDesignerApplyPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>18</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>You have completed the gLabels Product Template Designer. If you wish to accept and save your product template, click &quot;Save.&quot;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Otherwise, you may click &quot;Cancel&quot; to abandon your design or &quot;Back&quot; to review or continue editing this product template.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+190
View File
@@ -0,0 +1,190 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerCdPage</class>
<widget class="QWidget" name="TemplateDesignerCdPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="xClipSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>6. Margin:</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>1. Outer radius:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>4. Clipping height:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>2. Inner radius:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>3. Clipping width:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="r2Spin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="r1Spin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QDoubleSpinBox" name="marginSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="wasteSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="yClipSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>5. Waste:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images.qrc">:/images/TemplateDesigner/ex-cd-size.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>65</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>
+156
View File
@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerEllipsePage</class>
<widget class="QWidget" name="TemplateDesignerEllipsePage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="marginSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>2. Height:</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>1. Width:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>3. Waste:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="wSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>4. Margin:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="wasteSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="hSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images.qrc">:/images/TemplateDesigner/ex-ellipse-size.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>65</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>
+76
View File
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerIntroPage</class>
<widget class="QWidget" name="TemplateDesignerIntroPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="verticalSpacing">
<number>12</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This dialog will help you create a custom product template. Let's get started:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QCommandLinkButton" name="copyButton">
<property name="text">
<string>Copy/Edit Product</string>
</property>
<property name="description">
<string>Copy and edit an existing product template</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCommandLinkButton" name="newButton">
<property name="text">
<string>New Product</string>
</property>
<property name="description">
<string>Create a a new product template from scratch</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+250
View File
@@ -0,0 +1,250 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerNLayoutsPage</class>
<widget class="QWidget" name="TemplateDesignerNLayoutsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="spacing">
<number>18</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>A layout is a set of labels or cards that can be arranged in a simple grid. Most products only need one layout, as in the first example below. The second example illustrates when two layouts are needed.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>75</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images.qrc">:/images/TemplateDesigner/ex-1layout.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Products needing only one layout.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>75</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images.qrc">:/images/TemplateDesigner/ex-2layouts.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Products needing two layouts.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>Note: if more than two layouts are required, the product template must be edited manually.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>3</number>
</property>
<item>
<widget class="QRadioButton" name="oneLayoutRadio">
<property name="text">
<string>One layout</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="twoLayoutsRadio">
<property name="text">
<string>Two layouts</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>58</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>
+134
View File
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerNamePage</class>
<widget class="QWidget" name="TemplateDesignerNamePage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="2" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>123</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout">
<property name="horizontalSpacing">
<number>12</number>
</property>
<item row="2" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="brandEntry"/>
</item>
<item row="5" column="1" colspan="2">
<widget class="QLabel" name="label_7">
<property name="text">
<string>(e.g. &quot;Mailing Labels,&quot; &quot;Business Cards,&quot; ...)</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Brand:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Part #:</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QLabel" name="warningLabel">
<property name="text">
<string notr="true">&lt;b&gt;Warning Text&lt;/b&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Description:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="partEntry"/>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_5">
<property name="text">
<string>(e.g. 8163A)</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QLineEdit" name="descriptionEntry"/>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>(e.g. Avery, Acme, ...)</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+218
View File
@@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerOneLayoutPage</class>
<widget class="QWidget" name="TemplateDesignerOneLayoutPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<property name="horizontalSpacing">
<number>12</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Number across (nx):</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="nxSpin">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Number down (ny):</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="nySpin">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Distance from left edge (x0):</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="x0Spin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Distance from top edge (y0);</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="y0Spin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Horizontal pitch (dx):</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="dxSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Vertical pitch (dy):</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QDoubleSpinBox" name="dySpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1" rowspan="2">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="glabels::SimplePreview" name="preview"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="printButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Print test sheet</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/32x32/actions/print.svg</normaloff>:/icons/32x32/actions/print.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>133</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>glabels::SimplePreview</class>
<extends>QGraphicsView</extends>
<header>SimplePreview.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../icons.qrc"/>
</resources>
<connections/>
</ui>
+107
View File
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerPageSizePage</class>
<widget class="QWidget" name="TemplateDesignerPageSizePage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Page size:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Width:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="wSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Height:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="hSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="pageSizeCombo"/>
</item>
</layout>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>182</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>173</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+177
View File
@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerRectPage</class>
<widget class="QWidget" name="TemplateDesignerRectPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>2. Height:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="rSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QDoubleSpinBox" name="marginSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="yWasteSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="hSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>1. Width:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="xWasteSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>4. Horizontal waste:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>3. Corner radius</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>6. Margin:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="wSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>5. Vertical waste:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images.qrc">:/images/TemplateDesigner/ex-rect-size.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>65</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>
+139
View File
@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerRoundPage</class>
<widget class="QWidget" name="TemplateDesignerRoundPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="rSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="marginSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="wasteSpin">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>3. Margin</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>1. Radius:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>2. Waste:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images.qrc">:/images/TemplateDesigner/ex-round-size.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>65</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>
+81
View File
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerShapePage</class>
<widget class="QWidget" name="TemplateDesignerShapePage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QRadioButton" name="rectRadio">
<property name="text">
<string>Rectangular or square (can have rounded corners)</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="roundRadio">
<property name="text">
<string>Round</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="ellipseRadio">
<property name="text">
<string>Elliptical</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="cdRadio">
<property name="text">
<string>CD/DVD (including credit card CDs)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>149</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+256
View File
@@ -0,0 +1,256 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TemplateDesignerTwoLayoutPage</class>
<widget class="QWidget" name="TemplateDesignerTwoLayoutPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>640</width>
<height>400</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<property name="horizontalSpacing">
<number>12</number>
</property>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Distance from left edge (x0):</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="nySpin1"/>
</item>
<item row="5" column="1">
<widget class="QDoubleSpinBox" name="dySpin1">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Number down (ny):</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="y0Spin1">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Distance from top edge (y0);</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="dxSpin1">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="nxSpin1"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Number across (nx):</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Horizontal pitch (dx):</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="x0Spin1">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Vertical pitch (dy):</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QSpinBox" name="nxSpin2"/>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="nySpin2"/>
</item>
<item row="2" column="2">
<widget class="QDoubleSpinBox" name="x0Spin2">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QDoubleSpinBox" name="y0Spin2">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QDoubleSpinBox" name="dxSpin2">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QDoubleSpinBox" name="dySpin2">
<property name="accelerated">
<bool>true</bool>
</property>
<property name="suffix">
<string notr="true">in</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1" rowspan="2">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="glabels::SimplePreview" name="preview"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="printButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Print test sheet</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/32x32/actions/print.svg</normaloff>:/icons/32x32/actions/print.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>133</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>glabels::SimplePreview</class>
<extends>QGraphicsView</extends>
<header>SimplePreview.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../icons.qrc"/>
</resources>
<connections/>
</ui>
+59 -10
View File
@@ -23,9 +23,11 @@
#include "Config.h"
#include "StrUtil.h"
#include "FileUtil.h"
#include "Settings.h"
#include "XmlCategoryParser.h"
#include "XmlPaperParser.h"
#include "XmlTemplateParser.h"
#include "XmlTemplateCreator.h"
#include "XmlVendorParser.h"
#include <QtDebug>
@@ -497,6 +499,22 @@ namespace glabels
}
bool Db::isSystemTemplateKnown( const QString& brand, const QString& part )
{
foreach ( Template *tmplate, mTemplates )
{
if ( (tmplate->brand() == brand) &&
(tmplate->part() == part) &&
!tmplate->isUserDefined() )
{
return true;
}
}
return false;
}
QStringList Db::getNameListOfSimilarTemplates( const QString& name )
{
QStringList list;
@@ -523,21 +541,52 @@ namespace glabels
}
void Db::registerUserTemplate( Template *templat )
QString Db::userTemplateFilename( const QString& brand, const QString& part )
{
// TODO
QString filename = brand + "_" + part + ".template";
return FileUtil::userTemplatesDir().filePath( filename );
}
void Db::deleteUserTemplateByName( const QString& name )
void Db::registerUserTemplate( Template *tmplate )
{
// TODO
QString filename = userTemplateFilename( tmplate->brand(), tmplate->part() );
// Write file
if ( XmlTemplateCreator().writeTemplate( tmplate, filename ) )
{
// Add template to list of registered templates
registerTemplate( tmplate );
Settings::addToRecentTemplateList( tmplate->name() );
}
else
{
qWarning() << "Problem writing user template" << filename;
}
}
void Db::deleteUserTemplateByBrandPart( const QString& brand, const QString& part )
{
// TODO
Template* tmplate;
foreach ( Template *candidate, mTemplates )
{
if ( candidate->isUserDefined() &&
(candidate->brand() == brand) && (candidate->part() == part) )
{
tmplate = candidate;
break;
}
}
if ( tmplate )
{
mTemplates.removeOne( tmplate );
delete tmplate;
QString filename = userTemplateFilename( brand, part );
QFile( filename ).remove();
}
}
@@ -667,15 +716,15 @@ namespace glabels
void Db::readTemplates()
{
readTemplatesFromDir( FileUtil::systemTemplatesDir() );
// TODO: Read user directories
readTemplatesFromDir( FileUtil::systemTemplatesDir(), false );
readTemplatesFromDir( FileUtil::manualUserTemplatesDir(), false );
readTemplatesFromDir( FileUtil::userTemplatesDir(), true );
std::stable_sort( mTemplates.begin(), mTemplates.end(), partNameLessThan );
}
void Db::readTemplatesFromDir( const QDir& dir )
void Db::readTemplatesFromDir( const QDir& dir, bool isUserDefined )
{
QStringList filters;
filters << "*-templates.xml" << "*.template";
@@ -684,7 +733,7 @@ namespace glabels
foreach ( QString fileName, dir.entryList( filters, QDir::Files ) )
{
parser.readFile( dir.absoluteFilePath( fileName ) );
parser.readFile( dir.absoluteFilePath( fileName ), isUserDefined );
}
}
+3 -2
View File
@@ -90,10 +90,11 @@ namespace glabels
static const Template *lookupTemplateFromBrandPart( const QString& brand,
const QString& part );
static bool isTemplateKnown( const QString& brand, const QString& part );
static bool isSystemTemplateKnown( const QString& brand, const QString& part );
static QStringList getNameListOfSimilarTemplates( const QString& name );
static QString userTemplateFilename( const QString& brand, const QString& part );
static void registerUserTemplate( Template *tmplate );
static void deleteUserTemplateByName( const QString& name );
static void deleteUserTemplateByBrandPart( const QString& brand,
const QString& part );
@@ -116,7 +117,7 @@ namespace glabels
static void readVendorsFromDir( const QDir& dir );
static void readTemplates();
static void readTemplatesFromDir( const QDir& dir );
static void readTemplatesFromDir( const QDir& dir, bool isUserDefined );
private:
+22
View File
@@ -23,6 +23,7 @@
#include "Config.h"
#include <QApplication>
#include <QStandardPaths>
namespace glabels
@@ -64,6 +65,27 @@ namespace glabels
}
QDir FileUtil::manualUserTemplatesDir()
{
// Location for manually created user-defined templates
QDir dir( QStandardPaths::writableLocation(QStandardPaths::HomeLocation) );
dir.mkpath( ".glabels" );
dir.cd( ".glabels" );
return dir;
}
QDir FileUtil::userTemplatesDir()
{
// Location for user-defined templates created using TemplateDesigner
QDir dir( QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) );
dir.mkpath( "." );
return dir;
}
QDir FileUtil::translationsDir()
{
QDir dir;
+1
View File
@@ -37,6 +37,7 @@ namespace glabels
QString addExtension( const QString& rawFilename, const QString& extension );
QDir systemTemplatesDir();
QDir manualUserTemplatesDir();
QDir userTemplatesDir();
QDir translationsDir();
+34
View File
@@ -92,6 +92,40 @@ namespace glabels
}
Settings::PageSizeFamily Settings::preferedPageSizeFamily()
{
// Guess at a suitable default
QString defaultFamily;
switch (QLocale::system().country())
{
case QLocale::UnitedStates:
case QLocale::Canada:
defaultFamily = "us";
break;
default:
defaultFamily = "iso";
break;
}
mInstance->beginGroup( "Locale" );
QString value = mInstance->value( "preferedPageSizeFamily", defaultFamily ).toString();
mInstance->endGroup();
return (value == "iso") ? ISO : US;
}
void Settings::setPreferedPageSizeFamily( PageSizeFamily preferedPageSizeFamily )
{
mInstance->beginGroup( "Locale" );
mInstance->setValue( "preferedPageSizeFamily", preferedPageSizeFamily == ISO ? "iso" : "us" );
mInstance->endGroup();
emit mInstance->changed();
}
bool Settings::searchIsoPaperSizes()
{
// Guess at a suitable default
+4 -1
View File
@@ -41,7 +41,7 @@ namespace glabels
Q_OBJECT
public:
enum class PageSizeFamilty { ISO, US, };
enum PageSizeFamily { ISO, US, };
/////////////////////////////////
@@ -69,6 +69,9 @@ namespace glabels
static Units units();
static void setUnits( const Units& units );
static PageSizeFamily preferedPageSizeFamily();
static void setPreferedPageSizeFamily( PageSizeFamily preferedPageSizeFamily );
static bool searchIsoPaperSizes();
static void setSearchIsoPaperSizes( bool searchIsoPaperSizes );
+9 -1
View File
@@ -35,13 +35,15 @@ namespace glabels
const QString& description,
const QString& paperId,
const Distance& pageWidth,
const Distance& pageHeight )
const Distance& pageHeight,
bool isUserDefined )
: mBrand(brand),
mPart(part),
mDescription(description),
mPaperId(paperId),
mPageWidth(pageWidth),
mPageHeight(pageHeight),
mIsUserDefined(isUserDefined),
mIsSizeIso(false),
mIsSizeUs(false),
mName("")
@@ -179,6 +181,12 @@ namespace glabels
}
bool Template::isUserDefined() const
{
return mIsUserDefined;
}
QString Template::equivPart() const
{
return mEquivPart;
+6 -1
View File
@@ -48,7 +48,8 @@ namespace glabels
const QString& description,
const QString& paperId,
const Distance& pageWidth,
const Distance& pageHeight );
const Distance& pageHeight,
bool isUserDefined = false );
Template( const Template& other );
@@ -74,6 +75,8 @@ namespace glabels
bool isSizeUs() const;
bool isSizeOther() const;
bool isUserDefined() const;
QString equivPart() const;
void setEquivPart( const QString& value );
@@ -104,6 +107,8 @@ namespace glabels
bool mIsSizeIso;
bool mIsSizeUs;
bool mIsUserDefined;
QString mEquivPart;
QString mName;
+7 -7
View File
@@ -41,7 +41,7 @@ namespace glabels
namespace model
{
bool XmlTemplateParser::readFile( const QString &fileName )
bool XmlTemplateParser::readFile( const QString &fileName, bool isUserDefined )
{
QFile file( fileName );
@@ -73,18 +73,18 @@ namespace glabels
return false;
}
parseRootNode( root );
parseRootNode( root, isUserDefined );
return true;
}
void XmlTemplateParser::parseRootNode( const QDomElement &node )
void XmlTemplateParser::parseRootNode( const QDomElement &node, bool isUserDefined )
{
for ( QDomNode child = node.firstChild(); !child.isNull(); child = child.nextSibling() )
{
if ( child.toElement().tagName() == "Template" )
{
Template *tmplate = parseTemplateNode( child.toElement() );
Template *tmplate = parseTemplateNode( child.toElement(), isUserDefined );
if ( tmplate != nullptr )
{
Db::registerTemplate( tmplate );
@@ -104,7 +104,7 @@ namespace glabels
}
Template *XmlTemplateParser::parseTemplateNode( const QDomElement &node )
Template *XmlTemplateParser::parseTemplateNode( const QDomElement &node, bool isUserDefined )
{
QString brand = XmlUtil::getStringAttr( node, "brand", "" );
QString part = XmlUtil::getStringAttr( node, "part", "" );
@@ -163,14 +163,14 @@ namespace glabels
}
tmplate = new Template( brand, part, description,
paper->id(), paper->width(), paper->height() );
paper->id(), paper->width(), paper->height(), isUserDefined );
}
else
{
Distance width = XmlUtil::getLengthAttr( node, "width", Distance(0) );
Distance height = XmlUtil::getLengthAttr( node, "height", Distance(0) );
tmplate = new Template( brand, part, description, paperId, width, height );
tmplate = new Template( brand, part, description, paperId, width, height, isUserDefined );
}
for ( QDomNode child = node.firstChild(); !child.isNull(); child = child.nextSibling() )
+3 -3
View File
@@ -38,11 +38,11 @@ namespace glabels
public:
XmlTemplateParser() = default;
bool readFile( const QString &fileName );
Template *parseTemplateNode( const QDomElement &node );
bool readFile( const QString &fileName, bool isUserDefined = false );
Template *parseTemplateNode( const QDomElement &node, bool isUserDefined = false );
private:
void parseRootNode( const QDomElement &node );
void parseRootNode( const QDomElement &node, bool isUserDefined );
void parseMetaNode( const QDomElement &node, Template *tmplate );
void parseLabelRectangleNode( const QDomElement &node, Template *tmplate );
void parseLabelEllipseNode( const QDomElement &node, Template *tmplate );
+624 -37
View File
@@ -785,6 +785,397 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerApplyPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerApplyPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerApplyPage.ui" line="35"/>
<source>You have completed the gLabels Product Template Designer. If you wish to accept and save your product template, click &quot;Save.&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerApplyPage.ui" line="45"/>
<source>Otherwise, you may click &quot;Cancel&quot; to abandon your design or &quot;Back&quot; to review or continue editing this product template.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerCdPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="73"/>
<source>4. Clipping height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="80"/>
<source>2. Inner radius:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="53"/>
<source>1. Outer radius:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="144"/>
<source>5. Waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="87"/>
<source>3. Clipping width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerCdPage.ui" line="46"/>
<source>6. Margin:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerEllipsePage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="73"/>
<source>3. Waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="59"/>
<source>2. Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="66"/>
<source>1. Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerEllipsePage.ui" line="90"/>
<source>4. Margin:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerIntroPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerIntroPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerIntroPage.ui" line="35"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This dialog will help you create a custom product template. Let&apos;s get started:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerIntroPage.ui" line="55"/>
<source>Copy/Edit Product</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerIntroPage.ui" line="58"/>
<source>Copy and edit an existing product template</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerIntroPage.ui" line="65"/>
<source>New Product</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerIntroPage.ui" line="68"/>
<source>Create a a new product template from scratch</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerNLayoutsPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerNLayoutsPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNLayoutsPage.ui" line="40"/>
<source>A layout is a set of labels or cards that can be arranged in a simple grid. Most products only need one layout, as in the first example below. The second example illustrates when two layouts are needed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNLayoutsPage.ui" line="104"/>
<source>Products needing only one layout.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNLayoutsPage.ui" line="168"/>
<source>Products needing two layouts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNLayoutsPage.ui" line="198"/>
<source>Note: if more than two layouts are required, the product template must be edited manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNLayoutsPage.ui" line="213"/>
<source>One layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNLayoutsPage.ui" line="223"/>
<source>Two layouts</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerNamePage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="70"/>
<source>Brand:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="117"/>
<source>(e.g. Avery, Acme, ...)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="77"/>
<source>Part #:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="107"/>
<source>(e.g. 8163A)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="97"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerNamePage.ui" line="63"/>
<source>(e.g. &quot;Mailing Labels,&quot; &quot;Business Cards,&quot; ...)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerOneLayoutPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="37"/>
<source>Number across (nx):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="51"/>
<source>Number down (ny):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="65"/>
<source>Distance from left edge (x0):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="82"/>
<source>Distance from top edge (y0);</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="99"/>
<source>Horizontal pitch (dx):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="116"/>
<source>Vertical pitch (dy):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerOneLayoutPage.ui" line="161"/>
<source>Print test sheet</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerPageSizePage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="34"/>
<source>Page size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="41"/>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerPageSizePage.ui" line="58"/>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerRectPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="83"/>
<source>1. Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="36"/>
<source>2. Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="107"/>
<source>3. Corner radius</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="100"/>
<source>4. Horizontal waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="131"/>
<source>5. Vertical waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRectPage.ui" line="114"/>
<source>6. Margin:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerRoundPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="93"/>
<source>2. Waste:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="86"/>
<source>1. Radius:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerRoundPage.ui" line="79"/>
<source>3. Margin</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerShapePage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerShapePage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerShapePage.ui" line="34"/>
<source>Rectangular or square (can have rounded corners)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerShapePage.ui" line="44"/>
<source>Round</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerShapePage.ui" line="51"/>
<source>Elliptical</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerShapePage.ui" line="58"/>
<source>CD/DVD (including credit card CDs)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TemplateDesignerTwoLayoutPage</name>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="26"/>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="37"/>
<source>Distance from left edge (x0):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="57"/>
<source>Number down (ny):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="74"/>
<source>Distance from top edge (y0);</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="94"/>
<source>Number across (nx):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="101"/>
<source>Horizontal pitch (dx):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="118"/>
<source>Vertical pitch (dy):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/ui/TemplateDesignerTwoLayoutPage.ui" line="199"/>
<source>Print test sheet</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::AboutDialog</name>
<message>
@@ -834,43 +1225,43 @@
<context>
<name>glabels::File</name>
<message>
<location filename="../glabels/File.cpp" line="103"/>
<location filename="../glabels/File.cpp" line="104"/>
<source>gLabels - Open Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="105"/>
<location filename="../glabels/File.cpp" line="186"/>
<location filename="../glabels/File.cpp" line="106"/>
<location filename="../glabels/File.cpp" line="187"/>
<source>glabels files (*.glabels);;All files (*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="132"/>
<location filename="../glabels/File.cpp" line="133"/>
<source>Unable to open &quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="132"/>
<location filename="../glabels/File.cpp" line="133"/>
<source>&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="184"/>
<location filename="../glabels/File.cpp" line="185"/>
<source>gLabels - Save Project As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="197"/>
<location filename="../glabels/File.cpp" line="198"/>
<source>Save Label As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="199"/>
<location filename="../glabels/File.cpp" line="200"/>
<source>%1 already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/File.cpp" line="200"/>
<location filename="../glabels/File.cpp" line="201"/>
<source>Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
@@ -961,7 +1352,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="249"/>
<source>Template &amp;Designer...</source>
<source>Product Template &amp;Designer...</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1004,7 +1395,7 @@
<message>
<location filename="../glabels/MainWindow.cpp" line="279"/>
<location filename="../glabels/MainWindow.cpp" line="487"/>
<location filename="../glabels/MainWindow.cpp" line="1083"/>
<location filename="../glabels/MainWindow.cpp" line="1089"/>
<source>Cut</source>
<translation type="unfinished"></translation>
</message>
@@ -1232,7 +1623,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="402"/>
<location filename="../glabels/MainWindow.cpp" line="1292"/>
<location filename="../glabels/MainWindow.cpp" line="1298"/>
<source>Bring To Front</source>
<translation type="unfinished"></translation>
</message>
@@ -1243,7 +1634,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="407"/>
<location filename="../glabels/MainWindow.cpp" line="1302"/>
<location filename="../glabels/MainWindow.cpp" line="1308"/>
<source>Send To Back</source>
<translation type="unfinished"></translation>
</message>
@@ -1254,7 +1645,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="412"/>
<location filename="../glabels/MainWindow.cpp" line="1312"/>
<location filename="../glabels/MainWindow.cpp" line="1318"/>
<source>Rotate Left</source>
<translation type="unfinished"></translation>
</message>
@@ -1265,7 +1656,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="417"/>
<location filename="../glabels/MainWindow.cpp" line="1322"/>
<location filename="../glabels/MainWindow.cpp" line="1328"/>
<source>Rotate Right</source>
<translation type="unfinished"></translation>
</message>
@@ -1276,7 +1667,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="422"/>
<location filename="../glabels/MainWindow.cpp" line="1332"/>
<location filename="../glabels/MainWindow.cpp" line="1338"/>
<source>Flip Horizontally</source>
<translation type="unfinished"></translation>
</message>
@@ -1287,7 +1678,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="427"/>
<location filename="../glabels/MainWindow.cpp" line="1342"/>
<location filename="../glabels/MainWindow.cpp" line="1348"/>
<source>Flip Vertically</source>
<translation type="unfinished"></translation>
</message>
@@ -1298,7 +1689,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="432"/>
<location filename="../glabels/MainWindow.cpp" line="1352"/>
<location filename="../glabels/MainWindow.cpp" line="1358"/>
<source>Align Left</source>
<translation type="unfinished"></translation>
</message>
@@ -1309,7 +1700,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="437"/>
<location filename="../glabels/MainWindow.cpp" line="1362"/>
<location filename="../glabels/MainWindow.cpp" line="1368"/>
<source>Align Center</source>
<translation type="unfinished"></translation>
</message>
@@ -1320,7 +1711,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="442"/>
<location filename="../glabels/MainWindow.cpp" line="1372"/>
<location filename="../glabels/MainWindow.cpp" line="1378"/>
<source>Align Right</source>
<translation type="unfinished"></translation>
</message>
@@ -1331,7 +1722,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="447"/>
<location filename="../glabels/MainWindow.cpp" line="1382"/>
<location filename="../glabels/MainWindow.cpp" line="1388"/>
<source>Align Top</source>
<translation type="unfinished"></translation>
</message>
@@ -1342,7 +1733,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="452"/>
<location filename="../glabels/MainWindow.cpp" line="1392"/>
<location filename="../glabels/MainWindow.cpp" line="1398"/>
<source>Align Middle</source>
<translation type="unfinished"></translation>
</message>
@@ -1353,7 +1744,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="457"/>
<location filename="../glabels/MainWindow.cpp" line="1402"/>
<location filename="../glabels/MainWindow.cpp" line="1408"/>
<source>Align Bottom</source>
<translation type="unfinished"></translation>
</message>
@@ -1364,7 +1755,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="462"/>
<location filename="../glabels/MainWindow.cpp" line="1412"/>
<location filename="../glabels/MainWindow.cpp" line="1418"/>
<source>Center Horizontally</source>
<translation type="unfinished"></translation>
</message>
@@ -1375,7 +1766,7 @@
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="467"/>
<location filename="../glabels/MainWindow.cpp" line="1422"/>
<location filename="../glabels/MainWindow.cpp" line="1428"/>
<source>Center Vertically</source>
<translation type="unfinished"></translation>
</message>
@@ -1470,62 +1861,62 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="869"/>
<location filename="../glabels/MainWindow.cpp" line="875"/>
<source>(modified)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="932"/>
<location filename="../glabels/MainWindow.cpp" line="938"/>
<source>Save changes to project &quot;%1&quot; before closing?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="933"/>
<location filename="../glabels/MainWindow.cpp" line="939"/>
<source>Your changes will be lost if you don&apos;t save them.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="936"/>
<location filename="../glabels/MainWindow.cpp" line="942"/>
<source>Save project?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1103"/>
<location filename="../glabels/MainWindow.cpp" line="1109"/>
<source>Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1113"/>
<location filename="../glabels/MainWindow.cpp" line="1119"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1232"/>
<location filename="../glabels/MainWindow.cpp" line="1238"/>
<source>Create Text</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1242"/>
<location filename="../glabels/MainWindow.cpp" line="1248"/>
<source>Create Box</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1252"/>
<location filename="../glabels/MainWindow.cpp" line="1258"/>
<source>Create Line</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1262"/>
<location filename="../glabels/MainWindow.cpp" line="1268"/>
<source>Create Ellipse</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1272"/>
<location filename="../glabels/MainWindow.cpp" line="1278"/>
<source>Create Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/MainWindow.cpp" line="1282"/>
<location filename="../glabels/MainWindow.cpp" line="1288"/>
<source>Create Barcode</source>
<translation type="unfinished"></translation>
</message>
@@ -1727,6 +2118,202 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesigner</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="111"/>
<source>Product Template Designer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="455"/>
<source>Copy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerApplyPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1386"/>
<location filename="../glabels/TemplateDesigner.cpp" line="1413"/>
<source>Save Product Template</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1387"/>
<source>Click &quot;Save&quot; to save your custom product template!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1415"/>
<source>User product template (%1 %2) already exists.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1416"/>
<source>Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerCdPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="981"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="982"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerEllipsePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="909"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="910"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerIntroPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="553"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="554"/>
<source>Welcome to the gLabels Product Template Designer.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerNLayoutsPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1067"/>
<source>Number of Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1068"/>
<source>Please select the number of layouts required.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerNamePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="604"/>
<source>Name and Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="605"/>
<source>Please enter the following identifying information about the product.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="636"/>
<source>Brand and part number match an existing built-in product template!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerOneLayoutPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1098"/>
<source>Layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1099"/>
<source>Please enter parameters for your single layout.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerPageSizePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="654"/>
<source>Page Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="655"/>
<source>Please select the product page size.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="660"/>
<location filename="../glabels/TemplateDesigner.cpp" line="668"/>
<location filename="../glabels/TemplateDesigner.cpp" line="674"/>
<location filename="../glabels/TemplateDesigner.cpp" line="676"/>
<location filename="../glabels/TemplateDesigner.cpp" line="708"/>
<location filename="../glabels/TemplateDesigner.cpp" line="715"/>
<location filename="../glabels/TemplateDesigner.cpp" line="716"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerRectPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="758"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="759"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerRoundPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="844"/>
<source>Product Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="845"/>
<source>Please adjust the size parameters of a single product item.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerShapePage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="725"/>
<source>Product Shape</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="726"/>
<source>Please select the basic product shape.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>glabels::TemplateDesignerTwoLayoutPage</name>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1220"/>
<source>Layouts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/TemplateDesigner.cpp" line="1221"/>
<source>Please enter parameters for your two layouts.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>main</name>
<message>