3 Copyright (C) 2000 Naba Kumar <gnome.org>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 #include <gdk/gdkkeysyms.h>
29 #include <libanjuta/anjuta-utils.h>
30 #include <libanjuta/anjuta-debug.h>
32 #include "text_editor.h"
33 #include "style-editor.h"
35 #define string_assign(dest, src) g_free ((*dest)); (*dest) = g_strdup ((src));
36 #define GLADE_FILE PACKAGE_DATA_DIR"/glade/anjuta-editor-scintilla.ui"
38 gchar
*hilite_style
[] = {
39 "Normal <Default>", "style.anjuta.normal",
40 "White space", "style.anjuta.whitespace",
41 "Comments", "style.anjuta.comment",
42 "Numbers", "style.anjuta.number",
43 "Operators","style.anjuta.operator",
44 "Keywords", "style.anjuta.keyword",
45 "System Keywords", "style.anjuta.syskeyword",
46 "Local Keywords", "style.anjuta.localkeyword",
47 "Additional Keywords", "style.anjuta.extrakeyword",
48 "Characters", "style.anjuta.char",
49 "Strings", "style.anjuta.string",
50 "Raw Strings", "style.anjuta.raws",
51 "Regular Expression", "style.anjuta.regex",
52 "Unclosed Strings", "style.anjuta.unclosed",
53 "Preprocessor Directives", "style.anjuta.preprocessor",
54 "Errors", "style.anjuta.error",
55 "Identifiers (Not C Style)", "style.anjuta.identifier",
56 "Definitions (Not C Style)", "style.anjuta.definition",
57 "Functions (Not C Style)", "style.anjuta.function",
58 "Attribute (Not C Style)", "style.anjuta.attribute",
59 "Matched Braces", "style.anjuta.matchbrace",
60 "Incomplete Brace", "style.anjuta.singlebrace",
61 "Control Characters", "style.anjuta.controlchar",
62 "Line Numbers", "style.anjuta.linenumber",
63 "Indentation Guides", "style.anjuta.indentguide",
67 typedef struct _StyleData StyleData
;
74 gboolean bold
, italics
, underlined
;
78 gboolean font_use_default
;
79 gboolean attrib_use_default
;
80 gboolean fore_use_default
;
81 gboolean back_use_default
;
84 struct _StyleEditorPriv
88 GtkWidget
*hilite_item_combobox
;
89 GtkWidget
*font_picker
;
90 GtkWidget
*font_bold_check
;
91 GtkWidget
*font_italics_check
;
92 GtkWidget
*font_underlined_check
;
93 GtkWidget
*fore_colorpicker
;
94 GtkWidget
*back_colorpicker
;
95 GtkWidget
*font_use_default_check
;
96 GtkWidget
*font_attrib_use_default_check
;
97 GtkWidget
*fore_color_use_default_check
;
98 GtkWidget
*back_color_use_default_check
;
99 GtkWidget
*caret_fore_color
;
100 GtkWidget
*selection_fore_color
;
101 GtkWidget
*selection_back_color
;
102 GtkWidget
*calltip_back_color
;
105 StyleData
*default_style
;
106 StyleData
*current_style
;
110 style_data_get_string (StyleData
* sdata
)
114 g_return_val_if_fail (sdata
!= NULL
, NULL
);
117 if ((sdata
->font
) && strlen (sdata
->font
) && sdata
->font_use_default
== FALSE
)
119 str
= g_strconcat ("font:", sdata
->font
, NULL
);
121 if (sdata
->size
> 0 && sdata
->font_use_default
== FALSE
)
127 g_strdup_printf ("%s,size:%d", tmp
,
132 str
= g_strdup_printf ("size:%d", sdata
->size
);
135 if (sdata
->attrib_use_default
== FALSE
)
142 str
= g_strconcat (tmp
, ",bold", NULL
);
146 str
= g_strdup ("bold");
153 str
= g_strconcat (tmp
, ",notbold", NULL
);
157 str
= g_strdup ("notbold");
164 str
= g_strconcat (tmp
, ",italics", NULL
);
168 str
= g_strdup ("italics");
175 str
= g_strconcat (tmp
, ",notitalics", NULL
);
179 str
= g_strdup ("notitalics");
181 if (sdata
->underlined
)
186 str
= g_strconcat (tmp
, ",underlined", NULL
);
190 str
= g_strdup ("underlined");
198 g_strconcat (tmp
, ",notunderlined",
203 str
= g_strdup ("notunderlined");
205 if (sdata
->eolfilled
)
210 str
= g_strconcat (tmp
, ",eolfilled", NULL
);
214 str
= g_strdup ("eolfilled");
222 g_strconcat (tmp
, ",noteolfilled",
227 str
= g_strdup ("noteolfilled");
230 if (sdata
->fore_use_default
== FALSE
)
235 str
= g_strconcat (tmp
, ",fore:", sdata
->fore
, NULL
);
239 str
= g_strconcat ("fore:", sdata
->fore
, NULL
);
241 if (sdata
->back_use_default
== FALSE
)
246 str
= g_strconcat (tmp
, ",back:", sdata
->back
, NULL
);
250 str
= g_strconcat ("back:", sdata
->back
, NULL
);
258 style_data_set_font (StyleData
* sdata
, const gchar
*font
)
260 PangoFontDescription
*desc
;
261 const gchar
*font_family
;
263 g_return_if_fail (sdata
);
265 desc
= pango_font_description_from_string (font
);
266 font_family
= pango_font_description_get_family(desc
);
267 string_assign (&sdata
->font
, font_family
);
269 /* Change to lower case */
272 gchar
*s
= sdata
->font
;
279 pango_font_description_free (desc
);
283 style_data_set_font_size_from_pango (StyleData
* sdata
, const gchar
*font
)
285 PangoFontDescription
*desc
;
287 g_return_if_fail (sdata
);
289 desc
= pango_font_description_from_string (font
);
290 sdata
->size
= pango_font_description_get_size (desc
) / PANGO_SCALE
;
291 pango_font_description_free (desc
);
295 style_data_set_fore (StyleData
* sdata
, const gchar
*fore
)
297 g_return_if_fail (sdata
);
298 string_assign (&sdata
->fore
, fore
);
302 style_data_set_back (StyleData
* sdata
, const gchar
*back
)
304 g_return_if_fail (sdata
);
305 string_assign (&sdata
->back
, back
);
309 style_data_set_item (StyleData
* sdata
, const gchar
*item
)
311 g_return_if_fail (sdata
);
312 string_assign (&sdata
->item
, item
);
316 style_data_new (void)
319 sdata
= g_new0 (StyleData
, 1);
321 sdata
->font
= g_strdup ("");
323 sdata
->font_use_default
= TRUE
;
324 sdata
->attrib_use_default
= TRUE
;
325 sdata
->fore_use_default
= TRUE
;
326 sdata
->back_use_default
= TRUE
;
327 style_data_set_fore (sdata
, "#000000"); /* Black */
328 style_data_set_back (sdata
, "#FFFFFF"); /* White */
333 style_data_destroy (StyleData
* sdata
)
338 g_free (sdata
->item
);
340 g_free (sdata
->font
);
342 g_free (sdata
->fore
);
344 g_free (sdata
->back
);
349 style_data_new_parse (gchar
* style_string
)
352 StyleData
*style_data
;
354 style_data
= style_data_new ();
358 val
= (style_string
!= NULL
)? g_strdup (style_string
) : NULL
;
362 gchar
*cpComma
, *colon
;
364 cpComma
= strchr (opt
, ',');
367 colon
= strchr (opt
, ':');
370 if (0 == strcmp (opt
, "italics"))
372 style_data
->italics
= TRUE
;
373 style_data
->attrib_use_default
= FALSE
;
375 if (0 == strcmp (opt
, "notitalics"))
377 style_data
->italics
= FALSE
;
378 style_data
->attrib_use_default
= FALSE
;
380 if (0 == strcmp (opt
, "bold"))
382 style_data
->bold
= TRUE
;
383 style_data
->attrib_use_default
= FALSE
;
385 if (0 == strcmp (opt
, "notbold"))
387 style_data
->bold
= FALSE
;
388 style_data
->attrib_use_default
= FALSE
;
390 if (0 == strcmp (opt
, "font"))
392 style_data_set_font (style_data
, colon
);
393 style_data
->font_use_default
= FALSE
;
395 if (0 == strcmp (opt
, "fore"))
397 style_data_set_fore (style_data
, colon
);
398 style_data
->fore_use_default
= FALSE
;
400 if (0 == strcmp (opt
, "back"))
402 style_data_set_back (style_data
, colon
);
403 style_data
->back_use_default
= FALSE
;
405 if (0 == strcmp (opt
, "size"))
407 style_data
->size
= atoi (colon
);
408 style_data
->font_use_default
= FALSE
;
410 if (0 == strcmp (opt
, "eolfilled"))
411 style_data
->eolfilled
= TRUE
;
412 if (0 == strcmp (opt
, "noteolfilled"))
413 style_data
->eolfilled
= FALSE
;
414 if (0 == strcmp (opt
, "underlined"))
416 style_data
->underlined
= TRUE
;
417 style_data
->attrib_use_default
= FALSE
;
419 if (0 == strcmp (opt
, "notunderlined"))
421 style_data
->underlined
= FALSE
;
422 style_data
->fore_use_default
= FALSE
;
435 on_use_default_font_toggled (GtkToggleButton
* tb
, gpointer data
)
441 g_return_if_fail (data
);
444 gtk_widget_set_sensitive (p
->priv
->font_picker
, TRUE
);
445 state
= gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tb
));
448 font_name
= g_strdup_printf ("%s %d",
449 p
->priv
->default_style
->font
,
450 p
->priv
->default_style
->size
);
454 if (p
->priv
->current_style
->font
&&
455 strlen (p
->priv
->current_style
->font
))
457 font_name
= g_strdup_printf ("%s %d",
458 p
->priv
->current_style
->font
,
459 p
->priv
->current_style
->size
);
463 font_name
= g_strdup_printf ("%s %d",
464 p
->priv
->default_style
->font
,
465 p
->priv
->default_style
->size
);
468 gtk_widget_set_sensitive (p
->priv
->font_picker
, !state
);
469 gtk_font_button_set_font_name (GTK_FONT_BUTTON (p
->priv
->font_picker
),
475 on_use_default_attrib_toggled (GtkToggleButton
* tb
, gpointer data
)
479 g_return_if_fail (data
);
481 gtk_widget_set_sensitive (p
->priv
->font_bold_check
, TRUE
);
482 gtk_widget_set_sensitive (p
->priv
->font_italics_check
, TRUE
);
483 gtk_widget_set_sensitive (p
->priv
->font_underlined_check
, TRUE
);
484 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tb
)))
486 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
487 (p
->priv
->font_bold_check
),
488 p
->priv
->default_style
->bold
);
489 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
490 (p
->priv
->font_italics_check
),
491 p
->priv
->default_style
->italics
);
492 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
494 font_underlined_check
),
495 p
->priv
->default_style
->underlined
);
496 gtk_widget_set_sensitive (p
->priv
->font_bold_check
, FALSE
);
497 gtk_widget_set_sensitive (p
->priv
->font_italics_check
,
499 gtk_widget_set_sensitive (p
->priv
->font_underlined_check
,
504 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
505 (p
->priv
->font_bold_check
),
506 p
->priv
->current_style
->bold
);
507 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
508 (p
->priv
->font_italics_check
),
509 p
->priv
->current_style
->italics
);
510 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
512 font_underlined_check
),
513 p
->priv
->current_style
->underlined
);
518 on_use_default_fore_toggled (GtkToggleButton
* tb
, gpointer data
)
523 g_return_if_fail (data
);
526 gtk_widget_set_sensitive (p
->priv
->fore_colorpicker
, TRUE
);
527 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tb
)))
529 gdk_color_parse (p
->priv
->default_style
->fore
, &color
);
530 gtk_color_button_set_color (GTK_COLOR_BUTTON (p
->priv
->fore_colorpicker
),
532 gtk_widget_set_sensitive (p
->priv
->fore_colorpicker
, FALSE
);
536 gdk_color_parse (p
->priv
->current_style
->fore
, &color
);
537 gtk_color_button_set_color (GTK_COLOR_BUTTON (p
->priv
->fore_colorpicker
),
543 on_use_default_back_toggled (GtkToggleButton
* tb
, gpointer data
)
548 g_return_if_fail (data
);
550 gtk_widget_set_sensitive (p
->priv
->back_colorpicker
, TRUE
);
551 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tb
)))
553 gdk_color_parse (p
->priv
->current_style
->back
, &color
);
554 gtk_color_button_set_color (GTK_COLOR_BUTTON (p
->priv
->back_colorpicker
),
556 gtk_widget_set_sensitive (p
->priv
->back_colorpicker
, FALSE
);
560 gdk_color_parse (p
->priv
->default_style
->back
, &color
);
561 gtk_color_button_set_color (GTK_COLOR_BUTTON (p
->priv
->back_colorpicker
),
567 on_hilite_style_entry_changed (GtkComboBox
* combobox
, gpointer user_data
)
570 const gchar
*style_item
;
572 g_return_if_fail (user_data
);
575 style_item
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combobox
));
576 if (!style_item
|| strlen (style_item
) <= 0)
578 if (p
->priv
->current_style
)
584 font
= gtk_font_button_get_font_name (GTK_FONT_BUTTON
585 (p
->priv
->font_picker
));
588 style_data_set_font (p
->priv
->current_style
, font
);
589 style_data_set_font_size_from_pango (p
->priv
->current_style
, font
);
593 style_data_set_font (p
->priv
->current_style
,
594 p
->priv
->default_style
->font
);
595 p
->priv
->current_style
->size
= p
->priv
->default_style
->size
;
598 p
->priv
->current_style
->bold
=
599 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
600 (p
->priv
->font_bold_check
));
601 p
->priv
->current_style
->italics
=
602 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
603 (p
->priv
->font_italics_check
));
604 p
->priv
->current_style
->underlined
=
605 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
606 (p
->priv
->font_underlined_check
));
607 p
->priv
->current_style
->eolfilled
=
608 (strcmp (style_item
, hilite_style
[1]) == 0);
610 gtk_color_button_get_color (GTK_COLOR_BUTTON (p
->priv
->fore_colorpicker
),
612 str
= anjuta_util_string_from_color (color
.red
,
615 style_data_set_fore (p
->priv
->current_style
, str
);
618 gtk_color_button_get_color (GTK_COLOR_BUTTON (p
->priv
->back_colorpicker
),
620 str
= anjuta_util_string_from_color (color
.red
,
623 style_data_set_back (p
->priv
->current_style
, str
);
626 p
->priv
->current_style
->font_use_default
=
627 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
628 (p
->priv
->font_use_default_check
));
629 p
->priv
->current_style
->attrib_use_default
=
630 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
631 (p
->priv
->font_attrib_use_default_check
));
632 p
->priv
->current_style
->fore_use_default
=
633 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
634 (p
->priv
->fore_color_use_default_check
));
635 p
->priv
->current_style
->back_use_default
=
636 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
637 (p
->priv
->back_color_use_default_check
));
639 p
->priv
->current_style
=
640 g_object_get_data (G_OBJECT (p
->priv
->dialog
),
643 g_return_if_fail (p
->priv
->current_style
);
645 /* We need to first toggle then set active to work properly */
646 gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON
647 (p
->priv
->font_use_default_check
));
648 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
649 (p
->priv
->font_use_default_check
),
650 p
->priv
->current_style
->font_use_default
);
652 gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON
653 (p
->priv
->font_attrib_use_default_check
));
654 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
655 (p
->priv
->font_attrib_use_default_check
),
656 p
->priv
->current_style
->attrib_use_default
);
658 gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON
659 (p
->priv
->fore_color_use_default_check
));
660 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
661 (p
->priv
->fore_color_use_default_check
),
662 p
->priv
->current_style
->fore_use_default
);
664 gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON
665 (p
->priv
->back_color_use_default_check
));
666 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
667 (p
->priv
->back_color_use_default_check
),
668 p
->priv
->current_style
->back_use_default
);
672 sync_from_props (StyleEditor
*se
)
677 g_return_if_fail (se
);
678 /* Never hurts to use g_object_*_data as temp hash buffer */
683 if (hilite_style
[i
] == NULL
)
685 str
= sci_prop_get_expanded (se
->props
, hilite_style
[i
+ 1]);
686 sdata
= style_data_new_parse (str
);
687 /* DEBUG_PRINT ("Parsing %s => %s", hilite_style[i + 1], str); */
691 style_data_set_item (sdata
, hilite_style
[i
]);
692 g_object_set_data_full (G_OBJECT (se
->priv
->dialog
),
693 hilite_style
[i
], sdata
,
694 (GDestroyNotify
)style_data_destroy
);
696 se
->priv
->default_style
=
697 g_object_get_data (G_OBJECT (se
->priv
->dialog
),
699 se
->priv
->current_style
= NULL
;
701 on_hilite_style_entry_changed (GTK_COMBO_BOX (se
->priv
->hilite_item_combobox
), se
);
703 str
= sci_prop_get (se
->props
, CARET_FORE_COLOR
);
708 gdk_color_parse (str
, &color
);
709 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->caret_fore_color
),
717 gdk_color_parse ("#000000", &color
);
718 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->caret_fore_color
),
722 str
= sci_prop_get (se
->props
, CALLTIP_BACK_COLOR
);
727 gdk_color_parse (str
, &color
);
728 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->calltip_back_color
),
736 gdk_color_parse ("#E6D6B6", &color
);
737 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->calltip_back_color
),
741 str
= sci_prop_get (se
->props
, SELECTION_FORE_COLOR
);
746 gdk_color_parse (str
, &color
);
747 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->selection_fore_color
),
755 gdk_color_parse ("#FFFFFF", &color
);
756 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->selection_fore_color
),
760 str
= sci_prop_get (se
->props
, SELECTION_BACK_COLOR
);
765 gdk_color_parse (str
, &color
);
766 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->selection_back_color
),
774 gdk_color_parse ("#000000", &color
);
775 gtk_color_button_set_color (GTK_COLOR_BUTTON (se
->priv
->selection_back_color
),
781 set_one_color (PropsID props
, gchar
*key
, GtkWidget
*picker
)
785 gtk_color_button_get_color (GTK_COLOR_BUTTON (picker
), &color
);
786 str
= anjuta_util_string_from_color (color
.red
,
791 sci_prop_set_with_key (props
, key
, str
);
797 sync_to_props (StyleEditor
*se
)
802 g_return_if_fail (se
);
803 /* Sync the current item */
804 on_hilite_style_entry_changed (GTK_COMBO_BOX (se
->priv
->hilite_item_combobox
), se
);
806 /* Transfer to props */
811 if (hilite_style
[i
] == NULL
)
814 g_object_get_data (G_OBJECT (se
->priv
->dialog
),
816 str
= style_data_get_string (sdata
);
819 sci_prop_set_with_key (se
->props
, hilite_style
[i
+ 1], str
);
823 set_one_color (se
->props
, CARET_FORE_COLOR
,
824 se
->priv
->caret_fore_color
);
826 set_one_color (se
->props
, CALLTIP_BACK_COLOR
,
827 se
->priv
->calltip_back_color
);
829 set_one_color (se
->props
, SELECTION_FORE_COLOR
,
830 se
->priv
->selection_fore_color
);
832 set_one_color (se
->props
, SELECTION_BACK_COLOR
,
833 se
->priv
->selection_back_color
);
837 apply_styles (StyleEditor
*se
)
843 filename
= anjuta_util_get_user_config_file_path ("scintilla","editor-style.properties",NULL
);
844 ofile
= fopen (filename
, "w");
846 DEBUG_PRINT ("Could not open %s for writing", filename
);
848 style_editor_save (se
, ofile
);
852 g_settings_set_int (se
->settings
, DISABLE_SYNTAX_HILIGHTING
, 1);
853 g_settings_set_int (se
->settings
, DISABLE_SYNTAX_HILIGHTING
, 0);
857 on_response (GtkWidget
*dialog
, gint res
, StyleEditor
*se
)
859 g_return_if_fail (se
);
863 case GTK_RESPONSE_APPLY
:
866 case GTK_RESPONSE_OK
:
868 case GTK_RESPONSE_CANCEL
:
869 style_editor_hide (se
);
875 on_delete_event (GtkWidget
*dialog
, GdkEvent
*event
, StyleEditor
*se
)
877 g_return_if_fail (se
);
878 style_editor_hide (se
);
882 create_style_editor_gui (StyleEditor
* se
)
884 GtkBuilder
*bxml
= gtk_builder_new ();
885 GtkWidget
*pref_dialog
;
887 GError
* error
= NULL
;
889 g_return_if_fail (se
);
890 g_return_if_fail (se
->priv
->dialog
== NULL
);
892 if (!gtk_builder_add_from_file (bxml
, GLADE_FILE
, &error
))
894 g_warning ("Couldn't load builder file: %s", error
->message
);
895 g_error_free (error
);
898 se
->priv
->dialog
= GTK_WIDGET (gtk_builder_get_object (bxml
, "style_editor_dialog"));
899 gtk_widget_show (se
->priv
->dialog
);
900 se
->priv
->font_picker
= GTK_WIDGET (gtk_builder_get_object (bxml
, "font"));
901 se
->priv
->hilite_item_combobox
= GTK_WIDGET (gtk_builder_get_object (bxml
, "comboBox"));
902 se
->priv
->font_bold_check
= GTK_WIDGET (gtk_builder_get_object (bxml
, "bold"));
903 se
->priv
->font_italics_check
= GTK_WIDGET (gtk_builder_get_object (bxml
, "italic"));
904 se
->priv
->font_underlined_check
= GTK_WIDGET (gtk_builder_get_object (bxml
, "underlined"));
905 se
->priv
->fore_colorpicker
= GTK_WIDGET (gtk_builder_get_object (bxml
, "fore_color"));
906 se
->priv
->back_colorpicker
= GTK_WIDGET (gtk_builder_get_object (bxml
, "back_color"));
907 se
->priv
->font_use_default_check
= GTK_WIDGET (gtk_builder_get_object (bxml
, "font_default"));
908 se
->priv
->font_attrib_use_default_check
= GTK_WIDGET (gtk_builder_get_object (bxml
, "attributes_default"));
909 se
->priv
->fore_color_use_default_check
= GTK_WIDGET (gtk_builder_get_object (bxml
, "fore_default"));
910 se
->priv
->back_color_use_default_check
= GTK_WIDGET (gtk_builder_get_object (bxml
, "back_default"));
911 se
->priv
->caret_fore_color
= GTK_WIDGET (gtk_builder_get_object (bxml
, "caret"));
912 se
->priv
->calltip_back_color
= GTK_WIDGET (gtk_builder_get_object (bxml
, "calltip"));
913 se
->priv
->selection_fore_color
= GTK_WIDGET (gtk_builder_get_object (bxml
, "selection_fore"));
914 se
->priv
->selection_back_color
= GTK_WIDGET (gtk_builder_get_object (bxml
, "selection_back"));
918 if (hilite_style
[i
] == NULL
)
920 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (se
->priv
->hilite_item_combobox
), hilite_style
[i
]);
924 pref_dialog
= anjuta_preferences_get_dialog (se
->prefs
);
925 gtk_window_set_transient_for (GTK_WINDOW (se
->priv
->dialog
),
926 GTK_WINDOW (pref_dialog
));
928 g_signal_connect (se
->priv
->hilite_item_combobox
, "changed", G_CALLBACK (on_hilite_style_entry_changed
),
930 g_signal_connect (G_OBJECT (se
->priv
->font_use_default_check
),
931 "toggled", G_CALLBACK (on_use_default_font_toggled
),
933 g_signal_connect (G_OBJECT (se
->priv
->font_attrib_use_default_check
),
934 "toggled", G_CALLBACK (on_use_default_attrib_toggled
),
936 g_signal_connect (G_OBJECT (se
->priv
->fore_color_use_default_check
),
937 "toggled", G_CALLBACK (on_use_default_fore_toggled
),
939 g_signal_connect (G_OBJECT (se
->priv
->back_color_use_default_check
),
940 "toggled", G_CALLBACK (on_use_default_back_toggled
),
942 g_signal_connect (G_OBJECT (se
->priv
->dialog
),
943 "delete_event", G_CALLBACK (on_delete_event
),
945 g_signal_connect (G_OBJECT (se
->priv
->dialog
),
946 "response", G_CALLBACK (on_response
),
948 g_object_unref (bxml
);
952 style_editor_new (AnjutaPreferences
*prefs
, GSettings
*settings
)
955 se
= g_new0 (StyleEditor
, 1);
956 se
->priv
= g_new0 (StyleEditorPriv
, 1);
957 se
->props
= text_editor_get_props ();
958 se
->priv
->dialog
= NULL
;
960 se
->settings
= g_object_ref (settings
);
964 void style_editor_destroy (StyleEditor
*se
)
966 g_return_if_fail (se
);
967 if (se
->priv
->dialog
)
968 gtk_widget_destroy (se
->priv
->dialog
);
970 g_object_unref (se
->settings
);
974 void style_editor_show (StyleEditor
*se
)
976 g_return_if_fail (se
);
977 if (se
->priv
->dialog
)
979 create_style_editor_gui (se
);
980 sync_from_props (se
);
983 void style_editor_hide (StyleEditor
*se
)
985 g_return_if_fail (se
);
986 g_return_if_fail (se
->priv
->dialog
);
987 gtk_widget_destroy (se
->priv
->dialog
);
988 se
->priv
->dialog
= NULL
;
992 style_editor_save (StyleEditor
*se
, FILE *fp
)
999 if (hilite_style
[i
] == NULL
)
1001 str
= sci_prop_get (se
->props
, hilite_style
[i
+ 1]);
1004 fprintf (fp
, "%s=%s\n", hilite_style
[i
+ 1], str
);
1008 fprintf (fp, "%s=\n", hilite_style[i + 1]); */
1010 str
= sci_prop_get (se
->props
, CARET_FORE_COLOR
);
1013 fprintf (fp
, "%s=%s\n", CARET_FORE_COLOR
, str
);
1017 str
= sci_prop_get (se
->props
, CALLTIP_BACK_COLOR
);
1020 fprintf (fp
, "%s=%s\n", CALLTIP_BACK_COLOR
, str
);
1024 str
= sci_prop_get (se
->props
, SELECTION_FORE_COLOR
);
1027 fprintf (fp
, "%s=%s\n", SELECTION_FORE_COLOR
, str
);
1031 str
= sci_prop_get (se
->props
, SELECTION_BACK_COLOR
);
1034 fprintf (fp
, "%s=%s\n", SELECTION_BACK_COLOR
, str
);