Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Various Improvements & Changes to cp.ui #3000

Draft
wants to merge 38 commits into
base: develop
Choose a base branch
from
Draft

Conversation

randomeizer
Copy link
Contributor

Do not merge yet - does not currently work as-is.

@latenitefilms latenitefilms changed the title Play/improve-ui Various Improvements & Changes to cp.ui Jul 23, 2022
@latenitefilms
Copy link
Contributor

latenitefilms commented Aug 13, 2022

@randomeizer - I've just done some quick testing:

  • Batch Export stills works.
  • Browser Overlays still work.
  • Timeline Index to CSV still works.
  • Browser Contents to CSV still works.
  • Applying a Video Effect from the Search Console now works (Chris was having virtual mouse click issues!)
  • Applying a Transition from the Search Console doesn't work (Chris was having virtual mouse click issues!)
  • Highlight Browser Playhead no longer works (no error message)
  • Applying a Generator from the Search Console fails with:
2022-08-13 22:33:45: 22:33:45 ERROR:   LuaSkin: hs.chooser:completionCallback: ...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:223: method 'attributeValue' is not callable (a nil value)
stack traceback:
	...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:223: in method 'selectedClipsUI'
	...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:244: in function <...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:243>
	(...tail calls...)
	...xtensions/cp/apple/finalcutpro/main/LibrariesBrowser.lua:621: in method 'saveLayout'
	...ost/src/extensions/cp/apple/finalcutpro/main/Browser.lua:390: in method 'saveLayout'
	...mandPost/src/plugins/finalcutpro/timeline/generators.lua:162: in field 'apply'
	...dPost/src/plugins/finalcutpro/timeline/pluginactions.lua:108: in field '_onExecute'
	.../CommandPost/src/plugins/core/action/manager/handler.lua:224: in method 'execute'
	...ommandPost/src/plugins/core/action/manager/activator.lua:1507: in field '_onActivate'
	...ommandPost/src/plugins/core/action/manager/activator.lua:1533: in method 'activate'
	...ommandPost/src/plugins/core/action/manager/activator.lua:1168: in function <...ommandPost/src/plugins/core/action/manager/activator.lua:1163>

Looking at this code:

function LibrariesFilmstrip:selectedClipsUI()
    local ui = self.contentsUI()
    if ui then
        log.df("ui: %s", hs.inspect(ui))
        local children = ui:attributeValue("AXSelectedChildren")
        local clips = {}
        for i,child in ipairs(children) do
            clips[i] = child
        end
        table.sort(clips, LibrariesFilmstrip.sortClips)
        return clips
    end
    return nil
end

...it seems that self.contentsUI() is actually returning a table:

2022-08-13 22:39:43: 22:39:43 LibrariesF:     ui: { <userdata 1> -- hs.axuielement: AXGroup (0x60000b860f38) }
  • Applying a Title from the Search Console fails with:
2022-08-13 22:34:37: 22:34:37 ERROR:   LuaSkin: hs.chooser:completionCallback: ...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:223: method 'attributeValue' is not callable (a nil value)
stack traceback:
	...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:223: in method 'selectedClipsUI'
	...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:244: in function <...ensions/cp/apple/finalcutpro/main/LibrariesFilmstrip.lua:243>
	(...tail calls...)
	...xtensions/cp/apple/finalcutpro/main/LibrariesBrowser.lua:621: in method 'saveLayout'
	...ost/src/extensions/cp/apple/finalcutpro/main/Browser.lua:390: in method 'saveLayout'
	.../CommandPost/src/plugins/finalcutpro/timeline/titles.lua:164: in field 'apply'
	...dPost/src/plugins/finalcutpro/timeline/pluginactions.lua:108: in field '_onExecute'
	.../CommandPost/src/plugins/core/action/manager/handler.lua:224: in method 'execute'
	...ommandPost/src/plugins/core/action/manager/activator.lua:1507: in field '_onActivate'
	...ommandPost/src/plugins/core/action/manager/activator.lua:1533: in method 'activate'
	...ommandPost/src/plugins/core/action/manager/activator.lua:1168: in function <...ommandPost/src/plugins/core/action/manager/activator.lua:1163>

Another random error message that came when switching between apps:

2022-08-13 22:44:32: 22:44:32 ERROR:   LuaSkin: hs.timer callback error: ...ents/GitHub/CommandPost/src/extensions/cp/ui/axutils.lua:188: invalid order function for sorting
stack traceback:
	[C]: in function 'table.sort'
	...ents/GitHub/CommandPost/src/extensions/cp/ui/axutils.lua:188: in function 'cp.ui.axutils.children'
	...t/src/extensions/cp/apple/finalcutpro/viewer/InfoBar.lua:34: in field 'matches'
	...st/src/extensions/cp/apple/finalcutpro/viewer/Viewer.lua:115: in local 'verifyFn'
	...ents/GitHub/CommandPost/src/extensions/cp/ui/axutils.lua:671: in upvalue 'isInvalid'
	...ents/GitHub/CommandPost/src/extensions/cp/ui/axutils.lua:697: in function 'cp.ui.axutils.cache'
	(...tail calls...)
	...ments/GitHub/CommandPost/src/extensions/cp/prop/init.lua:509: in function <...ments/GitHub/CommandPost/src/extensions/cp/prop/init.lua:506>
	(...tail calls...)
	...st/src/extensions/cp/apple/finalcutpro/viewer/Viewer.lua:247: in upvalue 'getFn'
	...ments/GitHub/CommandPost/src/extensions/cp/prop/init.lua:992: in field '_get'
	...ments/GitHub/CommandPost/src/extensions/cp/prop/init.lua:509: in method 'get'
	...ments/GitHub/CommandPost/src/extensions/cp/prop/init.lua:879: in method 'update'
	...st/src/extensions/cp/apple/finalcutpro/viewer/Viewer.lua:177: in local 'action'
	...s/GitHub/CommandPost/src/extensions/cp/deferred/init.lua:51: in function <...s/GitHub/CommandPost/src/extensions/cp/deferred/init.lua:49>

@latenitefilms
Copy link
Contributor

I have no idea what's going on with double clicks on my machine. CommandPost aside, I can't even get double clicks to work in Hammerspoon with this:

function doubleClick()
    hs.timer.doAfter(1, function()    
        local mouse = require "hs.mouse"
        local eventtap = require "hs.eventtap"
        local event = eventtap.event

        local doubleClickInterval = eventtap.doubleClickInterval()
        local absolutePosition = mouse.absolutePosition()

        --print("left click")
        --event.newMouseEvent(event.types.leftMouseDown, absolutePosition, {}):post()
        --event.newMouseEvent(event.types.leftMouseUp, absolutePosition, {}):post()
        
        --hs.timer.usleep(doubleClickInterval * 1000000)

        --print("left click")
        --event.newMouseEvent(event.types.leftMouseDown, absolutePosition, {}):post()
        --event.newMouseEvent(event.types.leftMouseUp, absolutePosition, {}):post()
        
        print("left click")
        hs.eventtap.leftClick(absolutePosition)
        hs.timer.usleep(doubleClickInterval * 1000000)
        print("left click")
        hs.eventtap.leftClick(absolutePosition)
    end)
end

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "q", doubleClick)

However, this works:

function doubleLeftClick()  
    local point = hs.mouse.absolutePosition()
    local clickState = hs.eventtap.event.properties.mouseEventClickState
    print("click")
    hs.eventtap.event.newMouseEvent(hs.eventtap.event.types["leftMouseDown"], point):setProperty(clickState, 1):post()
    hs.eventtap.event.newMouseEvent(hs.eventtap.event.types["leftMouseUp"], point):setProperty(clickState, 1):post()
    hs.timer.usleep(1000)
    print("click")
    hs.eventtap.event.newMouseEvent(hs.eventtap.event.types["leftMouseDown"], point):setProperty(clickState, 2):post()
    hs.eventtap.event.newMouseEvent(hs.eventtap.event.types["leftMouseUp"], point):setProperty(clickState, 2):post()
end

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "q", doubleLeftClick)

...but if I try and put that exact code in CommandPost, it doesn't.

I assume it's some strange timing issue, or maybe some other eventtap from another third party app that's messing with things - I did install Avid Media Composer on this machine after all, haha.

MacBook Pro (16-inch, 2021) - Apple M1 Max
macOS Monterey 12.4 (21F79)

I'll try the latest CommandPost release on my Intel.

@latenitefilms
Copy link
Contributor

Ummm, latest CommandPost public release isn't applying Effects on my Intel either. I do also have Avid installed there.

Weird.

@latenitefilms
Copy link
Contributor

For whatever reason, as of today (18th August 2022) double click is working fine on my M1. As far as I can tell nothing has changed. I can only assume iCloud was trying to get me.

@latenitefilms
Copy link
Contributor

Lets tackle this one first... Highlight Browser Playhead no longer works.

> cp.apple.finalcutpro.libraries.filmstrip:isShowing()
true

> hs.inspect(cp.apple.finalcutpro.libraries.filmstrip:contentsUI())
{ <userdata 1> -- hs.axuielement: AXGroup (0x600019f25ef8) }

> cp.apple.finalcutpro.libraries.filmstrip:playhead():UI()
nil

> cp.apple.finalcutpro.libraries.filmstrip:skimmingPlayhead():UI()
nil

> cp.apple.finalcutpro.libraries.filmstrip.contentsUI
contentsUI: table: 0x60001916eec0

I think the issue is that cp.apple.finalcutpro.libraries.filmstrip:contentsUI() is a returning a table with AX elements inside, and not a prop.

Probably related to: #3062

* Improved "duration" processing for timelines, adding a `Duration`
    class with `total` and `selection` properties.
* Added `duration` to the Timeline directly (via the toolbar)
* Made `Timeline.isRangeSelected` a live property.
* Other `cp.ui` improvements.
@randomeizer
Copy link
Contributor Author

Pushed fixes for Titles, give it a run. Also, for me Highlight Browser Playhead seems to be working.

@randomeizer randomeizer marked this pull request as ready for review August 28, 2022 08:24
@latenitefilms
Copy link
Contributor

Highlight playhead is still not working for me.

Here's my layout:

image

Looks like same issues as my earlier post:

> cp.apple.finalcutpro.libraries.filmstrip:isShowing()
true

> hs.inspect(cp.apple.finalcutpro.libraries.filmstrip:contentsUI())
2023-01-25 20:28:15: -- Loading extension: hs.inspect
{ <userdata 1> -- hs.axuielement: AXGroup (0x60000949beb8) }

> cp.apple.finalcutpro.libraries.filmstrip:playhead():UI()
nil

> cp.apple.finalcutpro.libraries.filmstrip:skimmingPlayhead():UI()
nil

> cp.apple.finalcutpro.libraries.filmstrip.contentsUI
contentsUI: table: 0x6000094e2840

@latenitefilms
Copy link
Contributor

Works in list mode though:

image

> cp.apple.finalcutpro.libraries.filmstrip:isShowing()
false

> cp.apple.finalcutpro.libraries.list:isShowing()
true

> hs.inspect(cp.apple.finalcutpro.libraries.filmstrip:contentsUI())
nil

> hs.inspect(cp.apple.finalcutpro.libraries.list:contentsUI())
[string "return hs.inspect(cp.apple.finalcutpro.librar..."]:1: method 'contentsUI' is not callable (a nil value)
stack traceback:
	[string "return hs.inspect(cp.apple.finalcutpro.librar..."]:1: in main chunk
	[C]: in function 'xpcall'
	...ents/GitHub/CommandPost/src/extensions/hs/_coresetup.lua:546: in function <...ents/GitHub/CommandPost/src/extensions/hs/_coresetup.lua:522>

> cp.apple.finalcutpro.libraries.list:playhead():UI()
hs.axuielement: AXValueIndicator (0x6000097e2db8)

> cp.apple.finalcutpro.libraries.list:skimmingPlayhead():UI()
hs.axuielement: AXValueIndicator (0x6000116100b8)

> cp.apple.finalcutpro.libraries.list.contentsUI
nil

@latenitefilms
Copy link
Contributor

This is something to also keep in mind and test before we eventually merge this pull request:

#3164 (comment)

It seems like cp.apple.finalcutpro.main.LibrariesList:indexOfClip(clip) doesn't current take into account listed projects:

image

@latenitefilms latenitefilms marked this pull request as draft June 15, 2023 09:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants