Anonymous avatar Anonymous committed a39c045

fixed ListBox

Comments (0)

Files changed (2)

src/de/matthiasmann/twlscala/ListBox.scala

 package de.matthiasmann.twlscala
 
 import twlinternal._
+import de.matthiasmann.twl.{ListBox => TWLListBox}
 import de.matthiasmann.twl.model.{ListModel => TWLListModel}
 
-class ListBox extends de.matthiasmann.twl.ComboBox with SimpleCallbackSupport with ThemeSupport {
+class ListBox extends TWLListBox with EnumCallbackSupport[TWLListBox.CallbackReason] with ThemeSupport {
     theme = "combobox"
     def this(m:TWLListModel[_]) { this(); setModel(m) }
     def model = getModel
     def model_= (m:TWLListModel[_]) { setModel(m) }
     def selected = getSelected
     def selected_= (i:Int) { setSelected(i) }
-    def computeWidthFromModel = isComputeWidthFromModel
-    def computeWidthFromModel_= (b:Boolean) { setComputeWidthFromModel(b) }
 }
 
 class ListModel[T](list:Seq[T]) extends de.matthiasmann.twl.model.SimpleListModel[T] {

src/de/matthiasmann/twlscala/twlinternal/EnumCallbackSupport.scala

+/*
+ * Copyright (c) 2008-2009, Matthias Mann
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *     * Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Matthias Mann nor the names of its contributors may
+ *       be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package de.matthiasmann.twlscala.twlinternal
+
+import de.matthiasmann.twl.CallbackWithReason
+
+private[twlscala] class CallbackWithReasonImpl[T <: Enum[T]](handler: PartialFunction[T,Unit]) extends CallbackWithReason[T] {
+    def callback(e:T) = if(handler.isDefinedAt(e)) handler(e)
+}
+
+trait EnumCallbackSupport[T <: Enum[T]] {
+    def addCallback(h: CallbackWithReason[T])
+    def addCallback(h: PartialFunction[T,Unit]) { addCallback(new CallbackWithReasonImpl(h)) }
+    def removeCallback(h: CallbackWithReason[T])
+    lazy val callbacks = new {
+        def + (h:CallbackWithReason[T]):this.type = { +=(h); this }
+        def += (h:CallbackWithReason[T]) { addCallback(h) }
+        def + (h: PartialFunction[T,Unit]):this.type = { +=(h); this }
+        def += (h: PartialFunction[T,Unit]) { addCallback(h) }
+        def - (h:CallbackWithReason[T]):this.type = { -=(h); this }
+        def -= (h:CallbackWithReason[T]) { removeCallback(h) }
+    }
+}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.