590 lines
31 KiB
C
590 lines
31 KiB
C
/* ide-preferences-builtin.c
|
|
*
|
|
* Copyright 2015-2019 Christian Hergert <chergert@redhat.com>
|
|
*
|
|
* This program 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.
|
|
*
|
|
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
#define G_LOG_DOMAIN "ide-preferences-builtin"
|
|
|
|
#include "config.h"
|
|
|
|
#include <dazzle.h>
|
|
#include <glib/gi18n.h>
|
|
#include <gtksourceview/gtksource.h>
|
|
#include <handy.h>
|
|
#include <libpeas/peas.h>
|
|
|
|
#include "ide-preferences-builtin-private.h"
|
|
#include "ide-preferences-language-row-private.h"
|
|
|
|
static gint
|
|
sort_plugin_info (gconstpointer a,
|
|
gconstpointer b)
|
|
{
|
|
PeasPluginInfo *plugin_info_a = (PeasPluginInfo *)a;
|
|
PeasPluginInfo *plugin_info_b = (PeasPluginInfo *)b;
|
|
const gchar *name_a = peas_plugin_info_get_name (plugin_info_a);
|
|
const gchar *name_b = peas_plugin_info_get_name (plugin_info_b);
|
|
|
|
if (name_a == NULL || name_b == NULL)
|
|
return g_strcmp0 (name_a, name_b);
|
|
|
|
return g_utf8_collate (name_a, name_b);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_plugins (DzlPreferences *preferences)
|
|
{
|
|
PeasEngine *engine;
|
|
const GList *list;
|
|
GList *copy;
|
|
guint i = 0;
|
|
|
|
g_assert (DZL_IS_PREFERENCES (preferences));
|
|
|
|
engine = peas_engine_get_default ();
|
|
list = peas_engine_get_plugin_list (engine);
|
|
|
|
dzl_preferences_add_page (preferences, "plugins", _("Extensions"), 700);
|
|
dzl_preferences_add_list_group (preferences, "plugins", "plugins", _("Extensions"), GTK_SELECTION_NONE, 100);
|
|
|
|
copy = g_list_sort (g_list_copy ((GList *)list), sort_plugin_info);
|
|
|
|
for (const GList *iter = copy; iter; iter = iter->next, i++)
|
|
{
|
|
PeasPluginInfo *plugin_info = iter->data;
|
|
g_autofree gchar *path = NULL;
|
|
g_autofree gchar *keywords = NULL;
|
|
const gchar *desc;
|
|
const gchar *name;
|
|
|
|
if (peas_plugin_info_is_hidden (plugin_info))
|
|
continue;
|
|
|
|
name = peas_plugin_info_get_name (plugin_info);
|
|
desc = peas_plugin_info_get_description (plugin_info);
|
|
keywords = g_strdup_printf ("%s %s", name, desc);
|
|
path = g_strdup_printf ("/org/gnome/builder/plugins/%s/",
|
|
peas_plugin_info_get_module_name (plugin_info));
|
|
|
|
dzl_preferences_add_switch (preferences, "plugins", "plugins", "org.gnome.builder.plugin", "enabled", path, NULL, name, desc, keywords, i);
|
|
}
|
|
|
|
g_list_free (copy);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_appearance (DzlPreferences *preferences)
|
|
{
|
|
GtkSourceStyleSchemeManager *manager;
|
|
const gchar * const *scheme_ids;
|
|
GtkWidget *bin;
|
|
gint i;
|
|
gint follow_style;
|
|
|
|
dzl_preferences_add_page (preferences, "appearance", _("Appearance"), 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "appearance", "style", _("Style"), GTK_SELECTION_NONE, 0);
|
|
follow_style = dzl_preferences_add_radio (preferences, "appearance", "style", "org.gnome.builder", "style-variant", NULL, "\"follow\"", _("System"), NULL, _("follow"), 0);
|
|
dzl_preferences_add_radio (preferences, "appearance", "style", "org.gnome.builder", "style-variant", NULL, "\"light\"", _("Light"), NULL, NULL, 0);
|
|
dzl_preferences_add_radio (preferences, "appearance", "style", "org.gnome.builder", "style-variant", NULL, "\"dark\"", _("Dark"), NULL, NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "appearance", "editor", _("Editor"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_switch (preferences, "appearance", "editor", "org.gnome.builder.editor", "show-grid-lines", NULL, NULL, _("Grid Pattern"), _("Display a grid pattern underneath source code"), NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "appearance", "font", _("Font"), GTK_SELECTION_NONE, 10);
|
|
dzl_preferences_add_font_button (preferences, "appearance", "font", "org.gnome.builder.editor", "font-name", _("Editor"), C_("Keywords", "editor font monospace"), 0);
|
|
dzl_preferences_add_spin_button (preferences, "appearance", "font", "org.gnome.builder.editor", "line-spacing", NULL, _("Line Spacing"), _("Number of pixels above and below editor lines"), C_("Keywords", "editor line spacing font monospace"), 0);
|
|
|
|
manager = gtk_source_style_scheme_manager_get_default ();
|
|
scheme_ids = gtk_source_style_scheme_manager_get_scheme_ids (manager);
|
|
|
|
dzl_preferences_add_list_group (preferences, "appearance", "schemes", _("Color Scheme"), GTK_SELECTION_NONE, 20);
|
|
|
|
for (i = 0; scheme_ids [i]; i++)
|
|
{
|
|
g_autofree gchar *variant_str = NULL;
|
|
GtkSourceStyleScheme *scheme;
|
|
const gchar *title;
|
|
|
|
variant_str = g_strdup_printf ("\"%s\"", scheme_ids [i]);
|
|
scheme = gtk_source_style_scheme_manager_get_scheme (manager, scheme_ids [i]);
|
|
title = gtk_source_style_scheme_get_name (scheme);
|
|
|
|
dzl_preferences_add_radio (preferences, "appearance", "schemes", "org.gnome.builder.editor", "style-scheme-name", NULL, variant_str, title, NULL, title, i);
|
|
}
|
|
|
|
if (!hdy_style_manager_get_system_supports_color_schemes (hdy_style_manager_get_default ()))
|
|
{
|
|
bin = dzl_preferences_get_widget (preferences, follow_style);
|
|
gtk_widget_set_sensitive (bin, FALSE);
|
|
}
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_keyboard (DzlPreferences *preferences)
|
|
{
|
|
dzl_preferences_add_page (preferences, "keyboard", _("Keyboard"), 400);
|
|
|
|
dzl_preferences_add_list_group (preferences, "keyboard", "mode", _("Emulation"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_radio (preferences, "keyboard", "mode", "org.gnome.builder.editor", "keybindings", NULL, "\"default\"", _("Builder"), _("Default keybinding mode which mimics gedit"), NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "keyboard", "movements", _("Movement"), GTK_SELECTION_NONE, 100);
|
|
dzl_preferences_add_switch (preferences, "keyboard", "movements", "org.gnome.builder.editor", "smart-home-end", NULL, NULL, _("Smart Home and End"), _("Home moves to first non-whitespace character"), NULL, 0);
|
|
dzl_preferences_add_switch (preferences, "keyboard", "movements", "org.gnome.builder.editor", "smart-backspace", NULL, NULL, _("Smart Backspace"), _("Backspace will remove extra space to keep you aligned with your indentation"), NULL, 100);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_editor (DzlPreferences *preferences)
|
|
{
|
|
dzl_preferences_add_page (preferences, "editor", _("Editor"), 100);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "general", _("General"), GTK_SELECTION_NONE, -5);
|
|
dzl_preferences_add_switch (preferences, "editor", "general", "org.gnome.builder", "show-open-files", NULL, NULL, _("Display list of open files"), _("Display the list of all open files in the project sidebar"), NULL, 0);
|
|
dzl_preferences_add_switch (preferences, "editor", "general", "org.gnome.builder", "format-on-save", NULL, NULL, _("Reformat code on save"), _("Reformat current file on save"), NULL, 5);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "position", _("Cursor"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_switch (preferences, "editor", "position", "org.gnome.builder.editor", "restore-insert-mark", NULL, NULL, _("Restore cursor position"), _("Restore cursor position when a file is reopened"), NULL, 0);
|
|
dzl_preferences_add_spin_button (preferences, "editor", "position", "org.gnome.builder.editor", "scroll-offset", NULL, _("Scroll Offset"), _("Minimum number of lines to keep above and below the cursor"), NULL, 10);
|
|
dzl_preferences_add_spin_button (preferences, "editor", "position", "org.gnome.builder.editor", "overscroll", NULL, _("Overscroll"), _("Allow the editor to scroll past the end of the buffer"), NULL, 20);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "text-wrapping", _("Text Wrapping"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_radio (preferences, "editor", "text-wrapping", "org.gnome.builder.editor", "wrap-text", NULL, "\"never\"", _("Never"), NULL, NULL, 0);
|
|
dzl_preferences_add_radio (preferences, "editor", "text-wrapping", "org.gnome.builder.editor", "wrap-text", NULL, "\"whitespace\"", _("In Between Words"), NULL, NULL, 0);
|
|
dzl_preferences_add_radio (preferences, "editor", "text-wrapping", "org.gnome.builder.editor", "wrap-text", NULL, "\"always\"", _("Always"), NULL, NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "line", _("Line Information"), GTK_SELECTION_NONE, 50);
|
|
dzl_preferences_add_switch (preferences, "editor", "line", "org.gnome.builder.editor", "show-line-numbers", NULL, NULL, _("Line numbers"), _("Show line number at beginning of each line"), NULL, 0);
|
|
dzl_preferences_add_switch (preferences, "editor", "line", "org.gnome.builder.editor", "show-relative-line-numbers", NULL, NULL, _("Relative line numbers"), _("Show line numbers relative to the cursor line"), NULL, 0);
|
|
dzl_preferences_add_switch (preferences, "editor", "line", "org.gnome.builder.editor", "show-line-changes", NULL, NULL, _("Line changes"), _("Show if a line was added or modified next to line number"), NULL, 1);
|
|
dzl_preferences_add_switch (preferences, "editor", "line", "org.gnome.builder.editor", "show-line-diagnostics", NULL, NULL, _("Line diagnostics"), _("Show an icon next to line numbers indicating type of diagnostic"), NULL, 2);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "highlight", _("Highlight"), GTK_SELECTION_NONE, 100);
|
|
dzl_preferences_add_switch (preferences, "editor", "highlight", "org.gnome.builder.editor", "highlight-current-line", NULL, NULL, _("Current line"), _("Make current line stand out with highlights"), NULL, 0);
|
|
dzl_preferences_add_switch (preferences, "editor", "highlight", "org.gnome.builder.editor", "highlight-matching-brackets", NULL, NULL, _("Matching brackets"), _("Highlight matching brackets based on cursor position"), NULL, 1);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "overview", _("Code Overview"), GTK_SELECTION_NONE, 100);
|
|
dzl_preferences_add_switch (preferences, "editor", "overview", "org.gnome.builder.editor", "show-map", NULL, NULL, _("Show overview map"), _("A zoomed out view to enhance navigating source code"), NULL, 0);
|
|
dzl_preferences_add_switch (preferences, "editor", "overview", "org.gnome.builder.editor", "auto-hide-map", NULL, NULL, _("Automatically hide overview map"), _("Automatically hide map when editor loses focus"), NULL, 1);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "draw-spaces", _("Visible Whitespace Characters"), GTK_SELECTION_NONE, 400);
|
|
dzl_preferences_add_radio (preferences, "editor", "draw-spaces", "org.gnome.builder.editor", "draw-spaces", NULL, "\"space\"", _("Spaces"), NULL, NULL, 0);
|
|
dzl_preferences_add_radio (preferences, "editor", "draw-spaces", "org.gnome.builder.editor", "draw-spaces", NULL, "\"tab\"", _("Tabs"), NULL, NULL, 1);
|
|
dzl_preferences_add_radio (preferences, "editor", "draw-spaces", "org.gnome.builder.editor", "draw-spaces", NULL, "\"newline\"", _("New line and carriage return"), NULL, NULL, 2);
|
|
dzl_preferences_add_radio (preferences, "editor", "draw-spaces", "org.gnome.builder.editor", "draw-spaces", NULL, "\"nbsp\"", _("Non-breaking spaces"), NULL, NULL, 3);
|
|
dzl_preferences_add_radio (preferences, "editor", "draw-spaces", "org.gnome.builder.editor", "draw-spaces", NULL, "\"text\"", _("Spaces inside of text"), NULL, NULL, 4);
|
|
dzl_preferences_add_radio (preferences, "editor", "draw-spaces", "org.gnome.builder.editor", "draw-spaces", NULL, "\"trailing\"", _("Trailing Only"), NULL, NULL, 5);
|
|
dzl_preferences_add_radio (preferences, "editor", "draw-spaces", "org.gnome.builder.editor", "draw-spaces", NULL, "\"leading\"", _("Leading Only"), NULL, NULL, 6);
|
|
|
|
dzl_preferences_add_list_group (preferences, "editor", "autosave", _("Autosave"), GTK_SELECTION_NONE, 450);
|
|
dzl_preferences_add_switch (preferences, "editor", "autosave", "org.gnome.builder.editor", "auto-save", NULL, NULL,_("Autosave Enabled"), _("Enable or disable autosave feature"), NULL, 1);
|
|
dzl_preferences_add_spin_button (preferences, "editor", "autosave", "org.gnome.builder.editor", "auto-save-timeout", NULL, _("Autosave Frequency"), _("The number of seconds after modification before auto saving"), NULL, 60);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_code_insight (DzlPreferences *preferences)
|
|
{
|
|
dzl_preferences_add_page (preferences, "code-insight", _("Code Insight"), 300);
|
|
|
|
dzl_preferences_add_list_group (preferences, "code-insight", "highlighting", _("Highlighting"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_switch (preferences, "code-insight", "highlighting", "org.gnome.builder.code-insight", "semantic-highlighting", NULL, NULL, _("Semantic Highlighting"), _("Use code insight to highlight additional information discovered in source file"), NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "code-insight", "diagnostics", _("Diagnostics"), GTK_SELECTION_NONE, 200);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_completion (DzlPreferences *preferences)
|
|
{
|
|
dzl_preferences_add_page (preferences, "completion", _("Completion"), 325);
|
|
|
|
dzl_preferences_add_list_group (preferences, "completion", "general", _("General"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_spin_button (preferences, "completion", "general", "org.gnome.builder.editor", "completion-n-rows", NULL, _("Completions Display Size"), _("Number of completions to display"), NULL, -1);
|
|
dzl_preferences_add_switch (preferences, "completion", "general", "org.gnome.builder.editor", "interactive-completion", NULL, NULL, _("Interactive Completion"), _("Display code suggestions interactively as you type"), NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "completion", "providers", _("Completion Providers"), GTK_SELECTION_NONE, 100);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_snippets (DzlPreferences *preferences)
|
|
{
|
|
dzl_preferences_add_page (preferences, "snippets", _("Snippets"), 350);
|
|
|
|
/* TODO: Add snippet editor widget + languages */
|
|
}
|
|
|
|
static void
|
|
language_search_changed (GtkSearchEntry *search,
|
|
DzlPreferencesGroup *group)
|
|
{
|
|
g_autoptr(DzlPatternSpec) spec = NULL;
|
|
const gchar *text;
|
|
|
|
g_assert (GTK_IS_SEARCH_ENTRY (search));
|
|
g_assert (DZL_IS_PREFERENCES_GROUP (group));
|
|
|
|
text = gtk_entry_get_text (GTK_ENTRY (search));
|
|
|
|
if (!dzl_str_empty0 (text))
|
|
{
|
|
g_autofree gchar *folded = g_utf8_casefold (text, -1);
|
|
|
|
spec = dzl_pattern_spec_new (folded);
|
|
}
|
|
|
|
/* FIXME:
|
|
*
|
|
* This is a bit of a leaky abstraction, but we can
|
|
* clean that up later. We need to get something out
|
|
* that is coherent for 3.22.
|
|
*/
|
|
|
|
dzl_preferences_group_refilter (group, spec);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_languages (DzlPreferences *preferences)
|
|
{
|
|
GtkSourceLanguageManager *manager;
|
|
const gchar * const *language_ids;
|
|
GtkSearchEntry *search;
|
|
GtkWidget *group = NULL;
|
|
GtkWidget *flow = NULL;
|
|
|
|
dzl_preferences_add_page (preferences, "languages", _("Programming Languages"), 200);
|
|
|
|
manager = gtk_source_language_manager_get_default ();
|
|
language_ids = gtk_source_language_manager_get_language_ids (manager);
|
|
|
|
g_assert (language_ids != NULL && language_ids[0] != NULL);
|
|
|
|
dzl_preferences_add_group (preferences, "languages", "search", NULL, 0);
|
|
|
|
search = g_object_new (GTK_TYPE_SEARCH_ENTRY,
|
|
/* translators: placeholder string for the entry used to filter the languages in Preferences/Programming languages */
|
|
"placeholder-text", _("Search languages…"),
|
|
"visible", TRUE,
|
|
NULL);
|
|
dzl_preferences_add_custom (preferences, "languages", "search", GTK_WIDGET (search), NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "languages", "languages", NULL, GTK_SELECTION_SINGLE, 1);
|
|
|
|
for (guint i = 0; language_ids [i]; i++)
|
|
{
|
|
g_autofree gchar *keywords = NULL;
|
|
g_autofree gchar *folded = NULL;
|
|
IdePreferencesLanguageRow *row;
|
|
GtkSourceLanguage *language;
|
|
const gchar *name;
|
|
const gchar *section;
|
|
|
|
language = gtk_source_language_manager_get_language (manager, language_ids [i]);
|
|
if (gtk_source_language_get_hidden (language))
|
|
continue;
|
|
|
|
name = gtk_source_language_get_name (language);
|
|
section = gtk_source_language_get_section (language);
|
|
|
|
keywords = g_strdup_printf ("%s %s %s", name, section, language_ids [i]);
|
|
folded = g_utf8_casefold (keywords, -1);
|
|
|
|
row = g_object_new (IDE_TYPE_PREFERENCES_LANGUAGE_ROW,
|
|
"id", language_ids [i],
|
|
"keywords", folded,
|
|
"title", name,
|
|
"visible", TRUE,
|
|
NULL);
|
|
dzl_preferences_add_custom (preferences, "languages", "languages", GTK_WIDGET (row), NULL, i);
|
|
|
|
if G_UNLIKELY (group == NULL)
|
|
group = gtk_widget_get_ancestor (GTK_WIDGET (row), DZL_TYPE_PREFERENCES_GROUP);
|
|
}
|
|
|
|
g_assert (group != NULL);
|
|
|
|
g_signal_connect_object (search,
|
|
"changed",
|
|
G_CALLBACK (language_search_changed),
|
|
group,
|
|
0);
|
|
|
|
g_signal_connect (search,
|
|
"stop-search",
|
|
G_CALLBACK (gtk_entry_set_text),
|
|
(gpointer) "");
|
|
|
|
flow = gtk_widget_get_ancestor (group, DZL_TYPE_COLUMN_LAYOUT);
|
|
|
|
g_assert (flow != NULL);
|
|
|
|
dzl_column_layout_set_max_columns (DZL_COLUMN_LAYOUT (flow), 1);
|
|
|
|
dzl_preferences_add_page (preferences, "languages.id", NULL, 0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "languages.id", "basic", _("General"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_switch (preferences, "languages.id", "basic", "org.gnome.builder.editor.language", "trim-trailing-whitespace", "/org/gnome/builder/editor/language/{id}/", NULL, _("Trim trailing whitespace"), _("Upon saving, trailing whitespace from modified lines will be trimmed."), NULL, 10);
|
|
dzl_preferences_add_switch (preferences, "languages.id", "basic", "org.gnome.builder.editor.language", "overwrite-braces", "/org/gnome/builder/editor/language/{id}/", NULL, _("Overwrite Braces"), _("Overwrite closing braces"), NULL, 20);
|
|
dzl_preferences_add_switch (preferences, "languages.id", "basic", "org.gnome.builder.editor.language", "insert-matching-brace", "/org/gnome/builder/editor/language/{id}/", NULL, _("Insert Matching Brace"), _("Insert matching character for { [ ( or \""), NULL, 20);
|
|
dzl_preferences_add_switch (preferences, "languages.id", "basic", "org.gnome.builder.editor.language", "insert-trailing-newline", "/org/gnome/builder/editor/language/{id}/", NULL, _("Insert Trailing Newline"), _("Ensure files end with a newline"), NULL, 30);
|
|
|
|
dzl_preferences_add_list_group (preferences, "languages.id", "margin", _("Margins"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "margin", "org.gnome.builder.editor.language", "show-right-margin", "/org/gnome/builder/editor/language/{id}/", NULL, _("Show right margin"), NULL, NULL, 0);
|
|
dzl_preferences_add_spin_button (preferences, "languages.id", "margin", "org.gnome.builder.editor.language", "right-margin-position", "/org/gnome/builder/editor/language/{id}/", _("Right margin position"), _("Position in spaces for the right margin"), NULL, 10);
|
|
|
|
dzl_preferences_add_list_group (preferences, "languages.id", "indentation", _("Indentation"), GTK_SELECTION_NONE, 100);
|
|
dzl_preferences_add_spin_button (preferences, "languages.id", "indentation", "org.gnome.builder.editor.language", "tab-width", "/org/gnome/builder/editor/language/{id}/", _("Tab width"), _("Width of a tab character in spaces"), NULL, 10);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "indentation", "org.gnome.builder.editor.language", "insert-spaces-instead-of-tabs", "/org/gnome/builder/editor/language/{id}/", NULL, _("Insert spaces instead of tabs"), _("Prefer spaces over use of tabs"), NULL, 20);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "indentation", "org.gnome.builder.editor.language", "auto-indent", "/org/gnome/builder/editor/language/{id}/", NULL, _("Automatically indent"), _("Indent source code as you type"), NULL, 30);
|
|
|
|
dzl_preferences_add_list_group (preferences, "languages.id", "spaces-style", _("Spacing"), GTK_SELECTION_NONE, 600);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "spaces-style", "org.gnome.builder.editor.language", "spaces-style", "/org/gnome/builder/editor/language/{id}/", "\"before-left-paren\"", _("Space before opening parentheses"), NULL, NULL, 0);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "spaces-style", "org.gnome.builder.editor.language", "spaces-style", "/org/gnome/builder/editor/language/{id}/", "\"before-left-bracket\"", _("Space before opening brackets"), NULL, NULL, 1);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "spaces-style", "org.gnome.builder.editor.language", "spaces-style", "/org/gnome/builder/editor/language/{id}/", "\"before-left-brace\"", _("Space before opening braces"), NULL, NULL, 2);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "spaces-style", "org.gnome.builder.editor.language", "spaces-style", "/org/gnome/builder/editor/language/{id}/", "\"before-left-angle\"", _("Space before opening angles"), NULL, NULL, 3);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "spaces-style", "org.gnome.builder.editor.language", "spaces-style", "/org/gnome/builder/editor/language/{id}/", "\"colon\"", _("Prefer a space before colons"), NULL, NULL, 4);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "spaces-style", "org.gnome.builder.editor.language", "spaces-style", "/org/gnome/builder/editor/language/{id}/", "\"comma\"", _("Prefer a space before commas"), NULL, NULL, 5);
|
|
dzl_preferences_add_radio (preferences, "languages.id", "spaces-style", "org.gnome.builder.editor.language", "spaces-style", "/org/gnome/builder/editor/language/{id}/", "\"semicolon\"", _("Prefer a space before semicolons"), NULL, NULL, 6);
|
|
}
|
|
|
|
static gboolean
|
|
workers_output (GtkSpinButton *button)
|
|
{
|
|
GtkAdjustment *adj = gtk_spin_button_get_adjustment (button);
|
|
|
|
if (gtk_adjustment_get_value (adj) == -1)
|
|
{
|
|
gtk_entry_set_text (GTK_ENTRY (button), _("Default"));
|
|
return TRUE;
|
|
}
|
|
else if (gtk_adjustment_get_value (adj) == 0)
|
|
{
|
|
gtk_entry_set_text (GTK_ENTRY (button), _("Number of CPU"));
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static gint
|
|
workers_input (GtkSpinButton *button,
|
|
gdouble *new_value)
|
|
{
|
|
const gchar *text = gtk_entry_get_text (GTK_ENTRY (button));
|
|
|
|
if (g_strcmp0 (text, _("Default")) == 0)
|
|
{
|
|
*new_value = -1;
|
|
return TRUE;
|
|
}
|
|
else if (g_strcmp0 (text, _("Number of CPU")) == 0)
|
|
{
|
|
*new_value = 0;
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_build (DzlPreferences *preferences)
|
|
{
|
|
GtkWidget *widget, *bin;
|
|
guint id;
|
|
|
|
dzl_preferences_add_page (preferences, "build", _("Build"), 500);
|
|
|
|
dzl_preferences_add_list_group (preferences, "build", "basic", _("General"), GTK_SELECTION_NONE, 0);
|
|
id = dzl_preferences_add_spin_button (preferences, "build", "basic", "org.gnome.builder.build", "parallel", "/org/gnome/builder/build/", _("Build Workers"), _("Number of parallel build workers"), NULL, 0);
|
|
|
|
bin = dzl_preferences_get_widget (preferences, id);
|
|
widget = dzl_preferences_spin_button_get_spin_button (DZL_PREFERENCES_SPIN_BUTTON (bin));
|
|
gtk_entry_set_width_chars (GTK_ENTRY (widget), 20);
|
|
g_signal_connect (widget, "input", G_CALLBACK (workers_input), NULL);
|
|
g_signal_connect (widget, "output", G_CALLBACK (workers_output), NULL);
|
|
|
|
dzl_preferences_add_switch (preferences, "build", "basic", "org.gnome.builder.build", "clear-build-log-pane", NULL, NULL, _("Clear build logs"), _("Clear build log pane on rebuild"), NULL, 10);
|
|
dzl_preferences_add_switch (preferences, "build", "basic", "org.gnome.builder", "clear-cache-at-startup", NULL, NULL, _("Clear build cache at startup"), _("Expired caches will be purged when Builder is started"), NULL, 10);
|
|
|
|
dzl_preferences_add_list_group (preferences, "build", "network", _("Network"), GTK_SELECTION_NONE, 100);
|
|
dzl_preferences_add_switch (preferences, "build", "network", "org.gnome.builder.build", "allow-network-when-metered", NULL, NULL, _("Allow downloads over metered connections"), _("Allow the use of metered network connections when automatically downloading dependencies"), NULL, 10);
|
|
|
|
dzl_preferences_add_page (preferences, "debugger", _("Debugger"), 550);
|
|
dzl_preferences_add_list_group (preferences, "debugger", "general", _("Breakpoints"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_switch (preferences, "debugger", "general", "org.gnome.builder.build", "debugger-breakpoint-on-main", NULL, NULL, _("Insert Breakpoint at Start of Application"), _("Automatically stop execution at the start of the applications main function"), NULL, 0);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_projects (DzlPreferences *preferences)
|
|
{
|
|
dzl_preferences_add_page (preferences, "projects", _("Projects"), 450);
|
|
|
|
dzl_preferences_add_list_group (preferences, "projects", "directory", _("Workspace"), GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_file_chooser (preferences, "projects", "directory", "org.gnome.builder", "projects-directory", NULL, _("Projects directory"), _("A place for all your projects"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, NULL, 0);
|
|
dzl_preferences_add_switch (preferences, "projects", "directory", "org.gnome.builder", "restore-previous-files", NULL, NULL, _("Restore previously opened files"), _("Open previously opened files when loading a project"), NULL, 10);
|
|
}
|
|
|
|
#if 0
|
|
static void
|
|
author_changed_cb (DzlPreferencesEntry *entry,
|
|
const gchar *text,
|
|
IdeVcsConfig *conf)
|
|
{
|
|
GValue value = G_VALUE_INIT;
|
|
|
|
g_assert (DZL_IS_PREFERENCES_ENTRY (entry));
|
|
g_assert (text != NULL);
|
|
g_assert (IDE_IS_VCS_CONFIG (conf));
|
|
|
|
g_value_init (&value, G_TYPE_STRING);
|
|
g_value_set_string (&value, text);
|
|
|
|
ide_vcs_config_set_config (conf, IDE_VCS_CONFIG_FULL_NAME, &value);
|
|
|
|
g_value_unset (&value);
|
|
}
|
|
|
|
static void
|
|
email_changed_cb (DzlPreferencesEntry *entry,
|
|
const gchar *text,
|
|
IdeVcsConfig *conf)
|
|
{
|
|
GValue value = G_VALUE_INIT;
|
|
|
|
g_assert (DZL_IS_PREFERENCES_ENTRY (entry));
|
|
g_assert (text != NULL);
|
|
g_assert (IDE_IS_VCS_CONFIG (conf));
|
|
|
|
g_value_init (&value, G_TYPE_STRING);
|
|
g_value_set_string (&value, text);
|
|
|
|
ide_vcs_config_set_config (conf, IDE_VCS_CONFIG_EMAIL, &value);
|
|
|
|
g_value_unset (&value);
|
|
}
|
|
|
|
static void
|
|
vcs_configs_foreach_cb (PeasExtensionSet *set,
|
|
PeasPluginInfo *plugin_info,
|
|
PeasExtension *exten,
|
|
gpointer user_data)
|
|
{
|
|
DzlPreferences *preferences = user_data;
|
|
IdeVcsConfig *conf = (IdeVcsConfig *)exten;
|
|
GValue value = G_VALUE_INIT;
|
|
GtkWidget *fullname;
|
|
GtkWidget *email;
|
|
GtkSizeGroup *size_group;
|
|
g_autofree gchar *key = NULL;
|
|
g_autofree gchar *author_name = NULL;
|
|
g_autofree gchar *author_email = NULL;
|
|
const gchar *name;
|
|
const gchar *id;
|
|
|
|
g_assert (PEAS_IS_EXTENSION_SET (set));
|
|
g_assert (DZL_IS_PREFERENCES (preferences));
|
|
g_assert (IDE_IS_VCS_CONFIG (conf));
|
|
|
|
name = peas_plugin_info_get_name (plugin_info);
|
|
id = peas_plugin_info_get_module_name (plugin_info);
|
|
key = g_strdup_printf ("%s-config", id);
|
|
|
|
g_object_set_data_full (G_OBJECT (preferences), key, g_object_ref (conf), g_object_unref);
|
|
|
|
g_value_init (&value, G_TYPE_STRING);
|
|
|
|
ide_vcs_config_get_config (conf, IDE_VCS_CONFIG_FULL_NAME, &value);
|
|
author_name = g_strdup (g_value_get_string (&value));
|
|
|
|
g_value_reset (&value);
|
|
|
|
ide_vcs_config_get_config (conf, IDE_VCS_CONFIG_EMAIL, &value);
|
|
author_email = g_strdup (g_value_get_string (&value));
|
|
|
|
g_value_unset (&value);
|
|
|
|
fullname = g_object_new (DZL_TYPE_PREFERENCES_ENTRY,
|
|
"text", dzl_str_empty0 (author_name) ? "" : author_name,
|
|
"title", "Author",
|
|
"visible", TRUE,
|
|
NULL);
|
|
|
|
g_signal_connect_object (fullname,
|
|
"changed",
|
|
G_CALLBACK (author_changed_cb),
|
|
conf,
|
|
0);
|
|
|
|
email = g_object_new (DZL_TYPE_PREFERENCES_ENTRY,
|
|
"text", dzl_str_empty0 (author_email) ? "" : author_email,
|
|
"title", "Email",
|
|
"visible", TRUE,
|
|
NULL);
|
|
|
|
g_signal_connect_object (email,
|
|
"changed",
|
|
G_CALLBACK (email_changed_cb),
|
|
conf,
|
|
0);
|
|
|
|
dzl_preferences_add_list_group (preferences, "vcs", id, name, GTK_SELECTION_NONE, 0);
|
|
dzl_preferences_add_custom (preferences, "vcs", id, fullname, NULL, 0);
|
|
dzl_preferences_add_custom (preferences, "vcs", id, email, NULL, 0);
|
|
|
|
size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
|
|
gtk_size_group_add_widget (size_group, dzl_preferences_entry_get_title_widget (DZL_PREFERENCES_ENTRY (fullname)));
|
|
gtk_size_group_add_widget (size_group, dzl_preferences_entry_get_title_widget (DZL_PREFERENCES_ENTRY (email)));
|
|
g_clear_object (&size_group);
|
|
}
|
|
|
|
static void
|
|
ide_preferences_builtin_register_vcs (DzlPreferences *preferences)
|
|
{
|
|
PeasEngine *engine;
|
|
PeasExtensionSet *extensions;
|
|
|
|
dzl_preferences_add_page (preferences, "vcs", _("Version Control"), 600);
|
|
|
|
engine = peas_engine_get_default ();
|
|
extensions = peas_extension_set_new (engine, IDE_TYPE_VCS_CONFIG, NULL);
|
|
peas_extension_set_foreach (extensions, vcs_configs_foreach_cb, preferences);
|
|
g_clear_object (&extensions);
|
|
}
|
|
#endif
|
|
|
|
static void
|
|
ide_preferences_builtin_register_sdks (DzlPreferences *preferences)
|
|
{
|
|
/* only the page goes here, plugins will fill in the details */
|
|
dzl_preferences_add_page (preferences, "sdk", _("SDKs"), 550);
|
|
}
|
|
|
|
void
|
|
_ide_preferences_builtin_register (DzlPreferences *preferences)
|
|
{
|
|
ide_preferences_builtin_register_appearance (preferences);
|
|
ide_preferences_builtin_register_editor (preferences);
|
|
ide_preferences_builtin_register_languages (preferences);
|
|
ide_preferences_builtin_register_code_insight (preferences);
|
|
ide_preferences_builtin_register_completion (preferences);
|
|
ide_preferences_builtin_register_snippets (preferences);
|
|
ide_preferences_builtin_register_keyboard (preferences);
|
|
ide_preferences_builtin_register_plugins (preferences);
|
|
ide_preferences_builtin_register_build (preferences);
|
|
ide_preferences_builtin_register_projects (preferences);
|
|
//ide_preferences_builtin_register_vcs (preferences);
|
|
ide_preferences_builtin_register_sdks (preferences);
|
|
}
|