2 Commits

Author SHA1 Message Date
ruglory 317864659f Tagging the 0.8 release
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/tags/release-0.8@115 cac9541e-1b8d-4bfa-827e-589bba606050
2009-03-05 03:41:22 +00:00
ruglory 9925d346db Tagging the 0.8 release
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/tags/release-0.8@112 cac9541e-1b8d-4bfa-827e-589bba606050
2009-03-05 03:06:10 +00:00
61 changed files with 422 additions and 1907 deletions
-1
View File
@@ -1 +0,0 @@
/build/
+7 -13
View File
@@ -18,25 +18,19 @@
#
# $Id$
CMAKE_MINIMUM_REQUIRED(VERSION 3.21)
PROJECT(qlscribe VERSION 0.19 LANGUAGES CXX)
PROJECT( qlscribe )
SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_AUTOMOC ON)
SET(CMAKE_AUTOUIC ON)
SET(CMAKE_AUTORCC ON)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)
SET( FINAL_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Final install path")
SET( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake )
SET( QLSCRIBE_DBUS_SERVICE org.lightscribe )
SET( QLSCRIBE_DBUS_MANAGER_SERVICE ${QLSCRIBE_DBUS_SERVICE}.printManager )
SET( QLSCRIBE_DBUS_MANAGER_SERVICE ${QLSCRIBE_DBUS_SERVICE}.Manager )
SET( QLSCRIBE_DBUS_DRIVES_SERVICE ${QLSCRIBE_DBUS_SERVICE}.drives )
SET( QLSCRIBE_DBUS_PATH /org/lightscribe )
SET( QLSCRIBE_DBUS_MANAGER_PATH ${QLSCRIBE_DBUS_PATH}/printManager ) # path to manager
SET( QLSCRIBE_DBUS_MANAGER_PATH ${QLSCRIBE_DBUS_PATH}/Manager ) # path to manager
SET( QLSCRIBE_DBUS_DRIVES_PATH ${QLSCRIBE_DBUS_PATH}/drives ) # base path under which drives located
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(resources)
ADD_SUBDIRECTORY(lscribed)
SUBDIRS( src )
SUBDIRS( resources )
SUBDIRS( lscribed )
+1 -1
View File
@@ -3,5 +3,5 @@
* For historical reasons: this is when I imported qlscribe into
SourceForge.
$Revision$ $Date$
$Revision:$ $Date:$
+1 -25
View File
@@ -1,30 +1,6 @@
Qt lightScribe Installaton instructions
=======================================
To compile qlscribe succesfully you may need additional packages installed.
So for Ubuntu folowing packages are required:
build-essential
cmake
libqt4-dev
libdbus-1-dev
For 64 bit Ubuntu you need also to install folowing packages:
ia32-libs
libc6-dev-i386 (maverick only, see notes)
g++-multilib
(Note: this will work for maverick (10.10) version, for lucid and karmic
/usr/lib32/libstdc++.so.5 is missing in ia32-libs so you would have to
find it see https://bugs.launchpad.net/ubuntu/+source/ia32-libs/+bug/431091 )
(Note: On 64 bit if you get "undefined reference std::_Rb_tree_increment..." link error it is
possible that link /usr/lib32/libstdc++.so points to /usr/lib32/libstdc++.so.5... change it
so it points /usr/lib32/libstdc++.so.6...)
For 64 bit Ubuntu libdbus-1-dev does not have link for i386 libdbus-1.so you may need to create one manually:
sudo ln -s libdbus-1.so.3 /lib/i386-linux-gnu/libdbus-1.so
To compile and install, first download release from http://qlscribe.sourceforge.net/
or check out project from subversion repository for particular release:
@@ -54,7 +30,7 @@ Include files should be in ${LIGHTSCRIBEDIR}/include and lib in ${LIGHTSCRIBEDIR
You need manually install dbus config and service files. They are located in INSTALL_PATH/share/qlscribe
So on my ubuntu system I do
sudo cp /usr/local/share/qlscribe/lightscribe.conf /etc/dbus-1/system.d/
sudo cp /usr/local/share/qlscribe/org.lightscribe.printManager.service /usr/share/dbus-1/system-services/
sudo cp /usr/local/share/qlscribe/org.lightscribe.Manager.service /usr/share/dbus-1/system-services/
sudo /etc/init.d/dbus reload
Your system may have different path please refer dbus system daemon documentation
+1 -56
View File
@@ -1,61 +1,5 @@
NEWS - list of user-visible changes between releases of qlscribe
New in 0.19
-----------
* Fixed desktop-entry conformance and packaging cache integration.
New in 0.18
-----------
* Fixed the mandatory 32-bit printing daemon build with GCC 15.
* Fixed 32-bit D-Bus library detection on multilib Gentoo systems.
New in 0.17
-----------
* Ported the application and build system from Qt 4 to Qt 6.
* Modernized the CMake build while retaining the required LightScribe daemon.
New in 0.16
Fixed build on 64 bit Ubuntu Saucy
Fixed bug with alarm() not found
Added instructions for 64 bit
New in 0.15
Added ability to align regular text to left, right or center the same way as rounded text
Fixed issue with filters in open dialog
Added image preview to Qt open file dialog
New in 0.14
Added Software Render for preview to make preview when no drive is available
Items have Z coordinate set to remove ambiguity
Saves from previous versions will have Z coordinate of items reordered on load
New in 0.13:
Fixes in dbus config for Ubuntu Jaunty
New in 0.12:
Fixed bug for round text not updating last used font
Main window stores/restores position and size from/to config
Round text changes radius and angle when dragged by mouse instead of moving the center
Added ability to open image as a document
Bugfix for labels opened from commandline not updating menu
Bugfix for not properly drawing partially covered window background
New in 0.11:
Application settings added with default font to use and option to eject media
Added functionality to eject media after print
Debian packages use standard procedure to install/upgrade config files
New in 0.10:
Undo/Redo mechanism implemented
Some minor bugfixes
New in 0.9:
Parameter --image added to print label in console mode into image
Parameter --file added to process file in format KEY=VALUE
Copy/cut/paste added for items in label
Menu rearranged and menu items enabled/disabled based on state
Application icon added
New in 0.8:
Application is splitted into 2 parts: qlscribe and dbus daemon lscribed
qlscribe does not require sticky bit and can be compiled in 64 bit mode if necessary
@@ -100,3 +44,4 @@ New in 0.2:
New in 0.1:
Open/save as implemented. Text, round text and image items can be inserted and edited
Print preview and print is working (no exclusive lock or tray lock on printing yet)
+4 -11
View File
@@ -22,16 +22,9 @@ FIND_PATH( DBUS_INCLUDE_DIR dbus/dbus.h
PATH_SUFFIXES dbus-1.0 )
IF( CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )
# Gentoo's 32-bit ABI lives in /usr/lib. find_library() rewrites
# that path to lib64 for a 64-bit CMake process, so select the
# existing multilib file explicitly.
IF(EXISTS "/usr/lib/libdbus-1.so")
SET(DBUS_LIBRARY "/usr/lib/libdbus-1.so" CACHE FILEPATH
"32-bit D-Bus library" FORCE)
ELSEIF(EXISTS "/usr/lib32/libdbus-1.so")
SET(DBUS_LIBRARY "/usr/lib32/libdbus-1.so" CACHE FILEPATH
"32-bit D-Bus library" FORCE)
ENDIF()
FIND_LIBRARY( DBUS_LIBRARY dbus-1
PATHS /lib32 /usr/lib32 /usr/local/lib32
NO_DEFAULT_PATH )
ENDIF( CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )
FIND_LIBRARY( DBUS_LIBRARY dbus-1 )
@@ -39,7 +32,7 @@ FIND_LIBRARY( DBUS_LIBRARY dbus-1 )
get_filename_component( _dbusLibPath ${DBUS_LIBRARY} PATH )
FIND_PATH( DBUS_LIBINCLUDE_DIR dbus/dbus-arch-deps.h
PATHS /lib /usr/lib /usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu ${_dbusLibPath}
PATHS /lib /usr/lib /usr/local/lib ${_dbusLibPath}
PATH_SUFFIXES dbus-1.0/include )
if( DBUS_INCLUDE_DIR AND DBUS_LIBINCLUDE_DIR AND DBUS_LIBRARY )
+2 -2
View File
@@ -18,9 +18,9 @@
#
# $Id$
FIND_PATH( LSCRIBE_INCLUDE_DIR lightscribe.h /usr/local/include /usr/include/lightscribe $ENV{LIGHTSCRIBEDIR}/include )
FIND_PATH( LSCRIBE_INCLUDE_DIR lightscribe.h /usr/local/include $ENV{LIGHTSCRIBEDIR}/include )
FIND_LIBRARY( LSCRIBE_LIBRARY lightscribe /usr/local/lib /opt/lightscribe/lib /opt/lightscribe/lib32 $ENV{LIGHTSCRIBEDIR}/lib )
FIND_LIBRARY( LSCRIBE_LIBRARY lightscribe /usr/local/lib $ENV{LIGHTSCRIBEDIR}/lib )
if( LSCRIBE_INCLUDE_DIR AND LSCRIBE_LIBRARY )
SET( LSCRIBE_FOUND TRUE )
+2 -10
View File
@@ -1,13 +1,5 @@
qlscribe (0.15-0lenny1) unstable; urgency=low
* Release 0.16 imported
* Release 0.15 imported
* Release 0.14 imported
* Release 0.13 imported
* Release 0.12 imported
* Release 0.11 imported
* Release 0.10 imported
* Release 0.9 imported
* Release 0.8 imported
qlscribe (0.7-0ubuntu1) unstable; urgency=low
* Initial release
-- Vyacheslav Kononenko <vyacheslav@kononenko.net> Sun, 15 Feb 2009 21:49:41 -0500
-1
View File
@@ -1 +0,0 @@
/usr/share/dbus-1/system-services/org.lightscribe.printManager.service
+3 -3
View File
@@ -2,12 +2,12 @@ Source: qlscribe
Section: qt
Priority: optional
Maintainer: Vyacheslav Kononenko <vyacheslav@kononenko.net>
Build-Depends: debhelper (>= 7), cmake, qt4-qmake, libqt4-dev, libdbus-1-dev, lightscribepublicsdk, lightscribe
Build-Depends: debhelper (>= 7)
Standards-Version: 3.7.3
Homepage: http://qlscribe.sourceforge.net/
Package: qlscribe
Architecture: any
Depends: ${shlibs:Depends}
Architecture: i386
Depends: ${shlibs:Depends}, lightscribe, libstdc++5
Description: Qt based application to print lightScribe discs
Qt lightScribe is a GUI application to burn labels on lightScribe capable drives.
+2 -2
View File
@@ -9,7 +9,7 @@ Upstream Author(s):
Copyright:
<Copyright (C) 2009-2010 Vyacheslav Kononenko>
<Copyright (C) 2009 Vyacheslav Kononenko>
License:
@@ -30,7 +30,7 @@ License:
On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
The Debian packaging is (C) 2009-2010, Vyacheslav Kononenko <vyacheslav@kononenko.net> and
The Debian packaging is (C) 2009, Vyacheslav Kononenko <vyacheslav@kononenko.net> and
is licensed under the GPL, see above.
-12
View File
@@ -1,12 +0,0 @@
#!/bin/sh
set -e
if [ "$1" = "configure" ] ; then
invoke-rc.d dbus reload
fi
#DEBHELPER#
exit 0
-18
View File
@@ -1,18 +0,0 @@
#!/bin/sh
set -e
if [ "$1" = "remove" -o "$1" = "upgrade" ] ; then
if PID=`pidof lscribed` ; then
kill $PID
fi
fi
if [ "$1" = "remove" ] ; then
invoke-rc.d dbus reload
fi
#DEBHELPER#
exit 0
+4 -5
View File
@@ -14,10 +14,9 @@ configure-stamp:
dh_testdir
# Add here commands to configure the package.
mkdir -p build
cd build; cmake .. -DCMAKE_INSTALL_PREFIX=$(CURDIR)/debian/qlscribe/usr \
-DFINAL_INSTALL_PREFIX=/usr \
-DDBUS_SYSTEM_POLICY_DIR=$(CURDIR)/debian/qlscribe/etc/dbus-1/system.d \
-DDBUS_SYSTEM_SERVICE_DIR=$(CURDIR)/debian/qlscribe/usr/share/dbus-1/system-services
cd build; cmake .. -DCMAKE_INSTALL_PREFIX=$(CURDIR)/debian/qlscribe/usr
touch configure-stamp
build: build-stamp
@@ -78,7 +77,7 @@ binary-arch: build install
# dh_link
# dh_strip
dh_compress
dh_fixperms
# dh_fixperms #need suid
# dh_perl
# dh_makeshlibs
dh_installdeb
-128
View File
@@ -1,128 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="keywords" content="Qt,lightscribe,linux,cddb">
<meta name="GENERATOR" content="PageBreeze Free HTML Editor (http://www.pagebreeze.com)">
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" >
<title>HOWTO print CDDB titles with Qt lightscribe</title>
<style>
<!--
h1 { font-family: Arial, sans-serif; font-size: 30px; }
h2 { font-family: Arial, sans-serif; font-size: 18px; }
body,p,b,i,em,dt,dd,dl,sl,caption,th,td,tr,u,blink,select,option,form,div,li { font-family: Arial, sans-serif; font-size: 12px; }
-->
</style>
</head>
<body bgcolor="#ffffff">
<p>This document describes how you can create a qlscribe
template for printing labels with CDDB information embedded. So let's start.</p>
<h4>1 Materials used.</h4>
<p>qlscribe version 0.9 or later is used. If you have older
version please <a
href="https://sourceforge.net/project/showfiles.php?group_id=251217">update</a> </p>
<p>I downloaded label images from <a
href="http://www.lightscribe.com/ideas/index.aspx?id=2358">lightScribe design
center</a></p>
<p>Music album "Aphex Twin / Girl Boy EP"&nbsp;I used just as an example, I do not
actually have this disc nor copy of it.</p>
<p>cddbcmd utility is part of package cddb and on Ubuntu
can be downloaded from standard repository:</p>
<pre> sudo apt-get install cddb</pre>
<h4>2 Create new label and load image</h4>
<p>Start qlscribe, hit File -&gt; New Label -&gt; Full. You
should see something like this:</p>
<p><img hspace="0" src="/dbimage.php?id=207997" border=0></p>
<p>Insert image Edit -&gt; Insert -&gt; Image then on
dialog click "Load image.." select image "MixTape.jpg" downloaded from <a
href="http://www.lightscribe.com/ideas/index.aspx?id=2358">lightScribe design
center</a>&nbsp;Here how&nbsp;my label is&nbsp;looking now:</p>
<p><img hspace="0" src="/dbimage.php?id=207998" border=0></p>
<h4>3 Create text placeholders</h4>
<p>Now select Edit -&gt; Insert -&gt; Text&nbsp;and on
dialog put text "?DTITLE?". Question marks around name will make this text
disapear in qlscribe console mode print. This could be not necessary for disk
title as it usually set in CDDB data anyway, but would not harm. We should
put question marks on song names, as number of placeholders of title
names should be at least not less than songs on the disk. Adjust font size, so
when printed it would fit in white area. Now move your text box in the
place:</p>
<p><img hspace="0" src="/dbimage.php?id=207999" border=0></p>
<p>First we would create a placeholder for the first song,
adjust font properly and then copy/paste it for others. So Edit -&gt; Insert
-&gt; Text and put "?TTITLE0?". Again if we would not put question marks around
name it will still work, but unused placeholders will be printed as ugly
TTITLEN... strings. Move the text box to the proper position and press Ctrl-C or
from menu Edit -&gt; Copy. Press Ctrl-V and move the text box to the new postion
for TTITLE1. Right click, then "edit..." and change text to "?TTITLE1?". Repeat
until you have enough titles. Your label could look like this one now:</p>
<p><img hspace="0" src="/dbimage.php?id=208000" border=0></p>
<p>Hit menu File -&gt; Save, save it&nbsp;for example
as&nbsp;"tape.qlx" and exit qlscribe.</p>
<h4>4 Download CDDB data</h4>
<p>If you do not have audio disk in cd-rom you can lookup
your disk id from http://www.freedb.org/ or similar. Copy it and run this command:</p>
<pre> cddbcmd cddb read rock 4d03a706 &gt; girlboy.txt</pre>
<p>In my case disk id is rock/4d03a706.</p>
<p>Check that file have proper data, it should look similar
to this:</p>
<pre><code># xmcd CD database file
#^M
# Track frame offsets:
# 182
# 22097
# 40767
# 47095
# 55912
# 62745
#^M
# Disc length: 937 seconds
#^M
# Revision: 0
# Processed by: cddbd v1.5.2PL0 Copyright (c) Steve Scherf et al.
# Submitted via: IdiotJukebox 1.0 (Emacs 19.34.1)
#^M
DISCID=4d03a706
DTITLE=Aphex Twin / Girl Boy EP
TTITLE0=Girl Boy (nls mix)
TTITLE1=Milk Man
TTITLE2=Inkey$
TTITLE3=Girl Boy (Snarerushmix)
TTITLE4=Beetles
TTITLE5=Girl Boy (Redruthmix)
EXTD=
EXTT0=
EXTT1=
EXTT2=
EXTT3=
EXTT4=
EXTT5=
PLAYORDER=</code></pre>
<h4>5 Test you template</h4>
<p>Now we can test how our created at step 2-3 template works with the data. Run qlscribe
in console mode to print label as an image:</p>
<pre> qlscribe --image girlboy.jpg --file girlboy.txt tape.qlx</pre>
<p>If everything fine you should now see file girlboy.jpg
in the current directory. Here is what I got for mine:</p>
<p><img src="/dbimage.php?id=208002"></p>
<h4>6 Print label</h4>
<p>Now if you are happy with the result at step 5 you can print label
directly:</p>
<pre> qlscribe --print --file girlboy.txt tape.qlx</pre>
<p>Enjoy!</p>
<p>Please send comments,&nbsp;suggestions or noticed errors
directly to <a
href="mailto:vyacheslav@kononenko.net">mailto:vyacheslav@kononenko.net</a> or
visit <a
href="http://qlscribe.sourceforge.net">http://qlscribe.sourceforge.net</a> and create
an item in the Bug tracker.</p>
</body>
</html>
+4 -21
View File
@@ -22,7 +22,7 @@ FIND_PACKAGE( Dbus32 REQUIRED )
FIND_PACKAGE( LightScribe REQUIRED )
SET( LSCRIBED_CONF_FILE ${CMAKE_CURRENT_BINARY_DIR}/lightscribe.conf )
SET( LSCRIBED_SERVICE_FILE ${CMAKE_CURRENT_BINARY_DIR}/${QLSCRIBE_DBUS_SERVICE}.printManager.service )
SET( LSCRIBED_SERVICE_FILE ${CMAKE_CURRENT_BINARY_DIR}/${QLSCRIBE_DBUS_SERVICE}.Manager.service )
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/lscribed.h.in ${CMAKE_CURRENT_BINARY_DIR}/lscribed.h @ONLY )
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/lightscribe.conf.in ${LSCRIBED_CONF_FILE} @ONLY )
@@ -34,24 +34,6 @@ IF( CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND CMAKE_COMPILER_IS_GNUCXX )
SET( CMAKE_EXE_LINKER_FLAGS "-m32 -pthread ${CMAKE_EXE_LINKER_FLAGS}" )
ENDIF( CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND CMAKE_COMPILER_IS_GNUCXX )
IF (DBUS_SYSTEM_POLICY_DIR)
INSTALL( FILES ${LSCRIBED_CONF_FILE} DESTINATION ${DBUS_SYSTEM_POLICY_DIR})
ELSE (DBUS_SYSTEM_POLICY_DIR)
MESSAGE(STATUS "It is necessary to specify the directory where the client policy file for Qt Lightscribe is installed as DBUS_SYSTEM_POLICY_DIR.")
MESSAGE(STATUS "Otherwise it will be installed into share/qlscribe")
MESSAGE(STATUS "Normally this is /etc/dbus-1/system.d on a Linux system")
INSTALL( FILES ${LSCRIBED_CONF_FILE} DESTINATION share/qlscribe )
ENDIF (DBUS_SYSTEM_POLICY_DIR)
IF (DBUS_SYSTEM_SERVICE_DIR)
INSTALL( FILES ${LSCRIBED_SERVICE_FILE} DESTINATION ${DBUS_SYSTEM_SERVICE_DIR})
ELSE (DBUS_SYSTEM_SERVICE_DIR)
MESSAGE(STATUS "It is necessary to specify the directory where the client service file for Qt Lightscribe is installed as DBUS_SYSTEM_SERVICE_DIR.")
MESSAGE(STATUS "Otherwise it will be installed into share/qlscribe")
MESSAGE(STATUS "Normally this is /usr/share/dbus-1/services on a Linux system")
INSTALL( FILES ${LSCRIBED_SERVICE_FILE} DESTINATION share/qlscribe )
ENDIF (DBUS_SYSTEM_SERVICE_DIR)
SET( LSCRIBED_SRCS main.cpp dbuscpp.cpp drives.cpp managerhandler.cpp drivehandler.cpp
introspecthandler.cpp )
@@ -60,8 +42,9 @@ ADD_DEFINITIONS( -Wall )
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )
ADD_EXECUTABLE( lscribed ${LSCRIBED_SRCS} )
SET_TARGET_PROPERTIES(lscribed PROPERTIES AUTOMOC OFF AUTOUIC OFF AUTORCC OFF)
TARGET_LINK_LIBRARIES( lscribed ${LSCRIBE_LIBRARIES} ${DBUS_LIBRARIES} pthread )
TARGET_LINK_LIBRARIES( lscribed ${LSCRIBE_LIBRARIES} ${DBUS_LIBRARIES} )
INSTALL( TARGETS lscribed DESTINATION sbin )
INSTALL( FILES ${LSCRIBED_CONF_FILE} ${LSCRIBED_SERVICE_FILE} DESTINATION share/qlscribe )
+1 -2
View File
@@ -21,8 +21,6 @@
#include "dbuscpp.h"
#include "lscribed.h"
#include <ctime>
using namespace DBusCpp;
MessageHandler::~MessageHandler()
@@ -218,3 +216,4 @@ const char *Message::member() const
{
return dbus_message_get_member( m_message );
}
-1
View File
@@ -22,7 +22,6 @@
#define DBUSCPP_H
#include <dbus/dbus.h>
#include <stdint.h>
#include <string>
#include <map>
+2 -2
View File
@@ -46,12 +46,12 @@ static const char *strDriveIntrospect =
</signal>\
<method name=\"preview\">\
<arg type=\"s\" direction=\"out\"/>\
<arg name=\"params\" type=\"(iiiii)\" direction=\"in\"/>\
<arg name=\"params\" type=\"(iiii)\" direction=\"in\"/>\
<arg name=\"image\" type=\"ay\" direction=\"in\"/>\
<arg name=\"previewSize\" type=\"(ii)\" direction=\"in\"/>\
</method>\
<method name=\"print\">\
<arg name=\"params\" type=\"(iiiii)\" direction=\"in\"/>\
<arg name=\"params\" type=\"(iiii)\" direction=\"in\"/>\
<arg name=\"image\" type=\"ay\" direction=\"in\"/>\
</method>\
<method name=\"abort\">\
+40 -55
View File
@@ -24,12 +24,10 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <syslog.h>
#include <lightscribe_cxx.h>
#include <fstream>
#include <iostream>
using namespace LightScribe;
static pthread_key_t drivesKey;
@@ -199,7 +197,6 @@ void Drive::routine()
LS_DrawOptions options;
LS_PrintQuality quality;
LS_MediaOptimizationLevel level;
bool eject= false;
char *image = 0;
int imageSize = 0;
@@ -208,16 +205,15 @@ void Drive::routine()
try {
DBusCpp::MessageConstIter iter = m_message->constIter();
if( iter.signature() != "(iiiii)" )
throw std::string( "invalid argument for params: " ) + iter.signature() + ", (iiiii) expected";
if( iter.signature() != "(iiii)" )
throw std::string( "invalid argument for params: " ) + iter.signature() + ", (iiii) expected";
DBusCpp::MessageConstIter sub = iter.recurse();
mode = LS_LabelMode( sub.getValue<int32_t>() ); sub.next();
options = LS_DrawOptions( sub.getValue<int32_t>() ); sub.next();
quality = LS_PrintQuality( sub.getValue<int32_t>() ); sub.next();
level = LS_MediaOptimizationLevel( sub.getValue<int32_t>() ); sub.next();
eject = sub.getValue<int32_t>();
level = LS_MediaOptimizationLevel( sub.getValue<int32_t>() );
if( !iter.next() )
throw std::string( "image argument missing" );
@@ -244,7 +240,6 @@ void Drive::routine()
std::cout << "exception " << str << std::endl;
DBusCpp::Message reply = m_message->newError( DBUS_ERROR_INVALID_ARGS, str.c_str() );
man.connection().send( reply );
syslog( LOG_ERR, "error in parsing request: %s", str.c_str() );
continue;
}
@@ -278,54 +273,20 @@ void Drive::routine()
function = "LS_DiscPrintMgr_EnumDiscPrinters";
EnumDiscPrinters printers = manager.EnumDiscPrinters();
if( m_index >= int( printers.Count() ) )
if( m_index >= printers.Count() )
throw std::string( "internal error: invalid index" );
DiscPrinter printer = printers.Item( m_index );
{
function = "LS_DiscPrinter_OpenPrintSession";
DiscPrintSession session = printer.OpenPrintSession();
function = "LS_DiscPrinter_OpenPrintSession";
DiscPrintSession session = printer.OpenPrintSession();
DBusCpp::Message reply = m_message->newMethodReturn();
DBusCpp::Message reply = m_message->newMethodReturn();
if( preview ) {
if( preview ) {
syslog( LOG_INFO, "generating preview into temp file %s", tmpFile.c_str() );
function = "LS_DiscPrintSession_PrintPreview";
session.PrintPreview( LS_windows_bitmap,
mode,
options,
quality,
level,
image + 14,
bitmapHeaderSize - 14,
image + bitmapHeaderSize,
imageSize - bitmapHeaderSize,
const_cast< char *>( tmpFile.c_str() ),
LS_windows_bitmap,
size,
true );
reply.append( tmpFile );
man.connection().send( reply );
} else {
syslog( LOG_INFO, "printing label with parameters: mode %d, options %d, quality %d, level %d, eject %d",
mode, options, quality, level, eject );
LS_PrintCallbacks callbacks;
callbacks.AbortLabel = clAbortLabel;
callbacks.ReportPrepareProgress = clReportPrepareProgress;
callbacks.ReportLabelProgress = clReportLabelProgress;
callbacks.ReportFinished = clReportFinished;
callbacks.ReportLabelTimeEstimate = clReportLabelTimeEstimate;
session.SetProgressCallback( &callbacks );
man.connection().send( reply );
function = 0;
session.PrintDisc( LS_windows_bitmap,
function = "LS_DiscPrintSession_PrintPreview";
session.PrintPreview( LS_windows_bitmap,
mode,
options,
quality,
@@ -333,11 +294,37 @@ void Drive::routine()
image + 14,
bitmapHeaderSize - 14,
image + bitmapHeaderSize,
imageSize - bitmapHeaderSize );
}
imageSize - bitmapHeaderSize,
const_cast< char *>( tmpFile.c_str() ),
LS_windows_bitmap,
size,
true );
reply.append( tmpFile );
man.connection().send( reply );
} else {
LS_PrintCallbacks callbacks;
callbacks.AbortLabel = clAbortLabel;
callbacks.ReportPrepareProgress = clReportPrepareProgress;
callbacks.ReportLabelProgress = clReportLabelProgress;
callbacks.ReportFinished = clReportFinished;
callbacks.ReportLabelTimeEstimate = clReportLabelTimeEstimate;
session.SetProgressCallback( &callbacks );
man.connection().send( reply );
function = 0;
session.PrintDisc( LS_windows_bitmap,
mode,
options,
quality,
level,
image + 14,
bitmapHeaderSize - 14,
image + bitmapHeaderSize,
imageSize - bitmapHeaderSize );
}
if( !preview && eject )
printer.OpenDriveTray();
}
catch( LightScribe::LSException &ex ) {
if( function ) {
@@ -345,7 +332,6 @@ void Drive::routine()
sprintf( message, "\"%s()\" failed with code 0x%X", function, ex.GetCode() );
DBusCpp::Message reply = m_message->newError( DBUS_ERROR_FAILED, message );
man.connection().send( reply );
syslog( LOG_ERR, "%s", message );
} else
clReportFinished( ex.GetCode() );
continue;
@@ -353,7 +339,6 @@ void Drive::routine()
catch( const std::string &str ) {
DBusCpp::Message reply = m_message->newError( DBUS_ERROR_FAILED, str.c_str() );
man.connection().send( reply );
syslog( LOG_ERR, "operation failed: \"%s\"", str.c_str() );
continue;
}
}
+1 -1
View File
@@ -45,7 +45,7 @@ DBusHandlerResult IntrospectHandler::processMessage( const Message &msg )
std::string( DBusManagerPath + pathlen, sublen )
+ "\"/>";
} else
introspect += "<node name=\"printManager\"/><node name=\"drives\"/>";
introspect += "<node name=\"Manager\"/><node name=\"drives\"/>";
}
introspect += "</node>";
+5 -2
View File
@@ -7,12 +7,15 @@
<!-- Only root can own the service -->
<policy user="root">
<allow own="@QLSCRIBE_DBUS_MANAGER_SERVICE@"/>
<allow send_interface="@QLSCRIBE_DBUS_MANAGER_SERVICE@"/>
<allow send_interface="@QLSCRIBE_DBUS_DRIVES_SERVICE@"/>
</policy>
<!-- Allow anyone to invoke methods on the interfaces -->
<policy context="default">
<allow send_destination="@QLSCRIBE_DBUS_MANAGER_SERVICE@"/>
<allow send_destination="@QLSCRIBE_DBUS_DRIVES_SERVICE@"/>
<allow send_interface="@QLSCRIBE_DBUS_MANAGER_SERVICE@"/>
<allow send_interface="@QLSCRIBE_DBUS_DRIVES_SERVICE@"/>
<allow receive_interface="@QLSCRIBE_DBUS_DRIVES_SERVICE@"/>
</policy>
</busconfig>
-6
View File
@@ -22,8 +22,6 @@
#include <string.h>
#include <signal.h>
#include <stdlib.h>
#include <syslog.h>
#include <unistd.h>
#include "lscribed.h"
#include "dbuscpp.h"
@@ -54,7 +52,6 @@ void onAlarm( int )
lastActivity = curr;
return;
}
syslog( LOG_INFO, "terminating due to inactivity timeout" );
terminateOnTimeout = true;
}
@@ -68,7 +65,6 @@ void usage()
int main( int argc, char **argv )
{
openlog( "lscribed", LOG_PID, LOG_DAEMON );
for( int i = 1; i < argc; ++i ) {
if( strcmp( argv[i], "--help" ) == 0 ) {
usage();
@@ -106,13 +102,11 @@ int main( int argc, char **argv )
int ret = dbus_bus_request_name( conn.ptr(), DBusServiceName, DBUS_NAME_FLAG_REPLACE_EXISTING, &err );
if( dbus_error_is_set( &err ) ) {
std::cerr << "dbus_bus_request_name error: " << err.message << std::endl;
syslog( LOG_ERR, "dbus_bus_request_name error: %s", err.message );
dbus_error_free( &err );
return 2;
}
if( ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER ) {
std::cerr << "could not get ownership of \"" << DBusServiceName << "\" terminating" << std::endl;
syslog( LOG_ERR, "could not get ownership of \"%s\" terminating", DBusServiceName );
return 3;
}
+1 -1
View File
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=@QLSCRIBE_DBUS_MANAGER_SERVICE@
Exec=@FINAL_INSTALL_PREFIX@/sbin/lscribed
Exec=@CMAKE_INSTALL_PREFIX@/sbin/lscribed
User=root
+1 -1
View File
@@ -2,7 +2,7 @@
Encoding=UTF-8
Name=Qt lightScribe
Exec=qlscribe
Icon=qlscribe
Icon=qlscribe.png
Terminal=false
Type=Application
MimeType=application/x-qlscribe;
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>qlscribe64.png</file>
</qresource>
</RCC>
+38 -10
View File
@@ -18,30 +18,58 @@
#
# $Id$
FIND_PACKAGE(Qt6 6.5 REQUIRED COMPONENTS Core Gui Widgets DBus)
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
qdialogprint.cpp qdialogprogress.cpp qdialogcdproperties.cpp qconsoleprintprogress.cpp
qdialogsettings.cpp previewinjector.cpp )
qdialogprint.cpp qdialogprogress.cpp qdialogcdproperties.cpp qconsoleprintprogress.cpp)
SET( QLSCRIBE_UIS qdialogtext.ui qdialogroundtext.ui qdialogpixmap.ui
qdialogprint.ui qdialogprogress.ui qdialogcdproperties.ui qdialogsettings.ui )
qdialogprint.ui qdialogprogress.ui qdialogcdproperties.ui)
SET( QLSCRIBE_MOC_HDRS mainwindow.h qcdscene.h qdialogpixmap.h qdialogroundtext.h
qdialogtext.h qlightscribe.h qdialogprint.h qdialogprogress.h
qdialogcdproperties.h qconsoleprintprogress.h)
ADD_DEFINITIONS( -Wall )
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/qlscribe.h.in ${CMAKE_CURRENT_BINARY_DIR}/qlscribe.h @ONLY )
SET_SOURCE_FILES_PROPERTIES(lightscribe.xml PROPERTIES INCLUDE qlightscribe.h)
QT6_ADD_DBUS_INTERFACE(QLSCRIBE_DBUS_SRCS lightscribe.xml lightscribe_interface)
INCLUDE( ${QT_USE_FILE} )
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_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
ADD_EXECUTABLE(qlscribe ${QLSCRIBE_SRCS} ${QLSCRIBE_UIS}
${QLSCRIBE_DBUS_SRCS} ../resources/qlscribe.qrc)
ADD_EXECUTABLE( qlscribe ${QLSCRIBE_SRCS} ${QLSCRIBE_MOC_SRCS} ${QLSCRIBE_UI_HDRS} ${QLSCRIBE_DBUS_SRCS} )
TARGET_LINK_LIBRARIES(qlscribe PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::DBus)
TARGET_LINK_LIBRARIES( qlscribe ${QT_LIBRARIES} )
INSTALL( TARGETS qlscribe
DESTINATION bin )
DESTINATION bin
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE SETUID )
+6 -6
View File
@@ -24,7 +24,7 @@
<node>
<interface name="org.lightscribe.printManager">
<method name="getDrives">
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QObject2StringMap"/>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QObject2StringMap"/>
<arg type="a{ss}" direction="out"/>
</method>
</interface>
@@ -44,16 +44,16 @@
<arg name="status" type="i" direction="out"/>
</signal>
<method name="preview">
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="const PrintParameters &amp;"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QSize"/>
<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="const PrintParameters &amp;"/>
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="QSize"/>
<arg type="s" direction="out"/>
<arg name="params" type="(iiiii)" direction="in"/>
<arg name="params" type="(iiii)" direction="in"/>
<arg name="image" type="ay" direction="in"/>
<arg name="previewSize" type="(ii)" direction="in"/>
</method>
<method name="print">
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="const PrintParameters &amp;"/>
<arg name="params" type="(iiiii)" direction="in"/>
<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="const PrintParameters &amp;"/>
<arg name="params" type="(iiii)" direction="in"/>
<arg name="image" type="ay" direction="in"/>
</method>
<method name="abort">
+2 -86
View File
@@ -21,10 +21,6 @@
#include <QApplication>
#include <QMessageBox>
#include <QMap>
#include <QPainter>
#include <QFile>
#include <QTextStream>
#include <QIcon>
#include "mainwindow.h"
#include "qcdscene.h"
#include "qlightscribe.h"
@@ -34,7 +30,7 @@
std::ostream &operator<<( std::ostream &os, const QString &str )
{
return os << str.toUtf8().constData();
return os << str.toAscii().data();
}
void usage()
@@ -45,31 +41,21 @@ void usage()
<< "\tParameters:\n"
<< "\t\t--help | -h - print this message\n"
<< "\t\t--print | -p - switch to print mode\n"
<< "\t\t--image | -i image - print to this image\n"
<< "\t\t--size | -s size - image size, 400 by default\n"
<< "\t\t--drive | -d NUMBER - use this drive, starts from 0, 0 is default\n"
<< "\t\t--replace | -r KEY=VALUE - replace text from KEY to VALUE\n"
<< "\t\t--file | -f filename - read replacements in format KEY=VALUE from file\n"
<< std::endl;
}
int main( int argc, char **argv )
{
QApplication app( argc, argv );
app.setApplicationName( "qlscribe" );
//app.setOrganizationName( "" );
app.setOrganizationDomain( "qlscribe.sourceforge.org" );
app.addLibraryPath( "/usr/lib32/qt4/plugins" );
app.setWindowIcon( QIcon( ":/qlscribe64.png" ) );
bool doPrint = false;
QStringList arguments = app.arguments();
QStringList files;
QCDScene::QString2String replacements;
int driveIndex = 0;
int imageSize = 400;
QString imageName;
QString replacementsFile;
PrintParameters params;
bool labelModeOverriden = false;
@@ -99,29 +85,6 @@ int main( int argc, char **argv )
replacements[ param.left( pos ) ] = param.right( param.size() - pos - 1 );
continue;
}
if( arg == "--file" || arg == "-f" ) {
if( i == arguments.size() - 1 ) {
std::cerr << "Error: arg#" << i
<< " argument expected for \"" << arg << "\" not enough parameters" << std::endl;
return 1;
}
QFile data( arguments[ ++i ] );
if( !data.open( QIODevice::ReadOnly ) ) {
std::cerr << "cannot open file \"" << arguments[ i ] << "\" for reading" << std::endl;
return 2;
}
QTextStream stream( &data );
while( true ) {
QString line = stream.readLine();
if( line.isNull() )
break;
int pos = line.indexOf( '=' );
if( pos == -1 )
continue;
replacements[ line.left( pos ) ] = line.right( line.size() - pos - 1 );
}
continue;
}
if( arg == "--drive" || arg == "-d" ) {
if( i == arguments.size() - 1 ) {
std::cerr << "Error: arg#" << i
@@ -131,30 +94,6 @@ int main( int argc, char **argv )
QString param = arguments[ ++i ];
driveIndex = param.toInt();
}
if( arg == "--image" || arg == "-i" ) {
if( i == arguments.size() - 1 ) {
std::cerr << "Error: arg#" << i
<< " argument expected for \"" << arg << "\" not enough parameters" << std::endl;
return 1;
}
doPrint = true;
imageName = arguments[ ++i ];
continue;
}
if( arg == "--size" || arg == "-s" ) {
if( i == arguments.size() - 1 ) {
std::cerr << "Error: arg#" << i
<< " argument expected for \"" << arg << "\" not enough parameters" << std::endl;
return 1;
}
imageSize = arguments[ ++i ].toInt();
if( imageSize <=0 ) {
std::cerr << "Error: arg#" << i
<< " invalid argument for image size, value > 0 is expected" << std::endl;
return 2;
}
continue;
}
if( arg[0] != '-' )
files.append( arg );
}
@@ -181,32 +120,10 @@ int main( int argc, char **argv )
if( !labelModeOverriden )
params.m_labelMode = scene.labelMode();
if( !imageName.isEmpty() ) {
QImage image( imageSize, imageSize, QImage::Format_RGB32 );
image.fill( 0xFFFFFFFF );
{
QPainter painter( &image );
/*int innerSize = int( imageSize / 120.0 * 24.7 );
int center = imageSize / 2;
painter.setBrush( Qt::lightGray );
painter.drawEllipse( 0, 0, imageSize, imageSize );
painter.setBrush( Qt::white );
painter.drawEllipse( center - innerSize, center - innerSize,
innerSize * 2, innerSize * 2 );*/
scene.render( &painter, image.rect() );
}
std::cerr << "Printing to \"" << imageName << "\" as "
<< imageSize << "x" << imageSize <<" image"
<< std::endl;
image.save( imageName );
return 0;
}
QLightScribe *scribe = QLightScribe::instance();
QList< QLightDrive * > drives = scribe->getDrives();
if( driveIndex >= drives.size() ) {
std::cerr << "Error: drive " << driveIndex
<< " specified, but there are only " << drives.size() << " drives" << std::endl;
std::cerr << "Error: drive " << driveIndex << " specified, but there are only " << drives.size() << " drives" << std::endl;
return 6;
}
std::cout << "Printing label " << files.front() << std::endl;
@@ -215,7 +132,6 @@ int main( int argc, char **argv )
QConsolePrintProgress progress( drive );
drive->print( params, &scene );
rez = app.exec();
} else {
MainWindow mwindow( true );
mwindow.show();
+42 -273
View File
@@ -27,8 +27,6 @@
#include "qdialogprint.h"
#include "qdialogprogress.h"
#include "qdialogcdproperties.h"
#include "qdialogsettings.h"
#include "previewinjector.h"
#include <QMenuBar>
#include <QStatusBar>
@@ -39,12 +37,6 @@
#include <QFileDialog>
#include <QLabel>
#include <QCloseEvent>
#include <QApplication>
#include <QClipboard>
#include <QMimeData>
#include <QSettings>
#include <QImageReader>
#include <QPicture>
MainWindow::MainWindow( bool enablePrint )
@@ -57,7 +49,7 @@ MainWindow::MainWindow( bool enablePrint )
setWindowTitle( tr( "Qt lightScribe", "Main window title \"Qt lightScribe\"" ) );
setCentralWidget( m_mdiArea );
m_menuFile = menuBar()->addMenu( tr( "File", "Menu item \"File\"" ) );
m_menuFile = menuBar()->addMenu( tr( "File", "Menu item \"File\"" ) );
{
QMenu *newSubMenu = m_menuFile->addMenu( tr( "New label", "Menu item \"New lable\"" ) );
@@ -76,82 +68,45 @@ MainWindow::MainWindow( bool enablePrint )
SLOT(map()) );
m_newLabelMapper->setMapping( action, modeTitle );
}
connect(m_newLabelMapper, &QSignalMapper::mappedInt,
this, &MainWindow::onMenuNewLabel);
connect( m_newLabelMapper, SIGNAL(mapped(int)), this, SLOT(onMenuNewLabel(int)) );
m_menuFile->addAction( tr( "Open...", "Menu item \"Open\"" ),
this,
SLOT(onMenuOpen()),
QKeySequence( Qt::CTRL + Qt::Key_O ) );
SLOT(onMenuOpen()) );
m_actionSave = m_menuFile->addAction( tr( "Save", "Menu item \"Save\"" ),
this,
SLOT(onMenuSave()),
QKeySequence( Qt::CTRL + Qt::Key_S ) );
m_menuFile->addAction( tr( "Save", "Menu item \"Save\"" ),
this,
SLOT(onMenuSave()) );
m_actionSaveAs = m_menuFile->addAction( tr( "Save as...", "Menu item \"Save as\"" ),
this,
SLOT(onMenuSaveAs()) );
m_menuFile->addAction( tr( "Save as...", "Menu item \"Save as\"" ),
this,
SLOT(onMenuSaveAs()) );
m_menuFile->addSeparator();
m_actionLabelProperties =
m_menuFile->addAction( tr( "Label properties...", "Menu item \"Label propeties...\"" ),
this,
SLOT(onMenuProperties()) );
m_menuFile->addAction( tr( "Label properties...", "Menu item \"Label propeties...\"" ),
this,
SLOT(onMenuProperties()) );
m_menuFile->addSeparator();
m_actionPrintPreview =
m_menuFile->addAction( tr( "Print preview...", "Menu item \"Print preview\"" ),
this,
SLOT(onMenuPrintPreview()) );
m_menuFile->addAction( tr( "Print preview...", "Menu item \"Print preview\"" ),
this,
SLOT(onMenuPrintPreview()) );
m_actionPrint =
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,
SLOT(close()),
QKeySequence( Qt::CTRL + Qt::Key_Q ) );
SLOT(close()));
m_menuEdit = menuBar()->addMenu( tr( "Edit", "Menu item \"Edit\"" ) );
m_actionUndo = m_menuEdit->addAction( tr( "Undo", "Menu item \"Undo\"" ),
this,
SLOT(onMenuUndo()),
QKeySequence( Qt::CTRL + Qt::Key_Z ) );
m_actionRedo = m_menuEdit->addAction( tr( "Redo", "Menu item \"Redo\"" ),
this,
SLOT(onMenuRedo()),
QKeySequence( Qt::CTRL + Qt::Key_R ) );
m_actionCopy = m_menuEdit->addAction( tr( "Copy", "Menu item \"Copy\"" ),
this,
SLOT(onMenuCopy()),
QKeySequence( Qt::CTRL + Qt::Key_C ) );
m_actionCut = m_menuEdit->addAction( tr( "Cut", "Menu item \"Cut\"" ),
this,
SLOT(onMenuCut()),
QKeySequence( Qt::CTRL + Qt::Key_X ) );
m_actionPaste = m_menuEdit->addAction( tr( "Paste", "Menu item \"Paste\"" ),
this,
SLOT(onMenuPaste()),
QKeySequence( Qt::CTRL + Qt::Key_V ) );
m_menuInsert = m_menuEdit->addMenu( tr( "Insert", "Menu item \"Insert\"" ) );
m_menuEdit->addSeparator();
m_actionSettings = m_menuEdit->addAction( tr( "Settings...", "Menu item \"Settings\"" ),
this,
SLOT(onMenuSettings()) );
m_menuInsert = menuBar()->addMenu( tr( "Insert", "Menu item \"Insert\"" ) );
m_menuHelp = menuBar()->addMenu( tr( "Help", "Menu item \"Help\"" ) );
@@ -171,22 +126,7 @@ MainWindow::MainWindow( bool enablePrint )
m_insertMapper->setMapping( action, i->first );
connect( action, SIGNAL(triggered()), m_insertMapper, SLOT(map()) );
}
connect(m_insertMapper, &QSignalMapper::mappedInt,
this, &MainWindow::onMenuInsert);
connect( QApplication::clipboard(), SIGNAL(changed(QClipboard::Mode)),
this, SLOT(updateMenu()) );
connect( m_mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),
this, SLOT(updateMenu()) );
updateMenu();
QSettings settings;
settings.beginGroup( "MainWindow");
resize( settings.value( "size", QSize(800, 400) ).toSize() );
move( settings.value( "pos", QPoint(200, 200) ).toPoint() );
settings.endGroup();
connect( m_insertMapper, SIGNAL(mapped(int)), this, SLOT(onMenuInsert(int)) );
}
MainWindow::~MainWindow()
@@ -204,8 +144,6 @@ void MainWindow::open( const QStringList &files )
delete newView;
continue;
}
connect( scene, SIGNAL(selectionChanged()), this, SLOT(updateMenu()) );
connect( scene, SIGNAL(changed()), this, SLOT(updateMenu()) );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( newView );
subWindow->show();
@@ -271,13 +209,6 @@ bool MainWindow::saveScene( QCDScene *scene )
return;
}
}
QSettings settings;
settings.beginGroup( "MainWindow" );
settings.setValue( "size", size());
settings.setValue( "pos", pos());
settings.endGroup();
event->accept();
}
@@ -285,11 +216,9 @@ void MainWindow::onMenuNewLabel( int mode )
{
QCDView *newView = new QCDView;
QCDScene *scene = new QCDScene( newView );
scene->start( LabelMode( mode ) );
scene->setLabelMode( LabelMode( mode ) );
newView->setScene( scene );
scene->setName();
connect( scene, SIGNAL(selectionChanged()), this, SLOT(updateMenu()) );
connect( scene, SIGNAL(changed()), this, SLOT(updateMenu()) );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( newView );
subWindow->show();
@@ -328,29 +257,19 @@ void MainWindow::onMenuInsert( int id )
return;
}
cdscene->addItem( item, true );
item->setFlag( QGraphicsItem::ItemIsMovable, true );
item->setFlag( QGraphicsItem::ItemIsSelectable, true );
cdscene->addItem( item );
cdscene->setChanged();
}
void MainWindow::onMenuOpen()
{
QString filter( tr("qlscribe document (*.qlx);;Images ( ") );
QList<QByteArray> list = QImageReader::supportedImageFormats();
foreach( QByteArray arr, list ) {
filter += QString( "*." ) + arr.data() + " ";
}
filter += tr( ");;All Files (*)" );
QFileDialog fd( this, "Open:", QString(), filter );
bool injectPreview = QSettings().value( cfgInjectPreview, true ).toBool();
PreviewInjector pj( injectPreview ? &fd : 0 );
fd.setFileMode( QFileDialog::ExistingFile );
if( fd.exec() != QDialog::Accepted )
return;
QString fileName = fd.selectedFiles().value(0);
QString fileName = QFileDialog::getOpenFileName( this,
tr( "Open:" ),
QString(),
tr("qlscribe document (*.qlx)") );
if( fileName.isNull() )
return;
@@ -362,8 +281,6 @@ void MainWindow::onMenuOpen()
delete newView;
return;
}
connect( scene, SIGNAL(selectionChanged()), this, SLOT(updateMenu()) );
connect( scene, SIGNAL(changed()), this, SLOT(updateMenu()) );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( newView );
subWindow->show();
@@ -390,24 +307,6 @@ void MainWindow::onMenuProperties()
QDialogCDProperties::exec( this, scene );
}
namespace {
const int bigImageSize = 1600;
}
inline
void drawCircle( QPainter &painter, double radi )
{
const int half = bigImageSize / 2;
painter.drawEllipse( QRectF( half - radi, half - radi, radi * 2, radi * 2 ) );
}
inline
void drawCircle( QPainterPath &path, double radi )
{
const int half = bigImageSize / 2;
path.addEllipse( QRectF( half - radi, half - radi, radi * 2, radi * 2 ) );
}
void MainWindow::onMenuPrintPreview()
{
QCDScene *cdscene = getScene( m_mdiArea );
@@ -416,81 +315,21 @@ void MainWindow::onMenuPrintPreview()
PrintParameters params;
params.m_labelMode = cdscene->labelMode();
QPair< bool, QLightDrive * > bd = QDialogPrint::exec( this, params, true );
if( !bd.first )
QLightDrive *drive = QDialogPrint::exec( this, params );
if( !drive )
return;
if( !bd.second ) {
// software "rendering"
QPixmap image( bigImageSize, bigImageSize );
image.fill( 0xFFFFFFFF );
try {
QPixmap pixmap = drive->preview( params, cdscene, QSize( 400, 400 ) );
cdscene->clearSelection();
{
QPainter painter( &image );
QColor circleColor( 0xd8, 0xd8, 0xd8 );
painter.setPen( circleColor );
painter.setBrush( circleColor );
drawCircle( painter, bigImageSize / 2 );
cdscene->render( &painter, image.rect() );
QPainterPath p1;
p1.addRect( image.rect() );
{
QPainterPath p2;
drawCircle( p2, bigImageSize / 2 );
painter.setClipPath( p1.subtracted( p2 ) );
painter.fillRect( image.rect(), Qt::white );
painter.setClipPath( p1 );
}
painter.setBrush( circleColor );
if( params.m_labelMode == modeTitle ) {
// 3.22
QPainterPath p2;
drawCircle( p2, bigImageSize / 3.20 );
painter.setClipPath( p1.subtracted( p2 ) );
drawCircle( painter, bigImageSize / 2 );
// 3.74
painter.setClipPath( p1 );
drawCircle( painter, bigImageSize / 3.74 );
} else
if( params.m_labelMode == modeContent ) {
// 3.22
QPainterPath p2;
drawCircle( p2, bigImageSize / 3.20 );
painter.setClipPath( p1.subtracted( p2 ) );
drawCircle( painter, bigImageSize / 2 );
// 4.69
painter.setClipPath( p1 );
drawCircle( painter, bigImageSize / 4.69 );
}
painter.setBrush( Qt::white );
drawCircle( painter, bigImageSize / 4.93 );
}
QLabel *label = new QLabel;
label->setPixmap( image.scaled( QSize( 400, 400 ) ) );
label->setPixmap( pixmap );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( label );
subWindow->setWindowTitle( "Software preview: " + cdscene->name() );
subWindow->setWindowTitle( "Preview: " + cdscene->name() );
subWindow->show();
} else {
try {
QPixmap pixmap = bd.second->preview( params, cdscene, QSize( 400, 400 ) );
QLabel *label = new QLabel;
label->setPixmap( pixmap );
QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( label );
subWindow->setWindowTitle( "Preview: " + cdscene->name() );
subWindow->show();
}
catch( const QString &err ) {
QMessageBox::critical( this, tr( "Error on print preview" ), err );
}
}
catch( const QString &err ) {
QMessageBox::critical( this, tr( "Error on print preview" ), err );
}
}
@@ -498,8 +337,8 @@ void MainWindow::onMenuPrint()
{
QCDScene *cdscene = getScene( m_mdiArea );
if( !cdscene )
return;
return;
try {
QDialogProgress::exec( this, cdscene );
}
@@ -508,47 +347,12 @@ void MainWindow::onMenuPrint()
}
}
void MainWindow::onMenuUndo()
{
QCDScene *scene = getScene( m_mdiArea );
if( scene )
scene->undo();
}
void MainWindow::onMenuRedo()
{
QCDScene *scene = getScene( m_mdiArea );
if( scene )
scene->redo();
}
void MainWindow::onMenuCopy()
{
QCDScene *scene = getScene( m_mdiArea );
if( scene )
scene->putItemToClipboard( false );
}
void MainWindow::onMenuCut()
{
QCDScene *scene = getScene( m_mdiArea );
if( scene )
scene->putItemToClipboard( true );
}
void MainWindow::onMenuPaste()
{
QCDScene *scene = getScene( m_mdiArea );
if( scene )
scene->getItemFromClipboard();
}
void MainWindow::onMenuAbout()
{
QMessageBox::about( this,
tr( "About" ),
tr( "<h3>qlscribe - Qt lisghtScribe</h3>"
"<p>release 0.19</p>"
"<p>release 0.8 $Revision$</p>"
"<p>visit project at home page "
"<a href=\"http://qlscribe.sourceforge.net/\">qlscribe.sourceforge.net</a></p>" ) );
}
@@ -557,38 +361,3 @@ void MainWindow::onMenuQtAbout()
{
QMessageBox::aboutQt( this );
}
void MainWindow::onMenuSettings()
{
QDialogSettings::exec( this );
}
void MainWindow::updateMenu()
{
QCDScene *scene = getScene( m_mdiArea );
m_actionSave->setEnabled( scene );
m_actionSaveAs->setEnabled( scene );
m_actionLabelProperties->setEnabled( scene );
m_actionPrint->setEnabled( scene );
m_actionPrintPreview->setEnabled( scene );
m_menuInsert->setEnabled( scene );
if( !scene ) {
m_actionUndo->setEnabled( false );
m_actionRedo->setEnabled( false );
m_actionCopy->setEnabled( false );
m_actionCut->setEnabled( false );
m_actionPaste->setEnabled( false );
} else {
m_actionUndo->setEnabled( scene->canUndo() );
m_actionRedo->setEnabled( scene->canRedo() );
const QMimeData *mdata = QApplication::clipboard()->mimeData();
m_actionPaste->setEnabled( mdata && mdata->hasFormat( itemMimeType ) );
bool selected = scene->selectedItems().count();
m_actionCopy->setEnabled( selected );
m_actionCut->setEnabled( selected );
}
}
+1 -22
View File
@@ -21,7 +21,7 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui/QMainWindow>
class QMdiArea;
class QSignalMapper;
@@ -48,40 +48,19 @@ private slots:
void onMenuProperties();
void onMenuPrintPreview();
void onMenuPrint();
void onMenuUndo();
void onMenuRedo();
void onMenuCopy();
void onMenuCut();
void onMenuPaste();
void onMenuSettings();
void onMenuInsert( int id );
void onMenuAbout();
void onMenuQtAbout();
void updateMenu();
private:
bool saveSceneAs( QCDScene *scene );
QMdiArea *m_mdiArea;
QMenu *m_menuFile;
QMenu *m_menuEdit;
QMenu *m_menuInsert;
QMenu *m_menuHelp;
QAction *m_actionSave;
QAction *m_actionSaveAs;
QAction *m_actionLabelProperties;
QAction *m_actionPrint;
QAction *m_actionPrintPreview;
QAction *m_actionUndo;
QAction *m_actionRedo;
QAction *m_actionCopy;
QAction *m_actionCut;
QAction *m_actionPaste;
QAction *m_actionSettings;
QSignalMapper *m_insertMapper;
QSignalMapper *m_newLabelMapper;
};
-60
View File
@@ -1,60 +0,0 @@
#include "previewinjector.h"
#include <QFileDialog>
#include <QLabel>
#include <QSplitter>
#include <QImageReader>
PreviewInjector::PreviewInjector( QFileDialog * dl ) :
m_label( 0 ),
m_size( 160, 120 )
{
if( !dl )
return;
QSplitter *sp = dl->findChild<QSplitter *>("splitter");
if( !sp )
return;
m_label = new QLabel;
m_label->resize( m_size );
sp->addWidget( m_label );
connect( dl, SIGNAL(currentChanged(QString)),SLOT(onSelectionChanged(QString)));
}
PreviewInjector::~PreviewInjector()
{
delete m_label;
}
void PreviewInjector::onSelectionChanged(QString file)
{
QImageReader reader( file );
if( !reader.canRead() ) {
m_label->setPixmap( QPixmap() );
return;
}
m_label->resize( m_size );
QSize toSize = m_size;
QSize sz = reader.size();
if( !sz.isNull() ) {
double r1 = m_label->size().width() / double( sz.width() );
double r2 = m_label->size().height() / double( sz.height() );
double ratio = std::max( r1, r2 );
if( ratio < 1.0 ) {
toSize.setWidth( sz.width() * ratio );
toSize.setHeight( sz.height() * ratio );
}
}
reader.setScaledSize( toSize );
QImage img = reader.read();
if( img.isNull() ) {
m_label->setPixmap( QPixmap() );
return;
}
m_label->setPixmap( QPixmap::fromImage( img ) );
}
-27
View File
@@ -1,27 +0,0 @@
#ifndef PREVIEWINJECTOR_HPP
#define PREVIEWINJECTOR_HPP
#include <QObject>
#include <QSize>
class QFileDialog;
class QLabel;
class PreviewInjector : public QObject {
Q_OBJECT
public:
PreviewInjector( QFileDialog * dl );
~PreviewInjector();
bool injected() const { return m_label; }
private slots:
void onSelectionChanged(QString );
private:
QLabel *m_label;
QSize m_size;
};
#endif // PREVIEWINJECTOR_HPP
+44 -258
View File
@@ -20,7 +20,6 @@
#include "qcdscene.h"
#include "qshapefactory.h"
#include "qlightpixmapitem.h"
#include <QMenu>
#include <QMessageBox>
@@ -31,22 +30,16 @@
#include <QXmlStreamWriter>
#include <QMessageBox>
#include <QGraphicsView>
#include <QApplication>
#include <QClipboard>
#include <QMimeData>
#include <QFileInfo>
#include <QRegExp>
QCDScene::QCDScene( QObject * parent )
: QGraphicsScene( parent ),
m_index( 0 ),
m_saved( true ),
m_itemMoved( false ),
m_labelMode( modeFull ),
m_cdColor( Qt::white ),
m_undoPosition( m_undoBuffer.end() )
m_cdColor( Qt::white )
{
setSceneRect( -60.0, -60.0, 60.0 * 2, 60.0 * 2 );
}
//#include <iostream>
@@ -67,88 +60,35 @@ void QCDScene::replace( const QString2String &strings )
f->second->replace( item, st.key(), st.value() );
}
}
foreach(QGraphicsItem *item, list ) {
QShapeFactory::iterator f = sfactory.find( item->type() );
if( f != sfactory.end() )
f->second->replace( item, "", "" ); // to clean placeholders
}
}
void QCDScene::start( LabelMode mode )
{
setLabelMode( mode );
pushUndo();
}
bool QCDScene::load( const QString &fileName, QString *errMessage )
{
if (fileName.endsWith(".qlx", Qt::CaseInsensitive)) {
QFile file( fileName );
if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
if( errMessage )
*errMessage = "cannot open file for reading";
else
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 ) {
if( errMessage )
*errMessage = err;
else
QMessageBox::critical( 0, tr( "Error" ), tr( "Cannot read file " ) + fileName + "\n" + err );
return false;
}
m_fileName = fileName;
m_saved = true;
setName();
pushUndo();
QList<QGraphicsItem *> list = items();
bool oldFormat = true;
foreach(QGraphicsItem *item, list ) {
if( item->zValue() != 0.0 ) {
oldFormat = false;
break;
}
}
if( oldFormat ) {
double z = 1.0;
foreach(QGraphicsItem *item, list ) {
item->setZValue( z );
z += 0.1;
}
}
return true;
}
QShapeFactory &sfactory = QShapeFactory::instance();
QLightPixmapItem *item =
static_cast<QLightPixmapItem *>(sfactory.create( QShapeControllerPixmap::Type ) );
addItem( item, true );
if( item->loadImage( fileName ) ) {
QSize size = item->pixmap().size();
item->setOffset( -QPointF( size.height(), size.width() ) / 2.0 );
item->setTransform( QTransform().scale( size.width() ? 120.0 / size.width() : 1.0,
size.height() ? 120.0 / size.height() : 1.0 ) );
setName();
pushUndo();
return true;
} else {
QFile file( fileName );
if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
if( errMessage )
*errMessage = "cannot load image";
*errMessage = "cannot open file for reading";
else
QMessageBox::critical( 0, tr( "Error" ), tr( "Cannot load image " ) +
fileName + "\n" );
QMessageBox::critical( 0, tr( "Error" ), tr( "Cannot open file for reading\n" ) + fileName );
return false;
}
return false;
QXmlStreamReader reader( &file );
try {
read( reader );
}
catch( const QString &err ) {
if( errMessage )
*errMessage = err;
else
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 );
@@ -187,38 +127,18 @@ void QCDScene::setName()
}
m_name = "Unnamed_" + QString::number( m_index );
} else {
m_name = QFileInfo(m_fileName).completeBaseName();
QRegExp rx( "(.*/)?(.*)\\.qlx" );
rx.indexIn( m_fileName );
m_name = rx.cap( 2 );
}
updateTitles();
}
void QCDScene::setChanged( bool undo )
void QCDScene::setChanged()
{
m_saved = false;
updateTitles();
if( undo && m_undoPosition != m_undoBuffer.end() )
pushUndo();
emit changed();
}
void QCDScene::pushUndo()
{
if( canRedo() ) {
UndoBuffer::iterator pos = m_undoBuffer.begin() + 1 + ( m_undoPosition - m_undoBuffer.begin() );
m_undoBuffer.erase( pos, m_undoBuffer.end() );
}
QString data;
QXmlStreamWriter writer( &data );
write( writer );
m_undoBuffer.push_back( data );
if( m_undoBuffer.size() > 20 )
m_undoBuffer.pop_front();
m_undoPosition = m_undoBuffer.end() - 1;
}
void QCDScene::updateTitles() const
@@ -275,48 +195,12 @@ void QCDScene::write( QXmlStreamWriter &writer )
writer.writeEndDocument();
}
void QCDScene::addItem( QGraphicsItem *item, bool top )
{
if( top ) {
double topZ = 1.0;
QList<QGraphicsItem *> list = items();
foreach(QGraphicsItem *item, list ) {
if( item->zValue() >= topZ )
topZ = item->zValue() + 0.1;
}
item->setZValue( topZ );
}
QGraphicsScene::addItem( item );
}
bool QCDScene::readItem( QXmlStreamReader &reader, bool top )
{
QShapeFactory &sfactory = QShapeFactory::instance();
QString type = reader.attributes().value( "type" ).toString();
QShapeFactory::iterator f = sfactory.find( type );
if( f == sfactory.end() ) {
QMessageBox::warning( 0,
"Warning",
QString( "QCDScene: unknown item type \"" )
+ type + "\"" );
return false;
}
QGraphicsItem *item = f->second->read( reader );
if( item ) {
item->setFlag( QGraphicsItem::ItemIsMovable, true );
item->setFlag( QGraphicsItem::ItemIsSelectable, true );
addItem( item, top );
return true;
}
return false;
}
void QCDScene::read( QXmlStreamReader &reader )
{
bool gotScene = false;
QShapeFactory &sfactory = QShapeFactory::instance();
while( !reader.atEnd() ) {
QXmlStreamReader::TokenType ttype = reader.readNext();
if( ttype != QXmlStreamReader::StartElement )
@@ -336,96 +220,41 @@ void QCDScene::read( QXmlStreamReader &reader )
}
if( elementName == "item" ) {
readItem( reader, false );
QString type = reader.attributes().value( "type" ).toString();
QShapeFactory::iterator f = sfactory.find( type );
if( f == sfactory.end() ) {
QMessageBox::warning( 0,
"Warning",
QString( "QCDScene: unknown item type \"" )
+ type + "\"" );
continue;
}
QGraphicsItem *item = f->second->read( reader );
if( item ) {
item->setFlag( QGraphicsItem::ItemIsMovable, true );
item->setFlag( QGraphicsItem::ItemIsSelectable, true );
addItem( item );
}
} else
throw QString( "QCDScene: unknown element \"" ) + elementName + "\"";
}
}
void QCDScene::putItemToClipboard( bool move )
{
QList<QGraphicsItem *> list = selectedItems();
if( list.empty() )
return;
QGraphicsItem *item = list.front();
QShapeFactory &sfactory = QShapeFactory::instance();
QShapeFactory::iterator f = sfactory.find( item->type() );
if( f == sfactory.end() ) {
QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot find controller for type %n", 0, item->type() ) );
return;
}
QByteArray array;
QXmlStreamWriter writer( &array );
f->second->write( writer, item );
QMimeData *mdata = new QMimeData;
mdata->setData( itemMimeType, array );
mdata->setText( array.data() );
QApplication::clipboard()->setMimeData( mdata );
if( move ) {
removeItem( item );
delete item;
setChanged();
}
}
void QCDScene::getItemFromClipboard()
{
const QMimeData *mdata = QApplication::clipboard()->mimeData();
if( !mdata )
return;
if( !mdata->hasFormat( itemMimeType ) )
return;
QByteArray array = mdata->data( itemMimeType );
QXmlStreamReader reader( array );
while( !reader.atEnd() ) {
QXmlStreamReader::TokenType ttype = reader.readNext();
if( ttype != QXmlStreamReader::StartElement )
continue;
QString elementName = reader.name().toString();
if( elementName == "item" ) {
if( readItem( reader, true ) )
setChanged();
}
}
}
void QCDScene::contextMenuEvent( QGraphicsSceneContextMenuEvent *mouseEvent )
{
QGraphicsItem *item = itemAt(mouseEvent->scenePos(), QTransform());
QGraphicsItem *item = itemAt( mouseEvent->scenePos() );
if( !item )
return;
item->setSelected( true );
QMenu menu;
menu.addAction( tr( "edit..." ), this, SLOT( onMenuEdit() ) );
menu.addAction( tr( "copy" ), this, SLOT( onMenuCopy() ) );
menu.addAction( tr( "cut" ), this, SLOT( onMenuCut() ) );
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() );
}
void QCDScene::mouseReleaseEvent ( QGraphicsSceneMouseEvent *mouseEvent )
{
if( m_itemMoved ) {
setChanged();
m_itemMoved = false;
}
QGraphicsScene::mouseReleaseEvent( mouseEvent );
}
void QCDScene::onMenuEdit()
{
QList<QGraphicsItem *> list = selectedItems();
@@ -435,16 +264,6 @@ void QCDScene::onMenuEdit()
QShapeFactory::instance().edit( item, 0 );
}
void QCDScene::onMenuCopy()
{
putItemToClipboard( false );
}
void QCDScene::onMenuCut()
{
putItemToClipboard( true );
}
void QCDScene::onMenuToFront()
{
sendItemTo( true );
@@ -483,37 +302,4 @@ void QCDScene::sendItemTo( bool front )
zValue = item->zValue() - 0.1;
}
selectedItem->setZValue( zValue );
setChanged();
}
bool QCDScene::canUndo() const
{
return m_undoPosition - m_undoBuffer.begin() > 0;
}
bool QCDScene::canRedo() const
{
return m_undoBuffer.end() - m_undoPosition > 1;
}
void QCDScene::unredo( bool undo )
{
if( undo ) {
if( !canUndo() )
return;
--m_undoPosition;
} else {
if( !canRedo() )
return;
++m_undoPosition;
}
try {
clear();
QXmlStreamReader reader( *m_undoPosition );
read( reader );
}
catch(...) {
}
setChanged( false );
}
+7 -31
View File
@@ -44,63 +44,39 @@ public:
bool isSaved() const { return m_saved; }
bool isUnnamed() const { return m_fileName.isEmpty(); }
bool canUndo() const;
bool canRedo() const;
void itemMoved() { m_itemMoved = true; }
void setChanged( bool undo = true );
void setChanged();
void setName();
void start( LabelMode mode );
bool load( const QString &fileName, QString *errMessage = 0 );
void replace( const QString2String &strings );
bool save();
bool saveAs( const QString &fileName );
void undo() { unredo( true ); }
void redo() { unredo( false ); }
void putItemToClipboard( bool move );
void getItemFromClipboard();
void addItem( QGraphicsItem *item, bool top );
void updateTitles() const;
void redrawViews() const;
QString name() const { return m_name; }
signals:
void changed();
protected:
virtual void contextMenuEvent( QGraphicsSceneContextMenuEvent *contextMenuEvent );
virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent *mouseEvent );
private slots:
void onMenuEdit();
void onMenuCopy();
void onMenuCut();
void onMenuToFront();
void onMenuToBack();
void onMenuDelete();
private:
void write( QXmlStreamWriter &writer );
bool readItem( QXmlStreamReader &reader, bool top );
void read( QXmlStreamReader &reader );
void sendItemTo( bool front );
void pushUndo();
void unredo( bool undo );
private:
typedef QList<QString> UndoBuffer;
QString m_name;
QString m_fileName;
int m_index;
bool m_saved;
bool m_itemMoved;
LabelMode m_labelMode;
QColor m_cdColor;
UndoBuffer m_undoBuffer;
UndoBuffer::const_iterator m_undoPosition;
QString m_name;
QString m_fileName;
int m_index;
bool m_saved;
LabelMode m_labelMode;
QColor m_cdColor;
};
#endif //QCDSCENE_H
+3 -6
View File
@@ -147,22 +147,19 @@ void QCDView::drawForeground ( QPainter * painter, const QRectF & rect )
m_labelMode = cdscene->labelMode();
*m_mask = QPixmap( frameSize() );
QRectF rectf( QPointF( -frameSize().width(), -frameSize().height() ), frameSize() * 2 );
{
QPainter paint( m_mask );
paint.setWorldTransform( painter->transform() );
drawCD( &paint, rectf, false );
drawCD( &paint, rect, false );
}
{
QPixmap alpha( frameSize() );
QPainter paint( &alpha );
paint.setWorldTransform( painter->transform() );
drawCD( &paint, rectf, true );
QImage maskImage = m_mask->toImage().convertToFormat(QImage::Format_ARGB32);
maskImage.setAlphaChannel(alpha.toImage());
*m_mask = QPixmap::fromImage(maskImage);
drawCD( &paint, rect, true );
m_mask->setAlphaChannel( alpha );
}
}
+1 -1
View File
@@ -22,7 +22,7 @@
#ifndef QDIALOGCDPROPERTIES_H
#define QDIALOGCDPROPERTIES_H
#include <QDialog>
#include <QtGui/QDialog>
namespace Ui {
class QDialogCDProperties;
+10 -23
View File
@@ -20,14 +20,12 @@
#include "qdialogpixmap.h"
#include "ui_qdialogpixmap.h"
#include "qlightpixmapitem.h"
#include "qcdscene.h"
#include "previewinjector.h"
#include <QGraphicsPixmapItem>
#include <QImageReader>
#include <QFileDialog>
#include <QMessageBox>
#include <QSettings>
QDialogPixmap::QDialogPixmap(QWidget *parent) :
QItemDialog( parent ),
@@ -56,25 +54,25 @@ void QDialogPixmap::changeEvent(QEvent *e)
bool QDialogPixmap::exec( QGraphicsItem *graphicsItem )
{
QLightPixmapItem *item = dynamic_cast< QLightPixmapItem * >( graphicsItem );
QGraphicsPixmapItem *item = dynamic_cast< QGraphicsPixmapItem * >( graphicsItem );
if( !item )
return false;
QCDScene scene;
m_ui->cdView->setScene( &scene );
m_item = new QLightPixmapItem;
m_item = new QGraphicsPixmapItem;
m_item->setPos( item->pos() );
m_item->setOffset( item->offset() );
m_item->setPixmap( item->pixmap() );
m_item->imageName( item->imageName() );
m_item->setData( 0, item->data( 0 ) );
m_item->setTransform( item->transform() );
scene.addItem( m_item, true );
scene.addItem( m_item );
m_ui->spinX->setValue( m_item->pos().x() );
m_ui->spinY->setValue( m_item->pos().y() );
m_ui->lineEdit->setText( m_item->imageName() );
m_ui->lineEdit->setText( m_item->data( 0 ).toString() );
if( !m_item->pixmap().isNull() ) {
QSize size = m_item->pixmap().size();
QPointF scale = m_item->transform().map( QPointF( size.width(), size.height() ) );
@@ -107,7 +105,7 @@ bool QDialogPixmap::exec( QGraphicsItem *graphicsItem )
item->setPos( m_item->pos() );
item->setOffset( m_item->offset() );
item->setPixmap( m_item->pixmap() );
item->imageName( m_item->imageName() );
item->setData( 0, m_item->data( 0 ) );
item->setTransform( m_item->transform() );
return true;
@@ -120,19 +118,8 @@ void QDialogPixmap::onLoadImage()
foreach( QByteArray arr, list ) {
filter += QString( "*." ) + arr.data() + " ";
}
filter += tr( ");;All Files (*.*)" );
QFileDialog fd( this, "Load image:", QString(), filter );
//fd.setOption( QFileDialog::DontUseNativeDialog ); // for testing
bool injectPreview = QSettings().value( cfgInjectPreview, true ).toBool();
PreviewInjector pj( injectPreview ? &fd : 0 );
fd.setFileMode( QFileDialog::ExistingFile );
if( fd.exec() != QDialog::Accepted )
return;
QString fileName = fd.selectedFiles().value(0);
filter += tr( ")\nAll Files (*)" );
QString fileName = QFileDialog::getOpenFileName( this, "Load image:", QString(), filter );
if( fileName.isNull() )
return;
@@ -144,7 +131,7 @@ void QDialogPixmap::onLoadImage()
return;
}
m_item->setPixmap( pixmap );
m_item->imageName( fileName );
m_item->setData( 0, fileName );
m_item->setOffset( -QPointF( pixmap.size().width(), pixmap.size().height() ) / 2.0 );
m_ui->lineEdit->setText( fileName );
+3 -3
View File
@@ -27,7 +27,7 @@ namespace Ui {
class QDialogPixmap;
}
class QLightPixmapItem;
class QGraphicsPixmapItem;
class QDialogPixmap : public QItemDialog {
Q_OBJECT
@@ -48,8 +48,8 @@ private slots:
void sizeChanged();
private:
Ui::QDialogPixmap *m_ui;
QLightPixmapItem *m_item;
Ui::QDialogPixmap *m_ui;
QGraphicsPixmapItem *m_item;
};
+5 -14
View File
@@ -46,14 +46,12 @@ void QDialogPrint::changeEvent(QEvent *e)
}
}
QPair<bool, QLightDrive *> QDialogPrint::exec( QWidget *parent, PrintParameters &params, bool preview )
QLightDrive *QDialogPrint::exec( QWidget *parent, PrintParameters &params )
{
QPair<bool, QLightDrive *> rez( false, 0 );
QList<QLightDrive *> drives = QLightScribe::instance()->getDrives();
if( !preview && drives.isEmpty() ) {
if( drives.isEmpty() ) {
QMessageBox::critical( parent, tr( "Error" ), tr( "Cannot find any lightScribe drive" ) );
return rez;
return 0;
}
QDialogPrint dialog( parent );
switch( params.m_labelMode ) {
@@ -66,11 +64,8 @@ QPair<bool, QLightDrive *> QDialogPrint::exec( QWidget *parent, PrintParameters
foreach( QLightDrive *drv, drives ) {
dialog.m_ui->comboDrive->insertItem( index++, drv->displayName() );
}
if( preview )
dialog.m_ui->comboDrive->insertItem( index++, tr( "Software renderer" ) );
if( dialog.QDialog::exec() == Rejected )
return rez;
return 0;
params = PrintParameters(); // reset to default
@@ -92,9 +87,5 @@ QPair<bool, QLightDrive *> QDialogPrint::exec( QWidget *parent, PrintParameters
if( dialog.m_ui->radioMediaGeneric->isChecked() )
params.m_mediaOptimizationLevel = mediaGeneric;
rez.first = true;
if( dialog.m_ui->comboDrive->currentIndex() < drives.size() )
rez.second = drives.at( dialog.m_ui->comboDrive->currentIndex() );
return rez;
return drives.at( dialog.m_ui->comboDrive->currentIndex() );
}
+2 -2
View File
@@ -21,7 +21,7 @@
#ifndef QDIALOGPRINT_H
#define QDIALOGPRINT_H
#include <QDialog>
#include <QtGui/QDialog>
#include "qlightscribe.h"
@@ -33,7 +33,7 @@ class QDialogPrint : public QDialog {
Q_OBJECT
Q_DISABLE_COPY(QDialogPrint)
public:
static QPair<bool, QLightDrive *> exec( QWidget *parent, PrintParameters &params, bool preview );
static QLightDrive *exec( QWidget *parent, PrintParameters &params );
protected:
explicit QDialogPrint(QWidget *parent = 0);
+2 -6
View File
@@ -27,15 +27,13 @@
#include <QMessageBox>
#include <QAbstractButton>
#include <QTime>
#include <QElapsedTimer>
#include <QTimer>
#include <QSettings>
QDialogProgress::QDialogProgress( QWidget *parent, QLightDrive *drive )
: QDialog(parent),
m_ui(new Ui::QDialogProgress),
m_drive( drive ),
m_start(new QElapsedTimer),
m_start( new QTime ),
m_timer( new QTimer( this ) )
{
m_ui->setupUi(this);
@@ -66,12 +64,10 @@ bool QDialogProgress::exec( QWidget *parent, QCDScene *scene )
{
PrintParameters params;
params.m_labelMode = scene->labelMode();
QLightDrive *drive = QDialogPrint::exec( parent, params, false ).second;
QLightDrive *drive = QDialogPrint::exec( parent, params );
if( !drive )
return false;
params.m_ejectAfterComplete = QSettings().value( cfgEjectAfterFinish, false ).toBool();
QDialogProgress dialog( parent, drive );
dialog.setWindowTitle( tr( "Printing: " ) + scene->name() );
+3 -3
View File
@@ -21,7 +21,7 @@
#ifndef QDIALOGPROGRESS_H
#define QDIALOGPROGRESS_H
#include <QDialog>
#include <QtGui/QDialog>
namespace Ui {
class QDialogProgress;
@@ -29,7 +29,7 @@ namespace Ui {
class QCDScene;
class QAbstractButton;
class QElapsedTimer;
class QTime;
class QTimer;
class QLightDrive;
@@ -56,7 +56,7 @@ private:
Ui::QDialogProgress *m_ui;
QLightDrive *m_drive;
QElapsedTimer *m_start;
QTime *m_start;
QTimer *m_timer;
};
+1 -3
View File
@@ -22,7 +22,6 @@
#include "ui_qdialogroundtext.h"
#include "qlightroundtextitem.h"
#include "qcdscene.h"
#include "qdialogsettings.h"
#include <QFontDialog>
#include <QColorDialog>
@@ -73,7 +72,7 @@ bool QDialogRoundText::exec( QGraphicsItem *graphicsItem )
m_item->setAlignment( item->alignment() );
m_item->setOutside( item->outside() );
scene.addItem( m_item, true );
scene.addItem( m_item );
m_ui->spinX->setValue( m_item->pos().x() );
m_ui->spinY->setValue( m_item->pos().y() );
@@ -133,7 +132,6 @@ void QDialogRoundText::onFont()
//font.setPointSizeF( font.pointSizeF() / 2.0 );
if( ok ) {
m_item->setFont( font );
QDialogSettings::setLastUsedFont( font );
fontChanged();
}
}
-101
View File
@@ -1,101 +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 "qdialogsettings.h"
#include "ui_qdialogsettings.h"
#include "qlscribe.h"
#include <QSettings>
#include <QFontDialog>
QFont *QDialogSettings::m_lastUsedFont = 0;
QDialogSettings::QDialogSettings(QWidget *parent) :
QDialog( parent ),
m_ui( new Ui::QDialogSettings )
{
m_ui->setupUi( this );
connect( m_ui->btnFont, SIGNAL(clicked()), this, SLOT(onFont()) );
connect( m_ui->btnLastUsedFont, SIGNAL(clicked()), this, SLOT(onLastUsedFont()) );
m_ui->btnLastUsedFont->setEnabled( m_lastUsedFont );
}
QDialogSettings::~QDialogSettings()
{
delete m_ui;
}
void QDialogSettings::changeEvent(QEvent *e)
{
switch (e->type()) {
case QEvent::LanguageChange:
m_ui->retranslateUi(this);
break;
default:
break;
}
}
bool QDialogSettings::exec( QWidget *parent )
{
QDialogSettings dialog( parent );
QSettings sts;
dialog.m_font = sts.value( cfgDefaultFont ).value<QFont>();
dialog.m_ui->fontName->setCurrentFont( dialog.m_font );
dialog.m_ui->chkEject->setChecked( sts.value( cfgEjectAfterFinish, false ).toBool() );
dialog.m_ui->chkPreview->setChecked( sts.value( cfgInjectPreview, true ).toBool() );
if( dialog.QDialog::exec() == Rejected ) return false;
sts.setValue( cfgDefaultFont, dialog.m_font );
sts.setValue( cfgEjectAfterFinish, dialog.m_ui->chkEject->isChecked() );
sts.setValue( cfgInjectPreview, dialog.m_ui->chkPreview->isChecked() );
return true;
}
void QDialogSettings::onFont()
{
bool ok = true;
QFont font = QFontDialog::getFont( &ok, m_font, this );
if( ok ) {
m_font = font;
m_ui->fontName->setCurrentFont( font );
}
}
void QDialogSettings::onLastUsedFont()
{
if( m_lastUsedFont ) {
m_font = *m_lastUsedFont;
m_ui->fontName->setCurrentFont( *m_lastUsedFont );
}
}
void QDialogSettings::setLastUsedFont( const QFont &font )
{
if( !m_lastUsedFont ) m_lastUsedFont = new QFont( font );
else *m_lastUsedFont = font;
}
QFont QDialogSettings::defaultFont()
{
return QSettings().value( cfgDefaultFont ).value<QFont>();
}
-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 QDIALOGSETTINGS_H
#define QDIALOGSETTINGS_H
#include <QDialog>
namespace Ui {
class QDialogSettings;
}
class QDialogSettings : public QDialog {
Q_OBJECT
Q_DISABLE_COPY(QDialogSettings)
public:
static bool exec( QWidget *parent = 0 );
static void setLastUsedFont( const QFont &font );
static QFont defaultFont();
private:
explicit QDialogSettings( QWidget *parent = 0 );
virtual ~QDialogSettings();
protected:
virtual void changeEvent(QEvent *e);
private slots:
void onFont();
void onLastUsedFont();
private:
Ui::QDialogSettings *m_ui;
QFont m_font;
static QFont *m_lastUsedFont;
};
#endif // QDIALOGSETTINGS_H
-148
View File
@@ -1,148 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QDialogSettings</class>
<widget class="QDialog" name="QDialogSettings">
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>320</width>
<height>170</height>
</rect>
</property>
<property name="windowTitle">
<string>Settings</string>
</property>
<property name="modal">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Default font:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QFontComboBox" name="fontName">
<property name="enabled">
<bool>false</bool>
</property>
<property name="editable">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnFont">
<property name="text">
<string>Font...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnLastUsedFont">
<property name="text">
<string>Last used</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="chkEject">
<property name="text">
<string>Eject tray after finish</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkPreview">
<property name="text">
<string>Enable image preview in open dialog</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>QDialogSettings</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>QDialogSettings</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+10 -27
View File
@@ -21,9 +21,8 @@
#include "qdialogtext.h"
#include "ui_qdialogtext.h"
#include "qcdscene.h"
#include "qdialogsettings.h"
#include "qlighttextitem.h"
#include <QGraphicsSimpleTextItem>
#include <QFontDialog>
#include <QColorDialog>
@@ -55,48 +54,39 @@ void QDialogText::changeEvent(QEvent *e)
bool QDialogText::exec( QGraphicsItem *graphicsItem )
{
QLightTextItem *item = dynamic_cast< QLightTextItem * >( graphicsItem );
QGraphicsSimpleTextItem *item = dynamic_cast< QGraphicsSimpleTextItem * >( graphicsItem );
if( !item )
return false;
QCDScene scene;
m_ui->cdView->setScene( &scene );
m_item = new QLightTextItem;
m_item = new QGraphicsSimpleTextItem;
m_item->setPos( item->pos() );
m_item->setText( item->text() );
m_item->setFont( item->font() );
m_item->setColor( item->color() );
m_item->setBrush( item->brush() );
m_item->setTransform( item->transform() );
m_item->setAlignment( item->alignment() );
scene.addItem( m_item, true );
scene.addItem( m_item );
m_ui->spinX->setValue( m_item->pos().x() );
m_ui->spinY->setValue( m_item->pos().y() );
m_ui->textEdit->setPlainText( m_item->text() );
int index = 0;
if( m_item->alignment() == Qt::AlignRight ) index = 2;
else if( m_item->alignment() == Qt::AlignCenter ) index = 1;
m_ui->comboAlignment->setCurrentIndex( index );
colorChanged();
fontChanged();
connect( m_ui->textEdit, SIGNAL(textChanged()), this, SLOT(textChanged()) );
connect( m_ui->spinX, SIGNAL(valueChanged(double)), this, SLOT(posChanged()) );
connect( m_ui->spinY, SIGNAL(valueChanged(double)), this, SLOT(posChanged()) );
connect( m_ui->comboAlignment, SIGNAL(currentIndexChanged(int)),this, SLOT(alignChanged()) );
if( QDialog::exec() == Rejected ) return false;
item->setPos( m_item->pos() );
item->setText( m_item->text() );
item->setFont( m_item->font() );
item->setColor( m_item->color() );
item->setAlignment( m_item->alignment() );
item->setBrush( m_item->brush() );
return true;
}
@@ -107,18 +97,17 @@ void QDialogText::onFont()
QFont font = QFontDialog::getFont( &ok, m_item->font(), this );
if( ok ) {
m_item->setFont( font );
QDialogSettings::setLastUsedFont( font );
fontChanged();
}
}
void QDialogText::onColor()
{
QColor color = QColorDialog::getColor( m_item->color(), this );
QColor color = QColorDialog::getColor( m_item->brush().color(), this );
if( color.isValid() ){
m_item->setColor( color );
m_item->setBrush( color );
colorChanged();
}
}
}
void QDialogText::fontChanged()
@@ -129,7 +118,7 @@ void QDialogText::fontChanged()
void QDialogText::colorChanged()
{
QPixmap pixmap( m_ui->colorWidget->size() );
pixmap.fill( m_item->color() );
pixmap.fill( m_item->brush().color() );
m_ui->colorWidget->setPixmap( pixmap );
}
@@ -143,9 +132,3 @@ void QDialogText::posChanged()
m_item->setPos( m_ui->spinX->value(), m_ui->spinY->value() );
}
void QDialogText::alignChanged()
{
Qt::Alignment align[] = { Qt::AlignLeft, Qt::AlignCenter, Qt::AlignRight };
m_item->setAlignment( align[ m_ui->comboAlignment->currentIndex() ] );
}
+4 -5
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 QDIALOGTEXT_H
#define QDIALOGTEXT_H
@@ -27,7 +27,7 @@ namespace Ui {
class QDialogText;
}
class QLightTextItem;
class QGraphicsSimpleTextItem;
class QDialogText : public QItemDialog {
Q_OBJECT
@@ -48,11 +48,10 @@ private slots:
void fontChanged();
void colorChanged();
void posChanged();
void alignChanged();
private:
Ui::QDialogText *m_ui;
QLightTextItem *m_item;
Ui::QDialogText *m_ui;
QGraphicsSimpleTextItem *m_item;
};
#endif // QDIALOGTEXT_H
+96 -128
View File
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<ui version="4.0" >
<class>QDialogText</class>
<widget class="QDialog" name="QDialogText">
<property name="enabled">
<bool>true</bool>
<widget class="QDialog" name="QDialogText" >
<property name="windowModality" >
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
@@ -13,70 +12,73 @@
<height>627</height>
</rect>
</property>
<property name="windowTitle">
<property name="windowTitle" >
<string>Text properties</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="modal" >
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3" >
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="verticalLayout" >
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<widget class="QFrame" name="frame" >
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
<property name="lineWidth">
<property name="lineWidth" >
<number>3</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<layout class="QVBoxLayout" name="verticalLayout_2" >
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="sizeConstraint">
<layout class="QHBoxLayout" name="horizontalLayout" >
<property name="sizeConstraint" >
<enum>QLayout::SetMaximumSize</enum>
</property>
<property name="bottomMargin">
<property name="bottomMargin" >
<number>0</number>
</property>
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<layout class="QFormLayout" name="formLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="label" >
<property name="text" >
<string>X:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="spinX">
<property name="decimals">
<item row="0" column="1" >
<widget class="QDoubleSpinBox" name="spinX" >
<property name="decimals" >
<number>1</number>
</property>
<property name="minimum">
<property name="minimum" >
<double>-61.000000000000000</double>
</property>
<property name="maximum">
<property name="maximum" >
<double>61.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Y:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="spinY">
<property name="decimals">
<item row="1" column="1" >
<widget class="QDoubleSpinBox" name="spinY" >
<property name="decimals" >
<number>1</number>
</property>
<property name="minimum">
<property name="minimum" >
<double>-61.000000000000000</double>
</property>
<property name="maximum">
<property name="maximum" >
<double>61.000000000000000</double>
</property>
</widget>
@@ -84,11 +86,11 @@
</layout>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<spacer name="horizontalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<property name="sizeHint" stdset="0" >
<size>
<width>13</width>
<height>20</height>
@@ -97,104 +99,70 @@
</spacer>
</item>
<item>
<layout class="QFormLayout" name="formLayout_3">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<layout class="QFormLayout" name="formLayout_3" >
<item row="0" column="0" >
<widget class="QLabel" name="label_5" >
<property name="text" >
<string>Font:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QFontComboBox" name="fontName">
<property name="enabled">
<bool>false</bool>
</property>
<property name="editable">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<item row="1" column="0" >
<widget class="QLabel" name="label_6" >
<property name="text" >
<string>Color:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="colorWidget">
<property name="minimumSize">
<item row="0" column="1" >
<widget class="QFontComboBox" name="fontName" >
<property name="enabled" >
<bool>false</bool>
</property>
<property name="editable" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLabel" name="colorWidget" >
<property name="minimumSize" >
<size>
<width>20</width>
<height>20</height>
</size>
</property>
<property name="maximumSize">
<property name="maximumSize" >
<size>
<width>20</width>
<height>20</height>
</size>
</property>
<property name="baseSize">
<property name="baseSize" >
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="frameShape">
<property name="frameShape" >
<enum>QFrame::Box</enum>
</property>
<property name="text">
</property>
<property name="text" >
<string/>
</property>
<property name="textFormat">
<property name="textFormat" >
<enum>Qt::PlainText</enum>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboAlignment" >
<property name="currentIndex" >
<number>0</number>
</property>
<item>
<property name="text" >
<string>Left</string>
</property>
</item>
<item>
<property name="text" >
<string>Center</string>
</property>
</item>
<item>
<property name="text" >
<string>Right</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Alignment:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<spacer name="horizontalSpacer_2" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<property name="sizeHint" stdset="0" >
<size>
<width>17</width>
<height>20</height>
@@ -203,20 +171,20 @@
</spacer>
</item>
<item>
<layout class="QFormLayout" name="formLayout_4">
<property name="fieldGrowthPolicy">
<layout class="QFormLayout" name="formLayout_4" >
<property name="fieldGrowthPolicy" >
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="1" column="0">
<widget class="QPushButton" name="btnColor">
<property name="text">
<item row="1" column="0" >
<widget class="QPushButton" name="btnColor" >
<property name="text" >
<string>Color...</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="btnFont">
<property name="text">
<item row="0" column="0" >
<widget class="QPushButton" name="btnFont" >
<property name="text" >
<string>Font...</string>
</property>
</widget>
@@ -226,26 +194,26 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<layout class="QHBoxLayout" name="horizontalLayout_2" >
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<widget class="QLabel" name="label_3" >
<property name="text" >
<string>Text</string>
</property>
<property name="alignment">
<property name="alignment" >
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="textEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<widget class="QPlainTextEdit" name="textEdit" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>50</height>
@@ -256,20 +224,20 @@
</layout>
</item>
<item>
<widget class="QCDView" name="cdView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<widget class="QCDView" name="cdView" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<horstretch>0</horstretch>
<verstretch>2</verstretch>
</sizepolicy>
</property>
<property name="baseSize">
<property name="baseSize" >
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="interactive">
<property name="interactive" >
<bool>false</bool>
</property>
</widget>
@@ -278,11 +246,11 @@
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
@@ -313,11 +281,11 @@
<receiver>QDialogText</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<hint type="sourcelabel" >
<x>258</x>
<y>582</y>
</hint>
<hint type="destinationlabel">
<hint type="destinationlabel" >
<x>157</x>
<y>274</y>
</hint>
@@ -329,11 +297,11 @@
<receiver>QDialogText</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<hint type="sourcelabel" >
<x>326</x>
<y>582</y>
</hint>
<hint type="destinationlabel">
<hint type="destinationlabel" >
<x>286</x>
<y>274</y>
</hint>
+7 -18
View File
@@ -29,21 +29,10 @@ QLightPixmapItem::QLightPixmapItem()
{
}
bool QLightPixmapItem::loadImage( const QString &name )
{
QPixmap pixmap( name );
if( pixmap.isNull() )
return false;
m_imageName = name;
setPixmap( pixmap );
return true;
}
QVariant QLightPixmapItem::itemChange( GraphicsItemChange change, const QVariant & value )
{
if( scene() && change == ItemPositionHasChanged )
static_cast<QCDScene *>( scene() )->itemMoved();
static_cast<QCDScene *>( scene() )->setChanged();
return value;
}
@@ -77,8 +66,8 @@ QItemDialog *QShapeControllerPixmap::createDialog( QWidget *parent ) const
void QShapeControllerPixmap::writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const
{
const QLightPixmapItem *pixmapItem
= static_cast< const QLightPixmapItem * >( item );
const QGraphicsPixmapItem *pixmapItem
= static_cast< const QGraphicsPixmapItem * >( item );
writer.writeEmptyElement( "pos" );
writer.writeAttribute( QXmlStreamAttribute( "x", QString::number( pixmapItem->pos().x() ) ) );
@@ -92,7 +81,7 @@ void QShapeControllerPixmap::writeData( QXmlStreamWriter &writer, const QGraphic
writer.writeAttribute(
QXmlStreamAttribute( "sy", QString::number( scale.y() ) ) );
writer.writeTextElement( "image", pixmapItem->imageName() );
writer.writeTextElement( "image", pixmapItem->data( 0 ).toString() );
}
@@ -101,7 +90,7 @@ void QShapeControllerPixmap::readData( const QString &element,
const QString &data,
QGraphicsItem *item ) const
{
QLightPixmapItem *pixmapItem = static_cast< QLightPixmapItem * >( item );
QGraphicsPixmapItem *pixmapItem = static_cast< QGraphicsPixmapItem * >( item );
if( element == "pos" ) {
pixmapItem->setPos( attrs.value( "x" ).toString().toDouble(),
@@ -116,14 +105,14 @@ void QShapeControllerPixmap::readData( const QString &element,
}
if( element == "image" ) {
pixmapItem->setData( 0, data );
QPixmap pixmap( data );
if( pixmap.isNull() ) {
throw QString( "QShapeControllerPixmap: image loading from \"" ) +
data + "\" failed";
}
pixmapItem->imageName( data );
pixmapItem->setPixmap( pixmap );
pixmapItem->setOffset( -QPointF( pixmap.size().width(), pixmap.size().height() ) / 2.0 );
pixmapItem->setOffset( -QPointF( pixmap.size().height(), pixmap.size().width() ) / 2.0 );
return;
}
}
+2 -8
View File
@@ -25,19 +25,13 @@
#include "qshapefactory.h"
class QLightPixmapItem : public QGraphicsPixmapItem {
class QLightPixmapItem : public QGraphicsPixmapItem
{
public:
QLightPixmapItem();
bool loadImage( const QString &name );
void imageName( const QString &name ) { m_imageName = name; }
const QString &imageName() const { return m_imageName; }
protected:
virtual QVariant itemChange ( GraphicsItemChange change, const QVariant & value );
private:
QString m_imageName;
};
class QShapeControllerPixmap : public QShapeController {
+13 -47
View File
@@ -21,7 +21,6 @@
#include "qlightroundtextitem.h"
#include "qdialogroundtext.h"
#include "qcdscene.h"
#include "qdialogsettings.h"
#include <QPainter>
#include <QFontMetrics>
@@ -29,7 +28,6 @@
#include <QMessageBox>
#include <QXmlStreamWriter>
#include <QTextLayout>
#include <QGraphicsSceneMouseEvent>
#include <math.h>
@@ -129,7 +127,7 @@ QPainterPath QLightRoundTextItem::shape() const
const double pad = 1;
for( int i = 0; i < m_text.size(); ++i )
arcAngle += mcs.horizontalAdvance(m_text[i]);
arcAngle += mcs.width( m_text[ i ] );
double height = ( mcs.height() * 2 ) / 3;
double in, out;
@@ -192,10 +190,10 @@ void QLightRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsIt
switch( m_alignment ) {
case Qt::AlignCenter :
case Qt::AlignHCenter :
angle += mcs.horizontalAdvance(m_text) / diam * ( m_outside ? -1 : 1 );
angle += mcs.width( m_text ) / diam * ( m_outside ? -1 : 1 );
break;
case Qt::AlignRight :
angle += mcs.horizontalAdvance(m_text) / radi * ( m_outside ? -1 : 1 );
angle += mcs.width( m_text ) / radi * ( m_outside ? -1 : 1 );
break;
}
@@ -213,12 +211,12 @@ void QLightRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsIt
for( int i = 0; i < m_text.size(); ++i ) {
QChar ch = m_text[ i ];
double d = (prevWidth + mcs.horizontalAdvance(ch)) / diam;
double d = ( prevWidth + mcs.width( ch ) ) / diam;
trans.reset();
trans.rotateRadians( m_outside ? d : -d );
painter->setWorldTransform( trans, true );
prevWidth = mcs.horizontalAdvance(ch);
prevWidth = mcs.width( ch );
painter->drawText( int( -prevWidth / 2.0 ),
int( m_outside ? -m_radius : m_radius ),
@@ -227,43 +225,19 @@ void QLightRoundTextItem::paint( QPainter *painter, const QStyleOptionGraphicsIt
painter->restore();
if (option->state & QStyle::State_Selected) {
painter->setPen( QPen( option->palette.windowText(), 0, Qt::DashLine ) );
painter->setBrush( Qt::NoBrush );
painter->setBrush(Qt::NoBrush);
painter->drawPath( shape() );
}
}
inline
double distance( const QPointF &p1, const QPointF &p2 )
QVariant QLightRoundTextItem::itemChange( GraphicsItemChange change, const QVariant & value )
{
QPointF d = p1 - p2;
return sqrt( d.x() * d.x() + d.y() * d.y() );
if( scene() && change == ItemPositionHasChanged )
static_cast<QCDScene *>( scene() )->setChanged();
return value;
}
inline
double angle( const QPointF &p1, const QPointF &p2 )
{
QPointF d = p1 - p2;
return atan2( d.y(), d.x() ) * 180.0 / 3.14159;
}
void QLightRoundTextItem::mouseMoveEvent( QGraphicsSceneMouseEvent *event )
{
if( event->buttons() & Qt::LeftButton ) {
double dradi = distance( scenePos(), event->lastScenePos() ) - distance( scenePos(), event->scenePos() );
double dangle = ::angle( scenePos(), event->lastScenePos() ) - ::angle( scenePos(), event->scenePos() );
prepareGeometryChange();
m_radius -= dradi;
m_angle -= dangle;
if( m_angle > 360.0 ) m_angle -= 360.0;
if( m_angle < 0.0 ) m_angle += 360.0;
static_cast<QCDScene *>( scene() )->itemMoved();
} else
event->ignore();
}
RegisterController< QShapeControllerRoundText > regControllerRoundText;
QString QShapeControllerRoundText::name() const
@@ -279,7 +253,6 @@ QString QShapeControllerRoundText::menuName() const
QGraphicsItem *QShapeControllerRoundText::create() const
{
QLightRoundTextItem *item = new QLightRoundTextItem;
item->setFont( QDialogSettings::defaultFont() );
return item;
}
@@ -291,15 +264,7 @@ QItemDialog *QShapeControllerRoundText::createDialog( QWidget *parent ) const
void QShapeControllerRoundText::replace( QGraphicsItem *item, const QString &from, const QString &to ) const
{
QLightRoundTextItem *textItem = static_cast< QLightRoundTextItem * >( item );
bool placeHolder = textItem->text().left( 1 ) == "?" && textItem->text().right( 1 ) == "?";
bool replace = false;
if( from.isEmpty() )
replace = placeHolder;
else
replace = textItem->text() == ( placeHolder ? QString( "?%1?" ).arg( from ) : from );
if( replace )
if( textItem->text() == from )
textItem->setText( to );
}
@@ -371,3 +336,4 @@ void QShapeControllerRoundText::readData( const QString &element,
return;
}
}
+2 -2
View File
@@ -28,7 +28,7 @@
class QLightRoundTextItem : public QAbstractGraphicsShapeItem {
public:
enum { Type = UserType + 1 };
enum { Type = UserType + 1 };
QLightRoundTextItem( QGraphicsItem * parent = 0 );
@@ -55,7 +55,7 @@ public:
virtual int type() const { return Type; }
protected:
virtual void mouseMoveEvent( QGraphicsSceneMouseEvent *event );
virtual QVariant itemChange ( GraphicsItemChange change, const QVariant & value );
private:
QFont m_font;
+19 -21
View File
@@ -37,7 +37,7 @@
QDBusArgument &operator<<( QDBusArgument &argument, const PrintParameters &p )
{
argument.beginStructure();
argument << p.m_labelMode << p.m_drawOptions << p.m_printQuality << p.m_mediaOptimizationLevel << (int) p.m_ejectAfterComplete;
argument << p.m_labelMode << p.m_drawOptions << p.m_printQuality << p.m_mediaOptimizationLevel;
argument.endStructure();
return argument;
}
@@ -46,14 +46,13 @@
const QDBusArgument &operator>>( const QDBusArgument &argument, PrintParameters &p )
{
argument.beginStructure();
int drawOptions = 0, labelMode = 0, mediaOptimizationLevel = 0, printQuality = 0, ejectAfterComplete = 0;
argument >> labelMode >> drawOptions >> printQuality >> mediaOptimizationLevel >> ejectAfterComplete;
int drawOptions = 0, labelMode = 0, mediaOptimizationLevel = 0, printQuality = 0;
argument >> labelMode >> drawOptions >> printQuality >> mediaOptimizationLevel;
argument.endStructure();
p = PrintParameters( LabelMode( labelMode ),
DrawOptions( drawOptions ),
PrintQuality( printQuality ),
MediaOptimizationLevel( mediaOptimizationLevel ),
ejectAfterComplete );
MediaOptimizationLevel( mediaOptimizationLevel ) );
return argument;
}
@@ -109,25 +108,24 @@ QLightDrive::QLightDrive( QObject *parent, const QString &path, const QString &n
static
void printScene( QCDScene *scene, QByteArray &array )
{
const int resolution = 2772;
QImage image( resolution, resolution, QImage::Format_RGB888 );
image.fill( 0xFFFFFFFF );
QImage image( 2772, 2772, QImage::Format_RGB888 );
image.fill( 0xFFFFFFFF );
scene->clearSelection();
{
QPainter painter( &image );
scene->render( &painter, image.rect() );
}
image.setDotsPerMeterX( resolution * 8 );
image.setDotsPerMeterY( resolution * 8 );
scene->clearSelection();
{
QPainter painter( &image );
scene->render( &painter, image.rect() );
}
image.setDotsPerMeterX( 23622 );
image.setDotsPerMeterY( 23622 );
array.clear();
QBuffer buffer( &array );
buffer.open( QIODevice::WriteOnly );
image.save( &buffer, "bmp", 100 );
array.clear();
QBuffer buffer( &array );
buffer.open( QIODevice::WriteOnly );
image.save( &buffer, "bmp", 100 );
}
QPixmap QLightDrive::preview(const PrintParameters &params, QCDScene *scene, const QSize &size)
QPixmap QLightDrive::preview( const PrintParameters &params, QCDScene *scene, const QSize &size ) throw( QString )
{
qApp->setOverrideCursor( Qt::WaitCursor );
QByteArray array;
@@ -150,7 +148,7 @@ QPixmap QLightDrive::preview(const PrintParameters &params, QCDScene *scene, con
return pixmap;
}
void QLightDrive::print(const PrintParameters &params, QCDScene *scene)
void QLightDrive::print( const PrintParameters &params, QCDScene *scene ) throw( QString )
{
qApp->setOverrideCursor( Qt::WaitCursor );
QByteArray array;
+5 -13
View File
@@ -24,7 +24,6 @@
#include "qlscribe.h"
#include <QPixmap>
#include <QObject>
#include <QMap>
#include <QMetaType>
@@ -36,20 +35,13 @@ struct PrintParameters {
DrawOptions m_drawOptions;
PrintQuality m_printQuality;
MediaOptimizationLevel m_mediaOptimizationLevel;
bool m_ejectAfterComplete;
PrintParameters()
: m_labelMode( modeFull ), m_drawOptions( drawDefault ),
m_printQuality( qualityBest ), m_mediaOptimizationLevel( mediaRecognized ), m_ejectAfterComplete( false ) {}
PrintParameters( LabelMode labelMode,
DrawOptions drawOptions,
PrintQuality printQuality,
MediaOptimizationLevel mediaOptimizationLevel,
bool ejectAfterComplete )
m_printQuality( qualityBest ), m_mediaOptimizationLevel( mediaRecognized ) {}
PrintParameters( LabelMode labelMode, DrawOptions drawOptions, PrintQuality printQuality, MediaOptimizationLevel mediaOptimizationLevel )
: m_labelMode( labelMode ), m_drawOptions( drawOptions ),
m_printQuality( printQuality ), m_mediaOptimizationLevel( mediaOptimizationLevel ),
m_ejectAfterComplete( ejectAfterComplete )
{}
m_printQuality( printQuality ), m_mediaOptimizationLevel( mediaOptimizationLevel ) {}
};
Q_DECLARE_METATYPE( PrintParameters );
@@ -87,8 +79,8 @@ public:
double innerRadius() const { return m_innerRadius; }
double outerRadius() const { return m_outerRadius; }
QPixmap preview(const PrintParameters &params, QCDScene *scene, const QSize &size);
void print(const PrintParameters &params, QCDScene *scene);
QPixmap preview( const PrintParameters &params, QCDScene *scene, const QSize &size ) throw( QString );
void print( const PrintParameters &params, QCDScene *scene ) throw( QString );
friend class QLightScribe;
+8 -78
View File
@@ -21,11 +21,9 @@
#include "qlighttextitem.h"
#include "qdialogtext.h"
#include "qcdscene.h"
#include "qdialogsettings.h"
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
#include <QTextDocument>
QLightTextItem::QLightTextItem()
@@ -35,63 +33,11 @@ QLightTextItem::QLightTextItem()
QVariant QLightTextItem::itemChange( GraphicsItemChange change, const QVariant & value )
{
if( scene() && change == ItemPositionHasChanged )
static_cast<QCDScene *>( scene() )->itemMoved();
static_cast<QCDScene *>( scene() )->setChanged();
return value;
}
QString QLightTextItem::text() const
{
return QGraphicsSimpleTextItem::text();
}
QColor QLightTextItem::color() const
{
return this->brush().color();
}
Qt::Alignment QLightTextItem::alignment() const
{
return m_alignment;
}
void QLightTextItem::setText( const QString &txt )
{
QGraphicsSimpleTextItem::setText( txt );
updateTrans();
}
void QLightTextItem::setFont( const QFont &font )
{
QGraphicsSimpleTextItem::setFont( font );
updateTrans();
}
void QLightTextItem::setColor( const QColor &color )
{
this->setBrush( color );
}
void QLightTextItem::setAlignment( Qt::Alignment align )
{
m_alignment = align;
updateTrans();
}
void QLightTextItem::updateTrans()
{
double size = this->boundingRect().width();
QTransform trans;
trans.scale( 0.5, 0.5 );
switch( m_alignment ) {
case Qt::AlignRight : trans.translate( -size, 0 ); break;
case Qt::AlignCenter : trans.translate( -size / 2.0, 0 ); break;
}
this->setTransform( trans );
}
RegisterController< QShapeControllerText > regControllerText;
@@ -107,8 +53,7 @@ QString QShapeControllerText::menuName() const
QGraphicsItem *QShapeControllerText::create() const
{
QLightTextItem *item = new QLightTextItem;
item->setFont( QDialogSettings::defaultFont() );
QGraphicsItem *item = new QLightTextItem;
item->setTransform( QTransform().scale( 0.5, 0.5 ), true );
item->setPos( 0, -40.0 );
@@ -122,31 +67,21 @@ QItemDialog *QShapeControllerText::createDialog( QWidget *parent ) const
void QShapeControllerText::writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const
{
const QLightTextItem *textItem = static_cast< const QLightTextItem * >( item );
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.writeAttribute( QXmlStreamAttribute( "z", QString::number( textItem->zValue() ) ) );
writer.writeTextElement( "font", textItem->font().toString() );
writer.writeTextElement( "color", textItem->color().name() );
writer.writeTextElement( "color", textItem->brush().color().name() );
writer.writeTextElement( "text", textItem->text() );
writer.writeTextElement( "alignment", QString::number( textItem->alignment() ) );
}
void QShapeControllerText::replace( QGraphicsItem *item, const QString &from, const QString &to ) const
{
QLightTextItem *textItem = static_cast< QLightTextItem * >( item );
bool placeHolder = textItem->text().left( 1 ) == "?" && textItem->text().right( 1 ) == "?";
bool replace = false;
if( from.isEmpty() )
replace = placeHolder;
else
replace = textItem->text() == ( placeHolder ? QString( "?%1?" ).arg( from ) : from );
if( replace )
QGraphicsSimpleTextItem *textItem = static_cast< QGraphicsSimpleTextItem * >( item );
if( textItem->text() == from )
textItem->setText( to );
}
@@ -156,7 +91,7 @@ void QShapeControllerText::readData( const QString &element,
const QString &data,
QGraphicsItem *item ) const
{
QLightTextItem *textItem = static_cast< QLightTextItem * >( item );
QGraphicsSimpleTextItem *textItem = static_cast< QGraphicsSimpleTextItem * >( item );
if( element == "pos" ) {
textItem->setPos( attrs.value( "x" ).toString().toDouble(),
@@ -173,7 +108,7 @@ void QShapeControllerText::readData( const QString &element,
}
if( element == "color" ) {
textItem->setColor( QColor( data ) );
textItem->setBrush( QColor( data ) );
return;
}
@@ -181,9 +116,4 @@ void QShapeControllerText::readData( const QString &element,
textItem->setText( data );
return;
}
if( element == "alignment" ) {
textItem->setAlignment( Qt::Alignment( data.toInt() ) );
return;
}
}
-13
View File
@@ -30,22 +30,9 @@ class QLightTextItem : public QGraphicsSimpleTextItem
public:
QLightTextItem();
QString text() const;
Qt::Alignment alignment() const;
QColor color() const;
void setText( const QString &txt );
void setColor( const QColor &color );
void setFont( const QFont &font );
void setAlignment( Qt::Alignment align );
protected:
virtual QVariant itemChange ( GraphicsItemChange change, const QVariant & value );
private:
void updateTrans();
Qt::Alignment m_alignment;
};
class QShapeControllerText : public QShapeController {
-8
View File
@@ -59,15 +59,7 @@ enum MediaOptimizationLevel {
mediaGeneric
};
const char * const itemMimeType = "application/x-qlscribe;item";
const char * const DBusServiceName = "@QLSCRIBE_DBUS_MANAGER_SERVICE@";
const char * const DBusManagerPath = "@QLSCRIBE_DBUS_MANAGER_PATH@";
// config keys
const char * const cfgDefaultFont = "DefaultTextFont";
const char * const cfgEjectAfterFinish = "EjectAfterFinish";
const char * const cfgInjectPreview = "InjectPreview";
#endif // QLSCRIBE_H
+3 -8
View File
@@ -20,9 +20,7 @@ SOURCES += main.cpp \
qlighttextitem.cpp \
qlightpixmapitem.cpp \
qdialogcdproperties.cpp \
qconsoleprintprogress.cpp \
qdialogsettings.cpp \
previewinjector.cpp
qconsoleprintprogress.cpp
QMAKE_LIBS += -llightscribe
HEADERS += mainwindow.h \
qlightroundtextitem.h \
@@ -38,13 +36,10 @@ HEADERS += mainwindow.h \
qlighttextitem.h \
qlightpixmapitem.h \
qdialogcdproperties.h \
qconsoleprintprogress.h \
qdialogsettings.h \
previewinjector.h
qconsoleprintprogress.h
FORMS += qdialogtext.ui \
qdialogroundtext.ui \
qdialogpixmap.ui \
qdialogprint.ui \
qdialogprogress.ui \
qdialogcdproperties.ui \
qdialogsettings.ui
qdialogcdproperties.ui
+1 -7
View File
@@ -118,13 +118,7 @@ QString QShapeFactory::name( int type ) const
QGraphicsItem *QShapeFactory::create( int type ) const
{
QShapeController *ctrl = getController( type );
if( !ctrl ) return 0;
QGraphicsItem *item = ctrl->create();
if( item ) {
item->setFlag( QGraphicsItem::ItemIsMovable, true );
item->setFlag( QGraphicsItem::ItemIsSelectable, true );
}
return item;
return ctrl ? ctrl->create() : 0;
}
bool QShapeFactory::edit( QGraphicsItem *item, QWidget *parent ) const