Spacemouse Enterprise: Toggle mode, key profile

If you have questions or comments concerning any non-support related 3Dconnexion topic, please use this forum.

Moderator: Moderators

HJRS
Posts: 4
Joined: Mon Aug 22, 2016 11:39 pm

Spacemouse Enterprise: Toggle mode, key profile

Post by HJRS » Mon Aug 22, 2016 11:52 pm

Hi guys,
Would love to have a button toggle mode. For example if I set the CTRL button to the standard CTRL keyboard button but in toggle mode, the first press would be as if i have the CTRL key held down, if I pressed the button again it would release the CTRL key. I'll primarily use SpaceMouse for 3d sculpting and buttons like CTRL and shift are often used as brush modifiers and so need to be held down while in use. This is hard to do while using the puck simultaneously.

Also would be awesome to be able to store multiple 'profiles' for individual programs for the 12 function keys (or all keys?). Ideally what I'd like to be able to do is use say the custom view buttons to switch between these profiles which would effectively let me have 36 function keys for a single application. Hope this makes sense!

Cheers,
Harley.

jwick
Moderator
Moderator
Posts: 2531
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by jwick » Wed Aug 24, 2016 1:31 am

That's the first request I've heard for sticky keys. Your scenario sounds reasonable.

There is no simple support for it, currently. I suppose you could create a macro that only presses the key. And another that releases it. You need to use two different buttons. An issue comes when you switch apps. Having a key modifier stuck down is generally very bad in other apps. I believe the driver will release those modifier keys for you when it sees you switch apps.

The second can be done but there is no GUI support for it. You would have to modify the cfg files yourself. That's a bit of work.

Massamino
Posts: 3
Joined: Sat Sep 17, 2016 1:29 pm

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Massamino » Sat Sep 17, 2016 1:59 pm

I like the second idea. When using a 3D program (like cinema 4d), you can switch to point editing mode or whatever and each mode has it's own useful shortcuts.

Would love to see this in GUI, but if not possible, can you provide an example config file (or partially)?

jwick
Moderator
Moderator
Posts: 2531
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by jwick » Tue Sep 20, 2016 5:29 am

The key is the CurrentButtonBank element in a Device. This indicates which ButtonBank is being used at any time.

You can create as many ButtonBanks as you want in the Device, then modify the CurrentButtonBank entry to point from one to the other.

You can then assign a script to a device button to modify the CurrentButtonBank value. Press that button and the script changes CurrentButtonBank to whichever one you want. Or it switches forward to the next ButtonBank or backward to the previous ButtonBank. Anything is possible. it takes some scripting skills. PowerShell and VB have good XML scripting support.

Magic Man
Posts: 196
Joined: Tue Apr 08, 2008 4:51 am
Location: South Wales

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Magic Man » Wed Mar 22, 2017 6:42 am

The multibank button support sounds great, would be good if that could be enabled within the software itself. Use two to switch back and fore between buttons or even nested button options beneath each I suppose.

Phil999
Posts: 383
Joined: Tue Jun 30, 2009 5:20 am

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Phil999 » Wed Mar 22, 2017 8:57 am

jwick wrote:The key is the CurrentButtonBank element in a Device. This indicates which ButtonBank is being used at any time.

You can create as many ButtonBanks as you want in the Device, then modify the CurrentButtonBank entry to point from one to the other.

You can then assign a script to a device button to modify the CurrentButtonBank value. Press that button and the script changes CurrentButtonBank to whichever one you want. Or it switches forward to the next ButtonBank or backward to the previous ButtonBank.
didn't know that. Great stuff, thanks.
Space Navigator x2, Space Pilot, Space Pilot Pro, SpaceMouse Enterprise

Phil999
Posts: 383
Joined: Tue Jun 30, 2009 5:20 am

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Phil999 » Wed Mar 22, 2017 9:03 am

jwick wrote:Having a key modifier stuck down is generally very bad in other apps.
it is. And it does happen, very rarely, that modifier keys get stuck, where the modifier key release command is somehow lost, probably while switching between applications. Such a situation can be very bad.
Space Navigator x2, Space Pilot, Space Pilot Pro, SpaceMouse Enterprise

jwick
Moderator
Moderator
Posts: 2531
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by jwick » Thu Mar 23, 2017 9:27 am

You can create hierarchies of ButtonBanks. You can switch to them by name, or cycle forward and backward through them. You can Push/Pop them. Like what we did with the SP but more capable.

If you want I can point you to the relevant ButtonActions.

Phil999
Posts: 383
Joined: Tue Jun 30, 2009 5:20 am

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Phil999 » Thu Mar 23, 2017 11:03 pm

it is not an issue really, but I'm interested in switching button banks and hierarchies. This is rather a new thing to me. As you probably know, I'm not familiar with coding, therefore I'm a bit slow.

What I've gathered is that when entering key/macro commands, there is always a key press and key release command. Which is familiar to me when dealing with MIDI. There is also a note on command and a note off command. With the same issues. If the note off command gets lost, you have a hanging note. Hence the famous MIDI panic button, common on soft- and hardware controllers.

I would like to know what you meant regarding the SpacePilot (SP), I cannot follow your hint. Sorry.

It is not so important. If you point me to the relevant ButtonActions I will understand after some time.
Space Navigator x2, Space Pilot, Space Pilot Pro, SpaceMouse Enterprise

Magic Man
Posts: 196
Joined: Tue Apr 08, 2008 4:51 am
Location: South Wales

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Magic Man » Fri Mar 24, 2017 2:42 am

jwick wrote:If you want I can point you to the relevant ButtonActions.
Would be helpful, thanks. :D

jwick
Moderator
Moderator
Posts: 2531
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by jwick » Sun Mar 26, 2017 6:34 am

There are several ButtonBank related ButtonActions. I have not put them into Base. You can add them there, or add them in the individual cfg file as I've done here.

While you can use this with any device, it is really for the SME. It has all those buttons and LCD icons. It would be hard to keep track of what is going on with the other devices.

This is all "unsupported". Don't expect tech support to help you. If something doesn't work let me know. AFAIK, everything works. You need a relatively recent 3DxWinCore release for this. I forget if I included the pngs for the ButtonActions in the release. Let me know if you need them. They are terrible looking (I made them myself).

I'm interested in your feedback for future development. To release this we would need to make changes to the GUI. Can't ask regular users to edit xml files. But you guys are special :)

The ButtonActions are a little different from the others. The other simpler ButtonActions just need the ID to tell the driver what to do. I found that too limiting for these BAs. The ID (Name) can be anything you want (I wanted many). The details about what it does is determined deeper in the ButtonAction. The Action element is the important one:

Code: Select all

   <Action>GoTo</Action>     
   ; go to a specific ButtonBank by name.  Navigating back is on you.

   <Action>Push</Action>
   ; Push the current ButtonBank on a stack and use the named ButtonBank

   <Action>Pop</Action>
   ; The reversal of Push: toss the current ButtonBank and use the last one pushed on to the stack

   <Action>PushPop</Action>
   ; Push the current ButtonBank on the stack, use the named one, BUT when you release the button, toss that one and go back to the original one.  This is my favorite.  It allows you to temporarily go to a ButtonBank while holding down a button, actuate some action (named in that ButtonBank), then restore back to the original BB when you release the button.  It is like an infinitely programmable Shift key.  In fact, you might want to assign it to your device's shift key.

   <Action>Prev</Action>
   ; Go to the previous ButtonBank in the list in the cfg (Edit: 3-Apr-2017)

   <Action>Next</Action>
   ; Go to the next ButtonBank in the list in the cfg file.  Wraps around at the end of the list.   (Edit: 3-Apr-2017)
I wrote a tool for creating, managing ButtonBanks. I can clean that up and distribute it if needed. In the meantime, notepad++ is your friend.

Below are two cfg files that show how to use this. A default jet.xml (goes in PF) and a default global.xml.

I like to assign some thing globally so they are always available on a button. In particular, if you GoTo a ButtonBank it is sometimes very helpful to have a way of getting back available. And since the SME lacks +/- scaling buttons, I usually add them globally.

This is a jet.xml. Replace the one in PF with this one to test it.

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
(c) Copyright 3Dconnexion. All rights reserved. 
$Revision: 12697 $
-->
<AppCfg Default="true" xmlns="" CfgFormatVersion="1.2" ThisFileVersion="1.1">
  <AppInfo>
    <Signature>
      <Name>STR_JET</Name>
      <ExecutableName>JET.EXE</ExecutableName>
      <VersionRange>
        <Min>1.0.0.0</Min>
        <Max>1.0.0.0</Max>
      </VersionRange>
      <Transport>S80</Transport>
    </Signature>
    <Options>
      <IgnoreMouseWheelInertia>true</IgnoreMouseWheelInertia>
    </Options>
  </AppInfo>
  <Settings>
    <ScaleX>2.0</ScaleX>
    <ScaleY>2.0</ScaleY>
    <ScaleZ>2.0</ScaleZ>
    <ScaleRx>0.37</ScaleRx>
    <ScaleRy>0.37</ScaleRy>
    <ScaleRz>0.37</ScaleRz>
  </Settings>
  <ButtonActions xmlns:driver_images="./images/3DxService/" xmlns:def_images="./images/STR_JET/">
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_Push_GlobalSettings</ID>
      <Name>Global Settings</Name>
      <Action>Push</Action>
      <ButtonBankID>GlobalSettings</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankPush.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_GoTo_Default</ID>
      <Name>Default BB</Name>
      <Action>GoTo</Action>
      <ButtonBankID>Default</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankGoTo.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_GoTo_ViewCommands</ID>
      <Name>ViewCommands BB</Name>
      <Action>GoTo</Action>
      <ButtonBankID>ViewCommands</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankGoTo.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_GoTo_OtherCommands</ID>
      <Name>OtherCommands BB</Name>
      <Action>GoTo</Action>
      <ButtonBankID>OtherCommands</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankGoTo.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_GoTo_BankB</ID>
      <Name>Bank B</Name>
      <Action>GoTo</Action>
      <ButtonBankID>BankB</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankGoTo.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_GoTo_BankC</ID>
      <Name>Bank C</Name>
      <Action>GoTo</Action>
      <ButtonBankID>BankC</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankGoTo.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_Prev</ID>
      <Name>Previous BB</Name>
      <Action>Prev</Action>
      <ButtonBankID>
      </ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankPrev.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_Next</ID>
      <Name>Next BB</Name>
      <Action>Next</Action>
      <ButtonBankID>
      </ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankNext.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_Push</ID>
      <Name>Push All ButtonBanks</Name>
      <Action>Push</Action>
      <ButtonBankID>BankAllBanks</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankPush.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_Pop</ID>
      <Name>Pop BB</Name>
      <Action>Pop</Action>
      <ButtonBankID>
      </ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankPop.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="ButtonBank">
      <ID>ButtonBank_PushPop</ID>
      <Name>PushPop BB</Name>
      <Action>PushPop</Action>
      <ButtonBankID>BankAllBanks</ButtonBankID>
      <Image>
        <Source>[driver_images:ButtonBankPushPop.png]</Source>
      </Image>
    </ButtonAction>
    <!-- App Handled Actions -->
    <ButtonAction Type="App">
      <ID>App_Function1</ID>
      <Name>---</Name>
    </ButtonAction>
    <ButtonAction Type="App">
      <ID>App_Function4</ID>
      <Name>STR_KEEPINVIEW</Name>
      <Image>
        <Source>[def_images:KeepInView.png]</Source>
      </Image>
    </ButtonAction>
    <ButtonAction Type="App">
      <ID>App_Function7</ID>
      <Name>STR_SNAPTOGRIDONOFF</Name>
      <Image>
        <Source>[def_images:SnapToGridOnOff.png]</Source>
      </Image>
    </ButtonAction>
  </ButtonActions>
  <Devices>
    <Device>
      <Name>Standard 3D Mouse</Name>
      <VendorID>0</VendorID>
      <ProductID>0</ProductID>
      <AxisFilter>None</AxisFilter>
      <CurrentButtonBank>Default</CurrentButtonBank>
      <ButtonBank Default="true">
        <Name>STR_DEFAULT_BUTTONBANK</Name>
        <ID>Default</ID>
        <Button>
          <Input>
            <ActionID>V3DK_1</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_Push_GlobalSettings</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_2</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function4</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_3</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function7</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_4</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_GoTo_ViewCommands</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_5</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_GoTo_OtherCommands</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_7</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_Prev</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_8</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_Next</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_9</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_Push</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_10</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_Pop</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_ALT</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_PushPop</ActionID>
          </Output>
        </Button>
      </ButtonBank>
      <ButtonBank>
        <Name>View Commands</Name>
        <ID>ViewCommands</ID>
        <Button>
          <Input>
            <ActionID>V3DK_1</ActionID>
          </Input>
          <Output>
            <ActionID>V3DCMD_VIEW_FRONT</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_2</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_3</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_4</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_5</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
      </ButtonBank>
      <ButtonBank>
        <Name>Other Commands</Name>
        <ID>OtherCommands</ID>
        <Button>
          <Input>
            <ActionID>V3DK_1</ActionID>
          </Input>
          <Output>
            <ActionID>V3DCMD_VIEW_BACK</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_2</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_3</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_4</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_5</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
      </ButtonBank>
      <ButtonBank>
        <Name>BankAllBanks</Name>
        <ID>BankAllBanks</ID>
        <Button>
          <Input>
            <ActionID>V3DK_1</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_GoTo_ViewCommands</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_2</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_GoTo_OtherCommands</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_3</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_GoTo_BankB</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_4</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_GoTo_BankC</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_5</ActionID>
          </Input>
          <Output>
            <ActionID>ButtonBank_GoTo_Default</ActionID>
          </Output>
        </Button>
      </ButtonBank>
      <ButtonBank>
        <Name>BankB</Name>
        <ID>BankB</ID>
        <Button>
          <Input>
            <ActionID>V3DK_1</ActionID>
          </Input>
          <Output>
            <ActionID>V3DCMD_VIEW_RIGHT</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_2</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_3</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_4</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_5</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
      </ButtonBank>
      <ButtonBank>
        <Name>BankC</Name>
        <ID>BankC</ID>
        <Button>
          <Input>
            <ActionID>V3DK_1</ActionID>
          </Input>
          <Output>
            <ActionID>V3DCMD_VIEW_LEFT</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_2</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_3</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_4</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
        <Button>
          <Input>
            <ActionID>V3DK_5</ActionID>
          </Input>
          <Output>
            <ActionID>App_Function1</ActionID>
          </Output>
        </Button>
      </ButtonBank>
    </Device>
  </Devices>
  <UI>
    <ButtonFlyouts>
      <Category>
        <ID>UI_Views</ID>
        <Name>STR_UI_VIEWS</Name>
        <ButtonAction>
          <ID>App_ResetYourView</ID>
        </ButtonAction>
      </Category>
      <Category Operation="Delete">
        <ID>UI_Macros</ID>
        <Name>STR_UI_MACROS</Name>
      </Category>
      <Category Operation="Delete">
        <ID>UI_RadialMenus</ID>
        <Name>STR_UI_RADIALMENUS</Name>
      </Category>
    </ButtonFlyouts>
  </UI>
</AppCfg>


Sample Global.xml (goes into PF).

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
(c) Copyright 3Dconnexion. All rights reserved. 
$Revision: 13434 $
-->
<Global
	Default="true"
	xmlns=""
	CfgFormatVersion="1.2"
	ThisFileVersion="1.3">
	<Settings>
		<!-- These settings affect all applications -->
		<OverallScale>1.0</OverallScale>
		<Deadband>0</Deadband>
		<ResponseCurve>1.7</ResponseCurve>
		<SystrayIcon>true</SystrayIcon>
		<LogLevel>0</LogLevel>
		<MyLogLevel>FFFFFeFF</MyLogLevel>
		<LEDsEnabled>true</LEDsEnabled>
		<OnScreenDisplayEnabled>true</OnScreenDisplayEnabled>
		<!--
		<Culture>en-US</Culture>
		-->
	</Settings>

	<ButtonActions>
		<ButtonAction Type="App">
			<ID>App_Function1</ID>
			<Name>---</Name>
		</ButtonAction>
		<ButtonAction Type="ButtonBank">
			<ID>Global_ButtonBank_Pop</ID>
			<Name>Pop BB</Name>
			<Action>Pop</Action>
			<ButtonBankID/>
			<Image>
				<Source>[driver_images:ButtonBankPop.png]</Source>
			</Image>
		</ButtonAction>
		<ButtonAction Type="Driver">
			<ID>Driver_DecreaseGlobalScale</ID>
			<Name>STR_DRIVER_DECREASEGLOBALSCALE</Name>
			<Image>
				<Source>[driver_images:Driver_DecreaseGlobalScale.png]</Source>
			</Image>
		</ButtonAction>
		<ButtonAction Type="Driver">
			<ID>Driver_IncreaseGlobalScale</ID>
			<Name>STR_DRIVER_INCREASEGLOBALSCALE</Name>
			<Image>
				<Source>[driver_images:Driver_IncreaseGlobalScale.png]</Source>
			</Image>
		</ButtonAction>
		<ButtonAction Type="Driver">
			<ID>Driver_ResetGlobalScale</ID>
			<Name>STR_DRIVER_RESETGLOBALSCALE</Name>
			<Image>
				<Source>[driver_images:Driver_ResetGlobalScale.png]</Source>
			</Image>
		</ButtonAction>
		<ButtonAction Type="ButtonBank">
		  <ID>ButtonBank_Prev</ID>
		  <Name>Previous BB</Name>
		  <Action>Prev</Action>
		  <ButtonBankID></ButtonBankID>
		  <Image>
			<Source>[driver_images:ButtonBankPrev.png]</Source>
		  </Image>
		</ButtonAction>
		<ButtonAction Type="ButtonBank">
		  <ID>ButtonBank_Next</ID>
		  <Name>Next BB</Name>
		  <Action>Next</Action>
		  <ButtonBankID></ButtonBankID>
		  <Image>
			<Source>[driver_images:ButtonBankNext.png]</Source>
		  </Image>
		</ButtonAction>
	</ButtonActions>
	<Devices>
		<Device>
			<Name>SpaceMouse Enterprise</Name>
			<VendorID>256f</VendorID>
			<ProductID>c633</ProductID>
			<InheritsFrom>Standard 3D Mouse</InheritsFrom>
			<Settings>
				<LCDIntensity>100</LCDIntensity>
				<ButtonStyle>IconsAndText</ButtonStyle>
				<TextSize>Small</TextSize>
			</Settings>
		</Device>
		<Device>
			<Name>Standard 3D Mouse</Name>
			<VendorID>0</VendorID>
			<ProductID>0</ProductID>
			<InheritsFrom>Standard 3D Mouse</InheritsFrom>
			<ButtonBank>
				<Name>GlobalSettings</Name>
				<ID>GlobalSettings</ID>
				<Button>
					<Input>
						<ActionID>V3DK_1</ActionID>
					</Input>
					<Output>
						<ActionID>Global_ButtonBank_Pop</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_2</ActionID>
					</Input>
					<Output>
						<ActionID>Driver_DecreaseGlobalScale</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_3</ActionID>
					</Input>
					<Output>
						<ActionID>Driver_IncreaseGlobalScale</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_4</ActionID>
					</Input>
					<Output>
						<ActionID>Driver_ResetGlobalScale</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_5</ActionID>
					</Input>
					<Output>
						<ActionID>App_Function1</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_6</ActionID>
					</Input>
					<Output>
						<ActionID>App_Function1</ActionID>
					</Output>
				</Button>
				<Button>
				  <Input>
					<ActionID>V3DK_7</ActionID>
				  </Input>
				  <Output>
					<ActionID>ButtonBank_Prev</ActionID>
				  </Output>
				</Button>
				<Button>
				  <Input>
					<ActionID>V3DK_8</ActionID>
				  </Input>
				  <Output>
					<ActionID>ButtonBank_Next</ActionID>
				  </Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_9</ActionID>
					</Input>
					<Output>
						<ActionID>App_Function1</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_10</ActionID>
					</Input>
					<Output>
						<ActionID>App_Function1</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_11</ActionID>
					</Input>
					<Output>
						<ActionID>App_Function1</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V3DK_12</ActionID>
					</Input>
					<Output>
						<ActionID>App_Function1</ActionID>
					</Output>
				</Button>
			</ButtonBank>
		</Device>
		<Device>
			<Name>Standard 2D Mouse</Name>
			<VendorID>0</VendorID>
			<ProductID>0</ProductID>
			<InheritsFrom>Standard 2D Mouse</InheritsFrom>
			<AxisFilter>None</AxisFilter>
			<Settings>
				<OverallScale>1.0</OverallScale>
				<MouseWheelInertia>true</MouseWheelInertia>
				<UpdateRate>250</UpdateRate>
				<!-- <LiftThreshold>16</LiftThreshold> -->
				<LiftDetection>true</LiftDetection>
			</Settings>
			<ButtonBank Default="false">
				<Name>STR_ALLAPPLICATIONS_BUTTONBANK</Name>
				<ID>AllApplications</ID>
				<Button>
					<Input>
						<ActionID>V2DK_WHEEL</ActionID>
					</Input>
					<Output>
						<ActionID>Driver_ShowDriverGUI</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V2DK_FORWARD</ActionID>
					</Input>
					<Output>
						<ActionID>KB_PageUp</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V2DK_BACKWARD</ActionID>
					</Input>
					<Output>
						<ActionID>KB_PageDown</ActionID>
					</Output>
				</Button>
				<Button>
					<Input>
						<ActionID>V2DK_RADIALMENU</ActionID>
					</Input>
					<Output>
						<ActionID>Base_RadialMenu_MenuRM1</ActionID>
					</Output>
				</Button>
			</ButtonBank>
		</Device>
	</Devices>

	<UI>
		<ButtonFlyouts>
			<Category Sort="false">
				<ID>UI_3Dx</ID><Name>STR_UI_3DX</Name>				
				<ButtonAction><ID>Driver_ShowDriverGUI</ID></ButtonAction>
				<ButtonAction><ID>Driver_Toggle_3DxNumPad</ID></ButtonAction>
				<ButtonAction><ID>Driver_Toggle_3DxLCD</ID></ButtonAction>
				<ButtonAction><ID>Driver_DecreaseAppScale</ID></ButtonAction>
				<ButtonAction><ID>Driver_IncreaseAppScale</ID></ButtonAction>
				<ButtonAction><ID>Driver_ToggleTranslations</ID></ButtonAction>
				<ButtonAction><ID>Driver_ToggleRotations</ID></ButtonAction>
				<ButtonAction><ID>Driver_ToggleDominantFilter</ID></ButtonAction>
			</Category>

			<Category Sort="false">
				<ID>UI_Keyboard</ID><Name>STR_UI_KEYBOARD</Name>
				<ButtonAction><ID>KB_Esc</ID></ButtonAction>
				<ButtonAction><ID>KB_Alt</ID></ButtonAction>
				<ButtonAction><ID>KB_Shift</ID></ButtonAction>
				<ButtonAction><ID>KB_Ctrl</ID></ButtonAction>
				<ButtonAction><ID>KB_Delete</ID></ButtonAction>
				<ButtonAction><ID>KB_Tab</ID></ButtonAction>
				<ButtonAction><ID>KB_Space</ID></ButtonAction>
				<ButtonAction><ID>KB_Enter</ID></ButtonAction>
			</Category>

			<Category Sort="false">
				<ID>UI_Macros</ID><Name>STR_UI_MACROS</Name>
				<ButtonAction><ID>Macro_Cut</ID></ButtonAction>
				<ButtonAction><ID>Macro_Copy</ID></ButtonAction>
				<ButtonAction><ID>Macro_Paste</ID></ButtonAction>
				<ButtonAction><ID>Macro_Undo</ID></ButtonAction>
				<ButtonAction><ID>Macro_Redo</ID></ButtonAction>
				<ButtonAction><ID>Macro_SelectAll</ID></ButtonAction>
			</Category>

			<Category Sort="false">
				<ID>UI_Mouse</ID><Name>STR_UI_MOUSE</Name>
				<ButtonAction><ID>HIDMouse_Left</ID></ButtonAction>
				<ButtonAction><ID>HIDMouse_Middle</ID></ButtonAction>
				<ButtonAction><ID>HIDMouse_Right</ID></ButtonAction>
				<ButtonAction><ID>HIDMouse_Forward</ID></ButtonAction>
				<ButtonAction><ID>HIDMouse_Backward</ID></ButtonAction>
				<ButtonAction><ID>Macro_DoubleClickLeft</ID></ButtonAction>
				<ButtonAction><ID>Macro_DoubleClickMiddle</ID></ButtonAction>
			</Category>

			<Category>
				<ID>UI_RadialMenus</ID><Name>STR_UI_RADIALMENUS</Name>
				<ButtonAction><ID>Base_RadialMenu_MenuRM1</ID></ButtonAction>
				<ButtonAction><ID>Base_RadialMenu_MenuRM2</ID></ButtonAction>
				<ButtonAction><ID>Base_RadialMenu_MenuRM3</ID></ButtonAction>
			</Category>

		</ButtonFlyouts>
	</UI>
</Global>

Phil999
Posts: 383
Joined: Tue Jun 30, 2009 5:20 am

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Phil999 » Sun Mar 26, 2017 7:38 am

great stuff. Will try this out. Also, notepad++ is a good idea.

The following two actions are probably the other way round. Or are they correct?

Code: Select all

   <Action>Prev</Action>
   ; Go to the next ButtonBank in the list in the cfg

   <Action>Next</Action>
   ; Go to the previous ButtonBank in the list in the cfg file.  Wraps around at the end of the list.
Space Navigator x2, Space Pilot, Space Pilot Pro, SpaceMouse Enterprise

jwick
Moderator
Moderator
Posts: 2531
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by jwick » Sun Mar 26, 2017 10:18 am

Yes, certainly those comments are completely wrong.
I was pre-coffee.
I could say I was testing the readers.

Edit: I fixed those incorrect comments 3-Apr-2017

Magic Man
Posts: 196
Joined: Tue Apr 08, 2008 4:51 am
Location: South Wales

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Magic Man » Mon Mar 27, 2017 2:11 am

Excellent stuff, will give these a go when I can. Wish I could try these out without an installed device since our network drives are down here at work and I'm looking to do something... :D

Magic Man
Posts: 196
Joined: Tue Apr 08, 2008 4:51 am
Location: South Wales

Re: Spacemouse Enterprise: Toggle mode, key profile

Post by Magic Man » Wed Mar 29, 2017 3:09 pm

Gave the buttonbank example a go - works well. Used a custom config and copied the image folder to my appsdata/roaming directory - yes, those buttonbank icons are bad... :D

Works good as a test, can see possibilities. Like how the title bar also changes to show the button bank name.

Also tried moving some key macros to the global config, works well for common macros across multiple configurations.

Also tried setting a custom lcd brightness setting but that doesn't seem to be supported across config files.

Post Reply