/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "pictureswidget.h" #include "picturelistview.h" #include "picfilesmodel.h" #include "mappingtreewidget.h" #include "smtreeitem.h" #include "helper.h" #include "hoverwindow.h" #include "mappingtreemodel.h" #include "delegates.h" #include "smglobals.h" PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent), mWindowTitleBase(tr("Picture archive")), mPicViewerA(0) { //setup gui QSplitter *splitter = new QSplitter; mMappingTree = new MappingTreeWidget; mPictureListView = new PictureListView; mPictureListView->setItemDelegateForColumn(PicFilesModel::Size, new SizeDelegate(this)); connect(mMappingTree, SIGNAL(mappingChanged(int)), mPictureListView, SLOT(mappingChanged(int))); //change window title when mapping selection changes connect(mMappingTree, SIGNAL(mappingChanged(int)), this, SLOT(constructWindowTitle())); connect(mPictureListView, SIGNAL(editPicsMappings()), this, SLOT(editMappings())); connect(mPictureListView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(showInPicViewer(QModelIndex))); connect(this, SIGNAL(editMappingsDone()), mPictureListView, SLOT(refresh())); splitter->addWidget(mMappingTree); splitter->addWidget(mPictureListView); splitter->setStretchFactor(0, 1); splitter->setStretchFactor(1, 3); //misc mEditDialog = new MappingEditDialog(this); mPicViewer = SmGlobals::instance()->pictureViewer(); mPictureListView->setPV(mPicViewer); //put it all togehter QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addWidget(splitter); setLayout(mainLayout); } void PicturesWidget::showPicViewer(bool toggled){ mPicViewer->setVisible(toggled); } void PicturesWidget::writeSettings(){ QSettings s; MappingData selected = mMappingTree->selectedItem(); if(selected.isValid()){ QStringList v; for(int i = 0; i< selected.parents.count(); ++i){ v << QString::number(selected.parents.at(i)); } s.setValue("ui/selectedmapping", v.join(",")); } mPictureListView->writeHeaderConfig(); } void PicturesWidget::readSettings(){ QSettings s; QStringList ps = s.value("ui/selectedmapping").toString().split(","); QList path; for(int i = 0; i < ps.count(); ++i){ path << ps.at(i).toInt(); } mPictureListView->readHeaderConfig(); } void PicturesWidget::editMappings(){ QModelIndexList selectedFids = mPictureListView->selectionModel()->selectedRows(PicFilesModel::Id); QList fileIds; foreach(QModelIndex idx, selectedFids){ fileIds << idx.data().toInt(); } QList mappings = mPictureListView->filesModel()->mappingDataFromFiles(fileIds); mEditDialog->editWidget()->setMappings(mappings); int retval = mEditDialog->exec(); if(retval == QDialog::Accepted){ QList selMappings = mEditDialog->editWidget()->model()->columnValues(MappingTreeResultModel::MappingId); if(selMappings.isEmpty()){ QMessageBox::critical(this, tr("Error"), tr("No mappings selected! Cowardly bailing out.")); return; } QModelIndexList selectedFids = mPictureListView->selectionModel()->selectedRows(PicFilesModel::Id); QList fileIds; foreach(QModelIndex idx, selectedFids){ fileIds << idx.data().toInt(); } mPictureListView->filesModel()->changeMappings(fileIds, selMappings); } emit editMappingsDone(); } void PicturesWidget::constructWindowTitle(){ QString windowTitle = mWindowTitleBase; MappingData selected = mMappingTree->selectedItem(); if(!selected.path.isEmpty()){ windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.join("/")); mPictureListView->setHoverWinVisible(false); } emit needWindowTitleChange(windowTitle); } void PicturesWidget::showInPicViewer(const QModelIndex &idx){ QModelIndex real = mPictureListView->proxy()->mapToSource(idx); if(!real.isValid()){ return; } PicData pData = mPictureListView->filesModel()->dataList(real); mPicViewer->setShowInfoItem(true); mPicViewer->setShowMappingItem(true); mPicViewer->setShowMarkItem(false); mPicViewer->setFile(pData); mPictureListView->setPVAll(); if(mPicViewerA){ mPicViewerA->setChecked(true); } }