Montag, 7. November 2011

yab - Bildschirm- Modus ändern

Nachdem ich vor kurzem aufgezeigt habe wie sich die Haiku- Bildschirm- Einstellungen per Kommando- Zeile ändern lassen, folgt nun eine Möglichkeit der Umsetzung in yab. Im Folgenden handelt es sich um ein kleines Beispiel- Programm welches als Anregung und Inspiration zu verstehen ist. Aus diesem Grund habe ich auch auf Sicherheitsabfragen verzichtet.

Das Beispiel- Programm, welches ich mit vielen Kommentaren versehen habe, sollte sich dabei ebenfalls von selbst erklären. Als Grundgerüst habe ich das "Basic Template" von yab 1.5 verwendet.


#!/boot/home/config/bin/yab

doc MiniScreenModeGUI
doc
doc Beispiel- Programm zum Ändern des Bildschirm- Modus
doc aus eigenen yab- Programmen.
doc
doc Arien Speers, 11/2011

// set DEBUG = 1 to print out all messages on the console
DEBUG = 0

// Nimmt die Liste aller verfügbaren Bildschirm- Modi auf
Resolution$ = _GetScreenResolutionList$()

// Programm- Fenster öffnen
OpenWindow()

// Main Message Loop
dim msg$(1)
while(not leavingLoop)
 nCommands = token(message$, msg$(), "|")

 for everyCommand = 1 to nCommands
  if(DEBUG and msg$(everyCommand)<>"") print msg$(everyCommand)

  switch(msg$(everyCommand))
   case "_QuitRequested":
   case "MainWindow:_QuitRequested":
    leavingLoop = true
    break
   // Ändern des Bildschirm- Modus auf Button- Klick
   case "MyButton":
    _ChangeResolution()
    break
   default:
    break
  end switch

 next everyCommand

wend

// Fenster wieder schließen
CloseWindow()

end


// Setup the main window here
sub OpenWindow()

 // Variablen- Definitionen
 local NumberOfTokens
 
 dim Line$(1)
 
 // Fenster öffnen
 window open 100,100 to 490,200, "MainWindow", "MiniScreenModeGUI"
 
 // eine DropBox erstellen
 dropbox 20, 20 to 370, 1, "MyDropBox", "Auflösung wählen", "MainWindow"
 
 // einen Button erstellen
 button 20, 60 to 370, 1, "MyButton", "Änderungen übernehmen", "MainWindow"
 
 // enthält die Anzahl der verfügbaren Bildschirm- Modi (Zeilen) 
 NumberOfTokens = split(Resolution$, Line$(), "\n")
 
 // alle Bildschirm- Modi zur DropBox hinzufügen
 for i = 1 to NumberOfTokens
 
  dropbox add "MyDropBox", Line$(i)
  
 next i
 
 return
 
end sub


// Close down the main window
sub CloseWindow()

 // Fenster wieder schließen
 window close "MainWindow"

 return

end sub


// Erstellt eine Liste aller verfügbaren Bildschirm- Modi
sub _GetScreenResolutionList$()

 // Variablen- Definition
 local SystemInput$
 
 // fürht den Befehl "screenmode -l" aus um die die Liste
 // der verfügbaren Bildschirm- Modi zu erhalten
 SystemInput$ = system$("screenmode -l")

 // gibt das Ergebnis zurück
 return SystemInput$
  
end sub


// Ändert den Bildschirm- Modus je nach gewählten Einstellungen
sub _ChangeResolution()

 // Variablen- Definition
 local Position
 
 // ermittelt die aktuelle Position des gewählten Eintrages
 // innerhalb der DropBox
 Position = dropbox get "MyDropBox"

 // wenn Position = 0, dann nichts unternehmen
 if Position <> 0 then
 
  // setzt den Bildschirm- Modus wie in der DropBox ausgewählt
  system("screenmode " + dropbox get$ "MyDropBox", Position + 1)
 
 endif
 
end sub


ACHTUNG: Wählt man eine Einstellung mit zu hoher Bildwiederholfrequenz, kann dies in einem schwarzen Bildschirm münden


(getestet mit Haiku R1 Alpha 3 und yab 1.5)

Keine Kommentare:

Kommentar veröffentlichen