summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clean_tampon.pngbin0 -> 698 bytes
-rw-r--r--pictureswidget.cpp29
-rw-r--r--pictureswidget.h5
-rw-r--r--pictureviewer2.cpp20
-rw-r--r--pictureviewer2.h14
-rw-r--r--shemov.cpp72
-rw-r--r--shemov.h12
-rw-r--r--shemov.qrc2
-rw-r--r--smglobals.cpp2
-rw-r--r--used_tampon.pngbin0 -> 757 bytes
10 files changed, 115 insertions, 41 deletions
diff --git a/clean_tampon.png b/clean_tampon.png
new file mode 100644
index 0000000..db10e8b
--- /dev/null
+++ b/clean_tampon.png
Binary files differ
diff --git a/pictureswidget.cpp b/pictureswidget.cpp
index 2d56571..ac44229 100644
--- a/pictureswidget.cpp
+++ b/pictureswidget.cpp
@@ -46,6 +46,7 @@ PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent), mWindowTitleB
//misc
mEditDialog = new MappingEditDialog(this);
mPicViewer = new PictureViewer2(this);
+ mPictureView->setPV(mPicViewer);
//put it all togehter
QHBoxLayout *mainLayout = new QHBoxLayout;
@@ -91,10 +92,12 @@ void PicturesWidget::constructWindowTitle(){
}
void PicturesWidget::showInPicViewer(const QModelIndex &idx){
- if(!idx.isValid()){
+ QModelIndex real = mPictureView->proxy()->mapToSource(idx);
+ if(!real.isValid()){
return;
}
- mPicViewer->setFile(idx.data(PicFilesModel::FullPathRole).toString());
+ PicData pData = mPictureView->filesModel()->dataList(real);
+ mPicViewer->setFile(pData);
if(mPicViewerA){
mPicViewerA->setChecked(true);
}
@@ -157,6 +160,16 @@ void PictureView::refresh(){
mModel->populate();
}
+void PictureView::setPVData(int replace){
+ QModelIndexList sel = selectionModel()->selectedRows();
+ PicDataList pics;
+ foreach(QModelIndex i, sel){
+ QModelIndex real = mProxy->mapToSource(i);
+ pics << mModel->dataList(real);
+ }
+ mPV->addFiles(pics, replace);
+}
+
void PictureView::hideEvent(QHideEvent *){
QByteArray pvHeader = header()->saveState();
QSettings s;
@@ -300,6 +313,18 @@ QVariant PicFilesModel::data(const QModelIndex &index, int role) const {
return SmTreeModel::data(index, role);
}
+QList<QVariant> PicFilesModel::dataList(const QModelIndex &idx) const{
+ QList<QVariant> retval;
+ if(!idx.isValid()){
+ return retval;
+ }
+ SmTreeItem *item = itemAt(idx);
+ for(int i = 0; i < NumFields; ++i){
+ retval << item->data(i);
+ }
+ return retval;
+}
+
void PicFilesModel::removeFiles(const QList<QPersistentModelIndex> &files){
foreach(QPersistentModelIndex pi, files){
mDeleteFileQ->bindValue(":id", pi.data(IdRole));
diff --git a/pictureswidget.h b/pictureswidget.h
index fd0b5ac..f473140 100644
--- a/pictureswidget.h
+++ b/pictureswidget.h
@@ -62,11 +62,14 @@ class PictureView : public QTreeView {
explicit PictureView(QWidget *parent = 0);
QList<int> fileMappings() { return mFilesMappings; }
PicFilesModel *filesModel() { return mModel; }
+ QSortFilterProxyModel *proxy() { return mProxy; }
+ void setPV(PictureViewer2 *pv) { mPV = pv; }
public slots:
void mappingChanged(int mapping);
void deletePics();
void refresh();
+ void setPVData(int replace = false);
protected:
virtual void hideEvent(QHideEvent *);
@@ -87,6 +90,7 @@ class PictureView : public QTreeView {
PicFilesModel *mModel;
int mCursorOffset;
QList<int> mFilesMappings;
+ PictureViewer2 *mPV;
};
class PicFilesModel : public SmTreeModel {
@@ -102,6 +106,7 @@ class PicFilesModel : public SmTreeModel {
//some data
Qt::ItemFlags flags(const QModelIndex &) const { return Qt::ItemIsEnabled | Qt::ItemIsSelectable; }
QVariant data(const QModelIndex &index, int role) const;
+ QList<QVariant> dataList(const QModelIndex &idx) const;
void removeFiles(const QList<QPersistentModelIndex> &files);
bool changeMappings(const QList<int> &fileIds, const QList<int> &mappingIds);
diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp
index c126c2c..3bcc404 100644
--- a/pictureviewer2.cpp
+++ b/pictureviewer2.cpp
@@ -13,13 +13,19 @@
#include <QWheelEvent>
#include "pictureviewer2.h"
+#include "pictureswidget.h"
PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png") {
//behave like QDialog, but don't be one...
setWindowFlags(QFlags<Qt::WindowType>(0x1|0x2|0x1000|0x2000|0x10000|0x8000000));
//initial file list
- mFiles = QStringList() << mDefaultFile;
+ PicData initialData;
+ for(int i = 0; i < PicFilesModel::NumFields; ++i){
+ initialData << QVariant();
+ }
+ initialData[PicFilesModel::FullPath] = mDefaultFile;
+ mFiles << initialData;
//setup gui
mScene = new QGraphicsScene(this);
@@ -33,22 +39,22 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0)
showFile(mFiles.at(mCurPos));
}
-void PictureViewer2::addFiles(const QStringList &files, bool clear){
+void PictureViewer2::addFiles(const PicDataList &files, bool clear){
if(clear){
mFiles.clear();
mFiles = files;
mCurPos = 0;
return;
}
- foreach(const QString &f, files){
+ foreach(const PicData &f, files){
if(!mFiles.contains(f)){
mFiles.append(f);
}
}
}
-void PictureViewer2::setFile(const QString &file){
- addFiles(QStringList() << file, true);
+void PictureViewer2::setFile(const PicData &file){
+ addFiles(PicDataList() << file, true);
showFile(mFiles.at(mCurPos));
}
@@ -81,8 +87,8 @@ void PictureViewer2::wheelEvent(QWheelEvent *event){
}
}
-void PictureViewer2::showFile(const QString file){
- QPixmap pixmap(file);
+void PictureViewer2::showFile(const PicData &file){
+ QPixmap pixmap(file.at(PicFilesModel::FullPath).toString());
if(pixmap.isNull()){
return;
}
diff --git a/pictureviewer2.h b/pictureviewer2.h
index 6c9035a..21e6454 100644
--- a/pictureviewer2.h
+++ b/pictureviewer2.h
@@ -9,18 +9,22 @@
#define PICTUREVIEWER2_H
#include <QGraphicsView>
-#include <QString>
+#include <QList>
+#include <QVariant>
class QGraphicsScene;
class QGraphicsPixmapItem;
class QWheelEvent;
+typedef QList<QVariant> PicData;
+typedef QList<QList<QVariant> > PicDataList;
+
class PictureViewer2 : public QGraphicsView {
Q_OBJECT
public:
explicit PictureViewer2(QWidget *parent = 0);
- void addFiles(const QStringList &files, bool clear = true);
- void setFile(const QString &file);
+ void addFiles(const PicDataList &files, bool clear = true);
+ void setFile(const PicData &file);
virtual QSize sizeHint() const;
public slots:
@@ -31,13 +35,13 @@ class PictureViewer2 : public QGraphicsView {
void wheelEvent(QWheelEvent *event);
private slots:
- void showFile(const QString file);
+ void showFile(const PicData &file);
private:
void setupDialog();
void setCurPalette(const QPixmap &pic);
void position();
- QStringList mFiles;
+ PicDataList mFiles;
QGraphicsScene *mScene;
QSize mMinimunSize;
QGraphicsPixmapItem *mCur;
diff --git a/shemov.cpp b/shemov.cpp
index abba97f..fb8f75f 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -602,26 +602,50 @@ void SheMov::createActions(){
connect(mSuggestFileA, SIGNAL(triggered()), mATree->filesWidget(), SLOT(suggest()));
mShowTreeGroup->addAction(mSuggestFileA);
- //picture widget actions
- mDeletePicFromA = new QAction(QIcon(":/huge_balls_pierced.png"), tr("Delete..."), this);
- mPicWidget->picView()->addAction(mDeletePicFromA);
- connect(mDeletePicFromA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(deletePics()));
- mEditPicsMappingsA = new QAction(QIcon(":/squirting_nipple.png"), tr("Edit mappings..."), this);
- mPicWidget->picView()->addAction(mEditPicsMappingsA);
- connect(mEditPicsMappingsA, SIGNAL(triggered()), mPicWidget->picView(), SIGNAL(editPicsMappings()));
- mRefreshPicsA = new QAction(QIcon(":/huge_bra.png"), tr("Refresh"), this);
- mPicWidget->picView()->addAction(mRefreshPicsA);
- connect(mRefreshPicsA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(refresh()));
- mTogglePicV2A = new QAction(QIcon(":/dick_in_cage.png"), tr("Show/Hide Picture Viewer"), this);
- mTogglePicV2A->setCheckable(true);
- connect(mTogglePicV2A, SIGNAL(toggled(bool)), mPicWidget, SLOT(showPicViewer(bool)));
- mTogglePicV2A->setChecked(false);
- mPicWidget->setPicViewerAction(mTogglePicV2A);
+ //picture widget
+ // delete + edit
+ mPWDeletePicFromA = new QAction(QIcon(":/huge_balls_pierced.png"), tr("Delete..."), this);
+ mPicWidget->picView()->addAction(mPWDeletePicFromA);
+ connect(mPWDeletePicFromA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(deletePics()));
+ mPWEditPicMappingsA = new QAction(QIcon(":/squirting_nipple.png"), tr("Edit mappings..."), this);
+ mPicWidget->picView()->addAction(mPWEditPicMappingsA);
+ connect(mPWEditPicMappingsA, SIGNAL(triggered()), mPicWidget->picView(), SIGNAL(editPicsMappings()));
+ QAction *pvSep1 = new QAction(this);
+ pvSep1->setSeparator(true);
+ mPicWidget->picView()->addAction(pvSep1);
+
+ // viewer actions
+ mPVToggleA = new QAction(QIcon(":/dick_in_cage.png"), tr("Show/Hide Picture Viewer"), this);
+ mPVToggleA->setCheckable(true);
+ connect(mPVToggleA, SIGNAL(toggled(bool)), mPicWidget, SLOT(showPicViewer(bool)));
+ mPVToggleA->setChecked(false);
+ mPicWidget->picView()->addAction(mPVToggleA);
+ QSignalMapper *PVAddMapper = new QSignalMapper(this);
+ mPVAddA = new QAction(QIcon(":/used_tampon.png"), tr("Add selected"), this);
+ connect(mPVAddA, SIGNAL(triggered()), PVAddMapper, SLOT(map()));
+ PVAddMapper->setMapping(mPVAddA, false);
+ mPicWidget->picView()->addAction(mPVAddA);
+ mPVReplaceA = new QAction(QIcon(":/clean_tampon.png"), tr("Replace with selected"), this);
+ connect(mPVReplaceA, SIGNAL(triggered()), PVAddMapper, SLOT(map()));
+ PVAddMapper->setMapping(mPVReplaceA, true);
+ mPicWidget->picView()->addAction(mPVReplaceA);
+ connect(PVAddMapper, SIGNAL(mapped(int)), mPicWidget->picView(), SLOT(setPVData(int)));
+ QAction *pvSep2 = new QAction(this);
+ pvSep2->setSeparator(true);
+ mPicWidget->picView()->addAction(pvSep2);
+
+ // refresh
+ mPWRefreshA = new QAction(QIcon(":/huge_bra.png"), tr("Refresh"), this);
+ mPicWidget->picView()->addAction(mPWRefreshA);
+ connect(mPWRefreshA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(refresh()));
+
+
+ mPicWidget->setPicViewerAction(mPVToggleA);
//don't add actions with checkable(true) unless you know what you're doing!
mPicActionGroup = new QActionGroup(this);
- mPicActionGroup->addAction(mDeletePicFromA);
- mPicActionGroup->addAction(mEditPicsMappingsA);
- mPicActionGroup->addAction(mRefreshPicsA);
+ mPicActionGroup->addAction(mPWDeletePicFromA);
+ mPicActionGroup->addAction(mPWEditPicMappingsA);
+ mPicActionGroup->addAction(mPWRefreshA);
// misc
mOpenWithMapperFS = new QSignalMapper(this);
@@ -695,8 +719,8 @@ void SheMov::createMenus(){
//Pictures edit menu
mEditPicMenu = new QMenu(tr("&Edit"), this);
- mEditPicMenu->addAction(mDeletePicFromA);
- mEditPicMenu->addAction(mEditPicsMappingsA);
+ mEditPicMenu->addAction(mPWDeletePicFromA);
+ mEditPicMenu->addAction(mPWEditPicMappingsA);
mEditPicMenuA = menuBar()->addMenu(mEditPicMenu);
//TreeView view menu
@@ -739,9 +763,11 @@ void SheMov::createMenus(){
//Pictures view menu
mPicViewMenu = new QMenu(tr("&View"), this);
- mPicViewMenu->addAction(mTogglePicV2A);
+ mPicViewMenu->addAction(mPVToggleA);
+ mPicViewMenu->addAction(mPVAddA);
+ mPicViewMenu->addAction(mPVReplaceA);
mPicViewMenu->addSeparator();
- mPicViewMenu->addAction(mRefreshPicsA);
+ mPicViewMenu->addAction(mPWRefreshA);
mViewPicMenuA = menuBar()->addMenu(mPicViewMenu);
QMenu *helpMenu = new QMenu(tr("&Help"), this);
@@ -921,7 +947,7 @@ void SheMov::createToolBar(){
toolBar->addAction(mFilterFavoritesA);
toolBar->addSeparator();
toolBar->addActions(mPicActionGroup->actions());
- toolBar->addAction(mTogglePicV2A);
+ toolBar->addAction(mPVToggleA);
toolBar->addSeparator();
toolBar->addAction(mHoverPicsA);
toolBar->addAction(mHoverArchiveA);
diff --git a/shemov.h b/shemov.h
index e10cc7f..a80b341 100644
--- a/shemov.h
+++ b/shemov.h
@@ -167,10 +167,14 @@ class SheMov : public QMainWindow {
QActionGroup *mEditGroup;
//PictureWidget Actions
- QAction *mDeletePicFromA;
- QAction *mEditPicsMappingsA;
- QAction *mRefreshPicsA;
- QAction *mTogglePicV2A;
+ //PW = mPicWidget
+ //PV = pictureViewer
+ QAction *mPWDeletePicFromA;
+ QAction *mPWEditPicMappingsA;
+ QAction *mPWRefreshA;
+ QAction *mPVToggleA;
+ QAction *mPVAddA;
+ QAction *mPVReplaceA;
QActionGroup *mPicActionGroup;
//EndActions
diff --git a/shemov.qrc b/shemov.qrc
index fac3225..8939624 100644
--- a/shemov.qrc
+++ b/shemov.qrc
@@ -35,5 +35,7 @@
<file>squirting_nipple.png</file>
<file>picgone.png</file>
<file>dick_in_cage.png</file>
+ <file>clean_tampon.png</file>
+ <file>used_tampon.png</file>
</qresource>
</RCC>
diff --git a/smglobals.cpp b/smglobals.cpp
index 4a73d0b..54f352d 100644
--- a/smglobals.cpp
+++ b/smglobals.cpp
@@ -150,6 +150,8 @@ SmGlobals::SmGlobals() : mPictureViewer(0), mFrameCache(0){
mIcons.insert("Huge bra", ":/huge_bra.png");
mIcons.insert("Squirting nipple", ":/squirting_nipple.png");
mIcons.insert("Dick in a cage", ":/dick_in_cage.png");
+ mIcons.insert("Used tampon", ":/used_tampon.png");
+ mIcons.insert("Clean tampon", ":/clean_tampon.png");
mDvdSize = Q_INT64_C(4707319808) - 20 * 1024 *1024;
}
diff --git a/used_tampon.png b/used_tampon.png
new file mode 100644
index 0000000..73c318f
--- /dev/null
+++ b/used_tampon.png
Binary files differ