From e8125ce68062aa7c4f64af91d2016f2825630ada Mon Sep 17 00:00:00 2001 From: ruglory Date: Wed, 28 Jan 2009 05:45:57 +0000 Subject: [PATCH] Added filename and name to cd scene Added name title on cdview window Open, "save as" and save reimplemented git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@24 cac9541e-1b8d-4bfa-827e-589bba606050 --- src/mainwindow.cpp | 45 ++++++++++------------- src/qcdscene.cpp | 90 ++++++++++++++++++++++++++++++++++++++++++++-- src/qcdscene.h | 24 +++++++++++-- src/qlscribe.pro | 2 +- 4 files changed, 128 insertions(+), 33 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1fb43c7..fc6f892 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -34,7 +34,6 @@ #include #include #include -#include #include /*#include @@ -119,8 +118,10 @@ MainWindow::~MainWindow() void MainWindow::onMenuNew() { QCDView *newView = new QCDView; - newView->setScene( new QCDScene( newView ) ); - //newView->setWindowTitle( "Baba" ); + QCDScene *scene = new QCDScene( newView ); + newView->setScene( scene ); + scene->setName(); + QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( newView ); subWindow->show(); } @@ -173,33 +174,30 @@ void MainWindow::onMenuOpen() if( fileName.isNull() ) return; - QFile file( fileName ); - if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { - QMessageBox::critical( this, tr( "Error" ), tr( "Cannot open file for reading\n" ) + fileName ); - return; - } - QCDView *newView = new QCDView; QCDScene *scene = new QCDScene( newView ); newView->setScene( scene ); - - QXmlStreamReader reader( &file ); - try { - scene->read( reader ); - } - catch( const QString &err ) { - QMessageBox::critical( this, tr( "Error" ), tr( "Cannot read file " ) + fileName + "\n" + err ); + + if( !scene->load( fileName ) ) { delete newView; return; - } - - //newView->setWindowTitle( "Baba" ); + } + QMdiSubWindow *subWindow = m_mdiArea->addSubWindow( newView ); subWindow->show(); } void MainWindow::onMenuSave() { + QCDScene *cdscene = getScene( m_mdiArea ); + if( !cdscene ) + return; + + if( cdscene->isUnnamed() ) { + onMenuSaveAs(); + return; + } + cdscene->save(); } void MainWindow::onMenuPrintPreview() @@ -252,14 +250,7 @@ void MainWindow::onMenuSaveAs() if( !fileName.contains( '.' ) ) fileName += ".qlx"; - QFile file( fileName ); - if( !file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text ) ) { - QMessageBox::warning( this, tr( "Warning" ), tr( "Cannot open file for writing: " ) + fileName ); - return; - } - QXmlStreamWriter writer( &file ); - writer.setAutoFormatting( true ); - cdscene->write( writer ); + cdscene->saveAs( fileName ); } diff --git a/src/qcdscene.cpp b/src/qcdscene.cpp index 9122829..14ea8a5 100644 --- a/src/qcdscene.cpp +++ b/src/qcdscene.cpp @@ -16,7 +16,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - $Id:$ */ + $Id$ */ #include "qcdscene.h" #include "qshapefactory.h" @@ -25,10 +25,17 @@ #include #include #include +#include +#include #include +#include +#include +#include QCDScene::QCDScene( QObject * parent ) - : QGraphicsScene( parent ) + : QGraphicsScene( parent ), + m_index( 0 ), + m_saved( false ) { setSceneRect( -60.0, -60.0, 60.0 * 2, 60.0 * 2 ); } @@ -39,6 +46,85 @@ QCDScene::~QCDScene() { } +bool QCDScene::load( const QString &fileName ) +{ + QFile file( fileName ); + if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { + QMessageBox::critical( 0, tr( "Error" ), tr( "Cannot open file for reading\n" ) + fileName ); + return false; + } + QXmlStreamReader reader( &file ); + try { + read( reader ); + } + catch( const QString &err ) { + QMessageBox::critical( 0, tr( "Error" ), tr( "Cannot read file " ) + fileName + "\n" + err ); + return false; + } + m_fileName = fileName; + m_saved = true; + setName(); + return true; +} + +void QCDScene::save() +{ + QFile file( m_fileName ); + if( !file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text ) ) { + QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot open file for writing: " ) + m_fileName ); + return; + } + QXmlStreamWriter writer( &file ); + writer.setAutoFormatting( true ); + write( writer ); + m_saved = true; + setName(); +} + +void QCDScene::setName() +{ + if( m_fileName.isEmpty() ) { + if( !m_index ) { + static int index = 1; + m_index = index++; + } + m_name = "Unnamed_" + QString::number( m_index ); + } else { + QRegExp rx( "(.*/)?(.*)\\.qlx" ); + rx.indexIn( m_fileName ); + m_name = rx.cap( 2 ); + } + + updateTitles(); +} + +void QCDScene::updateTitles() const +{ + QString name = m_name; + if( !m_saved ) + name += " *"; + + QList allViews = views(); + foreach( QGraphicsView *view, allViews ) { + view->setWindowTitle( name ); + } +} + +void QCDScene::saveAs( const QString &fileName ) +{ + QFile file( fileName ); + if( !file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text ) ) { + QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot open file for writing: " ) + fileName ); + return; + } + QXmlStreamWriter writer( &file ); + writer.setAutoFormatting( true ); + write( writer ); + m_saved = true; + m_fileName = fileName; + setName(); +} + void QCDScene::write( QXmlStreamWriter &writer ) { writer.writeStartDocument(); diff --git a/src/qcdscene.h b/src/qcdscene.h index bf4de51..89a957e 100644 --- a/src/qcdscene.h +++ b/src/qcdscene.h @@ -16,7 +16,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - $Id:$ */ + $Id$ */ #ifndef QCDSCENE_H #define QCDSCENE_H @@ -32,14 +32,32 @@ public: QCDScene( QObject * parent = 0 ); virtual ~QCDScene(); - void write( QXmlStreamWriter &writer ); - void read( QXmlStreamReader &reader ); + bool isSaved() const { return m_saved; } + bool isUnnamed() const { return m_fileName.isEmpty(); } + + void setName(); + bool load( const QString &fileName ); + void save(); + void saveAs( const QString &fileName ); + + void updateTitles() const; + QString name() const { return m_name; } protected: virtual void contextMenuEvent( QGraphicsSceneContextMenuEvent *contextMenuEvent ); private slots: void onMenuEdit(); + +private: + void write( QXmlStreamWriter &writer ); + void read( QXmlStreamReader &reader ); + +private: + QString m_name; + QString m_fileName; + int m_index; + bool m_saved; }; #endif //QCDSCENE_H diff --git a/src/qlscribe.pro b/src/qlscribe.pro index 04d7238..a88f06f 100644 --- a/src/qlscribe.pro +++ b/src/qlscribe.pro @@ -1,7 +1,7 @@ TEMPLATE = app LANGUAGE = C++ CONFIG += qt -INCLUDEPATH += ../build/src +INCLUDEPATH += /home/slava/projects/qlscribe/build/src QMAKE_CXXFLAGS += -m32 QMAKE_LFLAGS += -m32 QMAKE_LIBDIR = /usr/lib32