Copyright © 2004 Kommander Entwicklungs-Team
Es ist erlaubt, dieses Dokument zu kopieren, zu vertreiben und/oder zu ändern gemäß den Bedingungen der GNU Free Documentation Licence, Version 1.1 oder irgend einer späteren Version, wie sie von der Free Software Foundation veröffentlicht wurde; ohne die invarianten Abschnitte, ohne Texte auf der vorderen Umschlagseite, und ohne Texte auf der hinteren Umschlagseite. Eine Kopie der Lizenz findet sich im Abschnitt "GNU Free Documentation License".
Kommander ist ein Werkzeuge, das die Entwicklung dynamischer GUI-Dialoge , die, abhängig von ihrem Status, Textstücke generieren, ermöglicht. Diese Textstücke können eine Befehlszeile für ein Programm, jede Art von Quelltext, Geschäftsdokumente, die eine Menge wiederkehrenden oder vorgefertigten Text enthalten usw. sein. Der als Ergebnis generierte Text kann als Konsolenprogramm ausgeführt (davon kommt der Name „Kommander“), in eine Datei geschrieben, an ein Skript zur Weiterverarbeitung übergeben oder sonst in buchstäblich jeder vorstellbaren Art verwendet werden. Und das Beste daran: es ist keine einzige Zeile Quelltext nötig!
Inhaltsverzeichnis
Kommander ist ein visuelles Dialog-Erstellungswerkzeug, das auch volle Fensteranwendungen erstellen kann. Das Hauptziel ist, so viel Funktionalität wie möglich zu bieten, ohne dass eine Skriptsprache benutzt werden muss. Das wird mit folgenden Möglichkeiten erreicht:
Anweisungen werden mit einem „@“ eingeleitet, wie z. B. @widgetText. Sie haben besondere Fähigkeiten, wie Wert eines Bedienelementes bestimmen, Alias, globale Variable, Funktionen und mehr.
DCOP Integration erlaubt Kommander-Dialogen die Steuerung und auch die Reaktion auf Interaktionen mit anderen KDE-Anwendungen. Das ist eine sehr mächtige Funktionalität!
Signale und Slots sind weniger intuitiv für neue Benutzer. Wie die Vorgangsweise dazu im ersten großen Release sein wird, wird noch geprüft. Derzeit wird ein begrenztes Ereignismodell für Schaltflächen oder Bedienelementänderungen geboten. Kombiniert mit „Population Text“ ist auch dies sehr mächtig.
Die Kernfähigkeit von Kommander-Dialogen ist die Bindung von Text (Kommander-Text) an ein Bedienelement. Wenn es @Bedienelement1 und @Bedienelement2 gibt und sie Eingabefelder sind, kann Kommander zur Anzeige ihres Inhaltes mittels @widgetText in ihrem Kommander-Textbereich gebracht werden. Gibt man Hallo in @Bedienelement1 und Welt in @Bedienelement2 ein, kann eine Schaltfläche mit dem Inhalt "Meine erstes @Bedienelement1 @Bedienelement2 Programm", von der Konsole gestartet, Mein erstes Hallo Welt Programm anzeigen
Hoffentlich wird daraus schon das enorme Potential sichtbar. Kommander ermöglicht ein viel schnelleres Entwicklungsmodell für einfache Anwendungen, weil nicht eine Programmiersprache, sondern ein natürliches Konzeptmodell zu Grunde liegt. Computersprachen liegen als Schicht zwischen Konzept und Implementation und machen Dinge machmal schwierig. Kommander versucht, diese Schicht zu minimieren.
Kommander ist so weit wie möglich auf Standards aufgebaut. Es nützt das Qt™-Entwicklungsmodell und erstellt *.ui Dateien, die es zu *.kmdr umbenennt. Es kann jedes KDE-Bedienelement mit Hilfe von Plugins importieren.
Kommanders anderer hervorstechender Faktor ist die Art, mit dem Erfordernis einer Sprache umzugehen. Programmiersprachen sind wunderbar, haben aber die Tendenz, eigene Dogmas zu verlangen und ihre Anhänger suchen oft einen Zugang zu GUI-Gestaltung in einer integrierten Entwicklungsumgebung. Dennoch ist die Akzeptanz solcher IDEs auf Leute beschränkt, die diese Sprache für bestimmte gewünschte Möglichkeiten brauchen. Es ist aber unvernünftig zu erwarten, dass die Leute ein Duzend Sprachen akzeptieren, um alle Möglichkeiten zu haben. Kommander-Dialoge sind sprachneutral und in jeder Skriptsprache erweiterbar und verhelfen Kommander in eine einmalige Position für weite Verbreitung. Es können einem Dialog viele Skriptsprachen gleichzeitig verwendet werden und die Anwendungen können von anderen Leuten mit anderer als des ursprünglichen Entwicklers Skriptsprache schrittweise konvertiert und erweitert werden. Neue Bedienelemente und Möglichkeiten können sofort von allen verfügbaren Sprachen benutzt werden.
Wir hoffen, dass Kommander von der Entwicklergemeinde in seinem Wert erkannt und unterstützt wird, damit das Potential, das es bietet, nutzbar wird. Unser Ziel ist, Kommander nützlich für den Anfänger zum Ausbauen und Verbinden seiner Anwendungen zu machen und gleichzeitig sollte es ein gutes Prototyping-Werkzeug werden. Es leistet das Versprechen von Open Source in ganz neuer Art. Die Leute können unsere GPL-Programme erweitern, aber nur sehr wenige haben die Fähigkeiten dazu. Mit Kommander gibt es nun einen beträchtlichen Vervielfältiger. Wir nutzten es schon in Quanta Plus für Bereiche, in denen wir Erweiterbarkeit wünschen.
Wir hoffen, Sie erfreuen sich an Kommander. Bitte helfen Sie durch Fehlerberichte und Beispieldialoge ebenso wie mit Verbesserungsvorschlägen. Sie sind eingeladen, auf unserer Benutzerliste für Hilfe bei der Entwicklung von Kommander-Anwendungen http://mail.kdewebdev.org/mailman/listinfo/kommander teilzunehmen
Beste Grüsse vom Kommander-Entwickler Team!
Kommander wurde ursprünglich rund um ein einfaches Konzept entworfen, das sich als revolutionär unter den visuellen Entwicklungswerkzeugen entpuppt hat. Typischerweise ermöglichen diese Werkzeuge die Erstellung von Dialogen und möglicheweise von Benutzeroberflächen. So eine Benutzeroberfläche hat Menüs, Werkzeugleisten, eine Statusleiste und den Anwendungsbereich. Dialoge sind Kindfenster ohne Menüs und tragen ihren Namen weil ihr Zweck ist, „in Dialog“ mit dem Benutzer zu treten oder mit ihm Informationen auszutauschen. Die Elemente auf einem Dialog werden „Bedienelemente“ genannt und man verknüpft das Programm und diese Bedienelemente. Kommander ist anders, weil es von vorneherein nicht programmiert. Es benutzt ein Konzept der Verknüpfung von Text mit den Bedienelementen im Dialog. Ursprünglich wurde dies „Assoziierter Text“ genannt, nun heißt es einfach „Kommander-Text“. Bedienelemente in Kommander-Dialogen können den Inhalt anderer Bedienelemente durch Referenz enthalten und ein Bedienelement kann seinen eigenen Inhalt referenzieren, mittels „Anweisung“, die so aussieht: @BedienelementText. Anweisungensind Befehle mit besonderer Bedeutung in Kommander. Es kann also, wenn ein Dialog mit zwei einzeiligen Eingabefeld-Bedienelementen, dem ersten „Vorname“ und dem zweiten „Nachname“, erstellt wurde, eine Schaltfläche mit dem Kommander-Text „Mein Name ist @Vorname @Nachname“ hinzugefügt werden. Zuerst müßte Vor- und Nachname ausgefüllt werden, dann könnte Kommander die Referenz benutzen. Von der Konsole gestartet, könnte die ganze Zeichenkette ausgegeben werden. Es würde den Vornamen so erhalten: @Vorname -> hole das Bedienelement Vorname (@Vorname) -> @BedienelementText -> hole den Inhalt des einzeiligen Eingabefeldes. Wenn dort „Eric“ eingegeben worden wäre, liefert @Vorname also „Eric“.
Das ist, vereinfacht, der Kern von Kommander. Interessant ist, was man daraus machen kann. Zunächst sollte angemerkt werden, dass, verglichen mit der Art von auf Programmiersprachen gestützten Werkzeugen, Kommander keine Programmanweisungen für solche Operationen braucht. Das macht Kommander schnell für Entwickler. Für Endbenutzer ist es einfacher, als Programmiersprachen zu lernen. Für Jedermann bedeutet es, die Aufgabe in den Mittelpunkt zu stellen, statt die Sprachreferenz ewig mitzuführen. Anfangs, wenn Leute mit einem Werkzeug wie Kommander in Berührung kommen, ist die erste Frage „ Wofür kann ich dieses Werkzeug nutzen?“ Es stellt sich heraus, dass der Umgang mit Zeichenketten allgegenwärtig ist.
Also, was kann Kommander leisten? Hier die Liste mit grundlegenden Operationen. Kommander kann:
Zeichenketten an das aufrufende Programm über stdout weitergeben.
Programme aufrufen.
DCOP benutzen um mit KDE-Programmen zusammenzuarbeiten
Wenn sie keine Programmierer sind, möchten Sie die Erklärung allgemein verständlich. Erstens, wenn Kommander von der Konsole gestartet wird, ist die Konsole das aufrufende Programm. Es besteht eine Eltern-Kind Beziehung hier. Durch die Standardausgabe (stdout), so genannt, weil es auch eine Fehlerausgabe gibt, des Kindprogrammes kann eine Nachricht zur Konsole geschickt werden. Dies ist interessant, weil Programme wie Quanta Plus die Standardausgabe nutzen, um Information von Programmen, dies sie starten, zu erhalten. Auf diese Weise können Kommander-Dialoge ihre Text-Ausgabe direkt an den Editor von Quanta Plus lierfern, wenn sie aus Quanta Plus gestartet wurden. Das bedeutet, Kommander-Dialoge können für die Erweiterung eines Programmes genutzt werden.
Der zweite Fall ist der Aufruf einer ausführbaren Datei. Jedes Programm, das auf ihrem Rechner läuft, ist ausführbar. Auch ein Skript-Programm, das von einem Interpreter ausgeführt wird, ist, technisch gesehen, ausführbar. Kommander kann Befehle wie auf der Konsole ausführen, auch wenn vom Menü gestartet. So würde beispielsweise, wenn es The GIMP starten soll, eine Schaltfläche die Beschriftung „The Gimp“ tragen und eine Anweisung wie: @exec(gimp) enthalten. Das genügt, um bei Benutzung The GIMP starten zu lassen. Man könnte auch „ls -l“ ausführen lassen, aber das Ergebnis wäre nur von einer Konsole aus sichtbar.
Der dritte Fall ist besonders interessant. DCOP ist die Abkürzung für KDEs Desktop COmmunication Protocol und ist sehr leistungsfähig. Starten Sie das kdcop-Programm und sehen Sie die Liste an. Jede standardkonforme KDE-Anwendung hat Dinge in DCOP und die fortschrittlich gestalteten benutzen es intensiv. Mit DCOP ist die Suche nach Informationen jeder Art ebenso wie die Einstellung von Bedienelement-Werten und mehr möglich. Ein Teil dieses Handbuches beschreibt die Verwendung von DCOP. Kommander kann DCOP-Anforderungen senden als auch selbst über DCOP gesteuert werden. Von der Kommandozeile können DCOP-Anfragen an jedes KDE-Programm gesendet werden. Wo ist also die Verbesserung? Bei einer großen Anzahl von DCOP-Anforderungen über die Kommandozeile wird es sehr langsam, wenn z. B. Schleifen hunderte Mal ausgeführt werden. Hier hat Kommander eine @dcop Anweisung, weil das etwa 1000 Mal schneller läuft. Weil Kommander DCOP senden und empfangen kann, ist es möglich, damit Kommander zu skripten. Daher haben wir auch eine lokale DCOP Anweisung, @ldcop, um weniger für das Absetzen eines Befehls eingeben zu müssen.
Sind das alle Kernkonzepte in Kommander? Nein, aber es sollte für das grundsätzliche Verständnis, wie es funktioniert, hilfreich sein, sodass es nicht wie eine Fremdsprache wirkt. Es gibt aber noch mehr. Mit Signalen und Slots behandelt Kommander Ereignisse. Ein Ereignis in einem Programm meint „irgendetwas geschah“, wie die Schaffung eines Bedienelementes oder die Änderung des enthaltenen Textes. Diese Änderungen „senden Signal aus“, die mit einem empfangenden Slot verbunden werden können, der dann etwas tut, wenn das Ereignis auftritt. Eine Anwendung in Kommander ist „Population-Text“, das bei Aufruf ein Bedienelement mit Text befüllt. Ebenso wie Kommander-Text kann Population-Text Zeichenketten oder Skripte enthalten.
Das sollte die Basis für den Beginn mit Kommander legen. Wir versuchen die Anzahl der Anweisungen niedrig zu halten und verwenden häufig DCOP. Die Idee ist, die Mächtigkeit von Kommander so schlank und einheitlich wie möglich zu gewährleisten. Es kann jede Skriptsprache in Kommander eingebaut werden, sogar mehrere gleichzeitig in einem Dialog. Im weiteren Bereich der Dokumentation wird vorausgesetzt, dass die hier präsentierten Konzepte und Begriffe bekannt sind. Sehr nützlich für das Verständnis, was mit Kommander möglich ist, sind auch die Beispiele und Anleitungen.
Der Editor basiert auf Qt™ Designer, eine Design- und Implementierungswerkzeug für Benutzeroberflächen von Trolltech. Wir haben Qt™ Designer in folgender Weise angepasst:
Die Oberfläche ist viel einfacher
Eigen Bedienelemente hinzugefügt
Die Fähigkeit, Kommander-Text zu verwalten, eingebaut
Weitere Änderungen an der Oberfläche
Wer sich im Qt™ Designer auskennt, für den ist die Benutzung von Kommander Editor geradezu trivial.
Werkzeugleisten enthalten Symbole für den Schnellzugriff auf eine Vielzahl von Funktionen.
Die Dateiübersicht zeigt alle Dateien an. Mit dem Suchfeld kann schnell zwischen Dateien gewechselt werden.
Der Objekt-Explorer liefert eine Übersicht der Beziehungen zwischen den Bedienelementen eines Dialoges. Dies ist nützlich beim Auswählen von Bedienelementen in einem Dialog mit komplexen Zusammenhängen.
Im Eigenschaften-Editor kann das Aussehen und Verhalten eines Bedienelementes verändert werden.
Der Dialog-Editor dient zur Erstellung und Bearbeitung von Dialogen.
Erstellt einen neuen Dialog
Einen bestehenden Dialog im Dateisystem suchen
Schließt den aktuellen Dialog
Speichert den aktuellen Dialog
Speichert den aktuellen Dialog mit einem anderen Namen
Speichert alle geöffneten Dialoge
Liste der zuletzt geöffneten Dateien. Diese Liste ändert sich mit jeder geöffneten Datei, die noch nicht darin enthalten war, wobei die ältest geöffnete Datei herausfällt.
Beendet Kommander
Nimmt die zuletzt ausgeführte Aktion zurück.
Stellt die zuletzt rückgängig gemachte Aktion wieder her.
Schneidet die aktuelle Auswahl aus und überträgt den Inhalt in die Zwischenablage.
Kopiert die Auswahl in die Zwischenablage.
Fügt den Inhalt der Zwischenablage an der aktuellen Cursorposition ein.
Löscht das aktuelle Element.
Wähle alle Elemente des aktuellen Dialoges aus.
Überprüft die Einzigartigkeit aller Tastenkürzel.
Zeigt ein Bearbeitungsfenster für die Erstellung und Bearbeitung von Funktionen und Slots an.
Zeigt den Anzeige- und Bearbeitungsdialog für Verbindungen an.
Öffnet den Dialog für die Formular-Einstellungen.
Zeigt den Dialog Programm-Einstellungen an.
Schließt den aktuellen Dialog.
Schließt alle Dialoge.
Startet das Hilfe-System von KDE mit der Kommander-Hilfe (diesem Dokument).
Ändert den Mauscursor zu einer Kombination von Zeiger und Fragezeichen. Das Klicken auf ein Element innerhalb von Kommander öffnet ein Hilfefenster, das die Funktion des Elementes beschreibt (sofern es Hilfe für das bestimmte Element gibt).
Öffnet den Dialog für Problemberichte, in dem Sie Fehler und Wünsche berichten können.
Zeigt Versions- und Autoreninformationen an.
Zeigt Versionsinformation und Grundsätzliches zu KDE an.
Der Executer, benannt kmdr-executor, führt Kommander-Skripte aus. Er ladet .kmdr
Dateien und erzeugt dynamische, voll funktionale Dialoge.
C++ Entwickler können leicht die KmdrDialogInstance Klasse in ihren C++-Programmen nutzen und damit die Funktionalität in ihre Anwendungen einbetten, sodass kein Bedarf besteht, das eigenständige Executor-Programm auszuführen. Für Standarddialoge ist der Aufwand für die Dialogerstellung minimal, aber die Erstellung der KDE-Anwendung beim Start kann den Dialog für etwa eine Sekunde verzögern.
Die Grundbausteine von Kommander-Dialogen sind die Bedienelemente. Sie entsprechen den Bedienelementen in der Qt™ oder den KDE-Bibliotheken, außer das sie als Zusatzfunktionalität eine „Verbindung mit Text“ haben. Ein Text ist mit dem jeweiligen Status (Zustand) des Bedienelementes oder seines Population Slots verbunden. Die Anzahl der möglichen Zustände hängt vom Bedienelement ab. Wenn es nur einen gibt, wird er Standard genannt.
Bedienelement Text
Der Dialog hat zwei spezielle Zustände für Kommander-Text. Sie heißen Initiate und Destroy. Sie werden ausgeführt, wenn der Dialog geschaffen oder weggeworfen wird. Dies schützt gegen „race“-Probleme beim Öffnen und bedeutet, dass keine besonderen Vorkehrungen beim Beenden getroffen werden müssen.
Ein Behälter zum Organisieren von Schaltern in einer Gruppe. Zusätzlich kann mit der title-Eigenschaft ein Titel dafür vergeben werden. Der Rahmen kann mit der lineWidth-Eigenschaft angepasst werden. Die Schaltergruppe kann mit der exclusive-Eigenschaft auf exklusiv einen gesetzt werden. Das bedeutet, wenn einer der Schalter aktiviert ist, sind alle anderen automatisch ausgeblendet, mit der Ausnahme von Auswahl-Knöpfen, die immer exklusiv sind, auch wenn die Gruppe nicht auf exclusive gesetzt ist. Auswahlknöpfe können mit der Eigenschaft radioButtonExclusive auf nicht exklusiv gesetzt werden. (Es ist nicht sicher, dass diese Eigenschaft derzeit funktioniert.)
Die Schaltergruppe hat einen Status, Standard.
Der Bedienelement-Text für eine Schaltergruppe ist die Text-Verbindung für jeden Schalter in der Reihenfolge, wie sie in der Schaltergruppe erscheinen.
Ein Schalter, der angehakt werden kann. Es ist auch ein halb-angehakt möglich, wenn die tristate-Eigenschaft aktiviert (wahr) ist. Die mit dem Ankreuzfeld verbundenen Beschriftung wird in der text-Eigenschaft festgelegt. Mit Aktivierung der checked-Eigenschaft wird das Ankreuzfeld von Beginn an angehakt.
Ein Ankreuzfeld hat 3 Zustände, checked, semichecked und unchecked.
Der Bedienelement-Text für ein Ankreuzfeld ist der Wert der text-Eigenschaft.
Ein Schalter, der beim Anklicken seine Text-Verbindung ausführt und dann den Dialog schließt. Die Beschriftung auf dem Schalter wird mit der text-Eigenschaft festgelegt. Die Ausgabe der Text-Verbindung wird auf der Standardausgabe ausgegeben, wenn die writeStdout-Eigenschaft aktiviert ist. Der Schalter kann die Standard-Aktion des Dialoges sein, wenn die default-Eigenschaft auf wahr gesetzt wird.
Der Schließenschalter hat einen Zustand, Standard.
Mit dem Schließenschalter ist kein Bedienelement-Text verbunden.
Auswahlfeld ist ein Bedienelement zum Auswählen, das einen Schalter mit einem Kontextmenü verbindet. Es zeigt dem Anwender die aktuelle Auswahl aus einer Liste von Möglichkeiten auf kleinem Raum an. Die Elemente werden über das Bearbeitungsfenster an die Liste gehängt. Wenn die editable-Eigenschaft aktiviert ist, kann der Anwender eigene Eingaben unabhängig von der Liste tätigen.
Das Auswahlfeld hat nur den Standard-Status.
Der Bedienelement-Text für ein Auswahlfeld ist der Text des ausgewählten Elementes.
Ein Schalter, der beim Anklicken seine Text-Verbindung ausführt. Die Beschriftung am Schalter wird mit der text-Eigenschaft eingestellt. Die Ausgabe der Text-Verbindung wird auf die Standardausgabe geschrieben, wenn die writeStdout-Eigenschaft aktiviert ist. Der Schalter kann die Standard-Aktion für den ganzen Dialog sein, wenn die default-Eigenschaft auf wahr gesetzt ist.
Der Ausführschalter hat einen Status, Standard.
Mit dem Ausführschalter ist kein Bedienelement-Text verbunden.
Die Dateiauswahl verbindet ein Eingabefeld mit einem Schalter, der zu einem Dateiauswahldialog für die grafische Auswahl von Dateien/Ordnern führt. Die Auswahl (Datei/Ordner) wird ins Eingabefeld übertragen. Der Typ einer Dateiauswahl wird mit der selectionType-Eigenschaft festgelegt. Mögliche Typen sind Offnen, Speichern und Ordner. Wenn die selectionOpenMultiple-Eigenschaft aktiviert ist, können viele Dateien/Ordner auf einmal ausgewählt werden. Die Fensterüberschrift für die Dateiauswahl kann mit der selectionCaption-Eigenschaft bestimmt werden und wird in der Titelleiste des Dialoges angezeigt. Wenn keine Fensterüberschrift angegeben wird, bestimmt der Typ der Dateiauswahl den Titel. Die auswählbaren Dateien können mit der selectionFilter-Eigenschaft gefiltert werden.
Die Dateiauswahl hat nur einen Status, Standard.
Der Bedienelement-Text für eine Dateiauswahl ist der Text im Eingabefeld (die vom Benutzer ausgewählte Datei).
Ein Behälter-Bedienelement, das andere Bedienelemente enthält. Der Rahmen kann mit der lineWidth-Eigenschaft verändert werden. Mit der title-Eigenschaft kann ein Titel vergeben werden.
Der Gruppenbereich hat nur den Standard-Status.
Der Bedienelement-Text des Gruppenbereiches ist die Text-Verbindung von jedem Bedienelement, das es enthält, kombiniert. Sie erscheinen in dieser Reihenfolge innerhalb des Gruppenbereiches.
Ein Eingabefeld-Bedienelement ist ein Texteditor für eine Zeile. Es ermöglicht dem Benutzer die Eingabe oder Bearbeitung von einer Zeile Text. Der anfangs schon enthaltene Text kann mit der text-Eigenschaft bestimmt werden. Das Bedienelement kann mit der readOnly-Eigenschaft auf nur lesbar gesetzt werden. Es gibt drei Modi für das Bedienelement, Normal, NoEcho und Password. Der Modus wird mit der echoMode-Eigenschaft festgelegt.
Das Eingabefeld hat nur den Standard-Status.
Der Bedienelement-Text für das Eingabefeld ist der darin enthaltene Text.
Eine Listenauswahl ermöglicht die Auswahl aus einer Liste von Elementen. Normalerweise ist ein oder kein Element ausgewählt. Dieses Verhalten kann mit der selectionMode-Eigenschaft gestaltet werden. Die Elemente werden im Bearbeitungsfenster der Listenauswahl hinzugefügt.
Eine Listenauswahl hat nur den Standard-Status.
Der Bedienelement-Text einer Listenauswahl besteht aus den Elementen in der Listenauswahl. @selectedWidgetText gibt nur das aktuell ausgewählte Element zurück.
Dieses Bedienelement ist nun in Kommander verfügbar. Seine Funktionalität entspricht dem Baum-Bedienelement, bitte dort nachsehen.
Ein einfaches Bedienelement, das ein Bild oder eine Beschriftung enthält. Das anzuzeigende Bild wird mit der pixmap-Eigenschaft festgelegt. Der Text wird mit der text-Eigenschaft bestimmt. Es kann zu einer Zeit nur eine dieser Eigenschaften festgelegt sein (normalerweise verhindert der Editor, dass beide gleichzeitig gesetzt sind). Wenn scaledContents aktiviert ist, wird das Bild auf die Größe des Bedienelementes skaliert. Das Format des Textes kann mit der textFormat-Eigenschaft geändert werden.
Dieses Bedienelement ist in Kommander nicht aktiviert und hat keinen Status oder Bedienelement-Text.
Ein Schalter, der aktiviert oder nicht aktiviert sein kann. Normalerweise innerhalb einer Schaltergruppe für genaue eine Auswahl in der Gruppe. Eine Beschriftung für den Schalter kann mit der text-Eigenschaft bestimmt werden. Ein Schalter kann von vornherein mittels der checked-Eigenschaft aktiviert werden. Das Aktivieren der checked-Eigenschaft innerhalb einer Gruppe deaktiviert automatisch diese Eigenschaft für den Schalter, der sie vorher hatte.
Der Auswahlknopf hat entweder den Status aktiviert oder deaktiviert.
Es ist mit dem Auswahlknopf kein Bedienelement-Text verbunden.
Dieses Bedienelement ist ein Texteditor für einfache Textformatierungen.
RichTextEditor hat nur einen Status, Standard.
Der Bedienelement-Text des RichTextEditors ist der Text, der im Editor im RTF-Format enthalten ist. Ausgewählter Text kann mit @selectedWidgetText zurückgegeben werden.
Ein Bedienelement, das die Auswahl einer Ganzzahl entweder mit den Pfeilen oder durch Eingabe des Wertes in einem Feld erlaubt. Minimum- und Maximum-Werte können mit der minValue bzw. der maxValue-Eigenschaft festgelegt werden. Die specialValueText-Eigenschaft bestimmt einen Text, der anstatt des Minimums angezeigt wird.
Das Bedienelement hat nur einen Status, Standard.
Der Bedienelement-Text für Ganzzahl-Drehfeld ist die aktuell angezeigte Ganzzahl.
Ein Schalter, der beim Drücken einen anderen Kommander-Dialog startet. Der zu startende Dialog wird mit der kmdrFile-Eigenschaft festgelegt. Wenn die default-Eigenschaft aktiviert ist, wird der neue Dialog beim Drücken von Eingabe gestartet, soferne der Fokus am alten Dialog lag. Dies könnte auch als Behälter dienen.
SubDialog hat nur einen Status, Standard.
Der Bedienelement-Text für SubDialog ist die Textverknüpfung des Dialoges, die er ausführt.
Dies war dazu gedacht, den Dialog zu enthalten, was aber mit dem neuen Projektkonzept veraltet ist. Sollten wir es mit dem @dialog()
in seinem Kommander-Text lassen oder loswerden? Wie auch immer, es würde nicht richtig sein.
Ein Bedienelement, das viele Unterfenster zur Verfügung stellt, die andere Bedienelemente enthalten können.
Ein einfacher Mehrzeileneditor.
Ein einfaches Bedienelement, das einen Text enthält. Es kann auch ein Bild enthalten. Nun, beide sind QLabels. Warum zwei gleich ausssehende Bedienelement mit verschiedenem Namen? - Soll mit Version A7 richtiggestellt werden.
In Version Alpha 6 ist dieses Bedienelement teilweise verfügbar und kann mit externen DCOP-Aufrufen eingestellt werden.
Ein Bedienelement, das eine Liste in Form einer Baumstruktur darstellt. Dieses Bedienelement ist nun voll verfügbar und seit Version Alpha 6 können Element hinzugefügt und entfernt werden. Es können auch Kindelemente und mehrspaltige Daten hinzugefügt werden. Die aktuelle Begrenzung ist, dass Spalten noch nicht verändert werden können. Zum Hinzufügen eines Kind-Knotens muss „/“ als Trennzeichen verwendet werden. Spalten innerhalb von Daten werden mit einem entwerteten Tabulator „\t“ getrennt.
Anweisungen sind Funktionen, die von Kommander ausgeführt werden. Bis Kommander über einem vollständigen Parser verfügt, werden alle Anweisungen vor dem Skript ausgeführt. Meistens ist das kein Problem.
@dcop(AnwendungsId
, Objekt
, Funktion
, Argumente
)
Führe einen DCOP Aufruf durch. @dcop(„kmail“, „KMailIface“, „checkMail()“, „“)
@dcopid
Die DCOP-ID des Prozesses. (kmdr-executor-@pid)
@dialog(Dialog
[,Parameter
])
Zeigt den bestimmten Kommander-Dialog an. Der Dialog wird im Dialogordner und im aktuellen Ordner gesucht, in dieser Reihenfolge. Das bestimmt den Aufruf von kommander-executor vor und setzt den Standardordner auf den Ordner, in dem sich die Kommander-Anwendung befindet. Parameter können im in Unix üblichen Weg oder namentlich wie z. B. „Variable=Wert“ übergeben werden. Übergebene Parameter können im Globalbereich gefunden werden. @global(Variable) würde den „Wert“ zurückgeben.
@env(Umgebungsvariable
)
Füllt die angegebene Umgebungsvariable aus. @env(PWD) setzt $PWD ein. Bitte beachten Sie, dass „$“ ein Teil der Shell ist und nicht verwendet werden sollte.
@exec(Befehl
)
liefert die Ausgabe des damit ausgeführten Befehls zurück. @exec(ls -l).
@execBegin ... @execEnd
gleich wie @exec
, unterstützt aber mehrzeilige um Ummantelungs-Skripte. Das dient für einige Skriptsprachen entweder über eine Deklaration oder mittels einer Ummantelung.
@execBegin(php)
@execBegin
#!/usr/bin/php
Das Erste benutzt den Namen des PHP-Programms. Kommander durchsucht den Pfad PATH nach php und sieht, wenn es nicht gefunden wird, nach. ob es mit Kommander außerhalb des Pfades registriert ist. Ist dies nicht der Fall, meldet es dem Benutzer, dass es nicht gefunden werden konnte. Das zweite Beispiel benutzt die klassische „Ummantelung“, die Vorteile aber auch Probleme bringen kann. Wenn zum Beispiel eine Beta-Version von PHP5 in /usr/local/bin
vorhanden ist, die nicht gefunden wird, weil es in /usr/bin
eine gibt , wäre dies nützlich. Wird der Dialog aber von jemandem verwendet, der PHP nur in /usr/local/bin
hat, würde es mit der Ummantelung nicht gefunden. Deshalb ist die Verwendung von Ummantelungen problematisch und die Verwendung des Programmes wird empfohlen, wenn die Dateien weitergegeben werden.
@global(Variable
)
wird mit dem Inhalt der angegebenen globalen Variable ersetzt.
@null
Liefert Null zurück. Da Kommander nun bei der Ausführung auf leere widgetText prüft, verhindert dies im Falle eines undefinierten Status des Bedienelementes Fehler.
@parentPid
Die PID des Vaterprozesses.
@pid
Die PID des Prozesses.
@readSetting(Schlüssel
, Standardwert
)
liest einen Wert aus der kommanderrc
@selectedWidgetText
der ausgewählte Inhalt in einem Bedienelement, das mehrere Werte anzeigen kann, wie etwa Listen
@setGlobal(Variable
, Wert
)
Setzt die globale Variable auf den angegebenen Wert.
@widgetText
der Inhalt eines Bedienelementes
@writeSetting(Schlüssel
, Wert
)
schreibe den Wert in die kommanderrc
@Array.values(Feld
)
Gibt eine mit Zeilenschaltungen getrennte Liste aller Werte eines Feldes zurück. Kann zum Durchgehen eines Feldes verwendet werden.
@Array.keys(Feld
)
Gibt eine mit Zeilenschaltungen getrennte Liste aller Schlüssel im Feld zurück.
@Array.setValue(Feld
, Schlüssel
, Wert
)
Setzt einen Schlüssel und Wert für ein Element eines Feldes. Wenn das Feld nicht existiert, wird es erstellt.
@Array.clear(Feld
)
Entfernt alle Elemente aus einem Feld.
@Array.count(Feld
)
Liefert die Anzahl der Elemente in einem Feld.
@Array.value(Feld
,Schlüssel
)
Gibt den mit dem angegebenen Schlüssel verbundenen Wert zurück.
@Array.remove(Feld
,Schlüssel
)
Entfernt das Element mit dem angegeben Schlüssel aus dem Feld.
@Array.fromString(Feld
,Zeichenkette
)
Fügt alle Elemente der Zeichenkette dem Feld hinzu. Die Zeichenkette sollte ein Schlüssel\tWert\n Format haben."
@Array.toString(Feld
,Zeichenkette
)
"Liefert alle Elemente im Feld im Schlüssel\tWert\n Format."
@File.read(Datei
)
Liefert den Inhalt der angegebenen Datei zurück.
@File.write(Datei
Zeichenkette
)
Schreibt die angegebene Zeichenkette in eine Datei.
@File.append(Datei
Zeichenkette
)
Hängt die angegebene Zeichenkette an das Ende der Datei an.
@String.length(Zeichenkette
)
Gibt die Anzahl der Zeichen einer Zeichenkette zurück.
@String.contains(Zeichenkette
,Unterzeichenkette
)
Prüft, ob die Zeichenkette die angegebene Teilzeichenkette enthält.
@String.find(Zeichenkette
)
Liefert die Position einer Teilzeichenkette in einer Zeichenkette, oder -1, wenn sie darin nicht gefunden wurde."
Dies wird in Alpha6 eine optionale ganzzahlige Startposition zum Finden weiterer Treffer haben.
@String.left(Zeichenkette
, Ganzzahl
)
Liefert die ersten n Zeichen der Zeichenkette zurück.
@String.right(Zeichenkette
, Ganzzahl
)
Liefert die letzten n Zeichen der Zeichenkette zurück.
@String.mid(Zeichenkette
, Ganzzahl Start
, Ganzzahl Ende
)
Liefert eine Teilzeichenkette aus der Zeichenkette, beginnend mit der angegebene Position.
@String.remove(Zeichenkette
, Teilzeichenkette
)
Entfernt alle Vorkommen einer angegebenen Teilzeichenkette.
@String.replace(Zeichenkette
, Teilzeichenkette zu finden
, Teilzeichenkette zu ersetzen
)
Ersetzt alle Vorkommen einer angegebenen Teilzeichenkette mit dem angegebenen Ersatz.
@String.upper(Zeichenkette
)
Wandelt die Zeichenkette in Großbuchstaben um.
@String.lower(Zeichenkette
)
Wandelt die Zeichenkette in Kleinbuchstaben um.
@String.compare(Zeichenkette
, Zeichenkette
)
Vergleicht zwei Zeichenketten. Gibt 0 zurück, wenn sie gleich sind, -1, wenn die Erste kleiner ist und 1, wenn die Erste größer ist
@String.isEmpty(Zeichenkette
)
Prüft, ob die Zeichenkette leer ist.
@String.isNumber(Zeichenkette
)
Prüft, ob die Zeichenkette eine gültige Zahl ist.
Das DCOP kann in Kommander auf verschiedene Weise aufgerufen werden. Die Erste ist die Konsolenmethode
dcop kmdr-executor-@pid KommanderIf changeWidgetText myWidget „neuer Text“
Dies setzt voraus, dass Sie sich innerhalb einer Kommander-Datei befinden und Zugriff auf die Anweisung @pid haben, die die Prozess-ID enhält. Da ist es einfacher, „kmdr-executor-@pid“ mit @dcopid zu ersetzen. Diese Syntax (möglicherweise ohne Anweisungen) kann von der Befehlszeile oder jedem externen Skript genutzt werden, um das Kommander-Fenster zu ändern.
Weil Kommander in seiner Alfa-Entwicklungsstufe noch keinen vollständigen Parser hat, ist die Verwendung des viel schnelleren internen DCOP aus einem anderen Anwendungsfenster (Konsolen-DCOP ist langsam) viel schwieriger, weil viele Informationen mitgegeben werden müssen, einschließlich eines Prototyps des Aufrufes. Der Aufruf oben würde so aussehen:
@dcop(@dcopid, KommanderIf, „enableWidget(QString, bool)“, Bedienelement, true)
Zur Zeit der Erstellung sollte aufgepasst werden, dass die Schachtelung von DCOP-Aufrufen innerhalb von Skriptsprachkonstrukten (wie bash) die Verwendung von Konsolenaufrufen verlangt.Bei der Verwendung von internem DCOP werden alle Kommander-Anweisungen zuerst ausgeführt und dann erst das Skript.
Es gibt einen neuen vereinfachten Weg, DCOP innerhalb von Kommander zu nutzen, mittels Objektsyntax. Angenommen, der Text in einem Bedienelement namens @Zeileneingabefeld1 soll geändert werden. Dies würde so aussehen.
@Zeileneingabefeld1.changeWidgetText(Neuer Text)
Wie Sie sehen, ist die neue Syntax einfach und passt schlüssig zu den Funktionsgruppen. Die gesamte DCOP-Referenz benutzt die neue Objektsyntax, wie oben. Bitte beachten Sie, dass beim Referenzieren eines Bedienelementes mit DCOP aus einem anderen Fenster oder einer anderen Anwendung der erste Parameter immer der Name des Bedienelementes sein muss. Alle hier aufgelisteten Funktionen beginnen mit dem zweiten Parameter.
Liefert den Wert der angegebenen globalen Variable zurück. Wenn ein Skript aus dem Kommander-Fenster gestartet wird, verschwinden alle (nicht-globalen) Variablen, die im Skript belegt wurden, nach Ablauf des Skripts und sind so nicht für andere Skripte oder neue Instanzen des aufrufenden Prozesses verfügbar. Der „Gültigkeitsbereich“ global bedeutet, dass die Variable für jeden Prozess dieses Fensters existiert, bis es geschlossen wird. Diese Variablen können jederzeit mit einem weiteren @setGlobal
-Aufruf geändert werden.
Erstellt eine Variable, die global im Hinblick auf den Fensterprozeß ist und weist ihr den Wert zu. Dieser Wert kann mit global(QString VariablenName) gelesen oder geändert werden.
Dies sollte in setWidgetText umbenannt werden und der Name ist daher veraltet. Es entfernt den angezeigten Text im Bedienelement und ersetzt ihn mit dem Parametertext.
Schaltet ein Bedienelement ein oder aus.
Liefert den mit dem angegebenen Bedienelement verbundenen Text zurück. Das ist nicht das gleiche, wie der angezeigte Text. Diesen würde man mit „@widgetText “ oder Skriptbefehlen erreichen, um den angezeigten Wert zu erhalten.
Dies setzt den Standardtext von Kommander. Das ist typischerweise gleich wie „@widgetText“ um anzuzeigen, was im Bedienelement enthalten ist. Normalerweise hat man keinen Bedarf dafür, aber auf jeden Fall vorhanden. Trifft für alle Bedienelemente zu, die Text enthalten können.
Fügt ein Element zu einem ListBox-Bedienelement am angegebenen Index hinzu. Der Index beginnt mit Null. Zum Hinzufügen am Ende der Liste dient -1.
Dies fügt eine Liste von Zeichenketten auf einmal hinzu. Die Liste sollte mit EOL (\n - Zeilenschaltungen) getrennt sein. Das ist praktisch, weil man über bash leicht zu so einer Liste kommt. So liefert z. B. @exec(ls -l ~/projects | grep kmdr) ein Inhaltsverzeichnis von Kommander-Dateien im Projektordner als passende Liste. Der Listenindex beginnt bei Null. Mit -1 kann am Ende der bestehenden Liste angehängt werden.
addUniqueItem fügt ein Element am Ende der Liste nur dann hinzu, wenn es einmalig ist.
Entfernt alle Elemente.
Entfernt das Element mit angegebenem Index.
Liefert den Text des Elementes mit angegebenem Index zurück.
Setze das aktuelle (oder ausgewählte) Element auf den angegebenen Index. Verwendbar in Listbox und ComboBox-Bedienelementen.
Aktiviert/deaktiviert Ankreuzfeld- oder Auswahlknopf-Bedienelemente.
Mit Kommander können neue Bedienelemente basierend auf nicht-Kommander-Bedienelementen recht leicht erstellt werden. Der Zugang ist das Ableiten neuer Kommander-Bedienelemente-Klassen von Qt™/KDE-Bedienelementen und zusätzlich von der KommanderWidget-Klasse. Durch Überschreiben der Methoden dieser Klasse erhält das Kommander-Bedienelement seine Funktionalität.
Der meiste Quelltext von Kommander-Bedienelementen ist Vorlagen-Quelltext. So kann der Kommander-Dialog widgetgenerator.kmdr zum Generieren des meisten Quelltextes für Kommander-Bedienelemente verwendet werden. Es genügt, die wichtigen Teile bezüglich des Bedienelementes, wie Status-Information, Bedienelement-Text usw. auszufüllen.
Angenommen, es soll ein neues Zeileneingabefeld-Bedienelement für Kommander, abgeleitet vom KDE-KLineEdit Bedienelement, erstellt werden. Mit dem Kommander-Bedienelement Erstellungssdialog erhalten wir dies in der ausgegebenen Header-Datei:
Zeigt, wie globale und setGlobal DCOP-Aufrufe für globale Variablen in Skripten funktionieren
Zeigt, wie sowohl lokale als auch externe DCOP-Aufrufe zur Kommunikation mit externen Anwendungen genutzt werden können.
Zeigt, wie man Verbindungen/Slots zur Behandlung von Ereignissen nutzt. Sowohl Population- als auch Standard-Sluts werden verwendet.
Zeigt die Verwendung der @readSetting und @writeSetting Funktion zum Schreiben/Wiederherstellen des Inhaltes von Bedienelementen. Zusätzlich, wie populate() Slot zur Voreinstellung von Bedienelement-Inhalten genutzt werden kann.
Zeigt die Übergabe von Parametern an Kommander-Dialoge über die Befehlszeile und wie Listeninhalte und Schaltflächentexte geändert werden.
Zeigt die Verwendung einer Initialisierung, um Skripte vom Hauptdialog zurückzusetzen und einige Einstellungen zu speichern.
Berichten Sie über Probleme und Wünsche auf der Internetseite http://bugs.kde.org.
Dieses Dokument wurde seit der Installation möglicherweise bearbeitet. Etwaige neuere Versionen dieser Dokumentation finden Sie unter http://docs.kde.org/.
Das Entwicklerteam von Kommander
(consume AT optusnet.com.au)
Entwickler und Dokumentation
(tik AT acm.org)
Dokumentation
(sequitur AT kde.org)
Projektleiter und Dokumentation
(amantia AT kde.org)
Entwickler
(mrudolf AT kdewebdev.org)
Entwickler
Kommander © 2004 Kommander-Entwicklerteam.
Kommander Benutzerhandbuch © 2004 Kommander-Entwicklerteam.
Deutsche Übersetzung von Georg Schuster(gschuster AT utanet.at)
Diese Dokumentation ist unter den Bedingungen der GNU Free Documentation License veröffentlicht.
Dieses Programm ist unter den Bedingungen der GNU General Public License veröffentlicht.
Inhaltsverzeichnis
Kommander ist Teil des KDE-Projekts http://www.kde.org/.
Kommander finden Sie im kdewebdev-Paket auf ftp://ftp.kde.org/pub/kde/, dem Haupt-FTP-Server des KDE-Projekts.
Um Kommander auf Ihrem System zu kompilieren und zu installieren, geben Sie folgende Befehle im Hauptordner der Programm-Quellen von Kommander ein:
%
./configure
%
make
%
make install
Da Kommander autoconf und automake benutzt, sollte es dabei keine Schwierigkeiten geben. Sollten dennoch Probleme auftauchen, wenden Sie sich bitte an die KDE-Mailinglisten.
Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team