-
Lyle Johnson authoredLyle Johnson authored
prefdialog.rb 10.86 KiB
require 'fox16'
include Fox
class PrefDialog < FXDialogBox
# Load the named icon from a file
def loadIcon(filename)
begin
filename = File.join("..", "icons", filename)
icon = nil
File.open(filename, "rb") { |f|
icon = FXPNGIcon.new(getApp(), f.read)
}
icon
rescue
raise RuntimeError, "Couldn't load icon: #{filename}"
end
end
def initialize(owner)
super(owner, "TextEdit Preferences", DECOR_TITLE|DECOR_BORDER|DECOR_RESIZE,
0, 0, 0, 0, 0, 0, 0, 0, 4, 4)
vertical = FXVerticalFrame.new(self,
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y)
horizontal = FXHorizontalFrame.new(vertical, LAYOUT_FILL_X|LAYOUT_FILL_Y)
buttons = FXVerticalFrame.new(horizontal, (LAYOUT_LEFT|LAYOUT_FILL_Y|
FRAME_SUNKEN|PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT))
buttons.padLeft = 0
buttons.padRight = 0
buttons.padTop = 0
buttons.padBottom = 0
switcher = FXSwitcher.new(horizontal, LAYOUT_FILL_X|LAYOUT_FILL_Y)
# Icons
pal = loadIcon("palette.png")
ind = loadIcon("indent.png")
pat = loadIcon("pattern.png")
del = loadIcon("delimit.png")
# Pane 1
pane1 = FXVerticalFrame.new(switcher, LAYOUT_FILL_X|LAYOUT_FILL_Y)
FXLabel.new(pane1, "Color settings", nil, LAYOUT_LEFT)
FXHorizontalSeparator.new(pane1, SEPARATOR_LINE|LAYOUT_FILL_X)
matrix1 = FXMatrix.new(pane1, 5,
MATRIX_BY_ROWS|PACK_UNIFORM_HEIGHT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
FXLabel.new(matrix1, "Background:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Text:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Sel. text background:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Sel. text:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Cursor:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_TEXT_BACK,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_TEXT_FORE,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_TEXT_SELBACK,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_TEXT_SELFORE,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_TEXT_CURSOR,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXLabel.new(matrix1, "Files background:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Files:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Sel. files background:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Sel. files:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix1, "Lines:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_DIR_BACK,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_DIR_FORE,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_DIR_SELBACK,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_DIR_SELFORE,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
FXColorWell.new(matrix1, FXRGB(0, 0, 0), owner, TextWindow::ID_DIR_LINES,
(COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|
LAYOUT_FILL_ROW), 0, 0, 40, 24)
# Button 1
FXButton.new(buttons, "Colors\tChange Colors\tChange text colors.", pal,
switcher, FXSwitcher::ID_OPEN_FIRST, (FRAME_RAISED|ICON_ABOVE_TEXT|
LAYOUT_FILL_Y))
# Pane 2
pane2 = FXVerticalFrame.new(switcher, LAYOUT_FILL_X|LAYOUT_FILL_Y)
FXLabel.new(pane2, "Editor settings", nil, LAYOUT_LEFT)
FXHorizontalSeparator.new(pane2, SEPARATOR_LINE|LAYOUT_FILL_X)
matrix2 = FXMatrix.new(pane2, 5, (MATRIX_BY_ROWS|PACK_UNIFORM_HEIGHT|
LAYOUT_FILL_X|LAYOUT_FILL_Y))
FXLabel.new(matrix2, "Word wrapping:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Auto indent:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Fixed wrap margin:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Strip carriage returns:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Insert tab characters:", nil, (JUSTIFY_LEFT|
LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW))
FXCheckButton.new(matrix2, nil, owner, TextWindow::ID_TOGGLE_WRAP,
LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,
0, 0, 0, 0, 0, 0, 0, 0)
FXCheckButton.new(matrix2, nil, owner, TextWindow::ID_AUTOINDENT,
LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,
0, 0, 0, 0, 0, 0, 0, 0)
FXCheckButton.new(matrix2, nil, owner, TextWindow::ID_FIXED_WRAP,
LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,
0, 0, 0, 0, 0, 0, 0, 0)
FXCheckButton.new(matrix2, nil, owner, TextWindow::ID_STRIP_CR,
LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,
0, 0, 0, 0, 0, 0, 0, 0)
FXCheckButton.new(matrix2, nil, owner, TextWindow::ID_INSERTTABS,
LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,
0, 0, 0, 0, 0, 0, 0, 0)
FXLabel.new(matrix2, "Wrap margin:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Tab columns:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Brace match time (us):", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Strip trailing spaces:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXLabel.new(matrix2, "Mouse wheel lines:", nil,
JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW)
FXTextField.new(matrix2, 4, owner, TextWindow::ID_WRAPCOLUMNS,
(JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|
LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW))
FXTextField.new(matrix2, 4, owner, TextWindow::ID_TABCOLUMNS,
(JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|
LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW))
FXTextField.new(matrix2, 4, owner, TextWindow::ID_BRACEMATCH,
(JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|
LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW))
FXCheckButton.new(matrix2, nil, owner, TextWindow::ID_STRIP_SP,
LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,
0, 0, 0, 0, 0, 0, 0, 0)
spinner = FXSpinner.new(matrix2, 2, owner, TextWindow::ID_WHEELADJUST,
(JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|
LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW))
spinner.range = 1..100
# Button 2
FXButton.new(buttons,
"Editor\tEditor settings\tChange editor settings and other things.", ind,
switcher, FXSwitcher::ID_OPEN_SECOND,
FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y)
# Pane 3
pane3 = FXVerticalFrame.new(switcher, LAYOUT_FILL_X|LAYOUT_FILL_Y)
FXLabel.new(pane3, "File Patterns", nil, LAYOUT_LEFT)
FXHorizontalSeparator.new(pane3, SEPARATOR_LINE|LAYOUT_FILL_X)
sub3 = FXVerticalFrame.new(pane3, LAYOUT_FILL_Y|LAYOUT_FILL_X)
FXLabel.new(sub3,
'Filename patterns, for example "Source Files (*.c,*.h)", one per line:',
nil, JUSTIFY_LEFT)
textwell = FXVerticalFrame.new(sub3,
LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
0, 0, 0, 0, 0, 0, 0, 0)
@text = FXText.new(textwell, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
# Button 3
FXButton.new(buttons,
"Patterns\tFilename patterns\tChange wildcard patterns for filenames.",
pat, switcher, FXSwitcher::ID_OPEN_THIRD,
FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y)
# Pane 4
pane4 = FXVerticalFrame.new(switcher, LAYOUT_FILL_X|LAYOUT_FILL_Y)
FXLabel.new(pane4, "Word Delimiters", nil, LAYOUT_LEFT)
FXHorizontalSeparator.new(pane4, SEPARATOR_LINE|LAYOUT_FILL_X)
sub4 = FXVerticalFrame.new(pane4, LAYOUT_FILL_Y|LAYOUT_FILL_X)
FXLabel.new(sub4, "Characters delimiting words:", nil, JUSTIFY_LEFT)
FXTextField.new(sub4, 20, owner, TextWindow::ID_DELIMITERS,
FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X)
# Button 4
FXButton.new(buttons,
"Delimiters\tWord delimiters\tChange delimiters for word selections.",
del, switcher, FXSwitcher::ID_OPEN_FOURTH,
FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y)
# Bottom part
FXHorizontalSeparator.new(vertical, SEPARATOR_RIDGE|LAYOUT_FILL_X)
closebox = FXHorizontalFrame.new(vertical,
LAYOUT_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
FXButton.new(closebox, "&Accept", nil, self, FXDialogBox::ID_ACCEPT,
LAYOUT_RIGHT|FRAME_RAISED|FRAME_THICK, 0, 0, 0, 0, 20, 20)
FXButton.new(closebox, "&Cancel", nil, self, FXDialogBox::ID_CANCEL,
LAYOUT_RIGHT|FRAME_RAISED|FRAME_THICK, 0, 0, 0, 0, 20, 20)
end
# Change patterns, each pattern separated by newline
def setPatterns(patterns)
@text.text = patterns.join("\n")
end
# Return array of patterns
def getPatterns
@text.text.split("\n")
end
end