gtkpreferencewindow.cpp
字号:
bool setSomething = false;
GtkWidget *button = gtk_radio_button_new_with_label(NULL, "Text Only");
if (originalValues.useTextLabels && !originalValues.useImages) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
setSomething = true;
}
gtk_box_pack_start(GTK_BOX(temphbox), button, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(text_selected), this);
gtk_widget_show(button);
button = gtk_radio_button_new_with_label(
gtk_radio_button_group(GTK_RADIO_BUTTON(button)),
"Images Only");
if (!originalValues.useTextLabels && originalValues.useImages) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
setSomething = true;
}
gtk_box_pack_start(GTK_BOX(temphbox), button, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(images_selected), this);
gtk_widget_show(button);
button = gtk_radio_button_new_with_label(
gtk_radio_button_group(GTK_RADIO_BUTTON(button)),
"Text and Images");
if (originalValues.useTextLabels && originalValues.useImages) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
setSomething = true;
}
gtk_box_pack_start(GTK_BOX(temphbox), button, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(both_selected), this);
gtk_widget_show(button);
if (!setSomething)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
frame = gtk_frame_new("Playlist");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 5);
gtk_widget_show(frame);
GtkWidget *vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
GtkWidget *check = gtk_check_button_new_with_label("Save current playlist when exiting the application");
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(save_onexit_toggle), this);
if (originalValues.savePlaylistOnExit)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
check = gtk_check_button_new_with_label("By default queue tracks rather than play them immediately");
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(play_now_toggle), this);
if (!originalValues.playImmediately)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
frame = gtk_frame_new("Miscellaneous");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 5);
gtk_widget_show(frame);
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
check = gtk_check_button_new_with_label("Allow multiple instances of "the_BRANDING);
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(allow_multiple_toggle), this);
if (originalValues.allowMultipleInstances)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
check = gtk_check_button_new_with_label("Convert underscores to spaces");
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(convert_underscores_toggle), this);
if (originalValues.convertUnderscores)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
frame = gtk_frame_new("File Associations");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 5);
gtk_widget_show(frame);
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
check = gtk_check_button_new_with_label("Reclaim music file associations when application starts");
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(reclaim_types_toggle), this);
if (originalValues.reclaimFiletypes)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
check = gtk_check_button_new_with_label("Ask before reclaiming music file associations");
gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(ask_reclaim_toggle), this);
if (originalValues.askReclaimFiletypes)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
return pane;
}
void GTKPreferenceWindow::SaveLocalToggle(int active)
{
if (!firsttime) {
gtk_widget_set_sensitive(saveStreamLabel, active);
gtk_widget_set_sensitive(saveStreamBox, active);
gtk_widget_set_sensitive(saveBrowseBox, active);
proposedValues.saveStreams = active;
gtk_widget_set_sensitive(applyButton, TRUE);
}
}
static void save_local_toggle(GtkWidget *w, GTKPreferenceWindow *p)
{
int i = GTK_TOGGLE_BUTTON(w)->active;
p->SaveLocalToggle(i);
}
void GTKPreferenceWindow::ProxyToggle(int active)
{
if (!firsttime) {
gtk_widget_set_sensitive(proxyAddyBox, active);
gtk_widget_set_sensitive(proxyPortBox, active);
gtk_widget_set_sensitive(proxyColon, active);
gtk_widget_set_sensitive(proxyAddyLabel, active);
gtk_widget_set_sensitive(proxyPortLabel, active);
proposedValues.useProxyServer = active;
gtk_widget_set_sensitive(applyButton, TRUE);
}
}
static void proxy_toggle(GtkWidget *w, GTKPreferenceWindow *p)
{
int i = GTK_TOGGLE_BUTTON(w)->active;
p->ProxyToggle(i);
}
void GTKPreferenceWindow::AltIPToggle(int active)
{
if (!firsttime) {
gtk_widget_set_sensitive(ipLabel, active);
gtk_widget_set_sensitive(ipOneBox, active);
gtk_widget_set_sensitive(ipPeriod1, active);
gtk_widget_set_sensitive(ipTwoBox, active);
gtk_widget_set_sensitive(ipPeriod2, active);
gtk_widget_set_sensitive(ipThreeBox, active);
gtk_widget_set_sensitive(ipPeriod3, active);
gtk_widget_set_sensitive(ipFourBox, active);
proposedValues.useAlternateIP = active;
gtk_widget_set_sensitive(applyButton, TRUE);
}
}
static void alt_ip_toggle(GtkWidget *w, GTKPreferenceWindow *p)
{
int i = GTK_TOGGLE_BUTTON(w)->active;
p->AltIPToggle(i);
}
void GTKPreferenceWindow::SaveLocalSet(char *newpath, bool set)
{
proposedValues.saveStreamsDirectory = newpath;
gtk_widget_set_sensitive(applyButton, TRUE);
if (set)
gtk_entry_set_text(GTK_ENTRY(saveStreamBox), newpath);
}
static void save_stream_change(GtkWidget *w, GTKPreferenceWindow *p)
{
char *text = gtk_entry_get_text(GTK_ENTRY(w));
p->SaveLocalSet(text, false);
}
static void save_stream_browse(GtkWidget *w, GTKPreferenceWindow *p)
{
GTKFileSelector *filesel = new GTKFileSelector("Select a New Directory");
if (filesel->Run(true)) {
char *returnpath = filesel->GetReturnPath();
struct stat st;
if (stat(returnpath, &st)) {
if (S_ISDIR(st.st_mode))
p->SaveLocalSet(returnpath, true);
else {
MessageDialog oBox(p->GetContext());
oBox.Show("Please select a directory to save streams locally.",
"Save Stream Browser Error", kMessageOk, true);
}
}
}
delete filesel;
}
void GTKPreferenceWindow::ProxyAddySet()
{
char *name = gtk_entry_get_text(GTK_ENTRY(proxyAddyBox));
char *port = gtk_entry_get_text(GTK_ENTRY(proxyPortBox));
proposedValues.proxyServer = name;
if (*port) {
proposedValues.proxyServer += string(":") + string(port);
}
gtk_widget_set_sensitive(applyButton, TRUE);
}
static void proxy_change(GtkWidget *w, GTKPreferenceWindow *p)
{
p->ProxyAddySet();
}
void GTKPreferenceWindow::AltIPSet()
{
char *one = gtk_entry_get_text(GTK_ENTRY(ipOneBox));
char *two = gtk_entry_get_text(GTK_ENTRY(ipTwoBox));
char *three = gtk_entry_get_text(GTK_ENTRY(ipThreeBox));
char *four = gtk_entry_get_text(GTK_ENTRY(ipFourBox));
if (*one)
proposedValues.alternateIP = one;
else
proposedValues.alternateIP = "0";
proposedValues.alternateIP += ".";
if (*two)
proposedValues.alternateIP += two;
else
proposedValues.alternateIP += "0";
proposedValues.alternateIP += ".";
if (*three)
proposedValues.alternateIP += three;
else
proposedValues.alternateIP += "0";
proposedValues.alternateIP += ".";
if (*four)
proposedValues.alternateIP += four;
else
proposedValues.alternateIP += "0";
gtk_widget_set_sensitive(applyButton, TRUE);
}
static void ip_change(GtkWidget *w, GTKPreferenceWindow *p)
{
p->AltIPSet();
}
GtkWidget *GTKPreferenceWindow::CreateStreaming(void)
{
GtkWidget *pane = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(pane), 5);
gtk_widget_show(pane);
GtkWidget *check = gtk_check_button_new_with_label("Save SHOUTCast/icecast Streams Locally");
gtk_container_add(GTK_CONTAINER(pane), check);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(save_local_toggle), this);
if (originalValues.saveStreams)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
GtkWidget *frame = gtk_frame_new(NULL);
gtk_container_add(GTK_CONTAINER(pane), frame);
gtk_widget_show(frame);
GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
saveStreamLabel = gtk_label_new("Save Location:");
gtk_misc_set_alignment(GTK_MISC(saveStreamLabel), 0.0, 0.5);
gtk_box_pack_start(GTK_BOX(vbox), saveStreamLabel, FALSE, FALSE, 0);
gtk_widget_show(saveStreamLabel);
char copys[256];
GtkWidget *temphbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), temphbox, FALSE, FALSE, 0);
gtk_widget_show(temphbox);
strncpy(copys, originalValues.saveStreamsDirectory.c_str(), 256);
saveStreamBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(saveStreamBox), copys);
gtk_entry_set_max_length(GTK_ENTRY(saveStreamBox), 64);
gtk_signal_connect(GTK_OBJECT(saveStreamBox), "changed",
GTK_SIGNAL_FUNC(save_stream_change), this);
gtk_box_pack_start(GTK_BOX(temphbox), saveStreamBox, TRUE, TRUE, 0);
gtk_widget_show(saveStreamBox);
saveBrowseBox = gtk_button_new_with_label(" Browse ");
gtk_box_pack_start(GTK_BOX(temphbox), saveBrowseBox, FALSE, FALSE, 5);
gtk_signal_connect(GTK_OBJECT(saveBrowseBox), "clicked",
GTK_SIGNAL_FUNC(save_stream_browse), this);
gtk_widget_show(saveBrowseBox);
if (!originalValues.saveStreams) {
gtk_widget_set_sensitive(saveStreamLabel, FALSE);
gtk_widget_set_sensitive(saveStreamBox, FALSE);
gtk_widget_set_sensitive(saveBrowseBox, FALSE);
}
check = gtk_check_button_new_with_label("Use Proxy Server");
gtk_container_add(GTK_CONTAINER(pane), check);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(proxy_toggle), this);
if (originalValues.useProxyServer)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_widget_show(check);
frame = gtk_frame_new(NULL);
gtk_container_add(GTK_CONTAINER(pane), frame);
gtk_widget_show(frame);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
gtk_container_add(GTK_CONTAINER(vbox), hbox);
gtk_widget_show(hbox);
proxyAddyLabel = gtk_label_new("Proxy Address:");
gtk_box_pack_start(GTK_BOX(hbox), proxyAddyLabel, FALSE, FALSE, 0);
gtk_misc_set_alignment(GTK_MISC(proxyAddyLabel), 0.0, 0.5);
gtk_widget_show(proxyAddyLabel);
proxyPortLabel = gtk_label_new("Port:");
gtk_box_pack_end(GTK_BOX(hbox), proxyPortLabel, FALSE, FALSE, 0);
gtk_misc_set_alignment(GTK_MISC(proxyPortLabel), 0.9, 0.5);
gtk_widget_show(proxyPortLabel);
hbox = gtk_hbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
gtk_container_add(GTK_CONTAINER(vbox), hbox);
gtk_widget_show(hbox);
char *port = NULL;
char tempstr[256];
strncpy(tempstr, originalValues.proxyServer.c_str(), 256);
port = strrchr(tempstr, ':');
if (port) {
*port = '\0';
port++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -