summaryrefslogtreecommitdiffstats
path: root/libmenu/menu_pt.c
diff options
context:
space:
mode:
authoralbeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-11-14 23:47:11 +0000
committeralbeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-11-14 23:47:11 +0000
commitc83ebc0b7df94135390661a0d7a1a7b9bda57462 (patch)
tree5c1a489baddf23a95de12d1a678599f0da04f399 /libmenu/menu_pt.c
parent54e31581a3cc8cd5501baa8553ab0a1cf2a75bee (diff)
downloadmpv-c83ebc0b7df94135390661a0d7a1a7b9bda57462.tar.bz2
mpv-c83ebc0b7df94135390661a0d7a1a7b9bda57462.tar.xz
OSD menus initial version
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8198 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmenu/menu_pt.c')
-rw-r--r--libmenu/menu_pt.c151
1 files changed, 151 insertions, 0 deletions
diff --git a/libmenu/menu_pt.c b/libmenu/menu_pt.c
new file mode 100644
index 0000000000..bd63afae2e
--- /dev/null
+++ b/libmenu/menu_pt.c
@@ -0,0 +1,151 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <libgen.h>
+
+#include "../config.h"
+
+#include "img_format.h"
+#include "mp_image.h"
+
+#include "../m_struct.h"
+#include "../m_option.h"
+#include "menu.h"
+#include "menu_list.h"
+
+
+#include "../playtree.h"
+#include "../input/input.h"
+
+
+
+extern play_tree_iter_t* playtree_iter;
+
+struct list_entry_s {
+ struct list_entry p;
+ play_tree_t* pt;
+};
+
+
+struct menu_priv_s {
+ menu_list_priv_t p;
+ char* title;
+};
+
+static struct menu_priv_s cfg_dflt = {
+ MENU_LIST_PRIV_DFLT,
+ "Jump to"
+};
+
+#define ST_OFF(m) M_ST_OFF(struct menu_priv_s,m)
+
+static m_option_t cfg_fields[] = {
+ MENU_LIST_PRIV_FIELDS,
+ { "title", ST_OFF(title), CONF_TYPE_STRING, 0, 0, 0, NULL },
+ { NULL, NULL, NULL, 0,0,0,NULL }
+};
+
+#define mpriv (menu->priv)
+
+static void read_cmd(menu_t* menu,int cmd) {
+ switch(cmd) {
+ case MENU_CMD_OK: {
+ int d = 1;
+ char str[15];
+ play_tree_t* i;
+ mp_cmd_t* c;
+
+
+ if(playtree_iter->tree == mpriv->p.current->pt)
+ break;
+
+ if(playtree_iter->tree->parent && mpriv->p.current->pt == playtree_iter->tree->parent)
+ snprintf(str,15,"pt_up_step 1");
+ else {
+ for(i = playtree_iter->tree->next; i != NULL ; i = i->next) {
+ if(i == mpriv->p.current->pt)
+ break;
+ d++;
+ }
+ if(i == NULL) {
+ d = -1;
+ for(i = playtree_iter->tree->prev; i != NULL ; i = i->prev) {
+ if(i == mpriv->p.current->pt)
+ break;
+ d--;
+ }
+ if(i == NULL) {
+ printf("Can't find the target item ????\n");
+ break;
+ }
+ }
+ snprintf(str,15,"pt_step %d",d);
+ }
+ c = mp_input_parse_cmd(str);
+ if(c)
+ mp_input_queue_cmd(c);
+ else
+ printf("Failed to build command %s\n",str);
+ } break;
+ default:
+ menu_list_read_cmd(menu,cmd);
+ }
+}
+
+static void read_key(menu_t* menu,int c){
+ menu_list_read_key(menu,c,1);
+}
+
+static void close(menu_t* menu) {
+ menu_list_uninit(menu,NULL);
+}
+
+static int op(menu_t* menu, char* args) {
+ play_tree_t* i;
+ list_entry_t* e;
+ args = NULL; // Warning kill
+
+ menu->draw = menu_list_draw;
+ menu->read_cmd = read_cmd;
+ menu->read_key = read_key;
+ menu->close = close;
+
+ menu_list_init(menu);
+
+ mpriv->p.title = mpriv->title;
+
+ if(playtree_iter->tree->parent != playtree_iter->root) {
+ e = calloc(1,sizeof(list_entry_t));
+ e->p.txt = "..";
+ e->pt = playtree_iter->tree->parent;
+ menu_list_add_entry(menu,e);
+ }
+
+ for(i = playtree_iter->tree ; i->prev != NULL ; i = i->prev)
+ /* NOP */;
+ for( ; i != NULL ; i = i->next ) {
+ e = calloc(1,sizeof(list_entry_t));
+ if(i->files)
+ e->p.txt = basename(i->files[0]);
+ else
+ e->p.txt = "Group ...";
+ e->pt = i;
+ menu_list_add_entry(menu,e);
+ }
+
+ return 1;
+}
+
+const menu_info_t menu_info_pt = {
+ "Playtree menu",
+ "pt",
+ "Albeu",
+ "",
+ {
+ "pt_cfg",
+ sizeof(struct menu_priv_s),
+ &cfg_dflt,
+ cfg_fields
+ },
+ op
+};