#!/bin/bash
#-------------------------------------------------------
# file:		muda_janela2.sh
# comment:	Muda a posicao dos botoes fechar, minimizar 
#               e maximizar do tema do Ubuntu 10.04
# author:	Desconhecido
# date:		12-mai-2010
# revision:	Aecio Pires <aeciopires@gmail.com>
# Last updated:	12-mai-2010, 19:40
#-------------------------------------------------------

# OBS.: 
#	1- De permissao de execucao a este script com o comando:
#		 chmod +x muda_janela2.sh
#	   Depois execute-o da seguinte forma:
# 	   	 Sintaxe: ./muda_janela2.sh

#
# FLUXOGRAMA GERAL:
#                      INICIO                    FIM
#                   +-----------+            +----------+
#          +------> |    menu   |--Esc-----> |  sai do  |
#          |        | principal |--Cancel--> | programa |
#          |        +-----Ok----+       +--> +----------+
#          |              |             |
#          +--<--1 2 3...-+--Zero--->---+

################################################################
# Funcoes Gerais 
################################################################

#----------------------------------------------------
# comment: Informa se o usuario que estah executando o script eh root
# syntax: isroot
# return: YES ou NO
#
isroot(){
	MYUID=$(id | cut -d= -f2 | cut -d\( -f1)
	[ $MYUID -eq 0 ] && echo YES || echo NO
}

#------------------------------------------------------------
# comment: Exibe as mensagens (Se a variavel $VERBOSE estiver com o valor 'YES')
# syntax: message "Texto da mensagem"
# return: Exibe a mensagem na saida padrao
#
message(){
[ "$VERBOSE" = YES ] && echo $*
}

#------------------------------------------------------------
# comment: Verifica se arquivos existem. Os nomes dos arquivos sao passados como parametro.
#          Se algum nao existe, escreve "NO" na saída. Se todos existem, escreve "YES".
# syntax: existfiles
# return: YES ou NO
#
existfiles(){
	OK=YES
	for file in "$@" ; do
		#echo "verificando arquivo $file ..." > /dev/tty
		[ ! -f $file ] && echo "Nao encontrei o(s) arquivo(s) \"$file\"" > /dev/tty && OK=NO
	done
	[ $OK = YES ] && return 0 || return 1
}

#------------------------------------------------------------
# comment: Verifica a existencia de comandos essenciais ao script
# syntax: check_essential_commands_script
#
check_essential_commands_script(){
	message "Verificando no sistema os comandos essenciais para o script..."
	ESSENTIALFILES="/usr/bin/dialog"
	existfiles $ESSENTIALFILES && return 0 || return 1
}

#-----------------------------------------------------------
# comment: Obtem o nome e o codnome da distribuicao
# syntax: LINUXDISTRO=$(get_linux_distro)
#         LINUXCODENAME=$(get_linux_distro -codename)
# return: $LINUXDISTRO contem o nome da distro e $LINUXCODENAME contem o codnome da distro
#
get_linux_distro(){
LINUXCODENAME=UNKNOWN
LINUXDISTRO=UNKNOWN

# Obtendo o nome da distro
grep "Debian" /etc/issue > /dev/null 2>&1 && LINUXDISTRO=DEBIAN 
grep "Ubuntu" /etc/issue > /dev/null 2>&1 && LINUXDISTRO=UBUNTU
grep "Red Hat Enterprise" /etc/issue > /dev/null 2>&1 && LINUXDISTRO=REDHAT

# Obtendo o codnome da distro
grep "Red Hat Enterprise Linux Server release 5.[234] (Tikanga)" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=Tikanga

grep "Debian GNU/Linux 5.0" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=lenny
grep "Debian GNU/Linux 4.0" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=etch
grep "Debian GNU/Linux 6.0" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=squeeze
grep "Debian GNU/Linux 3.1" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=sarge
grep "Debian GNU/Linux 3.0" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=woody
grep "Debian GNU/Linux 2.2" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=potato
grep "Debian GNU/Linux 2.1" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=slink
grep "Debian GNU/Linux 2.0" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=hamm

grep "Ubuntu 6.06.2" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=dapper
grep "Ubuntu 6.10"   /etc/issue > /dev/null 2>&1 && LINUXCODENAME=edgy
grep "Ubuntu 7.04"   /etc/issue > /dev/null 2>&1 && LINUXCODENAME=feisty
grep "Ubuntu 7.10"   /etc/issue > /dev/null 2>&1 && LINUXCODENAME=gutsy
grep "Ubuntu 8.04.2" /etc/issue > /dev/null 2>&1 && LINUXCODENAME=hardy
grep "Ubuntu 8.10"   /etc/issue > /dev/null 2>&1 && LINUXCODENAME=intrepid
grep "Ubuntu 9.04"   /etc/issue > /dev/null 2>&1 && LINUXCODENAME=jaunty
grep "Ubuntu 9.10"   /etc/issue > /dev/null 2>&1 && LINUXCODENAME=karmic
grep "Ubuntu 10.04"   /etc/issue > /dev/null 2>&1 && LINUXCODENAME=lucid

[ "$1" = "-codename" ] && echo $LINUXCODENAME || echo $LINUXDISTRO
}

#-----------------------------------------------------------
# comment: Obtem a arquitetura da distribuicao
# syntax: ARCH=$(get_arch_distro)
# return: $ARCHDISTRO contem a arquitetura da distro
#
get_arch_distro(){

#ARCHDISTRO=UNKNOWN

# Obtendo a arquitetura da distro
if `uname -m | grep '64' > /dev/null`
then 
        ARCHDISTRO=64
        echo $ARCHDISTRO
else 
        ARCHDISTRO=32
        echo $ARCHDISTRO
fi
}

#------------------------------------------------------------
# comment: Testa se o script tem suporte a distro detectada.
# syntax: test_distro_suport
#
test_distro_suport(){

        case $LINUXDISTRO in
	DEBIAN)
  	          message "Suporte OK"
	        ;;
	UBUNTU)
	        case $LINUXCODENAME in
	        jaunty)
	                message "Suporte OK"
	        ;;
	        karmic)
	                message "Suporte OK"
	        ;;
	        lucid)
	                message "Suporte OK"
	        ;;
	        *)
	                message "Este script nao esta preparado para instalar o $APPLICATION neste distro."
	                exit 1
	        ;;
	        esac
	        ;;
	REDHAT)
       	        message "Este script nao esta preparado para instalar o $APPLICATION neste distro."
	        ;;
	esac

}
################################################################
# Funcoes Especificas
################################################################

#------------------------------------------------------------
# comment: Exibe o menu de instalacao
# syntax: menu
# return: Menu com as opcoes
#
menu(){

dialog \
        --stdout \
        --backtitle "Distribuicao: $LINUXDISTRO $LINUXCODENAME $ARCHDISTRO bits" \
        --title 'Ajustando os botoes da janela' \
        --menu 'O que voce deseja fazer?' \
        0 0 0\
        1 'Mover os botoes para a direita' \
        2 'Mover os botoes para a esquerda' \
	0 'Sair'

}

#------------------------------------------------------------
# comment: Move os botoes para a direita
# syntax: button_right
# return: 
#
button_right(){
        gconftool-2 --type string --set "/apps/metacity/general/button_layout" "menu:minimize,maximize,close";
}

#------------------------------------------------------------
# comment: Move os botoes para a esquerda
# syntax: button_left
# return: 
#
button_left(){
        gconftool-2 --type string --set "/apps/metacity/general/button_layout" "close,minimize,maximize:menu";
}

#-----------------------------------------------
#-----------------------------------------------
# MAIN 
#-----------------------------------------------
#-----------------------------------------------

################################################################
# Declaracao de variaveis globais
################################################################

LINUXDISTRO=$(get_linux_distro)
LINUXCODENAME=$(get_linux_distro -codename)
ARCHDISTRO=$(get_arch_distro)
CMDLINE="$0"
VERBOSE=YES
#------------------------------------------------------------

if [ $(isroot) = YES ] ; then 
        message "Não execute este script como SUPERUSUÁRIO"
	echo "execute o comando \"$CMDLINE\""
	exit 1
fi

test_distro_suport

check_essential_commands_script || message "Resolva este problema com o comando: sudo apt-get install dialog" exit 1

while : ; do

    # Mostra o menu na tela, com as acoes disponíveis
    resposta=$( menu )

    # Se apertar CANCELAR ou ESC, a execucao do script eh encerrada
    [ $? -ne 0 ] && break
    # De acordo com a opcao escolhida, dispara as funcoes
    case $resposta in
         1)        
            # muda os botoes para a direita
            button_right
	    message "Finish!!! Pressione a tecla ENTER para voltar ao menu principal."
	    read TECLA
            ;;
         2) 
            # muda os botoes para a esquerda
            button_left
	    message "Finish!!! Pressione a tecla ENTER para voltar ao menu principal."
	    read TECLA
            ;;
         0) break;;
    esac

done

# Mensagem final :)
echo 'Bye!'

