summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2012-10-20 04:36:10 +0200
committerArno <am@disconnect.de>2012-10-20 04:36:10 +0200
commit9d3de3499af4a03177b9c0bb211da763e5dcbb2d (patch)
tree98cbec732e2cd7f8b9c26c633654210aa274c76a
parentfb1794ee67a31ecad8257563dd176e4ee03fac00 (diff)
downloadSheMov-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.cpp47
-rw-r--r--configurationdialog.h6
-rw-r--r--helper.cpp2
-rw-r--r--pictureviewer2.cpp28
-rw-r--r--pictureviewer2.h3
-rw-r--r--shemov.cpp6
-rw-r--r--smglobals.h1
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
diff --git a/helper.cpp b/helper.cpp
index 6c8a406..7d7710a 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -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 {
diff --git a/shemov.cpp b/shemov.cpp
index e8dfeae..e282de9 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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; }