Exemplo n.º 1
0
GtkTextTagTable *SourceEditor::createSharedTagTable()
{
    GtkTextTagTable *tagTable = TextEditor::createSharedTagTable();

    for (int i = 0; i < N_TOKEN_KINDS; ++i)
    {
        GtkTextTag *tag;
        std::string tagName(SOURCE_EDITOR "/");
        tagName += TOKEN_KIND_NAMES[i];
        tag = gtk_text_tag_new(tagName.c_str());
        g_object_set(tag, "foreground", TOKEN_COLORS[i], NULL);
        gtk_text_tag_table_add(tagTable, tag);
        g_object_unref(tag);
        tokenTags[i] = tag;
    }

    GtkTextTag *tag;
    tag = gtk_text_tag_new(SOURCE_EDITOR "/invisible");
    g_object_set(tag, "invisible", TRUE, NULL);
    gtk_text_tag_table_add(tagTable, tag);
    g_object_unref(tag);
    tagInvisible = tag;

    return tagTable;
}
Exemplo n.º 2
0
GtkWidget *
gui_chat_create ()
{
	/* tag table */
	tag_table = gtk_text_tag_table_new ();
	
	tags[0] = gtk_text_tag_new ("team0");
	g_object_set (tags[0], "foreground", "orange", NULL);
	gtk_text_tag_table_add (tag_table, tags[0]);
	
	tags[1] = gtk_text_tag_new ("team1");
	g_object_set (tags[1], "foreground", "dark red", NULL);
	gtk_text_tag_table_add (tag_table, tags[1]);
	
	tags[2] = gtk_text_tag_new ("team2");
	g_object_set (tags[2], "foreground", "dark blue", NULL);
	gtk_text_tag_table_add (tag_table, tags[2]);
	
	tags[3] = gtk_text_tag_new ("team3");
	g_object_set (tags[3], "foreground", "dark gray", NULL);
	gtk_text_tag_table_add (tag_table, tags[3]);
	
	/* widgets */
	logview = gtk_text_view_new ();
	g_object_set (G_OBJECT (logview),
			"editable", FALSE,
			"wrap-mode", GTK_WRAP_WORD,
			NULL);
	
	GtkWidget *scrolled = gtk_scrolled_window_new (NULL, NULL);
	g_object_set (G_OBJECT (scrolled),
			"shadow-type", GTK_SHADOW_IN,
			"hscrollbar-policy", GTK_POLICY_NEVER,
			"vscrollbar-policy", GTK_POLICY_ALWAYS,
			NULL);
	gtk_container_add (GTK_CONTAINER (scrolled), logview);
	
	entry = gtk_entry_new ();
	g_object_set (G_OBJECT (entry),
			"secondary-icon-stock", GTK_STOCK_MEDIA_PLAY,
			NULL);
	g_signal_connect (entry, "activate", G_CALLBACK (gui_chat_entry_activated), NULL);
	g_signal_connect (entry, "icon-release", G_CALLBACK (gui_chat_entry_icon_clicked), NULL);
	
	page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4);
	g_object_set (G_OBJECT (page),
			"border-width", 2,
			"sensitive", FALSE,
			NULL);
	gtk_box_pack_start (GTK_BOX (page), scrolled, TRUE, TRUE, 0);
	gtk_box_pack_start (GTK_BOX (page), entry, FALSE, TRUE, 0);
	gtk_widget_show_all (page);
	
	return page;
}
Exemplo n.º 3
0
bg_gtk_textview_t * bg_gtk_textview_create()
  {
  bg_gtk_textview_t * t;
  
  t = calloc(1, sizeof(*t));
  
  if(!tag_table)
    {
    tag_table = gtk_text_tag_table_new();
    
    text_tag = gtk_text_tag_new("Font");
    g_object_set(text_tag, "editable", 0, NULL);
    
    gtk_text_tag_table_add(tag_table,
                           text_tag);
    }
  
  t->buffer = gtk_text_buffer_new(tag_table);
  t->textview = gtk_text_view_new_with_buffer(t->buffer);

  g_signal_connect(G_OBJECT(t->textview), "realize",
                   G_CALLBACK(set_bg), NULL);
  
  gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(t->textview), FALSE);
  
  gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(t->textview), GTK_WRAP_NONE);
  gtk_text_view_set_editable(GTK_TEXT_VIEW(t->textview), 0);
  
  gtk_widget_show(t->textview);
  return t;
  }
Exemplo n.º 4
0
static VALUE
rg_add(VALUE self, VALUE tag)
{
    G_CHILD_ADD(self, tag);
    gtk_text_tag_table_add(_SELF(self), RVAL2GTKTEXTTAG(tag));
    return self;
}
Exemplo n.º 5
0
void interface_image_add(GtkWidget * tab, GtkTextIter * iter,
       GdkPixbuf * pixbuf)
{
  if (pixbuf == NULL)
    return;
  GtkTextView *out1 = GTK_TEXT_VIEW(interface_get_widget(tab, "output1"));
  GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(out1));

  GtkTextIter it;
  if (iter != NULL)
    it = *iter;
  else
    gtk_text_buffer_get_end_iter(buffer, &it);

  gtk_text_buffer_insert_pixbuf(buffer, &it, pixbuf);
  
  // append tag name, if needed
  SESSION_STATE *session = g_object_get_data(G_OBJECT(tab), "session");
  if (!session->imagemapName) return;
  
  GtkTextTag *t = gtk_text_tag_new (session->imagemapName);
  g_object_set_data(G_OBJECT(t), "imagemap",
                    g_strdup(session->imagemapName));

  GtkTextTagTable *table =
      gtk_text_buffer_get_tag_table(buffer);
  gtk_text_tag_table_add(table, t);
  gtk_text_buffer_apply_tag(buffer, t, &it, &it);
  g_signal_connect(G_OBJECT(t), "event",
                   G_CALLBACK(on_tag_click), session);
}
Exemplo n.º 6
0
static GtkTextTagTable*
create_tag_table (GcrDisplayView *self)
{
	GtkTextTagTable *tags;
	gint width, height;

	g_assert (GCR_IS_DISPLAY_VIEW (self));

	tags = gtk_text_tag_table_new ();

	if (!gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &width, &height))
		width = 48;

	self->pv->title_tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                                    "name", "title",
	                                    "scale", PANGO_SCALE_LARGE,
	                                    "right-margin", (ICON_MARGIN * 2) + width,
	                                    "pixels-above-lines", 9,
	                                    "pixels-below-lines", 6,
	                                    "weight", PANGO_WEIGHT_BOLD,
	                                    NULL);
	gtk_text_tag_table_add (tags, self->pv->title_tag);

	self->pv->content_tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                                      "name", "content",
	                                      "right-margin", (ICON_MARGIN * 2) + width,
	                                      "left-margin", FIELD_MARGIN,
	                                      "pixels-below-lines", 3,
	                                      NULL);
	gtk_text_tag_table_add (tags, self->pv->content_tag);

	self->pv->heading_tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                                      "name", "heading",
	                                      "pixels-above-lines", 9,
	                                      "pixels-below-lines", 3,
	                                      "weight", PANGO_WEIGHT_BOLD,
	                                      NULL);
	gtk_text_tag_table_add (tags, self->pv->heading_tag);

	self->pv->monospace_tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                                        "name", "monospace",
	                                        "family", "monospace",
	                                        NULL);
	gtk_text_tag_table_add (tags, self->pv->monospace_tag);

	return tags;
}
static GtkTextTagTable*
create_tag_table (GcrCertificateDetailsWidget *self)
{
	GtkTextTagTable *tags;
	GtkTextTag *tag;

	g_assert (GCR_IS_CERTIFICATE_DETAILS_WIDGET (self));
	
	tags = gtk_text_tag_table_new ();
	
	tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                    "name", "heading",
	                    "left-margin", 5, 
	                    "right-margin", 5,
	                    "pixels-above-lines", 9,
	                    "pixels-below-lines", 3,
	                    "weight", PANGO_WEIGHT_BOLD,
	                    NULL);
	
	gtk_text_tag_table_add (tags, tag);
	g_object_unref (tag);
	
	tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                    "name", "monospace",
	                    "family", "monospace",
	                    NULL);
	
	gtk_text_tag_table_add (tags, tag);
	g_object_unref (tag);	

	g_assert (!self->pv->field_tag);
	self->pv->field_width = 0;
	self->pv->field_tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                                    "name", "field",
	                                    "left-margin", self->pv->field_width + FIELD_MARGIN,
	                                    "indent", self->pv->field_width,
	                                    "right-margin", 5,
	                                    "pixels-below-lines", 3,
	                                    "wrap-mode", GTK_WRAP_WORD_CHAR,
	                                    NULL);
	gtk_text_tag_table_add (tags, self->pv->field_tag);
	
	return tags;
}
Exemplo n.º 8
0
/*#
    @method add GtkTextTagTable
    @brief Add a tag to the table. The tag is assigned the highest priority in the table.
    @param tag a GtkTextTag

    tag must not be in a tag table already, and may not have the same name as an
    already-added tag.
 */
FALCON_FUNC TextTagTable::add( VMARG )
{
    Item* i_tag = vm->param( 0 );
#ifndef NO_PARAMETER_CHECK
    if ( !i_tag || i_tag->isNil() || !i_tag->isObject()
        || !IS_DERIVED( i_tag, GtkTextTag ) )
        throw_inv_params( "GtkTextTag" );
#endif
    GtkTextTag* tag = (GtkTextTag*) COREGOBJECT( i_tag )->getObject();
    MYSELF;
    GET_OBJ( self );
    gtk_text_tag_table_add( (GtkTextTagTable*)_obj, tag );
}
Exemplo n.º 9
0
Php::Value GtkTextTagTable_::add(Php::Parameters &parameters)
{
	GtkTextTag *tag;
	if(parameters.size() > 0) {
		Php::Value object_tag = parameters[0];
		GtkTextTag_ *phpgtk_tag = (GtkTextTag_ *)object_tag.implementation();
		tag = (phpgtk_tag->get_tag());
	}

	gboolean ret = gtk_text_tag_table_add (GTK_TEXT_TAG_TABLE(instance), tag);

	return ret;
}
Exemplo n.º 10
0
/**
 * \internal
 * Appends \p text into validate log with pair of style/values, as seen in #GtkTextTag properties.
 *
 * \see GtkTextTag
 */
static GtkTextTag *
validate_append_text_with_property_list(struct validate *validate, const gchar * text,
					const gchar * first_property_name, ...)
{
	GtkTextTag *text_tag;
	va_list argp;

	text_tag = gtk_text_tag_new(NULL);
	gtk_text_tag_table_add(gtk_text_buffer_get_tag_table(validate->text_buffer), text_tag);
	va_start(argp, first_property_name);
	g_object_set_valist(G_OBJECT(text_tag), first_property_name, argp);
	va_end(argp);

	validate_append_text_with_tag(validate, text_tag, text);

	return text_tag;
}
Exemplo n.º 11
0
GtkTextTag *get_bg_color_tag(GtkTextBuffer * buffer, int color)
{
  /* "background" is property name for color */
  char s[10];
  colorCode(s, color, FALSE);
  GtkTextTagTable *table = gtk_text_buffer_get_tag_table(buffer);
  GtkTextTag *tag = gtk_text_tag_table_lookup(table, s);
  if (!tag) {
    // tag not found - need to create it
    tag = gtk_text_tag_new(s);
    // first character is F/B (foreground/background), hence we need to
    // get the color name from the second char, hence that s+1
 //   g_object_set(tag, "background", s + 1, NULL);
    g_object_set(tag, "background", g_strdup (s + 1), NULL);
    gtk_text_tag_table_add(table, tag);
  }
  return tag;
}
Exemplo n.º 12
0
static void highlight_add_tag (const char *name, const GdkRGBA *text,
                const GdkRGBA *background, const char *font)
{
        GtkTextTag *tag;

        g_assert (highlight_tag_table != NULL);

        tag = gtk_text_tag_table_lookup (highlight_tag_table, name);

        g_assert (tag == NULL);

        tag = gtk_text_tag_new (name);

	g_object_set (G_OBJECT (tag),
			"foreground-rgba", text,
			"background-rgba", background,
			"font", font, NULL);
        gtk_text_tag_table_add (highlight_tag_table, tag);
        gtk_text_tag_set_priority (tag, next_priority);
        next_priority++;
}
Exemplo n.º 13
0
GtkTextTag *
gb_source_view_ref_search_tag (GbSourceView *view)
{
   GtkTextTagTable *tag_table;
   GtkTextBuffer *buffer;
   GtkTextTag *search_tag;

   g_return_val_if_fail(GB_IS_SOURCE_VIEW(view), NULL);

   buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
   tag_table = gtk_text_buffer_get_tag_table(buffer);
   if (!(search_tag = gtk_text_tag_table_lookup(tag_table, "search-tag"))) {
      search_tag = g_object_new(GTK_TYPE_TEXT_TAG,
                                "name", "search-tag",
                                "background", "#fce94f",
                                "foreground", "#2e3436",
                                NULL);
      gtk_text_tag_table_add(tag_table, search_tag);
      return search_tag;
   }

   return g_object_ref(search_tag);
}
Exemplo n.º 14
0
static gboolean on_show_dlg (FmProgressDisplay *data)
{
    GtkBuilder *builder = gtk_builder_new ();
    GtkWidget *to, *to_label;
    FmPath *dest;
    const char *title = NULL;
    GtkTextTagTable *tag_table = gtk_text_tag_table_new ();

    gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
    gtk_builder_add_from_string (builder, PROGRESS_DLG, -1, NULL);

    data->dlg = (GtkWidget*) gtk_builder_get_object (builder, "dlg");

    g_signal_connect (data->dlg, "response", (GCallback) on_response, data);

    to_label =              (GtkWidget*) gtk_builder_get_object (builder, "to_label");
    to =                    (GtkWidget*) gtk_builder_get_object (builder, "dest");
    data->icon =            (GtkWidget*) gtk_builder_get_object (builder, "icon");
    data->msg =             (GtkWidget*) gtk_builder_get_object (builder, "msg");
    data->act =             (GtkWidget*) gtk_builder_get_object (builder, "action");
    data->src =             (GtkWidget*) gtk_builder_get_object (builder, "src");
    data->dest =            (GtkWidget*) gtk_builder_get_object (builder, "dest");
    data->current =         (GtkWidget*) gtk_builder_get_object (builder, "current");
    data->progress =        (GtkWidget*) gtk_builder_get_object (builder, "progress");
    data->error_pane =      (GtkWidget*) gtk_builder_get_object (builder, "error_pane");
    data->error_msg =       (GtkWidget*) gtk_builder_get_object (builder, "error_msg");
    data->remaining_time =  (GtkWidget*) gtk_builder_get_object (builder, "remaining_time");

    data->bold_tag = gtk_text_tag_new ("bold");
    g_object_set (data->bold_tag, "weight", PANGO_WEIGHT_BOLD, NULL);
    
    gtk_text_tag_table_add (tag_table, data->bold_tag);
    data->error_buf = gtk_text_buffer_new (tag_table);
    g_object_unref (tag_table);
    
    gtk_text_view_set_buffer (GTK_TEXT_VIEW (data->error_msg), data->error_buf);

    g_object_unref (builder);

    // set the src label
    if (data->job->srcs)
    {
        GList *l = fm_list_peek_head_link (data->job->srcs);
        int i;
        char *disp;
        FmPath *path;
        
        GString *str = g_string_sized_new (512);
        path = FM_PATH (l->data);
        disp = fm_path_display_basename (path);
        g_string_assign (str, disp);
        g_free (disp);
        
        for ( i =1, l=l->next; i < 10 && l; l=l->next, ++i)
        {
            path = FM_PATH (l->data);
            g_string_append (str, _(", "));
            disp = fm_path_display_basename (path);
            g_string_append (str, disp);
            g_free (disp);
        }
        
        if (l)
            g_string_append (str, "...");
        
        gtk_label_set_text (GTK_LABEL (data->src), str->str);
        g_string_free (str, TRUE);
    }

    // FIXME_pcm: use accessor functions instead
    switch (data->job->type)
    {
        case FM_FILE_OP_MOVE:
            title = _("Moving files");
        break;
        
        case FM_FILE_OP_COPY:
            title = _("Copying files");
        break;
        
        case FM_FILE_OP_TRASH:
            title = _("Trashing files");
        break;
        
        case FM_FILE_OP_DELETE:
            title = _("Deleting files");
        break;
        
        case FM_FILE_OP_LINK:
            title = _("Creating symlinks");
        break;
        
        case FM_FILE_OP_CHANGE_ATTR:
            title = _("Changing file attributes");
        break;
    }
    
    if (title)
    {
        gtk_window_set_title (GTK_WINDOW (data->dlg), title);
        gtk_label_set_text (GTK_LABEL (data->act), title);
    }

    if (dest = fm_file_ops_job_get_dest (data->job))
    {
        char *dest_str = fm_path_display_name (dest, TRUE);
        gtk_label_set_text (GTK_LABEL (to), dest_str);
        g_free (dest_str);
    }
    else
    {
        gtk_widget_destroy (data->dest);
        gtk_widget_destroy (to_label);
    }

    gtk_window_present (GTK_WINDOW (data->dlg));
    data->update_timeout = g_timeout_add (500,  (GSourceFunc)on_update_dlg, data);

    data->delay_timeout = 0;
    return FALSE;
}
Exemplo n.º 15
0
static void
add_chat_msg(GtTwitchChatView* self,
             const gchar* sender,
             const gchar* colour,
             const gchar* msg,
             GList* emotes,
             gint user_modes)
{
    GtTwitchChatViewPrivate* priv = gt_twitch_chat_view_get_instance_private(self);
    GtkTextTag* sender_colour_tag = NULL;
    gint offset = 0;

    gtk_text_buffer_get_end_iter(priv->chat_buffer, &priv->bottom_iter);

    if (!colour || strlen(colour) < 1) //TODO: Set random colour instead of just black
        colour = get_default_chat_colour(sender);

    sender_colour_tag = gtk_text_tag_table_lookup(priv->tag_table, colour);

    if (!sender_colour_tag)
    {
        sender_colour_tag = gtk_text_tag_new(colour);
        g_object_set(sender_colour_tag,
                     "foreground", colour,
                     "weight", PANGO_WEIGHT_BOLD,
                     NULL);
        gtk_text_tag_table_add(priv->tag_table, sender_colour_tag);
    }

    offset = strlen(sender) + 2;

    //TODO: Cleanup?
#define INSERT_USER_MOD_PIXBUF(mode, name)                              \
    if (user_modes & mode)                                              \
    {                                                                   \
        gtk_text_buffer_insert_pixbuf(priv->chat_buffer, &priv->bottom_iter, priv->chat_badges->name); \
        gtk_text_buffer_insert(priv->chat_buffer, &priv->bottom_iter, " ", -1); \
        gtk_text_iter_forward_chars(&priv->bottom_iter, 2);             \
        offset += 2;                                                    \
    }                                                                   \

    INSERT_USER_MOD_PIXBUF(USER_MODE_SUBSCRIBER, subscriber);
    INSERT_USER_MOD_PIXBUF(USER_MODE_TURBO, turbo);
    INSERT_USER_MOD_PIXBUF(USER_MODE_GLOBAL_MOD, global_mod);
    INSERT_USER_MOD_PIXBUF(USER_MODE_BROADCASTER, broadcaster);
    INSERT_USER_MOD_PIXBUF(USER_MODE_STAFF, staff);
    INSERT_USER_MOD_PIXBUF(USER_MODE_ADMIN, admin);
    INSERT_USER_MOD_PIXBUF(USER_MODE_MOD, mod);

#undef INSERT_USER_MOD_PIXBUF

    gtk_text_buffer_insert_with_tags(priv->chat_buffer, &priv->bottom_iter, sender, -1, sender_colour_tag, NULL);
    gtk_text_iter_forward_word_end(&priv->bottom_iter);
    gtk_text_buffer_insert(priv->chat_buffer, &priv->bottom_iter, ": ", -1);
    gtk_text_iter_forward_chars(&priv->bottom_iter, 2);
    insert_message_with_emotes(priv->chat_buffer, &priv->bottom_iter, emotes, msg, offset);
    gtk_text_iter_forward_to_line_end(&priv->bottom_iter);
    gtk_text_buffer_insert(priv->chat_buffer, &priv->bottom_iter, "\n", -1);
    gtk_text_buffer_move_mark(priv->chat_buffer, priv->bottom_mark, &priv->bottom_iter);
    gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(priv->chat_view), priv->bottom_mark);
}
Exemplo n.º 16
0
static gboolean on_show_dlg(gpointer user_data)
{
    FmProgressDisplay* data = (FmProgressDisplay*)user_data;
    GtkBuilder* builder;
    GtkLabel* to;
    GtkWidget *to_label;
    FmPath* dest;
    const char* title = NULL;
    GtkTextTagTable* tag_table;

    GDK_THREADS_ENTER();
    if(g_source_is_destroyed(g_main_current_source()))
        goto _end;

    builder = gtk_builder_new();
    tag_table = gtk_text_tag_table_new();
    gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE);
    gtk_builder_add_from_file(builder, PACKAGE_UI_DIR "/progress.ui", NULL);

    data->dlg = GTK_DIALOG(gtk_builder_get_object(builder, "dlg"));
    g_object_weak_ref(G_OBJECT(data->dlg), on_progress_dialog_destroy, data);

    g_signal_connect(data->dlg, "response", G_CALLBACK(on_response), data);
    /* FIXME: connect to "close" signal */

    to_label = (GtkWidget*)gtk_builder_get_object(builder, "to_label");
    to = GTK_LABEL(gtk_builder_get_object(builder, "dest"));
    data->icon = GTK_IMAGE(gtk_builder_get_object(builder, "icon"));
    data->msg = GTK_LABEL(gtk_builder_get_object(builder, "msg"));
    data->act = GTK_LABEL(gtk_builder_get_object(builder, "action"));
    data->src = GTK_LABEL(gtk_builder_get_object(builder, "src"));
    data->dest = (GtkWidget*)gtk_builder_get_object(builder, "dest");
    data->current = GTK_LABEL(gtk_builder_get_object(builder, "current"));
    data->progress = GTK_PROGRESS_BAR(gtk_builder_get_object(builder, "progress"));
    data->error_pane = (GtkWidget*)gtk_builder_get_object(builder, "error_pane");
    data->error_msg = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "error_msg"));
    data->remaining_time = GTK_LABEL(gtk_builder_get_object(builder, "remaining_time"));

    data->bold_tag = gtk_text_tag_new("bold");
    g_object_set(data->bold_tag, "weight", PANGO_WEIGHT_BOLD, NULL);
    gtk_text_tag_table_add(tag_table, data->bold_tag);
    data->error_buf = gtk_text_buffer_new(tag_table);
    g_object_unref(tag_table);
    gtk_text_view_set_buffer(data->error_msg, data->error_buf);

    g_object_unref(builder);

    /* set the src label */
    /* FIXME: direct access to job struct! */
    if(data->job->srcs)
    {
        GList* l = fm_path_list_peek_head_link(data->job->srcs);
        int i;
        char* disp;
        FmPath* path;
        GString* str = g_string_sized_new(512);
        path = FM_PATH(l->data);
        disp = fm_path_display_basename(path);
        g_string_assign(str, disp);
        g_free(disp);
        for( i =1, l=l->next; i < 10 && l; l=l->next, ++i)
        {
            path = FM_PATH(l->data);
            g_string_append(str, _(", "));
            disp = fm_path_display_basename(path);
            g_string_append(str, disp);
            g_free(disp);
        }
        if(l)
            g_string_append(str, "...");
        gtk_label_set_text(data->src, str->str);
        g_string_free(str, TRUE);
    }

    /* FIXME: use accessor functions instead */
    /* FIXME: direct access to job struct! */
    switch(data->job->type)
    {
    case FM_FILE_OP_MOVE:
        title = _("Moving files");
        break;
    case FM_FILE_OP_COPY:
        title = _("Copying files");
        break;
    case FM_FILE_OP_TRASH:
        title = _("Trashing files");
        break;
    case FM_FILE_OP_DELETE:
        title = _("Deleting files");
        break;
    case FM_FILE_OP_LINK:
        title = _("Creating symlinks");
        break;
    case FM_FILE_OP_CHANGE_ATTR:
        title = _("Changing file attributes");
        break;
    case FM_FILE_OP_UNTRASH:
        break;
    case FM_FILE_OP_NONE: ;
    }
    if(title)
    {
        gtk_window_set_title(GTK_WINDOW(data->dlg), title);
        gtk_label_set_text(data->act, title);
    }

    dest = fm_file_ops_job_get_dest(data->job);
    if(dest)
    {
        char* dest_str = fm_path_display_name(dest, TRUE);
        gtk_label_set_text(to, dest_str);
        g_free(dest_str);
    }
    else
    {
        gtk_widget_destroy(data->dest);
        gtk_widget_destroy(to_label);
    }

    gtk_window_set_transient_for(GTK_WINDOW(data->dlg), data->parent);
    gtk_window_present(GTK_WINDOW(data->dlg));
    data->update_timeout = g_timeout_add(500, on_update_dlg, data);

    data->delay_timeout = 0;
_end:
    GDK_THREADS_LEAVE();
    return FALSE;
}
Exemplo n.º 17
0
static gboolean _on_show_dlg(gpointer user_data)
{
    FmProgressDisplay* data = (FmProgressDisplay*)user_data;
    GtkBuilder* builder;
    GtkLabel* to;
    GtkWidget *to_label;
    FmPath* dest;
    const char* title = NULL;
    GtkTextTagTable* tag_table;

    builder = gtk_builder_new();
    tag_table = gtk_text_tag_table_new();
    gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE);
    gtk_builder_add_from_file(builder, PACKAGE_UI_DIR "/progress.ui", NULL);

    data->dlg = GTK_DIALOG(gtk_builder_get_object(builder, "dlg"));
    g_object_weak_ref(G_OBJECT(data->dlg), on_progress_dialog_destroy, data);

    g_signal_connect(data->dlg, "response", G_CALLBACK(on_response), data);
    /* FIXME: connect to "close" signal */

    to_label = (GtkWidget*)gtk_builder_get_object(builder, "to_label");
    to = GTK_LABEL(gtk_builder_get_object(builder, "dest"));
    data->icon = GTK_IMAGE(gtk_builder_get_object(builder, "icon"));
    data->msg = GTK_LABEL(gtk_builder_get_object(builder, "msg"));
    data->act = GTK_LABEL(gtk_builder_get_object(builder, "action"));
    data->src = GTK_LABEL(gtk_builder_get_object(builder, "src"));
    data->dest = (GtkWidget*)gtk_builder_get_object(builder, "dest");
    data->current = GTK_LABEL(gtk_builder_get_object(builder, "current"));
    data->progress = GTK_PROGRESS_BAR(gtk_builder_get_object(builder, "progress"));
    data->error_pane = (GtkWidget*)gtk_builder_get_object(builder, "error_pane");
    data->error_msg = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "error_msg"));
    data->data_transferred = GTK_LABEL(gtk_builder_get_object(builder, "data_transferred"));
    data->data_transferred_label = GTK_LABEL(gtk_builder_get_object(builder, "data_transferred_label"));
    data->remaining_time = GTK_LABEL(gtk_builder_get_object(builder, "remaining_time"));
    data->remaining_time_label = GTK_LABEL(gtk_builder_get_object(builder, "remaining_time_label"));
    data->cancel = GTK_BUTTON(gtk_builder_get_object(builder, "cancel"));
    data->suspend = GTK_BUTTON(gtk_dialog_add_button(data->dlg, _("_Pause"), 1));
    gtk_button_set_use_stock(data->suspend, FALSE);
    gtk_button_set_use_underline(data->suspend, TRUE);
    gtk_button_set_image(data->suspend,
                         gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE,
                                                  GTK_ICON_SIZE_BUTTON));
    gtk_dialog_set_alternative_button_order(data->dlg, 1, GTK_RESPONSE_CANCEL, -1);
    data->bold_tag = gtk_text_tag_new("bold");
    g_object_set(data->bold_tag, "weight", PANGO_WEIGHT_BOLD, NULL);
    gtk_text_tag_table_add(tag_table, data->bold_tag);
    data->error_buf = gtk_text_buffer_new(tag_table);
    g_object_unref(tag_table);
    gtk_text_view_set_buffer(data->error_msg, data->error_buf);

    gtk_widget_hide(GTK_WIDGET(data->icon));

    g_object_unref(builder);

    /* set the src label */
    /* FIXME: direct access to job struct! */
    if(data->job->srcs)
    {
        GList* l = fm_path_list_peek_head_link(data->job->srcs);
        int i;
        char* disp;
        FmPath* path;
        GString* str = g_string_sized_new(512);
        path = FM_PATH(l->data);
        disp = fm_path_display_basename(path);
        g_string_assign(str, disp);
        g_free(disp);
        for( i =1, l=l->next; i < 10 && l; l=l->next, ++i)
        {
            path = FM_PATH(l->data);
            g_string_append(str, _(", "));
            disp = fm_path_display_basename(path);
            g_string_append(str, disp);
            g_free(disp);
        }
        if(l)
            g_string_append(str, "...");
        gtk_label_set_text(data->src, str->str);
        gtk_widget_set_tooltip_text(GTK_WIDGET(data->src), str->str);
        g_string_free(str, TRUE);
    }

    /* FIXME: use accessor functions instead */
    /* FIXME: direct access to job struct! */
    switch(data->job->type)
    {
    /* we set title here if text is complex so may be different from
       the op_text when is translated to other languages */
    case FM_FILE_OP_MOVE:
        /* translators: it is part of "Moving files:" or "Moving xxx.txt" */
        data->op_text = _("Moving");
        break;
    case FM_FILE_OP_COPY:
        /* translators: it is part of "Copying files:" or "Copying xxx.txt" */
        data->op_text = _("Copying");
        break;
    case FM_FILE_OP_TRASH:
        /* translators: it is part of "Trashing files:" or "Trashing xxx.txt" */
        data->op_text = _("Trashing");
        break;
    case FM_FILE_OP_DELETE:
        /* translators: it is part of "Deleting files:" or "Deleting xxx.txt" */
        data->op_text = _("Deleting");
        break;
    case FM_FILE_OP_LINK:
        /* translators: it is part of "Creating link /path/xxx.txt" */
        data->op_text = _("Creating link");
        /* translators: 'In:' string is followed by destination folder path */
        gtk_label_set_markup(GTK_LABEL(to_label), _("<b>In:</b>"));
        title = _("Creating links to files");
        /* NOTE: on creating single symlink or shortcut all operation
           is done in single I/O therefore it should fit into 0.5s
           timeout and progress window will never be shown */
        break;
    case FM_FILE_OP_CHANGE_ATTR:
        /* translators: it is part of "Changing attributes of xxx.txt" */
        data->op_text = _("Changing attributes of");
        title = _("Changing attributes of files");
        /* NOTE: the same about single symlink is appliable here so
           there is no need to add never used string for translation */
        break;
    case FM_FILE_OP_UNTRASH:
        /* translators: it is part of "Restoring files:" or "Restoring xxx.txt" */
        data->op_text = _("Restoring");
        break;
    case FM_FILE_OP_NONE: ;
    }
    data->str = g_string_sized_new(64);
    if (title)
        gtk_window_set_title(GTK_WINDOW(data->dlg), title);
    else
    {
        /* note to translators: resulting string is such as "Deleting files" */
        g_string_printf(data->str, _("%s files"), data->op_text);
        gtk_window_set_title(GTK_WINDOW(data->dlg), data->str->str);
    }
    gtk_label_set_markup(data->msg, _("<b>File operation is in progress...</b>"));
    gtk_widget_show(GTK_WIDGET(data->msg));
    if (title) /* we already know the exact string */
        g_string_printf(data->str, "<b>%s:</b>", title);
    else if (fm_path_list_get_length(data->job->srcs) == 1)
        /* note to translators: resulting string is such as "Deleting file" */
        g_string_printf(data->str, _("<b>%s file:</b>"), data->op_text);
    else
        /* note to translators: resulting string is such as "Deleting files" */
        g_string_printf(data->str, _("<b>%s files:</b>"), data->op_text);
    gtk_label_set_markup(data->act, data->str->str);

    dest = fm_file_ops_job_get_dest(data->job);
    if(dest)
    {
        char* dest_str = fm_path_display_name(dest, TRUE);
        gtk_label_set_text(to, dest_str);
        gtk_widget_set_tooltip_text(GTK_WIDGET(data->dest), dest_str);
        g_free(dest_str);
    }
    else
    {
        gtk_widget_destroy(data->dest);
        gtk_widget_destroy(to_label);
    }

    gtk_window_set_transient_for(GTK_WINDOW(data->dlg), data->parent);
    gtk_window_present(GTK_WINDOW(data->dlg));

    data->delay_timeout = 0;
    return FALSE;
}
Exemplo n.º 18
0
/* Process plain text in the font table (font names separated by semicolons) */
static void
font_table_text(ParserContext *ctx)
{
	gchar *name, *semicolon, *tagname, *fontstring = NULL;
	FontProperties *fontprop;
	FontTableState *state = (FontTableState *)get_state(ctx);
	GtkTextTag *tag;
	static gchar *font_suggestions[] = {
		"Sans", /* Default font for \fnil */
		"Serif", /* \froman */
		"Sans", /* \fswiss */
		"Monospace", /* \fmodern */
		"Script", /* \fscript */
		NULL, /* \fdecor */
		NULL, /* \ftech */
		NULL /* \fbidi */
	};
	
	name = g_strdup(ctx->text->str);
	semicolon = strchr(name, ';');
	if(!semicolon)
	{
		gchar *newname = g_strconcat(state->name, name, NULL);
		g_free(state->name);
		state->name = newname;
		g_string_truncate(ctx->text, 0);
		return;
	}
	g_string_assign(ctx->text, semicolon + 1); /* Leave the text after the semicolon in the buffer */
	*semicolon = '\0';
	
	fontprop = g_slice_new0(FontProperties);
	fontprop->index = state->index;
	fontprop->codepage = state->codepage;
	fontprop->font_name = g_strconcat(state->name, name, NULL);
	ctx->font_table = g_slist_prepend(ctx->font_table, fontprop);
	
	/* Add the tag to the buffer right now instead of when the font is used,
	since any font might be declared the default font; remove any previous font
	with this font table index first */
	tagname = g_strdup_printf("osxcart-rtf-font-%i", state->index);
    if((tag = gtk_text_tag_table_lookup(ctx->tags, tagname)))
        gtk_text_tag_table_remove(ctx->tags, tag);
    tag = gtk_text_tag_new(tagname);

    if(fontprop->font_name && font_suggestions[state->family])
        fontstring = g_strconcat(fontprop->font_name, 
                                 ",", 
                                 font_suggestions[state->family], 
                                 NULL);
    else if(fontprop->font_name)
        fontstring = g_strdup(fontprop->font_name);
    else if(font_suggestions[state->family])
        fontstring = g_strdup(font_suggestions[state->family]);

    if(fontstring)
    {
        g_object_set(tag, 
                     "family", fontstring, 
                     "family-set", TRUE,
                     NULL);
        g_free(fontstring);
    }
    gtk_text_tag_table_add(ctx->tags, tag);
	g_free(tagname);

	g_free(state->name);
	state->index = 0;
	state->family = FONT_FAMILY_NIL;
	state->codepage = -1;
	state->name = g_strdup("");
}
Exemplo n.º 19
0
void create_text_buffer()
{
	gint i;

	LOG(LOG_DEBUG, "IN : create_text_buffer()");

	if(text_buffer != NULL){
		g_object_unref(G_OBJECT(text_buffer));
/*
		g_object_unref(G_OBJECT(text_buffer));
		g_object_unref(tag_keyword);
		g_object_unref(tag_bold);
		g_object_unref(tag_link);
		g_object_unref(tag_sound);
		g_object_unref(tag_movie);
		g_object_unref(tag_italic);
		g_object_unref(tag_subscript);
		g_object_unref(tag_superscript);
		g_object_unref(tag_gaiji);
		g_object_unref(tag_plain);
		g_object_unref(tag_colored);
		g_object_unref(tag_reverse);
		for(i=0; i < MAX_INDENT ; i ++){
			g_object_unref(tag_indent[i]);
		}
*/

	}


	tag_table = gtk_text_tag_table_new();
	text_buffer = gtk_text_buffer_new (tag_table);
/*
	g_object_set(text_buffer,
		     "tag-table", tag_table);
*/
	tag_keyword = gtk_text_tag_new("keyword");
	g_object_set(tag_keyword,
		     "weight", PANGO_WEIGHT_BOLD, 
		     "foreground", color_str[COLOR_KEYWORD],
		     "font", fontset_normal,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_keyword);

	tag_bold = gtk_text_tag_new("bold");
	g_object_set(tag_bold,
		     "weight", PANGO_WEIGHT_BOLD, 
		     "font", fontset_bold,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_bold);

	tag_link = gtk_text_tag_new("link");
	g_object_set(tag_link,
		     "foreground", color_str[COLOR_LINK],
		     "font", fontset_normal,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_link);

	tag_sound = gtk_text_tag_new("sound");
	g_object_set(tag_sound,
		     "foreground", color_str[COLOR_SOUND],
		     "font", fontset_normal,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_sound);

	tag_movie = gtk_text_tag_new("movie");
	g_object_set(tag_movie,
		     "foreground", color_str[COLOR_MOVIE],
		     "font", fontset_normal,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_movie);

	tag_italic = gtk_text_tag_new("italic");
	g_object_set(tag_italic,
		     "style", PANGO_STYLE_ITALIC,
		     "font", fontset_italic,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_italic);

	tag_superscript = gtk_text_tag_new("superscript");
	g_object_set(tag_superscript,
		     "rise", 5 * PANGO_SCALE,
		     "rise", 3,
		     "font", fontset_superscript,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_superscript);

	tag_subscript = gtk_text_tag_new("subscript");
	g_object_set(tag_subscript,
//		     "rise", -5 * PANGO_SCALE,
		     "rise", -3,
		     "font", fontset_superscript,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_subscript);

	tag_gaiji = gtk_text_tag_new("gaiji");
	g_object_set(tag_gaiji,
		     "rise", -2 * PANGO_SCALE,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_gaiji);

	tag_center = gtk_text_tag_new("center");
	g_object_set(tag_center,
		     "justification", GTK_JUSTIFY_CENTER,
		     "font", fontset_normal,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_center);

	tag_plain = gtk_text_tag_new("plain");
	g_object_set(tag_plain,
		     "wrap_mode", GTK_WRAP_WORD,
		     "font", fontset_normal,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_plain);

	tag_colored = gtk_text_tag_new("colored");
	g_object_set(tag_colored,
		     "foreground", color_str[COLOR_EMPHASIS],
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_colored);

	tag_reverse = gtk_text_tag_new("reverse");
	g_object_set(tag_reverse,
		     "background", color_str[COLOR_REVERSE_BG],
//		     "foreground", color_str[COLOR_EMPHASIS],
//		     "foreground", "#ff0000",
//		     "font", fontset_normal,
		     NULL);
	gtk_text_tag_table_add(tag_table, tag_reverse);

	for(i=0; i < MAX_INDENT ; i ++){
		gchar name[16];
		sprintf(name, "tag%d", i);
		tag_indent[i] = gtk_text_tag_new(name);
		g_object_set(tag_indent[i],
			     "left_margin", i * INDENT_LEFT_MARGIN + INITIAL_LEFT_MARGIN,
			     NULL);
		gtk_text_tag_table_add(tag_table, tag_indent[i]);
	}

/*
	tag_keyword = gtk_text_buffer_create_tag(text_buffer, "keyword", 
					 "weight", PANGO_WEIGHT_BOLD, 
					 "foreground", color_str[COLOR_KEYWORD],
					 "font", fontset_normal,
					 NULL);
	tag_bold = gtk_text_buffer_create_tag(text_buffer, "bold", 
					 "weight", PANGO_WEIGHT_BOLD, 
					 "font", fontset_bold,
					 NULL);
	tag_link = gtk_text_buffer_create_tag(text_buffer, "link", 
					 "foreground", color_str[COLOR_LINK],
					 "font", fontset_normal,
					 NULL);
	tag_sound = gtk_text_buffer_create_tag(text_buffer, "sound", 
					 "foreground", color_str[COLOR_SOUND],
					 "font", fontset_normal,
					 NULL);
	tag_movie = gtk_text_buffer_create_tag(text_buffer, "movie", 
					 "foreground", color_str[COLOR_MOVIE],
					 "font", fontset_normal,
					 NULL);
	tag_italic = gtk_text_buffer_create_tag(text_buffer, "italic",
					"style", PANGO_STYLE_ITALIC,
					"font", fontset_italic,
					NULL);
	tag_superscript = gtk_text_buffer_create_tag(text_buffer, "superscript",
//					     "rise", 5 * PANGO_SCALE,
					     "rise", 3,
					     "font", fontset_superscript,
					     NULL);
	tag_subscript = gtk_text_buffer_create_tag(text_buffer, "subscript",
//					   "rise", -5 * PANGO_SCALE,
					   "rise", -3,
					   "font", fontset_superscript,
					  NULL);
	tag_gaiji = gtk_text_buffer_create_tag(text_buffer, "gaiji",
					   "rise", -2 * PANGO_SCALE,
					  NULL);
	tag_center = gtk_text_buffer_create_tag(text_buffer, "center",
					  "justification", GTK_JUSTIFY_CENTER,
					 "font", fontset_normal,
					  NULL);
	tag_plain = gtk_text_buffer_create_tag(text_buffer, "plain",
					 "wrap_mode", GTK_WRAP_WORD,
					 "font", fontset_normal,
					  NULL);
	for(i=0; i < MAX_INDENT ; i ++){
		gchar name[16];
		sprintf(name, "tag%d", i);
		tag_indent[i] = gtk_text_buffer_create_tag(text_buffer, name,
					 "left_margin", i * INDENT_LEFT_MARGIN + INITIAL_LEFT_MARGIN,
					  NULL);
	}
	*/

	LOG(LOG_DEBUG, "OUT : create_text_buffer()");

}
Exemplo n.º 20
0
void internal_output_add_text(SESSION_STATE *session, GtkTextView *output,
    gchar * data, gsize len, TEXT_ATTR * ansi)
{
  GtkTextBuffer *buffer;
  GtkTextIter start, end;
  gint offset;
  GtkTextTagTable *tagtable;

  g_return_if_fail(session != NULL);

//  gsize read, written;
//  GError *error = NULL;
//  gchar *new_data;

  g_return_if_fail(data != NULL);

  buffer = gtk_text_view_get_buffer (output);

  gtk_text_buffer_get_end_iter(buffer, &end);
  offset = gtk_text_iter_get_offset(&end);

/*
  Conversion sometimes causes weird crashes - disabled
  new_data =
      g_convert(data, len, "UTF-8", "ISO-8859-1", &read, &written,
          &error);
  gtk_text_buffer_insert(buffer, &end, new_data, -1);

  g_free(new_data);
*/
  gtk_text_buffer_insert( buffer, &end, data, len );

  if (ansi == NULL)
    return;   // nothing to do

  // apply some tags on inserted text 
  gtk_text_buffer_get_iter_at_offset(buffer, &start, offset);
  gtk_text_buffer_get_end_iter(buffer, &end);

  tagtable = gtk_text_buffer_get_tag_table(buffer);

  if (ansi->boldfont) {
    gtk_text_buffer_apply_tag_by_name(buffer, "bold", &start,
              &end);
  }
  if (ansi->italic) {
    gtk_text_buffer_apply_tag_by_name(buffer, "italic", &start,
              &end);
  }
  if (ansi->underline) {
    gtk_text_buffer_apply_tag_by_name(buffer, "underline",
              &start, &end);
  }

  if (session->linkCmd) {
    // create the link-tag
    char *name = 0;
    static char tmpln[] = "AAAAAAAAAA-tmplink";
    if (session->linkName)
      name = g_strdup(session->linkName);
    else {
      int i = 0;
      name = strdup(tmpln);
      while (i < 10) {  // generate name for next unnamed link
        tmpln[i]++;
        if (tmpln[i] > 'Z') {
          tmpln[i] = 'A';
          i++;
        } else
          break;
      }
    }
    GtkTextTag *t = gtk_text_tag_new(name);
    g_object_set_data(G_OBJECT(t), "linkname",
          g_strdup(session->linkName));
    g_object_set_data(G_OBJECT(t), "action",
          g_strdup(session->linkCmd));
    g_object_set_data(G_OBJECT(t), "type",
          session->isSendLink ? "command" : "url");
    g_object_set_data(G_OBJECT(t), "menu",
          session->isMenuLink ? "yes" : "no");

    GtkTextTagTable *table =
        gtk_text_buffer_get_tag_table(buffer);
    gtk_text_tag_table_add(table, t);
    gtk_text_buffer_apply_tag(buffer, t, &start, &end);
    g_signal_connect(G_OBJECT(t), "event",
         G_CALLBACK(on_tag_click), session);
    g_free(name);
  }

  GtkTextTag *tag = get_fg_color_tag(buffer, ansi->fgcolor);
  if (tag) gtk_text_buffer_apply_tag(buffer, tag, &start, &end);

  if (ansi->bgcolor != 0) {
    GtkTextTag *tag = get_bg_color_tag(buffer, ansi->bgcolor);
    gtk_text_buffer_apply_tag(buffer, tag, &start, &end);
  }
}
Exemplo n.º 21
0
GtkTextTagTable *ctk_help_create_tag_table(void)
{
    GtkTextTagTable *table;
    GtkTextTag *tag;

    table = gtk_text_tag_table_new();

    /* CTK_HELP_TITLE_TAG */

    tag = gtk_text_tag_new(CTK_HELP_TITLE_TAG);

    g_object_set(G_OBJECT(tag),
                 "weight", PANGO_WEIGHT_BOLD,
                 "size", 15 * PANGO_SCALE,
                 NULL);

    gtk_text_tag_table_add(table, tag);

    /* CTK_HELP_HEADING_TAG */

    tag = gtk_text_tag_new(CTK_HELP_HEADING_TAG);

    g_object_set(G_OBJECT(tag),
                 "weight", PANGO_WEIGHT_BOLD,
                 "size", 12 * PANGO_SCALE,
                 NULL);

    gtk_text_tag_table_add(table, tag);

    /* CTK_HELP_HEADING_NOT_EDITABLE */

    tag = gtk_text_tag_new(CTK_HELP_HEADING_NOT_EDITABLE_TAG);

    g_object_set(G_OBJECT(tag), "editable", FALSE, NULL);

    gtk_text_tag_table_add(table, tag);

    /* CTK_HELP_WORD_WRAP_TAG */

    tag = gtk_text_tag_new(CTK_HELP_WORD_WRAP_TAG);

    g_object_set(G_OBJECT(tag), "wrap_mode", GTK_WRAP_WORD, NULL);

    gtk_text_tag_table_add(table, tag);

    /* CTK_HELP_MARGIN_TAG */

    tag = gtk_text_tag_new(CTK_HELP_MARGIN_TAG);

    g_object_set(G_OBJECT(tag), "left_margin", 10, "right_margin", 10, NULL);

    gtk_text_tag_table_add(table, tag);

    /* CTK_HELP_SINGLE_SPACE_TAG */

    tag = gtk_text_tag_new(CTK_HELP_SINGLE_SPACE_TAG);

    g_object_set(G_OBJECT(tag), "pixels_inside_wrap", 0, NULL);

    gtk_text_tag_table_add(table, tag);

    /* CTK_HELP_BOLD_TAG */

    tag = gtk_text_tag_new(CTK_HELP_BOLD_TAG);

    g_object_set(G_OBJECT(tag), "weight", PANGO_WEIGHT_BOLD, NULL);

    gtk_text_tag_table_add(table, tag);

    return table;
}
Exemplo n.º 22
0
static void
entry_info_fetched_done (EntryProperties *eprop, GdaLdapEntry *entry)
{
	GtkTextBuffer *tbuffer;
	GtkTextIter start, end;
	TConnection *tcnc = eprop->priv->tcnc;
	
	tbuffer = eprop->priv->text;
	gtk_text_buffer_get_start_iter (tbuffer, &start);
	gtk_text_buffer_get_end_iter (tbuffer, &end);
	gtk_text_buffer_delete (tbuffer, &start, &end);

	guint i;
	GtkTextIter current;

	gtk_text_buffer_get_start_iter (tbuffer, &current);

	/* DN */
	gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current, _("Distinguished Name:"), -1,
						  "section", NULL);
	gtk_text_buffer_insert (tbuffer, &current, "\n", -1);
	gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current, " ", -1, "starter", NULL);
	gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current, entry->dn, -1,
						  "data", NULL);
	gtk_text_buffer_insert (tbuffer, &current, "\n", -1);

	/* other attributes */
	const gchar *basedn;
	GdaDataHandler *ts_dh = NULL;
	basedn = t_connection_ldap_get_base_dn (tcnc);

	for (i = 0; i < entry->nb_attributes; i++) {
		GdaLdapAttribute *attr;
		gchar *tmp;
		attr = entry->attributes [i];
		tmp = g_strdup_printf ("%s:", attr->attr_name);
		gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current, tmp, -1, "section", NULL);
		g_free (tmp);
		gtk_text_buffer_insert (tbuffer, &current, "\n", -1);

		guint j;
		for (j = 0; j < attr->nb_values; j++) {
			const GValue *cvalue;
			cvalue = attr->values [j];

			gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current, " ", -1,
								  "starter", NULL);

			if (G_VALUE_TYPE (cvalue) == GDA_TYPE_BINARY) {
				GValue *copyvalue;
				GtkTextTagTable *table;
				GtkTextTag *tag;
				GtkTextMark *mark;

				copyvalue = gda_value_copy (cvalue);
				table = gtk_text_buffer_get_tag_table (tbuffer);
				tag = gtk_text_tag_new (NULL);
				gtk_text_tag_table_add (table, tag);
				g_object_set_data_full ((GObject*) tag, "binvalue",
							copyvalue, (GDestroyNotify) gda_value_free);
				g_object_unref ((GObject*) tag);

				mark = gtk_text_buffer_create_mark (tbuffer, NULL, &current, TRUE);

				GdkPixbuf *pixbuf;
				pixbuf = data_to_pixbuf (cvalue);
				if (pixbuf) {
					gtk_text_buffer_insert_pixbuf (tbuffer, &current, pixbuf); 
					g_object_unref (pixbuf);
				}
				else {
					GdaDataHandler *dh;
					dh = gda_data_handler_get_default (G_VALUE_TYPE (cvalue));
					if (dh)
						tmp = gda_data_handler_get_str_from_value (dh, cvalue);
					else
						tmp = gda_value_stringify (cvalue);
					gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current,
										  tmp, -1,
										  "data", NULL);
					g_free (tmp);
				}
				GtkTextIter before;
				gtk_text_buffer_get_iter_at_mark (tbuffer, &before, mark);
				gtk_text_buffer_apply_tag (tbuffer, tag, &before, &current);
				gtk_text_buffer_delete_mark (tbuffer, mark);
					
				gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current,
									  "\n", 1,
									  "data", NULL);
			}
			else {
				GdaDataHandler *dh;
				dh = gda_data_handler_get_default (G_VALUE_TYPE (cvalue));
				if (dh)
					tmp = gda_data_handler_get_str_from_value (dh, cvalue);
				else
					tmp = gda_value_stringify (cvalue);
				if (tmp) {
					if (*tmp &&
					    ((basedn && g_str_has_suffix (tmp, basedn)) || !basedn) &&
					    gda_ldap_is_dn (tmp)) {
						/* we have a DN */
						GtkTextTag *tag;
						tag = gtk_text_buffer_create_tag (tbuffer, NULL,
										  "foreground", "blue",
										  "weight", PANGO_WEIGHT_NORMAL,
										  "underline", PANGO_UNDERLINE_SINGLE,
										  NULL);
						g_object_set_data_full (G_OBJECT (tag), "dn",
									g_strdup (tmp), g_free);
						gtk_text_buffer_insert_with_tags (tbuffer, &current,
										  tmp, -1,
										  tag, NULL);
					}
					else if (attr->attr_name &&
						 !g_ascii_strcasecmp (attr->attr_name, "objectClass")) {
						GtkTextTag *tag;
						tag = gtk_text_buffer_create_tag (tbuffer, NULL,
										  "foreground", "blue",
										  "weight", PANGO_WEIGHT_NORMAL,
										  "underline", PANGO_UNDERLINE_SINGLE,
										  NULL);
						g_object_set_data_full (G_OBJECT (tag), "class",
									g_strdup (tmp), g_free);
						gtk_text_buffer_insert_with_tags (tbuffer, &current,
										  tmp, -1,
										  tag, NULL);
					}
					else
						gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current, tmp, -1,
											  "data", NULL);

					gchar *extrainfo = NULL;
					if (!strncmp (attr->attr_name, "shadow", 6) &&
					    (!strcmp (attr->attr_name, "shadowLastChange") ||
					     !strcmp (attr->attr_name, "shadowMax") ||
					     !strcmp (attr->attr_name, "shadowMin") ||
					     !strcmp (attr->attr_name, "shadowInactive") ||
					     !strcmp (attr->attr_name, "shadowExpire")))
						extrainfo = unix_shadow_to_string (tmp, attr->attr_name);
					else if (!strcmp (attr->attr_name, "badPasswordTime") ||
						 !strcmp (attr->attr_name, "lastLogon") ||
						 !strcmp (attr->attr_name, "pwdLastSet") ||
						 !strcmp (attr->attr_name, "accountExpires") ||
						 !strcmp (attr->attr_name, "lockoutTime") ||
						 !strcmp (attr->attr_name, "lastLogonTimestamp"))
						extrainfo = ad_1601_timestamp_to_string (tmp, attr->attr_name);
					else if (!strcmp (attr->attr_name, "userAccountControl"))
						extrainfo = ad_1601_uac_to_string (tmp);
					else if (!strcmp (attr->attr_name, "sAMAccountType"))
						extrainfo = ad_sam_account_type_to_string (tmp);

					if (extrainfo) {
						gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current,
											  " ", 1,
											  "data", NULL);
						gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current,
											  extrainfo, -1,
											  "convdata", NULL);
						g_free (extrainfo);
					}
					g_free (tmp);
				}
				else {
					gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current, _("Can't display attribute value"), -1,
										  "error", NULL);
				}
				gtk_text_buffer_insert_with_tags_by_name (tbuffer, &current,
									  "\n", 1,
									  "data", NULL);
			}
		}
	}
	if (ts_dh)
		g_object_unref (ts_dh);
	gda_ldap_entry_free (entry);


	if (eprop->priv->text_search && gtk_widget_get_visible (eprop->priv->text_search))
		text_search_rerun (TEXT_SEARCH (eprop->priv->text_search));
}
Exemplo n.º 23
0
static GcrDisplayItem*
create_display_item (GcrDisplayView *self, GcrRenderer *renderer)
{
	GcrDisplayItem *item;
	GtkTextTagTable *tags;
	GtkTextIter iter;
	GtkWidget *widget;
	GtkWidget *label;
	GtkWidget *alignment;

	item = g_new0 (GcrDisplayItem, 1);
	item->display_view = self;
	item->renderer = renderer;

	tags = gtk_text_buffer_get_tag_table (self->pv->buffer);

	g_assert (!item->field_tag);
	item->field_width = 0;
	item->field_tag = g_object_new (GTK_TYPE_TEXT_TAG,
	                                "left-margin", item->field_width + FIELD_MARGIN,
	                                "indent", item->field_width,
	                                "pixels-below-lines", 3,
	                                "wrap-mode", GTK_WRAP_WORD_CHAR,
	                                NULL);
	gtk_text_tag_table_add (tags, item->field_tag);

	g_assert (!item->details_tag);
	item->details_tag = g_object_new (GTK_TYPE_TEXT_TAG, NULL);
	gtk_text_tag_table_add (tags, item->details_tag);

	/* The mark that determines the beginning of this item, with left gravity. */
	gtk_text_buffer_get_end_iter (self->pv->buffer, &iter);
	item->beginning = gtk_text_buffer_create_mark (self->pv->buffer, NULL, &iter, TRUE);
	g_object_ref (item->beginning);

	/* The mark that determines the end of this item, with right gravity. */
	gtk_text_buffer_get_end_iter (self->pv->buffer, &iter);
	item->ending = gtk_text_buffer_create_mark (self->pv->buffer, NULL, &iter, FALSE);
	g_object_ref (item->ending);

	widget = gtk_expander_new_with_mnemonic ("");
	label = gtk_expander_get_label_widget (GTK_EXPANDER (widget));
	gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), "<b>_Details</b>");
	g_signal_connect (widget, "notify::expanded", G_CALLBACK (on_expander_expanded), item);
	g_signal_connect (widget, "realize", G_CALLBACK (on_expander_realize), NULL);
	item->expanded = gtk_expander_get_expanded (GTK_EXPANDER (widget));

	alignment = gtk_alignment_new (0.5, 0.5, 0.5, 0.5);
	gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 9, 0, 0);
	gtk_container_add (GTK_CONTAINER (alignment), widget);
	gtk_widget_show_all (alignment);

	item->details_widget = gtk_event_box_new ();
	gtk_container_add (GTK_CONTAINER (item->details_widget), alignment);
	g_signal_connect (item->details_widget, "realize", G_CALLBACK (on_expander_realize), NULL);
	g_object_ref (item->details_widget);

	if (gtk_widget_get_realized (GTK_WIDGET (self)))
		style_display_item (GTK_WIDGET (self), item);

	/* TODO: Initialize the rest of the fields */

	return item;
}
static void
gtk_text_buffer_insert_markup(GtkTextBuffer * buffer, GtkTextIter * iter,
			      const gchar * markup)
{
    PangoAttrIterator *paiter;
    PangoAttrList *attrlist;
    GtkTextMark *mark;
    GError *error = NULL;
    gchar *text;

    g_return_if_fail(GTK_IS_TEXT_BUFFER(buffer));
    g_return_if_fail(markup != NULL);

    if (*markup == '\000')
	return;

    /* invalid */
    if (!pango_parse_markup(markup, -1, 0, &attrlist, &text, NULL, &error)) {
	g_warning("Invalid markup string: %s", error->message);
	g_error_free(error);
	return;
    }

    /* trivial, no markup */
    if (attrlist == NULL) {
	gtk_text_buffer_insert(buffer, iter, text, -1);
	g_free(text);
	return;
    }

    /* create mark with right gravity */
    mark = gtk_text_buffer_create_mark(buffer, NULL, iter, FALSE);
    paiter = pango_attr_list_get_iterator(attrlist);

    do {
	PangoAttribute *attr;
	GtkTextTag *tag;
	GtkTextTag *tag_para;
	gint start, end;

	pango_attr_iterator_range(paiter, &start, &end);

	if (end == G_MAXINT)	/* last chunk */
	    end = start - 1;	/* resulting in -1 to be passed to _insert */

	tag = gtk_text_tag_new(NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_LANGUAGE)))
	    g_object_set(tag, "language",
			 pango_language_to_string(((PangoAttrLanguage *)
						   attr)->value), NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_FAMILY)))
	    g_object_set(tag, "family", ((PangoAttrString *) attr)->value,
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_STYLE)))
	    g_object_set(tag, "style", ((PangoAttrInt *) attr)->value,
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_WEIGHT)))
	    g_object_set(tag, "weight", ((PangoAttrInt *) attr)->value,
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_VARIANT)))
	    g_object_set(tag, "variant", ((PangoAttrInt *) attr)->value,
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_STRETCH)))
	    g_object_set(tag, "stretch", ((PangoAttrInt *) attr)->value,
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_SIZE)))
	    g_object_set(tag, "size", ((PangoAttrInt *) attr)->value,
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_FONT_DESC)))
	    g_object_set(tag, "font-desc",
			 ((PangoAttrFontDesc *) attr)->desc, NULL);

	if ((attr =
	     pango_attr_iterator_get(paiter, PANGO_ATTR_FOREGROUND))) {
	    GdkColor col = { 0,
		((PangoAttrColor *) attr)->color.red,
		((PangoAttrColor *) attr)->color.green,
		((PangoAttrColor *) attr)->color.blue
	    };

	    g_object_set(tag, "foreground-gdk", &col, NULL);
	}

	if ((attr =
	     pango_attr_iterator_get(paiter, PANGO_ATTR_BACKGROUND))) {
	    GdkColor col = { 0,
		((PangoAttrColor *) attr)->color.red,
		((PangoAttrColor *) attr)->color.green,
		((PangoAttrColor *) attr)->color.blue
	    };

	    g_object_set(tag, "background-gdk", &col, NULL);
	}

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_UNDERLINE)))
	    g_object_set(tag, "underline", ((PangoAttrInt *) attr)->value,
			 NULL);

	if ((attr =
	     pango_attr_iterator_get(paiter, PANGO_ATTR_STRIKETHROUGH)))
	    g_object_set(tag, "strikethrough",
			 (gboolean) (((PangoAttrInt *) attr)->value != 0),
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_RISE)))
	    g_object_set(tag, "rise", ((PangoAttrInt *) attr)->value,
			 NULL);

	if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_SCALE)))
	    g_object_set(tag, "scale", ((PangoAttrFloat *) attr)->value,
			 NULL);

	gtk_text_tag_table_add(gtk_text_buffer_get_tag_table(buffer), tag);

	tag_para =
	    gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table
				      (buffer), "para");
	gtk_text_buffer_insert_with_tags(buffer, iter, text + start,
					 end - start, tag, tag_para, NULL);

	/* mark had right gravity, so it should be
	 *      at the end of the inserted text now */
	gtk_text_buffer_get_iter_at_mark(buffer, iter, mark);
    } while (pango_attr_iterator_next(paiter));

    gtk_text_buffer_delete_mark(buffer, mark);
    pango_attr_iterator_destroy(paiter);
    pango_attr_list_unref(attrlist);
    g_free(text);
}
Exemplo n.º 25
0
static void bug_information_generate_message(GtkTextBuffer * buffer)
{
	int i;
	gchar *temp;
	GtkTextIter iter;
	GtkTextTag *bold_tag, *larger_tag;
	GtkTextTagTable *table;

	/* get buffer's tag table */
	table = gtk_text_buffer_get_tag_table(buffer);
	/* Create bold tag */
	bold_tag = gtk_text_tag_new("bold");
	g_object_set(G_OBJECT(bold_tag), "weight", PANGO_WEIGHT_BOLD, NULL);
	/* add bold_tag to tag table */
	gtk_text_tag_table_add(table, bold_tag);

	/* Create bold tag */
	larger_tag = gtk_text_tag_new("larger");
	g_object_set(G_OBJECT(larger_tag), "scale", PANGO_SCALE_X_LARGE, NULL);
	/* add larger_tag to tag table */
	gtk_text_tag_table_add(table, larger_tag);

	/* Get the start */
	gtk_text_buffer_get_start_iter(buffer, &iter);

	/* insert program name */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Gnome Music Player Client\n", -1, bold_tag, larger_tag, NULL);
	/* insert copyright */
	gtk_text_buffer_insert_with_tags(buffer, &iter, GMPC_COPYRIGHT "\n\n", -1, bold_tag, NULL);

	/* insert tagline */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Tagline:\t", -1, bold_tag, NULL);
	gtk_text_buffer_insert(buffer, &iter, GMPC_TAGLINE "\n", -1);

	/* insert version */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Version:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%i.%i.%i\n", GMPC_MAJOR_VERSION, GMPC_MINOR_VERSION, GMPC_MICRO_VERSION);
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);

	/* insert revision */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Revision:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%s\n", revision);
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);

	/** support libs */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nSupport libraries:\n", -1, bold_tag, larger_tag, NULL);

	/* libmpd */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Libmpd:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%i.%i.%i\n", LIBMPD_MAJOR_VERSION, LIBMPD_MINOR_VERSION, LIBMPD_MICRO_VERSION);
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);

	/* gtk+-2.0 */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Compile time Gtk+-2.0:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%i.%i.%i\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);

	gtk_text_buffer_insert_with_tags(buffer, &iter, "Runtime Gtk+-2.0:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%i.%i.%i\n", gtk_major_version, gtk_minor_version, gtk_micro_version);
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);

	/* glib-2.0 */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Glib-2.0:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%i.%i.%i\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);

	/* glib-2.0 */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Runtime sqlite3:\t", -1, bold_tag, NULL);
	gtk_text_buffer_insert(buffer, &iter, sqlite3_libversion(), -1);

	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nCompile time sqlite3:\t", -1, bold_tag, NULL);
	gtk_text_buffer_insert(buffer, &iter, SQLITE_VERSION, -1);

#ifdef HAVE_UNIQUE
	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nLibunique:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%s\n", UNIQUE_VERSION_S);
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);
#endif	
	/* platform */
	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nPlatform:\t", -1, bold_tag, NULL);
#ifdef WIN32
	gtk_text_buffer_insert(buffer, &iter, "Windows\n", -1);
	gtk_text_buffer_insert_with_tags(buffer, &iter, "Windows version:\t", -1, bold_tag, NULL);
	temp = g_strdup_printf("%i\n", g_win32_get_windows_version());
	gtk_text_buffer_insert(buffer, &iter, temp, -1);
	g_free(temp);
#else
#ifdef OSX
	gtk_text_buffer_insert(buffer, &iter, "Mac OsX\n", -1);
#else
	gtk_text_buffer_insert(buffer, &iter, "*nix\n", -1);
#endif
#endif

	/** compile flags*/
	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nCompile flags:\n", -1, bold_tag, larger_tag, NULL);

	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nNLS Support:\t", -1, bold_tag, NULL);
#ifdef ENABLE_NLS
	gtk_text_buffer_insert(buffer, &iter, "Enabled", -1);
#else
	gtk_text_buffer_insert(buffer, &iter, "Disabled", -1);
#endif

	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nMultimedia Keys:\t", -1, bold_tag, NULL);
#ifdef ENABLE_MMKEYS
	gtk_text_buffer_insert(buffer, &iter, "Enabled", -1);
#else
	gtk_text_buffer_insert(buffer, &iter, "Disabled", -1);
#endif

    gtk_text_buffer_insert_with_tags(buffer, &iter, "\nAppIndicator Support:\t", -1, bold_tag, NULL);
#ifdef HAVE_APP_INDICATOR
    gtk_text_buffer_insert(buffer, &iter, "Enabled", -1);
#else
    gtk_text_buffer_insert(buffer, &iter, "Disabled", -1);
#endif

	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nLibspiff support:\t", -1, bold_tag, NULL);
#ifdef SPIFF
	gtk_text_buffer_insert(buffer, &iter, "Enabled", -1);
#else
	gtk_text_buffer_insert(buffer, &iter, "Disabled", -1);
#endif

	gtk_text_buffer_insert_with_tags(buffer, &iter, "\nLibunique support:\t", -1, bold_tag, NULL);
#ifdef HAVE_UNIQUE
	gtk_text_buffer_insert(buffer, &iter, "Enabled", -1);
#else
	gtk_text_buffer_insert(buffer, &iter, "Disabled", -1);
#endif

	/** Plugins */
	if (num_plugins > 0)
	{
		gtk_text_buffer_insert_with_tags(buffer, &iter, "\n\nExternal Plugins:\n", -1, bold_tag, larger_tag, NULL);
		for (i = 0; i < num_plugins; i++)
		{
			if (!gmpc_plugin_is_internal(plugins[i]))
			{
				const gchar *name = gmpc_plugin_get_name(plugins[i]);
				const int *version = gmpc_plugin_get_version(plugins[i]);
				if(gmpc_plugin_get_enabled(plugins[i])) {
					gtk_text_buffer_insert(buffer, &iter, "☑ ", -1);
				}else  {
					gtk_text_buffer_insert(buffer, &iter, "☐ ", -1);
				}
				gtk_text_buffer_insert_with_tags(buffer, &iter, name, -1, bold_tag, NULL);
				temp = g_strdup_printf("\t%i.%i.%i\n", version[0], version[1], version[2]);
				gtk_text_buffer_insert(buffer, &iter, temp, -1);
				g_free(temp);
			}
		}
	}
	if (num_plugins > 0)
	{
		gtk_text_buffer_insert_with_tags(buffer, &iter, "\n\nMetadata Plugins:\n", -1, bold_tag, larger_tag, NULL);
		for (i = 0; i < num_plugins; i++)
		{
			if (gmpc_plugin_is_metadata(plugins[i]))
			{
				const gchar *name = gmpc_plugin_get_name(plugins[i]);
				const int *version = gmpc_plugin_get_version(plugins[i]);
				if(gmpc_plugin_get_enabled(plugins[i])) {
					gtk_text_buffer_insert(buffer, &iter, "☑ ", -1);
				}else  {
					gtk_text_buffer_insert(buffer, &iter, "☐ ", -1);
				}
				gtk_text_buffer_insert_with_tags(buffer, &iter, name, -1, bold_tag, NULL);
				temp = g_strdup_printf("\t%i.%i.%i\n", version[0], version[1], version[2]);
				gtk_text_buffer_insert(buffer, &iter, temp, -1);
				g_free(temp);
			}
		}
	}

	if (mpd_check_connected(connection))
	{
		gchar **handlers;
		/** Plugins */
		gtk_text_buffer_insert_with_tags(buffer, &iter, "\nMusic Player Daemon:\n", -1, bold_tag, larger_tag, NULL);

		/* Version */
		gtk_text_buffer_insert_with_tags(buffer, &iter, "Version:\t", -1, bold_tag, NULL);
		temp = mpd_server_get_version(connection);
		gtk_text_buffer_insert(buffer, &iter, temp, -1);
		g_free(temp);

		/* total songs */
		gtk_text_buffer_insert_with_tags(buffer, &iter, "\nSongs:\t", -1, bold_tag, NULL);
		temp = g_strdup_printf("%i", mpd_stats_get_total_songs(connection));
		gtk_text_buffer_insert(buffer, &iter, temp, -1);
		g_free(temp);

		/* hostname */
		gtk_text_buffer_insert_with_tags(buffer, &iter, "\nHostname:\t", -1, bold_tag, NULL);
		temp = connection_get_hostname();
		gtk_text_buffer_insert(buffer, &iter, temp, -1);
		/* handlers */
		gtk_text_buffer_insert_with_tags(buffer, &iter, "\nUrl handlers:\t", -1, bold_tag, NULL);
		handlers = mpd_server_get_url_handlers(connection);
		if (handlers)
		{
			temp = g_strjoinv(",", handlers);
			g_strfreev(handlers);
			handlers = NULL;
		} else
			temp = g_strdup("N/A");
		gtk_text_buffer_insert(buffer, &iter, temp, -1);
		g_free(temp);

	}
}
Exemplo n.º 26
0
GtkTextBuffer *
cainteoir_document_create_buffer(CainteoirDocument *doc)
{
	GtkTextTagTable *tags = gtk_text_tag_table_new();
	GtkTextBuffer *buffer = gtk_text_buffer_new(tags);

	GtkTextIter position;
	gtk_text_buffer_get_end_iter(buffer, &position);

	std::list<std::string> anchor;
	std::stack<tag_block> contexts;
	bool need_linebreak = false;
	for (auto &entry : CAINTEOIR_DOCUMENT_PRIVATE(doc)->doc->children())
	{
		if (entry.type & events::begin_context)
		{
			GtkTextTag *tag = nullptr;
			if (entry.styles)
			{
				tag = gtk_text_tag_table_lookup(tags, entry.styles->name.c_str());
				if (!tag)
				{
					tag = create_text_tag_from_style(*entry.styles);
					gtk_text_tag_table_add(tags, tag);
				}
			}

			if (need_linebreak && entry.styles) switch (entry.styles->display)
			{
			case cainteoir::css::display::block:
			case cainteoir::css::display::line_break:
			case cainteoir::css::display::list_item:
			case cainteoir::css::display::table:
			case cainteoir::css::display::table_row:
			case cainteoir::css::display::table_cell:
				gtk_text_buffer_insert(buffer, &position, "\n", 1);
				gtk_text_buffer_get_end_iter(buffer, &position);
				need_linebreak = false;
				break;
			}
			contexts.push({ tag, gtk_text_iter_get_offset(&position) });
		}
		if (entry.type & cainteoir::events::anchor)
			anchor.push_back(entry.anchor.str());
		if (entry.type & cainteoir::events::text)
		{
			for (auto &a : anchor)
				(void)gtk_text_buffer_create_mark(buffer, a.c_str(), &position, TRUE);
			anchor.clear();

			const gchar *start = entry.content->begin();
			const gchar *end   = entry.content->end();
			while (start < end)
			{
				const gchar *next  = start;
				bool valid = g_utf8_validate(start, end - start, &next);
				if (start != next)
					gtk_text_buffer_insert(buffer, &position, start, next - start);
				if (!valid)
				{
					char text[20];
					int n = snprintf(text, 20, "<%02X>", (uint8_t)*next++);
					gtk_text_buffer_insert(buffer, &position, text, n);
				}
				start = next;
			}

			gtk_text_buffer_get_end_iter(buffer, &position);
			need_linebreak = true;
		}
		if (entry.type & events::end_context)
		{
			if (!contexts.empty())
			{
				GtkTextTag *tag = contexts.top().tag;
				if (tag)
				{
					GtkTextIter start;
					gtk_text_buffer_get_iter_at_offset(buffer, &start, contexts.top().offset);
					gtk_text_buffer_apply_tag(buffer, tag, &start, &position);
				}
				contexts.pop();
			}
		}
	}

	return buffer;
}