From 737b94e46371502d499ea21879d5507bc1b2ca52 Mon Sep 17 00:00:00 2001 From: ruglory Date: Sun, 22 Feb 2009 05:31:38 +0000 Subject: [PATCH] Prepared to move for dbus implementation git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@77 cac9541e-1b8d-4bfa-827e-589bba606050 --- src/CMakeLists.txt | 27 +++- src/main.cpp | 8 +- src/mainwindow.cpp | 4 +- src/qdialogprint.cpp | 10 +- src/qdialogprint.h | 2 +- src/qdialogprogress.cpp | 21 +-- src/qdialogprogress.h | 4 +- src/qlightscribe.cpp | 284 ++-------------------------------------- src/qlightscribe.h | 113 +++++----------- src/qlscribe.h | 29 ++++ 10 files changed, 123 insertions(+), 379 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2694546..5812a67 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,6 +18,9 @@ # # $Id$ +FIND_PACKAGE( Qt4 REQUIRED ) +SET( QT_USE_QTDBUS 1 ) + SET( QLSCRIBE_SRCS main.cpp mainwindow.cpp qcdscene.cpp qcdview.cpp qdialogpixmap.cpp qdialogroundtext.cpp qdialogtext.cpp qlightroundtextitem.cpp qlightscribe.cpp qshapefactory.cpp qlighttextitem.cpp qlightpixmapitem.cpp @@ -38,11 +41,31 @@ QT4_WRAP_UI( QLSCRIBE_UI_HDRS ${QLSCRIBE_UIS} ) QT4_WRAP_CPP( QLSCRIBE_MOC_SRCS ${QLSCRIBE_MOC_HDRS} ) +MACRO(ADD_DBUS_INTERFACE _sources _interface _basename) + GET_FILENAME_COMPONENT(_infile ${_interface} ABSOLUTE) + SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) + SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc) + + ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} + COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -i qlightscribe.h -p ${_basename} ${_infile} + DEPENDS ${_infile}) + + SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) + + QT4_GENERATE_MOC(${_header} ${_moc}) + + SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc}) + MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc}) +ENDMACRO(ADD_DBUS_INTERFACE) + +ADD_DBUS_INTERFACE( QLSCRIBE_DBUS_SRCS lightscribe.xml lightscribe_interface ) + INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR}/src ${CMAKE_SOURCE_DIR}/src ) -ADD_EXECUTABLE( qlscribe ${QLSCRIBE_SRCS} ${QLSCRIBE_MOC_SRCS} ${QLSCRIBE_UI_HDRS} ) +ADD_EXECUTABLE( qlscribe ${QLSCRIBE_SRCS} ${QLSCRIBE_MOC_SRCS} ${QLSCRIBE_UI_HDRS} ${QLSCRIBE_DBUS_SRCS} ) -TARGET_LINK_LIBRARIES( qlscribe ${QT_LIBRARIES} ${LSCRIBE_LIBRARIES} ) +TARGET_LINK_LIBRARIES( qlscribe ${QT_LIBRARIES} ) INSTALL( TARGETS qlscribe DESTINATION bin diff --git a/src/main.cpp b/src/main.cpp index 11f0185..481a0a8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -58,7 +58,7 @@ int main( int argc, char **argv ) QStringList files; QCDScene::QString2String replacements; int driveIndex = 0; - QLightScribe::PrintParameters params; + PrintParameters params; bool labelModeOverriden = false; for( int i = 1; i < arguments.size(); ++i ) { @@ -153,7 +153,7 @@ int main( int argc, char **argv ) } QConsolePrintProgress progress; std::cout << "Printing label " << files.front() << std::endl; - scribe->print( drives[driveIndex], params, &scene ); + drives[driveIndex]->print( params, &scene ); rez = app.exec(); } else { MainWindow mwindow( enablePrint ); @@ -161,9 +161,5 @@ int main( int argc, char **argv ) mwindow.open( files ); rez = app.exec(); } - - QLightScribe *scribe = QLightScribe::instance(); - scribe->stopThread(); - scribe->wait( 1000 ); return rez; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 2d7a39c..c5343ac 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -313,14 +313,14 @@ void MainWindow::onMenuPrintPreview() if( !cdscene ) return; - QLightScribe::PrintParameters params; + PrintParameters params; params.m_labelMode = cdscene->labelMode(); QLightDrive *drive = QDialogPrint::exec( this, params ); if( !drive ) return; try { - QPixmap pixmap = QLightScribe::instance()->preview( drive, params, cdscene, QSize( 400, 400 ) ); + QPixmap pixmap = drive->preview( params, cdscene, QSize( 400, 400 ) ); QLabel *label = new QLabel; label->setPixmap( pixmap ); diff --git a/src/qdialogprint.cpp b/src/qdialogprint.cpp index a673223..8b7f58e 100644 --- a/src/qdialogprint.cpp +++ b/src/qdialogprint.cpp @@ -46,7 +46,7 @@ void QDialogPrint::changeEvent(QEvent *e) } } -QLightDrive *QDialogPrint::exec( QWidget *parent, QLightScribe::PrintParameters ¶ms ) +QLightDrive *QDialogPrint::exec( QWidget *parent, PrintParameters ¶ms ) { QList drives = QLightScribe::instance()->getDrives(); if( drives.isEmpty() ) { @@ -67,7 +67,7 @@ QLightDrive *QDialogPrint::exec( QWidget *parent, QLightScribe::PrintParameters if( dialog.QDialog::exec() == Rejected ) return 0; - params = QLightScribe::PrintParameters(); // reset to default + params = PrintParameters(); // reset to default if( dialog.m_ui->radioModeFull->isChecked() ) params.m_labelMode = modeFull; @@ -79,13 +79,13 @@ QLightDrive *QDialogPrint::exec( QWidget *parent, QLightScribe::PrintParameters params.m_labelMode = modeContent; if( dialog.m_ui->radioQualityNormal->isChecked() ) - params.m_printQuality = QLightScribe::qualityNormal; + params.m_printQuality = qualityNormal; if( dialog.m_ui->radioQualityDraft->isChecked() ) - params.m_printQuality = QLightScribe::qualityDraft; + params.m_printQuality = qualityDraft; if( dialog.m_ui->radioMediaGeneric->isChecked() ) - params.m_mediaOptimizationLevel = QLightScribe::mediaGeneric; + params.m_mediaOptimizationLevel = mediaGeneric; return drives.at( dialog.m_ui->comboDrive->currentIndex() ); } diff --git a/src/qdialogprint.h b/src/qdialogprint.h index a0ef102..10ddb2d 100644 --- a/src/qdialogprint.h +++ b/src/qdialogprint.h @@ -33,7 +33,7 @@ class QDialogPrint : public QDialog { Q_OBJECT Q_DISABLE_COPY(QDialogPrint) public: - static QLightDrive *exec( QWidget *parent, QLightScribe::PrintParameters ¶ms ); + static QLightDrive *exec( QWidget *parent, PrintParameters ¶ms ); protected: explicit QDialogPrint(QWidget *parent = 0); diff --git a/src/qdialogprogress.cpp b/src/qdialogprogress.cpp index 0e50f35..d416204 100644 --- a/src/qdialogprogress.cpp +++ b/src/qdialogprogress.cpp @@ -29,9 +29,10 @@ #include #include -QDialogProgress::QDialogProgress(QWidget *parent) : - QDialog(parent), +QDialogProgress::QDialogProgress( QWidget *parent, QLightDrive *drive ) + : QDialog(parent), m_ui(new Ui::QDialogProgress), + m_drive( drive ), m_start( new QTime ), m_timer( new QTimer( this ) ) { @@ -61,23 +62,23 @@ void QDialogProgress::changeEvent(QEvent *e) bool QDialogProgress::exec( QWidget *parent, QCDScene *scene ) { - QLightScribe::PrintParameters params; + PrintParameters params; params.m_labelMode = scene->labelMode(); QLightDrive *drive = QDialogPrint::exec( parent, params ); if( !drive ) return false; QLightScribe *scribe = QLightScribe::instance(); - QDialogProgress dialog( parent ); + QDialogProgress dialog( parent, drive ); dialog.setWindowTitle( tr( "Printing: " ) + scene->name() ); connect( dialog.m_ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), &dialog, SLOT(onButtonClicked(QAbstractButton*)) ); - connect( scribe, SIGNAL(prepareProgress(long,long)), &dialog, SLOT(onPrepareProgress(long,long)) ); - connect( scribe, SIGNAL(labelProgress(long,long)), &dialog, SLOT(onLabelProgress(long,long)) ); - connect( scribe, SIGNAL(timeEstimate(long)), &dialog, SLOT(onTimeEstimate(long)) ); - connect( scribe, SIGNAL(finished(int)), &dialog, SLOT(onFinished(int)) ); + connect( drive, SIGNAL(prepareProgress(long,long)), &dialog, SLOT(onPrepareProgress(long,long)) ); + connect( drive, SIGNAL(labelProgress(long,long)), &dialog, SLOT(onLabelProgress(long,long)) ); + connect( drive, SIGNAL(timeEstimate(long)), &dialog, SLOT(onTimeEstimate(long)) ); + connect( drive, SIGNAL(finished(int)), &dialog, SLOT(onFinished(int)) ); - scribe->print( drive, params, scene ); + drive->print( params, scene ); dialog.QDialog::exec(); return true; } @@ -90,7 +91,7 @@ void QDialogProgress::onButtonClicked( QAbstractButton *button ) tr( "Are you sure you want to interrupt?" ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::Yes ) { - QLightScribe::instance()->abort(); + m_drive->abort(); button->setDisabled( true ); } } else diff --git a/src/qdialogprogress.h b/src/qdialogprogress.h index bf4ce93..fdefcef 100644 --- a/src/qdialogprogress.h +++ b/src/qdialogprogress.h @@ -31,6 +31,7 @@ class QCDScene; class QAbstractButton; class QTime; class QTimer; +class QLightDrive; class QDialogProgress : public QDialog { Q_OBJECT @@ -50,10 +51,11 @@ protected: virtual void changeEvent(QEvent *e); private: - explicit QDialogProgress(QWidget *parent = 0); + QDialogProgress(QWidget *parent, QLightDrive *drive ); virtual ~QDialogProgress(); Ui::QDialogProgress *m_ui; + QLightDrive *m_drive; QTime *m_start; QTimer *m_timer; }; diff --git a/src/qlightscribe.cpp b/src/qlightscribe.cpp index a0a8da6..728405f 100644 --- a/src/qlightscribe.cpp +++ b/src/qlightscribe.cpp @@ -20,33 +20,15 @@ #include "qlightscribe.h" #include "qcdscene.h" +//#include "lightscribe_interface.h" -#include -#include #include #include #include -#include +//#include -using namespace LightScribe; - -struct QLightScribe::Task { - enum Action { getDrives, preview, print, stop }; - Action m_action; - bool m_done; - QLightDrive *m_selectedDrive; - PrintParameters m_parameters; - QSize m_size; - QImage *m_image; - - QList< QLightDrive * > m_drives; - QTemporaryFile m_tmpFile; - QString m_error; - - Task( Action action ) : m_action( action ), m_done( false ), m_selectedDrive( 0 ), m_image( 0 ) {} - ~Task() { delete m_image; } -}; +//using namespace LightScribe; QLightScribe *QLightScribe::instance() { @@ -55,44 +37,15 @@ QLightScribe *QLightScribe::instance() } QLightScribe::QLightScribe() - : m_task( 0 ), - m_aborted( false ), - m_mutex( new QMutex ), - m_waitQueue( new QWaitCondition ), - m_waitDone( new QWaitCondition ) { - start(); } QLightScribe::~QLightScribe() { - delete m_waitDone; - delete m_waitQueue; - delete m_mutex; } -QList< QLightDrive * > QLightScribe::getDrives( bool refresh ) +QList< QLightDrive * > QLightScribe::getDrives() { - if( m_drives.empty() || refresh ) { - QMutexLocker lock( m_mutex ); - if( m_task ) // what should we do? - return m_drives; - - m_task = new Task( Task::getDrives ); - m_waitQueue->wakeOne(); - - while( !m_task->m_done ) - m_waitDone->wait( m_mutex ); - - while( m_drives.count() ) { - delete m_drives.front(); - m_drives.erase( m_drives.begin() ); - } - m_drives = m_task->m_drives; - - delete m_task; - m_task = 0; - } return m_drives; } @@ -113,97 +66,23 @@ QImage *printScene( QCDScene *scene ) return image; } -QPixmap QLightScribe::preview( QLightDrive *drive, const PrintParameters ¶ms, QCDScene *scene, const QSize &size ) throw( QString ) +QPixmap QLightDrive::preview( const PrintParameters ¶ms, QCDScene *scene, const QSize &size ) throw( QString ) { - QMutexLocker lock( m_mutex ); - if( m_task ) // what should we do? - return QPixmap(); - - m_task = new Task( Task::preview ); - m_task->m_selectedDrive = drive; - m_task->m_parameters = params; - m_task->m_size = size; - m_task->m_image = printScene( scene ); - - m_aborted = false; - - m_waitQueue->wakeOne(); - - while( !m_task->m_done ) - m_waitDone->wait( m_mutex ); - - QString err = m_task->m_error; - QPixmap pixmap; - if( err.isEmpty() ) - pixmap.load( m_task->m_tmpFile.fileName(), "bmp" ); - - delete m_task; - m_task = 0; - - if( !err.isEmpty() ) - throw err; - - return pixmap; + return QPixmap(); } -void QLightScribe::print( QLightDrive *drive, const PrintParameters ¶ms, QCDScene *scene ) +void QLightDrive::print( const PrintParameters ¶ms, QCDScene *scene ) { - QMutexLocker lock( m_mutex ); - if( m_task ) // what should we do? - return; - - m_task = new Task( Task::print ); - m_task->m_selectedDrive = drive; - m_task->m_parameters = params; - m_task->m_image = printScene( scene ); - - m_aborted = false; - - m_waitQueue->wakeOne(); } -void QLightScribe::abort() +void QLightDrive::abort() { - m_aborted = true; -} - -void QLightScribe::stopThread() -{ - QMutexLocker lock( m_mutex ); - delete m_task; - m_task = new Task( Task::stop ); - m_waitQueue->wakeOne(); -} - -bool QLightScribe::clAbortLabel() -{ - return QLightScribe::instance()->m_aborted; -} - -void QLightScribe::clReportPrepareProgress(long current, long final) -{ - emit instance()->prepareProgress( current, final ); -} - -void QLightScribe::clReportLabelProgress(long current, long final) -{ - emit instance()->labelProgress( current, final ); -} - -void QLightScribe::clReportFinished(LSError status) -{ - emit instance()->finished( status ); -} - -bool QLightScribe::clReportLabelTimeEstimate(long time) -{ - emit instance()->timeEstimate( time ); - return false; } -namespace { + +/*namespace { class AutoUidSetter { public: AutoUidSetter() : m_saved( 0 ) {} @@ -260,145 +139,4 @@ namespace { LightScribe::DiscPrinter *m_printer; bool m_locked; }; -} - -extern uid_t realUserId; - -void QLightScribe::run() -{ - QMutexLocker lock( m_mutex ); - while( true ) { - while( m_task == 0 || m_task->m_done ) - m_waitQueue->wait( m_mutex ); - - if( m_task->m_action == Task::stop ) - break; - - QString function; - try { - function = "LS_DiscPrintMgr_Create"; - DiscPrintMgr manager; - - function = "LS_DiscPrintMgr_EnumDiscPrinters"; - EnumDiscPrinters printers = manager.EnumDiscPrinters(); - - function = ""; - - if( m_task->m_action == Task::getDrives ) { - const unsigned count = printers.Count(); - - for( unsigned i = 0; i < count; ++i ) { - DiscPrinter printer = printers.Item( i ); - - QLightDrive *drive = new QLightDrive; - drive->m_displayName = QString::fromStdString( printer.GetPrinterDisplayName() ); - drive->m_productName = QString::fromStdString( printer.GetPrinterProductName() ); - drive->m_vendorName = QString::fromStdString( printer.GetPrinterVendorName() ); - drive->m_path = QString::fromStdString( printer.GetPrinterPath() ); - drive->m_innerRadius = printer.GetDriveInnerRadius() / 1000.0; - drive->m_outerRadius = printer.GetDriveOuterRadius() / 1000.0; - - m_task->m_drives.append( drive ); - } - } else { - - QByteArray ba; - QBuffer buffer( &ba ); - buffer.open( QIODevice::WriteOnly ); - m_task->m_image->save( &buffer, "bmp", 100 ); - - int found = -1; - for( size_t i = 0; i < printers.Count(); ++i ) - if( printers.Item( i ).GetPrinterDisplayName() == m_task->m_selectedDrive->displayName().toStdString() ) { - found = i; - break; - } - if( found == -1 ) - throw tr( "Cannot find drive: \"" ) + m_task->m_selectedDrive->displayName() + "\""; - - DiscPrinter printer = printers.Item( found ); - - AutoUidSetter autoUid; - AutoOp< &DiscPrinter::AddExclusiveUse, &DiscPrinter::ReleaseExclusiveUse > autoExclusive( printer ); - AutoOp< &DiscPrinter::LockDriveTray, &DiscPrinter::UnlockDriveTray > autoLock( printer ); - - if( m_task->m_action == Task::print ) { - autoUid.set( realUserId ); - function = "LS_DiscPrinter_AddExclusiveUse"; - autoExclusive.lock(); - function = "LS_DiscPrinter_LockDriveTray"; - autoLock.lock(); - } - - { - function = "LS_DiscPrinter_OpenPrintSession"; - DiscPrintSession session = printer.OpenPrintSession(); - - LS_PrintCallbacks callbacks; - callbacks.AbortLabel = clAbortLabel; - callbacks.ReportPrepareProgress = clReportPrepareProgress; - callbacks.ReportLabelProgress = clReportLabelProgress; - callbacks.ReportFinished = clReportFinished; - callbacks.ReportLabelTimeEstimate = clReportLabelTimeEstimate; - - session.SetProgressCallback( &callbacks ); - - const size_t bitmapHeaderSize = 54; - - if( m_task->m_action == Task::preview ) { - - LS_Size size; - size.x = m_task->m_size.width(); - size.y = m_task->m_size.height(); - - m_task->m_tmpFile.open(); - - function = "LS_DiscPrintSession_PrintPreview"; - session.PrintPreview( LS_windows_bitmap, - LS_LabelMode( m_task->m_parameters.m_labelMode ), - LS_DrawOptions( m_task->m_parameters.m_drawOptions ), - LS_PrintQuality( m_task->m_parameters.m_printQuality ), - LS_MediaOptimizationLevel( m_task->m_parameters.m_mediaOptimizationLevel ), - ba.data() + 14, - bitmapHeaderSize - 14, - ba.data() + bitmapHeaderSize, - ba.size() - bitmapHeaderSize, - m_task->m_tmpFile.fileName().toAscii().data(), - LS_windows_bitmap, - size, - true ); - } else { - PrintParameters params = m_task->m_parameters; - delete m_task; - m_task = 0; - lock.unlock(); - // print here - session.PrintDisc( LS_windows_bitmap, - LS_LabelMode( params.m_labelMode ), - LS_DrawOptions( params.m_drawOptions ), - LS_PrintQuality( params.m_printQuality ), - LS_MediaOptimizationLevel( params.m_mediaOptimizationLevel ), - ba.data() + 14, - bitmapHeaderSize - 14, - ba.data() + bitmapHeaderSize, - ba.size() - bitmapHeaderSize ); - } - } - - function = ""; - } - } - catch( LightScribe::LSException &ex ) { - if( m_task ) - m_task->m_error = function + tr( " failed with code 0x" ) + QString::number( ex.GetCode(), 16 ); - } - catch( const QString &err ) { - if( m_task ) - m_task->m_error = err; - } - if( m_task ) { - m_task->m_done = true; - m_waitDone->wakeAll(); - } - } -} +}*/ diff --git a/src/qlightscribe.h b/src/qlightscribe.h index d123929..993c022 100644 --- a/src/qlightscribe.h +++ b/src/qlightscribe.h @@ -23,106 +23,49 @@ #include "qlscribe.h" -#include #include - -#include - -#include +#include +#include +#include class QCDScene; -class QMutex; -class QWaitCondition; - class QLightDrive; -class QLightScribe : public QThread { - Q_OBJECT -public: - enum DrawOptions { - /** disable scaling of bitmaps; they will be cropped if needed */ - drawDefault=0, - /** Fit the height to the label size */ - drawFitHeightToLabel=1, - /** Fit the width to the label size */ - drawFitWidthToLabel=2, - /** Fit the smallest dimension to the label size */ - drawFitSmallestToLabel=4 - }; +struct PrintParameters { + LabelMode m_labelMode; + DrawOptions m_drawOptions; + PrintQuality m_printQuality; + MediaOptimizationLevel m_mediaOptimizationLevel; - enum PrintQuality { - /** Best and slowest. */ - qualityBest=0, - /** OK for everyday use. */ - qualityNormal=1, - /** Fast but lower contrast. */ - qualityDraft=2 - }; - - enum MediaOptimizationLevel { - /** Require that media is present and optimized labeling - * parameters are available */ - mediaRecognized, - /** Require that media is present but optimized labeling - * parameters are not available */ - mediaGeneric - }; - - struct PrintParameters { - LabelMode m_labelMode; - DrawOptions m_drawOptions; - PrintQuality m_printQuality; - MediaOptimizationLevel m_mediaOptimizationLevel; - - PrintParameters() + PrintParameters() : m_labelMode( modeFull ), m_drawOptions( drawDefault ), m_printQuality( qualityBest ), m_mediaOptimizationLevel( mediaRecognized ) {} - PrintParameters( LabelMode labelMode, DrawOptions drawOptions, PrintQuality printQuality, MediaOptimizationLevel mediaOptimizationLevel ) + PrintParameters( LabelMode labelMode, DrawOptions drawOptions, PrintQuality printQuality, MediaOptimizationLevel mediaOptimizationLevel ) : m_labelMode( labelMode ), m_drawOptions( drawOptions ), m_printQuality( printQuality ), m_mediaOptimizationLevel( mediaOptimizationLevel ) {} - }; +}; +Q_DECLARE_METATYPE(PrintParameters); + +typedef QMap QObject2StringMap; +Q_DECLARE_METATYPE(QObject2StringMap); + +class QLightScribe : public QObject { + Q_OBJECT +public: static QLightScribe *instance(); - QList< QLightDrive * > getDrives( bool refresh = false ); - QPixmap preview( QLightDrive *drive, const PrintParameters ¶ms, QCDScene *scene, const QSize &size ) throw( QString ); - void print( QLightDrive *drive, const PrintParameters ¶ms, QCDScene *scene ); - - friend bool clAbortLabel(); -public slots: - void abort(); - void stopThread(); - -signals: - void prepareProgress( long current, long final ); - void labelProgress( long current, long final ); - void timeEstimate( long time ); - void finished( int status ); - -protected: - virtual void run (); + QList getDrives(); private: - static bool clAbortLabel(); - static void clReportPrepareProgress(long current, long final); - static void clReportLabelProgress(long current, long final); - static void clReportFinished(LSError status); - static bool clReportLabelTimeEstimate(long time); - QLightScribe(); virtual ~QLightScribe(); - struct Task; - QList< QLightDrive * > m_drives; - Task *m_task; - bool m_aborted; - QMutex *m_mutex; - QWaitCondition *m_waitQueue; - QWaitCondition *m_waitDone; }; -class QLightDrive { +class QLightDrive : public QObject { + Q_OBJECT public: const QString &productName() const { return m_productName; } const QString &vendorName() const { return m_vendorName; } @@ -134,6 +77,18 @@ public: friend class QLightScribe; + QPixmap preview( const PrintParameters ¶ms, QCDScene *scene, const QSize &size ) throw( QString ); + void print( const PrintParameters ¶ms, QCDScene *scene ); + +public slots: + void abort(); + +signals: + void prepareProgress( long current, long final ); + void labelProgress( long current, long final ); + void timeEstimate( long time ); + void finished( int status ); + private: QString m_productName; QString m_vendorName; diff --git a/src/qlscribe.h b/src/qlscribe.h index c419a2e..fe78921 100644 --- a/src/qlscribe.h +++ b/src/qlscribe.h @@ -33,6 +33,35 @@ enum LabelMode { modeContent=2 }; +enum DrawOptions { + /** disable scaling of bitmaps; they will be cropped if needed */ + drawDefault=0, + /** Fit the height to the label size */ + drawFitHeightToLabel=1, + /** Fit the width to the label size */ + drawFitWidthToLabel=2, + /** Fit the smallest dimension to the label size */ + drawFitSmallestToLabel=4 +}; + +enum PrintQuality { + /** Best and slowest. */ + qualityBest=0, + /** OK for everyday use. */ + qualityNormal=1, + /** Fast but lower contrast. */ + qualityDraft=2 +}; + +enum MediaOptimizationLevel { + /** Require that media is present and optimized labeling + * parameters are available */ + mediaRecognized, + /** Require that media is present but optimized labeling + * parameters are not available */ + mediaGeneric +}; + std::ostream &operator<<( std::ostream &os, const QString &str ); #endif // QLSCRIBE_H