-USING: documents help.markup help.syntax ui.gadgets
-ui.gadgets.scrollers models strings ui.commands sequences
-ui.text colors fonts help.tips ;
+USING: colors documents fonts help.markup help.syntax help.tips models
+sequences strings ui.commands ui.gadgets ui.gadgets.line-support
+ui.gadgets.scrollers ;
IN: ui.gadgets.editors
+HELP: <multiline-editor>
+{ $values { "editor" multiline-editor } }
+{ $description "Creates a new multi-line editor gadget." } ;
+
HELP: editor
{ $class-description "An editor is a control for editing a multi-line passage of text stored in a " { $link document } " model. Editors are crated by calling " { $link <editor> } "."
$nl
"Editors have the following slots:"
{ $list
- { { $snippet "font" } " - a " { $link font } "." }
- { { $snippet "color" } " - a " { $link color } "." }
{ { $snippet "caret-color" } " - a " { $link color } "." }
- { { $snippet "selection-color" } " - a " { $link color } "." }
{ { $snippet "caret" } " - a " { $link model } " storing a line/column pair." }
{ { $snippet "mark" } " - a " { $link model } " storing a line/column pair. If there is no selection, the mark is equal to the caret, otherwise the mark is located at the opposite end of the selection from the caret." }
{ { $snippet "focused?" } " - a boolean." }
-} } ;
+} }
+{ $see-also line-gadget } ;
HELP: <editor>
{ $values { "editor" "a new " { $link editor } } }
+USING: arrays colors fonts help.markup help.syntax
+ui.gadgets.scrollers ;
IN: ui.gadgets.line-support
-USING: help.markup help.syntax ;
+
+HELP: line-gadget
+{ $class-description "Base class for gadgets that implements display of sequences of text."
+ $nl
+ "Line gadgets have the following slots:"
+ { $table
+ {
+ { $slot "font" }
+ { "a " { $link font } "." }
+ }
+ {
+ { $slot "selection-color" }
+ { "a " { $link color } "." }
+ }
+ {
+ { $slot "min-rows" }
+ { "The preferred minimum number of visible rows when the gadget is contained in a viewport." }
+ }
+ {
+ { $slot "max-rows" }
+ { "The preferred maximum number of visible rows when the gadget is cotnained in a viewport." }
+ }
+ {
+ { $slot "min-cols" }
+ { "The preferred minimum number of visible columns when the gadget is contained in a viewport." }
+ }
+ {
+ { $slot "max-cols" }
+ { "The preferred maximum number of visible columns when the gadget is contained in a viewport." }
+ }
+ }
+} ;
+
+HELP: pref-viewport-dim*
+{ $values { "gadget" line-gadget } { "dim" array } }
+{ $description "Calculates the preferred viewport dimenstions of the line gadget." }
+{ $see-also pref-viewport-dim } ;
ARTICLE: "ui.gadgets.line-support" "Gadget line support"
"The " { $vocab-link "ui.gadgets.line-support" } " vocabulary provides common code shared by gadgets which display a sequence of lines of text. Currently, the two gadgets that use it are " { $link "ui.gadgets.editors" } " and " { $link "ui.gadgets.tables" } "."
! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: tools.test ui.gadgets.line-support ;
+USING: accessors arrays kernel tools.test ui.gadgets.editors
+ui.gadgets.line-support ui.gadgets.line-support.private ui.text ;
IN: ui.gadgets.line-support.tests
+
+! line-gadget-height
+{ t } [
+ { 0 0 } <multiline-editor>
+ [ 1 >>min-rows line-gadget-height ]
+ [ line-height ] bi =
+] unit-test
+
+! line-gadget-width
+{ t } [
+ { 0 0 } <multiline-editor>
+ [ 1 >>min-cols line-gadget-width ]
+ [ font>> em ] bi =
+] unit-test
+
+! pref-viewport-dim*
+{ t } [
+ <multiline-editor>
+ [ 1 >>min-rows 1 >>min-cols pref-viewport-dim* ] [
+ [ font>> "m" text-width ] [ line-height ] bi 2array
+ ] bi =
+] unit-test
! Some code shared by table and editor gadgets
TUPLE: line-gadget < gadget
-font selection-color
-min-rows max-rows
-min-cols max-cols
-line-leading line-height
-pref-viewport-dim ;
+ font selection-color
+ min-rows max-rows
+ min-cols max-cols
+ line-leading line-height
+ pref-viewport-dim ;
: new-line-gadget ( class -- gadget )
- new
- selection-color >>selection-color ;
+ new selection-color >>selection-color ;
GENERIC: line-leading* ( gadget -- n )