SF.net SVN: geany: [1425] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Mon Mar 26 15:31:51 UTC 2007


Revision: 1425
          http://svn.sourceforge.net/geany/?rev=1425&view=rev
Author:   ntrel
Date:     2007-03-26 08:31:50 -0700 (Mon, 26 Mar 2007)

Log Message:
-----------
Separate on_margin_click(), on_update_ui(), on_char_added()
Scintilla notifications.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/sci_cb.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-03-26 12:18:51 UTC (rev 1424)
+++ trunk/ChangeLog	2007-03-26 15:31:50 UTC (rev 1425)
@@ -9,6 +9,9 @@
  * src/sci_cb.c, src/symbols.c, src/symbols.h:
    Load HTML-entities when the PHP lexer is first needed, instead of
    when typing outside of PHP styles.
+ * src/sci_cb.c:
+   Separate on_margin_click(), on_update_ui(), on_char_added()
+   Scintilla notifications.
 
 
 2007-03-25  Enrico Tröger  <enrico.troeger at uvena.de>

Modified: trunk/src/sci_cb.c
===================================================================
--- trunk/src/sci_cb.c	2007-03-26 12:18:51 UTC (rev 1424)
+++ trunk/src/sci_cb.c	2007-03-26 15:31:50 UTC (rev 1425)
@@ -99,10 +99,154 @@
 }
 
 
+typedef struct SCNotification SCNotification;
+
+static void on_margin_click(ScintillaObject *sci, SCNotification *nt)
+{
+	// left click to marker margin marks the line
+	if (nt->margin == 1)
+	{
+		gint line = sci_get_line_from_position(sci, nt->position);
+		gboolean set = sci_is_marker_set_at_line(sci, line, 1);
+
+		//sci_marker_delete_all(doc_list[idx].sci, 1);
+		sci_set_marker_at_line(sci, line, ! set, 1);	// toggle the marker
+	}
+	// left click on the folding margin to toggle folding state of current line
+	else if (nt->margin == 2 && app->pref_editor_folding)
+	{
+		gint line = SSM(sci, SCI_LINEFROMPOSITION, nt->position, 0);
+
+		SSM(sci, SCI_TOGGLEFOLD, line, 0);
+		if (app->pref_editor_unfold_all_children &&
+			SSM(sci, SCI_GETLINEVISIBLE, line + 1, 0))
+		{	// unfold all children of the current fold point
+			gint last_line = SSM(sci, SCI_GETLASTCHILD, line, -1);
+			gint i;
+
+			for (i = line; i < last_line; i++)
+			{
+				if (! SSM(sci, SCI_GETLINEVISIBLE, i, 0))
+				{
+					SSM(sci, SCI_TOGGLEFOLD, SSM(sci, SCI_GETFOLDPARENT, i, 0), 0);
+				}
+			}
+		}
+	}
+}
+
+
+static void on_update_ui(gint idx, G_GNUC_UNUSED SCNotification *nt)
+{
+	ScintillaObject *sci = doc_list[idx].sci;
+	gint pos = sci_get_current_position(sci);
+
+	// undo / redo menu update
+	ui_update_popup_reundo_items(idx);
+
+	// brace highlighting
+	sci_cb_highlight_braces(sci, pos);
+
+	ui_update_statusbar(idx, pos);
+
+	/* Visible lines are only laid out accurately once [SCN_UPDATEUI] is sent,
+	 * so we need to only call sci_scroll_to_line here, because the document
+	 * may have line wrapping and folding enabled.
+	 * http://scintilla.sourceforge.net/ScintillaDoc.html#LineWrapping */
+	if (doc_list[idx].scroll_percent > 0.0F)
+	{
+		scroll_to_line(sci, -1, doc_list[idx].scroll_percent);
+		doc_list[idx].scroll_percent = -1.0F;	// disable further scrolling
+	}
+#if 0
+	/// experimental code for inverting selections
+	{
+	gint i;
+	for (i = SSM(sci, SCI_GETSELECTIONSTART, 0, 0); i < SSM(sci, SCI_GETSELECTIONEND, 0, 0); i++)
+	{
+		// need to get colour from getstyleat(), but how?
+		SSM(sci, SCI_STYLESETFORE, STYLE_DEFAULT, 0);
+		SSM(sci, SCI_STYLESETBACK, STYLE_DEFAULT, 0);
+	}
+
+	sci_get_style_at(sci, pos);
+	}
+#endif
+}
+
+
+static void on_char_added(gint idx, SCNotification *nt)
+{
+	ScintillaObject *sci = doc_list[idx].sci;
+	gint pos = sci_get_current_position(sci);
+
+	switch (nt->ch)
+	{
+		case '\r':
+		{	// simple indentation (only for CR format)
+			if (sci_get_eol_mode(sci) == SC_EOL_CR)
+				on_new_line_added(sci, idx);
+			break;
+		}
+		case '\n':
+		{	// simple indentation (for CR/LF and LF format)
+			on_new_line_added(sci, idx);
+			break;
+		}
+		case '>':
+		case '/':
+		{	// close xml-tags
+			handle_xml(sci, nt->ch, idx);
+			break;
+		}
+		case '(':
+		{	// show calltips
+			sci_cb_show_calltip(idx, pos);
+			break;
+		}
+		case ')':
+		{	// hide calltips
+			if (SSM(sci, SCI_CALLTIPACTIVE, 0, 0))
+			{
+				SSM(sci, SCI_CALLTIPCANCEL, 0, 0);
+			}
+			g_free(calltip.text);
+			calltip.text = NULL;
+			calltip.set = FALSE;
+			break;
+		}
+		case ' ':
+		{	// if and for autocompletion
+			if (app->pref_editor_auto_complete_constructs)
+				sci_cb_auto_forif(idx, pos);
+			break;
+		}
+		case '[':
+		case '{':
+		{	// Tex auto-closing
+			if (sci_get_lexer(sci) == SCLEX_LATEX)
+			{
+				auto_close_bracket(sci, pos, nt->ch);	// Tex auto-closing
+				sci_cb_show_calltip(idx, pos);
+			}
+			break;
+		}
+		case '}':
+		{	// closing bracket handling
+			if (doc_list[idx].use_auto_indention &&
+				app->pref_editor_indention_mode == INDENT_ADVANCED)
+				sci_cb_close_block(idx, pos - 1);
+			break;
+		}
+		default: sci_cb_start_auto_complete(idx, pos, FALSE);
+	}
+}
+
+
 // callback func called by all editors when a signal arises
 void on_editor_notification(GtkWidget *editor, gint scn, gpointer lscn, gpointer user_data)
 {
-	struct SCNotification *nt;
+	SCNotification *nt;
 	ScintillaObject *sci;
 	gint idx;
 
@@ -130,76 +274,13 @@
 			break;
 		}
 		case SCN_MARGINCLICK:
-		{
-			// left click to marker margin marks the line
-			if (nt->margin == 1)
-			{
-				gint line = sci_get_line_from_position(sci, nt->position);
-				gboolean set = sci_is_marker_set_at_line(sci, line, 1);
+			on_margin_click(sci, nt);
+			break;
 
-				//sci_marker_delete_all(doc_list[idx].sci, 1);
-				sci_set_marker_at_line(sci, line, ! set, 1);	// toggle the marker
-			}
-			// left click on the folding margin to toggle folding state of current line
-			else if (nt->margin == 2 && app->pref_editor_folding)
-			{
-				gint line = SSM(sci, SCI_LINEFROMPOSITION, nt->position, 0);
-
-				SSM(sci, SCI_TOGGLEFOLD, line, 0);
-				if (app->pref_editor_unfold_all_children &&
-					SSM(sci, SCI_GETLINEVISIBLE, line + 1, 0))
-				{	// unfold all children of the current fold point
-					gint last_line = SSM(sci, SCI_GETLASTCHILD, line, -1);
-					gint i;
-
-					for (i = line; i < last_line; i++)
-					{
-						if (! SSM(sci, SCI_GETLINEVISIBLE, i, 0))
-						{
-							SSM(sci, SCI_TOGGLEFOLD, SSM(sci, SCI_GETFOLDPARENT, i, 0), 0);
-						}
-					}
-				}
-			}
+		case SCN_UPDATEUI:
+			on_update_ui(idx, nt);
 			break;
-		}
-		case SCN_UPDATEUI:
-		{
-			gint pos = sci_get_current_position(sci);
 
-			// undo / redo menu update
-			ui_update_popup_reundo_items(idx);
-
-			// brace highlighting
-			sci_cb_highlight_braces(sci, pos);
-
-			ui_update_statusbar(idx, pos);
-
-			/* Visible lines are only laid out accurately once [SCN_UPDATEUI] is sent,
-			 * so we need to only call sci_scroll_to_line here, because the document
-			 * may have line wrapping and folding enabled.
-			 * http://scintilla.sourceforge.net/ScintillaDoc.html#LineWrapping */
-			if (doc_list[idx].scroll_percent > 0.0F)
-			{
-				scroll_to_line(sci, -1, doc_list[idx].scroll_percent);
-				doc_list[idx].scroll_percent = -1.0F;	// disable further scrolling
-			}
-#if 0
-			/// experimental code for inverting selections
-			{
-			gint i;
-			for (i = SSM(sci, SCI_GETSELECTIONSTART, 0, 0); i < SSM(sci, SCI_GETSELECTIONEND, 0, 0); i++)
-			{
-				// need to get colour from getstyleat(), but how?
-				SSM(sci, SCI_STYLESETFORE, STYLE_DEFAULT, 0);
-				SSM(sci, SCI_STYLESETBACK, STYLE_DEFAULT, 0);
-			}
-
-			sci_get_style_at(sci, pos);
-			}
-#endif
-			break;
-		}
  		case SCN_MODIFIED:
 		{
 			if (nt->modificationType & SC_STARTACTION && ! app->ignore_callback)
@@ -210,71 +291,9 @@
 			break;
 		}
 		case SCN_CHARADDED:
-		{
-			gint pos = sci_get_current_position(sci);
+			on_char_added(idx, nt);
+			break;
 
-			switch (nt->ch)
-			{
-				case '\r':
-				{	// simple indentation (only for CR format)
-					if (sci_get_eol_mode(sci) == SC_EOL_CR)
-						on_new_line_added(sci, idx);
-					break;
-				}
-				case '\n':
-				{	// simple indentation (for CR/LF and LF format)
-					on_new_line_added(sci, idx);
-					break;
-				}
-				case '>':
-				case '/':
-				{	// close xml-tags
-					handle_xml(sci, nt->ch, idx);
-					break;
-				}
-				case '(':
-				{	// show calltips
-					sci_cb_show_calltip(idx, pos);
-					break;
-				}
-				case ')':
-				{	// hide calltips
-					if (SSM(sci, SCI_CALLTIPACTIVE, 0, 0))
-					{
-						SSM(sci, SCI_CALLTIPCANCEL, 0, 0);
-					}
-					g_free(calltip.text);
-					calltip.text = NULL;
-					calltip.set = FALSE;
-					break;
-				}
-				case ' ':
-				{	// if and for autocompletion
-					if (app->pref_editor_auto_complete_constructs)
-						sci_cb_auto_forif(idx, pos);
-					break;
-				}
-				case '[':
-				case '{':
-				{	// Tex auto-closing
-					if (sci_get_lexer(sci) == SCLEX_LATEX)
-					{
-						auto_close_bracket(sci, pos, nt->ch);	// Tex auto-closing
-						sci_cb_show_calltip(idx, pos);
-					}
-					break;
-				}
-				case '}':
-				{	// closing bracket handling
-					if (doc_list[idx].use_auto_indention &&
-						app->pref_editor_indention_mode == INDENT_ADVANCED)
-						sci_cb_close_block(idx, pos - 1);
-					break;
-				}
-				default: sci_cb_start_auto_complete(idx, pos, FALSE);
-			}
-			break;
-		}
 		case SCN_USERLISTSELECTION:
 		{
 			if (nt->listType == 1)


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