Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -27,6 +27,7 @@ install:
|
|||||||
- set PATH=%PATH%;%QTDIR%/bin
|
- set PATH=%PATH%;%QTDIR%/bin
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
|
- git checkout master # re-attach to master to satisfy auto version tooling
|
||||||
- mkdir build
|
- mkdir build
|
||||||
- cd build
|
- cd build
|
||||||
- cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_PREFIX_PATH=%QTDIR% ..
|
- cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_PREFIX_PATH=%QTDIR% ..
|
||||||
|
|||||||
@@ -34,3 +34,6 @@ core
|
|||||||
*.sav*
|
*.sav*
|
||||||
.directory
|
.directory
|
||||||
TEST-DATA
|
TEST-DATA
|
||||||
|
SAV*
|
||||||
|
OLD*
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -10,9 +10,12 @@ before_install:
|
|||||||
install:
|
install:
|
||||||
- sudo apt-get -y install qt59base qt59svg qt59tools qt59translations zlib1g-dev xvfb
|
- sudo apt-get -y install qt59base qt59svg qt59tools qt59translations zlib1g-dev xvfb
|
||||||
- sudo apt-get -y install barcode libqrencode-dev
|
- sudo apt-get -y install barcode libqrencode-dev
|
||||||
|
- wget https://downloads.sourceforge.net/project/zint/zint/2.6.3/zint-2.6.3_final.tar.gz && tar xzf zint-2.6.3_final.tar.gz && cd zint-2.6.3.src && mkdir build && cd build && cmake .. && make && sudo make install && cd ../..
|
||||||
- source /opt/qt5*/bin/qt5*-env.sh
|
- source /opt/qt5*/bin/qt5*-env.sh
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
- git fetch --unshallow # restore repository depth to properly count commits in auto versioning
|
||||||
|
- git checkout master # re-attach to master to satisfy auto versioning
|
||||||
- mkdir build
|
- mkdir build
|
||||||
- cd build
|
- cd build
|
||||||
- cmake .. -DCMAKE_INSTALL_PREFIX=/usr
|
- cmake .. -DCMAKE_INSTALL_PREFIX=/usr
|
||||||
@@ -24,7 +27,7 @@ after_success:
|
|||||||
- wget -c "https://github.com/jimevins/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
|
- wget -c "https://github.com/jimevins/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
|
||||||
- chmod a+x linuxdeployqt*.AppImage
|
- chmod a+x linuxdeployqt*.AppImage
|
||||||
- unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
- unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
||||||
- export LD_LIBRARY_PATH=/opt/qt*/lib/:$LD_LIBRARY_PATH
|
- export LD_LIBRARY_PATH=/opt/qt*/lib/:/usr/local/lib:$LD_LIBRARY_PATH
|
||||||
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs
|
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs
|
||||||
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -appimage
|
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -appimage
|
||||||
- find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
|
- find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
@VERSION_STRING@
|
||||||
+27
-2
@@ -17,6 +17,26 @@ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/"
|
|||||||
set (WEBSITE "glabels.org")
|
set (WEBSITE "glabels.org")
|
||||||
set (BUG_WEBSITE "https://github.com/jimevins/glabels-qt/issues")
|
set (BUG_WEBSITE "https://github.com/jimevins/glabels-qt/issues")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND git symbolic-ref --short HEAD
|
||||||
|
RESULT_VARIABLE BRANCH_VALID
|
||||||
|
OUTPUT_VARIABLE BRANCH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
if (NOT ${BRANCH_VALID} STREQUAL "0")
|
||||||
|
set (BRANCH "Unkonwn")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-list --count ${BRANCH}
|
||||||
|
RESULT_VARIABLE COMMIT_COUNT_VALID
|
||||||
|
OUTPUT_VARIABLE COMMIT_COUNT
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
if (NOT ${COMMIT_COUNT_VALID} STREQUAL "0")
|
||||||
|
set (COMMIT_COUNT "?")
|
||||||
|
endif ()
|
||||||
|
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND git log -1 --format=%h
|
COMMAND git log -1 --format=%h
|
||||||
RESULT_VARIABLE COMMIT_HASH_VALID
|
RESULT_VARIABLE COMMIT_HASH_VALID
|
||||||
@@ -38,11 +58,16 @@ if (NOT ${COMMIT_DATE_VALID} STREQUAL "0")
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Uncomment for snapshots, comment for releases
|
# Uncomment for snapshots, comment for releases
|
||||||
set(VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}-snapshot (${COMMIT_HASH} ${COMMIT_DATE})")
|
set(VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}-${BRANCH}${COMMIT_COUNT}")
|
||||||
|
|
||||||
# Uncomment for releases, comment for snapshots
|
# Uncomment for releases, comment for snapshots
|
||||||
#set(VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
#set(VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
||||||
|
|
||||||
|
set(LONG_VERSION_STRING "${VERSION_STRING} (${COMMIT_HASH} ${COMMIT_DATE})")
|
||||||
|
|
||||||
|
# Auto-generate version file
|
||||||
|
configure_file (.version.in VERSION @ONLY)
|
||||||
|
|
||||||
|
|
||||||
#=======================================
|
#=======================================
|
||||||
# Packaging Information
|
# Packaging Information
|
||||||
@@ -147,7 +172,7 @@ add_subdirectory (data)
|
|||||||
#=======================================
|
#=======================================
|
||||||
message (STATUS "")
|
message (STATUS "")
|
||||||
message (STATUS "Project name ............ " ${CMAKE_PROJECT_NAME})
|
message (STATUS "Project name ............ " ${CMAKE_PROJECT_NAME})
|
||||||
message (STATUS "Project version ......... " ${VERSION_STRING})
|
message (STATUS "Project version ......... " ${LONG_VERSION_STRING})
|
||||||
message (STATUS "Installation prefix ..... " ${CMAKE_INSTALL_PREFIX})
|
message (STATUS "Installation prefix ..... " ${CMAKE_INSTALL_PREFIX})
|
||||||
message (STATUS "Source code location .... " ${glabels_SOURCE_DIR})
|
message (STATUS "Source code location .... " ${glabels_SOURCE_DIR})
|
||||||
message (STATUS "CMake version ........... " ${CMAKE_VERSION})
|
message (STATUS "CMake version ........... " ${CMAKE_VERSION})
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ namespace glabels
|
|||||||
glbarcode::Factory::registerType( "zint::kix", Zint::Kix::create );
|
glbarcode::Factory::registerType( "zint::kix", Zint::Kix::create );
|
||||||
glbarcode::Factory::registerType( "zint::ean", Zint::Ean::create );
|
glbarcode::Factory::registerType( "zint::ean", Zint::Ean::create );
|
||||||
glbarcode::Factory::registerType( "zint::gmtx", Zint::Gmtx::create );
|
glbarcode::Factory::registerType( "zint::gmtx", Zint::Gmtx::create );
|
||||||
glbarcode::Factory::registerType( "zint::gs1128", Zint::Gs1128::create );
|
glbarcode::Factory::registerType( "zint::gs1-128", Zint::Gs1128::create );
|
||||||
glbarcode::Factory::registerType( "zint::rss14", Zint::Rss14::create );
|
glbarcode::Factory::registerType( "zint::rss14", Zint::Rss14::create );
|
||||||
glbarcode::Factory::registerType( "zint::rssltd", Zint::Rssltd::create );
|
glbarcode::Factory::registerType( "zint::rssltd", Zint::Rssltd::create );
|
||||||
glbarcode::Factory::registerType( "zint::rssexp", Zint::Rssexp::create );
|
glbarcode::Factory::registerType( "zint::rssexp", Zint::Rssexp::create );
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ namespace glabels
|
|||||||
|
|
||||||
|
|
||||||
QRcode_free( qrcode );
|
QRcode_free( qrcode );
|
||||||
QRcode_clearCache();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Constructor
|
/// Constructor
|
||||||
///
|
///
|
||||||
Merge::Merge( const Merge* merge ) : mSource(merge->mSource)
|
Merge::Merge( const Merge* merge ) : mId(merge->mId), mSource(merge->mSource)
|
||||||
{
|
{
|
||||||
foreach ( Record* record, merge->mRecordList )
|
foreach ( Record* record, merge->mRecordList )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace glabels
|
|||||||
Text::Text( const Text* merge )
|
Text::Text( const Text* merge )
|
||||||
: Merge( merge ),
|
: Merge( merge ),
|
||||||
mDelimeter(merge->mDelimeter), mLine1HasKeys(merge->mLine1HasKeys),
|
mDelimeter(merge->mDelimeter), mLine1HasKeys(merge->mLine1HasKeys),
|
||||||
mNFieldsMax(merge->mNFieldsMax)
|
mKeys(merge->mKeys), mNFieldsMax(merge->mNFieldsMax)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ set (LIBZINT_DEFINITIONS "")
|
|||||||
|
|
||||||
find_path (LIBZINT_INCLUDE_DIR NAMES zint.h)
|
find_path (LIBZINT_INCLUDE_DIR NAMES zint.h)
|
||||||
|
|
||||||
find_library (LIBZINT_LIBRARIES NAMES zint )
|
find_library (LIBZINT_LIBRARY NAMES zint )
|
||||||
|
|
||||||
if (LIBZINT_LIBRARY AND LIBZINT_INCLUDE_DIR)
|
if (LIBZINT_LIBRARY AND LIBZINT_INCLUDE_DIR)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
gLabels Linux Build Instructions
|
gLabels Linux Build Instructions
|
||||||
================================
|
================================
|
||||||
|
|
||||||
## Prerequisites
|
## General
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
- g++
|
- g++
|
||||||
- CMake 2.8.12+
|
- CMake 2.8.12+
|
||||||
@@ -12,7 +13,7 @@ gLabels Linux Build Instructions
|
|||||||
> may also need to be installed. Development packages are usually named something like
|
> may also need to be installed. Development packages are usually named something like
|
||||||
> libraryName-dev or libraryName-devel.
|
> libraryName-dev or libraryName-devel.
|
||||||
|
|
||||||
## Compile and Install
|
### Compile and Install
|
||||||
|
|
||||||
gLabels uses the CMake meta build system. Use the following commands to build and install gLabels:
|
gLabels uses the CMake meta build system. Use the following commands to build and install gLabels:
|
||||||
|
|
||||||
@@ -24,3 +25,45 @@ $ cmake ..
|
|||||||
$ make
|
$ make
|
||||||
$ sudo make install
|
$ sudo make install
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
## Example: Ubuntu 19.04
|
||||||
|
|
||||||
|
### Installing Prerequisites
|
||||||
|
```
|
||||||
|
sudo apt install cmake
|
||||||
|
sudo apt install qtbase5-dev libqt5svg5-dev qttools5-dev zlib1g-dev
|
||||||
|
```
|
||||||
|
_QREncode (Optional)_
|
||||||
|
```
|
||||||
|
sudo apt install pkgconf libqrencode-dev
|
||||||
|
```
|
||||||
|
_Zint (Optional)_
|
||||||
|
|
||||||
|
Install zint from source:
|
||||||
|
```
|
||||||
|
wget https://downloads.sourceforge.net/project/zint/zint/2.6.3/zint-2.6.3_final.tar.gz
|
||||||
|
tar xzf zint-2.6.3_final.tar.gz
|
||||||
|
cd zint-2.6.3.src/
|
||||||
|
mkdir build && cd build && cmake .. && make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
_GNU Barcode (Optional)_
|
||||||
|
|
||||||
|
As of version 0.99, GNU Barcode no longer installs its library. So install 0.98 from source:
|
||||||
|
```
|
||||||
|
wget https://ftp.gnu.org/gnu/barcode/barcode-0.98.tar.gz
|
||||||
|
tar xzf barcode-0.98.tar.gz
|
||||||
|
cd barcode-0.98/
|
||||||
|
./configure && make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
### Compile and Install gLabels
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cd glabels-qt
|
||||||
|
$ mkdir build
|
||||||
|
$ cd build
|
||||||
|
$ cmake ..
|
||||||
|
$ make
|
||||||
|
$ sudo make install
|
||||||
|
```
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
gLabels MacOS Build Instructions
|
||||||
|
================================
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
```
|
||||||
|
brew install cmake
|
||||||
|
brew install qt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Compile and Install
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
cd <i>glabels_source_directory</i>
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -D CMAKE_PREFIX_PATH=/usr/local/opt/qt ..
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
</pre>
|
||||||
@@ -17,6 +17,28 @@ modifiers = modifier [ ":" modifiers ] ;
|
|||||||
modifier = format-modifier | default-value-modifier | new-line-modifier;
|
modifier = format-modifier | default-value-modifier | new-line-modifier;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Field Names
|
||||||
|
-----------
|
||||||
|
Field names can refer to either [Document Merge Fields](#document-merge-fields) or [User Variables](#user-variables). If a document merge field and a user variable share the same name, the document merge field takes precidence. Its syntax is simply:
|
||||||
|
|
||||||
|
```ebnf
|
||||||
|
field-name = merge-field-name | user-variable-name ;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Document Merge Fields
|
||||||
|
Document merge fields are the primary source of substitution fields. A document merge field represents a field from an external data source, such as a CSV file. The valid syntax for a document merge field name is determined by the merge source, with the following exception. Merge field names cannot contain either a colon (":") or closing curly bracket ("}").
|
||||||
|
|
||||||
|
### User Variables
|
||||||
|
Substitution fields can also refer to user variables. The syntax for valid user variable names is
|
||||||
|
|
||||||
|
```ebnf
|
||||||
|
letter = "a" | "b" | ... | "z" | "A" | ... | "Z";
|
||||||
|
digit = "0" | "1" | "2" | ... | "9";
|
||||||
|
user-variable-name = ( letter | "_" ) , { letter | digit | "_" } ;
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Modifiers
|
Modifiers
|
||||||
---------
|
---------
|
||||||
### Format-Modifier (`%`)
|
### Format-Modifier (`%`)
|
||||||
@@ -89,20 +111,3 @@ ${CITY} ${STATE} ${ZIP}
|
|||||||
`${ADDR2}` would be printed on its own line, only if it is set and non-empty.
|
`${ADDR2}` would be printed on its own line, only if it is set and non-empty.
|
||||||
|
|
||||||
|
|
||||||
Document Merge Fields
|
|
||||||
---------------------
|
|
||||||
Document merge fields are the primary source of substitution fields. A document merge field represents a field from an external data source, such as a CSV file.
|
|
||||||
|
|
||||||
User Defined Variables
|
|
||||||
----------------------
|
|
||||||
Alternatively, merge fields can refer to user defined variables.
|
|
||||||
|
|
||||||
Built-In Variables
|
|
||||||
------------------
|
|
||||||
Potentially, merge fields may also refer to built-in variables. Candidates include:
|
|
||||||
- LABEL_NUMBER
|
|
||||||
- PAGE_NUMBER
|
|
||||||
- DATE
|
|
||||||
- TIME
|
|
||||||
- FILE_NAME
|
|
||||||
|
|
||||||
|
|||||||
@@ -29,3 +29,15 @@ Add support for "Continuous Roll" labels
|
|||||||
|
|
||||||
Write help documentation
|
Write help documentation
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|
||||||
|
To Do List for gLabels 4.1 -- 2019-03-17
|
||||||
|
========================================
|
||||||
|
|
||||||
|
Create a "built-in" merge source
|
||||||
|
--------------------------------
|
||||||
|
As an alternative to external merge sources, let the user edit the merge source
|
||||||
|
in situ. The user can add fields. The user can add records using those fields.
|
||||||
|
The user created database will become part of the glabels project file.
|
||||||
|
For simple databases, such as a small address list, this would be much easier
|
||||||
|
to deal with than creating it externally.
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ int main( int argc, char **argv )
|
|||||||
QCoreApplication::setOrganizationName( "glabels.org" );
|
QCoreApplication::setOrganizationName( "glabels.org" );
|
||||||
QCoreApplication::setOrganizationDomain( "glabels.org" );
|
QCoreApplication::setOrganizationDomain( "glabels.org" );
|
||||||
QCoreApplication::setApplicationName( "glabels-batch-qt" );
|
QCoreApplication::setApplicationName( "glabels-batch-qt" );
|
||||||
QCoreApplication::setApplicationVersion( glabels::model::Version::STRING );
|
QCoreApplication::setApplicationVersion( glabels::model::Version::LONG_STRING );
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup translators
|
// Setup translators
|
||||||
@@ -175,7 +175,7 @@ int main( int argc, char **argv )
|
|||||||
}
|
}
|
||||||
|
|
||||||
glabels::model::PageRenderer renderer( model );
|
glabels::model::PageRenderer renderer( model );
|
||||||
renderer.setNCopies( 1 );
|
renderer.setNCopies( parser.value( "copies" ).toInt() );
|
||||||
renderer.setStartLabel( parser.value( "first" ).toInt() - 1 );
|
renderer.setStartLabel( parser.value( "first" ).toInt() - 1 );
|
||||||
renderer.setPrintOutlines( parser.isSet( "outlines" ) );
|
renderer.setPrintOutlines( parser.isSet( "outlines" ) );
|
||||||
renderer.setPrintCropMarks( parser.isSet( "crop-marks" ) );
|
renderer.setPrintCropMarks( parser.isSet( "crop-marks" ) );
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
setupUi( this );
|
setupUi( this );
|
||||||
|
|
||||||
QString version = tr("Version") + " " + model::Version::STRING;
|
QString version = tr("Version") + " " + model::Version::LONG_STRING;
|
||||||
|
|
||||||
QString description = tr("A program to create labels and business cards.");
|
QString description = tr("A program to create labels and business cards.");
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ set (glabels_sources
|
|||||||
ColorHistory.cpp
|
ColorHistory.cpp
|
||||||
ColorPaletteDialog.cpp
|
ColorPaletteDialog.cpp
|
||||||
ColorPaletteItem.cpp
|
ColorPaletteItem.cpp
|
||||||
ColorPaletteButtonItem.cpp
|
|
||||||
ColorSwatch.cpp
|
ColorSwatch.cpp
|
||||||
Cursors.cpp
|
Cursors.cpp
|
||||||
|
EditVariableDialog.cpp
|
||||||
FieldButton.cpp
|
FieldButton.cpp
|
||||||
File.cpp
|
File.cpp
|
||||||
Help.cpp
|
Help.cpp
|
||||||
@@ -40,6 +40,7 @@ set (glabels_sources
|
|||||||
TemplatePicker.cpp
|
TemplatePicker.cpp
|
||||||
TemplatePickerItem.cpp
|
TemplatePickerItem.cpp
|
||||||
UndoRedoModel.cpp
|
UndoRedoModel.cpp
|
||||||
|
VariablesView.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set (glabels_qobject_headers
|
set (glabels_qobject_headers
|
||||||
@@ -51,7 +52,7 @@ set (glabels_qobject_headers
|
|||||||
ColorHistory.h
|
ColorHistory.h
|
||||||
ColorPaletteDialog.h
|
ColorPaletteDialog.h
|
||||||
ColorPaletteItem.h
|
ColorPaletteItem.h
|
||||||
ColorPaletteButtonItem.h
|
EditVariableDialog.h
|
||||||
FieldButton.h
|
FieldButton.h
|
||||||
File.h
|
File.h
|
||||||
LabelEditor.h
|
LabelEditor.h
|
||||||
@@ -69,10 +70,12 @@ set (glabels_qobject_headers
|
|||||||
TemplateDesigner.h
|
TemplateDesigner.h
|
||||||
TemplatePicker.h
|
TemplatePicker.h
|
||||||
UndoRedoModel.h
|
UndoRedoModel.h
|
||||||
|
VariablesView.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set (glabels_forms
|
set (glabels_forms
|
||||||
ui/AboutDialog.ui
|
ui/AboutDialog.ui
|
||||||
|
ui/EditVariableDialog.ui
|
||||||
ui/MergeView.ui
|
ui/MergeView.ui
|
||||||
ui/ObjectEditor.ui
|
ui/ObjectEditor.ui
|
||||||
ui/PreferencesDialog.ui
|
ui/PreferencesDialog.ui
|
||||||
@@ -95,6 +98,7 @@ set (glabels_forms
|
|||||||
ui/TemplateDesignerOneLayoutPage.ui
|
ui/TemplateDesignerOneLayoutPage.ui
|
||||||
ui/TemplateDesignerTwoLayoutPage.ui
|
ui/TemplateDesignerTwoLayoutPage.ui
|
||||||
ui/TemplateDesignerApplyPage.ui
|
ui/TemplateDesignerApplyPage.ui
|
||||||
|
ui/VariablesView.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
set (glabels_resource_files
|
set (glabels_resource_files
|
||||||
|
|||||||
+10
-11
@@ -48,8 +48,9 @@ namespace glabels
|
|||||||
|
|
||||||
|
|
||||||
void ColorButton::init( const QString& defaultLabel,
|
void ColorButton::init( const QString& defaultLabel,
|
||||||
const QColor& defaultColor,
|
const QColor& defaultColor,
|
||||||
const QColor& color )
|
const QColor& color,
|
||||||
|
bool showUseFieldButton )
|
||||||
{
|
{
|
||||||
mDefaultColor = defaultColor;
|
mDefaultColor = defaultColor;
|
||||||
mColorNode = model::ColorNode( color );
|
mColorNode = model::ColorNode( color );
|
||||||
@@ -61,7 +62,10 @@ namespace glabels
|
|||||||
setText( "" );
|
setText( "" );
|
||||||
setCheckable( true );
|
setCheckable( true );
|
||||||
|
|
||||||
mDialog = new ColorPaletteDialog( defaultLabel, defaultColor, color );
|
mDialog = new ColorPaletteDialog( defaultLabel,
|
||||||
|
defaultColor,
|
||||||
|
color,
|
||||||
|
showUseFieldButton );
|
||||||
|
|
||||||
connect( this, SIGNAL(toggled(bool)), this, SLOT(onButtonToggled(bool)) );
|
connect( this, SIGNAL(toggled(bool)), this, SLOT(onButtonToggled(bool)) );
|
||||||
connect( mDialog, SIGNAL(colorChanged(model::ColorNode,bool)),
|
connect( mDialog, SIGNAL(colorChanged(model::ColorNode,bool)),
|
||||||
@@ -124,15 +128,10 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorButton::setKeys( const QList<QString> keyList )
|
void ColorButton::setKeys( const merge::Merge* merge,
|
||||||
|
const model::Variables* variables )
|
||||||
{
|
{
|
||||||
mDialog->setKeys( keyList );
|
mDialog->setKeys( merge, variables );
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ColorButton::clearKeys()
|
|
||||||
{
|
|
||||||
mDialog->clearKeys();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -58,13 +58,18 @@ namespace glabels
|
|||||||
// Public Methods
|
// Public Methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
void init( const QString& defaultLabel, const QColor& defaultColor, const QColor& color );
|
void init( const QString& defaultLabel,
|
||||||
|
const QColor& defaultColor,
|
||||||
|
const QColor& color,
|
||||||
|
bool showUseFieldButton = true );
|
||||||
|
|
||||||
void setColorNode( model::ColorNode colorNode );
|
void setColorNode( model::ColorNode colorNode );
|
||||||
void setColor( QColor color );
|
void setColor( QColor color );
|
||||||
void setToDefault();
|
void setToDefault();
|
||||||
model::ColorNode colorNode();
|
model::ColorNode colorNode();
|
||||||
void setKeys( const QList<QString> keyList );
|
|
||||||
void clearKeys();
|
void setKeys( const merge::Merge* merge,
|
||||||
|
const model::Variables* variables );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
|||||||
+71
-41
@@ -46,23 +46,25 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorHistory::addColor( const QColor &color )
|
void ColorHistory::addColor( const QColor &color, const QString& name )
|
||||||
{
|
{
|
||||||
QList<QColor> colorList = readColorList();
|
QString nameColor = name + ":" + color.name();
|
||||||
|
|
||||||
|
QStringList nameColorList = readNameColorList();
|
||||||
|
|
||||||
// Remove any occurrences of this color already in list
|
// Remove any occurrences of this color already in list
|
||||||
colorList.removeAll( color );
|
nameColorList.removeAll( nameColor );
|
||||||
|
|
||||||
// Now add to list
|
// Now add to list
|
||||||
colorList.append( color );
|
nameColorList.append( nameColor );
|
||||||
|
|
||||||
// Remove oldest colors, if size exceeds current max
|
// Remove oldest colors, if size exceeds current max
|
||||||
while ( colorList.size() > MAX_COLORS )
|
while ( nameColorList.size() > MAX_COLORS )
|
||||||
{
|
{
|
||||||
colorList.removeFirst();
|
nameColorList.removeFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
writeColorList( colorList );
|
writeNameColorList( nameColorList );
|
||||||
|
|
||||||
emit changed();
|
emit changed();
|
||||||
}
|
}
|
||||||
@@ -70,55 +72,83 @@ namespace glabels
|
|||||||
|
|
||||||
QList<QColor> ColorHistory::getColors()
|
QList<QColor> ColorHistory::getColors()
|
||||||
{
|
{
|
||||||
return readColorList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QColor ColorHistory::getColor( int id )
|
|
||||||
{
|
|
||||||
QList<QColor> colors = readColorList();
|
|
||||||
return colors[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QList<QColor> ColorHistory::readColorList()
|
|
||||||
{
|
|
||||||
QStringList defaultList;
|
|
||||||
QSettings settings;
|
|
||||||
|
|
||||||
settings.beginGroup( "ColorHistory" );
|
|
||||||
QStringList colorNameList = settings.value( "colors", defaultList ).toStringList();
|
|
||||||
settings.endGroup();
|
|
||||||
|
|
||||||
QList<QColor> colorList;
|
QList<QColor> colorList;
|
||||||
foreach ( QString colorName, colorNameList )
|
|
||||||
|
for ( QString& nameColor : readNameColorList() )
|
||||||
{
|
{
|
||||||
colorList << QColor( colorName );
|
QStringList v = nameColor.split( ':' );
|
||||||
}
|
if ( v.size() == 2 )
|
||||||
|
{
|
||||||
// Remove oldest colors, if size exceeds current max
|
colorList << QColor( v[1] );
|
||||||
while ( colorList.size() > MAX_COLORS )
|
}
|
||||||
{
|
else if ( v.size() == 1 )
|
||||||
colorList.removeFirst();
|
{
|
||||||
|
// Old-style, no name
|
||||||
|
colorList << QColor( v[0] );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Should not happen
|
||||||
|
qWarning() << "Invalid color history.";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return colorList;
|
return colorList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorHistory::writeColorList( const QList<QColor>& colorList )
|
QStringList ColorHistory::getNames()
|
||||||
{
|
{
|
||||||
// Build name list
|
QStringList nameList;
|
||||||
QStringList colorNameList;
|
|
||||||
foreach ( QColor color, colorList )
|
for ( QString& nameColor : readNameColorList() )
|
||||||
{
|
{
|
||||||
colorNameList << color.name();
|
QStringList v = nameColor.split( ':' );
|
||||||
|
if ( v.size() == 2 )
|
||||||
|
{
|
||||||
|
nameList << v[0];
|
||||||
|
}
|
||||||
|
else if ( v.size() == 1 )
|
||||||
|
{
|
||||||
|
// Old-style, no name
|
||||||
|
nameList << QString(tr("color %1")).arg( v[0] );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Should not happen
|
||||||
|
qWarning() << "Invalid color history.";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nameList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QStringList ColorHistory::readNameColorList()
|
||||||
|
{
|
||||||
|
QStringList defaultList;
|
||||||
|
QSettings settings;
|
||||||
|
|
||||||
|
settings.beginGroup( "ColorHistory" );
|
||||||
|
QStringList nameColorList = settings.value( "colors", defaultList ).toStringList();
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
// Remove oldest colors, if size exceeds current max
|
||||||
|
while ( nameColorList.size() > MAX_COLORS )
|
||||||
|
{
|
||||||
|
nameColorList.removeFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
return nameColorList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ColorHistory::writeNameColorList( const QStringList& nameColorList )
|
||||||
|
{
|
||||||
// Save
|
// Save
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
settings.beginGroup( "ColorHistory" );
|
settings.beginGroup( "ColorHistory" );
|
||||||
settings.setValue( "colors", colorNameList );
|
settings.setValue( "colors", nameColorList );
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,17 +60,17 @@ namespace glabels
|
|||||||
// Public Methods
|
// Public Methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
void addColor( const QColor &color );
|
void addColor( const QColor& color, const QString& name );
|
||||||
QList<QColor> getColors();
|
QList<QColor> getColors();
|
||||||
QColor getColor( int id );
|
QStringList getNames();
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Private Methods
|
// Private Methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
private:
|
private:
|
||||||
QList<QColor> readColorList();
|
QStringList readNameColorList();
|
||||||
void writeColorList( const QList<QColor>& colorList );
|
void writeNameColorList( const QStringList& nameColorList );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
|||||||
@@ -1,124 +0,0 @@
|
|||||||
/* ColorPaletteButtonItem.cpp
|
|
||||||
*
|
|
||||||
* Copyright (C) 2014 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ColorPaletteButtonItem.h"
|
|
||||||
|
|
||||||
#include <QMouseEvent>
|
|
||||||
#include <QPainter>
|
|
||||||
|
|
||||||
|
|
||||||
namespace glabels
|
|
||||||
{
|
|
||||||
|
|
||||||
//
|
|
||||||
// Private
|
|
||||||
//
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
const int border = 4;
|
|
||||||
const int hBox = 25;
|
|
||||||
const int outlineWidthPixels = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Constructor From Data
|
|
||||||
///
|
|
||||||
ColorPaletteButtonItem::ColorPaletteButtonItem( const QString& text, QWidget* parent )
|
|
||||||
: QWidget(parent), mText(text), mHover(false)
|
|
||||||
{
|
|
||||||
setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ) );
|
|
||||||
setMinimumSize( hBox+2*border+1, hBox+2*border+1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Paint Event
|
|
||||||
///
|
|
||||||
void ColorPaletteButtonItem::paintEvent( QPaintEvent* event )
|
|
||||||
{
|
|
||||||
QPainter painter(this);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw background
|
|
||||||
//
|
|
||||||
if ( isEnabled() && mHover )
|
|
||||||
{
|
|
||||||
QLinearGradient gradient( 0, 0, 0, height() );
|
|
||||||
gradient.setColorAt( 0, palette().color( QPalette::Highlight ).lighter() );
|
|
||||||
gradient.setColorAt( 1, palette().color( QPalette::Highlight ) );
|
|
||||||
painter.setBrush( QBrush( gradient ) );
|
|
||||||
|
|
||||||
QPen pen( palette().color( QPalette::Text ) );
|
|
||||||
pen.setWidth( outlineWidthPixels );
|
|
||||||
painter.setPen( pen );
|
|
||||||
|
|
||||||
painter.drawRect( 0, 0, width()-1, height()-1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw text
|
|
||||||
//
|
|
||||||
painter.setBrush( QBrush( Qt::NoBrush ) );
|
|
||||||
|
|
||||||
if ( isEnabled() && mHover )
|
|
||||||
{
|
|
||||||
painter.setPen( QPen( palette().color( QPalette::HighlightedText ) ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
painter.setPen( QPen( palette().color( QPalette::Text ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
QRect textRect( border, border, width()-2*border, hBox );
|
|
||||||
|
|
||||||
painter.drawText( textRect, Qt::AlignLeft|Qt::AlignVCenter, mText );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Enter Event
|
|
||||||
///
|
|
||||||
void ColorPaletteButtonItem::enterEvent( QEvent* event )
|
|
||||||
{
|
|
||||||
mHover = true;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Leave Event
|
|
||||||
///
|
|
||||||
void ColorPaletteButtonItem::leaveEvent( QEvent* event )
|
|
||||||
{
|
|
||||||
mHover = false;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Mouse Press Event
|
|
||||||
///
|
|
||||||
void ColorPaletteButtonItem::mousePressEvent( QMouseEvent* event )
|
|
||||||
{
|
|
||||||
emit activated();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace glabels
|
|
||||||
+98
-108
@@ -18,14 +18,16 @@
|
|||||||
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "ColorPaletteDialog.h"
|
#include "ColorPaletteDialog.h"
|
||||||
|
|
||||||
#include <QColorDialog>
|
#include <QColorDialog>
|
||||||
#include <QVBoxLayout>
|
|
||||||
#include <QHBoxLayout>
|
|
||||||
#include <QFrame>
|
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QPushButton>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
|
#include <QVBoxLayout>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
|
|
||||||
|
|
||||||
@@ -83,6 +85,7 @@ namespace glabels
|
|||||||
ColorPaletteDialog::ColorPaletteDialog( const QString& defaultLabel,
|
ColorPaletteDialog::ColorPaletteDialog( const QString& defaultLabel,
|
||||||
const QColor& defaultColor,
|
const QColor& defaultColor,
|
||||||
const QColor& color,
|
const QColor& color,
|
||||||
|
bool showUseFieldButton,
|
||||||
QWidget* parent )
|
QWidget* parent )
|
||||||
: QDialog( parent )
|
: QDialog( parent )
|
||||||
{
|
{
|
||||||
@@ -99,14 +102,12 @@ namespace glabels
|
|||||||
vLayout->setContentsMargins( 0, 0, 0, 0 );
|
vLayout->setContentsMargins( 0, 0, 0, 0 );
|
||||||
vLayout->setSpacing( 0 );
|
vLayout->setSpacing( 0 );
|
||||||
|
|
||||||
auto* defaultButton = new ColorPaletteButtonItem( defaultLabel );
|
//
|
||||||
connect( defaultButton, SIGNAL(activated()), this, SLOT(onDefaultItemActivated()) );
|
// Construct Standard Colors Grid
|
||||||
vLayout->addWidget( defaultButton );
|
//
|
||||||
|
auto* standardColorsGroup = new QGroupBox( tr("Standard Colors") );
|
||||||
QFrame* hline1 = new QFrame;
|
standardColorsGroup->setAlignment( Qt::AlignHCenter );
|
||||||
hline1->setFrameStyle( QFrame::HLine | QFrame::Plain );
|
vLayout->addWidget( standardColorsGroup );
|
||||||
hline1->setLineWidth( 1 );
|
|
||||||
vLayout->addWidget( hline1 );
|
|
||||||
|
|
||||||
auto* mainPaletteLayout = new QGridLayout();
|
auto* mainPaletteLayout = new QGridLayout();
|
||||||
mainPaletteLayout->setSpacing( 0 );
|
mainPaletteLayout->setSpacing( 0 );
|
||||||
@@ -119,17 +120,20 @@ namespace glabels
|
|||||||
ColorPaletteItem* item = new ColorPaletteItem( i,
|
ColorPaletteItem* item = new ColorPaletteItem( i,
|
||||||
QColor( mColorTable[i].colorSpec ),
|
QColor( mColorTable[i].colorSpec ),
|
||||||
tr(mColorTable[i].trname) );
|
tr(mColorTable[i].trname) );
|
||||||
connect( item, SIGNAL(activated(int)), this, SLOT(onPaletteItemActivated(int)) );
|
connect( item, SIGNAL(activated(int)),
|
||||||
|
this, SLOT(onPaletteItemActivated(int)) );
|
||||||
|
|
||||||
mainPaletteLayout->addWidget( item, iRow, iCol );
|
mainPaletteLayout->addWidget( item, iRow, iCol );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vLayout->addLayout( mainPaletteLayout );
|
standardColorsGroup->setLayout( mainPaletteLayout );
|
||||||
|
|
||||||
QFrame* hline2 = new QFrame;
|
//
|
||||||
hline2->setFrameStyle( QFrame::HLine | QFrame::Plain );
|
// Construct Recent Colors Grid
|
||||||
hline2->setLineWidth( 1 );
|
//
|
||||||
vLayout->addWidget( hline2 );
|
auto* recentColorsGroup = new QGroupBox( tr("Recent Colors") );
|
||||||
|
recentColorsGroup->setAlignment( Qt::AlignHCenter );
|
||||||
|
vLayout->addWidget( recentColorsGroup );
|
||||||
|
|
||||||
auto* customPaletteLayout = new QHBoxLayout();
|
auto* customPaletteLayout = new QHBoxLayout();
|
||||||
customPaletteLayout->setSpacing( 0 );
|
customPaletteLayout->setSpacing( 0 );
|
||||||
@@ -137,40 +141,49 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
mHistoryItem[iCol] = new ColorPaletteItem( iCol, QColor(0,0,0,0), "" );
|
mHistoryItem[iCol] = new ColorPaletteItem( iCol, QColor(0,0,0,0), "" );
|
||||||
mHistoryItem[iCol]->setEnabled( false );
|
mHistoryItem[iCol]->setEnabled( false );
|
||||||
connect( mHistoryItem[iCol], SIGNAL(activated(int)), this, SLOT(onHistoryItemActivated(int)) );
|
connect( mHistoryItem[iCol], SIGNAL(activated(int)),
|
||||||
|
this, SLOT(onHistoryItemActivated(int)) );
|
||||||
|
|
||||||
customPaletteLayout->addWidget( mHistoryItem[iCol] );
|
customPaletteLayout->addWidget( mHistoryItem[iCol] );
|
||||||
}
|
}
|
||||||
vLayout->addLayout( customPaletteLayout );
|
recentColorsGroup->setLayout( customPaletteLayout );
|
||||||
|
|
||||||
|
|
||||||
QFrame* hline3 = new QFrame;
|
//
|
||||||
hline3->setFrameStyle( QFrame::HLine | QFrame::Plain );
|
// Construct Default (e.g. "No Fill") Button
|
||||||
hline3->setLineWidth( 1 );
|
//
|
||||||
vLayout->addWidget( hline3 );
|
auto* defaultColorButton = new QPushButton( defaultLabel );
|
||||||
|
defaultColorButton->setAutoDefault( false );
|
||||||
ColorPaletteButtonItem* customColorButton = new ColorPaletteButtonItem( tr("Custom color...") );
|
defaultColorButton->setDefault( false );
|
||||||
connect( customColorButton, SIGNAL(activated()), this, SLOT(onCustomColorItemActivated()) );
|
connect( defaultColorButton, SIGNAL(clicked()), this, SLOT(onDefaultButtonClicked()) );
|
||||||
|
vLayout->addWidget( defaultColorButton );
|
||||||
|
|
||||||
|
//
|
||||||
|
// Construct Custom Color Button
|
||||||
|
//
|
||||||
|
auto* customColorButton = new QPushButton( tr("Custom color...") );
|
||||||
|
customColorButton->setAutoDefault( false );
|
||||||
|
customColorButton->setDefault( false );
|
||||||
|
connect( customColorButton, SIGNAL(clicked()), this, SLOT(onCustomColorButtonClicked()) );
|
||||||
vLayout->addWidget( customColorButton );
|
vLayout->addWidget( customColorButton );
|
||||||
|
|
||||||
QFrame* hline4 = new QFrame;
|
//
|
||||||
hline4->setFrameStyle( QFrame::HLine | QFrame::Plain );
|
// Construct "Use field" Button
|
||||||
hline4->setLineWidth( 1 );
|
//
|
||||||
vLayout->addWidget( hline4 );
|
if ( showUseFieldButton )
|
||||||
|
{
|
||||||
|
mFieldButton = new FieldButton();
|
||||||
|
mFieldButton->setText( tr("Use substitution field") );
|
||||||
|
mFieldButton->setAutoDefault( false );
|
||||||
|
mFieldButton->setDefault( false );
|
||||||
|
connect( mFieldButton, SIGNAL(keySelected(QString)), this, SLOT(onKeySelected(QString)) );
|
||||||
|
vLayout->addWidget( mFieldButton );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mFieldButton = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
mMergeFieldCombo = new QComboBox();
|
|
||||||
mMergeFieldCombo->addItem( tr("Merge key...") );
|
|
||||||
mMergeFieldCombo->setMinimumSize( 34, 34 );
|
|
||||||
mMergeFieldCombo->setFrame( false );
|
|
||||||
mMergeFieldCombo->setEnabled( false );
|
|
||||||
connect( mMergeFieldCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboIndexChanged(int)) );
|
|
||||||
vLayout->addWidget( mMergeFieldCombo );
|
|
||||||
|
|
||||||
// Item 0 is the ComboBox title, not an item intended for selection. So disable it.
|
|
||||||
const auto* model = qobject_cast<const QStandardItemModel*>(mMergeFieldCombo->model());
|
|
||||||
QStandardItem* item = model->item(0);
|
|
||||||
item->setFlags( item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled) );
|
|
||||||
|
|
||||||
setLayout( vLayout );
|
setLayout( vLayout );
|
||||||
|
|
||||||
loadCustomColorHistory();
|
loadCustomColorHistory();
|
||||||
@@ -183,41 +196,47 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::setKeys( const QStringList& keyList )
|
void ColorPaletteDialog::setKeys( const merge::Merge* merge,
|
||||||
|
const model::Variables* variables )
|
||||||
{
|
{
|
||||||
mKeys = keyList;
|
if (mFieldButton)
|
||||||
|
|
||||||
// Clear old keys, (all entries, except item 0)
|
|
||||||
for ( int index = mMergeFieldCombo->count()-1; index > 0; index-- )
|
|
||||||
{
|
{
|
||||||
mMergeFieldCombo->removeItem( index );
|
mFieldButton->setKeys( merge, variables );
|
||||||
}
|
|
||||||
|
|
||||||
// Add new keys
|
|
||||||
if ( keyList.size() > 0 )
|
|
||||||
{
|
|
||||||
mMergeFieldCombo->addItems( keyList );
|
|
||||||
mMergeFieldCombo->setEnabled( true );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mMergeFieldCombo->setEnabled( false );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::clearKeys()
|
void ColorPaletteDialog::onPaletteItemActivated( int id )
|
||||||
{
|
{
|
||||||
|
model::ColorNode newColorNode;
|
||||||
for ( int index = mMergeFieldCombo->count()-1; index > 0; index-- )
|
newColorNode.setField( false );
|
||||||
|
newColorNode.setColor( QColor( mColorTable[id].colorSpec ) );
|
||||||
|
newColorNode.setKey( "" );
|
||||||
|
|
||||||
|
if ( newColorNode != mColorNode )
|
||||||
{
|
{
|
||||||
mMergeFieldCombo->removeItem( index );
|
mColorNode = newColorNode;
|
||||||
|
|
||||||
|
mColorHistory->addColor( mColorNode.color(), mColorTable[id].trname );
|
||||||
|
|
||||||
|
emit colorChanged( mColorNode, false );
|
||||||
|
accept();
|
||||||
}
|
}
|
||||||
mMergeFieldCombo->setEnabled( false );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::onDefaultItemActivated()
|
void ColorPaletteDialog::onHistoryItemActivated( int id )
|
||||||
|
{
|
||||||
|
mColorNode.setField( false );
|
||||||
|
mColorNode.setColor( mColorHistory->getColors()[id] );
|
||||||
|
mColorNode.setKey( "" );
|
||||||
|
|
||||||
|
emit colorChanged( mColorNode, false );
|
||||||
|
accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ColorPaletteDialog::onDefaultButtonClicked()
|
||||||
{
|
{
|
||||||
mColorNode.setField( false );
|
mColorNode.setField( false );
|
||||||
mColorNode.setColor( mDefaultColor );
|
mColorNode.setColor( mDefaultColor );
|
||||||
@@ -228,29 +247,7 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::onPaletteItemActivated( int id )
|
void ColorPaletteDialog::onCustomColorButtonClicked()
|
||||||
{
|
|
||||||
mColorNode.setField( false );
|
|
||||||
mColorNode.setColor( QColor( mColorTable[id].colorSpec ) );
|
|
||||||
mColorNode.setKey( "" );
|
|
||||||
|
|
||||||
emit colorChanged( mColorNode, false );
|
|
||||||
accept();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::onHistoryItemActivated( int id )
|
|
||||||
{
|
|
||||||
mColorNode.setField( false );
|
|
||||||
mColorNode.setColor( mColorHistory->getColor(id) );
|
|
||||||
mColorNode.setKey( "" );
|
|
||||||
|
|
||||||
emit colorChanged( mColorNode, false );
|
|
||||||
accept();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::onCustomColorItemActivated()
|
|
||||||
{
|
{
|
||||||
QColorDialog dlg( mColorNode.color(), this );
|
QColorDialog dlg( mColorNode.color(), this );
|
||||||
dlg.setWindowTitle( tr("Custom Color") );
|
dlg.setWindowTitle( tr("Custom Color") );
|
||||||
@@ -267,7 +264,10 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
mColorNode = newColorNode;
|
mColorNode = newColorNode;
|
||||||
|
|
||||||
mColorHistory->addColor( mColorNode.color() );
|
// TRANSLATORS
|
||||||
|
//: %1 = color specification in hex. String must not contain a colon (:).
|
||||||
|
mColorHistory->addColor( mColorNode.color(),
|
||||||
|
QString(tr("Custom Color %1")).arg(mColorNode.color().name()) );
|
||||||
|
|
||||||
emit colorChanged( mColorNode, false );
|
emit colorChanged( mColorNode, false );
|
||||||
accept();
|
accept();
|
||||||
@@ -284,12 +284,13 @@ namespace glabels
|
|||||||
|
|
||||||
void ColorPaletteDialog::loadCustomColorHistory()
|
void ColorPaletteDialog::loadCustomColorHistory()
|
||||||
{
|
{
|
||||||
|
QStringList nameList = mColorHistory->getNames();
|
||||||
QList<QColor> colorList = mColorHistory->getColors();
|
QList<QColor> colorList = mColorHistory->getColors();
|
||||||
|
|
||||||
int id = 0;
|
int id = 0;
|
||||||
foreach ( QColor color, colorList )
|
foreach ( QColor color, colorList )
|
||||||
{
|
{
|
||||||
mHistoryItem[id]->setColor( id, color, QString(tr("Custom color #%1").arg(id+1) ) );
|
mHistoryItem[id]->setColor( id, color, nameList[id] );
|
||||||
mHistoryItem[id]->setEnabled( true );
|
mHistoryItem[id]->setEnabled( true );
|
||||||
id++;
|
id++;
|
||||||
}
|
}
|
||||||
@@ -302,25 +303,14 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::onComboIndexChanged( int index )
|
void ColorPaletteDialog::onKeySelected( QString key )
|
||||||
{
|
{
|
||||||
if ( index != 0 )
|
mColorNode.setField( true );
|
||||||
{
|
mColorNode.setColor( QColor( 0xee, 0xee, 0xec ) );
|
||||||
mColorNode.setField( true );
|
mColorNode.setKey( key );
|
||||||
mColorNode.setColor( QColor( 0xee, 0xee, 0xec ) );
|
|
||||||
mColorNode.setKey( mKeys[index-1] );
|
|
||||||
|
|
||||||
emit colorChanged( mColorNode, false );
|
emit colorChanged( mColorNode, false );
|
||||||
accept();
|
accept();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ColorPaletteDialog::showEvent( QShowEvent* event )
|
|
||||||
{
|
|
||||||
mMergeFieldCombo->setCurrentIndex( 0 );
|
|
||||||
|
|
||||||
QDialog::showEvent( event );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace glabels
|
} // namespace glabels
|
||||||
|
|||||||
@@ -24,11 +24,10 @@
|
|||||||
|
|
||||||
#include "ColorHistory.h"
|
#include "ColorHistory.h"
|
||||||
#include "ColorPaletteItem.h"
|
#include "ColorPaletteItem.h"
|
||||||
#include "ColorPaletteButtonItem.h"
|
#include "FieldButton.h"
|
||||||
|
|
||||||
#include "model/ColorNode.h"
|
#include "model/ColorNode.h"
|
||||||
|
|
||||||
#include <QComboBox>
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
|
|
||||||
@@ -50,6 +49,7 @@ namespace glabels
|
|||||||
ColorPaletteDialog( const QString& defaultLabel,
|
ColorPaletteDialog( const QString& defaultLabel,
|
||||||
const QColor& defaultColor,
|
const QColor& defaultColor,
|
||||||
const QColor& color,
|
const QColor& color,
|
||||||
|
bool showUseFieldButton = true,
|
||||||
QWidget* parent = nullptr );
|
QWidget* parent = nullptr );
|
||||||
|
|
||||||
|
|
||||||
@@ -64,25 +64,23 @@ namespace glabels
|
|||||||
// Public Methods
|
// Public Methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
void setColorNode( const model::ColorNode& colorNode );
|
void setColorNode( const model::ColorNode& colorNode );
|
||||||
void setKeys( const QStringList& keyList );
|
|
||||||
void clearKeys();
|
void setKeys( const merge::Merge* merge,
|
||||||
|
const model::Variables* variables );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Slots
|
// Slots
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
private slots:
|
private slots:
|
||||||
void onDefaultItemActivated();
|
|
||||||
void onPaletteItemActivated( int id );
|
void onPaletteItemActivated( int id );
|
||||||
void onHistoryItemActivated( int id );
|
void onHistoryItemActivated( int id );
|
||||||
void onCustomColorItemActivated();
|
void onDefaultButtonClicked();
|
||||||
|
void onCustomColorButtonClicked();
|
||||||
|
void onKeySelected( QString key );
|
||||||
void onColorHistoryChanged();
|
void onColorHistoryChanged();
|
||||||
void onComboIndexChanged( int index );
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void showEvent( QShowEvent* event ) override;
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Private Methods
|
// Private Methods
|
||||||
@@ -111,8 +109,7 @@ namespace glabels
|
|||||||
ColorHistory* mColorHistory;
|
ColorHistory* mColorHistory;
|
||||||
ColorPaletteItem* mHistoryItem[PALETTE_COLS];
|
ColorPaletteItem* mHistoryItem[PALETTE_COLS];
|
||||||
|
|
||||||
QComboBox* mMergeFieldCombo;
|
FieldButton* mFieldButton;
|
||||||
QStringList mKeys;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,220 @@
|
|||||||
|
/* EditVariableDialog.cpp
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "EditVariableDialog.h"
|
||||||
|
|
||||||
|
#include "model/Settings.h"
|
||||||
|
|
||||||
|
#include <QPushButton>
|
||||||
|
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
// All variable types. (must be in sorted order)
|
||||||
|
const QVector<glabels::model::Variable::Type> allTypes = {
|
||||||
|
glabels::model::Variable::Type::STRING,
|
||||||
|
glabels::model::Variable::Type::INTEGER,
|
||||||
|
glabels::model::Variable::Type::FLOATING_POINT,
|
||||||
|
glabels::model::Variable::Type::COLOR
|
||||||
|
};
|
||||||
|
|
||||||
|
// All variable increments. (must be in sorted order)
|
||||||
|
const QVector<glabels::model::Variable::Increment> allIncrements = {
|
||||||
|
glabels::model::Variable::Increment::NEVER,
|
||||||
|
glabels::model::Variable::Increment::PER_ITEM,
|
||||||
|
glabels::model::Variable::Increment::PER_COPY,
|
||||||
|
glabels::model::Variable::Increment::PER_PAGE
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace glabels
|
||||||
|
{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Constructor
|
||||||
|
///
|
||||||
|
EditVariableDialog::EditVariableDialog( QWidget *parent )
|
||||||
|
: QDialog(parent)
|
||||||
|
{
|
||||||
|
setupUi( this );
|
||||||
|
|
||||||
|
QRegularExpression reIdentifier( "[a-zA-Z_][a-zA-Z_0-9]*" );
|
||||||
|
nameEdit->setValidator( new QRegularExpressionValidator( reIdentifier ) );
|
||||||
|
|
||||||
|
colorValueButton->init( tr("Default"),
|
||||||
|
QColor(0,0,0,255),
|
||||||
|
QColor(0,0,0,255),
|
||||||
|
false );
|
||||||
|
|
||||||
|
for ( auto type : allTypes )
|
||||||
|
{
|
||||||
|
typeCombo->addItem( model::Variable::typeToI18nString( type ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( auto type : allIncrements )
|
||||||
|
{
|
||||||
|
incrementCombo->addItem( model::Variable::incrementToI18nString( type ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
stepSizeEdit->setText( "1" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Set variable
|
||||||
|
///
|
||||||
|
void EditVariableDialog::setVariable( const model::Variable& variable )
|
||||||
|
{
|
||||||
|
typeCombo->setCurrentIndex( static_cast<int>(variable.type()) );
|
||||||
|
nameEdit->setText( variable.name() );
|
||||||
|
valueEdit->setText( variable.initialValue() );
|
||||||
|
colorValueButton->setColor( QColor( variable.initialValue() ) );
|
||||||
|
incrementCombo->setCurrentIndex( static_cast<int>(variable.increment()) );
|
||||||
|
stepSizeEdit->setText( variable.stepSize() );
|
||||||
|
|
||||||
|
updateControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Get variable
|
||||||
|
///
|
||||||
|
model::Variable EditVariableDialog::variable() const
|
||||||
|
{
|
||||||
|
return model::Variable( static_cast<model::Variable::Type>(typeCombo->currentIndex()),
|
||||||
|
nameEdit->text(),
|
||||||
|
valueEdit->text(),
|
||||||
|
static_cast<model::Variable::Increment>(incrementCombo->currentIndex()),
|
||||||
|
stepSizeEdit->text() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// nameEdit Changed
|
||||||
|
///
|
||||||
|
void EditVariableDialog::onNameEditChanged()
|
||||||
|
{
|
||||||
|
validateCurrentInputs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// typeCombo Changed
|
||||||
|
///
|
||||||
|
void EditVariableDialog::onTypeComboChanged()
|
||||||
|
{
|
||||||
|
updateControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// valueEdit Changed
|
||||||
|
///
|
||||||
|
void EditVariableDialog::onValueEditChanged()
|
||||||
|
{
|
||||||
|
validateCurrentInputs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// colorValueButton Changed
|
||||||
|
///
|
||||||
|
void EditVariableDialog::onColorValueButtonChanged()
|
||||||
|
{
|
||||||
|
valueEdit->setText( colorValueButton->colorNode().color().name() );
|
||||||
|
validateCurrentInputs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// incrementCombo Changed
|
||||||
|
///
|
||||||
|
void EditVariableDialog::onIncrementComboChanged()
|
||||||
|
{
|
||||||
|
updateControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// stepSizeEdit Changed
|
||||||
|
///
|
||||||
|
void EditVariableDialog::onStepSizeEditChanged()
|
||||||
|
{
|
||||||
|
validateCurrentInputs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// update controls
|
||||||
|
///
|
||||||
|
void EditVariableDialog::updateControls()
|
||||||
|
{
|
||||||
|
auto type = static_cast<model::Variable::Type>(typeCombo->currentIndex());
|
||||||
|
auto increment = static_cast<model::Variable::Increment>(incrementCombo->currentIndex());
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
|
||||||
|
case model::Variable::Type::INTEGER:
|
||||||
|
valueEdit->setValidator( new QIntValidator() );
|
||||||
|
stepSizeEdit->setValidator( new QIntValidator() );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case model::Variable::Type::FLOATING_POINT:
|
||||||
|
valueEdit->setValidator( new QDoubleValidator() );
|
||||||
|
stepSizeEdit->setValidator( new QDoubleValidator() );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
valueEdit->setValidator( nullptr );
|
||||||
|
stepSizeEdit->setValidator( nullptr );
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
colorValueButton->setVisible( type == model::Variable::Type::COLOR );
|
||||||
|
|
||||||
|
bool isNumeric = ( type == model::Variable::Type::INTEGER ) ||
|
||||||
|
( type == model::Variable::Type::FLOATING_POINT );
|
||||||
|
|
||||||
|
incrementGroup->setVisible( isNumeric );
|
||||||
|
stepSizeLabel->setEnabled( isNumeric && (increment != model::Variable::Increment::NEVER) );
|
||||||
|
stepSizeEdit->setEnabled( isNumeric && (increment != model::Variable::Increment::NEVER) );
|
||||||
|
|
||||||
|
validateCurrentInputs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// validate current inputs
|
||||||
|
///
|
||||||
|
void EditVariableDialog::validateCurrentInputs()
|
||||||
|
{
|
||||||
|
bool hasValidIdentifier = nameEdit->hasAcceptableInput();
|
||||||
|
bool hasValidValue = valueEdit->hasAcceptableInput();
|
||||||
|
bool hasValidStepSize = stepSizeEdit->hasAcceptableInput();
|
||||||
|
|
||||||
|
bool isValid = hasValidIdentifier && hasValidValue && hasValidStepSize;
|
||||||
|
buttonBox->button(QDialogButtonBox::Ok)->setEnabled( isValid );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace glabels
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/* ColorPaletteButtonItem.h
|
/* EditVariableDialog.h
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014 Jim Evins <evins@snaught.com>
|
* Copyright (C) 2019 Jim Evins <evins@snaught.com>
|
||||||
*
|
*
|
||||||
* This file is part of gLabels-qt.
|
* This file is part of gLabels-qt.
|
||||||
*
|
*
|
||||||
@@ -18,21 +18,21 @@
|
|||||||
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ColorPaletteButtonItem_h
|
#ifndef EditVariableDialog_h
|
||||||
#define ColorPaletteButtonItem_h
|
#define EditVariableDialog_h
|
||||||
|
|
||||||
|
|
||||||
#include <QColor>
|
#include "ui_EditVariableDialog.h"
|
||||||
#include <QWidget>
|
#include "model/Variable.h"
|
||||||
|
|
||||||
|
|
||||||
namespace glabels
|
namespace glabels
|
||||||
{
|
{
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Color Palette Item
|
/// New Label Dialog Widget
|
||||||
///
|
///
|
||||||
class ColorPaletteButtonItem : public QWidget
|
class EditVariableDialog : public QDialog, public Ui_EditVariableDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -40,36 +40,37 @@ namespace glabels
|
|||||||
// Life Cycle
|
// Life Cycle
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
ColorPaletteButtonItem( const QString& text, QWidget* parent = nullptr );
|
EditVariableDialog( QWidget *parent = nullptr );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Signals
|
// Public methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
signals:
|
void setVariable( const model::Variable& variable );
|
||||||
void activated();
|
model::Variable variable() const;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Event handlers
|
// Slots
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
protected:
|
private slots:
|
||||||
void paintEvent( QPaintEvent* event ) override;
|
void onNameEditChanged();
|
||||||
void enterEvent( QEvent* event ) override;
|
void onTypeComboChanged();
|
||||||
void leaveEvent( QEvent* event ) override;
|
void onValueEditChanged();
|
||||||
void mousePressEvent( QMouseEvent* event ) override;
|
void onColorValueButtonChanged();
|
||||||
|
void onIncrementComboChanged();
|
||||||
|
void onStepSizeEditChanged();
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Private Data
|
// Private methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
private:
|
void updateControls();
|
||||||
QString mText;
|
void validateCurrentInputs();
|
||||||
|
|
||||||
bool mHover;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // ColorPaletteButtonItem_h
|
#endif // EditVariableDialog_h
|
||||||
+38
-56
@@ -1,6 +1,6 @@
|
|||||||
/* FieldButton.cpp
|
/* FieldButton.cpp
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014-2016 Jim Evins <evins@snaught.com>
|
* Copyright (C) 2019 Jim Evins <evins@snaught.com>
|
||||||
*
|
*
|
||||||
* This file is part of gLabels-qt.
|
* This file is part of gLabels-qt.
|
||||||
*
|
*
|
||||||
@@ -30,79 +30,61 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Constructor
|
/// Constructor
|
||||||
///
|
///
|
||||||
FieldButton::FieldButton( QWidget* parent )
|
FieldButton::FieldButton( QWidget* parent ) : QPushButton(parent)
|
||||||
: QComboBox(parent)
|
|
||||||
{
|
{
|
||||||
setEnabled( false );
|
setEnabled( false );
|
||||||
|
setMenu( &mMenu );
|
||||||
connect( this, SIGNAL(currentIndexChanged(int)), this, SLOT(onIndexChanged(int)) );
|
|
||||||
|
connect( &mMenu, SIGNAL(triggered(QAction*)),
|
||||||
|
this, SLOT(onMenuActionTriggered(QAction*)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void FieldButton::setName( const QString& name )
|
///
|
||||||
{
|
/// Set Keys
|
||||||
mName = name;
|
///
|
||||||
if ( count() == 0 )
|
void FieldButton::setKeys( const merge::Merge* merge,
|
||||||
{
|
const model::Variables* variables )
|
||||||
addItem( mName );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setItemText( 0, mName );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Item 0 is the ComboBox title, not an item intended for selection. So disable it.
|
|
||||||
const auto* itemModel = qobject_cast<const QStandardItemModel*>(model());
|
|
||||||
QStandardItem* item = itemModel->item(0);
|
|
||||||
item->setFlags( item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void FieldButton::setKeys( const QStringList& keyList )
|
|
||||||
{
|
{
|
||||||
// Clear old keys
|
// Clear old keys
|
||||||
clear();
|
mMenu.clear();
|
||||||
addItem( mName );
|
|
||||||
|
// Add merge keys, if any
|
||||||
|
mMenu.addSection( tr("Merge fields") );
|
||||||
|
for ( auto& key : merge->keys() )
|
||||||
|
{
|
||||||
|
auto* action = mMenu.addAction( QString( "${%1}" ).arg( key ) );
|
||||||
|
action->setData( key );
|
||||||
|
}
|
||||||
|
if ( merge->keys().empty() )
|
||||||
|
{
|
||||||
|
auto* action = mMenu.addAction( "None" );
|
||||||
|
action->setEnabled( false );
|
||||||
|
}
|
||||||
|
|
||||||
// Item 0 is the ComboBox title, not an item intended for selection. So disable it.
|
// Add variable keys, if any
|
||||||
const auto* itemModel = qobject_cast<const QStandardItemModel*>(model());
|
mMenu.addSection( tr("Variables") );
|
||||||
QStandardItem* item = itemModel->item(0);
|
for ( auto& key : variables->keys() )
|
||||||
item->setFlags( item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled) );
|
|
||||||
|
|
||||||
// Add new keys
|
|
||||||
if ( keyList.size() > 0 )
|
|
||||||
{
|
{
|
||||||
addItems( keyList );
|
auto* action = mMenu.addAction( QString( "${%1}" ).arg( key ) );
|
||||||
setEnabled( true );
|
action->setData( key );
|
||||||
}
|
}
|
||||||
else
|
if ( variables->keys().empty() )
|
||||||
{
|
{
|
||||||
setEnabled( false );
|
auto* action = mMenu.addAction( "None" );
|
||||||
|
action->setEnabled( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setEnabled( !merge->keys().empty() || !variables->keys().empty() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void FieldButton::clearKeys()
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
addItem( mName );
|
|
||||||
|
|
||||||
setEnabled( false );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// onMenuKeySelected slot
|
/// onMenuActionTriggered slot
|
||||||
///
|
///
|
||||||
void FieldButton::onIndexChanged( int index )
|
void FieldButton::onMenuActionTriggered( QAction* action )
|
||||||
{
|
{
|
||||||
if ( index > 0 )
|
emit keySelected( action->data().toString() );
|
||||||
{
|
|
||||||
emit keySelected( itemText(index) );
|
|
||||||
|
|
||||||
setCurrentIndex( 0 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace glabels
|
} // namespace glabels
|
||||||
|
|||||||
+13
-9
@@ -1,6 +1,6 @@
|
|||||||
/* FieldButton.h
|
/* FieldButton.h
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014-2016 Jim Evins <evins@snaught.com>
|
* Copyright (C) 2019 Jim Evins <evins@snaught.com>
|
||||||
*
|
*
|
||||||
* This file is part of gLabels-qt.
|
* This file is part of gLabels-qt.
|
||||||
*
|
*
|
||||||
@@ -22,8 +22,13 @@
|
|||||||
#define FieldButton_h
|
#define FieldButton_h
|
||||||
|
|
||||||
|
|
||||||
#include <QComboBox>
|
#include "model/Variables.h"
|
||||||
#include <QString>
|
#include "merge/Merge.h"
|
||||||
|
|
||||||
|
#include <QAction>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
|
||||||
namespace glabels
|
namespace glabels
|
||||||
@@ -32,7 +37,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Field Button
|
/// Field Button
|
||||||
///
|
///
|
||||||
class FieldButton : public QComboBox
|
class FieldButton : public QPushButton
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -54,23 +59,22 @@ namespace glabels
|
|||||||
// Public Methods
|
// Public Methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
void setName( const QString& name = "" );
|
void setKeys( const merge::Merge* merge,
|
||||||
void setKeys( const QStringList& keyList );
|
const model::Variables* variables );
|
||||||
void clearKeys();
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Slots
|
// Slots
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
private slots:
|
private slots:
|
||||||
void onIndexChanged( int index );
|
void onMenuActionTriggered( QAction* action );
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Private Data
|
// Private Data
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
private:
|
private:
|
||||||
QString mName;
|
QMenu mMenu;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+2
-5
@@ -112,8 +112,6 @@ namespace glabels
|
|||||||
model::Model *model = model::XmlLabelParser::readFile( fileName );
|
model::Model *model = model::XmlLabelParser::readFile( fileName );
|
||||||
if ( model )
|
if ( model )
|
||||||
{
|
{
|
||||||
model->setFileName( fileName );
|
|
||||||
|
|
||||||
// Either apply to current window or open a new one
|
// Either apply to current window or open a new one
|
||||||
if ( window->isEmpty() )
|
if ( window->isEmpty() )
|
||||||
{
|
{
|
||||||
@@ -152,8 +150,6 @@ namespace glabels
|
|||||||
model::Model *model = model::XmlLabelParser::readFile( fileName );
|
model::Model *model = model::XmlLabelParser::readFile( fileName );
|
||||||
if ( model )
|
if ( model )
|
||||||
{
|
{
|
||||||
model->setFileName( fileName );
|
|
||||||
|
|
||||||
// Either apply to current window or open a new one
|
// Either apply to current window or open a new one
|
||||||
if ( window->isEmpty() )
|
if ( window->isEmpty() )
|
||||||
{
|
{
|
||||||
@@ -213,7 +209,8 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
bool File::saveAs( MainWindow *window )
|
bool File::saveAs( MainWindow *window )
|
||||||
{
|
{
|
||||||
// Either use the saved CWD from a previous open/save or grab it from the path of the current file
|
// Either use the saved CWD from a previous open/save or grab it from the path
|
||||||
|
// of the current file.
|
||||||
QString cwd = mCwd;
|
QString cwd = mCwd;
|
||||||
if ( window->model() && !window->model()->fileName().isEmpty() )
|
if ( window->model() && !window->model()->fileName().isEmpty() )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -473,6 +473,16 @@ namespace glabels
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Variables : public QIcon
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Variables()
|
||||||
|
{
|
||||||
|
addPixmap( QPixmap( ":icons/flat/48x48/glabels-variables.svg" ) );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class ZoomBestFit : public QIcon
|
class ZoomBestFit : public QIcon
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -469,6 +469,10 @@ namespace glabels
|
|||||||
mResizeObject = handle->owner();
|
mResizeObject = handle->owner();
|
||||||
mResizeHandle = handle;
|
mResizeHandle = handle;
|
||||||
mResizeHonorAspect = event->modifiers() & Qt::ControlModifier;
|
mResizeHonorAspect = event->modifiers() & Qt::ControlModifier;
|
||||||
|
if ( mResizeObject->lockAspectRatio() )
|
||||||
|
{
|
||||||
|
mResizeHonorAspect = !mResizeHonorAspect;
|
||||||
|
}
|
||||||
|
|
||||||
mState = ArrowResize;
|
mState = ArrowResize;
|
||||||
}
|
}
|
||||||
@@ -657,6 +661,7 @@ namespace glabels
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ArrowResize:
|
case ArrowResize:
|
||||||
|
mUndoRedoModel->checkpoint( tr("Resize") );
|
||||||
handleResizeMotion( xWorld, yWorld );
|
handleResizeMotion( xWorld, yWorld );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1157,7 +1162,7 @@ namespace glabels
|
|||||||
void
|
void
|
||||||
LabelEditor::drawObjectsLayer( QPainter* painter )
|
LabelEditor::drawObjectsLayer( QPainter* painter )
|
||||||
{
|
{
|
||||||
mModel->draw( painter );
|
mModel->draw( painter, true, nullptr, nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+96
-7
@@ -31,6 +31,7 @@
|
|||||||
#include "PropertiesView.h"
|
#include "PropertiesView.h"
|
||||||
#include "StartupView.h"
|
#include "StartupView.h"
|
||||||
#include "UndoRedoModel.h"
|
#include "UndoRedoModel.h"
|
||||||
|
#include "VariablesView.h"
|
||||||
|
|
||||||
#include "model/Db.h"
|
#include "model/Db.h"
|
||||||
#include "model/Model.h"
|
#include "model/Model.h"
|
||||||
@@ -51,7 +52,8 @@ namespace
|
|||||||
EDITOR_PAGE_INDEX = 1,
|
EDITOR_PAGE_INDEX = 1,
|
||||||
PROPERTIES_PAGE_INDEX = 2,
|
PROPERTIES_PAGE_INDEX = 2,
|
||||||
MERGE_PAGE_INDEX = 3,
|
MERGE_PAGE_INDEX = 3,
|
||||||
PRINT_PAGE_INDEX = 4,
|
VARIABLES_PAGE_INDEX = 4,
|
||||||
|
PRINT_PAGE_INDEX = 5,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +64,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Constructor
|
/// Constructor
|
||||||
///
|
///
|
||||||
MainWindow::MainWindow() : mModel(nullptr)
|
MainWindow::MainWindow() : mModel(nullptr), mUndoRedoModel(nullptr)
|
||||||
{
|
{
|
||||||
setWindowIcon( Icons::Glabels() );
|
setWindowIcon( Icons::Glabels() );
|
||||||
|
|
||||||
@@ -76,6 +78,7 @@ namespace glabels
|
|||||||
QWidget* editorPage = createEditorPage();
|
QWidget* editorPage = createEditorPage();
|
||||||
QWidget* propertiesPage = createPropertiesPage();
|
QWidget* propertiesPage = createPropertiesPage();
|
||||||
QWidget* mergePage = createMergePage();
|
QWidget* mergePage = createMergePage();
|
||||||
|
QWidget* variablesPage = createVariablesPage();
|
||||||
QWidget* printPage = createPrintPage();
|
QWidget* printPage = createPrintPage();
|
||||||
|
|
||||||
// Table of contents widget
|
// Table of contents widget
|
||||||
@@ -141,6 +144,18 @@ namespace glabels
|
|||||||
mMergeAction = mContents->addWidget( mMergeButton );
|
mMergeAction = mContents->addWidget( mMergeButton );
|
||||||
group->addButton( mMergeButton );
|
group->addButton( mMergeButton );
|
||||||
|
|
||||||
|
// Add "Variables" page
|
||||||
|
mPages->addWidget( variablesPage );
|
||||||
|
mVariablesButton = new QToolButton( this );
|
||||||
|
mVariablesButton->setIcon( Icons::Variables() );
|
||||||
|
mVariablesButton->setText( tr("Variables") );
|
||||||
|
mVariablesButton->setToolButtonStyle( Qt::ToolButtonTextUnderIcon );
|
||||||
|
mVariablesButton->setCheckable( true );
|
||||||
|
mVariablesButton->setSizePolicy( QSizePolicy::MinimumExpanding,
|
||||||
|
QSizePolicy::Preferred );
|
||||||
|
mVariablesAction = mContents->addWidget( mVariablesButton );
|
||||||
|
group->addButton( mVariablesButton );
|
||||||
|
|
||||||
// Add "Print" page
|
// Add "Print" page
|
||||||
mPages->addWidget( printPage );
|
mPages->addWidget( printPage );
|
||||||
mPrintButton = new QToolButton( this );
|
mPrintButton = new QToolButton( this );
|
||||||
@@ -175,6 +190,7 @@ namespace glabels
|
|||||||
connect( mEditorButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
connect( mEditorButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
||||||
connect( mPropertiesButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
connect( mPropertiesButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
||||||
connect( mMergeButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
connect( mMergeButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
||||||
|
connect( mVariablesButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
||||||
connect( mPrintButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
connect( mPrintButton, SIGNAL(toggled(bool)), this, SLOT(changePage(bool)));
|
||||||
connect( mLabelEditor, SIGNAL(zoomChanged()), this, SLOT(onZoomChanged()) );
|
connect( mLabelEditor, SIGNAL(zoomChanged()), this, SLOT(onZoomChanged()) );
|
||||||
connect( model::Settings::instance(), SIGNAL(changed()), this, SLOT(onSettingsChanged()) );
|
connect( model::Settings::instance(), SIGNAL(changed()), this, SLOT(onSettingsChanged()) );
|
||||||
@@ -194,7 +210,16 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
{
|
{
|
||||||
// empty
|
if ( mUndoRedoModel )
|
||||||
|
{
|
||||||
|
delete mUndoRedoModel;
|
||||||
|
}
|
||||||
|
if ( mModel )
|
||||||
|
{
|
||||||
|
delete mModel->merge(); // Ownership of final Merge instance is ours
|
||||||
|
delete mModel->variables(); // Ownership of Variables instance is ours
|
||||||
|
delete mModel;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -212,13 +237,14 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void MainWindow::setModel( model::Model* model )
|
void MainWindow::setModel( model::Model* model )
|
||||||
{
|
{
|
||||||
mModel = model;
|
mModel = model; // Ownership passes to us
|
||||||
mUndoRedoModel = new UndoRedoModel( mModel );
|
mUndoRedoModel = new UndoRedoModel( mModel );
|
||||||
|
|
||||||
mPropertiesView->setModel( mModel, mUndoRedoModel );
|
mPropertiesView->setModel( mModel, mUndoRedoModel );
|
||||||
mLabelEditor->setModel( mModel, mUndoRedoModel );
|
mLabelEditor->setModel( mModel, mUndoRedoModel );
|
||||||
mObjectEditor->setModel( mModel, mUndoRedoModel );
|
mObjectEditor->setModel( mModel, mUndoRedoModel );
|
||||||
mMergeView->setModel( mModel , mUndoRedoModel );
|
mMergeView->setModel( mModel, mUndoRedoModel );
|
||||||
|
mVariablesView->setModel( mModel, mUndoRedoModel );
|
||||||
mPrintView->setModel( mModel );
|
mPrintView->setModel( mModel );
|
||||||
|
|
||||||
mEditorButton->setChecked( true );
|
mEditorButton->setChecked( true );
|
||||||
@@ -315,6 +341,11 @@ namespace glabels
|
|||||||
fileShowMergePageAction->setStatusTip( tr("Select project Merge mode") );
|
fileShowMergePageAction->setStatusTip( tr("Select project Merge mode") );
|
||||||
connect( fileShowMergePageAction, SIGNAL(triggered()), this, SLOT(fileShowMergePage()) );
|
connect( fileShowMergePageAction, SIGNAL(triggered()), this, SLOT(fileShowMergePage()) );
|
||||||
|
|
||||||
|
fileShowVariablesPageAction = new QAction( tr("&Variables") , this );
|
||||||
|
fileShowVariablesPageAction->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_4 ) );
|
||||||
|
fileShowVariablesPageAction->setStatusTip( tr("Select project Variables mode") );
|
||||||
|
connect( fileShowVariablesPageAction, SIGNAL(triggered()), this, SLOT(fileShowVariablesPage()) );
|
||||||
|
|
||||||
fileShowPrintPageAction = new QAction( tr("&Print") , this );
|
fileShowPrintPageAction = new QAction( tr("&Print") , this );
|
||||||
fileShowPrintPageAction->setShortcut( QKeySequence::Print );
|
fileShowPrintPageAction->setShortcut( QKeySequence::Print );
|
||||||
fileShowPrintPageAction->setStatusTip( tr("Select project Print mode") );
|
fileShowPrintPageAction->setStatusTip( tr("Select project Print mode") );
|
||||||
@@ -603,6 +634,7 @@ namespace glabels
|
|||||||
fileMenu->addAction( fileShowEditorPageAction );
|
fileMenu->addAction( fileShowEditorPageAction );
|
||||||
fileMenu->addAction( fileShowPropertiesPageAction );
|
fileMenu->addAction( fileShowPropertiesPageAction );
|
||||||
fileMenu->addAction( fileShowMergePageAction );
|
fileMenu->addAction( fileShowMergePageAction );
|
||||||
|
fileMenu->addAction( fileShowVariablesPageAction );
|
||||||
fileMenu->addAction( fileShowPrintPageAction );
|
fileMenu->addAction( fileShowPrintPageAction );
|
||||||
fileMenu->addSeparator();
|
fileMenu->addSeparator();
|
||||||
fileMenu->addAction( fileTemplateDesignerAction );
|
fileMenu->addAction( fileTemplateDesignerAction );
|
||||||
@@ -815,6 +847,17 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Create Variables Page
|
||||||
|
///
|
||||||
|
QWidget* MainWindow::createVariablesPage()
|
||||||
|
{
|
||||||
|
mVariablesView = new VariablesView();
|
||||||
|
|
||||||
|
return mVariablesView;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Create Print Page
|
/// Create Print Page
|
||||||
///
|
///
|
||||||
@@ -839,6 +882,7 @@ namespace glabels
|
|||||||
bool isEditorPage = mEditorButton->isChecked();
|
bool isEditorPage = mEditorButton->isChecked();
|
||||||
bool isPropertiesPage = mPropertiesButton->isChecked();
|
bool isPropertiesPage = mPropertiesButton->isChecked();
|
||||||
bool isMergePage = mMergeButton->isChecked();
|
bool isMergePage = mMergeButton->isChecked();
|
||||||
|
bool isVariablesPage = mVariablesButton->isChecked();
|
||||||
bool isPrintPage = mPrintButton->isChecked();
|
bool isPrintPage = mPrintButton->isChecked();
|
||||||
|
|
||||||
// What is the current selection state?
|
// What is the current selection state?
|
||||||
@@ -851,6 +895,7 @@ namespace glabels
|
|||||||
mEditorAction->setVisible( !isWelcomePage );
|
mEditorAction->setVisible( !isWelcomePage );
|
||||||
mPropertiesAction->setVisible( !isWelcomePage );
|
mPropertiesAction->setVisible( !isWelcomePage );
|
||||||
mMergeAction->setVisible( !isWelcomePage );
|
mMergeAction->setVisible( !isWelcomePage );
|
||||||
|
mVariablesAction->setVisible( !isWelcomePage );
|
||||||
mPrintAction->setVisible( !isWelcomePage );
|
mPrintAction->setVisible( !isWelcomePage );
|
||||||
|
|
||||||
// Recent file actions
|
// Recent file actions
|
||||||
@@ -876,14 +921,45 @@ namespace glabels
|
|||||||
fileShowEditorPageAction->setEnabled( !isWelcomePage && !isEditorPage );
|
fileShowEditorPageAction->setEnabled( !isWelcomePage && !isEditorPage );
|
||||||
fileShowPropertiesPageAction->setEnabled( !isWelcomePage && !isPropertiesPage );
|
fileShowPropertiesPageAction->setEnabled( !isWelcomePage && !isPropertiesPage );
|
||||||
fileShowMergePageAction->setEnabled( !isWelcomePage && !isMergePage );
|
fileShowMergePageAction->setEnabled( !isWelcomePage && !isMergePage );
|
||||||
|
fileShowVariablesPageAction->setEnabled( !isWelcomePage && !isVariablesPage );
|
||||||
fileShowPrintPageAction->setEnabled( !isWelcomePage && !isPrintPage );
|
fileShowPrintPageAction->setEnabled( !isWelcomePage && !isPrintPage );
|
||||||
fileTemplateDesignerAction->setEnabled( true );
|
fileTemplateDesignerAction->setEnabled( true );
|
||||||
fileCloseAction->setEnabled( true );
|
fileCloseAction->setEnabled( true );
|
||||||
fileExitAction->setEnabled( true );
|
fileExitAction->setEnabled( true );
|
||||||
|
|
||||||
// Edit actions
|
// Edit actions
|
||||||
editUndoAction->setEnabled( hasModel && mUndoRedoModel->canUndo() );
|
if ( hasModel )
|
||||||
editRedoAction->setEnabled( hasModel && mUndoRedoModel->canRedo() );
|
{
|
||||||
|
if ( mUndoRedoModel->canUndo() )
|
||||||
|
{
|
||||||
|
editUndoAction->setEnabled( true );
|
||||||
|
/* Translators: %1 is the action description to undo. */
|
||||||
|
editUndoAction->setText( QString( tr("Undo %1") ).arg( mUndoRedoModel->undoDescription() ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
editUndoAction->setEnabled( false );
|
||||||
|
editUndoAction->setText( tr("Undo") );
|
||||||
|
}
|
||||||
|
if ( mUndoRedoModel->canRedo() )
|
||||||
|
{
|
||||||
|
editRedoAction->setEnabled( true );
|
||||||
|
/* Translators: %1 is the action description to redo. */
|
||||||
|
editRedoAction->setText( QString( tr("Redo %1") ).arg( mUndoRedoModel->redoDescription() ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
editRedoAction->setEnabled( false );
|
||||||
|
editRedoAction->setText( tr("Redo") );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
editUndoAction->setEnabled( false );
|
||||||
|
editUndoAction->setText( tr("Undo") );
|
||||||
|
editRedoAction->setEnabled( false );
|
||||||
|
editRedoAction->setText( tr("Redo") );
|
||||||
|
}
|
||||||
editCutAction->setEnabled( isEditorPage && hasSelection );
|
editCutAction->setEnabled( isEditorPage && hasSelection );
|
||||||
editCopyAction->setEnabled( isEditorPage && hasSelection );
|
editCopyAction->setEnabled( isEditorPage && hasSelection );
|
||||||
editPasteAction->setEnabled( isEditorPage && canPaste );
|
editPasteAction->setEnabled( isEditorPage && canPaste );
|
||||||
@@ -1072,6 +1148,10 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
mPages->setCurrentIndex( MERGE_PAGE_INDEX );
|
mPages->setCurrentIndex( MERGE_PAGE_INDEX );
|
||||||
}
|
}
|
||||||
|
else if ( mVariablesButton->isChecked() )
|
||||||
|
{
|
||||||
|
mPages->setCurrentIndex( VARIABLES_PAGE_INDEX );
|
||||||
|
}
|
||||||
else if ( mPrintButton->isChecked() )
|
else if ( mPrintButton->isChecked() )
|
||||||
{
|
{
|
||||||
mPages->setCurrentIndex( PRINT_PAGE_INDEX );
|
mPages->setCurrentIndex( PRINT_PAGE_INDEX );
|
||||||
@@ -1168,6 +1248,15 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// File->Show Variables Page
|
||||||
|
///
|
||||||
|
void MainWindow::fileShowVariablesPage()
|
||||||
|
{
|
||||||
|
mVariablesButton->setChecked( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// File->Show Print Page
|
/// File->Show Print Page
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ namespace glabels
|
|||||||
class PropertiesView;
|
class PropertiesView;
|
||||||
class StartupView;
|
class StartupView;
|
||||||
class UndoRedoModel;
|
class UndoRedoModel;
|
||||||
|
class VariablesView;
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -97,6 +98,7 @@ namespace glabels
|
|||||||
void fileShowEditorPage();
|
void fileShowEditorPage();
|
||||||
void fileShowPropertiesPage();
|
void fileShowPropertiesPage();
|
||||||
void fileShowMergePage();
|
void fileShowMergePage();
|
||||||
|
void fileShowVariablesPage();
|
||||||
void fileShowPrintPage();
|
void fileShowPrintPage();
|
||||||
void fileTemplateDesigner();
|
void fileTemplateDesigner();
|
||||||
void fileClose();
|
void fileClose();
|
||||||
@@ -175,6 +177,7 @@ namespace glabels
|
|||||||
QWidget* createEditorPage();
|
QWidget* createEditorPage();
|
||||||
QWidget* createPropertiesPage();
|
QWidget* createPropertiesPage();
|
||||||
QWidget* createMergePage();
|
QWidget* createMergePage();
|
||||||
|
QWidget* createVariablesPage();
|
||||||
QWidget* createPrintPage();
|
QWidget* createPrintPage();
|
||||||
|
|
||||||
void manageActions();
|
void manageActions();
|
||||||
@@ -222,12 +225,14 @@ namespace glabels
|
|||||||
QToolButton* mEditorButton;
|
QToolButton* mEditorButton;
|
||||||
QToolButton* mPropertiesButton;
|
QToolButton* mPropertiesButton;
|
||||||
QToolButton* mMergeButton;
|
QToolButton* mMergeButton;
|
||||||
|
QToolButton* mVariablesButton;
|
||||||
QToolButton* mPrintButton;
|
QToolButton* mPrintButton;
|
||||||
|
|
||||||
QAction* mWelcomeAction;
|
QAction* mWelcomeAction;
|
||||||
QAction* mEditorAction;
|
QAction* mEditorAction;
|
||||||
QAction* mPropertiesAction;
|
QAction* mPropertiesAction;
|
||||||
QAction* mMergeAction;
|
QAction* mMergeAction;
|
||||||
|
QAction* mVariablesAction;
|
||||||
QAction* mPrintAction;
|
QAction* mPrintAction;
|
||||||
|
|
||||||
QStackedWidget* mPages;
|
QStackedWidget* mPages;
|
||||||
@@ -237,6 +242,7 @@ namespace glabels
|
|||||||
ObjectEditor* mObjectEditor;
|
ObjectEditor* mObjectEditor;
|
||||||
PropertiesView* mPropertiesView;
|
PropertiesView* mPropertiesView;
|
||||||
MergeView* mMergeView;
|
MergeView* mMergeView;
|
||||||
|
VariablesView* mVariablesView;
|
||||||
PrintView* mPrintView;
|
PrintView* mPrintView;
|
||||||
|
|
||||||
QLabel* zoomInfoLabel;
|
QLabel* zoomInfoLabel;
|
||||||
@@ -249,6 +255,7 @@ namespace glabels
|
|||||||
QAction* fileShowEditorPageAction;
|
QAction* fileShowEditorPageAction;
|
||||||
QAction* fileShowPropertiesPageAction;
|
QAction* fileShowPropertiesPageAction;
|
||||||
QAction* fileShowMergePageAction;
|
QAction* fileShowMergePageAction;
|
||||||
|
QAction* fileShowVariablesPageAction;
|
||||||
QAction* fileShowPrintPageAction;
|
QAction* fileShowPrintPageAction;
|
||||||
QAction* fileTemplateDesignerAction;
|
QAction* fileTemplateDesignerAction;
|
||||||
QAction* fileCloseAction;
|
QAction* fileCloseAction;
|
||||||
|
|||||||
+13
-21
@@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include "merge/Factory.h"
|
#include "merge/Factory.h"
|
||||||
|
|
||||||
|
#include "model/FileUtil.h"
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
@@ -63,14 +65,7 @@ namespace glabels
|
|||||||
mUndoRedoModel = undoRedoModel;
|
mUndoRedoModel = undoRedoModel;
|
||||||
|
|
||||||
// Initialize CWD
|
// Initialize CWD
|
||||||
if ( model->fileName().isEmpty() )
|
mCwd = mModel->dirPath();
|
||||||
{
|
|
||||||
mCwd = ".";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mCwd = QFileInfo( model->fileName() ).absolutePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
onMergeChanged();
|
onMergeChanged();
|
||||||
connect( mModel, SIGNAL(mergeChanged()), this, SLOT(onMergeChanged()) );
|
connect( mModel, SIGNAL(mergeChanged()), this, SLOT(onMergeChanged()) );
|
||||||
@@ -87,26 +82,22 @@ namespace glabels
|
|||||||
mOldFormatComboIndex = index;
|
mOldFormatComboIndex = index;
|
||||||
formatCombo->setCurrentIndex( index );
|
formatCombo->setCurrentIndex( index );
|
||||||
|
|
||||||
|
QString fn;
|
||||||
|
|
||||||
switch ( merge::Factory::idToType( mModel->merge()->id() ) )
|
switch ( merge::Factory::idToType( mModel->merge()->id() ) )
|
||||||
{
|
{
|
||||||
case merge::Factory::NONE:
|
case merge::Factory::NONE:
|
||||||
case merge::Factory::FIXED:
|
case merge::Factory::FIXED:
|
||||||
locationLabel->setEnabled( false );
|
locationLabel->setEnabled( false );
|
||||||
locationButton->setEnabled( false );
|
locationLineEdit->setText( "" );
|
||||||
locationButton->setText( "" );
|
locationBrowseButton->setVisible( false );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case merge::Factory::FILE:
|
case merge::Factory::FILE:
|
||||||
locationLabel->setEnabled( true );
|
locationLabel->setEnabled( true );
|
||||||
locationButton->setEnabled( true );
|
fn = model::FileUtil::makeRelativeIfInDir( mModel->dir(), mModel->merge()->source() );
|
||||||
if ( mModel->merge()->source().isEmpty() )
|
locationLineEdit->setText( fn );
|
||||||
{
|
locationBrowseButton->setVisible( true );
|
||||||
locationButton->setText( "Select file..." );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
locationButton->setText( mModel->merge()->source() );
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -135,7 +126,8 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void MergeView::onMergeSourceChanged()
|
void MergeView::onMergeSourceChanged()
|
||||||
{
|
{
|
||||||
locationButton->setText( mModel->merge()->source() );
|
QString fn = model::FileUtil::makeRelativeIfInDir( mModel->dir(), mModel->merge()->source() );
|
||||||
|
locationLineEdit->setText( fn );
|
||||||
|
|
||||||
recordsTable->clear();
|
recordsTable->clear();
|
||||||
recordsTable->setColumnCount( 0 );
|
recordsTable->setColumnCount( 0 );
|
||||||
@@ -185,7 +177,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Location button clicked handler
|
/// Location button clicked handler
|
||||||
///
|
///
|
||||||
void MergeView::onLocationButtonClicked()
|
void MergeView::onLocationBrowseButtonClicked()
|
||||||
{
|
{
|
||||||
QString fileName =
|
QString fileName =
|
||||||
QFileDialog::getOpenFileName( this,
|
QFileDialog::getOpenFileName( this,
|
||||||
|
|||||||
+1
-1
@@ -67,7 +67,7 @@ namespace glabels
|
|||||||
void onMergeSelectionChanged();
|
void onMergeSelectionChanged();
|
||||||
|
|
||||||
void onFormatComboActivated();
|
void onFormatComboActivated();
|
||||||
void onLocationButtonClicked();
|
void onLocationBrowseButtonClicked();
|
||||||
void onSelectAllButtonClicked();
|
void onSelectAllButtonClicked();
|
||||||
void onUnselectAllButtonClicked();
|
void onUnselectAllButtonClicked();
|
||||||
void onCellChanged( int iRow, int iCol );
|
void onCellChanged( int iRow, int iCol );
|
||||||
|
|||||||
+38
-20
@@ -30,12 +30,14 @@
|
|||||||
#include "model/ModelImageObject.h"
|
#include "model/ModelImageObject.h"
|
||||||
#include "model/ModelLineObject.h"
|
#include "model/ModelLineObject.h"
|
||||||
#include "model/ModelTextObject.h"
|
#include "model/ModelTextObject.h"
|
||||||
|
#include "model/FileUtil.h"
|
||||||
#include "model/Settings.h"
|
#include "model/Settings.h"
|
||||||
#include "model/Size.h"
|
#include "model/Size.h"
|
||||||
|
|
||||||
#include "merge/Merge.h"
|
#include "merge/Merge.h"
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
#include <QDir>
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
|
|
||||||
@@ -67,9 +69,9 @@ namespace glabels
|
|||||||
barcodeColorButton->init( tr("Default"), QColor(0,0,0,255), QColor(0,0,0,255) );
|
barcodeColorButton->init( tr("Default"), QColor(0,0,0,255), QColor(0,0,0,255) );
|
||||||
shadowColorButton->init( tr("Default"), QColor(0,0,0,255), QColor(0,0,0,255) );
|
shadowColorButton->init( tr("Default"), QColor(0,0,0,255), QColor(0,0,0,255) );
|
||||||
|
|
||||||
textInsertFieldCombo->setName( tr("Insert Field") );
|
textInsertFieldButton->setText( tr("Insert substitution field") );
|
||||||
barcodeInsertFieldCombo->setName( tr("Insert Field") );
|
barcodeInsertFieldButton->setText( tr("Insert substitution field") );
|
||||||
imageFieldCombo->setName( tr("Key") );
|
imageFieldButton->setText( tr("Use substitution field") );
|
||||||
|
|
||||||
setEnabled( false );
|
setEnabled( false );
|
||||||
hidePages();
|
hidePages();
|
||||||
@@ -93,11 +95,14 @@ namespace glabels
|
|||||||
this, SLOT(onSelectionChanged()) );
|
this, SLOT(onSelectionChanged()) );
|
||||||
|
|
||||||
connect( mModel, SIGNAL(mergeSourceChanged()),
|
connect( mModel, SIGNAL(mergeSourceChanged()),
|
||||||
this, SLOT(onMergeSourceChanged()) );
|
this, SLOT(onFieldsAvailableChanged()) );
|
||||||
|
|
||||||
|
connect( mModel, SIGNAL(variablesChanged()),
|
||||||
|
this, SLOT(onFieldsAvailableChanged()) );
|
||||||
|
|
||||||
onLabelSizeChanged();
|
onLabelSizeChanged();
|
||||||
onSelectionChanged();
|
onSelectionChanged();
|
||||||
onMergeSourceChanged();
|
onFieldsAvailableChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -122,12 +127,12 @@ namespace glabels
|
|||||||
|
|
||||||
if ( filenameNode.isField() )
|
if ( filenameNode.isField() )
|
||||||
{
|
{
|
||||||
QString field = QString("${%1}").arg( filenameNode.data() );
|
imageFilenameLineEdit->setText( QString("${%1}").arg(filenameNode.data()) );
|
||||||
imageFilenameLineEdit->setText( field );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
imageFilenameLineEdit->setText( filenameNode.data() );
|
QString fn = model::FileUtil::makeRelativeIfInDir( mModel->dir(), filenameNode.data() );
|
||||||
|
imageFilenameLineEdit->setText( fn );
|
||||||
}
|
}
|
||||||
|
|
||||||
mBlocked = false;
|
mBlocked = false;
|
||||||
@@ -188,6 +193,7 @@ namespace glabels
|
|||||||
|
|
||||||
sizeWSpin->setValue( mObject->w().inUnits(mUnits) );
|
sizeWSpin->setValue( mObject->w().inUnits(mUnits) );
|
||||||
sizeHSpin->setValue( mObject->h().inUnits(mUnits) );
|
sizeHSpin->setValue( mObject->h().inUnits(mUnits) );
|
||||||
|
sizeAspectCheck->setChecked( mObject->lockAspectRatio() );
|
||||||
|
|
||||||
model::Size originalSize = mObject->naturalSize();
|
model::Size originalSize = mObject->naturalSize();
|
||||||
QString originalSizeString = QString( "%1: %2 x %3 %4" )
|
QString originalSizeString = QString( "%1: %2 x %3 %4" )
|
||||||
@@ -454,8 +460,8 @@ namespace glabels
|
|||||||
|
|
||||||
loadTextPage();
|
loadTextPage();
|
||||||
loadPositionPage();
|
loadPositionPage();
|
||||||
|
loadRectSizePage();
|
||||||
loadShadowPage();
|
loadShadowPage();
|
||||||
loadRectSizePage();
|
|
||||||
|
|
||||||
setEnabled( true );
|
setEnabled( true );
|
||||||
}
|
}
|
||||||
@@ -473,6 +479,7 @@ namespace glabels
|
|||||||
|
|
||||||
loadBarcodePage();
|
loadBarcodePage();
|
||||||
loadPositionPage();
|
loadPositionPage();
|
||||||
|
loadRectSizePage();
|
||||||
|
|
||||||
setEnabled( true );
|
setEnabled( true );
|
||||||
}
|
}
|
||||||
@@ -497,17 +504,19 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ObjectEditor::onMergeSourceChanged()
|
void ObjectEditor::onFieldsAvailableChanged()
|
||||||
{
|
{
|
||||||
if ( !mBlocked )
|
if ( !mBlocked )
|
||||||
{
|
{
|
||||||
QStringList keys = mModel->merge()->keys();
|
lineColorButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
lineColorButton->setKeys( keys );
|
fillColorButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
fillColorButton->setKeys( keys );
|
textColorButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
textInsertFieldCombo->setKeys( keys );
|
barcodeColorButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
barcodeInsertFieldCombo->setKeys( keys );
|
shadowColorButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
imageFieldCombo->setKeys( keys );
|
|
||||||
shadowColorButton->setKeys( keys );
|
textInsertFieldButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
|
barcodeInsertFieldButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
|
imageFieldButton->setKeys( mModel->merge(), mModel->variables() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -618,8 +627,11 @@ namespace glabels
|
|||||||
|
|
||||||
void ObjectEditor::onImageKeySelected( QString key )
|
void ObjectEditor::onImageKeySelected( QString key )
|
||||||
{
|
{
|
||||||
mUndoRedoModel->checkpoint( tr("Set image") );
|
if ( mObject )
|
||||||
mObject->setFilenameNode( model::TextNode( true, key ) );
|
{
|
||||||
|
mUndoRedoModel->checkpoint( tr("Set image") );
|
||||||
|
mObject->setFilenameNode( model::TextNode( true, key ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -629,7 +641,7 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
mBlocked = true;
|
mBlocked = true;
|
||||||
|
|
||||||
mUndoRedoModel->checkpoint( tr("Move") );
|
mUndoRedoModel->checkpoint( tr("Position") );
|
||||||
|
|
||||||
model::Distance x = model::Distance(posXSpin->value(), mUnits);
|
model::Distance x = model::Distance(posXSpin->value(), mUnits);
|
||||||
model::Distance y = model::Distance(posYSpin->value(), mUnits);
|
model::Distance y = model::Distance(posYSpin->value(), mUnits);
|
||||||
@@ -654,6 +666,7 @@ namespace glabels
|
|||||||
|
|
||||||
if ( sizeAspectCheck->isChecked() )
|
if ( sizeAspectCheck->isChecked() )
|
||||||
{
|
{
|
||||||
|
mObject->setLockAspectRatio( true );
|
||||||
if ( fabs(spinW - mObject->w()) > fabs(spinH - mObject->h()) )
|
if ( fabs(spinW - mObject->w()) > fabs(spinH - mObject->h()) )
|
||||||
{
|
{
|
||||||
mObject->setWHonorAspect( spinW );
|
mObject->setWHonorAspect( spinW );
|
||||||
@@ -667,6 +680,7 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
mObject->setLockAspectRatio( false );
|
||||||
mObject->setSize( spinW, spinH );
|
mObject->setSize( spinW, spinH );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -740,6 +754,8 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
mBlocked = true;
|
mBlocked = true;
|
||||||
|
|
||||||
|
mUndoRedoModel->checkpoint( tr("Barcode") );
|
||||||
|
|
||||||
barcode::Style bcStyle = barcodeStyleButton->bcStyle();
|
barcode::Style bcStyle = barcodeStyleButton->bcStyle();
|
||||||
|
|
||||||
barcodeShowTextCheck->setEnabled( bcStyle.textOptional() );
|
barcodeShowTextCheck->setEnabled( bcStyle.textOptional() );
|
||||||
@@ -774,6 +790,8 @@ namespace glabels
|
|||||||
|
|
||||||
void ObjectEditor::onResetImageSize()
|
void ObjectEditor::onResetImageSize()
|
||||||
{
|
{
|
||||||
|
mUndoRedoModel->checkpoint( tr("Reset") );
|
||||||
|
|
||||||
mObject->setSize( mObject->naturalSize() );
|
mObject->setSize( mObject->naturalSize() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ namespace glabels
|
|||||||
void onSettingsChanged();
|
void onSettingsChanged();
|
||||||
void onLabelSizeChanged();
|
void onLabelSizeChanged();
|
||||||
void onSelectionChanged();
|
void onSelectionChanged();
|
||||||
void onMergeSourceChanged();
|
void onFieldsAvailableChanged();
|
||||||
void onObjectChanged();
|
void onObjectChanged();
|
||||||
void onObjectMoved();
|
void onObjectMoved();
|
||||||
void onObjectDestroyed();
|
void onObjectDestroyed();
|
||||||
|
|||||||
@@ -70,6 +70,9 @@ namespace glabels
|
|||||||
|
|
||||||
connect( mModel, SIGNAL(changed()), this, SLOT(onModelChanged()) );
|
connect( mModel, SIGNAL(changed()), this, SLOT(onModelChanged()) );
|
||||||
|
|
||||||
|
copiesSpin->setRange( 1, 100*mModel->frame()->nLabels() );
|
||||||
|
copiesStartSpin->setRange( 1, mModel->frame()->nLabels() );
|
||||||
|
|
||||||
onFormChanged();
|
onFormChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +82,9 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void PrintView::onModelChanged()
|
void PrintView::onModelChanged()
|
||||||
{
|
{
|
||||||
|
copiesSpin->setRange( 1, 100*mModel->frame()->nLabels() );
|
||||||
|
copiesStartSpin->setRange( 1, mModel->frame()->nLabels() );
|
||||||
|
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,8 +94,6 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void PrintView::updateView()
|
void PrintView::updateView()
|
||||||
{
|
{
|
||||||
copiesStartSpin->setRange( 1, mModel->frame()->nLabels() );
|
|
||||||
|
|
||||||
if ( mRenderer.nPages() == 1 )
|
if ( mRenderer.nPages() == 1 )
|
||||||
{
|
{
|
||||||
if ( mRenderer.nItems() == 1 )
|
if ( mRenderer.nItems() == 1 )
|
||||||
|
|||||||
@@ -0,0 +1,254 @@
|
|||||||
|
/* VariablesView.cpp
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "VariablesView.h"
|
||||||
|
|
||||||
|
#include "EditVariableDialog.h"
|
||||||
|
|
||||||
|
#include <QTableWidgetItem>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
enum ICol {
|
||||||
|
I_COL_NAME,
|
||||||
|
I_COL_TYPE,
|
||||||
|
I_COL_VALUE,
|
||||||
|
I_COL_INCREMENT,
|
||||||
|
I_COL_STEP_SIZE,
|
||||||
|
I_COL_DUMMY,
|
||||||
|
N_COLS
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace glabels
|
||||||
|
{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Constructor
|
||||||
|
///
|
||||||
|
VariablesView::VariablesView( QWidget *parent )
|
||||||
|
: QWidget(parent), mModel(nullptr), mUndoRedoModel(nullptr)
|
||||||
|
{
|
||||||
|
setupUi( this );
|
||||||
|
|
||||||
|
titleLabel->setText( QString( "<span style='font-size:18pt;'>%1</span>" ).arg( tr("Variables") ) );
|
||||||
|
|
||||||
|
table->setColumnCount( N_COLS );
|
||||||
|
|
||||||
|
auto* nameHeaderItem = new QTableWidgetItem( tr("Name") );
|
||||||
|
nameHeaderItem->setFlags( nameHeaderItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setHorizontalHeaderItem( I_COL_NAME, nameHeaderItem );
|
||||||
|
|
||||||
|
auto* typeHeaderItem = new QTableWidgetItem( tr("Type") );
|
||||||
|
typeHeaderItem->setFlags( typeHeaderItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setHorizontalHeaderItem( I_COL_TYPE, typeHeaderItem );
|
||||||
|
|
||||||
|
auto* valueHeaderItem = new QTableWidgetItem( tr("Value") );
|
||||||
|
valueHeaderItem->setFlags( valueHeaderItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setHorizontalHeaderItem( I_COL_VALUE, valueHeaderItem );
|
||||||
|
|
||||||
|
auto* incrementHeaderItem = new QTableWidgetItem( tr("Increment") );
|
||||||
|
incrementHeaderItem->setFlags( incrementHeaderItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setHorizontalHeaderItem( I_COL_INCREMENT, incrementHeaderItem );
|
||||||
|
|
||||||
|
auto* stepSizeHeaderItem = new QTableWidgetItem( tr("Step Size") );
|
||||||
|
stepSizeHeaderItem->setFlags( stepSizeHeaderItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setHorizontalHeaderItem( I_COL_STEP_SIZE, stepSizeHeaderItem );
|
||||||
|
|
||||||
|
auto* dummyHeaderItem = new QTableWidgetItem();
|
||||||
|
dummyHeaderItem->setFlags( Qt::NoItemFlags );
|
||||||
|
table->setHorizontalHeaderItem( I_COL_DUMMY, dummyHeaderItem );
|
||||||
|
table->horizontalHeader()->setStretchLastSection( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Destructor
|
||||||
|
///
|
||||||
|
VariablesView::~VariablesView()
|
||||||
|
{
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Set Model
|
||||||
|
///
|
||||||
|
void VariablesView::setModel( model::Model* model, UndoRedoModel* undoRedoModel )
|
||||||
|
{
|
||||||
|
mModel = model;
|
||||||
|
mUndoRedoModel = undoRedoModel;
|
||||||
|
|
||||||
|
updateControls();
|
||||||
|
loadTable();
|
||||||
|
|
||||||
|
connect( mModel, SIGNAL(variablesChanged()), this, SLOT(onVariablesChanged()) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// table Selection Changed
|
||||||
|
///
|
||||||
|
void VariablesView::onTableSelectionChanged()
|
||||||
|
{
|
||||||
|
updateControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// addButton Clicked
|
||||||
|
///
|
||||||
|
void VariablesView::onAddButtonClicked()
|
||||||
|
{
|
||||||
|
EditVariableDialog dialog( this );
|
||||||
|
|
||||||
|
model::Variable v( model::Variable::Type::INTEGER,
|
||||||
|
"x",
|
||||||
|
"0",
|
||||||
|
model::Variable::Increment::NEVER,
|
||||||
|
"1" );
|
||||||
|
dialog.setVariable( v );
|
||||||
|
dialog.setWindowTitle( tr("Add Variable") );
|
||||||
|
|
||||||
|
if ( dialog.exec() == QDialog::Accepted )
|
||||||
|
{
|
||||||
|
mModel->variables()->addVariable( dialog.variable() );
|
||||||
|
selectVariable( dialog.variable().name() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// editButton Clicked
|
||||||
|
///
|
||||||
|
void VariablesView::onEditButtonClicked()
|
||||||
|
{
|
||||||
|
int iRow = table->selectedItems()[0]->row();
|
||||||
|
QString name = table->item( iRow, I_COL_NAME )->text();
|
||||||
|
|
||||||
|
if ( mModel->variables()->hasVariable( name ) )
|
||||||
|
{
|
||||||
|
model::Variable v = mModel->variables()->value( name );
|
||||||
|
|
||||||
|
EditVariableDialog dialog( this );
|
||||||
|
dialog.setVariable( v );
|
||||||
|
dialog.setWindowTitle( tr("Edit Variable") );
|
||||||
|
|
||||||
|
if ( dialog.exec() == QDialog::Accepted )
|
||||||
|
{
|
||||||
|
mModel->variables()->replaceVariable( name, dialog.variable() );
|
||||||
|
selectVariable( dialog.variable().name() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// deleteButton Clicked
|
||||||
|
///
|
||||||
|
void VariablesView::onDeleteButtonClicked()
|
||||||
|
{
|
||||||
|
int iRow = table->selectedItems()[0]->row();
|
||||||
|
|
||||||
|
QString name = table->item( iRow, I_COL_NAME )->text();
|
||||||
|
mModel->variables()->deleteVariable( name );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Variables Changed
|
||||||
|
///
|
||||||
|
void VariablesView::onVariablesChanged()
|
||||||
|
{
|
||||||
|
// Reload table from variables
|
||||||
|
loadTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// update controls
|
||||||
|
///
|
||||||
|
void VariablesView::updateControls()
|
||||||
|
{
|
||||||
|
bool hasSelection = !table->selectedItems().isEmpty();
|
||||||
|
|
||||||
|
editButton->setEnabled( hasSelection );
|
||||||
|
deleteButton->setEnabled( hasSelection );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// load table from variables
|
||||||
|
///
|
||||||
|
void VariablesView::loadTable()
|
||||||
|
{
|
||||||
|
table->clearContents();
|
||||||
|
table->setRowCount( mModel->variables()->size() );
|
||||||
|
|
||||||
|
int iRow = 0;
|
||||||
|
for( const auto& v : *mModel->variables() )
|
||||||
|
{
|
||||||
|
auto* typeItem = new QTableWidgetItem( model::Variable::typeToI18nString(v.type()) );
|
||||||
|
typeItem->setFlags( typeItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setItem( iRow, I_COL_TYPE, typeItem );
|
||||||
|
|
||||||
|
auto* nameItem = new QTableWidgetItem( v.name() );
|
||||||
|
nameItem->setFlags( nameItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setItem( iRow, I_COL_NAME, nameItem );
|
||||||
|
|
||||||
|
auto* valueItem = new QTableWidgetItem( v.initialValue() );
|
||||||
|
valueItem->setFlags( valueItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setItem( iRow, I_COL_VALUE, valueItem );
|
||||||
|
|
||||||
|
auto* incrementItem = new QTableWidgetItem( model::Variable::incrementToI18nString(v.increment()) );
|
||||||
|
incrementItem->setFlags( incrementItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setItem( iRow, I_COL_INCREMENT, incrementItem );
|
||||||
|
|
||||||
|
auto* stepSizeItem = new QTableWidgetItem( v.stepSize() );
|
||||||
|
stepSizeItem->setFlags( stepSizeItem->flags() ^ Qt::ItemIsEditable );
|
||||||
|
table->setItem( iRow, I_COL_STEP_SIZE, stepSizeItem );
|
||||||
|
|
||||||
|
table->showRow( iRow );
|
||||||
|
iRow++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void VariablesView::selectVariable( const QString& name )
|
||||||
|
{
|
||||||
|
int iRow = 0;
|
||||||
|
for( const auto& v : *mModel->variables() )
|
||||||
|
{
|
||||||
|
if ( v.name() == name )
|
||||||
|
{
|
||||||
|
table->setCurrentCell( iRow, 0,
|
||||||
|
(QItemSelectionModel::Select|QItemSelectionModel::Rows) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
iRow++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace glabels
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
/* VariablesView.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 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 VariablesView_h
|
||||||
|
#define VariablesView_h
|
||||||
|
|
||||||
|
|
||||||
|
#include "ui_VariablesView.h"
|
||||||
|
|
||||||
|
#include "model/Model.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace glabels
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward references
|
||||||
|
class UndoRedoModel;
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Variables Property Editor Widget
|
||||||
|
///
|
||||||
|
class VariablesView : public QWidget, public Ui_VariablesView
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Life Cycle
|
||||||
|
/////////////////////////////////
|
||||||
|
public:
|
||||||
|
VariablesView( QWidget *parent = nullptr );
|
||||||
|
~VariablesView() override;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Public methods
|
||||||
|
/////////////////////////////////
|
||||||
|
void setModel( model::Model* model, UndoRedoModel* undoRedoModel );
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Slots
|
||||||
|
/////////////////////////////////
|
||||||
|
private slots:
|
||||||
|
void onTableSelectionChanged();
|
||||||
|
void onAddButtonClicked();
|
||||||
|
void onEditButtonClicked();
|
||||||
|
void onDeleteButtonClicked();
|
||||||
|
void onVariablesChanged();
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Private methods
|
||||||
|
/////////////////////////////////
|
||||||
|
private:
|
||||||
|
void updateControls();
|
||||||
|
void loadTable();
|
||||||
|
void selectVariable( const QString& name );
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Private Data
|
||||||
|
/////////////////////////////////
|
||||||
|
private:
|
||||||
|
model::Model* mModel;
|
||||||
|
UndoRedoModel* mUndoRedoModel;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif // VariablesView_h
|
||||||
@@ -102,6 +102,7 @@
|
|||||||
<file>icons/flat/48x48/glabels-merge.svg</file>
|
<file>icons/flat/48x48/glabels-merge.svg</file>
|
||||||
<file>icons/flat/48x48/glabels-print.svg</file>
|
<file>icons/flat/48x48/glabels-print.svg</file>
|
||||||
<file>icons/flat/48x48/glabels-properties.svg</file>
|
<file>icons/flat/48x48/glabels-properties.svg</file>
|
||||||
|
<file>icons/flat/48x48/glabels-variables.svg</file>
|
||||||
<file>icons/apps/48x48/glabels.svg</file>
|
<file>icons/apps/48x48/glabels.svg</file>
|
||||||
|
|
||||||
<file>icons/apps/128x128/glabels.svg</file>
|
<file>icons/apps/128x128/glabels.svg</file>
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="48" height="48" >
|
||||||
|
|
||||||
|
<g transform="translate(0,-282.3)" >
|
||||||
|
<g style="fill:#333333;fill-opacity:1;stroke:none" transform="scale(0.87836138,1.1384836)" >
|
||||||
|
<path
|
||||||
|
d="M 7.9978635,276.23327 Q 6.4616456,276.08696 5.5106536,275.74558 4.584046,275.4042 4.1207422,275.13597 l 0.9266076,-2.38967 q 0.7803012,0.36576 1.8288308,0.68276 1.0485297,0.29261 2.2189814,0.29261 1.365527,0 1.901984,-0.34138 0.536457,-0.36576 0.536457,-1.12168 0,-0.43892 -0.21946,-0.75592 -0.195075,-0.31699 -0.60961,-0.56084 -0.39015,-0.26823 -0.9753763,-0.4633 -0.5852259,-0.21946 -1.3167582,-0.48769 -0.7071479,-0.24384 -1.3899114,-0.56084 -0.6827635,-0.317 -1.2192206,-0.75592 -0.536457,-0.4633 -0.8778387,-1.0973 -0.3169974,-0.65838 -0.3169974,-1.60937 0,-0.68276 0.1706909,-1.31676 0.1950753,-0.63399 0.5852259,-1.17045 0.4145349,-0.53646 1.072914,-0.92661 0.6583791,-0.41453 1.6093711,-0.63399 v -2.36529 h 2.7798227 v 2.24337 q 1.121683,0.0975 1.975137,0.34138 0.877839,0.24384 1.365527,0.43892 l -0.682763,2.51159 q -0.707148,-0.29261 -1.682524,-0.51207 -0.950992,-0.24384 -1.9751377,-0.24384 -1.1704517,0 -1.6337555,0.41453 -0.4389194,0.41454 -0.4389194,0.97538 0,0.39015 0.1463065,0.65838 0.1706909,0.24384 0.4876882,0.43892 0.3413818,0.19507 0.8046856,0.39015 0.4633038,0.17069 1.0972983,0.39015 0.950992,0.36576 1.755678,0.7803 0.804685,0.39015 1.389911,0.92661 0.585226,0.51207 0.902223,1.21922 0.341382,0.70714 0.341382,1.65814 0,0.65838 -0.195075,1.31675 -0.195075,0.634 -0.658379,1.19484 -0.43892,0.53646 -1.194836,0.95099 -0.731533,0.39015 -1.853216,0.56084 v 2.60914 H 7.9978635 Z" />
|
||||||
|
<path
|
||||||
|
d="m 20.043762,269.96647 q 1.316759,0.24385 1.8776,1.07292 0.585226,0.82907 0.585226,2.38967 v 2.75544 q 0,1.02415 0.292613,1.48745 0.292613,0.4633 1.072914,0.4633 h 2.26775 v 2.34091 h -2.535979 q -2.194597,0 -3.048051,-0.951 -0.82907,-0.95099 -0.82907,-2.75543 v -3.58451 q 0,-1.02415 -0.316997,-1.53622 -0.316998,-0.53646 -1.072914,-0.53646 h -1.316758 v -2.3409 h 1.316758 q 0.755916,0 1.072914,-0.51207 0.316997,-0.53646 0.316997,-1.53622 v -3.60889 q 0,-1.80445 0.82907,-2.75544 0.853454,-0.95099 3.048051,-0.95099 h 2.535979 v 2.3409 h -2.26775 q -0.780301,0 -1.072914,0.4633 -0.292613,0.43892 -0.292613,1.48745 v 2.75544 q 0,1.5606 -0.585226,2.38967 -0.560841,0.82907 -1.8776,1.12168 z" />
|
||||||
|
<path
|
||||||
|
d="m 33.869723,268.57656 2.340904,-3.5845 h 3.048051 l -3.70643,5.51087 q 0.585226,0.70715 1.146067,1.51184 0.560842,0.7803 1.072914,1.58498 0.512073,0.80469 0.926608,1.53622 0.414535,0.73153 0.707148,1.31676 H 36.28378 q -0.658379,-1.24361 -1.316758,-2.21898 -0.658379,-0.97538 -1.243605,-1.75568 -0.731532,0.97538 -1.316758,1.90198 -0.585226,0.92661 -1.194836,2.07268 h -3.048052 q 0.365766,-0.68277 0.82907,-1.4143 0.487688,-0.75591 0.999761,-1.51183 0.536457,-0.7803 1.097299,-1.53622 0.585225,-0.75592 1.121683,-1.43868 l -4.023428,-5.55964 h 3.145589 z" />
|
||||||
|
<path
|
||||||
|
d="m 47.500607,269.91771 q -1.316758,-0.24385 -1.901984,-1.07292 -0.585226,-0.82907 -0.585226,-2.38967 v -2.75544 q 0,-1.02414 -0.292613,-1.48745 -0.292613,-0.4633 -1.072914,-0.4633 h -2.243366 v -2.3409 h 2.511595 q 1.097298,0 1.828831,0.24384 0.755916,0.24384 1.194836,0.70715 0.463304,0.4633 0.658379,1.17045 0.195075,0.68276 0.195075,1.58499 v 3.5845 q 0,1.02415 0.316997,1.56061 0.316998,0.51207 1.072915,0.51207 h 1.341142 v 2.3409 h -1.341142 q -0.755917,0 -1.072915,0.53646 -0.316997,0.51207 -0.316997,1.51183 v 3.6089 q 0,0.90222 -0.195075,1.58498 -0.195075,0.70715 -0.658379,1.17045 -0.43892,0.46331 -1.194836,0.70715 -0.731533,0.24385 -1.828831,0.24385 h -2.511595 v -2.34091 h 2.243366 q 0.780301,0 1.072914,-0.4633 0.292613,-0.43892 0.292613,-1.48745 v -2.75544 q 0,-1.5606 0.585226,-2.38967 0.585226,-0.82907 1.901984,-1.12168 z" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 177 B After Width: | Height: | Size: 2.8 KiB |
+1
-1
@@ -45,7 +45,7 @@ int main( int argc, char **argv )
|
|||||||
QCoreApplication::setOrganizationName( "glabels.org" );
|
QCoreApplication::setOrganizationName( "glabels.org" );
|
||||||
QCoreApplication::setOrganizationDomain( "glabels.org" );
|
QCoreApplication::setOrganizationDomain( "glabels.org" );
|
||||||
QCoreApplication::setApplicationName( "glabels-qt" );
|
QCoreApplication::setApplicationName( "glabels-qt" );
|
||||||
QCoreApplication::setApplicationVersion( glabels::model::Version::STRING );
|
QCoreApplication::setApplicationVersion( glabels::model::Version::LONG_STRING );
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup translators
|
// Setup translators
|
||||||
|
|||||||
@@ -0,0 +1,274 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>EditVariableDialog</class>
|
||||||
|
<widget class="QDialog" name="EditVariableDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>469</width>
|
||||||
|
<height>297</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<property name="verticalSpacing">
|
||||||
|
<number>12</number>
|
||||||
|
</property>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QGroupBox" name="incrementGroup">
|
||||||
|
<property name="title">
|
||||||
|
<string>Increment</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="incrementCombo"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="stepSizeLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Step size:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="stepSizeEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<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>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="title">
|
||||||
|
<string>Variable</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="nameEdit"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Value:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="typeCombo"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Type:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="valueEdit"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="glabels::ColorButton" name="colorValueButton">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>glabels::ColorButton</class>
|
||||||
|
<extends>QPushButton</extends>
|
||||||
|
<header>ColorButton.h</header>
|
||||||
|
<slots>
|
||||||
|
<signal>colorChanged()</signal>
|
||||||
|
</slots>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>236</x>
|
||||||
|
<y>287</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>236</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>304</x>
|
||||||
|
<y>287</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>236</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>typeCombo</sender>
|
||||||
|
<signal>currentIndexChanged(int)</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>onTypeComboChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>252</x>
|
||||||
|
<y>70</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>33</x>
|
||||||
|
<y>161</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>incrementCombo</sender>
|
||||||
|
<signal>currentIndexChanged(int)</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>onIncrementComboChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>100</x>
|
||||||
|
<y>223</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>97</x>
|
||||||
|
<y>176</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>stepSizeEdit</sender>
|
||||||
|
<signal>textChanged(QString)</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>onStepSizeEditChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>440</x>
|
||||||
|
<y>223</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>333</x>
|
||||||
|
<y>166</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>nameEdit</sender>
|
||||||
|
<signal>textChanged(QString)</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>onNameEditChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>440</x>
|
||||||
|
<y>103</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>393</x>
|
||||||
|
<y>165</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>valueEdit</sender>
|
||||||
|
<signal>textChanged(QString)</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>onValueEditChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>318</x>
|
||||||
|
<y>129</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>459</x>
|
||||||
|
<y>157</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>colorValueButton</sender>
|
||||||
|
<signal>colorChanged()</signal>
|
||||||
|
<receiver>EditVariableDialog</receiver>
|
||||||
|
<slot>onColorValueButtonChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>406</x>
|
||||||
|
<y>114</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>458</x>
|
||||||
|
<y>122</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>onTypeComboChanged()</slot>
|
||||||
|
<slot>onValueEditChanged()</slot>
|
||||||
|
<slot>onIncrementComboChanged()</slot>
|
||||||
|
<slot>onStepSizeEditChanged()</slot>
|
||||||
|
<slot>onNameEditChanged()</slot>
|
||||||
|
<slot>onColorValueButtonChanged()</slot>
|
||||||
|
</slots>
|
||||||
|
</ui>
|
||||||
+60
-49
@@ -11,12 +11,21 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<property name="margin">
|
<property name="leftMargin">
|
||||||
|
<number>12</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>12</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>12</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
<number>12</number>
|
<number>12</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
@@ -37,16 +46,9 @@
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Source</string>
|
<string>Source</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="1">
|
||||||
<item row="0" column="0">
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QPushButton" name="locationButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Location</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -54,6 +56,27 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="formatCombo"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="locationLineEdit">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="locationBrowseButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Browse...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="locationLabel">
|
<widget class="QLabel" name="locationLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -61,24 +84,8 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QComboBox" name="formatCombo"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>360</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -89,7 +96,11 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QTableWidget" name="recordsTable"/>
|
<widget class="QTableWidget" name="recordsTable">
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
@@ -138,8 +149,8 @@
|
|||||||
<slot>onSelectAllButtonClicked()</slot>
|
<slot>onSelectAllButtonClicked()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>63</x>
|
<x>97</x>
|
||||||
<y>571</y>
|
<y>570</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>69</x>
|
<x>69</x>
|
||||||
@@ -163,22 +174,6 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
|
||||||
<sender>locationButton</sender>
|
|
||||||
<signal>clicked()</signal>
|
|
||||||
<receiver>MergeView</receiver>
|
|
||||||
<slot>onLocationButtonClicked()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>174</x>
|
|
||||||
<y>93</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>570</x>
|
|
||||||
<y>75</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
<connection>
|
||||||
<sender>formatCombo</sender>
|
<sender>formatCombo</sender>
|
||||||
<signal>activated(int)</signal>
|
<signal>activated(int)</signal>
|
||||||
@@ -186,8 +181,8 @@
|
|||||||
<slot>onFormatComboActivated()</slot>
|
<slot>onFormatComboActivated()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>162</x>
|
<x>257</x>
|
||||||
<y>48</y>
|
<y>109</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>563</x>
|
<x>563</x>
|
||||||
@@ -195,11 +190,27 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>locationBrowseButton</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>MergeView</receiver>
|
||||||
|
<slot>onLocationBrowseButtonClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>296</x>
|
||||||
|
<y>130</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>565</x>
|
||||||
|
<y>149</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
<slots>
|
<slots>
|
||||||
<slot>onSelectAllButtonClicked()</slot>
|
<slot>onSelectAllButtonClicked()</slot>
|
||||||
<slot>onUnselectAllButtonClicked()</slot>
|
<slot>onUnselectAllButtonClicked()</slot>
|
||||||
<slot>onLocationButtonClicked()</slot>
|
|
||||||
<slot>onFormatComboActivated()</slot>
|
<slot>onFormatComboActivated()</slot>
|
||||||
|
<slot>onLocationBrowseButtonClicked()</slot>
|
||||||
</slots>
|
</slots>
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
+188
-180
@@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>400</width>
|
<width>400</width>
|
||||||
<height>640</height>
|
<height>648</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@@ -29,9 +29,9 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_5">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
<item>
|
<item>
|
||||||
@@ -579,7 +579,11 @@
|
|||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="glabels::FieldButton" name="textInsertFieldCombo"/>
|
<widget class="glabels::FieldButton" name="textInsertFieldButton">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">Insert field</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="horizontalSpacer_2">
|
||||||
@@ -729,7 +733,11 @@
|
|||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="glabels::FieldButton" name="barcodeInsertFieldCombo"/>
|
<widget class="glabels::FieldButton" name="barcodeInsertFieldButton">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">Insert field</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_12">
|
<spacer name="horizontalSpacer_12">
|
||||||
@@ -758,14 +766,27 @@
|
|||||||
<string>Image</string>
|
<string>Image</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_13">
|
<layout class="QGridLayout" name="gridLayout_13">
|
||||||
<item row="0" column="0">
|
<item row="2" column="0">
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>646</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
<widget class="QGroupBox" name="groupBox_9">
|
<widget class="QGroupBox" name="groupBox_9">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>File</string>
|
<string>File</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_12">
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
<layout class="QHBoxLayout" name="horizontalLayout_17">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLineEdit" name="imageFilenameLineEdit">
|
<widget class="QLineEdit" name="imageFilenameLineEdit">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@@ -789,68 +810,47 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_17" stretch="1,0,1">
|
<widget class="QPushButton" name="imageBrowseButton">
|
||||||
<item>
|
<property name="sizePolicy">
|
||||||
<widget class="QPushButton" name="imageFileButton">
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
<property name="sizePolicy">
|
<horstretch>0</horstretch>
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
<verstretch>0</verstretch>
|
||||||
<horstretch>0</horstretch>
|
</sizepolicy>
|
||||||
<verstretch>0</verstretch>
|
</property>
|
||||||
</sizepolicy>
|
<property name="text">
|
||||||
</property>
|
<string>Browse...</string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Select File...</string>
|
</widget>
|
||||||
</property>
|
</item>
|
||||||
</widget>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<layout class="QHBoxLayout" name="horizontalLayout_27">
|
||||||
<property name="sizePolicy">
|
<item>
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
<spacer name="horizontalSpacer_13">
|
||||||
<horstretch>0</horstretch>
|
<property name="orientation">
|
||||||
<verstretch>0</verstretch>
|
<enum>Qt::Horizontal</enum>
|
||||||
</sizepolicy>
|
</property>
|
||||||
</property>
|
<property name="sizeHint" stdset="0">
|
||||||
<property name="text">
|
<size>
|
||||||
<string>or</string>
|
<width>40</width>
|
||||||
</property>
|
<height>20</height>
|
||||||
</widget>
|
</size>
|
||||||
</item>
|
</property>
|
||||||
<item>
|
</spacer>
|
||||||
<widget class="glabels::FieldButton" name="imageFieldCombo">
|
</item>
|
||||||
<property name="sizePolicy">
|
<item>
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<widget class="glabels::FieldButton" name="imageFieldButton">
|
||||||
<horstretch>0</horstretch>
|
<property name="text">
|
||||||
<verstretch>0</verstretch>
|
<string notr="true">Use field</string>
|
||||||
</sizepolicy>
|
</property>
|
||||||
</property>
|
</widget>
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Select Merge Field...</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
|
||||||
<spacer name="verticalSpacer_3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>646</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="lineFillPage">
|
<widget class="QWidget" name="lineFillPage">
|
||||||
@@ -1202,16 +1202,7 @@
|
|||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>15</number>
|
<number>15</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="leftMargin">
|
<property name="margin">
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
@@ -1529,14 +1520,6 @@
|
|||||||
<signal>colorChanged()</signal>
|
<signal>colorChanged()</signal>
|
||||||
</slots>
|
</slots>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
<customwidget>
|
|
||||||
<class>glabels::FieldButton</class>
|
|
||||||
<extends>QComboBox</extends>
|
|
||||||
<header>FieldButton.h</header>
|
|
||||||
<slots>
|
|
||||||
<signal>keySelected(QString)</signal>
|
|
||||||
</slots>
|
|
||||||
</customwidget>
|
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>glabels::BarcodeMenuButton</class>
|
<class>glabels::BarcodeMenuButton</class>
|
||||||
<extends>QPushButton</extends>
|
<extends>QPushButton</extends>
|
||||||
@@ -1545,6 +1528,14 @@
|
|||||||
<signal>selectionChanged()</signal>
|
<signal>selectionChanged()</signal>
|
||||||
</slots>
|
</slots>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>glabels::FieldButton</class>
|
||||||
|
<extends>QPushButton</extends>
|
||||||
|
<header>FieldButton.h</header>
|
||||||
|
<slots>
|
||||||
|
<signal>keySelected(QString)</signal>
|
||||||
|
</slots>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../icons.qrc"/>
|
<include location="../icons.qrc"/>
|
||||||
@@ -1653,8 +1644,8 @@
|
|||||||
<slot>onTextControlsChanged()</slot>
|
<slot>onTextControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>157</x>
|
<x>160</x>
|
||||||
<y>333</y>
|
<y>332</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>396</x>
|
<x>396</x>
|
||||||
@@ -1669,8 +1660,8 @@
|
|||||||
<slot>onTextControlsChanged()</slot>
|
<slot>onTextControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>198</x>
|
<x>200</x>
|
||||||
<y>333</y>
|
<y>332</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>398</x>
|
<x>398</x>
|
||||||
@@ -1685,8 +1676,8 @@
|
|||||||
<slot>onTextControlsChanged()</slot>
|
<slot>onTextControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>238</x>
|
<x>240</x>
|
||||||
<y>333</y>
|
<y>332</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>395</x>
|
<x>395</x>
|
||||||
@@ -1701,8 +1692,8 @@
|
|||||||
<slot>onTextControlsChanged()</slot>
|
<slot>onTextControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>284</x>
|
<x>286</x>
|
||||||
<y>333</y>
|
<y>332</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>393</x>
|
<x>393</x>
|
||||||
@@ -1717,8 +1708,8 @@
|
|||||||
<slot>onTextControlsChanged()</slot>
|
<slot>onTextControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>325</x>
|
<x>326</x>
|
||||||
<y>333</y>
|
<y>332</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>396</x>
|
<x>396</x>
|
||||||
@@ -1734,7 +1725,7 @@
|
|||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>365</x>
|
<x>365</x>
|
||||||
<y>333</y>
|
<y>332</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>397</x>
|
<x>397</x>
|
||||||
@@ -1749,8 +1740,8 @@
|
|||||||
<slot>onTextControlsChanged()</slot>
|
<slot>onTextControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>184</x>
|
<x>189</x>
|
||||||
<y>407</y>
|
<y>404</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>394</x>
|
<x>394</x>
|
||||||
@@ -1766,7 +1757,7 @@
|
|||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>178</x>
|
<x>178</x>
|
||||||
<y>143</y>
|
<y>139</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>392</x>
|
<x>392</x>
|
||||||
@@ -1781,8 +1772,8 @@
|
|||||||
<slot>onLineControlsChanged()</slot>
|
<slot>onLineControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>137</x>
|
<x>136</x>
|
||||||
<y>179</y>
|
<y>174</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
@@ -1797,8 +1788,8 @@
|
|||||||
<slot>onFillControlsChanged()</slot>
|
<slot>onFillControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>136</x>
|
<x>135</x>
|
||||||
<y>263</y>
|
<y>256</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>6</x>
|
<x>6</x>
|
||||||
@@ -1813,8 +1804,8 @@
|
|||||||
<slot>onPositionControlsChanged()</slot>
|
<slot>onPositionControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>159</x>
|
<x>160</x>
|
||||||
<y>142</y>
|
<y>138</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>399</x>
|
<x>399</x>
|
||||||
@@ -1829,8 +1820,8 @@
|
|||||||
<slot>onPositionControlsChanged()</slot>
|
<slot>onPositionControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>159</x>
|
<x>160</x>
|
||||||
<y>179</y>
|
<y>174</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>325</x>
|
<x>325</x>
|
||||||
@@ -1845,8 +1836,8 @@
|
|||||||
<slot>onRectSizeControlsChanged()</slot>
|
<slot>onRectSizeControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>159</x>
|
<x>160</x>
|
||||||
<y>265</y>
|
<y>258</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>3</x>
|
<x>3</x>
|
||||||
@@ -1861,8 +1852,8 @@
|
|||||||
<slot>onRectSizeControlsChanged()</slot>
|
<slot>onRectSizeControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>159</x>
|
<x>160</x>
|
||||||
<y>302</y>
|
<y>294</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
@@ -1877,8 +1868,8 @@
|
|||||||
<slot>onResetImageSize()</slot>
|
<slot>onResetImageSize()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>210</x>
|
<x>213</x>
|
||||||
<y>372</y>
|
<y>362</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>4</x>
|
<x>4</x>
|
||||||
@@ -1909,8 +1900,8 @@
|
|||||||
<slot>onShadowControlsChanged()</slot>
|
<slot>onShadowControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>165</x>
|
<x>166</x>
|
||||||
<y>142</y>
|
<y>138</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>398</x>
|
<x>398</x>
|
||||||
@@ -1925,8 +1916,8 @@
|
|||||||
<slot>onShadowControlsChanged()</slot>
|
<slot>onShadowControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>165</x>
|
<x>166</x>
|
||||||
<y>179</y>
|
<y>174</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>294</x>
|
<x>294</x>
|
||||||
@@ -1941,8 +1932,8 @@
|
|||||||
<slot>onShadowControlsChanged()</slot>
|
<slot>onShadowControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>142</x>
|
<x>141</x>
|
||||||
<y>215</y>
|
<y>209</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>399</x>
|
<x>399</x>
|
||||||
@@ -1957,8 +1948,8 @@
|
|||||||
<slot>onShadowControlsChanged()</slot>
|
<slot>onShadowControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>159</x>
|
<x>162</x>
|
||||||
<y>252</y>
|
<y>245</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>399</x>
|
<x>399</x>
|
||||||
@@ -1973,8 +1964,8 @@
|
|||||||
<slot>onLineSizeControlsChanged()</slot>
|
<slot>onLineSizeControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>174</x>
|
<x>177</x>
|
||||||
<y>456</y>
|
<y>444</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>5</x>
|
<x>5</x>
|
||||||
@@ -1989,8 +1980,8 @@
|
|||||||
<slot>onLineSizeControlsChanged()</slot>
|
<slot>onLineSizeControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>174</x>
|
<x>177</x>
|
||||||
<y>493</y>
|
<y>480</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
@@ -1999,14 +1990,14 @@
|
|||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
<connection>
|
||||||
<sender>imageFileButton</sender>
|
<sender>imageBrowseButton</sender>
|
||||||
<signal>clicked()</signal>
|
<signal>clicked()</signal>
|
||||||
<receiver>ObjectEditor</receiver>
|
<receiver>ObjectEditor</receiver>
|
||||||
<slot>onImageFileButtonClicked()</slot>
|
<slot>onImageFileButtonClicked()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>133</x>
|
<x>367</x>
|
||||||
<y>175</y>
|
<y>135</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>394</x>
|
<x>394</x>
|
||||||
@@ -2014,22 +2005,6 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
|
||||||
<sender>imageFieldCombo</sender>
|
|
||||||
<signal>keySelected(QString)</signal>
|
|
||||||
<receiver>ObjectEditor</receiver>
|
|
||||||
<slot>onImageKeySelected(QString)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>302</x>
|
|
||||||
<y>175</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>397</x>
|
|
||||||
<y>32</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
<connection>
|
||||||
<sender>textEdit</sender>
|
<sender>textEdit</sender>
|
||||||
<signal>textChanged()</signal>
|
<signal>textChanged()</signal>
|
||||||
@@ -2046,22 +2021,6 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
|
||||||
<sender>textInsertFieldCombo</sender>
|
|
||||||
<signal>keySelected(QString)</signal>
|
|
||||||
<receiver>ObjectEditor</receiver>
|
|
||||||
<slot>onTextInsertFieldKeySelected(QString)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>239</x>
|
|
||||||
<y>599</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>395</x>
|
|
||||||
<y>645</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
<connection>
|
||||||
<sender>barcodeShowTextCheck</sender>
|
<sender>barcodeShowTextCheck</sender>
|
||||||
<signal>toggled(bool)</signal>
|
<signal>toggled(bool)</signal>
|
||||||
@@ -2069,8 +2028,8 @@
|
|||||||
<slot>onBarcodeControlsChanged()</slot>
|
<slot>onBarcodeControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>178</x>
|
<x>195</x>
|
||||||
<y>172</y>
|
<y>167</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>4</x>
|
<x>4</x>
|
||||||
@@ -2085,8 +2044,8 @@
|
|||||||
<slot>onBarcodeControlsChanged()</slot>
|
<slot>onBarcodeControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>164</x>
|
<x>195</x>
|
||||||
<y>204</y>
|
<y>198</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
@@ -2102,7 +2061,7 @@
|
|||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>126</x>
|
<x>126</x>
|
||||||
<y>239</y>
|
<y>232</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
@@ -2126,22 +2085,6 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
|
||||||
<sender>barcodeInsertFieldCombo</sender>
|
|
||||||
<signal>keySelected(QString)</signal>
|
|
||||||
<receiver>ObjectEditor</receiver>
|
|
||||||
<slot>onBarcodeInsertFieldKeySelected(QString)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>239</x>
|
|
||||||
<y>400</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>403</x>
|
|
||||||
<y>625</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
<connection>
|
||||||
<sender>barcodeStyleButton</sender>
|
<sender>barcodeStyleButton</sender>
|
||||||
<signal>selectionChanged()</signal>
|
<signal>selectionChanged()</signal>
|
||||||
@@ -2149,8 +2092,8 @@
|
|||||||
<slot>onBarcodeControlsChanged()</slot>
|
<slot>onBarcodeControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>178</x>
|
<x>195</x>
|
||||||
<y>140</y>
|
<y>136</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>5</x>
|
<x>5</x>
|
||||||
@@ -2190,6 +2133,70 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>sizeAspectCheck</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>ObjectEditor</receiver>
|
||||||
|
<slot>onRectSizeControlsChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>231</x>
|
||||||
|
<y>289</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>199</x>
|
||||||
|
<y>319</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>textInsertFieldButton</sender>
|
||||||
|
<signal>keySelected(QString)</signal>
|
||||||
|
<receiver>ObjectEditor</receiver>
|
||||||
|
<slot>onTextInsertFieldKeySelected(QString)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>191</x>
|
||||||
|
<y>589</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>227</x>
|
||||||
|
<y>642</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>barcodeInsertFieldButton</sender>
|
||||||
|
<signal>keySelected(QString)</signal>
|
||||||
|
<receiver>ObjectEditor</receiver>
|
||||||
|
<slot>onBarcodeInsertFieldKeySelected(QString)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>208</x>
|
||||||
|
<y>379</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>205</x>
|
||||||
|
<y>649</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>imageFieldButton</sender>
|
||||||
|
<signal>keySelected(QString)</signal>
|
||||||
|
<receiver>ObjectEditor</receiver>
|
||||||
|
<slot>onImageKeySelected(QString)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>317</x>
|
||||||
|
<y>160</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>331</x>
|
||||||
|
<y>-12</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
<slots>
|
<slots>
|
||||||
<slot>onChanged()</slot>
|
<slot>onChanged()</slot>
|
||||||
@@ -2206,5 +2213,6 @@
|
|||||||
<slot>onTextInsertFieldKeySelected(QString)</slot>
|
<slot>onTextInsertFieldKeySelected(QString)</slot>
|
||||||
<slot>onBarcodeControlsChanged()</slot>
|
<slot>onBarcodeControlsChanged()</slot>
|
||||||
<slot>onBarcodeInsertFieldKeySelected(QString)</slot>
|
<slot>onBarcodeInsertFieldKeySelected(QString)</slot>
|
||||||
|
<slot>onImageComboChanged()</slot>
|
||||||
</slots>
|
</slots>
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
+35
-19
@@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>759</width>
|
<width>852</width>
|
||||||
<height>792</height>
|
<height>792</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,1">
|
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,1">
|
||||||
<item>
|
<item>
|
||||||
@@ -73,21 +73,8 @@
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Copies</string>
|
<string>Copies</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
<item row="5" column="0">
|
<item>
|
||||||
<widget class="QLabel" name="copiesDescriptionLabel">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">(Will print a total of xx items on nn pages.)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
@@ -104,11 +91,17 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSpinBox" name="copiesSpin">
|
<widget class="QSpinBox" name="copiesSpin">
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::UpDownArrows</enum>
|
||||||
|
</property>
|
||||||
|
<property name="accelerated">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>96</number>
|
<number>9999</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -127,7 +120,7 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
@@ -183,6 +176,29 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="copiesDescriptionLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>330</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">(Will print a total of xxxx items on nnn pages.) </string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_5" columnstretch="0,0,0,0,1">
|
<layout class="QGridLayout" name="gridLayout_5" columnstretch="0,0,0,0,1">
|
||||||
<item row="0" column="4">
|
<item row="0" column="4">
|
||||||
@@ -241,6 +241,12 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QPushButton" name="changeProductButton">
|
<widget class="QPushButton" name="changeProductButton">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>330</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Select another product for this gLabels project.</p></body></html></string>
|
<string><html><head/><body><p>Select another product for this gLabels project.</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<property name="verticalSpacing">
|
<property name="verticalSpacing">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<property name="sizeConstraint">
|
<property name="sizeConstraint">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<property name="verticalSpacing">
|
<property name="verticalSpacing">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string notr="true">Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
|||||||
@@ -0,0 +1,190 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>VariablesView</class>
|
||||||
|
<widget class="QWidget" name="VariablesView">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1105</width>
|
||||||
|
<height>605</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string notr="true">Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>21</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>21</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>21</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>21</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="titleLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"><html><head/><body><p><span style=" font-size:18pt;">Variables</span></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QTableWidget" name="table">
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::SingleSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectRows</enum>
|
||||||
|
</property>
|
||||||
|
<property name="columnCount">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<attribute name="verticalHeaderVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="verticalHeaderHighlightSections">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="addButton">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Add variable</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Add</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="editButton">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Edit selected variable</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Edit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="deleteButton">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Delete selected variable</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Delete</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</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>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>addButton</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>VariablesView</receiver>
|
||||||
|
<slot>onAddButtonClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>63</x>
|
||||||
|
<y>586</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>98</x>
|
||||||
|
<y>598</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>editButton</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>VariablesView</receiver>
|
||||||
|
<slot>onEditButtonClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>167</x>
|
||||||
|
<y>576</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>317</x>
|
||||||
|
<y>608</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>deleteButton</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>VariablesView</receiver>
|
||||||
|
<slot>onDeleteButtonClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>245</x>
|
||||||
|
<y>575</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>508</x>
|
||||||
|
<y>613</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>table</sender>
|
||||||
|
<signal>itemSelectionChanged()</signal>
|
||||||
|
<receiver>VariablesView</receiver>
|
||||||
|
<slot>onTableSelectionChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>380</x>
|
||||||
|
<y>258</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>787</x>
|
||||||
|
<y>610</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>onSelectAllButtonClicked()</slot>
|
||||||
|
<slot>onUnselectAllButtonClicked()</slot>
|
||||||
|
<slot>onLocationButtonClicked()</slot>
|
||||||
|
<slot>onFormatComboActivated()</slot>
|
||||||
|
<slot>onAddButtonClicked()</slot>
|
||||||
|
<slot>onEditButtonClicked()</slot>
|
||||||
|
<slot>onDeleteButtonClicked()</slot>
|
||||||
|
<slot>onTableSelectionChanged()</slot>
|
||||||
|
</slots>
|
||||||
|
</ui>
|
||||||
@@ -56,6 +56,8 @@ set (Model_sources
|
|||||||
Template.cpp
|
Template.cpp
|
||||||
TextNode.cpp
|
TextNode.cpp
|
||||||
Units.cpp
|
Units.cpp
|
||||||
|
Variable.cpp
|
||||||
|
Variables.cpp
|
||||||
Vendor.cpp
|
Vendor.cpp
|
||||||
XmlCategoryParser.cpp
|
XmlCategoryParser.cpp
|
||||||
XmlLabelCreator.cpp
|
XmlLabelCreator.cpp
|
||||||
@@ -80,6 +82,7 @@ set (Model_qobject_headers
|
|||||||
ModelTextObject.h
|
ModelTextObject.h
|
||||||
PageRenderer.h
|
PageRenderer.h
|
||||||
Settings.h
|
Settings.h
|
||||||
|
Variables.h
|
||||||
)
|
)
|
||||||
|
|
||||||
qt5_wrap_cpp (Model_moc_sources ${Model_qobject_headers})
|
qt5_wrap_cpp (Model_moc_sources ${Model_qobject_headers})
|
||||||
|
|||||||
+21
-19
@@ -175,30 +175,32 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Get color, expand if necessary
|
/// Get color, expand if necessary
|
||||||
///
|
///
|
||||||
QColor ColorNode::color( merge::Record* record ) const
|
QColor ColorNode::color( const merge::Record* record,
|
||||||
|
const Variables* variables ) const
|
||||||
{
|
{
|
||||||
if ( mIsField )
|
QColor value = QColor( 192, 192, 192, 128 );
|
||||||
|
|
||||||
|
bool haveRecordField = mIsField && record &&
|
||||||
|
record->contains(mKey) &&
|
||||||
|
!record->value(mKey).isEmpty();
|
||||||
|
bool haveVariable = mIsField && variables &&
|
||||||
|
variables->contains(mKey) &&
|
||||||
|
!(*variables)[mKey].value().isEmpty();
|
||||||
|
|
||||||
|
if ( haveRecordField )
|
||||||
{
|
{
|
||||||
if ( record == nullptr )
|
value = QColor( record->value(mKey) );
|
||||||
{
|
|
||||||
return mColor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( record->contains( mKey ) )
|
|
||||||
{
|
|
||||||
return QColor( (*record)[ mKey ] );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return mColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else if ( haveVariable )
|
||||||
{
|
{
|
||||||
return mColor;
|
value = QColor( (*variables)[mKey].value() );
|
||||||
}
|
}
|
||||||
|
else if ( !mIsField )
|
||||||
|
{
|
||||||
|
value = mColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -22,6 +22,7 @@
|
|||||||
#define model_ColorNode_h
|
#define model_ColorNode_h
|
||||||
|
|
||||||
|
|
||||||
|
#include "Variables.h"
|
||||||
#include "merge/Record.h"
|
#include "merge/Record.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@@ -95,7 +96,8 @@ namespace glabels
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
uint32_t rgba() const;
|
uint32_t rgba() const;
|
||||||
QColor color( merge::Record* record ) const;
|
QColor color( const merge::Record* record,
|
||||||
|
const Variables* variables ) const;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
|||||||
@@ -108,5 +108,17 @@ namespace glabels
|
|||||||
return QDir("/");
|
return QDir("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString FileUtil::makeRelativeIfInDir( const QDir& dir,
|
||||||
|
const QString& filename )
|
||||||
|
{
|
||||||
|
QString relativeFilePath = dir.relativeFilePath( filename ); // Note: directory separators canonicalized to slash by Qt path methods
|
||||||
|
if ( !relativeFilePath.startsWith( "../" ) )
|
||||||
|
{
|
||||||
|
return relativeFilePath;
|
||||||
|
}
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ namespace glabels
|
|||||||
QDir userTemplatesDir();
|
QDir userTemplatesDir();
|
||||||
|
|
||||||
QDir translationsDir();
|
QDir translationsDir();
|
||||||
|
|
||||||
|
QString makeRelativeIfInDir( const QDir& dir,
|
||||||
|
const QString& filename );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+76
-12
@@ -57,7 +57,18 @@ namespace glabels
|
|||||||
Model::Model()
|
Model::Model()
|
||||||
: mUntitledInstance(0), mModified(true), mRotate(false)
|
: mUntitledInstance(0), mModified(true), mRotate(false)
|
||||||
{
|
{
|
||||||
|
mVariables = new Variables();
|
||||||
mMerge = new merge::None();
|
mMerge = new merge::None();
|
||||||
|
|
||||||
|
connect( mVariables, SIGNAL(changed()), this, SLOT(onVariablesChanged()) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Model::Model( merge::Merge* merge, Variables* variables )
|
||||||
|
: mUntitledInstance(0), mModified(true), mRotate(false)
|
||||||
|
{
|
||||||
|
mVariables = variables; // Shared
|
||||||
|
mMerge = merge; // Shared
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -66,7 +77,8 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
Model::~Model()
|
Model::~Model()
|
||||||
{
|
{
|
||||||
delete mMerge;
|
qDeleteAll( mObjectList );
|
||||||
|
// Final instance of mMerge and mVariables to be deleted by Model owner
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -75,7 +87,13 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
Model* Model::save() const
|
Model* Model::save() const
|
||||||
{
|
{
|
||||||
auto* savedModel = new Model;
|
auto* savedModel = new Model( mMerge, mVariables ); // mMerge and mVariables shared between models
|
||||||
|
|
||||||
|
if ( mFileName.isEmpty() && mUntitledInstance == 0 )
|
||||||
|
{
|
||||||
|
qDebug() << "Model::save: Warning: called before mUntitledInstance has been initialized: untitled names will differ";
|
||||||
|
}
|
||||||
|
|
||||||
savedModel->restore( this );
|
savedModel->restore( this );
|
||||||
|
|
||||||
return savedModel;
|
return savedModel;
|
||||||
@@ -112,18 +130,12 @@ namespace glabels
|
|||||||
connect( object, SIGNAL(moved()), this, SLOT(onObjectMoved()) );
|
connect( object, SIGNAL(moved()), this, SLOT(onObjectMoved()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
delete mMerge;
|
|
||||||
mMerge = savedModel->mMerge->clone();
|
|
||||||
|
|
||||||
// Emit signals based on potential changes
|
// Emit signals based on potential changes
|
||||||
emit changed();
|
emit changed();
|
||||||
emit selectionChanged();
|
emit selectionChanged();
|
||||||
emit modifiedChanged();
|
emit modifiedChanged();
|
||||||
emit nameChanged();
|
emit nameChanged();
|
||||||
emit sizeChanged();
|
emit sizeChanged();
|
||||||
emit mergeChanged();
|
|
||||||
emit mergeSourceChanged();
|
|
||||||
emit mergeSelectionChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -276,6 +288,38 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Get directory as a QDir.
|
||||||
|
///
|
||||||
|
QDir Model::dir() const
|
||||||
|
{
|
||||||
|
if ( mFileName.isEmpty() )
|
||||||
|
{
|
||||||
|
return QDir::current();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return QFileInfo( mFileName ).absoluteDir();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Get directory as a path.
|
||||||
|
///
|
||||||
|
QString Model::dirPath() const
|
||||||
|
{
|
||||||
|
if ( mFileName.isEmpty() )
|
||||||
|
{
|
||||||
|
return QDir::currentPath();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return QFileInfo( mFileName ).absolutePath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Get short name.
|
/// Get short name.
|
||||||
///
|
///
|
||||||
@@ -302,6 +346,15 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Get variables object
|
||||||
|
///
|
||||||
|
Variables* Model::variables() const
|
||||||
|
{
|
||||||
|
return mVariables;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Get merge object
|
/// Get merge object
|
||||||
///
|
///
|
||||||
@@ -451,6 +504,17 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Variables Changed Slot
|
||||||
|
///
|
||||||
|
void Model::onVariablesChanged()
|
||||||
|
{
|
||||||
|
setModified();
|
||||||
|
emit changed();
|
||||||
|
emit variablesChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Merge Source Changed Slot
|
/// Merge Source Changed Slot
|
||||||
///
|
///
|
||||||
@@ -1359,7 +1423,7 @@ namespace glabels
|
|||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
|
|
||||||
QByteArray buffer;
|
QByteArray buffer;
|
||||||
XmlLabelCreator::serializeObjects( getSelection(), buffer );
|
XmlLabelCreator::serializeObjects( getSelection(), this, buffer );
|
||||||
|
|
||||||
auto *mimeData = new QMimeData;
|
auto *mimeData = new QMimeData;
|
||||||
mimeData->setData( MIME_TYPE, buffer );
|
mimeData->setData( MIME_TYPE, buffer );
|
||||||
@@ -1415,7 +1479,7 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
// Native objects
|
// Native objects
|
||||||
QByteArray buffer = mimeData->data( MIME_TYPE );
|
QByteArray buffer = mimeData->data( MIME_TYPE );
|
||||||
QList <ModelObject*> objects = XmlLabelParser::deserializeObjects( buffer );
|
QList <ModelObject*> objects = XmlLabelParser::deserializeObjects( buffer, this );
|
||||||
|
|
||||||
unselectAll();
|
unselectAll();
|
||||||
foreach ( ModelObject* object, objects )
|
foreach ( ModelObject* object, objects )
|
||||||
@@ -1452,11 +1516,11 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw label objects
|
/// Draw label objects
|
||||||
///
|
///
|
||||||
void Model::draw( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void Model::draw( QPainter* painter, bool inEditor, merge::Record* record, Variables* variables ) const
|
||||||
{
|
{
|
||||||
foreach ( ModelObject* object, mObjectList )
|
foreach ( ModelObject* object, mObjectList )
|
||||||
{
|
{
|
||||||
object->draw( painter, inEditor, record );
|
object->draw( painter, inEditor, record, variables );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
-1
@@ -24,10 +24,12 @@
|
|||||||
|
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
#include "Template.h"
|
#include "Template.h"
|
||||||
|
#include "Variables.h"
|
||||||
|
|
||||||
#include "merge/Merge.h"
|
#include "merge/Merge.h"
|
||||||
#include "merge/Record.h"
|
#include "merge/Record.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
@@ -57,6 +59,7 @@ namespace glabels
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
Model();
|
Model();
|
||||||
|
Model( merge::Merge* merge, Variables* variables );
|
||||||
~Model();
|
~Model();
|
||||||
|
|
||||||
|
|
||||||
@@ -76,6 +79,7 @@ namespace glabels
|
|||||||
void sizeChanged();
|
void sizeChanged();
|
||||||
void selectionChanged();
|
void selectionChanged();
|
||||||
void modifiedChanged();
|
void modifiedChanged();
|
||||||
|
void variablesChanged();
|
||||||
void mergeChanged();
|
void mergeChanged();
|
||||||
void mergeSourceChanged();
|
void mergeSourceChanged();
|
||||||
void mergeSelectionChanged();
|
void mergeSelectionChanged();
|
||||||
@@ -89,6 +93,8 @@ namespace glabels
|
|||||||
void setModified();
|
void setModified();
|
||||||
void clearModified();
|
void clearModified();
|
||||||
|
|
||||||
|
QDir dir() const;
|
||||||
|
QString dirPath() const;
|
||||||
QString shortName();
|
QString shortName();
|
||||||
const QString& fileName() const;
|
const QString& fileName() const;
|
||||||
void setFileName( const QString &fileName );
|
void setFileName( const QString &fileName );
|
||||||
@@ -107,6 +113,8 @@ namespace glabels
|
|||||||
|
|
||||||
const QList<ModelObject*>& objectList() const;
|
const QList<ModelObject*>& objectList() const;
|
||||||
|
|
||||||
|
Variables* variables() const;
|
||||||
|
|
||||||
merge::Merge* merge() const;
|
merge::Merge* merge() const;
|
||||||
void setMerge( merge::Merge* merge );
|
void setMerge( merge::Merge* merge );
|
||||||
|
|
||||||
@@ -204,7 +212,10 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
public:
|
public:
|
||||||
void draw( QPainter* painter, bool inEditor = true, merge::Record* record = nullptr ) const;
|
void draw( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
@@ -213,6 +224,7 @@ namespace glabels
|
|||||||
private slots:
|
private slots:
|
||||||
void onObjectChanged();
|
void onObjectChanged();
|
||||||
void onObjectMoved();
|
void onObjectMoved();
|
||||||
|
void onVariablesChanged();
|
||||||
void onMergeSourceChanged();
|
void onMergeSourceChanged();
|
||||||
void onMergeSelectionChanged();
|
void onMergeSelectionChanged();
|
||||||
|
|
||||||
@@ -229,6 +241,7 @@ namespace glabels
|
|||||||
|
|
||||||
QList<ModelObject*> mObjectList;
|
QList<ModelObject*> mObjectList;
|
||||||
|
|
||||||
|
Variables* mVariables;
|
||||||
merge::Merge* mMerge;
|
merge::Merge* mMerge;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -89,13 +89,14 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const barcode::Style& bcStyle,
|
const barcode::Style& bcStyle,
|
||||||
bool bcTextFlag,
|
bool bcTextFlag,
|
||||||
bool bcChecksumFlag,
|
bool bcChecksumFlag,
|
||||||
QString bcData,
|
QString bcData,
|
||||||
const ColorNode& bcColorNode,
|
const ColorNode& bcColorNode,
|
||||||
const QMatrix& matrix )
|
const QMatrix& matrix )
|
||||||
: ModelObject( x0, y0, w, h, matrix )
|
: ModelObject( x0, y0, w, h, lockAspectRatio, matrix )
|
||||||
{
|
{
|
||||||
mOutline = new Outline( this );
|
mOutline = new Outline( this );
|
||||||
|
|
||||||
@@ -311,7 +312,8 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void ModelBarcodeObject::drawShadow( QPainter* painter,
|
void ModelBarcodeObject::drawShadow( QPainter* painter,
|
||||||
bool inEditor,
|
bool inEditor,
|
||||||
merge::Record* record ) const
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
// Barcodes don't support shadows.
|
// Barcodes don't support shadows.
|
||||||
}
|
}
|
||||||
@@ -322,9 +324,10 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void ModelBarcodeObject::drawObject( QPainter* painter,
|
void ModelBarcodeObject::drawObject( QPainter* painter,
|
||||||
bool inEditor,
|
bool inEditor,
|
||||||
merge::Record* record ) const
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor bcColor = mBcColorNode.color( record );
|
QColor bcColor = mBcColorNode.color( record, variables );
|
||||||
|
|
||||||
if ( inEditor )
|
if ( inEditor )
|
||||||
{
|
{
|
||||||
@@ -332,7 +335,7 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
drawBc( painter, bcColor, record );
|
drawBc( painter, bcColor, record, variables );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -450,7 +453,8 @@ namespace glabels
|
|||||||
void
|
void
|
||||||
ModelBarcodeObject::drawBc( QPainter* painter,
|
ModelBarcodeObject::drawBc( QPainter* painter,
|
||||||
const QColor& color,
|
const QColor& color,
|
||||||
merge::Record* record ) const
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
painter->setPen( QPen( color ) );
|
painter->setPen( QPen( color ) );
|
||||||
|
|
||||||
@@ -458,7 +462,7 @@ namespace glabels
|
|||||||
bc->setChecksum(mBcChecksumFlag);
|
bc->setChecksum(mBcChecksumFlag);
|
||||||
bc->setShowText(mBcTextFlag);
|
bc->setShowText(mBcTextFlag);
|
||||||
|
|
||||||
bc->build( mBcData.expand( record ).toStdString(), mW.pt(), mH.pt() );
|
bc->build( mBcData.expand( record, variables ).toStdString(), mW.pt(), mH.pt() );
|
||||||
|
|
||||||
glbarcode::QtRenderer renderer(painter);
|
glbarcode::QtRenderer renderer(painter);
|
||||||
bc->render( renderer );
|
bc->render( renderer );
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const barcode::Style& bcStyle,
|
const barcode::Style& bcStyle,
|
||||||
bool bcTextFlag,
|
bool bcTextFlag,
|
||||||
bool bcChecksumFlag,
|
bool bcChecksumFlag,
|
||||||
@@ -126,8 +127,16 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
protected:
|
protected:
|
||||||
void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
void drawShadow( QPainter* painter,
|
||||||
void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
|
void drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
QPainterPath hoverPath( double scale ) const override;
|
QPainterPath hoverPath( double scale ) const override;
|
||||||
|
|
||||||
|
|
||||||
@@ -139,7 +148,12 @@ namespace glabels
|
|||||||
void update();
|
void update();
|
||||||
|
|
||||||
void drawBcInEditor( QPainter* painter, const QColor& color ) const;
|
void drawBcInEditor( QPainter* painter, const QColor& color ) const;
|
||||||
void drawBc( QPainter* painter, const QColor& color, merge::Record* record ) const;
|
|
||||||
|
void drawBc( QPainter* painter,
|
||||||
|
const QColor& color,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const;
|
||||||
|
|
||||||
void drawPlaceHolder( QPainter* painter, const QColor& color, const QString& text ) const;
|
void drawPlaceHolder( QPainter* painter, const QColor& color, const QString& text ) const;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const Distance& lineWidth,
|
const Distance& lineWidth,
|
||||||
const ColorNode& lineColorNode,
|
const ColorNode& lineColorNode,
|
||||||
const ColorNode& fillColorNode,
|
const ColorNode& fillColorNode,
|
||||||
@@ -63,7 +64,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelShapeObject( x0, y0, w, h,
|
: ModelShapeObject( x0, y0, w, h, lockAspectRatio,
|
||||||
lineWidth, lineColorNode, fillColorNode,
|
lineWidth, lineColorNode, fillColorNode,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
@@ -103,11 +104,14 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw shadow of object
|
/// Draw shadow of object
|
||||||
///
|
///
|
||||||
void ModelBoxObject::drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelBoxObject::drawShadow( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor lineColor = mLineColorNode.color( record );
|
QColor lineColor = mLineColorNode.color( record, variables );
|
||||||
QColor fillColor = mFillColorNode.color( record );
|
QColor fillColor = mFillColorNode.color( record, variables );
|
||||||
QColor shadowColor = mShadowColorNode.color( record );
|
QColor shadowColor = mShadowColorNode.color( record, variables );
|
||||||
|
|
||||||
shadowColor.setAlphaF( mShadowOpacity );
|
shadowColor.setAlphaF( mShadowOpacity );
|
||||||
|
|
||||||
@@ -148,10 +152,13 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw object itself
|
/// Draw object itself
|
||||||
///
|
///
|
||||||
void ModelBoxObject::drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelBoxObject::drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor lineColor = mLineColorNode.color( record );
|
QColor lineColor = mLineColorNode.color( record, variables );
|
||||||
QColor fillColor = mFillColorNode.color( record );
|
QColor fillColor = mFillColorNode.color( record, variables );
|
||||||
|
|
||||||
painter->setPen( QPen( lineColor, mLineWidth.pt() ) );
|
painter->setPen( QPen( lineColor, mLineWidth.pt() ) );
|
||||||
painter->setBrush( fillColor );
|
painter->setBrush( fillColor );
|
||||||
|
|||||||
+11
-2
@@ -47,6 +47,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const Distance& lineWidth,
|
const Distance& lineWidth,
|
||||||
const ColorNode& lineColorNode,
|
const ColorNode& lineColorNode,
|
||||||
const ColorNode& fillColorNode,
|
const ColorNode& fillColorNode,
|
||||||
@@ -72,8 +73,16 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
protected:
|
protected:
|
||||||
void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
void drawShadow( QPainter* painter,
|
||||||
void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
|
void drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
QPainterPath hoverPath( double scale ) const override;
|
QPainterPath hoverPath( double scale ) const override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const Distance& lineWidth,
|
const Distance& lineWidth,
|
||||||
const ColorNode& lineColorNode,
|
const ColorNode& lineColorNode,
|
||||||
const ColorNode& fillColorNode,
|
const ColorNode& fillColorNode,
|
||||||
@@ -63,7 +64,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelShapeObject( x0, y0, w, h,
|
: ModelShapeObject( x0, y0, w, h, lockAspectRatio,
|
||||||
lineWidth, lineColorNode, fillColorNode,
|
lineWidth, lineColorNode, fillColorNode,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
@@ -103,11 +104,14 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw shadow of object
|
/// Draw shadow of object
|
||||||
///
|
///
|
||||||
void ModelEllipseObject::drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelEllipseObject::drawShadow( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor lineColor = mLineColorNode.color( record );
|
QColor lineColor = mLineColorNode.color( record, variables );
|
||||||
QColor fillColor = mFillColorNode.color( record );
|
QColor fillColor = mFillColorNode.color( record, variables );
|
||||||
QColor shadowColor = mShadowColorNode.color( record );
|
QColor shadowColor = mShadowColorNode.color( record, variables );
|
||||||
|
|
||||||
shadowColor.setAlphaF( mShadowOpacity );
|
shadowColor.setAlphaF( mShadowOpacity );
|
||||||
|
|
||||||
@@ -148,10 +152,13 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw object itself
|
/// Draw object itself
|
||||||
///
|
///
|
||||||
void ModelEllipseObject::drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelEllipseObject::drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor lineColor = mLineColorNode.color( record );
|
QColor lineColor = mLineColorNode.color( record, variables );
|
||||||
QColor fillColor = mFillColorNode.color( record );
|
QColor fillColor = mFillColorNode.color( record, variables );
|
||||||
|
|
||||||
painter->setPen( QPen( lineColor, mLineWidth.pt() ) );
|
painter->setPen( QPen( lineColor, mLineWidth.pt() ) );
|
||||||
painter->setBrush( fillColor );
|
painter->setBrush( fillColor );
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const Distance& lineWidth,
|
const Distance& lineWidth,
|
||||||
const ColorNode& lineColorNode,
|
const ColorNode& lineColorNode,
|
||||||
const ColorNode& fillColorNode,
|
const ColorNode& fillColorNode,
|
||||||
@@ -72,8 +73,16 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
protected:
|
protected:
|
||||||
void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
void drawShadow( QPainter* painter,
|
||||||
void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
|
void drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
QPainterPath hoverPath( double scale ) const override;
|
QPainterPath hoverPath( double scale ) const override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
+208
-58
@@ -20,9 +20,11 @@
|
|||||||
|
|
||||||
#include "ModelImageObject.h"
|
#include "ModelImageObject.h"
|
||||||
|
|
||||||
|
#include "Model.h"
|
||||||
#include "Size.h"
|
#include "Size.h"
|
||||||
|
|
||||||
#include <QBrush>
|
#include <QBrush>
|
||||||
|
#include <QDir>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
#include <QPen>
|
#include <QPen>
|
||||||
@@ -40,6 +42,17 @@ namespace glabels
|
|||||||
QImage* ModelImageObject::smDefaultImage = nullptr;
|
QImage* ModelImageObject::smDefaultImage = nullptr;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Private
|
||||||
|
//
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
const QColor fillColor = QColor( 224, 224, 224, 255 );
|
||||||
|
const QColor labelColor = QColor( 102, 102, 102, 255 );
|
||||||
|
const Distance pad = Distance::pt(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Constructor
|
/// Constructor
|
||||||
///
|
///
|
||||||
@@ -70,6 +83,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const TextNode& filenameNode,
|
const TextNode& filenameNode,
|
||||||
const QMatrix& matrix,
|
const QMatrix& matrix,
|
||||||
bool shadowState,
|
bool shadowState,
|
||||||
@@ -77,7 +91,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelObject( x0, y0, w, h,
|
: ModelObject( x0, y0, w, h, lockAspectRatio,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
{
|
{
|
||||||
@@ -101,6 +115,8 @@ namespace glabels
|
|||||||
|
|
||||||
mImage = nullptr;
|
mImage = nullptr;
|
||||||
mSvgRenderer = nullptr;
|
mSvgRenderer = nullptr;
|
||||||
|
|
||||||
|
loadImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -111,6 +127,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const QString& filename,
|
const QString& filename,
|
||||||
const QImage& image,
|
const QImage& image,
|
||||||
const QMatrix& matrix,
|
const QMatrix& matrix,
|
||||||
@@ -119,7 +136,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelObject( x0, y0, w, h,
|
: ModelObject( x0, y0, w, h, lockAspectRatio,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
{
|
{
|
||||||
@@ -152,6 +169,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const QString& filename,
|
const QString& filename,
|
||||||
const QByteArray& svg,
|
const QByteArray& svg,
|
||||||
const QMatrix& matrix,
|
const QMatrix& matrix,
|
||||||
@@ -160,7 +178,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelObject( x0, y0, w, h,
|
: ModelObject( x0, y0, w, h, lockAspectRatio,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
{
|
{
|
||||||
@@ -395,27 +413,58 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw shadow of object
|
/// Draw shadow of object
|
||||||
///
|
///
|
||||||
void ModelImageObject::drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelImageObject::drawShadow( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QRectF destRect( 0, 0, mW.pt(), mH.pt() );
|
QRectF destRect( 0, 0, mW.pt(), mH.pt() );
|
||||||
|
|
||||||
QColor shadowColor = mShadowColorNode.color( record );
|
QColor shadowColor = mShadowColorNode.color( record, variables );
|
||||||
shadowColor.setAlphaF( mShadowOpacity );
|
shadowColor.setAlphaF( mShadowOpacity );
|
||||||
|
|
||||||
if ( mImage && mImage->hasAlphaChannel() && (mImage->depth() == 32) )
|
if ( mImage && mImage->hasAlphaChannel() && (mImage->depth() == 32) )
|
||||||
{
|
{
|
||||||
QImage* shadowImage = createShadowImage( shadowColor );
|
QImage* shadowImage = createShadowImage( *mImage, shadowColor );
|
||||||
painter->drawImage( destRect, *shadowImage );
|
painter->drawImage( destRect, *shadowImage );
|
||||||
delete shadowImage;
|
delete shadowImage;
|
||||||
}
|
}
|
||||||
|
else if ( mImage || mSvgRenderer || inEditor )
|
||||||
|
{
|
||||||
|
painter->setBrush( shadowColor );
|
||||||
|
painter->setPen( QPen( Qt::NoPen ) );
|
||||||
|
|
||||||
|
painter->drawRect( destRect );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( mImage || inEditor )
|
QString filename = mFilenameNode.text( record, variables );
|
||||||
|
QImage* image;
|
||||||
|
QSvgRenderer* svgRenderer;
|
||||||
|
QByteArray svg;
|
||||||
|
if ( readImageFile( filename, image, svgRenderer, svg ) )
|
||||||
{
|
{
|
||||||
painter->setBrush( shadowColor );
|
if ( image && image->hasAlphaChannel() && (image->depth() == 32) )
|
||||||
painter->setPen( QPen( Qt::NoPen ) );
|
{
|
||||||
|
QImage* shadowImage = createShadowImage( *image, shadowColor );
|
||||||
|
painter->drawImage( destRect, *shadowImage );
|
||||||
|
delete shadowImage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
painter->setBrush( shadowColor );
|
||||||
|
painter->setPen( QPen( Qt::NoPen ) );
|
||||||
|
|
||||||
painter->drawRect( destRect );
|
painter->drawRect( destRect );
|
||||||
|
}
|
||||||
|
if ( image )
|
||||||
|
{
|
||||||
|
delete image;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete svgRenderer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -424,16 +473,70 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw object itself
|
/// Draw object itself
|
||||||
///
|
///
|
||||||
void ModelImageObject::drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelImageObject::drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QRectF destRect( 0, 0, mW.pt(), mH.pt() );
|
QRectF destRect( 0, 0, mW.pt(), mH.pt() );
|
||||||
|
|
||||||
if ( inEditor && (mFilenameNode.isField() || (!mImage && !mSvgRenderer) ) )
|
if ( inEditor && (mFilenameNode.isField() || (!mImage && !mSvgRenderer) ) )
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// Render default place holder image
|
||||||
|
//
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->setRenderHint( QPainter::SmoothPixmapTransform, false );
|
painter->setRenderHint( QPainter::SmoothPixmapTransform, false );
|
||||||
painter->drawImage( destRect, *smDefaultImage );
|
painter->drawImage( destRect, *smDefaultImage );
|
||||||
painter->restore();
|
painter->restore();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Print label on top of place holder image, if we have room
|
||||||
|
//
|
||||||
|
if ( (mW > 6*pad) && (mH > 4*pad) )
|
||||||
|
{
|
||||||
|
QString labelText = tr("No image");
|
||||||
|
if ( mFilenameNode.isField() )
|
||||||
|
{
|
||||||
|
labelText = QString( "${%1}" ).arg( mFilenameNode.data() );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine font size for labelText
|
||||||
|
QFont font( "Sans" );
|
||||||
|
font.setPointSizeF( 6 );
|
||||||
|
|
||||||
|
QFontMetricsF fm( font );
|
||||||
|
QRectF textRect = fm.boundingRect( labelText );
|
||||||
|
|
||||||
|
double wPts = (mW - 2*pad).pt();
|
||||||
|
double hPts = (mH - 2*pad).pt();
|
||||||
|
if ( (wPts < textRect.width()) || (hPts < textRect.height()) )
|
||||||
|
{
|
||||||
|
double scaleX = wPts / textRect.width();
|
||||||
|
double scaleY = hPts / textRect.height();
|
||||||
|
font.setPointSizeF( 6 * std::min( scaleX, scaleY ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Render hole for text (font size may have changed above)
|
||||||
|
fm = QFontMetricsF( font );
|
||||||
|
textRect = fm.boundingRect( labelText );
|
||||||
|
|
||||||
|
QRectF holeRect( (mW.pt() - textRect.width())/2 - pad.pt(),
|
||||||
|
(mH.pt() - textRect.height())/2 - pad.pt(),
|
||||||
|
textRect.width() + 2*pad.pt(),
|
||||||
|
textRect.height() + 2*pad.pt() );
|
||||||
|
|
||||||
|
painter->setPen( Qt::NoPen );
|
||||||
|
painter->setBrush( QBrush( fillColor ) );
|
||||||
|
painter->drawRect( holeRect );
|
||||||
|
|
||||||
|
// Render text
|
||||||
|
painter->setFont( font );
|
||||||
|
painter->setPen( QPen( labelColor ) );
|
||||||
|
painter->drawText( QRectF( 0, 0, mW.pt(), mH.pt() ),
|
||||||
|
Qt::AlignCenter,
|
||||||
|
labelText );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( mImage )
|
else if ( mImage )
|
||||||
{
|
{
|
||||||
@@ -445,7 +548,23 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
else if ( mFilenameNode.isField() )
|
else if ( mFilenameNode.isField() )
|
||||||
{
|
{
|
||||||
// TODO
|
QString filename = mFilenameNode.text( record, variables );
|
||||||
|
QImage* image;
|
||||||
|
QSvgRenderer* svgRenderer;
|
||||||
|
QByteArray svg;
|
||||||
|
if ( readImageFile( filename, image, svgRenderer, svg ) )
|
||||||
|
{
|
||||||
|
if ( image )
|
||||||
|
{
|
||||||
|
painter->drawImage( destRect, *image );
|
||||||
|
delete image;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
svgRenderer->render( painter, destRect );
|
||||||
|
delete svgRenderer;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,59 +600,32 @@ namespace glabels
|
|||||||
if ( !mFilenameNode.isField() )
|
if ( !mFilenameNode.isField() )
|
||||||
{
|
{
|
||||||
QString filename = mFilenameNode.data();
|
QString filename = mFilenameNode.data();
|
||||||
QFileInfo fileInfo( filename );
|
if ( readImageFile( filename, mImage, mSvgRenderer, mSvg ) )
|
||||||
|
|
||||||
if ( fileInfo.isReadable() )
|
|
||||||
{
|
{
|
||||||
if ( (fileInfo.suffix() == "svg") || (fileInfo.suffix() == "SVG") )
|
double aspectRatio = 0;
|
||||||
|
if ( mSvgRenderer )
|
||||||
{
|
{
|
||||||
QFile file( filename );
|
// Adjust size based on aspect ratio of SVG image
|
||||||
if ( file.open( QFile::ReadOnly ) )
|
QRectF rect = mSvgRenderer->viewBoxF();
|
||||||
{
|
aspectRatio = rect.width() ? rect.height() / rect.width() : 0;
|
||||||
mSvg = file.readAll();
|
|
||||||
file.close();
|
|
||||||
mSvgRenderer = new QSvgRenderer( mSvg );
|
|
||||||
if ( !mSvgRenderer->isValid() )
|
|
||||||
{
|
|
||||||
mSvgRenderer = nullptr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Adjust size based on aspect ratio of SVG image
|
|
||||||
QRectF rect = mSvgRenderer->viewBoxF();
|
|
||||||
double aspectRatio = rect.height() / rect.width();
|
|
||||||
if ( mH > mW*aspectRatio )
|
|
||||||
{
|
|
||||||
mH = mW*aspectRatio;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mW = mH/aspectRatio;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mImage = new QImage( filename );
|
// Adjust size based on aspect ratio of image
|
||||||
if ( mImage->isNull() )
|
double imageW = mImage->width();
|
||||||
|
double imageH = mImage->height();
|
||||||
|
aspectRatio = imageW ? imageH / imageW : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( aspectRatio )
|
||||||
|
{
|
||||||
|
if ( mH > mW*aspectRatio )
|
||||||
{
|
{
|
||||||
mImage = nullptr;
|
mH = mW*aspectRatio;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Adjust size based on aspect ratio of image
|
mW = mH/aspectRatio;
|
||||||
double imageW = mImage->width();
|
|
||||||
double imageH = mImage->height();
|
|
||||||
double aspectRatio = imageH / imageW;
|
|
||||||
if ( mH > mW*aspectRatio )
|
|
||||||
{
|
|
||||||
mH = mW*aspectRatio;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mW = mH/aspectRatio;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -541,17 +633,75 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Read an image or svg file
|
||||||
|
///
|
||||||
|
bool ModelImageObject::readImageFile( const QString& fileName,
|
||||||
|
QImage*& image,
|
||||||
|
QSvgRenderer*& svgRenderer,
|
||||||
|
QByteArray& svg ) const
|
||||||
|
{
|
||||||
|
image = nullptr;
|
||||||
|
svgRenderer = nullptr;
|
||||||
|
svg.clear();
|
||||||
|
|
||||||
|
if ( !fileName.isEmpty() )
|
||||||
|
{
|
||||||
|
QFileInfo fileInfo( fileName );
|
||||||
|
if ( fileInfo.isRelative() )
|
||||||
|
{
|
||||||
|
// Look for image file relative to project file 1st then CWD 2nd
|
||||||
|
auto* model = dynamic_cast<Model*>( parent() );
|
||||||
|
QDir::setSearchPaths( "images", {model ? model->dirPath() : "", QDir::currentPath()} );
|
||||||
|
fileInfo.setFile( QString("images:") + fileName );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( fileInfo.isReadable() )
|
||||||
|
{
|
||||||
|
if ( fileInfo.suffix().toLower() == "svg" )
|
||||||
|
{
|
||||||
|
QFile file( fileInfo.filePath() );
|
||||||
|
if ( file.open( QFile::ReadOnly ) )
|
||||||
|
{
|
||||||
|
svg = file.readAll();
|
||||||
|
file.close();
|
||||||
|
svgRenderer = new QSvgRenderer( svg );
|
||||||
|
if ( !svgRenderer->isValid() )
|
||||||
|
{
|
||||||
|
delete svgRenderer;
|
||||||
|
svgRenderer = nullptr;
|
||||||
|
svg.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
image = new QImage( fileInfo.filePath() );
|
||||||
|
if ( image->isNull() )
|
||||||
|
{
|
||||||
|
delete image;
|
||||||
|
image = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return image != nullptr || svgRenderer != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Create shadow image
|
/// Create shadow image
|
||||||
///
|
///
|
||||||
QImage* ModelImageObject::createShadowImage( const QColor& color ) const
|
QImage* ModelImageObject::createShadowImage( const QImage& image,
|
||||||
|
const QColor& color ) const
|
||||||
{
|
{
|
||||||
int r = color.red();
|
int r = color.red();
|
||||||
int g = color.green();
|
int g = color.green();
|
||||||
int b = color.blue();
|
int b = color.blue();
|
||||||
int a = color.alpha();
|
int a = color.alpha();
|
||||||
|
|
||||||
auto* shadow = new QImage( *mImage );
|
auto* shadow = new QImage( image );
|
||||||
for ( int iy = 0; iy < shadow->height(); iy++ )
|
for ( int iy = 0; iy < shadow->height(); iy++ )
|
||||||
{
|
{
|
||||||
auto* scanLine = (QRgb*)shadow->scanLine( iy );
|
auto* scanLine = (QRgb*)shadow->scanLine( iy );
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const TextNode& filenameNode,
|
const TextNode& filenameNode,
|
||||||
const QMatrix& matrix = QMatrix(),
|
const QMatrix& matrix = QMatrix(),
|
||||||
bool shadowState = false,
|
bool shadowState = false,
|
||||||
@@ -61,6 +62,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const QString& filename,
|
const QString& filename,
|
||||||
const QImage& image,
|
const QImage& image,
|
||||||
const QMatrix& matrix = QMatrix(),
|
const QMatrix& matrix = QMatrix(),
|
||||||
@@ -74,6 +76,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const QString& filename,
|
const QString& filename,
|
||||||
const QByteArray& svg,
|
const QByteArray& svg,
|
||||||
const QMatrix& matrix = QMatrix(),
|
const QMatrix& matrix = QMatrix(),
|
||||||
@@ -132,8 +135,16 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
protected:
|
protected:
|
||||||
void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
void drawShadow( QPainter* painter,
|
||||||
void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
|
void drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
QPainterPath hoverPath( double scale ) const override;
|
QPainterPath hoverPath( double scale ) const override;
|
||||||
|
|
||||||
|
|
||||||
@@ -141,7 +152,14 @@ namespace glabels
|
|||||||
// Private
|
// Private
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
void loadImage();
|
void loadImage();
|
||||||
QImage* createShadowImage( const QColor& color ) const;
|
|
||||||
|
bool readImageFile( const QString& fileName,
|
||||||
|
QImage*& image,
|
||||||
|
QSvgRenderer*& svgRenderer,
|
||||||
|
QByteArray& svg ) const;
|
||||||
|
|
||||||
|
QImage* createShadowImage( const QImage& image,
|
||||||
|
const QColor& color ) const;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelObject( x0, y0, dx, dy,
|
: ModelObject( x0, y0, dx, dy, false /*lockAspectRatio*/,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
{
|
{
|
||||||
@@ -186,10 +186,13 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw shadow of object
|
/// Draw shadow of object
|
||||||
///
|
///
|
||||||
void ModelLineObject::drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelLineObject::drawShadow( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor lineColor = mLineColorNode.color( record );
|
QColor lineColor = mLineColorNode.color( record, variables );
|
||||||
QColor shadowColor = mShadowColorNode.color( record );
|
QColor shadowColor = mShadowColorNode.color( record, variables );
|
||||||
|
|
||||||
shadowColor.setAlphaF( mShadowOpacity );
|
shadowColor.setAlphaF( mShadowOpacity );
|
||||||
|
|
||||||
@@ -204,9 +207,12 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw object itself
|
/// Draw object itself
|
||||||
///
|
///
|
||||||
void ModelLineObject::drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelLineObject::drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor lineColor = mLineColorNode.color( record );
|
QColor lineColor = mLineColorNode.color( record, variables );
|
||||||
|
|
||||||
painter->setPen( QPen( lineColor, mLineWidth.pt() ) );
|
painter->setPen( QPen( lineColor, mLineWidth.pt() ) );
|
||||||
painter->drawLine( 0, 0, mW.pt(), mH.pt() );
|
painter->drawLine( 0, 0, mW.pt(), mH.pt() );
|
||||||
|
|||||||
+10
-2
@@ -97,8 +97,16 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
protected:
|
protected:
|
||||||
void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
void drawShadow( QPainter* painter,
|
||||||
void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
|
void drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
QPainterPath hoverPath( double scale ) const override;
|
QPainterPath hoverPath( double scale ) const override;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+32
-3
@@ -51,6 +51,7 @@ namespace glabels
|
|||||||
mY0 = 0;
|
mY0 = 0;
|
||||||
mW = 0;
|
mW = 0;
|
||||||
mH = 0;
|
mH = 0;
|
||||||
|
mLockAspectRatio = false;
|
||||||
mMatrix = QMatrix();
|
mMatrix = QMatrix();
|
||||||
|
|
||||||
mShadowState = false;
|
mShadowState = false;
|
||||||
@@ -72,6 +73,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const QMatrix& matrix,
|
const QMatrix& matrix,
|
||||||
bool shadowState,
|
bool shadowState,
|
||||||
const Distance& shadowX,
|
const Distance& shadowX,
|
||||||
@@ -85,6 +87,7 @@ namespace glabels
|
|||||||
mY0 = y0;
|
mY0 = y0;
|
||||||
mW = w;
|
mW = w;
|
||||||
mH = h;
|
mH = h;
|
||||||
|
mLockAspectRatio = lockAspectRatio;
|
||||||
mMatrix = matrix;
|
mMatrix = matrix;
|
||||||
|
|
||||||
mShadowState = shadowState;
|
mShadowState = shadowState;
|
||||||
@@ -112,6 +115,7 @@ namespace glabels
|
|||||||
mY0 = object->mY0;
|
mY0 = object->mY0;
|
||||||
mW = object->mW;
|
mW = object->mW;
|
||||||
mH = object->mH;
|
mH = object->mH;
|
||||||
|
mLockAspectRatio = object->mLockAspectRatio;
|
||||||
|
|
||||||
mShadowState = object->mShadowState;
|
mShadowState = object->mShadowState;
|
||||||
mShadowX = object->mShadowX;
|
mShadowX = object->mShadowX;
|
||||||
@@ -272,6 +276,28 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Lock Aspect Ratio Property Getter
|
||||||
|
///
|
||||||
|
bool ModelObject::lockAspectRatio() const
|
||||||
|
{
|
||||||
|
return mLockAspectRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Lock Aspect Ratio Property Setter
|
||||||
|
///
|
||||||
|
void ModelObject::setLockAspectRatio( bool value )
|
||||||
|
{
|
||||||
|
if ( mLockAspectRatio != value )
|
||||||
|
{
|
||||||
|
mLockAspectRatio = value;
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Matrix Property Getter
|
/// Matrix Property Getter
|
||||||
///
|
///
|
||||||
@@ -1200,7 +1226,10 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Draw object + shadow
|
/// Draw object + shadow
|
||||||
///
|
///
|
||||||
void ModelObject::draw( QPainter* painter, bool inEditor, merge::Record* record ) const
|
void ModelObject::draw( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->translate( mX0.pt(), mY0.pt() );
|
painter->translate( mX0.pt(), mY0.pt() );
|
||||||
@@ -1210,12 +1239,12 @@ namespace glabels
|
|||||||
painter->save();
|
painter->save();
|
||||||
painter->translate( mShadowX.pt(), mShadowY.pt() );
|
painter->translate( mShadowX.pt(), mShadowY.pt() );
|
||||||
painter->setMatrix( mMatrix, true );
|
painter->setMatrix( mMatrix, true );
|
||||||
drawShadow( painter, inEditor, record );
|
drawShadow( painter, inEditor, record, variables );
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
painter->setMatrix( mMatrix, true );
|
painter->setMatrix( mMatrix, true );
|
||||||
drawObject( painter, inEditor, record );
|
drawObject( painter, inEditor, record, variables );
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-3
@@ -27,6 +27,7 @@
|
|||||||
#include "Handles.h"
|
#include "Handles.h"
|
||||||
#include "Outline.h"
|
#include "Outline.h"
|
||||||
#include "TextNode.h"
|
#include "TextNode.h"
|
||||||
|
#include "Variables.h"
|
||||||
|
|
||||||
#include "barcode/Style.h"
|
#include "barcode/Style.h"
|
||||||
#include "merge/Record.h"
|
#include "merge/Record.h"
|
||||||
@@ -64,6 +65,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio = false,
|
||||||
const QMatrix& matrix = QMatrix(),
|
const QMatrix& matrix = QMatrix(),
|
||||||
bool shadowState = false,
|
bool shadowState = false,
|
||||||
const Distance& shadowX = 0,
|
const Distance& shadowX = 0,
|
||||||
@@ -136,6 +138,13 @@ namespace glabels
|
|||||||
void setH( const Distance& value );
|
void setH( const Distance& value );
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Lock Aspect Ratio Property
|
||||||
|
//
|
||||||
|
bool lockAspectRatio() const;
|
||||||
|
void setLockAspectRatio( bool value );
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Transformation Matrix Property
|
// Transformation Matrix Property
|
||||||
//
|
//
|
||||||
@@ -403,12 +412,24 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
public:
|
public:
|
||||||
void draw( QPainter* painter, bool inEditor, merge::Record* record ) const;
|
void draw( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const;
|
||||||
|
|
||||||
void drawSelectionHighlight( QPainter* painter, double scale ) const;
|
void drawSelectionHighlight( QPainter* painter, double scale ) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const = 0;
|
virtual void drawShadow( QPainter* painter,
|
||||||
virtual void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const = 0;
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const = 0;
|
||||||
|
|
||||||
|
virtual void drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const = 0;
|
||||||
|
|
||||||
virtual QPainterPath hoverPath( double scale ) const = 0;
|
virtual QPainterPath hoverPath( double scale ) const = 0;
|
||||||
|
|
||||||
virtual void sizeUpdated();
|
virtual void sizeUpdated();
|
||||||
@@ -424,6 +445,7 @@ namespace glabels
|
|||||||
Distance mY0;
|
Distance mY0;
|
||||||
Distance mW;
|
Distance mW;
|
||||||
Distance mH;
|
Distance mH;
|
||||||
|
bool mLockAspectRatio;
|
||||||
|
|
||||||
bool mShadowState;
|
bool mShadowState;
|
||||||
Distance mShadowX;
|
Distance mShadowX;
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const Distance& lineWidth,
|
const Distance& lineWidth,
|
||||||
const ColorNode& lineColorNode,
|
const ColorNode& lineColorNode,
|
||||||
const ColorNode& fillColorNode,
|
const ColorNode& fillColorNode,
|
||||||
@@ -67,7 +68,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelObject( x0, y0, w, h,
|
: ModelObject( x0, y0, w, h, lockAspectRatio,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const Distance& lineWidth,
|
const Distance& lineWidth,
|
||||||
const ColorNode& lineColorNode,
|
const ColorNode& lineColorNode,
|
||||||
const ColorNode& fillColorNode,
|
const ColorNode& fillColorNode,
|
||||||
|
|||||||
+17
-13
@@ -82,6 +82,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const QString& text,
|
const QString& text,
|
||||||
const QString& fontFamily,
|
const QString& fontFamily,
|
||||||
double fontSize,
|
double fontSize,
|
||||||
@@ -100,7 +101,7 @@ namespace glabels
|
|||||||
const Distance& shadowY,
|
const Distance& shadowY,
|
||||||
double shadowOpacity,
|
double shadowOpacity,
|
||||||
const ColorNode& shadowColorNode )
|
const ColorNode& shadowColorNode )
|
||||||
: ModelObject( x0, y0, w, h,
|
: ModelObject( x0, y0, w, h, lockAspectRatio,
|
||||||
matrix,
|
matrix,
|
||||||
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
shadowState, shadowX, shadowY, shadowOpacity, shadowColorNode )
|
||||||
{
|
{
|
||||||
@@ -518,13 +519,14 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void ModelTextObject::drawShadow( QPainter* painter,
|
void ModelTextObject::drawShadow( QPainter* painter,
|
||||||
bool inEditor,
|
bool inEditor,
|
||||||
merge::Record* record ) const
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor textColor = mTextColorNode.color( record );
|
QColor textColor = mTextColorNode.color( record, variables );
|
||||||
|
|
||||||
if ( textColor.alpha() )
|
if ( textColor.alpha() )
|
||||||
{
|
{
|
||||||
QColor shadowColor = mShadowColorNode.color( record );
|
QColor shadowColor = mShadowColorNode.color( record, variables );
|
||||||
shadowColor.setAlphaF( mShadowOpacity );
|
shadowColor.setAlphaF( mShadowOpacity );
|
||||||
|
|
||||||
if ( inEditor )
|
if ( inEditor )
|
||||||
@@ -533,7 +535,7 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
drawText( painter, shadowColor, record );
|
drawText( painter, shadowColor, record, variables );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -544,9 +546,10 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
void ModelTextObject::drawObject( QPainter* painter,
|
void ModelTextObject::drawObject( QPainter* painter,
|
||||||
bool inEditor,
|
bool inEditor,
|
||||||
merge::Record* record ) const
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
QColor textColor = mTextColorNode.color( record );
|
QColor textColor = mTextColorNode.color( record, variables );
|
||||||
|
|
||||||
if ( inEditor )
|
if ( inEditor )
|
||||||
{
|
{
|
||||||
@@ -554,7 +557,7 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
drawText( painter, textColor, record );
|
drawText( painter, textColor, record, variables );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -696,7 +699,8 @@ namespace glabels
|
|||||||
void
|
void
|
||||||
ModelTextObject::drawText( QPainter* painter,
|
ModelTextObject::drawText( QPainter* painter,
|
||||||
const QColor& color,
|
const QColor& color,
|
||||||
merge::Record* record ) const
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
@@ -704,7 +708,7 @@ namespace glabels
|
|||||||
|
|
||||||
QFont font;
|
QFont font;
|
||||||
font.setFamily( mFontFamily );
|
font.setFamily( mFontFamily );
|
||||||
font.setPointSizeF( mTextAutoShrink ? autoShrinkFontSize( record ) : mFontSize );
|
font.setPointSizeF( mTextAutoShrink ? autoShrinkFontSize( record, variables ) : mFontSize );
|
||||||
font.setWeight( mFontWeight );
|
font.setWeight( mFontWeight );
|
||||||
font.setItalic( mFontItalicFlag );
|
font.setItalic( mFontItalicFlag );
|
||||||
font.setUnderline( mFontUnderlineFlag );
|
font.setUnderline( mFontUnderlineFlag );
|
||||||
@@ -716,7 +720,7 @@ namespace glabels
|
|||||||
QFontMetricsF fontMetrics( font );
|
QFontMetricsF fontMetrics( font );
|
||||||
double dy = fontMetrics.lineSpacing() * mTextLineSpacing;
|
double dy = fontMetrics.lineSpacing() * mTextLineSpacing;
|
||||||
|
|
||||||
QTextDocument document( mText.expand( record ) );
|
QTextDocument document( mText.expand( record, variables ) );
|
||||||
|
|
||||||
QList<QTextLayout*> layouts;
|
QList<QTextLayout*> layouts;
|
||||||
|
|
||||||
@@ -790,7 +794,7 @@ namespace glabels
|
|||||||
/// Determine auto shrink font size
|
/// Determine auto shrink font size
|
||||||
///
|
///
|
||||||
double
|
double
|
||||||
ModelTextObject::autoShrinkFontSize( merge::Record* record ) const
|
ModelTextObject::autoShrinkFontSize( merge::Record* record, Variables* variables ) const
|
||||||
{
|
{
|
||||||
QFont font;
|
QFont font;
|
||||||
font.setFamily( mFontFamily );
|
font.setFamily( mFontFamily );
|
||||||
@@ -802,7 +806,7 @@ namespace glabels
|
|||||||
textOption.setAlignment( mTextHAlign );
|
textOption.setAlignment( mTextHAlign );
|
||||||
textOption.setWrapMode( mTextWrapMode );
|
textOption.setWrapMode( mTextWrapMode );
|
||||||
|
|
||||||
QTextDocument document( mText.expand( record ) );
|
QTextDocument document( mText.expand( record, variables ) );
|
||||||
|
|
||||||
double candidateSize = mFontSize;
|
double candidateSize = mFontSize;
|
||||||
while ( candidateSize > 1.0 )
|
while ( candidateSize > 1.0 )
|
||||||
|
|||||||
+22
-6
@@ -50,6 +50,7 @@ namespace glabels
|
|||||||
const Distance& y0,
|
const Distance& y0,
|
||||||
const Distance& w,
|
const Distance& w,
|
||||||
const Distance& h,
|
const Distance& h,
|
||||||
|
bool lockAspectRatio,
|
||||||
const QString& text,
|
const QString& text,
|
||||||
const QString& fontFamily,
|
const QString& fontFamily,
|
||||||
double fontSize,
|
double fontSize,
|
||||||
@@ -185,8 +186,16 @@ namespace glabels
|
|||||||
// Drawing operations
|
// Drawing operations
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
protected:
|
protected:
|
||||||
void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
void drawShadow( QPainter* painter,
|
||||||
void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const override;
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
|
void drawObject( QPainter* painter,
|
||||||
|
bool inEditor,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const override;
|
||||||
|
|
||||||
QPainterPath hoverPath( double scale ) const override;
|
QPainterPath hoverPath( double scale ) const override;
|
||||||
|
|
||||||
|
|
||||||
@@ -196,10 +205,17 @@ namespace glabels
|
|||||||
private:
|
private:
|
||||||
void sizeUpdated() override;
|
void sizeUpdated() override;
|
||||||
void update();
|
void update();
|
||||||
void drawTextInEditor( QPainter* painter, const QColor& color ) const;
|
|
||||||
void drawText( QPainter* painter, const QColor&color, merge::Record* record ) const;
|
void drawTextInEditor( QPainter* painter,
|
||||||
QString expandText( QString text, merge::Record* record ) const;
|
const QColor& color ) const;
|
||||||
double autoShrinkFontSize( merge::Record* record ) const;
|
|
||||||
|
void drawText( QPainter* painter,
|
||||||
|
const QColor& color,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const;
|
||||||
|
|
||||||
|
double autoShrinkFontSize( merge::Record* record,
|
||||||
|
Variables* variables ) const;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
|
|||||||
+84
-57
@@ -47,7 +47,7 @@ namespace glabels
|
|||||||
|
|
||||||
|
|
||||||
PageRenderer::PageRenderer( const Model* model )
|
PageRenderer::PageRenderer( const Model* model )
|
||||||
: mModel(nullptr), mMerge(nullptr), mNCopies(0), mStartLabel(0), mLastLabel(0),
|
: mModel(nullptr), mMerge(nullptr), mVariables(nullptr), mNCopies(0), mStartLabel(0), mLastLabel(0),
|
||||||
mPrintOutlines(false), mPrintCropMarks(false), mPrintReverse(false),
|
mPrintOutlines(false), mPrintCropMarks(false), mPrintReverse(false),
|
||||||
mIPage(0), mIsMerge(false), mNPages(0), mNLabelsPerPage(0)
|
mIPage(0), mIsMerge(false), mNPages(0), mNLabelsPerPage(0)
|
||||||
{
|
{
|
||||||
@@ -65,6 +65,7 @@ namespace glabels
|
|||||||
connect( mModel, SIGNAL(changed()), this, SLOT(onModelChanged()) );
|
connect( mModel, SIGNAL(changed()), this, SLOT(onModelChanged()) );
|
||||||
|
|
||||||
onModelChanged();
|
onModelChanged();
|
||||||
|
mVariables = mModel->variables();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -246,83 +247,107 @@ namespace glabels
|
|||||||
|
|
||||||
void PageRenderer::printSimplePage( QPainter* painter, int iPage ) const
|
void PageRenderer::printSimplePage( QPainter* painter, int iPage ) const
|
||||||
{
|
{
|
||||||
int iStart = 0;
|
|
||||||
int iEnd = mNLabelsPerPage;
|
|
||||||
|
|
||||||
if ( iPage == 0 )
|
|
||||||
{
|
|
||||||
iStart = mStartLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (mLastLabel / mNLabelsPerPage) == iPage )
|
|
||||||
{
|
|
||||||
iEnd = mLastLabel % mNLabelsPerPage;
|
|
||||||
}
|
|
||||||
|
|
||||||
printCropMarks( painter );
|
printCropMarks( painter );
|
||||||
|
|
||||||
for ( int i = iStart; i < iEnd; i++ )
|
int iCopy = 0;
|
||||||
|
int iLabel = mStartLabel;
|
||||||
|
int iCurrentPage = 0;
|
||||||
|
mVariables->resetVariables();
|
||||||
|
|
||||||
|
while ( (iCopy < mNCopies) && (iCurrentPage <= iPage) )
|
||||||
{
|
{
|
||||||
painter->save();
|
if ( iCurrentPage == iPage )
|
||||||
|
{
|
||||||
|
int i = iLabel % mNLabelsPerPage;
|
||||||
|
|
||||||
|
painter->save();
|
||||||
|
|
||||||
painter->translate( mOrigins[i].x().pt(), mOrigins[i].y().pt() );
|
painter->translate( mOrigins[i].x().pt(), mOrigins[i].y().pt() );
|
||||||
|
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
clipLabel( painter );
|
clipLabel( painter );
|
||||||
printLabel( painter, nullptr );
|
printLabel( painter, nullptr, mVariables );
|
||||||
|
|
||||||
painter->restore(); // From before clip
|
painter->restore(); // From before clip
|
||||||
|
|
||||||
printOutline( painter );
|
printOutline( painter );
|
||||||
|
|
||||||
painter->restore(); // From before translation
|
painter->restore(); // From before translation
|
||||||
|
}
|
||||||
|
|
||||||
|
iCopy++;
|
||||||
|
iLabel++;
|
||||||
|
iCurrentPage = iLabel / mNLabelsPerPage;
|
||||||
|
|
||||||
|
mVariables->incrementVariablesOnItem();
|
||||||
|
mVariables->incrementVariablesOnCopy();
|
||||||
|
if ( (iLabel % mNLabelsPerPage) == 0 /* starting a new page */ )
|
||||||
|
{
|
||||||
|
mVariables->incrementVariablesOnPage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PageRenderer::printMergePage( QPainter* painter, int iPage ) const
|
void PageRenderer::printMergePage( QPainter* painter, int iPage ) const
|
||||||
{
|
{
|
||||||
int iRecord = 0;
|
|
||||||
int iStart = 0;
|
|
||||||
int iEnd = mNLabelsPerPage;
|
|
||||||
|
|
||||||
if ( iPage == 0 )
|
|
||||||
{
|
|
||||||
iStart = mStartLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (mLastLabel / mNLabelsPerPage) == iPage )
|
|
||||||
{
|
|
||||||
iEnd = mLastLabel % mNLabelsPerPage;
|
|
||||||
}
|
|
||||||
|
|
||||||
const QList<merge::Record*> records = mMerge->selectedRecords();
|
|
||||||
if ( records.size() )
|
|
||||||
{
|
|
||||||
iRecord = (iPage*mNLabelsPerPage + iStart - mStartLabel) % records.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
printCropMarks( painter );
|
printCropMarks( painter );
|
||||||
|
|
||||||
for ( int i = iStart; i < iEnd; i++ )
|
int iCopy = 0;
|
||||||
|
int iLabel = mStartLabel;
|
||||||
|
int iCurrentPage = 0;
|
||||||
|
|
||||||
|
const QList<merge::Record*> records = mMerge->selectedRecords();
|
||||||
|
int iRecord = 0;
|
||||||
|
int nRecords = records.size();
|
||||||
|
|
||||||
|
if ( nRecords == 0 )
|
||||||
{
|
{
|
||||||
painter->save();
|
return;
|
||||||
|
}
|
||||||
painter->translate( mOrigins[i].x().pt(), mOrigins[i].y().pt() );
|
|
||||||
|
|
||||||
painter->save();
|
mVariables->resetVariables();
|
||||||
|
|
||||||
clipLabel( painter );
|
while ( (iCopy < mNCopies) && (iCurrentPage <= iPage) )
|
||||||
printLabel( painter, records[iRecord] );
|
{
|
||||||
|
if ( iCurrentPage == iPage )
|
||||||
|
{
|
||||||
|
int i = iLabel % mNLabelsPerPage;
|
||||||
|
|
||||||
|
painter->save();
|
||||||
|
|
||||||
painter->restore(); // From before clip
|
painter->translate( mOrigins[i].x().pt(), mOrigins[i].y().pt() );
|
||||||
|
|
||||||
printOutline( painter );
|
|
||||||
|
|
||||||
painter->restore(); // From before translation
|
painter->save();
|
||||||
|
|
||||||
iRecord = (iRecord + 1) % records.size();
|
clipLabel( painter );
|
||||||
|
printLabel( painter, records[iRecord], mVariables );
|
||||||
|
|
||||||
|
painter->restore(); // From before clip
|
||||||
|
|
||||||
|
printOutline( painter );
|
||||||
|
|
||||||
|
painter->restore(); // From before translation
|
||||||
|
}
|
||||||
|
|
||||||
|
iRecord = (iRecord + 1) % nRecords;
|
||||||
|
if ( iRecord == 0 )
|
||||||
|
{
|
||||||
|
iCopy++;
|
||||||
|
}
|
||||||
|
iLabel++;
|
||||||
|
iCurrentPage = iLabel / mNLabelsPerPage;
|
||||||
|
|
||||||
|
mVariables->incrementVariablesOnItem();
|
||||||
|
if ( iRecord == 0 )
|
||||||
|
{
|
||||||
|
mVariables->incrementVariablesOnCopy();
|
||||||
|
}
|
||||||
|
if ( (iLabel % mNLabelsPerPage) == 0 /* starting a new page */ )
|
||||||
|
{
|
||||||
|
mVariables->incrementVariablesOnPage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -408,7 +433,9 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PageRenderer::printLabel( QPainter* painter, merge::Record* record ) const
|
void PageRenderer::printLabel( QPainter* painter,
|
||||||
|
merge::Record* record,
|
||||||
|
Variables* variables ) const
|
||||||
{
|
{
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
@@ -424,7 +451,7 @@ namespace glabels
|
|||||||
painter->scale( -1, 1 );
|
painter->scale( -1, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
mModel->draw( painter, false, record );
|
mModel->draw( painter, false, record, variables );
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Point.h"
|
#include "Point.h"
|
||||||
|
#include "Variables.h"
|
||||||
|
|
||||||
#include "merge/Merge.h"
|
#include "merge/Merge.h"
|
||||||
#include "merge/Record.h"
|
#include "merge/Record.h"
|
||||||
@@ -100,7 +101,7 @@ namespace glabels
|
|||||||
void printCropMarks( QPainter* painter ) const;
|
void printCropMarks( QPainter* painter ) const;
|
||||||
void printOutline( QPainter* painter ) const;
|
void printOutline( QPainter* painter ) const;
|
||||||
void clipLabel( QPainter* painter ) const;
|
void clipLabel( QPainter* painter ) const;
|
||||||
void printLabel( QPainter* painter, merge::Record* record ) const;
|
void printLabel( QPainter* painter, merge::Record* record, Variables* variables ) const;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
@@ -109,6 +110,7 @@ namespace glabels
|
|||||||
private:
|
private:
|
||||||
const Model* mModel;
|
const Model* mModel;
|
||||||
const merge::Merge* mMerge;
|
const merge::Merge* mMerge;
|
||||||
|
Variables* mVariables;
|
||||||
|
|
||||||
int mNCopies;
|
int mNCopies;
|
||||||
int mStartLabel;
|
int mStartLabel;
|
||||||
|
|||||||
+2
-2
@@ -66,7 +66,7 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Expand all place holders
|
/// Expand all place holders
|
||||||
///
|
///
|
||||||
QString RawText::expand( merge::Record* record ) const
|
QString RawText::expand( merge::Record* record, Variables* variables ) const
|
||||||
{
|
{
|
||||||
QString text;
|
QString text;
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ namespace glabels
|
|||||||
{
|
{
|
||||||
if ( token.isField )
|
if ( token.isField )
|
||||||
{
|
{
|
||||||
text += token.field.evaluate( record );
|
text += token.field.evaluate( record, variables );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -52,7 +52,7 @@ namespace glabels
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
QString toString() const;
|
QString toString() const;
|
||||||
std::string toStdString() const;
|
std::string toStdString() const;
|
||||||
QString expand( merge::Record* record ) const;
|
QString expand( merge::Record* record, Variables* variables ) const;
|
||||||
bool hasPlaceHolders() const;
|
bool hasPlaceHolders() const;
|
||||||
bool isEmpty() const;
|
bool isEmpty() const;
|
||||||
|
|
||||||
|
|||||||
@@ -42,21 +42,33 @@ namespace glabels
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString SubstitutionField::evaluate( const merge::Record* record ) const
|
QString SubstitutionField::evaluate( const merge::Record* record,
|
||||||
|
const Variables* variables ) const
|
||||||
{
|
{
|
||||||
QString value = mDefaultValue;
|
QString value = mDefaultValue;
|
||||||
|
|
||||||
if ( record && record->contains(mFieldName) && !record->value(mFieldName).isEmpty() )
|
bool haveRecordField = record &&
|
||||||
|
record->contains(mFieldName) &&
|
||||||
|
!record->value(mFieldName).isEmpty();
|
||||||
|
bool haveVariable = variables &&
|
||||||
|
variables->contains(mFieldName) &&
|
||||||
|
!(*variables)[mFieldName].value().isEmpty();
|
||||||
|
|
||||||
|
if ( haveRecordField )
|
||||||
{
|
{
|
||||||
value = record->value(mFieldName);
|
value = record->value(mFieldName);
|
||||||
}
|
}
|
||||||
|
else if ( haveVariable )
|
||||||
|
{
|
||||||
|
value = (*variables)[mFieldName].value();
|
||||||
|
}
|
||||||
|
|
||||||
if ( !mFormatType.isNull() )
|
if ( !mFormatType.isNull() )
|
||||||
{
|
{
|
||||||
value = formatValue( value );
|
value = formatValue( value );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( record && record->contains(mFieldName) && !record->value(mFieldName).isEmpty() && mNewLine )
|
if ( mNewLine && (haveRecordField || haveVariable) )
|
||||||
{
|
{
|
||||||
value = "\n" + value;
|
value = "\n" + value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#ifndef model_SubstitutionField_h
|
#ifndef model_SubstitutionField_h
|
||||||
#define model_SubstitutionField_h
|
#define model_SubstitutionField_h
|
||||||
|
|
||||||
|
#include "Variables.h"
|
||||||
|
|
||||||
#include "merge/Record.h"
|
#include "merge/Record.h"
|
||||||
|
|
||||||
@@ -39,7 +40,7 @@ namespace glabels
|
|||||||
SubstitutionField();
|
SubstitutionField();
|
||||||
SubstitutionField( const QString& string );
|
SubstitutionField( const QString& string );
|
||||||
|
|
||||||
QString evaluate( const merge::Record* record ) const;
|
QString evaluate( const merge::Record* record, const Variables* variables ) const;
|
||||||
|
|
||||||
QString fieldName() const;
|
QString fieldName() const;
|
||||||
QString defaultValue() const;
|
QString defaultValue() const;
|
||||||
|
|||||||
+21
-35
@@ -105,48 +105,34 @@ namespace glabels
|
|||||||
///
|
///
|
||||||
/// Get text, expand if necessary
|
/// Get text, expand if necessary
|
||||||
///
|
///
|
||||||
QString TextNode::text( merge::Record* record ) const
|
QString TextNode::text( const merge::Record* record,
|
||||||
|
const Variables* variables ) const
|
||||||
{
|
{
|
||||||
if ( mIsField )
|
QString value("");
|
||||||
|
|
||||||
|
bool haveRecordField = mIsField && record &&
|
||||||
|
record->contains(mData) &&
|
||||||
|
!record->value(mData).isEmpty();
|
||||||
|
bool haveVariable = mIsField && variables &&
|
||||||
|
variables->contains(mData) &&
|
||||||
|
!(*variables)[mData].value().isEmpty();
|
||||||
|
|
||||||
|
if ( haveRecordField )
|
||||||
{
|
{
|
||||||
if ( !record )
|
value = record->value(mData);
|
||||||
{
|
|
||||||
return QString("${%1}").arg( mData );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( record->contains( mData ) )
|
|
||||||
{
|
|
||||||
return (*record)[ mData ];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else if ( haveVariable )
|
||||||
{
|
{
|
||||||
return mData;
|
value = (*variables)[mData].value();
|
||||||
}
|
}
|
||||||
|
else if ( !mIsField )
|
||||||
|
{
|
||||||
|
value = mData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Is it an empty field
|
|
||||||
///
|
|
||||||
bool TextNode::isEmptyField( merge::Record* record ) const
|
|
||||||
{
|
|
||||||
if ( record && mIsField )
|
|
||||||
{
|
|
||||||
if ( record->contains( mData ) )
|
|
||||||
{
|
|
||||||
return (*record)[mData].isEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -22,6 +22,7 @@
|
|||||||
#define model_TextNode_h
|
#define model_TextNode_h
|
||||||
|
|
||||||
|
|
||||||
|
#include "Variables.h"
|
||||||
#include "merge/Record.h"
|
#include "merge/Record.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@@ -76,8 +77,8 @@ namespace glabels
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Misc. Methods
|
// Misc. Methods
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
QString text( merge::Record* record ) const;
|
QString text( const merge::Record* record,
|
||||||
bool isEmptyField( merge::Record* record ) const;
|
const Variables* variables ) const;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
|||||||
@@ -0,0 +1,323 @@
|
|||||||
|
/* Variable.cpp
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2016 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Variable.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace glabels
|
||||||
|
{
|
||||||
|
namespace model
|
||||||
|
{
|
||||||
|
|
||||||
|
Variable::Variable()
|
||||||
|
: mType(Type::STRING),
|
||||||
|
mIncrement(Increment::NEVER),
|
||||||
|
mStepSize("0"),
|
||||||
|
mIntegerValue(0),
|
||||||
|
mIntegerStep(0),
|
||||||
|
mFloatingPointValue(0),
|
||||||
|
mFloatingPointStep(0)
|
||||||
|
{
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Variable::Variable( Variable::Type type,
|
||||||
|
const QString& name,
|
||||||
|
const QString& initialValue,
|
||||||
|
Variable::Increment increment,
|
||||||
|
const QString& stepSize )
|
||||||
|
: mType(type),
|
||||||
|
mName(name),
|
||||||
|
mInitialValue(initialValue),
|
||||||
|
mIncrement(increment),
|
||||||
|
mStepSize(stepSize),
|
||||||
|
mIntegerValue(0),
|
||||||
|
mIntegerStep(0),
|
||||||
|
mFloatingPointValue(0),
|
||||||
|
mFloatingPointStep(0)
|
||||||
|
{
|
||||||
|
resetValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Variable::Type Variable::type() const
|
||||||
|
{
|
||||||
|
return mType;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::name() const
|
||||||
|
{
|
||||||
|
return mName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::initialValue() const
|
||||||
|
{
|
||||||
|
return mInitialValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Variable::Increment Variable::increment() const
|
||||||
|
{
|
||||||
|
return mIncrement;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::stepSize() const
|
||||||
|
{
|
||||||
|
return mStepSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Variable::resetValue()
|
||||||
|
{
|
||||||
|
switch (mType)
|
||||||
|
{
|
||||||
|
case Type::STRING:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
case Type::INTEGER:
|
||||||
|
mIntegerValue = mInitialValue.toLongLong();
|
||||||
|
mIntegerStep = mStepSize.toLongLong();
|
||||||
|
break;
|
||||||
|
case Type::FLOATING_POINT:
|
||||||
|
mFloatingPointValue = mInitialValue.toDouble();
|
||||||
|
mFloatingPointStep = mStepSize.toDouble();
|
||||||
|
break;
|
||||||
|
case Type::COLOR:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Variable::incrementValueOnItem()
|
||||||
|
{
|
||||||
|
if ( mIncrement == Increment::PER_ITEM )
|
||||||
|
{
|
||||||
|
switch (mType)
|
||||||
|
{
|
||||||
|
case Type::STRING:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
case Type::INTEGER:
|
||||||
|
mIntegerValue += mIntegerStep;
|
||||||
|
break;
|
||||||
|
case Type::FLOATING_POINT:
|
||||||
|
mFloatingPointValue += mFloatingPointStep;
|
||||||
|
break;
|
||||||
|
case Type::COLOR:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Variable::incrementValueOnCopy()
|
||||||
|
{
|
||||||
|
if ( mIncrement == Increment::PER_COPY )
|
||||||
|
{
|
||||||
|
switch (mType)
|
||||||
|
{
|
||||||
|
case Type::STRING:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
case Type::INTEGER:
|
||||||
|
mIntegerValue += mIntegerStep;
|
||||||
|
break;
|
||||||
|
case Type::FLOATING_POINT:
|
||||||
|
mFloatingPointValue += mFloatingPointStep;
|
||||||
|
break;
|
||||||
|
case Type::COLOR:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Variable::incrementValueOnPage()
|
||||||
|
{
|
||||||
|
if ( mIncrement == Increment::PER_PAGE )
|
||||||
|
{
|
||||||
|
switch (mType)
|
||||||
|
{
|
||||||
|
case Type::STRING:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
case Type::INTEGER:
|
||||||
|
mIntegerValue += mIntegerStep;
|
||||||
|
break;
|
||||||
|
case Type::FLOATING_POINT:
|
||||||
|
mFloatingPointValue += mFloatingPointStep;
|
||||||
|
break;
|
||||||
|
case Type::COLOR:
|
||||||
|
// do nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::value() const
|
||||||
|
{
|
||||||
|
switch (mType)
|
||||||
|
{
|
||||||
|
case Type::STRING:
|
||||||
|
return mInitialValue;
|
||||||
|
case Type::INTEGER:
|
||||||
|
return QString::number( mIntegerValue );
|
||||||
|
case Type::FLOATING_POINT:
|
||||||
|
return QString::number( mFloatingPointValue, 'g', 15 );
|
||||||
|
case Type::COLOR:
|
||||||
|
return mInitialValue;
|
||||||
|
default:
|
||||||
|
return mInitialValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::typeToI18nString( Type type )
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case Type::STRING:
|
||||||
|
return tr("String");
|
||||||
|
case Type::INTEGER:
|
||||||
|
return tr("Integer");
|
||||||
|
case Type::FLOATING_POINT:
|
||||||
|
return tr("Floating Point");
|
||||||
|
case Type::COLOR:
|
||||||
|
return tr("Color");
|
||||||
|
default:
|
||||||
|
return tr("String");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::typeToIdString( Type type )
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case Type::STRING:
|
||||||
|
return "string";
|
||||||
|
case Type::INTEGER:
|
||||||
|
return "integer";
|
||||||
|
case Type::FLOATING_POINT:
|
||||||
|
return "float";
|
||||||
|
case Type::COLOR:
|
||||||
|
return "color";
|
||||||
|
default:
|
||||||
|
return "string";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Variable::Type Variable::idStringToType( const QString& id )
|
||||||
|
{
|
||||||
|
if ( id == "string" )
|
||||||
|
{
|
||||||
|
return Type::STRING;
|
||||||
|
}
|
||||||
|
else if ( id == "integer" )
|
||||||
|
{
|
||||||
|
return Type::INTEGER;
|
||||||
|
}
|
||||||
|
else if ( id == "float" )
|
||||||
|
{
|
||||||
|
return Type::FLOATING_POINT;
|
||||||
|
}
|
||||||
|
if ( id == "color" )
|
||||||
|
{
|
||||||
|
return Type::COLOR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Type::STRING; // Default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::incrementToI18nString( Increment increment )
|
||||||
|
{
|
||||||
|
switch (increment)
|
||||||
|
{
|
||||||
|
case Increment::NEVER:
|
||||||
|
return tr("Never");
|
||||||
|
case Increment::PER_ITEM:
|
||||||
|
return tr("Per item");
|
||||||
|
case Increment::PER_COPY:
|
||||||
|
return tr("Per copy");
|
||||||
|
case Increment::PER_PAGE:
|
||||||
|
return tr("Per page");
|
||||||
|
default:
|
||||||
|
return tr("Never");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString Variable::incrementToIdString( Increment increment )
|
||||||
|
{
|
||||||
|
switch (increment)
|
||||||
|
{
|
||||||
|
case Increment::NEVER:
|
||||||
|
return "never";
|
||||||
|
case Increment::PER_ITEM:
|
||||||
|
return "per_item";
|
||||||
|
case Increment::PER_COPY:
|
||||||
|
return "per_copy";
|
||||||
|
case Increment::PER_PAGE:
|
||||||
|
return "per_page";
|
||||||
|
default:
|
||||||
|
return "never";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Variable::Increment Variable::idStringToIncrement( const QString& id )
|
||||||
|
{
|
||||||
|
if ( id == "never" )
|
||||||
|
{
|
||||||
|
return Increment::NEVER;
|
||||||
|
}
|
||||||
|
else if ( id == "per_item" )
|
||||||
|
{
|
||||||
|
return Increment::PER_ITEM;
|
||||||
|
}
|
||||||
|
else if ( id == "per_copy" )
|
||||||
|
{
|
||||||
|
return Increment::PER_COPY;
|
||||||
|
}
|
||||||
|
else if ( id == "per_page" )
|
||||||
|
{
|
||||||
|
return Increment::PER_PAGE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Increment::NEVER; // Default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
/* Variable.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 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 model_Variable_h
|
||||||
|
#define model_Variable_h
|
||||||
|
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
|
||||||
|
namespace glabels
|
||||||
|
{
|
||||||
|
namespace model
|
||||||
|
{
|
||||||
|
|
||||||
|
class Variable
|
||||||
|
{
|
||||||
|
Q_DECLARE_TR_FUNCTIONS(Variable)
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum class Type
|
||||||
|
{
|
||||||
|
STRING,
|
||||||
|
INTEGER,
|
||||||
|
FLOATING_POINT,
|
||||||
|
COLOR
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class Increment
|
||||||
|
{
|
||||||
|
NEVER,
|
||||||
|
PER_ITEM,
|
||||||
|
PER_COPY,
|
||||||
|
PER_PAGE
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
Variable();
|
||||||
|
|
||||||
|
Variable( Type type,
|
||||||
|
const QString& name,
|
||||||
|
const QString& initialValue,
|
||||||
|
Increment increment = Increment::NEVER,
|
||||||
|
const QString& stepSize = "0" );
|
||||||
|
|
||||||
|
virtual ~Variable() = default;
|
||||||
|
|
||||||
|
|
||||||
|
Type type() const;
|
||||||
|
QString name() const;
|
||||||
|
QString initialValue() const;
|
||||||
|
Increment increment() const;
|
||||||
|
QString stepSize() const;
|
||||||
|
|
||||||
|
void resetValue();
|
||||||
|
void incrementValueOnItem();
|
||||||
|
void incrementValueOnCopy();
|
||||||
|
void incrementValueOnPage();
|
||||||
|
QString value() const;
|
||||||
|
|
||||||
|
static QString typeToI18nString( Type type );
|
||||||
|
static QString typeToIdString( Type type );
|
||||||
|
static Type idStringToType( const QString& string );
|
||||||
|
|
||||||
|
static QString incrementToI18nString( Increment increment );
|
||||||
|
static QString incrementToIdString( Increment increment );
|
||||||
|
static Increment idStringToIncrement( const QString& string );
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
Type mType;
|
||||||
|
QString mName;
|
||||||
|
QString mInitialValue;
|
||||||
|
Increment mIncrement;
|
||||||
|
QString mStepSize;
|
||||||
|
|
||||||
|
long long mIntegerValue;
|
||||||
|
long long mIntegerStep;
|
||||||
|
double mFloatingPointValue;
|
||||||
|
double mFloatingPointStep;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif // model_Variable_h
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
/* Variables.cpp
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2016 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Variables.h"
|
||||||
|
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
|
||||||
|
namespace glabels
|
||||||
|
{
|
||||||
|
namespace model
|
||||||
|
{
|
||||||
|
///
|
||||||
|
/// Copy constructor
|
||||||
|
///
|
||||||
|
Variables::Variables( const Variables* variables )
|
||||||
|
: QMap<QString,Variable>(*variables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clone
|
||||||
|
///
|
||||||
|
Variables* Variables::clone() const
|
||||||
|
{
|
||||||
|
return new Variables( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Do we have variable?
|
||||||
|
///
|
||||||
|
bool Variables::hasVariable( const QString& name ) const
|
||||||
|
{
|
||||||
|
return contains(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Add variable ( will replace if name is the same )
|
||||||
|
///
|
||||||
|
void Variables::addVariable( const Variable& variable )
|
||||||
|
{
|
||||||
|
insert( variable.name(), variable );
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Delete variable
|
||||||
|
///
|
||||||
|
void Variables::deleteVariable( const QString& name )
|
||||||
|
{
|
||||||
|
remove( name );
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Replace variable
|
||||||
|
///
|
||||||
|
void Variables::replaceVariable( const QString& origName, const Variable& variable )
|
||||||
|
{
|
||||||
|
remove( origName );
|
||||||
|
insert( variable.name(), variable );
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Reset variables to their initial values
|
||||||
|
///
|
||||||
|
void Variables::resetVariables()
|
||||||
|
{
|
||||||
|
for ( auto& v : *this )
|
||||||
|
{
|
||||||
|
v.resetValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Increment variables on item
|
||||||
|
///
|
||||||
|
void Variables::incrementVariablesOnItem()
|
||||||
|
{
|
||||||
|
for ( auto& v : *this )
|
||||||
|
{
|
||||||
|
v.incrementValueOnItem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Increment variables on copy
|
||||||
|
///
|
||||||
|
void Variables::incrementVariablesOnCopy()
|
||||||
|
{
|
||||||
|
for ( auto& v : *this )
|
||||||
|
{
|
||||||
|
v.incrementValueOnCopy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Increment variables on page
|
||||||
|
///
|
||||||
|
void Variables::incrementVariablesOnPage()
|
||||||
|
{
|
||||||
|
for ( auto& v : *this )
|
||||||
|
{
|
||||||
|
v.incrementValueOnPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace model
|
||||||
|
|
||||||
|
} // namespace glabels
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
/* Variables.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2016 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 model_Variables_h
|
||||||
|
#define model_Variables_h
|
||||||
|
|
||||||
|
|
||||||
|
#include "Variable.h"
|
||||||
|
|
||||||
|
#include <QMap>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
|
||||||
|
namespace glabels
|
||||||
|
{
|
||||||
|
namespace model
|
||||||
|
{
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Variables Collection
|
||||||
|
///
|
||||||
|
class Variables : public QObject, public QMap<QString,Variable>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Life Cycle
|
||||||
|
/////////////////////////////////
|
||||||
|
public:
|
||||||
|
Variables() = default;
|
||||||
|
Variables( const Variables* variables );
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Object duplication
|
||||||
|
/////////////////////////////////
|
||||||
|
Variables* clone() const;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Methods
|
||||||
|
/////////////////////////////////
|
||||||
|
bool hasVariable( const QString& name ) const;
|
||||||
|
void addVariable( const Variable& variable );
|
||||||
|
void deleteVariable( const QString& name );
|
||||||
|
void replaceVariable( const QString& name, const Variable& variable );
|
||||||
|
|
||||||
|
void resetVariables();
|
||||||
|
void incrementVariablesOnItem();
|
||||||
|
void incrementVariablesOnCopy();
|
||||||
|
void incrementVariablesOnPage();
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Signals
|
||||||
|
/////////////////////////////////
|
||||||
|
signals:
|
||||||
|
void changed();
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Private data
|
||||||
|
/////////////////////////////////
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif // model_Variables_h
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user