Author: jghali
Date: Wed Jun  6 10:27:16 2018
New Revision: 22577

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22577
Log:
#15349: Image Manager: show images in the file manager <ale> (+some refactoring)

Modified:
    trunk/Scribus/scribus/ui/picstatus.cpp
    trunk/Scribus/scribus/ui/picstatus.h
    trunk/Scribus/scribus/ui/picstatus.ui

Modified: trunk/Scribus/scribus/ui/picstatus.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22577&path=/trunk/Scribus/scribus/ui/picstatus.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/picstatus.cpp      (original)
+++ trunk/Scribus/scribus/ui/picstatus.cpp      Wed Jun  6 10:27:16 2018
@@ -22,17 +22,20 @@
  ***************************************************************************/
 #include "picstatus.h"
 
+#include <QAction>
+#include <QCheckBox>
+#include <QDesktopServices>
+#include <QFileInfo>
+#include <QLabel>
 #include <QListWidget>
+#include <QMenu>
+#include <QMessageBox>
+#include <QPainter>
+#include <QPixmap>
 #include <QPushButton>
+#include <QScopedPointer>
 #include <QToolButton>
-#include <QLabel>
-#include <QCheckBox>
-#include <QMessageBox>
-#include <QPixmap>
-#include <QFileInfo>
-#include <QPainter>
-#include <QAction>
-#include <QMenu>
+
 #include <cstdio>
 
 #include "commonstrings.h"
@@ -75,6 +78,7 @@
        connect(goPageButton, SIGNAL(clicked()), this, SLOT(GotoPic()));
        connect(selectButton, SIGNAL(clicked()), this, SLOT(SelectPic()));
        connect(searchButton, SIGNAL(clicked()), this, SLOT(SearchPic()));
+       connect(fileManagerButton, SIGNAL(clicked()), this, 
SLOT(FileManager()));
        connect(effectsButton, SIGNAL(clicked()), this, SLOT(doImageEffects()));
        connect(buttonLayers, SIGNAL(clicked()), this, SLOT(doImageExtProp()));
        connect(buttonEdit, SIGNAL(clicked()), this, SLOT(doEditImage()));
@@ -111,6 +115,19 @@
        p.drawRect(12, 12, 104, 104);
        p.end();
        return pm;
+}
+
+void PicStatus::enableWidgets(bool enabled)
+{
+       isPrinting->setEnabled(enabled);
+       isVisibleCheck->setEnabled(enabled);
+       goPageButton->setEnabled(enabled);
+       selectButton->setEnabled(enabled);
+       searchButton->setEnabled(enabled);
+       fileManagerButton->setEnabled(enabled);
+       effectsButton->setEnabled(enabled);
+       buttonLayers->setEnabled(enabled);
+       buttonEdit->setEnabled(enabled);
 }
 
 void PicStatus::fillTable()
@@ -186,30 +203,32 @@
 {
        QListWidgetItem *firstItem = 0;
        QMap<QString, PicItem*> sorted;
+
        int num = imageViewArea->count();
-       if (num != 0)
-       {
-               firstItem = imageViewArea->currentItem();
-               for (int a = num-1; a > -1; --a)
-               {
-                       QListWidgetItem *ite = imageViewArea->takeItem(a);
-                       PicItem *item = (PicItem*)ite;
-                       QFileInfo fi = QFileInfo(item->PageItemObject->Pfile);
-                       sorted.insertMulti(fi.fileName(), item);
-               }
-               int counter = 0;
-               foreach (const QString& i, sorted.uniqueKeys())
-               {
-                       foreach (PicItem* val, sorted.values(i))
-                       {
-                               imageViewArea->insertItem(counter, val);
-                               counter++;
-                       }
-               }
-               imageViewArea->setCurrentItem(firstItem);
-               imageSelected(firstItem);
-               sortOrder = 0;
-       }
+       if (num == 0)
+               return;
+
+       firstItem = imageViewArea->currentItem();
+       for (int a = num-1; a > -1; --a)
+       {
+               QListWidgetItem *ite = imageViewArea->takeItem(a);
+               PicItem *item = (PicItem*)ite;
+               QFileInfo fi = QFileInfo(item->PageItemObject->Pfile);
+               sorted.insertMulti(fi.fileName(), item);
+       }
+
+       int counter = 0;
+       foreach (const QString& i, sorted.uniqueKeys())
+       {
+               foreach (PicItem* val, sorted.values(i))
+               {
+                       imageViewArea->insertItem(counter, val);
+                       counter++;
+               }
+       }
+       imageViewArea->setCurrentItem(firstItem);
+       imageSelected(firstItem);
+       sortOrder = 0;
 }
 
 void PicStatus::sortByPage()
@@ -267,114 +286,119 @@
 
 void PicStatus::imageSelected(QListWidgetItem *ite)
 {
-       if (ite != nullptr)
-       {
-               PicItem *item = (PicItem*)ite;
-               currItem = item->PageItemObject;
-               if (!currItem->OnMasterPage.isEmpty())
-                       displayPage->setText(currItem->OnMasterPage);
+       if (ite == nullptr)
+       {
+               currItem = nullptr;
+               enableWidgets(false);
+               return;
+       }
+
+       enableWidgets(true);
+
+       PicItem *item = (PicItem*) ite;
+       currItem = item->PageItemObject;
+       if (!currItem->OnMasterPage.isEmpty())
+               displayPage->setText(currItem->OnMasterPage);
+       else
+       {
+               if (currItem->OwnPage == -1)
+                       displayPage->setText(  tr("Not on a Page"));
                else
-               {
-                       if (currItem->OwnPage == -1)
-                               displayPage->setText(  tr("Not on a Page"));
-                       else
-                               
displayPage->setText(QString::number(currItem->OwnPage + 1));
-               }
-               displayObjekt->setText(currItem->itemName());
-               if (currItem->imageIsAvailable)
+                       displayPage->setText(QString::number(currItem->OwnPage 
+ 1));
+       }
+       displayObjekt->setText(currItem->itemName());
+       if (currItem->imageIsAvailable)
+       {
+               QFileInfo fi = QFileInfo(currItem->Pfile);
+               QString ext = fi.suffix().toLower();
+               if (currItem->isInlineImage)
+               {
+                       displayName->setText( tr("Embedded Image"));
+                       displayPath->setText("");
+                       searchButton->setEnabled(false);
+                       fileManagerButton->setEnabled(false);
+               }
+               else
+               {
+                       displayName->setText(fi.fileName());
+                       
displayPath->setText(QDir::toNativeSeparators(fi.path()));
+                       searchButton->setEnabled(true);
+                       fileManagerButton->setEnabled(true);
+               }
+               QString format = "";
+               switch (currItem->pixm.imgInfo.type)
+               {
+                       case 0:
+                               format = tr("JPG");
+                               break;
+                       case 1:
+                               format = tr("TIFF");
+                               break;
+                       case 2:
+                               format = tr("PSD");
+                               break;
+                       case 3:
+                               format = tr("EPS/PS");
+                               break;
+                       case 4:
+                               format = tr("PDF");
+                               break;
+                       case 5:
+                               format = tr("JPG2000");
+                               break;
+                       case 6:
+                               format = ext.toUpper();
+                               break;
+                       case 7:
+                               format = tr("emb. PSD");
+                               break;
+               }
+               displayFormat->setText(format);
+               QString cSpace;
+               if ((extensionIndicatesPDF(ext) || 
extensionIndicatesEPSorPS(ext)) && (currItem->pixm.imgInfo.type != ImageType7))
+                       cSpace = tr("Unknown");
+               else
+                       
cSpace=colorSpaceText(currItem->pixm.imgInfo.colorspace);
+               displayColorspace->setText(cSpace);
+               displayDPI->setText(QString("%1 x 
%2").arg(currItem->pixm.imgInfo.xres).arg(currItem->pixm.imgInfo.yres));
+               displayEffDPI->setText(QString("%1 x %2").arg(qRound(72.0 / 
currItem->imageXScale())).arg(qRound(72.0 / currItem->imageYScale())));
+               displaySizePixel->setText(QString("%1 x 
%2").arg(currItem->OrigW).arg(currItem->OrigH));
+               displayScale->setText(QString("%1 x %2 
%").arg(currItem->imageXScale() * 100 / 72.0 * currItem->pixm.imgInfo.xres, 5, 
'f', 1).arg(currItem->imageYScale() * 100 / 72.0 * currItem->pixm.imgInfo.yres, 
5, 'f', 1));
+               displayPrintSize->setText(QString("%1 x 
%2%3").arg(currItem->OrigW * currItem->imageXScale() * m_Doc->unitRatio(), 7, 
'f', 2).arg(currItem->OrigH * currItem->imageXScale() * m_Doc->unitRatio(), 7, 
'f', 2).arg(unitGetSuffixFromIndex(m_Doc->unitIndex())));
+               isPrinting->setChecked(currItem->printEnabled());
+               isVisibleCheck->setChecked(currItem->imageVisible());
+               buttonEdit->setEnabled(currItem->isRaster);
+               effectsButton->setEnabled(currItem->isRaster);
+               buttonLayers->setEnabled(currItem->pixm.imgInfo.valid);
+       }
+       else
+       {
+               QString trNA = tr("n/a");
+               if (!currItem->Pfile.isEmpty())
                {
                        QFileInfo fi = QFileInfo(currItem->Pfile);
-                       QString ext = fi.suffix().toLower();
-                       if (currItem->isInlineImage)
-                       {
-                               displayName->setText( tr("Embedded Image"));
-                               displayPath->setText("");
-                               searchButton->setEnabled(false);
-                       }
-                       else
-                       {
-                               displayName->setText(fi.fileName());
-                               
displayPath->setText(QDir::toNativeSeparators(fi.path()));
-                               searchButton->setEnabled(true);
-                       }
-                       QString format = "";
-                       switch (currItem->pixm.imgInfo.type)
-                       {
-                               case 0:
-                                       format = tr("JPG");
-                                       break;
-                               case 1:
-                                       format = tr("TIFF");
-                                       break;
-                               case 2:
-                                       format = tr("PSD");
-                                       break;
-                               case 3:
-                                       format = tr("EPS/PS");
-                                       break;
-                               case 4:
-                                       format = tr("PDF");
-                                       break;
-                               case 5:
-                                       format = tr("JPG2000");
-                                       break;
-                               case 6:
-                                       format = ext.toUpper();
-                                       break;
-                               case 7:
-                                       format = tr("emb. PSD");
-                                       break;
-                       }
-                       displayFormat->setText(format);
-                       QString cSpace;
-                       if ((extensionIndicatesPDF(ext) || 
extensionIndicatesEPSorPS(ext)) && (currItem->pixm.imgInfo.type != ImageType7))
-                               cSpace = tr("Unknown");
-                       else
-                               
cSpace=colorSpaceText(currItem->pixm.imgInfo.colorspace);
-                       displayColorspace->setText(cSpace);
-                       displayDPI->setText(QString("%1 x 
%2").arg(currItem->pixm.imgInfo.xres).arg(currItem->pixm.imgInfo.yres));
-                       displayEffDPI->setText(QString("%1 x 
%2").arg(qRound(72.0 / currItem->imageXScale())).arg(qRound(72.0 / 
currItem->imageYScale())));
-                       displaySizePixel->setText(QString("%1 x 
%2").arg(currItem->OrigW).arg(currItem->OrigH));
-                       displayScale->setText(QString("%1 x %2 
%").arg(currItem->imageXScale() * 100 / 72.0 * currItem->pixm.imgInfo.xres, 5, 
'f', 1).arg(currItem->imageYScale() * 100 / 72.0 * currItem->pixm.imgInfo.yres, 
5, 'f', 1));
-                       displayPrintSize->setText(QString("%1 x 
%2%3").arg(currItem->OrigW * currItem->imageXScale() * m_Doc->unitRatio(), 7, 
'f', 2).arg(currItem->OrigH * currItem->imageXScale() * m_Doc->unitRatio(), 7, 
'f', 2).arg(unitGetSuffixFromIndex(m_Doc->unitIndex())));
-                       isPrinting->setChecked(currItem->printEnabled());
-                       isVisibleCheck->setChecked(currItem->imageVisible());
-                       buttonEdit->setEnabled(currItem->isRaster);
-                       effectsButton->setEnabled(currItem->isRaster);
-                       buttonLayers->setEnabled(currItem->pixm.imgInfo.valid);
+                       displayName->setText(fi.fileName());
+                       
displayPath->setText(QDir::toNativeSeparators(fi.path()));
+                       searchButton->setEnabled(true);
+                       fileManagerButton->setEnabled(true);
                }
                else
                {
-                       QString trNA = tr("n/a");
-                       if (!currItem->Pfile.isEmpty())
-                       {
-                               QFileInfo fi = QFileInfo(currItem->Pfile);
-                               displayName->setText(fi.fileName());
-                               
displayPath->setText(QDir::toNativeSeparators(fi.path()));
-                               searchButton->setEnabled(true);
-                       }
-                       else
-                       {
-                               displayName->setText(trNA);
-                               displayPath->setText(trNA);
-                               searchButton->setEnabled(false);
-                       }
-                       displayFormat->setText(trNA);
-                       displayColorspace->setText(trNA);
-                       displayDPI->setText(trNA);
-                       displayEffDPI->setText(trNA);
-                       displaySizePixel->setText(trNA);
-                       displayScale->setText(trNA);
-                       displayPrintSize->setText(trNA);
-                       buttonEdit->setEnabled(false);
-                       effectsButton->setEnabled(false);
-                       buttonLayers->setEnabled(false);
-               }
-       }
-       else
-       {
-               currItem = nullptr;
-               imageViewArea->clearSelection();
+                       displayName->setText(trNA);
+                       displayPath->setText(trNA);
+                       searchButton->setEnabled(false);
+                       fileManagerButton->setEnabled(false);
+               }
+               displayFormat->setText(trNA);
+               displayColorspace->setText(trNA);
+               displayDPI->setText(trNA);
+               displayEffDPI->setText(trNA);
+               displaySizePixel->setText(trNA);
+               displayScale->setText(trNA);
+               displayPrintSize->setText(trNA);
+               buttonEdit->setEnabled(false);
+               effectsButton->setEnabled(false);
+               buttonLayers->setEnabled(false);
        }
 }
 
@@ -444,33 +468,41 @@
 
        if (lastSearchPath.isEmpty())
                lastSearchPath = displayPath->text();
-       PicSearchOptions *dia = new PicSearchOptions(this, displayName->text(), 
lastSearchPath);
-       if (dia->exec())
-       {
-               lastSearchPath = dia->getLastDirSearched();
-               if (dia->getMatches().count() == 0)
-               {
-                       ScMessageBox::information(this, tr("Scribus - Image 
Search"), tr("No images named \"%1\" were found.").arg(dia->getFileName()),
-                                       
QMessageBox::Ok|QMessageBox::Default|QMessageBox::Escape,
-                                       QMessageBox::NoButton);
-               }
-               else
-               {
-                       PicSearch *dia2 = new PicSearch(this, 
dia->getFileName(), dia->getMatches());
-                       if (dia2->exec())
-                       {
-                               Q_ASSERT(!dia2->currentImage.isEmpty());
-                               loadPict(dia2->currentImage);
-                               refreshItem(currItem);
-                               QFileInfo fi = QFileInfo(currItem->Pfile);
-                               
imageViewArea->currentItem()->setText(fi.fileName());
-                               
imageViewArea->currentItem()->setIcon(createImgIcon(currItem));
-                               imageSelected(imageViewArea->currentItem());
-                       }
-                       delete dia2;
-               }
-       }
-       delete dia;
+
+       QScopedPointer<PicSearchOptions> dia(new PicSearchOptions(this, 
displayName->text(), lastSearchPath));
+       if (dia->exec() != QDialog::Accepted)
+               return;
+
+       lastSearchPath = dia->getLastDirSearched();
+       if (dia->getMatches().count() == 0)
+       {
+               ScMessageBox::information(this, tr("Scribus - Image Search"), 
tr("No images named \"%1\" were found.").arg(dia->getFileName()),
+                               
QMessageBox::Ok|QMessageBox::Default|QMessageBox::Escape,
+                               QMessageBox::NoButton);
+               return;
+       }
+
+       QScopedPointer<PicSearch> dia2(new PicSearch(this, dia->getFileName(), 
dia->getMatches()));
+       if (dia2->exec() != QDialog::Accepted)
+               return;
+       Q_ASSERT(!dia2->currentImage.isEmpty());
+       loadPict(dia2->currentImage);
+       refreshItem(currItem);
+       QFileInfo fi = QFileInfo(currItem->Pfile);
+       imageViewArea->currentItem()->setText(fi.fileName());
+       imageViewArea->currentItem()->setIcon(createImgIcon(currItem));
+       imageSelected(imageViewArea->currentItem());
+}
+
+void PicStatus::FileManager()
+{
+       if (currItem == nullptr)
+               return;
+       QFileInfo fi = QFileInfo(currItem->Pfile);
+       QString path = fi.canonicalPath();
+       if (path.isEmpty())
+               return;
+       QDesktopServices::openUrl(QUrl::fromLocalFile(path));
 }
 
 void PicStatus::doImageEffects()
@@ -491,10 +523,12 @@
 
 void PicStatus::doImageExtProp()
 {
-       if (currItem != nullptr)
-       {
-               ExtImageProps dia(this, &currItem->pixm.imgInfo, currItem, 
m_Doc->view());
-               dia.exec();
+       if (currItem == nullptr)
+               return;
+
+       ExtImageProps dia(this, &currItem->pixm.imgInfo, currItem, 
m_Doc->view());
+       if (dia.exec())
+       {
                loadPict(currItem->Pfile);
                refreshItem(currItem);
                imageViewArea->currentItem()->setIcon(createImgIcon(currItem));

Modified: trunk/Scribus/scribus/ui/picstatus.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22577&path=/trunk/Scribus/scribus/ui/picstatus.h
==============================================================================
--- trunk/Scribus/scribus/ui/picstatus.h        (original)
+++ trunk/Scribus/scribus/ui/picstatus.h        Wed Jun  6 10:27:16 2018
@@ -79,6 +79,7 @@
        \brief Searches for the given Picture. Displays a Dialog when more than 
one Picture is found.
        */
        void SearchPic();
+       void FileManager();
        void doImageEffects();
        void doImageExtProp();
        void doEditImage();
@@ -90,6 +91,9 @@
        void refreshItem(PageItem*);
 
 protected:
+       /*! \brief Enable widgets depending on currently selected item */
+       void enableWidgets(bool enabled);
+
        /*! \brief Load the image specified into the PageItem
        \param newFilePath a file path */
        bool loadPict(const QString & newFilePath);

Modified: trunk/Scribus/scribus/ui/picstatus.ui
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22577&path=/trunk/Scribus/scribus/ui/picstatus.ui
==============================================================================
--- trunk/Scribus/scribus/ui/picstatus.ui       (original)
+++ trunk/Scribus/scribus/ui/picstatus.ui       Wed Jun  6 10:27:16 2018
@@ -189,6 +189,22 @@
            </property>
            <property name="text">
             <string>Search...</string>
+           </property>
+           <property name="autoDefault">
+            <bool>false</bool>
+           </property>
+           <property name="flat">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="fileManagerButton">
+           <property name="toolTip">
+            <string>Show Image in the File Manager</string>
+           </property>
+           <property name="text">
+            <string>Show directory...</string>
            </property>
            <property name="autoDefault">
             <bool>false</bool>


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to