Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Columns UI (Read 4575439 times) previous topic - next topic
0 Members and 2 Guests are viewing this topic.

Re: Columns UI

Reply #7675
I have done several tests and I have discovered that it only fails in mp3 files

DISCNUMBER field should only contain a number. From ID3v2.3 specification -

Quote
TPOS
The 'Part of a set' frame is a numeric string that describes which part of a set the audio came from. This frame is used if the source described in the "TALB" frame is divided into several mediums, e.g. a double CD. The value may be extended with a "/" character and a numeric string containing the total number of parts in the set. E.g. "1/2".

It sounds like you should be making a custom DISCSUBTITLE field for the text. Or possibly SET SUBTITLE if you want to map it to TSST frame (ID3 Tag Mapping)

Re: Columns UI

Reply #7676
@musicmusic , not sure if it's a CUI bug, but every time I create a modal dialog in my component all panel settings (in all my panels) are forcefully saved.
Parent dialog of the modal dialog is based on `uie::window`. Panel setting saving is invoked via `void get_config( stream_writer* writer, abort_callback& abort ) const` method.
And it does not matter which modal dialog it is - every one exhibits the same behaviour.

Call stack looks like this:
example1:
Spoiler (click to show/hide)

example2:
Spoiler (click to show/hide)

example3:
Spoiler (click to show/hide)

Re: Columns UI

Reply #7677
Hi,

It's difficult to tell what those foo_ui_columns addresses are in the call stack from the information there, but:

- foo_uie_panel_splitter seems to be the actual caller in all three cases. Can you reproduce the problem without it and foo_ui_hacks?
- debugging symbols (PDBs) for all semi-recent Columns UI versions are available on the GitHub releases page. If you load the relevant PDB the call stack should show what bit of code in Columns UI is being hit. Similarly, it would be useful to load symbols for Windows libraries.

Thanks
.

Re: Columns UI

Reply #7678
I need to do a search in the Quicksearch box or in the Filter box that will find all the songs in which the %albumartist% field is present and that is also different from the %artist% field

Example: (%album artist% PRESENT) and (%album artist% <> %artist%)

It's possible?

Re: Columns UI

Reply #7679
Try this

Code: [Select]
"$if($strcmp($meta(album artist),%artist%),1,0)" IS 0 AND "$meta(album artist)" PRESENT


Re: Columns UI

Reply #7681
Hi,

It's difficult to tell what those foo_ui_columns addresses are in the call stack from the information there, but:

- foo_uie_panel_splitter seems to be the actual caller in all three cases. Can you reproduce the problem without it and foo_ui_hacks?
- debugging symbols (PDBs) for all semi-recent Columns UI versions are available on the GitHub releases page. If you load the relevant PDB the call stack should show what bit of code in Columns UI is being hit. Similarly, it would be useful to load symbols for Windows libraries.

Thanks
Sure, here is a full stacktrace on a plain panel with CUI debug symbols (no ui hacks and no foo_uie_panel_splitter ):

Spoiler (click to show/hide)

PS: Sorry for the late reply - somehow missed your post...

Re: Columns UI

Reply #7682
The problematic behaviour is caused by the following:
- `get_previous_menu_focus_window` calls `get_panel` to find the focused window.
- `get_panel` for `splitter_window` creates (for some reason) a new `splitter_item_full_v2_t` via `create_splitter_item` call.
- `create_splitter_item` calls `refresh_child_data`, which saves the config of all child panels.

`refresh_child_data` call was introduced in the following commit: https://github.com/reupen/columns_ui/commit/41828a3ec0fd58803f36ca556bf9dd8bd9a35830, which, ironically, was addressing the bug that I've reported :D

Re: Columns UI

Reply #7683
Message to Music Music:

I use Columns UI and I have the following problem. When a disc has several CDs everything is perfect. But when the disc only has a CD leaves me a blank line between the name of the album and the first track.

The grouping script to control grouping by field %discnumber% is:

$if(%discnumber%,
$rgb(100,100,100)   ● %discnumber%
,
)$tab()

Re: Columns UI

Reply #7684
The problematic behaviour is caused by the following:
- `get_previous_menu_focus_window` calls `get_panel` to find the focused window.
- `get_panel` for `splitter_window` creates (for some reason) a new `splitter_item_full_v2_t` via `create_splitter_item` call.
- `create_splitter_item` calls `refresh_child_data`, which saves the config of all child panels.

`refresh_child_data` call was introduced in the following commit: https://github.com/reupen/columns_ui/commit/41828a3ec0fd58803f36ca556bf9dd8bd9a35830, which, ironically, was addressing the bug that I've reported :D
Ah, thanks. That does indeed seem a bit undesirable.

What is happening there is the main window is being deactivated, and Columns UI needs to record which child window is currently focused so it can focus it again when the main window is next activated. However, if the menu bar is currently focused, it needs to record the window focused before it was. So it needs to query any menu_window instances in the layout for that information. splitter_window::get_panel() is the way to get a window_ptr for the children of a splitter, so it is called in the process. But that now also triggers the config refresh.

There are a couple of options (in Columns UI) for fixing it:

1. Move that config refresh to splitter_item_t::get_planel_config so it's only called if the caller actually needs the config. The main downside here I can think of is third-party splitter items are likely to be implemented differently and therefore the inconsistency might be a bit unpredictable.

2. Remove the current config refresh and let the user of the splitter item get fresh config from the window_ptr if needed, via a helper method on splitter_item_t. (So, in this case, the config would be refreshed by the code that serialises the splitter item whe na panel is copied.)

I'll have a look at implementing option 2. as I think it's the safest option and more in line with how things used to work.

Message to Music Music:

I use Columns UI and I have the following problem. When a disc has several CDs everything is perfect. But when the disc only has a CD leaves me a blank line between the name of the album and the first track.
Unfortunately, even blank group titles are rendered at the moment, so the behaviour you want isn't currently possible. I'm not sure how much effort it would be to change that, though I'll consider it since it seems like reasonable behaviour.

Your other option (of course) is to use a third-party playlist view. I don't know if any of them support the behaviour you're looking for, though.
.

Re: Columns UI

Reply #7685
Message to Music Music:

I use Columns UI and I have the following problem. When a disc has several CDs everything is perfect. But when the disc only has a CD leaves me a blank line between the name of the album and the first track.
Unfortunately, even blank group titles are rendered at the moment, so the behaviour you want isn't currently possible. I'm not sure how much effort it would be to change that, though I'll consider it since it seems like reasonable behaviour.

Your other option (of course) is to use a third-party playlist view. I don't know if any of them support the behaviour you're looking for, though.

[/quote]

Thanks for your answer. I would greatly appreciate you that you consider my request. And if you encourage you to do it, I will give you 2 or 3 things related to the groups that already in 2007 you commented in the forum that you would incorporate them into a next version, and that they would leave the Columns UI and my perfect FOOBAR:

- Each grouping should have its own font.

- Each grouping should allow you to select if we want to paint it over or the right of the cover.

I attached the Image 1 (current aspect) and the Image 2 (desired aspect manipulated with Photoshop)

While these improvements, joined to the petition made in the previous message, do not be made, I am forced to not be able to use the grouping of the albums with several CDs through the grouping but through the dicnumber column (Image 3) which It is imperfect because the text is cut if it is too long and displaces the rest of the columns to the right.

Once again I give you the anticipated thanks and I encourage you to leave Columns Ui brushing perfection.

Re: Columns UI

Reply #7686
Unfortunately, even blank group titles are rendered at the moment, so the behaviour you want isn't currently possible. I'm not sure how much effort it would be to change that, though I'll consider it since it seems like reasonable behaviour.

Just wanted to quickly second this -- it should be possible to not display blank group titles (and probably this should even be the default behaviour). Just started playing with Columns UI today, and spent a lot of time searching for how to get rid of these blank lines before I found this!

Re: Columns UI

Reply #7687
Unfortunately, even blank group titles are rendered at the moment, so the behaviour you want isn't currently possible. I'm not sure how much effort it would be to change that, though I'll consider it since it seems like reasonable behaviour.

Just wanted to quickly second this -- it should be possible to not display blank group titles (and probably this should even be the default behaviour). Just started playing with Columns UI today, and spent a lot of time searching for how to get rid of these blank lines before I found this!

In music music response he says it seems reasonable and that he will study it. As long as I do not correct this matter and some more I can not use the grouping of multiple discs using the grouping but I use the discnumber column (see in the message #7685 Image 3).

I prepared a version (which I do not use) in which using the grouping by discnumber through grouping I was able to disguise the blank line for simple disks underlining the line that paints the album (image 4).

Re: Columns UI

Reply #7688
In music music response he says it seems reasonable and that he will study it. As long as I do not correct this matter and some more I can not use the grouping of multiple discs using the grouping but I use the discnumber column (see in the message #7685 Image 3).

Oh, I saw, but wanted to point out that you would not be the only person who would be happy if it is changed! :)

How is your discnumber column working (in Image 3 from the linked post)? Is it using $ifequal(%tracknumber%,1) or something similar, or have you managed to set it up so that that column only displays the disk number / name in a row when it is different from the previous row?

Re: Columns UI

Reply #7689
In music music response he says it seems reasonable and that he will study it. As long as I do not correct this matter and some more I can not use the grouping of multiple discs using the grouping but I use the discnumber column (see in the message #7685 Image 3).

Oh, I saw, but wanted to point out that you would not be the only person who would be happy if it is changed! :)

How is your discnumber column working (in Image 3 from the linked post)? Is it using $ifequal(%tracknumber%,1) or something similar, or have you managed to set it up so that that column only displays the disk number / name in a row when it is different from the previous row?

I am Spanish and use a translator:

Effectively I use: $Ifequal(%tracknumber%,1,$puts(var1,true),) (Image 5) since it is not possible from the script when you are processing a track knowing what was the value of the previous track nor is it possible, as far as I know, memorize the value of the track to compare it with the following.

It also creates the %tipodisc% metadata to be able to paint %discnumber% in the desired track even if it is not the 1st as long as %tipodisc%=P (Image 6)

I leave you the script of the column. You will see that I currently changed the %discnumber% column by the %subtitle% column. I changed it recently since in %discnumber% when a numeric field did not always admit accents, ñ, etc. The script is a bit long because it creates a routine so that the texts in parentheses are painted with the most attenuated color.

---------------------------------------------------------------------------------------------------------------------------------------
//aqui se define la longitud máxima de la columna Subtitle

$puts(maxcolum,37)

$if(%subtitle%,

$ifequal(%tracknumber%,1,$puts(var1,true),)
$if($stricmp($right(%tipodisc%,1),'P'),$puts(var2,true),)

$if($or($get(var1),$get(var2)),
$get_global(tplay_nºcd)|$get_global(tplays_nºcd)

//Arial '● ' solo vale para Arial
//Tahoma '⦁' vale para Segoe y Arial
//Tahoma '●' vale para Segoe y Arial

$if($strcmp($get_global(letra),'segoe'),
//' '
'⦁ '
,
'● '
)

// Aqui comienza la rutina de velado de los textos entre paréntesis en 4 Fases
$puts(cam,%subtitle%)

///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// Fase 1: proceso hasta la 1ª palabra entre parentesis /////////////////////
$puts(tx1,)$puts(tx2,)$puts(pri,)$puts(ult,)

$puts(pri,$strchr($get(cam),'('))
$puts(ult,$strchr($get(cam),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(trz1,$get(cam))
$puts(tx1,$get(cam))
,
$puts(trz1,$left($get(cam),$get(ult)))
$puts(tx1,$left($get(trz1),$add($get(pri),-1)))
$puts(tx2,$substr($get(trz1),$get(pri),$get(ult)))
)

///////////////////////////////////////////
$get_global(tplay_nºcd)|$get_global(tplays_nºcd)
$get(tx1)

$get_global(dimmed)|$get_global(tplay_velada)
$get(tx2)

//////////////////////////////////////////////////////////////////////////////////////
//////////// Fase 2: proceso desde el final del 1er trozo hasta el final /////////////

//////////// Vuelvo a subdividir el resto

$ifgreater($len($get(cam)),$len($get(trz1))
,
$puts(resto,$replace($get(cam),$get(trz1),))
$puts(tx1,)$puts(tx2,)$puts(pri,)$puts(ult,)$puts(var,)

$puts(pri,$strchr($get(resto),'('))
$puts(ult,$strchr($get(resto),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(trz2,$get(resto))
$puts(tx1,$get(resto))
,
$puts(trz2,$left($get(resto),$get(ult)))
$puts(tx1,$left($get(trz2),$add($get(pri),-1)))
$puts(tx2,$substr($get(trz2),$get(pri),$get(ult)))
)

///////////////////////////////////////////
$get_global(tplay_nºcd)|$get_global(tplays_nºcd)
$get(tx1)

$get_global(dimmed)|$get_global(tplay_velada)
$get(tx2)

/////////////////////////////////////////////////////////////////////////////////////
//////////// Fase 3: proceso desde el final del 2º trozo hasta el final /////////////

//////////// Vuelvo a subdividir el resto

$ifgreater($len($get(resto)),$len($get(trz2))
,
$puts(resto2,$replace($get(resto),$get(trz2),))
$puts(tx1,)$puts(tx2,)$puts(pri,)$puts(ult,)$puts(var,)

$puts(pri,$strchr($get(resto2),'('))
$puts(ult,$strchr($get(resto2),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(trz3,$get(resto2))
$puts(tx1,$get(resto2))
,
$puts(trz3,$left($get(resto2),$get(ult)))
$puts(tx1,$left($get(trz3),$add($get(pri),-1)))
$puts(tx2,$substr($get(trz3),$get(pri),$get(ult)))
)

///////////////////////////////////////////
$get_global(tplay_nºcd)|$get_global(tplays_nºcd)
$get(tx1)

$get_global(dimmed)|$get_global(tplay_velada)
$get(tx2)

//////////////////////////////////////////////////////////////////////////////////////
/////////// Fase 4: proceso desde el final del 3er trozo hasta el final /////////////

$ifgreater($len($get(resto2)),$len($get(trz3))
,
$puts(resto3,$replace($get(resto2),$get(trz3),))

$puts(tx1,)$puts(tx2,)$puts(tx3,)$puts(pri,)$puts(ult,)$puts(var,)

$puts(pri,$strchr($get(resto3),'('))
$puts(ult,$strrchr($get(resto3),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(tx3,$get(resto3))
,
$puts(tx1,$left($get(resto3),$add($get(pri),-1)))
$puts(tx2,$substr($get(resto3),$get(pri),$get(ult)))
$ifgreater($get(ult),0,$puts(tx3,$substr($get(resto3),$add($get(ult),1),$len($get(resto3)))),)
)

/////////////////////////////////////////////
$get_global(tplay_nºcd)|$get_global(tplays_nºcd)
$get(tx1)

$get_global(dimmed)|$get_global(tplay_velada)
$get(tx2)

$get_global(tplay_nºcd)|$get_global(tplays_nºcd)
$get(tx3)
/////////////////////////////////////////////

,
)

,
)

,
)

//////////////////////////////////////////////////////////////////////////////////

$if($stricmp($cut(%tipodisc%,1),'R'),$tab(-1)
$get_global(tplay_nºcd_raya)|$get_global(tplays_nºcd_raya)
$puts(suma,0)
$ifgreater($len(%subtitle%),15,$puts(suma,1),)
$ifgreater($len(%subtitle%),20,$puts(suma,2),)
$ifgreater($len(%subtitle%),25,$puts(suma,2),)
$ifgreater($len(%subtitle%),30,$puts(suma,4),)
$ifgreater($len(%subtitle%),35,$puts(suma,5),)
$ifgreater($len(%subtitle%),40,$puts(suma,7),)
$ifgreater($len(%subtitle%),45,$puts(suma,9),)
$ifgreater($len(%subtitle%),50,$puts(suma,11),)
//aqui pinta la raya segun la formula de derecha a izquierda
$repeat('–',$add($get(maxcolum),$add(-$len(%subtitle%),$get(suma))))
//rutina alternativa que pinta la raya de izqu. a dcha. Como pinta al final... habría que desmarcar
//'Display ellipsis in truncated text' y no interesa 
//$repeat('–',70)
,
)
,
)

,
)

//////////////////////////////////////////////////////////////////////////////////
$if(%_isplaying%,$tab()$get_global(tplay)|$get_global(tplays)
$padcut($repeat($get_global(plsym),$add($mod($right(%_time_elapsed%,2),4),0)),4))

--------------------------------------------------------------------------------------------------------------------------------

You will also see that %tipodisc% can take value 2. This use it so that it is seen in the image 5, in the singles 1, 2, 3 & 4 are painted their covers as they are different from the original CD cover.

If you ask how I got it I'll tell you that I used the next trick: in the grouping script that paints the header of the disk (%date% - %album% - %codec%) Si %tipodisc% = 2 Pinto %subtitle% with the same color of the panel background [$rgb (15,15,15)]. The effect is to be painted but it is invisible by painting a blank line and showing the cover.

I leave you the grouping script that paints the header of the disc:

-------------------------------------------------------------------------------------------------------------------------------------
$ifgreater(%tipodisc%,1,

$rgb(15,15,15)%subtitle%$tab()
,
$puts(calbum,$rgb(200,200,200))
$puts(calbumv,$rgb(130,130,130))
$puts(cartist,$rgb(180,180,180))
$puts(cartistv,$rgb(110,110,110))
$puts(cdate,$rgb(130,130,130))
$puts(ccodec,$rgb(80,80,80))

// aquí se hace un velado de textos entre paréntesis
// para la clásica se vela el album en una sola fase (como se hacía antes)
// para la clásica y el resto se vela el artista en 4 fases

////////////////////////////////////////////////////////////////////
$if($strcmp($cut(%genre%,7),'Clásica'),

// Aqui comienza el velado de textos entre paréntesis para el album solo para la clásica
$puts(cam,%album%)

$puts(pri,$strchr($get(cam),'('))
$puts(ult,$strrchr($get(cam),')'))

$puts(tx1,$left($get(cam),$add($get(pri),-1)))
$puts(tx2,$substr($get(cam),$get(pri),$get(ult)))

$ifgreater($get(ult),0,$puts(tx3,$substr($get(cam),$add($get(ult),1),$len($get(cam)))),)

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' esta despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1,$puts(tx1,)$puts(tx2,)$puts(tx3,$get(cam)),)

// Pinto para la clásica todo menos el artista con velado en 1 fase
$get(calbum)$get(tx1)$get(calbumv)$get(tx2)$get(calbum)$get(tx3)$get(cdate)[ %date% ]
$puts(cam,%artist%)
$puts(color,$get(cartist))
$puts(colorv,$get(cartistv))
,
$get(cdate)[%date% ]
$puts(cam,%album%)
$puts(color,$get(calbum))
$puts(colorv,$get(calbumv))
)

// aqui se pinta el artista para la clásica y todo para el resto de musica
// Aqui comienza la rutina de velado de los textos entre paréntesis
// el artista para la clásica y el album para el resto

///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// Fase 1: proceso hasta la 1ª palabra entre parentesis /////////////////////
$puts(tx1,)$puts(tx2,)$puts(pri,)$puts(ult,)$puts(var,)

$puts(pri,$strchr($get(cam),'('))
$puts(ult,$strchr($get(cam),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(trz1,$get(cam))
$puts(tx1,$get(cam))
,
$puts(trz1,$left($get(cam),$get(ult)))
$puts(tx1,$left($get(trz1),$add($get(pri),-1)))
$puts(tx2,$substr($get(trz1),$get(pri),$get(ult)))
)

///////////////// Pinta 1ª Fase ////////////////////
$get(color)$get(tx1)$get(colorv)$get(tx2)

//////////////////////////////////////////////////////////////////////////////////////
//////////// Fase 2: proceso desde el final del 1er trozo hasta el final /////////////

//////////// Vuelvo a subdividir el resto

$ifgreater($len($get(cam)),$len($get(trz1))
,
$puts(resto,$replace($get(cam),$get(trz1),))
$puts(tx1,)$puts(tx2,)$puts(pri,)$puts(ult,)$puts(var,)

$puts(pri,$strchr($get(resto),'('))
$puts(ult,$strchr($get(resto),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(trz2,$get(resto))
$puts(tx1,$get(resto))
,
$puts(trz2,$left($get(resto),$get(ult)))
$puts(tx1,$left($get(trz2),$add($get(pri),-1)))
$puts(tx2,$substr($get(trz2),$get(pri),$get(ult)))
)

///////////////// Pinta 2ª Fase ////////////////////
$get(color)$get(tx1)$get(calbumv)$get(tx2)

/////////////////////////////////////////////////////////////////////////////////////
//////////// Fase 3: proceso desde el final del 2º trozo hasta el final /////////////

//////////// Vuelvo a subdividir el resto

$ifgreater($len($get(resto)),$len($get(trz2))
,
$puts(resto2,$replace($get(resto),$get(trz2),))
$puts(tx1,)$puts(tx2,)$puts(pri,)$puts(ult,)$puts(var,)

$puts(pri,$strchr($get(resto2),'('))
$puts(ult,$strchr($get(resto2),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(trz3,$get(resto2))
$puts(tx1,$get(resto2))
,
$puts(trz3,$left($get(resto2),$get(ult)))
$puts(tx1,$left($get(trz3),$add($get(pri),-1)))
$puts(tx2,$substr($get(trz3),$get(pri),$get(ult)))
)

///////////////// Pinta 3ª Fase ////////////////////
$get(color)$get(tx1)$get(calbumv)$get(tx2)

//////////////////////////////////////////////////////////////////////////////////////
//////////// Fase 4: proceso desde el final del 3er trozo hasta el final /////////////

$ifgreater($len($get(resto2)),$len($get(trz3))
,
$puts(resto3,$replace($get(resto2),$get(trz3),))

$puts(tx1,)$puts(tx2,)$puts(tx3,)$puts(pri,)$puts(ult,)$puts(var,)

$puts(pri,$strchr($get(resto3),'('))
$puts(ult,$strrchr($get(resto3),')'))

// si no hay '('
$ifequal($get(pri),0,$puts(var,1),)
// si no hay ')'
$ifequal($get(ult),0,$puts(var,1),)
// si '(' está despues del ')'
$ifgreater($get(pri),$get(ult),$puts(var,1),)

$ifequal($get(var),1
,
$puts(tx3,$get(resto3))
,
$puts(tx1,$left($get(resto3),$add($get(pri),-1)))
$puts(tx2,$substr($get(resto3),$get(pri),$get(ult)))
$ifgreater($get(ult),0,$puts(tx3,$substr($get(resto3),$add($get(ult),1),$len($get(resto3)))),)
)

///////////////// Pinta 4ª Fase ////////////////////
$get(color)$get(tx1)$get(colorv)$get(tx2)$get(color)$get(tx3)

,
)

,
)

,
)

$get(ccodec) $upper($ext(%_path%))

)


Re: Columns UI

Reply #7690
Effectively I use: $Ifequal(%tracknumber%,1,$puts(var1,true),) (Image 5) since it is not possible from the script when you are processing a track knowing what was the value of the previous track nor is it possible, as far as I know, memorize the value of the track to compare it with the following.

It also creates the %tipodisc% metadata to be able to paint %discnumber% in the desired track even if it is not the 1st as long as %tipodisc%=P (Image 6)

I leave you the script of the column. You will see that I currently changed the %discnumber% column by the %subtitle% column. I changed it recently since in %discnumber% when a numeric field did not always admit accents, ñ, etc. The script is a bit long because it creates a routine so that the texts in parentheses are painted with the most attenuated color.

Thanks! / ¡gracias! As I think you guessed, I was asking because I have some subgroups that don't start at the first track of a disc -- I had not thought of handling this with metadata, but that is a nice trick.

Re: Columns UI

Reply #7691
Pardon me if this has been asked already; my searches haven't found it. I have a button working that does the "View/Playlist view/Show groups" command. However, I'd like to toggle the image based on the current value of that setting. How do I get that current setting?

Re: Columns UI

Reply #7692
Are you referring to the Buttons toolbar built into Columns UI? It doesn't support dynamic images, but it does have a pushed state for that menu item.

If you're referring to buttons created in some other component that uses scripting, if you state which one it is someone else may be able to help.
.

 

Re: Columns UI

Reply #7693
If you're referring to buttons created in some other component that uses scripting, if you state which one it is someone else may be able to help.

IIRC, Spider Monkey Panel can get the flags from any menu item. That's fine if you want to query it on startup/on demand, not so good for visual indicators which I'd expect to update in real time regardless of how the settings are changed, Without some sort of associated callbacks provided via the SDK, I'm guessing that isn't possible??

Re: Columns UI

Reply #7694
The callbacks provided by the uie::button interface are what the Buttons toolbar uses to update the state. So that could be used in theory, but it would only get you state changes for the small number of menu items that implement it in Columns UI. In any case, just updating on click may be good enough for some people.
.

Re: Columns UI

Reply #7695
hello musicmusic

maybe it is because of foo_ui_columns (a suspicion)
after updating foo_ui_columns to version 1.6.0 i noticed this when deleting bookmarks. (see picture)
it was still ok with the previous version.
foo_bookmarks (v0.3.6) is from 2015.
can you please check this - thank you

Re: Columns UI

Reply #7696
I haven't been able to reproduce that, but it looks like it may be DPI scaling or font size related. You may want to also try a clean portable installation too.
.

Re: Columns UI

Reply #7697
thx for answer

font size related, it isn't (i've tested)
now i have completely reinstalled bookmarks (v0.3.6) - nothing has changed

Re: Columns UI

Reply #7698
Try a clean, portable installation of foobar2000 (with Columns UI and foo_bookmarks and no other third-party components) and see if you can reproduce the problem there.
.

Re: Columns UI

Reply #7699
hi musicmusic

with portable installation it is displayed correctly.
I have no idea what I will do. a complete reinstallation is out of the question - too much work.
thank you