📄 gtkpreferencewindow.cpp
字号:
proposedValues.outputBufferSize = newvalue;
gtk_widget_set_sensitive(applyButton, TRUE);
}
void output_buffer_change(GtkWidget *w, GTKPreferenceWindow *p)
{
char *text = gtk_entry_get_text(GTK_ENTRY(w));
int newdata = atoi(text);
p->SetOutputBufferSize(newdata);
}
void GTKPreferenceWindow::SetPreBufferLength(int newvalue)
{
proposedValues.preBufferLength = newvalue;
gtk_widget_set_sensitive(applyButton, TRUE);
}
void prestream_buffer_change(GtkWidget *w, GTKPreferenceWindow *p)
{
char *text = gtk_entry_get_text(GTK_ENTRY(w));
int newdata = atoi(text);
p->SetPreBufferLength(newdata);
}
GtkWidget *GTKPreferenceWindow::CreatePage6(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_box_pack_start(GTK_BOX(pane), frame, FALSE, FALSE, 0);
gtk_widget_show(frame);
GtkWidget *table = gtk_table_new(3, 2, FALSE);
gtk_container_add(GTK_CONTAINER(frame), table);
gtk_widget_show(table);
int32 value;
char tempstr[256];
GtkWidget *label = gtk_label_new("Input Buffer Size (Kilobytes)");
gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL,
10, 1);
gtk_widget_show(label);
GtkWidget *entry = gtk_entry_new();
value = originalValues.inputBufferSize;
sprintf(tempstr, "%d", value);
gtk_entry_set_text(GTK_ENTRY(entry), tempstr);
gtk_entry_set_max_length(GTK_ENTRY(entry), 4);
gtk_signal_connect(GTK_OBJECT(entry), "changed",
GTK_SIGNAL_FUNC(input_buffer_change), this);
gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL, GTK_FILL,
10, 3);
gtk_widget_show(entry);
label = gtk_label_new("Output Buffer Size (Kilobytes)");
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,
10, 1);
gtk_widget_show(label);
entry = gtk_entry_new();
value = originalValues.outputBufferSize;
sprintf(tempstr, "%d", value);
gtk_entry_set_text(GTK_ENTRY(entry), tempstr);
gtk_entry_set_max_length(GTK_ENTRY(entry), 4);
gtk_signal_connect(GTK_OBJECT(entry), "changed",
GTK_SIGNAL_FUNC(output_buffer_change), this);
gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_FILL, GTK_FILL,
10, 3);
gtk_widget_show(entry);
label = gtk_label_new("Prebuffer Streams (Seconds)");
gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL,
10, 1);
gtk_widget_show(label);
entry = gtk_entry_new();
value = originalValues.preBufferLength;
sprintf(tempstr, "%d", value);
gtk_entry_set_text(GTK_ENTRY(entry), tempstr);
gtk_entry_set_max_length(GTK_ENTRY(entry), 2);
gtk_signal_connect(GTK_OBJECT(entry), "changed",
GTK_SIGNAL_FUNC(prestream_buffer_change), this);
gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 2, 3, GTK_FILL, GTK_FILL,
10, 3);
gtk_widget_show(entry);
return pane;
}
void freeamp_press(GtkWidget *w, GTKPreferenceWindow *p)
{
LaunchBrowser("http://www.freeamp.org/");
}
void emusic_press(GtkWidget *w, GTKPreferenceWindow *p)
{
LaunchBrowser("http://www.emusic.com/");
}
GtkWidget *GTKPreferenceWindow::CreateAbout(void)
{
GtkWidget *pane = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(pane), 0);
gtk_widget_show(pane);
GtkWidget *textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), BRANDING);
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_CENTER);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "version "FREEAMP_VERSION);
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_CENTER);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "FreeAmp is an Open Source effort to build the best digital audio player available. In the interest of supporting the free software community, while at the same time fostering the growth of the online delivery of music, EMusic.com, THE Source for Downloadable Music, is funding both the FreeAmp.org domain and the efforts of the FreeAmp team. The FreeAmp team consists of: Mark B. Elrod, Robert Kaye, Isaac Richards, Brett Thomas, and Jason Woodward.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_FILL);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "Other people have also contributed to FreeAmp:");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_FILL);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "William Bull, Alan Cutter, Gabor Fleischer, Jean-Michel HERVE, Hiromasa Kato, Michael Bruun Petersen, Sylvain Rebaud, The Snowblind Alliance, Tom Spindler, Valters Vingolds, Bill Yuan.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_FILL);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "FreeAmp is being released under the terms of the GPL. As is provided by the GPL, all of EMusic.com's and your efforts toward FreeAmp will be released back to the community at large.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_FILL);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
GtkWidget *hbox = gtk_hbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
gtk_container_add(GTK_CONTAINER(pane), hbox);
gtk_widget_show(hbox);
GtkWidget *button;
button = gtk_button_new_with_label(" Visit FreeAmp.org ");
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(freeamp_press), this);
gtk_widget_show(button);
button = gtk_button_new_with_label(" Visit EMusic.com ");
gtk_container_add(GTK_CONTAINER(hbox), button);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(emusic_press), this);
gtk_widget_show(button);
return pane;
}
void GTKPreferenceWindow::SelectTheme(int row)
{
proposedValues.listboxIndex = row;
if (!firsttime)
gtk_widget_set_sensitive(applyButton, TRUE);
}
void theme_click(GtkWidget *w, int row, int column, GdkEventButton *button,
GTKPreferenceWindow *p)
{
p->SelectTheme(row);
}
void GTKPreferenceWindow::AddThemeEvent(const char *newpath)
{
string newThemeFile = newpath;
Error err = m_pThemeMan->AddTheme(newThemeFile);
if (IsError(err)) {
MessageDialog oBox(m_pContext);
string oErr, oMessage;
oErr = ErrorString[err];
oMessage = "Couldn't Add Theme for the Following Reason: " + oErr;
oBox.Show(oMessage.c_str(), "Add Theme Error", kMessageOk, true);
}
else
UpdateThemeList();
}
void add_theme_press(GtkWidget *w, GTKPreferenceWindow *p)
{
GTKFileSelector *filesel = new GTKFileSelector("Select a Theme to Add");
if (filesel->Run(true)) {
char *returnpath = filesel->GetReturnPath();
p->AddThemeEvent(returnpath);
}
delete filesel;
}
void GTKPreferenceWindow::DeleteThemeEvent(void)
{
map<string, string>::iterator i;
int32 iLoop = 0;
string themeToDelete;
for (i = m_oThemeList.begin(); i != m_oThemeList.end(); i++, iLoop++) {
if (iLoop == proposedValues.listboxIndex)
themeToDelete = (*i).first;
}
Error err = m_pThemeMan->DeleteTheme(m_oThemeList[themeToDelete]);
if (IsntError(err)) {
MessageDialog oBox(m_pContext);
string oErr, oMessage;
oErr = ErrorString[err];
oMessage = "Couldn't Delete the Theme for Because: "
+ oErr;
oBox.Show(oMessage.c_str(), "Delete Theme Error", kMessageOk, true);
}
else
UpdateThemeList();
}
void delete_theme_press(GtkWidget *w, GTKPreferenceWindow *p)
{
p->DeleteThemeEvent();
}
void GTKPreferenceWindow::UpdateThemeList(void)
{
int iLoop = 0;
map<string, string>::iterator i;
proposedValues.listboxIndex = 0;
m_pThemeMan->GetCurrentTheme(originalValues.currentTheme);
m_oThemeList.clear();
m_pThemeMan->GetThemeList(m_oThemeList);
for (i = m_oThemeList.begin(); i != m_oThemeList.end(); i++, iLoop++) {
char *Text[1];
Text[0] = (char *)((*i).first.c_str());
gtk_clist_append(GTK_CLIST(themeList), Text);
if ((*i).second == originalValues.currentTheme)
originalValues.listboxIndex = proposedValues.listboxIndex
= currentValues.listboxIndex = iLoop;
}
gtk_clist_select_row(GTK_CLIST(themeList), proposedValues.listboxIndex, 0);
}
void GTKPreferenceWindow::SetFont()
{
char *font_name = gtk_font_selection_dialog_get_font_name(
GTK_FONT_SELECTION_DIALOG(fontDialog));
if (font_name) {
char realfontname[128];
char *marker1, *marker2;
int length;
marker1 = strchr(font_name + 1, '-');
marker2 = strchr(marker1 + 1, '-');
marker1++;
length = strlen(marker1) - strlen(marker2);
strncpy(realfontname, marker1, length);
realfontname[length] = '\0';
proposedValues.defaultFont = string(realfontname);
g_free(font_name);
}
gtk_widget_destroy(fontDialog);
}
void font_ok(GtkWidget *w, GTKPreferenceWindow *p)
{
p->SetFont();
}
void GTKPreferenceWindow::ChooseFont(void)
{
fontDialog = gtk_font_selection_dialog_new("FreeAmp Default Font Selection Dialog");
gtk_window_set_position(GTK_WINDOW(fontDialog), GTK_WIN_POS_MOUSE);
gtk_window_set_modal(GTK_WINDOW(fontDialog), TRUE);
gtk_signal_connect(GTK_OBJECT(fontDialog), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fontDialog);
gtk_signal_connect_object(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontDialog)-> cancel_button), "clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy),
GTK_OBJECT(fontDialog));
gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontDialog)->
ok_button), "clicked", GTK_SIGNAL_FUNC(font_ok),
this);
gtk_widget_show(fontDialog);
}
void choose_font_press(GtkWidget *w, GTKPreferenceWindow *p)
{
p->ChooseFont();
}
GtkWidget *GTKPreferenceWindow::CreatePage5(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("Theme Selection");
gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
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_widget_show(hbox);
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(hbox), listwindow, TRUE, TRUE, 5);
gtk_widget_set_usize(listwindow, 200, 200);
gtk_widget_show(listwindow);
themeList = gtk_clist_new(1);
gtk_signal_connect(GTK_OBJECT(themeList), "select_row",
GTK_SIGNAL_FUNC(theme_click), this);
gtk_container_add(GTK_CONTAINER(listwindow), themeList);
gtk_widget_show(themeList);
UpdateThemeList();
GtkWidget *vbox = gtk_vbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
gtk_widget_show(vbox);
GtkWidget *button = gtk_button_new_with_label("Add Theme");
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(add_theme_press), this);
gtk_widget_show(button);
button = gtk_button_new_with_label("Delete Theme");
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(delete_theme_press), this);
gtk_widget_show(button);
frame = gtk_frame_new("Default Font");
gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
gtk_container_add(GTK_CONTAINER(pane), frame);
gtk_widget_show(frame);
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
GtkWidget *textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "A theme may specify a font type that is not installed on your system. The default font will by substituted in place of the missing font.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_LEFT);
gtk_box_pack_start(GTK_BOX(vbox), textlabel, TRUE, TRUE, 0);
gtk_widget_show(textlabel);
hbox = gtk_hbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
gtk_widget_show(hbox);
textlabel = gtk_label_new(NULL);
gtk_label_set_line_wrap(GTK_LABEL(textlabel), TRUE);
gtk_label_set_text(GTK_LABEL(textlabel), "Note: Only the font name will be used. The font will appear in the style specified in the theme.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_FILL);
gtk_box_pack_start(GTK_BOX(hbox), textlabel, FALSE, FALSE, 5);
gtk_widget_show(textlabel);
button = gtk_button_new_with_label(" Choose Font ");
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(choose_font_press), this);
gtk_widget_show(button);
return pane;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -