summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--images/Makefile4
-rw-r--r--images/active.pngbin375 -> 550 bytes
-rw-r--r--images/file.pngbin0 -> 644 bytes
-rw-r--r--images/folder_closed.pngbin0 -> 652 bytes
-rw-r--r--images/folder_open.pngbin0 -> 705 bytes
-rw-r--r--images/inactive.pngbin437 -> 819 bytes
-rw-r--r--images/minus.pngbin0 -> 472 bytes
-rw-r--r--images/plus.pngbin0 -> 480 bytes
-rw-r--r--images/transparent.pngbin0 -> 70 bytes
-rw-r--r--javascript/Makefile3
-rw-r--r--javascript/treeview.js46
-rw-r--r--pages/Makefile3
-rw-r--r--pages/recordings.ecpp69
-rw-r--r--pages/recordings_item.ecpp4
-rw-r--r--recordings.cpp22
-rw-r--r--recordings.h5
16 files changed, 113 insertions, 43 deletions
diff --git a/images/Makefile b/images/Makefile
index 8194e9c..fb4a949 100644
--- a/images/Makefile
+++ b/images/Makefile
@@ -14,7 +14,9 @@ VDRDIR ?= ../../../..
### The object files (add further files here):
-OBJS = logo.o record.o active.o inactive.o button_blue.o
+OBJS = logo.o record.o active.o inactive.o button_blue.o \
+ file.o folder_closed.o folder_open.o plus.o minus.o \
+ transparent.o
### Default rules:
diff --git a/images/active.png b/images/active.png
index 1db3c4b..8e163ed 100644
--- a/images/active.png
+++ b/images/active.png
Binary files differ
diff --git a/images/file.png b/images/file.png
new file mode 100644
index 0000000..340102c
--- /dev/null
+++ b/images/file.png
Binary files differ
diff --git a/images/folder_closed.png b/images/folder_closed.png
new file mode 100644
index 0000000..8b37ac1
--- /dev/null
+++ b/images/folder_closed.png
Binary files differ
diff --git a/images/folder_open.png b/images/folder_open.png
new file mode 100644
index 0000000..7a0c176
--- /dev/null
+++ b/images/folder_open.png
Binary files differ
diff --git a/images/inactive.png b/images/inactive.png
index 1f86259..9d53b98 100644
--- a/images/inactive.png
+++ b/images/inactive.png
Binary files differ
diff --git a/images/minus.png b/images/minus.png
new file mode 100644
index 0000000..05fb45e
--- /dev/null
+++ b/images/minus.png
Binary files differ
diff --git a/images/plus.png b/images/plus.png
new file mode 100644
index 0000000..7613c9c
--- /dev/null
+++ b/images/plus.png
Binary files differ
diff --git a/images/transparent.png b/images/transparent.png
new file mode 100644
index 0000000..37c28e7
--- /dev/null
+++ b/images/transparent.png
Binary files differ
diff --git a/javascript/Makefile b/javascript/Makefile
index 4e074a5..1e228f1 100644
--- a/javascript/Makefile
+++ b/javascript/Makefile
@@ -15,7 +15,8 @@ VDRDIR ?= ../../../..
### The object files (add further files here):
-OBJS = alphaAPI.o domLib.o domTT_drag.o domTT.o fadomatic.o
+OBJS = alphaAPI.o domLib.o domTT_drag.o domTT.o fadomatic.o \
+ treeview.o
### Default rules:
diff --git a/javascript/treeview.js b/javascript/treeview.js
new file mode 100644
index 0000000..d0041a8
--- /dev/null
+++ b/javascript/treeview.js
@@ -0,0 +1,46 @@
+// ---------------------------------------------
+// --- Name: Easy DHTML Treeview --
+// --- Author: D.D. de Kerf --
+// --- Adapted: Dieter Hametner --
+// --- Version: 0.2 Date: 13-6-2001 --
+// ---------------------------------------------
+function Toggle(node)
+{
+ // Unfold the branch if it isn't visible
+ if (node.nextSibling.style.display == 'none')
+ {
+ // Change the image (if there is an image)
+ if (node.childNodes.length > 0)
+ {
+ if (node.childNodes.item(0).nodeName == "IMG")
+ {
+ node.childNodes.item(0).src = "minus.png";
+ }
+ if (node.childNodes.item(1).nodeName == "IMG")
+ {
+ node.childNodes.item(1).src = "folder_open.png";
+ }
+ }
+
+ node.nextSibling.style.display = 'block';
+ }
+ // Collapse the branch if it IS visible
+ else
+ {
+ // Change the image (if there is an image)
+ if (node.childNodes.length > 0)
+ {
+ if (node.childNodes.item(0).nodeName == "IMG")
+ {
+ node.childNodes.item(0).src = "plus.png";
+ }
+ if (node.childNodes.item(1).nodeName == "IMG")
+ {
+ node.childNodes.item(1).src = "folder_closed.png";
+ }
+ }
+
+ node.nextSibling.style.display = 'none';
+ }
+
+}
diff --git a/pages/Makefile b/pages/Makefile
index 5c96adc..246a6c5 100644
--- a/pages/Makefile
+++ b/pages/Makefile
@@ -17,8 +17,7 @@ VDRDIR ?= ../../../..
OBJS = menu.o event_widget.o channels.o recordings.o schedule.o \
screenshot.o timers.o whats_on_now.o whats_on_next.o \
- keypress.o remote.o channels_widget.o edit_timer.o \
- recordings_item.o
+ keypress.o remote.o channels_widget.o edit_timer.o
### Default rules:
diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp
index 6a3a8cf..97ef983 100644
--- a/pages/recordings.ecpp
+++ b/pages/recordings.ecpp
@@ -1,4 +1,5 @@
<%pre>
+#include <sstream>
#include <vdr/plugin.h>
#include <vdr/config.h>
#include <vdr/i18n.h>
@@ -8,6 +9,9 @@
using namespace vdrlive;
</%pre>
+<%request scope="page">
+RecordingsTree recordingsTree;
+</%request>
<%args>
</%args>
<{
@@ -16,6 +20,7 @@ using namespace vdrlive;
<head>
<title>VDR-Live - <$ tr("Recordings") $></title>
<link rel="stylesheet" type="text/css" href="/styles.css" />
+ <script src="treetoggle.js" type="text/javascript" />
</head>
<body>
<div class="left_area">
@@ -29,19 +34,63 @@ using namespace vdrlive;
% if (Recordings.Count() == 0) {
Keine Aufnahmen vorhanden
% } else {
- <table class="recording" cellspacing="0" cellpadding="0">
- <tr>
- <td class="head"><$ tr("Structure") $></td>
- <td class="head"><$ tr("Date") $></td>
- <td class="head"><$ tr("Time") $></td>
- <td class="head"><$ tr("Name") $></td>
- </tr>
- </table>
-% RecordingsTree recordingsTree;
<div class="recordings">
-<& recordings_item &>
+<& recordings.recordings_item &>
</div>
% }
</div>
</body>
</html>
+<%def recordings_item>
+<%args>
+path[];
+int level = 0;
+</%args>
+<{
+if (level > 0) {
+}>
+<ul class="recordingslist" style="display: none;">
+<{
+}
+else {
+}>
+<ul class="recordingslist" style="display: block;">
+<{
+} // if (level > 0)
+
+RecordingsTree::Map::iterator iter;
+RecordingsTree::Map::iterator end = recordingsTree.end(path);
+for (iter = recordingsTree.begin(path); iter != end; iter++) {
+ RecordingsTree::RecordingsItemPtr recItem = iter->second;
+ std::string folderimg(level > 0 ? "folder_closed.png" : "folder_closed.png");
+ std::string collapseimg(level > 0 ? "plus.png" : "plus.png");
+}>
+ <li class="recording">
+% if (recItem->IsDir()) {
+% // Die folgenden img-Tags muessen direkt auf einander folgen
+% // wegen dem etwas 'beschraenkten' treetoggle.js.
+ <a onClick="Toggle(this)" href="#"><img src="/<$ collapseimg $>" alt="" /><img src="/<$ folderimg $>" alt="" />
+ <span class="recordingname"><$ recItem->Name() $></span>
+ </a><{
+ cxxtools::QueryParams recItemParams(qparam, false);
+ for (path_type::const_iterator i = path.begin(); i != path.end(); ++i) {
+ recItemParams.add("path", *i);
+ }
+ ostringstream levelStr;
+ levelStr << ++level;
+ recItemParams.add("path", recItem->Name());
+ recItemParams.add("level", levelStr.str());
+ callComp("recordings.recordings_item", request, reply, recItemParams);
+ } else {
+}>
+ <img src="/transparent.png" alt="" width="16" height="16" /><img src="/file.png" alt="file" />
+ <span class="recordingdate"><$ FormatDateTime(tr("%a, %b %d"), recItem->StartTime()) $></span>
+ <span class="recordingtime"><$ FormatDateTime(tr("%I:%M %p"), recItem->StartTime()) $></span>
+ <span class="recordingname"><$ recItem->Name() $></span>
+% }
+ </li>
+<{
+}
+}>
+</ul>
+</%def>
diff --git a/pages/recordings_item.ecpp b/pages/recordings_item.ecpp
index b152bbe..2c73d39 100644
--- a/pages/recordings_item.ecpp
+++ b/pages/recordings_item.ecpp
@@ -24,11 +24,11 @@ for (iter = recordingsTree.begin(path); iter != end; iter++) {
}>
<li class="recording <? active ? "active" ?>">
% if (recItem->IsDir()) {
- <span class="recordingexpand">DirIcon</span>
+ <span class="recordingmime"><img src="/folder_open.png" alt="folder_open" /></span>
<span class="recordingdate"><$ recItem->StartTime() $></span>
<span class="recordingtime"><$ recItem->StartTime() $></span>
% } else {
- <span class="recordingexpand">FileIcon</span>
+ <span class="recordingmime"><img src="/file.png" alt="file" /></span>
<span class="recordingdate"><$ FormatDateTime(tr("%a, %b %d"), recItem->StartTime()) $></span>
<span class="recordingtime"><$ FormatDateTime(tr("%I:%M %p"), recItem->StartTime()) $></span>
% }
diff --git a/recordings.cpp b/recordings.cpp
index 3eaef45..d4c7cb6 100644
--- a/recordings.cpp
+++ b/recordings.cpp
@@ -4,18 +4,12 @@
namespace vdrlive {
- RecordingsTree::RecordingsTree* RecordingsTree::globalInstance = 0;
-
RecordingsTree::RecordingsTree() :
m_maxLevel(0),
m_root(new RecordingsItemDir()),
m_recordingsLock(&Recordings)
{
- if (globalInstance != 0) {
- // TODO: report ERROR and fail.
- }
-
for ( cRecording* recording = Recordings.First(); recording != 0; recording = Recordings.Next( recording ) ) {
if (m_maxLevel < recording->HierarchyLevels()) {
m_maxLevel = recording->HierarchyLevels();
@@ -46,17 +40,10 @@ namespace vdrlive {
}
} while (pos != string::npos);
}
-
- globalInstance = this;
}
RecordingsTree::~RecordingsTree()
{
- if (globalInstance != this)
- {
- // TODO: report ERROR and fail
- }
- globalInstance = 0;
}
RecordingsTree::Map::iterator RecordingsTree::begin(const vector< string >& path)
@@ -128,13 +115,4 @@ namespace vdrlive {
return m_recording->start;
}
- RecordingsTree& LiveRecordingsTree()
- {
- if (RecordingsTree::globalInstance == 0)
- {
- // TODO: report ERROR and fail!
- }
- return *RecordingsTree::globalInstance;
- }
-
} // namespace vdrlive
diff --git a/recordings.h b/recordings.h
index 78041f3..4a05e63 100644
--- a/recordings.h
+++ b/recordings.h
@@ -14,8 +14,6 @@ namespace vdrlive {
class RecordingsTree
{
- friend RecordingsTree& LiveRecordingsTree();
-
public:
class RecordingsItem;
@@ -84,11 +82,8 @@ namespace vdrlive {
int m_maxLevel;
RecordingsItemPtr m_root;
cThreadLock m_recordingsLock;
-
- static RecordingsTree* globalInstance;
};
- RecordingsTree& LiveRecordingsTree();
} // namespace vdrlive
#endif // VDR_LIVE_RECORDINGS_H