filebrowser/ui/src/fbfolderselectiondialog.cpp
author hgs
Fri, 03 Sep 2010 17:11:21 +0300
changeset 51 b048e15729d6
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "fbfolderselectiondialog.h"
hgs
parents:
diff changeset
    19
#include "fbfolderselectorwrapper.h"
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include <HbListWidget>
hgs
parents:
diff changeset
    22
#include <HbAction>
hgs
parents:
diff changeset
    23
#include <HbListWidgetItem>
hgs
parents:
diff changeset
    24
#include <HbLabel>
hgs
parents:
diff changeset
    25
#include <HbPushButton>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <QGraphicsLinearLayout>
hgs
parents:
diff changeset
    28
#include <QFileInfo>
hgs
parents:
diff changeset
    29
#include <QFileIconProvider>
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
FbFolderSelectionDialog::FbFolderSelectionDialog(QGraphicsItem *parent) :
hgs
parents:
diff changeset
    32
        HbDialog(parent),
hgs
parents:
diff changeset
    33
        mTitle(0),
hgs
parents:
diff changeset
    34
        mFolderList(0),
hgs
parents:
diff changeset
    35
        mFolderSelectorWrapper(0),
hgs
parents:
diff changeset
    36
        mFileIconProvider(0)
hgs
parents:
diff changeset
    37
{
hgs
parents:
diff changeset
    38
    init();
hgs
parents:
diff changeset
    39
}
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
FbFolderSelectionDialog::~FbFolderSelectionDialog()
hgs
parents:
diff changeset
    42
{
hgs
parents:
diff changeset
    43
    if (mFileIconProvider)
hgs
parents:
diff changeset
    44
        delete mFileIconProvider;
hgs
parents:
diff changeset
    45
}
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
QString FbFolderSelectionDialog::selectedFolder()
hgs
parents:
diff changeset
    48
{
hgs
parents:
diff changeset
    49
    return mFolderSelectorWrapper->currentPath();
hgs
parents:
diff changeset
    50
}
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
void FbFolderSelectionDialog::init()
hgs
parents:
diff changeset
    53
{
hgs
parents:
diff changeset
    54
    setAttribute(Qt::WA_DeleteOnClose);
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
    mFileIconProvider = new QFileIconProvider();
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
    createHeading();
hgs
parents:
diff changeset
    59
    createList();
hgs
parents:
diff changeset
    60
    createToolBar();
hgs
parents:
diff changeset
    61
}
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
void FbFolderSelectionDialog::createHeading()
hgs
parents:
diff changeset
    64
{
hgs
parents:
diff changeset
    65
    HbWidget *headingWidget = new HbWidget(this);
hgs
parents:
diff changeset
    66
    QGraphicsLinearLayout *headingLayout = new QGraphicsLinearLayout(Qt::Horizontal, headingWidget);
hgs
parents:
diff changeset
    67
    headingWidget->setLayout(headingLayout);
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    mTitle = new HbLabel(this);
hgs
parents:
diff changeset
    70
    mTitle->setElideMode(Qt::ElideRight);
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    HbPushButton *upButton = new HbPushButton(this);
hgs
parents:
diff changeset
    73
    upButton->setIcon(HbIcon(QString(":/qtg_indi_status_back.svg")));
hgs
parents:
diff changeset
    74
    connect(upButton, SIGNAL(pressed()),
hgs
parents:
diff changeset
    75
            this, SLOT(moveUpPressed()));
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
    headingLayout->addItem(mTitle);
hgs
parents:
diff changeset
    78
    headingLayout->addItem(upButton);
hgs
parents:
diff changeset
    79
    headingLayout->setAlignment(upButton, Qt::AlignRight);
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    setHeadingWidget(headingWidget);
hgs
parents:
diff changeset
    82
}
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
void FbFolderSelectionDialog::createList()
hgs
parents:
diff changeset
    85
{
hgs
parents:
diff changeset
    86
    mFolderList = new HbListWidget(this);
hgs
parents:
diff changeset
    87
    mFolderSelectorWrapper = new FbFolderSelectorWrapper();
hgs
parents:
diff changeset
    88
    mFolderSelectorWrapper->init();
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
    refreshView();
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    setContentWidget(mFolderList);
hgs
parents:
diff changeset
    93
    connect(mFolderList, SIGNAL(activated(HbListWidgetItem *)),
hgs
parents:
diff changeset
    94
            this, SLOT(activated(HbListWidgetItem *)));
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    connect(mFolderSelectorWrapper, SIGNAL(FolderSelectionChanged()),
hgs
parents:
diff changeset
    97
            this, SLOT(refreshView()));
hgs
parents:
diff changeset
    98
}
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
void FbFolderSelectionDialog::createToolBar()
hgs
parents:
diff changeset
   101
{
hgs
parents:
diff changeset
   102
    HbAction *rejectAction = new HbAction(QString("Cancel"), this);
hgs
parents:
diff changeset
   103
    addAction(rejectAction);
hgs
parents:
diff changeset
   104
}
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
void FbFolderSelectionDialog::refreshView()
hgs
parents:
diff changeset
   107
{
hgs
parents:
diff changeset
   108
    mFolderList->clear();
hgs
parents:
diff changeset
   109
    QIcon icon;
hgs
parents:
diff changeset
   110
    if (mFolderSelectorWrapper->isDriveListViewActive())
hgs
parents:
diff changeset
   111
    {
hgs
parents:
diff changeset
   112
        const QString KSimpleDriveEntry("%d\t%c: <%S>\t\t");
hgs
parents:
diff changeset
   113
        //TODO icon = mFileIconProvider->icon(QFileIconProvider::Drive);
hgs
parents:
diff changeset
   114
        icon = mFileIconProvider->icon(QFileIconProvider::File);
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
        for (TInt i=0; i<mFolderSelectorWrapper->itemCount(); i++) {
hgs
parents:
diff changeset
   117
            FbDriveEntry driveEntry = mFolderSelectorWrapper->getDriveEntry(i);
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
            const QString SimpleDriveEntry("%1: <%2>");
hgs
parents:
diff changeset
   120
            QString diskName = SimpleDriveEntry.arg(driveEntry.driveLetter()).arg(driveEntry.mediaTypeString());
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
            mFolderList->addItem(icon, diskName);
hgs
parents:
diff changeset
   123
        }
hgs
parents:
diff changeset
   124
    } else {
hgs
parents:
diff changeset
   125
        const QString SimpleFileEntry("%1");
hgs
parents:
diff changeset
   126
        icon = mFileIconProvider->icon(QFileIconProvider::Folder);
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
        // append current folder item
hgs
parents:
diff changeset
   129
        QString currentAbsolutePath = mFolderSelectorWrapper->currentPath().left(mFolderSelectorWrapper->currentPath().length()-1);
hgs
parents:
diff changeset
   130
        QFileInfo fileInfo(currentAbsolutePath);
hgs
parents:
diff changeset
   131
        QString currentFolderName = fileInfo.fileName();
hgs
parents:
diff changeset
   132
        if (currentFolderName.isEmpty()) {
hgs
parents:
diff changeset
   133
            currentFolderName = QString("[root level]");
hgs
parents:
diff changeset
   134
        }
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
        QString currentDirTextEntry = SimpleFileEntry.arg(currentFolderName); ///*<< fileEntry.IconId()*/
hgs
parents:
diff changeset
   137
        mFolderList->addItem(icon, currentDirTextEntry);
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
        for (TInt i=0; i<mFolderSelectorWrapper->itemCount(); i++) {
hgs
parents:
diff changeset
   140
            FbFileEntry fileEntry = mFolderSelectorWrapper->getFileEntry(i);
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
            QString fileName = SimpleFileEntry.arg(fileEntry.name()); ///*<< fileEntry.IconId()*/
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
            mFolderList->addItem(icon, fileName);
hgs
parents:
diff changeset
   145
        }
hgs
parents:
diff changeset
   146
    }
hgs
parents:
diff changeset
   147
}
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
void FbFolderSelectionDialog::activated(HbListWidgetItem * item)
hgs
parents:
diff changeset
   150
{
hgs
parents:
diff changeset
   151
    int row = mFolderList->row(item);
hgs
parents:
diff changeset
   152
    if (mFolderSelectorWrapper->isDriveListViewActive()) {
hgs
parents:
diff changeset
   153
        mFolderSelectorWrapper->moveDownToDirectory(row);
hgs
parents:
diff changeset
   154
    } else if (row == 0) {
hgs
parents:
diff changeset
   155
        if (this->actions().count() > 0) {
hgs
parents:
diff changeset
   156
            accept();
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
    } else if (row > 0) {
hgs
parents:
diff changeset
   159
        mFolderSelectorWrapper->moveDownToDirectory(row);
hgs
parents:
diff changeset
   160
    }
hgs
parents:
diff changeset
   161
}
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
void FbFolderSelectionDialog::moveUpPressed()
hgs
parents:
diff changeset
   164
{
hgs
parents:
diff changeset
   165
    mFolderSelectorWrapper->moveUpOneLevel();
hgs
parents:
diff changeset
   166
}
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
FbCopyToFolderSelectionDialog::FbCopyToFolderSelectionDialog(QGraphicsItem *parent) :
hgs
parents:
diff changeset
   171
        FbFolderSelectionDialog(parent)
hgs
parents:
diff changeset
   172
{
hgs
parents:
diff changeset
   173
    if (headingWidget()) {
hgs
parents:
diff changeset
   174
        mTitle->setPlainText(QString("Copy To"));
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
}
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
FbMoveToFolderSelectionDialog::FbMoveToFolderSelectionDialog(QGraphicsItem *parent) :
hgs
parents:
diff changeset
   181
        FbFolderSelectionDialog(parent)
hgs
parents:
diff changeset
   182
{
hgs
parents:
diff changeset
   183
    if (headingWidget()) {
hgs
parents:
diff changeset
   184
        mTitle->setPlainText(QString("Move To"));
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
}
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
// End of file