Class: MyButton

Inherits:
Gtk::Button
  • Object
show all
Includes:
Conf, GtkAttributes, ManqodCommon
Defined in:
lib/ListHolder/ListButtonHolder/ListButton.rb

Overview

this file is part of manqod manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint([email protected])

Constant Summary

Constants included from ManqodCommon

ManqodCommon::CRITICAL, ManqodCommon::DEBUG, ManqodCommon::ERROR, ManqodCommon::INFO, ManqodCommon::NORMAL, ManqodCommon::WARNING

Constants included from Eprint

Eprint::DOMAIN, Eprint::LEVEL

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from GtkAttributes

#default_attribute, #gtk_attribute, #gtk_attribute_of_object, #gtkobjectid, #gtkobjecttype, #set_gtk_attribute

Methods included from ManqodCommon

#add_where, #admin, #admin_cache, #admin_qrow, #admin_rows, #backtrace_to_debug, #cache, #changed_ids_of_base, #client, #client_fields, #client_image_of_id, #client_qrow, #client_query, #client_rows, #eeval, #escape_string, #getBinding, #guess_base, #guess_table, #image_of_id, #lzero, #manqod_db, #measure, #myexec, #nick, #nick_id, #number_format, #qrow, #query, #reconnect_manqod_db, #rows, #run_events, #send_message, #sendmail, #set_manqod_db_uri, #set_nick

Methods included from Eprint

#ecode, #edebug, #eerror, #einfo, #enormal, #eprint, #ewarn, #gtk_set_edebug, #set_edebug, #tell_exception

Methods included from Conf

#get_conf, #load_conf, #save_conf, #set_conf

Constructor Details

#initialize(properties, caller, holder = nil) ⇒ MyButton

Returns a new instance of MyButton.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# 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=if gtk_attribute('column-of-sensitivity') then @caller.list.list_model.headers[gtk_attribute('column-of-sensitivity')]["model_col"] else nil 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?
		filechooser.add_filter(csv=Gtk::FileFilter.new.add_pattern("*.csv").set_name('csv'))
		filechooser.set_filter(csv)

  	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

Instance Attribute Details

#callerObject

Returns the value of attribute caller.



226
227
228
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 226

def caller
  @caller
end

#propertiesObject

Returns the value of attribute properties.



225
226
227
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 225

def properties
  @properties
end

Instance Method Details

#functionObject



255
256
257
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 255

def function
@properties['btfunct']
end

#groupObject



273
274
275
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 273

def group
	gtk_attribute("group")
end

#group_widgetObject



276
277
278
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 276

def group_widget
	@holder.groups[group] if group
end

#image_widgetObject



232
233
234
235
236
237
238
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 232

def image_widget
	w=nil
	child.child.each{|ch|
	w=ch if ch.class.name == "Gtk::Image"
}
w
end

#inspectObject



299
300
301
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 299

def inspect
	"MyListButton #{@properties['display']} of #{@caller.list}"
end

#label_widgetObject



239
240
241
242
243
244
245
246
247
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 239

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_fontObject



228
229
230
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 228

def modify_label_widget_font
  label_widget.modify_font(Pango::FontDescription.new(get_conf(0,0,"list-button-font"))) unless label_widget.nil?
end

#parentMObject



263
264
265
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 263

def parentM
@caller.parentM
end

#parentselectedObject



259
260
261
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 259

def parentselected
@caller.list.get_cursor_id
end

#selection_sensitive?Boolean

Returns:

  • (Boolean)


288
289
290
291
292
293
294
295
296
297
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 288

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?Boolean

Returns:

  • (Boolean)


270
271
272
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 270

def show_icon?
	@show_icon
end

#show_text?Boolean

Returns:

  • (Boolean)


267
268
269
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 267

def show_text?
	@show_text
end

#targetObject



249
250
251
252
253
254
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 249

def target
	case function
		when "wysiwygf" then parentselected
	else @properties['target_moditemid']
end
end

#to_sObject



302
303
304
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 302

def to_s
	inspect
end

#update(notifier) ⇒ Object



280
281
282
283
284
285
286
# File 'lib/ListHolder/ListButtonHolder/ListButton.rb', line 280

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