4 # Created by Toshi Nagata on 2008/06/28.
5 # Copyright 2008 Toshi Nagata. All rights reserved.
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation version 2 of the License.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
18 def cmd_assign_residue
23 atoms = sel.inspect.sub!("IntGroup[", "").sub!("]", "")
24 hash = Dialog.run("Assign Residue") {
26 item(:text, :title=>"New residue name/number\n(like \"RES.1\")\nfor atoms #{atoms}"),
27 item(:textfield, :width=>120, :tag=>"residue"))
30 residue = hash["residue"]
31 assign_residue(sel, residue)
35 def cmd_offset_residue
40 atoms = sel.inspect.sub!("IntGroup[", "").sub!("]", "")
41 hash = Dialog.run("Offset Residues") {
43 item(:text, :title=>"Offset residue number:\nfor atoms #{atoms}"),
44 item(:textfield, :width=>120, :tag=>"offset"))
47 offset = hash["offset"].to_i
48 offset_residue(sel, offset)
52 def cmd_sort_by_residue
57 sorted = sel.sort_by { |i| [self.atoms[i].res_seq, i] }
60 (0...natoms).each { |i|
64 break if j >= sorted.length
69 self.renumber_atoms(ary)
75 hash = Dialog.run("Delete Frames") {
77 item(:text, :title=>"Start"),
78 item(:textfield, :width=>120, :tag=>"start", :value=>"0"),
79 item(:text, :title=>"End"),
80 item(:textfield, :width=>120, :tag=>"end", :value=>(n - 1).to_s),
81 item(:text, :title=>"Keeping frames every..."),
83 item(:text, :title=>"Step"),
84 item(:textfield, :width=>120, :tag=>"step", :value=>"0"))
87 sframe = Integer(hash["start"])
88 eframe = Integer(hash["end"])
89 step = Integer(hash["step"])
90 return if sframe > eframe
91 eframe = n - 1 if eframe >= n
92 fgroup = IntGroup[sframe..eframe]
94 while sframe <= eframe
103 def cmd_reverse_frames
106 hash = Dialog.run("Reverse Frames") {
108 item(:text, :title=>"Start"),
109 item(:textfield, :width=>120, :tag=>"start", :value=>"0"),
110 item(:text, :title=>"End"),
111 item(:textfield, :width=>120, :tag=>"end", :value=>(n - 1).to_s))
113 if hash[:status] == 0
114 sframe = Integer(hash["start"])
115 eframe = Integer(hash["end"])
116 return if sframe > eframe
117 eframe = n - 1 if eframe >= n
118 frames = (0...sframe).to_a + (sframe..eframe).to_a.reverse + ((eframe + 1)...n).to_a
119 reorder_frames(frames)
123 def cmd_extra_properties
125 get_count = lambda { |it| mol.nframes }
126 get_value = lambda { |it, row, col|
130 sprintf("%.8f", mol.get_property(col - 1, row)) rescue ""
133 Dialog.new("Extra Props:" + mol.name, nil, nil, :resizable=>true, :has_close_box=>true) {
135 on_document_modified = lambda { |m|
136 if (n = m.property_names) != names
138 col = [["frame", 40]] + names.map { |nn| [nn, 120] }
139 item_with_tag("table")[:columns] = col
141 item_with_tag("table")[:refresh] = true
144 item(:table, :width=>320, :height=>300, :flex=>[0,0,0,0,1,1], :tag=>"table",
145 :on_count=>get_count,
146 :on_get_value=>get_value),
149 set_min_size(320, 200)
150 listen(mol, "documentModified", on_document_modified)
151 listen(mol, "documentWillClose", lambda { |m| close } )
152 on_document_modified.call(mol)
159 $test_dialog = Dialog.new("Test") { item(:text, :title=>"test"); show }
166 sdir = get_global_settings("global.scratch_dir")
168 p = Dialog.open_panel("Please select scratch directory", sdir, nil, true)
171 error_message_box("Please avoid path containing a white space.\n" + p.sub(/ /, "<!> <!>"))
175 set_global_settings("global.scratch_dir", p)
185 register_menu("Assign residue...", :cmd_assign_residue, :non_empty)
186 register_menu("Offset residue...", :cmd_offset_residue, :non_empty)
187 register_menu("Sort by residue", :cmd_sort_by_residue, :non_empty)
188 register_menu("", "")
189 register_menu("Delete Frames...", :cmd_delete_frames, lambda { |m| m && m.nframes > 1 } )
190 register_menu("Reverse Frames...", :cmd_reverse_frames, lambda { |m| m && m.nframes > 1 } )
191 register_menu("", "")
192 register_menu("Open Extra Properties Window...", :cmd_extra_properties, lambda { |m| m && m.property_names.count > 0 } )
193 #register_menu("cmd test", :cmd_test)