class EditTicketView
Attributes
status[RW]
Public Class Methods
new(screen, ticket)
click to toggle source
# File lib/view/edit-ticket-view.rb, line 4 def initialize(screen, ticket) @screen = screen @ticket = ticket @props = Hash.new @title = TextLineWidget.new(@screen, @ticket.title, 11, 1, 30) @priort = DropdownWidget.new(@screen, @ticket.priority, 11, 2, 30) @type = DropdownWidget.new(@screen, @ticket.type, 11, 3, 30) @status = DropdownWidget.new(@screen, @ticket.status, 11, 4, 30) @resolv = DropdownWidget.new(@screen, @ticket.resolution, 11, 5, 30) @desc = TextFieldWidget.new(@screen, "", 0, 7, 78, 12) @cancel = ButtonWidget.new(@screen, "Cancel", 20, 20) @submit = ButtonWidget.new(@screen, "Submit", 0, 20) @priort.options = %w{Zero Low Medium High Immediate} @type.options = %w{Incident Code_Defect Build_Problem Documentation Feature_Request} @status.options = %w{Open Verified Review Deferred Fixed Tested Closed} @resolv.options= %w{Open Fixed Rejected Workaround Unable_To_Reproduce Works_As_Designed External_Bug Not_A_Bug Duplicate Overcome_By_Events Drive_By_Patch Misconfiguration} @widgets = [@title, @priort, @type, @status, @resolv, @desc, @submit, @cancel] @title.active = true @active_id = 0 @title.value = @ticket.title @priort.value = @ticket.priority @type.value = @ticket.type @status.value = @ticket.status @resolv.value = @ticket.resolution end
Public Instance Methods
changeActive(a)
click to toggle source
# File lib/view/edit-ticket-view.rb, line 64 def changeActive(a) a = [a,0].max a = [a,@widgets.length-1].min if(@active_id != a) @widgets[@active_id].active = false @active_id = a @widgets[@active_id].active = true end end
display()
click to toggle source
# File lib/view/edit-ticket-view.rb, line 32 def display @screen.clear @screen.setpos(0,0) @screen.attron(Curses.color_pair(1)); @screen.addstr("Issue Edit Window - [e]dit (in vim)") @screen.attroff(Curses.color_pair(1)); @screen.setpos(1,0) @screen.addstr("Title:") @screen.setpos(2,0) @screen.addstr("Priority:") @screen.setpos(3,0) @screen.addstr("Type:") @screen.setpos(4,0) @screen.addstr("Status:") @screen.setpos(5,0) @screen.addstr("Resolution:") @screen.setpos(6,0) @screen.addstr("Comment:") ln = 7 @widgets.each_with_index do |w, idx| if(idx != @active_id) w.draw end end #Draw the active widget last as it might have an overlay @widgets[@active_id].draw end
edit()
click to toggle source
# File lib/view/edit-ticket-view.rb, line 119 def edit tmp = File.open("fs-ticket-edit.yaml", "w+") tmp.puts({"title" => @title.value, "priority" => @priort.value, "type" => @type.value, "status" => @status.value, "resolution" => @resolv.value, "comment" => @desc.value}.to_yaml) tmp.close system("vim fs-ticket-edit.yaml") #Restore curses options Curses.raw Curses.nonl #Curses.cbreak Curses.noecho Curses.curs_set(0) @screen.scrollok(true) @screen.keypad(true) begin tmp = File.open("fs-ticket-edit.yaml", "r") yy = YAML.load(tmp.read) tmp.close @title.value = yy["title"] @priort.value = yy["priority"] @type.value = yy["type"] @status.value = yy["status"] @resolv.value = yy["resolution"] @desc.value = yy["description"] #Later these editing errors should be handled correctly #rescue Exception=>e end end
interact()
click to toggle source
# File lib/view/edit-ticket-view.rb, line 75 def interact while true result = true c = Curses.getch case c when 27 break when ?\t, 9 changeActive (@active_id + 1) % @widgets.length display else if(!@widgets[@active_id].handle(c)) if(c == Curses::KEY_UP) changeActive @active_id - 1 display elsif(c == Curses::KEY_DOWN) changeActive @active_id + 1 display elsif(c == ?e) edit display else @screen.setpos(0,0) @screen.addstr("[unknown key `#{Curses.keyname(c)}'=#{c}] ") end else if((c == "\n" || c == 13) && @submit == @widgets[@active_id]) `fossil ticket set #{@ticket.id} title '#{@title.value}' priority '#{@priort.value}' type '#{@type.value}' status '#{@status.value}' resolution '#{@resolv.value}'` if(!@desc.value.empty?) `fossil ticket set #{@ticket.id} icomment '#{@desc.value}'` end @ticket.refresh return :do_refresh elsif((c == "\n" || c == 13) && @cancel == @widgets[@active_id]) break else display end end end @screen.setpos(0,0) end end