Seite 1 von 1

[ALPHA] Vista Navigation-Leiste

Verfasst: Mittwoch 26. September 2007, 14:08
von nkoehring
Hi... ich baue gerade die Navigationsleiste mit wx.Python nach, die im Explorer seit WindozeVista eingefuehrt wurde. Ich finde diese Aufteilung in Buttons mit Untermenues so praktisch...

Bisher sieht es schon nach der Leiste und wird zu einem Textfeld, wenn man reinklickt. Das Menüfeld funktioniert schon, nur das Menü noch nicht :roll:

Wuerde mich ueber Feedback freuen... Code folgt spaeter, wenn ich wieder an nem Punkt ankomme, an dem es benutzbar ist...

Bild

Gruesse
NKoehring

PS: Die Pfad-Bausteine sind komplett per DC gezeichnete Widgets, die von wx.Control aberben... Die Farbverlaeufe sind prozedural. Der kleine Pfeil ist ein Polygon. Es werden keinerlei Bitmaps verwendet.

Re: Vista Navigation-Leiste

Verfasst: Mittwoch 26. September 2007, 15:26
von gerold
nkoehring hat geschrieben:Bild
...gefällt mir. :D

Verfasst: Mittwoch 26. September 2007, 22:47
von nkoehring
So, inzwischen gibt es ein Menue, dass auch funktioniert, sich aber noch nicht so verhaelt, wie ich es will. Beim aendern des Pfades wird (dank einer eben entdeckten Anleitung von gerold) auch ein sogenanntes EVT_PATH_CHANGED an das TopLevelParent (also den Frame) gesendet.

Das EventObject enthaelt ein Property path, das (man glaubt es kaum) den aktuellen Pfad enthaelt.

Hat jemand noch Ideen fuer das EventObject bzw dessen Properties?

Ich gehe jetzt erstmal schlafen... und morgen gehts weiter und gibts vielleicht ja auch mal Code oder so ;)

EDIT: Zu dem Menue und seinem Verhalten:
Wenn ich ein PopupMenue erzeuge verhaelt es sich nicht so wie die Menuepopups bei MenuBars. Außerdem verliert mein Objekt den Focus, wenn das Menue aufspringt...
Weiß jemand wie ich das Verhalten einer MenuBar simulieren kann? Es geht mir darum, dass das Menu "springt", wenn ich bei aktiviertem Menue mit der Maus von einem Objekt zum naechsten wechsle und das die Objekte ihren Focus nicht abgeben...

Verfasst: Donnerstag 27. September 2007, 09:17
von poker
Hi, mir gefällt das auch und ist ne gute Idee :) Vielleicht kannst du dein Widget auch in der wx mailingliste vorstellen und es wird in einen der Release in wxPython hinzugefügt.
Weiß jemand wie ich das Verhalten einer MenuBar simulieren kann? Es geht mir darum, dass das Menu "springt", wenn ich bei aktiviertem Menue mit der Maus von einem Objekt zum naechsten wechsle und das die Objekte ihren Focus nicht abgeben...
Keine Ahnung. Ist schon länger her das ich was mit wx gemacht habe (Spiele momentan mit PyGTK und QT). Du kannst aber dein Code posten und dann Spielen wir ein wenig damit. Vielleicht fällt uns da was ein. Pack aber bitte ein Sample/Boilerplate Code zum Spielen dazu.

Verfasst: Donnerstag 27. September 2007, 11:32
von nkoehring
poker hat geschrieben:Du kannst aber dein Code posten und dann Spielen wir ein wenig damit. Vielleicht fällt uns da was ein. Pack aber bitte ein Sample/Boilerplate Code zum Spielen dazu.
Hi poker... ja ich hab genau das gerade gebaut und werd es, nachdem ich ein wenig durchkommentiert und noch ein paar Sachen zurechtgefeilt hab, mal veroeffentlichen... *also* heute noch ;)

Verfasst: Donnerstag 27. September 2007, 21:36
von nkoehring
mist, ich glaube ich muss das auf morgen verschieben... ich hab nen Bug eingebaut... und hab im Moment noch keinen Loesungsansatz...

oha... drei Postings untereinander *hüstel*

Verfasst: Freitag 28. September 2007, 15:05
von nkoehring
Soooo... nun hab ichs. Der Bug war (wie so oft) auf meine eigene Unzulaenglichkeit zu schieben. Es passieren halt komische Sachen wenn man Event-Methoden fuer Objekt X nicht nur an X sondern auch an Y bindet, einfach weil man nicht nachgedacht hat, was man da eigentlich tut ^^

Aber zum eigentlichen Thema: Link zum vista_navbar sourcecode!

Um ein paar Fragen vorzubeugen:
Die DemoApplication ist nicht dazu gedacht"nuetzlich" im Sinne von Produktiv zu sein. Der Frame ist nicht Resizable, weil ich einfach keine Lust darauf hatte. Außerdem resized sich die VistaNavBar im Moment noch selbst. Das macht jedem Sizer schwer zu schaffen ;)

Vorwiegende Features bisher:
* die Navigation funktioniert vollstaendig (ohne Metaordner, wie zB den Arbeitsplatz unter Windows)
* man kann in die Bar klicken um den Pfad wie in jedem normalen Textfeld einzutippen
* Effektspielereien, bis auf die Fading-Effekte sind soweit komplett

...alles weitere: einfach ausprobieren oder mich fragen ;)

Viel Spaß und ordentliches Feedback bitte,
NKoehring

Edit: Ach und nochwas... ich hab das ganze mit Python 2.5 in SciTE unter Windows Vista entwickelt. Ich wuerde mich ueber Tests auf anderen Systemen freuen. Die Bar sollte soweit Platformunabhaengig sein, aber da meine tolle neue ATI-Karte bisher unter Linux immer nur kurz funktioniert, bis dann der Treiber abstuerzt und ich bisher keine Lust hatte, da was zu machen, hab ich das ganze noch nicht woanders testen koennen...

EDIT: warum sagt denn keiner, dass ich den Link zerschossen habe ^^

Verfasst: Samstag 29. September 2007, 11:49
von CrackPod
Hallo,

also bei mir unter Ubuntu 7.04 mit Python 2.5.1 bekomm ich folgenden Traceback:

Code: Alles auswählen

tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel)
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 355, in set_path
    else: pos = (self.elem[-1].GetPosition().x+self.elem[-1].GetSize().x, 0)
IndexError: list index out of range
Liebe Grüße

Verfasst: Samstag 29. September 2007, 12:21
von nkoehring
CrackPod hat geschrieben:Hallo,

also bei mir unter Ubuntu 7.04 mit Python 2.5.1 bekomm ich folgenden Traceback:

Code: Alles auswählen

tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel)
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 355, in set_path
    else: pos = (self.elem[-1].GetPosition().x+self.elem[-1].GetSize().x, 0)
IndexError: list index out of range
Liebe Grüße
Danke dafuer. Sieht so aus, als ob der "inital_path" nicht vernuenftig gesetzt werden wuerde. Du koenntest ihn einfach setzen, in dem du in der Frame-Klasse bei der Instanzierung einfach nen initial_path setzt.
Also zB so:

Code: Alles auswählen

self.navbar = VistaNavBar(panel, initial_path="~")
...wenn das nicht geht, versuch nen absoluten Pfad:

Code: Alles auswählen

self.navbar = VistaNavBar(panel, initial_path="/home/")

Verfasst: Samstag 29. September 2007, 12:29
von CrackPod
Hallo,

es geht scheinbar auch mit relativer und absoluter Pfadangabe nicht.

Code: Alles auswählen

tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel, initial_path='~')
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 359, in set_path
    height = self.elem[0].GetSize().y
IndexError: list index out of range
tobsl@blechbuechse:~$ python /home/tobsl/Python/vistabar.py 
Traceback (most recent call last):
  File "/home/tobsl/Python/vistabar.py", line 433, in <module>
    frame = DemoFrame(None, style=wx.CAPTION)
  File "/home/tobsl/Python/vistabar.py", line 406, in __init__
    self.navbar = VistaNavBar(panel, initial_path='/home/')
  File "/home/tobsl/Python/vistabar.py", line 290, in __init__
    self.set_path(initial_path)
  File "/home/tobsl/Python/vistabar.py", line 355, in set_path
    else: pos = (self.elem[-1].GetPosition().x+self.elem[-1].GetSize().x, 0)
IndexError: list index out of range
Liebe Grüße

Verfasst: Samstag 29. September 2007, 12:56
von nkoehring
tja, da weiß ich auch nicht was los ist... ich werde die moeglichen Fehler mal abfangen und dann den Code aktualisieren... dann koenntest du schauen, was passiert ;)

Danke nochmal.

EDIT: http://paste.pocoo.org/show/4885/

Verfasst: Mittwoch 7. November 2007, 16:13
von mitsuhiko
Hab das mal getestet. Ist ziemlich Buggy hier auf einem Windows 2000 Rechner. Die Bar flackert wie nix Gutes und wenn man nicht über einen Button Hovert ist der Hintergrund und der Text weiß.

Verfasst: Mittwoch 7. November 2007, 17:40
von nkoehring
ah danke mitsuhiko... das selbstbasteln von Widgets ist scheinbar echt ne umstaendliche Sache. Im Moment fehlt mir n bissl die Zeit, aber ich werd mich sicher bald mal wieder ransetzen ;)

Verfasst: Freitag 22. Februar 2008, 19:41
von nkoehring
Hallo... ich wollte nur sagen, dass es im Moment wieder weiter geht. Fuer alle interessierten werde ich hier immermal schreiben, was sich so tut.

Im moment bekomme ich auch Hilfe von Crush. Ich denke mal, jetzt steht der Weiterentwicklung nichts mehr im Wege ;)

Einige Bugs sind schon gefunden und beseitigt. Inzwischen sollte auch der Farbverlauf in den PfadElementen ueberall richtig gezeichnet werden. Sorgen bereitet mir noch die Schrift und der (fuer mich bisher nicht reproduzierbare) Speicherzugriffsfehler, der ab und an mal beim wechseln des Pfades auftritt :cry:

Naja und ich wuerde gern noch rausfinden, wie ich das mit dem Menüleisten-Verhalten hinbekommen soll :K

Gruesse
NKoehring

EDIT: Die Entwicklung kann ab jetzt bei Launchpad unter dem Projektnamen vistanavbar verfolgt werden.