Hi, I’m on/off building a little GUI to test out the API functions I already know how to call. I decided to go with “sample_rate, sample_ch, sample_frames, etc” but the GUI doesn’t load at all if there’s no sampledata in the selected_sample. So here’s my question, how do I make a if blaX then nothing else vb:text type stuff?
vb:column {
margin =0,
vb:column {
margin=5,
style = "group",
--margin = DEFAULT_MARGIN,
vb:text { text = "Sample Statistics" },
vb:text { text = "CURRENT SAMPLE: " .. renoise.song().selected_sample.name},
vb:button { text = "SAVE SAMPLE", notifier = function() savesampleinfolder() end },
vb:text { text = "CURRENT SAMPLE IS: " ..
sb.bit_depth .. " BIT" .. "\nCURRENT SAMPLE IS: " ..
sb.sample_rate .. " kHz" .. "\nNUMBER OF CHANNELS: " .. renoise.song().selected_sample.sample_buffer.number_of_channels .. "\nNUMBER OF FRAMES: " .. sb.number_of_frames,
}}
Where would an if-check like that be placed - if one wanted to show other information also in ViewBuilder()s?
I’m really vague in this. I’ve got Rows and Column of vb stuff going on, text and buttons and stuffs. I had a little list going on, of sample details, and now I’m not sure how to make it appear and how to make it disappear if no sample is available.
I believe it’s enough to place the if-then snippet anywhere before your sample data column. Not sure how you’re building the gui, or updating(?) it. Quick note: I forgot the variable declarations from my snippet, so those have to be added before the If-then -thing.
– Set visible to false to hide a view (make it invisible without removing
– it). Please note that view.visible will also return false when any of its
– parents are invisible (when its implicitly invisible).
– By default a view is visible.
view.visible
→ [boolean]
Stole MKaki’s snippet and processed it a bit, the draft would the look something like:
local my_bitdepth_text
local my_samplerate_text
local my_numberofchannels_text
local my_numberofframes_text
if sb.has_sample_data then
my_bitdepth_text = sb.bit_depth
my_samplerate_text = sb.sample_rate
my_numberofchannels_text = renoise.song().selected_sample.sample_buffer.number_of_channels
my_numberofframes_text = sb.number_of_frames
end
area_sample = vb:column {
margin =0,
vb:column {
margin=5,
style = "group",
--margin = DEFAULT_MARGIN,
vb:text { text = "Sample Statistics" },
vb:text { text = "CURRENT SAMPLE: " .. renoise.song().selected_sample.name},
vb:button { text = "SAVE SAMPLE", notifier = function() savesampleinfolder() end },
vb:text { text = "CURRENT SAMPLE IS: " ..
my_bitdepth_text .. " BIT" .. "\nCURRENT SAMPLE IS: " ..
my_samplerate_text .. " kHz" .. "\nNUMBER OF CHANNELS: " .. my_numberofchannels_text .. "\nNUMBER OF FRAMES: " .. my_numberofframes_text,
}}
if sb.has_sample_data then
area_sample.visible = true
else
area_sample.visible = false
end if
dialog_content = {area_loop, area_transport, area_views, area_config, area_sampler, area_song_stats, area_sample}
dialog_frame = show_custom_prompt("Nativity Scene V"..version_number,dialog_content, key_handler)
Point is you also need to add a notifier to the sample list observable, so that if the user selects a sample that contains data, that the area with buttons and text is being displayed again so that the GUI frame is updated on-the-fly.
function sample_list_notifier()
..get current selected sample...
..get has_sample_data state...
if state = true then
area_sample.visible = true
else
area_sample_visible = false
end
end
Also the area_sample variable has to be global within your own routine, else you can’t call or change objects and properties from it elsewhere.
There are a few pitfalls here to encounter, so these kind of routines require a bit more thoughtfullness.
What i also forgot:I play with the visibility of the note-matrix in the Epic Arpeggiator (hit the page up or page down key to switch between custom or matrix mode, in the keyhandler of the “gui.lua” you can find how the areas are being set to visible or invisible)