summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivecontroller.cpp14
-rw-r--r--filesystemwidget.cpp1
-rw-r--r--pictureswidget.cpp1
-rw-r--r--pictureviewer2.cpp79
-rw-r--r--pictureviewer2.h13
-rw-r--r--shemov.cpp12
-rw-r--r--shemov.h2
7 files changed, 108 insertions, 14 deletions
diff --git a/archivecontroller.cpp b/archivecontroller.cpp
index 84e714c..574b9c1 100644
--- a/archivecontroller.cpp
+++ b/archivecontroller.cpp
@@ -311,7 +311,19 @@ void ArchiveController::fileDoubleClicked(const QModelIndex &idx){
return;
}
PictureViewer2 *pv = SmGlobals::instance()->pictureViewer();
- pv->setFile(idx.data(ArchiveFilesModel::FullPathRole).toString());
+ QModelIndex parent = idx.parent();
+ QStringList paths;
+ if(parent.isValid()){
+ int row = 0;
+ QModelIndex child = parent.child(row, ArchiveFilesModel::FullPath);
+ while(child.isValid()){
+ paths << child.data().toString();
+ ++row;
+ child = parent.child(row, ArchiveFilesModel::FullPath);
+ }
+ }
+ pv->setShowMarkItem(false);
+ pv->addFiles(paths);
pv->show();
}
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index 71dfa68..3f550a4 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -211,6 +211,7 @@ void FilesystemWidget::fileViewActivated(const QModelIndex &idx){
mPicViewer->setVisible(true);
}
mPicViewer->setShowMappingItem(false);
+ mPicViewer->setShowMarkItem(true);
selectAllPV();
mPicViewer->selectPic(path);
return;
diff --git a/pictureswidget.cpp b/pictureswidget.cpp
index c93f72e..d043e1c 100644
--- a/pictureswidget.cpp
+++ b/pictureswidget.cpp
@@ -124,6 +124,7 @@ void PicturesWidget::showInPicViewer(const QModelIndex &idx){
PicData pData = mPictureView->filesModel()->dataList(real);
mPicViewer->setShowInfoItem(true);
mPicViewer->setShowMappingItem(true);
+ mPicViewer->setShowMarkItem(false);
mPicViewer->setFile(pData);
mPictureView->setPVAll();
if(mPicViewerA){
diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp
index 1251c6f..cc7357f 100644
--- a/pictureviewer2.cpp
+++ b/pictureviewer2.cpp
@@ -41,7 +41,7 @@
const QString PictureViewer2::mDefaultFile = ":/picgone.png";
-PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mFnItem(0), mMappingItem(0), mShowInfoItem(true), mShowMappingItem(true) {
+PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mFnItem(0), mMappingItem(0), mShowInfoItem(true), mShowMappingItem(true), mShowMarkItem(false) {
//behave like QDialog, but don't be one...
setWindowFlags(QFlags<Qt::WindowType>(0x1|0x2|0x1000|0x2000|0x10000|0x8000000));
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -81,7 +81,6 @@ void PictureViewer2::addFiles(const PicDataList &files, bool clear){
QVariant curMd5 = mFiles.at(mCurPos).at(PicFilesModel::Md5Sum);
if(clear){
mFiles = files;
-
}else{
foreach(const PicData &f, files){
if(!mFiles.contains(f)){
@@ -103,6 +102,17 @@ void PictureViewer2::addFiles(const PicDataList &files, bool clear){
}
}
+void PictureViewer2::addFiles(const QStringList &files, bool clear){
+ if(files.isEmpty()){
+ return;
+ }
+ PicDataList pd;
+ foreach(QString f, files){
+ pd << picData(f);
+ }
+ addFiles(pd, clear);
+}
+
void PictureViewer2::addFiles(const QString &dir, bool clear){
QFileInfo fi(dir);
if(!fi.isDir()){
@@ -165,6 +175,7 @@ void PictureViewer2::next(){
}else{
++mCurPos;
}
+ mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos)));
showFile(mFiles.at(mCurPos));
}
@@ -174,6 +185,7 @@ void PictureViewer2::previous(){
}else{
--mCurPos;
}
+ mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos)));
showFile(mFiles.at(mCurPos));
}
@@ -238,6 +250,9 @@ void PictureViewer2::initActions(){
if(a->data().toInt() == SlideAction){
mSlideA = a;
}
+ if(a->data().toInt() == MarkAction){
+ mMarkA = a;
+ }
}
}
@@ -267,6 +282,23 @@ void PictureViewer2::addToNewPics(){
mNewPicsDlg->setFile(mCurPicData.at(PicFilesModel::FullPath).toString());
}
+void PictureViewer2::markCurrent(){
+ if(!mMarkedFiles.contains(mCurPicData)){
+ mMarkedFiles << mCurPicData;
+ mMarkA->setChecked(true);
+ next();
+ }else{
+ mMarkedFiles.removeAll(mCurPicData);
+ mMarkA->setChecked(false);
+ }
+ constructInfoItem(mCurPicData, QSize());
+}
+
+void PictureViewer2::clearMarks(){
+ mMarkedFiles.clear();
+ constructInfoItem(mCurPicData, QSize());
+}
+
void PictureViewer2::wheelEvent(QWheelEvent *event){
int steps = event->delta() / 8 / 15;
if(steps < 0){
@@ -291,6 +323,15 @@ void PictureViewer2::keyPressEvent(QKeyEvent *e){
if(e->key() == Qt::Key_Space){
mSlideA->toggle();
}
+ if(e->key() == Qt::Key_M){
+ markCurrent();
+ }
+ if(e->key() == Qt::Key_N){
+ next();
+ }
+ if(e->key() == Qt::Key_P){
+ previous();
+ }
e->accept();
}
@@ -361,7 +402,18 @@ void PictureViewer2::constructInfoItem(const PicData &data, QSize picSize){
mScene->removeItem(mFnItem);
delete mFnItem;
}
+ if(!picSize.isValid()){
+ QPixmap pm = QPixmap(data.at(PicFilesModel::FullPath).toString());
+ picSize = pm.size();
+ }
mFnItem = new PictureViewer2Item(data, mFiles.size(), picSize);
+ if(mShowMarkItem){
+ if(mMarkedFiles.contains(data)){
+ mFnItem->appendText("<span style=\"color:green\">marked</span>");
+ }else{
+ mFnItem->appendText("<span style=\"color:red\">not marked</span>");
+ }
+ }
mFnItem->setPos(getPos(mFnItem, mConfigInfoPos, mInfoPos));
mScene->addItem(mFnItem);
}
@@ -468,14 +520,13 @@ PictureViewer2Item::PictureViewer2Item(const PicData &data, const int numSelecte
QStringList textList;
//prevent QStaticText from wrapping filesnames with spaces
//we shouldn't allow this in the first place
- textList << data.at(PicFilesModel::FileName).toString().replace(' ', '_');
- textList << QString("%1x%2").arg(QString::number(picSize.width())).arg(QString::number(picSize.height()));
+ mTextList << data.at(PicFilesModel::FileName).toString().replace(' ', '_');
+ mTextList << QString("%1x%2").arg(QString::number(picSize.width())).arg(QString::number(picSize.height()));
QLocale l;
- textList << QString(QObject::tr("%1 bytes")).arg(l.toString(data.at(PicFilesModel::Size).toInt()));
- textList << l.toString(data.at(PicFilesModel::Added).toDate());
- textList << data.at(PicFilesModel::MimeType).toString();
- textList << QString(QObject::tr("%1 files selected")).arg(QString::number(numSelected));
- mText = QStaticText(textList.join("<br/>"));
+ mTextList << QString(QObject::tr("%1 bytes")).arg(l.toString(data.at(PicFilesModel::Size).toInt()));
+ mTextList << l.toString(data.at(PicFilesModel::Added).toDate());
+ mTextList << data.at(PicFilesModel::MimeType).toString();
+ mTextList << QString(QObject::tr("%1 files selected")).arg(QString::number(numSelected));
setZValue(1);
}
@@ -492,7 +543,8 @@ QRectF PictureViewer2Item::boundingRect() const {
if(mDoc){
size = mDoc->size();
}else{
- size = mText.size();
+ QStaticText text = QStaticText(mTextList.join("<br/>"));
+ size = text.size();
size += QSize(10, 10);
}
QRectF retval;
@@ -501,6 +553,10 @@ QRectF PictureViewer2Item::boundingRect() const {
return retval;
}
+void PictureViewer2Item::appendText(const QString &text){
+ mTextList << text;
+}
+
void PictureViewer2Item::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
Q_UNUSED(option);
Q_UNUSED(widget);
@@ -518,7 +574,8 @@ void PictureViewer2Item::paint(QPainter *painter, const QStyleOptionGraphicsItem
if(mDoc){
mDoc->drawContents(painter);
}else{
- painter->drawStaticText(5, 5, mText);
+ QStaticText text = QStaticText(mTextList.join("<br/>"));
+ painter->drawStaticText(5, 5, text);
}
painter->restore();
}
diff --git a/pictureviewer2.h b/pictureviewer2.h
index 622397a..2e879d1 100644
--- a/pictureviewer2.h
+++ b/pictureviewer2.h
@@ -34,15 +34,18 @@ typedef QList<QList<QVariant> > PicDataList;
class PictureViewer2 : public QGraphicsView {
Q_OBJECT
public:
- enum AssocActions { SlideAction, HideAction };
+ enum AssocActions { SlideAction, HideAction, MarkAction };
explicit PictureViewer2(QWidget *parent = 0);
void addFiles(const PicDataList &files, bool clear = true);
void addFiles(const QString &dir, bool clear = true);
+ void addFiles(const QStringList &files, bool clear = true);
void setFile(const PicData &file);
void setFile(QString fullPath = mDefaultFile);
void setPixmap(const QPixmap &pm);
void setShowInfoItem(bool show) { mShowInfoItem = show; }
void setShowMappingItem(bool show) { mShowMappingItem = show; }
+ void setShowMarkItem(bool show) { mShowMarkItem = show; }
+ const PicDataList marked() { return mMarkedFiles; }
PicData picData(const QString &fullPath);
virtual QSize sizeHint() const;
@@ -58,6 +61,8 @@ class PictureViewer2 : public QGraphicsView {
void copyCurrent();
void showNewPicsDialog();
void addToNewPics();
+ void markCurrent();
+ void clearMarks();
protected:
virtual void wheelEvent(QWheelEvent *event);
@@ -79,6 +84,7 @@ class PictureViewer2 : public QGraphicsView {
QPointF getPos(PictureViewer2Item *item, int pos, const QPointF &movPos);
QString constructWindowTitle() const;
PicDataList mFiles;
+ PicDataList mMarkedFiles;
QGraphicsScene *mScene;
QSize mSize;
QGraphicsPixmapItem *mCur;
@@ -95,12 +101,14 @@ class PictureViewer2 : public QGraphicsView {
QPointF mMappingPos;
QAction *mSlideA;
QAction *mHideA;
+ QAction *mMarkA;
MappingTreeModel *mMappingTreeModel;
PicFilesModel *mPicFilesModel;
PicData mCurPicData;
NewPicsDialog *mNewPicsDlg;
bool mShowInfoItem;
bool mShowMappingItem;
+ bool mShowMarkItem;
};
class PictureViewer2Item : public QGraphicsItem {
@@ -109,10 +117,11 @@ class PictureViewer2Item : public QGraphicsItem {
explicit PictureViewer2Item(QTextDocument *doc, QGraphicsItem *parent = 0);
~PictureViewer2Item();
QRectF boundingRect() const;
+ void appendText(const QString &text);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private:
- QStaticText mText;
+ QStringList mTextList;
QTextDocument *mDoc;
};
diff --git a/shemov.cpp b/shemov.cpp
index 5289291..ac32419 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -518,6 +518,18 @@ void SheMov::createActions(){
mPVSelectAllA = new QAction(QIcon(":/blue_syringe.png"), tr("Select all pics"), this);
picViewer->addAction(mPVSelectAllA);
+ // PictureViewer mark Action
+ picViewer->addAction(createSeparator());
+ mPVMarkA = new QAction(QIcon(":/higheels.png"), tr("(Un-)Mark"), this);
+ mPVMarkA->setCheckable(true);
+ mPVMarkA->setData(PictureViewer2::MarkAction);
+ connect(mPVMarkA, SIGNAL(triggered()), picViewer, SLOT(markCurrent()));
+ picViewer->addAction(mPVMarkA);
+ mPVClearMarksA = new QAction(tr("Clear marks"), this);
+ connect(mPVClearMarksA, SIGNAL(triggered()), picViewer, SLOT(clearMarks()));
+ picViewer->addAction(mPVClearMarksA);
+ picViewer->addAction(createSeparator());
+
// Slide
mPVSlideA = new QAction(QIcon(":/chastity_belt_with_cuffs.png"), tr("Slide"), this);
mPVSlideA->setCheckable(true);
diff --git a/shemov.h b/shemov.h
index 9dd466a..5c8ee08 100644
--- a/shemov.h
+++ b/shemov.h
@@ -122,6 +122,8 @@ class SheMov : public QMainWindow {
QAction *mPWRefreshA;
QAction *mPVToggleA;
QAction *mPVAddA;
+ QAction *mPVMarkA;
+ QAction *mPVClearMarksA;
QAction *mPVReplaceA;
QAction *mPVSelectAllA;
QAction *mPVSlideA;