From 0e59d311d4e58b9f69a531a8d6979c45447ab279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 7 Jun 2012 00:34:15 +0200 Subject: [PATCH] primer dise?o del di?logo de informaci?n de c?mics arreglado bug que al cambiar entre bibliotecas provocaba un cierre por acceso de memoria inv?lido la modificaci?n en treemodel no tiene nada que ver con el bug, pero es m?s seguro as? faltan por encontrar los memory leaks --- YACReaderLibrary/db/treemodel.cpp | 3 +- YACReaderLibrary/library_window.cpp | 6 +- YACReaderLibrary/properties_dialog.cpp | 306 ++++++++++++++++++++----- YACReaderLibrary/properties_dialog.h | 102 ++++++--- 4 files changed, 320 insertions(+), 97 deletions(-) diff --git a/YACReaderLibrary/db/treemodel.cpp b/YACReaderLibrary/db/treemodel.cpp index 80fb0ba0..2e110b64 100644 --- a/YACReaderLibrary/db/treemodel.cpp +++ b/YACReaderLibrary/db/treemodel.cpp @@ -78,7 +78,8 @@ TreeModel::TreeModel( QSqlQuery &sqlquery, QObject *parent) //! [1] TreeModel::~TreeModel() { - delete rootItem; + if(rootItem != 0) + delete rootItem; } //! [1] diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 99076330..a3965cfb 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -564,9 +564,12 @@ void LibraryWindow::loadLibrary(const QString & name) { index = 0; sm->clear(); + foldersView->setModel(NULL); //TODO comprobar pq no sirve con usar simplemente las seņales beforeReset y reset + comicView->setModel(NULL); + dm->setupModelData(path); foldersView->setModel(dm); - + loadCovers(QModelIndex()); //includeComicsCheckBox->setCheckState(Qt::Unchecked); @@ -623,6 +626,7 @@ void LibraryWindow::loadCovers(const QModelIndex & mi) TreeItem *item = static_cast(mi.internalPointer()); folderId = item->id; } + comicView->setModel(NULL); dmCV->setupModelData(folderId,dm->getDatabase()); comicView->setModel(dmCV); //TODO automatizar (valorar si se deja al modelo) diff --git a/YACReaderLibrary/properties_dialog.cpp b/YACReaderLibrary/properties_dialog.cpp index 3ad230e6..c6b3de59 100644 --- a/YACReaderLibrary/properties_dialog.cpp +++ b/YACReaderLibrary/properties_dialog.cpp @@ -3,51 +3,230 @@ #include #include #include - +#include +#include +#include +#include +#include PropertiesDialog::PropertiesDialog(QWidget * parent) :QDialog(parent) { - QHBoxLayout * l = new QHBoxLayout(); - sa = new QScrollArea(); - _cover = new QLabel(); - _cover->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - _cover->setScaledContents(true); - _cover->setAlignment(Qt::AlignTop|Qt::AlignHCenter); - + createCoverBox(); + createGeneralInfoBox(); + createAuthorsBox(); + createPublishingBox(); + createButtonBox(); + createPlotBox(); - sa->setWidget(_cover); - sa->setBackgroundRole(QPalette::Dark); - sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - sa->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - sa->setFrameStyle(QFrame::NoFrame); - sa->setAlignment(Qt::AlignCenter); + createTabBar(); - QVBoxLayout * coverLayout = new QVBoxLayout(); - coverLayout->addWidget(sa); - //coverLayout->addStretch(); + mainLayout = new QGridLayout; + mainLayout->addWidget(coverBox,0,0); + mainLayout->addWidget(tabBar,0,1); + mainLayout->setColumnStretch(1,1); + /*mainLayout->addWidget(authorsBox,1,1); + mainLayout->addWidget(publishingBox,2,1);*/ + mainLayout->addWidget(buttonBox,1,1,Qt::AlignBottom); - l->addLayout(coverLayout); - - QVBoxLayout * info = new QVBoxLayout(); - info->addWidget(_name = new QLabel("name")); - info->addWidget(_pages = new QLabel("pages")); - info->addWidget(_size = new QLabel("size")); - info->addStretch(); - //coverLayout->setSizeConstraint(QLayout::SetMaximumSize); - l->addLayout(info); - l->addStretch(); - //l->setSizeConstraint(QLayout::SetNoConstraint); - this->setLayout(l); + this->setLayout(mainLayout); + mainLayout->setSizeConstraint(QLayout::SetMinimumSize); this->setWindowTitle(tr("Comic properties")); int heightDesktopResolution = QApplication::desktop()->screenGeometry().height(); int widthDesktopResolution = QApplication::desktop()->screenGeometry().width(); int sHeight,sWidth; - sHeight = static_cast(heightDesktopResolution*0.5); + sHeight = static_cast(heightDesktopResolution*0.65); sWidth = static_cast(sHeight*1.4); - this->resize(sWidth,sHeight); + setCover(QPixmap(":/images/notCover.png")); + this->resize(sWidth,this->height()); + this->move(QPoint((widthDesktopResolution-sWidth)/2,((heightDesktopResolution-sHeight)-40)/2)); + repaint(); +} + +void PropertiesDialog::createTabBar() +{ + tabBar = new QTabWidget; + tabBar->addTab(generalInfoBox,tr("General info")); + tabBar->addTab(authorsBox,tr("Authors")); + tabBar->addTab(publishingBox,tr("Publishing")); + tabBar->addTab(plotBox,tr("Plot")); +} + +void PropertiesDialog::createCoverBox() +{ + coverBox = new QGroupBox(tr("Cover")); + + sa = new QScrollArea(); + cover = new QLabel(); + cover->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); + cover->setScaledContents(false); + cover->setAlignment(Qt::AlignTop|Qt::AlignHCenter); + + + /*sa->setWidget(cover); + sa->setBackgroundRole(QPalette::Dark); + sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + sa->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + sa->setFrameStyle(QFrame::NoFrame); + sa->setAlignment(Qt::AlignCenter);*/ + + QVBoxLayout * coverLayout = new QVBoxLayout(); + coverLayout->addWidget(cover); + coverLayout->addWidget(new QLineEdit()); + + coverBox->setLayout(coverLayout); +} + +QFrame * createLine() +{ + QFrame * line = new QFrame(); + line->setObjectName(QString::fromUtf8("line")); + //line->setGeometry(QRect(320, 150, 118, 3)); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + + return line; +} + +void PropertiesDialog::createGeneralInfoBox() +{ + generalInfoBox = new QWidget; + + QFormLayout *generalInfoLayout = new QFormLayout; + + + + + + //generalInfoLayout->setRowWrapPolicy(QFormLayout::WrapAllRows); + generalInfoLayout->addRow(tr("Title:"), title = new QLineEdit()); + + + QHBoxLayout * number = new QHBoxLayout; + number->addWidget(new QLineEdit()); + number->addWidget(new QLabel("Bis:")); + number->addWidget(new QCheckBox()); + number->addWidget(new QLabel("of:")); + number->addWidget(new QLineEdit()); + number->addStretch(1); + /*generalInfoLayout->addRow(tr("&Issue number:"), ); + generalInfoLayout->addRow(tr("&Bis:"), );*/ + generalInfoLayout->addRow(tr("Issue number:"), number); + + generalInfoLayout->addRow(tr("&Volume:"), pages = new QLineEdit()); + + QHBoxLayout * arc = new QHBoxLayout; + arc->addWidget(new QLineEdit()); + arc->addWidget(new QLabel("Arc number:")); + arc->addWidget(new QLineEdit()); + arc->addWidget(new QLabel("of:")); + arc->addWidget(new QLineEdit()); + arc->addStretch(1); + generalInfoLayout->addRow(tr("&Story arc:"), arc); + + generalInfoLayout->addRow(tr("&Genere:"), new QLineEdit()); + + generalInfoLayout->addRow(tr("&Size:"), size = new QLabel("size")); + + generalInfoBox->setLayout(generalInfoLayout); +} + +void PropertiesDialog::createAuthorsBox() +{ + authorsBox = new QWidget; + + QVBoxLayout *authorsLayout = new QVBoxLayout; + + //authorsLayout->setRowWrapPolicy(QFormLayout::WrapAllRows); + QHBoxLayout * h1 = new QHBoxLayout; + QVBoxLayout * vl1 = new QVBoxLayout; + QVBoxLayout * vr1 = new QVBoxLayout; + vl1->addWidget(new QLabel(tr("Writer(s):"))); + vl1->addWidget(new QPlainTextEdit()); + h1->addLayout(vl1); + vr1->addWidget(new QLabel(tr("Penciller(s):"))); + vr1->addWidget(new QPlainTextEdit()); + h1->addLayout(vr1); + //authorsLayout->addRow(tr("Writer(s):"), new QPlainTextEdit()); + //authorsLayout->addRow(tr("Penciller(s):"), new QPlainTextEdit()); + QHBoxLayout * h2 = new QHBoxLayout; + QVBoxLayout * vl2 = new QVBoxLayout; + QVBoxLayout * vr2 = new QVBoxLayout; + vl2->addWidget(new QLabel(tr("Inker(s):"))); + vl2->addWidget(new QPlainTextEdit()); + h2->addLayout(vl2); + vr2->addWidget(new QLabel(tr("Colorist(s):"))); + vr2->addWidget(new QPlainTextEdit()); + h2->addLayout(vr2); + + //authorsLayout->addRow(tr("Inker(s):"), new QPlainTextEdit()); + //authorsLayout->addRow(tr("Colorist(s):"), new QPlainTextEdit()); + + QHBoxLayout * h3 = new QHBoxLayout; + QVBoxLayout * vl3 = new QVBoxLayout; + QVBoxLayout * vr3 = new QVBoxLayout; + vl3->addWidget(new QLabel(tr("Letterer(es):"))); + vl3->addWidget(new QPlainTextEdit()); + h3->addLayout(vl3); + vr3->addWidget(new QLabel(tr("Cover Artist(s):"))); + vr3->addWidget(new QPlainTextEdit()); + h3->addLayout(vr3); + //authorsLayout->addRow(tr("Letterer(es):"), new QPlainTextEdit()); + //authorsLayout->addRow(tr("Cover Artist(s):"), new QPlainTextEdit()); + + authorsLayout->addLayout(h1); + authorsLayout->addLayout(h2); + authorsLayout->addLayout(h3); + authorsLayout->addStretch(1); + authorsBox->setLayout(authorsLayout); + +} + +void PropertiesDialog::createPublishingBox() +{ + publishingBox = new QWidget; + + QFormLayout *publishingLayout = new QFormLayout; + + publishingLayout->setRowWrapPolicy(QFormLayout::WrapAllRows); + publishingLayout->addRow(tr("Year:"), new QLineEdit()); + publishingLayout->addRow(tr("Month:"), new QLineEdit()); + publishingLayout->addRow(tr("Publisher:"), new QLineEdit()); + publishingLayout->addRow(tr("Format:"), new QLineEdit()); + publishingLayout->addRow(tr("Color/BW:"), new QLineEdit()); + publishingLayout->addRow(tr("Age rating:"), new QLineEdit()); + + publishingBox->setLayout(publishingLayout); +} + +void PropertiesDialog::createPlotBox() +{ + plotBox = new QWidget; + + QFormLayout *plotLayout = new QFormLayout; + + plotLayout->setRowWrapPolicy(QFormLayout::WrapAllRows); + plotLayout->addRow(tr("Synopsis:"), new QPlainTextEdit()); + plotLayout->addRow(tr("Characters:"), new QPlainTextEdit()); + plotLayout->addRow(tr("Notes:"), new QPlainTextEdit()); + + plotBox->setLayout(plotLayout); + +} + +void PropertiesDialog::createButtonBox() +{ + buttonBox = new QDialogButtonBox; + + closeButton = buttonBox->addButton(QDialogButtonBox::Close); + saveButton = buttonBox->addButton(QDialogButtonBox::Save); + //rotateWidgetsButton = buttonBox->addButton(tr("Rotate &Widgets"),QDialogButtonBox::ActionRole); + + //connect(rotateWidgetsButton, SIGNAL(clicked()), this, SLOT(rotateWidgets())); + connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + connect(saveButton, SIGNAL(clicked()), this, SLOT(save())); } void PropertiesDialog::setComics(QList comics) @@ -55,47 +234,54 @@ void PropertiesDialog::setComics(QList comics) } + + void PropertiesDialog::updateComics(QList comics) { } //Deprecated -void PropertiesDialog::setCover(const QPixmap & cover) +void PropertiesDialog::setCover(const QPixmap & coverImage) { - _cover->setPixmap(cover); - float aspectRatio = (float)cover.width()/cover.height(); - int heightDesktopResolution = QApplication::desktop()->screenGeometry().height(); - int widthDesktopResolution = QApplication::desktop()->screenGeometry().width(); - int sHeight,sWidth; - sHeight = static_cast(heightDesktopResolution*0.5); + cover->setPixmap(coverImage.scaledToWidth(125,Qt::SmoothTransformation)); + //cover->repaint(); - if(aspectRatio<1) - { - sWidth = static_cast(sHeight*1.4); - //this->resize(sWidth,sHeight); - this->move(QPoint((widthDesktopResolution-sWidth)/2,((heightDesktopResolution-sHeight)-40)/2)); - _cover->resize(static_cast((sa->height())*aspectRatio), - (sa->height())); - } - else - { - sWidth = static_cast(sHeight/1.16); - //this->resize(sWidth,sHeight); - this->move(QPoint((widthDesktopResolution-sWidth)/2,((heightDesktopResolution-sHeight)-40)/2)); - _cover->resize((width()-25), - static_cast((width()-25)/aspectRatio)); - } + //float aspectRatio = (float)coverImage.width()/coverImage.height(); + //int heightDesktopResolution = QApplication::desktop()->screenGeometry().height(); + //int widthDesktopResolution = QApplication::desktop()->screenGeometry().width(); + //int sHeight,sWidth; + //sHeight = static_cast(heightDesktopResolution*0.65); + + //if(aspectRatio<1) + //{ + // sWidth = static_cast(sHeight*1.4); + // //this->resize(sWidth,sHeight); + // this->move(QPoint((widthDesktopResolution-sWidth)/2,((heightDesktopResolution-sHeight)-40)/2)); + // //sa->resize(sa->width(),sa->width()*1.333); + // /*cover->resize(static_cast((sa->height())*aspectRatio), + // (sa->height()));*/ + + //} + //else + //{ + // sWidth = static_cast(sHeight/1.16); + // //this->resize(sWidth,sHeight); + // this->move(QPoint((widthDesktopResolution-sWidth)/2,((heightDesktopResolution-sHeight)-40)/2)); + // cover->resize((width()-25), + // static_cast((width()-25)/aspectRatio)); + //} + } -void PropertiesDialog::setFilename(const QString & name) +void PropertiesDialog::setFilename(const QString & nameString) { - _name->setText(tr("Name : ") + name); + title->setText(nameString); } -void PropertiesDialog::setNumpages(int pages) +void PropertiesDialog::setNumpages(int pagesNum) { - _pages->setText(tr("Number of pages : ") + QString::number(pages)); + pages->setText(QString::number(pagesNum)); } -void PropertiesDialog::setSize(float size) +void PropertiesDialog::setSize(float sizeFloat) { - _size->setText(tr("Size : ") + QString::number(size,'f',2) + " MB"); + size->setText(QString::number(sizeFloat,'f',2) + " MB"); } \ No newline at end of file diff --git a/YACReaderLibrary/properties_dialog.h b/YACReaderLibrary/properties_dialog.h index 4eea80f3..4d92dac6 100644 --- a/YACReaderLibrary/properties_dialog.h +++ b/YACReaderLibrary/properties_dialog.h @@ -1,35 +1,67 @@ -#ifndef __PROPERTIES_DIALOG_H -#define __PROPERTIES_DIALOG_H - -#include -#include -#include -#include -#include - -#include "comic.h" - - class PropertiesDialog : public QDialog - { - Q_OBJECT - private: - QLabel * _cover; - QLabel * _name; - QLabel * _pages; - QLabel * _size; - QScrollArea * sa; - - public: - PropertiesDialog(QWidget * parent = 0); - public slots: - void setComics(QList comics); - void updateComics(QList comics); - - //Deprecated - void setCover(const QPixmap & cover); - void setFilename(const QString & name); - void setNumpages(int pages); - void setSize(float size); - }; -#endif - +#ifndef __PROPERTIES_DIALOG_H +#define __PROPERTIES_DIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "comic.h" + + class PropertiesDialog : public QDialog + { + Q_OBJECT + private: + QGridLayout * mainLayout; + + QTabWidget * tabBar; + + QGroupBox * coverBox; + QLabel * cover; + QScrollArea * sa; + + QWidget * generalInfoBox; + QLineEdit * title; + QLineEdit * pages; + QLabel * size; + + + QWidget * authorsBox; + + QWidget * publishingBox; + + QWidget * plotBox; + + QDialogButtonBox *buttonBox; + QPushButton *closeButton; + QPushButton *saveButton; + QPushButton *restoreButton; //?? + + void createTabBar(); + void createCoverBox(); + void createGeneralInfoBox(); + void createAuthorsBox(); + void createPublishingBox(); + void createPlotBox(); + + void createButtonBox(); + + public: + PropertiesDialog(QWidget * parent = 0); + public slots: + void setComics(QList comics); + void updateComics(QList comics); + + //Deprecated + void setCover(const QPixmap & cover); + void setFilename(const QString & name); + void setNumpages(int pages); + void setSize(float size); + }; +#endif +