[tepl] LanguageChooserDialog: implement class
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] LanguageChooserDialog: implement class
- Date: Thu, 5 Nov 2020 22:44:58 +0000 (UTC)
commit 7dbf26d977e166c260508b114ec26bbb057360a1
Author: Sébastien Wilmet <swilmet gnome org>
Date: Thu Nov 5 13:51:07 2020 +0100
LanguageChooserDialog: implement class
docs/reference/tepl-docs.xml | 1 +
docs/reference/tepl-sections.txt | 16 ++++
po/POTFILES.in | 1 +
tepl/meson.build | 2 +
tepl/tepl-language-chooser-dialog.c | 156 +++++++++++++++++++++++++++++++++++
tepl/tepl-language-chooser-dialog.h | 50 +++++++++++
tepl/tepl.h | 1 +
tests/meson.build | 1 +
tests/test-language-chooser-dialog.c | 68 +++++++++++++++
9 files changed, 296 insertions(+)
---
diff --git a/docs/reference/tepl-docs.xml b/docs/reference/tepl-docs.xml
index bef4d0d..d4894ce 100644
--- a/docs/reference/tepl-docs.xml
+++ b/docs/reference/tepl-docs.xml
@@ -64,6 +64,7 @@
<chapter id="language-choosers">
<title>Language Choosers</title>
<xi:include href="xml/language-chooser.xml"/>
+ <xi:include href="xml/language-chooser-dialog.xml"/>
<xi:include href="xml/language-chooser-widget.xml"/>
</chapter>
diff --git a/docs/reference/tepl-sections.txt b/docs/reference/tepl-sections.txt
index 839a1ba..8e1ab80 100644
--- a/docs/reference/tepl-sections.txt
+++ b/docs/reference/tepl-sections.txt
@@ -275,6 +275,22 @@ TEPL_TYPE_LANGUAGE_CHOOSER
tepl_language_chooser_get_type
</SECTION>
+<SECTION>
+<FILE>language-chooser-dialog</FILE>
+TeplLanguageChooserDialog
+tepl_language_chooser_dialog_new
+<SUBSECTION Standard>
+TEPL_IS_LANGUAGE_CHOOSER_DIALOG
+TEPL_IS_LANGUAGE_CHOOSER_DIALOG_CLASS
+TEPL_LANGUAGE_CHOOSER_DIALOG
+TEPL_LANGUAGE_CHOOSER_DIALOG_CLASS
+TEPL_LANGUAGE_CHOOSER_DIALOG_GET_CLASS
+TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG
+TeplLanguageChooserDialogClass
+TeplLanguageChooserDialogPrivate
+tepl_language_chooser_dialog_get_type
+</SECTION>
+
<SECTION>
<FILE>language-chooser-widget</FILE>
TeplLanguageChooserWidget
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 1c4eb21..39b0270 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -15,6 +15,7 @@ tepl/tepl-init.c
tepl/tepl-io-error-info-bars.c
tepl/tepl-iter.c
tepl/tepl-language-chooser.c
+tepl/tepl-language-chooser-dialog.c
tepl/tepl-language-chooser-widget.c
tepl/tepl-menu-shell.c
tepl/tepl-metadata-attic.c
diff --git a/tepl/meson.build b/tepl/meson.build
index 39d5beb..3528a88 100644
--- a/tepl/meson.build
+++ b/tepl/meson.build
@@ -16,6 +16,7 @@ tepl_public_headers = [
'tepl-io-error-info-bars.h',
'tepl-iter.h',
'tepl-language-chooser.h',
+ 'tepl-language-chooser-dialog.h',
'tepl-language-chooser-widget.h',
'tepl-macros.h',
'tepl-menu-shell.h',
@@ -53,6 +54,7 @@ tepl_public_c_files = [
'tepl-io-error-info-bars.c',
'tepl-iter.c',
'tepl-language-chooser.c',
+ 'tepl-language-chooser-dialog.c',
'tepl-language-chooser-widget.c',
'tepl-menu-shell.c',
'tepl-metadata.c',
diff --git a/tepl/tepl-language-chooser-dialog.c b/tepl/tepl-language-chooser-dialog.c
new file mode 100644
index 0000000..61d71c8
--- /dev/null
+++ b/tepl/tepl-language-chooser-dialog.c
@@ -0,0 +1,156 @@
+/* SPDX-FileCopyrightText: 2020 - Sébastien Wilmet <swilmet gnome org>
+ * SPDX-License-Identifier: LGPL-3.0-or-later
+ */
+
+#include "config.h"
+#include "tepl-language-chooser-dialog.h"
+#include <glib/gi18n-lib.h>
+#include "tepl-language-chooser.h"
+#include "tepl-language-chooser-widget.h"
+
+/**
+ * SECTION:language-chooser-dialog
+ * @Title: TeplLanguageChooserDialog
+ * @Short_description: A dialog for choosing a #GtkSourceLanguage
+ */
+
+struct _TeplLanguageChooserDialogPrivate
+{
+ TeplLanguageChooserWidget *chooser_widget;
+};
+
+static void tepl_language_chooser_interface_init (gpointer g_iface,
+ gpointer iface_data);
+
+G_DEFINE_TYPE_WITH_CODE (TeplLanguageChooserDialog,
+ tepl_language_chooser_dialog,
+ GTK_TYPE_DIALOG,
+ G_ADD_PRIVATE (TeplLanguageChooserDialog)
+ G_IMPLEMENT_INTERFACE (TEPL_TYPE_LANGUAGE_CHOOSER,
+ tepl_language_chooser_interface_init))
+
+static void
+tepl_language_chooser_dialog_dispose (GObject *object)
+{
+ TeplLanguageChooserDialog *chooser_dialog = TEPL_LANGUAGE_CHOOSER_DIALOG (object);
+
+ chooser_dialog->priv->chooser_widget = NULL;
+
+ G_OBJECT_CLASS (tepl_language_chooser_dialog_parent_class)->dispose (object);
+}
+
+static void
+tepl_language_chooser_dialog_response (GtkDialog *dialog,
+ gint response_id)
+{
+ TeplLanguageChooserDialog *chooser_dialog = TEPL_LANGUAGE_CHOOSER_DIALOG (dialog);
+
+ if (response_id == GTK_RESPONSE_OK)
+ {
+ _tepl_language_chooser_widget_activate_selected_language
(chooser_dialog->priv->chooser_widget);
+ }
+
+ if (GTK_DIALOG_CLASS (tepl_language_chooser_dialog_parent_class)->response != NULL)
+ {
+ GTK_DIALOG_CLASS (tepl_language_chooser_dialog_parent_class)->response (dialog, response_id);
+ }
+}
+
+static void
+tepl_language_chooser_dialog_class_init (TeplLanguageChooserDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
+
+ object_class->dispose = tepl_language_chooser_dialog_dispose;
+
+ dialog_class->response = tepl_language_chooser_dialog_response;
+}
+
+static void
+tepl_language_chooser_dialog_select_language (TeplLanguageChooser *chooser,
+ GtkSourceLanguage *language)
+{
+ TeplLanguageChooserDialog *chooser_dialog = TEPL_LANGUAGE_CHOOSER_DIALOG (chooser);
+
+ tepl_language_chooser_select_language (TEPL_LANGUAGE_CHOOSER (chooser_dialog->priv->chooser_widget),
+ language);
+}
+
+static void
+tepl_language_chooser_interface_init (gpointer g_iface,
+ gpointer iface_data)
+{
+ TeplLanguageChooserInterface *interface = g_iface;
+
+ interface->select_language = tepl_language_chooser_dialog_select_language;
+}
+
+static void
+chooser_widget_language_activated_cb (TeplLanguageChooserWidget *chooser_widget,
+ GtkSourceLanguage *language,
+ TeplLanguageChooserDialog *chooser_dialog)
+{
+ if (language != NULL)
+ {
+ g_object_ref (language);
+ }
+
+ g_signal_emit_by_name (chooser_dialog, "language-activated", language);
+
+ if (language != NULL)
+ {
+ g_object_unref (language);
+ }
+}
+
+static void
+tepl_language_chooser_dialog_init (TeplLanguageChooserDialog *chooser_dialog)
+{
+ GtkBox *content_area;
+
+ chooser_dialog->priv = tepl_language_chooser_dialog_get_instance_private (chooser_dialog);
+
+ /* chooser_dialog config */
+ gtk_window_set_title (GTK_WINDOW (chooser_dialog), _("Highlight Mode"));
+ gtk_window_set_modal (GTK_WINDOW (chooser_dialog), TRUE);
+
+ /* Action area */
+ gtk_dialog_add_buttons (GTK_DIALOG (chooser_dialog),
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("_Select"), GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (chooser_dialog), GTK_RESPONSE_OK);
+
+ /* Content area: the TeplLanguageChooserWidget */
+ chooser_dialog->priv->chooser_widget = tepl_language_chooser_widget_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (chooser_dialog->priv->chooser_widget), 11);
+
+ g_signal_connect (chooser_dialog->priv->chooser_widget,
+ "language-activated",
+ G_CALLBACK (chooser_widget_language_activated_cb),
+ chooser_dialog);
+
+ content_area = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (chooser_dialog)));
+ gtk_container_add (GTK_CONTAINER (content_area),
+ GTK_WIDGET (chooser_dialog->priv->chooser_widget));
+ gtk_widget_show_all (GTK_WIDGET (content_area));
+}
+
+/**
+ * tepl_language_chooser_dialog_new:
+ * @parent: (nullable): transient parent of the dialog, or %NULL.
+ *
+ * Returns: a new #TeplLanguageChooserDialog widget.
+ * Since: 5.2
+ */
+TeplLanguageChooserDialog *
+tepl_language_chooser_dialog_new (GtkWindow *parent)
+{
+ g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), NULL);
+
+ return g_object_new (TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG,
+ "transient-for", parent,
+ "use-header-bar", TRUE,
+ NULL);
+}
diff --git a/tepl/tepl-language-chooser-dialog.h b/tepl/tepl-language-chooser-dialog.h
new file mode 100644
index 0000000..7dd0435
--- /dev/null
+++ b/tepl/tepl-language-chooser-dialog.h
@@ -0,0 +1,50 @@
+/* SPDX-FileCopyrightText: 2020 - Sébastien Wilmet <swilmet gnome org>
+ * SPDX-License-Identifier: LGPL-3.0-or-later
+ */
+
+#ifndef TEPL_LANGUAGE_CHOOSER_DIALOG_H
+#define TEPL_LANGUAGE_CHOOSER_DIALOG_H
+
+#if !defined (TEPL_H_INSIDE) && !defined (TEPL_COMPILATION)
+#error "Only <tepl/tepl.h> can be included directly."
+#endif
+
+#include <gtk/gtk.h>
+#include <tepl/tepl-macros.h>
+
+G_BEGIN_DECLS
+
+#define TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG (tepl_language_chooser_dialog_get_type ())
+#define TEPL_LANGUAGE_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG, TeplLanguageChooserDialog))
+#define TEPL_LANGUAGE_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG, TeplLanguageChooserDialogClass))
+#define TEPL_IS_LANGUAGE_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG))
+#define TEPL_IS_LANGUAGE_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG))
+#define TEPL_LANGUAGE_CHOOSER_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
TEPL_TYPE_LANGUAGE_CHOOSER_DIALOG, TeplLanguageChooserDialogClass))
+
+typedef struct _TeplLanguageChooserDialog TeplLanguageChooserDialog;
+typedef struct _TeplLanguageChooserDialogClass TeplLanguageChooserDialogClass;
+typedef struct _TeplLanguageChooserDialogPrivate TeplLanguageChooserDialogPrivate;
+
+struct _TeplLanguageChooserDialog
+{
+ GtkDialog parent;
+
+ TeplLanguageChooserDialogPrivate *priv;
+};
+
+struct _TeplLanguageChooserDialogClass
+{
+ GtkDialogClass parent_class;
+
+ gpointer padding[12];
+};
+
+_TEPL_EXTERN
+GType tepl_language_chooser_dialog_get_type (void);
+
+_TEPL_EXTERN
+TeplLanguageChooserDialog * tepl_language_chooser_dialog_new (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* TEPL_LANGUAGE_CHOOSER_DIALOG_H */
diff --git a/tepl/tepl.h b/tepl/tepl.h
index bb61d2b..d5cf1d3 100644
--- a/tepl/tepl.h
+++ b/tepl/tepl.h
@@ -28,6 +28,7 @@
#include <tepl/tepl-io-error-info-bars.h>
#include <tepl/tepl-iter.h>
#include <tepl/tepl-language-chooser.h>
+#include <tepl/tepl-language-chooser-dialog.h>
#include <tepl/tepl-language-chooser-widget.h>
#include <tepl/tepl-menu-shell.h>
#include <tepl/tepl-metadata.h>
diff --git a/tests/meson.build b/tests/meson.build
index 0220564..84fc4c1 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -1,6 +1,7 @@
interactive_tests = [
# executable name, sources
['test-fold-region', 'test-fold-region.c'],
+ ['test-language-chooser-dialog', 'test-language-chooser-dialog.c'],
['test-language-chooser-widget', 'test-language-chooser-widget.c'],
['test-space-drawer-prefs', 'test-space-drawer-prefs.c'],
['test-tab', 'test-tab.c'],
diff --git a/tests/test-language-chooser-dialog.c b/tests/test-language-chooser-dialog.c
new file mode 100644
index 0000000..dfe3aaa
--- /dev/null
+++ b/tests/test-language-chooser-dialog.c
@@ -0,0 +1,68 @@
+/* SPDX-FileCopyrightText: 2020 - Sébastien Wilmet <swilmet gnome org>
+ * SPDX-License-Identifier: LGPL-3.0-or-later
+ */
+
+#include <tepl/tepl.h>
+#include <stdlib.h>
+
+static void
+language_activated_cb (TeplLanguageChooser *chooser,
+ GtkSourceLanguage *language,
+ gpointer user_data)
+{
+ if (language != NULL)
+ {
+ g_message ("Language activated: %s", gtk_source_language_get_id (language));
+ }
+ else
+ {
+ g_message ("Plain Text activated.");
+ }
+}
+
+static void
+select_random_language (TeplLanguageChooserDialog *dialog)
+{
+ GtkSourceLanguageManager *manager;
+ GtkSourceLanguage *language;
+
+ manager = gtk_source_language_manager_get_default ();
+ // xml has been picked at random.
+ language = gtk_source_language_manager_get_language (manager, "xml");
+
+ tepl_language_chooser_select_language (TEPL_LANGUAGE_CHOOSER (dialog), language);
+}
+
+static void
+dialog_response_cb (GtkDialog *dialog,
+ gint response_id,
+ gpointer user_data)
+{
+ gtk_main_quit ();
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ TeplLanguageChooserDialog *dialog;
+
+ gtk_init (&argc, &argv);
+
+ dialog = tepl_language_chooser_dialog_new (NULL);
+ select_random_language (dialog);
+
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (dialog_response_cb),
+ NULL);
+
+ g_signal_connect (dialog,
+ "language-activated",
+ G_CALLBACK (language_activated_cb),
+ NULL);
+
+ gtk_widget_show (GTK_WIDGET (dialog));
+ gtk_main ();
+ return EXIT_SUCCESS;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]