Einheitliches Aktionensystem

German support forum

Moderators: Hacker, Stefan2, white

User avatar
Lefteous
Power Member
Power Member
Posts: 9536
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

Jonas wrote: Genau das will ich auch :) (nur mit der Mögloichkeit auf mehrere Aktions-dateien, aber das geht aus früheren Posts nicht hervor)
Der Unterschied: Bei mir ist die Standard Aktionsdatei frei von sprachspezifischen Eigenschaften. Das vereinfacht die Wartung (ein (un-)schöes Beispiel ist die momentane Menü-situation. Hier ist für jede Sprache eine eigene Menüdatei nötig obwohl die Struktur bei allen gleich ist. Diese Redundanz ist auch bei Deinem Beispiel nicht mehr vorhalnden. Aber anstelle dessen taucht eine Neue in der Aktionsdatei auf, da Du hier die Lokalisierung einbringst. Die Aktionsdatei muss bei Dir für jede Sprache extra vorhanden sein.)
Nein, das ist schlicht falsch. Schau Dir meinen ersten Beitrag noch einmal an. Hier zeige ich eine Menüdatei und eine Sprachdatei auf, jedoch keine Aktionsdatei. Ich glaube das ist das grundlegende Mißverständnis.
Jonas wrote: Mein Vorschlag:
Eine offizielle Menüdatei, die nur die Struktur der Menüs enthält. Genau wie bei Dir auch.
Eine offizielle Aktionsdatei, in der die Eigenschaften der Aktionen verwaltet werden. Auch hier soll auf eine Lokalisierung verzichtet werden: Beschriftungen sollen aus der Sprachdatei geholt werden. Aber es ist auch die Möglichkeit zur direkten Eingabe von Beschriftungen möglich (für spätere erweiterungen).
Was denn nun? Direkte Möglichkeit zur Eingabe hört sich nun wieder sehr nach sprachspezifischem Text an. Bringe am Besten mal ein Beispiel!
Jonas wrote: In Deinem ersten Beispiel hast Du sprachspezifische Eigenschaften in die Aktionsdatei gepackt, im zweiten nicht mehr. deshalb denke ich das wir uns auch hier einig sind. Einziger Unterschied: Du verwendest einfach Zahlen für verweise aud die Sprachdatei und alles was nicht reine Zahl ist wird direkt ausgegeben. Ich benutze einfach einen prefix LNG. Was nun einfacher zu parsen ist, also die Prüfung auf eine reine Zahl oder den Prefix weiss ich nicht. Wie es letztendlich realisiert wird, ist mir auch egal. Mit dem Prefix währen auch Aliase als Verweis zur sprachdatei möglich, wie Du sie im Menübeispiel verwendest, aber so wie zZ. die Sprachdatei aufgebaut ist spielt das keine grosse rolle. Also beleibt unterm strich kein wirklicher Unterschied in unseren Versionen. für die implementierung sind wir ja nicht zuständig ;)
siehe oben - mein erstes Beispiel zeigt meine eigentliche Idee, die ich auch nach wie vor für die Geeignetste halte. In dem zweiten Beispiel habe ich mich an Deinem Vorschlag orientiert. Er gefällt mit deshalb nicht so gut, weil hier in der Aktionsdatei drinsteht wo in der Sprachdatei der lokalisierte Text zu finden ist. Das halte ich im Grunde genommen für überflüssig.
Jonas wrote: Die Aktionsdatei solle aber nur Aktionen enthalten die von Standart abweichen. So ist das Update auf neuere Versionen einfacher da die evtl. vom User geänderte Aktiondatei nicht mit einer neuen ersetzt werden muss. Alternativ hierzu käme die obengenannte 2. Aktionsdatei ins Spiel die alle Standards enthält und erst an zweiter stelle zu Rate gezogen wird, wenn in der User-Aktions-Datei kein Eintrag zu finden ist. Sie wäre auch als art Übersicht über alle vorhandenen Aktionen zu sehen.
Das ist eine gute Idee. Es sollte eine Standard-Sprachdatei geben und eine mit benutzerdefinierten Texten. Das selbe für die Aktionsdatei.
Jonas wrote: Was mir wichtiger als der Prefix ist, ist, das in meinem Beispiel der Name des Verzeichnisses im Namen auftaucht, also bei Dir cm_userCD_dir-xy anstelle von cm_UserCD00123...
Wenn wir schon bei der Nomelklatur sind, was haltet ihr davon, cm_* für intern implementierte Aktionen zu verwenden und user_* für automatisch generirte? Also im Falle der Hotlist zB. "user_cd_Programme" (und erst hier bei mehreren eine Nummerierung starten)
ja mit Verzeichnisname ist sicherlich sinnvoll.
Ich meine alle Aktionen sollten mit cm_ beginnen. Es reicht aus, wenn die Kommandos in unterschiedlichen Dateien stehen. Im Aktionsmanager spielt die unterschiedliche Herkunft keine Rolle.

Ich bringe jetzt noch einmal ein erweitertes Beispiel, damit sind dann hoffentlich alle Unklarheiten beseitigt. Es basiert auf meinem ersten Beispiel und wurde, auch mit zahlreichen Deiner Vorschläge, weiterentwickelt:

Menüdatei:
;Anstelle von POPUP wird CTG für Category benutzt.

[CTG_SELECT]
MENUITEM cm_spreadselection
MENUITEM cm_shrinkselection
[END_CTG]

Vordefinierte Aktionsdatei:
; Die Kategorien in Menü- und Aktionsdatei können die Gleichen sein, müssen aber nicht. Man kann in der Menüdatei neue hinzufügen oder welche aus den Eigenschaften der Aktionen in der Aktionsdatei benutzen.

[cm_SpreadSelection]
ID=521
Category=CTG_SELECT

[cm_ShrinkSelection]
ID=522
Category=CTG_SELECT

Benutzerdefinierte Aktionsdatei:
[cm_CD_Pictures]
ID=720
Category=CTG_GOTO
Icon=%WINDIR%\System32\Shell32.dll,127

;Wo definierst Du in Deinem Beispiel eigentlich die Command-IDs?

Vordefinierte Sprachdatei:

[CTG_SELECT]
Caption=&Markieren
Hint=Markieren

;Ich habe mich bislang bei Caption und Hint an Delphi gehalten. Da hier jedoch viel Redundanz drinsteckt, könnte man das vielleicht noch etwas eleganter lösen. Meine erste Idee: Hint fällt weg. Der Text in Caption wird auch für den Tooltip verwendet. Hierbei wird jedoch '&' weggelassen.

[cm_SpreadSelection]
Caption=&Gruppe markieren
Hint=Gruppe markieren
Description= Wählt, basierend auf einem Filter, eine Gruppe von Dateien und Verzeichnissen aus.

;Einer Beschreibung für jede Sprache - viele Benutzer stolpern über die englischen Erklärungen. Viel Arbeit für die Übersetzer. In der Übergangszeit (Description ist nicht definiert) kann man ja die Englische anzeigen oder auch den Wert aus Caption.

;Wie gesagt - unter Umständen macht es auch Sinn den Hotkey in die Aktionsdatei mitreinzunehmen.

Benutzerdefinierte Sprachdatei:
[cm_CD_Pictures]
Caption=&Eigene Bilder
Hint=Eigene Bilder
Hotkey=CAS+B
Jonas
Senior Member
Senior Member
Posts: 325
Joined: 2003-05-27, 16:59 UTC
Location: Germany
Contact:

Post by *Jonas »

Ok, ich bringe jetzt endlich auch ein ausführliches Beispiel; Du hast Recht, das ist schon lange fällig.

Menüdatei (eine; enthält nur struktur; Sprache kommt aus der offiziellen Sprachdatei an deren jetziger Struktur ich mich in meinem Beispiel auch orientiere)

Code: Select all

[...]

POPUP LNG: 7777 
MENUITEM cm_spreadselection 
MENUITEM cm_shrinkselection 
MENUITEM cm_selectall 
MENUITEM SEPARATOR 
MENUITEM cm_CompareDirs 
MENUITEM cm_DirMatch 
END_POPUP

POPUP "eigenes Menü"
MENUITEM eigene_aktion_A 
MENUITEM cm_shrinkselection 
MENUITEM SEPARATOR 
MENUITEM user_CD_programme
MENUITEM button_nxview
MENUITEM cm_DirMatch 
END_POPUP

[...]
Das ist die offizielle Menüdatei erweitert um ein eigenen Eintrag. Das Menü ist ein mögliches aufrufendes Element für Aktionen. Schön sichtbar sind die Möglichkeiten zum Rückgriff auf die Sprachdatei (um nur eine Menüdatei und nicht für jede Sprache eine verwalten zu müssen) sowie die zur direkten Eingabe eigener Titel (zur einfachen Erweiterung durch den Benutzer)

Wie die Sprachdatei(viele, für jede Sprache eine) aufgebaut ist, ist bekannt. Ich werde hier keinen Ausschnitt angeben.

Standard-Aktions-datei (eine; enthält nur struktur; als Beispiel; zum kopieren für eigene Erweiterungen und zum rückgriff fals kein Eintrag in der user-Aktions-datei enthalten ist) Ich benutze Deine ini-Struktur, die Vorteile liegen auf der Hand (für Mensch und Maschiene leicht les- und manipulierbar)

Code: Select all

[...]

[cm_spreadselection]
id=521
caption=LNG: 6666
hint=LNG: 6667
hotkey=CA++
category=LNG: 5555
icon.....
description....
etc...

[...]
Es empfield sich diese Datei nicht zu ändern sondern den Eintrag in die Benutzer eigene Aktions-datei zu kopieren und dort anzupassen da die standard-datei evtl. bei einem TC-update überschrieben wird.
Ich weiss nicht, ob nach diesem System noch eine ID nötig ist. Wenn ja, bin ich auch dafür, sie hier unterzubringen Anstelle einer totalcmd.inc

Eigene Aktionsdatei (hier werden eigene sowie angepasste Aktionen gespeichert; diese Datei wird vor der standard-datei abgefragt.)

Code: Select all

[...]

[eigene_aktion_A]
id=10001
caption="mein Name"
action=cm_ftpOpen "meine Verbindung"
hotkey=CA+v
category=LNG:9999
description="öffnet eine FTP-Verbindung zu meinem Webspace"

[eigene_aktion_B]
id=10009
action=eigene_aktion_A
hotkey=CA+f
category="dummy"

[user_CD_programme]
id=10002
caption="C - Programme"
action="cd c:\programme\"
category=LNG:8888

[button_nxview]
id=10003
caption="NXView"
hint="Bild mit XNView öffnen"
action="c:\programme\xnview\xnview.exe"
parameter="%P%N"
startpath="c:\programme\xnview"
category="viewer"
icon="c:\programme\xnview\xnview.exe";0

[cm_spreadselection]
hotkey=CA+G

[...]
Wie am letzen Beispiel ersichtlich, reicht es, die eine geänderte Eigenschaft in die eigene Aktionsdatei zu übernehmen - der Rest kommt weiterhin aus der Offiziellen.
eigene_aktion_B ist dafür da, der _A einen zusätzlichen Hotkey zu verpassen.
Alles weitere ist glaub ich selbsterklärend; ich hoffe es wird auch deutlich wie man einfach für den offiziellen Teil auf die Sprachdatei zugreifen kann und trotzdem für eigene Erweiterungen einfach selbst Text direkt eingeben kann.

Als weitere Aufrufende Elemente kommen neben dem Menü (die hotkeys sind global) noch die Directory hotlist, die Buttonbar, später noch beliebig erweiterbar auf ein Dynamisches Kontextmenü (siehe Post weiter ohen), die untere Buttonbar oder ähnliches in Frage....
User avatar
Lefteous
Power Member
Power Member
Posts: 9536
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Jonas

Ein paar Anmerkungen hätte ich noch zu Deinem Beispiel:

1. Die "direkten Eingabe eigener Titel" ist genau das was nicht erlaubt sein darf. Dadurch wird jegliche Austauschmöglichkeit genommen. Natürlich ist es einfacher eine Textdatei direkt zu bearbeiten, aber das ist genau das was man jetzt auch schon machen kann. Wenn der Aktionsmanager leistungsfähig genug ist, sollte das direkte Bearbeiten überflüssig sein, ohne dass die Transparenz des Formats verloren geht.
Stell Dir vor ein Chinese erstellt ein tolles Menü, das jeder haben will. Jetzt musst Du die Menüdatei ändern und siehst dort, dass der Chinese eigene Titel definiert hat. Dummerweise kannst Du kein chinesisch (falls Du chinesisch kannst denke Dir hier einfach eine andere Dir unbekannte Sprache :mrgreen:). Hat der Chinese jedoch in seinem Menü nur Identifizierer wie CTG_SELECT benutzt, reichen Englischkenntnisse vollkommen und Du musst die Menüdatei nicht verändern, sondern nur die Sprachdatei erweitern.

2. Die Eingabe von Nummern zum Zugriff auf sprachspezifische Texte halte ich für redundant. Zunächst muss, wie in Deinem Beispiel, in der Aktionsdatei eine Nummer definiert werden und dann der dazugehörige Text aus der Sprachdatei gelesen werden. In meiner Lösung muss nur auf die Sprachdatei zugegriffen werden und somit fällt die Aktionsdatei deutlich schlanker aus.

3. Du hast in der Aktionsdatei als Kategorie eine Text-ID benutzt. Somit gibt es gar keinen Identifizierer, sondern nur eine sprachabhängige Beschriftung.

4. Die Idee eine Hierarchie zwischen benutzerdefinierter- und vordefinierter Aktionsdatei einzubauen, um die eigentliche Aktionsdatei stets unverändert zu lassen, ist hingegen absolut spitze. Dasselbe sollte man auch für die Sprachdatei machen.

Eine Sache ist mir generell noch aufgefallen. Selbst wenn man auf die Nummern als Text-ID verzichtet bleibt ein Problem mit den Command-IDs. Wenn Dir jemand seine benutzerdefinierte Aktionsdatei schickt könnten IDs bereits in Benutzung sein, weil Du dieselben vergeben hast. Hier müßte der Aktionsmanager automatisch eindeutige IDs vergeben, wenn es zu einem Konflikt kommt.
Jonas
Senior Member
Senior Member
Posts: 325
Joined: 2003-05-27, 16:59 UTC
Location: Germany
Contact:

Post by *Jonas »

Lefteous wrote:1. Die "direkten Eingabe eigener Titel" ist genau das was nicht erlaubt sein darf. Dadurch wird jegliche Austauschmöglichkeit genommen. Natürlich ist es einfacher eine Textdatei direkt zu bearbeiten, aber das ist genau das was man jetzt auch schon machen kann. Wenn der Aktionsmanager leistungsfähig genug ist, sollte das direkte Bearbeiten überflüssig sein, ohne dass die Transparenz des Formats verloren geht.
Stell Dir vor ein Chinese erstellt ein tolles Menü, das jeder haben will. Jetzt musst Du die Menüdatei ändern und siehst dort, dass der Chinese eigene Titel definiert hat. Dummerweise kannst Du kein chinesisch (falls Du chinesisch kannst denke Dir hier einfach eine andere Dir unbekannte Sprache :mrgreen:). Hat der Chinese jedoch in seinem Menü nur Identifizierer wie CTG_SELECT benutzt, reichen Englischkenntnisse vollkommen und Du musst die Menüdatei nicht verändern, sondern nur die Sprachdatei erweitern.
Ich finde genau die Möglichkeit zu beidem sinnvoll. Wenn der Chinese ein Menü erstellt, das er der Welt zur verfühgung stellen möchte, dann soll er auf die Möglichkeit der Sprachdatei ausweichen. (Um doppel-ID's (egal ob text od. numerisch) zu vermeiden, könnte man wie bereits ganz am Anfang erwähnt, den Zugriff auf die Sprachdatei auch so gestalten: "caption=LNG: 75 'menu_xy'" der TC sucht dann nach 75 in der Sprachdatei menu_xy_DEU.lng)
Wenn der Chinese oder ich ;) aber nur schnell eine Aktion definieren möchte geht das viel einfacher wenn ich den Text direkt in meine eigene Aktionsdatei eingeben kann. 99% aller selbstdefinierten Aktionen brauche schniesslich nur ich selbst.
So können alle die Aktionen, Menüs oder sonstige Aufrufende Elemente einfach für den Privaten gebrauch definiert werden aber es gibt auch dir Möglichkeit sie für eine Veröffentlichung auf Sprachdateien zugreigeifen zu lassen (was grade für die Offiziellen Menüs und Aktionen den Instandhaltungsaufwand enorm reduziert da zB. nur eine Menüdatei verwaltet werden muss und nicht eine für Jede Sprache.)

Lefteous wrote:2. Die Eingabe von Nummern zum Zugriff auf sprachspezifische Texte halte ich für redundant. Zunächst muss, wie in Deinem Beispiel, in der Aktionsdatei eine Nummer definiert werden und dann der dazugehörige Text aus der Sprachdatei gelesen werden. In meiner Lösung muss nur auf die Sprachdatei zugegriffen werden und somit fällt die Aktionsdatei deutlich schlanker aus.
Das verstehe ich ehrlich gesagt nicht. Wo liegt der Unterschied ob ein Text identifier oder ein Numerischer definiert wird? Persönlich ist mir CTG_SELECT auch lieber als 9999. Ich habe mich nur an der TC-Sprachdatei orientiert.
Lefteous wrote:3. Du hast in der Aktionsdatei als Kategorie eine Text-ID benutzt. Somit gibt es gar keinen Identifizierer, sondern nur eine sprachabhängige Beschriftung.
Nicht ganz... ich vermische der einfachen Editierbarkeit von Hand wegen auch hier zugriff auf Sprachdatei (bsp: category=LNG:5555 unter [cm_spreadselection]) mit plaintext für eigene Kategorien.

Lefteous wrote:4. Die Idee eine Hierarchie zwischen benutzerdefinierter- und vordefinierter Aktionsdatei einzubauen, um die eigentliche Aktionsdatei stets unverändert zu lassen, ist hingegen absolut spitze. Dasselbe sollte man auch für die Sprachdatei machen.
Stimmt. Eine zusätzliche Sprachdatei mit benutzer difinierten Einträgen ist eine feine Sache
Lefteous wrote:... bleibt ein Problem mit den Command-IDs. Wenn Dir jemand seine benutzerdefinierte Aktionsdatei schickt könnten IDs bereits in Benutzung sein, weil Du dieselben vergeben hast. Hier müßte der Aktionsmanager automatisch eindeutige IDs vergeben, wenn es zu einem Konflikt kommt.
Daran habe ich auchschon gedacht.... Nach einigem Überlegen bin ich darauf gekommen, das für eigene Aktionen garkeine Command-ID nötig ist. Die C-ID ist ja nur nötig, damit der TC seine internen Aktionen erkennt (und der Alias cm_* damit es auch Menschen besser lsesen können).
Für eigene Aktionen ist das ja überflüssig. Der TC erhält den Aufruf einer Aktion "user_cd_programme". darunter sucht er in der benutzerdefinierten Aktionsdatei und wird fündig. Extrahiert den Command "cd c:\programme" und führt ihn aus. dabei kommt garkeine ID vor!
Anders beim Aufruf einer internen Funktion: Der TC erhält den Aufruf der Aktion "cm_OpenControlls". Erst sucht er danach in der benutzer eigenen Aktionsdatei. Hier findet er nichts. Dann sucht er in der Offiziellen und findet einen Eintrag mit der ID 5555. Diese interne Funtion ruft er dann auf. Dabei fällt auf, die Gesamte Eigenschaft 'id' überfrüssig wird. Bei benutzer eigenen Aktionen steht in der Eigenschaft 'action' der aufzurufende Command (wie zB. cd c:\xxx\yyy) Bei eigenen steht beispielsweise 'action = >5555'. Auf die Art muss man nicht zwischen Aktionen mit und ohne ID unterscheiden und die totalcmd.inc wird auch überflüssig. Ebenso gibt es keine Probleme mit importierten Aktionen, da die externen keine ID benötigen und die internen bei allen dieselbe ID haben.
Ich verwende als command für eine interne Fuktion ">5555" anstelle von "5555" da der TC so nur die erste stelle prüfen muss. Andernfalls müsste er alles auf Nummer oder nicht prüfen da sonst keine Programme ausgeführt werden könnten, die mit einer Zahl beginnen. Ausserdem habe ich an anderer Stelle vorgeschlagen, die internen Commands mit ">cm_*" aus der TC-Commandline aufzurufen. Das passte sich hier nahtlos ein.
User avatar
Lefteous
Power Member
Power Member
Posts: 9536
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Jonas
Ich finde genau die Möglichkeit zu beidem sinnvoll. Wenn der Chinese ein Menü erstellt, das er der Welt zur verfühgung stellen möchte, dann soll er auf die Möglichkeit der Sprachdatei ausweichen. (Um doppel-ID's (egal ob text od. numerisch) zu vermeiden, könnte man wie bereits ganz am Anfang erwähnt, den Zugriff auf die Sprachdatei auch so gestalten: "caption=LNG: 75 'menu_xy'" der TC sucht dann nach 75 in der Sprachdatei menu_xy_DEU.lng)
Wenn der Chinese oder ich aber nur schnell eine Aktion definieren möchte geht das viel einfacher wenn ich den Text direkt in meine eigene Aktionsdatei eingeben kann. 99% aller selbstdefinierten Aktionen brauche schniesslich nur ich selbst.
So können alle die Aktionen, Menüs oder sonstige Aufrufende Elemente einfach für den Privaten gebrauch definiert werden aber es gibt auch dir Möglichkeit sie für eine Veröffentlichung auf Sprachdateien zugreigeifen zu lassen (was grade für die Offiziellen Menüs und Aktionen den Instandhaltungsaufwand enorm reduziert da zB. nur eine Menüdatei verwaltet werden muss und nicht eine für Jede Sprache.)
Ich denke da haben wir zwei unterschiedliche Meinungen. Ich denke es wird schwierig beide Auffassungen auf einen gemeinsamen Nenner zu bringen. Es hat hier auch keinen Sinn dieselben Argumente nochmal hinzuschreiben.
Das verstehe ich ehrlich gesagt nicht. Wo liegt der Unterschied ob ein Text identifier oder ein Numerischer definiert wird? Persönlich ist mir CTG_SELECT auch lieber als 9999. Ich habe mich nur an der TC-Sprachdatei orientiert.
Ich werde versuchen das nochmal zu erklären, wenngleich ich mein obiges Beispiel für selbsterklärend halte. Also nocheinmal: Wenn ein Identifizier wie cm_CD_Pictures benutzt wird weiß der TC wie der Abschnitt in der Sprachdatei heißt in der die sprachabhängigen Texte (z.B. Caption) drinstehen.

Benutzerdefinierte Aktionsdatei:
[cm_CD_Pictures]
ID=720
Category=CTG_GOTO
Icon=%WINDIR%\System32\Shell32.dll,127

Hier siehst Du das die Caption hier gar nicht drinsteht. Bei Dir steht eine Zuordnung zu einer Zahl, die dann in der Sprachdatei gesucht wird. Es ist einfach ein unnötiger Schritt mehr.
Nicht ganz... ich vermische der einfachen Editierbarkeit von Hand wegen auch hier zugriff auf Sprachdatei (bsp: category=LNG:5555 unter [cm_spreadselection]) mit plaintext für eigene Kategorien.
Möchtest Du, dass der TC Aktionen anhand der Beschriftung unterscheidet? Es muss einen eindeutigen Identifizierer geben! Worin besteht der bei Dir? Was passiert, wenn zwei Beschriftungen zweier Aktionen gleich sind? Wie löst Du hier das Problem, dass eine Kategorie zwei oder mehr sprachabhängige Eigenschaften (caption, hint) hat?
Oder soll die Text-ID der Identifizierer sein - dann geht ja alles kreuz und quer.
Daran habe ich auchschon gedacht.... Nach einigem Überlegen bin ich darauf gekommen, das für eigene Aktionen garkeine Command-ID nötig ist. Die C-ID ist ja nur nötig, damit der TC seine internen Aktionen erkennt (und der Alias cm_* damit es auch Menschen besser lsesen können).
Für eigene Aktionen ist das ja überflüssig. Der TC erhält den Aufruf einer Aktion "user_cd_programme". darunter sucht er in der benutzerdefinierten Aktionsdatei und wird fündig. Extrahiert den Command "cd c:\programme" und führt ihn aus. dabei kommt garkeine ID vor!
Anders beim Aufruf einer internen Funktion: Der TC erhält den Aufruf der Aktion "cm_OpenControlls". Erst sucht er danach in der benutzer eigenen Aktionsdatei. Hier findet er nichts. Dann sucht er in der Offiziellen und findet einen Eintrag mit der ID 5555. Diese interne Funtion ruft er dann auf. Dabei fällt auf, die Gesamte Eigenschaft 'id' überfrüssig wird. Bei benutzer eigenen Aktionen steht in der Eigenschaft 'action' der aufzurufende Command (wie zB. cd c:\xxx\yyy) Bei eigenen steht beispielsweise 'action = >5555'. Auf die Art muss man nicht zwischen Aktionen mit und ohne ID unterscheiden und die totalcmd.inc wird auch überflüssig. Ebenso gibt es keine Probleme mit importierten Aktionen, da die externen keine ID benötigen und die internen bei allen dieselbe ID haben.
Ich verwende als command für eine interne Fuktion ">5555" anstelle von "5555" da der TC so nur die erste stelle prüfen muss. Andernfalls müsste er alles auf Nummer oder nicht prüfen da sonst keine Programme ausgeführt werden könnten, die mit einer Zahl beginnen. Ausserdem habe ich an anderer Stelle vorgeschlagen, die internen Commands mit ">cm_*" aus der TC-Commandline aufzurufen. Das passte sich hier nahtlos ein.
Normalerweise brauchen Menüs und Buttons schon Befehls-Ids, aber im Grunde hast Du Recht: Das ist keine Sache, um die sich der Benutzer kümmern muss. Das kann der TC intern regeln. Eine ID für benutzerdefinierte Kommandos muss also nicht in der Aktionsdatei stehen.
Jonas
Senior Member
Senior Member
Posts: 325
Joined: 2003-05-27, 16:59 UTC
Location: Germany
Contact:

Post by *Jonas »

Lefteous wrote:Ich denke da haben wir zwei unterschiedliche Meinungen. Ich denke es wird schwierig beide Auffassungen auf einen gemeinsamen Nenner zu bringen. Es hat hier auch keinen Sinn dieselben Argumente nochmal hinzuschreiben.
Du hast recht. Dir ist eben eine klare und eindeutige Struktur lieber und mir die einfache Bearbeitung von Hand (welche zugegeben durch ein gutes GUI hinfällig wird. Aber ein Editor bietet Dir einige Möglichkeiten die den Rahmen eines GUIs sprengen würden)
Wenn ein Identifizier wie cm_CD_Pictures benutzt wird weiß der TC wie der Abschnitt in der Sprachdatei heißt in der die sprachabhängigen Texte (z.B. Caption) drinstehen.

Benutzerdefinierte Aktionsdatei:
[cm_CD_Pictures]
ID=720
Category=CTG_GOTO
Icon=%WINDIR%\System32\Shell32.dll,127

Hier siehst Du das die Caption hier gar nicht drinsteht. Bei Dir steht eine Zuordnung zu einer Zahl, die dann in der Sprachdatei gesucht wird. Es ist einfach ein unnötiger Schritt mehr.
Jetzt versthe ich.... Deshlab hatte ich auch weiter oben immer wieder probleme mit Deinen Beispielen. Ich habe schlicht Sprach- und Aktionsdatei verwechselt da sie bei Dir die gleiche Grundstruktur aufweisen. Ich war gedanklich auf die TC Sprachdatei genagelt.
Wenn ich das jetzt richtig habe, sollte zu dem Beispiel der Eintrag in der Benutzer eugenen Sprachdatei so aussehen:
[cm_CD_Pictures]
caption="Meine Bilder"
hint="gehe in meim Bildverzeichniss"
...

Du hast die Aktion also in zwei Teile aufgespaltet, den Sprachspezifischen und den Sprachunabhängigen. Ich habe alles am Stück gelassen und die Möglichkeit eingebauf auf beliebige Sprachdateien zurückzugreifen.
Wo wir wieder bei 2 Systemen wären die beide Ihre Vor- und Nachteile haben ;)

Nicht ganz... ich vermische der einfachen Editierbarkeit von Hand wegen auch hier zugriff auf Sprachdatei (bsp: category=LNG:5555 unter [cm_spreadselection]) mit plaintext für eigene Kategorien.
Möchtest Du, dass der TC Aktionen anhand der Beschriftung unterscheidet? Es muss einen eindeutigen Identifizierer geben! Worin besteht der bei Dir? Was passiert, wenn zwei Beschriftungen zweier Aktionen gleich sind? Wie löst Du hier das Problem, dass eine Kategorie zwei oder mehr sprachabhängige Eigenschaften (caption, hint) hat?
Oder soll die Text-ID der Identifizierer sein - dann geht ja alles kreuz und quer.
Nein, Was bei mir Text ist, soll so auch ausgegeben werden. Alles mit dem Prefix 'LNG:' soll in der Sprachdatei nachgeschlagen werden.
Die Kategorie hat meines Erachtens einfach den Zewck, Aktionen mit der selben Kategorie unter dieser zusammenzufassen (für das GUI). Also das Du quasi beim durchsuchen Deiner Aktionen nicht eine lange Liste hast, sondern Unterordner - Die Kathegorien. Jetzt heisst eine Kathegorie zB. "Markieren und Auswahl" (wobei völlig egal ist, ob das so als Klartext in der Aktionsdatei steht oder aus der Sprahdatei geholt wurde) und alle Aktionen bei denen die category-Eigenschafft auch so heisst werden bei der Darstellung im Ordner "Markieren und Auswahl" zusammengefasst. Für mehr ist die Kategorie bei mir nicht gut; sie sorgt lediglich für ein Bisschen Ordnung in einer Liste von weit über 200 Aktionen.
User avatar
Lefteous
Power Member
Power Member
Posts: 9536
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Jonas
Jetzt versthe ich.... Deshlab hatte ich auch weiter oben immer wieder probleme mit Deinen Beispielen. Ich habe schlicht Sprach- und Aktionsdatei verwechselt da sie bei Dir die gleiche Grundstruktur aufweisen. Ich war gedanklich auf die TC Sprachdatei genagelt.
Wenn ich das jetzt richtig habe, sollte zu dem Beispiel der Eintrag in der Benutzer eugenen Sprachdatei so aussehen:
[cm_CD_Pictures]
caption="Meine Bilder"
hint="gehe in meim Bildverzeichniss"
...
Schön das ich es doch noch geschafft habe mich verständlich zu machen. Hatte ich denn die einzelnen Dateien in meinem Beispiel nicht eindeutig genug gekennzeichnet? Naja egal, Hauptsache die Mißverständnisse wurden jetzt ausgeräumt. Der Ausschnitt aus der Sprachdatei sieht genauso aus wie in meinem ausführlichen Beispiel oben - genau so ist es richtig.
Du hast die Aktion also in zwei Teile aufgespaltet, den Sprachspezifischen und den Sprachunabhängigen. Ich habe alles am Stück gelassen und die Möglichkeit eingebauf auf beliebige Sprachdateien zurückzugreifen.
Wo wir wieder bei 2 Systemen wären die beide Ihre Vor- und Nachteile haben
Man kann bei meiner Idee ebenfalls auf beliebige Sprachdateien zugreifen, oder siehst Du da irgendeine Einschränkung?
Nein, Was bei mir Text ist, soll so auch ausgegeben werden. Alles mit dem Prefix 'LNG:' soll in der Sprachdatei nachgeschlagen werden.
Die Kategorie hat meines Erachtens einfach den Zewck, Aktionen mit der selben Kategorie unter dieser zusammenzufassen (für das GUI). Also das Du quasi beim durchsuchen Deiner Aktionen nicht eine lange Liste hast, sondern Unterordner - Die Kathegorien. Jetzt heisst eine Kathegorie zB. "Markieren und Auswahl" (wobei völlig egal ist, ob das so als Klartext in der Aktionsdatei steht oder aus der Sprahdatei geholt wurde) und alle Aktionen bei denen die category-Eigenschafft auch so heisst werden bei der Darstellung im Ordner "Markieren und Auswahl" zusammengefasst. Für mehr ist die Kategorie bei mir nicht gut; sie sorgt lediglich für ein Bisschen Ordnung in einer Liste von weit über 200 Aktionen.
Klar Kategorien haben vorallem den Sinn und Zweck Ordnung reinzubringen. Ohne Identifizierer wie CTG_SELECT wirst Du aber keine schönen austauschbaren Menüdateien hinbekommen - mit Nummern wird das ziemlich benutzerunfreundlich.
Jonas
Senior Member
Senior Member
Posts: 325
Joined: 2003-05-27, 16:59 UTC
Location: Germany
Contact:

Post by *Jonas »

Lefteous wrote:Man kann bei meiner Idee ebenfalls auf beliebige Sprachdateien zugreifen, oder siehst Du da irgendeine Einschränkung?
Ich habe nichts gefunden wo der Chinese sagen kann aus welcher Sprachdatei seine Texte genommen werden können... So wie Ich Dich verstanden habe, besteht der Aktionspart (abgesehen von den Offiziellen) aus zwei Dateien, die in ihrer Struktur gleich sind. Jeweils eine Sektion mit dem Namen der Aktion und in der einen alle Sprachabhängigen Eigenschaften der Aktionen und in der anderen alle Sprachunabhängigen.
Ich verwalte alle Eigenschaften der Aktionen in der selben Datei und greife über Schlüsselworte auf die Sprachdatei(en) zu. Der grösste Vorteil darin liebt bei den Maintainern des TC's bzw. dessen Sprachdateien, da es in jedem Falle nur eine Menüdatei und nur eine offizielle Aktionsdatei gibt und alle zu übersezenden Texte in je einer offiziellen Sprachdatei zusammengefasst werden.
Klar Kategorien haben vorallem den Sinn und Zweck Ordnung reinzubringen. Ohne Identifizierer wie CTG_SELECT wirst Du aber keine schönen austauschbaren Menüdateien hinbekommen - mit Nummern wird das ziemlich benutzerunfreundlich.
Wenn ich für mich selbt ein paar aktionen schreibe, werde ich die Kategorie direkt eingeben und mir das ganze Sprachzeug spaaren (oder um nicht jedes mal "Eigene Kategoire Jonas" eingeben zu mössen das ganze unter einer einprägsamen Zahl wie '1' in "jonas_DEU.lng" ablegen; bzw. es gleich per c 'n p übernehmen).
Wer es auf austauschbare Menüs anlegt die veröffentlicht werden sollen der verwendet bei mir eben zb. "LNG: 9999" oder "LNG: 12 'chinesenmenu'" wenn die Texte nicht aus der offiziellen sondern aus chinesenmenu_DEU.lng geholt werden sollen. Du hast zwar recht, das 'CTG_SELECT' einprägsamer ist als eine Nummer, aber der TC verwendet zZ. eben Nummern und keine Aliase. Sollte das im Rahmen der Aktionen geändert werden, würde mein Beispiel auch "category=LNG: CTG_SELECT" heißen. Also die Nummern sind in meinen Beispielen einfach historisch bedingt. Text-aliase wären auch mir lieber.
User avatar
Lefteous
Power Member
Power Member
Posts: 9536
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Jonas
Ich habe nichts gefunden wo der Chinese sagen kann aus welcher Sprachdatei seine Texte genommen werden können...
Die Frage aus welcher Sprachdatei ist eine Konfigurationsfrage und hat nichts mit dem Aktionensystem zu tun.
So wie Ich Dich verstanden habe, besteht der Aktionspart (abgesehen von den Offiziellen) aus zwei Dateien, die in ihrer Struktur gleich sind. Jeweils eine Sektion mit dem Namen der Aktion und in der einen alle Sprachabhängigen Eigenschaften der Aktionen und in der anderen alle Sprachunabhängigen.
Hilfe nein! In meinem Beispiel steht doch alles drin! Der zweite Teil, wie Du ihn nennst, ist die Sprachdatei.
Ich verwalte alle Eigenschaften der Aktionen in der selben Datei und greife über Schlüsselworte auf die Sprachdatei(en) zu. Der grösste Vorteil darin liebt bei den Maintainern des TC's bzw. dessen Sprachdateien, da es in jedem Falle nur eine Menüdatei und nur eine offizielle Aktionsdatei gibt und alle zu übersezenden Texte in je einer offiziellen Sprachdatei zusammengefasst werden.
bei mir gibt es genauso viele Dateien... (siehe Beispiel)
Text-aliase wären auch mir lieber
dann solltest Du es auch so vorschlagen.
Jonas
Senior Member
Senior Member
Posts: 325
Joined: 2003-05-27, 16:59 UTC
Location: Germany
Contact:

Post by *Jonas »

Lefteous wrote:Die Frage aus welcher Sprachdatei ist eine Konfigurationsfrage und hat nichts mit dem Aktionensystem zu tun.
Wenn ich verschiedene Sprachdateien kombinieren möchte schon. Wenn Du nur eine einzige Sprachdatei zulässt, muss ich, wenn ich zB. ein Menü oder ein Satz von Aktionen herunterlade die Entsprechenden Spracheinträge in meine Sprachdatei kopieren (auf die Gefahr hin, das sie beim nächsten TC-Update verloren gehen). Wenn auf verschiedene Sprachdateien zugegriffen werden soll, muss angegeben werden aus welcher die Daten geholt werden sollen. So wird die offizielle nicht angefasst und sit so update-sicher.
So wie Ich Dich verstanden habe, besteht der Aktionspart (abgesehen von den Offiziellen) aus zwei Dateien, die in ihrer Struktur gleich sind. Jeweils eine Sektion mit dem Namen der Aktion und in der einen alle Sprachabhängigen Eigenschaften der Aktionen und in der anderen alle Sprachunabhängigen.
Hilfe nein! In meinem Beispiel steht doch alles drin! Der zweite Teil, wie Du ihn nennst, ist die Sprachdatei.
Gut, dann formuliere ich es anders: Du lagers die Eigenschaften wie zB. "caption" in die Sprachdatei aus. Aber dahintetr steht das gleiche. Ich habe dich schon so verstanden das der Sprachabhäbnige Teil die Sprachdatei ist.
Ich verwalte alle Eigenschaften der Aktionen in der selben Datei und greife über Schlüsselworte auf die Sprachdatei(en) zu. Der grösste Vorteil darin liebt bei den Maintainern des TC's bzw. dessen Sprachdateien, da es in jedem Falle nur eine Menüdatei und nur eine offizielle Aktionsdatei gibt und alle zu übersezenden Texte in je einer offiziellen Sprachdatei zusammengefasst werden.
bei mir gibt es genauso viele Dateien... (siehe Beispiel)
... vorrausgesetzt es gibt in deiner Sprachdatei eine sektion zB. [global] die den jetzigen Inhalt der TC sprachdatei enthält, als Dinge wie "kopiere %s nach %s"
Text-aliase wären auch mir lieber
dann solltest Du es auch so vorschlagen.
Ich habe mehrmals erwähnt das die Zahlen lediglich aus der Nutzung der TC-Sprachdateien stammen.

___________________


Eigentlich streiten wir uns hier um eine Sache für die wir nicht im geringsten zuständing sind.... Ich schlage vor, wir lassen die Disskution über die Implementierung an dieser Stelle ruhen. Wir haben 2 verschiedene Ansätze mit jeweils anderen Vor- und Nachteilen aufgezeigt, aber letztendlich lassen wir es Christians Sorge sein, was in welche Dateien gepackt wird. Konzentrieren wir uns lieber auf die Eigenschhaften eines einheitlichen Aktionssystems.
Ich fasse zusammen:

*) Alle Aktionen werden zu einem einheitlichen und zentral verwalteten System zusammengefasst. Mit "Aktionen" sind sowohl interne Funktionen wie zB. ein Kopiervorgang, als auch der Aufruf externen Programmen deren Parameter von TC gestellt werden können.

*) Aktionen werden von beliebig vielen sogenannten Aufrufenden Elementen angesprochen. Aufrufende Elemente können zB. Menüeinträge oder Bottuns sein. Es sollte einfach sein, weitere Aufrufende Elemente einzubauen. schön wäre zB. ein Bedingungsvolles Kontextmenü oder ein Timer.

*) Es existiert ein globaler hotkey-deamon als aufrufendes Element. Hier werden alle Tastenkürzel verwaltet welche die entsprechenden Aktionen aufgerufen.

*) Aktionen müssen von den Aufrufenden Elementen unabhängig sein. Eine Aktion die über das Menü aufrufbar ist, muss es auch von der Buttonbar oder der Dir-Hotlist aus sein.

*) Zur einfachen Organisation und Übersicht sind die Aktionen in Kategorien zusammengefasst. Diese sollen wie Unterordner verstanden werden um schneller die gewünschte Aktion zu finden. (der jetzige Zustand mit einer einzigen Liste für weit über 200 cm_* ist extremst unpraktisch)

*) Die Eigenschaften der Aktionen sollen global benutzt werden. Der Titel zB. für den Menüeintrag genauso wie für Buttonbar. Eine Änderung einer Eigenschaft wirkt sich auf alle Aufrufende Elemente aus.

*) Alle Aktionen sollen komplett lokalisiert werden.

*) Der Benutzer soll einfach neue Aktionen definieren können bzw. die Eigenschaften bestehender Aktionen verändern können.

*) Der TC soll einfache Aktionen (wie zB. ein "cd xxx\yyy" für die Directory-Hotlist) ohne einen Dialog, komplexere wie zB. die jetzige Bottunbar, mit Dialog generieren.

*) Aktionen müssen Update-sicher sein. Gemeint ist damit, das sowohl selbst Definierte wie auch Änderungen an bestehenden Aktionen auch nach dem einspielen einer neuen TC-Version erhalten bleiben.

*) Aktionen müssen austauschbar sein. So ist es zB. möglich, seinem Kollegen ein Satz von Aktionen zur verfühgung zu stellen der auch mit seinem TC lauffähig sind. Dafür sind auch benutzerdefinierte Sprachdateien nötig.

*) Aktionen brauchen folgende Eigenschaften, wobei einige bei nicht vorhandener Definition bei Bedarf duch ein Default ersetzt werden können (1) oder nicht zwingend benötigt werden (2)

-) Eindeutiger Name (wie zB. 'cm_OpenControlls' oder 'user_cd_Programme')
-) Titel (caption), welcher zB. in Menüs angezeigt wird oder auch als Tooltip (wenn nicht seperat vorhanden) in der Buttonbar.
-) Tooltip (hint), wird falls vom Aufrufenden Element unterstützt bei Mouse-Over eingeblendet (2)
-) Symbol (icon) (1)
-) Beschreibung, beschreibt die Aktion im Verwaltungsdialog, kann auch als Direkthilfe (waht's this) verwendet werden
-) Kommando (action), die ID einer internen Funktion oder ein externes Programm
-) Parameter, TC-eigene Platzhalter wie zB. %P werden ausgewertet und anschliessend an das Kommando übergeben (2)
-) Startpfad, TC-eigene Platzhalter wie zB. %P werden ausgewertet (2)
-) Kategorie, um ähnliche Aktionen der Übersichtlichkeit wegen zusammenzufassen

--
So, das sind im Meisten falle Deine Ideen, Teils von mir etwas angeändert wie zB. das der Hotkey keine Eigenschaft der Aktion selbst ist sondern auch ein aufrufendes Element. Ich denke das hier sollte Gegenstand dieser Disskution sein anstelle das wir und in Streitereien über die implementierung verwickeln :)
User avatar
Lefteous
Power Member
Power Member
Posts: 9536
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Jonas

In Sachen Sprachdateien: Ich gebs auf. Nichts für ungut, aber so schwer verständlich finde ich mein Konzept gar
nicht.
Eigentlich streiten wir uns hier um eine Sache für die wir nicht im geringsten zuständing sind
Wieso, das ist doch ein Diskussionsforum hier, oder?
Ich schlage vor, wir lassen die Disskution über die Implementierung an dieser Stelle ruhen.
... es folgt ein riesiger Text mit einer Zusammenfassung und zumindest einem neuen Vorschlag. Ich finde es aber toll, dass Du soviel Energie in diesen einzigen Thread steckst. Man sieht, dass Dir das Thema wirklich wichtig ist. Da haben wir etwas gemeinsam.

Implementierung? Naja, ich denke wir diskutieren das Design auf Dateiebene und zuletzt habe ich vergeblich versucht Dir zu erklären, wie ich mir das vorstelle.
Es existiert ein globaler hotkey-deamon als aufrufendes Element. Hier werden alle Tastenkürzel verwaltet welche die entsprechenden Aktionen aufgerufen.
Kommst Du irgendwie aus der Linux-Welt? :o
Jonas
Senior Member
Senior Member
Posts: 325
Joined: 2003-05-27, 16:59 UTC
Location: Germany
Contact:

Post by *Jonas »

Lefteous wrote:Man sieht, dass Dir das Thema wirklich wichtig ist. Da haben wir etwas gemeinsam.
Dieses einheitliche Aktionssystem steht zZ. auf meiner Wunschliste für grössere Neuerungen ganz oben! (gefolgt von dem vierten Plugin-typ für Suche und MRT, einer Makro-Sprache (bzw. zumindest der Möglichkeit mehrere commands zusammenzufassen), dem TC als cFileDialog, Container - und Tabs komen ja sicher mit TC6)
Die Vorteile eines solchen Systems sind eben einfach enorm, sowohl für Christian und seine Übersetzer als auch für uns User....
Ausserdem bin ich sicher das wir nicht die einzigen sind die sich eine vereinheitlichung des Aktionssystems wünschen (nur sind die meissten wohl zu faul das alles hier zu lesen ;))
Kommst Du irgendwie aus der Linux-Welt? :o
Nun ja, sagen wir ich habe Linux als Betriebsystem einfach lieber und benutze es auch für den grössten Teil meiner Arbeit. Leider komme ich an ein Bisschen Windows nicht vorbei und so probiere ich mir das so angenehm wie möglich zu gestalten. Der TC ist mein grösstes Hilfsmittel dabei :)
Last edited by Jonas on 2003-11-25, 15:04 UTC, edited 1 time in total.
Jonas
Senior Member
Senior Member
Posts: 325
Joined: 2003-05-27, 16:59 UTC
Location: Germany
Contact:

Post by *Jonas »

Ich hätte noch eine weitere Idee die das System noch mächtiger machen würde: Plugins selbst können Aufrufende Elemente sein. Dazu benötigt das jeweilige SDK eine zusätzliche Callback-Funktion welche als Parameter den eindeutigen Namen der Aktion erhält.
So könnten Scripting-fähigkeiten über ein Batch-Interpreter-Plugin realisiert werden....
User avatar
Lefteous
Power Member
Power Member
Posts: 9536
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

Ich habe noch eine neue Idee zu dem Thema. Es wäre überaus praktisch, wenn man nicht nur wie jetzt Buttons kopieren und einfügen kann, sondern in Zukunft auch komplette Aktionen. Im Augenblick klappt das nur mit Buttons. So könnte man dann z.B. einen Button kopieren oder ausschneiden und dann im Menü wieder einfügen oder umgekehrt.
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Hübsch wäre auch, wenn man in den Menüs (optional) auch kleine icons mit anzeigen könnte. So wie z.B. in Word, wo man angeben kann, ob fü einen Menüpunkt den Text, das Icon oder beides anzeigen möchte.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Post Reply