sexta-feira, março 16, 2007

qemufácil

Este script encontrei no Viva o Linux

http://www.vivaolinux.com.br/scripts/verFonte.php?codigo=2570&arquivo=QFacil.py


----------------------------------------------------------------------------------------------------------------------------

#!/usr/bin/python
# -*- coding: utf-8 -*-

#
# Minha primeira experiencia em pygtk, uma interface simples para o qemu
# Apenas para aprender como se faz.
# Ele pega as opcoes definida na interface e de acordo com elas
# preprara os parametros a serem enviados e finalemente chama o qemu
#
# O Qemu deve estar instalado corretamente para que o script funcione
# E tambem o kqemu, caso queira usar essa opcao
#
# Muita coisa aqui nao foi feita da melhor forma possivel por ser meu primeiro script
# Qualquer dica, conselho, reclamacao etc é bem vindo
#
# Por diogosouza.eu (at) gmail.com
# Em 25-Fev-2007
#


import pygtk
pygtk.require('2.0')
import gtk

# Importado para passar instrucoes ao sistema operacional
import os


# classe principal
class teste:
   
   # construtor da janela
   def __init__(self):
      
      #inicia variaveis que vou usar depois
      self.audio = ""
      self.tela = ""
      self.hora = ""
      self.cdx = ""
      self.hdx = ""
      self.floppyx = ""
      self.parametros ="qemu "
      self.booton = "--> cdrom ON"
      
      # Aqui e onde a janela e criada
      self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
      self.win.connect('delete-event',gtk.main_quit)
      self.win.set_border_width(8)
      self.win.set_title('Qemu Facil')
      
      # Dividi a janela em quatro conteiners. O vbox e onde organizo tudo
      # no grid ficam as opcoes gerais, nos hbox os que sobraram
      self.vbox = gtk.VBox(False, 8)
      self.grid = gtk.Table(5,4)
      self.hbox = gtk.HBox(False, 8)
      self.hbox2 = gtk.HBox(False, 8)
      
      # Abaixo a construcao geral da janela
      self.grid.set_col_spacings(10)
      self.intro = gtk.Label("Qemu Facil - uma simples interface")
      
      self.label = gtk.Label('Usar')
      
      self.usar_cdrom = gtk.CheckButton("-->")
      self.usar_hd = gtk.CheckButton("-->")
      self.usar_floppy = gtk.CheckButton("-->")
      
      # Esses chamam as funcoes para definir as variaveis de acordo com as escolhas
      self.usar_cdrom.connect('toggled', self.activar_cdrom, "-->")
      self.usar_hd.connect('toggled', self.activar_hd, "-->")
      self.usar_floppy.connect('toggled', self.activar_floppy, "-->")
      
      self.label2 = gtk.Label('Boot')
      
      # Aqui eu ja tive de anexar logo a tabela e definir a função por serem radio
      # e eu nao sei trata-los de outra forma...
      self.boots = gtk.RadioButton(None, "")
      self.grid.attach(self.boots, 4 , 5, 1, 2)
      self.boots.connect('toggled', self.boot_cdrom, "-->")
      self.boots= gtk.RadioButton(self.boots, "")
      self.grid.attach(self.boots, 4, 5, 2, 3)
      self.boots.connect('toggled', self.boot_hd, "-->")
      self.boots = gtk.RadioButton(self.boots, "")
      self.grid.attach(self.boots, 4, 5, 3, 4)
      self.boots.connect('toggled', self.boot_floppy, "-->")
      
      self.label3 = gtk.Label('CDROM')
      self.label4 = gtk.Label('HardDisk')
      self.label5 = gtk.Label('Floppy')
      
      # Esses são quem guarda o endereço das imagens a serem usadas
      self.cdrom = gtk.Entry()
      self.hd = gtk.Entry()
      self.floppy = gtk.Entry()
      
      # Por default ficam os drivers físicos
      self.cdrom.set_text("/dev/cdrom")
      self.floppy.set_text("/dev/fd0")
      
      self.cdrom_busca = gtk.Button('Buscar')
      self.hd_busca = gtk.Button('Buscar')
      self.floppy_busca = gtk.Button('Buscar')
      
      self.cdrom_busca.connect("clicked", self.busca_cdrom)
      self.hd_busca.connect("clicked", self.busca_hd)
      self.floppy_busca.connect("clicked", self.busca_floppy)
      
      # Agora eu monto tudo no grid
      self.grid.attach(self.label, 0, 1, 0, 1)
      self.grid.attach(self.label2, 4, 5, 0, 1)
      
      self.grid.attach(self.usar_cdrom, 0, 1, 1, 2)
      self.grid.attach(self.label3, 1, 2, 1, 2)
      self.grid.attach(self.cdrom, 2, 3, 1, 2)
      self.grid.attach(self.cdrom_busca, 3, 4, 1, 2)
      
      self.grid.attach(self.usar_hd, 0, 1, 2, 3)
      self.grid.attach(self.label4, 1, 2, 2, 3)
      self.grid.attach(self.hd, 2, 3, 2, 3)
      self.grid.attach(self.hd_busca, 3, 4, 2, 3)
      
      self.grid.attach(self.usar_floppy, 0, 1, 3, 4)
      self.grid.attach(self.label5, 1, 2, 3, 4)
      self.grid.attach(self.floppy, 2, 3, 3, 4)
      self.grid.attach(self.floppy_busca, 3, 4, 3, 4)
      
      # Agora e o que entra no hbox, Memoria Ram e Kqemu
      self.label6 = gtk.Label('Ram(MB):')
      self.ram = gtk.combo_box_new_text()
      self.ram.append_text("64")
      self.ram.append_text("128")
      self.ram.append_text("256")
      self.ram.append_text("512")
      
      self.label7 = gtk.Label('Kqemu')
      self.kqemu = gtk.combo_box_new_text()
      self.kqemu.append_text("Sim - com kernel")
      self.kqemu.append_text("Sim - simples")
      self.kqemu.append_text("Nao usar")
      
      self.hbox.pack_start(self.label6)
      self.hbox.pack_start(self.ram)
      self.hbox.pack_start(self.label7)
      self.hbox.pack_start(self.kqemu)
      
      # Segundo hbox, Localtime, Audio e Fullscreen
      self.localtime_c = gtk.CheckButton("Hora Local")
      self.audio_c = gtk.CheckButton("Audio")
      self.fullscreen_c = gtk.CheckButton("Tela Cheia")
      
      self.localtime_c.connect('toggled', self.activar_hora, "-->")
      self.audio_c.connect('toggled', self.activar_audio, "-->")
      self.fullscreen_c.connect('toggled', self.activar_tela, "-->")
      
      self.hbox2.pack_start(self.localtime_c)
      self.hbox2.pack_start(self.audio_c)
      self.hbox2.pack_start(self.fullscreen_c)
      
      # Caso o usuario queira algo mais...
      self.label8 = gtk.Label("Parametros adcionais")
      self.extra = gtk.Entry()
      
      # Botão para chamar o qemu
      self.entrar = gtk.Button("Entrar")
      self.entrar.connect("clicked", self.emular)
      
      # Agora tudo entra no vbox na ordem certa
      self.vbox.pack_start(self.intro)
      self.vbox.pack_start(self.grid)
      self.vbox.pack_start(self.hbox)
      self.vbox.pack_start(self.hbox2)
      self.vbox.pack_start(self.label8)
      self.vbox.pack_start(self.extra)
      self.vbox.pack_start(self.entrar)
      
      self.win.add(self.vbox)
      self.win.show_all()
            
   # As funcoes a seguir sao do botao de busca das imagens
   # Ele abre uma caixa de selecao de arquivos e passa o arquivo
   # selecionado para a entrada devida, os gtk.Entry, que sao lidos mais tarde
   def file_ok_cdrom(self, w):
      self.fc = " %s " % self.filec.get_filename()
      self.cdrom.set_text(self.fc)
      self.filec.hide()
      
   def file_ok_hd(self, w):
      self.fh = " %s " % self.fileh.get_filename()
      self.hd.set_text(self.fh)
      self.fileh.hide()
      
   def file_ok_floppy(self, w):
      self.ff = " %s " % self.filef.get_filename()
      self.floppy.set_text(self.ff)
      self.filef.hide()
      
   def destroy(self, widget):
      self.filec.hide()
      self.fileh.hide()
      self.filef.hide()
      
   def busca_cdrom(self, widget, data=None):
      self.filec = gtk.FileSelection("File selection")
      self.filec.connect("destroy", self.destroy)
      self.filec.ok_button.connect("clicked", self.file_ok_cdrom)
      self.filec.cancel_button.connect("clicked",lambda w: self.filec.destroy())
      self.filec.show()
      
   def busca_hd(self, widget, data=None):
      self.fileh = gtk.FileSelection("File selection")
      self.fileh.connect("destroy", self.destroy)
      self.fileh.ok_button.connect("clicked", self.file_ok_hd)
      self.fileh.cancel_button.connect("clicked",lambda w: self.fileh.destroy())
      self.fileh.show()
      
   def busca_floppy(self, widget, data=None):
      self.filef = gtk.FileSelection("File selection")
      self.filef.connect("destroy", self.destroy)
      self.filef.ok_button.connect("clicked", self.file_ok_floppy)
      self.filef.cancel_button.connect("clicked",lambda w: self.filef.destroy())
      self.filef.show()
      
   # As funcoes abaixo apenas servem para definir as variaveis que depois serao lidas
   # para passa-las ao qemu. Se ve quais Discos usar e em qual esta o Boot
   
   def activar_cdrom(self, widget, data=None):
      self.cdx = "%s cdrom %s" % (data, ("OFF", "ON")[widget.get_active()])
      
   def activar_hd(self, widget, data=None):
      self.hdx = "%s hd %s" % (data, ("OFF", "ON")[widget.get_active()])
   
   def activar_floppy(self, widget, data=None):
      self.floppyx = "%s floppy %s" % (data, ("OFF", "ON")[widget.get_active()])

   def boot_cdrom(self, widget, data=None):
      self.booton = "%s cdrom %s" % (data, ("OFF", "ON")[widget.get_active()])
   
   def boot_hd(self, widget, data=None):
      self.booton = "%s hd %s" % (data, ("OFF", "ON")[widget.get_active()])
   
   def boot_floppy(self, widget, data=None):
      self.booton = "%s floppy %s" % (data, ("OFF", "ON")[widget.get_active()])
   
   # Essa verifica as ultimas instruções passadas, Audio, Hora e TelaCheia
   
   def activar_audio(self, widget, data=None):
      self.audio = "%s audio %s" % (data, ("OFF", "ON")[widget.get_active()])
      
   def activar_hora(self, widget, data=None):
      self.hora = "%s hora %s" % (data, ("OFF", "ON")[widget.get_active()])
   
   def activar_tela(self, widget, data=None):
      self.tela = "%s tela %s" % (data, ("OFF", "ON")[widget.get_active()])
      
      
   def emular(self, button):
      # Essa funcao e que chama o qemu com os devidos parametros
      # Ele primeiro verifica quais itens usar.
      
      self.parametros = "qemu "
      self.imagem = 0
      self.boot = 0
      self.mram = 0
      
      self.active = self.ram.get_active()
      self.activek = self.kqemu.get_active()
      
      # Primeiro ve quais discos carregar e em qual boot
      # mas so deixa boot em disco carregado e so ativa disco com imagem selecionada
      
      if self.cdx == "--> cdrom ON" and self.cdrom.get_text() != "" :
         self.parametros = self.parametros +" -cdrom "+ self.cdrom.get_text()
         self.imagem = 1
         if self.booton == "--> cdrom ON":
            self.parametros = self.parametros +" -boot d"
            self.boot = 1
         
      if self.hdx == "--> hd ON" and self.hd.get_text() != "" :
         self.parametros = self.parametros +" -hda "+ self.hd.get_text()
         self.imagem = 1
         if self.booton == "--> hd ON":
            self.parametros = self.parametros +" -boot c"
            self.boot = 1
         
      if self.floppyx == "--> floppy ON" and self.floppy.get_text() != "":
         self.parametros = self.parametros +" -fda "+ self.floppy.get_text()
         self.imagem = 1
         if self.booton == "--> floppy ON":
            self.parametros = self.parametros +" -boot a"
            self.boot = 1      
            
      # Depois define a RAM a ser usada
      if self.active == 0 :
         self.mram = "64"
      elif self.active == 1 :
         self.mram = "128"
      elif self.active == 2 :
         self.mram = "256"
      elif self.active == 3 :
         self.mram = "512"
      else:
         self.mram = "128"
      
      self.parametros = self.parametros +" -m "+ self.mram
      
      # Verifica se e ou nao para usar kqemu
      if self.activek == 0 :
         self.parametros = self.parametros +" -kernel-kqemu "
      elif self.activek == 2:
         self.parametros = self.parametros +" -no-kqemu "
         
      # E as opcoes extras
      
      if self.audio == "--> audio ON" :
         self.parametros = self.parametros +" -soundhw all "
         
      if self.tela == "--> tela ON" :
         self.parametros = self.parametros +" -full-screen "
         
      if self.hora == "--> hora ON" :
         self.parametros = self.parametros +" -localtime "
         
      # E por fim adciona os parametros extras
      self.parametros = self.parametros + " " + self.extra.get_text()
      
      # Agora verifica se o minimo foi configurado
      if self.boot == 1 and self.imagem == 1 :
         # Essa função envia a string ja definida para o sistema
         # e retorna o output para lugar nenhum(/dev/null)
          os.system(self.parametros)
      else:
         # Caso falte algum item ele exibe essa mensagem de erro.
         self.alert = gtk.MessageDialog(None, gtk.DIALOG_MODAL, buttons = gtk.BUTTONS_CLOSE, message_format = "Sistema nao esta pronto para iniciar, verifique suas opcoes")
         self.resp = self.alert.run()
         self.alert.show()
         if self.resp == gtk.RESPONSE_CLOSE:
            self.alert.destroy()
            
         
      
# Abaixo o programa e iniciado

   def main(self):
      gtk.main()


teste = teste()
teste.main()






--------------------------------------------------------------------------------------------------------------------------------

--
=========================
Alexandre Miguel de Andrade Souza

Nenhum comentário: