[Digikam-devel] extragear/graphics/digikam/digikam
Gilles Caulier
caulier.gilles at kdemail.net
Mon Dec 18 19:18:20 GMT 2006
SVN commit 614735 by cgilles:
digikam from trunk : Continue 0.9.1 implementation !
Second stage : adding a new Welcome page on the root album of your pictures collection. The page is inspired of Kmail or Konqueror Welcome page. On root album there is nothing to see/to do. This is the right way to show a resume of digiKam features dedicaced to new users.
CCMAIL: digikam-devel at kde.org
M +1 -2 Makefile.am
M +146 -9 albumwidgetstack.cpp
M +9 -1 albumwidgetstack.h
M +4 -0 digikamview.cpp
--- trunk/extragear/graphics/digikam/digikam/Makefile.am #614734:614735
@@ -20,7 +20,6 @@
-I$(top_srcdir)/digikam/utilities/splashscreen \
-I$(top_srcdir)/digikam/utilities/setup \
-I$(top_srcdir)/digikam/ \
- -I$(top_builddir)/digikam/libs/dialogs \
$(LIBKIPI_CFLAGS) $(all_includes)
@@ -90,7 +89,7 @@
tagspopupmenu.cpp \
upgradedb_sqlite2tosqlite3.cpp
-libdigikam_la_LIBADD = $(LIB_KIO) $(LIB_SQLITE3) $(LIB_KABC) \
+libdigikam_la_LIBADD = $(LIB_KIO) $(LIB_SQLITE3) $(LIB_KABC) $(LIB_KHTML) \
$(LIBKIPI_LIBS) $(LIB_KUTILS) $(EXIV2_LIBS) \
$(top_builddir)/digikam/sqlite/libsqlite.la \
$(top_builddir)/digikam/libs/thumbbar/libthumbbar.la \
--- trunk/extragear/graphics/digikam/digikam/albumwidgetstack.cpp #614734:614735
@@ -25,19 +25,27 @@
#include <qwidget.h>
#include <qpushbutton.h>
#include <qlayout.h>
+#include <qfile.h>
+#include <qfileinfo.h>
// KDE includes.
+#include <kstandarddirs.h>
#include <klocale.h>
#include <kcursor.h>
#include <kdialogbase.h>
+#include <khtml_part.h>
+#include <khtmlview.h>
+#include <kapplication.h>
// Local includes.
+#include "version.h"
#include "themeengine.h"
#include "imagepreviewwidget.h"
#include "albumiconview.h"
#include "albumwidgetstack.h"
+#include "albumwidgetstack.moc"
namespace Digikam
{
@@ -54,6 +62,7 @@
previewAlbumWidget = 0;
backButton = 0;
editButton = 0;
+ htmlView = 0;
}
QPushButton *backButton;
@@ -61,6 +70,8 @@
QWidget *buttonsArea;
+ KHTMLPart *htmlView;
+
ImagePreviewWidget *previewItemWidget;
AlbumIconView *previewAlbumWidget;
@@ -71,17 +82,21 @@
{
d = new AlbumWidgetStackPriv;
- d->previewAlbumWidget = new AlbumIconView(this);
- QVBox *previewArea = new QVBox(this);
- previewArea->setFrameStyle(QFrame::GroupBoxPanel|QFrame::Plain);
- previewArea->setMargin(0);
- previewArea->setLineWidth(1);
+ // -- Album icon view -----------------------------------------------
+ d->previewAlbumWidget = new AlbumIconView(this);
+ // -- Picture preview -----------------------------------------------
+
+ QVBox *previewArea = new QVBox(this);
d->previewItemWidget = new ImagePreviewWidget(previewArea);
d->buttonsArea = new QWidget(previewArea);
QHBoxLayout *hlay = new QHBoxLayout(d->buttonsArea);
d->backButton = new QPushButton(i18n("Back to Album"), d->buttonsArea);
d->editButton = new QPushButton(i18n("Edit..."), d->buttonsArea);
+ previewArea->setFrameStyle(QFrame::GroupBoxPanel|QFrame::Plain);
+ previewArea->setMargin(0);
+ previewArea->setLineWidth(1);
+
hlay->setMargin(KDialogBase::marginHint());
hlay->addStretch(1);
hlay->addWidget(d->backButton);
@@ -89,12 +104,45 @@
hlay->addWidget(d->editButton);
hlay->addStretch(1);
+ // -- HTML help view -----------------------------------------------
+
+ d->htmlView = new KHTMLPart(this);
+ d->htmlView->widget()->setFocusPolicy(WheelFocus);
+ // Let's better be paranoid and disable plugins (it defaults to enabled):
+ d->htmlView->setPluginsEnabled(false);
+ d->htmlView->setJScriptEnabled(false); // just make this explicit.
+ d->htmlView->setJavaEnabled(false); // just make this explicit.
+ d->htmlView->setMetaRefreshEnabled(false);
+ d->htmlView->setURLCursor(KCursor::handCursor());
+
+ QString location = locate("data", "digikam/about/main.html");
+ QString content = fileToString(location);
+ content = content.arg( locate( "data", "digikam/about/kde_infopage.css" ) );
+ content = content.arg( "" );
+
+ d->htmlView->begin(KURL( location ));
+
+ QString fontSize = QString::number( 12 );
+ QString appTitle = i18n("digiKam");
+ QString catchPhrase = "";
+ QString quickDescription = i18n("A Photo-Management Application for KDE");
+ d->htmlView->write(content.arg(fontSize)
+ .arg(appTitle)
+ .arg(catchPhrase)
+ .arg(quickDescription)
+ .arg(infoPage()));
+ d->htmlView->end();
+ d->htmlView->show();
+
+ // -- Stack widgets ------------------------------------------------
+
addWidget(previewArea, PreviewItemMode);
addWidget(d->previewAlbumWidget, PreviewAlbumMode);
+ addWidget(d->htmlView->view(), HtmlViewMode);
setPreviewMode(PreviewAlbumMode);
- // ----------------------------------------------------------------------
+ // -----------------------------------------------------------------
connect(d->backButton, SIGNAL( clicked() ),
this, SIGNAL( backToAlbumSignal() ) );
@@ -112,7 +160,11 @@
this, SLOT( slotPreviewComplete() ) );
connect(d->previewItemWidget, SIGNAL( previewFailed() ),
- this, SLOT( slotPreviewFailed() ) );
+ this, SLOT( slotPreviewFailed() ) );
+
+ connect(d->htmlView->browserExtension(),
+ SIGNAL(openURLRequest(const KURL &, const KParts::URLArgs &)),
+ this, SLOT(slotUrlOpen(const KURL &)));
}
AlbumWidgetStack::~AlbumWidgetStack()
@@ -120,6 +172,11 @@
delete d;
}
+void AlbumWidgetStack::slotUrlOpen(const KURL &url)
+{
+ KApplication::kApplication()->invokeBrowser(url.url());
+}
+
void AlbumWidgetStack::slotThemeChanged()
{
d->buttonsArea->setPaletteBackgroundColor(ThemeEngine::instance()->baseColor());
@@ -151,7 +208,7 @@
void AlbumWidgetStack::setPreviewMode(int mode)
{
- if (mode != PreviewAlbumMode && mode != PreviewItemMode)
+ if (mode != PreviewAlbumMode && mode != PreviewItemMode && mode != HtmlViewMode)
return;
raiseWidget(mode);
@@ -176,6 +233,86 @@
d->editButton->setEnabled(false);
}
+QString AlbumWidgetStack::infoPage()
+{
+ QString info =
+ i18n("%1: digiKam version; %2: help:// URL; %3: homepage URL; "
+ "%4: prior KMail version; %5: prior KDE version; "
+ "%6: generated list of new features; "
+ "%7: First-time user text (only shown on first start); "
+ "%8: generated list of important changes; "
+ "--- end of comment ---",
+ "<h2 style='margin-top: 0px;'>Welcome to digiKam %1</h2><p>digiKam is a "
+ "photo-management program for the K Desktop Environment. "
+ "It is designed to organize your digital photograhs on your computer."
+ "</p>\n"
+ "<ul><li>digiKam has many powerful features which are described in the "
+ "<a href=\"%2\">documentation</a></li>\n"
+ "<li>The <a href=\"%3\">digiKam homepage</A> offers information about "
+ "new versions of digiKam</li></ul>\n"
+ "%8\n" // important changes
+ "<p>Some of the new features in this release of digiKam include "
+ "(compared to digiKam %4):</p>\n"
+ "<ul>\n%5</ul>\n"
+ "%6\n"
+ "<p>We hope that you will enjoy digiKam.</p>\n"
+ "<p>Thank you,</p>\n"
+ "<p style='margin-bottom: 0px'> The digiKam Team</p>")
+ .arg(digikam_version) // current digiKam version
+ .arg("help:/digikam/index.html") // digiKam help:// URL
+ .arg("http://www.digikam.org/") // digiKam homepage URL
+ .arg("0.8.2"); // previous digiKam release.
+
+ QStringList newFeatures;
+ newFeatures << i18n("16 bits/color/pixels image support");
+ newFeatures << i18n("Full color management support");
+ newFeatures << i18n("Makernote and IPTC metadata support");
+ newFeatures << i18n("Geolocalization of photograph");
+ newFeatures << i18n("...TODO: add more informations here...");
+
+ QString featureItems;
+ for ( uint i = 0 ; i < newFeatures.count() ; i++ )
+ featureItems += i18n("<li>%1</li>\n").arg( newFeatures[i] );
+
+ info = info.arg( featureItems );
+
+ // Add first-time user text (only shown on first start).
+ info = info.arg( QString::null );
+
+ // Generated list of important changes
+ info = info.arg( QString::null );
+
+ return info;
+}
+
+QCString AlbumWidgetStack::fileToString(const QString &aFileName)
+{
+ QCString result;
+ QFileInfo info(aFileName);
+ unsigned int readLen;
+ unsigned int len = info.size();
+ QFile file(aFileName);
+
+ if (aFileName.isEmpty() || len <= 0 ||
+ !info.exists() || info.isDir() || !info.isReadable() ||
+ !file.open(IO_Raw|IO_ReadOnly))
+ return QCString();
+
+ result.resize(len + 2);
+ readLen = file.readBlock(result.data(), len);
+ if (1 && result[len-1]!='\n')
+ {
+ result[len++] = '\n';
+ readLen++;
+ }
+ result[len] = '\0';
+
+ if (readLen < len)
+ return QCString();
+
+ return result;
+}
+
} // namespace Digikam
-#include "albumwidgetstack.moc"
+
--- trunk/extragear/graphics/digikam/digikam/albumwidgetstack.h #614734:614735
@@ -25,6 +25,7 @@
// KDE includes.
#include <qwidgetstack.h>
+#include <qcstring.h>
#include <qstring.h>
// Local includes
@@ -47,7 +48,8 @@
enum AlbumWidgetStackMode
{
PreviewAlbumMode=0,
- PreviewItemMode
+ PreviewItemMode,
+ HtmlViewMode
};
public:
@@ -73,9 +75,15 @@
void slotPreviewStarted();
void slotPreviewComplete();
void slotPreviewFailed();
+ void slotUrlOpen(const KURL &);
private:
+ QCString fileToString(const QString &aFileName);
+ QString infoPage();
+
+private:
+
AlbumWidgetStackPriv* d;
};
--- trunk/extragear/graphics/digikam/digikam/digikamview.cpp #614734:614735
@@ -588,6 +588,10 @@
d->parent->enableAlbumForwardHistory(!d->albumHistory->isForwardEmpty());
d->iconView->setAlbum(album);
+ if (album->isRoot())
+ d->albumPreviews->setPreviewMode(AlbumWidgetStack::HtmlViewMode);
+ else
+ d->albumPreviews->setPreviewMode(AlbumWidgetStack::PreviewAlbumMode);
}
void DigikamView::slot_albumOpenInKonqui()
More information about the Digikam-devel
mailing list