From: <nu...@co...> - 2012-02-23 21:04:28
|
Vincent Carmona 2012-02-24 05:49:43 +0900 (Fri, 24 Feb 2012) New Revision: a7afd9b1809b195bb211faca6615a9f18151e136 Merged 781d3f2: Merge branch 'infobar' Log: [gtk2] Add InfoBar class Added files: gtk2/ext/gtk2/rbgtkinfobar.c gtk2/sample/misc/infobar.rb Modified files: gtk2/ext/gtk2/global.h gtk2/ext/gtk2/init.c Modified: gtk2/ext/gtk2/global.h (+1 -0) =================================================================== --- gtk2/ext/gtk2/global.h 2012-01-16 02:05:54 +0900 (3d9bbd9) +++ gtk2/ext/gtk2/global.h 2012-02-24 05:49:43 +0900 (f0709ec) @@ -176,6 +176,7 @@ G_GNUC_INTERNAL void Init_gtk_image_menu_item(VALUE mGtk); G_GNUC_INTERNAL void Init_gtk_imcontext(VALUE mGtk); G_GNUC_INTERNAL void Init_gtk_imcontext_simple(VALUE mGtk); G_GNUC_INTERNAL void Init_gtk_im_multicontext(VALUE mGtk); +G_GNUC_INTERNAL void Init_gtk_infobar(VALUE mGtk); G_GNUC_INTERNAL void Init_gtk_input_dialog(VALUE mGtk); G_GNUC_INTERNAL void Init_gtk_invisible(VALUE mGtk); G_GNUC_INTERNAL void Init_gtk_item(VALUE mGtk); Modified: gtk2/ext/gtk2/init.c (+1 -0) =================================================================== --- gtk2/ext/gtk2/init.c 2012-01-16 02:05:54 +0900 (6a59678) +++ gtk2/ext/gtk2/init.c 2012-02-24 05:49:43 +0900 (93f07bc) @@ -166,6 +166,7 @@ Init_gtk2(void) Init_gtk_imcontext(mGtk); Init_gtk_imcontext_simple(mGtk); Init_gtk_im_multicontext(mGtk); + Init_gtk_infobar(mGtk); Init_gtk_input_dialog(mGtk); Init_gtk_invisible(mGtk); Init_gtk_item(mGtk); Added: gtk2/ext/gtk2/rbgtkinfobar.c (+151 -0) 100644 =================================================================== --- /dev/null +++ gtk2/ext/gtk2/rbgtkinfobar.c 2012-02-24 05:49:43 +0900 (79de8bb) @@ -0,0 +1,151 @@ +/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */ +/* + * Copyright (C) 2012 Ruby-GNOME2 Project Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include "global.h" + +#if GTK_CHECK_VERSION(2,18,0) +#define RG_TARGET_NAMESPACE cInfoBar +#define _SELF(self) (GTK_INFO_BAR(RVAL2GOBJ(self))) + +static VALUE +rg_initialize(int argc, VALUE *argv, VALUE self) +{ + if (argc == 0){ + RBGTK_INITIALIZE(self, gtk_info_bar_new ()); + } else if (argc > 0){ + //TODO gtk_info_bar_new_with_buttons + } else { + rb_raise(rb_eArgError, "invalid argument number"); + } + return Qnil; +} + +static VALUE +rg_get_action_area(VALUE self) +{ + return GOBJ2RVAL(gtk_info_bar_get_action_area(_SELF(self))); +} + +static VALUE +rg_get_content_area(VALUE self) +{ + return GOBJ2RVAL(gtk_info_bar_get_content_area(_SELF(self))); +} + +static VALUE +rg_get_message_type(VALUE self) +{ + return GENUM2RVAL(gtk_info_bar_get_message_type(_SELF(self)), + GTK_TYPE_MESSAGE_TYPE); +} + +static VALUE +rg_set_message_type(VALUE self, VALUE type) +{ + gtk_info_bar_set_message_type(_SELF(self), + RVAL2GENUM(type, GTK_TYPE_MESSAGE_TYPE)); + return self; +} + +static VALUE +rg_set_default_response(VALUE self, VALUE response_id) +{ + gtk_info_bar_set_default_response(_SELF(self), + RVAL2GENUM(response_id, GTK_TYPE_RESPONSE_TYPE)); + return self; +} + +static VALUE +rg_add_action_widget(VALUE self, VALUE widget, VALUE response_id) +{ + gtk_info_bar_add_action_widget(_SELF(self), + GTK_WIDGET(RVAL2GOBJ(widget)), + RVAL2GENUM(response_id, GTK_TYPE_RESPONSE_TYPE)); + return self; +} + +static VALUE +rg_add_button(VALUE self, VALUE button_text, VALUE response_id) +{ + const gchar *name; + if (SYMBOL_P(button_text)) { + name = rb_id2name(SYM2ID(button_text)); + } else { + name = RVAL2CSTR(button_text); + } + return GOBJ2RVAL(gtk_info_bar_add_button(_SELF(self), name, + RVAL2GENUM(response_id, GTK_TYPE_RESPONSE_TYPE))); +} + +/* +static VALUE +rg_add_buttons(int argc, VALUE *argv, VALUE self) +{ +} +*/ + +static VALUE +rg_set_response_sensitive(VALUE self, VALUE response_id, VALUE sensitive) +{ + gtk_info_bar_set_response_sensitive(_SELF(self), + RVAL2GENUM(response_id, GTK_TYPE_RESPONSE_TYPE), + RVAL2CBOOL(sensitive)); + return self; +} + +static VALUE +rg_response(VALUE self, VALUE response_id) +{ + gtk_info_bar_response(_SELF(self), RVAL2GENUM(response_id, GTK_TYPE_RESPONSE_TYPE)); + return self; +} + +void +Init_gtk_infobar(VALUE mGtk) +{ + VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(GTK_TYPE_INFO_BAR, "InfoBar", mGtk); + + RG_DEF_METHOD(initialize, -1); + RG_DEF_METHOD(get_action_area, 0); + RG_DEF_ALIAS("action_area", "get_action_area"); + RG_DEF_METHOD(get_content_area, 0); + RG_DEF_ALIAS("content_area", "get_content_area"); + RG_DEF_METHOD(get_message_type, 0); + RG_DEF_ALIAS("message_type", "get_message_type"); + RG_DEF_METHOD(set_message_type, 1); + G_DEF_SETTER(RG_TARGET_NAMESPACE, "message_type"); + RG_DEF_METHOD(set_default_response, 1); + RG_DEF_METHOD(add_action_widget, 2); + RG_DEF_METHOD(add_button, 2); +/* + RG_DEF_METHOD(add_buttons, -1); +*/ + RG_DEF_METHOD(set_response_sensitive, 2); + RG_DEF_METHOD(response, 1); + + /* GtkMessageType. Allready defined in rbgtkmessagedialog.c */ + G_DEF_CLASS(GTK_TYPE_MESSAGE_TYPE, "Type", RG_TARGET_NAMESPACE); + G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, GTK_TYPE_MESSAGE_TYPE, "GTK_MESSAGE_"); + + /* GtkResponseType. Allready defined in rbgtkdialog.c */ + G_DEF_CLASS(GTK_TYPE_RESPONSE_TYPE, "ResponseType", RG_TARGET_NAMESPACE); + G_DEF_CONSTANTS(RG_TARGET_NAMESPACE, GTK_TYPE_RESPONSE_TYPE, "GTK_"); +} +#endif Added: gtk2/sample/misc/infobar.rb (+24 -0) 100755 =================================================================== --- /dev/null +++ gtk2/sample/misc/infobar.rb 2012-02-24 05:49:43 +0900 (3fea006) @@ -0,0 +1,24 @@ +#!/usr/bin/env ruby + +require 'gtk2' + +label=Gtk::Label.new.show + +info=Gtk::InfoBar.new +info.no_show_all=true +info.content_area.add(label) +info.add_button(Gtk::Stock::OK, Gtk::InfoBar::RESPONSE_OK) +info.signal_connect('response'){|info, response| info.hide} + +w=Gtk::Window.new +w.add(info) +w.show_all +w.signal_connect("delete_event"){Gtk.main_quit} + +GLib::Timeout.add_seconds(1){ + label.text='ERROR' + info.message_type=Gtk::InfoBar::ERROR + info.show + false +} +Gtk.main |