Gallery gezielt anzeigen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12055
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Gallery gezielt anzeigen

Beitrag von Stephan »

Hallo,

in LO 7.x verwende ich derzeitig zum Anzeigen der Gallery (bitte Kommentar im Code beachten):

Code: Alles auswählen

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
'falls Gallery bereits offen, würde sie ausgeblendet, 
'deshalb Vorlagenfenster kurz öffnen:
dispatcher.executeDispatch(document, ".uno:DesignerDialog", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Gallery", "", 0, Array())
das gibt jedoch Probleme in OO, weil dort das (alte) Formatvorlagenfenster zusätzlich zur Seitenleiste eingeblendet wird.

Weiß jemand wie ic h prüfen könnte ob die Gallery offen ist (egal ob in der SEitenleiste oder als separates Fenster)?

zusätzlich:
Weiß jemand wie ich ich ein bestimmtes Gallery-Thema gezielt per Makro aktivieren/anzeigen kann?



Gruß
Stephan
mikeleb
*******
Beiträge: 1025
Registriert: Fr, 09.12.2011 16:50

Re: Gallery gezielt anzeigen

Beitrag von mikeleb »

Hallo,
wenn ich mich durch die Fensterelemente wühle, kann ich danach suchen, ob die Gallery geöffnet ist (getestet nur unter Linux und LO5.4):

Code: Alles auswählen

Sub Snippet
  Dim oCurrentController As Variant
  Dim oComponentWindow As Variant
  Dim oAccessibleContext As Variant
  Dim sAccessibleName As String
  Dim oAccessibleChild As Variant
  Dim oAccessibleContext2 As Variant
  Dim sAccessibleName2 As String
  Dim oAccessibleChild2 As Variant
  Dim oAccessibleContext3 As Variant

  gefunden=false
  oCurrentController = ThisComponent.getCurrentController()
  oComponentWindow = oCurrentController.ComponentWindow
  oAccessibleContext = oComponentWindow.getAccessibleContext()
  for i=0 to oAccessibleContext.AccessibleChildCount-1
	oAccessibleChild = oAccessibleContext.getAccessibleChild(i)
	oAccessibleContext2 = oAccessibleChild.getAccessibleContext()
	if oAccessibleContext2.accessiblerole=56 then
		for k=0 to oAccessibleContext2.AccessibleChildCount-1
			oAccessibleChild2 = oAccessibleContext2.getAccessibleChild(0)
			oAccessibleContext3 = oAccessibleChild2.getAccessibleContext()
			if oAccessibleContext3.getAccessibleName()="Gallery" then
				if oAccessibleContext3.getAccessibleChild(1).AccessibleContext.AccessibleRole=51 then
					gefunden=true
				end if
			end if
		next
	end if
  next
  if gefunden then
	msgbox "Gallery offen"
  else
	msgbox "Gallery geschlossen"
  end if
End Sub
Vielleicht ist das ja ein Ansatz.
Gruß,
mikeleb
Stephan
********
Beiträge: 12055
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Gallery gezielt anzeigen

Beitrag von Stephan »

Danke für den Versuch und die Fleißarbeit, aber unter AOO 4.1.6 funktioniert das weder für die alte, noch für die neue Gallery.


Gruß
Stephan
Dateianhänge
Situation_in_AOO416.gif
Situation_in_AOO416.gif (97.25 KiB) 350 mal betrachtet
mikeleb
*******
Beiträge: 1025
Registriert: Fr, 09.12.2011 16:50

Re: Gallery gezielt anzeigen

Beitrag von mikeleb »

Hallo Stephan,
unter AOO heißt die Gallery (zumindest in deutscher Oberfläche) "Galerie", sodass folgendes für die Seitenleiste und auch die alte Galerie zu funktionieren scheint.

Code: Alles auswählen

Sub Snippet
  Dim oCurrentController As Variant
  Dim oComponentWindow As Variant
  Dim oAccessibleContext As Variant
  Dim sAccessibleName As String
  Dim oAccessibleChild As Variant
  Dim oAccessibleContext2 As Variant
  Dim sAccessibleName2 As String
  Dim oAccessibleChild2 As Variant
  Dim oAccessibleContext3 As Variant
  gefunden=false
  oCurrentController = ThisComponent.getCurrentController()
  oComponentWindow = oCurrentController.ComponentWindow
  oAccessibleContext = oComponentWindow.getAccessibleContext()
  for i=0 to oAccessibleContext.AccessibleChildCount-1
	oAccessibleChild = oAccessibleContext.getAccessibleChild(i)
	oAccessibleContext2 = oAccessibleChild.getAccessibleContext()
	if oAccessibleContext2.accessiblerole=56 then
		for k=0 to oAccessibleContext2.AccessibleChildCount-1
			oAccessibleChild2 = oAccessibleContext2.getAccessibleChild(0)
			oAccessibleContext3 = oAccessibleChild2.getAccessibleContext()
			if oAccessibleContext3.getAccessibleName()="Gallery" or oAccessibleContext3.getAccessibleName()="Galerie" then
				gefunden=true
			end if
		next
	end if
  next
  if gefunden then
	msgbox "Gallery offen"
  else
	msgbox "Gallery geschlossen"
  end if
End Sub
Dateianhänge
makro_sidebar_finden.ods
(10.6 KiB) 8-mal heruntergeladen
Gruß,
mikeleb
Stephan
********
Beiträge: 12055
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Gallery gezielt anzeigen

Beitrag von Stephan »

Hallo mikeleb,

Danke für Deine Mühe.
sodass folgendes für die Seitenleiste und auch die alte Galerie zu funktionieren scheint.
Gemeinerweise nicht wenn die 'alte' Gallery nur minimiert und nicht geschblossen ist, denn dann wird die Gallery durch DEin Makro als geschlossen detektiert, was aktzeptabel wäre aus Sicht des Benutzers (denn sie ist ja nicht sichtbar), was nur aber aus Makro-Sicht nichts bringt, denn wenn die Gallery nur minimiert ist so schliesst:

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:Gallery", "", 0, Array())
die Gallery und macht sie nicht sichtbar.


Bitte verschwende um meinetwillen nicht noch mehr Zeit in dieses Thema hier, denn sooo wichtig ist es nicht.


Gruß
Stephan
mikeleb
*******
Beiträge: 1025
Registriert: Fr, 09.12.2011 16:50

Re: Gallery gezielt anzeigen

Beitrag von mikeleb »

Hallo Stephan,
irgendwo muss die Info ja versteckt sein ...
Die accessiblerole 56 scheint die Galerie (alt) bzw. die Sidebar zu meinen (aber eben auch die Datenquellen :shock: ) ... ist halt "nur" der grafische Container.
Wenn das Teil dann ein child-Objekt besitzt, wird auch wirklich etwas angezeigt(ist also nicht minimiert).

Code: Alles auswählen

  for i=0 to oAccessibleContext.AccessibleChildCount-1
	oAccessibleChild = oAccessibleContext.getAccessibleChild(i)
	oAccessibleContext2 = oAccessibleChild.getAccessibleContext()
	if oAccessibleContext2.accessiblerole=56 then
		msgbox "child " & i & "            Nr. 56 ist da"
		for k=0 to oAccessibleContext2.AccessibleChildCount-1
Gruß,
mikeleb
Antworten