[Digikam-devel] extragear/graphics/digikam/utilities/cameragui
Gilles Caulier
caulier.gilles at gmail.com
Wed Sep 5 15:16:42 BST 2007
SVN commit 708726 by cgilles:
digiKam from trunk (KDE4) : Camera gui is now able to display the free space avaialble on camera media.
CCMAIL: digikam-devel at kde.org
M +24 -6 cameracontroller.cpp
M +13 -13 cameracontroller.h
M +19 -5 cameraui.cpp
M +1 -0 cameraui.h
M +10 -8 dkcamera.h
M +68 -32 freespacewidget.cpp
M +17 -2 freespacewidget.h
M +1 -1 gpcamera.cpp
M +2 -2 gpcamera.h
M +3 -3 umscamera.cpp
M +2 -2 umscamera.h
--- trunk/extragear/graphics/digikam/utilities/cameragui/cameracontroller.cpp #708725:708726
@@ -78,7 +78,8 @@
gp_lock,
gp_thumbnail,
gp_exif,
- gp_open
+ gp_open,
+ gp_freeSpace
};
Action action;
@@ -209,11 +210,6 @@
delete d;
}
-CameraDriverType CameraController::cameraDriverType()
-{
- return d->camera->cameraDriverType();
-}
-
void CameraController::slotCancel()
{
d->canceled = true;
@@ -281,6 +277,15 @@
emit signalCameraInformations(summary, manual, about);
break;
}
+ case(CameraCommand::gp_freeSpace):
+ {
+ sendInfo(i18n("Getting camera freespace available..."));
+ unsigned long kBSize = 0;
+ unsigned long kBAvail = 0;
+ d->camera->getFreeSpace(kBSize, kBAvail);
+ emit signalFreeSpace(kBSize, kBAvail);
+ break;
+ }
case(CameraCommand::gp_listfolders):
{
sendInfo(i18n("Listing folders..."));
@@ -787,6 +792,11 @@
return d->camera->title();
}
+DKCamera::CameraDriverType CameraController::cameraDriverType()
+{
+ return d->camera->cameraDriverType();
+}
+
void CameraController::slotConnect()
{
d->canceled = false;
@@ -840,6 +850,14 @@
addCommand(cmd);
}
+void CameraController::getFreeSpace()
+{
+ d->canceled = false;
+ CameraCommand *cmd = new CameraCommand;
+ cmd->action = CameraCommand::gp_freeSpace;
+ addCommand(cmd);
+}
+
void CameraController::upload(const QFileInfo& srcFileInfo, const QString& destFile, const QString& destFolder)
{
d->canceled = false;
--- trunk/extragear/graphics/digikam/utilities/cameragui/cameracontroller.h #708725:708726
@@ -58,11 +58,13 @@
void listFolders();
void listFiles(const QString& folder);
+ void getFreeSpace();
void getThumbnail(const QString& folder, const QString& file);
void getExif(const QString& folder, const QString& file);
void getCameraInformations();
QString getCameraPath();
QString getCameraTitle();
+ DKCamera::CameraDriverType cameraDriverType();
void downloadPrep();
void download(DownloadSettingsContainer downloadSettings);
@@ -70,15 +72,15 @@
void deleteFile(const QString& folder, const QString& file);
void lockFile(const QString& folder, const QString& file, bool lock);
void openFile(const QString& folder, const QString& file);
-
- CameraDriverType cameraDriverType();
signals:
void signalBusy(bool val);
void signalInfoMsg(const QString& msg);
void signalErrorMsg(const QString& msg);
- void signalCameraInformations(const QString& summary, const QString& manual, const QString& about);
+ void signalCameraInformations(const QString& summary, const QString& manual,
+ const QString& about);
+ void signalFreeSpace(unsigned long kBSize, unsigned long kBAvail);
void signalConnected(bool val);
void signalFolderList(const QStringList& folderList);
@@ -92,6 +94,14 @@
void signalExifFromFile(const QString& folder, const QString& file);
void signalExifData(const QByteArray& exifData);
+ void signalInternalCheckRename(const QString &folder, const QString &file,
+ const QString &destination, const QString &temp);
+ void signalInternalDownloadFailed(const QString &folder, const QString &file);
+ void signalInternalUploadFailed(const QString &folder, const QString &file, const QString &src);
+ void signalInternalDeleteFailed(const QString &folder, const QString &file);
+ void signalInternalLockFailed(const QString &folder, const QString &file);
+ void signalInternalOpen(const QString &folder, const QString &file, const QString &dest);
+
public slots:
void slotCancel();
@@ -102,16 +112,6 @@
void run();
void executeCommand(CameraCommand *cmd);
-signals:
-
- void signalInternalCheckRename(const QString &folder, const QString &file,
- const QString &destination, const QString &temp);
- void signalInternalDownloadFailed(const QString &folder, const QString &file);
- void signalInternalUploadFailed(const QString &folder, const QString &file, const QString &src);
- void signalInternalDeleteFailed(const QString &folder, const QString &file);
- void signalInternalLockFailed(const QString &folder, const QString &file);
- void signalInternalOpen(const QString &folder, const QString &file, const QString &dest);
-
private slots:
void slotCheckRename(const QString &folder, const QString &file,
--- trunk/extragear/graphics/digikam/utilities/cameragui/cameraui.cpp #708725:708726
@@ -519,13 +519,13 @@
//------------------------------------------------------------------------------
d->albumLibraryFreeSpace = new FreeSpaceWidget(statusBar(), 100);
- d->albumLibraryFreeSpace->setIcon("folder-image");
+ d->albumLibraryFreeSpace->setMode(FreeSpaceWidget::AlbumLibrary);
+ d->albumLibraryFreeSpace->setPath(AlbumSettings::instance()->getAlbumLibraryPath());
statusBar()->addWidget(d->albumLibraryFreeSpace, 1);
//------------------------------------------------------------------------------
d->cameraFreeSpace = new FreeSpaceWidget(statusBar(), 100);
- d->cameraFreeSpace->setIcon("camera");
statusBar()->addWidget(d->cameraFreeSpace, 1);
//------------------------------------------------------------------------------
@@ -545,9 +545,17 @@
{
d->controller = new CameraController(this, d->cameraTitle, model, port, path);
- // Until libgphoto2 2.4.0, there is no method to get camera media free space.
- if (d->controller->cameraDriverType() == GPhotoDriver)
- d->cameraFreeSpace->hide();
+ if (d->controller->cameraDriverType() == DKCamera::GPhotoDriver)
+ {
+ d->cameraFreeSpace->setMode(FreeSpaceWidget::GPhotoCamera);
+ connect(d->controller, SIGNAL(signalFreeSpace(unsigned long, unsigned long)),
+ this, SLOT(slotCameraFreeSpaceInfo(unsigned long, unsigned long)));
+ }
+ else
+ {
+ d->cameraFreeSpace->setMode(FreeSpaceWidget::UMSCamera);
+ d->cameraFreeSpace->setPath(d->controller->getCameraPath());
+ }
connect(d->controller, SIGNAL(signalConnected(bool)),
this, SLOT(slotConnected(bool)));
@@ -908,6 +916,7 @@
}
else
{
+ d->controller->getFreeSpace();
d->controller->listFolders();
}
}
@@ -1851,4 +1860,9 @@
}
}
+void CameraUI::slotCameraFreeSpaceInfo(unsigned long kBSize, unsigned long kBAvail)
+{
+ d->cameraFreeSpace->setInformations(kBSize, kBSize-kBAvail, kBAvail, QString());
+}
+
} // namespace Digikam
--- trunk/extragear/graphics/digikam/utilities/cameragui/cameraui.h #708725:708726
@@ -116,6 +116,7 @@
void slotErrorMsg(const QString& msg);
void slotInformations();
void slotCameraInformations(const QString&, const QString&, const QString&);
+ void slotCameraFreeSpaceInfo(unsigned long kBSize, unsigned long kBAvail);
void slotFolderList(const QStringList& folderList);
void slotFileList(const GPItemInfoList& fileList);
--- trunk/extragear/graphics/digikam/utilities/cameragui/dkcamera.h #708725:708726
@@ -39,17 +39,19 @@
namespace Digikam
{
-enum CameraDriverType
-{
- GPhotoDriver = 0,
- UMSDriver
-};
-
class DKCamera
{
public:
+ enum CameraDriverType
+ {
+ GPhotoDriver = 0,
+ UMSDriver
+ };
+
+public:
+
DKCamera(const QString& title, const QString& model, const QString& port, const QString& path);
virtual ~DKCamera();
@@ -75,9 +77,9 @@
virtual bool setLockItem(const QString& folder, const QString& itemName, bool lock) = 0;
- virtual CameraDriverType cameraDriverType() = 0;
+ virtual DKCamera::CameraDriverType cameraDriverType() = 0;
- virtual bool getFreeSpace(unsigned long& capacityKb, unsigned long& availableKb) = 0;
+ virtual bool getFreeSpace(unsigned long& kBSize, unsigned long& kBAvail) = 0;
QString title() const;
QString model() const;
--- trunk/extragear/graphics/digikam/utilities/cameragui/freespacewidget.cpp #708725:708726
@@ -64,23 +64,27 @@
kBAvail = 0;
dSizeKb = 0;
percentUsed = 0;
+ mode = FreeSpaceWidget::AlbumLibrary;
}
- bool isValid;
+ bool isValid;
- int percentUsed;
+ int percentUsed;
- unsigned long dSizeKb;
- unsigned long kBSize;
- unsigned long kBUsed;
- unsigned long kBAvail;
+ unsigned long dSizeKb;
+ unsigned long kBSize;
+ unsigned long kBUsed;
+ unsigned long kBAvail;
- QString mountPoint;
+ QString mountPoint;
+ QString path;
- QTimer *timer;
+ QTimer *timer;
- QPixmap pix;
- QPixmap iconPix;
+ QPixmap pix;
+ QPixmap iconPix;
+
+ FreeSpaceWidget::FreeSpaceMode mode;
};
FreeSpaceWidget::FreeSpaceWidget(QWidget* parent, int width)
@@ -90,14 +94,10 @@
setAttribute(Qt::WA_DeleteOnClose);
setFixedWidth(width);
setMaximumHeight(fontMetrics().height()+4);
- slotTimeout();
-
d->timer = new QTimer(this);
-
+
connect(d->timer, SIGNAL(timeout()),
this, SLOT(slotTimeout()));
-
- d->timer->start(10000);
}
FreeSpaceWidget::~FreeSpaceWidget()
@@ -107,11 +107,55 @@
delete d;
}
-void FreeSpaceWidget::setIcon(const QString& name)
+void FreeSpaceWidget::setMode(FreeSpaceMode mode)
{
- d->iconPix = SmallIcon(name);
+ d->mode = mode;
+ if (d->mode == FreeSpaceWidget::AlbumLibrary)
+ {
+ d->iconPix = SmallIcon("folder-image");
+ }
+ else if (d->mode == FreeSpaceWidget::UMSCamera)
+ {
+ d->iconPix = SmallIcon("camera");
+ }
+ else // GPhotoCamera
+ {
+ d->iconPix = SmallIcon("camera");
+ }
+ updatePixmap();
}
+void FreeSpaceWidget::setPath(const QString& path)
+{
+ d->timer->stop();
+ d->path = path;
+ slotTimeout();
+ d->timer->start(10000);
+}
+
+void FreeSpaceWidget::setInformations(unsigned long kBSize,
+ unsigned long kBUsed, unsigned long kBAvail,
+ const QString& mountPoint)
+{
+ d->mountPoint = mountPoint;
+ d->kBSize = kBSize;
+ d->kBUsed = kBUsed;
+ d->kBAvail = kBAvail;
+
+ if (kBSize <= 0)
+ {
+ d->percentUsed = 0;
+ d->isValid = false;
+ }
+ else
+ {
+ d->percentUsed = 100 - (int)(100.0*kBAvail/kBSize);
+ d->isValid = true;
+ }
+ updatePixmap();
+ repaint();
+}
+
void FreeSpaceWidget::setEstimatedDSizeKb(unsigned long dSize)
{
d->dSizeKb = dSize;
@@ -177,15 +221,15 @@
(int)(((double)d->pix.width()-3.0-d->iconPix.width()-2.0)*(pClamp/100.0)),
d->pix.height()-3);
p.drawRect(gRect);
-
+
QRect tRect(d->iconPix.height()+2, 1, d->pix.width()-3-d->iconPix.width()-2, d->pix.height()-3);
- QString text = QString("%1%").arg(peUsed);
- p.setPen(palette().text().color());
+ QString text = QString("%1%").arg(peUsed);
QFontMetrics fontMt = p.fontMetrics();
QRect fontRect = fontMt.boundingRect(tRect.x(), tRect.y(),
- tRect.width(), tRect.height(), 0, text);
+ tRect.width(), tRect.height(), 0, text);
+ p.setPen(palette().text().color());
p.drawText(tRect, Qt::AlignCenter, text);
-
+
QString info;
if (d->dSizeKb > 0)
@@ -221,9 +265,8 @@
void FreeSpaceWidget::slotTimeout()
{
- QString path = AlbumSettings::instance()->getAlbumLibraryPath();
KMountPoint::List list = KMountPoint::currentMountPoints();
- KMountPoint::Ptr mp = list.findByPath(path);
+ KMountPoint::Ptr mp = list.findByPath(d->path);
if (mp)
{
KDiskFreeSpace *job = new KDiskFreeSpace;
@@ -236,14 +279,7 @@
void FreeSpaceWidget::slotAvailableFreeSpace(QString mountPoint, quint64 kBSize,
quint64 kBUsed, quint64 kBAvail)
{
- d->mountPoint = mountPoint;
- d->kBSize = kBSize;
- d->kBUsed = kBUsed;
- d->kBAvail = kBAvail;
- d->percentUsed = 100 - (int)(100.0*kBAvail/kBSize);
- d->isValid = true;
- updatePixmap();
- repaint();
+ setInformations(kBSize, kBUsed, kBAvail, mountPoint);
}
} // namespace Digikam
--- trunk/extragear/graphics/digikam/utilities/cameragui/freespacewidget.h #708725:708726
@@ -40,24 +40,39 @@
class FreeSpaceWidget : public QWidget
{
+
Q_OBJECT
+
+public:
+
+ enum FreeSpaceMode
+ {
+ AlbumLibrary = 0,
+ UMSCamera,
+ GPhotoCamera
+ };
public:
FreeSpaceWidget(QWidget* parent, int width);
~FreeSpaceWidget();
- void setIcon(const QString& name);
void setEstimatedDSizeKb(unsigned long dSize);
unsigned long estimatedDSizeKb();
- bool isValid() ;
+ bool isValid();
int percentUsed();
unsigned long kBSize();
unsigned long kBUsed();
unsigned long kBAvail();
QString mountPoint();
+ void setMode(FreeSpaceMode mode);
+ void setPath(const QString& path);
+ void setInformations(unsigned long kBSize,
+ unsigned long kBUsed, unsigned long kBAvail,
+ const QString& mountPoint);
+
protected:
void paintEvent(QPaintEvent*);
--- trunk/extragear/graphics/digikam/utilities/cameragui/gpcamera.cpp #708725:708726
@@ -155,7 +155,7 @@
return d->globalPath;
}
-bool GPCamera::getFreeSpace(unsigned long& capacityKb, unsigned long& availableKb)
+bool GPCamera::getFreeSpace(unsigned long& kBSize, unsigned long& kBAvail)
{
return false; // TODO : not yet implemented.
}
--- trunk/extragear/graphics/digikam/utilities/cameragui/gpcamera.h #708725:708726
@@ -85,9 +85,9 @@
QString port() const;
QString path() const;
- CameraDriverType cameraDriverType(){ return GPhotoDriver; };
+ DKCamera::CameraDriverType cameraDriverType(){ return DKCamera::GPhotoDriver; };
- bool getFreeSpace(unsigned long& capacityKb, unsigned long& availableKb);
+ bool getFreeSpace(unsigned long& kBSize, unsigned long& kBAvail);
// Public static methods shared with Setup Camera
--- trunk/extragear/graphics/digikam/utilities/cameragui/umscamera.cpp #708725:708726
@@ -69,9 +69,9 @@
{
}
-bool UMSCamera::getFreeSpace(unsigned long& capacityKb, unsigned long& availableKb)
+bool UMSCamera::getFreeSpace(unsigned long& /*kBSize*/, unsigned long& /*kBAvail*/)
{
- return false; // TODO : not yet implemented.
+ return false; // NOTE: implemented in gui, outside the camera thread.
}
bool UMSCamera::doConnect()
@@ -95,7 +95,7 @@
bool UMSCamera::getItemsInfoList(const QString& folder, GPItemInfoList& infoList, bool getImageDimensions)
{
- d->cancel = false;
+ m_cancel = false;
infoList.clear();
QDir dir(folder);
--- trunk/extragear/graphics/digikam/utilities/cameragui/umscamera.h #708725:708726
@@ -63,9 +63,9 @@
bool cameraManual(QString& manual);
bool cameraAbout(QString& about);
- bool getFreeSpace(unsigned long& capacityKb, unsigned long& availableKb);
+ bool getFreeSpace(unsigned long& kBSize, unsigned long& kBAvail);
- CameraDriverType cameraDriverType(){ return UMSDriver; };
+ DKCamera::CameraDriverType cameraDriverType(){ return DKCamera::UMSDriver; };
private:
More information about the Digikam-devel
mailing list