Zmiana modelu ControlTree (OO się wywala)

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
JackK
Posty: 23
Rejestracja: czw kwie 04, 2013 11:41 am

Zmiana modelu ControlTree (OO się wywala)

Post autor: JackK »

Cześć.
Mam dialog zawierający ControlTree. Pierwsze uzupełnienie jego modelu i wyświetlanie działa bez zarzutów, jednak gdy chcę zmienić model na inny, OpenOffice się zamyka z powodu jakiegoś błędu.
Mam kod:

Kod: Zaznacz cały

Dim dlgQH
Dim oFileSel
Dim oTree As Object
Dim oListener
Dim xml

Sub CreateTree
   	oTreeModel = oTree.Model

	oMutableTreeDataModel = createUnoService("com.sun.star.awt.tree.MutableTreeDataModel")

	bonsai = DimArray(0,0)
	bonsai_size = -1

	Dim looped As Integer
	Do
		XMLp = nextXMLtag(xml, XMLp)    ' ZWRACA TAG xml Z CZYTANEGO PLIKU
		if XMLp=0 then
			Exit Do
		end if

		if nextXMLtag_type = "openoffice_hint" then
			oRootNode = oMutableTreeDataModel.createNode("Całość", true)
			oMutableTreeDataModel.setRoot(oRootNode)
		elseif nextXMLtag_type = "mod" then
		   	oModNode = oMutableTreeDataModel.createNode("nazwa_mod", true)
            oModNode.setCollapsedGraphicURL("file:///C:/module.png")
            oModNode.setExpandedGraphicURL("file:///C:/module.png")
		   	oRootNode.appendChild(oModNode)
		elseif nextXMLtag_type = "qg" then
		   	oGroupNode = oMutableTreeDataModel.createNode("nazwa_qg", true)
            oGroupNode.setCollapsedGraphicURL("file:///C:/group.png")
            oGroupNode.setExpandedGraphicURL("file:///C:/group.png")
		   	oModNode.appendChild(oGroupNode)
		end if
		looped = looped + 1
	Loop

	oTreeModel.DataModel = oMutableTreeDataModel
   	oTree.DefaultExpandedGraphicURL = "file:///C:/xml.gif"
   	oTree.DefaultCollapsedGraphicURL = "file:///C:/xml.gif"

	oListener = createUnoListener("Select_","com.sun.star.view.XSelectionChangeListener")
	oTree.addSelectionChangeListener(oListener)
End Sub

Sub ChangeXML
	FileName = oFileSel.getText()
	'if FileName = "" then
	'	FileName = "C:\OOhint.xml"
	'end if
	if FileName <> "" then
		' odczytanie pliku XML do zmiennej "xml"
		sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
		myFilePath = convertToURL(FileName)
		fileStream = sf.openFileRead(myFilePath)
		myTextFile = createUnoService("com.sun.star.io.TextInputStream")
		myTextFile.InputStream = fileStream
		myTextFile.Encoding = "ISO-8859-2"
		Do while not myTextFile.IsEOF
			aLineOfText = myTextFile.readLine
			xml = xml + aLineOfText
		Loop
		fileStream.closeInput
		myTextFile.closeInput 
		CreateTree
	end if
End Sub

Sub ShowDialog_qH
   	DialogLibraries.loadLibrary("Standard")
   	libStandard = DialogLibraries.getByName("Standard")
   	libDialog = libStandard.getByName("queryHint_Dialog")
   	dlgQH = CreateUnoDialog(libDialog)

   	oFileSel = dlgQH.getControl("FileSelect")
   	oTree = dlgQH.getControl("drzewo")

	ChangeXML()

	dlgQH.execute()
	oTree.removeSelectionChangeListener(oListener)
	dlgQH.dispose()
End Sub 'ShowDialog_qH
Pominąłem tu funkcję listener'a.
By wyświetlić dialog wywołuję makro ShowDialog_qH. Pod przyciskiem oFileSel (na dialogu) wybierającym plik z dysku mam podczepione makro ChangeXML. Czy przed zmianą modelu trzeba wcześniejszy "zabić" w jakiś sposób?
Proszę o pomoc.
OpenOffice 3 na Windows 7
Jan_J
Posty: 4576
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Zmiana modelu ControlTree (OO się wywala)

Post autor: Jan_J »

Piszesz o rzeczach, które chyba mało kto umie robić w UNO. Łatwiej znaleźć takich, co rzeźbią w WinForms, Qt albo GTK.
Ale jeśli chcesz, by ktoś przyjrzał się Twoim problemom, załącz działający przykład. Tj. nie działający wskutek Twojego problemu -- bo ja np. nie mam pojęcia, na czym polega Twój queryHint_Dialog, ani czym jest widget drzewo. Bez biblioteki nie rozbierzesz, a i instalować cudzej biblioteki do testów mi się nie uśmiecha.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
JackK
Posty: 23
Rejestracja: czw kwie 04, 2013 11:41 am

Re: Zmiana modelu ControlTree (OO się wywala)

Post autor: JackK »

Dzięki za odpowiedź.
Załączam plik ODT oraz przykładowy plik XML, którym będzie uzupełniane drzewko.
Należy po wywołaniu makra ShowDialog_qH kliknąć na dialogu przycisk "Przeglądaj" i wybrać załączony plik TXT. By sprawdzić, że się OpenOffice wywala, trzeba jeszcze raz użyć "Przeglądaj".
Plik ODT w kolejnym poście, bo tutaj dodał mi się bez makr.

Pozdrawiam.
Załączniki
ikonki.zip
Ikonki używane w drzewku
(4.04 KiB) Pobrany 148 razy
OpenOffice_hint.txt
XML z danymi do drzewka
(19.85 KiB) Pobrany 197 razy
Ostatnio zmieniony czw kwie 18, 2013 8:29 am przez JackK, łącznie zmieniany 1 raz.
OpenOffice 3 na Windows 7
JackK
Posty: 23
Rejestracja: czw kwie 04, 2013 11:41 am

Re: Zmiana modelu ControlTree (OO się wywala)

Post autor: JackK »

Dodaję poprawiony dokument, bo poprzedni nie zawiera makr.
Załączniki
do_testu_makra.odt
ODT z makrami (mam nadzieję)
(19.13 KiB) Pobrany 264 razy
OpenOffice 3 na Windows 7
ODPOWIEDZ