- nicholas's bug report

- lcomps leave stray unreffed symbols in "list unresolved"

    Image_transform_item.Resize_item.Size_within_item.action.within ($SAVEDIR/start/Image.def:509)  refers to undefined symbol h
    Image_transform_item.Resize_item.Size_within_item.action.within ($SAVEDIR/start/Image.def:509)  refers to undefined symbol w

- rework pattern matching in lcomps

- what does the programming window do for multiple defs?

    probably need to follow next_def and concatenate them all

- dir should hide $$vars

- programming window is showing generated syms, like $$pattern_lhs0?

- 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;



- remove 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?

- check all batch mode flags

    see eg. vips-bench nip4 benchmark

- 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

- get rid of

     TOOL_DIA, TOOL_SEP

- 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

- this fails:

    im_insertset main sub x y
        = foldr add_another main (zip2 x y)
    {
        add_another [x, y] im = insert x y sub im;
    }

  you have to do:

        add_another pos im
            = insert x y sub im
        {
            x = pos?0;
            y = pos?1;
        }

  strange!

- in a workspace do:

    x = [1, 2, 3]

  now ZF expressions which use x will stop working, eg.:

    [x * 2 :: x <- [1..]]

- syntax error in startup .def stops nip4 loading

- should we support

    A1.value + [1, 2, 3]

  ought to be easy and safe, though it's a lot of copy-paste

    maybe we can common-up some more code to make it easier?

  nip2 does it in the vector class, eg.

    A1 + Vector [10, 20, 30]

- should we wrap all vips8 operators? eg. could make

    vips_add a b = vips_call "add" [a, b] []

  as we do for vips7

      not very useful? we'd lose optional args

  maybe:

    vips_add options a b = vips_call "add" [a, b] options

    x = vips_add [$uchar => true] y z

## plotting

- in plotdisplay_build_kplot()

    set ksmthtype to smooth a series (PLOT_STYLE_SPLINE) see
    kplot_attach_smooth()

        not really a spline, more like a blur, this would be better in
        libvips

    maybe use error bars plus thickness to draw a bar?

    leave it for now, not very important

## 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
