[tepl] Add TeplLanguageChooser interface
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] Add TeplLanguageChooser interface
- Date: Sun, 1 Nov 2020 00:45:19 +0000 (UTC)
commit 36dd3e2e9819cdaaa2f13091ab784fccf3315e6d
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sat Oct 31 16:54:04 2020 +0100
Add TeplLanguageChooser interface
Like GtkSourceStyleSchemeChooser, but for GtkSourceLanguage, to have a
consistent name.
The TeplHighlightModeSelector class will be renamed to
TeplLanguageChooserWidget. And there will also be a Dialog
implementation like in gedit, and maybe also a Button (a Button would be
useful for setting the default language in the preferences dialog, for
example, although the Button implementation doesn't exist in gedit yet).
docs/reference/tepl-docs.xml | 7 ++++-
docs/reference/tepl-sections.txt | 13 ++++++++
po/POTFILES.in | 1 +
tepl/meson.build | 2 ++
tepl/tepl-language-chooser.c | 68 ++++++++++++++++++++++++++++++++++++++++
tepl/tepl-language-chooser.h | 59 ++++++++++++++++++++++++++++++++++
tepl/tepl.h | 1 +
7 files changed, 150 insertions(+), 1 deletion(-)
---
diff --git a/docs/reference/tepl-docs.xml b/docs/reference/tepl-docs.xml
index 090c230..401315e 100644
--- a/docs/reference/tepl-docs.xml
+++ b/docs/reference/tepl-docs.xml
@@ -61,10 +61,15 @@
<xi:include href="xml/gutter-renderer-folds.xml"/>
</chapter>
+ <chapter id="language-choosers">
+ <title>Language Choosers</title>
+ <xi:include href="xml/language-chooser.xml"/>
+ <xi:include href="xml/highlight-mode-selector.xml"/>
+ </chapter>
+
<chapter id="misc">
<title>Misc</title>
<xi:include href="xml/goto-line-bar.xml"/>
- <xi:include href="xml/highlight-mode-selector.xml"/>
<xi:include href="xml/info-bar.xml"/>
<xi:include href="xml/iter.xml"/>
<xi:include href="xml/panel.xml"/>
diff --git a/docs/reference/tepl-sections.txt b/docs/reference/tepl-sections.txt
index cf1abd8..1052d29 100644
--- a/docs/reference/tepl-sections.txt
+++ b/docs/reference/tepl-sections.txt
@@ -278,6 +278,19 @@ tepl_io_error_info_bar_invalid_characters
tepl_iter_get_line_indentation
</SECTION>
+<SECTION>
+<FILE>language-chooser</FILE>
+TeplLanguageChooser
+TeplLanguageChooserInterface
+tepl_language_chooser_select_language
+<SUBSECTION Standard>
+TEPL_IS_LANGUAGE_CHOOSER
+TEPL_LANGUAGE_CHOOSER
+TEPL_LANGUAGE_CHOOSER_GET_INTERFACE
+TEPL_TYPE_LANGUAGE_CHOOSER
+tepl_language_chooser_get_type
+</SECTION>
+
<SECTION>
<FILE>menu-shell</FILE>
tepl_menu_shell_append_edit_actions
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 0238724..a5d889a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -15,6 +15,7 @@ tepl/tepl-info-bar.c
tepl/tepl-init.c
tepl/tepl-io-error-info-bars.c
tepl/tepl-iter.c
+tepl/tepl-language-chooser.c
tepl/tepl-menu-shell.c
tepl/tepl-metadata-attic.c
tepl/tepl-metadata.c
diff --git a/tepl/meson.build b/tepl/meson.build
index 0442571..6be7ec8 100644
--- a/tepl/meson.build
+++ b/tepl/meson.build
@@ -16,6 +16,7 @@ tepl_public_headers = [
'tepl-init.h',
'tepl-io-error-info-bars.h',
'tepl-iter.h',
+ 'tepl-language-chooser.h',
'tepl-macros.h',
'tepl-menu-shell.h',
'tepl-metadata.h',
@@ -52,6 +53,7 @@ tepl_public_c_files = [
'tepl-init.c',
'tepl-io-error-info-bars.c',
'tepl-iter.c',
+ 'tepl-language-chooser.c',
'tepl-menu-shell.c',
'tepl-metadata.c',
'tepl-metadata-manager.c',
diff --git a/tepl/tepl-language-chooser.c b/tepl/tepl-language-chooser.c
new file mode 100644
index 0000000..e2e660e
--- /dev/null
+++ b/tepl/tepl-language-chooser.c
@@ -0,0 +1,68 @@
+/* SPDX-FileCopyrightText: 2020 - Sébastien Wilmet <swilmet gnome org>
+ * SPDX-License-Identifier: LGPL-3.0-or-later
+ */
+
+#include "tepl-language-chooser.h"
+
+/**
+ * SECTION:language-chooser
+ * @Title: TeplLanguageChooser
+ * @Short_description: Interface implemented by widgets for choosing a #GtkSourceLanguage
+ */
+
+enum
+{
+ SIGNAL_LANGUAGE_ACTIVATED,
+ N_SIGNALS
+};
+
+static guint signals[N_SIGNALS];
+
+G_DEFINE_INTERFACE (TeplLanguageChooser, tepl_language_chooser, G_TYPE_OBJECT)
+
+static void
+tepl_language_chooser_select_language_default (TeplLanguageChooser *chooser,
+ GtkSourceLanguage *language)
+{
+}
+
+static void
+tepl_language_chooser_default_init (TeplLanguageChooserInterface *interface)
+{
+ interface->select_language = tepl_language_chooser_select_language_default;
+
+ /* FIXME: do like in GtkSourceCompletionProposal, have an initialized
+ * gboolean variable? To ensure to init the signal only once.
+ */
+ /**
+ * TeplLanguageChooser::language-activated:
+ * @chooser: the #TeplLanguageChooser emitting the signal.
+ * @language: the #GtkSourceLanguage object that has been selected.
+ *
+ * Since: 5.2
+ */
+ signals[SIGNAL_LANGUAGE_ACTIVATED] =
+ g_signal_new ("language-activated",
+ G_TYPE_FROM_INTERFACE (interface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (TeplLanguageChooserInterface, language_activated),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, GTK_SOURCE_TYPE_LANGUAGE);
+}
+
+/**
+ * tepl_language_chooser_select_language:
+ * @chooser: a #TeplLanguageChooser.
+ * @language: (nullable): a #GtkSourceLanguage, or %NULL.
+ *
+ * Since: 5.2
+ */
+void
+tepl_language_chooser_select_language (TeplLanguageChooser *chooser,
+ GtkSourceLanguage *language)
+{
+ g_return_if_fail (TEPL_IS_LANGUAGE_CHOOSER (chooser));
+ g_return_if_fail (language == NULL || GTK_SOURCE_IS_LANGUAGE (language));
+
+ TEPL_LANGUAGE_CHOOSER_GET_INTERFACE (chooser)->select_language (chooser, language);
+}
diff --git a/tepl/tepl-language-chooser.h b/tepl/tepl-language-chooser.h
new file mode 100644
index 0000000..f281aad
--- /dev/null
+++ b/tepl/tepl-language-chooser.h
@@ -0,0 +1,59 @@
+/* SPDX-FileCopyrightText: 2020 - Sébastien Wilmet <swilmet gnome org>
+ * SPDX-License-Identifier: LGPL-3.0-or-later
+ */
+
+#ifndef TEPL_LANGUAGE_CHOOSER_H
+#define TEPL_LANGUAGE_CHOOSER_H
+
+#if !defined (TEPL_H_INSIDE) && !defined (TEPL_COMPILATION)
+#error "Only <tepl/tepl.h> can be included directly."
+#endif
+
+#include <gtksourceview/gtksource.h>
+#include <tepl/tepl-macros.h>
+
+G_BEGIN_DECLS
+
+#define TEPL_TYPE_LANGUAGE_CHOOSER (tepl_language_chooser_get_type ())
+#define TEPL_LANGUAGE_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
TEPL_TYPE_LANGUAGE_CHOOSER, TeplLanguageChooser))
+#define TEPL_IS_LANGUAGE_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
TEPL_TYPE_LANGUAGE_CHOOSER))
+#define TEPL_LANGUAGE_CHOOSER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj),
TEPL_TYPE_LANGUAGE_CHOOSER, TeplLanguageChooserInterface))
+
+typedef struct _TeplLanguageChooser TeplLanguageChooser;
+typedef struct _TeplLanguageChooserInterface TeplLanguageChooserInterface;
+
+/**
+ * TeplLanguageChooserInterface:
+ * @parent_interface: The parent interface.
+ * @select_language: The virtual function pointer for tepl_language_chooser_select_language().
+ * By default, does nothing.
+ * @language_activated: The function pointer for the
+ * #TeplLanguageChooser::language-activated signal.
+ *
+ * The virtual function table for #TeplLanguageChooser.
+ *
+ * Since: 5.2
+ */
+struct _TeplLanguageChooserInterface
+{
+ GTypeInterface parent_interface;
+
+ /* Interface functions */
+ void (* select_language) (TeplLanguageChooser *chooser,
+ GtkSourceLanguage *language);
+
+ /* Signals */
+ void (* language_activated) (TeplLanguageChooser *chooser,
+ GtkSourceLanguage *language);
+};
+
+_TEPL_EXTERN
+GType tepl_language_chooser_get_type (void);
+
+_TEPL_EXTERN
+void tepl_language_chooser_select_language (TeplLanguageChooser *chooser,
+ GtkSourceLanguage *language);
+
+G_END_DECLS
+
+#endif /* TEPL_LANGUAGE_CHOOSER_H */
diff --git a/tepl/tepl.h b/tepl/tepl.h
index b6368b1..b17e547 100644
--- a/tepl/tepl.h
+++ b/tepl/tepl.h
@@ -28,6 +28,7 @@
#include <tepl/tepl-init.h>
#include <tepl/tepl-io-error-info-bars.h>
#include <tepl/tepl-iter.h>
+#include <tepl/tepl-language-chooser.h>
#include <tepl/tepl-menu-shell.h>
#include <tepl/tepl-metadata.h>
#include <tepl/tepl-metadata-manager.h>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]