gtkpreferencewindow.cpp
字号:
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), 6);
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;
}
static void freeamp_press(GtkWidget *w, GTKPreferenceWindow *p)
{
LaunchBrowser("http://www.freeamp.org/");
}
static void relatable_press(GtkWidget *w, GTKPreferenceWindow *p)
{
LaunchBrowser("http://www.relatable.com/");
}
static 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(BRANDING);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new("version "BRANDING_VERSION);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
if (strcmp(BRANDING, "FreeAmp")) {
textlabel = gtk_label_new("(based on FreeAmp)");
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
}
textlabel = gtk_label_new("FreeAmp is an Open Source effort to build the best digital audio\nplayer available. In the interest of supporting the free software\ncommunity, while at the same time fostering the growth of the online\ndelivery of music, EMusic.com, is funding both the FreeAmp.org\ndomain and the efforts of the FreeAmp team. The FreeAmp team\nconsists of: Mark B. Elrod, Robert Kaye, Isaac Richards, Brett\nThomas, and Jason Woodward.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_LEFT);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new("Other people have also contributed to FreeAmp: ");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_LEFT);
gtk_box_pack_start(GTK_BOX(pane), textlabel, TRUE, TRUE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new("William Bull, Alan Cutter, Gabor Fleischer, Jean-Michel HERVE, \nHiromasa Kato, Michael Bruun Petersen, Sylvain Rebaud, The\nSnowblind Alliance, Tom Spindler, and Valters Vingolds.");
gtk_label_set_justify(GTK_LABEL(textlabel), GTK_JUSTIFY_LEFT);
gtk_box_pack_start(GTK_BOX(pane), textlabel, FALSE, FALSE, 0);
gtk_widget_show(textlabel);
textlabel = gtk_label_new("FreeAmp is being released under the terms of the GPL. As is\nprovided by the GPL, all of EMusic.com's and your efforts toward \nFreeAmp 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_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(freeamp_press), this);
gtk_widget_show(button);
button = gtk_button_new_with_label(" Visit Relatable.com ");
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(relatable_press), this);
gtk_widget_show(button);
button = gtk_button_new_with_label(" Visit EMusic.com ");
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
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);
}
static 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();
}
static 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 (IsError(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();
}
static 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();
gtk_clist_freeze(GTK_CLIST(themeList));
gtk_clist_clear(GTK_CLIST(themeList));
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;
else {
char *name = strrchr((*i).second.c_str(), '/');
if (name) {
name++;
if (name && *name) {
if (!strcmp(name, originalValues.currentTheme.c_str()))
originalValues.listboxIndex =
proposedValues.listboxIndex
= currentValues.listboxIndex = iLoop;
}
}
}
}
gtk_clist_select_row(GTK_CLIST(themeList), proposedValues.listboxIndex, 0);
gtk_clist_thaw(GTK_CLIST(themeList));
}
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);
}
static 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);
}
static void choose_font_press(GtkWidget *w, GTKPreferenceWindow *p)
{
p->ChooseFont();
}
GtkWidget *GTKPreferenceWindow::CreateThemes(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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -