SF.net SVN: geany:[3423] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Sat Dec 27 12:55:04 UTC 2008
Revision: 3423
http://geany.svn.sourceforge.net/geany/?rev=3423&view=rev
Author: ntrel
Date: 2008-12-27 12:55:04 +0000 (Sat, 27 Dec 2008)
Log Message:
-----------
Add Project Indentation prefs, which override the Editor
Preferences dialog options. For new projects, these default to the
editor indent prefs.
- Plugins:
For compatibility with this change, use editor_get_indent_prefs().
- Code changes:
The Project Properties dialog is now created by Glade, but (for
now) the existing options are added manually.
Add GeanyProjectPrivate project field.
Add stash_group_set_use_defaults().
Modified Paths:
--------------
trunk/ChangeLog
trunk/geany.glade
trunk/src/Makefile.am
trunk/src/editor.c
trunk/src/interface.c
trunk/src/interface.h
trunk/src/main.c
trunk/src/project.c
trunk/src/project.h
trunk/src/stash.c
trunk/src/stash.h
Added Paths:
-----------
trunk/src/projectprivate.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/ChangeLog 2008-12-27 12:55:04 UTC (rev 3423)
@@ -1,3 +1,20 @@
+2008-12-27 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/interface.c, src/interface.h, src/project.c, src/project.h,
+ src/projectprivate.h, src/stash.c, src/stash.h, src/main.c,
+ src/editor.c, src/Makefile.am, geany.glade:
+ Add Project Indentation prefs, which override the Editor
+ Preferences dialog options. For new projects, these default to the
+ editor indent prefs.
+ - Plugins:
+ For compatibility with this change, use editor_get_indent_prefs().
+ - Code changes:
+ The Project Properties dialog is now created by Glade, but (for
+ now) the existing options are added manually.
+ Add GeanyProjectPrivate project field.
+ Add stash_group_set_use_defaults().
+
+
2008-12-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/stash.c, src/stash.h, src/keyfile.c:
Modified: trunk/geany.glade
===================================================================
--- trunk/geany.glade 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/geany.glade 2008-12-27 12:55:04 UTC (rev 3423)
@@ -8897,4 +8897,418 @@
</child>
</widget>
+<widget class="GtkDialog" id="project_dialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Project Properties</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="cancelbutton1">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="okbutton1">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkNotebook" id="project_notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">True</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+
+ <child>
+ <widget class="GtkTable" id="table17">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">7</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">3</property>
+ <property name="column_spacing">24</property>
+
+ <child>
+ <widget class="GtkLabel" id="label228">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Auto-indent mode:</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">0</property>
+ <property name="right_attach">1</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>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="combo_auto_indent_mode">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">None
+Basic
+Current chars
+Match braces</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</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="GtkLabel" id="label229">
+ <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="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">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="label230">
+ <property name="visible">True</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>
+ <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">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 0</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>
+ <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">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_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>
+ </widget>
+ <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="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment44">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</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="hbox14">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label231">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hard 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 0</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">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>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="check_detect_indent">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Whether to detect the indentation type from file contents when a file is opened.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Detect from file</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">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label227">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Indentation</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="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
</glade-interface>
Modified: trunk/src/Makefile.am
===================================================================
--- trunk/src/Makefile.am 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/Makefile.am 2008-12-27 12:55:04 UTC (rev 3423)
@@ -3,7 +3,7 @@
EXTRA_DIST = images.c gb.c win32.c win32.h plugindata.h \
- documentprivate.h
+ documentprivate.h projectprivate.h
bin_PROGRAMS = geany
Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/editor.c 2008-12-27 12:55:04 UTC (rev 3423)
@@ -57,6 +57,8 @@
#include "geanyobject.h"
#include "templates.h"
#include "keybindings.h"
+#include "project.h"
+#include "projectprivate.h"
/* Note: Avoid using SSM in files not related to scintilla, use sciwrappers.h instead. */
@@ -817,8 +819,10 @@
static const GeanyIndentPrefs *
get_default_indent_prefs(void)
{
- /* In future this might depend on the current project. */
- return editor_prefs.indentation;
+ static GeanyIndentPrefs iprefs;
+
+ iprefs = app->project ? *app->project->priv->indentation : *editor_prefs.indentation;
+ return &iprefs;
}
Modified: trunk/src/interface.c
===================================================================
--- trunk/src/interface.c 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/interface.c 2008-12-27 12:55:04 UTC (rev 3423)
@@ -4848,3 +4848,197 @@
return prefs_dialog;
}
+GtkWidget*
+create_project_dialog (void)
+{
+ GtkWidget *project_dialog;
+ GtkWidget *dialog_vbox4;
+ GtkWidget *project_notebook;
+ GtkWidget *table17;
+ GtkWidget *label228;
+ GtkWidget *combo_auto_indent_mode;
+ GtkWidget *label229;
+ GtkWidget *label230;
+ 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 *alignment44;
+ GtkWidget *hbox14;
+ GtkWidget *label231;
+ GtkObject *spin_tab_width_adj;
+ GtkWidget *spin_tab_width;
+ GtkWidget *check_detect_indent;
+ GtkWidget *label227;
+ GtkWidget *dialog_action_area4;
+ GtkWidget *cancelbutton1;
+ GtkWidget *okbutton1;
+ GtkTooltips *tooltips;
+
+ tooltips = gtk_tooltips_new ();
+
+ project_dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (project_dialog), _("Project Properties"));
+ gtk_window_set_type_hint (GTK_WINDOW (project_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ dialog_vbox4 = GTK_DIALOG (project_dialog)->vbox;
+ gtk_widget_show (dialog_vbox4);
+
+ project_notebook = gtk_notebook_new ();
+ gtk_widget_show (project_notebook);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox4), project_notebook, TRUE, TRUE, 0);
+
+ table17 = gtk_table_new (7, 2, FALSE);
+ gtk_widget_show (table17);
+ gtk_container_add (GTK_CONTAINER (project_notebook), table17);
+ gtk_container_set_border_width (GTK_CONTAINER (table17), 6);
+ gtk_table_set_row_spacings (GTK_TABLE (table17), 3);
+ gtk_table_set_col_spacings (GTK_TABLE (table17), 24);
+
+ label228 = gtk_label_new (_("Auto-indent mode:"));
+ gtk_widget_show (label228);
+ gtk_table_attach (GTK_TABLE (table17), label228, 0, 1, 6, 7,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label228), 0, 0.5);
+
+ combo_auto_indent_mode = gtk_combo_box_new_text ();
+ gtk_widget_show (combo_auto_indent_mode);
+ gtk_table_attach (GTK_TABLE (table17), 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"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_auto_indent_mode), _("Basic"));
+ 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"));
+
+ label229 = gtk_label_new (_("Type:"));
+ gtk_widget_show (label229);
+ gtk_table_attach (GTK_TABLE (table17), label229, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label229), 0, 0.5);
+
+ label230 = gtk_label_new (_("Width:"));
+ gtk_widget_show (label230);
+ gtk_table_attach (GTK_TABLE (table17), label230, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label230), 0, 0.5);
+
+ spin_indent_width_adj = gtk_adjustment_new (1, 1, 99, 1, 10, 0);
+ 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 (table17), 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 (table17), radio_indent_spaces, 1, 2, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (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_table_attach (GTK_TABLE (table17), 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_both = gtk_radio_button_new_with_mnemonic (NULL, _("T_abs and Spaces"));
+ gtk_widget_show (radio_indent_both);
+ gtk_table_attach (GTK_TABLE (table17), radio_indent_both, 1, 2, 3, 4,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ 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));
+
+ alignment44 = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_show (alignment44);
+ gtk_table_attach (GTK_TABLE (table17), alignment44, 1, 2, 4, 5,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment44), 0, 0, 24, 0);
+
+ hbox14 = gtk_hbox_new (FALSE, 12);
+ gtk_widget_show (hbox14);
+ gtk_container_add (GTK_CONTAINER (alignment44), hbox14);
+
+ label231 = gtk_label_new (_("Hard tab width:"));
+ gtk_widget_show (label231);
+ gtk_box_pack_start (GTK_BOX (hbox14), label231, FALSE, FALSE, 0);
+
+ spin_tab_width_adj = gtk_adjustment_new (8, 1, 99, 1, 10, 0);
+ 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 (hbox14), 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 (table17), 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);
+
+ label227 = gtk_label_new (_("Indentation"));
+ gtk_widget_show (label227);
+ gtk_notebook_set_tab_label (GTK_NOTEBOOK (project_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (project_notebook), 0), label227);
+
+ dialog_action_area4 = GTK_DIALOG (project_dialog)->action_area;
+ gtk_widget_show (dialog_action_area4);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area4), GTK_BUTTONBOX_END);
+
+ cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
+ gtk_widget_show (cancelbutton1);
+ gtk_dialog_add_action_widget (GTK_DIALOG (project_dialog), cancelbutton1, GTK_RESPONSE_CANCEL);
+ GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
+
+ okbutton1 = gtk_button_new_from_stock ("gtk-ok");
+ gtk_widget_show (okbutton1);
+ gtk_dialog_add_action_widget (GTK_DIALOG (project_dialog), okbutton1, GTK_RESPONSE_OK);
+ GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
+
+ /* Store pointers to all widgets, for use by lookup_widget(). */
+ GLADE_HOOKUP_OBJECT_NO_REF (project_dialog, project_dialog, "project_dialog");
+ GLADE_HOOKUP_OBJECT_NO_REF (project_dialog, dialog_vbox4, "dialog_vbox4");
+ GLADE_HOOKUP_OBJECT (project_dialog, project_notebook, "project_notebook");
+ GLADE_HOOKUP_OBJECT (project_dialog, table17, "table17");
+ GLADE_HOOKUP_OBJECT (project_dialog, label228, "label228");
+ GLADE_HOOKUP_OBJECT (project_dialog, combo_auto_indent_mode, "combo_auto_indent_mode");
+ GLADE_HOOKUP_OBJECT (project_dialog, label229, "label229");
+ GLADE_HOOKUP_OBJECT (project_dialog, label230, "label230");
+ GLADE_HOOKUP_OBJECT (project_dialog, spin_indent_width, "spin_indent_width");
+ GLADE_HOOKUP_OBJECT (project_dialog, radio_indent_spaces, "radio_indent_spaces");
+ GLADE_HOOKUP_OBJECT (project_dialog, radio_indent_tabs, "radio_indent_tabs");
+ GLADE_HOOKUP_OBJECT (project_dialog, radio_indent_both, "radio_indent_both");
+ GLADE_HOOKUP_OBJECT (project_dialog, alignment44, "alignment44");
+ GLADE_HOOKUP_OBJECT (project_dialog, hbox14, "hbox14");
+ GLADE_HOOKUP_OBJECT (project_dialog, label231, "label231");
+ GLADE_HOOKUP_OBJECT (project_dialog, spin_tab_width, "spin_tab_width");
+ GLADE_HOOKUP_OBJECT (project_dialog, check_detect_indent, "check_detect_indent");
+ GLADE_HOOKUP_OBJECT (project_dialog, label227, "label227");
+ GLADE_HOOKUP_OBJECT_NO_REF (project_dialog, dialog_action_area4, "dialog_action_area4");
+ GLADE_HOOKUP_OBJECT (project_dialog, cancelbutton1, "cancelbutton1");
+ GLADE_HOOKUP_OBJECT (project_dialog, okbutton1, "okbutton1");
+ GLADE_HOOKUP_OBJECT_NO_REF (project_dialog, tooltips, "tooltips");
+
+ return project_dialog;
+}
+
Modified: trunk/src/interface.h
===================================================================
--- trunk/src/interface.h 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/interface.h 2008-12-27 12:55:04 UTC (rev 3423)
@@ -6,3 +6,4 @@
GtkWidget* create_toolbar_popup_menu1 (void);
GtkWidget* create_edit_menu1 (void);
GtkWidget* create_prefs_dialog (void);
+GtkWidget* create_project_dialog (void);
Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/main.c 2008-12-27 12:55:04 UTC (rev 3423)
@@ -919,6 +919,7 @@
encodings_init();
editor_init();
+ project_init();
configuration_init();
search_init();
@@ -1051,6 +1052,7 @@
build_finalize();
document_finalize();
symbols_finalize();
+ project_finalize();
editor_finalize();
editor_snippets_free();
encodings_finalize();
Modified: trunk/src/project.c
===================================================================
--- trunk/src/project.c 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/project.c 2008-12-27 12:55:04 UTC (rev 3423)
@@ -31,6 +31,8 @@
#include <unistd.h>
#include "project.h"
+#include "projectprivate.h"
+
#include "dialogs.h"
#include "support.h"
#include "utils.h"
@@ -44,10 +46,19 @@
#endif
#include "build.h"
#include "geanyobject.h"
+#include "interface.h"
+#include "editor.h"
+#include "stash.h"
ProjectPrefs project_prefs = { NULL, FALSE, FALSE };
+
+static GeanyProjectPrivate priv;
+static GeanyIndentPrefs indentation;
+
+static GeanyPrefGroup *indent_group = NULL;
+
static struct
{
gchar *project_file_path; /* in UTF-8 */
@@ -341,23 +352,20 @@
static void create_properties_dialog(PropertyDialogElements *e)
{
- GtkWidget *vbox;
- GtkWidget *table;
+ GtkWidget *table, *notebook;
GtkWidget *image;
GtkWidget *button;
GtkWidget *bbox;
GtkWidget *label;
GtkWidget *swin;
- e->dialog = gtk_dialog_new_with_buttons(_("Project Properties"), GTK_WINDOW(main_widgets.window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
- gtk_dialog_add_buttons(GTK_DIALOG(e->dialog), GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+ e->dialog = create_project_dialog();
+ gtk_window_set_transient_for(GTK_WINDOW(e->dialog), GTK_WINDOW(main_widgets.window));
+ gtk_window_set_destroy_with_parent(GTK_WINDOW(e->dialog), TRUE);
gtk_widget_set_name(e->dialog, "GeanyDialogProject");
- vbox = ui_dialog_vbox_new(GTK_DIALOG(e->dialog));
-
table = gtk_table_new(6, 2, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 6);
gtk_table_set_row_spacings(GTK_TABLE(table), 5);
gtk_table_set_col_spacings(GTK_TABLE(table), 10);
@@ -465,7 +473,11 @@
(GtkAttachOptions) (0), 0, 0);
#endif
- gtk_container_add(GTK_CONTAINER(vbox), table);
+ notebook = ui_lookup_widget(e->dialog, "project_notebook");
+ label = gtk_label_new(_("Project"));
+ gtk_widget_show(table); /* needed to switch current page */
+ gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), table, label, 0);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
}
@@ -481,6 +493,8 @@
create_properties_dialog(e);
+ stash_group_display(indent_group, e->dialog);
+
/* fill the elements with the appropriate data */
gtk_entry_set_text(GTK_ENTRY(e->name), p->name);
@@ -526,6 +540,8 @@
{
if (! update_config(e))
goto retry;
+
+ stash_group_update(indent_group, e->dialog);
}
gtk_widget_destroy(e->dialog);
@@ -555,6 +571,20 @@
}
+static GeanyProject *create_project(void)
+{
+ GeanyProject *project = g_new0(GeanyProject, 1);
+
+ memset(&priv, 0, sizeof priv);
+ indentation = *editor_get_indent_prefs(NULL);
+ priv.indentation = &indentation;
+ project->priv = &priv;
+
+ app->project = project;
+ return project;
+}
+
+
/* Verifies data for New & Properties dialogs.
* Returns: FALSE if the user needs to change any data. */
static gboolean update_config(const PropertyDialogElements *e)
@@ -640,7 +670,7 @@
if (app->project == NULL)
{
- app->project = g_new0(GeanyProject, 1);
+ create_project();
new_project = TRUE;
}
p = app->project;
@@ -887,8 +917,10 @@
return FALSE;
}
- p = app->project = g_new0(GeanyProject, 1);
+ p = create_project();
+ stash_group_load_from_key_file(indent_group, config);
+
p->name = utils_get_setting_string(config, "project", "name", GEANY_STRING_UNTITLED);
p->description = utils_get_setting_string(config, "project", "description", "");
p->file_name = utils_get_utf8_from_locale(filename);
@@ -936,6 +968,8 @@
filename = utils_get_locale_from_utf8(p->file_name);
g_key_file_load_from_file(config, filename, G_KEY_FILE_NONE, NULL);
+ stash_group_save_to_key_file(indent_group, config);
+
g_key_file_set_string(config, "project", "name", p->name);
g_key_file_set_string(config, "project", "base_path", p->base_path);
@@ -1066,3 +1100,34 @@
}
+void project_init(void)
+{
+ GeanyPrefGroup *group;
+
+ group = stash_group_new("indentation");
+ /* defaults are copied from editor indent prefs */
+ stash_group_set_use_defaults(group, FALSE);
+ indent_group = group;
+
+ stash_group_add_spin_button_integer(group, &indentation.width,
+ "indent_width", 4, "spin_indent_width");
+ stash_group_add_radio_buttons(group, (gint*)&indentation.type,
+ "indent_type", GEANY_INDENT_TYPE_TABS,
+ "radio_indent_spaces", GEANY_INDENT_TYPE_SPACES,
+ "radio_indent_tabs", GEANY_INDENT_TYPE_TABS,
+ "radio_indent_both", GEANY_INDENT_TYPE_BOTH,
+ NULL);
+ stash_group_add_spin_button_integer(group, &indentation.hard_tab_width,
+ "indent_hard_tab_width", 8, "spin_tab_width");
+ stash_group_add_toggle_button(group, &indentation.detect_type,
+ "detect_indent", FALSE, "check_detect_indent");
+ stash_group_add_combo_box(group, (gint*)&indentation.auto_indent_mode,
+ "indent_mode", GEANY_AUTOINDENT_CURRENTCHARS, "combo_auto_indent_mode");
+}
+
+
+void project_finalize(void)
+{
+ stash_group_free(indent_group);
+}
+
Modified: trunk/src/project.h
===================================================================
--- trunk/src/project.h 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/project.h 2008-12-27 12:55:04 UTC (rev 3423)
@@ -41,6 +41,8 @@
gint type;
gchar **file_patterns; /**< Array of filename extension patterns. */
gboolean make_in_base_path;
+
+ struct GeanyProjectPrivate *priv; /* must be last, append fields before this item */
}
GeanyProject;
@@ -55,6 +57,11 @@
extern ProjectPrefs project_prefs;
+void project_init(void);
+
+void project_finalize(void);
+
+
void project_new(void);
void project_open(void);
Added: trunk/src/projectprivate.h
===================================================================
--- trunk/src/projectprivate.h (rev 0)
+++ trunk/src/projectprivate.h 2008-12-27 12:55:04 UTC (rev 3423)
@@ -0,0 +1,37 @@
+/*
+ * projectprivate.h - this file is part of Geany, a fast and lightweight IDE
+ *
+ * Copyright 2008 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+ * Copyright 2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * $Id$
+ */
+
+
+#ifndef GEANY_PROJECTPRIVATE_H
+#define GEANY_PROJECTPRIVATE_H 1
+
+
+typedef struct GeanyProjectPrivate
+{
+ struct GeanyIndentPrefs *indentation;
+}
+GeanyProjectPrivate;
+
+
+#endif
Property changes on: trunk/src/projectprivate.h
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/src/stash.c
===================================================================
--- trunk/src/stash.c 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/stash.c 2008-12-27 12:55:04 UTC (rev 3423)
@@ -74,6 +74,7 @@
const gchar *name; /* group name to use in the keyfile */
GArray *entries; /* array of GeanyPrefEntry */
gboolean write_once; /* only write settings if they don't already exist */
+ gboolean use_defaults; /* use default values if there's no keyfile entry */
};
typedef struct EnumWidget
@@ -160,9 +161,14 @@
foreach_array(GeanyPrefEntry, entry, group->entries)
{
+ /* don't overwrite write_once prefs */
if (group->write_once && action == SETTING_WRITE &&
g_key_file_has_key(keyfile, group->name, entry->key_name, NULL))
- continue; /* don't overwrite write_once prefs */
+ continue;
+ /* don't override settings with default values */
+ if (!group->use_defaults && action == SETTING_READ &&
+ !g_key_file_has_key(keyfile, group->name, entry->key_name, NULL))
+ continue;
switch (entry->setting_type)
{
@@ -198,6 +204,7 @@
group->name = name;
group->entries = g_array_new(FALSE, FALSE, sizeof(GeanyPrefEntry));
+ group->use_defaults = TRUE;
return group;
}
@@ -218,12 +225,24 @@
}
+/* Useful so the user can edit the keyfile manually while the program is running,
+ * and the setting won't be overridden.
+ * @c FALSE by default. */
void stash_group_set_write_once(GeanyPrefGroup *group, gboolean write_once)
{
group->write_once = write_once;
}
+/* When @c FALSE, Stash doesn't change the setting if there is no keyfile entry, so it
+ * remains whatever it was initialized/set to by user code.
+ * @c TRUE by default. */
+void stash_group_set_use_defaults(GeanyPrefGroup *group, gboolean use_defaults)
+{
+ group->use_defaults = use_defaults;
+}
+
+
static GeanyPrefEntry *
add_pref(GeanyPrefGroup *group, GType type, gpointer setting,
const gchar *key_name, gpointer default_value)
Modified: trunk/src/stash.h
===================================================================
--- trunk/src/stash.h 2008-12-25 17:02:56 UTC (rev 3422)
+++ trunk/src/stash.h 2008-12-27 12:55:04 UTC (rev 3423)
@@ -34,6 +34,8 @@
void stash_group_set_write_once(GeanyPrefGroup *group, gboolean write_once);
+void stash_group_set_use_defaults(GeanyPrefGroup *group, gboolean use_defaults);
+
void stash_group_add_boolean(GeanyPrefGroup *group, gboolean *setting,
const gchar *key_name, gboolean default_value);
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