|
|
|
/***************************************************************************
|
|
|
|
batchwizard.cpp - description
|
|
|
|
-------------------
|
|
|
|
begin : Sun Mar 20 2005
|
|
|
|
copyright : (C) 2005 by Dominik Seichter
|
|
|
|
email : domseichter@web.de
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#include "batchwizard.h"
|
|
|
|
#include "batchwizard.moc"
|
|
|
|
#include "barcodeprinterdlg.h"
|
|
|
|
#include "batchprinter.h"
|
|
|
|
#include "csvfile.h"
|
|
|
|
#include "definition.h"
|
|
|
|
#include "encodingcombo.h"
|
|
|
|
#include "printersettings.h"
|
|
|
|
#include "printlabeldlg.h"
|
|
|
|
#include "smalldialogs.h"
|
|
|
|
#include "sqltables.h"
|
|
|
|
#include "tokenprovider.h"
|
|
|
|
#include "xmlutils.h"
|
|
|
|
|
|
|
|
#include <tqbuffer.h>
|
|
|
|
#include <tqcheckbox.h>
|
|
|
|
#include <tqclipboard.h>
|
|
|
|
#include <tqcursor.h>
|
|
|
|
#include <tqdom.h>
|
|
|
|
#include <tqheader.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tqradiobutton.h>
|
|
|
|
#include <tqsqlselectcursor.h>
|
|
|
|
#include <tqtooltip.h>
|
|
|
|
#include <tqvbuttongroup.h>
|
|
|
|
#include <tqwidgetstack.h>
|
|
|
|
|
|
|
|
#include <kabc/addressee.h>
|
|
|
|
#include <kabc/addresseelist.h>
|
|
|
|
#include <kabc/addressbook.h>
|
|
|
|
#include <kabc/stdaddressbook.h>
|
|
|
|
#include <kapplication.h>
|
|
|
|
#include <kcombobox.h>
|
|
|
|
#include <kcompletion.h>
|
|
|
|
#include <kfiledialog.h>
|
|
|
|
#include <kiconloader.h>
|
|
|
|
#include <kimageio.h>
|
|
|
|
#include <klineedit.h>
|
|
|
|
#include <klistbox.h>
|
|
|
|
#include <klistview.h>
|
|
|
|
#include <kmessagebox.h>
|
|
|
|
#include <knuminput.h>
|
|
|
|
#include <kpopupmenu.h>
|
|
|
|
#include <kpushbutton.h>
|
|
|
|
#include <kurlrequester.h>
|
|
|
|
#include <tqtable.h>
|
|
|
|
#include <tqvbox.h>
|
|
|
|
|
|
|
|
#define PNG_FORMAT "PNG"
|
|
|
|
|
|
|
|
class AddressListViewItem : public KListViewItem {
|
|
|
|
public:
|
|
|
|
AddressListViewItem(TQListView *parent, KABC::Addressee & addr )
|
|
|
|
: KListViewItem( parent ), m_address( addr )
|
|
|
|
{
|
|
|
|
this->setText( 0, m_address.givenName() );
|
|
|
|
this->setText( 1, m_address.familyName() );
|
|
|
|
this->setText( 2, m_address.preferredEmail() );
|
|
|
|
}
|
|
|
|
|
|
|
|
const KABC::Addressee & address() const {
|
|
|
|
return m_address;
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
KABC::Addressee m_address;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
BatchWizard::BatchWizard( TQWidget* parent, const char* name )
|
|
|
|
: DCOPObject("BatchPrinting"),
|
|
|
|
KWizard( parent, name )
|
|
|
|
{
|
|
|
|
setupPage1();
|
|
|
|
setupPage2();
|
|
|
|
setupPage3();
|
|
|
|
setupPage4();
|
|
|
|
setupPage5();
|
|
|
|
setupPage10();
|
|
|
|
|
|
|
|
compGroup = new KCompletion();
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
setupSql();
|
|
|
|
|
|
|
|
show();
|
|
|
|
}
|
|
|
|
|
|
|
|
BatchWizard::~BatchWizard()
|
|
|
|
{
|
|
|
|
delete compGroup;
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupPage1()
|
|
|
|
{
|
|
|
|
page1 = new TQWidget( this, "page1" );
|
|
|
|
TQVBoxLayout* pageLayout = new TQVBoxLayout( page1, 11, 6, "pageLayout");
|
|
|
|
|
|
|
|
TQLabel* label = new TQLabel( i18n("<qt>This wizard will guide you through the process "
|
|
|
|
"of printing many labels with KBarcode.<br>The first step "
|
|
|
|
"is to select the KBarcode label file you want to print.</qt>"), page1 );
|
|
|
|
pageLayout->addWidget( label );
|
|
|
|
|
|
|
|
m_url = new KURLRequester( page1 );
|
|
|
|
m_url->setMode( KFile::File | KFile::ExistingOnly | KFile::LocalOnly );
|
|
|
|
m_url->setFilter( "*.kbarcode" );
|
|
|
|
|
|
|
|
label = new TQLabel( i18n("&Filename:"), page1 );
|
|
|
|
label->setBuddy( m_url );
|
|
|
|
|
|
|
|
TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Expanding );
|
|
|
|
|
|
|
|
pageLayout->addWidget( label );
|
|
|
|
pageLayout->addWidget( m_url );
|
|
|
|
pageLayout->addItem( spacer );
|
|
|
|
|
|
|
|
addPage( page1, i18n("File Selection") );
|
|
|
|
|
|
|
|
connect( m_url, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupPage2()
|
|
|
|
{
|
|
|
|
page2 = new TQWidget( this, "page2" );
|
|
|
|
TQVBoxLayout* pageLayout = new TQVBoxLayout( page2, 11, 6, "pageLayout");
|
|
|
|
|
|
|
|
TQVButtonGroup* group = new TQVButtonGroup( page2 );
|
|
|
|
|
|
|
|
radioSimple = new TQRadioButton( i18n("Print &labels without data"), group );
|
|
|
|
radioSqlArticles = new TQRadioButton( i18n("Print &articles from KBarcodes SQL database"), group );
|
|
|
|
radioVarImport = new TQRadioButton( i18n("Import &variables and print"), group );
|
|
|
|
radioAddressBook = new TQRadioButton( i18n("Print &contacts from your addressbook"), group );
|
|
|
|
radioSimple->setChecked( true );
|
|
|
|
|
|
|
|
TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Expanding );
|
|
|
|
pageLayout->addWidget( group );
|
|
|
|
pageLayout->addItem( spacer );
|
|
|
|
|
|
|
|
connect( radioSimple, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioSqlArticles, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioVarImport, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioAddressBook, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
|
|
|
|
addPage( page2, i18n("Data Source") );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupPage3()
|
|
|
|
{
|
|
|
|
page3 = new TQWidgetStack( this, "page3" );
|
|
|
|
|
|
|
|
setupStackPage1();
|
|
|
|
setupStackPage2();
|
|
|
|
setupStackPage3();
|
|
|
|
setupStackPage4();
|
|
|
|
|
|
|
|
addPage( page3, i18n("Print Data") );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupPage4()
|
|
|
|
{
|
|
|
|
page4 = new TQVBox( this, "page4" );
|
|
|
|
page4->setSpacing( 5 );
|
|
|
|
|
|
|
|
TQHBox* hbox = new TQHBox( page4 );
|
|
|
|
hbox->setSpacing( 5 );
|
|
|
|
|
|
|
|
buttonTableInsert = new KPushButton( i18n("Insert Row"), hbox );
|
|
|
|
buttonTableInsert->setIconSet( BarIconSet( "edit" ) );
|
|
|
|
buttonTableRemove = new KPushButton( i18n("Delete Row"), hbox );
|
|
|
|
buttonTableRemove->setIconSet( BarIconSet( "editdelete") );
|
|
|
|
|
|
|
|
m_varTable = new TQTable( page4 );
|
|
|
|
m_varTable->setReadOnly( false );
|
|
|
|
m_varTable->setSelectionMode( TQTable::SingleRow );
|
|
|
|
|
|
|
|
addPage( page4, i18n("Import Variables") );
|
|
|
|
|
|
|
|
connect( buttonTableInsert, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotTableInsert() ) );
|
|
|
|
connect( buttonTableRemove, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotTableRemove() ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupPage5()
|
|
|
|
{
|
|
|
|
TokenProvider serial( TQT_TQPAINTDEVICE(this) );
|
|
|
|
|
|
|
|
page5 = new TQVBox( this, "page5" );
|
|
|
|
|
|
|
|
new TQLabel( i18n( "<qt>KBarcode has support for placing serial numbers on labels. "
|
|
|
|
"If you did not use the [serial] token on your label in "
|
|
|
|
"a text field or a barcode, you can skip this page.<br>"
|
|
|
|
"Serial start is a free form start value containing at least one "
|
|
|
|
"number. This number is increased for every printed label on the "
|
|
|
|
"print out.</qt>"), page5 );
|
|
|
|
|
|
|
|
TQHBox* hbox = new TQHBox( page5 );
|
|
|
|
hbox->setSpacing( 5 );
|
|
|
|
|
|
|
|
new TQLabel( i18n( "Serial start:" ), hbox );
|
|
|
|
serialStart = new KLineEdit( serial.serial(), hbox );
|
|
|
|
|
|
|
|
serialInc = new KIntNumInput( 1, hbox );
|
|
|
|
serialInc->setLabel( i18n( "Serial increment:" ), KNumInput::AlignLeft | KNumInput::AlignVCenter );
|
|
|
|
serialInc->setRange( 1, 10000, 1, false );
|
|
|
|
|
|
|
|
addPage( page5, i18n("Serial Number") );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupPage10()
|
|
|
|
{
|
|
|
|
page10 = new TQWidget( this, "page10" );
|
|
|
|
TQVBoxLayout* pageLayout = new TQVBoxLayout( page10, 11, 6, "pageLayout");
|
|
|
|
|
|
|
|
TQVButtonGroup* group = new TQVButtonGroup( page10 );
|
|
|
|
|
|
|
|
radioPrinter = new TQRadioButton( i18n("&Print to a system printer or to a file"), group );
|
|
|
|
radioImage = new TQRadioButton( i18n("&Create images"), group );
|
|
|
|
|
|
|
|
imageBox = new TQVBox( group );
|
|
|
|
imageBox->setMargin( 10 );
|
|
|
|
|
|
|
|
radioBarcode = new TQRadioButton( i18n("Print to a special &barcode printer"), group );
|
|
|
|
|
|
|
|
TQHBox* directoryBox = new TQHBox( imageBox );
|
|
|
|
directoryBox->setSpacing( 5 );
|
|
|
|
TQLabel* label = new TQLabel( i18n("Output &Directory:"), directoryBox );
|
|
|
|
imageDirPath = new KURLRequester( directoryBox );
|
|
|
|
imageDirPath->setMode( KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly );
|
|
|
|
label->setBuddy( directoryBox );
|
|
|
|
|
|
|
|
TQHBox* formatBox = new TQHBox( imageBox );
|
|
|
|
label = new TQLabel( i18n("Output File &Format:"), formatBox );
|
|
|
|
|
|
|
|
TQStringList formats = KImageIO::types( KImageIO::Writing );
|
|
|
|
comboFormat = new KComboBox( false, formatBox );
|
|
|
|
comboFormat->insertStringList( formats );
|
|
|
|
if( formats.contains( PNG_FORMAT ) )
|
|
|
|
comboFormat->setCurrentItem( formats.findIndex( PNG_FORMAT ) );
|
|
|
|
label->setBuddy( comboFormat );
|
|
|
|
|
|
|
|
TQVButtonGroup* imageNameGroup = new TQVButtonGroup( i18n("&Filename:"), imageBox );
|
|
|
|
radioImageFilenameArticle = new TQRadioButton( i18n("Use &article number for filename"), imageNameGroup );
|
|
|
|
radioImageFilenameBarcode = new TQRadioButton( i18n("Use &barcode number for filename"), imageNameGroup );
|
|
|
|
radioImageFilenameCustom = new TQRadioButton( i18n("Use &custom filename:"), imageNameGroup );
|
|
|
|
editImageFilename = new KLineEdit( imageNameGroup );
|
|
|
|
radioImageFilenameBarcode->setChecked( true );
|
|
|
|
|
|
|
|
labelInfo = new TQLabel( page10 );
|
|
|
|
|
|
|
|
radioPrinter->setChecked( true );
|
|
|
|
|
|
|
|
checkKeepOpen = new TQCheckBox( i18n("&Keep window open after printing."), page10 );
|
|
|
|
|
|
|
|
TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Expanding );
|
|
|
|
pageLayout->addWidget( group );
|
|
|
|
pageLayout->addItem( spacer );
|
|
|
|
pageLayout->addWidget( labelInfo );
|
|
|
|
pageLayout->addWidget( checkKeepOpen );
|
|
|
|
|
|
|
|
connect( radioPrinter, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioImage, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioBarcode, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
|
|
|
|
connect( radioImageFilenameArticle, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioImageFilenameBarcode, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioImageFilenameCustom, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
|
|
|
|
connect( imageDirPath, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
|
|
|
|
addPage( page10, i18n("Output Device") );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupStackPage1()
|
|
|
|
{
|
|
|
|
stack1 = new TQVBox( page3, "stack1" );
|
|
|
|
stack1->setSpacing( 5 );
|
|
|
|
|
|
|
|
TQHBox* hbox = new TQHBox( stack1 );
|
|
|
|
hbox->setSpacing( 5 );
|
|
|
|
|
|
|
|
new TQLabel( i18n( "Customer name and no.:" ), hbox );
|
|
|
|
customerName = new KComboBox( false, hbox );
|
|
|
|
customerId = new KComboBox( false, hbox );
|
|
|
|
|
|
|
|
TQHBox* hButtonBox = new TQHBox( stack1 );
|
|
|
|
hButtonBox->setSpacing( 5 );
|
|
|
|
|
|
|
|
buttonAdd = new KPushButton( i18n( "&Add..." ), hButtonBox );
|
|
|
|
buttonImport = new KPushButton( i18n("&Import..."), hButtonBox );
|
|
|
|
buttonEdit = new KPushButton( i18n( "&Edit..." ), hButtonBox );
|
|
|
|
buttonRemove = new KPushButton( i18n("&Remove" ), hButtonBox );
|
|
|
|
buttonRemoveAll = new KPushButton( i18n("R&emove All"), hButtonBox );
|
|
|
|
|
|
|
|
KPopupMenu* mnuImport = new KPopupMenu( this );
|
|
|
|
mnuImport->insertItem( i18n("Import from File ..."), this, TQT_SLOT( loadFromFile() ) );
|
|
|
|
mnuImport->insertItem( i18n("Import from Clipboard ..."), this, TQT_SLOT( loadFromClipboard() ) );
|
|
|
|
mnuImport->insertItem( i18n("Import barcode_basic"), this, TQT_SLOT( addAllItems() ) );
|
|
|
|
buttonImport->setPopup( mnuImport );
|
|
|
|
|
|
|
|
sqlList = new KListView( stack1 );
|
|
|
|
sqlList->addColumn( i18n("Index") );
|
|
|
|
sqlList->addColumn( i18n("Number of Labels") );
|
|
|
|
sqlList->addColumn( i18n("Article Number") );
|
|
|
|
sqlList->addColumn( i18n("Group") );
|
|
|
|
sqlList->setAllColumnsShowFocus( true );
|
|
|
|
connect( sqlList, TQT_SIGNAL(doubleClicked(TQListViewItem*,const TQPoint &,int)),
|
|
|
|
this, TQT_SLOT(changeItem(TQListViewItem*,const TQPoint &,int)));
|
|
|
|
|
|
|
|
connect( customerName, TQT_SIGNAL( activated(int) ), this, TQT_SLOT( customerNameChanged(int) ) );
|
|
|
|
connect( customerId, TQT_SIGNAL( activated(int) ), this, TQT_SLOT( customerIdChanged(int) ) );
|
|
|
|
connect( buttonAdd, TQT_SIGNAL( clicked() ), this, TQT_SLOT( addItem() ) );
|
|
|
|
connect( buttonEdit, TQT_SIGNAL( clicked() ), this, TQT_SLOT( editItem() ) );
|
|
|
|
connect( buttonRemove, TQT_SIGNAL( clicked() ), this, TQT_SLOT( removeItem() ) );
|
|
|
|
connect( buttonRemoveAll, TQT_SIGNAL( clicked() ), sqlList, TQT_SLOT( clear() ) );
|
|
|
|
connect( buttonRemoveAll, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
|
|
|
|
page3->addWidget( stack1 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupStackPage2()
|
|
|
|
{
|
|
|
|
stack2 = new TQHBox( page3, "stack2" );
|
|
|
|
stack2->setSpacing( 5 );
|
|
|
|
|
|
|
|
TQVButtonGroup* group = new TQVButtonGroup( stack2 );
|
|
|
|
radioImportManual = new TQRadioButton( i18n("Enter &data manually"), group );
|
|
|
|
radioImportSql = new TQRadioButton( i18n("Import variables from a &SQL table"), group );
|
|
|
|
labelSqlQuery = new TQLabel( i18n("Please enter a sql &query:"), group );
|
|
|
|
importSqlQuery = new KLineEdit( group );
|
|
|
|
labelSqlQuery->setBuddy( importSqlQuery );
|
|
|
|
|
|
|
|
radioImportCSV = new TQRadioButton( i18n("Import from a &CSV file"), group );
|
|
|
|
labelCsvFile= new TQLabel( i18n("Please select a csv &file:"), group );
|
|
|
|
importCsvFile = new KURLRequester( group );
|
|
|
|
labelCsvFile->setBuddy( importCsvFile );
|
|
|
|
labelEncoding = new TQLabel( i18n("&Encoding:"), group );
|
|
|
|
comboEncoding = new EncodingCombo( group );
|
|
|
|
labelEncoding->setBuddy( comboEncoding );
|
|
|
|
|
|
|
|
radioImportManual->setChecked( true );
|
|
|
|
|
|
|
|
TQVBox* box = new TQVBox( stack2 );
|
|
|
|
box->setSpacing( 5 );
|
|
|
|
|
|
|
|
new TQLabel( i18n("Available Variables:"), box );
|
|
|
|
m_varList = new KListBox( box );
|
|
|
|
|
|
|
|
connect( radioImportManual, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioImportSql, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( radioImportCSV, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( importSqlQuery, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
connect( importCsvFile, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SLOT( enableControls() ) );
|
|
|
|
|
|
|
|
page3->addWidget( stack2 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupStackPage3()
|
|
|
|
{
|
|
|
|
stack3 = new TQVBox( page3, "stack3" );
|
|
|
|
|
|
|
|
numLabels = new KIntNumInput( 1, stack3 );
|
|
|
|
numLabels->setRange( 1, 100000, 1, true );
|
|
|
|
numLabels->setLabel( i18n("&Number of labels to print:"), AlignLeft | AlignVCenter );
|
|
|
|
|
|
|
|
page3->addWidget( stack3 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupStackPage4()
|
|
|
|
{
|
|
|
|
stack4 = new TQWidget( page3, "stack4" );
|
|
|
|
|
|
|
|
TQHBoxLayout* mainLayout = new TQHBoxLayout( stack4 );
|
|
|
|
|
|
|
|
TQVBox* list1 = new TQVBox( stack4 );
|
|
|
|
TQVBox* list2 = new TQVBox( stack4 );
|
|
|
|
|
|
|
|
TQFrame* buttons = new TQFrame( stack4 );
|
|
|
|
buttons->setMargin( 10 );
|
|
|
|
|
|
|
|
TQVBoxLayout* layout = new TQVBoxLayout( buttons );
|
|
|
|
TQSpacerItem* spacer1 = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Expanding );
|
|
|
|
TQSpacerItem* spacer2 = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Expanding );
|
|
|
|
|
|
|
|
buttonAddAllAddress = new KPushButton( buttons );
|
|
|
|
buttonAddAddress = new KPushButton( buttons );
|
|
|
|
buttonRemoveAddress = new KPushButton( buttons );;
|
|
|
|
buttonRemoveAllAddress = new KPushButton( buttons );
|
|
|
|
|
|
|
|
buttonAddAllAddress->setIconSet( BarIconSet( "2rightarrow" ) );
|
|
|
|
buttonAddAddress->setIconSet( BarIconSet( "1rightarrow" ) );
|
|
|
|
buttonRemoveAddress->setIconSet( BarIconSet( "1leftarrow" ) );
|
|
|
|
buttonRemoveAllAddress->setIconSet( BarIconSet( "2leftarrow" ) );
|
|
|
|
|
|
|
|
TQToolTip::add( buttonAddAllAddress, i18n("Add all contacts to the list of contacts which will be printed.") );
|
|
|
|
TQToolTip::add( buttonAddAddress, i18n("Add selected contacts to the list of contacts which will be printed.") );
|
|
|
|
TQToolTip::add( buttonRemoveAddress, i18n("Remove selected contacts from the list of contacts which will be printed.") );
|
|
|
|
TQToolTip::add( buttonRemoveAllAddress, i18n("Remove all contacts from the list of contacts which will be printed.") );
|
|
|
|
|
|
|
|
layout->addItem( spacer1 );
|
|
|
|
layout->addWidget( buttonAddAllAddress );
|
|
|
|
layout->addWidget( buttonAddAddress );
|
|
|
|
layout->addWidget( buttonRemoveAddress );
|
|
|
|
layout->addWidget( buttonRemoveAllAddress );
|
|
|
|
layout->addItem( spacer2 );
|
|
|
|
|
|
|
|
mainLayout->addWidget( list1 );
|
|
|
|
mainLayout->addWidget( buttons );
|
|
|
|
mainLayout->addWidget( list2 );
|
|
|
|
|
|
|
|
mainLayout->setStretchFactor( list1, 2 );
|
|
|
|
mainLayout->setStretchFactor( list2, 2 );
|
|
|
|
|
|
|
|
new TQLabel( i18n("All Addresses"), list1 );
|
|
|
|
new TQLabel( i18n("Selected Addresses"), list2 );
|
|
|
|
|
|
|
|
listAddress = new KListView( list1 );
|
|
|
|
listAddress->addColumn( i18n("Given Name"), 0 );
|
|
|
|
listAddress->addColumn( i18n("Family Name"), 1 );
|
|
|
|
listAddress->addColumn( i18n("Email Address"), 2 );
|
|
|
|
listAddress->setMultiSelection( true );
|
|
|
|
listAddress->setAllColumnsShowFocus( true );
|
|
|
|
|
|
|
|
listAddress->setColumnWidthMode( 0, TQListView::Maximum );
|
|
|
|
listAddress->setColumnWidthMode( 1, TQListView::Maximum );
|
|
|
|
listAddress->setColumnWidthMode( 2, TQListView::Maximum );
|
|
|
|
|
|
|
|
listSelectedAddress = new KListView( list2 );
|
|
|
|
listSelectedAddress->addColumn( i18n("Given Name"), 0 );
|
|
|
|
listSelectedAddress->addColumn( i18n("Family Name"), 1 );
|
|
|
|
listSelectedAddress->addColumn( i18n("Email Address"), 2 );
|
|
|
|
listSelectedAddress->setMultiSelection( true );
|
|
|
|
listSelectedAddress->setAllColumnsShowFocus( true );
|
|
|
|
|
|
|
|
listSelectedAddress->setColumnWidthMode( 0, TQListView::Maximum );
|
|
|
|
listSelectedAddress->setColumnWidthMode( 1, TQListView::Maximum );
|
|
|
|
listSelectedAddress->setColumnWidthMode( 2, TQListView::Maximum );
|
|
|
|
|
|
|
|
connect( buttonAddAddress, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAddAddress() ) );
|
|
|
|
connect( buttonRemoveAddress, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotRemoveAddress() ) );
|
|
|
|
connect( buttonAddAllAddress, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAddAllAddress() ) );
|
|
|
|
connect( buttonRemoveAllAddress, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotRemoveAllAddress() ) );
|
|
|
|
|
|
|
|
page3->addWidget( stack4 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupSql()
|
|
|
|
{
|
|
|
|
SqlTables* tables = SqlTables::getInstance();
|
|
|
|
if( !tables->isConnected() )
|
|
|
|
return;
|
|
|
|
|
|
|
|
TQSqlCursor cur( TABLE_CUSTOMER );
|
|
|
|
cur.select();
|
|
|
|
customerId->clear();
|
|
|
|
customerName->clear();
|
|
|
|
while ( cur.next() ) {
|
|
|
|
customerId->insertItem( cur.value("customer_no" ).toString() );
|
|
|
|
customerName->insertItem( cur.value("customer_name" ).toString() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::enableControls()
|
|
|
|
{
|
|
|
|
setAppropriate( page4, radioVarImport->isChecked() );
|
|
|
|
|
|
|
|
radioSqlArticles->setEnabled( SqlTables::getInstance()->isConnected() );
|
|
|
|
radioImportSql->setEnabled( SqlTables::getInstance()->isConnected() );
|
|
|
|
|
|
|
|
importCsvFile->setEnabled( radioImportCSV->isChecked() );
|
|
|
|
labelCsvFile->setEnabled( radioImportCSV->isChecked() );
|
|
|
|
importSqlQuery->setEnabled( radioImportSql->isChecked() );
|
|
|
|
labelSqlQuery->setEnabled( radioImportSql->isChecked() );
|
|
|
|
labelEncoding->setEnabled( radioImportCSV->isChecked() );
|
|
|
|
comboEncoding->setEnabled( radioImportCSV->isChecked() );
|
|
|
|
|
|
|
|
buttonRemove->setEnabled( sqlList->childCount() );
|
|
|
|
buttonRemoveAll->setEnabled(sqlList->childCount() );
|
|
|
|
buttonEdit->setEnabled( sqlList->childCount() );
|
|
|
|
|
|
|
|
imageBox->setEnabled( radioImage->isChecked() );
|
|
|
|
|
|
|
|
if( radioImportSql->isChecked() )
|
|
|
|
setNextEnabled( page3, !importSqlQuery->text().isEmpty() );
|
|
|
|
else if( radioImportCSV->isChecked() )
|
|
|
|
setNextEnabled( page3, !importCsvFile->url().isEmpty() );
|
|
|
|
else if( radioImportManual->isChecked() )
|
|
|
|
setNextEnabled( page3, true );
|
|
|
|
|
|
|
|
editImageFilename->setEnabled( radioImageFilenameCustom->isChecked() );
|
|
|
|
radioImageFilenameArticle->setEnabled( radioSqlArticles->isChecked() );
|
|
|
|
|
|
|
|
setNextEnabled( page1, !m_url->url().isEmpty() );
|
|
|
|
|
|
|
|
if( radioAddressBook->isChecked() )
|
|
|
|
setNextEnabled( page3, listSelectedAddress->childCount() );
|
|
|
|
|
|
|
|
if( radioImage->isChecked() )
|
|
|
|
setFinishEnabled( page10, !imageDirPath->url().isEmpty() );
|
|
|
|
else
|
|
|
|
setFinishEnabled( page10, true );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::showPage( TQWidget* p )
|
|
|
|
{
|
|
|
|
if( p == page3 )
|
|
|
|
{
|
|
|
|
if( radioSqlArticles->isChecked() )
|
|
|
|
page3->raiseWidget( stack1 );
|
|
|
|
else if( radioVarImport->isChecked() )
|
|
|
|
{
|
|
|
|
page3->raiseWidget( stack2 );
|
|
|
|
fillVarList();
|
|
|
|
}
|
|
|
|
else if( radioSimple->isChecked() )
|
|
|
|
page3->raiseWidget( stack3 );
|
|
|
|
else if( radioAddressBook->isChecked() )
|
|
|
|
{
|
|
|
|
page3->raiseWidget( stack4 );
|
|
|
|
fillAddressList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( p == page4 )
|
|
|
|
if( !fillVarTable() )
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
KWizard::showPage( p );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::accept()
|
|
|
|
{
|
|
|
|
printNow( TQString() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::printNow( const TQString & printer, bool bUserInteraction )
|
|
|
|
{
|
|
|
|
BatchPrinter* batch = NULL;
|
|
|
|
KPrinter* prn = NULL;
|
|
|
|
int batchType = 0;
|
|
|
|
|
|
|
|
// let's check if the label file does even exist!
|
|
|
|
if( !TQFile::exists( m_url->url() ) )
|
|
|
|
{
|
|
|
|
KMessageBox::error( this, TQString( i18n("The label file %1 was not found") ).arg( m_url->url()) );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( radioPrinter->isChecked() )
|
|
|
|
{
|
|
|
|
int move = 0;
|
|
|
|
if( bUserInteraction )
|
|
|
|
{
|
|
|
|
PrintLabelDlg pld( this, "pld" );
|
|
|
|
pld.setLabelsEnabled( false );
|
|
|
|
if( pld.exec() != TQDialog::Accepted )
|
|
|
|
return;
|
|
|
|
|
|
|
|
move = pld.position();
|
|
|
|
PrinterSettings::getInstance()->getData()->border = pld.border();
|
|
|
|
}
|
|
|
|
|
|
|
|
prn = PrinterSettings::getInstance()->setupPrinter( m_url->url(), this, !printer.isEmpty(), printer );
|
|
|
|
if( !prn )
|
|
|
|
return;
|
|
|
|
|
|
|
|
batch = new BatchPrinter( prn, this );
|
|
|
|
batch->setMove( move );
|
|
|
|
|
|
|
|
batchType = BatchPrinter::POSTSCRIPT;
|
|
|
|
}
|
|
|
|
else if( radioBarcode->isChecked() )
|
|
|
|
{
|
|
|
|
BarcodePrinterDlg dlg(this);
|
|
|
|
if( dlg.exec() != TQDialog::Accepted )
|
|
|
|
return;
|
|
|
|
|
|
|
|
batch = new BatchPrinter( dlg.printToFile() ? dlg.fileName() : dlg.deviceName(),
|
|
|
|
dlg.outputFormat(), this );
|
|
|
|
batchType = BatchPrinter::BCP;
|
|
|
|
}
|
|
|
|
else if( radioImage->isChecked() )
|
|
|
|
{
|
|
|
|
batch = new BatchPrinter( imageDirPath->url(), this );
|
|
|
|
if( radioImageFilenameArticle->isChecked() )
|
|
|
|
batch->setImageFilename( BatchPrinter::E_ARTICLE );
|
|
|
|
else if( radioImageFilenameBarcode->isChecked() )
|
|
|
|
batch->setImageFilename( BatchPrinter::E_BARCODE );
|
|
|
|
else if( radioImageFilenameCustom->isChecked() )
|
|
|
|
{
|
|
|
|
batch->setImageFilename( BatchPrinter::E_CUSTOM );
|
|
|
|
batch->setImageCustomFilename( editImageFilename->text() );
|
|
|
|
}
|
|
|
|
|
|
|
|
batchType = BatchPrinter::IMAGE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( !checkKeepOpen->isChecked() )
|
|
|
|
KWizard::accept();
|
|
|
|
|
|
|
|
KApplication::setOverrideCursor( TQCursor( TQt::ArrowCursor ), true );
|
|
|
|
setupBatchPrinter( batch, batchType );
|
|
|
|
KApplication::restoreOverrideCursor();
|
|
|
|
|
|
|
|
delete prn;
|
|
|
|
delete batch;
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setupBatchPrinter( BatchPrinter* batch, int m )
|
|
|
|
{
|
|
|
|
Definition* def = NULL;
|
|
|
|
TQString description;
|
|
|
|
bool kbarcode18;
|
|
|
|
|
|
|
|
fillByteArray();
|
|
|
|
TQDomDocument doc( "KBarcodeLabel" );
|
|
|
|
if ( !doc.setContent( m_bytearray ) )
|
|
|
|
return;
|
|
|
|
|
|
|
|
XMLUtils util;
|
|
|
|
util.readXMLHeader( &doc, description, kbarcode18, &def );
|
|
|
|
|
|
|
|
TQBuffer buffer( m_bytearray );
|
|
|
|
if( !buffer.open( IO_ReadOnly ) )
|
|
|
|
return;
|
|
|
|
|
|
|
|
batch->setBuffer( &buffer );
|
|
|
|
batch->setSerial( serialStart->text(), serialInc->value() );
|
|
|
|
batch->setName( m_url->url() );
|
|
|
|
batch->setDefinition( def );
|
|
|
|
batch->setImageFormat( comboFormat->currentText() );
|
|
|
|
|
|
|
|
if( radioSqlArticles->isChecked() )
|
|
|
|
{
|
|
|
|
int labels = 0;
|
|
|
|
batch->setCustomer( customerId->currentText() );
|
|
|
|
|
|
|
|
// sort by group
|
|
|
|
sqlList->setSorting( 3, true );
|
|
|
|
sqlList->sort();
|
|
|
|
|
|
|
|
TQValueList<BatchPrinter::data>* dlist = new TQValueList<BatchPrinter::data>;
|
|
|
|
TQListViewItem* item = sqlList->firstChild();
|
|
|
|
while( item )
|
|
|
|
{
|
|
|
|
BatchPrinter::data m_data;
|
|
|
|
m_data.number = item->text( 1 ).toInt();
|
|
|
|
labels += m_data.number;
|
|
|
|
m_data.article_no = item->text( 2 );
|
|
|
|
m_data.group = item->text( 3 );
|
|
|
|
|
|
|
|
dlist->append( m_data );
|
|
|
|
item = item->nextSibling();
|
|
|
|
};
|
|
|
|
|
|
|
|
batch->setData( dlist );
|
|
|
|
batch->setLabels( labels );
|
|
|
|
}
|
|
|
|
else if( radioSimple->isChecked() )
|
|
|
|
{
|
|
|
|
batch->setLabels( numLabels->value() );
|
|
|
|
|
|
|
|
// do a dirty drick, TODO: refactor BatchPrinter in the future
|
|
|
|
TQValueList<BatchPrinter::data>* dlist = new TQValueList<BatchPrinter::data>;
|
|
|
|
BatchPrinter::data m_data;
|
|
|
|
m_data.number = numLabels->value();
|
|
|
|
dlist->append( m_data );
|
|
|
|
|
|
|
|
batch->setData( dlist );
|
|
|
|
}
|
|
|
|
else if( radioVarImport->isChecked() )
|
|
|
|
{
|
|
|
|
TVariableList* tVariableList = new TVariableList;
|
|
|
|
for( int i=0; i<m_varTable->numRows(); i++ )
|
|
|
|
{
|
|
|
|
TQMap<TQString, TQString> map;
|
|
|
|
for( int z=0; z<m_varTable->numCols(); z++ )
|
|
|
|
map[ m_varTable->horizontalHeader()->label( z ) ] = m_varTable->text( i, z );
|
|
|
|
tVariableList->append( map );
|
|
|
|
}
|
|
|
|
|
|
|
|
batch->setData( tVariableList );
|
|
|
|
}
|
|
|
|
else if( radioAddressBook->isChecked() )
|
|
|
|
{
|
|
|
|
KABC::AddresseeList* list = new KABC::AddresseeList;
|
|
|
|
TQListViewItem* item = listSelectedAddress->firstChild();
|
|
|
|
while( item )
|
|
|
|
{
|
|
|
|
list->append( static_cast<AddressListViewItem*>(item)->address() );
|
|
|
|
item = item->nextSibling();
|
|
|
|
}
|
|
|
|
|
|
|
|
batch->setData( list );
|
|
|
|
}
|
|
|
|
|
|
|
|
if( m == BatchPrinter::POSTSCRIPT )
|
|
|
|
batch->start();
|
|
|
|
else if( m == BatchPrinter::IMAGE )
|
|
|
|
batch->startImages();
|
|
|
|
else if( m == BatchPrinter::BCP )
|
|
|
|
batch->startBCP();
|
|
|
|
|
|
|
|
delete def;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BatchWizard::addItem()
|
|
|
|
{
|
|
|
|
DSSmallDialogs::AddItemsDialog aid( this, "aid" );
|
|
|
|
aid.setGroupCompletion( compGroup );
|
|
|
|
connect( &aid, TQT_SIGNAL( add( const TQString &, const TQString &, int) ),
|
|
|
|
this, TQT_SLOT( slotAddItem( const TQString &, const TQString &, int) ) );
|
|
|
|
|
|
|
|
aid.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BatchWizard::slotAddItem( const TQString & article, const TQString & group, int count )
|
|
|
|
{
|
|
|
|
return this->addItem( article, group, count, true );
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BatchWizard::addItem( const TQString & article, const TQString & group, int count, bool msg )
|
|
|
|
{
|
|
|
|
if( !article.isEmpty() && !existsArticle( article ) ) {
|
|
|
|
if( msg )
|
|
|
|
KMessageBox::error( this, i18n("Please enter a valid article ID") );
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString temp;
|
|
|
|
temp.sprintf("%0*i", 5, sqlList->childCount() + 1 );
|
|
|
|
|
|
|
|
KListViewItem* item = new KListViewItem( sqlList, temp, TQString( "%1" ).arg( count ),
|
|
|
|
article, group );
|
|
|
|
sqlList->insertItem( item );
|
|
|
|
|
|
|
|
addGroupCompletion( group );
|
|
|
|
enableControls();
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::addGroupCompletion( const TQString & group )
|
|
|
|
{
|
|
|
|
if( !group.isEmpty() )
|
|
|
|
{
|
|
|
|
TQStringList slist = compGroup->items();
|
|
|
|
if(!slist.contains( group ) )
|
|
|
|
compGroup->addItem( group );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BatchWizard::existsArticle( const TQString & article )
|
|
|
|
{
|
|
|
|
if( article.isEmpty() )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
TQSqlQuery query( "select uid from barcode_basic where article_no='" + article + "'" );
|
|
|
|
while ( query.next() )
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::editItem()
|
|
|
|
{
|
|
|
|
TQListViewItem* item = sqlList->selectedItem();
|
|
|
|
if( item )
|
|
|
|
changeItem( item, TQPoint(0,0), 0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::changeItem( TQListViewItem* item, const TQPoint &, int )
|
|
|
|
{
|
|
|
|
if(!item)
|
|
|
|
return;
|
|
|
|
|
|
|
|
DSSmallDialogs::AddItemsDialog aid( item->text( 2 ), item->text( 3 ),
|
|
|
|
item->text( 1 ).toInt(), this, "aid" );
|
|
|
|
aid.setGroupCompletion( compGroup );
|
|
|
|
|
|
|
|
if( aid.exec() == TQDialog::Accepted )
|
|
|
|
{
|
|
|
|
item->setText( 1, TQString::number( aid.count() ) );
|
|
|
|
item->setText( 2, aid.articleNo() );
|
|
|
|
item->setText( 3, aid.groupName() );
|
|
|
|
addGroupCompletion( aid.groupName() );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::removeItem()
|
|
|
|
{
|
|
|
|
TQListViewItem* item = sqlList->firstChild();
|
|
|
|
while( item )
|
|
|
|
{
|
|
|
|
if( item->isSelected() )
|
|
|
|
{
|
|
|
|
TQListViewItem* it = item->nextSibling();
|
|
|
|
delete item;
|
|
|
|
|
|
|
|
while( it )
|
|
|
|
{
|
|
|
|
int a = it->text( 0 ).toInt();
|
|
|
|
TQString temp;
|
|
|
|
temp.sprintf("%0*i", 5, a - 1 );
|
|
|
|
it->setText( 0, temp );
|
|
|
|
it = it->nextSibling();
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
} else
|
|
|
|
item = item->nextSibling();
|
|
|
|
}
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::customerIdChanged( int index )
|
|
|
|
{
|
|
|
|
customerName->setCurrentItem( index );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::customerNameChanged( int index )
|
|
|
|
{
|
|
|
|
customerId->setCurrentItem( index );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::addAllItems()
|
|
|
|
{
|
|
|
|
DSSmallDialogs::AddAllDialog* dlg = new DSSmallDialogs::AddAllDialog( this, "dlg" );
|
|
|
|
if( dlg->exec() == TQDialog::Accepted )
|
|
|
|
{
|
|
|
|
TQString temp;
|
|
|
|
TQString group = dlg->groupName();
|
|
|
|
const TQString num = TQString::number( dlg->numberLabels() );
|
|
|
|
|
|
|
|
TQSqlQuery query("SELECT article_no FROM " TABLE_BASIC );
|
|
|
|
while( query.next() )
|
|
|
|
{
|
|
|
|
temp.sprintf("%0*i", 5, sqlList->childCount() + 1 );
|
|
|
|
new KListViewItem( sqlList, temp, num, query.value( 0 ).toString(), group );
|
|
|
|
}
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::loadFromFile()
|
|
|
|
{
|
|
|
|
TQString f = KFileDialog::getOpenFileName( 0, 0, this );
|
|
|
|
if( !f.isEmpty() )
|
|
|
|
loadFromFile( f );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::loadFromClipboard()
|
|
|
|
{
|
|
|
|
TQClipboard *cb = KApplication::clipboard();
|
|
|
|
loadData( cb->text() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::loadFromFile( const TQString & url )
|
|
|
|
{
|
|
|
|
TQByteArray data;
|
|
|
|
TQFile file( url );
|
|
|
|
|
|
|
|
if( !file.open( IO_ReadOnly ) )
|
|
|
|
{
|
|
|
|
tqDebug("Unable to open file: %s", url.latin1() );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
data = file.readAll();
|
|
|
|
|
|
|
|
loadData( TQString( data ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::loadData( const TQString & data )
|
|
|
|
{
|
|
|
|
labelprinterdata* lpdata = PrinterSettings::getInstance()->getData();
|
|
|
|
if( lpdata->separator.isEmpty() )
|
|
|
|
{
|
|
|
|
KMessageBox::sorry( this, i18n("Separator is empty. Please set it to a value.") );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// new config entry!!!
|
|
|
|
KConfig* config = kapp->config();
|
|
|
|
config->setGroup("FileFormat");
|
|
|
|
int pos[3] = { config->readNumEntry("Data0", 0 ),
|
|
|
|
config->readNumEntry("Data1", 1 ),
|
|
|
|
config->readNumEntry("Data2", 2 ) };
|
|
|
|
|
|
|
|
bool custom_article_no = lpdata->useCustomNo;
|
|
|
|
TQBuffer buf( data.utf8() );
|
|
|
|
CSVFile file( buf );
|
|
|
|
|
|
|
|
TQStringList list, dropped;
|
|
|
|
TQString article, quantity, group;
|
|
|
|
|
|
|
|
while( file.isValid() && !file.isEof() )
|
|
|
|
{
|
|
|
|
list = file.readNextLine();
|
|
|
|
while( list.count() < 3 )
|
|
|
|
list.append( TQString() );
|
|
|
|
|
|
|
|
if( pos[0] == 0 )
|
|
|
|
quantity = list[0];
|
|
|
|
else if( pos[0] == 1 )
|
|
|
|
article = list[0];
|
|
|
|
else
|
|
|
|
group = list[0];
|
|
|
|
|
|
|
|
if( pos[1] == 0 )
|
|
|
|
quantity = list[1];
|
|
|
|
else if( pos[1] == 1 )
|
|
|
|
article = list[1];
|
|
|
|
else
|
|
|
|
group = list[1];
|
|
|
|
|
|
|
|
if( pos[2] == 0 )
|
|
|
|
quantity = list[2];
|
|
|
|
else if( pos[2] == 1 )
|
|
|
|
article = list[2];
|
|
|
|
else
|
|
|
|
group = list[2];
|
|
|
|
|
|
|
|
// data[0] == quantity
|
|
|
|
// data[1] == article_no
|
|
|
|
// data[2] == group
|
|
|
|
|
|
|
|
bool qint = false;
|
|
|
|
(void)quantity.toInt( &qint );
|
|
|
|
|
|
|
|
if( qint && custom_article_no ) {
|
|
|
|
qint = false;
|
|
|
|
TQSqlQuery query("SELECT article_no FROM customer_text WHERE article_no_customer='" + article + "'" );
|
|
|
|
while( query.next() ) {
|
|
|
|
article = query.value( 0 ).toString();
|
|
|
|
qint = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if( qint ) // && existsArticle( article )
|
|
|
|
{
|
|
|
|
if( !addItem( TQString( article ), TQString( group ), quantity.toInt(), false ) )
|
|
|
|
dropped.append( quantity + lpdata->separator + article + lpdata->separator + group );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if( !dropped.isEmpty() )
|
|
|
|
KMessageBox::informationList( this, i18n("<qt>The following items can not be added:" )+ "</qt>", dropped );
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::fillByteArray()
|
|
|
|
{
|
|
|
|
if( m_bytearray_filename != m_url->url() )
|
|
|
|
{
|
|
|
|
TQFile f( m_url->url() );
|
|
|
|
if ( !f.open( IO_ReadOnly ) )
|
|
|
|
{
|
|
|
|
m_bytearray_filename = TQString();
|
|
|
|
m_bytearray.resize( 0 );
|
|
|
|
return ;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_bytearray = f.readAll();
|
|
|
|
f.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::fillVarList()
|
|
|
|
{
|
|
|
|
fillByteArray();
|
|
|
|
TQDomDocument doc( "KBarcodeLabel" );
|
|
|
|
if ( !doc.setContent( m_bytearray ) )
|
|
|
|
return;
|
|
|
|
|
|
|
|
XMLUtils util;
|
|
|
|
DocumentItemList list;
|
|
|
|
list.setAutoDelete( true );
|
|
|
|
|
|
|
|
TokenProvider token( TQT_TQPAINTDEVICE(this) );
|
|
|
|
Definition* def = NULL;
|
|
|
|
|
|
|
|
TQString description;
|
|
|
|
bool kbarcode18;
|
|
|
|
util.readXMLHeader( &doc, description, kbarcode18, &def );
|
|
|
|
util.readDocumentItems( &list, &doc, &token, kbarcode18 );
|
|
|
|
|
|
|
|
token.setCurrentDocumentItems( list );
|
|
|
|
|
|
|
|
TQStringList vars = token.listUserVars();
|
|
|
|
m_varList->clear();
|
|
|
|
m_varList->insertStringList( vars );
|
|
|
|
m_varTable->setNumCols( vars.count() );
|
|
|
|
for( unsigned int i = 0; i < vars.count(); i++ )
|
|
|
|
{
|
|
|
|
vars[i] = vars[i].right( vars[i].length() - 1 );
|
|
|
|
m_varTable->horizontalHeader()->setLabel( i, vars[i] );
|
|
|
|
}
|
|
|
|
|
|
|
|
delete def;
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::fillAddressList()
|
|
|
|
{
|
|
|
|
KABC::AddressBook* ab = KABC::StdAddressBook::self();
|
|
|
|
listAddress->clear();
|
|
|
|
|
|
|
|
KABC::AddressBook::Iterator it;
|
|
|
|
listAddress->setUpdatesEnabled( false );
|
|
|
|
for ( it = ab->begin(); it != ab->end(); ++it )
|
|
|
|
new AddressListViewItem( listAddress, *it );
|
|
|
|
listAddress->setUpdatesEnabled( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BatchWizard::fillVarTable()
|
|
|
|
{
|
|
|
|
// Clear the table
|
|
|
|
m_varTable->setNumRows( 0 );
|
|
|
|
|
|
|
|
if( radioImportSql->isChecked() )
|
|
|
|
{
|
|
|
|
int y = 0;
|
|
|
|
int x;
|
|
|
|
TQSqlSelectCursor query( importSqlQuery->text(), SqlTables::getInstance()->database() );
|
|
|
|
query.select();
|
|
|
|
if( query.lastError().type() != TQSqlError::None )
|
|
|
|
{
|
|
|
|
KMessageBox::error( this, i18n("<qt>Can't execute SQL query:<br>") + query.lastError().text() + "</qt>" );
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( m_varTable->numRows() < query.size() )
|
|
|
|
m_varTable->setNumRows( query.size() );
|
|
|
|
|
|
|
|
while( query.next() )
|
|
|
|
{
|
|
|
|
for( x=0;x<m_varTable->numRows();x++ )
|
|
|
|
m_varTable->setText( y, x, query.value( m_varTable->horizontalHeader()->label( x ) ).toString() );
|
|
|
|
|
|
|
|
y++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( radioImportCSV->isChecked() )
|
|
|
|
{
|
|
|
|
CSVFile file( importCsvFile->url() );
|
|
|
|
file.setEncoding( comboEncoding->currentText() );
|
|
|
|
|
|
|
|
TQStringList heading;
|
|
|
|
TQStringList data;
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
file.setCSVFile(true);
|
|
|
|
if( !file.isValid() )
|
|
|
|
{
|
|
|
|
KMessageBox::error( this, TQString( i18n("Can't open file: %1") ).arg( importCsvFile->url() ) );
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
while( !file.isEof() )
|
|
|
|
{
|
|
|
|
if( heading.isEmpty() )
|
|
|
|
heading = file.readNextLine();
|
|
|
|
else
|
|
|
|
{
|
|
|
|
data = file.readNextLine();
|
|
|
|
|
|
|
|
// add 100 rows to get a reasonable speed
|
|
|
|
if( m_varTable->numRows() <= i )
|
|
|
|
m_varTable->setNumRows( i + 100 );
|
|
|
|
|
|
|
|
printf("datacount=%i\n", data.count() );
|
|
|
|
for( unsigned int z = 0; z < data.count(); z++ )
|
|
|
|
{
|
|
|
|
printf("numRows=%i\n", m_varTable->numCols() );
|
|
|
|
for( int x = 0; x < m_varTable->numCols(); x++ )
|
|
|
|
{
|
|
|
|
printf("horizontal header=%s\n", m_varTable->horizontalHeader()->label( x ).lower().latin1() );
|
|
|
|
printf("heading=%s\n", heading[z].lower().latin1() );
|
|
|
|
if( m_varTable->horizontalHeader()->label( x ).lower() == heading[z].lower() )
|
|
|
|
{
|
|
|
|
printf("Reading: (%s)\n", data[z].latin1());
|
|
|
|
m_varTable->setText( i, x, data[z] );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if( data.count() )
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
m_varTable->setNumRows( i );
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::slotTableInsert()
|
|
|
|
{
|
|
|
|
m_varTable->insertRows( m_varTable->numRows(), 1 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::slotTableRemove()
|
|
|
|
{
|
|
|
|
TQTableSelection sel = m_varTable->selection( m_varTable->currentSelection() );
|
|
|
|
m_varTable->removeRow( sel.topRow() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setFilename( const TQString & url )
|
|
|
|
{
|
|
|
|
m_url->setURL( url );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setImportSqlQuery( const TQString & query )
|
|
|
|
{
|
|
|
|
radioImportCSV->setChecked( false );
|
|
|
|
radioImportManual->setChecked( false );
|
|
|
|
radioImportSql->setChecked( true );
|
|
|
|
|
|
|
|
radioVarImport->setChecked( true );
|
|
|
|
radioSqlArticles->setChecked( false );
|
|
|
|
radioSimple->setChecked( false );
|
|
|
|
|
|
|
|
importSqlQuery->setText( query );
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
|
|
|
|
showPage( page3 );
|
|
|
|
showPage( page4 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setImportCsvFile( const TQString & filename )
|
|
|
|
{
|
|
|
|
radioImportCSV->setChecked( true );
|
|
|
|
radioImportManual->setChecked( false );
|
|
|
|
radioImportSql->setChecked( false );
|
|
|
|
|
|
|
|
radioVarImport->setChecked( true );
|
|
|
|
radioSqlArticles->setChecked( false );
|
|
|
|
radioSimple->setChecked( false );
|
|
|
|
|
|
|
|
importCsvFile->setURL( filename );
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
|
|
|
|
showPage( page3 );
|
|
|
|
showPage( page4 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setNumLabels( const int n )
|
|
|
|
{
|
|
|
|
numLabels->setValue( n );
|
|
|
|
radioSimple->setChecked( true );
|
|
|
|
radioSqlArticles->setChecked( false );
|
|
|
|
radioVarImport->setChecked( false );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setOutputFormat( const int e )
|
|
|
|
{
|
|
|
|
radioBarcode->setChecked( false );
|
|
|
|
radioImage->setChecked( false );
|
|
|
|
radioPrinter->setChecked( false );
|
|
|
|
|
|
|
|
switch( e )
|
|
|
|
{
|
|
|
|
case BatchPrinter::BCP:
|
|
|
|
radioBarcode->setChecked( true );
|
|
|
|
break;
|
|
|
|
case BatchPrinter::IMAGE:
|
|
|
|
radioImage->setChecked( true );
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
case BatchPrinter::POSTSCRIPT:
|
|
|
|
radioPrinter->setChecked( true );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::setSerialNumber( const TQString & val, int inc )
|
|
|
|
{
|
|
|
|
serialInc->setValue( inc );
|
|
|
|
serialStart->setText( val );
|
|
|
|
|
|
|
|
// Not needed here: enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::slotAddAddress()
|
|
|
|
{
|
|
|
|
moveAddress( listAddress, listSelectedAddress );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::slotAddAllAddress()
|
|
|
|
{
|
|
|
|
moveAddress( listAddress, listSelectedAddress, true );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::slotRemoveAddress()
|
|
|
|
{
|
|
|
|
moveAddress( listSelectedAddress, listAddress );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::slotRemoveAllAddress()
|
|
|
|
{
|
|
|
|
moveAddress( listSelectedAddress, listAddress, true );
|
|
|
|
enableControls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BatchWizard::moveAddress( TQListView* src, TQListView* dst, bool bAll )
|
|
|
|
{
|
|
|
|
TQListViewItem* item = src->firstChild();
|
|
|
|
TQListViewItem* cur;
|
|
|
|
|
|
|
|
while( item )
|
|
|
|
{
|
|
|
|
if( bAll || item->isSelected() )
|
|
|
|
{
|
|
|
|
cur = item;
|
|
|
|
item = item->nextSibling();
|
|
|
|
|
|
|
|
src->takeItem( cur );
|
|
|
|
dst->insertItem( cur );
|
|
|
|
cur->setSelected( false );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
item = item->nextSibling();
|
|
|
|
}
|
|
|
|
}
|