utilityapps/filebrowser/ui/src/fbfolderselectiondialog.cpp
author hgs
Mon, 18 Oct 2010 16:32:38 +0300
changeset 56 392f7045e621
parent 55 2d9cac8919d3
permissions -rw-r--r--
201041_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55
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
/**
hgs
parents:
diff changeset
    32
  * Constructor
hgs
parents:
diff changeset
    33
  */
hgs
parents:
diff changeset
    34
FbFolderSelectionDialog::FbFolderSelectionDialog(QGraphicsItem *parent) :
hgs
parents:
diff changeset
    35
        HbDialog(parent),
hgs
parents:
diff changeset
    36
        mTitle(0),
hgs
parents:
diff changeset
    37
        mCurrentPath(0),
hgs
parents:
diff changeset
    38
        mFolderList(0),
hgs
parents:
diff changeset
    39
        mFolderSelectorWrapper(0),
hgs
parents:
diff changeset
    40
        mFileIconProvider(0)
hgs
parents:
diff changeset
    41
{
hgs
parents:
diff changeset
    42
    init();
hgs
parents:
diff changeset
    43
}
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/**
hgs
parents:
diff changeset
    46
  * Destructor
hgs
parents:
diff changeset
    47
  */
hgs
parents:
diff changeset
    48
FbFolderSelectionDialog::~FbFolderSelectionDialog()
hgs
parents:
diff changeset
    49
{
hgs
parents:
diff changeset
    50
    if (mFileIconProvider)
hgs
parents:
diff changeset
    51
        delete mFileIconProvider;
hgs
parents:
diff changeset
    52
}
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
/**
hgs
parents:
diff changeset
    55
  * Provide currenntly selected folder
hgs
parents:
diff changeset
    56
  * \return current folder
hgs
parents:
diff changeset
    57
  */
hgs
parents:
diff changeset
    58
QString FbFolderSelectionDialog::selectedFolder()
hgs
parents:
diff changeset
    59
{
hgs
parents:
diff changeset
    60
    return mFolderSelectorWrapper->currentPath();
hgs
parents:
diff changeset
    61
}
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
/**
hgs
parents:
diff changeset
    64
  * Initialize folder selection dialog
hgs
parents:
diff changeset
    65
  */
hgs
parents:
diff changeset
    66
void FbFolderSelectionDialog::init()
hgs
parents:
diff changeset
    67
{
hgs
parents:
diff changeset
    68
    setAttribute(Qt::WA_DeleteOnClose);
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    mFileIconProvider = new QFileIconProvider();
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    createHeading();
hgs
parents:
diff changeset
    73
    createList();
hgs
parents:
diff changeset
    74
    createToolBar();
hgs
parents:
diff changeset
    75
}
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
/**
hgs
parents:
diff changeset
    78
  * Create dialog heading widget
hgs
parents:
diff changeset
    79
  */
hgs
parents:
diff changeset
    80
void FbFolderSelectionDialog::createHeading()
hgs
parents:
diff changeset
    81
{
hgs
parents:
diff changeset
    82
    HbWidget *headingWidget = new HbWidget(this);
hgs
parents:
diff changeset
    83
    QGraphicsLinearLayout *headingLayout = new QGraphicsLinearLayout(Qt::Horizontal);
hgs
parents:
diff changeset
    84
    headingWidget->setLayout(headingLayout);
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    QGraphicsLinearLayout *titleLayout = new QGraphicsLinearLayout(Qt::Vertical);
hgs
parents:
diff changeset
    87
    mTitle = new HbLabel(this);
hgs
parents:
diff changeset
    88
    mCurrentPath = new HbLabel(this);
hgs
parents:
diff changeset
    89
    mCurrentPath->setPlainText(" ");
hgs
parents:
diff changeset
    90
    mCurrentPath->setElideMode(Qt::ElideMiddle);
hgs
parents:
diff changeset
    91
    titleLayout->addItem(mTitle);
hgs
parents:
diff changeset
    92
    titleLayout->setAlignment( mTitle, Qt::AlignLeft);
hgs
parents:
diff changeset
    93
    titleLayout->addItem(mCurrentPath);
hgs
parents:
diff changeset
    94
    titleLayout->setAlignment( mCurrentPath, Qt::AlignLeft);
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    HbPushButton *moveUpButton = new HbPushButton(headingWidget);
hgs
parents:
diff changeset
    97
    moveUpButton->setIcon(HbIcon(QString(":/qtg_indi_status_back.svg")));
hgs
parents:
diff changeset
    98
    connect(moveUpButton, SIGNAL(pressed()),
hgs
parents:
diff changeset
    99
            this, SLOT(moveUpPressed()));
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    headingLayout->addItem(titleLayout);
hgs
parents:
diff changeset
   102
    headingLayout->addItem(moveUpButton);
hgs
parents:
diff changeset
   103
    headingLayout->setAlignment(moveUpButton, Qt::AlignRight);
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    setHeadingWidget(headingWidget);
hgs
parents:
diff changeset
   106
}
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
/**
hgs
parents:
diff changeset
   109
  * Create dialog content widget as a list of files
hgs
parents:
diff changeset
   110
  */
hgs
parents:
diff changeset
   111
void FbFolderSelectionDialog::createList()
hgs
parents:
diff changeset
   112
{
hgs
parents:
diff changeset
   113
    mFolderList = new HbListWidget(this);
hgs
parents:
diff changeset
   114
    mFolderSelectorWrapper = new FbFolderSelectorWrapper();
hgs
parents:
diff changeset
   115
    mFolderSelectorWrapper->init();
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
    refreshView();
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    setContentWidget(mFolderList);
hgs
parents:
diff changeset
   120
    connect(mFolderList, SIGNAL(activated(HbListWidgetItem *)),
hgs
parents:
diff changeset
   121
            this, SLOT(activated(HbListWidgetItem *)));
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    connect(mFolderSelectorWrapper, SIGNAL(FolderSelectionChanged()),
hgs
parents:
diff changeset
   124
            this, SLOT(refreshView()));
hgs
parents:
diff changeset
   125
}
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
/**
hgs
parents:
diff changeset
   128
  * Create dialog toolbar
hgs
parents:
diff changeset
   129
  */
hgs
parents:
diff changeset
   130
void FbFolderSelectionDialog::createToolBar()
hgs
parents:
diff changeset
   131
{
hgs
parents:
diff changeset
   132
    HbAction *acceptAction = new HbAction(this);
hgs
parents:
diff changeset
   133
    acceptAction->setEnabled(false);
hgs
parents:
diff changeset
   134
    connect(acceptAction, SIGNAL(triggered()),
hgs
parents:
diff changeset
   135
            this, SLOT(acceptTriggered()));
hgs
parents:
diff changeset
   136
    addAction(acceptAction);
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    HbAction *rejectAction = new HbAction(QString("Cancel"), this);
hgs
parents:
diff changeset
   139
    addAction(rejectAction);
hgs
parents:
diff changeset
   140
}
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
/**
hgs
parents:
diff changeset
   143
  * Refresh list widget content
hgs
parents:
diff changeset
   144
  */
hgs
parents:
diff changeset
   145
void FbFolderSelectionDialog::refreshView()
hgs
parents:
diff changeset
   146
{
hgs
parents:
diff changeset
   147
    mFolderList->clear();
hgs
parents:
diff changeset
   148
    QIcon icon;
hgs
parents:
diff changeset
   149
    mCurrentPath->setPlainText(mFolderSelectorWrapper->currentPath());
hgs
parents:
diff changeset
   150
    if (mFolderSelectorWrapper->isDriveListViewActive())
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
        const QString KSimpleDriveEntry("%d\t%c: <%S>\t\t");
hgs
parents:
diff changeset
   153
        //TODO icon = mFileIconProvider->icon(QFileIconProvider::Drive);
hgs
parents:
diff changeset
   154
        icon = mFileIconProvider->icon(QFileIconProvider::File);
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
        for (TInt i=0; i<mFolderSelectorWrapper->itemCount(); i++) {
hgs
parents:
diff changeset
   157
            FbDriveEntry driveEntry = mFolderSelectorWrapper->getDriveEntry(i);
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
            const QString SimpleDriveEntry("%1: <%2>");
hgs
parents:
diff changeset
   160
            QString diskName = SimpleDriveEntry.arg(driveEntry.driveLetter()).arg(driveEntry.mediaTypeString());
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
            mFolderList->addItem(icon, diskName);
hgs
parents:
diff changeset
   163
        }
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
        if (actions().count() > 1) {
hgs
parents:
diff changeset
   166
            actions().at(0)->setEnabled(false);
hgs
parents:
diff changeset
   167
        }
hgs
parents:
diff changeset
   168
    } else {
hgs
parents:
diff changeset
   169
        const QString SimpleFileEntry("%1");
hgs
parents:
diff changeset
   170
        icon = mFileIconProvider->icon(QFileIconProvider::Folder);
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
        for (TInt i=0; i<mFolderSelectorWrapper->itemCount(); i++) {
hgs
parents:
diff changeset
   173
            FbFileEntry fileEntry = mFolderSelectorWrapper->getFileEntry(i);
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
            QString fileName = SimpleFileEntry.arg(fileEntry.name()); ///*<< fileEntry.IconId()*/
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
            mFolderList->addItem(icon, fileName);
hgs
parents:
diff changeset
   178
        }
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
        if (actions().count() > 1) {
hgs
parents:
diff changeset
   181
            actions().at(0)->setEnabled(true);
hgs
parents:
diff changeset
   182
        }
hgs
parents:
diff changeset
   183
    }
hgs
parents:
diff changeset
   184
}
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
/**
hgs
parents:
diff changeset
   187
  * Slot called when list item is activated
hgs
parents:
diff changeset
   188
  */
hgs
parents:
diff changeset
   189
void FbFolderSelectionDialog::activated(HbListWidgetItem * item)
hgs
parents:
diff changeset
   190
{
hgs
parents:
diff changeset
   191
    int row = mFolderList->row(item);
hgs
parents:
diff changeset
   192
    if (mFolderSelectorWrapper->isDriveListViewActive()) {
hgs
parents:
diff changeset
   193
        mFolderSelectorWrapper->moveDownToDirectory(row);
hgs
parents:
diff changeset
   194
    } else if (row >= 0) {
hgs
parents:
diff changeset
   195
        mFolderSelectorWrapper->moveDownToDirectory(row);
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
}
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
/**
hgs
parents:
diff changeset
   200
  * Slot handling the move up button to move up one leve in directory hierarchy
hgs
parents:
diff changeset
   201
  */
hgs
parents:
diff changeset
   202
void FbFolderSelectionDialog::moveUpPressed()
hgs
parents:
diff changeset
   203
{
hgs
parents:
diff changeset
   204
    mFolderSelectorWrapper->moveUpOneLevel();
hgs
parents:
diff changeset
   205
}
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
void FbFolderSelectionDialog::acceptTriggered()
hgs
parents:
diff changeset
   208
{
hgs
parents:
diff changeset
   209
    accept();
hgs
parents:
diff changeset
   210
}
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
/**
hgs
parents:
diff changeset
   215
  * Constructor
hgs
parents:
diff changeset
   216
  */
hgs
parents:
diff changeset
   217
FbCopyToFolderSelectionDialog::FbCopyToFolderSelectionDialog(QGraphicsItem *parent) :
hgs
parents:
diff changeset
   218
        FbFolderSelectionDialog(parent)
hgs
parents:
diff changeset
   219
{
hgs
parents:
diff changeset
   220
    if (headingWidget()) {
hgs
parents:
diff changeset
   221
        mTitle->setPlainText(QString("Copy to"));
hgs
parents:
diff changeset
   222
    }
hgs
parents:
diff changeset
   223
    if (actions().count() > 1) {
hgs
parents:
diff changeset
   224
        actions().at(0)->setText(QString("Copy here"));
hgs
parents:
diff changeset
   225
    }
hgs
parents:
diff changeset
   226
}
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
/**
hgs
parents:
diff changeset
   231
  * Constructor
hgs
parents:
diff changeset
   232
  */
hgs
parents:
diff changeset
   233
FbMoveToFolderSelectionDialog::FbMoveToFolderSelectionDialog(QGraphicsItem *parent) :
hgs
parents:
diff changeset
   234
        FbFolderSelectionDialog(parent)
hgs
parents:
diff changeset
   235
{
hgs
parents:
diff changeset
   236
    if (headingWidget()) {
hgs
parents:
diff changeset
   237
        mTitle->setPlainText(QString("Move to"));
hgs
parents:
diff changeset
   238
    }
hgs
parents:
diff changeset
   239
    if (actions().count() > 1) {
hgs
parents:
diff changeset
   240
        actions().at(0)->setText(QString("Move here"));
hgs
parents:
diff changeset
   241
    }
hgs
parents:
diff changeset
   242
}
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
// End of file