diff options
author | Arno <am@disconnect.de> | 2012-03-24 15:24:12 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-03-24 15:24:12 +0100 |
commit | c425bb0c2b8f8d1fc2884ced9979eb39ee522846 (patch) | |
tree | aac0aab88c3fcd19cd2e5998aa00edd51764e52f | |
parent | 13ce3cb8d433499eb81a4fc750d7d90027ea4a62 (diff) | |
download | SheMov-c425bb0c2b8f8d1fc2884ced9979eb39ee522846.tar.gz SheMov-c425bb0c2b8f8d1fc2884ced9979eb39ee522846.tar.bz2 SheMov-c425bb0c2b8f8d1fc2884ced9979eb39ee522846.zip |
Made FileInfoItem configurable
Create copious options for FileInfoItem, reintroducing the Pictures tab
in ConfigurationDialog.
Also fixed a long standing bug in SeriesTreeWidget: don't static_cast()
an event. It'll succeed even when called from a destructor.
-rw-r--r-- | configurationdialog.cpp | 43 | ||||
-rw-r--r-- | configurationdialog.h | 7 | ||||
-rw-r--r-- | pictureviewer2.cpp | 42 | ||||
-rw-r--r-- | pictureviewer2.h | 3 | ||||
-rw-r--r-- | seriestreewidget.cpp | 2 |
5 files changed, 92 insertions, 5 deletions
diff --git a/configurationdialog.cpp b/configurationdialog.cpp index b858a06..d05bc91 100644 --- a/configurationdialog.cpp +++ b/configurationdialog.cpp @@ -172,6 +172,24 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : S movieWidget->setLayout(movieWidgetLayout); mTab->addTab(movieWidget, tr("Movies")); + //picture viewer + QGroupBox *picInfoBox = new QGroupBox(tr("Picture info item")); + mPositionBox = new QComboBox; + createPositionMap(); + fillPositions(mPositionBox); + mPositionBox->removeItem(mPositionBox->findData(SideBySide)); + QFormLayout *pvInfoL = new QFormLayout; + pvInfoL->addRow(tr("Picture info position"), mPositionBox); + mShowInfoItem = new QCheckBox(tr("Show info item")); + connect(mShowInfoItem, SIGNAL(toggled(bool)), mPositionBox, SLOT(setEnabled(bool))); + pvInfoL->addRow(tr("Show info item"), mShowInfoItem); + picInfoBox->setLayout(pvInfoL); + QWidget *picWidget = new QWidget; + QVBoxLayout *picLayout = new QVBoxLayout; + picLayout->addWidget(picInfoBox); + picWidget->setLayout(picLayout); + mTab->addTab(picWidget, tr("Pictures")); + //database tab QFormLayout *dbFormL = new QFormLayout; mDatabaseHost = new QLineEdit; @@ -364,6 +382,11 @@ void ConfigurationDialog::readSettings(){ mWindowsDrive->setText(s.value("paths/windowsdrive").toString()); mStripPath->setText(s.value("paths/strippath").toString()); + //read pictures + mShowInfoItem->setChecked(s.value("ui/showinfoitem", true).toBool()); + mPositionBox->setCurrentIndex(mPositionBox->findData(s.value("ui/infoposition", TopLeft).toInt())); + mPositionBox->setEnabled(mShowInfoItem->checkState()); + //read database mDatabaseHost->setText(s.value("database/hostname").toString()); mDatabaseName->setText(s.value("database/dbname").toString()); @@ -434,6 +457,11 @@ void ConfigurationDialog::writeSettings(){ s.setValue("ui/iconizecovers", (mIconizeCovers->checkState() == Qt::Checked)); s.setValue("ui/cursoroffset", mCursorOffset->value()); + //write pictures + s.setValue("ui/showinfoitem", (mShowInfoItem->checkState() == Qt::Checked)); + QString curPos = mPositionBox->currentText(); + s.setValue("ui/infoposition", mPositionMap.value(curPos)); + //write database s.setValue("database/hostname", mDatabaseHost->text()); s.setValue("database/dbname", mDatabaseName->text()); @@ -538,3 +566,18 @@ void ConfigurationDialog::setColor(QWidget *label){ pm.fill(curColor); curLabel->setPixmap(pm); } + +void ConfigurationDialog::createPositionMap(){ + mPositionMap.insert(tr("Top left"), TopLeft); + mPositionMap.insert(tr("Top right"), TopRight); + mPositionMap.insert(tr("Bottom left"), BottomLeft); + mPositionMap.insert(tr("Bottom right"), BottomRigth); + mPositionMap.insert(tr("Side by side"), SideBySide); + mPositionMap.insert(tr("Freely moveable"), Moveable);; +} + +void ConfigurationDialog::fillPositions(QComboBox *cb){ + for(QMap<QString, int>::const_iterator it = mPositionMap.constBegin(); it != mPositionMap.constEnd(); ++it){ + cb->addItem(it.key(), it.value()); + } +} diff --git a/configurationdialog.h b/configurationdialog.h index 7867374..3d83bcd 100644 --- a/configurationdialog.h +++ b/configurationdialog.h @@ -9,6 +9,7 @@ #define CONFIGURATIONDIALOG_H #include <QHash> +#include <QMap> #include "smdialog.h" @@ -26,6 +27,7 @@ class ProgramConfigurator; class ConfigurationDialog : public SmDialog { Q_OBJECT public: + enum Position { TopLeft = 0, TopRight = 1, BottomLeft = 2, BottomRigth = 3, SideBySide = 4, Moveable = 5 }; ConfigurationDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); ~ConfigurationDialog() {} @@ -44,6 +46,8 @@ class ConfigurationDialog : public SmDialog { bool checkDvdPath(); void mountError(const QString &error); void setColor(QWidget *label); + void createPositionMap(); + void fillPositions(QComboBox *cb); QPushButton *mOk; QPushButton *mCancel; QTabWidget *mTab; @@ -62,6 +66,7 @@ class ConfigurationDialog : public SmDialog { QLineEdit *mStripPath; QLineEdit *mGrabFrameFrom; QComboBox *mIconForFolder; + QComboBox *mPositionBox; QCheckBox *mHoverPics; QCheckBox *mHoverArchive; QCheckBox *mHoverMovies; @@ -89,7 +94,9 @@ class ConfigurationDialog : public SmDialog { QPushButton *mPVBgButton; QCheckBox *mAlternateColors; QCheckBox *mPVGradient; + QCheckBox *mShowInfoItem; QHash<QWidget*, QColor> mColors; + QMap<QString, int> mPositionMap; QStandardItemModel *mIconModel; }; diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 8c6d831..f397b57 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -27,6 +27,7 @@ #include "smglobals.h" #include "mappingtreemodel.h" #include "smtreeitem.h" +#include "configurationdialog.h" 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... @@ -118,6 +119,8 @@ void PictureViewer2::readSettings(){ mUseGradient = s.value("ui/pvgradient").toBool(); QVariant t = s.value("ui/pvbgcolor"); mBgColor = t.value<QColor>(); + mShowInfoItem = s.value("ui/showinfoitem").toBool(); + mConfigPos = s.value("ui/infoposition").toInt(); mInfoPos = s.value("ui/pvinfopos", QPointF(20, 20)).toPointF(); } @@ -205,8 +208,15 @@ void PictureViewer2::showFile(const PicData &file){ mScene->addItem(mCur); mCur->setPos(cX, cY); setWindowTitle(constructWindowTitle()); - //TODO: configure! - constructInfoItem(file, pixmap.size()); + if(mShowInfoItem){ + constructInfoItem(file, pixmap.size()); + }else{ + if(mFnItem){ + mScene->removeItem(mFnItem); + delete mFnItem; + mFnItem = 0; + } + } constructMappingItem(file); } @@ -217,7 +227,7 @@ void PictureViewer2::constructInfoItem(const PicData &data, QSize picSize){ delete mFnItem; } mFnItem = new PictureViewer2Item(data, mFiles.size(), picSize); - mFnItem->setPos(mInfoPos); + mFnItem->setPos(getPos(mFnItem->boundingRect())); mScene->addItem(mFnItem); } @@ -301,6 +311,30 @@ void PictureViewer2::treeToStringRecursive(const SmTreeItem *parent, QTextCursor } } +QPointF PictureViewer2::getPos(const QRectF &boundingRect) const{ + QSizeF curSize = size(); + mFnItem->setFlags(0); + if(mConfigPos == ConfigurationDialog::TopLeft){ + return QPointF(5, 5); + } + int rightOffset = curSize.width() - 15 - boundingRect.width(); + int bottomOffset = curSize.height() - 15 - boundingRect.height(); + if(mConfigPos == ConfigurationDialog::TopRight){ + return QPointF(rightOffset, 5); + } + if(mConfigPos == ConfigurationDialog::BottomLeft){ + return QPointF(5, bottomOffset); + } + if(mConfigPos == ConfigurationDialog::BottomRigth){ + return QPointF(rightOffset, bottomOffset); + } + if(mConfigPos == ConfigurationDialog::Moveable){ + mFnItem->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); + return mInfoPos; + } + return QPointF(5, 5); +} + QString PictureViewer2::constructWindowTitle() const { QString retval = QString(tr("PicViewer 2 - [%1]")).arg(mFiles.at(mCurPos).at(PicFilesModel::FileName).toString()); return retval; @@ -318,7 +352,7 @@ PictureViewer2Item::PictureViewer2Item(const PicData &data, const int numSelecte textList << data.at(PicFilesModel::MimeType).toString(); textList << QString(QObject::tr("%1 files selected")).arg(QString::number(numSelected)); mText = QStaticText(textList.join("<br/>")); - setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); + //setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); setZValue(1); } diff --git a/pictureviewer2.h b/pictureviewer2.h index d31780e..47e0292 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -62,17 +62,20 @@ class PictureViewer2 : public QGraphicsView { void setGradient(const QPixmap &pic); QTextDocument *treeToString(const SmTreeItem *root) const; void treeToStringRecursive(const SmTreeItem *parent, QTextCursor *cursor) const; + QPointF getPos(const QRectF &boundingRect) const; QString constructWindowTitle() const; PicDataList mFiles; QGraphicsScene *mScene; QSize mMinimunSize; QGraphicsPixmapItem *mCur; int mCurPos; + int mConfigPos; QTimer *mSlideTimer; const QString mDefaultFile; PictureViewer2Item *mFnItem; PictureViewer2Item *mMappingItem; bool mUseGradient; + bool mShowInfoItem; QColor mBgColor; QPointF mInfoPos; QPointF mMappingPos; diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index d6c216d..1f96a11 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -426,7 +426,7 @@ void SeriesTreeView::contextMenuEvent(QContextMenuEvent *e){ } bool SeriesTreeView::event(QEvent *e){ - QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); + QHoverEvent *hEvent = dynamic_cast<QHoverEvent*>(e); if(!hEvent){ return QTreeView::event(e); } |