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