8 Commits

Author SHA1 Message Date
ruglory 842bcab6ce Tagging the 0.4 release
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/tags/release-0.4@38 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-31 04:37:39 +00:00
ruglory db061768d7 NEWS updated for release 0.4
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@37 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-31 04:34:17 +00:00
ruglory 40e1c7291a Added sticky bit at installation
Program checks for sticky bit at startup and issues warning if not set
Switch to real user id during work and effective user id during writing


git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@36 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-31 04:27:56 +00:00
ruglory 3d0c7be90c Bug with empty document crash fixed
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@35 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-31 04:26:13 +00:00
ruglory 31136eeb12 QGraphicsRoundTextItem renamed to QLightRoundTextItem
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@34 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-31 02:15:33 +00:00
ruglory 79813e4a8a Context menu added to bring item front/send to back/delete added
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@33 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-31 00:26:33 +00:00
ruglory e0f6307fd4 TextItem and PixmapItem are new classes now
Controllers moved to their classes
Item position changes is detected now


git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@32 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-30 23:52:23 +00:00
ruglory 65e862bdd6 About updated for 0.4 release
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@31 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-29 02:52:05 +00:00
19 changed files with 407 additions and 194 deletions
+5
View File
@@ -1,5 +1,10 @@
NEWS - list of user-visible changes between releases of qlscribe
New in 0.4:
Scene detects when item is moved by mouse and changes status to unsaved
On installation sticky bit is set, qlscribe becomes root when burns label
Bugfix on progress dialog crush with empty document printed
New in 0.3:
Documents keep their names and detect changes (changes on item postion through window
itself is not detected yet)
+6 -3
View File
@@ -19,8 +19,8 @@
# $Id$
SET( QLSCRIBE_SRCS main.cpp mainwindow.cpp qcdscene.cpp qcdview.cpp qdialogpixmap.cpp qdialogroundtext.cpp
qdialogtext.cpp qgraphicsroundtextitem.cpp qlightscribe.cpp qshapecontrollers.cpp qshapefactory.cpp
qdialogprint.cpp qdialogprogress.cpp )
qdialogtext.cpp qlightroundtextitem.cpp qlightscribe.cpp qshapefactory.cpp
qlighttextitem.cpp qlightpixmapitem.cpp qdialogprint.cpp qdialogprogress.cpp )
SET( QLSCRIBE_UIS qdialogtext.ui qdialogroundtext.ui qdialogpixmap.ui qdialogprint.ui qdialogprogress.ui )
@@ -41,4 +41,7 @@ ADD_EXECUTABLE( qlscribe ${QLSCRIBE_SRCS} ${QLSCRIBE_MOC_SRCS} ${QLSCRIBE_UI_HDR
TARGET_LINK_LIBRARIES( qlscribe ${QT_LIBRARIES} ${LSCRIBE_LIBRARIES} )
INSTALL( TARGETS qlscribe DESTINATION bin )
INSTALL( TARGETS qlscribe
DESTINATION bin
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE SETUID )
+22 -1
View File
@@ -19,13 +19,34 @@
$Id$ */
#include <QApplication>
#include <QMessageBox>
#include "mainwindow.h"
uid_t realUserId;
int main(int argc, char **argv)
{
QApplication app(argc, argv);
app.addLibraryPath( "/usr/lib32/qt4/plugins" );
MainWindow mwindow;
bool enablePrint = false;
if( geteuid() ) {
if( QMessageBox::question( 0,
QObject::tr( "Confirmation" ),
QObject::tr( "Print functionality requires setuid (sticky) flag set on the application\n"
"This program does not seem to have it set, print functiionality will be disabled\n"
"You still will be able to do print preview and edit documents\n"
"Do you want to continue?" ),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::No )
== QMessageBox::No )
return 1;
} else {
realUserId = getuid();
setreuid( 0, realUserId );
enablePrint = true;
}
MainWindow mwindow( enablePrint );
mwindow.show();
return app.exec();
+10 -7
View File
@@ -19,7 +19,7 @@
$Id$ */
#include "mainwindow.h"
#include "qgraphicsroundtextitem.h"
#include "qlightroundtextitem.h"
#include "qcdview.h"
#include "qcdscene.h"
#include "qshapefactory.h"
@@ -37,8 +37,8 @@
#include <QLabel>
#include <QCloseEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
MainWindow::MainWindow( bool enablePrint )
: QMainWindow( 0 ),
m_mdiArea( new QMdiArea( this ) ),
m_menuFile( 0 ), m_menuInsert( 0 ),
m_insertMapper( new QSignalMapper( this ) )
@@ -70,9 +70,12 @@ MainWindow::MainWindow(QWidget *parent) :
this,
SLOT(onMenuPrintPreview()) );
m_menuFile->addAction( tr( "Print...", "Menu item \"Print\"" ),
this,
SLOT(onMenuPrint()) );
QAction *printAction =
m_menuFile->addAction( tr( "Print...", "Menu item \"Print\"" ),
this,
SLOT(onMenuPrint()) );
if( !enablePrint )
printAction->setEnabled( false );
m_menuFile->addAction( tr( "Exit", "Menu item \"Exit\"" ),
this,
@@ -296,7 +299,7 @@ void MainWindow::onMenuAbout()
QMessageBox::about( this,
tr( "About" ),
tr( "<h3>qlscribe - Qt lisghtScribe</h3>"
"<p>release 0.3 $Revision$</p>"
"<p>release 0.4 $Revision$</p>"
"<p>visit project at home page "
"<a href=\"http://qlscribe.sourceforge.net/\">qlscribe.sourceforge.net</a></p>" ) );
}
+1 -1
View File
@@ -31,7 +31,7 @@ class MainWindow : public QMainWindow {
Q_OBJECT
Q_DISABLE_COPY(MainWindow)
public:
explicit MainWindow(QWidget *parent = 0);
explicit MainWindow( bool enablePrint );
virtual ~MainWindow();
bool saveScene( QCDScene *scene );
+43
View File
@@ -204,6 +204,9 @@ void QCDScene::contextMenuEvent( QGraphicsSceneContextMenuEvent *mouseEvent )
item->setSelected( true );
QMenu menu;
menu.addAction( tr( "edit..." ), this, SLOT( onMenuEdit() ) );
menu.addAction( tr( "bring to Front" ), this, SLOT( onMenuToFront() ) );
menu.addAction( tr( "send to Back" ), this, SLOT( onMenuToBack() ) );
menu.addAction( tr( "delete" ), this, SLOT( onMenuDelete() ) );
menu.exec( mouseEvent->screenPos() );
}
@@ -215,3 +218,43 @@ void QCDScene::onMenuEdit()
QGraphicsItem *item = list.front();
QShapeFactory::instance().edit( item, 0 );
}
void QCDScene::onMenuToFront()
{
sendItemTo( true );
}
void QCDScene::onMenuToBack()
{
sendItemTo( false );
}
void QCDScene::onMenuDelete()
{
QList<QGraphicsItem *> list = selectedItems();
if( list.empty() )
return;
QGraphicsItem *item = list.front();
removeItem( item );
delete item;
setChanged();
}
void QCDScene::sendItemTo( bool front )
{
if ( selectedItems().isEmpty())
return;
QGraphicsItem *selectedItem = selectedItems().first();
QList<QGraphicsItem *> overlapItems = selectedItem->collidingItems();
qreal zValue = 0;
foreach( QGraphicsItem *item, overlapItems ) {
if( front && item->zValue() >= zValue )
zValue = item->zValue() + 0.1;
if( !front && item->zValue() <= zValue )
zValue = item->zValue() - 0.1;
}
selectedItem->setZValue( zValue );
}
+4
View File
@@ -49,10 +49,14 @@ protected:
private slots:
void onMenuEdit();
void onMenuToFront();
void onMenuToBack();
void onMenuDelete();
private:
void write( QXmlStreamWriter &writer );
void read( QXmlStreamReader &reader );
void sendItemTo( bool front );
private:
QString m_name;
+2 -1
View File
@@ -83,7 +83,8 @@ void QCDView::closeEvent( QCloseEvent *event )
inline
void drawCircle( QPainter *painter, double radi )
{
painter->drawEllipse( -radi, -radi, radi * 2, radi * 2 );
painter->drawEllipse( int( -radi ), int( -radi ),
int( radi * 2 ), int( radi * 2 ) );
}
void QCDView::drawCD( QPainter *painter, const QRectF & rect, bool alpha )
+1 -1
View File
@@ -107,7 +107,7 @@ void QDialogProgress::onLabelProgress( long current, long final )
m_ui->progressPrinting->setMaximum( final );
m_ui->progressPrinting->setValue( current );
if( current && double( current ) / final > 0.1 ) {
if( current && final / double( current ) < 10.0 ) {
int elapsed = m_start->elapsed();
int estimate = double( elapsed ) / current * final;
m_ui->timeEstimated->setTime( QTime().addMSecs( estimate ) );
+3 -3
View File
@@ -20,7 +20,7 @@
#include "qdialogroundtext.h"
#include "ui_qdialogroundtext.h"
#include "qgraphicsroundtextitem.h"
#include "qlightroundtextitem.h"
#include "qcdscene.h"
#include <QFontDialog>
@@ -55,13 +55,13 @@ void QDialogRoundText::changeEvent(QEvent *e)
bool QDialogRoundText::exec( QGraphicsItem *graphicsItem )
{
QGraphicsRoundTextItem *item = dynamic_cast< QGraphicsRoundTextItem * >( graphicsItem );
QLightRoundTextItem *item = dynamic_cast< QLightRoundTextItem * >( graphicsItem );
if( !item )
return false;
QCDScene scene;
m_ui->cdView->setScene( &scene );
m_item = new QGraphicsRoundTextItem;
m_item = new QLightRoundTextItem;
m_item->setPos( item->pos() );
m_item->setText( item->text() );
+4 -4
View File
@@ -16,7 +16,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
$Id:$ */
$Id$ */
#ifndef QDIALOGROUNDTEXT_H
#define QDIALOGROUNDTEXT_H
@@ -27,7 +27,7 @@ namespace Ui {
class QDialogRoundText;
}
class QGraphicsRoundTextItem;
class QLightRoundTextItem;
class QDialogRoundText : public QItemDialog {
Q_OBJECT
@@ -54,8 +54,8 @@ private slots:
void locChanged();
private:
Ui::QDialogRoundText *m_ui;
QGraphicsRoundTextItem *m_item;
Ui::QDialogRoundText *m_ui;
QLightRoundTextItem *m_item;
};
#endif // QDIALOGROUNDTEXT_H
@@ -18,78 +18,25 @@
$Id$ */
#include "qshapecontrollers.h"
#include "qdialogtext.h"
#include "qlightpixmapitem.h"
#include "qdialogpixmap.h"
#include "qcdscene.h"
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
RegisterController< QShapeControllerText > regControllerText;
QString QShapeControllerText::name() const
QLightPixmapItem::QLightPixmapItem()
{
return "text";
}
QString QShapeControllerText::menuName() const
QVariant QLightPixmapItem::itemChange( GraphicsItemChange change, const QVariant & value )
{
return QObject::tr( "Text", "QShapeControllerText name" );
if( scene() && change == ItemPositionHasChanged )
static_cast<QCDScene *>( scene() )->setChanged();
return value;
}
QGraphicsItem *QShapeControllerText::create() const
{
return new QGraphicsSimpleTextItem;
}
QItemDialog *QShapeControllerText::createDialog( QWidget *parent ) const
{
return new QDialogText( parent );
}
void QShapeControllerText::writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const
{
const QGraphicsSimpleTextItem *textItem = static_cast< const QGraphicsSimpleTextItem * >( item );
writer.writeEmptyElement( "pos" );
writer.writeAttribute( QXmlStreamAttribute( "x", QString::number( textItem->pos().x() ) ) );
writer.writeAttribute( QXmlStreamAttribute( "y", QString::number( textItem->pos().y() ) ) );
writer.writeTextElement( "font", textItem->font().toString() );
writer.writeTextElement( "color", textItem->brush().color().name() );
writer.writeTextElement( "text", textItem->text() );
}
void QShapeControllerText::readData( const QString &element,
const QXmlStreamAttributes &attrs,
const QString &data,
QGraphicsItem *item ) const
{
QGraphicsSimpleTextItem *textItem = static_cast< QGraphicsSimpleTextItem * >( item );
if( element == "pos" ) {
textItem->setPos( attrs.value( "x" ).toString().toDouble(),
attrs.value( "y" ).toString().toDouble() );
return;
}
if( element == "font" ) {
QFont font;
font.fromString( data );
textItem->setFont( font );
return;
}
if( element == "color" ) {
textItem->setBrush( QColor( data ) );
return;
}
if( element == "text" ) {
textItem->setText( data );
return;
}
}
RegisterController< QShapeControllerPixmap > regControllerPixmap;
@@ -105,7 +52,7 @@ QString QShapeControllerPixmap::menuName() const
QGraphicsItem *QShapeControllerPixmap::create() const
{
QGraphicsPixmapItem *item = new QGraphicsPixmapItem;
QGraphicsPixmapItem *item = new QLightPixmapItem;
item->setShapeMode( QGraphicsPixmapItem::BoundingRectShape );
item->setTransformationMode( Qt::SmoothTransformation );
+56
View File
@@ -0,0 +1,56 @@
/* qlscribe - Qt based application to print lightScribe discs
Copyright (C) 2009 Vyacheslav Kononenko <vyacheslav@kononenko.net>
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.
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
$Id$ */
#ifndef QLIGHTPIXMAPITEM_H
#define QLIGHTPIXMAPITEM_H
#include <QGraphicsPixmapItem>
#include "qshapefactory.h"
class QLightPixmapItem : public QGraphicsPixmapItem
{
public:
QLightPixmapItem();
protected:
virtual QVariant itemChange ( GraphicsItemChange change, const QVariant & value );
};
class QShapeControllerPixmap : public QShapeController {
public:
enum { Type = QLightPixmapItem::Type };
virtual QString name() const;
virtual QString menuName() const;
virtual QGraphicsItem *create() const;
protected:
virtual QItemDialog *createDialog( QWidget *parent ) const;
virtual void writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const;
virtual void readData( const QString &element,
const QXmlStreamAttributes &attrs,
const QString &data,
QGraphicsItem *item ) const;
};
#endif // QLIGHTPIXMAPITEM_H
@@ -18,8 +18,9 @@
$Id$ */
#include "qgraphicsroundtextitem.h"
#include "qlightroundtextitem.h"
#include "qdialogroundtext.h"
#include "qcdscene.h"
#include <QPainter>
#include <QFontMetrics>
@@ -29,7 +30,7 @@
#include <math.h>
QGraphicsRoundTextItem::QGraphicsRoundTextItem( QGraphicsItem *parent )
QLightRoundTextItem::QLightRoundTextItem( QGraphicsItem *parent )
: QAbstractGraphicsShapeItem( parent ),
m_radius( 40.0 ),
m_angle( 0.0 ),
@@ -38,73 +39,73 @@ QGraphicsRoundTextItem::QGraphicsRoundTextItem( QGraphicsItem *parent )
{
}
const QFont & QGraphicsRoundTextItem::font() const
const QFont & QLightRoundTextItem::font() const
{
return m_font;
}
const QString & QGraphicsRoundTextItem::text() const
const QString & QLightRoundTextItem::text() const
{
return m_text;
}
double QGraphicsRoundTextItem::radius() const
double QLightRoundTextItem::radius() const
{
return m_radius;
}
double QGraphicsRoundTextItem::angle() const
double QLightRoundTextItem::angle() const
{
return m_angle;
}
Qt::Alignment QGraphicsRoundTextItem::alignment() const
Qt::Alignment QLightRoundTextItem::alignment() const
{
return m_alignment;
}
bool QGraphicsRoundTextItem::outside() const
bool QLightRoundTextItem::outside() const
{
return m_outside;
}
void QGraphicsRoundTextItem::setFont( const QFont &font )
void QLightRoundTextItem::setFont( const QFont &font )
{
prepareGeometryChange();
m_font = font;
}
void QGraphicsRoundTextItem::setText( const QString &text )
void QLightRoundTextItem::setText( const QString &text )
{
prepareGeometryChange();
m_text = text;
}
void QGraphicsRoundTextItem::setRadius( double radius )
void QLightRoundTextItem::setRadius( double radius )
{
prepareGeometryChange();
m_radius = radius;
}
void QGraphicsRoundTextItem::setAngle( double angle )
void QLightRoundTextItem::setAngle( double angle )
{
prepareGeometryChange();
m_angle = angle;
}
void QGraphicsRoundTextItem::setAlignment( Qt::Alignment alignment )
void QLightRoundTextItem::setAlignment( Qt::Alignment alignment )
{
prepareGeometryChange();
m_alignment = alignment;
}
void QGraphicsRoundTextItem::setOutside( bool outside )
void QLightRoundTextItem::setOutside( bool outside )
{
prepareGeometryChange();
m_outside = outside;
}
QRectF QGraphicsRoundTextItem::boundingRect() const
QRectF QLightRoundTextItem::boundingRect() const
{
double height = m_radius;
if( m_outside ) {
@@ -115,7 +116,7 @@ QRectF QGraphicsRoundTextItem::boundingRect() const
return QRectF( -height, -height, 2 * height, 2 * height );
}
QPainterPath QGraphicsRoundTextItem::shape() const
QPainterPath QLightRoundTextItem::shape() const
{
QFontMetrics mcs( m_font );
double arcAngle = 0.0;
@@ -164,7 +165,7 @@ QPainterPath QGraphicsRoundTextItem::shape() const
}
void QGraphicsRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget )
void QLightRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget )
{
Q_UNUSED( option );
Q_UNUSED( widget );
@@ -204,7 +205,9 @@ void QGraphicsRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphic
painter->setWorldTransform( trans, true );
prevWidth = mcs.width( ch );
painter->drawText( -prevWidth / 2.0, m_outside ? -m_radius : m_radius, ch );
painter->drawText( int( -prevWidth / 2.0 ),
int( m_outside ? -m_radius : m_radius ),
ch );
}
painter->restore();
if (option->state & QStyle::State_Selected) {
@@ -214,6 +217,14 @@ void QGraphicsRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphic
}
}
QVariant QLightRoundTextItem::itemChange( GraphicsItemChange change, const QVariant & value )
{
if( scene() && change == ItemPositionHasChanged )
static_cast<QCDScene *>( scene() )->setChanged();
return value;
}
RegisterController< QShapeControllerRoundText > regControllerRoundText;
QString QShapeControllerRoundText::name() const
@@ -228,7 +239,7 @@ QString QShapeControllerRoundText::menuName() const
QGraphicsItem *QShapeControllerRoundText::create() const
{
return new QGraphicsRoundTextItem;
return new QLightRoundTextItem;
}
QItemDialog *QShapeControllerRoundText::createDialog( QWidget *parent ) const
@@ -238,7 +249,7 @@ QItemDialog *QShapeControllerRoundText::createDialog( QWidget *parent ) const
void QShapeControllerRoundText::writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const
{
const QGraphicsRoundTextItem *textItem = static_cast< const QGraphicsRoundTextItem * >( item );
const QLightRoundTextItem *textItem = static_cast< const QLightRoundTextItem * >( item );
writer.writeEmptyElement( "pos" );
writer.writeAttribute( QXmlStreamAttribute( "x", QString::number( textItem->pos().x() ) ) );
writer.writeAttribute( QXmlStreamAttribute( "y", QString::number( textItem->pos().y() ) ) );
@@ -257,7 +268,7 @@ void QShapeControllerRoundText::readData( const QString &element,
const QString &data,
QGraphicsItem *item ) const
{
QGraphicsRoundTextItem *textItem = static_cast< QGraphicsRoundTextItem * >( item );
QLightRoundTextItem *textItem = static_cast< QLightRoundTextItem * >( item );
if( element == "pos" ) {
textItem->setPos( attrs.value( "x" ).toString().toDouble(),
@@ -16,21 +16,21 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
$Id:$ */
$Id$ */
#ifndef QGRAPHICSROUNDTEXTITEM_H
#define QGRAPHICSROUNDTEXTITEM_H
#ifndef QLIGHTROUNDTEXTITEM_H
#define QLIGHTROUNDTEXTITEM_H
#include "qshapefactory.h"
#include <QAbstractGraphicsShapeItem>
#include <QFont>
class QGraphicsRoundTextItem : public QAbstractGraphicsShapeItem {
class QLightRoundTextItem : public QAbstractGraphicsShapeItem {
public:
enum { Type = UserType + 1 };
QGraphicsRoundTextItem( QGraphicsItem * parent = 0 );
QLightRoundTextItem( QGraphicsItem * parent = 0 );
const QFont &font() const;
const QString &text() const;
@@ -53,6 +53,10 @@ public:
QWidget *widget );
virtual int type() const { return Type; }
protected:
virtual QVariant itemChange ( GraphicsItemChange change, const QVariant & value );
private:
QFont m_font;
QString m_text;
@@ -64,7 +68,7 @@ private:
class QShapeControllerRoundText : public QShapeController {
public:
enum { Type = QGraphicsRoundTextItem::Type };
enum { Type = QLightRoundTextItem::Type };
virtual QString name() const;
virtual QString menuName() const;
@@ -81,4 +85,4 @@ protected:
};
#endif // QGRAPHICSROUNDTEXTITEM_H
#endif // QLIGHTROUNDTEXTITEM_H
+69 -53
View File
@@ -201,6 +201,9 @@ bool QLightScribe::clReportLabelTimeEstimate(long time)
return false;
}
extern uid_t realUserId;
void QLightScribe::run()
{
QMutexLocker lock( m_mutex );
@@ -254,68 +257,81 @@ void QLightScribe::run()
throw tr( "Cannot find drive: \"" ) + m_task->m_selectedDrive->displayName() + "\"";
DiscPrinter printer = printers.Item( found );
function = "LS_DiscPrinter_OpenPrintSession";
DiscPrintSession session = printer.OpenPrintSession();
if( m_task->m_action == Task::print ) {
setreuid( realUserId, 0 );
function = "LS_DiscPrinter_AddExclusiveUse";
printer.AddExclusiveUse();
function = "LS_DiscPrinter_LockDriveTray";
printer.LockDriveTray();
}
LS_PrintCallbacks callbacks;
callbacks.AbortLabel = clAbortLabel;
callbacks.ReportPrepareProgress = clReportPrepareProgress;
callbacks.ReportLabelProgress = clReportLabelProgress;
callbacks.ReportFinished = clReportFinished;
callbacks.ReportLabelTimeEstimate = clReportLabelTimeEstimate;
{
function = "LS_DiscPrinter_OpenPrintSession";
DiscPrintSession session = printer.OpenPrintSession();
session.SetProgressCallback( &callbacks );
LS_PrintCallbacks callbacks;
callbacks.AbortLabel = clAbortLabel;
callbacks.ReportPrepareProgress = clReportPrepareProgress;
callbacks.ReportLabelProgress = clReportLabelProgress;
callbacks.ReportFinished = clReportFinished;
callbacks.ReportLabelTimeEstimate = clReportLabelTimeEstimate;
const size_t bitmapHeaderSize = 54;
session.SetProgressCallback( &callbacks );
if( m_task->m_action == Task::preview ) {
const size_t bitmapHeaderSize = 54;
LS_Size size;
size.x = m_task->m_size.width();
size.y = m_task->m_size.height();
if( m_task->m_action == Task::preview ) {
m_task->m_tmpFile.open();
LS_Size size;
size.x = m_task->m_size.width();
size.y = m_task->m_size.height();
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
try {
//printer.AddExclusiveUse();
//printer.LockDriveTray();
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 );
}
catch( LightScribe::LSException &ex ) {
emit finished( ex.GetCode() );
throw;
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
try {
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 );
}
catch( LightScribe::LSException &ex ) {
emit finished( ex.GetCode() );
throw;
}
}
}
//printer.UnlockDriveTray();
//printer.ReleaseExclusiveUse();
if( m_task->m_action == Task::print ) {
function = "LS_DiscPrinter_UnlockDriveTray";
printer.UnlockDriveTray();
function = "LS_DiscPrinter_ReleaseExclusiveUse";
printer.ReleaseExclusiveUse();
setreuid( 0, realUserId );
}
function = "";
}
+106
View File
@@ -0,0 +1,106 @@
/* qlscribe - Qt based application to print lightScribe discs
Copyright (C) 2009 Vyacheslav Kononenko <vyacheslav@kononenko.net>
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.
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
$Id$ */
#include "qlighttextitem.h"
#include "qdialogtext.h"
#include "qcdscene.h"
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
QLightTextItem::QLightTextItem()
{
}
QVariant QLightTextItem::itemChange( GraphicsItemChange change, const QVariant & value )
{
if( scene() && change == ItemPositionHasChanged )
static_cast<QCDScene *>( scene() )->setChanged();
return value;
}
RegisterController< QShapeControllerText > regControllerText;
QString QShapeControllerText::name() const
{
return "text";
}
QString QShapeControllerText::menuName() const
{
return QObject::tr( "Text", "QShapeControllerText name" );
}
QGraphicsItem *QShapeControllerText::create() const
{
return new QLightTextItem;
}
QItemDialog *QShapeControllerText::createDialog( QWidget *parent ) const
{
return new QDialogText( parent );
}
void QShapeControllerText::writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const
{
const QGraphicsSimpleTextItem *textItem = static_cast< const QGraphicsSimpleTextItem * >( item );
writer.writeEmptyElement( "pos" );
writer.writeAttribute( QXmlStreamAttribute( "x", QString::number( textItem->pos().x() ) ) );
writer.writeAttribute( QXmlStreamAttribute( "y", QString::number( textItem->pos().y() ) ) );
writer.writeTextElement( "font", textItem->font().toString() );
writer.writeTextElement( "color", textItem->brush().color().name() );
writer.writeTextElement( "text", textItem->text() );
}
void QShapeControllerText::readData( const QString &element,
const QXmlStreamAttributes &attrs,
const QString &data,
QGraphicsItem *item ) const
{
QGraphicsSimpleTextItem *textItem = static_cast< QGraphicsSimpleTextItem * >( item );
if( element == "pos" ) {
textItem->setPos( attrs.value( "x" ).toString().toDouble(),
attrs.value( "y" ).toString().toDouble() );
return;
}
if( element == "font" ) {
QFont font;
font.fromString( data );
textItem->setFont( font );
return;
}
if( element == "color" ) {
textItem->setBrush( QColor( data ) );
return;
}
if( element == "text" ) {
textItem->setText( data );
return;
}
}
@@ -18,17 +18,26 @@
$Id$ */
#ifndef QSHAPECONTROLLERS_H
#define QSHAPECONTROLLERS_H
#ifndef QLIGHTTEXTITEM_H
#define QLIGHTTEXTITEM_H
#include <QGraphicsSimpleTextItem>
#include "qshapefactory.h"
#include <QGraphicsSimpleTextItem>
#include <QGraphicsPixmapItem>
class QLightTextItem : public QGraphicsSimpleTextItem
{
public:
QLightTextItem();
protected:
virtual QVariant itemChange ( GraphicsItemChange change, const QVariant & value );
};
class QShapeControllerText : public QShapeController {
public:
enum { Type = QGraphicsSimpleTextItem::Type };
enum { Type = QLightTextItem::Type };
virtual QString name() const;
virtual QString menuName() const;
@@ -44,22 +53,4 @@ protected:
QGraphicsItem *item ) const;
};
class QShapeControllerPixmap : public QShapeController {
public:
enum { Type = QGraphicsPixmapItem::Type };
virtual QString name() const;
virtual QString menuName() const;
virtual QGraphicsItem *create() const;
protected:
virtual QItemDialog *createDialog( QWidget *parent ) const;
virtual void writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const;
virtual void readData( const QString &element,
const QXmlStreamAttributes &attrs,
const QString &data,
QGraphicsItem *item ) const;
};
#endif // QSHAPECONTROLLERS_H
#endif // QLIGHTTEXTITEM_H
+8 -6
View File
@@ -7,30 +7,32 @@ QMAKE_LFLAGS += -m32
QMAKE_LIBDIR = /usr/lib32
SOURCES += main.cpp \
mainwindow.cpp \
qgraphicsroundtextitem.cpp \
qlightroundtextitem.cpp \
qcdview.cpp \
qcdscene.cpp \
qshapefactory.cpp \
qshapecontrollers.cpp \
qdialogtext.cpp \
qdialogroundtext.cpp \
qlightscribe.cpp \
qdialogpixmap.cpp \
qdialogprint.cpp \
qdialogprogress.cpp
qdialogprogress.cpp \
qlighttextitem.cpp \
qlightpixmapitem.cpp
QMAKE_LIBS += -llightscribe
HEADERS += mainwindow.h \
qgraphicsroundtextitem.h \
qlightroundtextitem.h \
qcdview.h \
qcdscene.h \
qshapefactory.h \
qshapecontrollers.h \
qdialogtext.h \
qdialogroundtext.h \
qlightscribe.h \
qdialogpixmap.h \
qdialogprint.h \
qdialogprogress.h
qdialogprogress.h \
qlighttextitem.h \
qlightpixmapitem.h
FORMS += qdialogtext.ui \
qdialogroundtext.ui \
qdialogpixmap.ui \