summaryrefslogtreecommitdiff
path: root/menuitems.c
diff options
context:
space:
mode:
Diffstat (limited to 'menuitems.c')
-rw-r--r--menuitems.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/menuitems.c b/menuitems.c
new file mode 100644
index 00000000..afbc9fc8
--- /dev/null
+++ b/menuitems.c
@@ -0,0 +1,137 @@
+/*
+ * menuitems.c: New menu item types
+ *
+ * See the main source file 'xineliboutput.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: menuitems.c,v 1.1 2006-06-03 10:01:17 phintuka Exp $
+ *
+ */
+
+#include <vdr/i18n.h>
+
+#include "menuitems.h"
+
+// --- cMenuEditTypedIntItem -------------------------------------------------
+
+cMenuEditTypedIntItem::cMenuEditTypedIntItem(const char *Name, const char *Type, int *Value, int Min, int Max, const char *ZeroText)
+:cMenuEditIntItem(Name,Value,Min,Max)
+{
+ type = strdup(Type?Type:"");
+ zeroText = ZeroText ? strdup(ZeroText) : NULL;
+ Set();
+}
+
+cMenuEditTypedIntItem::~cMenuEditTypedIntItem()
+{
+ free(type);
+ if(zeroText)
+ free(zeroText);
+}
+
+void cMenuEditTypedIntItem::Set(void)
+{
+ char buf[16];
+ if(zeroText && *value == 0) {
+ SetValue(zeroText);
+ } else {
+ snprintf(buf, sizeof(buf), "%d %s", *value, type);
+ SetValue(buf);
+ }
+}
+
+// --- cMenuEditStraI18nItem -------------------------------------------------
+
+cMenuEditStraI18nItem::cMenuEditStraI18nItem(const char *Name, int *Value, int NumStrings, const char * const *Strings)
+:cMenuEditIntItem(Name, Value, 0, NumStrings - 1)
+{
+ strings = Strings;
+ Set();
+}
+
+void cMenuEditStraI18nItem::Set(void)
+{
+ SetValue(tr(strings[*value]));
+}
+
+// --- cFileListItem -------------------------------------------------
+
+cFileListItem::cFileListItem(const char *name, bool isDir)
+{
+ m_Name = strdup(name);
+ m_IsDir = isDir;
+ m_HasResume = false;
+ m_HasSubs = false;
+ m_ShowFlags = false;
+ m_Up = m_IsDir && !strcmp(m_Name,"..");
+ Set();
+}
+
+cFileListItem::cFileListItem(const char *name, bool isDir, bool HasResume, bool HasSubs)
+{
+ m_Name = strdup(name);
+ m_IsDir = isDir;
+ m_HasResume = HasResume;
+ m_HasSubs = HasSubs;
+ m_ShowFlags = true;
+ m_Up = m_IsDir && !strcmp(m_Name,"..");
+ Set();
+}
+
+cFileListItem::~cFileListItem()
+{
+ free(m_Name);
+}
+
+void cFileListItem::Set(void)
+{
+ char *txt = NULL,*pt;
+ if(m_ShowFlags) {
+ if(m_IsDir) {
+ asprintf(&txt, "\t\t[%s] ", m_Name); // text2skin requires space at end of string to display item correctly ...
+ } else {
+ asprintf(&txt, "%c\t%c\t%s", m_HasResume?' ':'*', m_HasSubs ? 'S' : ' ', m_Name);
+ if(NULL != (pt = strrchr(txt,'.')))
+ *pt = 0;
+ }
+ } else {
+ if(m_IsDir) {
+ asprintf(&txt, "[%s] ", m_Name); // text2skin requires space at end of string to display item correctly ...
+ } else {
+ asprintf(&txt, "%s", m_Name);
+ if(NULL != (pt = strrchr(txt,'.')))
+ *pt = 0;
+ }
+ }
+ SetText(txt, false);
+}
+
+int cFileListItem::Compare(const cListObject &ListObject) const
+{
+ cFileListItem *other = (cFileListItem *)&ListObject;
+
+ if(m_IsDir && !other->m_IsDir)
+ return -1;
+ if(!m_IsDir && other->m_IsDir)
+ return 1;
+ if(m_Up && !other->m_Up)
+ return -1;
+ if(!m_Up && other->m_Up)
+ return 1;
+ return strcmp(m_Name,other->m_Name);
+}
+
+bool cFileListItem::operator< (const cListObject &ListObject)
+{
+ cFileListItem *other = (cFileListItem *)&ListObject;
+
+ if(m_IsDir && !other->m_IsDir)
+ return true;
+ if(!m_IsDir && other->m_IsDir)
+ return false;
+ if(m_Up && !other->m_Up)
+ return true;
+ if(!m_Up && other->m_Up)
+ return false;
+ return strcmp(m_Name,other->m_Name) < 0;
+}