Commit 9d4d1600 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf
Browse files

Qt4 - Bookmark implementation by Antoine Lejeune - phytos # via

parent fd4a7f8c
......@@ -19,6 +19,7 @@ nodist_SOURCES_qt4 = \
input_manager.moc.cpp \
playlist_model.moc.cpp \
dialogs/playlist.moc.cpp \
dialogs/bookmarks.moc.cpp \
dialogs/mediainfo.moc.cpp \
dialogs/extended.moc.cpp \
dialogs/messages.moc.cpp \
......@@ -87,6 +88,7 @@ SOURCES_qt4 = qt4.cpp \
input_manager.cpp \
playlist_model.cpp \
dialogs/playlist.cpp \
dialogs/bookmarks.cpp \
dialogs/preferences.cpp \
dialogs/mediainfo.cpp \
dialogs/extended.cpp \
......@@ -120,6 +122,7 @@ noinst_HEADERS = \
input_manager.hpp \
playlist_model.hpp \
dialogs/playlist.hpp \
dialogs/bookmarks.hpp \
dialogs/mediainfo.hpp \
dialogs/extended.hpp \
dialogs/messages.hpp \
......
/*****************************************************************************
* bookmarks.cpp : Bookmarks
****************************************************************************
* Copyright (C) 2006 the VideoLAN team
*
* Authors: Antoine Lejeune <phytos@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "dialogs/bookmarks.hpp"
#include "dialogs_provider.hpp"
#include "input_manager.hpp"
#include <QGridLayout>
#include <QSpacerItem>
#include <QPushButton>
BookmarksDialog *BookmarksDialog::instance = NULL;
BookmarksDialog::BookmarksDialog( intf_thread_t *_p_intf ):QVLCFrame( _p_intf )
{
setWindowFlags( Qt::Tool );
setWindowOpacity( config_GetFloat( p_intf, "qt-opacity" ) );
setWindowTitle( qtr( "Edit bookmark" ) );
QGridLayout *layout = new QGridLayout( this );
QPushButton *addButton = new QPushButton( qtr( "Add" ) );
QPushButton *delButton = new QPushButton( qtr( "Delete" ) );
QPushButton *clearButton = new QPushButton( qtr( "Clear" ) );
QPushButton *extractButton = new QPushButton( qtr( "Extract" ) );
bookmarksList = new QTreeWidget( this );
bookmarksList->setRootIsDecorated( false );
bookmarksList->setAlternatingRowColors( true );
bookmarksList->setSelectionMode( QAbstractItemView::ExtendedSelection );
bookmarksList->setSelectionBehavior( QAbstractItemView::SelectRows );
bookmarksList->setEditTriggers( QAbstractItemView::SelectedClicked );
bookmarksList->setColumnCount( 3 );
QStringList headerLabels;
headerLabels << qtr( "Description" );
headerLabels << qtr( "Bytes" );
headerLabels << qtr( "Time" );
bookmarksList->setHeaderLabels( headerLabels );
layout->addWidget( addButton, 0, 0 );
layout->addWidget( delButton, 1, 0 );
layout->addWidget( clearButton, 2, 0 );
layout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding ), 4, 0 );
layout->addWidget( extractButton, 5, 0 );
layout->addWidget( bookmarksList, 0, 1, 6, 1);
layout->setColumnStretch( 1, 1 );
CONNECT( bookmarksList, activated( QModelIndex ), this,
activateItem( QModelIndex ) );
CONNECT( bookmarksList, itemChanged( QTreeWidgetItem*, int ), this, edit( QTreeWidgetItem*, int ) );
BUTTONACT( addButton, add() );
BUTTONACT( delButton, del() );
BUTTONACT( clearButton, clear() );
BUTTONACT( extractButton, extract() );
}
BookmarksDialog::~BookmarksDialog()
{
}
void BookmarksDialog::update()
{
input_thread_t *p_input = THEMIM->getInput();
if( !p_input ) return;
seekpoint_t **pp_bookmarks;
int i_bookmarks;
if( bookmarksList->topLevelItemCount() > 0 )
{
bookmarksList->model()->removeRows( 0, bookmarksList->topLevelItemCount() );
}
if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
&i_bookmarks ) != VLC_SUCCESS )
return;
for( int i = 0; i < i_bookmarks; i++ )
{
// List with the differents elements of the row
QStringList row;
row << QString( pp_bookmarks[i]->psz_name );
row << QString( "%1" ).arg( pp_bookmarks[i]->i_byte_offset );
row << QString( "%1" ).arg( pp_bookmarks[i]->i_time_offset / 1000000 );
QTreeWidgetItem *item = new QTreeWidgetItem( bookmarksList, row );
item->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEditable |
Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
bookmarksList->insertTopLevelItem( i, item );
}
}
void BookmarksDialog::add()
{
input_thread_t *p_input = THEMIM->getInput();
if( !p_input ) return;
seekpoint_t bookmark;
vlc_value_t pos;
bookmark.psz_name = NULL;
bookmark.i_byte_offset = 0;
bookmark.i_time_offset = 0;
input_Control( p_input, INPUT_GET_BYTE_POSITION, &bookmark.i_byte_offset );
var_Get( p_input, "time", &pos );
bookmark.i_time_offset = pos.i_time;
input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark );
update();
}
void BookmarksDialog::del()
{
input_thread_t *p_input = THEMIM->getInput();
if( !p_input ) return;
int i_focused = bookmarksList->currentIndex().row();
if( i_focused >= 0 )
{
input_Control( p_input, INPUT_DEL_BOOKMARK, i_focused );
}
update();
}
void BookmarksDialog::clear()
{
input_thread_t *p_input = THEMIM->getInput();
if( !p_input ) return;
input_Control( p_input, INPUT_CLEAR_BOOKMARKS );
update();
}
void BookmarksDialog::edit( QTreeWidgetItem *item, int column )
{
// We can only edit a item if it is the last item selected
if( bookmarksList->selectedItems().isEmpty() ||
bookmarksList->selectedItems().last() != item )
return;
input_thread_t *p_input = THEMIM->getInput();
if( !p_input ) return;
// We get the row number of the item
int i_edit = bookmarksList->indexOfTopLevelItem( item );
// We get the bookmarks list
seekpoint_t **pp_bookmarks;
int i_bookmarks;
if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
&i_bookmarks ) != VLC_SUCCESS )
return;
if( i_edit >= i_bookmarks )
return;
// We modify the seekpoint
seekpoint_t *p_seekpoint = pp_bookmarks[i_edit];
if( column == 0 )
p_seekpoint->psz_name = strdup( qtu( item->text( column ) ) );
else if( column == 1 )
p_seekpoint->i_byte_offset = atoi( qtu( item->text( column ) ) );
else if( column == 2 )
p_seekpoint->i_time_offset = 1000000 * atoll( qtu( item->text( column ) ) );
if( input_Control( p_input, INPUT_CHANGE_BOOKMARK, p_seekpoint, i_edit ) !=
VLC_SUCCESS )
return;
update();
}
void BookmarksDialog::extract()
{
// TODO
}
void BookmarksDialog::activateItem( QModelIndex index )
{
input_thread_t *p_input = THEMIM->getInput();
if( !p_input ) return;
input_Control( p_input, INPUT_SET_BOOKMARK, index.row() );
}
/*****************************************************************************
* bookmarks.hpp : bookmarks
****************************************************************************
* Copyright (C) 2006 the VideoLAN team
* $Id: extended.hpp 23338 2007-11-26 08:10:01Z jb $
*
* Authors: Antoine Lejeune <phytos@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef _BOOKMARKS_H_
#define _BOOKMARKS_H
#include "util/qvlcframe.hpp"
#include <QStandardItemModel>
#include <QTreeView>
#include <QTreeWidget>
class BookmarksDialog : public QVLCFrame
{
Q_OBJECT;
public:
static BookmarksDialog * getInstance( intf_thread_t *p_intf )
{
if( !instance )
instance = new BookmarksDialog( p_intf );
return instance;
}
virtual ~BookmarksDialog();
static bool exists() { return ( instance != NULL ) ; }
private:
BookmarksDialog( intf_thread_t * );
static BookmarksDialog *instance;
void update();
QTreeWidget *bookmarksList;
private slots:
void add();
void del();
void clear();
void edit( QTreeWidgetItem *item, int column );
void extract();
void activateItem( QModelIndex index );
};
#endif
......@@ -36,6 +36,7 @@
/* The dialogs */
#include "dialogs/playlist.hpp"
#include "dialogs/bookmarks.hpp"
#include "dialogs/preferences.hpp"
#include "dialogs/mediainfo.hpp"
#include "dialogs/messages.hpp"
......@@ -202,8 +203,7 @@ void DialogsProvider::mediaCodecDialog()
void DialogsProvider::bookmarksDialog()
{
/* TODO - Implement me */
/* BookmarkDialog::getInstance( p_intf )->toggleVisible(); */
BookmarksDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::podcastConfigureDialog()
......
......@@ -298,9 +298,9 @@ QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf,
addDPStaticEntry( menu, qtr( I_MENU_CODECINFO ) , "",
":/pixmaps/menus_info_16px.png", SLOT( mediaCodecDialog() ), "Ctrl+J" );
#if 0 /* Not Implemented yet */
addDPStaticEntry( menu, qtr( I_MENU_BOOKMARK ), "","", "bookmarksDialog()", "Ctrl+B" );
#endif
addDPStaticEntry( menu, qtr( I_MENU_BOOKMARK ), "","",
SLOT( bookmarksDialog() ), "Ctrl+B" );
addDPStaticEntry( menu, qtr( I_MENU_VLM ), "", "", SLOT( vlmDialog() ),
"Ctrl+V" );
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment