gstreamer_test_apps/QtGSTPlayer/folderview.cpp
author hgs
Fri, 14 May 2010 18:43:44 -0500
changeset 20 7e3786c5ed27
parent 18 5824eee55f42
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18
hgs
parents:
diff changeset
     1
#include <QModelIndex>
hgs
parents:
diff changeset
     2
#include <QDirModel>
hgs
parents:
diff changeset
     3
#include <QApplication>
hgs
parents:
diff changeset
     4
hgs
parents:
diff changeset
     5
//#include <hbformitem.h>
hgs
parents:
diff changeset
     6
//#include <hbformview.h>
hgs
parents:
diff changeset
     7
#include <hblistview.h>
hgs
parents:
diff changeset
     8
#include <hblistviewitem.h>
hgs
parents:
diff changeset
     9
#include <hbmenu.h>
hgs
parents:
diff changeset
    10
#include <hbmainwindow.h>
hgs
parents:
diff changeset
    11
hgs
parents:
diff changeset
    12
#include <QDebug>
hgs
parents:
diff changeset
    13
#include <QAction>
hgs
parents:
diff changeset
    14
#include <HbAction>
hgs
parents:
diff changeset
    15
#include "folderview.h"
hgs
parents:
diff changeset
    16
#include "views.h"
hgs
parents:
diff changeset
    17
#include <HbAbstractViewItem>
hgs
parents:
diff changeset
    18
#include <QTimer>
hgs
parents:
diff changeset
    19
#include <hbnotificationdialog.h>
hgs
parents:
diff changeset
    20
/*! Constructor of FolderView. 
hgs
parents:
diff changeset
    21
 */
hgs
parents:
diff changeset
    22
#ifdef __cplusplus
hgs
parents:
diff changeset
    23
extern "C" 
hgs
parents:
diff changeset
    24
{
hgs
parents:
diff changeset
    25
#endif
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
int mCurrentState = 0;
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#ifdef __cplusplus
hgs
parents:
diff changeset
    30
}
hgs
parents:
diff changeset
    31
#endif
hgs
parents:
diff changeset
    32
//extern int mCurrentState;
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
FolderView::FolderView(QGraphicsItem *parent)
hgs
parents:
diff changeset
    35
        : HbView(parent),mModel( NULL ), mFolderPath("c:\\data\\Sounds\\Digital\\"),mTimer(NULL),mIsRecording( FALSE )
hgs
parents:
diff changeset
    36
{
hgs
parents:
diff changeset
    37
    mCurrentState = NONE;
hgs
parents:
diff changeset
    38
   
hgs
parents:
diff changeset
    39
    // Create a main widget for this view 
hgs
parents:
diff changeset
    40
    // In this case, list view is appropriate
hgs
parents:
diff changeset
    41
    // Note: HbListView is not derived from HbView,
hgs
parents:
diff changeset
    42
    // this is just like any other Hb widget but with a feature of 
hgs
parents:
diff changeset
    43
    // model-view separation
hgs
parents:
diff changeset
    44
    mFileList = new HbListView(this);
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    // Create a model to set for the list view
hgs
parents:
diff changeset
    47
    mModel = new QDirModel(this);
hgs
parents:
diff changeset
    48
    mFileList->setModel(mModel);
hgs
parents:
diff changeset
    49
    
hgs
parents:
diff changeset
    50
    // Setting initial path for folder list
hgs
parents:
diff changeset
    51
    mFileList->setRootIndex(mModel->index(mFolderPath));
hgs
parents:
diff changeset
    52
    //mFileList->
hgs
parents:
diff changeset
    53
    // Setting the main widget for this view
hgs
parents:
diff changeset
    54
    setWidget(mFileList);
hgs
parents:
diff changeset
    55
    //int x = mFileList->indexCount();    
hgs
parents:
diff changeset
    56
    QObject::connect(mFileList, SIGNAL(pressed(const QModelIndex)), this, SLOT(item_pressed(const QModelIndex)));
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
    // add menu
hgs
parents:
diff changeset
    59
    HbMenu* menu1 = menu()->addMenu(tr("Record"));
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
    HbAction* menu1_Action = new HbAction(tr("RAW"), this);
hgs
parents:
diff changeset
    62
    connect(menu1_Action, SIGNAL(triggered()), this, SLOT(record_RAW()));
hgs
parents:
diff changeset
    63
    menu1->addAction( menu1_Action );
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    menu1_Action = new HbAction(tr("WAV"), this);
hgs
parents:
diff changeset
    66
    connect(menu1_Action, SIGNAL(triggered()), this, SLOT(record_WAV()));
hgs
parents:
diff changeset
    67
    menu1->addAction( menu1_Action );
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    //create action Nokia India sub menu item.
hgs
parents:
diff changeset
    70
    menu1_Action = new HbAction(tr("AMR"), this);
hgs
parents:
diff changeset
    71
    connect(menu1_Action, SIGNAL(triggered()), this, SLOT(record_AMR()));
hgs
parents:
diff changeset
    72
    menu1->addAction( menu1_Action );
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
    menu1_Action = new HbAction(tr("G711"), this);
hgs
parents:
diff changeset
    75
    connect(menu1_Action, SIGNAL(triggered()), this, SLOT(record_G711()));
hgs
parents:
diff changeset
    76
    menu1->addAction( menu1_Action );
hgs
parents:
diff changeset
    77
    
hgs
parents:
diff changeset
    78
    menu1_Action = new HbAction(tr("AAC"), this);
hgs
parents:
diff changeset
    79
    connect(menu1_Action, SIGNAL(triggered()), this, SLOT(record_AAC()));
hgs
parents:
diff changeset
    80
    menu1->addAction( menu1_Action );
hgs
parents:
diff changeset
    81
    menu1_Action = new HbAction(tr("G729"), this);
hgs
parents:
diff changeset
    82
    connect(menu1_Action, SIGNAL(triggered()), this, SLOT(record_G729()));
hgs
parents:
diff changeset
    83
    menu1->addAction( menu1_Action );
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
    menu1_Action = new HbAction(tr("ILBC"), this);
hgs
parents:
diff changeset
    86
    connect(menu1_Action, SIGNAL(triggered()), this, SLOT(record_ILBC()));
hgs
parents:
diff changeset
    87
    menu1->addAction( menu1_Action );
hgs
parents:
diff changeset
    88
    
hgs
parents:
diff changeset
    89
   
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
    //menu()->addAction(tr("Play"), this, SLOT(play()));
hgs
parents:
diff changeset
    92
    menu()->addAction(tr("Stop"), this, SLOT(stop()));
hgs
parents:
diff changeset
    93
    menu()->addAction(tr("Pause"), this, SLOT(pause()));
hgs
parents:
diff changeset
    94
    menu()->addAction(tr("Resume"), this, SLOT(resume()));
hgs
parents:
diff changeset
    95
    menu()->addAction(tr("Exit"), qApp, SLOT(quit()));
hgs
parents:
diff changeset
    96
    
hgs
parents:
diff changeset
    97
    
hgs
parents:
diff changeset
    98
    /// timer required to get the glib events
hgs
parents:
diff changeset
    99
    mTimer = new QTimer(this);
hgs
parents:
diff changeset
   100
    connect(mTimer, SIGNAL(timeout()), this, SLOT(timertimeout()));
hgs
parents:
diff changeset
   101
    mTimer->start(10);
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
}
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
FolderView::~FolderView()
hgs
parents:
diff changeset
   106
{
hgs
parents:
diff changeset
   107
    if(mCurrentState != NONE)
hgs
parents:
diff changeset
   108
        gst_unref();
hgs
parents:
diff changeset
   109
delete mFileList;
hgs
parents:
diff changeset
   110
delete mModel;
hgs
parents:
diff changeset
   111
mTimer->stop();
hgs
parents:
diff changeset
   112
delete mTimer;
hgs
parents:
diff changeset
   113
}
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
void FolderView::folderViewTriggered()
hgs
parents:
diff changeset
   117
{
hgs
parents:
diff changeset
   118
    mainWindow()->setCurrentView(Views::folderView());
hgs
parents:
diff changeset
   119
}
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
void FolderView::showNote(const int err)
hgs
parents:
diff changeset
   122
{
hgs
parents:
diff changeset
   123
    if(err)
hgs
parents:
diff changeset
   124
    {
hgs
parents:
diff changeset
   125
        HbNotificationDialog* notifyDialog = new HbNotificationDialog;
hgs
parents:
diff changeset
   126
        notifyDialog->setTimeout(HbPopup::StandardTimeout);
hgs
parents:
diff changeset
   127
        QString strong;
hgs
parents:
diff changeset
   128
        QString sprint= strong.sprintf("Format Not supported(%d)",err);
hgs
parents:
diff changeset
   129
        notifyDialog->setTitleTextWrapping(Hb::TextWordWrap);
hgs
parents:
diff changeset
   130
        notifyDialog->setTitle(QString("Error"));
hgs
parents:
diff changeset
   131
        notifyDialog->setWrapMode(Hb::TextWordWrap);
hgs
parents:
diff changeset
   132
        notifyDialog->setText(sprint);
hgs
parents:
diff changeset
   133
        
hgs
parents:
diff changeset
   134
        notifyDialog->exec();
hgs
parents:
diff changeset
   135
        delete notifyDialog;
hgs
parents:
diff changeset
   136
    }
hgs
parents:
diff changeset
   137
}
hgs
parents:
diff changeset
   138
void FolderView::item_pressed(const QModelIndex &index)
hgs
parents:
diff changeset
   139
{
hgs
parents:
diff changeset
   140
    if( mIsRecording )
hgs
parents:
diff changeset
   141
    {
hgs
parents:
diff changeset
   142
        return;
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
    QVariant variant=index.data();
hgs
parents:
diff changeset
   145
    QString str = variant.toString();
hgs
parents:
diff changeset
   146
    
hgs
parents:
diff changeset
   147
    
hgs
parents:
diff changeset
   148
    QString fullpath = mFolderPath;
hgs
parents:
diff changeset
   149
    fullpath.append( str );
hgs
parents:
diff changeset
   150
    
hgs
parents:
diff changeset
   151
    TBuf16<1024> buf16;
hgs
parents:
diff changeset
   152
    buf16.Copy( (TUint16*)fullpath.data_ptr()->data ,fullpath.data_ptr()->size );
hgs
parents:
diff changeset
   153
    TBuf8<1024> buf8;
hgs
parents:
diff changeset
   154
    buf8.Copy( buf16 );
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
    if( NONE != mCurrentState )
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
    gst_unref();
hgs
parents:
diff changeset
   159
    }
hgs
parents:
diff changeset
   160
   
hgs
parents:
diff changeset
   161
    int err = gst_play_file( (char*)buf8.PtrZ() );
hgs
parents:
diff changeset
   162
    if(err)
hgs
parents:
diff changeset
   163
    {
hgs
parents:
diff changeset
   164
        showNote(err);
hgs
parents:
diff changeset
   165
        mCurrentState = NONE;
hgs
parents:
diff changeset
   166
    }
hgs
parents:
diff changeset
   167
    else
hgs
parents:
diff changeset
   168
    {
hgs
parents:
diff changeset
   169
        mCurrentState = PLAYING;
hgs
parents:
diff changeset
   170
    }   
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
}
hgs
parents:
diff changeset
   173
void FolderView::pause()
hgs
parents:
diff changeset
   174
{
hgs
parents:
diff changeset
   175
    if( PLAYING == mCurrentState  ){
hgs
parents:
diff changeset
   176
    gst_pause();
hgs
parents:
diff changeset
   177
    mCurrentState = PAUSE;
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
}
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
void FolderView::resume()
hgs
parents:
diff changeset
   182
{
hgs
parents:
diff changeset
   183
    if( PAUSE == mCurrentState  ){
hgs
parents:
diff changeset
   184
    gst_resume();
hgs
parents:
diff changeset
   185
    mCurrentState = PLAYING;
hgs
parents:
diff changeset
   186
    }
hgs
parents:
diff changeset
   187
}
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
void FolderView::stop()
hgs
parents:
diff changeset
   190
{
hgs
parents:
diff changeset
   191
    if( mIsRecording == TRUE )
hgs
parents:
diff changeset
   192
    {
hgs
parents:
diff changeset
   193
        gst_record_stop();
hgs
parents:
diff changeset
   194
    
hgs
parents:
diff changeset
   195
        if( mModel )
hgs
parents:
diff changeset
   196
            delete mModel;
hgs
parents:
diff changeset
   197
        
hgs
parents:
diff changeset
   198
        mModel = new QDirModel(this);
hgs
parents:
diff changeset
   199
        mFileList->setModel(mModel);
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
        mFileList->reset();
hgs
parents:
diff changeset
   202
        mFileList->setRootIndex(mModel->index(mFolderPath));
hgs
parents:
diff changeset
   203
//        mFileList->show();
hgs
parents:
diff changeset
   204
//      int x = mFileList->indexCount();
hgs
parents:
diff changeset
   205
        //setWidget(mFileList);
hgs
parents:
diff changeset
   206
        mIsRecording = FALSE;
hgs
parents:
diff changeset
   207
        return;
hgs
parents:
diff changeset
   208
    }
hgs
parents:
diff changeset
   209
    if( PLAYING == mCurrentState || PAUSE == mCurrentState ){
hgs
parents:
diff changeset
   210
    gst_unref();
hgs
parents:
diff changeset
   211
    mCurrentState = NONE;
hgs
parents:
diff changeset
   212
    }
hgs
parents:
diff changeset
   213
}
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
void FolderView::record_AMR()
hgs
parents:
diff changeset
   216
{
hgs
parents:
diff changeset
   217
    if( mCurrentState == NONE ){
hgs
parents:
diff changeset
   218
        int err = gst_record_file( RECORD_AMR );
hgs
parents:
diff changeset
   219
        if(err)
hgs
parents:
diff changeset
   220
        {
hgs
parents:
diff changeset
   221
            showNote(err);
hgs
parents:
diff changeset
   222
            mCurrentState = NONE;
hgs
parents:
diff changeset
   223
            mIsRecording = FALSE;
hgs
parents:
diff changeset
   224
        }
hgs
parents:
diff changeset
   225
        else
hgs
parents:
diff changeset
   226
        {
hgs
parents:
diff changeset
   227
            mCurrentState = PLAYING;
hgs
parents:
diff changeset
   228
            mIsRecording = TRUE;
hgs
parents:
diff changeset
   229
        }
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
}
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
void FolderView::record_WAV()
hgs
parents:
diff changeset
   234
{
hgs
parents:
diff changeset
   235
    if( mCurrentState == NONE ){
hgs
parents:
diff changeset
   236
        int err = gst_record_file( RECORD_WAV );
hgs
parents:
diff changeset
   237
        if(err)
hgs
parents:
diff changeset
   238
        {
hgs
parents:
diff changeset
   239
            showNote(err);
hgs
parents:
diff changeset
   240
            mCurrentState = NONE;
hgs
parents:
diff changeset
   241
            mIsRecording = FALSE;
hgs
parents:
diff changeset
   242
        }
hgs
parents:
diff changeset
   243
        else
hgs
parents:
diff changeset
   244
        {
hgs
parents:
diff changeset
   245
            mCurrentState = PLAYING;
hgs
parents:
diff changeset
   246
            mIsRecording = TRUE;
hgs
parents:
diff changeset
   247
        }
hgs
parents:
diff changeset
   248
        //gst_record_wav();
hgs
parents:
diff changeset
   249
    }    
hgs
parents:
diff changeset
   250
}
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
void FolderView::record_RAW()
hgs
parents:
diff changeset
   253
{
hgs
parents:
diff changeset
   254
    if( mCurrentState == NONE ){
hgs
parents:
diff changeset
   255
        int err = gst_record_file( RECORD_RAW );
hgs
parents:
diff changeset
   256
        if(err)
hgs
parents:
diff changeset
   257
        {
hgs
parents:
diff changeset
   258
            showNote(err);
hgs
parents:
diff changeset
   259
            mCurrentState = NONE;
hgs
parents:
diff changeset
   260
            mIsRecording = FALSE;
hgs
parents:
diff changeset
   261
        }
hgs
parents:
diff changeset
   262
        else
hgs
parents:
diff changeset
   263
        {
hgs
parents:
diff changeset
   264
            mCurrentState = PLAYING;
hgs
parents:
diff changeset
   265
            mIsRecording = TRUE;
hgs
parents:
diff changeset
   266
        }
hgs
parents:
diff changeset
   267
    }
hgs
parents:
diff changeset
   268
}
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
void FolderView::record_G711()
hgs
parents:
diff changeset
   271
{
hgs
parents:
diff changeset
   272
    if( mCurrentState == NONE ){
hgs
parents:
diff changeset
   273
        int err = gst_record_file( RECORD_G711 );
hgs
parents:
diff changeset
   274
        if(err)
hgs
parents:
diff changeset
   275
        {
hgs
parents:
diff changeset
   276
            showNote(err);
hgs
parents:
diff changeset
   277
            mCurrentState = NONE;
hgs
parents:
diff changeset
   278
            mIsRecording = FALSE;
hgs
parents:
diff changeset
   279
        }
hgs
parents:
diff changeset
   280
        else
hgs
parents:
diff changeset
   281
        {
hgs
parents:
diff changeset
   282
            mCurrentState = PLAYING;
hgs
parents:
diff changeset
   283
            mIsRecording = TRUE;
hgs
parents:
diff changeset
   284
        }
hgs
parents:
diff changeset
   285
    }
hgs
parents:
diff changeset
   286
}
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
void FolderView::record_G729()
hgs
parents:
diff changeset
   289
{
hgs
parents:
diff changeset
   290
    if( mCurrentState == NONE ){
hgs
parents:
diff changeset
   291
        int err = gst_record_file( RECORD_G729 );
hgs
parents:
diff changeset
   292
        if(err)
hgs
parents:
diff changeset
   293
        {
hgs
parents:
diff changeset
   294
            showNote(err);
hgs
parents:
diff changeset
   295
            mCurrentState = NONE;
hgs
parents:
diff changeset
   296
            mIsRecording = FALSE;
hgs
parents:
diff changeset
   297
        }
hgs
parents:
diff changeset
   298
        else
hgs
parents:
diff changeset
   299
        {
hgs
parents:
diff changeset
   300
            mCurrentState = PLAYING;
hgs
parents:
diff changeset
   301
            mIsRecording = TRUE;
hgs
parents:
diff changeset
   302
        }
hgs
parents:
diff changeset
   303
    }
hgs
parents:
diff changeset
   304
}
hgs
parents:
diff changeset
   305
hgs
parents:
diff changeset
   306
void FolderView::record_ILBC()
hgs
parents:
diff changeset
   307
{
hgs
parents:
diff changeset
   308
    if( mCurrentState == NONE ){
hgs
parents:
diff changeset
   309
        int err = gst_record_file( RECORD_ILBC );
hgs
parents:
diff changeset
   310
        if(err)
hgs
parents:
diff changeset
   311
        {
hgs
parents:
diff changeset
   312
            showNote(err);
hgs
parents:
diff changeset
   313
            mCurrentState = NONE;
hgs
parents:
diff changeset
   314
            mIsRecording = FALSE;
hgs
parents:
diff changeset
   315
        }
hgs
parents:
diff changeset
   316
        else
hgs
parents:
diff changeset
   317
        {
hgs
parents:
diff changeset
   318
            mCurrentState = PLAYING;
hgs
parents:
diff changeset
   319
            mIsRecording = TRUE;
hgs
parents:
diff changeset
   320
        }
hgs
parents:
diff changeset
   321
    }
hgs
parents:
diff changeset
   322
}
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
void FolderView::record_AAC()
hgs
parents:
diff changeset
   325
{
hgs
parents:
diff changeset
   326
    if( mCurrentState == NONE ){
hgs
parents:
diff changeset
   327
        int err = gst_record_file( RECORD_AAC );
hgs
parents:
diff changeset
   328
        if(err)
hgs
parents:
diff changeset
   329
        {
hgs
parents:
diff changeset
   330
            showNote(err);
hgs
parents:
diff changeset
   331
            mCurrentState = NONE;
hgs
parents:
diff changeset
   332
            mIsRecording = FALSE;
hgs
parents:
diff changeset
   333
        }
hgs
parents:
diff changeset
   334
        else
hgs
parents:
diff changeset
   335
        {
hgs
parents:
diff changeset
   336
            mCurrentState = PLAYING;
hgs
parents:
diff changeset
   337
            mIsRecording = TRUE;
hgs
parents:
diff changeset
   338
        }
hgs
parents:
diff changeset
   339
    }
hgs
parents:
diff changeset
   340
}
hgs
parents:
diff changeset
   341
void FolderView::timertimeout()
hgs
parents:
diff changeset
   342
{
hgs
parents:
diff changeset
   343
    if( PLAYING == mCurrentState ){
hgs
parents:
diff changeset
   344
    gst_get_events();
hgs
parents:
diff changeset
   345
    }
hgs
parents:
diff changeset
   346
    
hgs
parents:
diff changeset
   347
    if( STOP == mCurrentState ){
hgs
parents:
diff changeset
   348
        gst_unref();
hgs
parents:
diff changeset
   349
        mCurrentState = NONE;
hgs
parents:
diff changeset
   350
        mIsRecording = FALSE;
hgs
parents:
diff changeset
   351
    }
hgs
parents:
diff changeset
   352
}