2009-11-18 01:36:04 +03:00
/*
Zint Barcode Generator - the open source barcode generator
2017-07-27 12:21:46 +03:00
Copyright ( C ) 2009 - 2017 Robin Stuart < rstuart114 @ gmail . com >
2009-11-18 01:36:04 +03:00
This program 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 .
This program 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 this program ; if not , write to the Free Software Foundation , Inc . ,
51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
*/
# include <QDebug>
# include <QFile>
# include <QUiLoader>
# include <QFileDialog>
# include <QMessageBox>
2017-07-27 12:21:46 +03:00
# include <QSettings>
2009-11-18 01:36:04 +03:00
# include "sequencewindow.h"
# include "exportwindow.h"
# include <stdio.h>
SequenceWindow : : SequenceWindow ( )
{
setupUi ( this ) ;
2017-07-27 12:21:46 +03:00
QSettings settings ;
2009-11-18 01:36:04 +03:00
QValidator * intvalid = new QIntValidator ( this ) ;
2017-10-23 22:37:52 +03:00
2017-07-27 12:21:46 +03:00
linStartVal - > setText ( settings . value ( " studio/sequence/start_value " , " 1 " ) . toString ( ) ) ;
linEndVal - > setText ( settings . value ( " studio/sequence/end_value " , " 10 " ) . toString ( ) ) ;
linIncVal - > setText ( settings . value ( " studio/sequence/increment " , " 1 " ) . toString ( ) ) ;
linFormat - > setText ( settings . value ( " studio/sequence/format " , " $$$$$$ " ) . toString ( ) ) ;
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
linStartVal - > setValidator ( intvalid ) ;
linEndVal - > setValidator ( intvalid ) ;
linIncVal - > setValidator ( intvalid ) ;
connect ( btnClose , SIGNAL ( clicked ( bool ) ) , SLOT ( quit_now ( ) ) ) ;
connect ( btnReset , SIGNAL ( clicked ( bool ) ) , SLOT ( reset_preview ( ) ) ) ;
connect ( btnCreate , SIGNAL ( clicked ( bool ) ) , SLOT ( create_sequence ( ) ) ) ;
connect ( txtPreview , SIGNAL ( textChanged ( ) ) , SLOT ( check_generate ( ) ) ) ;
connect ( btnImport , SIGNAL ( clicked ( bool ) ) , SLOT ( import ( ) ) ) ;
connect ( btnExport , SIGNAL ( clicked ( bool ) ) , SLOT ( generate_sequence ( ) ) ) ;
}
SequenceWindow : : ~ SequenceWindow ( )
{
2017-07-27 12:21:46 +03:00
QSettings settings ;
2017-10-23 22:37:52 +03:00
2017-07-27 12:21:46 +03:00
settings . setValue ( " studio/sequence/start_value " , linStartVal - > text ( ) ) ;
settings . setValue ( " studio/sequence/end_value " , linEndVal - > text ( ) ) ;
settings . setValue ( " studio/sequence/increment " , linIncVal - > text ( ) ) ;
settings . setValue ( " studio/sequence/format " , linFormat - > text ( ) ) ;
2009-11-18 01:36:04 +03:00
}
void SequenceWindow : : quit_now ( )
{
close ( ) ;
}
void SequenceWindow : : reset_preview ( )
{
txtPreview - > clear ( ) ;
}
QString SequenceWindow : : apply_format ( QString raw_number )
{
QString adjusted , reversed ;
QString format ;
int format_len , input_len , i , inpos ;
QChar format_qchar ;
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
format = linFormat - > text ( ) ;
input_len = raw_number . length ( ) ;
format_len = format . length ( ) ;
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
inpos = input_len ;
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
for ( i = format_len ; i > 0 ; i - - ) {
format_qchar = format [ i - 1 ] ;
2017-09-10 18:03:09 +03:00
char format_char = format_qchar . toLatin1 ( ) ;
2009-11-18 01:36:04 +03:00
switch ( format_char ) {
case ' # ' :
if ( inpos > 0 ) {
adjusted + = raw_number [ inpos - 1 ] ;
inpos - - ;
} else {
adjusted + = ' ' ;
}
break ;
case ' $ ' :
if ( inpos > 0 ) {
adjusted + = raw_number [ inpos - 1 ] ;
inpos - - ;
} else {
adjusted + = ' 0 ' ;
}
break ;
case ' * ' :
if ( inpos > 0 ) {
adjusted + = raw_number [ inpos - 1 ] ;
inpos - - ;
} else {
adjusted + = ' * ' ;
}
break ;
default :
adjusted + = format_char ;
break ;
}
}
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
for ( i = format_len ; i > 0 ; i - - ) {
reversed + = adjusted [ i - 1 ] ;
}
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
return reversed ;
}
void SequenceWindow : : create_sequence ( )
{
QString startval , endval , incval , part , outputtext ;
int start , stop , step , i ;
bool ok ;
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
startval = linStartVal - > text ( ) ;
endval = linEndVal - > text ( ) ;
incval = linIncVal - > text ( ) ;
start = startval . toInt ( & ok , 10 ) ;
stop = endval . toInt ( & ok , 10 ) ;
step = incval . toInt ( & ok , 10 ) ;
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
if ( ( stop < = start ) | | ( step < = 0 ) ) {
QMessageBox : : critical ( this , tr ( " Sequence Error " ) , tr ( " One or more of the input values is incorrect. " ) ) ;
return ;
}
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
for ( i = start ; i < = stop ; i + = step ) {
part = apply_format ( QString : : number ( i , 10 ) ) ;
part + = ' \n ' ;
outputtext + = part ;
}
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
txtPreview - > setPlainText ( outputtext ) ;
}
void SequenceWindow : : check_generate ( )
{
QString preview_copy ;
2017-10-23 22:37:52 +03:00
2009-11-18 01:36:04 +03:00
preview_copy = txtPreview - > toPlainText ( ) ;
if ( preview_copy . isEmpty ( ) ) {
btnExport - > setEnabled ( false ) ;
2020-10-04 00:51:08 +03:00
lblExport - > setEnabled ( false ) ;
2009-11-18 01:36:04 +03:00
} else {
btnExport - > setEnabled ( true ) ;
2020-10-04 00:51:08 +03:00
lblExport - > setEnabled ( true ) ;
2009-11-18 01:36:04 +03:00
}
}
void SequenceWindow : : import ( )
{
2017-07-27 12:21:46 +03:00
QSettings settings ;
QFileDialog import_dialog ;
QString filename ;
QFile file ;
QByteArray outstream ;
2017-10-23 22:37:52 +03:00
2017-07-27 12:21:46 +03:00
import_dialog . setWindowTitle ( " Import File " ) ;
import_dialog . setDirectory ( settings . value ( " studio/default_dir " , QDir : : toNativeSeparators ( QDir : : homePath ( ) ) ) . toString ( ) ) ;
2017-10-23 22:37:52 +03:00
2017-07-27 12:21:46 +03:00
if ( import_dialog . exec ( ) ) {
filename = import_dialog . selectedFiles ( ) . at ( 0 ) ;
} else {
return ;
}
2017-10-23 22:37:52 +03:00
2017-07-27 12:21:46 +03:00
file . setFileName ( filename ) ;
if ( ! file . open ( QIODevice : : ReadOnly | QIODevice : : Text ) ) {
QMessageBox : : critical ( this , tr ( " Open Error " ) , tr ( " Could not open selected file. " ) ) ;
return ;
}
outstream = file . readAll ( ) ;
txtPreview - > setPlainText ( QString ( outstream ) ) ;
file . close ( ) ;
2017-10-23 22:37:52 +03:00
2017-07-27 12:21:46 +03:00
settings . setValue ( " studio/default_dir " , filename . mid ( 0 , filename . lastIndexOf ( QDir : : separator ( ) ) ) ) ;
2009-11-18 01:36:04 +03:00
}
void SequenceWindow : : generate_sequence ( )
{
ExportWindow dlg ;
dlg . barcode = barcode ;
dlg . output_data = txtPreview - > toPlainText ( ) ;
2016-02-17 13:37:20 +03:00
dlg . exec ( ) ;
2009-11-18 01:36:04 +03:00
}
2017-10-23 22:37:52 +03:00