- test_object.def fails

    because it can't find the test image

        Not found, file "../images/slanted_oval_vase2.jpg" not found on path

    script argv[0] is

        /home/john/GIT/nip4/build/../test/snip/test_object.def

    Image_file in snips should be relative to the script directory?

    we do mainwindow file dialogs reltive to ws path now

- add to_enum

    takes an enum and a string or value (not a key), returns a value

- menus next!

- changes

    colour_transform from to in = colourspace [$source_space => from] to in;
    colour_transform_to to in = colourspace [] to in;

- try to reproduce that macOS crash

- "nip4 for nerds" page

- libvips bug:

    $ vipsheader x.v
    x.v: 1x1 double, 3 bands, multiband
    $ vips colourspace x.v x2.v srgb
    $ vipsheader x2.v
    x2.v: 1x1 uchar, 3 bands, multiband

  should change the interpretation (probably?)

  vipsdisp gets confused by x.v, though nip4 seems fine

- support BMP drag/drop to help windows

    a gtk problem, gdk_texture_new_from_bytes() handles this and has no
    BMP support, only TIFF, PNG, JPG

    maybe win11 has PNG clipboard support?

- should support texture paste in main window

    right now you need to make an image, then paste into that

  if you define a paste action in mainwindow_entries[] it breaks ^V in
  text entries, eg. bottom of column

- scroll is very slow in macOS, so navigating the Magick menu with no
  scrollbar is painful

- better start dir for file dialogs

    should always be pwd, unless it's "replace" eg. in imagewindow, in
    which case it should be the dir of the filemodel we are replacing

        flatpak sets pwd correctly

    right now:

        - nip4, then ^O, get pwd
        - nip4 ~/pics/k2.jpg, then ^O, get ~/pics
        - nip4 ~/pics/x.ws, ^O, get pwd, ^S, get $HOME
        - nip4 ~/pics/k2.jpg, program window, ^O, get pwd

    trying to have a directory for each model, so one for pics, one for
    defs etc., with filesel directory navigation updating it

- "nip4 try.def x.ws" ought to work

    only images and workspaces as CLI args right now

- improve row layout (see notebook)

- we heap_copy() the world when we make a row (all funcs copied), is this
  necessary?

    should be able to link functions, I'd think?

- linear match

    allow refine tie points + no-resize atr the same time

    show computed transform

- try

    Edit toolkits ...
    [a, b, c] = [1, 2, 3];
    |>
    add a space
    |>

  error: second def of "c"

  probably OK -- we can always delete the three defs separately, and this has
  to be a very rare case

  add "delete tool"?

- do row select on button up, and as part of the mainwindow event state
  machine

    same for up down buttons

    same for textview flip to formula

    need our own tiny subcolumnview event system

- nicholas's bug report

- parse_onedef() was using single_definition, which also increments
  tool_position, do we need to do that?

- ban patterns in class parameters

    or could we allow multiple class defs?

        Fred (Image x) = class { ... };

    probably only useful for trivial classes

- what about

    fred (list x) = ...;
    fred (complex x) = ...;

  ie. allow names of builtin types as well as class names

  maybe:

    fred (is_list x) = ...;

  ie. a predicate before the arg, as well as a class name?

- do we allow eg.

    fred [a, b ..] = a + b;

  equivalent to

    fred a:b:x = a + b;

- we could allow

    fred x x = 12;

  meaning, two args, must be equal

    fred x [x, y, z] = y + z;

  meaning first list element must equal first arg

- make "About" non-modal and update on gc

    use progress system?

    add a new GC signal

- remove prefs workspace stuff?

    things like max heap size should be settable ... maybe pres are useful?

- try < > in the image titlebar

    seems to get stuck on eg. mp3 files

- toolkitgroupview could have a non-scrolling version as the default

    context would be much clearer, though it would take loads of space

- add tab completion ... somewhat like VS intellisense?

    should work in workspace entry box, and in program window

        vips_fa |

        im_falsecolour in = ...
        im_fastcor in = ...
        vips_falsecolour: false-colour an image
        vips_fastcor: fast correlation

    maybe a bar down the right shows matches to the thing around the
    cursor?

    a popdown from the cursor shows what tab will complete to

    tooltips around mouse do lookups on text



- program: ^W should parse the text and block on error

- program: don't get save-before-close box for modified toolkits?

- program: needs delete tool / toolkit?

- program: needs "find"?

- add magick7 support to _magick.def

- get judder with rotate and images smaller than the window

    draw on update, then draw again on relayout

    hard to fix

- show zoomed out tiles too

    should stop some more flicker

    seems tricky for some reason?

- load ws with locked tab, rightclick menu on locked tab does not
  have tick selected

  two tabs, lock one, menu on other also shows lock

    a bit tricky to fix

  maybe we are forced to have a separate menu for each tab?

- could use file chooser widget in bm-workspaces, what would it look like?

- try to save and restore image view scale and position

    this failed last time I tried :(

- ^C on a computed animated GIF is only copying the first page

    a limitation of gdk_texture_new_from_bytes()

- use "propagate-natural-width" to get better fit of imageview window?

    aim for max 600px on any axis

    pick an initial scale

    drawingarea makes itself that size

        we need to implement the sizing machinery, however that works

    propogate size

    remove shrink-to-fit

  see imagewindow_set_tilesource() and uncomment the call to
  imageui_set_bestfit() to work on this again

- need preferences?

    or just remove it all

- iimage.h has:

    gboolean show_status;
    gboolean show_paintbox;
    gboolean show_convert;

  do we use these?

- investigate behaviour with updated iimage_update_heap() ... there will be
  quite a few cases which now fail (I expect)

- save as TIFF, pick a set of options which will fail (eg. deflate + float
  predictor), save, get error, fix options, save again, get:

    (nip4:3658140): VIPS-WARNING **: 12:51:27.408: ../libvips/iofuncs/object.c:1231: VipsForeignSaveTiffFile can only assign 'nickname' once
    (nip4:3658140): VIPS-WARNING **: 12:51:27.408: ../libvips/iofuncs/object.c:1231: VipsForeignSaveTiffFile can only assign 'description' once

## program

- restore scroll positions on menu path set

- in program window, search is cleared on refresh

    eg. search for is_Plot, click on it, list fills again

    not clear why this happens? we try to restore the search string
    and filter

## imagewindow

- open imageview window for groups? < and > could move up and down the group

    or disable < > ref for computed images?

    need a groupview widget

    it would need to make a model for every element in the group, then
    display a set of views

## ideas

- we have the css_name thing in several _refresh() methods ... should this be
  in the base class?

## program window

- for a click on a computed tool, could scroll to or highlight the text?

- find and find all could be in a "uses" pane on the right?

- drag in left to reorder tools and toolkits

    argh!

  I suppose we will need our own two-level tree view

## toolkit browser

- double-click in browse mode will add two pages with the same name

    harmless, but you get a warning

- often see

    view_dump(): 3 views
    0x5e14b821e120 Workspacedefs count=2
    0x5d40451c8110 Toolkitgroupview count=2
    0x5d40447a9790 Workspaceview count=1

  on shutdown

  could wsdefs and tkview be referencing workspaceview?

  maybe we are sometimes using VIPS_UNREF() rather than IDESTROY()?

## other

- remove the "open" button from the top bar? not very useful

- put a time delay on row label colour change -- stop the flashing

    we have vobject_refresh_queue(), but that does all views, we just
    want to delay colour changes

    maybe do a separate pass at the end of recomp that sets label colours?

    could use this to make parent/child colour change only show after a
    while ... might look better

## vips8

- vipsobject

    vo_new() could allocate the args array dynamically

    use vo_set_required_input() in the body of vo_call_fill_spine()

## rows

- add multi-select to file open?

    gtk makes it hard to support single and multiple file select in
    one action

- implement range select then drag

    awkward to do since select is on the model, not the view

    we'd need to make a floating column (not just a columnview) and
    reparent the rows to it

- new row type ... enter " (double quotes) as first character, then there's no
  need to terminate the string

  displayed slightly differently? maybe display all cells which are just a
  static string like this?

  maybe allow eg. "<span background=\"white\">hello</span>" too?

    formula isn't a great place to do this -- eg. "<function>" won't parse
    as markup

    a special graphical view widget for top-level strings would be better
