diff options
-rw-r--r-- | images/Makefile | 4 | ||||
-rw-r--r-- | images/active.png | bin | 375 -> 550 bytes | |||
-rw-r--r-- | images/file.png | bin | 0 -> 644 bytes | |||
-rw-r--r-- | images/folder_closed.png | bin | 0 -> 652 bytes | |||
-rw-r--r-- | images/folder_open.png | bin | 0 -> 705 bytes | |||
-rw-r--r-- | images/inactive.png | bin | 437 -> 819 bytes | |||
-rw-r--r-- | images/minus.png | bin | 0 -> 472 bytes | |||
-rw-r--r-- | images/plus.png | bin | 0 -> 480 bytes | |||
-rw-r--r-- | images/transparent.png | bin | 0 -> 70 bytes | |||
-rw-r--r-- | javascript/Makefile | 3 | ||||
-rw-r--r-- | javascript/treeview.js | 46 | ||||
-rw-r--r-- | pages/Makefile | 3 | ||||
-rw-r--r-- | pages/recordings.ecpp | 69 | ||||
-rw-r--r-- | pages/recordings_item.ecpp | 4 | ||||
-rw-r--r-- | recordings.cpp | 22 | ||||
-rw-r--r-- | recordings.h | 5 |
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 Binary files differindex 1db3c4b..8e163ed 100644 --- a/images/active.png +++ b/images/active.png diff --git a/images/file.png b/images/file.png Binary files differnew file mode 100644 index 0000000..340102c --- /dev/null +++ b/images/file.png diff --git a/images/folder_closed.png b/images/folder_closed.png Binary files differnew file mode 100644 index 0000000..8b37ac1 --- /dev/null +++ b/images/folder_closed.png diff --git a/images/folder_open.png b/images/folder_open.png Binary files differnew file mode 100644 index 0000000..7a0c176 --- /dev/null +++ b/images/folder_open.png diff --git a/images/inactive.png b/images/inactive.png Binary files differindex 1f86259..9d53b98 100644 --- a/images/inactive.png +++ b/images/inactive.png diff --git a/images/minus.png b/images/minus.png Binary files differnew file mode 100644 index 0000000..05fb45e --- /dev/null +++ b/images/minus.png diff --git a/images/plus.png b/images/plus.png Binary files differnew file mode 100644 index 0000000..7613c9c --- /dev/null +++ b/images/plus.png diff --git a/images/transparent.png b/images/transparent.png Binary files differnew file mode 100644 index 0000000..37c28e7 --- /dev/null +++ b/images/transparent.png 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 |