ordner mit wxTreeCtrl darstellen
-
Hallo zusammen
ich habe da ein kleines problem, wobei ich einfach nicht auf die lösung komme.
ich möche eine Ordnerstruktur mit wxTreeCtr anzeigen. dabei werden alle verzeichnisse ab einem gewissen ordner (kann von user eingestellt werden) anzgeigt. hatt jemand eine idee wie man am bestenn alle ordner durchsuchen kann und sie hinzuzufügen? mein problem ist ein wenig das ja in jedem ordner und somit auch in einem Nten unterordner beliebig viele unterverzeichnisse bestehen können.
natürlich ist dies der extremfall aber ich möchte alles abdichten.hat jemand von euch eine idee?
vielen dank schonmal im voraus
lieber gruss
Mäge
-
Also das selber zu machen ist sehr aufwändig.
Aber evtl. schaust du dir mal wxVirtualDirTreeCtrl an.
-
das sieht intressant aus. aber was ist denn das genau? es ist ja irgendwie gar keine klasse von wxWidgets :s
-
Es ist keine offizielle wx Klasse, sondern wurde von Jorg geschrieben.
Aber du kannst es mit wxWidgets nutzen, da es selber dieses nutzt.
Du musst die Dateien wahrscheinlich nur deinem Projekt hinzufügen, und
dann entsprechend eine Membervariable deinem Frame/Panel hinzufügen, wie du
das bei jedem anderen Control auch machst.
-
hmm.. sorry wenn ich jetzt ein wenig nerve, aber wie geht das? das hab ich bissher noch nie gemacht so eine Membervariable. kannst du mir das kurz erklären? ich benutze Visual C++
vielen dank nochmal
-
Also bevor du mit wxWidgets oder so anfängst, solltest du schon C++ ganz gut verstanden haben.
Und das anlegen einer Membervariable ist da schon fundamental, um überhaupt
irgendwas mit wxWidgets oder C++ zu machen.Für den Einstieg ist das Tutorial ganz gut: http://tutorial.schornboeck.net/
phlox
-
also ich würd jetzt nicht behaupten dass ich ein profi in C++ bin, aber ich habe schon ein paar wenn auch "kleinere" programme in C++ und auch mit wxWidgets geschrieben. und Immerhin wxWidgets zu installieren ist ja auch nicht ganz einfach
ich hab diese variablen hald noch nie benötigt darum weiss ich net wie das geht. ich weiss nicht warum diese Membervariablen fundamental sein sollen :s ich hab sie bis jetzt noch nie benötigt. Vieleicht hab ich da ja was falsch gemacht aber meine programme liefen eigentlich am ende immer.
trotzdem vielen dank
-
Naja, also ne Membervariable zu ner Klasse hinzufügen ist wirklich einfach:
in den header:
#include "foo.hpp" class bar { foo* f; public:... };
in den konstruktor:
bar::bar() { f = new foo(); }
In deinem Fall müsstest du also die entsprechenden Dateien von wxVirtualDirCtrl in dein Projektverzeichnis kopieren,
diese deinem Projekt hinzufügen, und in deinen Frame dann entsprechend eine Membervariable vom Typ wxVirtualDirCtrl anlegen.
Und im Konstruktor entsprechend mit new erzeugen, und nicht vergessen das ganze an einen Sizer zu übergeben.phlox
-
okey vielen dank, das werd ich wohl noch hinkriegen denke ich
sieht ja wirklich nicht allzu schwer aus. ich glaub diese klasse ist genau das was ich brauchevielen dank für deine hilfe
mäge
-
Sowas lässt sich doch sehr schön rekursiv lösen mit dem wxTreeCtrl.
Hab es mir jetzt nur mal auf Papier überlegt, aber ansicht müsste das doch gut gehen. Die Bedienung machste dann komplett über Events.
[Struktogramm]
mkdir(root)
{
alle ordner suchen
alle dateien suchenfor alle Ordner
id = item anlegen
mkdir(id)
end forfor alle datein
item anlegen
end fo
}Dann erstellste dir dein TreeCtrl wie folgt:
root = AddRoot("/"); mkdir(root);
Das müsste es schon gewesen sein.
-
Klar kannst du die Dateien alle auslesen und entsprechend ins TreeCtrl hauen.
Ist aber nicht gerade ideal, da du ja dadurch evtl. recht viel Speicher verbrauchst,
daher machts sinn immer nur für Verzeichnisse der nächsten Tiefe das zu laden.
Und genau das tut wxVirtualDirTreeCtrl.
-
also ich hab jetzt da mal reingeschaut in virtualdirtreectrl. aber irgndwie komm ich nocht nicht ganz draus ich blick nicht ganz durch. wenn ich jetzt dort die funktion SetRootPath aufrufe, kann ich den Tree darstellen. öffne ich jedoch ein unterverzeichniss bekomme ich ein Assert : invalit tree item
warum denn? und kann mir jemand sagen wie ich rauskirege, welen ordner das ich angewählt habe? also einfach nur makiert mit der maus (nicht einfach das letzte verzeichniss)danke im voraus
mäge
-
Also du kannst da ganz normal die wxTreeCtrl Events für nehmen, ist ja davon abgeleitet.
Müsstest dich dann halt vom gerade ausgewählten Ordner bis zum RootOrdner hochhangeln,
und den Pfad zusammensetzen.
Oder du nimmst GetFullPath aus der VirtualDirTreeCtrl Klasse, die gibt ein wxFileName zurück:dirtree->GetFullPath(selitem).GetFullPath();
Bei dem Assert hab ich auch keine Ahnung, evtl. stellst du die Frage mal im wxWidgets Forum
oder schickst Jorg ne Mail.