/qt-everywhere-opensource-src-4.8.2/demos/embedded/desktopservices/contenttab.cpp
C++ | 151 lines | 82 code | 19 blank | 50 comment | 4 complexity | 239dda62f41686dbc00de9b84523f649 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-4.0, LGPL-3.0, GPL-2.0, LGPL-2.0, LGPL-2.1, GPL-3.0
- /****************************************************************************
- **
- ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
- ** All rights reserved.
- ** Contact: Nokia Corporation (qt-info@nokia.com)
- **
- ** This file is part of the demonstration applications of the Qt Toolkit.
- **
- ** $QT_BEGIN_LICENSE:LGPL$
- ** GNU Lesser General Public License Usage
- ** This file may be used under the terms of the GNU Lesser General Public
- ** License version 2.1 as published by the Free Software Foundation and
- ** appearing in the file LICENSE.LGPL included in the packaging of this
- ** file. Please review the following information to ensure the GNU Lesser
- ** General Public License version 2.1 requirements will be met:
- ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
- **
- ** In addition, as a special exception, Nokia gives you certain additional
- ** rights. These rights are described in the Nokia Qt LGPL Exception
- ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
- **
- ** GNU General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU General
- ** Public License version 3.0 as published by the Free Software Foundation
- ** and appearing in the file LICENSE.GPL included in the packaging of this
- ** file. Please review the following information to ensure the GNU General
- ** Public License version 3.0 requirements will be met:
- ** http://www.gnu.org/copyleft/gpl.html.
- **
- ** Other Usage
- ** Alternatively, this file may be used in accordance with the terms and
- ** conditions contained in a signed written agreement between you and Nokia.
- **
- **
- **
- **
- **
- ** $QT_END_LICENSE$
- **
- ****************************************************************************/
- // EXTERNAL INCLUDES
- #include <QKeyEvent>
- #include <QMessageBox>
- #include <QListWidget>
- #include <QVBoxLayout>
- #include <QFileInfoList>
- #include <QListWidgetItem>
- // INTERNAL INCLUDES
- // CLASS HEADER
- #include "contenttab.h"
- // CONSTRUCTORS & DESTRUCTORS
- ContentTab::ContentTab(QWidget *parent) :
- QListWidget(parent)
- {
- setDragEnabled(false);
- setIconSize(QSize(45, 45));
- }
- ContentTab::~ContentTab()
- {
- }
- // NEW PUBLIC METHODS
- void ContentTab::init(const QDesktopServices::StandardLocation &location,
- const QString &filter,
- const QString &icon)
- {
- setContentDir(location);
- QStringList filterList;
- filterList = filter.split(";");
- m_ContentDir.setNameFilters(filterList);
- setIcon(icon);
- connect(this, SIGNAL(itemClicked(QListWidgetItem*)),
- this, SLOT(openItem(QListWidgetItem*)));
- populateListWidget();
- }
- // NEW PROTECTED METHODS
- void ContentTab::setContentDir(const QDesktopServices::StandardLocation &location)
- {
- m_ContentDir.setPath(QDesktopServices::storageLocation(location));
- }
- void ContentTab::setIcon(const QString &icon)
- {
- m_Icon = QIcon(icon);
- }
- void ContentTab::populateListWidget()
- {
- QFileInfoList fileList = m_ContentDir.entryInfoList(QDir::Files, QDir::Time);
- foreach(QFileInfo item, fileList) {
- new QListWidgetItem(m_Icon, itemName(item), this);
- }
- }
- QString ContentTab::itemName(const QFileInfo &item)
- {
- return QString(item.baseName() + "." + item.completeSuffix());
- }
- QUrl ContentTab::itemUrl(QListWidgetItem *item)
- {
- return QUrl("file:///" + m_ContentDir.absolutePath() + "/" + item->text());
- }
- void ContentTab::keyPressEvent(QKeyEvent *event)
- {
- switch (event->key()) {
- case Qt::Key_Select:
- openItem(currentItem());
- default:
- QListWidget::keyPressEvent(event);
- break;
- }
- }
- void ContentTab::handleErrorInOpen(QListWidgetItem *item)
- {
- Q_UNUSED(item);
- QMessageBox::warning(this, tr("Operation Failed"), tr("Unknown error!"), QMessageBox::Close);
- }
- // NEW SLOTS
- void ContentTab::openItem(QListWidgetItem *item)
- {
- #if defined(Q_OS_SYMBIAN) && defined(Q_CC_NOKIAX86)
- // Opening music files doesn't work in Symbian emulator and in some SDKs freezes the
- // emulator entirely, so prevent it.
- QStringList nameFilters = m_ContentDir.nameFilters();
- if (nameFilters.contains("*.mp3")) {
- QMessageBox::warning(this, tr("Operation Failed"), tr("Action not supported in emulator."),
- QMessageBox::Close);
- } else
- #endif
- {
- bool ret = QDesktopServices::openUrl(itemUrl(item));
- if (!ret)
- handleErrorInOpen(item);
- }
- }
- // End of File