Part 11 ViewModel Designer Updates
m (Reverted edits by Alexandra (talk) to last revision by Lars Olofsson)
No edit summary
Line 1: Line 1:
<html>
<html>
<p>ViewModelDesigner updates - what happens when you click widgets and columns. And a brand new addition "Rendered By" on actions. This opens up for a few new view patterns for you to take advantage of.</p>
<h4>ViewModelDesigner updates - what happens when you click widgets and columns. And a brand new addition "Rendered By" on actions. This opens up for a few new view patterns for you to take advantage of.</h4>


<p class="warn">
<p class="video-warn>
<em>To make your experience more comfortable, we set the main tags mentioned in the video to the right bar menu of this mini player. Choose the interesting subtitle on the list and immediately get to the exact theme timeplace in the video. Now you can pick any topic to be instructed without watching the whole video.</em>
<em>To make your experience more comfortable, we set the main tags mentioned in the video to the right bar menu of this mini player. Choose the interesting subtitle on the list and immediately get to the exact theme timeplace in the video. Now you can pick any topic to be instructed without watching the whole video.</em>
<style type="text/css">
 
p.warn {
opacity: 0.7;
text-align: justify;
width: 90%
}
</style>
</p>
</p>


<style>
<div class="video">
#video12 {
   <div class="video__wrapper">
  position: relative;
  <iframe src="https://www.youtube.com/embed/-5UBcfxRvZE?rel=0&autoplay=0" frameborder="0" allowfullscreen></iframe>
  height: 500px;
  width:560px;
  padding-bottom: 10px;
}
#video12 iframe {
  position: absolute;
  min-height: auto;
  min-width: auto;
}
#video12 div {
  position: absolute;
  top: 0;
  left:760px;
  width: 260px;
  height: 100%;
  padding-left: 10px;
  overflow-y: auto;
}
span.time {
    font-size: 18;
    display:block;
  padding: 2px 10px 2px 10px;
    padding-bottom: 0.5;
    padding-top: 0.5;
   opacity: 0.7;
}
span:hover {
  color: #0000FF;
  cursor: pointer;
}
span.time:focus {
  color: blue;
</style>
</br>
<div id="video12">
  <iframe width="740" height="500" src="https://www.youtube.com/embed/-5UBcfxRvZE?rel=0&autoplay=0" frameborder="0" allowfullscreen></iframe>
   <div>
   <div>
     <span  class="time" data-video="-5UBcfxRvZE" data-start="36" tabindex="0">Styles</span>
     <span  class="navigation-item" data-video="-5UBcfxRvZE" data-start="36" tabindex="0">Styles</span>
     <span class="time" data-video="-5UBcfxRvZE" data-start="95" tabindex="0">Winform rendering engine </span>
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="95" tabindex="0">Winform rendering engine </span>
     <span class="time" data-video="-5UBcfxRvZE" data-start="130" tabindex="0"> New edition interface improvements </span>
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="130" tabindex="0"> New edition interface improvements </span>
     <span class="time" data-video="-5UBcfxRvZE" data-start="280" tabindex="0"> ViewModel grid </span>  
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="280" tabindex="0"> ViewModel grid </span>  
     <ul> <span class="time" data-video="-5UBcfxRvZE" data-start="560" tabindex="0"> &bull; Show tab-order </span>  
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="560" tabindex="0"> &bull; Show tab-order </span>  
     <span class="time" data-video="-5UBcfxRvZE" data-start="633" tabindex="0"> &bull; Screen size marker </span>  
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="633" tabindex="0"> &bull; Screen size marker </span>  
     <span class="time" data-video="-5UBcfxRvZE" data-start="695" tabindex="0"> &bull; Suggested zoom </span> </ul>  
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="695" tabindex="0"> &bull; Suggested zoom </span> </ul>  
     <span class="time" data-video="-5UBcfxRvZE" data-start="804" tabindex="0">  "The column SomeValue occupies the same space as SomeString" warning </span>
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="804" tabindex="0">  "The column SomeValue occupies the same space as SomeString" warning </span>
     <span class="time" data-video="-5UBcfxRvZE" data-start="900" tabindex="0"> Actions in UI </span>
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="900" tabindex="0"> Actions in UI </span>
     <span class="time" data-video="-5UBcfxRvZE" data-start="1415" tabindex="0"> "Rendered by" on actions. Checkbox column </span>
     <span class="navigation-item" data-video="-5UBcfxRvZE" data-start="1415" tabindex="0"> "Rendered by" on actions. Checkbox column </span>


   </div>
   </div>
</div>
</div>


<script>
 
var IMG = document.querySelectorAll('#video12 span'),
    IFRAME = document.querySelector('#video12 iframe');
for (var i = 0; i < IMG.length; i++) {
  IMG[i].onclick = function() {
    IFRAME.src = 'https://www.youtube.com/embed/' + this.dataset.video + '?rel=0&autoplay=1';
    if(this.dataset.end) IFRAME.src = IFRAME.src.replace(/([\s\S]*)/g, '$1&end=' + this.dataset.end);
    if(this.dataset.start) IFRAME.src = IFRAME.src.replace(/([\s\S]*)/g, '$1&start=' + this.dataset.start);
    this.style.backgroundColor='rgba(0,0,0,.2)';
  }
}
</script>
</html>
</html>
'''Raw subtitles text'''
hi and welcom, we're going to take a look at the
view model designer, there's a few updates and
also a bit of frustration we have had
through email and it's great that you
communicate what you think is strange
and so we can fix and do better
thank you very much for that, so
the view model editor looks like this
the first thing about the styles, here you
can actually add your own styles, if you
have done better, but I think there is two set along
default it's the bubbly and it's the
MDriven designer default and this is only
for your own pleasure, what you like, it
will remember what you have chose
and show that for all the view models you have in this particular model
so change that to whatever you think is appropriate for you and we have few
I've done a few other styles, there's not
that much difference to them, but we can
go with this one for now and it sort of
mimiks the winform preview pretty much
and this is how things would look where
if it would be rendered by the
winforms rendering engine that we also have
but we don't really recommend you
to use that one because it's old and we
don't attend to it as much as the wpf or the turnkey ones ok
so and a new addition is that the
highlighting of the columns here are
made a little different color, so that
you see them better and there's a
resizer here that makes it
possible to resize placed columns
we call these columns, viewmodel columns
we call these the view model and the
head of the view model and these are
nestings to the viewmodel, we have done a
few other things as when you click one
here this one is highlighted the
corresponding item is highlight, so it
will be easier for the eye to see
what it is that you clicked on and let's
make this bit smaller, so that you see if you were
to have it like this and you select
something out of screen it will now zoom or rather pen to the
correct item and this is also true vice versa
so if you have it like this
well it's hard to see now I guess if
this were to be scrolled, let's add some
things that's going to copy and paste
paste paste paste...like that and
described out of view and I'm gonna click this one
so then its scroll and select, so it will
be easier for you to to find it with the eye
ok, so what is it that happens when we
going to do ctrl+z here to remove this things
what it is it that happens when we move around fix
well the view model is just a grid it's
a logical grid and we place things like this
if we look at this we can see that
the column is 1, so this column1 and
the row is 0 this is row 0, if I were to
move it here, it would update to column 2
and then the span how many
columns it would expand, if I change this
to 2 it jumps, if I change it to 3, 4
like that and I could also grab it
by the handle, the resize handle in the
bottom here and change it that way
then it would go back, so we place a label in
front of all the placed widgets and
the label is just defaulted to this
the name and when we find this will try
to decount case what we have in the
name, but you can actually override this
and set something else I got
or you could write that manually
some date but the fastest way is to
just have it like the default and it
will decount case your name, if you
don't want to label at all, you can actually
remove this and it won't be rendered
you see, it's now not taking up any space
there so you could have something else
there without a collision, but if this
one were to have the name and you moved up
that one, it wouldn't look very good
it's not actually a collision, but it's crap, so avoid that
yeah, and at the very end here
we have an area which will extend it
if you drop on this it will extend
but you can't drop outside, so why is the
great desize is, well it takes the max
and the min of what you have placed
unless, you select the top level of your
model level and explicitly say that it
should be 10 columns and 10 rows
they would be that until something forces it
to be even bigger, like this, but these are usually set to zero and we
interpret that as set and sizing it to
to what you have placed ok and so in
this case the label takes up one column
but if I would like it to take up more
columns. I can do it like that, now it
takes up 2, now it takes up 3
there's really no to widget resize
thing to set this in the UI you need to change it here
we also have some few other things
show the gridlines I've talked about and the
show tab order it s in what order the
key navigation will try to use and we
can control this by changing the strategy
now its display order y before x but
maybe it should be the other way around
x before y or maybe it should be the
column design order, so if this one would
be at the very bottom and it would jump
around like this and I know we have a
some kind of bug here with the arrows
denoting how things are connected, but
we haven't got around to fix it, it's
just a rendering, ok, so to do this we
have the zoom in and zoom out and the
fit and nothing strange about that but
this thing screen size marker it
says 1920 x 1080 and what that control
is actually the size of the prototyper,
so when we started it comes up really big
but if I were to set this, this is a
global setting, so if I set it to 800 x 600
and start a prototyping it comes up a lot smaller, ok so
we have this suggested zoom
it's a variable that will be the value
that will be streamed along with the
other data of the view model and that we
have had used for it when the screens
are too big for this, so to avoid scroll
bars showing on the user's monitors, but
it's only implemented for wpf really
ok and we have the actions tab
which denotes how we can come here
and we can double-click them bring up
the actions dialogue like that and we
have seen that before and then also if
there is a view more action in here or
other navigating action it would show up
like a little icon, so when I click this
action view one thing I can see that it
brings up the viewmodel, view one thing
but I can just as well jump to it
straight here so this is actually a
great way to navigate around your application in design time
and of course you can opt out and opt-in
the actions as we have talked about before
so whenever you design and make things end up
on top of each other you will get
these warnings the column some value
occupies the same space at some string and
this you should never run like this
you should avoid it, this will also show when
you save and the model validation is run
as part of the save operation and it
will state that this is a problem
actually you should always make sure, that this is empty
never run with the things not sold here
it's really not supported it could
be any kind of the issue with your model
that will be probably problematic for the framework to deal with
so when things end up on top of each other
there's actually no super good way to
know which one you click you just have
to move them around to see if this is
what you want or maybe that is what you want
the view model editor has been
stable for quite a while which is good
it sort of tells us that it is doing
what it should and we haven't had a lot
of need to change it, but we had this
idea that we think is truly generic and
it's the ability to tie an  action to
another widget in the UI, so if you
remember we could of course add a an
action column, which really only is a button like this and yeah
this might be good to mention here
whenever we add something, the default
position will be the last position you had plus one row, so if I add
another thing, it would end up under the
the one I just placed, so this is practical
and so if you're going to add a lot of
things over here make sure that you
change it there first and then add the
rest, they will end up under it like that
right, but what I was saying was
that the action column MyAction
that's just an ordinary column with the
"is action" checkbox checked, so if I were
to take that away it would render like a
text box, but I wanted as an action and
here's a few new things of course, when
it is an action you might enter the
expression here and then it's an action editor or EA language which is
allowed to have side effects wouldn't be
much fun action if it didn't, but you can
also hook it to a existing viewmodel action
that you have designed here
so that makes it possible for you to
navigate from a button for example or do
framework actions and things that's are
only available in the actions defined here
yep, but what I was speaking about was
the ability to tie an action to another placed widget
so another thing, we have designed this for
let's try to check that was the one
I fixed, so I'm going to add an
attribute. so that we could show an image
because images, is so I have this image
attribute, let's call it image and make
the type a blob
oops, blob and whenever I have a blob
I can set the blog type to help the
rendering engine and say it's an image
and that means that I now have a new
column to add here that's the image
and it ended up here because this was
the one I did last and it just adds the
same height and everything but
I might wanted like this not like that and there
may be like that, so, what I really would like to do, now is to
make this image clickable, that's a common
use case I want the image, but I wanted
I want someone to be able to
click the image in and do something so
but I have my action and this is where I can do things
let's say that my action takes the, well
what should we do take the some string
attribute and depends, like that
and here's my image, so let's just run
this and see what it does the plate and
view all things, create a thing and
save it, have it for later and if I were to click my action it
would makes like that and if I were
to pick my pick my image, I guess I could
go like that have an image and if I were
to click this is nothing what happened
because it's just an image, right yeah
so that's what is cool with this new
feature is that I could point on the
image or rather pointed the action
and on the action row it says rendered by
so here I can say that it's the image
that will render my a action and not
myself and what happens then if I choose
this is that the button shouldn't have a
visual representation, it shouldn't be
available anymore and it disappears and
now it's backed by the image instead, so
that would mean if I refresh is and
bring up the same thing again the button
isn't there, but I can double click the
image and things will happen here, so
and this is the new feature that we have
added to, today I added it to wpf and I
will continue to add it to the turnkey
rendering engines as well, so there's
this possibilities also implemented for
things that have, that are static added
boxes stutic labels like this some
string and then I can say that the
action that I have here is actually
rendered by my attribute on my column
called some stream and then it shows up as
hyper link thing and that would
be the same as if I do a refresh and we
navigate back, if I click it would execute
the action and it added an x but
this one doesn't have the action,, so if I
want both I need to add two actions and
say that the what columns stay back
so, this feature also enables us to
do a thing that we have been thinking
about for a while, you know
when you have a grid with the lots of
things and maybe you want to select a few
things of the grid the standard pattern
has been to add another grid with a
couple of action seem in between showing
arrows I want to pick these I want to
remove these from the picked, but much more
compact way of doing it would be to have
a checkbox column you have here that you just
could check to get things and this
renered by action is actually one way to solve it
so if I save this I can just set some
values here so we see that they are different
and if I were to add new generic column here and say that
well actually I need to have something
in my model, so that I can choose many
details let's just add another link and
call that one picked details, like that and
press ctrl+L to make it squared and
whenever I press ctrl L there it will
remain square when I move it around
ok, so just to prove the point I'm going
to add the nested viewmodel multilinks
and grab this one picked details, I know it
was out of screen, I think you get it by
now I'm going to show the attribute one and delete
that column and now it collides with
things move that up here maybe, like so and what about a compact
way to move this one up by dragging it
now its first and I say, call this picked and now
I should get the expression to denote if
it is picked or not, so self and
I'm in the context of a detail remember
the model of detail that is owned by of
thing, so navigate up the thing and says
pick details and pics of self
if this is bigger than -1 then it
actually is a picked, so I guess that could
be my expression, because if I'm not bigger than -1, it will be false
and I will be yeah and I'm not picked
so that could be the expression and
running that would look like this and of
course it's a read-only expression
because it is index off and
it doesn't set anything, change anything
in my model, but what I want to do is
when I click this I wanted to be
selected, so what we can do is to
in the grid add a new column and I'm
going to say it's prepared for action
so it's an action column
this is rather new we haven't allowed
column actions in the grid before and
we still actually more or less done
because it's unclear what they should do
but in this case it's clear, we want this
column, this action to be rendered by the picked column
so whenever you click the picked it should
actually just ignore what it is in this case checkbox and just
execute the action, we are still in the context of a detail
and we navigate up to thing and we
see the selected, picked details, so if
the details is index of self, so its bigger
than -1, than so what we're saying
if we already are pick then we should
actually remove ourselfs we want
to toggle this, so when you check it
it should be picked and when you uncheck it
it should be and removed, when you want to add ourselves to this
association and then we are endif like that
so having done that, we should
re-fresh now when I click the action is
execute and it will render here as a
consequence and if I check it again
click it again it will execute the
action one more time and I see that I'm
already selected and then unselected and
the checkbox is actually just signaling
this state, so this is cool because that
means I don't actually need this grid
to solve the whole problem of picking
few things and of course saving this and
going back and going into it again it
will be correct and even if I had
another way to change which ones are
picked it would be derived to have
the correct view here, pretty cool
so that is what you can do with the new
thing called rendered by, an action can
be rendered by something else

Revision as of 20:41, 5 March 2019

ViewModelDesigner updates - what happens when you click widgets and columns. And a brand new addition "Rendered By" on actions. This opens up for a few new view patterns for you to take advantage of.

Styles Winform rendering engine New edition interface improvements ViewModel grid • Show tab-order • Screen size marker • Suggested zoom "The column SomeValue occupies the same space as SomeString" warning Actions in UI "Rendered by" on actions. Checkbox column

This page was edited 47 days ago on 02/10/2024. What links here