Home › Forum › Omnis General Forum › Positioning Studio/IDE windows by code
-
Positioning Studio/IDE windows by code
Posted by Uwe Smidt on January 1, 2024 at 3:14 pmDear $all,
Happy New Year to you!
One wish of mine for the new year ist to be able to better control the windows of my Omnis Studio environment. Since I’m working with a MacBook / Macbook+external monitor interchangingly, the ‘save Window setup’ does not really help when I’m switching to the other environment – I have to reposition all windows by hand, i.e. mouse.
While I’m still waiting to be heard (https://www.omnis.net/community/forums/forum/discussion/saving-named-workspaces/), is there a way to position e.g. the property window programmatically?
But I can’t find any reference to property window, Browser, Inheritance, catalogue etc.
Maybe you have an idea!
Thank you!
Uwe
Andreas Pfeiffer replied 6 months, 3 weeks ago 2 Members · 7 Replies -
7 Replies
-
Hi Uwe,
How about making a copy of your Omnis installation? You could then simply have one version with and another without the external monitor.
Best,
Andreas
- This reply was modified 6 months, 3 weeks ago by Andreas Pfeiffer.
-
Dear Andreas,
Happy New Year to you!
Yes, this might be a workable workaround.
But then I’d have to manage double pref files as config.json, omnis.cfg, sql.df1, query.df1.
<font face=”inherit”>Do you know in which file the last environment is stored in? So I might just exchange that file via script, instead of doubling </font>the<font face=”inherit”> whole Studio installation.</font>
Thank you!
Regards
Uwe
-
Hi Uwe,
Happy New Year to you as well!
Yes – you can just hold a copy of the omnis.cfg file that contains the positioning of the IDE windows as well as the serialisation.
If you create an update.sh file you could have some code that copies the required file when Omnis launches. See also: https://www.omnis.net/developers/resources/onlinedocs/Programming/01omnistools.html#auto-updates
Best,
Andreas
-
-
Uwe,
For the Omnis Studio IDE Browser I found a solution that you might want to use:
Create an instance variable i.e. “iBrowserRef” in the Startup_Task of your library. Then make a method that allows to set the $top, $left, $width and $height property. If you make it a public method you could reach this method from anywhere else in the task context. For example you could create a window class that allows to call this method, i.e. Do $ctask.$setBrowserProps(10,10,600,400)
Now in the first line of the $construct of your remote task type the following to set the reference:
Set reference iBrowserRef to $topwind
The reference should now hold the reference to the browser. However there are a few caveats. If you close and re-open the browser, the reference will be invalid. If you open multiple instances of your browser the reference will only go to the one browser instance that was open, when the library has been opened.
Also this is not a solution for the Property Manager, as this one is a C++ window and not an Omnis window.
Best,
Andreas
- This reply was modified 6 months, 3 weeks ago by Andreas Pfeiffer.
-
Dear Andreas,
Thanks for your response!
Ironically, the Browser window is alway in the right place, but the Property and the Catalog window are the ones most needed and always in the wrong place 😉
But at least I now understand why I don’t ‘see’ them in Omnis Notation Inspector…
Regards
Uwe
-
Dear $all,
when trying to implement an automation of ‘switching between Omnis.cfg files per environment’, I came across an old Zombie🧟♂️: AppleScript! And Omnis does still support it, e.g. moving windows around. Below are some lines of code that do the job. Now I only needed the script to be executed with a keyboard shortcut – for which I found no working built-in solution.
So I came across a utility called ‘Keyboard Maestro’ which did the rest: triggering the macro with a keyboard shortcut, and then calling the script ‘mobile’ if only one screen is present, or calling ‘Desktop’ if an external screen is present, too. Eh voila – I’ve got all my windows sorted nicely 😊!
set vtop to 25
set vleft to 0
set vright to 3008
set vbottom to 1692
set vBottomRowTop to 1390
set vOffset to 30
set vStackForms to 0
set vStackMethods to 0
tell application "Omnis Studio 11 35659"
set WinList to name of windows
--display dialog WinList
repeat with currentWindow in WinList
set currentBounds to bounds of window currentWindow
--display dialog currentWindow & ": " & currentBounds
if currentWindow contains "Studio Browser" then
set bounds of window currentWindow to {vleft, vtop, 1000, 800}
else if (currentWindow begins with "rf" and currentWindow contains "methods") or (currentWindow begins with "ta") or (currentWindow begins with "tv") then
-- Remote Form Methods, Table Class methods
set bounds of window currentWindow to {1360 + vStackMethods, vtop + vStackMethods, 2360 + vStackMethods, 800 + vStackMethods}
set vStackMethods to vStackMethods + vOffset
else if currentWindow begins with "rf" and currentWindow contains "Grid" then # Remote Form
set bounds of window currentWindow to {300 + vStackForms, vtop + vStackForms, 1200 + vStackForms, 450 + vStackForms}
set vStackForms to vStackForms + vOffset
else if currentWindow begins with "rf" then # Remote Form
set bounds of window currentWindow to {300 + vStackForms, vtop + vStackForms, 1200 + vStackForms, 700 + vStackForms}
set vStackForms to vStackForms + vOffset
else if currentWindow contains "Component Store" then
set bounds of window currentWindow to {vleft, 900, 199, vBottomRowTop - 1}
else if currentWindow begins with "Field List" then
set bounds of window currentWindow to {200, 900, 1100, vBottomRowTop - 1}
else if currentWindow contains "Property Manager" then
set bounds of window currentWindow to {2620, vtop, vright, 1014}
else if currentWindow begins with "Catalog" then
set bounds of window currentWindow to {2620, 1015, vright, vbottom}
else if currentWindow contains "ucConstants" then
set bounds of window currentWindow to {vleft, vBottomRowTop, 799, vbottom}
else if currentWindow contains "Notation Inspector" then
set bounds of window currentWindow to {800, vBottomRowTop, 1139, vbottom}
else if currentWindow contains "Inheritance Tree" then
set bounds of window currentWindow to {1140, vBottomRowTop, 1480, vbottom}
end if
end repeat
end tell
Log in to reply.