1 Commits

Author SHA1 Message Date
ruglory 55a282b326 Tagging the 0.2 release
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/tags/release-0.2@23 cac9541e-1b8d-4bfa-827e-589bba606050
2009-01-27 02:53:02 +00:00
23 changed files with 260 additions and 672 deletions
+1 -6
View File
@@ -21,14 +21,9 @@ Then go to the source directory and type:
make
sudo make install
If cmake fails to find lightScribe API specify environment variable LIGHTSCRIBEDIR:
LIGHTSCRIBEDIR=/opt/lightscribe cmake ..
Include files should be in ${LIGHTSCRIBEDIR}/include and lib in ${LIGHTSCRIBEDIR}/lib
Once installed, you can start Qt lightScribe by typing "qlscribe", but due to API
requirement if you want to burn qlscribe has to be started by root as "sudo qlscribe"
requirement if you want to burn qlscribe has to be started by root "sudo qlscribe"
You need to download lightScribe SDK for qlscribe to build and lightScribe runtime
for qlscribe to run. For details see lightScribe webpage:
-11
View File
@@ -1,16 +1,5 @@
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)
Main window on close scan all documents and confirm to save changed ones
Document window confirm to save on close
New in 0.2:
Print progress dialog shows elapsed/estimated time
Bugfix for not loading angle in round text item
+2 -3
View File
@@ -18,14 +18,13 @@
#
# $Id$
FIND_PATH( LSCRIBE_INCLUDE_DIR lightscribe.h /usr/local/include $ENV{LIGHTSCRIBEDIR}/include )
FIND_PATH( LSCRIBE_INCLUDE_DIR lightscribe.h /usr/local/include )
FIND_LIBRARY( LSCRIBE_LIBRARY lightscribe /usr/local/lib $ENV{LIGHTSCRIBEDIR}/lib )
FIND_LIBRARY( LSCRIBE_LIBRARY lightscribe /usr/local/lib )
if( LSCRIBE_INCLUDE_DIR AND LSCRIBE_LIBRARY )
SET( LSCRIBE_FOUND TRUE )
SET( LSCRIBE_LIBRARIES ${LSCRIBE_LIBRARY} )
INCLUDE_DIRECTORIES(${LSCRIBE_INCLUDE_DIR})
ENDIF( LSCRIBE_INCLUDE_DIR AND LSCRIBE_LIBRARY )
IF( LSCRIBE_FOUND )
+3 -6
View File
@@ -19,8 +19,8 @@
# $Id$
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 qdialogprint.cpp qdialogprogress.cpp )
qdialogtext.cpp qgraphicsroundtextitem.cpp qlightscribe.cpp qshapecontrollers.cpp qshapefactory.cpp
qdialogprint.cpp qdialogprogress.cpp )
SET( QLSCRIBE_UIS qdialogtext.ui qdialogroundtext.ui qdialogpixmap.ui qdialogprint.ui qdialogprogress.ui )
@@ -41,7 +41,4 @@ ADD_EXECUTABLE( qlscribe ${QLSCRIBE_SRCS} ${QLSCRIBE_MOC_SRCS} ${QLSCRIBE_UI_HDR
TARGET_LINK_LIBRARIES( qlscribe ${QT_LIBRARIES} ${LSCRIBE_LIBRARIES} )
INSTALL( TARGETS qlscribe
DESTINATION bin
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE SETUID )
INSTALL( TARGETS qlscribe DESTINATION bin )
+1 -22
View File
@@ -19,34 +19,13 @@
$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" );
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 );
MainWindow mwindow;
mwindow.show();
return app.exec();
+62 -93
View File
@@ -19,7 +19,7 @@
$Id$ */
#include "mainwindow.h"
#include "qlightroundtextitem.h"
#include "qgraphicsroundtextitem.h"
#include "qcdview.h"
#include "qcdscene.h"
#include "qshapefactory.h"
@@ -34,11 +34,19 @@
#include <QMessageBox>
#include <QSignalMapper>
#include <QFileDialog>
#include <QXmlStreamWriter>
#include <QLabel>
#include <QCloseEvent>
MainWindow::MainWindow( bool enablePrint )
: QMainWindow( 0 ),
/*#include <QImage>
#include <QBuffer>
#include <QGraphicsScene>
#include <QFontDialog>
#include <QPainter>*/
//#include <lightscribe.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
m_mdiArea( new QMdiArea( this ) ),
m_menuFile( 0 ), m_menuInsert( 0 ),
m_insertMapper( new QSignalMapper( this ) )
@@ -70,12 +78,9 @@ MainWindow::MainWindow( bool enablePrint )
this,
SLOT(onMenuPrintPreview()) );
QAction *printAction =
m_menuFile->addAction( tr( "Print...", "Menu item \"Print\"" ),
this,
SLOT(onMenuPrint()) );
if( !enablePrint )
printAction->setEnabled( false );
m_menuFile->addAction( tr( "Print...", "Menu item \"Print\"" ),
this,
SLOT(onMenuPrint()) );
m_menuFile->addAction( tr( "Exit", "Menu item \"Exit\"" ),
this,
@@ -111,75 +116,11 @@ MainWindow::~MainWindow()
lscribe->wait( 1000 );
}
bool MainWindow::saveSceneAs( QCDScene *scene )
{
QString fileName =
QFileDialog::getSaveFileName( this,
scene->name() + tr( ": save as" ),
QString(),
tr("qlscribe document (*.qlx)") );
if( fileName.isNull() )
return false;
if( !fileName.contains( '.' ) )
fileName += ".qlx";
return scene->saveAs( fileName );
}
bool MainWindow::saveScene( QCDScene *scene )
{
return scene->isUnnamed() ? saveSceneAs( scene ) : scene->save();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
bool saveAll = false;
QList< QMdiSubWindow * > subs = m_mdiArea->subWindowList();
foreach( QMdiSubWindow *sub, subs ) {
QCDView *cdview = dynamic_cast< QCDView * >( sub->widget() );
if( !cdview )
continue;
QCDScene *scene = cdview->scene();
if( !scene || scene->isSaved() )
continue;
bool save = saveAll;
if( !save ) {
QMessageBox::StandardButton button =
QMessageBox::question( this,
tr( "Confirmation" ),
scene->name() + tr( " is unsaved, do you want to save?" ),
QMessageBox::Save | QMessageBox::SaveAll | QMessageBox::Discard | QMessageBox::Cancel );
if( button == QMessageBox::Cancel ) {
event->ignore();
return;
}
if( button == QMessageBox::SaveAll ) {
saveAll = true;
save = true;
}
if( button == QMessageBox::Save )
save = true;
}
if( save )
if( !saveScene( scene ) ) {
event->ignore();
return;
}
}
event->accept();
}
void MainWindow::onMenuNew()
{
QCDView *newView = new QCDView;
QCDScene *scene = new QCDScene( newView );
newView->setScene( scene );
scene->setName();
newView->setScene( new QCDScene( newView ) );
//newView->setWindowTitle( "Baba" );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( newView );
subWindow->show();
}
@@ -220,7 +161,6 @@ void MainWindow::onMenuInsert( int id )
item->setFlag( QGraphicsItem::ItemIsMovable, true );
item->setFlag( QGraphicsItem::ItemIsSelectable, true );
cdscene->addItem( item );
cdscene->setChanged();
}
void MainWindow::onMenuOpen()
@@ -233,31 +173,33 @@ void MainWindow::onMenuOpen()
if( fileName.isNull() )
return;
QFile file( fileName );
if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
QMessageBox::critical( this, tr( "Error" ), tr( "Cannot open file for reading\n" ) + fileName );
return;
}
QCDView *newView = new QCDView;
QCDScene *scene = new QCDScene( newView );
newView->setScene( scene );
if( !scene->load( fileName ) ) {
QXmlStreamReader reader( &file );
try {
scene->read( reader );
}
catch( const QString &err ) {
QMessageBox::critical( this, tr( "Error" ), tr( "Cannot read file " ) + fileName + "\n" + err );
delete newView;
return;
}
}
//newView->setWindowTitle( "Baba" );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( newView );
subWindow->show();
}
void MainWindow::onMenuSave()
{
QCDScene *scene = getScene( m_mdiArea );
if( scene )
saveScene( scene );
}
void MainWindow::onMenuSaveAs()
{
QCDScene *scene = getScene( m_mdiArea );
if( scene )
saveSceneAs( scene );
}
void MainWindow::onMenuPrintPreview()
@@ -277,7 +219,6 @@ void MainWindow::onMenuPrintPreview()
QLabel *label = new QLabel;
label->setPixmap( pixmap );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( label );
subWindow->setWindowTitle( "Preview: " + cdscene->name() );
subWindow->show();
}
catch( const QString &err ) {
@@ -294,12 +235,40 @@ void MainWindow::onMenuPrint()
QDialogProgress::exec( this, cdscene );
}
void MainWindow::onMenuSaveAs()
{
QCDScene *cdscene = getScene( m_mdiArea );
if( !cdscene )
return;
QString fileName =
QFileDialog::getSaveFileName( this,
tr( "Save as:" ),
QString(),
tr("qlscribe document (*.qlx)") );
if( fileName.isNull() )
return;
if( !fileName.contains( '.' ) )
fileName += ".qlx";
QFile file( fileName );
if( !file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text ) ) {
QMessageBox::warning( this, tr( "Warning" ), tr( "Cannot open file for writing: " ) + fileName );
return;
}
QXmlStreamWriter writer( &file );
writer.setAutoFormatting( true );
cdscene->write( writer );
}
void MainWindow::onMenuAbout()
{
QMessageBox::about( this,
tr( "About" ),
tr( "<h3>qlscribe - Qt lisghtScribe</h3>"
"<p>release 0.4 $Revision$</p>"
"<p>release 0.2 $Revision$</p>"
"<p>visit project at home page "
"<a href=\"http://qlscribe.sourceforge.net/\">qlscribe.sourceforge.net</a></p>" ) );
}
+1 -8
View File
@@ -25,19 +25,14 @@
class QMdiArea;
class QSignalMapper;
class QCDScene;
class MainWindow : public QMainWindow {
Q_OBJECT
Q_DISABLE_COPY(MainWindow)
public:
explicit MainWindow( bool enablePrint );
explicit MainWindow(QWidget *parent = 0);
virtual ~MainWindow();
bool saveScene( QCDScene *scene );
protected:
virtual void closeEvent( QCloseEvent *event );
private slots:
void onMenuNew();
void onMenuOpen();
@@ -50,8 +45,6 @@ private slots:
void onMenuQtAbout();
private:
bool saveSceneAs( QCDScene *scene );
QMdiArea *m_mdiArea;
QMenu *m_menuFile;
+2 -139
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:$ */
#include "qcdscene.h"
#include "qshapefactory.h"
@@ -25,17 +25,10 @@
#include <QMessageBox>
#include <QGraphicsItem>
#include <QGraphicsSceneMouseEvent>
#include <QFile>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QMessageBox>
#include <QGraphicsView>
#include <QRegExp>
QCDScene::QCDScene( QObject * parent )
: QGraphicsScene( parent ),
m_index( 0 ),
m_saved( true )
: QGraphicsScene( parent )
{
setSceneRect( -60.0, -60.0, 60.0 * 2, 60.0 * 2 );
}
@@ -46,93 +39,6 @@ QCDScene::~QCDScene()
{
}
bool QCDScene::load( const QString &fileName )
{
QFile file( fileName );
if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
QMessageBox::critical( 0, tr( "Error" ), tr( "Cannot open file for reading\n" ) + fileName );
return false;
}
QXmlStreamReader reader( &file );
try {
read( reader );
}
catch( const QString &err ) {
QMessageBox::critical( 0, tr( "Error" ), tr( "Cannot read file " ) + fileName + "\n" + err );
return false;
}
m_fileName = fileName;
m_saved = true;
setName();
return true;
}
bool QCDScene::save()
{
QFile file( m_fileName );
if( !file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text ) ) {
QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot open file for writing: " ) + m_fileName );
return false;
}
QXmlStreamWriter writer( &file );
writer.setAutoFormatting( true );
write( writer );
m_saved = true;
setName();
return true;
}
void QCDScene::setName()
{
if( m_fileName.isEmpty() ) {
if( !m_index ) {
static int index = 1;
m_index = index++;
}
m_name = "Unnamed_" + QString::number( m_index );
} else {
QRegExp rx( "(.*/)?(.*)\\.qlx" );
rx.indexIn( m_fileName );
m_name = rx.cap( 2 );
}
updateTitles();
}
void QCDScene::setChanged()
{
m_saved = false;
updateTitles();
}
void QCDScene::updateTitles() const
{
QString name = m_name;
if( !m_saved )
name += " *";
QList<QGraphicsView *> allViews = views();
foreach( QGraphicsView *view, allViews ) {
view->setWindowTitle( name );
}
}
bool QCDScene::saveAs( const QString &fileName )
{
QFile file( fileName );
if( !file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text ) ) {
QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot open file for writing: " ) + fileName );
return false;
}
QXmlStreamWriter writer( &file );
writer.setAutoFormatting( true );
write( writer );
m_saved = true;
m_fileName = fileName;
setName();
return true;
}
void QCDScene::write( QXmlStreamWriter &writer )
{
writer.writeStartDocument();
@@ -204,9 +110,6 @@ 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() );
}
@@ -218,43 +121,3 @@ 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 );
}
+3 -26
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 QCDSCENE_H
#define QCDSCENE_H
@@ -32,37 +32,14 @@ public:
QCDScene( QObject * parent = 0 );
virtual ~QCDScene();
bool isSaved() const { return m_saved; }
bool isUnnamed() const { return m_fileName.isEmpty(); }
void setChanged();
void setName();
bool load( const QString &fileName );
bool save();
bool saveAs( const QString &fileName );
void updateTitles() const;
QString name() const { return m_name; }
void write( QXmlStreamWriter &writer );
void read( QXmlStreamReader &reader );
protected:
virtual void contextMenuEvent( QGraphicsSceneContextMenuEvent *contextMenuEvent );
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;
QString m_fileName;
int m_index;
bool m_saved;
};
#endif //QCDSCENE_H
+2 -34
View File
@@ -16,14 +16,10 @@
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:$ */
#include "qcdview.h"
#include "qcdscene.h"
#include "mainwindow.h"
#include <QCloseEvent>
#include <QMessageBox>
QCDView::QCDView( QWidget *parent )
: QGraphicsView( parent ),
@@ -53,38 +49,10 @@ QCDScene *QCDView::scene() const
return static_cast< QCDScene * >( QGraphicsView::scene() );
}
void QCDView::closeEvent( QCloseEvent *event )
{
QCDScene *cdscene = scene();
if( cdscene && !cdscene->isSaved() ) {
QMessageBox::StandardButton button =
QMessageBox::question( this,
tr( "Confitmation" ),
cdscene->name() + tr( " is changed, do you want to save it?" ),
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel );
if( button == QMessageBox::Cancel ) {
event->ignore();
return;
}
if( button == QMessageBox::Yes ) {
QWidget *parent = parentWidget();
for( ; parent->parentWidget(); parent = parent->parentWidget() );
if( !static_cast< MainWindow * >( parent )->saveScene( cdscene ) ) {
event->ignore();
return;
}
}
}
event->accept();
}
inline
void drawCircle( QPainter *painter, double radi )
{
painter->drawEllipse( int( -radi ), int( -radi ),
int( radi * 2 ), int( radi * 2 ) );
painter->drawEllipse( -radi, -radi, radi * 2, radi * 2 );
}
void QCDView::drawCD( QPainter *painter, const QRectF & rect, bool alpha )
+1 -2
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 QCDVIEW_H
#define QCDVIEW_H
@@ -39,7 +39,6 @@ public:
virtual QSize sizeHint () const;
protected:
virtual void closeEvent( QCloseEvent *event );
void drawForeground ( QPainter * painter, const QRectF & rect );
void drawBackground ( QPainter * painter, const QRectF & rect );
+1 -3
View File
@@ -22,7 +22,6 @@
#include "ui_qdialogprogress.h"
#include "qlightscribe.h"
#include "qdialogprint.h"
#include "qcdscene.h"
#include <QMessageBox>
#include <QAbstractButton>
@@ -68,7 +67,6 @@ bool QDialogProgress::exec( QWidget *parent, QCDScene *scene )
QLightScribe *scribe = QLightScribe::instance();
QDialogProgress dialog( parent );
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)) );
@@ -107,7 +105,7 @@ void QDialogProgress::onLabelProgress( long current, long final )
m_ui->progressPrinting->setMaximum( final );
m_ui->progressPrinting->setValue( current );
if( current && final / double( current ) < 10.0 ) {
if( current && double( current ) / final > 0.1 ) {
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 "qlightroundtextitem.h"
#include "qgraphicsroundtextitem.h"
#include "qcdscene.h"
#include <QFontDialog>
@@ -55,13 +55,13 @@ void QDialogRoundText::changeEvent(QEvent *e)
bool QDialogRoundText::exec( QGraphicsItem *graphicsItem )
{
QLightRoundTextItem *item = dynamic_cast< QLightRoundTextItem * >( graphicsItem );
QGraphicsRoundTextItem *item = dynamic_cast< QGraphicsRoundTextItem * >( graphicsItem );
if( !item )
return false;
QCDScene scene;
m_ui->cdView->setScene( &scene );
m_item = new QLightRoundTextItem;
m_item = new QGraphicsRoundTextItem;
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 QLightRoundTextItem;
class QGraphicsRoundTextItem;
class QDialogRoundText : public QItemDialog {
Q_OBJECT
@@ -54,8 +54,8 @@ private slots:
void locChanged();
private:
Ui::QDialogRoundText *m_ui;
QLightRoundTextItem *m_item;
Ui::QDialogRoundText *m_ui;
QGraphicsRoundTextItem *m_item;
};
#endif // QDIALOGROUNDTEXT_H
@@ -18,9 +18,8 @@
$Id$ */
#include "qlightroundtextitem.h"
#include "qgraphicsroundtextitem.h"
#include "qdialogroundtext.h"
#include "qcdscene.h"
#include <QPainter>
#include <QFontMetrics>
@@ -30,7 +29,7 @@
#include <math.h>
QLightRoundTextItem::QLightRoundTextItem( QGraphicsItem *parent )
QGraphicsRoundTextItem::QGraphicsRoundTextItem( QGraphicsItem *parent )
: QAbstractGraphicsShapeItem( parent ),
m_radius( 40.0 ),
m_angle( 0.0 ),
@@ -39,73 +38,73 @@ QLightRoundTextItem::QLightRoundTextItem( QGraphicsItem *parent )
{
}
const QFont & QLightRoundTextItem::font() const
const QFont & QGraphicsRoundTextItem::font() const
{
return m_font;
}
const QString & QLightRoundTextItem::text() const
const QString & QGraphicsRoundTextItem::text() const
{
return m_text;
}
double QLightRoundTextItem::radius() const
double QGraphicsRoundTextItem::radius() const
{
return m_radius;
}
double QLightRoundTextItem::angle() const
double QGraphicsRoundTextItem::angle() const
{
return m_angle;
}
Qt::Alignment QLightRoundTextItem::alignment() const
Qt::Alignment QGraphicsRoundTextItem::alignment() const
{
return m_alignment;
}
bool QLightRoundTextItem::outside() const
bool QGraphicsRoundTextItem::outside() const
{
return m_outside;
}
void QLightRoundTextItem::setFont( const QFont &font )
void QGraphicsRoundTextItem::setFont( const QFont &font )
{
prepareGeometryChange();
m_font = font;
}
void QLightRoundTextItem::setText( const QString &text )
void QGraphicsRoundTextItem::setText( const QString &text )
{
prepareGeometryChange();
m_text = text;
}
void QLightRoundTextItem::setRadius( double radius )
void QGraphicsRoundTextItem::setRadius( double radius )
{
prepareGeometryChange();
m_radius = radius;
}
void QLightRoundTextItem::setAngle( double angle )
void QGraphicsRoundTextItem::setAngle( double angle )
{
prepareGeometryChange();
m_angle = angle;
}
void QLightRoundTextItem::setAlignment( Qt::Alignment alignment )
void QGraphicsRoundTextItem::setAlignment( Qt::Alignment alignment )
{
prepareGeometryChange();
m_alignment = alignment;
}
void QLightRoundTextItem::setOutside( bool outside )
void QGraphicsRoundTextItem::setOutside( bool outside )
{
prepareGeometryChange();
m_outside = outside;
}
QRectF QLightRoundTextItem::boundingRect() const
QRectF QGraphicsRoundTextItem::boundingRect() const
{
double height = m_radius;
if( m_outside ) {
@@ -116,7 +115,7 @@ QRectF QLightRoundTextItem::boundingRect() const
return QRectF( -height, -height, 2 * height, 2 * height );
}
QPainterPath QLightRoundTextItem::shape() const
QPainterPath QGraphicsRoundTextItem::shape() const
{
QFontMetrics mcs( m_font );
double arcAngle = 0.0;
@@ -165,7 +164,7 @@ QPainterPath QLightRoundTextItem::shape() const
}
void QLightRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget )
void QGraphicsRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget )
{
Q_UNUSED( option );
Q_UNUSED( widget );
@@ -205,9 +204,7 @@ void QLightRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsIt
painter->setWorldTransform( trans, true );
prevWidth = mcs.width( ch );
painter->drawText( int( -prevWidth / 2.0 ),
int( m_outside ? -m_radius : m_radius ),
ch );
painter->drawText( -prevWidth / 2.0, m_outside ? -m_radius : m_radius, ch );
}
painter->restore();
if (option->state & QStyle::State_Selected) {
@@ -217,14 +214,6 @@ void QLightRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsIt
}
}
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
@@ -239,7 +228,7 @@ QString QShapeControllerRoundText::menuName() const
QGraphicsItem *QShapeControllerRoundText::create() const
{
return new QLightRoundTextItem;
return new QGraphicsRoundTextItem;
}
QItemDialog *QShapeControllerRoundText::createDialog( QWidget *parent ) const
@@ -249,7 +238,7 @@ QItemDialog *QShapeControllerRoundText::createDialog( QWidget *parent ) const
void QShapeControllerRoundText::writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const
{
const QLightRoundTextItem *textItem = static_cast< const QLightRoundTextItem * >( item );
const QGraphicsRoundTextItem *textItem = static_cast< const QGraphicsRoundTextItem * >( item );
writer.writeEmptyElement( "pos" );
writer.writeAttribute( QXmlStreamAttribute( "x", QString::number( textItem->pos().x() ) ) );
writer.writeAttribute( QXmlStreamAttribute( "y", QString::number( textItem->pos().y() ) ) );
@@ -268,7 +257,7 @@ void QShapeControllerRoundText::readData( const QString &element,
const QString &data,
QGraphicsItem *item ) const
{
QLightRoundTextItem *textItem = static_cast< QLightRoundTextItem * >( item );
QGraphicsRoundTextItem *textItem = static_cast< QGraphicsRoundTextItem * >( 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 QLIGHTROUNDTEXTITEM_H
#define QLIGHTROUNDTEXTITEM_H
#ifndef QGRAPHICSROUNDTEXTITEM_H
#define QGRAPHICSROUNDTEXTITEM_H
#include "qshapefactory.h"
#include <QAbstractGraphicsShapeItem>
#include <QFont>
class QLightRoundTextItem : public QAbstractGraphicsShapeItem {
class QGraphicsRoundTextItem : public QAbstractGraphicsShapeItem {
public:
enum { Type = UserType + 1 };
QLightRoundTextItem( QGraphicsItem * parent = 0 );
QGraphicsRoundTextItem( QGraphicsItem * parent = 0 );
const QFont &font() const;
const QString &text() const;
@@ -53,10 +53,6 @@ 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;
@@ -68,7 +64,7 @@ private:
class QShapeControllerRoundText : public QShapeController {
public:
enum { Type = QLightRoundTextItem::Type };
enum { Type = QGraphicsRoundTextItem::Type };
virtual QString name() const;
virtual QString menuName() const;
@@ -85,4 +81,4 @@ protected:
};
#endif // QLIGHTROUNDTEXTITEM_H
#endif // QGRAPHICSROUNDTEXTITEM_H
-56
View File
@@ -1,56 +0,0 @@
/* 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
+53 -69
View File
@@ -201,9 +201,6 @@ bool QLightScribe::clReportLabelTimeEstimate(long time)
return false;
}
extern uid_t realUserId;
void QLightScribe::run()
{
QMutexLocker lock( m_mutex );
@@ -257,81 +254,68 @@ void QLightScribe::run()
throw tr( "Cannot find drive: \"" ) + m_task->m_selectedDrive->displayName() + "\"";
DiscPrinter printer = printers.Item( found );
if( m_task->m_action == Task::print ) {
setreuid( realUserId, 0 );
function = "LS_DiscPrinter_AddExclusiveUse";
printer.AddExclusiveUse();
function = "LS_DiscPrinter_LockDriveTray";
printer.LockDriveTray();
}
function = "LS_DiscPrinter_OpenPrintSession";
DiscPrintSession session = printer.OpenPrintSession();
{
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;
LS_PrintCallbacks callbacks;
callbacks.AbortLabel = clAbortLabel;
callbacks.ReportPrepareProgress = clReportPrepareProgress;
callbacks.ReportLabelProgress = clReportLabelProgress;
callbacks.ReportFinished = clReportFinished;
callbacks.ReportLabelTimeEstimate = clReportLabelTimeEstimate;
session.SetProgressCallback( &callbacks );
session.SetProgressCallback( &callbacks );
const size_t bitmapHeaderSize = 54;
const size_t bitmapHeaderSize = 54;
if( m_task->m_action == Task::preview ) {
if( m_task->m_action == Task::preview ) {
LS_Size size;
size.x = m_task->m_size.width();
size.y = m_task->m_size.height();
LS_Size size;
size.x = m_task->m_size.width();
size.y = m_task->m_size.height();
m_task->m_tmpFile.open();
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;
}
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;
}
}
if( m_task->m_action == Task::print ) {
function = "LS_DiscPrinter_UnlockDriveTray";
printer.UnlockDriveTray();
function = "LS_DiscPrinter_ReleaseExclusiveUse";
printer.ReleaseExclusiveUse();
setreuid( 0, realUserId );
//printer.UnlockDriveTray();
//printer.ReleaseExclusiveUse();
}
function = "";
}
-106
View File
@@ -1,106 +0,0 @@
/* 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;
}
}
+6 -8
View File
@@ -7,32 +7,30 @@ QMAKE_LFLAGS += -m32
QMAKE_LIBDIR = /usr/lib32
SOURCES += main.cpp \
mainwindow.cpp \
qlightroundtextitem.cpp \
qgraphicsroundtextitem.cpp \
qcdview.cpp \
qcdscene.cpp \
qshapefactory.cpp \
qshapecontrollers.cpp \
qdialogtext.cpp \
qdialogroundtext.cpp \
qlightscribe.cpp \
qdialogpixmap.cpp \
qdialogprint.cpp \
qdialogprogress.cpp \
qlighttextitem.cpp \
qlightpixmapitem.cpp
qdialogprogress.cpp
QMAKE_LIBS += -llightscribe
HEADERS += mainwindow.h \
qlightroundtextitem.h \
qgraphicsroundtextitem.h \
qcdview.h \
qcdscene.h \
qshapefactory.h \
qshapecontrollers.h \
qdialogtext.h \
qdialogroundtext.h \
qlightscribe.h \
qdialogpixmap.h \
qdialogprint.h \
qdialogprogress.h \
qlighttextitem.h \
qlightpixmapitem.h
qdialogprogress.h
FORMS += qdialogtext.ui \
qdialogroundtext.ui \
qdialogpixmap.ui \
@@ -18,25 +18,78 @@
$Id$ */
#include "qlightpixmapitem.h"
#include "qshapecontrollers.h"
#include "qdialogtext.h"
#include "qdialogpixmap.h"
#include "qcdscene.h"
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
QLightPixmapItem::QLightPixmapItem()
RegisterController< QShapeControllerText > regControllerText;
QString QShapeControllerText::name() const
{
return "text";
}
QVariant QLightPixmapItem::itemChange( GraphicsItemChange change, const QVariant & value )
QString QShapeControllerText::menuName() const
{
if( scene() && change == ItemPositionHasChanged )
static_cast<QCDScene *>( scene() )->setChanged();
return value;
return QObject::tr( "Text", "QShapeControllerText name" );
}
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;
@@ -52,7 +105,7 @@ QString QShapeControllerPixmap::menuName() const
QGraphicsItem *QShapeControllerPixmap::create() const
{
QGraphicsPixmapItem *item = new QLightPixmapItem;
QGraphicsPixmapItem *item = new QGraphicsPixmapItem;
item->setShapeMode( QGraphicsPixmapItem::BoundingRectShape );
item->setTransformationMode( Qt::SmoothTransformation );
@@ -18,26 +18,17 @@
$Id$ */
#ifndef QLIGHTTEXTITEM_H
#define QLIGHTTEXTITEM_H
#include <QGraphicsSimpleTextItem>
#ifndef QSHAPECONTROLLERS_H
#define QSHAPECONTROLLERS_H
#include "qshapefactory.h"
class QLightTextItem : public QGraphicsSimpleTextItem
{
public:
QLightTextItem();
protected:
virtual QVariant itemChange ( GraphicsItemChange change, const QVariant & value );
};
#include <QGraphicsSimpleTextItem>
#include <QGraphicsPixmapItem>
class QShapeControllerText : public QShapeController {
public:
enum { Type = QLightTextItem::Type };
enum { Type = QGraphicsSimpleTextItem::Type };
virtual QString name() const;
virtual QString menuName() const;
@@ -53,4 +44,22 @@ protected:
QGraphicsItem *item ) const;
};
#endif // QLIGHTTEXTITEM_H
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
+1 -6
View File
@@ -16,10 +16,9 @@
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:$ */
#include "qshapefactory.h"
#include "qcdscene.h"
#include <QGraphicsItem>
#include <QMessageBox>
@@ -44,10 +43,6 @@ bool QShapeController::edit( QGraphicsItem *item, QWidget *parent ) const
throw;
}
delete dialog;
if( rez && item->scene() )
static_cast< QCDScene * >( item->scene() )->setChanged();
return rez;
}