📄 gtkpreferencewindow.cpp
字号:
int32 k = 0;
RegistryItem *item;
while (pmo && (item = pmo->GetItem(k++))) {
if (values->outputIndex == (k-1))
values->defaultPMO = item->Name();
}
prefs->SetDefaultPMO(values->defaultPMO.c_str());
if (*values != currentValues) {
m_pContext->target->AcceptEvent(new Event(INFO_PrefsChanged));
currentValues = proposedValues = *values;
}
}
void GTKPreferenceWindow::SaveMusicSet(char *newpath, bool set)
{
proposedValues.saveMusicDirectory = newpath;
gtk_widget_set_sensitive(applyButton, TRUE);
if (set)
gtk_entry_set_text(GTK_ENTRY(saveMusicBox), newpath);
}
void save_music_change(GtkWidget *w, GTKPreferenceWindow *p)
{
char *text = gtk_entry_get_text(GTK_ENTRY(w));
p->SaveMusicSet(text, false);
}
void save_music_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->SaveMusicSet(returnpath, true);
else {
MessageDialog oBox(p->GetContext());
oBox.Show("Please select a directory to save dowloaded music.",
"Save Music Browser Error", kMessageOk, true);
}
}
}
delete filesel;
}
void GTKPreferenceWindow::SetToolbar(bool text, bool pics)
{
proposedValues.useTextLabels = text;
proposedValues.useImages = pics;
if (!firsttime)
gtk_widget_set_sensitive(applyButton, TRUE);
}
void text_selected(GtkWidget *w, GTKPreferenceWindow *p)
{
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
p->SetToolbar(true, false);
}
void images_selected(GtkWidget *w, GTKPreferenceWindow *p)
{
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
p->SetToolbar(false, true);
}
void both_selected(GtkWidget *w, GTKPreferenceWindow *p)
{
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
p->SetToolbar(true, true);
}
void GTKPreferenceWindow::SaveOnExitToggle(int active)
{
proposedValues.savePlaylistOnExit = active;
if (!firsttime)
gtk_widget_set_sensitive(applyButton, TRUE);
}
void save_onexit_toggle(GtkWidget *w, GTKPreferenceWindow *p)
{
int i = GTK_TOGGLE_BUTTON(w)->active;
p->SaveOnExitToggle(i);
}
void GTKPreferenceWindow::PlayImmediatelyToggle(int active)
{
proposedValues.playImmediately = !active;
if (!firsttime)
gtk_widget_set_sensitive(applyButton, TRUE);
}
void play_now_toggle(GtkWidget *w, GTKPreferenceWindow *p)
{
int i = GTK_TOGGLE_BUTTON(w)->active;
p->PlayImmediatelyToggle(i);
}
GtkWidget *GTKPreferenceWindow::CreatePage1(void)
{
firsttime = true;
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("Save Music Folder");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 5);
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);
char copys[_MAX_PATH];
GtkWidget *temphbox = gtk_hbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), temphbox, FALSE, FALSE, 5);
gtk_widget_show(temphbox);
strncpy(copys, originalValues.saveMusicDirectory.c_str(), 256);
saveMusicBox = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(saveMusicBox), copys);
gtk_entry_set_max_length(GTK_ENTRY(saveMusicBox), 64);
gtk_signal_connect(GTK_OBJECT(saveMusicBox), "changed",
GTK_SIGNAL_FUNC(save_music_change), this);
gtk_box_pack_start(GTK_BOX(temphbox), saveMusicBox, TRUE, TRUE, 0);
gtk_widget_show(saveMusicBox);
GtkWidget *button = gtk_button_new_with_label(" Browse ");
gtk_box_pack_start(GTK_BOX(temphbox), button, FALSE, FALSE, 5);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(save_music_browse), this);
gtk_widget_show(button);
frame = gtk_frame_new("Show 'My Music' Toolbars As");
gtk_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 5);
gtk_widget_show(frame);
temphbox = gtk_hbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(temphbox), 5);
gtk_container_add(GTK_CONTAINER(frame), temphbox);
gtk_widget_show(temphbox);
bool setSomething = false;
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("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);
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);
return pane;
}
void GTKPreferenceWindow::SetStreamInterval(int newvalue)
{
proposedValues.streamInterval = newvalue;
gtk_widget_set_sensitive(applyButton, TRUE);
}
void stream_interval_change(GtkWidget *w, GTKPreferenceWindow *p)
{
char *text = gtk_entry_get_text(GTK_ENTRY(w));
int newdata = atoi(text);
p->SetStreamInterval(newdata);
}
void GTKPreferenceWindow::SaveLocalToggle(int active)
{
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);
}
void save_local_toggle(GtkWidget *w, GTKPreferenceWindow *p)
{
int i = GTK_TOGGLE_BUTTON(w)->active;
p->SaveLocalToggle(i);
}
void GTKPreferenceWindow::ProxyToggle(int active)
{
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);
}
void proxy_toggle(GtkWidget *w, GTKPreferenceWindow *p)
{
int i = GTK_TOGGLE_BUTTON(w)->active;
p->ProxyToggle(i);
}
void GTKPreferenceWindow::AltIPToggle(int active)
{
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);
}
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);
}
void save_stream_change(GtkWidget *w, GTKPreferenceWindow *p)
{
char *text = gtk_entry_get_text(GTK_ENTRY(w));
p->SaveLocalSet(text, false);
}
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);
}
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);
}
void ip_change(GtkWidget *w, GTKPreferenceWindow *p)
{
p->AltIPSet();
}
GtkWidget *GTKPreferenceWindow::CreatePage2(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("Buffer Sizes");
gtk_container_add(GTK_CONTAINER(pane), frame);
gtk_widget_show(frame);
GtkWidget *hbox = gtk_hbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(frame), hbox);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
gtk_widget_show(hbox);
GtkWidget *label = gtk_label_new("Buffer Streams For ");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
gtk_widget_show(label);
int value;
char tempstr[256];
GtkWidget *entry = gtk_entry_new();
value = originalValues.streamInterval;
sprintf(tempstr, "%d", value);
gtk_entry_set_text(GTK_ENTRY(entry), tempstr);
gtk_entry_set_max_length(GTK_ENTRY(entry), 2);
gtk_widget_set_usize(entry, 32, 0);
gtk_signal_connect(GTK_OBJECT(entry), "changed",
GTK_SIGNAL_FUNC(stream_interval_change), this);
gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
gtk_widget_show(entry);
label = gtk_label_new(" Seconds");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
gtk_widget_show(label);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -