static void
gb_view_source_notify_cursor (GbViewSource  *source,
                              GParamSpec    *pspec,
                              GtkTextBuffer *buffer)
{
    GbViewSourcePrivate *priv;
    GtkTextIter iter;
    guint col;
    guint line;
    guint position;
    gchar *s;

    g_return_if_fail(GB_IS_VIEW_SOURCE(source));
    g_return_if_fail(pspec != NULL);
    g_return_if_fail(GTK_SOURCE_IS_BUFFER(buffer));

    priv = source->priv;

    g_object_get(buffer, "cursor-position", &position, NULL);
    gtk_text_buffer_get_iter_at_offset(buffer, &iter, position);

    line = gtk_text_iter_get_line(&iter);
    col = gtk_source_view_get_visual_column(GTK_SOURCE_VIEW(priv->source1),
                                            &iter);
    s = g_strdup_printf(_("Line %d, Column %d"), line + 1, col + 1);
    g_object_set(priv->pos_label, "label", s, NULL);
    g_free(s);
}
예제 #2
0
static void
ide_editor_view__buffer_cursor_moved (IdeEditorView      *self,
                                     const GtkTextIter *iter,
                                     GtkTextBuffer     *buffer)
{
  GtkTextIter bounds;
  GtkTextMark *mark;
  gchar *str;
  guint line;
  gint column;
  gint column2;

  g_assert (IDE_IS_EDITOR_VIEW (self));
  g_assert (iter != NULL);
  g_assert (IDE_IS_BUFFER (buffer));

  ide_source_view_get_visual_position (self->frame1->source_view, &line, (guint *)&column);

  mark = gtk_text_buffer_get_selection_bound (buffer);
  gtk_text_buffer_get_iter_at_mark (buffer, &bounds, mark);

  if (!gtk_widget_has_focus (GTK_WIDGET (self->frame1->source_view)) ||
      gtk_text_iter_equal (&bounds, iter) ||
      (gtk_text_iter_get_line (iter) != gtk_text_iter_get_line (&bounds)))
    {
      str = g_strdup_printf ("%d:%d", line + 1, column + 1);
      gtk_label_set_text (self->cursor_label, str);
      g_free (str);
      return;
    }

  /* We have a selection that is on the same line.
   * Lets give some detail as to how long the selection is.
   */
  column2 = gtk_source_view_get_visual_column (GTK_SOURCE_VIEW (self->frame1->source_view),
                                               &bounds);
  str = g_strdup_printf ("%d:%d (%d)", line + 1, column + 1, ABS (column2 - column));
  gtk_label_set_text (self->cursor_label, str);
  g_free (str);
}
예제 #3
0
static void
gb_editor_tab_update_location (GbEditorTab *tab)
{
   GbEditorTabPrivate *priv;
   GtkTextBuffer *buffer;
   GtkTextMark *mark;
   GtkTextIter iter;
   gboolean overwrite;
   gchar *text;
   guint line;
   guint column;

   g_return_if_fail(GB_IS_EDITOR_TAB(tab));

   priv = tab->priv;

   buffer = GTK_TEXT_BUFFER(priv->document);

   overwrite = gtk_text_view_get_overwrite(GTK_TEXT_VIEW(priv->text_view));
   mark = gtk_text_buffer_get_insert(buffer);
   gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
   line = gtk_text_iter_get_line(&iter) + 1;
   column = gtk_source_view_get_visual_column(GTK_SOURCE_VIEW(priv->text_view),
                                              &iter) + 1;
   if (!overwrite) {
      text = g_strdup_printf(_("Ln %u, Col %u  INS"), line, column);
   } else {
      text = g_strdup_printf(_("Ln %u, Col %u  REP"), line, column);
   }
   g_object_set(priv->floating_bar, "label", text, NULL);
   g_free(text);

   if (!gtk_widget_get_visible(priv->floating_bar)) {
      gtk_widget_show(priv->floating_bar);
   }
}