#include <errno.h>
#include "xdnd.h"
+#include "utils.h"
+#include "playlist.h"
static void sidebar_class_init(void);
static void sidebar_init(Widget request, Widget neww, ArgList args, Cardinal *num_args) {
+ Sidebar sb = (Sidebar)neww;
+ XftColor fg, bg;
+ fg.color.red = 0;
+ fg.color.green = 0;
+ fg.color.blue = 0;
+ fg.color.alpha = 0xFFFF;
+
+ bg.color.red = 0xFFFF;
+ bg.color.green = 0xFFFF;
+ bg.color.blue = 0xFFFF;
+ bg.color.alpha = 0xFFFF;
+
+ sb->sidebar.fg = fg;
+ sb->sidebar.bg = bg;
+
+ sb->sidebar.font = FontFromName(XtDisplay(neww), "Sans:size=11");
+ if(!sb->sidebar.font) {
+ fprintf(stderr, "Cannot open font.\nAbort.\n");
+ exit(-1);
+ }
}
XdndInit(XtDisplay(widget), XtWidgetToApplicationContext(widget), sidebar_xdnd_callback, widget);
}
XdndEnable(widget);
+
+ Screen *screen = widget->core.screen;
+ Visual *visual = screen->root_visual;
+ for(int i=0;i<screen->ndepths;i++) {
+ Depth d = screen->depths[i];
+ if(d.depth == widget->core.depth) {
+ visual = d.visuals;
+ break;
+ }
+ }
+
+ Sidebar sb = (Sidebar)widget;
+ sb->sidebar.d = XftDrawCreate(
+ XtDisplay(widget),
+ XtWindow(widget),
+ visual,
+ widget->core.colormap);
}
static void sidebar_expose(Widget widget, XEvent *event, Region region) {
printf("expose\n");
Dimension w, h;
XtMakeResizeRequest(widget, 200, 200, &w, &h);
+
+ Sidebar s = (Sidebar)widget;
+
+ XftDrawRect(s->sidebar.d, &s->sidebar.bg, 0, 0, s->core.width, s->core.height);
+
+ int height = 20;
+
+ printf("current track: %d\n", s->sidebar.window->playlist.current_track);
+
+ int i = 0;
+ UCX_FOREACH(elm, s->sidebar.window->playlist.tracks) {
+ char *name = util_resource_name(elm->data);
+ XftColor *cg = &s->sidebar.fg;
+ if(i == s->sidebar.window->playlist.current_track) {
+ XftDrawRect(s->sidebar.d, &s->sidebar.fg, 0, i*height, s->core.width, height);
+ cg = &s->sidebar.bg;
+ }
+
+ XftDrawString8(s->sidebar.d, cg, s->sidebar.font->fonts->font, 10, i*height + 15, (const FcChar8*)name, strlen(name));
+
+ i++;
+ }
}
static Boolean sidebar_set_values(Widget old, Widget request, Widget neww, ArgList args, Cardinal *num_args) {
printf("xdnd\n");
fflush(stdout);
+ Sidebar s = (Sidebar)cdata;
+
char *urilist = udata;
size_t len = strlen(urilist);
}
path[k] = '\0';
- // add file
- // TODO
+ PlayListAddFile(s->sidebar.window, path);
free(path);
}
{
return XtCreateWidget(name, xnSidebarWidgetClass, parent, arglist, argcount);
}
+
+void SidebarSetWindow(Widget widget, MainWindow *win) {
+ Sidebar sb = (Sidebar)widget;
+ sb->sidebar.window = win;
+}