📄 gtkpreferencewindow.cpp
字号:
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);
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);
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;
strncpy(tempstr, originalValues.proxyServer.c_str(), 256);
port = strrchr(tempstr, ':');
if (port) {
*port = '\0';
port++;
}
proxyAddyBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(proxyAddyBox), tempstr);
gtk_signal_connect(GTK_OBJECT(proxyAddyBox), "changed",
GTK_SIGNAL_FUNC(proxy_change), this);
gtk_box_pack_start(GTK_BOX(hbox), proxyAddyBox, TRUE, TRUE, 0);
gtk_widget_show(proxyAddyBox);
proxyColon = gtk_label_new(":");
gtk_box_pack_start(GTK_BOX(hbox), proxyColon, FALSE, FALSE, 5);
gtk_widget_show(proxyColon);
proxyPortBox = gtk_entry_new();
if (port)
gtk_entry_set_text(GTK_ENTRY(proxyPortBox), port);
gtk_entry_set_max_length(GTK_ENTRY(proxyPortBox), 5);
gtk_widget_set_usize(proxyPortBox, 60, 0);
gtk_signal_connect(GTK_OBJECT(proxyPortBox), "changed",
GTK_SIGNAL_FUNC(proxy_change), this);
gtk_box_pack_start(GTK_BOX(hbox), proxyPortBox, FALSE, FALSE, 0);
gtk_widget_show(proxyPortBox);
if (!originalValues.useProxyServer) {
gtk_widget_set_sensitive(proxyAddyBox, FALSE);
gtk_widget_set_sensitive(proxyPortBox, FALSE);
gtk_widget_set_sensitive(proxyColon, FALSE);
gtk_widget_set_sensitive(proxyAddyLabel, FALSE);
gtk_widget_set_sensitive(proxyPortLabel, FALSE);
}
check = gtk_check_button_new_with_label("Use Alternate IP");
gtk_container_add(GTK_CONTAINER(pane), check);
gtk_signal_connect(GTK_OBJECT(check), "toggled",
GTK_SIGNAL_FUNC(alt_ip_toggle), this);
if (originalValues.useAlternateIP)
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);
hbox = gtk_hbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 10);
gtk_container_add(GTK_CONTAINER(frame), hbox);
gtk_widget_show(hbox);
ipLabel = gtk_label_new("IP Address: ");
gtk_box_pack_start(GTK_BOX(hbox), ipLabel, FALSE, FALSE, 10);
gtk_widget_show(ipLabel);
char *dot = NULL;
char *ip[4];
int32 i = 1;
if (originalValues.alternateIP.length() == 0) {
ip[0] = ip[1] = ip[2] = ip[3] = "0";
}
else {
strncpy(tempstr, originalValues.alternateIP.c_str(), 256);
ip[0] = tempstr;
dot = tempstr;
while ((dot = strchr(dot, '.'))) {
*dot = 0x00;
ip[i++] = ++dot;
if (i == 4)
break;
}
}
ipOneBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(ipOneBox), ip[0]);
gtk_entry_set_max_length(GTK_ENTRY(ipOneBox), 3);
gtk_widget_set_usize(ipOneBox, 32, 0);
gtk_signal_connect(GTK_OBJECT(ipOneBox), "changed",
GTK_SIGNAL_FUNC(ip_change), this);
gtk_box_pack_start(GTK_BOX(hbox), ipOneBox, FALSE, FALSE, 0);
gtk_widget_show(ipOneBox);
ipPeriod1 = gtk_label_new(".");
gtk_container_add(GTK_CONTAINER(hbox), ipPeriod1);
gtk_widget_show(ipPeriod1);
ipTwoBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(ipTwoBox), ip[1]);
gtk_entry_set_max_length(GTK_ENTRY(ipTwoBox), 3);
gtk_widget_set_usize(ipTwoBox, 32, 0);
gtk_signal_connect(GTK_OBJECT(ipOneBox), "changed",
GTK_SIGNAL_FUNC(ip_change), this);
gtk_box_pack_start(GTK_BOX(hbox), ipTwoBox, FALSE, FALSE, 0);
gtk_widget_show(ipTwoBox);
ipPeriod2 = gtk_label_new(".");
gtk_container_add(GTK_CONTAINER(hbox), ipPeriod2);
gtk_widget_show(ipPeriod2);
ipThreeBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(ipThreeBox), ip[2]);
gtk_entry_set_max_length(GTK_ENTRY(ipThreeBox), 3);
gtk_widget_set_usize(ipThreeBox, 32, 0);
gtk_signal_connect(GTK_OBJECT(ipThreeBox), "changed",
GTK_SIGNAL_FUNC(ip_change), this);
gtk_box_pack_start(GTK_BOX(hbox), ipThreeBox, FALSE, FALSE, 0);
gtk_widget_show(ipThreeBox);
ipPeriod3 = gtk_label_new(".");
gtk_container_add(GTK_CONTAINER(hbox), ipPeriod3);
gtk_widget_show(ipPeriod3);
ipFourBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(ipFourBox), ip[3]);
gtk_entry_set_max_length(GTK_ENTRY(ipFourBox), 3);
gtk_widget_set_usize(ipFourBox, 32, 0);
gtk_signal_connect(GTK_OBJECT(ipFourBox), "changed",
GTK_SIGNAL_FUNC(ip_change), this);
gtk_box_pack_start(GTK_BOX(hbox), ipFourBox, FALSE, FALSE, 0);
gtk_widget_show(ipFourBox);
if (!originalValues.useAlternateIP) {
gtk_widget_set_sensitive(ipLabel, FALSE);
gtk_widget_set_sensitive(ipOneBox, FALSE);
gtk_widget_set_sensitive(ipPeriod1, FALSE);
gtk_widget_set_sensitive(ipTwoBox, FALSE);
gtk_widget_set_sensitive(ipPeriod2, FALSE);
gtk_widget_set_sensitive(ipThreeBox, FALSE);
gtk_widget_set_sensitive(ipPeriod3, FALSE);
gtk_widget_set_sensitive(ipFourBox, FALSE);
}
return pane;
}
void GTKPreferenceWindow::SetPMO(int newsel)
{
proposedValues.outputIndex = newsel;
gtk_widget_set_sensitive(applyButton, TRUE);
}
void pmo_select(GtkWidget *item, GTKPreferenceWindow *p)
{
int i = 0;
if (!GTK_WIDGET_MAPPED(item))
return;
GSList *glist = gtk_radio_menu_item_group((GtkRadioMenuItem *)
(((GtkOptionMenu *)p->pmoOptionMenu)->menu_item));
while (glist && !((GtkCheckMenuItem *)(glist->data))->active) {
glist = glist->next;
i++;
}
p->SetPMO(p->numPMOs - i);
}
void GTKPreferenceWindow::AlsaSet(void)
{
char *one = gtk_entry_get_text(GTK_ENTRY(alsaOneBox));
char *two = gtk_entry_get_text(GTK_ENTRY(alsaTwoBox));
proposedValues.alsaOutput = string(one) + string(":") + string(two);
gtk_widget_set_sensitive(applyButton, TRUE);
}
void alsa_change(GtkWidget *w, GTKPreferenceWindow *p)
{
p->AlsaSet();
}
GtkWidget *GTKPreferenceWindow::CreatePage3(void)
{
GtkWidget *pane = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(pane), 5);
gtk_widget_show(pane);
GtkWidget *frame = gtk_frame_new("Audio");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 0);
gtk_widget_show(frame);
GtkWidget *table = gtk_table_new(2, 2, FALSE);
gtk_container_add(GTK_CONTAINER(frame), table);
gtk_widget_show(table);
Registry *pmo = m_pContext->player->GetPMORegistry();
int32 i = 0;
RegistryItem *item;
GtkWidget *label = gtk_label_new("Audio Output");
gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL,
5, 0);
gtk_widget_show(label);
pmoOptionMenu = gtk_option_menu_new();
pmoMenu = gtk_menu_new();
GSList *group = NULL;
GtkWidget *menuitem;
while (pmo && (item = pmo->GetItem(i++))) {
menuitem = gtk_radio_menu_item_new_with_label(group, item->Name());
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
GTK_SIGNAL_FUNC(pmo_select), this);
group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menuitem));
gtk_menu_append(GTK_MENU(pmoMenu), menuitem);
if (originalValues.defaultPMO == item->Name()) {
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
originalValues.outputIndex = currentValues.outputIndex =
proposedValues.outputIndex = i - 1;
}
gtk_widget_show(menuitem);
}
numPMOs = i - 2;
gtk_option_menu_set_menu(GTK_OPTION_MENU(pmoOptionMenu), pmoMenu);
gtk_table_attach(GTK_TABLE(table), pmoOptionMenu, 1, 2, 1, 2, GTK_FILL,
GTK_FILL, 5, 5);
gtk_option_menu_set_history(GTK_OPTION_MENU(pmoOptionMenu),
proposedValues.outputIndex);
gtk_widget_show(pmoOptionMenu);
frame = gtk_frame_new("ALSA Setup");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(frame), 1);
gtk_widget_show(frame);
GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 10);
gtk_container_add(GTK_CONTAINER(frame), hbox);
gtk_widget_show(hbox);
label = gtk_label_new("Default ALSA Output Device: ");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10);
gtk_widget_show(label);
char tempstr[256];
char *port = NULL;
strncpy(tempstr, originalValues.alsaOutput.c_str(), 256);
port = strrchr(tempstr, ':');
if (port) {
*port = '\0';
port++;
}
alsaOneBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(alsaOneBox), tempstr);
gtk_entry_set_max_length(GTK_ENTRY(alsaOneBox), 3);
gtk_widget_set_usize(alsaOneBox, 32, 0);
gtk_signal_connect(GTK_OBJECT(alsaOneBox), "changed",
GTK_SIGNAL_FUNC(alsa_change), this);
gtk_box_pack_start(GTK_BOX(hbox), alsaOneBox, FALSE, FALSE, 0);
gtk_widget_show(alsaOneBox);
label = gtk_label_new(":");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
gtk_widget_show(label);
alsaTwoBox = gtk_entry_new();
if (port)
gtk_entry_set_text(GTK_ENTRY(alsaTwoBox), port);
gtk_entry_set_max_length(GTK_ENTRY(alsaTwoBox), 3);
gtk_widget_set_usize(alsaTwoBox, 32, 0);
gtk_signal_connect(GTK_OBJECT(alsaTwoBox), "changed",
GTK_SIGNAL_FUNC(alsa_change), this);
gtk_box_pack_start(GTK_BOX(hbox), alsaTwoBox, FALSE, FALSE, 0);
gtk_widget_show(alsaTwoBox);
frame = gtk_frame_new("Portable Devices");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(frame), 1);
gtk_widget_show(frame);
GtkWidget *vbox = gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 1);
gtk_widget_show(vbox);
GtkWidget *listwindow = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(listwindow),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(vbox), listwindow, TRUE, TRUE, 5);
gtk_widget_show(listwindow);
GtkWidget *list = gtk_clist_new(1);
gtk_container_add(GTK_CONTAINER(listwindow), list);
gtk_widget_show(list);
GtkWidget *textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "Select from the list above any portable devices you own. This will enable you to edit the contents of your portable device directly from the \"My Music\" window. If you do not see your portable device listed try checking for an update. We might have added support for it since you installed.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_FILL);
gtk_box_pack_start(GTK_BOX(vbox), textlabel, TRUE, FALSE, 0);
gtk_widget_show(textlabel);
return pane;
}
void GTKPreferenceWindow::SetInputBufferSize(int newvalue)
{
proposedValues.inputBufferSize = newvalue;
gtk_widget_set_sensitive(applyButton, TRUE);
}
void input_buffer_change(GtkWidget *w, GTKPreferenceWindow *p)
{
char *text = gtk_entry_get_text(GTK_ENTRY(w));
int newdata = atoi(text);
p->SetInputBufferSize(newdata);
}
void GTKPreferenceWindow::SetOutputBufferSize(int newvalue)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -