diff options
author | Arno <am@disconnect.de> | 2012-10-20 04:36:10 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-10-20 04:36:10 +0200 |
commit | 9d3de3499af4a03177b9c0bb211da763e5dcbb2d (patch) | |
tree | 98cbec732e2cd7f8b9c26c633654210aa274c76a | |
parent | fb1794ee67a31ecad8257563dd176e4ee03fac00 (diff) | |
download | SheMov-9d3de3499af4a03177b9c0bb211da763e5dcbb2d.tar.gz SheMov-9d3de3499af4a03177b9c0bb211da763e5dcbb2d.tar.bz2 SheMov-9d3de3499af4a03177b9c0bb211da763e5dcbb2d.zip |
Make PictureViewer2 size configurable
Several bug fixes on the way:
* set fixed size policy for PictureViewer2 -> makes resizing much easier
* don't set Y-offset when showing a pic. The scene takes care of it
* don't deliver SIGNAL configChanged() twice to PictureViewer2
* center Widget on current screen when calling Helper::centerWidget
-rw-r--r-- | configurationdialog.cpp | 47 | ||||
-rw-r--r-- | configurationdialog.h | 6 | ||||
-rw-r--r-- | helper.cpp | 2 | ||||
-rw-r--r-- | pictureviewer2.cpp | 28 | ||||
-rw-r--r-- | pictureviewer2.h | 3 | ||||
-rw-r--r-- | shemov.cpp | 6 | ||||
-rw-r--r-- | smglobals.h | 1 |
7 files changed, 77 insertions, 16 deletions
diff --git a/configurationdialog.cpp b/configurationdialog.cpp index 3f654e1..82623e8 100644 --- a/configurationdialog.cpp +++ b/configurationdialog.cpp @@ -36,13 +36,14 @@ #include <QPainter> #include <QStandardItemModel> #include <QStandardItem> +#include <QDesktopWidget> #include "configurationdialog.h" #include "programconfigurator.h" #include "smglobals.h" #include "helper.h" -ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : SmDialog(parent, f){ +ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : SmDialog(parent, f), mPVMinSize(SmGlobals::instance()->minPVSize()){ //setup mTab = new QTabWidget; QDirModel *model = new QDirModel(this); @@ -184,12 +185,36 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : S pvInfoL->addRow(tr("Picture mapping information"), mMapBox); picInfoBox->setLayout(pvInfoL); + //picture viewer - size + QDesktopWidget *dw = QApplication::desktop(); + QSize dSize = dw->availableGeometry().size(); + QFormLayout *pvSizeWHL = new QFormLayout; + QGroupBox *pvSizeBox = new QGroupBox(tr("Size")); + mPVWidth = new QSpinBox; + mPVWidth->setRange(mPVMinSize.width(), dSize.width()); + mPVHeight = new QSpinBox; + mPVHeight->setRange(mPVMinSize.height(), dSize.height()); + pvSizeWHL->addRow(tr("Width"), mPVWidth); + pvSizeWHL->addRow(tr("Height"), mPVHeight); + QHBoxLayout *pvSizeButtonLayout = new QHBoxLayout; + pvSizeButtonLayout->addStretch(); + mPVSizeReset = new QPushButton(tr("Reset")); + connect(mPVSizeReset, SIGNAL(clicked()), this, SLOT(resetPvSize())); + pvSizeButtonLayout->addWidget(mPVSizeReset); + pvSizeButtonLayout->addStretch(); + QVBoxLayout *pvSizeL = new QVBoxLayout; + pvSizeL->addLayout(pvSizeWHL); + pvSizeL->addLayout(pvSizeButtonLayout); + pvSizeBox->setLayout(pvSizeL); + //picture viewer - layout QWidget *picWidget = new QWidget; QVBoxLayout *picLayout = new QVBoxLayout; picLayout->addWidget(picInfoBox); - picWidget->setLayout(picLayout); + picLayout->addWidget(pvSizeBox); picLayout->addStretch(); + picWidget->setLayout(picLayout); + mTab->addTab(picWidget, tr("Pictures")); //database tab @@ -387,6 +412,8 @@ void ConfigurationDialog::readSettings(){ //read pictures mInfoBox->setCurrentIndex(mInfoBox->findData(s.value("ui/infoposition", TopLeft).toInt())); mMapBox->setCurrentIndex(mMapBox->findData(s.value("ui/mappingposition", TopRight).toInt())); + mPVWidth->setValue(s.value("ui/pvwidth", mPVMinSize.width()).toInt()); + mPVHeight->setValue(s.value("ui/pvheight", mPVMinSize.height()).toInt()); //read database mDatabaseHost->setText(s.value("database/hostname").toString()); @@ -463,6 +490,8 @@ void ConfigurationDialog::writeSettings(){ s.setValue("ui/infoposition", mPositionMap.value(curPos)); curPos = mMapBox->currentText(); s.setValue("ui/mappingposition", mPositionMap.value(curPos)); + s.setValue("ui/pvwidth", mPVWidth->value()); + s.setValue("ui/pvheight", mPVHeight->value()); //write database s.setValue("database/hostname", mDatabaseHost->text()); @@ -558,6 +587,20 @@ void ConfigurationDialog::randomGradientChanged(int state){ mPVBgColor->setEnabled(state == Qt::Unchecked); } +void ConfigurationDialog::resetPvSize(){ + QDesktopWidget *dw = QApplication::desktop(); + int width = dw->availableGeometry().width() - 100; + if(width < mPVMinSize.width()){ + width = mPVMinSize.width(); + } + int height = dw->availableGeometry().height() - 100; + if(height < mPVMinSize.height()){ + height = mPVMinSize.height(); + } + mPVWidth->setValue(width); + mPVHeight->setValue(height); +} + void ConfigurationDialog::setColor(QWidget *label){ QLabel *curLabel = qobject_cast<QLabel*>(label); if(!curLabel){ diff --git a/configurationdialog.h b/configurationdialog.h index bbe477f..b6bf0a8 100644 --- a/configurationdialog.h +++ b/configurationdialog.h @@ -10,6 +10,7 @@ #include <QHash> #include <QMap> +#include <QSize> #include "smdialog.h" @@ -39,6 +40,7 @@ class ConfigurationDialog : public SmDialog { void chooseColor(QWidget *label); void alternateColorsChanged(int); void randomGradientChanged(int); + void resetPvSize(); private: void readSettings(); @@ -50,6 +52,7 @@ class ConfigurationDialog : public SmDialog { void fillPositions(QComboBox *cb); QPushButton *mOk; QPushButton *mCancel; + QPushButton *mPVSizeReset; QTabWidget *mTab; ProgramConfigurator *mMovieConfig; QLineEdit *mArchiveDir; @@ -75,6 +78,8 @@ class ConfigurationDialog : public SmDialog { QCheckBox *mIconizeCovers; QSpinBox *mHoverOpacity; QSpinBox *mCursorOffset; + QSpinBox *mPVWidth; + QSpinBox *mPVHeight; QLabel *mSeenColor; QLabel *mClipboardColor; QLabel *mBaseColor; @@ -100,6 +105,7 @@ class ConfigurationDialog : public SmDialog { QHash<QWidget*, QColor> mColors; QMap<QString, int> mPositionMap; QStandardItemModel *mIconModel; + const QSize mPVMinSize; }; #endif @@ -205,7 +205,7 @@ namespace Helper { void centerWidget(QWidget *widget){ QRect widgetRect = widget->rect(); - widgetRect.moveCenter(qApp->desktop()->screenGeometry().center()); + widgetRect.moveCenter(qApp->desktop()->screenGeometry(widget).center()); widget->move(widgetRect.topLeft()); } } diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 609c796..2d6c1d9 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -40,6 +40,9 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png"), mFnItem(0), mMappingItem(0) { //behave like QDialog, but don't be one... setWindowFlags(QFlags<Qt::WindowType>(0x1|0x2|0x1000|0x2000|0x10000|0x8000000)); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); //initial file list PicData initialData; @@ -60,14 +63,8 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) //setup gui mScene = new QGraphicsScene(this); setScene(mScene); - QDesktopWidget *dw = QApplication::desktop(); - QSize screenSize = dw->availableGeometry().size(); - //TODO: configure! - mMinimunSize = QSize(screenSize.width() - 100, screenSize.height() - 100); - setMinimumSize(mMinimunSize); - move(50, 50); - setVisible(false); readSettings(); + setVisible(false); mScene->setSceneRect(QRectF(0, 0, width() - 10, height() - 10)); showFile(mFiles.at(mCurPos)); } @@ -146,7 +143,7 @@ PicData PictureViewer2::picData(const QString &fullPath){ } QSize PictureViewer2::sizeHint() const{ - return mMinimunSize; + return mSize; } void PictureViewer2::next(){ @@ -184,6 +181,14 @@ void PictureViewer2::readSettings(){ mInfoPos = s.value("ui/pvinfopos", QPointF(20, 20)).toPointF(); mConfigMapPos = s.value("ui/mappingposition").toInt(); mMappingPos = s.value("ui/pvmappingpos", QPointF(20, 20)).toPointF(); + const QSize pvMinSize = SmGlobals::instance()->minPVSize(); + int pvWidth = s.value("ui/pvwidth", pvMinSize.width()).toInt(); + int pvHeight = s.value("ui/pvheight", pvMinSize.height()).toInt(); + mSize = QSize(pvWidth, pvHeight); + resize(mSize); + mScene->setSceneRect(QRectF(0, 0, width() - 10, height() - 10)); + showFile(mCurPicData); + Helper::centerWidget(this); } void PictureViewer2::writeSettings(){ @@ -265,6 +270,10 @@ void PictureViewer2::hideEvent(QHideEvent *){ } void PictureViewer2::showFile(const PicData &file){ + if(file.isEmpty()){ + return; + } + mCurPicData = file; QPixmap pixmap(file.at(PicFilesModel::FullPath).toString()); if(pixmap.isNull()){ return; @@ -284,9 +293,8 @@ void PictureViewer2::showFile(const PicData &file){ } mCur = new QGraphicsPixmapItem(pixmap); float cX = (width() / 2) - (pixmap.width() / 2); - float cY = height() / 2 - pixmap.height() / 2; mScene->addItem(mCur); - mCur->setPos(cX, cY); + mCur->setPos(cX, 0); setWindowTitle(constructWindowTitle()); if(mConfigInfoPos != ConfigurationDialog::NoDisplay){ constructInfoItem(file, pixmap.size()); diff --git a/pictureviewer2.h b/pictureviewer2.h index 743cd58..9d5c1c5 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -72,7 +72,7 @@ class PictureViewer2 : public QGraphicsView { QString constructWindowTitle() const; PicDataList mFiles; QGraphicsScene *mScene; - QSize mMinimunSize; + QSize mSize; QGraphicsPixmapItem *mCur; int mCurPos; int mConfigInfoPos; @@ -89,6 +89,7 @@ class PictureViewer2 : public QGraphicsView { QAction *mHideA; MappingTreeModel *mMappingTreeModel; PicFilesModel *mPicFilesModel; + PicData mCurPicData; }; class PictureViewer2Item : public QGraphicsItem { @@ -56,6 +56,7 @@ #include "newpicsdialog.h" #include "pictureswidget.h" #include "pictureviewer2.h" +#include "helper.h" SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) { //application icon @@ -89,6 +90,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mPicWidget->picView(), SIGNAL(newMappings(QString)), this, SLOT(statusbarMessage(QString))); connect(mPicWidget->picView(), SIGNAL(numSelected(int)), this, SLOT(updateSelectedCount(int))); connect(mPicWidget->picView(), SIGNAL(selectedSize(qint64)), this, SLOT(setSize(qint64))); + PictureViewer2 *picViewer = SmGlobals::instance()->pictureViewer(); //newmoviewizard + dbanalyzer mNewMovieWizard = new NewMovieWizard(this); @@ -117,8 +119,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mFSWidget->dirModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(setFsFree())); connect(this, SIGNAL(configChanged()), mFSWidget->fileView(), SLOT(readConfig())); connect(this, SIGNAL(configChanged()), mATree->seriesWidget(), SLOT(readSettings())); - connect(this, SIGNAL(configChanged()), SmGlobals::instance()->pictureViewer(), SLOT(readSettings())); - connect(this, SIGNAL(configChanged()), mPicWidget->picViewer2(), SLOT(readSettings())); + connect(this, SIGNAL(configChanged()), picViewer, SLOT(readSettings())); connect(mFSWidget, SIGNAL(mounted(bool)), this, SLOT(checkMount(bool))); QWidget *centralWidget = new QWidget; @@ -131,6 +132,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla readSettings(); mFSWidget->fileView()->setFocus(Qt::ActiveWindowFocusReason); mATree->filesWidget()->filesTree()->header()->resizeSections(QHeaderView::ResizeToContents); + Helper::centerWidget(picViewer); } void SheMov::closeEvent(QCloseEvent *event){ diff --git a/smglobals.h b/smglobals.h index 99ecd07..c396f76 100644 --- a/smglobals.h +++ b/smglobals.h @@ -49,6 +49,7 @@ class SmGlobals : public QObject { PictureViewer2 *pictureViewer(); FrameCache *frameCache(); QSize cursorSize(); + const QSize minPVSize() const { return QSize(640, 480); } const QHash<QString, QString> & icons() const { return mIcons; } qint64 dvdSize() const { return mDvdSize; } |