[tepl] Add TeplLanguageChooser interface



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]