#include "player.h"
#include "playlist.h"
#include "xdnd.h"
+#include "settings.h"
#include "Fsb.h"
#include "Sidebar.h"
static void PlayRepeatCB(Widget w, void *udata, void *cdata);
static void PlayRepeatListCB(Widget w, void *udata, void *cdata);
static void PlayAutoPlayCB(Widget w, void *udata, void *cdata);
+static void PlayRandomCB(Widget w, void *udata, void *cdata);
static void ViewFullscreenCB(Widget w, void *udata, void *cdata);
static void ViewSidebarCB(Widget w, void *udata, void *cdata);
+static void ViewAdjustWindowSizeCB(Widget w, void *udata, void *cdata);
+static void PrefSingleInstanceCB(Widget w, void *udata, void *cdata);
static void WindowRealized(MainWindow *win);
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, window->menubar); n++;
XtSetArg(args[n], XmNwidth, 300); n++;
- window->sidebar = CreateSidebar(container, "sidebar", args, n);
+ XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); n++;
+ XtSetArg(args[n], XmNscrollBarDisplayPolicy, XmAS_NEEDED); n++;
+ XtSetArg(args[n], XmNspacing, 0); n++;
+ XtSetArg(args[n], XmNshadowThickness, 0); n++;
+ window->sidebar_scrolledwindow = XmCreateScrolledWindow(container, "sw_sidebar", args, n);
+ window->sidebar = CreateSidebar(window->sidebar_scrolledwindow, "sidebar", args, 0);
SidebarSetWindow(window->sidebar, window);
+ XtManageChild(window->sidebar);
//XtManageChild(window->sidebar);
-
+
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
PlayListInit(window);
+ window->adjustWindowSize = true; // auto adjust window size by default
+
return window;
}
return menuItem;
}
+/*
+ * Creates a menu separator
+ */
+static Widget createMenuSeparator(Widget menu) {
+ Widget w = XmCreateSeparator(menu, "separator", NULL, 0);
+ XtManageChild(w);
+ return w;
+}
+
static void WindowCreateMenu(MainWindow *win, Widget parent, Arg *mbargs, int nmbargs) {
Widget menubar = XmCreateMenuBar(parent, "menubar", mbargs, nmbargs);
XtManageChild(menubar);
XmStringFree(s);
Widget viewMenu = XmVaCreateSimplePulldownMenu(menubar, "menu", 2, NULL, NULL);
+ s = XmStringCreateSimple("Preferences");
+ Widget prefMenuItem = XtVaCreateManagedWidget(
+ "menuitem",
+ xmCascadeButtonWidgetClass,
+ menubar,
+ XmNlabelString, s,
+ NULL);
+ XmStringFree(s);
+ Widget prefMenu = XmVaCreateSimplePulldownMenu(menubar, "menu", 3, NULL, NULL);
+
// file menu
createMenuItem(fileMenu, "fileOpen", "Open...", 'O', "Ctrl<Key>O", "Ctrl+O", FileOpenCB, NULL);
createMenuItem(fileMenu, "fileQuit", "Exit", 'E', "Ctrl<Key>Q", "Ctrl+Q", FileQuitCB, NULL);
// play menu
win->playRepeatTrackButton = createToggleMenuItem(playMenu, "playRepeatTrack", "Repeat", 'R', False, NULL, NULL, PlayRepeatCB, win);
win->playRepeatListButton = createToggleMenuItem(playMenu, "playRepeatList", "Repeat List", 'L', False, NULL, NULL, PlayRepeatListCB, win);
+ win->playRandom = createToggleMenuItem(playMenu, "playRandom", "Random Playback", 'P', False, NULL, NULL, PlayRandomCB, win);
win->playAutoPlayButton = createToggleMenuItem(playMenu, "playAutoNext", "Autoplay Folder", 'A', False, NULL, NULL, PlayAutoPlayCB, win);
XtVaSetValues(win->playRepeatTrackButton, XmNindicatorType, XmONE_OF_MANY, NULL);
XtVaSetValues(win->playRepeatListButton, XmNindicatorType, XmONE_OF_MANY, NULL);
XtVaSetValues(win->playAutoPlayButton, XmNindicatorType, XmONE_OF_MANY, NULL);
+ XtVaSetValues(win->playRandom, XmNindicatorType, XmONE_OF_MANY, NULL);
// view menu
createMenuItem(viewMenu, "viewFullscreen", "Fullscreen", 'F', "<Key>F", "F", ViewFullscreenCB, NULL);
win->viewSidebarButton = createToggleMenuItem(viewMenu, "viewSidebar", "View Sidebar", 'S', False, NULL, NULL, ViewSidebarCB, win);
+
+ createMenuSeparator(viewMenu);
+
+ win->viewAdjustWindowSize = createToggleMenuItem(viewMenu, "viewAdjustWindowSize", "Adjust Window Size", 'W', TRUE, NULL, NULL, ViewAdjustWindowSizeCB, win);
+
+ // preferences menu
+ win->prefSingleInstanceButton = createToggleMenuItem(prefMenu, "prefSingleInstance", "Single Instance", 'S', FALSE, NULL, NULL, PrefSingleInstanceCB, win);
}
void go_fullscreen(Display *dsp, Window win)
main_window->fullscreen = FALSE;
}
+ WindowShowSidebar(win, enableFullscreen ? false : win->sidebarvisible);
+
XEvent ev;
memset(&ev, 0, sizeof(XEvent));
ev.type = ClientMessage;
win->playlist.repeatTrack = XmToggleButtonGadgetGetState(w);
win->playlist.repeatList = 0;
win->playlist.autoplayFolder = 0;
+ win->playlist.random = 0;
XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL);
XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL);
+ XtVaSetValues(win->playRandom, XmNset, 0, NULL);
}
static void PlayRepeatListCB(Widget w, void *udata, void *cdata) {
win->playlist.repeatList = XmToggleButtonGadgetGetState(w);
win->playlist.repeatTrack = 0;
win->playlist.autoplayFolder = 0;
+ win->playlist.random = 0;
XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL);
XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL);
+ XtVaSetValues(win->playRandom, XmNset, 0, NULL);
}
static void PlayAutoPlayCB(Widget w, void *udata, void *cdata) {
win->playlist.autoplayFolder = XmToggleButtonGadgetGetState(w);
win->playlist.repeatTrack = 0;
win->playlist.repeatList = 0;
+ win->playlist.random = 0;
XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL);
XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL);
+ XtVaSetValues(win->playRandom, XmNset, 0, NULL);
+}
+
+static void PlayRandomCB(Widget w, void *udata, void *cdata) {
+ MainWindow *win = udata;
+ win->playlist.random = XmToggleButtonGadgetGetState(w);
+ win->playlist.repeatTrack = 0;
+ win->playlist.repeatList = 0;
+ win->playlist.autoplayFolder = 0;
+ XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL);
+ XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL);
+ XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL);
}
static void ViewFullscreenCB(Widget w, void *udata, void *cdata) {
static void ViewSidebarCB(Widget w, void *udata, void *cdata) {
MainWindow *win = udata;
XmToggleButtonCallbackStruct *cb = cdata;
- if(cb->set) {
- WindowShowSidebar(win);
- } else {
- WindowHideSidebar(win);
+ win->sidebarvisible = cb->set;
+ WindowShowSidebar(win, cb->set);
+}
+
+static void ViewAdjustWindowSizeCB(Widget w, void *udata, void *cdata) {
+ MainWindow *win = udata;
+ win->adjustWindowSize = XmToggleButtonGadgetGetState(w);
+}
+
+static void PrefSingleInstanceCB(Widget w, void *udata, void *cdata) {
+ MainWindow *win = udata;
+ win->singleInstance = XmToggleButtonGadgetGetState(w);
+
+ Display *dp = XtDisplay(w);
+
+ if(!win->singleInstance) {
+ ShutdownInstanceSocket(dp);
+ return;
+ }
+
+ Bool disable_item = False;
+ if(CreateSingleInstanceSocket(dp, &disable_item)) {
+ // TODO: err
+ disable_item = True;
+ }
+ if(disable_item) {
+ win->singleInstance = 0;
+ XmToggleButtonGadgetSetState(w, False, False);
}
}
win->cursorhidden = False;
}
-void WindowHideSidebar(MainWindow *win) {
- XtUnmanageChild(win->sidebar);
- XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_FORM, NULL);
-}
-
-void WindowShowSidebar(MainWindow *win) {
- XtManageChild(win->sidebar);
- XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, win->sidebar, NULL);
+void WindowShowSidebar(MainWindow *win, bool visible) {
+ if(visible) {
+ XtManageChild(win->sidebar_scrolledwindow);
+ XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, win->sidebar_scrolledwindow, NULL);
+ } else {
+ XtUnmanageChild(win->sidebar_scrolledwindow);
+ XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_FORM, NULL);
+ }
}
void WindowUpdate(MainWindow *win) {