Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
e5103010
Commit
e5103010
authored
Dec 18, 2010
by
Srikanth Raju
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Qt/ML: Configuration dialog for Media Library Directory Monitoring
parent
eeddb68f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
423 additions
and
0 deletions
+423
-0
modules/gui/qt4/Modules.am
modules/gui/qt4/Modules.am
+3
-0
modules/gui/qt4/dialogs/ml_configuration.cpp
modules/gui/qt4/dialogs/ml_configuration.cpp
+301
-0
modules/gui/qt4/dialogs/ml_configuration.hpp
modules/gui/qt4/dialogs/ml_configuration.hpp
+119
-0
No files found.
modules/gui/qt4/Modules.am
View file @
e5103010
...
...
@@ -26,6 +26,7 @@ nodist_SOURCES_qt4 = \
dialogs/playlist.moc.cpp \
dialogs/bookmarks.moc.cpp \
dialogs/mediainfo.moc.cpp \
dialogs/ml_configuration.moc.cpp \
dialogs/extended.moc.cpp \
dialogs/messages.moc.cpp \
dialogs/epg.moc.cpp \
...
...
@@ -241,6 +242,7 @@ SOURCES_qt4 = qt4.cpp \
dialogs/bookmarks.cpp \
dialogs/preferences.cpp \
dialogs/mediainfo.cpp \
dialogs/ml_configuration.cpp \
dialogs/epg.cpp \
dialogs/extended.cpp \
dialogs/messages.cpp \
...
...
@@ -304,6 +306,7 @@ noinst_HEADERS = \
dialogs/playlist.hpp \
dialogs/bookmarks.hpp \
dialogs/mediainfo.hpp \
dialogs/ml_configuration.hpp \
dialogs/extended.hpp \
dialogs/messages.hpp \
dialogs/epg.hpp \
...
...
modules/gui/qt4/dialogs/ml_configuration.cpp
0 → 100644
View file @
e5103010
/*****************************************************************************
* ml_configuration.cpp: ML's configuration dialog (folder view)
*****************************************************************************
* Copyright (C) 2008-2010 the VideoLAN Team and AUTHORS
* $Id$
*
* Authors: Antoine Lejeune <phytos@videolan.org>
* Jean-Philippe André <jpeg@videolan.org>
* Rémi Duraffort <ivoire@videolan.org>
* Adrien Maglo <magsoft@videolan.org>
*
* 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 "ml_configuration.hpp"
#ifdef MEDIA_LIBRARY
#include <QTreeView>
#include <QPushButton>
#include <QDialogButtonBox>
MLConfDialog
*
MLConfDialog
::
instance
=
NULL
;
/** **************************************************************************
* MODEL FOR THE FILESYSTEM
*****************************************************************************/
Qt
::
ItemFlags
MLDirModel
::
flags
(
const
QModelIndex
&
index
)
const
{
Qt
::
ItemFlags
flags
=
QDirModel
::
flags
(
index
);
flags
|=
Qt
::
ItemIsUserCheckable
;
if
(
b_recursive
)
{
for
(
int
i
=
0
;
i
<
monitoredDirs
.
size
();
i
++
)
{
if
(
filePath
(
index
).
startsWith
(
monitoredDirs
.
at
(
i
)
)
)
{
if
(
monitoredDirs
.
at
(
i
)
!=
filePath
(
index
)
)
flags
^=
Qt
::
ItemIsEnabled
;
break
;
}
}
}
return
flags
;
}
QVariant
MLDirModel
::
data
(
const
QModelIndex
&
index
,
int
role
)
const
{
if
(
index
.
column
()
==
0
&&
role
==
Qt
::
CheckStateRole
)
{
if
(
itemCheckState
.
contains
(
filePath
(
index
)
)
)
return
itemCheckState
.
value
(
filePath
(
index
)
);
else
if
(
b_recursive
)
{
for
(
int
i
=
0
;
i
<
monitoredDirs
.
size
();
i
++
)
{
if
(
filePath
(
index
).
startsWith
(
monitoredDirs
.
at
(
i
)
)
)
return
Qt
::
Checked
;
}
return
Qt
::
Unchecked
;
}
else
return
Qt
::
Unchecked
;
}
return
QDirModel
::
data
(
index
,
role
);
}
bool
MLDirModel
::
setData
(
const
QModelIndex
&
index
,
const
QVariant
&
value
,
int
role
)
{
QModelIndex
idx
;
QModelIndex
topLeft
,
bottomRight
;
// index to signal they have changed
if
(
role
==
Qt
::
CheckStateRole
)
{
if
(
value
==
Qt
::
Checked
)
{
monitoredDirs
<<
filePath
(
index
);
itemCheckState
[
filePath
(
index
)]
=
Qt
::
Checked
;
/* We have to make his parents Qt::PartiallyChecked */
idx
=
index
.
parent
();
while
(
idx
!=
QModelIndex
()
)
{
if
(
!
(
!
b_recursive
&&
monitoredDirs
.
contains
(
filePath
(
idx
)
)
)
)
itemCheckState
[
filePath
(
idx
)]
=
Qt
::
PartiallyChecked
;
topLeft
=
idx
;
idx
=
idx
.
parent
();
}
/* We have to remove his children that are monitored if we are
in recursive mode */
if
(
b_recursive
)
{
for
(
int
i
=
0
;
i
<
monitoredDirs
.
size
()
-
1
;
i
++
)
{
if
(
monitoredDirs
.
at
(
i
).
startsWith
(
filePath
(
index
)
)
)
{
itemCheckState
.
take
(
monitoredDirs
.
at
(
i
)
);
monitoredDirs
.
removeAt
(
i
);
i
--
;
}
}
}
}
else
if
(
monitoredDirs
.
removeOne
(
filePath
(
index
)
)
)
{
itemCheckState
.
take
(
filePath
(
index
)
);
/* We have to make his parent Qt::Unchecked
if index is his only child */
for
(
idx
=
index
.
parent
();
idx
!=
QModelIndex
();
idx
=
idx
.
parent
()
)
{
if
(
monitoredDirs
.
size
()
==
0
)
{
itemCheckState
.
take
(
filePath
(
idx
)
);
topLeft
=
idx
;
continue
;
}
for
(
int
i
=
0
;
i
<
monitoredDirs
.
size
();
i
++
)
{
if
(
monitoredDirs
.
at
(
i
).
startsWith
(
filePath
(
idx
)
)
)
break
;
itemCheckState
.
take
(
filePath
(
idx
)
);
topLeft
=
idx
;
}
}
}
emit
dataChanged
(
topLeft
,
index
);
return
true
;
}
return
QDirModel
::
setData
(
index
,
value
,
role
);
}
int
MLDirModel
::
columnCount
(
const
QModelIndex
&
parent
)
const
{
return
1
;
}
void
MLDirModel
::
reset
(
bool
_b_recursive
,
vlc_array_t
*
p_array
)
{
b_recursive
=
_b_recursive
;
itemCheckState
.
clear
();
monitoredDirs
.
clear
();
for
(
int
i
=
0
;
i
<
vlc_array_count
(
p_array
);
i
++
)
{
setData
(
index
(
qfu
((
char
*
)
vlc_array_item_at_index
(
p_array
,
i
))
),
Qt
::
Checked
,
Qt
::
CheckStateRole
);
}
emit
layoutChanged
();
}
void
MLDirModel
::
setRecursivity
(
bool
_b_recursive
)
{
/* If the selection becomes recursive, we may have to delete from
monitoredDirs some directories */
if
(
!
b_recursive
&&
_b_recursive
)
{
for
(
int
i
=
0
;
i
<
monitoredDirs
.
size
();
i
++
)
{
for
(
int
j
=
i
+
1
;
j
<
monitoredDirs
.
size
();
j
++
)
{
if
(
monitoredDirs
.
at
(
i
).
startsWith
(
monitoredDirs
.
at
(
j
)
)
)
{
setData
(
index
(
monitoredDirs
.
at
(
i
)
),
Qt
::
Unchecked
,
Qt
::
CheckStateRole
);
i
--
;
}
else
if
(
monitoredDirs
.
at
(
j
).
startsWith
(
monitoredDirs
.
at
(
i
)
)
)
setData
(
index
(
monitoredDirs
.
at
(
j
)
),
Qt
::
Unchecked
,
Qt
::
CheckStateRole
);
}
}
}
b_recursive
=
_b_recursive
;
emit
layoutChanged
();
}
/** **************************************************************************
* PREFERENCES DIALOG FOR THE MEDIA LIBRARY
*****************************************************************************/
MLConfDialog
::
MLConfDialog
(
QWidget
*
parent
,
intf_thread_t
*
_p_intf
)
:
QVLCDialog
(
parent
,
_p_intf
),
p_intf
(
_p_intf
)
{
p_monitored_dirs
=
NULL
;
setWindowTitle
(
qtr
(
"Media library Preferences"
)
);
setMinimumSize
(
400
,
300
);
setParent
(
parent
,
Qt
::
Window
);
setWindowModality
(
Qt
::
NonModal
);
resize
(
550
,
450
);
QGridLayout
*
main_layout
=
new
QGridLayout
(
this
);
/* Directories selection */
QStringList
nameFilters
;
model
=
new
MLDirModel
(
nameFilters
,
QDir
::
Dirs
|
QDir
::
NoDotAndDotDot
,
QDir
::
Name
,
this
);
QTreeView
*
tree
=
new
QTreeView
(
this
);
tree
->
setModel
(
model
);
/* recursivity */
recursivity
=
new
QCheckBox
(
qtr
(
"Subdirectory recursive scanning"
)
);
/* Buttons */
QDialogButtonBox
*
buttonsBox
=
new
QDialogButtonBox
();
QPushButton
*
save
=
new
QPushButton
(
qtr
(
"&Save"
)
);
QPushButton
*
cancel
=
new
QPushButton
(
qtr
(
"&Cancel"
)
);
QPushButton
*
reset
=
new
QPushButton
(
qtr
(
"&Reset"
)
);
buttonsBox
->
addButton
(
save
,
QDialogButtonBox
::
AcceptRole
);
buttonsBox
->
addButton
(
cancel
,
QDialogButtonBox
::
RejectRole
);
buttonsBox
->
addButton
(
reset
,
QDialogButtonBox
::
ResetRole
);
main_layout
->
addWidget
(
tree
,
0
,
0
);
main_layout
->
addWidget
(
recursivity
,
1
,
0
);
main_layout
->
addWidget
(
buttonsBox
,
2
,
0
);
p_ml
=
ml_Hold
(
p_intf
);
init
();
BUTTONACT
(
save
,
save
()
);
BUTTONACT
(
cancel
,
cancel
()
);
BUTTONACT
(
reset
,
reset
()
);
CONNECT
(
recursivity
,
toggled
(
bool
),
model
,
setRecursivity
(
bool
)
);
}
MLConfDialog
::~
MLConfDialog
()
{
ml_Release
(
p_intf
);
}
void
MLConfDialog
::
init
()
{
bool
b_recursive
=
var_CreateGetBool
(
p_ml
,
"ml-recursive-scan"
);
recursivity
->
setChecked
(
b_recursive
);
if
(
p_monitored_dirs
)
vlc_array_destroy
(
p_monitored_dirs
);
p_monitored_dirs
=
vlc_array_new
();
ml_Control
(
p_ml
,
ML_GET_MONITORED
,
p_monitored_dirs
);
model
->
reset
(
b_recursive
,
p_monitored_dirs
);
}
void
MLConfDialog
::
save
()
{
QStringList
newDirs
=
model
->
monitoredDirs
;
QStringList
toDelete
;
for
(
int
i
=
0
;
i
<
vlc_array_count
(
p_monitored_dirs
);
i
++
)
{
if
(
newDirs
.
removeAll
(
qfu
((
char
*
)
vlc_array_item_at_index
(
p_monitored_dirs
,
i
))
)
==
0
)
{
toDelete
<<
qfu
((
char
*
)
vlc_array_item_at_index
(
p_monitored_dirs
,
i
));
}
}
for
(
int
i
=
0
;
i
<
toDelete
.
size
();
i
++
)
{
ml_Control
(
p_ml
,
ML_DEL_MONITORED
,
qtu
(
toDelete
.
at
(
i
)
)
);
}
for
(
int
i
=
0
;
i
<
newDirs
.
size
();
i
++
)
{
ml_Control
(
p_ml
,
ML_ADD_MONITORED
,
qtu
(
newDirs
.
at
(
i
)
)
);
}
var_SetBool
(
p_ml
,
"ml-recursive-scan"
,
recursivity
->
isChecked
()
);
init
();
hide
();
}
void
MLConfDialog
::
cancel
()
{
init
();
hide
();
}
void
MLConfDialog
::
reset
()
{
init
();
}
#endif
modules/gui/qt4/dialogs/ml_configuration.hpp
0 → 100644
View file @
e5103010
/*****************************************************************************
* ml_configuration.hpp: ML's configuration dialog (folder view)
*****************************************************************************
* Copyright (C) 2008-2010 the VideoLAN Team and AUTHORS
* $Id$
*
* Authors: Antoine Lejeune <phytos@videolan.org>
* Jean-Philippe André <jpeg@videolan.org>
* Rémi Duraffort <ivoire@videolan.org>
* Adrien Maglo <magsoft@videolan.org>
*
* 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 _MEDIA_LIBRARY_CONFIG_H
#define _MEDIA_LIBRARY_CONFIG_H
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#ifdef MEDIA_LIBRARY
#include <vlc_common.h>
#include <vlc_media_library.h>
#include "util/qvlcframe.hpp"
#include <QDirModel>
#include <QCheckBox>
#include <QDialogButtonBox>
#include <QPushButton>
/** Classes in this header */
class
MLDirModel
;
class
MLConfDialog
;
/** *************************************************************************
* \brief Model representing the filesystem and whose items are checkable
****************************************************************************/
class
MLDirModel
:
public
QDirModel
{
Q_OBJECT
;
public:
MLDirModel
(
const
QStringList
&
nameFilters
,
QDir
::
Filters
filters
,
QDir
::
SortFlags
sort
,
QObject
*
parent
=
0
)
:
QDirModel
(
nameFilters
,
filters
,
sort
,
parent
)
{};
virtual
Qt
::
ItemFlags
flags
(
const
QModelIndex
&
index
)
const
;
virtual
QVariant
data
(
const
QModelIndex
&
index
,
int
role
)
const
;
virtual
bool
setData
(
const
QModelIndex
&
index
,
const
QVariant
&
value
,
int
role
=
Qt
::
EditRole
);
int
columnCount
(
const
QModelIndex
&
parent
=
QModelIndex
()
)
const
;
void
reset
(
bool
,
vlc_array_t
*
);
QStringList
monitoredDirs
;
private:
bool
b_recursive
;
QMap
<
QString
,
Qt
::
CheckState
>
itemCheckState
;
intf_thread_t
*
p_intf
;
media_library_t
*
p_ml
;
public
slots
:
void
setRecursivity
(
bool
);
};
/** *************************************************************************
* \brief Configuration dialog for the media library
****************************************************************************/
class
MLConfDialog
:
public
QVLCDialog
{
Q_OBJECT
;
public:
static
MLConfDialog
*
getInstance
(
intf_thread_t
*
p_intf
)
{
if
(
!
instance
)
instance
=
new
MLConfDialog
(
(
QWidget
*
)
p_intf
->
p_sys
->
p_mi
,
p_intf
);
return
instance
;
}
virtual
~
MLConfDialog
();
private:
MLConfDialog
(
QWidget
*
,
intf_thread_t
*
);
void
init
();
vlc_array_t
*
p_monitored_dirs
;
media_library_t
*
p_ml
;
intf_thread_t
*
p_intf
;
MLDirModel
*
model
;
QCheckBox
*
recursivity
;
static
MLConfDialog
*
instance
;
private
slots
:
void
save
();
void
cancel
();
void
reset
();
void
close
()
{
save
();
};
};
#endif
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment