/*
* This file is part of DisOrder.
- * Copyright (C) 2006, 2007 Richard Kettlewell
+ * Copyright (C) 2006-2008 Richard Kettlewell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "disobedience.h"
static GtkWidget *selectall_widget;
+static GtkWidget *selectnone_widget;
static GtkWidget *properties_widget;
/** @brief Main menu widgets */
t->selectall_activate(tab);
}
+/** @brief Called when the select none option is activated
+ *
+ * Calls the per-tab select none function.
+ */
+static void select_none(gpointer attribute((unused)) callback_data,
+ guint attribute((unused)) callback_action,
+ GtkWidget attribute((unused)) *menu_item) {
+ GtkWidget *tab = gtk_notebook_get_nth_page
+ (GTK_NOTEBOOK(tabs), gtk_notebook_current_page(GTK_NOTEBOOK(tabs)));
+ const struct tabtype *t = g_object_get_data(G_OBJECT(tab), "type");
+
+ t->selectnone_activate(tab);
+}
+
/** @brief Called when the track properties option is activated
*
* Calls the per-tab properties function.
login_box();
}
+/** @brief Called when the login option is activated */
+static void users(gpointer attribute((unused)) callback_data,
+ guint attribute((unused)) callback_action,
+ GtkWidget attribute((unused)) *menu_item) {
+ manage_users();
+}
+
+#if 0
+/** @brief Called when the settings option is activated */
+static void settings(gpointer attribute((unused)) callback_data,
+ guint attribute((unused)) callback_action,
+ GtkWidget attribute((unused)) *menu_item) {
+ popup_settings();
+}
+#endif
+
/** @brief Update menu state
*
* Determines option sensitivity according to the current tab and adjusts the
&& (disorder_eclient_state(client) & DISORDER_CONNECTED)));
gtk_widget_set_sensitive(selectall_widget,
t->selectall_sensitive(tab));
+ gtk_widget_set_sensitive(selectnone_widget,
+ t->selectnone_sensitive(tab));
+ /* TODO Users should only be sensitive if have RIGHT_ADMIN */
}
/** @brief Fetch version in order to display the about... popup */
gtk_widget_destroy(w);
}
+/** @brief Set 'Manage Users' menu item sensitivity */
+void users_set_sensitive(int sensitive) {
+ GtkWidget *w = gtk_item_factory_get_widget(mainmenufactory,
+ "<GdisorderMain>/Server/Manage users");
+ gtk_widget_set_sensitive(w, sensitive);
+}
+
+/** @brief Called with current user's rights string */
+static void menu_got_rights(void attribute((unused)) *v, const char *value) {
+ rights_type r;
+
+ if(parse_rights(value, &r, 0))
+ r = 0;
+ users_set_sensitive(!!(r & RIGHT_ADMIN));
+}
+
+/** @brief Called when we need to reset state */
+static void menu_reset(void) {
+ users_set_sensitive(0); /* until we know better */
+ disorder_eclient_userinfo(client, menu_got_rights, config->username, "rights",
+ 0);
+}
+
/** @brief Create the menu bar widget */
GtkWidget *menubar(GtkWidget *w) {
GtkWidget *m;
static const GtkItemFactoryEntry entries[] = {
{
- (char *)"/File", /* path */
+ (char *)"/Server", /* path */
0, /* accelerator */
0, /* callback */
0, /* callback_action */
0 /* extra_data */
},
{
- (char *)"/File/Login", /* path */
+ (char *)"/Server/Login", /* path */
(char *)"<CTRL>L", /* accelerator */
login, /* callback */
0, /* callback_action */
0, /* item_type */
0 /* extra_data */
},
+ {
+ (char *)"/Server/Manage users", /* path */
+ 0, /* accelerator */
+ users, /* callback */
+ 0, /* callback_action */
+ 0, /* item_type */
+ 0 /* extra_data */
+ },
+#if 0
+ {
+ (char *)"/Server/Settings", /* path */
+ 0, /* accelerator */
+ settings, /* callback */
+ 0, /* callback_action */
+ 0, /* item_type */
+ 0 /* extra_data */
+ },
+#endif
{
- (char *)"/File/Quit Disobedience", /* path */
+ (char *)"/Server/Quit Disobedience", /* path */
(char *)"<CTRL>Q", /* accelerator */
quit_program, /* callback */
0, /* callback_action */
0, /* item_type */
0 /* extra_data */
},
+ {
+ (char *)"/Edit/Deselect all tracks", /* path */
+ (char *)"<CTRL><SHIFT>A", /* accelerator */
+ select_none, /* callback */
+ 0, /* callback_action */
+ 0, /* item_type */
+ 0 /* extra_data */
+ },
{
(char *)"/Edit/Track properties", /* path */
0, /* accelerator */
gtk_window_add_accel_group(GTK_WINDOW(w), accel);
selectall_widget = gtk_item_factory_get_widget(mainmenufactory,
"<GdisorderMain>/Edit/Select all tracks");
+ selectnone_widget = gtk_item_factory_get_widget(mainmenufactory,
+ "<GdisorderMain>/Edit/Deselect all tracks");
properties_widget = gtk_item_factory_get_widget(mainmenufactory,
"<GdisorderMain>/Edit/Track properties");
assert(selectall_widget != 0);
+ assert(selectnone_widget != 0);
assert(properties_widget != 0);
+ register_reset(menu_reset);
+ menu_reset();
m = gtk_item_factory_get_widget(mainmenufactory,
"<GdisorderMain>");
set_tool_colors(m);