Full Version: ArcCAM
Show messages:
1-17
18-37
38-57
58-73
From: probotix
I would test by toggling these two lines on and off. If I remove true, it works. And BTW it just quietly dies without throwing an error.
code:
//alert( moi.command.getOption( 'ArcCAM.htm_test' ) );
//moi.command.setOption( 'ArcCAM.htm_test', '1234567', true );
And yes I did discover that it will throw an error is setOption is not called first.
>Len
From: Michael Gibson
Hi Len, both getOption and setOption need to have the "use ini" parameter added.
If you call moi.command.getOption( 'ArcCAM.htm_test' ) that will get it from the runtime storage.
You need to call moi.command.getOption( 'ArcCAM.htm_test',
true ) to get it from ini storage.
You don't want to have a mismatch with the get coming from runtime storage and the set going to ini storage.
It's good to have the get wrapped in a try / catch block to handle the exception that will be triggered if there isn't any value present.
var value = false;
try {
value = moi.command.getOption( 'ArcCAM.htm_test', true );
} catch(e) {}
It would probably have been better for this to return undefined if no value had ever been set rather than throwing an exception but it's difficult to change things that are in use.
- Michael
From: probotix
I was watching the ini file to see if it changed and it did not. Is the ini file only written on close?
>Len
From: probotix
Is there a way to run a command from a directory other than
moi://AppData/commands? I have tried a few different ways, but nothing seems to work.
code:
<moi:CommandButton icon="moi://appdata/icons/ArcCAMIcon.png" command="moi://appdata/ArcCAM/ArcCAM.js">
>Len
From: Michael Gibson
Hi Len,
re:
> I was watching the ini file to see if it changed and it did not. Is the ini file only written on close?
Yes, the moi.ini file is read from disk when the program starts, and written to disk when the program ends.
Any changes to it during run time happen to an in-memory version.
You can trigger it to be written by calling moi.settings.writeIniFile();
- Michael
From: Michael Gibson
Hi Len,
re:
> Is there a way to run a command from a directory other than
moi://AppData/commands? I
> have tried a few different ways, but nothing seems to work.
It will look first in the install commands directory, then in the appdata commands directory and then through any directories listed in moi.ini under
[Commands]
AdditionalCommandsDirs=
There can be multiple directories listed there separated by semi-colons.
- Michael
From: probotix
Michael,
Can I use
moi://appdata/ or %appdata% as part of the path to AdditionalCommandsDirs?
>Len
From: pressure (PEER)
Hi Len,
Re:
> Can I use
moi://appdata/ or %appdata% as part of the path to AdditionalCommandsDirs?
Have you looked at the example function called instantScript() in the API? I'm wondering if maybe running your code as a script rather than a command might give you more flexibility. Another thing to look at is shellExecute in the Filesystem section.
- Peer
From: probotix
I'll look into instantScript() closer. I have already tested shellExecute and may use that for some python or database connectivity. But it still doesn't solve the ease of installation issue.
Its easier to tell someone to put this exactly in your ini file:
"moi://appdata/ArcCam"
Than to tell them:
"C:\users\YOUR WINDOWS USERNAME HERE\AppData\Roaming\Moi"
A lot of them wouldn't even know what their Windows username is. Windows is frustrating compared to how easy I can do this stuff in Linux.
>Len
From: pressure (PEER)
Hi Len,
For seamless installation I guess you'd need a standalone installer script that asks MoI for the location of the appData directory, copies your files there, and maybe writes the path to moi.ini if the files are put in their own folder. I can't think of a way to add a command just by typing something in moi.ini
The closest thing I've done is a startup script that replaces a native file with my own by copying my html file from the startup scripts folder. That still requires manually navigating to the startup scripts folder to put the script and html there though.
code:
doReplacePromptSaveChanges();
function doReplacePromptSaveChanges() {
var existingName = moi.filesystem.getUiDir() + 'PromptSaveChanges.htm';
var backupName = existingName + '.bak';
var backupExists = moi.filesystem.fileExists( backupName );
if (backupExists === false) {
// backup PromptSaveChanges.htm
moi.filesystem.copyFile(existingName, backupName );
// overwrite PromptSaveChanges.htm
var replacerName = moi.filesystem.getAppDataDir() + 'startup/' + 'PromptSaveChanges.htm';
moi.filesystem.copyFile(replacerName, existingName );
}
}
- Peer
From: Michael Gibson
Hi Len,
re:
> Can I use
moi://appdata/ or %appdata% as part of the path to AdditionalCommandsDirs?
Unfortunately no, it can only take a regular file system path there, not a
moi:// URL or environment variable.
How about a new mechanism that would scan through any folders under say appdata/plugins and look for a commands folder inside of there.
So then the install would be to put your stuff inside appdata/plugins/ArcCAM and your commands would be under appdata/plugins/ArcCAM/commands and I could also look for startup scripts inside appdata/plugins/ArcCAM/startup ?
And you could put images inside appdata/plugins/ArcCAM/icons and those would work already using
moi://appdata/plugins/ArcCAM/icons/file.png .
- Michael
From: probotix
Michael,
I like it!
I've been messing around with NSIS today, and it is able to fiddle with moi.ini, but I don't feel comfortable with that. Having a plug-in container seems much safer.
>Len
From: Michael Gibson
Hi Len, ok I will set this up for the next v5 beta. So it will look for commands in directories inside appdata/plugins/<PluginName>/commands and will also look for startup scripts (scripts to run when MOI is launched) under appdata/plugins/<PluginName>/startup.
So you won't have to modify moi.ini for that and to install you can have it in a .zip and unzip it under appdata/plugins.
- Michael
From: pressure (PEER)
Hi Michael,
Will it also look for appdata/plugins/<PluginName>/
scripts ?
- Peer
From: Michael Gibson
Hi Peer,
re:
> Will it also look for appdata/plugins/<PluginName>/scripts ?
I should be able to make that work too.
- Michael
From: pressure (PEER)
Thanks Michael. I like this new plugin folder idea of yours.
- Peer
Show messages:
1-17
18-37
38-57
58-73