Archiv verlassen und diese Seite im Standarddesign anzeigen : Tastatursteuerung: 4 Sprungweiten für Preview
TheHorse
24.08.2003, 21:05
Da ich meine Maus schonen will :wink: und gerne auf den Tasten rumhämmere, habe ich mir die Preview-Steuerung mit der Tastatur etwas ausgebaut. Als Basis für die Slider-Veränderung dient matts Wert für die Buttons >> und <<.
ohne: 1 Einheit
mit Umschalt: 1/10 von >>/<<
mit Strg: das Gleiche wie >>/<<
mit Alt: 10x >>/<<
Der Slider muss fokussiert sein (einmal anklicken). Daran habe ich nichts geändert.
X.Java
class COLLECTION
ab line ~2250 einfügen
KeyListener S_keyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int offs=1;
int keyval=e.getKeyCode();
if (e.isShiftDown())
offs=31250;
else if (e.isControlDown())
offs=312500;
else if (e.isAltDown())
offs=3125000;
if (keyval==KeyEvent.VK_RIGHT)
search.setValue(search.getValue()+offs);
else if (keyval==KeyEvent.VK_LEFT)
search.setValue(search.getValue()-offs);
if(keyval != KeyEvent.VK_PAGE_UP && keyval != KeyEvent.VK_PAGE_DOWN)
e.setKeyCode(0);
}
};
search.addKeyListener(S_keyListener);
Ich entschuldige mich hiermit als absoluter Programmierdoofi, der keine Ahnung von Java hat, dass ich den schönen Code so verunstalte.
Daywalker
25.08.2003, 02:01
Hm, ich hab den Code an einer etwas anderen Stelle in v0.81.2a eingebaut da die Zeilennummer nicht in der class COLLECTION ist :shock: Kann gar kein Java aber es funzt wohl :D
--------------------------------------------------------------------------------
- 24.08.2003 Preview slider keyboard key (enhancement) TheHorse -
--------------------------------------------------------------------------------
With shift: 1/10 from >>/<<
with strg: equal to >>/<<
with alt: 10x >>/<<
X.java
internal class COLLECTION line ~2339
KeyListener S_keyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int offs=1;
int keyval=e.getKeyCode();
if (e.isShiftDown())
offs=31250;
else if (e.isControlDown())
offs=312500;
else if (e.isAltDown())
offs=3125000;
if (keyval==KeyEvent.VK_RIGHT)
search.setValue(search.getValue()+offs);
else if (keyval==KeyEvent.VK_LEFT)
search.setValue(search.getValue()-offs);
if(keyval != KeyEvent.VK_PAGE_UP && keyval != KeyEvent.VK_PAGE_DOWN)
e.setKeyCode(0);
}
};
search.addKeyListener(S_keyListener);
greetz
Daywalker
TheHorse
25.08.2003, 08:03
Sorry, die Zeilennummern können bei mir schon etwas durcheinander geraten sein. Ich dachte, ich hätte mich auf das Original von 0.81.2 bezogen.
Wenn man's unterhalb
search.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {...}});
einfügt, dann geht's.
Wenn's bei dir geklappt hat, dann iss ja gut.
Übrigens wirst du beim Zurückspringen merken, dass sich Vor- und Rücksprung nicht gegenseitig aufheben. Man landet beim Rücksprung jedes Mal einen I-Frame später. Das mag damit zusammenhängen (denke ich), dass preview(val) die Sliderposition selbst "nachkorrigiert". (Ist beim Klick auf >>/<< übrigens genauso.)
Hallo,
ich habe es mit aufgenommen. Getestet habe ich es aber noch nicht.
Gruß
Lucike
TheHorse
25.08.2003, 15:24
Hab nochmal ein bisschen an der Tastatursteuerung rumgemurkst:
a) Umschalt + Cursor reagierte bei manchen Filmgrößen/Goplängen(?) nicht anders als "nur" Cursor --> daher Slider-Change verdoppelt
b) nun auch Tastatursteuerung von add point und delpoint etc. (wenn man die Finger schon mal an den Tasten hat)
Summary:
Cursor links/rechts: eine Einheit in Preview (Standardhandling)
Umschalt +Cursor: Geschwindigkeitsstufe 1
Strg +Cursor: Geschwindigkeitsstufe 2
Alt + Cursor: Geschwindigkeitsstufe 3
Bild auf/Bild ab: Geschwindigkeitsstufe 4 (Standardhandling)
Pos1/Home: zum Filmanfang (Standardhandling)
Ende: zum Filmende (Standardhandling)
a: add point
d: del point
n: zum nächsten Cutpoint
p: zum vorigen Cutpoint
(Die letzten beiden orientieren sich am Inhalt der Dropdown-Combo unter "Number of Points", nicht an der momentanen Sliderposition!)
Anleitung:
Code vom ersten Posting in diesem Thread komplett ersetzen durch:
KeyListener S_keyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int offs=0;
int keyval=e.getKeyCode();
switch(e.getKeyChar()) {
case 'p':
if (comBox[14].getSelectedIndex()>0)
comBox[14].setSelectedIndex(comBox[14].getSelected Index()-1);
return;
case 'n':
if (comBox[14].getSelectedIndex()<comBox[14].getItemC ount())
comBox[14].setSelectedIndex(comBox[14].getSelected Index()+1);
return;
case 'a':
cutadd.doClick();
return;
case 'd':
cutdel.doClick();
return;
}
if (e.isShiftDown())
offs=62500;
else if (e.isControlDown())
offs=312500;
else if (e.isAltDown())
offs=3125000;
else
return;
switch (keyval) {
case KeyEvent.VK_RIGHT:
search.setValue(search.getValue()+offs);
break;
case KeyEvent.VK_LEFT:
search.setValue(search.getValue()-offs);
}
}
};
search.addKeyListener(S_keyListener);
Tipp: Die Alt-Taste dient intern zum Umschalten in den Mnemonic-(Key-Accelerator)Mode. Wenn man also versehentlich nur die Alt-Taste drückt und wieder loslässt, sind die anderen Tasten scheinbar gesperrt. Lösung: Alt nochmal drücken
dvb.matt
25.08.2003, 20:49
@happy coders
und wer hatte hier keine Ahnung?? :mrgreen: :D 8)
ich hab dennoch eine kleine Anmerkung:
der normale einfache Schritt mit den Cursors (ohne alt,strg,ums) wird sowohl vom changeListener
(weil bereits std-mäßig durch das l&f für den JSlider gehandled) als auch dem keyListener konsumiert
und drum zweimal previewed. Weshalb ich empfehle, noch 'else return;' anzufügen.
(HOME/END werden so normalerweise nicht mehr erreicht, macht aber nichts, weil auch std. :) )
mfg
...
else if (e.isAltDown())
offs=3125000;
else
return;
switch (keyval) {
case KeyEvent.VK_RIGHT:
search.setValue(search.getValue()+offs);
break;
case KeyEvent.VK_LEFT:
search.setValue(search.getValue()-offs);
//case KeyEvent.VK_HOME:
//case KeyEvent.VK_END:
}
TheHorse
25.08.2003, 21:07
Und da habe ich mir fest eingebildet, Home und End würden vom JSlider nicht gehandelt, weil sich da bei mir nichts tat und ich bildete mir ein, ich müsste das deswegen unbedingt haben. :|
Die Folgeaction hatte ich ja in der Vorversion brutal durch setKeyCode(0) unterbunden :wink: :wink: Wahrscheinlich deswegen.
Da sieht man doch, wer wirklich keine Ahnung hat, nämlich ich!
Ich hab den Codevorschlag korrigiert. Tnx.
So, ich habe mal alles zusammen gefaßt. Sonst steigt keiner mehr durch die Zeilennummern.
Gruß
Lucike
TheHorse
26.08.2003, 11:34
Sorry, macht euch bloß keinen Stress, ich bastle halt für mich ein bissel rum. Wen's interessiert, der soll's einbauen und verbessern. Ich will meine läppischen Java-Trial and Errors nicht als "offizielle" Bestandteile verstanden wissen.
Wer die case 'p' und case 'n'-Switches "meines" KeyListeners wie folgt abändern möchte, der bekommt nun die Cutpoints in Relation zur momentanen Sliderposition, wenn er 'n' und 'p' drückt (gefällt mir besser). Sorry, wenn ich den ganzen Keylistener nochmals abdrucke, sonst kennt sich wirklich keiner mehr aus.
KeyListener S_keyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int i=0;
int ic=0;
int offs=0;
int keyval=e.getKeyCode();
switch(e.getKeyChar()) {
case 'p':
ic=comBox[14].getItemCount();
if (ic>0) {
i=ic-1;
if(lastpos>Long.parseLong(comBox[14].getItemAt(0).toString()) ) {
while(lastpos<=Long.parseLong(comBox[14].getItemAt (i).toString()))
i--;
}
comBox[14].setSelectedIndex(i);
}
return;
case 'n':
ic=comBox[14].getItemCount();
if (ic>0) {
if(lastpos<Long.parseLong(comBox[14].getItemAt(ic-1).toString())) {
while(lastpos>=Long.parseLong(comBox[14].getItemAt(i).toString() ))
i++;
}
comBox[14].setSelectedIndex(i);
}
return;
case 'a':
cutadd.doClick();
return;
case 'd':
cutdel.doClick();
return;
}
if (e.isShiftDown())
offs=62500;
else if (e.isControlDown())
offs=312500;
else if (e.isAltDown())
offs=3125000;
else
return;
switch (keyval) {
case KeyEvent.VK_RIGHT:
search.setValue(search.getValue()+offs);
break;
case KeyEvent.VK_LEFT:
search.setValue(search.getValue()-offs);
}
}
};
search.addKeyListener(S_keyListener);
Sorry, macht euch bloß keinen Stress, ich bastle halt für mich ein bissel rum. Wen's interessiert, der soll's einbauen und verbessern. Ich will meine läppischen Java-Trial and Errors nicht als "offizielle" Bestandteile verstanden wissen.
Schon klar, ich finde die Handhabung mit der Tastatur auch besser. Viele andere vielleicht auch und deshalb sollte man deine "läppischen Java-Trial and Errors" ( ;) ) auch ruhig übernehmen. Nur mit der Versionsvergabe ala 0.81.2a (Signatur) bitte etwas vorsichtig umgehen, sonst läuft das aus dem Ruder und keiner weiß mehr wo er etwas verändern soll (Zeilennummern).
Gruß
Lucike
dvb.matt
26.08.2003, 20:01
Viele andere vielleicht auch
wie ich z.B. :D
Home und End würden vom JSlider nicht gehandelt, weil sich da bei mir nichts tat
auch nicht, wenn der Focus drauf war? (das bauen die doch nicht raus :shock: )
"offizielle" Bestandteile
Pech :P
was praktisch ist, wird 'offiziell' (wenn dem nicht widersprochen wird..)
dafür sind wir ja hier. :)
man kann natürlich eine gewisse Karenzzeit vergehen lassen und/oder einen Poll-Thread eröffnen. :wink:
mfg
Daywalker
26.08.2003, 20:27
Kann mich den Vorpostern nur anschließen... :D
Habe jetzt mal den letzten aktuellen Codeabschnitt eingebaut, getestet und die ReleaseNotes etwas angepasst. Hoffe das ist ok so und es stimmt was ich da reingeschrieben habe :D
Den neuesten Source habe ich auch im forum auf pctvsat.com hinterlegt.... 8) ....da ich ja hier nix anhängen kann :shock:
--------------------------------------------------------------------------------
- 26.08.2003 X0.81.3 (enhancement) TheHorse -
--------------------------------------------------------------------------------
Preview slider move & cut keyboard keys:
[cursor left/right]: move one I-frame in preview (standard)
[shift + cursor] : move with speed index 1 (1/10 from >>/<<)
[strg + cursor] : move with speed index 2 (equal to >>/<<)
[alt + cursor] : move with speed index 3 (10x >>/<<)
[page_up/page_down]: move with speed index 4 (standard)
[pos1/home] : move to start of movie (standard)
[end] : move to end of movie (standard)
[a]: add point
[d]: del point
[n]: next cutpoint
[p]: previous cutpoint
Note: Slider must be activated (klick on it) for keyboard keys.
[n] and [p] keys cutpoints are current slider position.
Hint: [alt] key switch to intern Mnemonic-(Key-Accelerator) mode.
By pressing [alt] alone the other keys are locked.
To unlock the keys press [alt] again.
X.java
internal class COLLECTION
public COLLECTION() line ~2523
KeyListener S_keyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int i=0;
int ic=0;
int offs=0;
int keyval=e.getKeyCode();
switch(e.getKeyChar()) {
case 'p':
ic=comBox[14].getItemCount();
if (ic>0) {
i=ic-1;
if(lastpos>Long.parseLong(comBox[14].getItemAt(0).toString()) ) {
while(lastpos<=Long.parseLong(comBox[14].getItemAt (i).toString()))
i--;
}
comBox[14].setSelectedIndex(i);
}
return;
case 'n':
ic=comBox[14].getItemCount();
if (ic>0) {
if(lastpos<Long.parseLong(comBox[14].getItemAt(ic-1).toString())) {
while(lastpos>=Long.parseLong(comBox[14].getItemAt(i).toString() ))
i++;
}
comBox[14].setSelectedIndex(i);
}
return;
case 'a':
cutadd.doClick();
return;
case 'd':
cutdel.doClick();
return;
}
if (e.isShiftDown())
offs=62500;
else if (e.isControlDown())
offs=312500;
else if (e.isAltDown())
offs=3125000;
else
return;
switch (keyval) {
case KeyEvent.VK_RIGHT:
search.setValue(search.getValue()+offs);
break;
case KeyEvent.VK_LEFT:
search.setValue(search.getValue()-offs);
}
}
};
search.addKeyListener(S_keyListener);
man kann natürlich eine gewisse Karenzzeit vergehen lassen und/oder einen Poll-Thread eröffnen. :wink:
Gute Idee, also reifen lassen. ;)
Habe jetzt mal den letzten aktuellen Codeabschnitt eingebaut, getestet und die ReleaseNotes etwas angepasst. Hoffe das ist ok so und es stimmt was ich da reingeschrieben habe :D
Den neuesten Source habe ich auch im forum auf pctvsat.com hinterlegt.... 8)
Ich will natürlich niemanden bremsen mit und an Project X zu arbeiten, aber wenn wir Sourcen offiziell veröffentlichen, sollte das vielleicht nur an einer Stelle geschehen. Verlinken ist dann kein Problem. Ansonsten habe ich das so mal übernommen.
....da ich ja hier nix anhängen kann :shock:
Das File Attachment MOD kommt vielleicht noch. Ist ein schwerer Eingriff in die Datenbank des Forums. :? ;)
Gruß
Lucike
TheHorse
27.08.2003, 08:28
mit der Versionsvergabe ala 0.81.2a (Signatur)Da habe ich irgendwie gepennt. Wollt ich gar nicht. Hat meine Hand ohne das Gehirn gemacht. (Kommt bei mir öfter vor.)
TheHorse
27.08.2003, 08:39
auch nicht, wenn der Focus drauf war? (das bauen die doch nicht rausNee, nee. Geht natürlich. Ich hatte doch das brutale Rücksetzen des Keycodes bei den ersten Gehversuchen drin, weil bei mir eine Preview immer dann ausgelöst wurde, wenn ich vorher nur eine Cursortaste und dann nur eine Steuertaste drückte. Also dachte ich, die löschen den vorangegangenen Keycode nicht und machte das selber. Damit kam beim Standard-Listener nichts mehr an. Das verhinderte damals auch das doppelte Auslösen des Previews :wink:
BTW: Überall in den Java-Docs im Web steht was von object.setKeyAccelerator(char), das weist mein 1.4.2-Compiler bei JButtons aber radikal zurück. setMnemonic klappte, aber dafür musste man den Slider-Focus verlassen und auf den Container klicken. Gefiel mir nicht.
(Soll aber jetzt kein Forum für Java-Anfänger werden... :wink: )
Daywalker
27.08.2003, 19:26
[Ich will natürlich niemanden bremsen mit und an Project X zu arbeiten, aber wenn wir Sourcen offiziell veröffentlichen, sollte das vielleicht nur an einer Stelle geschehen. Verlinken ist dann kein Problem.
Sorry wenn ich etwas zu voreilig war... :D
Werde in Zukunft darauf verlinken. :)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.