class MyButton
this file is part of manqod manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
Attributes
caller[RW]
properties[RW]
Public Class Methods
new(properties,caller,holder=nil)
click to toggle source
Calls superclass method
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 9 def initialize(properties,caller,holder=nil) @caller=caller @properties=properties @holder=holder @show_icon=if gtk_attribute('show-mode') then gtk_attribute('show-mode') == 'icon only' || gtk_attribute('show-mode') == 'icon and text' || false else true end @show_text=if gtk_attribute('show-mode') then gtk_attribute('show-mode') == 'text only' || gtk_attribute('show-mode') == 'icon and text' || false else true end @column_of_sensitivity=nil if gtk_attribute('column-of-sensitivity') if @caller.list.list_model.headers.has_key?(gtk_attribute('column-of-sensitivity')) @column_of_sensitivity=@caller.list.list_model.headers[gtk_attribute('column-of-sensitivity')]["model_col"] else warn("You need to add \"#{gtk_attribute('column-of-sensitivity')}\" as Invisible String to #{@caller.list}") end end super() set_use_underline(true) set_relief(Gtk::ReliefStyle::NONE) # signal_connect('enter-notify-event'){|me,event|me.set_state(Gtk::STATE_SELECTED)} # signal_connect('leave-notify-event'){|me,event|me.set_state(Gtk::STATE_NORMAL)} case @properties['btfunct'] when 'add' @properties['display']='add' if @properties['display'].empty? set_label(@properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::ADD,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked') do |c| if @properties['target_moditemid'].to_i >0 case @properties['moditem_render_mode'] when 'embedded' then @caller.list.changed if @caller.notebook when 'newwindow' begin form=Myform::MyFormHolder.new("dialog",self,"add",target).set_parentM(@caller.list) ret=form.run(@caller.list.get_cursor_id) ensure form.destroy end end else #builtin edebug("builtin add row on #{@caller.list}","list-button","info") @caller.list.add_row(nil) end end when 'modify' @properties['display']='modify' if @properties['display'].empty? set_label(@properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::EDIT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked') { |c| if @properties['target_moditemid'].to_i >0 case @properties['moditem_render_mode'] when 'embedded' then @caller.list.changed if @caller.notebook when 'newwindow' begin form=Myform::MyFormHolder.new("dialog",self,"modify",target).set_parentM(@caller.list) ret=form.run(@caller.list.get_cursor_id, @caller.list.selected_ids) ensure form.destroy end end end #if } when 'wysiwygf' @properties['display']='wysiwyg' if @properties['display'].empty? set_label(@properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::PROPERTIES,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked'){|c| if @caller.list.get_cursor_id form=Myform::MyFormHolder.new("dialog",self,"wysiwygf",target).set_parentM(@caller.list) ret=form.run(@caller.list.get_cursor_id) end } when 'info' properties['display']='info' if properties['display'].empty? set_label(properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::INFO,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked') do |c| if properties['target_moditemid'].to_i >0 case properties['moditem_render_mode'] when 'embedded' caller.list.changed if caller.notebook when 'newwindow' if @caller.list.get_cursor_id form=Myform::MyFormHolder.new("dialog",self,"info",target).set_parentM(@caller.list) ret=form.run(@caller.list.get_cursor_id) end end end #if end when 'copy' @properties['display']='copy' if @properties['display'].empty? set_label(@properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::COPY,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked'){|c| if @properties['target_moditemid'].to_i >0 case @properties['moditem_render_mode'] when 'embedded' @caller.list.changed if @caller.notebook when 'newwindow' if @caller.list.get_cursor_id form=Myform::MyFormHolder.new("dialog",self,"copy",target).set_parentM(@caller.list) ret=form.run(@caller.list.get_cursor_id) end end else #builtin warner=Gtk::MessageDialog.new(get_ancestor(Gtk::Window),Gtk::Dialog::DESTROY_WITH_PARENT,Gtk::MessageDialog::QUESTION,Gtk::MessageDialog::BUTTONS_YES_NO,"#{@properties['display']}?") warner.set_image(Gtk::Image.new(Gtk::Stock::COPY,Gtk::IconSize::DIALOG)) if warner.show_all.run == Gtk::Dialog::RESPONSE_YES @caller.list.duplicate_selected(self) end warner.destroy end } when 'remove' @properties['display']='remove' if @properties['display'].empty? set_label(@properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::REMOVE,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked'){|me| ids=Array.new @caller.list.selection.selected_each { |model, path, iter| ids.push(iter[@caller.list.list_model.column_of_id])} ids.each{|id_to_lock| @caller.list.list_model.lock_iter(id_to_lock)} warner=Gtk::MessageDialog.new(get_ancestor(Gtk::Window),Gtk::Dialog::DESTROY_WITH_PARENT,Gtk::MessageDialog::QUESTION,Gtk::MessageDialog::BUTTONS_YES_NO,"#{@properties['display']} #{ids.size}?") warner.set_image(Gtk::Image.new(Gtk::Stock::REMOVE,Gtk::IconSize::DIALOG)) begin if warner.show_all.run == Gtk::Dialog::RESPONSE_YES if @properties['target_moditemid'].to_i >0 ids.each{|id_to_rm| @caller.list.set_cursor_id(id_to_rm) if @caller.list.get_cursor_id form=Myform::MyFormHolder.new("dialog",self,"remove",target).set_parentM(@caller.list) ret=form.run(@caller.list.get_cursor_id) @caller.list.remove_selected(self) if ret>=0 end } else @caller.list.remove_selected(self,ids) end end ensure ids.each{|id_to_unlock| @caller.list.list_model.unlock_iter(id_to_unlock)} ids=nil warner.close end } when 'print' @properties['display']='print' if @properties['display'].empty? set_label(@properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::PRINT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked') do |c| if @properties['target_moditemid'].to_i >0 ids=Array.new @caller.list.selection.selected_each { |model, path, iter| ids.push(iter[@caller.list.list_model.column_of_id])} if printop=MyPrintOperation.new(@caller.list,@properties['target_moditemid'].to_i,ids.join(",")) printop.run(Gtk::PrintOperation::Action::PRINT_DIALOG) end ids=nil else #builtin list print @caller.list.gtkprint end end when 'pwysiwyg' @properties['display']='wysiwyg print editor' if @properties['display'].empty? set_label(@properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::PRINT_PREVIEW,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked'){ |c| WysiwygPrintEditor.new(self,@caller.list.get_cursor_id).run if @caller.list.get_cursor_id } when 'export' properties['display']='export' if properties['display'].empty? set_label(properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::CONVERT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked'){|c| filechooser=Gtk::FileChooserDialog.new("Export to file", @caller.get_ancestor(Gtk::Window), Gtk::FileChooser::ACTION_SAVE, nil, [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL], [Gtk::Stock::CONVERT, Gtk::Dialog::RESPONSE_ACCEPT]) filechooser.set_filename(get_conf(@caller.list.list_id,0,"csvfilename")) unless get_conf(@caller.list.list_id,0,"csvfilename").nil? filechooser.add_filter(csv=Gtk::FileFilter.new.add_pattern("*.csv").set_name('csv')) filechooser.set_filter(csv) # filechooser.set_current_folder(get_conf(@caller.list.list_id,0,"csvfolder")) if filechooser.run == Gtk::Dialog::RESPONSE_ACCEPT # set_conf(@caller.list.list_id,0,"csvfolder",filechooser.current_folder) set_conf(@caller.list.list_id,0,"csvfilename",filechooser.filename) @caller.list.list_model.to_csv(filechooser.filename) end filechooser.destroy } when 'import' properties['display']='import' if properties['display'].empty? set_label(properties['display']) if show_text? set_image(Gtk::Image.new(Gtk::Stock::CONVERT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon? signal_connect('clicked'){|c| filechooser=Gtk::FileChooserDialog.new("Import from file", @caller.get_ancestor(Gtk::Window), Gtk::FileChooser::ACTION_OPEN, nil, [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL], [Gtk::Stock::CONVERT, Gtk::Dialog::RESPONSE_ACCEPT]) filechooser.set_filename(get_conf(@caller.list.list_id,0,"csvfilename")) unless get_conf(@caller.list.list_id,0,"csvfilename").nil? ftype=(@caller.list.gtk_attribute("file_filter") ? @caller.list.gtk_attribute("file_filter").split(",") : ["*.csv"]) ftt=nil ftype.each{|ft| filechooser.add_filter(ftt=Gtk::FileFilter.new.add_pattern(ft).set_name(ft)) } filechooser.set_filter(ftt) if ftt if filechooser.run == Gtk::Dialog::RESPONSE_ACCEPT set_conf(@caller.list.list_id,0,"csvfilename",filechooser.filename) @caller.list.list_model.from_csv(filechooser.filename) end filechooser.destroy } else p "Unknown Button: "+@properties['btfunct'] end modify_label_widget_font if show_text? #use the list's tips to set tooltip for this button @caller.list.tip.set_tip(self,@properties['display'],nil) end
Public Instance Methods
function()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 266 def function @properties['btfunct'] end
group()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 284 def group gtk_attribute("group") end
group_widget()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 287 def group_widget @holder.groups[group] if group end
image_widget()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 243 def image_widget w=nil child.child.each{|ch| w=ch if ch.class.name == "Gtk::Image" } w end
inspect()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 310 def inspect "MyListButton #{@properties['display']} of #{@caller.list}" end
label_widget()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 250 def label_widget w=nil if show_icon? child.child.each{|ch| w=ch if ch.class.name == "Gtk::Label" } else each{|ch| w=ch if ch.class.name == "Gtk::Label"} end w end
modify_label_widget_font()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 239 def modify_label_widget_font label_widget.modify_font(Pango::FontDescription.new(get_conf(0,0,"list-button-font"))) unless label_widget.nil? end
parentM()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 274 def parentM @caller.parentM end
parentselected()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 270 def parentselected @caller.list.get_cursor_id end
selection_sensitive?()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 299 def selection_sensitive? if @column_of_sensitivity then r=@caller.list.list_model.iter_at_cursor[@column_of_sensitivity]=='true' @caller.list.selection.selected_each { |model, path, iter| r=false if iter[@column_of_sensitivity]=='false' } r else true end end
show_icon?()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 281 def show_icon? @show_icon end
show_text?()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 278 def show_text? @show_text end
target()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 260 def target case function when "wysiwygf" then parentselected else @properties['target_moditemid'] end end
to_s()
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 313 def to_s inspect end
update(notifier)
click to toggle source
# File lib/ListHolder/ListButtonHolder/ListButton.rb, line 291 def update(notifier) case @properties['btfunct'] when 'add','import' then set_sensitive((notifier.parentM ? notifier.parentM.get_cursor_id> -1 : true) && (@column_of_sensitivity && notifier.list_model.iter_at_cursor ? notifier.list_model.iter_at_cursor[@column_of_sensitivity]=='true' : true )) when 'print' then set_sensitive(if @properties['target_moditemid'].to_i >0 then notifier.get_cursor_id else true end) else set_sensitive(!notifier.get_cursor_id.nil? && notifier.list_model.iter_at_cursor && notifier.list_model.iter_at_cursor[notifier.list_model.column_of_sensitive] && selection_sensitive?) end end