class QObject
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
link[R]
obj_id[R]
obj_type[R]
Public Class Methods
new(q,link_or_fields=nil)
click to toggle source
q - the QueryBuilder link_or_fields - link: an object from the RelationBuilder
- fields: the fields from the table `qobjects`
Calls superclass method
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 12 def initialize(q,link_or_fields=nil) whsv=false begin whsv=Gtk::SourceView::BUILD_VERSION rescue => err einfo("no Gtk::SourceView, falling back") end super() #("initializing") pack_start(Gtk::ScrolledWindow.new.set_policy(Gtk::PolicyType::AUTOMATIC,Gtk::PolicyType::NEVER).set_shadow_type(Gtk::ShadowType::NONE).add(@widget=whsv ? Gtk::SourceView.new : Gtk::TextView.new)) @rel_reverted=false @q=q @custom="false" case link_or_fields.class.name when "Hash" then #load @my_id=link_or_fields["id"] @obj_type=link_or_fields["obj_type"] @obj_id=link_or_fields["obj_id"] @field=link_or_fields["field"] @custom=link_or_fields["custom"] @rel_reverted=!@field.nil? && @field.include?("reverted") set_link_from_data when "RField" then @link=link_or_fields @my_id=nil @obj_type="f" @field=link.field_name @obj_id=link.table.table_id store when "RTable" then @link=link_or_fields @my_id=nil @obj_type="b" @obj_id=link.table_id store when "Relation" then @link=link_or_fields @my_id=nil @obj_type="r" @obj_id=link.relation_id.to_i store else edebug("unknown link: #{@link}(#{link_or_fields.class.name})","relation-builder",WARNING) end if whsv @widget.buffer.set_language(Gtk::SourceLanguageManager.new.get_language("sql")) @widget.set_auto_indent(true). set_highlight_current_line(true). set_indent_on_tab(true). set_indent_on_tab(true). set_indent_width(4) end @widget.set_editable(is_custom?) @widget.modify_base(Gtk::StateType::NORMAL,Gdk::Color.parse("yellow")) if is_custom? @widget.signal_connect("focus-out-event"){|me,ev| @field=text store @q.update(@q) false } @q.qobjects.push(self) case @obj_type when "b" then @q.from.pack_start(self,false,false) when "f" then @q.select.pack_start(self,false,false) pack_start(rmbutton=Gtk::Button.new.set_image(Gtk::Image.new(Gtk::Stock::CANCEL,Gtk::IconSize::MENU)).set_relief(Gtk::ReliefStyle::NONE),false) rmbutton.signal_connect("clicked"){|me| self.delete} when "r" then @q.from.pack_start(self,false,false) pack_start(rotbutton=Gtk::ToggleButton.new.set_image(Gtk::Image.new(Gtk::Stock::REFRESH,Gtk::IconSize::MENU)).set_relief(Gtk::ReliefStyle::NONE),false) pack_start(rmbutton=Gtk::Button.new,false) rmbutton.set_image(Gtk::Image.new(Gtk::Stock::CANCEL,Gtk::IconSize::MENU)).set_relief(Gtk::ReliefStyle::NONE).signal_connect("clicked"){|me| self.delete} rotbutton.set_active(@rel_reverted) rotbutton.signal_connect("toggled"){|me| @rel_reverted=me.active? store @q.update(@q) } end show_all case @link.class.name when "RField","Relation" then @link.set_active(true) end end
Public Instance Methods
center_on_link()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 264 def center_on_link link.center_on_me unless link.nil? end
delete()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 221 def delete query("delete from `qobjects` where id='#{@my_id}'") if @my_id @q.qobjects.delete(self) self.destroy if is_custom? #so all qobjects get updated @q.update(@q) else #update the link, that will also update all qobjects case @link.class.name when "RField" then @link.set_active(false) when "Relation" then @link.set_active(false) end end end
find_base_dir(rel,been_there=nil)
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 103 def find_base_dir(rel,been_there=nil) if been_there.nil? been_there=Array.new end been_there.push(rel.relation_id) ret=nil ret=rel.rfield1 if rel.rfield1.table.table_id.to_i == @q.base_object.obj_id.to_i ret=rel.rfield2 if rel.rfield2.table.table_id.to_i == @q.base_object.obj_id.to_i unless ret @q.rb.relations.each_pair{|rel_id,r| unless been_there.include?(r.relation_id) if r.rfield1.table.table_id == rel.rfield1.table.table_id or r.rfield2.table.table_id == rel.rfield1.table.table_id if other_dir=find_base_dir(r,been_there) ret=rel.rfield1 end end if r.rfield1.table.table_id == rel.rfield2.table.table_id or r.rfield2.table.table_id == rel.rfield2.table.table_id if other_dir=find_base_dir(r,been_there) ret=rel.rfield2 end end break if ret end } end ret end
gen_text()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 131 def gen_text ret="" if is_custom? ret=@field || "" else begin case @obj_type when "f" then ret="`#{@link.table.table}`.`#{@link.field_name}`#{"," unless last_field?}" when "r" then dir=find_base_dir(@link) dir=@link.other_field(dir) if @rel_reverted #reverted path edebug("field to base: #{dir}","relation-builder",INFO) if dir other_field=@link.other_field(dir) edebug("field to base other_field: #{other_field}","relation-builder",INFO) if @link.rel_name == "" ret="left join `#{other_field.table.table}` on `#{other_field.table.table}`.`#{other_field.field_name}` = `#{dir.table.table}`.`#{dir.field_name}`" else ret="left join `#{other_field.table.table}` as #{@link.rel_name} on `#{@link.rel_name}`.`#{other_field.field_name}` = `#{dir.table.table}`.`#{dir.field_name}`" end unless @link.rel_custom == "" ret="#{ret} and #{@link.rel_custom}" end else ret="can't reach base" end when "b" then ret="`#{@link.table}`" else ret="unknown object type" end rescue =>err edebug("#{err}, #{backtrace_to_debug(err)}\n","relation-builder","warning") ret="unavailable object" end end ret end
inspect()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 256 def inspect "QObject of #{@link}(#{@obj_type} id:#{@my_id})" end
is_custom?()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 98 def is_custom? return false if @custom.nil? @custom == "true" end
last_field?()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 237 def last_field? last_field=nil @q.qobjects.reverse_each{|qobject| if qobject.obj_type == "f" last_field = qobject break end } last_field == self end
set_link(new_link)
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 187 def set_link(new_link) @link=new_link self end
set_link_from_data()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 169 def set_link_from_data #if any data changed this should be called. it'll try to link to another object unless is_custom? @link=case @obj_type when "b" then @q.rb.table_by_id(@obj_id) when "f" then if table=@q.rb.table_by_id(@obj_id) then table.fields[@field]; end when "r" then @q.rb.relations[@obj_id] else edebug("unknown type: #{@obj_type}","relation-builder",WARNING) nil end end update end
set_obj_id(new_obj_id)
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 191 def set_obj_id(new_obj_id) @obj_id=new_obj_id set_link_from_data store end
set_text(new_text)
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 248 def set_text(new_text) @widget.buffer.set_text(new_text) end
store()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 197 def store edebug("storing(#{@my_id})","relation-builder") if is_custom? isql="`obj_id`='#{@obj_id}', `obj_type`='#{@obj_type}', `field`='#{escape_string(@field)}', `custom`='#{@custom}', `query_id`='#{@q.query_id}'" else isql=nil case @link.class.name when "RField" then isql="`obj_id`='#{@obj_id}', `field`='#{@link.field_name}', `obj_type`='#{@obj_type}', `query_id`='#{@q.query_id}'" when "RTable" then isql="`obj_id`='#{@obj_id}', `obj_type`='#{@obj_type}', `query_id`='#{@q.query_id}'" when "Relation" then isql="`obj_id`='#{@obj_id}', `obj_type`='#{@obj_type}', `query_id`='#{@q.query_id}', `field`='#{"reverted" if @rel_reverted}'" else edebug("don't store: #{link.class.name}","relation-builder",INFO) end end if isql if @my_id sql="update `qobjects` set #{isql} where `id`='#{@my_id}'" else sql="insert into `qobjects` set #{isql}" end query(sql) @my_id=qrow("select id from `qobjects` order by id desc limit 1")["id"] unless @my_id end end
text()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 252 def text @widget.buffer.text end
to_s()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 260 def to_s inspect end
update()
click to toggle source
# File lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb, line 184 def update @widget.buffer.set_text(gen_text) end