Karya, built on 2018-05-31T02:46:59 (patch 0a1a35479c514820d77330ae8a978975ba22a47a)

Safe HaskellNone




Global static app defaults.



type SelNum = Int Source #

This is Num, but duplicated here to avoid the import.

data Platform Source #


Eq Platform # 
Instance details

Defined in App.Config

Show Platform # 
Instance details

Defined in App.Config


newtype RelativePath Source #

Paths which are intended to be relative to the app dir get this type, so it's harder to accidentally use them directly.


RelativePath FilePath 
Show RelativePath # 
Instance details

Defined in App.Config

String.IsString RelativePath # 
Instance details

Defined in App.Config

get_app_dir :: IO FilePath Source #

All paths should be relative to this one. I may later change this to an env var, a flag, or just leave it hardcoded.

local_dir :: RelativePath Source #

All code and data local to an installation (i.e. specific to a particular configuration) should go here.

ky_paths :: [RelativePath] Source #

These directories are searched for ky files containing local definitions. The directory of the saved score is prepended to the list.

instrument_dir :: RelativePath Source #

Store instrument db code and data.

instrument_cache_dir :: RelativePath Source #

Directory for instruments with slow patch loading to save their caches. This should be below instrument_dir.

save_dir :: RelativePath Source #

Saved scores are expected to be relative to this directory. I use a symlink to have a path relative to the app dir, but point to a global directory.

status view


type SortKey = Int Source #

The block status bar is not very wide, so it's important to control what goes in there, and more importantly, which order. Items with a high key are more likely to be cut off.

status_control :: (SortKey, Text) Source #

Control value, if this is a control track.

status_selection :: (SortKey, Text) Source #

Selection start and range.

status_track_id :: (SortKey, Text) Source #

Selected TrackId.

status_zoom :: (SortKey, Text) Source #

Zoom and scroll of the visible area.

per block

status_octave :: (SortKey, Text) Source #

Base octave of the kbd note entry.

status_step :: (SortKey, Text) Source #

Current time step.

status_record :: (SortKey, Text) Source #

Various record flags. Most are reflected in the color of the edit box, but the secondary ones go here.

status_note :: (SortKey, Text) Source #

Text of the last note, even if it didn't create an event. Useful to know what a key would enter.

status_note_text :: (SortKey, Text) Source #

Track state_note_text, which is the previously entered note track text. This is useful e.g. to set an attribute and maintain that for several notes in a row.

status_integrate_source :: (SortKey, Text) Source #

Show the source block for blocks integrated from another block.


repl_port :: FilePath Source #

Unix socket to listen on for repl requests.

repl_socket :: PortID Source #

PortID version of repl_port. The clients use filenames so they rely on this being a unix socket.


mouse_select :: Types.MouseButton Source #

This is the primary mouse button, used to set the insertion selection.


insert_selnum :: SelNum Source #

The insertion selection is what just about all Cmds should look at to know where to apply any score changes they are supposed to make. Generally if a Cmd doesn't have specific BlockId, TrackId, and ScoreTime arguments, it probably defaults to the insert_selnum.

temporary_insert_selnum :: SelNum Source #

Temporary insert point, to indicate insert position when it's not the insert_selnum.

error_selnum :: SelNum Source #

Highlight errors. I use insert_selnum for this nowadays, so it's probably unused.

step_play_selnum :: SelNum Source #

Display current Cmd.StepPlay position.

play_position_selnum :: SelNum Source #

Display current play position, managed by play monitor thread.

highlight_selnum :: SelNum Source #

Display Color.Highlights. This has many possible colors.

max_selnums :: SelNum Source #

The most number of SelNums that will be used. The only reason this needs a constant is so refresh_selections can emit updates for all selections.

selection_colors :: [Color.Color] Source #

Colors that come from a SelNum.


advance_color :: Color.Color Source #

Colors indicate if state_advance is set.

no_advance_color :: Color.Color Source #

Colors indicate if state_advance is set.

play_color :: Color.Color Source #

Set when playing.

status_default :: Color.Color Source #

Default color for the block status line background.

status_root :: Color.Color Source #

Color for the status of the root block.

status_integrate_destination :: Color.Color Source #

Color for the status of a block integrated from another block.

skeleton :: Color.Color Source #

Color of the skeleton lines.

integrate_skeleton :: Color.Color Source #

Color of lines indicating an integrate dependency.

score_integrate_skeleton :: Color.Color Source #

Color of lines indicating a score integrate dependency.


default_derive_wait :: Thread.Seconds Source #

The background derive threads will wait this many seconds before starting up, to avoid working too hard during an edit.

default_keep_history :: Int Source #

Keep this many past history entries for undo. Beyond this entries will have to be loaded from disk.

default_scale_id :: Text Source #

Default scale id for new projects. It's a string so I don't have import Perform.Pitch.

read_device_pb_range :: (Int, Int) Source #

Default range for input devices (e.g. MIDI keyboards).

view_size :: (Int, Int) Source #

Default size of new views.

zoom :: Zoom.Zoom Source #

Create new views at this zoom.

ruler_width :: Types.Width Source #

Default width for the block ruler track.

track_width :: Types.Width Source #

Default width for new tracks. This should just fit common control track contents, e.g. e (4f#).

collapsed_width :: Types.Width Source #

Width of the divider that represents a collapsed track.

track_signal_color :: Color.Color Source #

Default color for the track signal, as rendered in the track UI.

clip_namespace :: Id.Namespace Source #

The default namespace for the clipboard. Copies go to block + tracks in this namespace.

clip_block_name :: Text Source #

The copied block will be BlockId (Id.id clip_namespace clip_block_name).

hardcoded configs

bconfig_box :: (Color.Color, Char) Source #

Default contents of track and sb boxes.

fiddly pixel bits

view_top_padding :: Int Source #

This is the number of pixels taken up by the various gizmos in the window track beyond the main track view. It's only correct when the window is first created, since various widgets can be dragged around.

window_decoration_h :: Int Source #

How many pixels the window bar consumes above the window. This is needed because to place windows I need an accurate idea of their dimensions. I can wait to get the resized msg back from fltk, but that's too late if if I want to change the size of a window and do something (e.g. zoom) based on the new size.

TODO I should actually be getting this from fltk but it's easier to hardcode for now. But I need a window, since it comes from Fl_Window::decorated_h() - Fl_Window::h(). However I can't assume that linux will have 0.


event style

styles :: [Style.Style] Source #

Like Symbols, these are sent to the UI layer at startup and then remain static.

data Style Source #


Enum Style # 
Instance details

Defined in App.Config

Show Style # 
Instance details

Defined in App.Config

note_color :: Color.Color Source #

Events on note tracks.

control_color :: Color.Color Source #

Events on control tracks.

pitch_color :: Color.Color Source #

Events on pitch tracks

parent_color :: Color.Color Source #

A note track with tracks below it.

integrated_style :: Style.StyleId -> Style.StyleId Source #

Indicates that this event was integrated from somewhere else.

unmodified_style :: Style.StyleId -> Style.StyleId Source #

Indicates that this integrated event has not yet been modified.

modified_style :: Style.StyleId -> Style.StyleId Source #

Indicates that this integrated event was modified after integration.