SF.net SVN: geany:[2863] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Thu Aug 7 16:36:08 UTC 2008
Revision: 2863
http://geany.svn.sourceforge.net/geany/?rev=2863&view=rev
Author: ntrel
Date: 2008-08-07 16:36:06 +0000 (Thu, 07 Aug 2008)
Log Message:
-----------
Merge changes from the custom-tab-width branch (closes #1662173).
Thanks to Joerg Desch for explaining how it needs to work.
Note: this breaks the plugin API for indentation editor_prefs.
Add separate Width indent pref (as well as the Tab Width pref).
Add 'Tabs & Spaces' Indent Type radio option pref.
Add 'Tabs and Spaces' Document menu indent option.
Note: Tabs & Spaces cannot be detected (yet) when opening files;
default file templates still only use tabs.
Set 'Detect from file' indent type setting insensitive when Tabs &
Spaces is set.
Don't change per-document auto-indent setting after changing default
auto-indentation type.
- API changes:
Add GeanyIndentPrefs struct from some GeanyEditorPrefs fields.
Replace GeanyIndentPrefs::use_tabs with GeanyIndentType field 'type'.
Add editor_get_indent_prefs() to the API, which should be used to
get the right settings for a document/editor instead of reading
any struct fields. This could also support project/filetype
indentation prefs quite easily.
- Core code changes:
Move toggle_prefs to a function toggle_items_foreach(), which takes
a PREF_DISPLAY or PREF_UPDATE argument. This means the PrefEntry
array can contain runtime fields, so can read pointer contents.
Add pref_item_callbacks array of functions to call;
toggle_items_foreach(), spin_items_foreach(), radio_items_foreach(),
combo_items_foreach().
Update keyfile.c to use foreach-style functions for SettingEntry
arrays, like the new PrefEntry code in prefs.c.
Add get_indent_size_after_line() to replace get_indent() for
clarity, and to fix Tabs & Spaces auto-indentation > basic.
Remove opening-brace indent code from get_indent() as it's now in
get_brace_indent().
Change editor_close_block() to use sci_get_line_indentation() for
clarity.
Make editor_close_block() static.
Add editor_init().
Modified Paths:
--------------
trunk/ChangeLog
trunk/TODO
trunk/geany.glade
trunk/plugins/export.c
trunk/src/callbacks.c
trunk/src/callbacks.h
trunk/src/document.c
trunk/src/editor.c
trunk/src/editor.h
trunk/src/interface.c
trunk/src/keyfile.c
trunk/src/main.c
trunk/src/plugindata.h
trunk/src/plugins.c
trunk/src/prefs.c
trunk/src/ui_utils.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/ChangeLog 2008-08-07 16:36:06 UTC (rev 2863)
@@ -1,3 +1,47 @@
+2008-08-07 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/interface.c, src/prefs.c, src/plugindata.h, src/callbacks.c,
+ src/callbacks.h, src/keyfile.c, src/document.c, src/plugins.c,
+ src/main.c, src/editor.c, src/editor.h, src/ui_utils.c, geany.glade,
+ plugins/export.c, TODO:
+ Merge changes from the custom-tab-width branch (closes #1662173).
+ Thanks to Joerg Desch for explaining how it needs to work.
+ Note: this breaks the plugin API for indentation editor_prefs.
+ Add separate Width indent pref (as well as the Tab Width pref).
+ Add 'Tabs & Spaces' Indent Type radio option pref.
+ Add 'Tabs and Spaces' Document menu indent option.
+ Note: Tabs & Spaces cannot be detected (yet) when opening files;
+ default file templates still only use tabs.
+ Set 'Detect from file' indent type setting insensitive when Tabs &
+ Spaces is set.
+ Don't change per-document auto-indent setting after changing default
+ auto-indentation type.
+ - API changes:
+ Add GeanyIndentPrefs struct from some GeanyEditorPrefs fields.
+ Replace GeanyIndentPrefs::use_tabs with GeanyIndentType field 'type'.
+ Add editor_get_indent_prefs() to the API, which should be used to
+ get the right settings for a document/editor instead of reading
+ any struct fields. This could also support project/filetype
+ indentation prefs quite easily.
+ - Core code changes:
+ Move toggle_prefs to a function toggle_items_foreach(), which takes
+ a PREF_DISPLAY or PREF_UPDATE argument. This means the PrefEntry
+ array can contain runtime fields, so can read pointer contents.
+ Add pref_item_callbacks array of functions to call;
+ toggle_items_foreach(), spin_items_foreach(), radio_items_foreach(),
+ combo_items_foreach().
+ Update keyfile.c to use foreach-style functions for SettingEntry
+ arrays, like the new PrefEntry code in prefs.c.
+ Add get_indent_size_after_line() to replace get_indent() for
+ clarity, and to fix Tabs & Spaces auto-indentation > basic.
+ Remove opening-brace indent code from get_indent() as it's now in
+ get_brace_indent().
+ Change editor_close_block() to use sci_get_line_indentation() for
+ clarity.
+ Make editor_close_block() static.
+ Add editor_init().
+
+
2008-08-05 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/vte.c:
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/TODO 2008-08-07 16:36:06 UTC (rev 2863)
@@ -18,9 +18,6 @@
o recent projects menu
o project indentation settings support
o improve Compile toolbar button for Make (drop down radio list?)
- o (for spaces indentation, distinguish between tab width vs. indent
- width, e.g. GTK code uses indent width of 2 spaces, and any tabs are
- worth 8 spaces.)
o (selectable menu of arguments to use for Make, from Make Custom)
o (DBUS)
o (indent wrapped lines - Scintilla issue)
Modified: trunk/geany.glade
===================================================================
--- trunk/geany.glade 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/geany.glade 2008-08-07 16:36:06 UTC (rev 2863)
@@ -58,7 +58,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image2548">
+ <widget class="GtkImage" id="image2576">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@@ -148,7 +148,7 @@
<signal name="activate" handler="on_save_all1_activate" last_modification_time="Thu, 02 Jun 2005 14:15:30 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2549">
+ <widget class="GtkImage" id="image2577">
<property name="visible">True</property>
<property name="stock">gtk-save</property>
<property name="icon_size">1</property>
@@ -169,7 +169,7 @@
<signal name="activate" handler="on_toolbutton23_clicked" last_modification_time="Mon, 24 Jul 2006 19:26:04 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2550">
+ <widget class="GtkImage" id="image2578">
<property name="visible">True</property>
<property name="stock">gtk-revert-to-saved</property>
<property name="icon_size">1</property>
@@ -189,7 +189,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image2551">
+ <widget class="GtkImage" id="image2579">
<property name="visible">True</property>
<property name="stock">gtk-revert-to-saved</property>
<property name="icon_size">1</property>
@@ -277,7 +277,7 @@
<signal name="activate" handler="on_close_other_documents1_activate" last_modification_time="Fri, 27 Jun 2008 15:19:28 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2552">
+ <widget class="GtkImage" id="image2580">
<property name="visible">True</property>
<property name="stock">gtk-close</property>
<property name="icon_size">1</property>
@@ -299,7 +299,7 @@
<signal name="activate" handler="on_close_all1_activate" last_modification_time="Thu, 02 Jun 2005 14:15:30 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2553">
+ <widget class="GtkImage" id="image2581">
<property name="visible">True</property>
<property name="stock">gtk-close</property>
<property name="icon_size">1</property>
@@ -498,7 +498,7 @@
<signal name="activate" handler="on_menu_increase_indent1_activate" last_modification_time="Tue, 01 Aug 2006 10:28:54 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2554">
+ <widget class="GtkImage" id="image2582">
<property name="visible">True</property>
<property name="stock">gtk-indent</property>
<property name="icon_size">1</property>
@@ -519,7 +519,7 @@
<signal name="activate" handler="on_menu_decrease_indent1_activate" last_modification_time="Tue, 01 Aug 2006 10:28:54 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2555">
+ <widget class="GtkImage" id="image2583">
<property name="visible">True</property>
<property name="stock">gtk-unindent</property>
<property name="icon_size">1</property>
@@ -575,7 +575,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image2556">
+ <widget class="GtkImage" id="image2584">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -660,7 +660,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image2557">
+ <widget class="GtkImage" id="image2585">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -692,7 +692,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image2558">
+ <widget class="GtkImage" id="image2586">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -790,7 +790,7 @@
<signal name="activate" handler="on_replace1_activate" last_modification_time="Sun, 23 Oct 2005 13:22:36 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2559">
+ <widget class="GtkImage" id="image2587">
<property name="visible">True</property>
<property name="stock">gtk-find-and-replace</property>
<property name="icon_size">1</property>
@@ -865,7 +865,7 @@
<signal name="activate" handler="on_go_to_line1_activate" last_modification_time="Tue, 23 May 2006 17:10:49 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2560">
+ <widget class="GtkImage" id="image2588">
<property name="visible">True</property>
<property name="stock">gtk-jump-to</property>
<property name="icon_size">1</property>
@@ -900,7 +900,7 @@
<signal name="activate" handler="on_change_font1_activate" last_modification_time="Fri, 22 Apr 2005 18:58:45 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2561">
+ <widget class="GtkImage" id="image2589">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
<property name="icon_size">1</property>
@@ -1098,6 +1098,17 @@
<signal name="activate" handler="on_spaces1_activate" last_modification_time="Thu, 04 Oct 2007 16:07:51 GMT"/>
</widget>
</child>
+
+ <child>
+ <widget class="GtkRadioMenuItem" id="tabs_and_spaces1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">T_abs and Spaces</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+ <property name="group">tabs1</property>
+ <signal name="activate" handler="on_tabs_and_spaces1_activate" last_modification_time="Thu, 31 Jul 2008 14:23:06 GMT"/>
+ </widget>
+ </child>
</widget>
</child>
</widget>
@@ -1329,7 +1340,7 @@
<signal name="activate" handler="on_project_new1_activate" last_modification_time="Thu, 18 Jan 2007 22:16:24 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2562">
+ <widget class="GtkImage" id="image2590">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@@ -1350,7 +1361,7 @@
<signal name="activate" handler="on_project_open1_activate" last_modification_time="Mon, 15 Jan 2007 17:34:17 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2563">
+ <widget class="GtkImage" id="image2591">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
@@ -1371,7 +1382,7 @@
<signal name="activate" handler="on_project_close1_activate" last_modification_time="Mon, 15 Jan 2007 17:34:17 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2564">
+ <widget class="GtkImage" id="image2592">
<property name="visible">True</property>
<property name="stock">gtk-close</property>
<property name="icon_size">1</property>
@@ -1430,7 +1441,7 @@
<signal name="activate" handler="on_show_color_chooser1_activate" last_modification_time="Wed, 22 Jun 2005 18:10:21 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2565">
+ <widget class="GtkImage" id="image2593">
<property name="visible">True</property>
<property name="stock">gtk-select-color</property>
<property name="icon_size">1</property>
@@ -1472,7 +1483,7 @@
<signal name="activate" handler="on_menu_reload_configuration1_activate" last_modification_time="Mon, 30 Jun 2008 16:19:40 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2566">
+ <widget class="GtkImage" id="image2594">
<property name="visible">True</property>
<property name="stock">gtk-refresh</property>
<property name="icon_size">1</property>
@@ -1506,7 +1517,7 @@
<signal name="activate" handler="on_help1_activate" last_modification_time="Sun, 24 Jul 2005 15:23:11 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image2567">
+ <widget class="GtkImage" id="image2595">
<property name="visible">True</property>
<property name="stock">gtk-help</property>
<property name="icon_size">1</property>
@@ -5358,7 +5369,7 @@
<child>
<widget class="GtkTable" id="table13">
<property name="visible">True</property>
- <property name="n_rows">4</property>
+ <property name="n_rows">7</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">3</property>
@@ -5373,7 +5384,7 @@
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
+ <property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
@@ -5385,8 +5396,8 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
@@ -5405,40 +5416,45 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_tab_width">
+ <widget class="GtkLabel" id="label200">
<property name="visible">True</property>
- <property name="tooltip" translatable="yes">The width in chars, which one tab character will take</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_IF_VALID</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">True</property>
- <property name="adjustment">1 1 99 1 10 10</property>
+ <property name="label" translatable="yes">Type:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label116">
+ <widget class="GtkLabel" id="label222">
<property name="visible">True</property>
- <property name="label" translatable="yes">Tab width:</property>
+ <property name="label" translatable="yes">Width:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -5456,6 +5472,51 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="spin_indent_width">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">The width in chars of a single indent</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_IF_VALID</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">True</property>
+ <property name="adjustment">1 1 99 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkRadioButton" id="radio_indent_spaces">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Use spaces when inserting indentation</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Spaces</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
@@ -5464,86 +5525,125 @@
</child>
<child>
- <widget class="GtkHBox" id="hbox8">
+ <widget class="GtkRadioButton" id="radio_indent_tabs">
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
+ <property name="tooltip" translatable="yes">Use one tab per indent</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Tabs</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">radio_indent_spaces</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
- <child>
- <widget class="GtkRadioButton" id="radio_indent_tabs">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether to use tabs or spaces when indentation is inserted.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Tabs</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="radio_indent_spaces">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether to use tabs or spaces when indentation is inserted.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Spaces</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">radio_indent_tabs</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
+ <child>
+ <widget class="GtkRadioButton" id="radio_indent_both">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Use spaces if the total indent is less than the tab width, otherwise use both</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">T_abs and Spaces</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">radio_indent_spaces</property>
+ <signal name="toggled" handler="on_radio_indent_both_toggled" last_modification_time="Tue, 05 Aug 2008 15:14:37 GMT"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">fill</property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label200">
+ <widget class="GtkAlignment" id="alignment41">
<property name="visible">True</property>
- <property name="label" translatable="yes">Type:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
+ <property name="xalign">0.5</property>
<property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
+ <property name="xscale">1</property>
+ <property name="yscale">1</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">24</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox13">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label221">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Tab Width:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="spin_tab_width">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">The width of a tab when Tabs & Spaces is set for a document</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_IF_VALID</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">True</property>
+ <property name="adjustment">8 1 99 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="x_options">fill</property>
- <property name="y_options"></property>
</packing>
</child>
@@ -5563,8 +5663,8 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
Modified: trunk/plugins/export.c
===================================================================
--- trunk/plugins/export.c 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/plugins/export.c 2008-08-07 16:36:06 UTC (rev 2863)
@@ -347,6 +347,7 @@
static void write_latex_file(GeanyDocument *doc, const gchar *filename, gboolean use_zoom)
{
+ GeanyEditor *editor = doc->editor;
gint i, style = -1, old_style = 0, column = 0;
gchar c, c_next, *tmp;
/* 0 - fore, 1 - back, 2 - bold, 3 - italic, 4 - font size, 5 - used(0/1) */
@@ -408,8 +409,8 @@
}
case '\t':
{
- gint tab_stop = geany->editor_prefs->tab_width -
- (column % geany->editor_prefs->tab_width);
+ gint tab_width = p_editor->get_indent_prefs(editor)->tab_width;
+ gint tab_stop = tab_width - (column % tab_width);
column += tab_stop - 1; /* -1 because we add 1 at the end of the loop */
g_string_append_printf(body, "\\hspace*{%dem}", tab_stop);
@@ -551,6 +552,7 @@
static void write_html_file(GeanyDocument *doc, const gchar *filename, gboolean use_zoom)
{
+ GeanyEditor *editor = doc->editor;
gint i, style = -1, old_style = 0, column = 0;
gchar c, c_next;
/* 0 - fore, 1 - back, 2 - bold, 3 - italic, 4 - font size, 5 - used(0/1) */
@@ -625,8 +627,8 @@
case '\t':
{
gint j;
- gint tab_stop = geany->editor_prefs->tab_width -
- (column % geany->editor_prefs->tab_width);
+ gint tab_width = p_editor->get_indent_prefs(editor)->tab_width;
+ gint tab_stop = tab_width - (column % tab_width);
column += tab_stop - 1; /* -1 because we add 1 at the end of the loop */
for (j = 0; j < tab_stop; j++)
Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/src/callbacks.c 2008-08-07 16:36:06 UTC (rev 2863)
@@ -1685,6 +1685,18 @@
}
+static void change_line_indent(GeanyEditor *editor, gboolean increase)
+{
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
+ ScintillaObject *sci = editor->sci;
+ gint line = sci_get_current_line(sci);
+ gint width = sci_get_line_indentation(sci, line);
+
+ width += increase ? iprefs->width : -iprefs->width;
+ sci_set_line_indentation(sci, line, width);
+}
+
+
void
on_menu_increase_indent1_activate (GtkMenuItem *menuitem,
gpointer user_data)
@@ -1699,18 +1711,7 @@
}
else
{
- gint line, ind_pos, old_pos, new_pos, step;
-
- old_pos = sci_get_current_position(doc->editor->sci);
- line = sci_get_line_from_position(doc->editor->sci, old_pos);
- ind_pos = sci_get_line_indent_position(doc->editor->sci, line);
- /* when using tabs increase cur pos by 1, when using space increase it by tab_width */
- step = (doc->editor->use_tabs) ? 1 : editor_prefs.tab_width;
- new_pos = (old_pos > ind_pos) ? old_pos + step : old_pos;
-
- sci_set_current_position(doc->editor->sci, ind_pos, TRUE);
- sci_cmd(doc->editor->sci, SCI_TAB);
- sci_set_current_position(doc->editor->sci, new_pos, TRUE);
+ change_line_indent(doc->editor, TRUE);
}
}
@@ -1729,25 +1730,7 @@
}
else
{
- gint line, ind_pos, old_pos, new_pos, step, indent;
-
- old_pos = sci_get_current_position(doc->editor->sci);
- line = sci_get_line_from_position(doc->editor->sci, old_pos);
- ind_pos = sci_get_line_indent_position(doc->editor->sci, line);
- step = (doc->editor->use_tabs) ? 1 : editor_prefs.tab_width;
- new_pos = (old_pos >= ind_pos) ? old_pos - step : old_pos;
-
- if (ind_pos == sci_get_position_from_line(doc->editor->sci, line))
- return;
-
- sci_set_current_position(doc->editor->sci, ind_pos, TRUE);
- indent = sci_get_line_indentation(doc->editor->sci, line);
- indent -= editor_prefs.tab_width;
- if (indent < 0)
- indent = 0;
- sci_set_line_indentation(doc->editor->sci, line, indent);
-
- sci_set_current_position(doc->editor->sci, new_pos, TRUE);
+ change_line_indent(doc->editor, FALSE);
}
}
@@ -2063,31 +2046,39 @@
}
-void
-on_tabs1_activate (GtkMenuItem *menuitem,
- gpointer user_data)
+static void set_indent_type(GeanyIndentType type)
{
GeanyDocument *doc = document_get_current();
if (doc == NULL || ignore_callback)
return;
- editor_set_use_tabs(doc->editor, TRUE);
+ editor_set_indent_type(doc->editor, type);
ui_update_statusbar(doc, -1);
}
void
+on_tabs1_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ set_indent_type(GEANY_INDENT_TYPE_TABS);
+}
+
+
+void
on_spaces1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- GeanyDocument *doc = document_get_current();
+ set_indent_type(GEANY_INDENT_TYPE_SPACES);
+}
- if (doc == NULL || ignore_callback)
- return;
- editor_set_use_tabs(doc->editor, FALSE);
- ui_update_statusbar(doc, -1);
+void
+on_tabs_and_spaces1_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ set_indent_type(GEANY_INDENT_TYPE_BOTH);
}
@@ -2209,3 +2200,15 @@
main_reload_configuration();
}
+
+void
+on_radio_indent_both_toggled (GtkToggleButton *togglebutton,
+ gpointer user_data)
+{
+ GtkWidget *check = lookup_widget(ui_widgets.prefs_dialog, "check_detect_indent");
+ gboolean active;
+
+ active = gtk_toggle_button_get_active(togglebutton);
+ gtk_widget_set_sensitive(check, !active);
+}
+
Modified: trunk/src/callbacks.h
===================================================================
--- trunk/src/callbacks.h 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/src/callbacks.h 2008-08-07 16:36:06 UTC (rev 2863)
@@ -626,3 +626,11 @@
void
on_find_document_usage1_activate (GtkMenuItem *menuitem,
gpointer user_data);
+
+void
+on_tabs_and_spaces1_activate (GtkMenuItem *menuitem,
+ gpointer user_data);
+
+void
+on_radio_indent_both_toggled (GtkToggleButton *togglebutton,
+ gpointer user_data);
Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/src/document.c 2008-08-07 16:36:06 UTC (rev 2863)
@@ -303,15 +303,18 @@
void document_apply_update_prefs(GeanyDocument *doc)
{
ScintillaObject *sci;
+ GeanyEditor *editor;
g_return_if_fail(doc != NULL);
- sci = doc->editor->sci;
+ editor = doc->editor;
+ sci = editor->sci;
sci_set_mark_long_lines(sci, editor_prefs.long_line_type,
editor_prefs.long_line_column, editor_prefs.long_line_color);
- sci_set_tab_width(sci, editor_prefs.tab_width);
+ /* update indent width, tab width */
+ editor_set_indent_type(editor, editor->indent_type);
sci_set_autoc_max_height(sci, editor_prefs.symbolcompletion_max_height);
@@ -321,8 +324,6 @@
sci_set_folding_margin_visible(sci, editor_prefs.folding);
- doc->editor->auto_indent = (editor_prefs.indent_mode != INDENT_NONE);
-
sci_assign_cmdkey(sci, SCK_HOME,
editor_prefs.smart_home_key ? SCI_VCHOMEWRAP : SCI_HOMEWRAP);
sci_assign_cmdkey(sci, SCK_END, SCI_LINEENDWRAP);
@@ -571,7 +572,6 @@
if (text != NULL)
sci_convert_eols(doc->editor->sci, file_prefs.default_eol_character);
- editor_set_use_tabs(doc->editor, editor_prefs.use_tabs);
sci_set_undo_collection(doc->editor->sci, TRUE);
sci_empty_undo_buffer(doc->editor->sci);
@@ -883,11 +883,18 @@
}
-static gboolean detect_use_tabs(ScintillaObject *sci)
+static GeanyIndentType detect_indent_type(GeanyEditor *editor)
{
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
+ ScintillaObject *sci = editor->sci;
gint line;
+ gboolean use_tabs;
gsize tabs = 0, spaces = 0;
+ /* TODO: tabs & spaces detection */
+ if (iprefs->type == GEANY_INDENT_TYPE_BOTH)
+ return GEANY_INDENT_TYPE_BOTH;
+
for (line = 0; line < sci_get_line_count(sci); line++)
{
gint pos = sci_get_position_from_line(sci, line);
@@ -905,34 +912,42 @@
}
}
if (spaces == 0 && tabs == 0)
- return editor_prefs.use_tabs;
+ return iprefs->type;
/* Skew comparison by a factor of 2 in favour of default editor pref */
- if (editor_prefs.use_tabs)
- return ! (spaces > tabs * 2);
+ if (iprefs->type == GEANY_INDENT_TYPE_TABS)
+ use_tabs = ! (spaces > tabs * 2);
else
- return (tabs > spaces * 2);
+ use_tabs = (tabs > spaces * 2);
+
+ return use_tabs ? GEANY_INDENT_TYPE_TABS : GEANY_INDENT_TYPE_SPACES;
}
-static void set_indentation(GeanyDocument *doc)
+static void set_indentation(GeanyEditor *editor)
{
- /* force using tabs for indentation for Makefiles */
- if (FILETYPE_ID(doc->file_type) == GEANY_FILETYPES_MAKE)
- editor_set_use_tabs(doc->editor, TRUE);
- /* force using spaces for indentation for Fortran 77 */
- else if (FILETYPE_ID(doc->file_type) == GEANY_FILETYPES_F77)
- editor_set_use_tabs(doc->editor, FALSE);
- else if (! editor_prefs.detect_tab_mode)
- editor_set_use_tabs(doc->editor, editor_prefs.use_tabs);
- else
- { /* detect & set tabs/spaces */
- gboolean use_tabs = detect_use_tabs(doc->editor->sci);
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
- if (use_tabs != editor_prefs.use_tabs)
- ui_set_statusbar(TRUE, _("Setting %s indentation mode."),
- (use_tabs) ? _("Tabs") : _("Spaces"));
- editor_set_use_tabs(doc->editor, use_tabs);
+ switch (FILETYPE_ID(editor->document->file_type))
+ {
+ case GEANY_FILETYPES_MAKE:
+ /* force using tabs for indentation for Makefiles */
+ editor_set_indent_type(editor, GEANY_INDENT_TYPE_TABS);
+ break;
+ case GEANY_FILETYPES_F77:
+ /* force using spaces for indentation for Fortran 77 */
+ editor_set_indent_type(editor, GEANY_INDENT_TYPE_SPACES);
+ break;
+ default:
+ if (iprefs->detect_type)
+ { /* detect & set tabs/spaces */
+ GeanyIndentType type = detect_indent_type(editor);
+
+ if (type != iprefs->type)
+ ui_set_statusbar(TRUE, _("Setting %s indentation mode."),
+ (type == GEANY_INDENT_TYPE_TABS) ? _("Tabs") : _("Spaces"));
+ editor_set_indent_type(editor, type);
+ }
}
}
@@ -1061,9 +1076,9 @@
/* set indentation settings after setting the filetype */
if (reload)
- editor_set_use_tabs(doc->editor, doc->editor->use_tabs); /* resetup sci */
+ editor_set_indent_type(doc->editor, doc->editor->indent_type); /* resetup sci */
else
- set_indentation(doc);
+ set_indentation(doc->editor);
document_set_text_changed(doc, FALSE); /* also updates tab state */
ui_document_show_hide(doc); /* update the document menu */
Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/src/editor.c 2008-08-07 16:36:06 UTC (rev 2863)
@@ -74,14 +74,15 @@
static void on_new_line_added(GeanyEditor *editor);
static gboolean handle_xml(GeanyEditor *editor, gchar ch);
-static void get_indent(GeanyEditor *editor, gint pos, gboolean use_this_line);
+static void get_indent(GeanyEditor *editor, gint pos);
+static void insert_indent_after_line(GeanyEditor *editor, gint line);
static void auto_multiline(GeanyEditor *editor, gint pos);
static gboolean is_comment(gint lexer, gint prev_style, gint style);
static void auto_close_bracket(ScintillaObject *sci, gint pos, gchar c);
static void auto_table(GeanyEditor *editor, gint pos);
+static void close_block(GeanyEditor *editor, gint pos);
-
void editor_snippets_free()
{
g_hash_table_destroy(editor_prefs.snippets);
@@ -437,7 +438,7 @@
case '}':
{ /* closing bracket handling */
if (editor->auto_indent)
- editor_close_block(editor->document, pos - 1);
+ close_block(editor, pos - 1);
break;
}
default:
@@ -706,54 +707,88 @@
}
+static gint get_tab_width(const GeanyIndentPrefs *indent_prefs)
+{
+ if (indent_prefs->type == GEANY_INDENT_TYPE_BOTH)
+ return indent_prefs->tab_width;
+
+ return indent_prefs->width; /* tab width = indent width */
+}
+
+
/* Returns a string containing width chars of whitespace, filled with simple space
- * characters or with the right number of tab characters, according to the
- * use_tabs setting. (Result is filled with tabs *and* spaces if width isn't a multiple of
+ * characters or with the right number of tab characters, according to the indent prefs.
+ * (Result is filled with tabs *and* spaces if width isn't a multiple of
* editor_prefs.tab_width). */
static gchar *
-get_whitespace(gint width, gboolean use_tabs)
+get_whitespace(const GeanyIndentPrefs *iprefs, gint width)
{
- gchar *str;
+ g_return_val_if_fail(width >= 0, NULL);
- g_return_val_if_fail(width > 0, NULL);
+ if (width == 0)
+ return g_strdup("");
- if (use_tabs)
+ if (iprefs->type == GEANY_INDENT_TYPE_SPACES)
+ {
+ return g_strnfill(width, ' ');
+ }
+ else
{ /* first fill text with tabs and fill the rest with spaces */
- gint tabs = width / editor_prefs.tab_width;
- gint spaces = width % editor_prefs.tab_width;
+ const gint tab_width = get_tab_width(iprefs);
+ gint tabs = width / tab_width;
+ gint spaces = width % tab_width;
gint len = tabs + spaces;
+ gchar *str;
str = g_malloc(len + 1);
memset(str, '\t', tabs);
memset(str + tabs, ' ', spaces);
str[len] = '\0';
+ return str;
}
- else
- str = g_strnfill(width, ' ');
+}
- return str;
+
+static const GeanyIndentPrefs *
+get_default_indent_prefs(void)
+{
+ /* In future this might depend on the current project. */
+ return editor_prefs.indentation;
}
-static void check_python_indent(GeanyEditor *editor, gint pos)
+/** Get the indentation prefs for the editor.
+ * In future, the prefs might be different according to project or filetype.
+ * @warning Always get a fresh result instead of keeping a pointer to it if the editor
+ * settings may have changed, or if this function has been called for a different @a editor.
+ * @param editor The editor, or @c NULL to get the default indent prefs.
+ * @return The indent prefs. */
+const GeanyIndentPrefs *
+editor_get_indent_prefs(GeanyEditor *editor)
{
- ScintillaObject *sci = editor->sci;
- gint last_char = pos - editor_get_eol_char_len(editor->document) - 1;
+ static GeanyIndentPrefs iprefs;
- /* add extra indentation for Python after colon */
- if (sci_get_char_at(sci, last_char) == ':' &&
- sci_get_style_at(sci, last_char) == SCE_P_OPERATOR)
- {
- /* creates and inserts one tabulator sign or
- * whitespace of the amount of the tab width */
- gchar *text = get_whitespace(editor_prefs.tab_width, editor->use_tabs);
- sci_add_text(sci, text);
- g_free(text);
- }
+ iprefs = *get_default_indent_prefs();
+
+ if (!editor)
+ return &iprefs;
+
+ iprefs.type = editor->indent_type;
+ if (!editor->auto_indent)
+ iprefs.auto_indent_mode = GEANY_AUTOINDENT_NONE;
+ return &iprefs;
}
+static gchar *get_single_indent(GeanyEditor *editor)
+{
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
+
+ return get_whitespace(iprefs, iprefs->width);
+}
+
+
static void on_new_line_added(GeanyEditor *editor)
{
ScintillaObject *sci = editor->sci;
@@ -763,12 +798,7 @@
/* simple indentation */
if (editor->auto_indent)
{
- get_indent(editor, pos, FALSE);
- sci_add_text(sci, indent);
-
- if (editor_prefs.indent_mode > INDENT_BASIC &&
- FILETYPE_ID(editor->document->file_type) == GEANY_FILETYPES_PYTHON)
- check_python_indent(editor, pos);
+ insert_indent_after_line(editor, line - 1);
}
if (editor_prefs.auto_continue_multiline)
@@ -808,83 +838,124 @@
}
-/* in place indentation of one tab or equivalent spaces */
-static void do_indent(gchar *buf, gsize len, guint *idx, gboolean use_tabs)
+/* Read indent chars for the line that pos is on into indent global variable.
+ * Note: Use sci_get_line_indentation() and get_whitespace() instead in any new code. */
+static void get_indent(GeanyEditor *editor, gint pos)
{
- guint j = *idx;
+ ScintillaObject *sci = editor->sci;
+ guint i, len, j = 0;
+ gint line;
+ gchar *linebuf;
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
- if (use_tabs)
+ line = sci_get_line_from_position(sci, pos);
+
+ len = sci_get_line_length(sci, line);
+ linebuf = sci_get_line(sci, line);
+
+ for (i = 0; i < len && j <= (sizeof(indent) - 1); i++)
{
- if (j < len - 1) /* leave room for a \0 terminator. */
- buf[j++] = '\t';
+ if (linebuf[i] == ' ' || linebuf[i] == '\t') /* simple indentation */
+ indent[j++] = linebuf[i];
+ else if (iprefs->auto_indent_mode <= GEANY_AUTOINDENT_BASIC)
+ break;
}
- else
- { /* insert as many spaces as a tab would take */
- guint k;
- for (k = 0; k < (guint) editor_prefs.tab_width && k < len - 1; k++)
- buf[j++] = ' ';
- }
- *idx = j;
+ indent[j] = '\0';
+ g_free(linebuf);
}
-/* "use_this_line" to auto-indent only if it is a real new line
- * and ignore the case of editor_close_block */
-static void get_indent(GeanyEditor *editor, gint pos, gboolean use_this_line)
+static gint get_brace_indent(ScintillaObject *sci, gint line)
{
- ScintillaObject *sci = editor->sci;
- guint i, len, j = 0;
- gint prev_line;
+ guint i, len;
+ gint ret = 0;
gchar *linebuf;
- prev_line = sci_get_line_from_position(sci, pos);
+ len = sci_get_line_length(sci, line);
+ linebuf = sci_get_line(sci, line);
- if (! use_this_line)
- prev_line--;
- len = sci_get_line_length(sci, prev_line);
- linebuf = sci_get_line(sci, prev_line);
-
- for (i = 0; i < len && j <= (sizeof(indent) - 1); i++)
+ for (i = 0; i < len; i++)
{
- if (linebuf[i] == ' ' || linebuf[i] == '\t') /* simple indentation */
- indent[j++] = linebuf[i];
- else if (editor_prefs.indent_mode <= INDENT_BASIC)
+ /* i == (len - 1) prevents wrong indentation after lines like
+ * " { return bless({}, shift); }" (Perl) */
+ if (linebuf[i] == '{' && i == (len - 1))
+ {
+ ret++;
break;
- else if (use_this_line)
- break;
- else /* editor_close_block */
+ }
+ else
{
- if (! lexer_has_braces(sci))
- break;
+ gint k = len - 1;
- /* i == (len - 1) prevents wrong indentation after lines like
- * " { return bless({}, shift); }" (Perl) */
- if (linebuf[i] == '{' && i == (len - 1))
+ while (k > 0 && isspace(linebuf[k])) k--;
+
+ /* if last non-whitespace character is a { increase indentation by a tab
+ * e.g. for (...) { */
+ if (linebuf[k] == '{')
{
- do_indent(indent, sizeof(indent), &j, editor->use_tabs);
- break;
+ ret++;
}
- else
- {
- gint k = len - 1;
-
- while (k > 0 && isspace(linebuf[k])) k--;
-
- /* if last non-whitespace character is a { increase indentation by a tab
- * e.g. for (...) { */
- if (linebuf[k] == '{')
- {
- do_indent(indent, sizeof(indent), &j, editor->use_tabs);
- }
- break;
- }
+ break;
}
}
- indent[j] = '\0';
g_free(linebuf);
+ return ret;
}
+static gint get_python_indent(ScintillaObject *sci, gint line)
+{
+ gint last_char = sci_get_line_end_position(sci, line) - 1;
+
+ /* add extra indentation for Python after colon */
+ if (sci_get_char_at(sci, last_char) == ':' &&
+ sci_get_style_at(sci, last_char) == SCE_P_OPERATOR)
+ {
+ return 1;
+ }
+ return 0;
+}
+
+
+static gint get_indent_size_after_line(GeanyEditor *editor, gint line)
+{
+ ScintillaObject *sci = editor->sci;
+ gint size;
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
+
+ g_return_val_if_fail(line >= 0, 0);
+
+ size = sci_get_line_indentation(sci, line);
+
+ if (iprefs->auto_indent_mode > GEANY_AUTOINDENT_BASIC)
+ {
+ if (lexer_has_braces(sci))
+ size += iprefs->width * get_brace_indent(sci, line);
+ else
+ if (FILETYPE_ID(editor->document->file_type) == GEANY_FILETYPES_PYTHON)
+ size += iprefs->width * get_python_indent(sci, line);
+ }
+ return size;
+}
+
+
+static void insert_indent_after_line(GeanyEditor *editor, gint line)
+{
+ ScintillaObject *sci = editor->sci;
+ gint size = get_indent_size_after_line(editor, line);
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
+
+ if (size > 0)
+ {
+ gchar *text;
+
+ text = get_whitespace(iprefs, size);
+ sci_add_text(sci, text);
+ g_free(text);
+ }
+}
+
+
static void auto_close_bracket(ScintillaObject *sci, gint pos, gchar c)
{
if (! editor_prefs.complete_snippets || SSM(sci, SCI_GETLEXER, 0, 0) != SCLEX_LATEX)
@@ -904,7 +975,7 @@
/* Finds a corresponding matching brace to the given pos
* (this is taken from Scintilla Editor.cxx,
- * fit to work with editor_close_block) */
+ * fit to work with close_block) */
static gint brace_match(ScintillaObject *sci, gint pos)
{
gchar chBrace = sci_get_char_at(sci, pos);
@@ -942,15 +1013,17 @@
/* Called after typing '}'. */
-void editor_close_block(GeanyDocument *doc, gint pos)
+static void close_block(GeanyEditor *editor, gint pos)
{
+ GeanyDocument *doc = editor->document;
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
gint x = 0, cnt = 0;
gint line, line_len, eol_char_len;
gchar *text, *line_buf;
ScintillaObject *sci;
gint line_indent, last_indent;
- if (editor_prefs.indent_mode < INDENT_CURRENTCHARS)
+ if (iprefs->auto_indent_mode < GEANY_AUTOINDENT_CURRENTCHARS)
return;
if (doc == NULL || doc->file_type == NULL)
return;
@@ -979,32 +1052,35 @@
if ((line_len - eol_char_len - 1) != cnt)
return;
- if (editor_prefs.indent_mode == INDENT_MATCHBRACES)
+ if (iprefs->auto_indent_mode == GEANY_AUTOINDENT_MATCHBRACES)
{
gint start_brace = brace_match(sci, pos);
if (start_brace >= 0)
{
gint line_start;
+ gint brace_line = sci_get_line_from_position(sci, start_brace);
+ gint size = sci_get_line_indentation(sci, brace_line);
+ gchar *ind = get_whitespace(iprefs, size);
- get_indent(doc->editor, start_brace, TRUE);
- text = g_strconcat(indent, "}", NULL);
+ text = g_strconcat(ind, "}", NULL);
line_start = sci_get_position_from_line(sci, line);
sci_set_anchor(sci, line_start);
SSM(sci, SCI_REPLACESEL, 0, (sptr_t) text);
g_free(text);
+ g_free(ind);
return;
}
/* fall through - unmatched brace (possibly because of TCL, PHP lexer bugs) */
}
- /* INDENT_CURRENTCHARS */
+ /* GEANY_AUTOINDENT_CURRENTCHARS */
line_indent = sci_get_line_indentation(sci, line);
last_indent = sci_get_line_indentation(sci, line - 1);
if (line_indent < last_indent)
return;
- line_indent -= editor_prefs.tab_width;
+ line_indent -= iprefs->width;
line_indent = MAX(0, line_indent);
sci_set_line_indentation(sci, line, line_indent);
}
@@ -1469,7 +1545,7 @@
/* get the indentation */
if (editor->auto_indent)
- get_indent(editor, pos, TRUE);
+ get_indent(editor, pos);
eol = g_strconcat(editor_get_eol_char(doc), indent, NULL);
construct = g_strdup_printf("%s\\end%s{%s}", eol, full_cmd, env);
@@ -1576,9 +1652,9 @@
return FALSE;
}
- get_indent(editor, pos, TRUE);
+ get_indent(editor, pos);
lindent = g_strconcat(editor_get_eol_char(editor->document), indent, NULL);
- whitespace = get_whitespace(editor_prefs.tab_width, editor->use_tabs);
+ whitespace = get_single_indent(editor);
/* remove the typed word, it will be added again by the used auto completion
* (not really necessary but this makes the auto completion more flexible,
@@ -1806,7 +1882,7 @@
if (SSM(sci, SCI_GETLEXER, 0, 0) != SCLEX_HTML) return;
- get_indent(editor, pos, TRUE);
+ get_indent(editor, pos);
indent_pos = sci_get_line_indent_position(sci, sci_get_line_from_position(sci, pos));
if ((pos - 7) != indent_pos) /* 7 == strlen("<table>") */
{
@@ -1825,10 +1901,10 @@
}
/* get indent string for generated code */
- if (editor_prefs.indent_mode == INDENT_NONE)
+ if (editor->auto_indent)
indent_str = g_strdup("");
else
- indent_str = get_whitespace(editor_prefs.tab_width, editor->use_tabs);
+ indent_str = get_single_indent(editor);
table = g_strconcat("\n", indent, indent_str, "<tr>\n",
indent, indent_str, indent_str, "<td>\n",
@@ -2198,7 +2274,7 @@
gint a = (first_line_was_comment) ? - co_len : co_len;
/* don't modify sel_start when the selection starts within indentation */
- get_indent(doc->editor, sel_start, TRUE);
+ get_indent(doc->editor, sel_start);
if ((sel_start - first_line_start) <= (gint) strlen(indent))
a = 0;
@@ -2434,10 +2510,11 @@
gint cur_line = sci_get_current_line(sci);
gint indent_pos = sci_get_line_indent_position(sci, cur_line);
gint indent_len = sci_get_col_from_position(sci, indent_pos);
+ gint indent_width = editor_get_indent_prefs(editor)->width;
/* if there is one too many spaces, delete the last space,
* to return to the indent used before the multiline comment was started. */
- if (indent_len % editor_prefs.tab_width == 1)
+ if (indent_len % indent_width == 1)
SSM(sci, SCI_DELETEBACKNOTLINE, 0, 0); /* remove whitespace indent */
g_free(previous_line);
return;
@@ -2704,7 +2781,7 @@
if (editor->auto_indent &&
! have_multiline_comment && doc->file_type->comment_use_indent)
{
- get_indent(editor, editor_info.click_pos, TRUE);
+ get_indent(editor, editor_info.click_pos);
text = g_strdup_printf("%s\n%s\n%s\n", indent, indent, indent);
text_len = strlen(text);
}
@@ -2764,10 +2841,23 @@
}
+/* creates and inserts one tab or whitespace of the amount of the tab width */
void editor_insert_alternative_whitespace(GeanyEditor *editor)
{
- /* creates and inserts one tab or whitespace of the amount of the tab width */
- gchar *text = get_whitespace(editor_prefs.tab_width, ! editor->use_tabs);
+ gchar *text;
+ GeanyIndentPrefs iprefs = *editor_get_indent_prefs(editor);
+
+ switch (iprefs.type)
+ {
+ case GEANY_INDENT_TYPE_TABS:
+ iprefs.type = GEANY_INDENT_TYPE_SPACES;
+ break;
+ case GEANY_INDENT_TYPE_SPACES:
+ case GEANY_INDENT_TYPE_BOTH: /* most likely we want a tab */
+ iprefs.type = GEANY_INDENT_TYPE_TABS;
+ break;
+ }
+ text = get_whitespace(&iprefs, iprefs.width);
sci_add_text(editor->sci, text);
g_free(text);
}
@@ -2951,7 +3041,7 @@
/* get previous line and use it for get_indent to use that line
* (otherwise it would fail on a line only containing "{" in advanced indentation mode) */
- get_indent(doc->editor, sci_get_position_from_line(sci, first_line - 1), TRUE);
+ get_indent(doc->editor, sci_get_position_from_line(sci, first_line - 1));
smart_line_indentation(doc, first_line, last_line);
@@ -3489,14 +3579,24 @@
}
-void editor_set_use_tabs(GeanyEditor *editor, gboolean use_tabs)
+/* Also sets indent width, tab width. */
+void editor_set_indent_type(GeanyEditor *editor, GeanyIndentType type)
{
- g_return_if_fail(editor != NULL);
+ const GeanyIndentPrefs *iprefs = editor_get_indent_prefs(editor);
+ ScintillaObject *sci = editor->sci;
+ gboolean use_tabs = type != GEANY_INDENT_TYPE_SPACES;
- editor->use_tabs = use_tabs;
- sci_set_use_tabs(editor->sci, use_tabs);
- /* remove indent spaces on backspace, if using spaces to indent */
- SSM(editor->sci, SCI_SETBACKSPACEUNINDENTS, ! use_tabs, 0);
+ editor->indent_type = type;
+ sci_set_use_tabs(sci, use_tabs);
+
+ if (type == GEANY_INDENT_TYPE_BOTH)
+ sci_set_tab_width(sci, iprefs->tab_width);
+ else
+ sci_set_tab_width(sci, iprefs->width);
+ SSM(sci, SCI_SETINDENT, iprefs->width, 0);
+
+ /* remove indent spaces on backspace, if using any spaces to indent */
+ SSM(sci, SCI_SETBACKSPACEUNINDENTS, type != GEANY_INDENT_TYPE_TABS, 0);
}
@@ -3647,17 +3747,29 @@
GeanyEditor *editor_create(GeanyDocument *doc)
{
+ const GeanyIndentPrefs *iprefs = get_default_indent_prefs();
GeanyEditor *editor = g_new0(GeanyEditor, 1);
editor->document = doc;
- editor->auto_indent = (editor_prefs.indent_mode != INDENT_NONE);
+ editor->sci = create_new_sci(doc);
+ editor_set_indent_type(editor, iprefs->type);
+ editor_set_font(editor, interface_prefs.editor_font);
+
+ editor->auto_indent = (iprefs->auto_indent_mode != GEANY_AUTOINDENT_NONE);
editor->line_wrapping = editor_prefs.line_wrapping;
editor->scroll_percent = -1.0F;
editor->line_breaking = FALSE;
-
- editor->sci = create_new_sci(doc);
- editor_set_font(editor, interface_prefs.editor_font);
return editor;
}
+
+void editor_init(void)
+{
+ static GeanyIndentPrefs indent_prefs;
+
+ memset(&editor_prefs, 0, sizeof(GeanyEditorPrefs));
+ memset(&indent_prefs, 0, sizeof(GeanyIndentPrefs));
+ editor_prefs.indentation = &indent_prefs;
+}
+
Modified: trunk/src/editor.h
===================================================================
--- trunk/src/editor.h 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/src/editor.h 2008-08-07 16:36:06 UTC (rev 2863)
@@ -45,20 +45,43 @@
#define SSM(s, m, w, l) scintilla_send_message(s, m, w, l)
+/** Whether to use tabs, spaces or both to indent. */
typedef enum
{
- INDENT_NONE = 0,
- INDENT_BASIC,
- INDENT_CURRENTCHARS,
- INDENT_MATCHBRACES
-} IndentMode;
+ GEANY_INDENT_TYPE_SPACES, /**< Spaces. */
+ GEANY_INDENT_TYPE_TABS, /**< Tabs. */
+ GEANY_INDENT_TYPE_BOTH /**< Both. */
+}
+GeanyIndentType;
-/* These are the default prefs when creating a new editor window.
- * Some of these can be overridden per document.
- * Remember to increment abi_version in plugindata.h when changing items. */
+typedef enum
+{
+ GEANY_AUTOINDENT_NONE = 0,
+ GEANY_AUTOINDENT_BASIC,
+ GEANY_AUTOINDENT_CURRENTCHARS,
+ GEANY_AUTOINDENT_MATCHBRACES
+}
+GeanyAutoIndent;
+
+
+/** Indentation prefs that might be different according to project or filetype.
+ * Use @c editor_get_indent_prefs() to lookup the prefs for a particular document. */
+typedef struct GeanyIndentPrefs
+{
+ gint width; /**< Indent width. */
+ GeanyIndentType type; /**< Whether to use tabs, spaces or both to indent. */
+ gint tab_width; /**< Width of a tab, when using GEANY_INDENT_TYPE_BOTH. */
+ GeanyAutoIndent auto_indent_mode;
+ gboolean detect_type;
+}
+GeanyIndentPrefs;
+
+
+/* Default prefs when creating a new editor window.
+ * Some of these can be overridden per document. */
typedef struct GeanyEditorPrefs
{
- /* display */
+ GeanyIndentPrefs *indentation; /*< Default indentation prefs. @see editor_get_indent_prefs(). */
gboolean show_white_space;
gboolean show_indent_guide;
gboolean show_line_endings;
@@ -69,17 +92,12 @@
gboolean show_linenumber_margin; /* view menu */
gboolean show_scrollbars; /* hidden pref */
gboolean scroll_stop_at_last_line; /* hidden pref */
-
- /* behaviour */
gboolean line_wrapping;
gboolean use_indicators;
gboolean folding;
gboolean unfold_all_children;
- gint tab_width;
- gboolean use_tabs;
- gboolean use_tab_to_indent; /* hidden pref */
- IndentMode indent_mode;
gboolean disable_dnd;
+ gboolean use_tab_to_indent; /* hidden pref makes pressing Tab key like Ctrl-I */
gboolean smart_home_key;
gboolean newline_strip;
gboolean auto_complete_symbols;
@@ -91,7 +109,6 @@
gboolean brace_match_ltgt; /* whether to highlight < and > chars (hidden pref) */
gboolean use_gtk_word_boundaries; /* hidden pref */
gboolean complete_snippets_whilst_editing; /* hidden pref */
- gboolean detect_tab_mode;
gint line_break_column;
gboolean auto_continue_multiline;
gchar *comment_toggle_mark;
@@ -109,7 +126,7 @@
gboolean auto_indent; /**< @c TRUE if auto-indentation is enabled. */
/** Percentage to scroll view by on paint, if positive. */
gfloat scroll_percent;
- gboolean use_tabs; /**< @c TRUE if tabs are used for indentation. */
+ GeanyIndentType indent_type; /* Use editor_get_indent_prefs() instead. */
gboolean line_breaking; /**< Whether to split long lines as you type. */
}
GeanyEditor;
@@ -126,14 +143,14 @@
+void editor_init(void);
+
GeanyEditor *editor_create(GeanyDocument *doc);
void on_editor_notification(GtkWidget* editor, gint scn, gpointer lscn, gpointer user_data);
gboolean editor_start_auto_complete(GeanyDocument *doc, gint pos, gboolean force);
-void editor_close_block(GeanyDocument *doc, gint pos);
-
gboolean editor_complete_snippet(GeanyDocument *doc, gint pos);
void editor_auto_latex(GeanyDocument *doc, gint pos);
@@ -217,8 +234,10 @@
void editor_insert_color(GeanyDocument *doc, const gchar *colour);
-void editor_set_use_tabs(GeanyEditor *editor, gboolean use_tabs);
+const GeanyIndentPrefs *editor_get_indent_prefs(GeanyEditor *editor);
+void editor_set_indent_type(GeanyEditor *editor, GeanyIndentType type);
+
void editor_set_line_wrapping(GeanyEditor *editor, gboolean wrap);
gboolean editor_goto_pos(GeanyEditor *editor, gint pos, gboolean mark);
Modified: trunk/src/interface.c
===================================================================
--- trunk/src/interface.c 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/src/interface.c 2008-08-07 16:36:06 UTC (rev 2863)
@@ -37,7 +37,7 @@
GtkWidget *file1_menu;
GtkWidget *menu_new1;
GtkWidget *menu_new_with_template1;
- GtkWidget *image2548;
+ GtkWidget *image2576;
GtkWidget *menu_new_with_template1_menu;
GtkWidget *invisible2;
GtkWidget *separator12;
@@ -48,11 +48,11 @@
GtkWidget *menu_save1;
GtkWidget *menu_save_as1;
GtkWidget *menu_save_all1;
- GtkWidget *image2549;
+ GtkWidget *image2577;
GtkWidget *menu_reload1;
- GtkWidget *image2550;
+ GtkWidget *image2578;
GtkWidget *menu_reload_as1;
- GtkWidget *image2551;
+ GtkWidget *image2579;
GtkWidget *menu_reload_as1_menu;
GtkWidget *invisible7;
GtkWidget *separator21;
@@ -63,9 +63,9 @@
GtkWidget *separator14;
GtkWidget *menu_close1;
GtkWidget *close_other_documents1;
- GtkWidget *image2552;
+ GtkWidget *image2580;
GtkWidget *menu_close_all1;
- GtkWidget *image2553;
+ GtkWidget *image2581;
GtkWidget *menu_separatormenuitem1;
GtkWidget *menu_quit1;
GtkWidget *edit1;
@@ -90,16 +90,16 @@
GtkWidget *menu_duplicate_line1;
GtkWidget *separator29;
GtkWidget *menu_increase_indent1;
- GtkWidget *image2554;
+ GtkWidget *image2582;
GtkWidget *menu_decrease_indent1;
- GtkWidget *image2555;
+ GtkWidget *image2583;
GtkWidget *separator37;
GtkWidget *send_selection_to2;
GtkWidget *send_selection_to2_menu;
GtkWidget *invisible13;
GtkWidget *separator18;
GtkWidget *add_comments1;
- GtkWidget *image2556;
+ GtkWidget *image2584;
GtkWidget *add_comments1_menu;
GtkWidget *menu_add_changelog_entry1;
GtkWidget *insert_file_header1;
@@ -108,11 +108,11 @@
GtkWidget *insert_gpl_notice2;
GtkWidget *insert_bsd_license_notice2;
GtkWidget *insert_date1;
- GtkWidget *image2557;
+ GtkWidget *image2585;
GtkWidget *insert_date1_menu;
GtkWidget *invisible8;
GtkWidget *insert_include2;
- GtkWidget *image2558;
+ GtkWidget *image2586;
GtkWidget *insert_include2_menu;
GtkWidget *invisible4;
GtkWidget *separator9;
@@ -124,7 +124,7 @@
GtkWidget *find_previous1;
GtkWidget *find_in_files1;
GtkWidget *replace1;
- GtkWidget *image2559;
+ GtkWidget *image2587;
GtkWidget *separator33;
GtkWidget *find_nextsel1;
GtkWidget *find_prevsel1;
@@ -133,11 +133,11 @@
GtkWidget *previous_message1;
GtkWidget *separator32;
GtkWidget *go_to_line1;
- GtkWidget *image2560;
+ GtkWidget *image2588;
GtkWidget *menu_view1;
GtkWidget *menu_view1_menu;
GtkWidget *menu_change_font1;
- GtkWidget *image2561;
+ GtkWidget *image2589;
GtkWidget *menu_separator4;
GtkWidget *menu_toggle_all_additional_widgets1;
GtkWidget *menu_fullscreen1;
@@ -160,6 +160,7 @@
GSList *tabs1_group = NULL;
GtkWidget *tabs1;
GtkWidget *spaces1;
+ GtkWidget *tabs_and_spaces1;
GtkWidget *separator45;
GtkWidget *set_file_readonly1;
GtkWidget *menu_write_unicode_bom1;
@@ -189,26 +190,26 @@
GtkWidget *menu_project1;
GtkWidget *menu_project1_menu;
GtkWidget *project_new1;
- GtkWidget *image2562;
+ GtkWidget *image2590;
GtkWidget *project_open1;
- GtkWidget *image2563;
+ GtkWidget *image2591;
GtkWidget *project_close1;
- GtkWidget *image2564;
+ GtkWidget *image2592;
GtkWidget *separator34;
GtkWidget *project_properties1;
GtkWidget *menu_build1;
GtkWidget *tools1;
GtkWidget *tools1_menu;
GtkWidget *menu_choose_color1;
- GtkWidget *image2565;
+ GtkWidget *image2593;
GtkWidget *menu_count_words1;
GtkWidget *load_tags1;
GtkWidget *menu_reload_configuration1;
- GtkWidget *image2566;
+ GtkWidget *image2594;
GtkWidget *menu_help1;
GtkWidget *menu_help1_menu;
GtkWidget *help1;
- GtkWidget *image2567;
+ GtkWidget *image2595;
GtkWidget *keyboard_shortcuts1;
GtkWidget *website1;
GtkWidget *separator16;
@@ -311,9 +312,9 @@
gtk_widget_show (menu_new_with_template1);
gtk_container_add (GTK_CONTAINER (file1_menu), menu_new_with_template1);
- image2548 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2548);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_new_with_template1), image2548);
+ image2576 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2576);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_new_with_template1), image2576);
menu_new_with_template1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_new_with_template1), menu_new_with_template1_menu);
@@ -356,25 +357,25 @@
gtk_container_add (GTK_CONTAINER (file1_menu), menu_save_all1);
gtk_tooltips_set_tip (tooltips, menu_save_all1, _("Saves all open files"), NULL);
- image2549 = gtk_image_new_from_stock ("gtk-save", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2549);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_save_all1), image2549);
+ image2577 = gtk_image_new_from_stock ("gtk-save", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2577);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_save_all1), image2577);
menu_reload1 = gtk_image_menu_item_new_with_mnemonic (_("_Reload"));
gtk_widget_show (menu_reload1);
gtk_container_add (GTK_CONTAINER (file1_menu), menu_reload1);
- image2550 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2550);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload1), image2550);
+ image2578 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2578);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload1), image2578);
menu_reload_as1 = gtk_image_menu_item_new_with_mnemonic (_("R_eload As"));
gtk_widget_show (menu_reload_as1);
gtk_container_add (GTK_CONTAINER (file1_menu), menu_reload_as1);
- image2551 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2551);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_as1), image2551);
+ image2579 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2579);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_as1), image2579);
menu_reload_as1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_reload_as1), menu_reload_as1_menu);
@@ -418,18 +419,18 @@
gtk_widget_show (close_other_documents1);
gtk_container_add (GTK_CONTAINER (file1_menu), close_other_documents1);
- image2552 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2552);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close_other_documents1), image2552);
+ image2580 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2580);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close_other_documents1), image2580);
menu_close_all1 = gtk_image_menu_item_new_with_mnemonic (_("C_lose All"));
gtk_widget_show (menu_close_all1);
gtk_container_add (GTK_CONTAINER (file1_menu), menu_close_all1);
gtk_tooltips_set_tip (tooltips, menu_close_all1, _("Closes all open files"), NULL);
- image2553 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2553);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_close_all1), image2553);
+ image2581 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2581);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_close_all1), image2581);
menu_separatormenuitem1 = gtk_separator_menu_item_new ();
gtk_widget_show (menu_separatormenuitem1);
@@ -533,17 +534,17 @@
gtk_widget_show (menu_increase_indent1);
gtk_container_add (GTK_CONTAINER (menu_format1_menu), menu_increase_indent1);
- image2554 = gtk_image_new_from_stock ("gtk-indent", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2554);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_increase_indent1), image2554);
+ image2582 = gtk_image_new_from_stock ("gtk-indent", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2582);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_increase_indent1), image2582);
menu_decrease_indent1 = gtk_image_menu_item_new_with_mnemonic (_("_Decrease Indent"));
gtk_widget_show (menu_decrease_indent1);
gtk_container_add (GTK_CONTAINER (menu_format1_menu), menu_decrease_indent1);
- image2555 = gtk_image_new_from_stock ("gtk-unindent", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2555);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_decrease_indent1), image2555);
+ image2583 = gtk_image_new_from_stock ("gtk-unindent", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2583);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_decrease_indent1), image2583);
separator37 = gtk_separator_menu_item_new ();
gtk_widget_show (separator37);
@@ -569,9 +570,9 @@
gtk_widget_show (add_comments1);
gtk_container_add (GTK_CONTAINER (edit1_menu), add_comments1);
- image2556 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2556);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_comments1), image2556);
+ image2584 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2584);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_comments1), image2584);
add_comments1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (add_comments1), add_comments1_menu);
@@ -610,9 +611,9 @@
gtk_widget_show (insert_date1);
gtk_container_add (GTK_CONTAINER (edit1_menu), insert_date1);
- image2557 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2557);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_date1), image2557);
+ image2585 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2585);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_date1), image2585);
insert_date1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (insert_date1), insert_date1_menu);
@@ -624,9 +625,9 @@
gtk_widget_show (insert_include2);
gtk_container_add (GTK_CONTAINER (edit1_menu), insert_include2);
- image2558 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2558);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_include2), image2558);
+ image2586 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2586);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_include2), image2586);
insert_include2_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (insert_include2), insert_include2_menu);
@@ -670,9 +671,9 @@
gtk_widget_show (replace1);
gtk_container_add (GTK_CONTAINER (search1_menu), replace1);
- image2559 = gtk_image_new_from_stock ("gtk-find-and-replace", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2559);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), image2559);
+ image2587 = gtk_image_new_from_stock ("gtk-find-and-replace", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2587);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), image2587);
separator33 = gtk_separator_menu_item_new ();
gtk_widget_show (separator33);
@@ -709,9 +710,9 @@
gtk_widget_show (go_to_line1);
gtk_container_add (GTK_CONTAINER (search1_menu), go_to_line1);
- image2560 = gtk_image_new_from_stock ("gtk-jump-to", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2560);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (go_to_line1), image2560);
+ image2588 = gtk_image_new_from_stock ("gtk-jump-to", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2588);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (go_to_line1), image2588);
menu_view1 = gtk_menu_item_new_with_mnemonic (_("_View"));
gtk_widget_show (menu_view1);
@@ -725,9 +726,9 @@
gtk_container_add (GTK_CONTAINER (menu_view1_menu), menu_change_font1);
gtk_tooltips_set_tip (tooltips, menu_change_font1, _("Change the default font"), NULL);
- image2561 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2561);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_change_font1), image2561);
+ image2589 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2589);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_change_font1), image2589);
menu_separator4 = gtk_separator_menu_item_new ();
gtk_widget_show (menu_separator4);
@@ -829,6 +830,11 @@
gtk_container_add (GTK_CONTAINER (indent_type1_menu), spaces1);
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (spaces1), TRUE);
+ tabs_and_spaces1 = gtk_radio_menu_item_new_with_mnemonic (tabs1_group, _("T_abs and Spaces"));
+ tabs1_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (tabs_and_spaces1));
+ gtk_widget_show (tabs_and_spaces1);
+ gtk_container_add (GTK_CONTAINER (indent_type1_menu), tabs_and_spaces1);
+
separator45 = gtk_separator_menu_item_new ();
gtk_widget_show (separator45);
gtk_container_add (GTK_CONTAINER (menu_document1_menu), separator45);
@@ -952,25 +958,25 @@
gtk_widget_show (project_new1);
gtk_container_add (GTK_CONTAINER (menu_project1_menu), project_new1);
- image2562 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2562);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_new1), image2562);
+ image2590 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2590);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_new1), image2590);
project_open1 = gtk_image_menu_item_new_with_mnemonic (_("_Open"));
gtk_widget_show (project_open1);
gtk_container_add (GTK_CONTAINER (menu_project1_menu), project_open1);
- image2563 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2563);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_open1), image2563);
+ image2591 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2591);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_open1), image2591);
project_close1 = gtk_image_menu_item_new_with_mnemonic (_("_Close"));
gtk_widget_show (project_close1);
gtk_container_add (GTK_CONTAINER (menu_project1_menu), project_close1);
- image2564 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2564);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_close1), image2564);
+ image2592 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2592);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_close1), image2592);
separator34 = gtk_separator_menu_item_new ();
gtk_widget_show (separator34);
@@ -997,9 +1003,9 @@
gtk_container_add (GTK_CONTAINER (tools1_menu), menu_choose_color1);
gtk_tooltips_set_tip (tooltips, menu_choose_color1, _("Open a color chooser dialog, to interactively pick colors from a palette."), NULL);
- image2565 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2565);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_choose_color1), image2565);
+ image2593 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2593);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_choose_color1), image2593);
menu_count_words1 = gtk_menu_item_new_with_mnemonic (_("_Word Count"));
gtk_widget_show (menu_count_words1);
@@ -1016,9 +1022,9 @@
gtk_container_add (GTK_CONTAINER (tools1_menu), menu_reload_configuration1);
gtk_tooltips_set_tip (tooltips, menu_reload_configuration1, _("Reload configuration data like snippets, templates and filetype extensions."), NULL);
- image2566 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2566);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_configuration1), image2566);
+ image2594 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2594);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_configuration1), image2594);
menu_help1 = gtk_menu_item_new_with_mnemonic (_("_Help"));
gtk_widget_show (menu_help1);
@@ -1031,9 +1037,9 @@
gtk_widget_show (help1);
gtk_container_add (GTK_CONTAINER (menu_help1_menu), help1);
- image2567 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image2567);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image2567);
+ image2595 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image2595);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image2595);
keyboard_shortcuts1 = gtk_menu_item_new_with_mnemonic (_("_Keyboard Shortcuts"));
gtk_widget_show (keyboard_shortcuts1);
@@ -1556,6 +1562,9 @@
g_signal_connect ((gpointer) spaces1, "activate",
G_CALLBACK (on_spaces1_activate),
NULL);
+ g_signal_connect ((gpointer) tabs_and_spaces1, "activate",
+ G_CALLBACK (on_tabs_and_spaces1_activate),
+ NULL);
g_signal_connect ((gpointer) set_file_readonly1, "toggled",
G_CALLBACK (on_set_file_readonly1_toggled),
NULL);
@@ -1734,7 +1743,7 @@
GLADE_HOOKUP_OBJECT (window1, file1_menu, "file1_menu");
GLADE_HOOKUP_OBJECT (window1, menu_new1, "menu_new1");
GLADE_HOOKUP_OBJECT (window1, menu_new_with_template1, "menu_new_with_template1");
- GLADE_HOOKUP_OBJECT (window1, image2548, "image2548");
+ GLADE_HOOKUP_OBJECT (window1, image2576, "image2576");
GLADE_HOOKUP_OBJECT (window1, menu_new_with_template1_menu, "menu_new_with_template1_menu");
GLADE_HOOKUP_OBJECT (window1, invisible2, "invisible2");
GLADE_HOOKUP_OBJECT (window1, separator12, "separator12");
@@ -1745,11 +1754,11 @@
GLADE_HOOKUP_OBJECT (window1, menu_save1, "menu_save1");
GLADE_HOOKUP_OBJECT (window1, menu_save_as1, "menu_save_as1");
GLADE_HOOKUP_OBJECT (window1, menu_save_all1, "menu_save_all1");
- GLADE_HOOKUP_OBJECT (window1, image2549, "image2549");
+ GLADE_HOOKUP_OBJECT (window1, image2577, "image2577");
GLADE_HOOKUP_OBJECT (window1, menu_reload1, "menu_reload1");
- GLADE_HOOKUP_OBJECT (window1, image2550, "image2550");
+ GLADE_HOOKUP_OBJECT (window1, image2578, "image2578");
GLADE_HOOKUP_OBJECT (window1, menu_reload_as1, "menu_reload_as1");
- GLADE_HOOKUP_OBJECT (window1, image2551, "image2551");
+ GLADE_HOOKUP_OBJECT (window1, image2579, "image2579");
GLADE_HOOKUP_OBJECT (window1, menu_reload_as1_menu, "menu_reload_as1_menu");
GLADE_HOOKUP_OBJECT (window1, invisible7, "invisible7");
GLADE_HOOKUP_OBJECT (window1, separator21, "separator21");
@@ -1760,9 +1769,9 @@
GLADE_HOOKUP_OBJECT (window1, separator14, "separator14");
GLADE_HOOKUP_OBJECT (window1, menu_close1, "menu_close1");
GLADE_HOOKUP_OBJECT (window1, close_other_documents1, "close_other_documents1");
- GLADE_HOOKUP_OBJECT (window1, image2552, "image2552");
+ GLADE_HOOKUP_OBJECT (window1, image2580, "image2580");
GLADE_HOOKUP_OBJECT (window1, menu_close_all1, "menu_close_all1");
- GLADE_HOOKUP_OBJECT (window1, image2553, "image2553");
+ GLADE_HOOKUP_OBJECT (window1, image2581, "image2581");
GLADE_HOOKUP_OBJECT (window1, menu_separatormenuitem1, "menu_separatormenuitem1");
GLADE_HOOKUP_OBJECT (window1, menu_quit1, "menu_quit1");
GLADE_HOOKUP_OBJECT (window1, edit1, "edit1");
@@ -1787,16 +1796,16 @@
GLADE_HOOKUP_OBJECT (window1, menu_duplicate_line1, "menu_duplicate_line1");
GLADE_HOOKUP_OBJECT (window1, separator29, "separator29");
GLADE_HOOKUP_OBJECT (window1, menu_increase_indent1, "menu_increase_indent1");
- GLADE_HOOKUP_OBJECT (window1, image2554, "image2554");
+ GLADE_HOOKUP_OBJECT (window1, image2582, "image2582");
GLADE_HOOKUP_OBJECT (window1, menu_decrease_indent1, "menu_decrease_indent1");
- GLADE_HOOKUP_OBJECT (window1, image2555, "image2555");
+ GLADE_HOOKUP_OBJECT (window1, image2583, "image2583");
GLADE_HOOKUP_OBJECT (window1, separator37, "separator37");
GLADE_HOOKUP_OBJECT (window1, send_selection_to2, "send_selection_to2");
GLADE_HOOKUP_OBJECT (window1, send_selection_to2_menu, "send_selection_to2_menu");
GLADE_HOOKUP_OBJECT (window1, invisible13, "invisible13");
GLADE_HOOKUP_OBJECT (window1, separator18, "separator18");
GLADE_HOOKUP_OBJECT (window1, add_comments1, "add_comments1");
- GLADE_HOOKUP_OBJECT (window1, image2556, "image2556");
+ GLADE_HOOKUP_OBJECT (window1, image2584, "image2584");
GLADE_HOOKUP_OBJECT (window1, add_comments1_menu, "add_comments1_menu");
GLADE_HOOKUP_OBJECT (window1, menu_add_changelog_entry1, "menu_add_changelog_entry1");
GLADE_HOOKUP_OBJECT (window1, insert_file_header1, "insert_file_header1");
@@ -1805,11 +1814,11 @@
GLADE_HOOKUP_OBJECT (window1, insert_gpl_notice2, "insert_gpl_notice2");
GLADE_HOOKUP_OBJECT (window1, insert_bsd_license_notice2, "insert_bsd_license_notice2");
GLADE_HOOKUP_OBJECT (window1, insert_date1, "insert_date1");
- GLADE_HOOKUP_OBJECT (window1, image2557, "image2557");
+ GLADE_HOOKUP_OBJECT (window1, image2585, "image2585");
GLADE_HOOKUP_OBJECT (window1, insert_date1_menu, "insert_date1_menu");
GLADE_HOOKUP_OBJECT (window1, invisible8, "invisible8");
GLADE_HOOKUP_OBJECT (window1, insert_include2, "insert_include2");
- GLADE_HOOKUP_OBJECT (window1, image2558, "image2558");
+ GLADE_HOOKUP_OBJECT (window1, image2586, "image2586");
GLADE_HOOKUP_OBJECT (window1, insert_include2_menu, "insert_include2_menu");
GLADE_HOOKUP_OBJECT (window1, invisible4, "invisible4");
GLADE_HOOKUP_OBJECT (window1, separator9, "separator9");
@@ -1821,7 +1830,7 @@
GLADE_HOOKUP_OBJECT (window1, find_previous1, "find_previous1");
GLADE_HOOKUP_OBJECT (window1, find_in_files1, "find_in_files1");
GLADE_HOOKUP_OBJECT (window1, replace1, "replace1");
- GLADE_HOOKUP_OBJECT (window1, image2559, "image2559");
+ GLADE_HOOKUP_OBJECT (window1, image2587, "image2587");
GLADE_HOOKUP_OBJECT (window1, separator33, "separator33");
GLADE_HOOKUP_OBJECT (window1, find_nextsel1, "find_nextsel1");
GLADE_HOOKUP_OBJECT (window1, find_prevsel1, "find_prevsel1");
@@ -1830,11 +1839,11 @@
GLADE_HOOKUP_OBJECT (window1, previous_message1, "previous_message1");
GLADE_HOOKUP_OBJECT (window1, separator32, "separator32");
GLADE_HOOKUP_OBJECT (window1, go_to_line1, "go_to_line1");
- GLADE_HOOKUP_OBJECT (window1, image2560, "image2560");
+ GLADE_HOOKUP_OBJECT (window1, image2588, "image2588");
GLADE_HOOKUP_OBJECT (window1, menu_view1, "menu_view1");
GLADE_HOOKUP_OBJECT (window1, menu_view1_menu, "menu_view1_menu");
GLADE_HOOKUP_OBJECT (window1, menu_change_font1, "menu_change_font1");
- GLADE_HOOKUP_OBJECT (window1, image2561, "image2561");
+ GLADE_HOOKUP_OBJECT (window1, image2589, "image2589");
GLADE_HOOKUP_OBJECT (window1, menu_separator4, "menu_separator4");
GLADE_HOOKUP_OBJECT (window1, menu_toggle_all_additional_widgets1, "menu_toggle_all_additional_widgets1");
GLADE_HOOKUP_OBJECT (window1, menu_fullscreen1, "menu_fullscreen1");
@@ -1856,6 +1865,7 @@
GLADE_HOOKUP_OBJECT (window1, indent_type1_menu, "indent_type1_menu");
GLADE_HOOKUP_OBJECT (window1, tabs1, "tabs1");
GLADE_HOOKUP_OBJECT (window1, spaces1, "spaces1");
+ GLADE_HOOKUP_OBJECT (window1, tabs_and_spaces1, "tabs_and_spaces1");
GLADE_HOOKUP_OBJECT (window1, separator45, "separator45");
GLADE_HOOKUP_OBJECT (window1, set_file_readonly1, "set_file_readonly1");
GLADE_HOOKUP_OBJECT (window1, menu_write_unicode_bom1, "menu_write_unicode_bom1");
@@ -1884,26 +1894,26 @@
GLADE_HOOKUP_OBJECT (window1, menu_project1, "menu_project1");
GLADE_HOOKUP_OBJECT (window1, menu_project1_menu, "menu_project1_menu");
GLADE_HOOKUP_OBJECT (window1, project_new1, "project_new1");
- GLADE_HOOKUP_OBJECT (window1, image2562, "image2562");
+ GLADE_HOOKUP_OBJECT (window1, image2590, "image2590");
GLADE_HOOKUP_OBJECT (window1, project_open1, "project_open1");
- GLADE_HOOKUP_OBJECT (window1, image2563, "image2563");
+ GLADE_HOOKUP_OBJECT (window1, image2591, "image2591");
GLADE_HOOKUP_OBJECT (window1, project_close1, "project_close1");
- GLADE_HOOKUP_OBJECT (window1, image2564, "image2564");
+ GLADE_HOOKUP_OBJECT (window1, image2592, "image2592");
GLADE_HOOKUP_OBJECT (window1, separator34, "separator34");
GLADE_HOOKUP_OBJECT (window1, project_properties1, "project_properties1");
GLADE_HOOKUP_OBJECT (window1, menu_build1, "menu_build1");
GLADE_HOOKUP_OBJECT (window1, tools1, "tools1");
GLADE_HOOKUP_OBJECT (window1, tools1_menu, "tools1_menu");
GLADE_HOOKUP_OBJECT (window1, menu_choose_color1, "menu_choose_color1");
- GLADE_HOOKUP_OBJECT (window1, image2565, "image2565");
+ GLADE_HOOKUP_OBJECT (window1, image2593, "image2593");
GLADE_HOOKUP_OBJECT (window1, menu_count_words1, "menu_count_words1");
GLADE_HOOKUP_OBJECT (window1, load_tags1, "load_tags1");
GLADE_HOOKUP_OBJECT (window1, menu_reload_configuration1, "menu_reload_configuration1");
- GLADE_HOOKUP_OBJECT (window1, image2566, "image2566");
+ GLADE_HOOKUP_OBJECT (window1, image2594, "image2594");
GLADE_HOOKUP_OBJECT (window1, menu_help1, "menu_help1");
GLADE_HOOKUP_OBJECT (window1, menu_help1_menu, "menu_help1_menu");
GLADE_HOOKUP_OBJECT (window1, help1, "help1");
- GLADE_HOOKUP_OBJECT (window1, image2567, "image2567");
+ GLADE_HOOKUP_OBJECT (window1, image2595, "image2595");
GLADE_HOOKUP_OBJECT (window1, keyboard_shortcuts1, "keyboard_shortcuts1");
GLADE_HOOKUP_OBJECT (window1, website1, "website1");
GLADE_HOOKUP_OBJECT (window1, separator16, "separator16");
@@ -2669,14 +2679,19 @@
GtkWidget *table13;
GtkWidget *label183;
GtkWidget *combo_auto_indent_mode;
+ GtkWidget *label200;
+ GtkWidget *label222;
+ GtkObject *spin_indent_width_adj;
+ GtkWidget *spin_indent_width;
+ GtkWidget *radio_indent_spaces;
+ GSList *radio_indent_spaces_group = NULL;
+ GtkWidget *radio_indent_tabs;
+ GtkWidget *radio_indent_both;
+ GtkWidget *alignment41;
+ GtkWidget *hbox13;
+ GtkWidget *label221;
GtkObject *spin_tab_width_adj;
GtkWidget *spin_tab_width;
- GtkWidget *label116;
- GtkWidget *hbox8;
- GtkWidget *radio_indent_tabs;
- GSList *radio_indent_tabs_group = NULL;
- GtkWidget *radio_indent_spaces;
- GtkWidget *label200;
GtkWidget *check_detect_indent;
GtkWidget *label195;
GtkWidget *frame14;
@@ -3595,7 +3610,7 @@
gtk_widget_show (vbox25);
gtk_container_add (GTK_CONTAINER (alignment30), vbox25);
- table13 = gtk_table_new (4, 2, FALSE);
+ table13 = gtk_table_new (7, 2, FALSE);
gtk_widget_show (table13);
gtk_box_pack_start (GTK_BOX (vbox25), table13, FALSE, TRUE, 0);
gtk_table_set_row_spacings (GTK_TABLE (table13), 3);
@@ -3603,13 +3618,14 @@
label183 = gtk_label_new (_("Auto-indent mode:"));
gtk_widget_show (label183);
- gtk_table_attach (GTK_TABLE (table13), label183, 0, 1, 3, 4,
+ gtk_table_attach (GTK_TABLE (table13), label183, 0, 1, 6, 7,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label183), 0, 0.5);
combo_auto_indent_mode = gtk_combo_box_new_text ();
gtk_widget_show (combo_auto_indent_mode);
- gtk_table_attach (GTK_TABLE (table13), combo_auto_indent_mode, 1, 2, 3, 4,
+ gtk_table_attach (GTK_TABLE (table13), combo_auto_indent_mode, 1, 2, 6, 7,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (GTK_FILL), 0, 0);
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_auto_indent_mode), _("None"));
@@ -3617,54 +3633,85 @@
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_auto_indent_mode), _("Current chars"));
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_auto_indent_mode), _("Match braces"));
- spin_tab_width_adj = gtk_adjustment_new (1, 1, 99, 1, 10, 10);
- spin_tab_width = gtk_spin_button_new (GTK_ADJUSTMENT (spin_tab_width_adj), 1, 0);
- gtk_widget_show (spin_tab_width);
- gtk_table_attach (GTK_TABLE (table13), spin_tab_width, 1, 2, 2, 3,
+ label200 = gtk_label_new (_("Type:"));
+ gtk_widget_show (label200);
+ gtk_table_attach (GTK_TABLE (table13), label200, 0, 1, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- gtk_tooltips_set_tip (tooltips, spin_tab_width, _("The width in chars, which one tab character will take"), NULL);
- gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin_tab_width), TRUE);
- gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spin_tab_width), GTK_UPDATE_IF_VALID);
- gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin_tab_width), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label200), 0, 0.5);
- label116 = gtk_label_new (_("Tab width:"));
- gtk_widget_show (label116);
- gtk_table_attach (GTK_TABLE (table13), label116, 0, 1, 2, 3,
+ label222 = gtk_label_new (_("Width:"));
+ gtk_widget_show (label222);
+ gtk_table_attach (GTK_TABLE (table13), label222, 0, 1, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label116), 0, 0.5);
+ gtk_misc_set_alignment (GTK_MISC (label222), 0, 0.5);
- hbox8 = gtk_hbox_new (FALSE, 12);
- gtk_widget_show (hbox8);
- gtk_table_attach (GTK_TABLE (table13), hbox8, 1, 2, 0, 1,
+ spin_indent_width_adj = gtk_adjustment_new (1, 1, 99, 1, 10, 10);
+ spin_indent_width = gtk_spin_button_new (GTK_ADJUSTMENT (spin_indent_width_adj), 1, 0);
+ gtk_widget_show (spin_indent_width);
+ gtk_table_attach (GTK_TABLE (table13), spin_indent_width, 1, 2, 0, 1,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_tooltips_set_tip (tooltips, spin_indent_width, _("The width in chars of a single indent"), NULL);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin_indent_width), TRUE);
+ gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spin_indent_width), GTK_UPDATE_IF_VALID);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin_indent_width), TRUE);
+
+ radio_indent_spaces = gtk_radio_button_new_with_mnemonic (NULL, _("_Spaces"));
+ gtk_widget_show (radio_indent_spaces);
+ gtk_table_attach (GTK_TABLE (table13), radio_indent_spaces, 1, 2, 2, 3,
(GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_tooltips_set_tip (tooltips, radio_indent_spaces, _("Use spaces when inserting indentation"), NULL);
+ gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_indent_spaces), radio_indent_spaces_group);
+ radio_indent_spaces_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_indent_spaces));
radio_indent_tabs = gtk_radio_button_new_with_mnemonic (NULL, _("_Tabs"));
gtk_widget_show (radio_indent_tabs);
- gtk_box_pack_start (GTK_BOX (hbox8), radio_indent_tabs, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, radio_indent_tabs, _("Whether to use tabs or spaces when indentation is inserted."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_indent_tabs), radio_indent_tabs_group);
- radio_indent_tabs_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_indent_tabs));
+ gtk_table_attach (GTK_TABLE (table13), radio_indent_tabs, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_tooltips_set_tip (tooltips, radio_indent_tabs, _("Use one tab per indent"), NULL);
+ gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_indent_tabs), radio_indent_spaces_group);
+ radio_indent_spaces_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_indent_tabs));
- radio_indent_spaces = gtk_radio_button_new_with_mnemonic (NULL, _("_Spaces"));
- gtk_widget_show (radio_indent_spaces);
- gtk_box_pack_start (GTK_BOX (hbox8), radio_indent_spaces, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, radio_indent_spaces, _("Whether to use tabs or spaces when indentation is inserted."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_indent_spaces), radio_indent_tabs_group);
- radio_indent_tabs_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_indent_spaces));
-
- label200 = gtk_label_new (_("Type:"));
- gtk_widget_show (label200);
- gtk_table_attach (GTK_TABLE (table13), label200, 0, 1, 0, 1,
+ radio_indent_both = gtk_radio_button_new_with_mnemonic (NULL, _("T_abs and Spaces"));
+ gtk_widget_show (radio_indent_both);
+ gtk_table_attach (GTK_TABLE (table13), radio_indent_both, 1, 2, 3, 4,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label200), 0, 0.5);
+ gtk_tooltips_set_tip (tooltips, radio_indent_both, _("Use spaces if the total indent is less than the tab width, otherwise use both"), NULL);
+ gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_indent_both), radio_indent_spaces_group);
+ radio_indent_spaces_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_indent_both));
+ alignment41 = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_show (alignment41);
+ gtk_table_attach (GTK_TABLE (table13), alignment41, 1, 2, 4, 5,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment41), 0, 0, 24, 0);
+
+ hbox13 = gtk_hbox_new (FALSE, 12);
+ gtk_widget_show (hbox13);
+ gtk_container_add (GTK_CONTAINER (alignment41), hbox13);
+
+ label221 = gtk_label_new (_("Tab Width:"));
+ gtk_widget_show (label221);
+ gtk_box_pack_start (GTK_BOX (hbox13), label221, FALSE, FALSE, 0);
+
+ spin_tab_width_adj = gtk_adjustment_new (8, 1, 99, 1, 10, 10);
+ spin_tab_width = gtk_spin_button_new (GTK_ADJUSTMENT (spin_tab_width_adj), 1, 0);
+ gtk_widget_show (spin_tab_width);
+ gtk_box_pack_start (GTK_BOX (hbox13), spin_tab_width, TRUE, TRUE, 0);
+ gtk_tooltips_set_tip (tooltips, spin_tab_width, _("The width of a tab when Tabs & Spaces is set for a document"), NULL);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin_tab_width), TRUE);
+ gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spin_tab_width), GTK_UPDATE_IF_VALID);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin_tab_width), TRUE);
+
check_detect_indent = gtk_check_button_new_with_mnemonic (_("Detect from file"));
gtk_widget_show (check_detect_indent);
- gtk_table_attach (GTK_TABLE (table13), check_detect_indent, 1, 2, 1, 2,
+ gtk_table_attach (GTK_TABLE (table13), check_detect_indent, 1, 2, 5, 6,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, check_detect_indent, _("Whether to detect the indentation type from file contents when a file is opened."), NULL);
@@ -4766,6 +4813,10 @@
gtk_dialog_add_action_widget (GTK_DIALOG (prefs_dialog), button5, GTK_RESPONSE_OK);
GTK_WIDGET_SET_FLAGS (button5, GTK_CAN_DEFAULT);
+ g_signal_connect ((gpointer) radio_indent_both, "toggled",
+ G_CALLBACK (on_radio_indent_both_toggled),
+ NULL);
+
/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (prefs_dialog, prefs_dialog, "prefs_dialog");
GLADE_HOOKUP_OBJECT_NO_REF (prefs_dialog, dialog_vbox3, "dialog_vbox3");
@@ -4893,12 +4944,16 @@
GLADE_HOOKUP_OBJECT (prefs_dialog, table13, "table13");
GLADE_HOOKUP_OBJECT (prefs_dialog, label183, "label183");
GLADE_HOOKUP_OBJECT (prefs_dialog, combo_auto_indent_mode, "combo_auto_indent_mode");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, label200, "label200");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, label222, "label222");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, spin_indent_width, "spin_indent_width");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, radio_indent_spaces, "radio_indent_spaces");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, radio_indent_tabs, "radio_indent_tabs");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, radio_indent_both, "radio_indent_both");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, alignment41, "alignment41");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, hbox13, "hbox13");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, label221, "label221");
GLADE_HOOKUP_OBJECT (prefs_dialog, spin_tab_width, "spin_tab_width");
- GLADE_HOOKUP_OBJECT (prefs_dialog, label116, "label116");
- GLADE_HOOKUP_OBJECT (prefs_dialog, hbox8, "hbox8");
- GLADE_HOOKUP_OBJECT (prefs_dialog, radio_indent_tabs, "radio_indent_tabs");
- GLADE_HOOKUP_OBJECT (prefs_dialog, radio_indent_spaces, "radio_indent_spaces");
- GLADE_HOOKUP_OBJECT (prefs_dialog, label200, "label200");
GLADE_HOOKUP_OBJECT (prefs_dialog, check_detect_indent, "check_detect_indent");
GLADE_HOOKUP_OBJECT (prefs_dialog, label195, "label195");
GLADE_HOOKUP_OBJECT (prefs_dialog, frame14, "frame14");
Modified: trunk/src/keyfile.c
===================================================================
--- trunk/src/keyfile.c 2008-08-07 15:32:56 UTC (rev 2862)
+++ trunk/src/keyfile.c 2008-08-07 16:36:06 UTC (rev 2863)
@@ -89,27 +89,107 @@
static gint vpan_position;
-/* Used in e.g. save_bool_prefs(). */
+typedef enum SettingCallbackAction
+{
+ SETTING_READ,
+ SETTING_WRITE
+}
+SettingCallbackAction;
+
+
typedef struct SettingEntry
{
+ gpointer setting;
const gchar *group;
const gchar *key_name;
- gpointer setting;
gpointer default_value;
}
SettingEntry;
-static SettingEntry bool_prefs[] =
+
+static void bool_settings_foreach(GKeyFile *config, SettingCallbackAction action)
{
- {PACKAGE, "cmdline_new_files", &file_prefs.cmdline_new_files, GINT_TO_POINTER(TRUE)},
+ guint i;
+ SettingEntry items[] =
+ {
+ {&file_prefs.cmdline_new_files, PACKAGE, "cmdline_new_files", (gpointer)TRUE},
- {PACKAGE, "pref_main_suppress_search_dialogs", &search_prefs.suppress_dialogs, GINT_TO_POINTER(FALSE)},
- {PACKAGE, "pref_main_search_use_current_word", &search_prefs.use_current_word, GINT_TO_POINTER(TRUE)},
- {"search", "pref_search_current_file_dir", &search_prefs.use_current_file_dir, GINT_TO_POINTER(TRUE)},
- {NULL, NULL, NULL, NULL} /* must be terminated */
+ {&search_prefs.suppress_dialogs, PACKAGE, "pref_main_suppress_search_dialogs", (gpointer)FALSE},
+ {&search_prefs.use_current_word, PACKAGE, "pref_main_search_use_current_word", (gpointer)TRUE},
+ {&search_prefs.use_current_file_dir, "search", "pref_search_current_file_dir", (gpointer)TRUE},
+
+ {&editor_prefs.indentation->detect_type, PACKAGE, "check_detect_indent", (gpointer)FALSE},
+ };
+
+ for (i = 0; i < G_N_ELEMENTS(items); i++)
+ {
+ SettingEntry *se = &items[i];
+ gboolean *setting = se->setting;
+
+ switch (action)
+ {
+ case SETTING_READ:
+ *setting = utils_get_setting_boolean(config, se->group, se->key_name,
+ GPOINTER_TO_INT(se->default_value));
+ break;
+ case SETTING_WRITE:
+ g_key_file_set_boolean(config, se->group, se->key_name, *setting);
+ break;
+ }
+ }
+}
+
+
+static void int_settings_foreach(GKeyFile *config, SettingCallbackAction action)
+{
+ guint i;
+ SettingEntry items[] =
+ {
+ {&editor_prefs.indentation->width, PACKAGE, "pref_editor_tab_width", (gpointer)4},
+ {&editor_prefs.indentation->tab_width, PACKAGE, "indent_tab_width", (gpointer)8},
+ {&editor_prefs.indentation->auto_indent_mode, PACKAGE, "indent_mode",
+ (gpointer)GEANY_AUTOINDENT_CURRENTCHARS},
+ {&editor_prefs.indentation->type, PACKAGE, "indent_type", (gpointer)GEANY_INDENT_TYPE_TABS},
+ };
+
+ for (i = 0; i < G_N_ELEMENTS(items); i++)
+ {
+ SettingEntry *se = &items[i];
+ gboolean *setting = se->setting;
+
+ switch (action)
+ {
+ case SETTING_READ:
+ *setting = utils_get_setting_integer(config, se->group, se->key_name,
+ GPOINTER_TO_INT(se->default_value));
+ break;
+ case SETTING_WRITE:
+ g_key_file_set_integer(config, se->group, se->key_name, *setting);
+ break;
+ }
+ }
+}
+
+
+typedef void (*SettingItemsCallback)(GKeyFile *config, SettingCallbackAction action);
+
+/* List of functions which hold the SettingEntry arrays. These allow access to
+ * runtime setting fields like EditorPrefs::indentation->width. */
+SettingItemsCallback setting_item_callbacks[] = {
+ bool_settings_foreach,
+ int_settings_foreach
};
+static void settings_action(GKeyFile *config, SettingCallbackAction action)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS(setting_item_callbacks); i++)
+ setting_item_callbacks[i](config, action);
+}
+
+
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list