mirror of
https://github.com/alexkay/spek.git
synced 2025-04-19 09:57:41 +03:00
Preferences dialogue
This commit is contained in:
parent
1ff2597fdb
commit
dc7ce9a4c2
@ -15,6 +15,8 @@ spek_SOURCES = \
|
||||
spek-pipeline.h \
|
||||
spek-platform.cc \
|
||||
spek-platform.hh \
|
||||
spek-preferences-dialog.cc \
|
||||
spek-preferences-dialog.hh \
|
||||
spek-preferences.cc \
|
||||
spek-preferences.hh \
|
||||
spek-ruler.cc \
|
||||
|
113
src/spek-preferences-dialog.cc
Normal file
113
src/spek-preferences-dialog.cc
Normal file
@ -0,0 +1,113 @@
|
||||
/* spek-preferences-dialog.cc
|
||||
*
|
||||
* Copyright (C) 2011-2012 Alexander Kojevnikov <alexander@kojevnikov.com>
|
||||
*
|
||||
* Spek is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Spek is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Spek. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "spek-preferences.hh"
|
||||
|
||||
#include "spek-preferences-dialog.hh"
|
||||
|
||||
// List all languages with a decent (e.g. 80%) number of translated
|
||||
// strings. Don't translate language names. Keep the first line intact.
|
||||
static const char *available_languages[] =
|
||||
{
|
||||
"", "",
|
||||
"cs", "Čeština",
|
||||
"de", "Deutsch",
|
||||
"en", "English",
|
||||
"eo", "Esperanto",
|
||||
"es", "Español",
|
||||
"fr", "Français",
|
||||
"it", "Italiano",
|
||||
"ja", "日本語",
|
||||
"nl", "Nederlands",
|
||||
"pl", "Polski",
|
||||
"pt_BR", "Português brasileiro",
|
||||
"ru", "Русский",
|
||||
"sv", "Svenska",
|
||||
"uk", "Українська",
|
||||
"zh_CN", "中文(简体)",
|
||||
"zh_TW", "中文(台灣)",
|
||||
NULL
|
||||
};
|
||||
|
||||
#ifndef wxCLOSE
|
||||
// wxWidgets 2.8 doesn't have wxCLOSE, replace with wxOK for now.
|
||||
#define wxCLOSE wxOK
|
||||
#endif
|
||||
|
||||
#define ID_LANGUAGE (wxID_HIGHEST + 1)
|
||||
#define ID_CHECK (wxID_HIGHEST + 2)
|
||||
|
||||
BEGIN_EVENT_TABLE(SpekPreferencesDialog, wxDialog)
|
||||
EVT_CHOICE(ID_LANGUAGE, SpekPreferencesDialog::on_language)
|
||||
EVT_CHECKBOX(ID_CHECK, SpekPreferencesDialog::on_check)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
SpekPreferencesDialog::SpekPreferencesDialog(wxWindow *parent) :
|
||||
wxDialog(parent, -1, _("Preferences"))
|
||||
{
|
||||
for (int i = 0; available_languages[i]; ++i) {
|
||||
this->languages.Add(wxString::FromUTF8(available_languages[i]));
|
||||
}
|
||||
this->languages[1] = _("(system default)");
|
||||
|
||||
wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
|
||||
wxSizer *inner_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
sizer->Add(inner_sizer, 1, wxALL, 12);
|
||||
|
||||
// TRANSLATORS: The name of a section in the Preferences dialog.
|
||||
wxStaticText *general_label = new wxStaticText(this, -1, _("General"));
|
||||
wxFont font = general_label->GetFont();
|
||||
font.SetWeight(wxFONTWEIGHT_BOLD);
|
||||
general_label->SetFont(font);
|
||||
inner_sizer->Add(general_label);
|
||||
|
||||
wxSizer *language_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
inner_sizer->Add(language_sizer, 0, wxLEFT | wxTOP, 12);
|
||||
wxStaticText *language_label = new wxStaticText(this, -1, _("Language:"));
|
||||
language_sizer->Add(language_label, 0, wxALIGN_CENTER_VERTICAL);
|
||||
|
||||
wxChoice *language_choice = new wxChoice(this, ID_LANGUAGE);
|
||||
language_sizer->Add(language_choice, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 12);
|
||||
int active_index = 0;
|
||||
wxString active_language = SpekPreferences::get().get_language();
|
||||
for (int i = 0; i < this->languages.GetCount(); i += 2) {
|
||||
language_choice->Append(this->languages[i + 1]);
|
||||
if (this->languages[i] == active_language) {
|
||||
active_index = i / 2;
|
||||
}
|
||||
}
|
||||
language_choice->SetSelection(active_index);
|
||||
|
||||
wxCheckBox *check_update = new wxCheckBox(this, ID_CHECK, _("Check for &updates"));
|
||||
inner_sizer->Add(check_update, 0 ,wxLEFT | wxTOP, 12);
|
||||
check_update->SetValue(SpekPreferences::get().get_check_update());
|
||||
|
||||
sizer->Add(CreateButtonSizer(wxCLOSE), 0, wxALIGN_RIGHT | wxBOTTOM | wxRIGHT, 12);
|
||||
sizer->SetSizeHints(this);
|
||||
SetSizer(sizer);
|
||||
}
|
||||
|
||||
void SpekPreferencesDialog::on_language(wxCommandEvent& event)
|
||||
{
|
||||
SpekPreferences::get().set_language(this->languages[event.GetSelection() * 2]);
|
||||
}
|
||||
|
||||
void SpekPreferencesDialog::on_check(wxCommandEvent& event)
|
||||
{
|
||||
SpekPreferences::get().set_check_update(event.IsChecked());
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
/* spek-window.vala
|
||||
/* spek-preferences-dialog.hh
|
||||
*
|
||||
* Copyright (C) 2010-2011 Alexander Kojevnikov <alexander@kojevnikov.com>
|
||||
* Copyright (C) 2011-2012 Alexander Kojevnikov <alexander@kojevnikov.com>
|
||||
*
|
||||
* Spek is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,16 +16,23 @@
|
||||
* along with Spek. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using Gdk;
|
||||
using Gtk;
|
||||
#ifndef SPEK_PREFERENCES_DIALOG_HH_
|
||||
#define SPEK_PREFERENCES_DIALOG_HH_
|
||||
|
||||
namespace Spek {
|
||||
public class Window : Gtk.Window {
|
||||
#include <wx/wx.h>
|
||||
|
||||
private void on_edit_preferences () {
|
||||
var dlg = new PreferencesDialog ();
|
||||
dlg.transient_for = this;
|
||||
dlg.run ();
|
||||
}
|
||||
}
|
||||
}
|
||||
class SpekPreferencesDialog : public wxDialog
|
||||
{
|
||||
public:
|
||||
SpekPreferencesDialog(wxWindow *parent);
|
||||
|
||||
private:
|
||||
void on_language(wxCommandEvent& event);
|
||||
void on_check(wxCommandEvent& event);
|
||||
|
||||
wxArrayString languages;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
#endif
|
@ -1,109 +0,0 @@
|
||||
/* spek-preferences-dialog.vala
|
||||
*
|
||||
* Copyright (C) 2011 Alexander Kojevnikov <alexander@kojevnikov.com>
|
||||
*
|
||||
* Spek is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Spek is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Spek. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using Gtk;
|
||||
|
||||
namespace Spek {
|
||||
public class PreferencesDialog : Gtk.Dialog {
|
||||
// List all languages with a decent (e.g. 80%) number of translated
|
||||
// strings. Don't translate language names. Keep the first line intact.
|
||||
private static string[,] languages = {
|
||||
{"", null},
|
||||
{"cs", "Čeština"},
|
||||
{"de", "Deutsch"},
|
||||
{"en", "English"},
|
||||
{"eo", "Esperanto"},
|
||||
{"es", "Español"},
|
||||
{"fr", "Français"},
|
||||
{"it", "Italiano"},
|
||||
{"ja", "日本語"},
|
||||
{"nl", "Nederlands"},
|
||||
{"pl", "Polski"},
|
||||
{"pt_BR", "Português brasileiro"},
|
||||
{"ru", "Русский"},
|
||||
{"sv", "Svenska"},
|
||||
{"uk", "Українська"},
|
||||
{"zh_CN", "中文(简体)"},
|
||||
{"zh_TW", "中文(台灣)"}
|
||||
};
|
||||
|
||||
public PreferencesDialog () {
|
||||
title = _("Preferences");
|
||||
modal = true;
|
||||
resizable = false;
|
||||
window_position = WindowPosition.CENTER_ON_PARENT;
|
||||
languages[0,1] = _("(system default)");
|
||||
|
||||
var alignment = new Alignment (0.5f, 0.5f, 1f, 1f);
|
||||
alignment.set_padding (12, 12, 12, 12);
|
||||
var box = new VBox (false, 0);
|
||||
|
||||
var general_box = new VBox (false, 6);
|
||||
// TRANSLATORS: The name of a section in the Preferences dialog.
|
||||
var general_label = new Label (_("General"));
|
||||
var attributes = new Pango.AttrList ();
|
||||
attributes.insert (Pango.attr_weight_new (Pango.Weight.BOLD));
|
||||
general_label.attributes = attributes;
|
||||
general_label.xalign = 0;
|
||||
general_box.pack_start (general_label, false, false, 0);
|
||||
var general_alignment = new Alignment (0.5f, 0.5f, 1f, 1f);
|
||||
general_alignment.left_padding = 12;
|
||||
var general_subbox = new VBox (false, 6);
|
||||
var language_box = new HBox (false, 12);
|
||||
var language_label = new Label.with_mnemonic (_("_Language:"));
|
||||
language_box.pack_start (language_label, false, false, 0);
|
||||
var language_combo = new ComboBox.text ();
|
||||
int active_language = 0;
|
||||
var prefs = Preferences.instance;
|
||||
for (int i = 0; i < languages.length[0]; i++) {
|
||||
language_combo.append_text (languages[i,1]);
|
||||
if (languages[i,0] == prefs.language) {
|
||||
active_language = i;
|
||||
}
|
||||
}
|
||||
language_combo.active = active_language;
|
||||
language_combo.changed.connect (
|
||||
() => prefs.language = languages[language_combo.active,0]);
|
||||
language_label.mnemonic_widget = language_combo;
|
||||
language_box.pack_start (language_combo, false, false, 0);
|
||||
general_subbox.pack_start(language_box, false, false, 0);
|
||||
var check_update = new CheckButton.with_mnemonic (_("Check for _updates"));
|
||||
check_update.active = prefs.check_update;
|
||||
check_update.toggled.connect (
|
||||
() => prefs.check_update = check_update.active);
|
||||
general_subbox.pack_start (check_update, false, false, 0);
|
||||
general_alignment.add (general_subbox);
|
||||
general_box.pack_start (general_alignment, false, false, 0);
|
||||
|
||||
box.pack_start (general_box, false, false, 0);
|
||||
alignment.add (box);
|
||||
var vbox = (VBox) get_content_area ();
|
||||
vbox.pack_start (alignment, false, false, 0);
|
||||
vbox.show_all ();
|
||||
|
||||
add_button (Stock.CLOSE, ResponseType.CLOSE);
|
||||
set_default_response (ResponseType.CLOSE);
|
||||
response.connect (on_response);
|
||||
}
|
||||
|
||||
private void on_response (Dialog dialog, int response_id) {
|
||||
Preferences.instance.save ();
|
||||
destroy ();
|
||||
}
|
||||
}
|
||||
}
|
@ -25,6 +25,7 @@
|
||||
#include <wx/protocol/http.h>
|
||||
#include <wx/sstream.h>
|
||||
|
||||
#include "spek-preferences-dialog.hh"
|
||||
#include "spek-preferences.hh"
|
||||
#include "spek-spectrogram.hh"
|
||||
|
||||
@ -282,6 +283,8 @@ void SpekWindow::on_exit(wxCommandEvent& event)
|
||||
|
||||
void SpekWindow::on_preferences(wxCommandEvent& event)
|
||||
{
|
||||
SpekPreferencesDialog dlg(this);
|
||||
dlg.ShowModal();
|
||||
}
|
||||
|
||||
void SpekWindow::on_about(wxCommandEvent& event)
|
||||
|
Loading…
x
Reference in New Issue
Block a user