Hi Uro,
I don't have access to Fusion at the moment (it thinks my copy has expired or something), but LB kindly still hosts the help document: http://lb-stuff.com/MMF2/Ini++/
I think you can...
Type: Posts; User: Jax; Keyword(s):
Hi Uro,
I don't have access to Fusion at the moment (it thinks my copy has expired or something), but LB kindly still hosts the help document: http://lb-stuff.com/MMF2/Ini++/
I think you can...
The reason was just that Unicode MMF didn't exist at the time I wrote it! You are free to convert it - you can get the latest code off Clickteam, I think Yves has it - but beware! I wrote it when I...
I continued the conversation via PM to stop spamming this thread too much, but that's not dissimilar to the way went for (except I put it in helper in the form ^\t* so that it was only indent lines,...
Ah sorry I didn't get what you meant!
Perhaps try this:
function helper(x,y)
return x .. y:gsub("\n","$") .. "\n"
end
function fix(a)
local b="\n" .. a:gsub("\r?\n","\n") .. "\n"
...
You need to change "\\n" to "$". i.e. change the second line to:
return "`" .. x .. y:gsub("`","$") .. "`"
Is that what you mean?
I think replacing
return "`" .. x .. y:gsub("`","\\n") .. "`"
with
return "`" .. x .. y:gsub("`","\\n"):gsub("\t","") .. "`"
will do - unless you only want to remove tabs at start of...
Opps sorry. If you go to the Lua object and look at the script property (which is its only property) you can change it to this:
function helper(x,y)
return "`" .. x .. y:gsub("`","\\n") .. "`"...
It turns out Fusion 2.5 is free right now so I was able to download it (I swear I've bought it at some point but I can't find anything in my emails about it). Here is an example of using the Lua...
I'm afraid I don't have my environment set up anymore to do any extension coding very easily. However, I wonder if you could do something like this:
1. Load the file into a string (using the File...
Is this so the INI file looks in a particular way when users or other programs view it?
Hey 2xD,
If you perform the association using YASO and then log in and log out again, does it then work when you double-click the file?
For addition, a+b cannot overflow unless a and b are of the same sign.
In the case that they are positive then it will happen exactly when a > (2^32-1)-b (assuming MMF still uses 32-bit integers,...
Hi BartekB,
Ini++ originally didn't support empty groups - when the last element of a group was deleted, the group just disappeared. This was most natural from the point of view of data storage,...
Hi Zugwang,
There is a way to do something quite similar. You could have a group a bit like this:
[Questions]
1=What's your name?
2=What's your date of birth?
3=What's your favourite food?...
Weird. If you go onto https://sites.google.com/site/jlnwebster/multimedia-fusion/extension-list/chart-object and click the down arrow right of 'Chart.zip' then it seems to work, but if you click the...
Yes, it ought to, but it does not support Unicode strings.
I'm not sure about the specific case, but I believe that the object will not work with Unicode characters, but will work in general with MMF2.5 if unicode characters are not used. MMF converts the...
It works and is testable on F2.5 except for the global strings and array functions. General replacements and replacements with a global value still work fine (or at least should do). See the blog...
Hi iOSC,
I added that feature (this was my earliest opportunity): https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxqbG53ZWJzdGVyfGd4Ojc4NDEzZThjNzg0NjE3YTM
Could you tell...
When your program is running you should assume that you do not have permissions to write in any directory (not explicitly specified by the user) with the exception of the user directories. If you...
Hi MOBii,
I've tried it and did not encounter any problems. Please inform me if you do have any problems. It doesn't appear to be in the extension downloader tool (I'm not sure why not), but you...
I'm a bit confused about whether the polygon collision code is written in MMF or in an extension? If it is the former then it seems unlikely to me it would be faster; not because the method is worse...
It should be easy to add, but the problem is I don't have the correct C++ compilers on my current computer. It'd probably be worth doing, I'll look into it, but it might take a little while to do.
...
It looks like I forgot about that feature, sorry.
(Also I seem to have totally forgotten what I meant by a 'macro'! Edit: Oh I see they are strings which are replaced, but the things they are...
Just thought I should probably give a bit more detail there: Each packet has a checksum (16-bit iirc) so you know that the checksum is very likely to have been received correctly. But if you are...
Just wanted to confirm ProdigyX's answer is correct.
Note that if 'auto-load' is enabled though then it will reload the file on every access. That is a good reason to never enable that option!
If the file is received via TCP, which it surely is, then it already has checksums, so you don't need to worry about it being incorrectly downloaded. (Unless it is a massive file, then checksum...
It's certainly odd that it appears to get 'tainted', to use Walrus' word. However, it is probably best to check both the "Number of significant digits" and "Number of digits after the decimal point"...
Can anybody confirm if Ini++ works? (Or any of my other extensions if anybody uses them/wants to use them!)
Did it have to be ported at all or does it just work? If it did then perhaps CT didn't...
Thank you for the information, Pharanygitis. I will look into it in due course.
Edit: Does the previous version of Ini++ have the same problem?
The October 2013 release fixes another crash.
Indeed, but you'll at least want to verify that your choice is correct. The above code was useful for me because I did not create unicode and non-unicode versions (as it was only for interacting with...
I just look at some code for detecting it and I got the following (this is for an extension that looks at internal structures and so must know if it is unicode version or not at runtime):
...
I have issued an update to Ini++ v1.5. It fixes a couple of memory leaks do with the undo stack. The memory leak applied even if the undo stack was disabled. For this reason it is important that...
You are using the right object, but the wrong action, if I understand correctly.
The 'file association' features are the ones you want to use so that when you double-click a file it opens with...
Take the number 0.75 (in decimal). How is it stored on a computer? Well, just like whole numbers are written 'in binary' as a sum of distinct positive powers of two, so that can be done for using...
Alternatively, if you sort with Ini++ it will use a special sort which respects numerical order too.
Hi Gibbon,
Are you still having trouble? If so, private message me and I can give you some help for it.
It is a little bit hacky how multiple lines are supported for line graphs, as the...
Make sure you have the latest version of the object. See my past posts, I announced it a few weeks ago. It merely gets rid of this warning.
It only needs to be put in the 'extension' folder, as the runtime hasn't changed.
Um, that is a good question. A friendly moderator may be able to put it somewhere more relevant, perhaps.
Look into the IIF object. This allow an expression of the form 'if {cond} then {value1} else {value2}'. Nesting these will allow you to do it without all the operations.
However, this should only...
An update of the chart object allows it to be added MMF HWA. Previously, a dialog box would disallow this.
Note this does not imply it supports HWA. If 'Direct3D 8' or 'Direct3D 9' display modes...
If you could isolate this problem, I would be interested in seeing it. Thanks.
The Chart Object does include a mathematical evaluator. Unfortunately, I didn't add any functions to directly use the evaluator. However, you could take your string (like 2+2), generate a graph from...
Yes, I get the crash. I'll attempt to look into all these problems when I get a chance.
No, try re-reading the post: You will probably have Ini++.mfx and Ini++15.mfx. If they both happen actually...
I have written the following in order to explain the 'multiple versions of Ini++' issue. The short answer is: there are only two versions, and there had to be two versions.
The long answer is:
I take it you could not isolate the problem at all?
Would it be possible for me to look at the MFA?
Indeed LB is correct (naturally it will save if you manually use the 'Save'/'Save as' actions though!).
I'm very glad to hear that INI++ is stable now. I was worried I may not have actually fixed...
The following is from the advanced features section of the documentation:
Also I thought the Chart Object could only be distributed as an installer to stop the bad guys? I don't think any...
You can change the chart type at runtime (although this is an advanced feature), and you can also plot multiple lines on a scatter plot. You can also simulate multiple data sources in bar charts by...
ChristBurrows, that doesn't really fit into any existing object, and so I won't do that. Sorry.
ColdFire: Those two problems have been noted. Hopefully I will get a chance to work on them....
Hello,
In the past I've written the INI++ Objects, the Chart Object (With CB) and the spell checker object, as well as other smaller objects. For a full list, consult my website.
As I haven't...
There is no character limit.
The standard INI object has lots of limits, as Nifflas mentions. I believe I list them in the INI++ documentation somewhere.
INI++ imposes no limits of its own. All limits will be those of 32-bit...
It is worth noting that you should never compare two floating point values for equality or non-equality directly. The correct thing to do is to subtract the numbers and check it is 'small'.
Even...
What feature do you need in particular?
Hm, that's interesting. It should be pretty quick...
Updated
Can you verify that works please, SortaCore?
I think Nifflas is broadly right. Whilst extra extensions are a good thing, and it is better for them to be around then them not to be, what we have at the moment is a complete mess.
Chris...
It's not common for applications to directly speak to USB equipment. You normally access it through a driver. Do that.
Use Ini++. It has an option to use a smarter sorting algorithm which will deal with this. (It will even sort "Item 22" before "Item 102", etc.)
Jack is Jax. =]
I'll fix this bug at some point when I can. But what is the correct answer? It is like dividing by zero, or taking the intersection of no sets. It seems the most sensible thing to...
Pixelthief: No, you cannot load from a data element directly (unless it somehow automatically supports it). I did think about implementing it, and there was some reason why I didn't implement it. I...
What object is this? It is different to the one I wrote?
If your program is based around Ini++, then you can use the "undo/redo" feature of Ini++ v1.5.
However, usually this will require you to write your program around this feature. Still, if you do...
Check out this thread ;)
Hello All,
A long time ago, Chris Branch started the Chart Object. Unfortunately, he didn't have enough time to see it through. Since then, I've taken over it and finished it.
It's been near...
The best way forwards at the moment is to wait until tomorrow (Saturday) [wink]
The WinAPI function "GetCommandLine" does this.
Hopefully very soon there will be an update which should solve your problems.
JimJam is correct. Even when the Ini++ object shares its data, its settings are preserved.
Yes, for MMF you must abort it. Actually, I vaguely remember making it so it ran an event when it happened, but the problem was you couldn't do much with it so I took it out. The idea was you could...
YASO can do this.
Note it won't do it when run from MMF. You need to actually build the program as an EXE.
Thank you for your comments, Telephone =]
I just tried to make up an example, but then I found a bug. Bah! They used to work, I know. The newest version of Ini++ should only be a week or so away,...
2. It's a bit of a rubbish feature really, I wouldn't bother with it. It essentially just sorts out a prefix on the group names for you. The only extra feature it adds is that in files these are...
There is an updated to Ini++ that will hopefully be released soon.
As soon as I get Ini++ fixed, I will release my chart object which can do it with one line of code.
I will be working on it again tonight, hopefully, but I just can't see where the fault is [frown]
An alternative way is to use Ini++ and then you can randomly order the items in a group.
Nivram's solution is probably better though.
Haha yes good point.
LB, yes, the escape thing doesn't work, but that isn't important. I just used the action which sounded like it would work, but turns out it didn't and I didn't bother testing. I don't really use MMF...
So you are trying to find the equation of the line between two points. Let us say they are (a,b) and (A,B).
So a straight line has the same gradient everywhere. So of course, the gradient is:
G...
Haha yes I know, Milne was indeed one of ours [smile]
If you want to know more about the mathematical background, I can explain it properly if you'd like. I am quite keen on maths =D
Ah! I see your mistake! In #2, it shouldn't be:
X = originX( "temp" ) + ((radiusX( "temp" )*Cos(15)*Cos(Angle( "temp" ))) - (radiusY( "temp" )*Sin(15)*Sin(Angle( "temp" ))))
Y = originY( "temp" )...
I installed MMF just to try your example! (Which is very nicely coded I must say =D)
So u is the more like the tilt amount (shear factor) rather than the tilt angle. However, it is related to the...
Yes you are right about my notation there.
As the the shear matrix bit, I will explain it in a different language thusly:
So what we essentially want to do is 'shear' the ellipse. To understand...
Here is how I would do it:
So we all agree that an eclipse is parametrised by E = (a Cos[t] , b Sin[t] ) for t between 0 and 360 degrees.
So then we can apply a transformation to it. Take for...
If there is enough of a demand, Python is the most likely. I am not very keen on porting it to Flash or Java though.
If you need portability, keep with the standard MMF objects for sure. After...
Not unless somebody paid me I'm afraid, I have far too many other projects to do.
(Python is a bit more tempting, however.)
Edit: I don't understand your edit =P
Ricky: Ini++ will not be ported. I mention a bit about why here
Fanotherpg: I'm not sure what you mean, but it does remind me of something...
There is only Ini++ v1.0 and v1.5. The versioning...
Also, do you use the standard or Unicode version of MMF2?
Hopefully in a couple of days we will have a release of a new version of Ini++ (as well as the new Chart Object) which might just fix this, as I did fix a massive bug in Ini++ v1.5 which did not...
Indeed, the site Keokeo linked to has an explanation of this under the heading 'But Sometimes There Is Confusion ... !'.
As a mathematician, 'log' is certainly base e to me [wink]
I would dispute that, Looki [wink] Although 'ln' is definitely the natural logarithm, I would say Log normally is as well.
(However, to make things more complicated, that doesn't mean they are...
The Ini++ array functions are so you can load an array into an Array object, and then put that data into the Ini++ object. So Ini++ can load from array objects indirectly.
Just use aTan2.
Was my example in the other thread any use to you?
I've made this for you. Is that what you meant?
If that isn't ok, you could use the IIF object.
Also, it is worth mentioning that in C++ it is up to the compiler how to treat % exactly (which might in turn leave it up to the processor). Therefore you cannot assume it will even stay the same on...
What is the problem it you are trying to solve? Perhaps we can help you work out a more efficient method?
The Window Message way is probably the way to do it, but don't expect it to work when the program has been updated.
If you have MMF2-Pro, you can use the Regular Expression object.
I have no idea how it works within MMF, but the regular expression you want is probably something like:
<div class="[^"]*"><a...
I must say that in my time using it, it has been really dodgy. However, make sure you are using the latest patch, because it has been made better I think.
Here you go
Oh, they hadn't. Haha. Well the idea of the method, given that it is still relevant, is to use the fact that Ini++ cannot have two items with the same name.
There are a few ways you can exploit...
Here is an example of a cheaty method.
View MFA
(Sorry, I wrote this as soon as you posted, but I forgot to press 'Submit' so it was just sitting here! I guess some people will have replied in...
Here is another example.
It is similar to the last one, but it is rewritten from scratch and I cut some corners.
(By the way, the link in the original post is fixed now)
Hello everybody.
I've finished another update of the Ini++ object. This version has a load of bug fixes, improved compatibility with the Unicode version of MMF and a new feature.
The new...
I assume it is more for people writing software there sorts out extensions.
Just to chime in here, possibly to add confusion, a probability of zero does not mean an event is impossible, in general. Indeed, such events are called 'almost impossible' rather than 'impossible'...
If you used Ini++, you could use 'Clear All'
He seemed cool, tho I didn't talk to him very long as he had just popped into the party before work (he works in a bar that he owns). He got my friend, whose birthday it was, a cool inflatable gun...
Nearly relatedly, I met the guy who made Worms the other day =)
Nova will love this, he has wanted an object like this for a long time!
Somebody's version of it could have got infected, and they might have distributed that one. You could download it from my site (see sig) to be sure though.
Yeah, 'always' event where you are setting the volume to
Max( 0 , Min( 100 , -( Alterable Value A -650)/4.5 ) )
Volume = Max( 0 , Min( 100 , -( Distance -650)/4.5 ) )
Haha very good point! I will sort that out when I release a new version (which will fix some Unicode issues and also add new 'undo'/'redo' actions)
This works for me:
ReplaceSRF$( "Regular Expressions object", Edittext$( "Edit Box" ), "\n", " ")
i.e. \n
Yes, here is an example:
View MFA
Watch out though: When you use the file object, all sub-folders of the folder you are making must exist. Some other objects don't have this requirement. (I...
I've updated the object so that the bug you found is fixed. You can get it here.
Ah! In fact, you found a bug! Sorry!
Here is what to do: In the property viewer thing where you choose the options, go on to the second tab. You should see a checkbox 'Use standard settings'....
Hm, it should be! Are you sure the checkbox is checked?
An updated version has actions to automatically export to or import from the MMF List object
An updated version improves support with the Unicode version of MMF.
If there are no complaints then in a week or so I will release this properly, which in turn allows the Chart object to be...
No, with 2 the file will remain encrypted on disk, but in the computers memory it is not encrypted. This is quite usual - after all, everything else in your app will not be encrypted either (although...
So just with encryption on, the data is all scrambled before it is written to disk. The method of encryption isn't too important, but it depends on the key. It can only be decrypted with the same key...
Are you using Ini++ v1.5? If so, make sure you are using the latest version as I seem to remember there being a bug which meant the 'Group Exists' event didn't work.
Does this help?
Yup. Windows now has 'Application Data'. The following is from 'The Old New Thing' comparing it to 'My Documents':
So that is definitely the place to put it. Luckily, whoever wrote Ini++ was...
It should be fine loading data from any directory - it is only writing that is the issue.
You can ensure Ini++ does not attempt to write by checking the 'Read Only' box in the frame editor.
MindTwister managed it using some HWA effect I think?
OK, sure =) Well I'll be releasing it and gradually updating it via my website then.
Yes it is a bit of a shame, however that isn't a great deal I can go about it.
If more people can confirm they've used it without problems, I can release it properly.
Has anybody been using this? If so, can they confirm it seemed to work correctly for them?
I've made a sort of sequel to my MMF1.5 set object. It allows you to define lists and then manipulate them.
See this blog post.
So at the moment it is not at all polished. It needs more...
Hey EasySite,
First, just looking over my earlier posts they seem a bit rude. Sorry, I didn't mean it quite as it sounded I think. So sorry about that!
However, your question inspired me,...
Obviously you can use the Regular Expression object: .* is greedy anything and .*? is non-greedy anything (if I remember correctly [wink])
However, in the case of searching, which was the...
Ini++ has it as a 'bonus' feature, too.
I agree with Neomonkey's point about there being too many extensions which similar causes, which should be unified.
I hope we (= the community, extension developers) can sort this out before...
Here is the thing: You cannot do what you are doing in C++ in decent time. I ran my test program for an hour and it didn't complete, and that did less than your program would have to do.
So the...
Right, well what you are doing is stupid anyway as 40^8 > 32^8 = (2^5)^8 = 2^40 > 2^32, so you can't even use an index variable to loop that high so you obviously can't do it that way.
Second, you...
You can do this with 'just' 76,904,685 loops.
No true, I just mean that overall you probably shouldn't be doing brute force things in MMF.
Also, it is bound to be slower as it is interpreted not compiled.
What problem exactly are you trying to solve?
Ah yes, haha. Was just checking to see if you were awake!
Redownload it now. =)
We've been told not to use DDE since Windows 95 came out - it isn't really multitasking safe. It might be better to allow COM implementations.
Okay, well since we are listing other ways to do it, you could try this: NOT(value) + 1.
You'll want to make sure auto-load and auto-save is disabled when using it over a network, too.
I've noticed in the past that MMF does not allow you to write -Value though, which it should do really.
OK, but I do want the other stuff extensions and things I am writing out the door first =)
Yeah, you can just use trig.
I thought it'd be easier to make an example:
View MFA
The advantage is that the spellcheck object can list spelling suggestions. That is the complicated part of it.
I might be able to do that though Gustav.
Spellcheck stores words by how they sound, not by how they are spelt, so that suggestions can be generated.
Have you tried the Dictionary Object? That is just a simple hash table, which is...
Gustav,
Yes I remember wanting to do that. In fact, it was you who wanted that wasn't it? I don't think I ever managed to do it though. Is it still a wanted feature?
The problem is that...
Alas, it only really supports English.
(Other Latin languages can be used, but I didn't expose the ability to change what letters sound like, although my underlying code does allow).
Sorry.
This may be of use to you.
See this post
The OR operators
A new feature has appeared in Multimedia Fusion 2 Developer since build 244 : the OR operators. The OR operators can simplify a lot your program of events by allowing you to group...
Use "Add repeated item" instead of "Set item" (setting the parameter asking for mode to 0 for new item). In item repeat mode, select "Rename". Then when you get the value, if it has a dot in it...
Here you go, using Ini++ v1.0.
This *does not* allow multiple scores from somebody with the same name, which is sometimes exactly what you want and sometimes the opposite of what you want. To...
If you are using Ini++ you can just find the item with the smallest value and delete that. I would make an example but I don't have Ini++ v1.0 installed for some reason.
Tell me if you need an...
v1.5 should be released again soonish, too.
I've made a Part 2 to that tutorial. This answers ezra and RGB's questions about spell-checking whole sentences, I hope.
Thanks everybody =)
No problem RickyRombo, although I've now written it up on my blog with more details and screenshots. View it here.
Feel free to put the images in your post if it is possible...
OK, sure, here is a simpler how-to-use guide.
Stage 1: Load a dictionary
Obviously the spell-checker doesn't work without a dictionary. Insert the object into the frame and don't change anything...
Here is a copy of the original documentation and examples.
At least the major example loads. The extra ones (which I seem to recall shows spellchecking HTML) require the scrollbar object, so I...
Using the Spell Check object, or without? If the former, I definitely did make some examples at some point.
You definitely can do it in general. Still, hardly seems worth the effort just to stop somebody moving a window. Why would you want this anyway, RGBeality?
Could you maybe swallow its messages to do this?
Hi,
The sorting in Ini++ v1.5 fixed this problem, with a new intelligent sorting which automatically realizes that 'X 11' comes after 'X 2', and it does work pretty well.
Ini++ v1.5 was...
But don't use Ini++ v1.5, use v1.0!
I was supposed to release the new version this weekend, but a combination of things (including sunny weather!) stopped me.
Hey,
Ini++ v1.5 has some problems, sorry about that. I've fixed them but the new version hasn't been released yet.
I'll get to contact with you personally to ensure it will work for you though....
Tried the 'Only once whilst event' loops thing?
I just re-uploaded under a different name. Here you go:
View MFA
MFA Repository link: View MFA
(I love that resource so much!)
Right, I've just checked things out and if this is a bug, it isn't a bug in Ini++.
So you can get rid of the bug by either:
A] Getting rid of the "Alt Value = 2" condition
or
B] In the Event...
Interesting. I'll make sure that is fixed for the next release.
.NET has all this stuff built in, you can use it on XP or higher.
I wrote something using it (not in MMF), but got annoyed because it doesn't understand me properly. =P
That is indeed what it does: It attaches a number to the name if the group already exists. This is sometimes useful, but obviously not for you!
Also, make sure you don't use Ini++ v1.5 until it is...
The installer, which I didn't make, was set up wrong and so it was incorrectly named.
Hopefully this Ini++ v1.5 will get sorted out properly soon! Hopefully this week.
Indeed, YASO is not dev only. The confusion comes from the fact it says that it is ;) I think it was a late decision to make it for everybody, and so there was no chance to change that. Sorry =)
...
Actually I was thinking of doing this not long ago. The usual ListView windows objects allows you to do things like this - that is probably not a custom control.
However, I don't have time now.
I like the question style to it, I think that'll work well.
Be interested to hear reviews from those who have read it!
You could also have the file encrypted and then decrypt it to the temp directory when you want to run it.
Then there would have to be a header indicating it is uncompressed, and so it would still end up bigger (by at least one bit).
It's impossible to have a compression algorithm that makes everything...
How can a bug like that can go undiscovered for so long? ;) I'd actually used your Pipe object for similar things instead, which I found very useful. It is great to be able to write something in one...
If you do it like that, you will not get a uniform distrubution. For instance, assuming independence and uniform distrubution from rnd (which isn't true, but nevermind) there is only a 1/64 chance of...
Or use the "Newline" expression (under "System -> Strings" I think)
If you use 'Compare to General Values', then you can compare 'clickteam' to:
Lower$(alterable string A)
That is, you set it to lower case first.
"but does anyone know if the ini++ extension has any known bugs about multiple lines of text only saving the first line"
Well if there are more than one line it won't work in the usual Ini mode,...
You could try using Ini++ with 'auto save' disabled. This should be much faster.
The function was supposed to automatically return a float if relevant and otherwise return an integer. However, I changed the 'convert to float' internal function to just return its integer value and...
Tis nice.
The new page that is coming over should have some shading on it to show that it is curved, but as you point out there is no way that the Overlay object would be able to do that quickly.
I think getting that working nicely would be an hour wisely spent, if that is how long it would take. Why not have a go?
I'm working on it now. You can look at the section of my blog.
Nivram: That is best. I have sent a fixed version to CT but it hasn't been released yet.
Niffas: I could make a new 'load' action which lets you choose its behaviour in a dialog? If so, what...
Niffas, the problem is "Load file" should change the current file to whatever is chosen, shouldn't it? Hence all writing afterwards writes to that file, even if it doesn't exist.
Here is what the...
Hey, this was actually by design, but perhaps you are right that it is not the best design.
I'll have a think about what to do.
"Please note that Ribbons make your application require 2x more mouse clicks, significantly increase the time required to learn your application, and needlessly reduces screen estate."
...