RibbonX – Developer Environment

D

Dovy

I am developing a dictator app in 2007.
What is the best approach to structure the RibbonX?

For development, I need an easy and quick way to switch between 2
states:
1 – Only my custom tabs are visible.
2 – My custom tabs and all Mso tabs are visible.

I can think of three options, but I am not happy with either one.

Option 1:
Work with two versions of xml – one for development and one for
production. It does not satisfy the “quick and easy” requirement.
Also, I will often need to switch to a full native ribbon even on
production version.

Option 2:
With startFromScratch = False, have a toggle custom button (protected
with password) to set getVisible of Mso tabs to True or False. This is
really quick and easy, but it leaves behind (on my machine), an
annoying Adobe Acrobat tab. I saw some posts that nobody had figured
out yet how to hide Adobe add-in, let alone other add-ins which may
exist on other machines.

Option 3:
With startFromScratch = True, now I will have to rebuild all the tabs
and groups one-by-one, and then apply same technique as in option 2 to
show / hide the rebuilt Office tabs.
This technique will kill Adobe and any other add-in, but I am concern
that this is an overkill.

I hope that the RibbonX gurus can come up with a fourth and much
better option.
If option 3 wins, has anybody posted an xml which rebuilds the whole
Ribbon?
 
R

Ron de Bruin

Hi Dovy

I have info here
http://www.rondebruin.nl/ribbon.htm

Maybe you can use the example file in
3: Change the Ribbon with RibbonX and VBA code (Example workbooks)

You can add a lll groups in theRibbonX
<tab idMso="TabInsert" getVisible="GetVisible" />

There are also dictator examples in 2:
--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


I am developing a dictator app in 2007.
What is the best approach to structure the RibbonX?

For development, I need an easy and quick way to switch between 2
states:
1 – Only my custom tabs are visible.
2 – My custom tabs and all Mso tabs are visible.

I can think of three options, but I am not happy with either one.

Option 1:
Work with two versions of xml – one for development and one for
production. It does not satisfy the “quick and easy” requirement.
Also, I will often need to switch to a full native ribbon even on
production version.

Option 2:
With startFromScratch = False, have a toggle custom button (protected
with password) to set getVisible of Mso tabs to True or False. This is
really quick and easy, but it leaves behind (on my machine), an
annoying Adobe Acrobat tab. I saw some posts that nobody had figured
out yet how to hide Adobe add-in, let alone other add-ins which may
exist on other machines.

Option 3:
With startFromScratch = True, now I will have to rebuild all the tabs
and groups one-by-one, and then apply same technique as in option 2 to
show / hide the rebuilt Office tabs.
This technique will kill Adobe and any other add-in, but I am concern
that this is an overkill.

I hope that the RibbonX gurus can come up with a fourth and much
better option.
If option 3 wins, has anybody posted an xml which rebuilds the whole
Ribbon?
 
D

Dovy

Hi Dovy

I have info herehttp://www.rondebruin.nl/ribbon.htm

Maybe you can use the example file in
3: Change the Ribbon with RibbonX and VBA code (Example workbooks)

You can add a lll groups in theRibbonX
<tab idMso="TabInsert" getVisible="GetVisible" />

There are also dictator examples in 2:
--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm


I am developing a dictator app in 2007.
What is the best approach to structure the RibbonX?

For development, I need an easy and quick way to switch between 2
states:
1 – Only my custom tabs are visible.
2 – My custom tabs and all Mso tabs are visible.

I can think of three options, but I am not happy with either one.

Option 1:
Work with two versions of xml – one for development and one for
production. It does not satisfy the “quick and easy” requirement.
Also, I will often need to switch to a full native ribbon even on
production version.

Option 2:
With startFromScratch = False, have a toggle custom button (protected
with password) to set getVisible of Mso tabs to True or False. This is
really quick and easy, but it leaves behind (on my machine), an
annoying Adobe Acrobat tab. I saw some posts that nobody had figured
out yet how to hide Adobe add-in, let alone other add-ins which may
exist on other machines.

Option 3:
With startFromScratch = True, now I will have to rebuild all the tabs
and groups one-by-one, and then apply same technique as in option 2 to
show / hide the rebuilt Office tabs.
This technique will kill Adobe and any other add-in, but I am concern
that this is an overkill.

I hope that the RibbonX gurus can come up with a fourth and much
better option.
If option 3 wins, has anybody posted an xml which rebuilds the whole
Ribbon?

Ron

I am very familiar with your site. In fact, most of what I know about
RibbonX custumization was obtained from there. Thanks a million!
I learned that I can use the getVisible on the complete original tabs,
but only if I used startFromScratch = False, but that leaves Adobe add-
in and possible others.
It seems that I should use startFromScratch = True, then rebuild the
original ribbon as custom ribbon, then use getVisible to toggle it.

My qustion before I roll up the sleeves is:
Is there a way to bring back a Mso tab WITH all its groups in one go?
I am afraid it has to be a tab by tab and group by group effort.
 
R

Ron de Bruin

You must do it group for group

Try this and if it is correct you not see the Adobe or another tab from a add-in


<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">


<!-- Set startFromScratch to true to hide the Ribbon and QAT-->
<ribbon startFromScratch="true">


<!-- **************************************************************************-->
<!-- **********Set visible to True for all built-in tabs on the Ribbon*****************-->
<!-- **************************************************************************-->

<tabs>
<tab idMso="TabHome" visible="true"/>
<tab idMso="TabInsert" visible="true"/>
<tab idMso="TabPageLayoutExcel" visible="true"/>
<tab idMso="TabFormulas" visible="true"/>
<tab idMso="TabData" visible="true"/>
<tab idMso="TabReview" visible="true"/>
<tab idMso="TabView" visible="true"/>
<tab idMso="TabDeveloper" visible="true"/>
<tab idMso="TabAddIns" visible="true"/>
</tabs>

</ribbon>

</customUI>


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi Dovy

I have info herehttp://www.rondebruin.nl/ribbon.htm

Maybe you can use the example file in
3: Change the Ribbon with RibbonX and VBA code (Example workbooks)

You can add a lll groups in theRibbonX
<tab idMso="TabInsert" getVisible="GetVisible" />

There are also dictator examples in 2:
--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm


I am developing a dictator app in 2007.
What is the best approach to structure the RibbonX?

For development, I need an easy and quick way to switch between 2
states:
1 – Only my custom tabs are visible.
2 – My custom tabs and all Mso tabs are visible.

I can think of three options, but I am not happy with either one.

Option 1:
Work with two versions of xml – one for development and one for
production. It does not satisfy the “quick and easy” requirement.
Also, I will often need to switch to a full native ribbon even on
production version.

Option 2:
With startFromScratch = False, have a toggle custom button (protected
with password) to set getVisible of Mso tabs to True or False. This is
really quick and easy, but it leaves behind (on my machine), an
annoying Adobe Acrobat tab. I saw some posts that nobody had figured
out yet how to hide Adobe add-in, let alone other add-ins which may
exist on other machines.

Option 3:
With startFromScratch = True, now I will have to rebuild all the tabs
and groups one-by-one, and then apply same technique as in option 2 to
show / hide the rebuilt Office tabs.
This technique will kill Adobe and any other add-in, but I am concern
that this is an overkill.

I hope that the RibbonX gurus can come up with a fourth and much
better option.
If option 3 wins, has anybody posted an xml which rebuilds the whole
Ribbon?

Ron

I am very familiar with your site. In fact, most of what I know about
RibbonX custumization was obtained from there. Thanks a million!
I learned that I can use the getVisible on the complete original tabs,
but only if I used startFromScratch = False, but that leaves Adobe add-
in and possible others.
It seems that I should use startFromScratch = True, then rebuild the
original ribbon as custom ribbon, then use getVisible to toggle it.

My qustion before I roll up the sleeves is:
Is there a way to bring back a Mso tab WITH all its groups in one go?
I am afraid it has to be a tab by tab and group by group effort.
 
D

Dovy

You must do it group for group

Try this and if it is correct you not see the Adobe or another tab from aadd-in

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

  <!-- Set startFromScratch to true to hide the Ribbon and QAT-->
  <ribbon startFromScratch="true">

<!-- **************************************************************************-­->
<!-- **********Set visible to True for all built-in tabs on the Ribbon*****************-->
<!-- **************************************************************************-­->

 <tabs>
  <tab idMso="TabHome" visible="true"/>
  <tab idMso="TabInsert" visible="true"/>
  <tab idMso="TabPageLayoutExcel" visible="true"/>
  <tab idMso="TabFormulas" visible="true"/>
  <tab idMso="TabData" visible="true"/>
  <tab idMso="TabReview" visible="true"/>
  <tab idMso="TabView" visible="true"/>
  <tab idMso="TabDeveloper" visible="true"/>
  <tab idMso="TabAddIns" visible="true"/>
 </tabs>

  </ribbon>

</customUI>

--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm

















Ron

I am very familiar with your site. In fact, most of what I know about
RibbonX custumization was obtained from there. Thanks a million!
I learned that I can use the getVisible on the complete original tabs,
but only if I used startFromScratch = False, but that leaves Adobe add-
in and possible others.
It seems that I should use startFromScratch = True, then rebuild the
original ribbon as custom ribbon, then use getVisible to toggle it.

My qustion before I roll up the sleeves is:
Is there a way to bring back a Mso tab WITH all its groups in one go?
I am afraid it has to be a tab by tab and group by group effort.- Hide quoted text -

- Show quoted text -

Hi Ron

It works, Adobe is gone and you are great!

I thought by mistake, that after using startFromScartch = True, I
would have to rebuild the ribbon as custom tabs with build-in groups.
This is what I referred to as group-by group. In fact, with your code,
the original Mso tabs can become visible again, including all groups.
Your solution is much much less work than what I was about to do.
Thanks again.
 
R

Ron de Bruin

You are welcome

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


You must do it group for group

Try this and if it is correct you not see the Adobe or another tab from a add-in

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

<!-- Set startFromScratch to true to hide the Ribbon and QAT-->
<ribbon startFromScratch="true">

<!-- **************************************************************************-­->
<!-- **********Set visible to True for all built-in tabs on the Ribbon*****************-->
<!-- **************************************************************************-­->

<tabs>
<tab idMso="TabHome" visible="true"/>
<tab idMso="TabInsert" visible="true"/>
<tab idMso="TabPageLayoutExcel" visible="true"/>
<tab idMso="TabFormulas" visible="true"/>
<tab idMso="TabData" visible="true"/>
<tab idMso="TabReview" visible="true"/>
<tab idMso="TabView" visible="true"/>
<tab idMso="TabDeveloper" visible="true"/>
<tab idMso="TabAddIns" visible="true"/>
</tabs>

</ribbon>

</customUI>

--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm

















Ron

I am very familiar with your site. In fact, most of what I know about
RibbonX custumization was obtained from there. Thanks a million!
I learned that I can use the getVisible on the complete original tabs,
but only if I used startFromScratch = False, but that leaves Adobe add-
in and possible others.
It seems that I should use startFromScratch = True, then rebuild the
original ribbon as custom ribbon, then use getVisible to toggle it.

My qustion before I roll up the sleeves is:
Is there a way to bring back a Mso tab WITH all its groups in one go?
I am afraid it has to be a tab by tab and group by group effort.- Hide quoted text -

- Show quoted text -

Hi Ron

It works, Adobe is gone and you are great!

I thought by mistake, that after using startFromScartch = True, I
would have to rebuild the ribbon as custom tabs with build-in groups.
This is what I referred to as group-by group. In fact, with your code,
the original Mso tabs can become visible again, including all groups.
Your solution is much much less work than what I was about to do.
Thanks again.
 
D

Dovy

You are welcome

--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm













Hi Ron

It works, Adobe is gone and you are great!

I thought by mistake, that after using startFromScartch = True, I
would have to rebuild the ribbon as custom tabs with build-in groups.
This is what I referred to as group-by group. In fact, with your code,
the original Mso tabs can become visible again, including all groups.
Your solution is much much less work than what I was about to do.
Thanks again.- Hide quoted text -

- Show quoted text -

Hi Ron,

I am still missing something crucial.
I executed the xml twice:

1 With startFromScartch = False, my Hide / Unhide buttons work, but
Adobe persists.
2. With startFromScartch = True, Adobe is gone but my Hide / Unhide
buttons do NOT work.

I enclose the xml with the callbacks.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="rxCustomUI_onLoad" >
<ribbon startFromScratch="false">

<tabs>

<!-- hide/unhide all built-in Tabs -->
<tab idMso="TabHome" visible="true" />
<tab idMso="TabInsert" getVisible="rxTab_getVisible" />
<tab idMso="TabPageLayoutExcel" getVisible="rxTab_getVisible" />
<tab idMso="TabFormulas" getVisible="rxTab_getVisible" />
<tab idMso="TabData" getVisible="rxTab_getVisible" />
<tab idMso="TabReview" getVisible="rxTab_getVisible" />
<tab idMso="TabView" getVisible="rxTab_getVisible" />
<tab idMso="TabDeveloper" getVisible="rxTab_getVisible" />

<!-- Add Custom Tab BB -->
<tab id="rxTab1" label="BB" insertBeforeMso="TabHome">
<group id="rxGroupFile" label="File">
<button idMso="FileSave" />
<button idMso="FileClose" />
<button idMso="FileExit" />
</group>

<group id="rxGroup2" label="Unhide / Hide">
<button id="rxButton201" label="Unhide" imageMso="FilePrint"
size="large" onAction="BB_Unhide" />
<button id="rxButton202" label="Hide" imageMso="HappyFace"
size="large" onAction="BB_Hide" />
</group>

</tab>

</tabs>
</ribbon>
</customUI>


Dim rxRibbon As IRibbonUI
Public bVisible As Boolean

'Callback for customUI.onLoad
Sub rxCustomUI_onLoad(ribbon As IRibbonUI)
Set rxRibbon = ribbon
End Sub

'Callback for TabInsert getVisible
Sub rxTab_getVisible(control As IRibbonControl, ByRef returnedVal)
returnedVal = bVisible
End Sub

'Callback for rxButton201 onAction
Sub BB_Unhide(control As IRibbonControl)
bVisible = True
rxRibbon.Invalidate
End Sub

'Callback for rxButton202 onAction
Sub BB_Hide(control As IRibbonControl)
bVisible = False
rxRibbon.Invalidate
End Sub
 
R

Ron de Bruin

Yes indeed getvisible is not working with Set startFromScratch to true

I think about a different solution tomorrow
I know a way to het the group names but not the tab name of Adobe.
So we can't disable it as far as I know


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


You are welcome

--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm













Hi Ron

It works, Adobe is gone and you are great!

I thought by mistake, that after using startFromScartch = True, I
would have to rebuild the ribbon as custom tabs with build-in groups.
This is what I referred to as group-by group. In fact, with your code,
the original Mso tabs can become visible again, including all groups.
Your solution is much much less work than what I was about to do.
Thanks again.- Hide quoted text -

- Show quoted text -

Hi Ron,

I am still missing something crucial.
I executed the xml twice:

1 With startFromScartch = False, my Hide / Unhide buttons work, but
Adobe persists.
2. With startFromScartch = True, Adobe is gone but my Hide / Unhide
buttons do NOT work.

I enclose the xml with the callbacks.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="rxCustomUI_onLoad" >
<ribbon startFromScratch="false">

<tabs>

<!-- hide/unhide all built-in Tabs -->
<tab idMso="TabHome" visible="true" />
<tab idMso="TabInsert" getVisible="rxTab_getVisible" />
<tab idMso="TabPageLayoutExcel" getVisible="rxTab_getVisible" />
<tab idMso="TabFormulas" getVisible="rxTab_getVisible" />
<tab idMso="TabData" getVisible="rxTab_getVisible" />
<tab idMso="TabReview" getVisible="rxTab_getVisible" />
<tab idMso="TabView" getVisible="rxTab_getVisible" />
<tab idMso="TabDeveloper" getVisible="rxTab_getVisible" />

<!-- Add Custom Tab BB -->
<tab id="rxTab1" label="BB" insertBeforeMso="TabHome">
<group id="rxGroupFile" label="File">
<button idMso="FileSave" />
<button idMso="FileClose" />
<button idMso="FileExit" />
</group>

<group id="rxGroup2" label="Unhide / Hide">
<button id="rxButton201" label="Unhide" imageMso="FilePrint"
size="large" onAction="BB_Unhide" />
<button id="rxButton202" label="Hide" imageMso="HappyFace"
size="large" onAction="BB_Hide" />
</group>

</tab>

</tabs>
</ribbon>
</customUI>


Dim rxRibbon As IRibbonUI
Public bVisible As Boolean

'Callback for customUI.onLoad
Sub rxCustomUI_onLoad(ribbon As IRibbonUI)
Set rxRibbon = ribbon
End Sub

'Callback for TabInsert getVisible
Sub rxTab_getVisible(control As IRibbonControl, ByRef returnedVal)
returnedVal = bVisible
End Sub

'Callback for rxButton201 onAction
Sub BB_Unhide(control As IRibbonControl)
bVisible = True
rxRibbon.Invalidate
End Sub

'Callback for rxButton202 onAction
Sub BB_Hide(control As IRibbonControl)
bVisible = False
rxRibbon.Invalidate
End Sub
 
D

Dovy

Yes indeed getvisible is not working with Set startFromScratch to true

I think about a different solution tomorrow
I know a way to het the group names but not the tab name of Adobe.
So we can't disable it as far as I know

--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm










Hi Ron,

I am still missing something crucial.
I executed the xml twice:

1  With startFromScartch = False,  my Hide / Unhide buttons work, but
Adobe persists.
2. With startFromScartch = True,    Adobe is gone but my Hide / Unhide
buttons do NOT work.

I enclose the xml with the callbacks.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
          onLoad="rxCustomUI_onLoad" >
  <ribbon startFromScratch="false">

    <tabs>

      <!-- hide/unhide all built-in Tabs -->
      <tab idMso="TabHome" visible="true" />
      <tab idMso="TabInsert" getVisible="rxTab_getVisible" />
      <tab idMso="TabPageLayoutExcel" getVisible="rxTab_getVisible" />
      <tab idMso="TabFormulas" getVisible="rxTab_getVisible" />
      <tab idMso="TabData" getVisible="rxTab_getVisible" />
      <tab idMso="TabReview" getVisible="rxTab_getVisible" />
      <tab idMso="TabView" getVisible="rxTab_getVisible" />
      <tab idMso="TabDeveloper" getVisible="rxTab_getVisible" />

      <!-- Add Custom Tab BB -->
          <tab id="rxTab1" label="BB" insertBeforeMso="TabHome">
              <group id="rxGroupFile" label="File">
    <button idMso="FileSave" />
    <button idMso="FileClose" />
    <button idMso="FileExit" />
             </group>

             <group id="rxGroup2" label="Unhide / Hide">
   <button id="rxButton201" label="Unhide" imageMso="FilePrint"
size="large" onAction="BB_Unhide" />
   <button id="rxButton202" label="Hide" imageMso="HappyFace"
size="large" onAction="BB_Hide" />
             </group>

         </tab>

    </tabs>
  </ribbon>
</customUI>

Dim rxRibbon As IRibbonUI
Public bVisible As Boolean

'Callback for customUI.onLoad
Sub rxCustomUI_onLoad(ribbon As IRibbonUI)
   Set rxRibbon = ribbon
End Sub

'Callback for TabInsert getVisible
Sub rxTab_getVisible(control As IRibbonControl, ByRef returnedVal)
   returnedVal = bVisible
End Sub

'Callback for rxButton201 onAction
Sub BB_Unhide(control As IRibbonControl)
   bVisible = True
   rxRibbon.Invalidate
End Sub

'Callback for rxButton202 onAction
Sub BB_Hide(control As IRibbonControl)
   bVisible = False
   rxRibbon.Invalidate
End Sub- Hide quoted text -

- Show quoted text -

Hi Ron,

1. Is getVisible the only property lost when working with
startFromScratch = true, or will I lose more features. I want also to
be able to enable / disable controls and work with dynamic menus, etc.
Will these be compromised?

2. Why is it that getVisible is not functional with startFromScratch
= true?

I know it is late night at the Netherlands so,

Hartelijk dank en Goedenacht

(no, I do not speak Dutch, but I had Google translate it for me)
 
R

Ron de Bruin

Hi Dovy

There are more stuff that not work anymore with startFromScratch
I try to play with it more this weekend and get back to you

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Yes indeed getvisible is not working with Set startFromScratch to true

I think about a different solution tomorrow
I know a way to het the group names but not the tab name of Adobe.
So we can't disable it as far as I know

--

Regards Ron de Bruinhttp://www.rondebruin.nl/tips.htm










Hi Ron,

I am still missing something crucial.
I executed the xml twice:

1 With startFromScartch = False, my Hide / Unhide buttons work, but
Adobe persists.
2. With startFromScartch = True, Adobe is gone but my Hide / Unhide
buttons do NOT work.

I enclose the xml with the callbacks.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="rxCustomUI_onLoad" >
<ribbon startFromScratch="false">

<tabs>

<!-- hide/unhide all built-in Tabs -->
<tab idMso="TabHome" visible="true" />
<tab idMso="TabInsert" getVisible="rxTab_getVisible" />
<tab idMso="TabPageLayoutExcel" getVisible="rxTab_getVisible" />
<tab idMso="TabFormulas" getVisible="rxTab_getVisible" />
<tab idMso="TabData" getVisible="rxTab_getVisible" />
<tab idMso="TabReview" getVisible="rxTab_getVisible" />
<tab idMso="TabView" getVisible="rxTab_getVisible" />
<tab idMso="TabDeveloper" getVisible="rxTab_getVisible" />

<!-- Add Custom Tab BB -->
<tab id="rxTab1" label="BB" insertBeforeMso="TabHome">
<group id="rxGroupFile" label="File">
<button idMso="FileSave" />
<button idMso="FileClose" />
<button idMso="FileExit" />
</group>

<group id="rxGroup2" label="Unhide / Hide">
<button id="rxButton201" label="Unhide" imageMso="FilePrint"
size="large" onAction="BB_Unhide" />
<button id="rxButton202" label="Hide" imageMso="HappyFace"
size="large" onAction="BB_Hide" />
</group>

</tab>

</tabs>
</ribbon>
</customUI>

Dim rxRibbon As IRibbonUI
Public bVisible As Boolean

'Callback for customUI.onLoad
Sub rxCustomUI_onLoad(ribbon As IRibbonUI)
Set rxRibbon = ribbon
End Sub

'Callback for TabInsert getVisible
Sub rxTab_getVisible(control As IRibbonControl, ByRef returnedVal)
returnedVal = bVisible
End Sub

'Callback for rxButton201 onAction
Sub BB_Unhide(control As IRibbonControl)
bVisible = True
rxRibbon.Invalidate
End Sub

'Callback for rxButton202 onAction
Sub BB_Hide(control As IRibbonControl)
bVisible = False
rxRibbon.Invalidate
End Sub- Hide quoted text -

- Show quoted text -

Hi Ron,

1. Is getVisible the only property lost when working with
startFromScratch = true, or will I lose more features. I want also to
be able to enable / disable controls and work with dynamic menus, etc.
Will these be compromised?

2. Why is it that getVisible is not functional with startFromScratch
= true?

I know it is late night at the Netherlands so,

Hartelijk dank en Goedenacht

(no, I do not speak Dutch, but I had Google translate it for me)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top