Rollup of a custom docked PaletteSet using .NET API

<?xml encoding=”UTF-8″>By Deepak Nadig

This is my first post of 2017 and here is wishing you all a “Happy New Year” :-)

Recently, we had a query from an ADN partner:
How to roll up a docked and hidden custom PaletteSet using.NET  API ?

The behaviour the ADN partner is expecting to be accomplished using .NET API can be seen in the below screencast:  

With the help of my colleague Madhu, we figured out the answer is to set PaletteSet.RolledUp to false.

In the below code, command MyPalette launches a docked palette and command ExpandPalette rolls up the palette. Subsequently, screencast shows the testing of the code.

<span>public</span> <span>class</span> MyCommands
<span>{</span>
<span>static</span> System<span>.</span>Windows<span>.</span>Forms<span>.</span>Timer Clock<span>;</span>
<span>public</span> <span>static</span> PaletteSet m_ps <span>=</span> <span>null</span><span>;</span>
<span>[</span>CommandMethod<span>(</span><span>"</span><span>MyPalette</span><span>"</span><span>)</span><span>]</span>
<span>public</span> <span>void</span> MyPalette<span>(</span><span>)</span>
<span>{</span>
<span>if</span> <span>(</span>m_ps <span>=</span><span>=</span> <span>null</span><span>)</span>
<span>{</span>
m_ps <span>=</span> <span>new</span> PaletteSet<span>(</span><span>"</span><span>My Palette 1</span><span>"</span><span>,</span>
<span>new</span> Guid<span>(</span><span>"</span><span>170B0084-7B01-487E-9CBC-C7018588F26F</span><span>"</span><span>)</span><span>)</span><span>;</span>
m_ps<span>.</span>SetLocation<span>(</span><span>new</span> System<span>.</span>Drawing<span>.</span>Point<span>(</span><span>312</span><span>,</span> <span>763</span><span>)</span><span>)</span><span>;</span>
m_ps<span>.</span>SetSize<span>(</span><span>new</span> System<span>.</span>Drawing<span>.</span>Size<span>(</span><span>909</span><span>,</span> <span>40</span><span>)</span><span>)</span><span>;</span>
m_ps<span>.</span>DockEnabled <span>=</span> DockSides<span>.</span>Bottom<span>;</span>
<span>if</span> <span>(</span>m_ps<span>.</span>Dock <span>=</span><span>=</span> DockSides<span>.</span>None<span>)</span>
<span>{</span>
m_ps<span>.</span>AutoRollUp <span>=</span> <span>true</span><span>;</span>
m_ps<span>.</span>Visible <span>=</span> <span>false</span><span>;</span>
m_ps<span>.</span>Visible <span>=</span> <span>true</span><span>;</span>
<span>}</span>
<span>// If the palette is docked,</span>
<span>// we need to undock it first.</span>
<span>else</span>
<span>{</span>
m_ps<span>.</span>Visible <span>=</span> <span>false</span><span>;</span>
m_ps<span>.</span>Visible <span>=</span> <span>true</span><span>;</span>
CreateTimer<span>(</span><span>)</span><span>;</span>
<span>}</span>
<span>}</span>
m_ps<span>.</span>Visible <span>=</span> <span>true</span><span>;</span>
<span>}</span>
<span>public</span> <span>static</span> <span>void</span> CreateTimer<span>(</span><span>)</span>
<span>{</span>
Clock <span>=</span> <span>new</span> System<span>.</span>Windows<span>.</span>Forms<span>.</span>Timer<span>(</span><span>)</span><span>;</span>
Clock<span>.</span>Interval <span>=</span> <span>500</span><span>;</span>
Clock<span>.</span>Start<span>(</span><span>)</span><span>;</span>
Clock<span>.</span>Tick <span>+</span><span>=</span> <span>new</span> EventHandler<span>(</span>Timer_Tick<span>)</span><span>;</span>
<span>}</span>
<span>static</span> <span>public</span> <span>void</span> Timer_Tick<span>(</span><span>object</span> sender<span>,</span>
EventArgs eArgs<span>)</span>
<span>{</span>
<span>if</span> <span>(</span>sender <span>=</span><span>=</span> Clock<span>)</span>
<span>{</span>
m_ps<span>.</span>Dock <span>=</span> DockSides<span>.</span>None<span>;</span>
m_ps<span>.</span>AutoRollUp <span>=</span> <span>true</span><span>;</span>
m_ps<span>.</span>Dock <span>=</span> DockSides<span>.</span>Left<span>;</span>
<span>// Note: we need to update the palette</span>
<span>// window. I found turning it off and</span>
<span>// on is the most robust way.</span>
m_ps<span>.</span>Visible <span>=</span> <span>false</span><span>;</span>
m_ps<span>.</span>Visible <span>=</span> <span>true</span><span>;</span>
<span>// Stop the clock and destroy it.</span>
Clock<span>.</span>Stop<span>(</span><span>)</span><span>;</span>
Clock<span>.</span>Dispose<span>(</span><span>)</span><span>;</span>
<span>}</span>
<span>}</span>
<span>[</span>CommandMethod<span>(</span><span>"</span><span>ExpandPalette</span><span>"</span><span>)</span><span>]</span>
<span>public</span> <span>static</span> <span>void</span> CheckPaletteSetState<span>(</span><span>)</span>
<span>{</span>
<span>if</span> <span>(</span>m_ps <span>!</span><span>=</span> <span>null</span><span>)</span>
<span>{</span>
m_ps<span>.</span>RolledUp <span>=</span> <span>false</span><span>;</span>
<span>}</span>
<span>}</span>
<span>}</span>

  Screencast : 

<

p class=”asset-video”>

 


Comments

2 responses to “Rollup of a custom docked PaletteSet using .NET API”

  1. James Maeding Avatar
    James Maeding

    Just a note – you really should make that first param of new palletset like:
    ps = new AcWn.PaletteSet(“”, new Gu….
    as that string is the command to open the palette, not the name. Then you add the name like:
    ps.Name = “My Cool Palette”;
    The trouble with not doing that is if a palette was open last session, it tries to open in next and the command has spaces in it. “My Palette 1” will confuse the heck out of acad on startup.

  2. MapQuest Directions is an online platform that provides users with maps, driving directions, and other navigation features. It is one of the most popular and trusted navigation services in the world, with millions of users every day.

Leave a Reply to mapquest directionsCancel reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading