class WysiwygPrintEditor

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]
focused_item[RW]
info[RW]
moditemid[RW]
mydata[RW]
page_setup[RW]
tabs[RW]
tips[RW]
zoom[RW]

Public Class Methods

new(caller,moditemid) click to toggle source
Calls superclass method
# File lib/PrintEditor.rb, line 10
def initialize(caller,moditemid)
      @zoom=1
              @caller=caller
              @focused_item=nil
              @moditemid=moditemid
              @moditem=qrow("select moditems.*,gtkprintpages.*,queries.sql from moditems left join queries on moditems.query_sql_id = queries.id left join gtkprintpages on moditems.id = gtkprintpages.moditem_id where moditems.id='#{@moditemid}'")
              @sql=@moditem["sql"]
              @sql=@moditem["querysql"] if @moditem["querysql"].length>5
      #      lastwhere=@sql.rindex("where")-1 or @sql.length
      #      @sql=@sql[0 .. lastwhere]+" order by id desc limit 1"
              @sql="#{@sql} limit 1"
              myres=client.query(@sql)
      
              @mydata=if myres then myres.fetch_hash(true) else Hash.new end
              @mydata=Hash.new if @mydata.nil?
                      
              @page_setup=Gtk::PageSetup.new
              page_setup.paper_size=Gtk::PaperSize.new(@moditem["paper_size_name"])
              page_setup.orientation=case @moditem["orientation"]
                      when "portrait" then Gtk::PrintSettings::PageOrientation::PORTRAIT
                      when "reverse_portrait" then Gtk::PrintSettings::PageOrientation::REVERSE_PORTRAIT
                      when "landscape" then Gtk::PrintSettings::PageOrientation::LANDSCAPE
                      when "reverse_landscape" then Gtk::PrintSettings::PageOrientation::REVERSE_LANDSCAPE
                      else Gtk::PrintSettings::PageOrientation::PORTRAIT
              end
              page_setup.set_left_margin(@moditem["left_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["left_margin"].nil?
              page_setup.set_right_margin(@moditem["right_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["right_margin"].nil?
              page_setup.set_top_margin(@moditem["top_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["top_margin"].nil?
              page_setup.set_bottom_margin(@moditem["bottom_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["bottom_margin"].nil?
              super()
              realize
              @tips=Gtk::Tooltips.new.enable
              set_title("WYSIWYG Print Editor - "+@moditem["display"])
              maximize
              @tabs=Gtk::Notebook.new

              is=Gtk::IconSize.from_name(get_conf(0,0,"button-size"))
              #item buttons
              buttons=Gtk::Toolbar.new
              buttons.append(Gtk::VSeparator.new)
              buttons.append("text",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'text')) if tabs.page>-1}
              buttons.append("line",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'line')) if tabs.page>-1}
              buttons.append("rectangle",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'rectangle')) if tabs.page>-1}
              buttons.append("list",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'list')) if tabs.page>-1}
              buttons.append("image",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'image')) if tabs.page>-1}
              buttons.append(Gtk::VSeparator.new)
              buttons.append("clone",nil,nil,Gtk::Image.new(Gtk::Stock::COPY,is)){
                      set_focused_item(nth_page(tabs.page).
                              put(@tabs.page,@focused_item.gtk_type,nil,@focused_item.x+@info.clone_x.value,@focused_item.y+@info.clone_y.value,@focused_item.width,@focused_item.height,@focused_item.text,@focused_item.font,@focused_item.text_alignment)) if tabs.page>-1 && @focused_item
              }
              buttons.append("move",nil,nil,Gtk::Image.new(Gtk::Stock::MEDIA_FORWARD,is)){
                      @focused_item.move_me(@focused_item.x+@info.clone_x.value,@focused_item.y+@info.clone_y.value) if tabs.page>-1 && @focused_item
              }
              buttons.append(Gtk::VSeparator.new)
              buttons.append("remove",nil,nil,Gtk::Image.new(Gtk::Stock::DELETE,is)){
                      unless focused_item.nil?
                              edebug("removing #{focused_item}","printing","info")
                              focused_item.remove_from_mysql
                              focused_item.page_layout.remove(focused_item)
                              set_focused_item(nil)
                      end
              }
              buttons.append(Gtk::VSeparator.new)
      
              #page buttons
              buttons.append("page",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){
                      tabs.append_page(lay=PageLayout.new(self),Gtk::Label.new("page "+(tabs.n_pages+1).to_s))
                      tabs.show_all
              }
              buttons.append("page",nil,nil,Gtk::Image.new(Gtk::Stock::REMOVE,is)){
                      tabs.remove_page(tabs.page)
              }

              buttons.append('setup',nil,nil,Gtk::Image.new(Gtk::Stock::PRINT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))){
                      @page_setup=Gtk::PrintOperation.run_page_setup_dialog(self.get_ancestor(Gtk::Window), page_setup)
                      nth_page(tabs.page).clear
              }
              buttons.append(Gtk::VSeparator.new)
              #common buttons
              buttons.append("20%",nil,nil,Gtk::Image.new(Gtk::Stock::ZOOM_IN,is)){
                      @zoom+=0.2 unless @zoom>5
                      @tabs.each{|page| page.clear}
              }
              buttons.append("100%",nil,nil,Gtk::Image.new(Gtk::Stock::ZOOM_100,is)){
                      @zoom=1
                      @tabs.each{|page| page.clear}
              }
              buttons.append("20%",nil,nil,Gtk::Image.new(Gtk::Stock::ZOOM_OUT,is)){
                      @zoom-=0.2 unless @zoom<0.5
                      @tabs.each{|page| page.clear}
              }
              
              buttons.append('preview',nil,nil,Gtk::Image.new(Gtk::Stock::PRINT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))){
                      to_mysql
                      if testp=MyPrintOperation.new(self,moditemid)
                              testp.run(Gtk::PrintOperation::ACTION_PREVIEW)
                      end
              }
              buttons.append('close',nil,nil,Gtk::Image.new(Gtk::Stock::CLOSE,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))){
                      self.destroy
              }
              buttons.append(Gtk::VSeparator.new)
              signal_connect("destroy"){|me,ev| to_mysql}

              @info=LayItemInfo.new.set_width_request(220)

              tab_holder=Gtk::HPaned.new#(false,0)
              tab_holder.pack1(tabs,true,true)
              tab_holder.pack2(info,false,false)
      
              holder=Gtk::VBox.new(false,1)
              holder.pack_start(tab_holder,true,true,0)
              holder.pack_end(buttons,false,false,0)
      
              add(holder)
              self
end

Public Instance Methods

inspect() click to toggle source
# File lib/PrintEditor.rb, line 196
def inspect
      to_s
end
nth_page(page_no) click to toggle source
# File lib/PrintEditor.rb, line 166
def nth_page(page_no)
      ret=tabs.get_nth_page(page_no.to_i)
end
run() click to toggle source
# File lib/PrintEditor.rb, line 152
def run
        item_res=query("select * from gtkprintitems where printid='#{@moditemid}' order by page_number,gtktype")
        page_num=0
        while itemdata=item_res.fetch_hash()
                while nth_page(itemdata["page_number"].to_i).nil?
                        page_num+=1
                        page=tabs.append_page(lay=PageLayout.new(self),Gtk::Label.new("page #{page_num}"))
                end
                nth_page(itemdata["page_number"].to_i).put(itemdata["page_number"],itemdata["gtktype"],itemdata["id"],itemdata["x"].to_i,itemdata["y"].to_i,itemdata["width"].to_i,itemdata["height"].to_i,itemdata["txt"],itemdata["font"],itemdata["text_alignment"])
        end
        show_all
        info.update(focused_item)
end
set_focused_item(item) click to toggle source
# File lib/PrintEditor.rb, line 135
      def set_focused_item(item)
              return if focused_item == item
              focused_item.unfocus unless focused_item.nil?
              @focused_item=item
              if focused_item.nil?
                      set_focus_child(nil)
                      else
                      focused_item.set_state(Gtk::STATE_PRELIGHT) 
                      focused_item.set_editable(true)
                      focused_item.set_has_focus(true)
                      set_focus_child(focused_item)
                      edebug(focused_item.text+" selected","printing","info")
              end
              info.update(focused_item)
              focused_item
end
to_mysql() click to toggle source
# File lib/PrintEditor.rb, line 170
def to_mysql
      #=Gtk::PaperSize.new(@moditem["paper_size_name"])
              $sql="replace into gtkprintpages set moditem_id='#{moditemid}', paper_size_name='#{page_setup.paper_size.name}', orientation='#{
              case page_setup.orientation
                      when Gtk::PrintSettings::PageOrientation::PORTRAIT then "portrait"
                      when Gtk::PrintSettings::PageOrientation::REVERSE_PORTRAIT then "reverse_portrait"
                      when Gtk::PrintSettings::PageOrientation::LANDSCAPE then "landscape"
                      when Gtk::PrintSettings::PageOrientation::REVERSE_LANDSCAPE then "reverse_landscape"
                      else "portrait"
              end}', 
              left_margin='#{page_setup.get_left_margin(Gtk::PaperSize::UNIT_MM)}',"+
              "right_margin='#{page_setup.get_right_margin(Gtk::PaperSize::UNIT_MM)}',"+
              "top_margin='#{page_setup.get_top_margin(Gtk::PaperSize::UNIT_MM)}',"+
              "bottom_margin='#{page_setup.get_bottom_margin(Gtk::PaperSize::UNIT_MM)}'"
              query($sql)
              edebug("saved","printing","info")
              page_num=0
              tabs.each{|tab|
                      nth_page(page_num).to_mysql unless nth_page(page_num).nil?
                      page_num+=1
              }
end
to_s() click to toggle source
# File lib/PrintEditor.rb, line 193
def to_s
      "WysiwygPrintEditor"
end