All Downloads are FREE. Search and download functionalities are using the official Maven repository.

y.swing-shortcut-manager_2.9.0.1.0.0.source-code.UserDB.scala Maven / Gradle / Ivy

/*
This file is part of swing-keyboard-manager
, a shortcut manager
for Java Swing used in Penn TotalRecall


swing-keyboard-manager is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as published
by the Free Software Foundation, version 3 only.

swing-keyboard-manager is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with swing-keyboard-manager.  If not, see
.
*/

package edu.upenn.psych.memory.shortcutmanager

import java.util.prefs.Preferences

class UserDB(namespace: String, defaultXActions: List[XAction],
  listener: XActionListener) {

  require(namespace startsWith "/",
          "namespace " + namespace + " is not absolute")

  private val NoShortcut = "#"

  private val prefs = Preferences.userRoot.node(namespace)
  
  def store(xaction: XAction) {
    val key = xaction.id
    val oldShortcut = retrieveAll()(key)
    val value = xaction.shortcut match {
      case Some(short) => short.internalForm
      case None    => NoShortcut
    }
    listener xActionUpdated (xaction, oldShortcut)
    prefs put (key, value)
  }

  def retrieve(id: String): Option[Shortcut] = {
    val key = id
    Option(prefs get (key, null)) match {
      case Some(NoShortcut) | None => None
      case Some(storedStr)       => {
        Shortcut.fromInternalForm(storedStr) match {
          case opt @ Some(_) => opt
          case None => {
            Console.err.println(getClass().getName +
                                " won't retrieve() unparseable: " + storedStr)
            None
          }
        }
      }
    }
  }

  def persistDefaults(overwrite: Boolean) {
    defaultXActions.foreach { xact =>
      retrieve(xact.id) match {
        case Some(_) if overwrite == false =>
        case _       => store(xact)
      }
    }
  }

  def retrieveAll(): Map[String, Option[Shortcut]] = {
    val ids = defaultXActions map { _.id }
    val pairs: List[(String, Option[Shortcut])] =
      ids map { id => id -> retrieve(id) }
    Map(pairs: _*)
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy