aboutsummaryrefslogtreecommitdiff
path: root/tools/Linux/FEH.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/Linux/FEH.py')
-rw-r--r--tools/Linux/FEH.py173
1 files changed, 173 insertions, 0 deletions
diff --git a/tools/Linux/FEH.py b/tools/Linux/FEH.py
new file mode 100644
index 0000000000..bf83f57efc
--- /dev/null
+++ b/tools/Linux/FEH.py
@@ -0,0 +1,173 @@
+import os
+import sys
+import re
+
+AvailableOutputs = []
+Output = None
+
+try:
+ from qt import *
+ AvailableOutputs.append("--error-output=Qt")
+except:
+ pass
+try:
+ import pygtk
+ pygtk.require('2.0')
+ import gtk
+ AvailableOutputs.append("--error-output=GTK")
+except:
+ pass
+try:
+ import pygame
+ import datetime
+ AvailableOutputs.append("--error-output=SDL")
+except:
+ pass
+
+def error(errorLine):
+ if Output == "--error-output=Qt":
+ createQt(errorLine)
+ elif Output == "--error-output=GTK":
+ createGTK(errorLine)
+ elif Output == "--error-output=SDL":
+ createSDL(errorLine)
+ else:
+ print errorLine
+
+ exit(1)
+
+def createQt(errorLine):
+ app = QApplication(sys.argv)
+ QObject.connect(app, SIGNAL('lastWindowClosed()')
+ , app
+ , SLOT('quit()')
+ )
+
+ dialog = QDialog(None, "Error", 0, 0)
+ dialog.setCaption(dialog.tr("Error"))
+ layout=QVBoxLayout(dialog)
+ layout.setSpacing(6)
+ layout.setMargin(5)
+
+ label=QLabel(errorLine, dialog)
+
+ layout.addWidget(label)
+
+ bnExit=QPushButton("Quit", dialog, "add")
+ dialog.connect(bnExit, SIGNAL("clicked()"), qApp, SLOT("quit()"))
+
+ layout.addWidget(bnExit)
+
+ app.setMainWidget(dialog)
+ dialog.show()
+ app.exec_loop()
+
+def createGTK(errorLine):
+ window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ window.connect("destroy", lambda w: gtk.main_quit())
+
+ window.set_title("Error")
+ vbox = gtk.VBox(False, 5)
+ window.add(vbox)
+ window.set_border_width(5)
+
+ frame = gtk.Frame()
+ frame.set_shadow_type(gtk.SHADOW_NONE)
+ label = gtk.Label(errorLine)
+ frame.add(label)
+ vbox.pack_start(frame, False, False, 0)
+
+ button = gtk.Button("Quit")
+ button.connect_object("clicked", gtk.Widget.destroy, window)
+
+ vbox.pack_start(button, False, False, 0)
+
+ window.show_all ()
+
+ gtk.main()
+
+def createSDL(errorLine):
+ pygame.init()
+ pygame.font.init()
+ pygame.display.set_caption("Error")
+
+ size = width, height = 800, 600
+ speed = [2, 2]
+ black = 0, 0, 0
+
+ screen = pygame.display.set_mode(size)
+ font = pygame.font.Font(None, 32)
+
+ autoQuit = 10
+ start = datetime.datetime.now()
+ finish = datetime.datetime.now()
+ delta = finish - start
+ while delta.seconds < autoQuit:
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT or event.type == pygame.KEYDOWN:
+ sys.exit()
+
+ screen.fill(black)
+
+ place = [200, 200]
+ for line in errorLine.split('\n'):
+ text = font.render(line, 1, (255,255,255) )
+ place[1] += font.size(line)[1]
+ screen.blit(text, text.get_rect().move(place))
+
+
+ quitline = "Press any button to continue ("
+ quitline += str(autoQuit - delta.seconds)
+ quitline += ")"
+ text = font.render(quitline, 1, (255,255,255) )
+ screen.blit(text, text.get_rect().move(200,400))
+
+ pygame.display.flip()
+
+ finish = datetime.datetime.now()
+ delta = finish - start
+
+def badDirectRendering():
+ out = os.popen("glxinfo | grep \"direct rendering\"", 'r')
+ line = out.read()
+ direct = "Yes" not in line
+ out.close()
+
+ return direct
+
+def badColorDepth():
+ out = os.popen('xdpyinfo | grep "depth of root"', 'r')
+
+ p = re.compile("([0-9]*) planes")
+ for line in out.readlines():
+ match = p.search(line)
+ if (match is not None):
+ if int(match.group(1)) > 16:
+ bitDepth = False
+ else:
+ bitDepth = True
+ out.close()
+
+ return bitDepth
+
+def possibleOutput(text):
+ return text in sys.argv and text in AvailableOutputs
+
+if __name__=="__main__":
+ if len(AvailableOutputs) > 0:
+ Output = AvailableOutputs[0]
+ else:
+ Output = None
+
+ for text in sys.argv:
+ if possibleOutput(text):
+ Output = text
+
+ if "--no-test" in sys.argv:
+ exit(0)
+
+ if (badDirectRendering()):
+ error("XBMC needs hardware accelerated OpenGL rendering.\nInstall an appropriate graphics driver.\n\nPlease consult XBMC Wiki for supported hardware\nhttp://xbmc.org/wiki/?title=Supported_hardware")
+
+ if (badColorDepth()):
+ error("XBMC cannot run unless the\nscreen color depth is atleast 24 bit.\n\nPlease reconfigure your screen.")