def ignore(keymap_name: String): Unit =
jEdit.setProperty(prop_ignore,
Library.insert(keymap_name)(ignored_keymaps()).sorted.mkString(","))
def set(keymap: Keymap): Unit = keymap.setShortcut(property, binding) def reset(keymap: Keymap): Unit = keymap.setShortcut(property, null)
}
/* content wrt. keymap */
def convert_properties(props: JProperties): List[Shortcut] = if (props == null) Nil else { var result = List.empty[Shortcut] for (entry <- props.asScala) {
entry match { case (a: String, b: String) if is_shortcut(a) =>
result ::= new Shortcut(a, b) case _ =>
}
}
result.sortBy(_.property)
}
privatedef select(head: Int, tail: List[Int], b: Boolean): Unit =
selected.change(set => if (b) set + head -- tail else set - head ++ tail)
def apply(keymap_name: String, keymap: Keymap): Unit = {
GUI_Thread.require {}
for ((entry, row) <- entries.iterator.zipWithIndex if entry.head.isEmpty) { val b = is_selected(row) if (b) {
entry.tail.foreach(i => entries(i).shortcut.reset(keymap))
entry.shortcut.set(keymap)
} else
entry.shortcut.ignore(keymap_name)
}
}
overridedef getColumnCount: Int = 2
overridedef getColumnClass(i: Int): Class[_ <: Object] = if (i == 0) classOf[java.lang.Boolean] else classOf[Object]
overridedef getColumnName(i: Int): String = if (i == 0) " "elseif (i == 1) "Keyboard shortcut"else"???"
overridedef getRowCount: Int = entries_count
overridedef getValueAt(row: Int, column: Int): AnyRef = {
get_entry(row) match { case Some(entry) if column == 0 => java.lang.Boolean.valueOf(is_selected(row)) case Some(entry) if column == 1 => entry case _ => null
}
}
overridedef setValueAt(value: AnyRef, row: Int, column: Int): Unit = {
value match { case obj: java.lang.Boolean if has_entry(row) && column == 0 => val b = obj.booleanValue val entry = entries(row)
entry.head match { case None => select(row, entry.tail, b) case Some(head_row) => val head_entry = entries(head_row)
select(head_row, head_entry.tail, !b)
}
GUI_Thread.later { fireTableDataChanged() } case _ =>
}
}
}
val scroller = new JScrollPane(table)
scroller.getViewport.setBackground(table.getBackground)
scroller.setPreferredSize(table_size)
add(scroller, BorderLayout.CENTER)
}
/** check with optional dialog **/
def check_dialog(view: View): Unit = {
GUI_Thread.require {}
val keymap_manager = jEdit.getKeymapManager val keymap_name = jEdit.getProperty("keymap.current", KeymapManager.DEFAULT_KEYMAP_NAME) val keymap =
keymap_manager.getKeymap(keymap_name) match { casenull => keymap_manager.getKeymap(KeymapManager.DEFAULT_KEYMAP_NAME) case keymap => keymap
}
val all_shortcut_conflicts = get_shortcut_conflicts(keymap_name, keymap) val no_shortcut_conflicts = for ((s, cs) <- all_shortcut_conflicts if cs.isEmpty) yield s val shortcut_conflicts = all_shortcut_conflicts.filter(_._2.nonEmpty)
val table_entries = for {
((shortcut, conflicts), i) <- shortcut_conflicts zip
shortcut_conflicts.scanLeft(0)({ case (i, (_, cs)) => i + 1 + cs.length })
entry <-
Table_Entry(shortcut, None, ((i + 1) to (i + conflicts.length)).toList) ::
conflicts.map(Table_Entry(_, Some(i), Nil))
} yield entry
val table_model = new Table_Model(table_entries)
if (table_entries.nonEmpty &&
GUI.confirm_dialog(view, "Pending Isabelle/jEdit keymap changes",
JOptionPane.OK_CANCEL_OPTION, "The following Isabelle keymap changes are in conflict with the current", "jEdit keymap " + quote(keymap_name) + ":", new Table(table_model), "Selected shortcuts will be applied, unselected changes will be ignored.", "Results are stored in $JEDIT_SETTINGS/properties and $JEDIT_SETTINGS/keymaps/.") == 0) {
table_model.apply(keymap_name, keymap)
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.