Bug 121308

Summary: Mass storage and PTP usability
Product: [Applications] digikam Reporter: Julien Narboux <Julien>
Component: Import-UMSAssignee: Digikam Developers <digikam-bugs-null>
Status: RESOLVED FIXED    
Severity: wishlist CC: caulier.gilles, Matthieu.Moy
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In: 0.9.0
Sentry Crash Report:

Description Julien Narboux 2006-02-03 19:40:21 UTC
Version:            (using KDE Devel)
Installed from:    Compiled sources

Even if I know that a camera uses mass storage i find it hard to find in 
the big list of supported cameras.

- A first solution could be to put USB mass storage and PTP class at the 
beginning of the list
- A second solution would be to remove USB mass storage and PTP class 
from the list and create a three choices widget, perhaps something like 
that :
  - 1 - My camera behaves like a removable drive
  - 2 - My camera uses the PTP protocol
  - 3 - My camera is in this list :
- A third solution would be to put usb mass storage and ptp cameras in 
the list, but this is hard to maintain, i guess.
Comment 1 Rex Dieter 2006-02-09 16:41:03 UTC
*** Bug 121649 has been marked as a duplicate of this bug. ***
Comment 2 Hartmut Noack 2006-03-23 09:32:46 UTC
I got the same Problem in UBUNTU dapper drake - yet for me i cannot find the USB-Massstorage - Option at all. Most annoying is, that this worked like a charm in digikam 0.7.2...
Comment 3 caulier.gilles 2006-04-03 22:53:32 UTC
I have add some tips to the dialog on current trunk implementation. It's more clear. Take a look in setup camera dialog and give me a feedback...

Gilles Caulier
Comment 4 Julien Narboux 2006-04-04 10:09:24 UTC
Thank you Gilles, it is clearer indeed.
But newbies do not know what is "USB mass storage", perhaps we could add "appears like an removable drive" between parentheses, i mean :

To set an usb mass storage camera (a camera which appears like an removable drive) please use ...

Comment 5 caulier.gilles 2006-04-04 18:38:26 UTC
Also there is no widgets tips (available using SHIFT+F1) on all widgets dialog. We can improve option descriptions using this way. Give me your proposals for that...

Gilles Caulier
Comment 6 caulier.gilles 2006-04-07 14:48:25 UTC
SVN commit 527246 by cgilles:

digikam from trunk : improvements of USB Mass storage camera usability on Camera setup dialog :

- Add a full description to all settings widgets.
- Add a direct link to "Mounted Camera" option from camera list. There is no possible error from user to set an USB Mass Storage camera !

CCMAIL: digikam-devel@kde.org
CCBUGS: 121308

 M  +45 -16    cameraselection.cpp  
 M  +1 -1      cameraselection.h  


--- trunk/extragear/graphics/digikam/utilities/setup/cameraselection.cpp #527245:527246
@@ -31,7 +31,7 @@
 #include <qlayout.h>
 #include <qstring.h>
 #include <qstringlist.h>
-#include <qlineedit.h>
+#include <qwhatsthis.h>
 
 // KDE includes.
 
@@ -40,6 +40,7 @@
 #include <kurlrequester.h>
 #include <klocale.h>
 #include <klistview.h>
+#include <klineedit.h>
 
 // Local includes.
 
@@ -65,8 +66,6 @@
         umsMountURL      = 0;
     }
 
-    QLineEdit     *titleEdit;
-
     QVButtonGroup *portButtonGroup;
 
     QRadioButton  *usbButton;
@@ -81,6 +80,8 @@
 
     QStringList    serialPortList;
     
+    KLineEdit     *titleEdit;
+    
     KListView     *listView;
 
     KURLRequester *umsMountURL;
@@ -98,16 +99,15 @@
     QWidget *page = new QWidget( this );
     setMainWidget(page);
     
-    QVBoxLayout *topLayout = new QVBoxLayout( page, 5, 5 ); 
+    QVBoxLayout *topLayout = new QVBoxLayout( page ); 
 
     // --------------------------------------------------------------
 
     QGroupBox* mainBox = new QGroupBox( 0, Qt::Vertical, i18n( "Camera Configuration" ), page );
     mainBox->setInsideMargin(KDialogBase::marginHint());
     mainBox->setInsideSpacing(KDialogBase::spacingHint());  
+    QGridLayout* mainBoxLayout = new QGridLayout( mainBox->layout(), 6, 1, KDialog::spacingHint() );
     
-    QGridLayout* mainBoxLayout = new QGridLayout( mainBox->layout(), 5, 1, KDialog::spacingHint() );
-    
     // --------------------------------------------------------------
 
     d->listView = new KListView( mainBox );
@@ -115,11 +115,15 @@
     d->listView->setAllColumnsShowFocus(true);
     d->listView->setResizeMode(KListView::LastColumn);
     d->listView->setMinimumWidth(350);
-
+    QWhatsThis::add( d->listView, i18n("<p>Select here the camera name that you want to use. All default settings on the right "
+                                       "will be set automaticly.</p><p>This list have been generated "
+                                       "using gphoto2 library installed in your computer.</p>"));
+    
     // --------------------------------------------------------------
 
     QGroupBox* titleBox = new QGroupBox( 1, Qt::Vertical, i18n("Camera Title"), mainBox );
-    d->titleEdit = new QLineEdit( titleBox );
+    d->titleEdit = new KLineEdit( titleBox );
+    QWhatsThis::add( d->titleEdit, i18n("<p>Set here the name used in digiKam interface to indentify this camera.</p>"));
     
     // --------------------------------------------------------------
     
@@ -128,9 +132,11 @@
 
     d->usbButton = new QRadioButton( d->portButtonGroup );
     d->usbButton->setText( i18n( "USB" ) );
+    QWhatsThis::add( d->usbButton, i18n("<p>Select this option if your camera is connected to your computer using an USB cable.</p>"));
 
     d->serialButton = new QRadioButton( d->portButtonGroup );
     d->serialButton->setText( i18n( "Serial" ) );
+    QWhatsThis::add( d->serialButton, i18n("<p>Select this option if your camera is connected to your computer using a serial cable.</p>"));
 
     // --------------------------------------------------------------
     
@@ -140,6 +146,8 @@
 
     d->portPathComboBox = new QComboBox( false, portPathBox );
     d->portPathComboBox->setDuplicatesEnabled( false );
+    QWhatsThis::add( d->portPathComboBox, i18n("<p>Select here the serial port to use on your computer. This option is only "
+                                               "require if you use a serial camera.</p>"));
 
     // --------------------------------------------------------------
 
@@ -150,31 +158,42 @@
 
     d->umsMountURL = new KURLRequester( QString("/mnt/camera"), umsMountBox);
     d->umsMountURL->setMode(KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly);
+    QWhatsThis::add( d->umsMountURL, i18n("<p>Set here the mount path to use on your computer. This option is only "
+                                          "require if you use an <b>Usb Mass Storage</b> camera.</p>"));
     
     // --------------------------------------------------------------
     
+    KActiveLabel* link = new KActiveLabel(mainBox);
+    link->setText(i18n("<p>To set an <b>Usb Mass Storage</b> camera (which appears like a "
+                       "removable drive), please use <a href=\"umscamera\">%1</a> from camera list.</p>")
+                       .arg(d->UMSCameraNameShown));
+    
     KActiveLabel* explanation = new KActiveLabel(mainBox);
-    explanation->setText(i18n("<p>To set an <b>Usb Mass Storage</b> camera (which appears like a "
-                              "removable drive), please use <b>%1</b> from camera list.<p> "
-                              "<p>To see a fresh list of supported cameras, take a look at "
-                              "<a href='http://www.teaser.fr/~hfiguiere/linux/digicam.html'>this url</a>.</p>")
-                              .arg(d->UMSCameraNameShown));    
+    explanation->setText(i18n("<p>To see a fresh list of supported cameras, take a look at "
+                              "<a href='http://www.teaser.fr/~hfiguiere/linux/digicam.html'>this url</a>.</p>"));    
 
     // --------------------------------------------------------------
     
-    mainBoxLayout->addMultiCellWidget( d->listView, 0, 5, 0, 0 );
+    mainBoxLayout->addMultiCellWidget( d->listView, 0, 6, 0, 0 );
     mainBoxLayout->addMultiCellWidget( titleBox, 0, 0, 1, 1 );
     mainBoxLayout->addMultiCellWidget( d->portButtonGroup, 1, 1, 1, 1 );
     mainBoxLayout->addMultiCellWidget( portPathBox, 2, 2, 1, 1 );
     mainBoxLayout->addMultiCellWidget( umsMountBox, 3, 3, 1, 1 );
-    mainBoxLayout->addMultiCellWidget( explanation, 4, 4, 1, 1 );
+    mainBoxLayout->addMultiCellWidget( link, 4, 4, 1, 1 );
+    mainBoxLayout->addMultiCellWidget( explanation, 5, 5, 1, 1 );
     mainBoxLayout->setColStretch( 0, 10 );
-    mainBoxLayout->setRowStretch( 5, 10 );
+    mainBoxLayout->setRowStretch( 6, 10 );
 
     topLayout->addWidget( mainBox );
 
     // Connections --------------------------------------------------
 
+    disconnect(link, SIGNAL(linkClicked(const QString &)),
+               link, SLOT(openLink(const QString &)));
+    
+    connect(link, SIGNAL(linkClicked(const QString &)),
+            this, SLOT(slotUMSCameraLinkUsed()));
+    
     connect(d->listView, SIGNAL(selectionChanged(QListViewItem *)),
             this, SLOT(slotSelectionChanged(QListViewItem *)));
 
@@ -195,6 +214,16 @@
     delete d;
 }
 
+void CameraSelection::slotUMSCameraLinkUsed()
+{
+    QListViewItem *item = d->listView->findItem(d->UMSCameraNameShown, 0);
+    if (item)
+    {
+        d->listView->setCurrentItem(item);
+        d->listView->ensureItemVisible(item);
+    }
+}
+
 void CameraSelection::setCamera(const QString& title, const QString& model,
                                 const QString& port, const QString& path)
 {
--- trunk/extragear/graphics/digikam/utilities/setup/cameraselection.h #527245:527246
@@ -61,9 +61,9 @@
     
 private slots:
 
+    void slotUMSCameraLinkUsed();
     void slotSelectionChanged(QListViewItem *item);
     void slotPortChanged();
-
     void slotOkClicked();
     
 signals:
Comment 7 caulier.gilles 2006-04-07 14:49:50 UTC
Improvements are enough for 0.9.0 release. I close this file.

Gilles Caulier
Comment 8 caulier.gilles 2006-04-10 07:59:11 UTC
SVN commit 528098 by cgilles:

digikam from trunk : Camera setup dialog : add link to USB PTP device to camera list
CCBUGS: 121308

 M  +29 -4     cameraselection.cpp  
 M  +1 -0      cameraselection.h  


--- trunk/extragear/graphics/digikam/utilities/setup/cameraselection.cpp #528097:528098
@@ -80,6 +80,7 @@
 
     QString        UMSCameraNameActual;
     QString        UMSCameraNameShown;
+    QString        PTPCameraNameShown;
 
     QStringList    serialPortList;
     
@@ -99,6 +100,7 @@
     setHelp("cameraselection.anchor", "digikam");
     d->UMSCameraNameActual = QString("Directory Browse");   // Don't be i18n!
     d->UMSCameraNameShown  = i18n("Mounted Camera");
+    d->PTPCameraNameShown  = QString("USB PTP Class Camera");
 
     QGridLayout* mainBoxLayout = new QGridLayout( plainPage(), 6, 1, 0, KDialog::spacingHint() );
     mainBoxLayout->setColStretch( 0, 10 );
@@ -166,7 +168,7 @@
     
     QGroupBox* box2 = new QGroupBox( 0, Qt::Vertical, plainPage() );
     box2->setFrameStyle( QFrame::NoFrame );
-    QGridLayout* box2Layout = new QGridLayout( box2->layout(), 1, 2 );
+    QGridLayout* box2Layout = new QGridLayout( box2->layout(), 1, 5 );
 
     QLabel* logo = new QLabel( box2 );
 
@@ -179,15 +181,22 @@
                        "(which appears like a removable drive), please<br>"
                        "use <a href=\"umscamera\">%1</a> from camera list.</p>") 
                        .arg(d->UMSCameraNameShown));
-    
+
+    KActiveLabel* link2 = new KActiveLabel(box2);
+    link2->setText(i18n("<p>To set a <b>Generic PTP Usb Device</b><br>"
+                        "(which use Picture Transfert Protocol), please<br>"
+                        "use <a href=\"ptpcamera\">%1</a> from camera list.</p>")
+                        .arg(d->PTPCameraNameShown));
+                           
     KActiveLabel* explanation = new KActiveLabel(box2);
-    explanation->setText(i18n("<p>A fresh list of camera settings to use is<br>"
+    explanation->setText(i18n("<p>A complete list of camera settings to use is<br>"
                               "available at <a href='http://www.teaser.fr/~hfiguiere/linux/digicam.html'>"
                               "this url</a>.</p>"));
 
     box2Layout->addMultiCellWidget( logo, 0, 0, 0, 0 );
     box2Layout->addMultiCellWidget( link, 0, 1, 1, 1 );
-    box2Layout->addMultiCellWidget( explanation, 1, 2, 1, 1 );
+    box2Layout->addMultiCellWidget( link2, 2, 3, 1, 1 );
+    box2Layout->addMultiCellWidget( explanation, 4, 5, 1, 1 );
 
     // --------------------------------------------------------------
     
@@ -205,7 +214,13 @@
     
     connect(link, SIGNAL(linkClicked(const QString &)),
             this, SLOT(slotUMSCameraLinkUsed()));
+
+    disconnect(link2, SIGNAL(linkClicked(const QString &)),
+               link2, SLOT(openLink(const QString &)));
     
+    connect(link2, SIGNAL(linkClicked(const QString &)),
+            this, SLOT(slotPTPCameraLinkUsed()));
+                
     connect(d->listView, SIGNAL(selectionChanged(QListViewItem *)),
             this, SLOT(slotSelectionChanged(QListViewItem *)));
 
@@ -237,6 +252,16 @@
     }
 }
 
+void CameraSelection::slotPTPCameraLinkUsed()
+{
+    QListViewItem *item = d->listView->findItem(d->PTPCameraNameShown, 0);
+    if (item)
+    {
+        d->listView->setCurrentItem(item);
+        d->listView->ensureItemVisible(item);
+    }
+}
+
 void CameraSelection::setCamera(const QString& title, const QString& model,
                                 const QString& port, const QString& path)
 {
--- trunk/extragear/graphics/digikam/utilities/setup/cameraselection.h #528097:528098
@@ -61,6 +61,7 @@
     
 private slots:
 
+    void slotPTPCameraLinkUsed();
     void slotUMSCameraLinkUsed();
     void slotSelectionChanged(QListViewItem *item);
     void slotPortChanged();