src/ui/gui/psppire-import-assistant.h \
src/ui/gui/builder-wrapper.c \
src/ui/gui/builder-wrapper.h \
- src/ui/gui/comments-dialog.c \
- src/ui/gui/comments-dialog.h \
src/ui/gui/dialog-common.c \
src/ui/gui/dialog-common.h \
src/ui/gui/dict-display.h \
src/ui/gui/psppire-dialog-action-chisquare.h \
src/ui/gui/psppire-dialog-action-compute.c \
src/ui/gui/psppire-dialog-action-compute.h \
+ src/ui/gui/psppire-dialog-action-comments.c \
+ src/ui/gui/psppire-dialog-action-comments.h \
src/ui/gui/psppire-dialog-action-count.c \
src/ui/gui/psppire-dialog-action-count.h \
src/ui/gui/psppire-dialog-action-correlation.c \
+++ /dev/null
-/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2007, 2010, 2011, 2012, 2013 Free Software Foundation
-
- 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/>. */
-
-#include <config.h>
-
-#include "psppire-dialog.h"
-#include "builder-wrapper.h"
-#include "psppire-data-window.h"
-#include "psppire-data-editor.h"
-#include "executor.h"
-#include "helper.h"
-#include <ui/syntax-gen.h>
-
-#include "comments-dialog.h"
-
-#include "dialog-common.h"
-
-#include <gtk/gtk.h>
-
-#include <gettext.h>
-
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-
-struct comment_dialog
-{
- GtkBuilder *xml;
- PsppireDict *dict;
-};
-
-static void refresh (PsppireDialog *dialog, const struct comment_dialog *);
-static char *generate_syntax (const struct comment_dialog *);
-
-static void
-set_column_number (GtkTextBuffer *textbuffer,
- GtkTextIter *iter,
- GtkTextMark *mark,
- gpointer data)
-{
- GtkLabel *label = data;
- gchar *text ;
-
- text = g_strdup_printf ( _("Column Number: %d"),
- 1 + gtk_text_iter_get_line_offset (iter));
-
- gtk_label_set_text (label, text);
-
- g_free (text);
-}
-
-static void
-wrap_line (GtkTextBuffer *buffer,
- GtkTextIter *iter,
- gchar *text,
- gint count,
- gpointer data)
-{
- gint chars = gtk_text_iter_get_chars_in_line (iter);
-
- if ( chars > DOC_LINE_LENGTH )
- {
- GtkTextIter line_fold = *iter;
-
- gtk_text_iter_set_line_offset (&line_fold, DOC_LINE_LENGTH);
-
- gtk_text_buffer_insert (buffer, &line_fold, "\r\n", 2);
- }
-
-}
-
-
-void
-comments_dialog (PsppireDataWindow *de)
-{
- GtkTextIter iter;
- gint response ;
- struct comment_dialog cd;
-
- GtkBuilder *xml = builder_new ("comments.ui");
-
- GtkWidget *dialog = get_widget_assert (xml, "comments-dialog");
- GtkWidget *textview = get_widget_assert (xml, "comments-textview1");
- GtkWidget *label = get_widget_assert (xml, "column-number-label");
- GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
-
-
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de));
-
- {
- PangoContext * context ;
- PangoLayout * layout ;
- PangoRectangle rect;
-
- /* Since we're going to truncate lines to 80 chars,
- we need a monospaced font otherwise it'll look silly */
- PangoFontDescription *font_desc =
- pango_font_description_from_string ("monospace");
-
- gtk_widget_override_font (textview, font_desc);
-
- /* and let's just make sure that a complete line fits into the
- widget's width */
- context = gtk_widget_create_pango_context (textview);
- layout = pango_layout_new (context);
-
- pango_layout_set_text (layout, "M", 1);
-
- pango_layout_set_font_description (layout, font_desc);
-
- pango_layout_get_extents (layout, NULL, &rect);
-
- g_object_set (textview, "width-request",
- PANGO_PIXELS (rect.width) * DOC_LINE_LENGTH + 20, NULL);
-
- g_object_unref (G_OBJECT (layout));
- g_object_unref (G_OBJECT (context));
-
- pango_font_description_free (font_desc);
- }
-
- cd.xml = xml;
- g_object_get (de->data_editor, "dictionary", &cd.dict, NULL);
-
- g_signal_connect (buffer, "mark-set",
- G_CALLBACK (set_column_number), label);
-
- g_signal_connect_after (buffer, "insert-text",
- G_CALLBACK (wrap_line), NULL);
-
- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
- gtk_text_buffer_place_cursor (buffer, &iter);
-
-
- g_signal_connect (dialog, "refresh", G_CALLBACK (refresh), &cd);
-
-
- response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));
-
- switch (response)
- {
- case GTK_RESPONSE_OK:
- g_free (execute_syntax_string (de, generate_syntax (&cd)));
- break;
- case PSPPIRE_RESPONSE_PASTE:
- g_free (paste_syntax_to_window (generate_syntax (&cd)));
- break;
- default:
- break;
- }
-
-
- g_object_unref (xml);
-}
-
-
-static void
-add_line_to_buffer (GtkTextBuffer *buffer, const char *line)
-{
- gtk_text_buffer_insert_at_cursor (buffer, line, -1);
-
- gtk_text_buffer_insert_at_cursor (buffer, "\n", 1);
-}
-
-static void
-refresh (PsppireDialog *dialog, const struct comment_dialog *cd)
-{
- gint i;
- GtkWidget *tv = get_widget_assert (cd->xml, "comments-textview1");
- GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
-
- gtk_text_buffer_set_text (buffer, "", 0);
-
- for ( i = 0 ; i < dict_get_document_line_cnt (cd->dict->dict); ++i )
- add_line_to_buffer (buffer, dict_get_document_line (cd->dict->dict, i));
-}
-
-
-
-static char *
-generate_syntax (const struct comment_dialog *cd)
-{
- gint i;
-
- GString *str;
- gchar *text;
- GtkWidget *tv = get_widget_assert (cd->xml, "comments-textview1");
- GtkWidget *check = get_widget_assert (cd->xml, "comments-checkbutton1");
- GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
-
- str = g_string_new ("\n* Data File Comments.\n\n");
-
- if (dict_get_documents (cd->dict->dict) != NULL)
- g_string_append (str, "DROP DOCUMENTS.\n");
-
- g_string_append (str, "ADD DOCUMENT\n");
-
- for (i = 0 ; i < gtk_text_buffer_get_line_count (buffer) ; ++i )
- {
- struct string tmp;
- GtkTextIter start;
- char *line;
-
- gtk_text_buffer_get_iter_at_line (buffer, &start, i);
- if (gtk_text_iter_ends_line (&start))
- line = g_strdup ("");
- else
- {
- GtkTextIter end = start;
- gtk_text_iter_forward_to_line_end (&end);
- line = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
- }
-
- ds_init_empty (&tmp);
- syntax_gen_string (&tmp, ss_cstr (line));
- g_free (line);
-
- g_string_append_printf (str, " %s\n", ds_cstr (&tmp));
-
- ds_destroy (&tmp);
- }
- g_string_append (str, " .\n");
-
-
-
- if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)))
- g_string_append (str, "DISPLAY DOCUMENTS.\n");
-
- text = str->str;
-
- g_string_free (str, FALSE);
-
- return text;
-}
+++ /dev/null
-/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2007 Free Software Foundation, Inc.
-
- 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/>. */
-
-
-#ifndef COMMENTS_DIALOG_H
-#define COMMENTS_DIALOG_H
-
-#include "psppire-data-window.h"
-
-void comments_dialog (PsppireDataWindow * data);
-
-#endif /* COMMENTS_DIALOG_H */
</object>
</child>
<child>
- <object class="GtkAction" id="utilities_comments">
+ <object class="PsppireDialogActionComments" id="utilities_comments">
+ <property name="manager">uimanager1</property>
<property name="name">utilities_comments</property>
<property name="label" translatable="yes">Data File _Comments...</property>
<property name="stock-id">utilities-data-file-comments</property>
#include "libpspp/message.h"
#include "libpspp/str.h"
#include "ui/gui/builder-wrapper.h"
-#include "ui/gui/comments-dialog.h"
#include "ui/gui/entry-dialog.h"
#include "ui/gui/executor.h"
#include "ui/gui/help-menu.h"
connect_action (de, "data_select-cases", G_CALLBACK (select_cases_dialog));
connect_action (de, "data_split-file", G_CALLBACK (split_file_dialog));
- connect_action (de, "utilities_comments", G_CALLBACK (comments_dialog));
connect_action (de, "transform_recode-same", G_CALLBACK (recode_same_dialog));
connect_action (de, "transform_recode-different", G_CALLBACK (recode_different_dialog));
--- /dev/null
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2007, 2010, 2011, 2012, 2013, 2015 Free Software Foundation
+
+ 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/>. */
+
+
+#include <config.h>
+
+#include "psppire-dialog-action-comments.h"
+#include "psppire-selector.h"
+#include "psppire-var-view.h"
+#include "dict-display.h"
+
+#include "psppire-dialog.h"
+#include "builder-wrapper.h"
+#include <ui/syntax-gen.h>
+
+#include <gettext.h>
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
+static void psppire_dialog_action_comments_init (PsppireDialogActionComments *act);
+static void psppire_dialog_action_comments_class_init (PsppireDialogActionCommentsClass *class);
+
+G_DEFINE_TYPE (PsppireDialogActionComments, psppire_dialog_action_comments, PSPPIRE_TYPE_DIALOG_ACTION);
+
+static char *
+generate_syntax (PsppireDialogAction *pda)
+{
+ PsppireDialogActionComments *cd = PSPPIRE_DIALOG_ACTION_COMMENTS (pda);
+ gint i;
+
+ GString *str;
+ gchar *text;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (cd->textview));
+
+ str = g_string_new ("\n* Data File Comments.\n\n");
+
+ if (dict_get_documents (pda->dict->dict) != NULL)
+ g_string_append (str, "DROP DOCUMENTS.\n");
+
+ g_string_append (str, "ADD DOCUMENT\n");
+
+ for (i = 0 ; i < gtk_text_buffer_get_line_count (buffer) ; ++i )
+ {
+ struct string tmp;
+ GtkTextIter start;
+ char *line;
+
+ gtk_text_buffer_get_iter_at_line (buffer, &start, i);
+ if (gtk_text_iter_ends_line (&start))
+ line = g_strdup ("");
+ else
+ {
+ GtkTextIter end = start;
+ gtk_text_iter_forward_to_line_end (&end);
+ line = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ }
+
+ ds_init_empty (&tmp);
+ syntax_gen_string (&tmp, ss_cstr (line));
+ g_free (line);
+
+ g_string_append_printf (str, " %s\n", ds_cstr (&tmp));
+
+ ds_destroy (&tmp);
+ }
+ g_string_append (str, " .\n");
+
+
+ if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->check)))
+ g_string_append (str, "DISPLAY DOCUMENTS.\n");
+
+ text = str->str;
+
+ g_string_free (str, FALSE);
+
+ return text;
+}
+
+
+static gboolean
+dialog_state_valid (gpointer data)
+{
+ return TRUE;
+}
+
+static void
+add_line_to_buffer (GtkTextBuffer *buffer, const char *line)
+{
+ gtk_text_buffer_insert_at_cursor (buffer, line, -1);
+
+ gtk_text_buffer_insert_at_cursor (buffer, "\n", 1);
+}
+
+static void
+retrieve_comments (PsppireDialogAction *pda)
+{
+ PsppireDialogActionComments *wcd = PSPPIRE_DIALOG_ACTION_COMMENTS (pda);
+ gint i;
+
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (wcd->textview));
+
+ gtk_text_buffer_set_text (buffer, "", 0);
+
+ for ( i = 0 ; i < dict_get_document_line_cnt (pda->dict->dict); ++i )
+ add_line_to_buffer (buffer, dict_get_document_line (pda->dict->dict, i));
+}
+
+
+static void
+refresh (PsppireDialogAction *pda)
+{
+ PsppireDialogActionComments *act = PSPPIRE_DIALOG_ACTION_COMMENTS (pda);
+
+ retrieve_comments (pda);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (act->check), FALSE);
+}
+
+
+static void
+set_column_number (GtkTextBuffer *textbuffer,
+ GtkTextIter *iter,
+ GtkTextMark *mark,
+ gpointer data)
+{
+ GtkLabel *label = data;
+ gchar *text ;
+
+ text = g_strdup_printf ( _("Column Number: %d"),
+ 1 + gtk_text_iter_get_line_offset (iter));
+
+ gtk_label_set_text (label, text);
+
+ g_free (text);
+}
+
+static void
+wrap_line (GtkTextBuffer *buffer,
+ GtkTextIter *iter,
+ gchar *text,
+ gint count,
+ gpointer data)
+{
+ gint chars = gtk_text_iter_get_chars_in_line (iter);
+
+ if ( chars > DOC_LINE_LENGTH )
+ {
+ GtkTextIter line_fold = *iter;
+
+ gtk_text_iter_set_line_offset (&line_fold, DOC_LINE_LENGTH);
+
+ gtk_text_buffer_insert (buffer, &line_fold, "\r\n", 2);
+ }
+}
+
+
+static void
+psppire_dialog_action_comments_activate (PsppireDialogAction *pda)
+{
+ PsppireDialogActionComments *act = PSPPIRE_DIALOG_ACTION_COMMENTS (pda);
+
+ GHashTable *thing = psppire_dialog_action_get_hash_table (pda);
+ GtkBuilder *xml = g_hash_table_lookup (thing, pda);
+ if (!xml)
+ {
+ GtkTextIter iter;
+
+ xml = builder_new ("comments.ui");
+ g_hash_table_insert (thing, pda, xml);
+
+ pda->dialog = get_widget_assert (xml, "comments-dialog");
+ act->textview = get_widget_assert (xml, "comments-textview1");
+ GtkWidget *label = get_widget_assert (xml, "column-number-label");
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (act->textview));
+ act->check = get_widget_assert (xml, "comments-checkbutton1");
+
+ g_signal_connect_swapped (pda->dialog, "show", G_CALLBACK (retrieve_comments), pda);
+
+ {
+ PangoContext * context ;
+ PangoLayout * layout ;
+ PangoRectangle rect;
+
+ /* Since we're going to truncate lines to 80 chars,
+ we need a monospaced font otherwise it'll look silly */
+ PangoFontDescription *font_desc =
+ pango_font_description_from_string ("monospace");
+
+ gtk_widget_override_font (act->textview, font_desc);
+
+ /* and let's just make sure that a complete line fits into the
+ widget's width */
+ context = gtk_widget_create_pango_context (act->textview);
+ layout = pango_layout_new (context);
+
+ pango_layout_set_text (layout, "M", 1);
+
+ pango_layout_set_font_description (layout, font_desc);
+
+ pango_layout_get_extents (layout, NULL, &rect);
+
+ g_object_set (act->textview, "width-request",
+ PANGO_PIXELS (rect.width) * DOC_LINE_LENGTH + 20, NULL);
+
+ g_object_unref (G_OBJECT (layout));
+ g_object_unref (G_OBJECT (context));
+
+ pango_font_description_free (font_desc);
+ }
+
+ g_signal_connect (buffer, "mark-set",
+ G_CALLBACK (set_column_number), label);
+
+ g_signal_connect_after (buffer, "insert-text",
+ G_CALLBACK (wrap_line), NULL);
+
+ gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
+ gtk_text_buffer_place_cursor (buffer, &iter);
+ }
+
+ psppire_dialog_action_set_valid_predicate (pda, dialog_state_valid);
+ psppire_dialog_action_set_refresh (pda, refresh);
+
+
+
+ if (PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_comments_parent_class)->activate)
+ PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_comments_parent_class)->activate (pda);
+}
+
+static void
+psppire_dialog_action_comments_class_init (PsppireDialogActionCommentsClass *class)
+{
+ psppire_dialog_action_set_activation (class, psppire_dialog_action_comments_activate);
+ PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax;
+}
+
+static void
+psppire_dialog_action_comments_init (PsppireDialogActionComments *act)
+{
+}
+
--- /dev/null
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2015 Free Software Foundation
+
+ 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/>. */
+
+
+#include <glib-object.h>
+#include <glib.h>
+
+#include "psppire-dialog-action.h"
+
+#ifndef __PSPPIRE_DIALOG_ACTION_COMMENTS_H__
+#define __PSPPIRE_DIALOG_ACTION_COMMENTS_H__
+
+G_BEGIN_DECLS
+
+
+#define PSPPIRE_TYPE_DIALOG_ACTION_COMMENTS (psppire_dialog_action_comments_get_type ())
+
+#define PSPPIRE_DIALOG_ACTION_COMMENTS(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ PSPPIRE_TYPE_DIALOG_ACTION_COMMENTS, PsppireDialogActionComments))
+
+#define PSPPIRE_DIALOG_ACTION_COMMENTS_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ PSPPIRE_TYPE_DIALOG_ACTION_COMMENTS, \
+ PsppireDialogActionCommentsClass))
+
+
+#define PSPPIRE_IS_DIALOG_ACTION_COMMENTS(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PSPPIRE_TYPE_DIALOG_ACTION_COMMENTS))
+
+#define PSPPIRE_IS_DIALOG_ACTION_COMMENTS_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), PSPPIRE_TYPE_DIALOG_ACTION_COMMENTS))
+
+
+#define PSPPIRE_DIALOG_ACTION_COMMENTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ PSPPIRE_TYPE_DIALOG_ACTION_COMMENTS, \
+ PsppireDialogActionCommentsClass))
+
+typedef struct _PsppireDialogActionComments PsppireDialogActionComments;
+typedef struct _PsppireDialogActionCommentsClass PsppireDialogActionCommentsClass;
+
+
+struct _PsppireDialogActionComments
+{
+ PsppireDialogAction parent;
+
+ GtkWidget *textview;
+ GtkWidget *check;
+};
+
+
+struct _PsppireDialogActionCommentsClass
+{
+ PsppireDialogActionClass parent_class;
+};
+
+
+GType psppire_dialog_action_comments_get_type (void) ;
+
+G_END_DECLS
+
+#endif /* __PSPPIRE_DIALOG_ACTION_COMMENTS_H__ */
set_toplevel (act);
act->dict = PSPPIRE_DATA_WINDOW(act->toplevel)->dict;
-
- g_object_set (act->source, "model", act->dict, NULL);
+ if (act->source)
+ g_object_set (act->source, "model", act->dict, NULL);
GSList *wl = g_object_get_data (G_OBJECT (act->toplevel), "widget-list");
wl = g_slist_prepend (wl, act->dialog);
if (GTK_ACTION_CLASS (psppire_dialog_action_parent_class)->activate)
GTK_ACTION_CLASS (psppire_dialog_action_parent_class)->activate ( GTK_ACTION (act));
- gtk_widget_grab_focus (act->source);
+ if (act->source)
+ gtk_widget_grab_focus (act->source);
if (first_time)
psppire_dialog_reload (PSPPIRE_DIALOG (act->dialog));
#include "psppire-dialog-action-binomial.h"
#include "psppire-dialog-action-chisquare.h"
#include "psppire-dialog-action-compute.h"
+#include "psppire-dialog-action-comments.h"
#include "psppire-dialog-action-correlation.h"
#include "psppire-dialog-action-count.h"
#include "psppire-dialog-action-crosstabs.h"
psppire_dialog_action_binomial_get_type ();
psppire_dialog_action_barchart_get_type ();
psppire_dialog_action_chisquare_get_type ();
+ psppire_dialog_action_comments_get_type ();
psppire_dialog_action_compute_get_type ();
psppire_dialog_action_correlation_get_type ();
psppire_dialog_action_count_get_type ();