Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Linux  >

Introduzindo Plasmóides KDE 4

Plasma, o Shell de Desktop do KDE 4, melhora a experiência do desktop com seus applets de Plasma simples, os plasmóides

developerWorks
Opções de documento

Opções de documento que necessitam de JavaScript não são exibidas

Código de amostra


Classificar esta página

Ajude-nos a melhorar este conteúdo


Nível: Intermediário

Martyn Honeyford, Software Engineer, IBM UK Labs

14/Jun/2009

O KDE 4 inclui várias novas tecnologias estimulantes, incluindo Plasma, um recurso que forma o shell do desktop do KDE 4. Veja como gravar applets de Plasma simples (conhecidos como plasmóides) para melhorar muito a experiência do desktop e como transformar um plasmóide em um monitor de memória simples.

KDE, o K Desktop Environment, é um projeto de software gratuito baseado em um ambiente de desktop para sistemas estilo UNIX®. Ele fornece funções de desktop básicas e aplicativos para necessidades do dia a dia, bem como ferramentas e documentação para os desenvolvedores gravarem aplicativos independentes para o sistema. O software KDE é baseado no kit de ferramentas Qt. O principal aspecto da quarta série do KDE é um desktop reprojetado e painéis, chamados coletivamente de Plasma, que integram a funcionalidade do Kicker, KDesktop e SuperKaramba em um pedaço de tecnologia.

KDE 4 Oferece uma Nova Esperança

A quarta versão principal do K Desktop Environment (KDE) foi liberada em janeiro de 2008 com reações mistas. O release marcou um importante compromisso:

  • Grande quantidade do código base do KDE 3 foi completamente regravada.
  • Um grande número de novas tecnologias foi criado.
  • A maioria dos códigos base foi refatorada de alguma forma.

Embora o release inicial 4.0 tenha mostrado um grande potencial, o escopo das mudanças significou que o release não apresentaria uma igualdade de recursos com o KDE 3. Por isso ele foi amplamente relatado como instável em certas áreas e alguns usuários foram relutantes em fazer a mudança imediatamente. Muitos desses defeitos foram abordados no release 4.1, mas ainda havia muitas omissões de recurso importantes.

Com o release de janeiro de 2009 do KDE 4.2, entretanto, a maioria dessas preocupações foi abordada e muitos usuários decidiram começar a utilizar o 4.2 como seu ambiente de desktop principal.

Agora é um bom momento para examinar esses novos recursos e tecnologias a fundo, já que muitos usuários têm acesso a eles.



Voltar para parte superior


KDE 4.2 Ressuscita o Desktop

Este artigo se concentra em uma das mais estimulantes das novas tecnologias: Plasma e applets de Plasma (que costumam ser chamados de plasmóides).

A ideia por trás do Plasma é simples: Você tem uma ou mais restrições de Plasma, que são elementos exibíveis capazes de conter itens individuais como widgets/plasmóides e/ou outras restrições de Plasma.

Este conceito não parece particularmente inovador até você perceber que por trás do KDE 4, o shell de desktop inteiro (o desktop principal que é apresentado ao usuário) é, de fato, uma restrição de Plasma, e que todos os controles familiares, como a barra de tarefas, a lista de tarefas, o relógio, o alternador de tarefas, Menu k, ícones de ativação rápida, etc., são todos implementados como applets de Plasma (como o relógio) ou como restrições de Plasma (a barra de tarefas).

Isso é extremamente estimulante. Isso dá aos usuários do KDE 4 um potencial incrível para customização, permitindo que desenvolvedores e/ou indivíduos alterem quase qualquer aspecto da experiência do desktop, alterando completamente seu comportamento quando necessário. Por exemplo, se você quiser um ativador de aplicativos poderoso com mais capacidade do que o padrão, utilize um ativador como Lancelot, que está atualmente em desenvolvimento. Se o espaço for pequeno, grave um ativador de aplicativo mais parecido com o visto em DEs leves clássicos (como XFCE), em que um simples pop-up é exibido com um clique com o botão direito, e remova o ativador comum para fornecer mais espaço na tela.

Essa ideia simples deve permitir ao KDE 4 crescer em um desktop universal, pois distribuições e usuários podem adaptar o KDE a várias configurações. Por exemplo, máquinas potentes podem se beneficiar com applets e todos os seus adicionais grandes e complexos, enquanto máquinas com menos cavalo-vapor podem contar com versões mais simples/leves dos componentes necessários e remover componentes desnecessários. Além disso, não é mais necessário substituir o KDE 4 por um DE mais leve e especializado.

Embora esses applets de Plasma possam ser um pouco complicados, eles devem ser aplicativos pequenos com estilo de utilitário, que você poderia preferir utilizar sempre em vez de aplicativos completos. Normalmente eles são integrados em seu desktop e/ou barra de tarefas; alguns exemplos clássicos são monitores de sistema, sistemas de mensagens instantâneas, ferramentas de redes de relacionamentos, etc.

Outro recurso de design comum é o seu uso relativamente pequeno de espaço na tela. Você não vai querer um monte de plasmóides abertos no desktop todas as vezes, sem sobreposição. Eles não aparecem no gerenciador de janelas como janelas separadas, portanto, você pode se mover rapidamente entre eles ou minimizá-los.

Além da tecnologia de restrição de Plasma básica, os desenvolvedores de KDE também tiveram o trabalho de deixar a gravação de applets de Plasma poderosos o mais fáceis e flexíveis possível. Os recursos incluem:

  • Suporte superior para scalar vector graphics (SVG) para todos os elementos da GUI. Todos os aplicativos/applets podem então ser independentes de resolução com pouca escalação. O mesmo aplicativo parecerá bom e se comportará bem em um monitor de alta definição de 30 polegadas e em uma tela de netbook de 8 polegadas—sem exigir nenhum trabalho adicional do desenvolvedor.
  • Excelente suporte para criação de temas. Os desenvolvedores são ativamente estimulados a consultar todos os recursos como ícones, segundo plano, etc., utilizando caminhos relativos para que o KDE possa localizá-los no tempo de execução com base no tema atualmente selecionado. Isso deve permitir que todos os aplicativos KDE 4 se beneficiem de um aspecto consistente em diferentes temas, mais uma vez, sem trabalho adicional para o desenvolvedor.
  • Suporte a várias linguagens. Os plasmóides do KDE 4 (como aplicativos KDE em geral) podem ser gravados em inúmeras linguagens de programação diferentes. Este artigo se concentra em C++, mas outras linguagens estão em desenvolvimento, como Ruby, Python e Javascript.
  • Reutilização de componente. O KDE possui excelente suporte para permitir que componentes reutilizem os serviços fornecidos pelos outros.

Agora que você tem um pouco de conhecimento sobre Plasma, vamos começar a gravar um plasmóide simples para incluir em nosso desktop do KDE do 4.2.



Voltar para parte superior


O IDE do KDevelop 4

Estas instruções supõem que você esteja executando um desktop do KDE 4.2 Algumas ou todas as instruções podem ser aplicáveis ao KDE 4.1, mas isso não foi confirmado.

Em primeiro lugar: Você precisa instalar todas as bibliotecas de desenvolvimento do KDE, cabeçalhos, etc.

Estou utilizando o release estável atual do Kubuntu 8.10 (Intrepid Ibex), fornecido com KDE 4.1 por padrão, por isso tive que ativar os repositórios PPA para obter o KDE 4.2 e os cabeçalhos (consulte http://www.kubuntu.org/news/kde-4.2 para obter detalhes). (Esta etapa não é necessária para usuários do Kubuntu 9.04 (mas para instalar g++ e kdesdk, etc, ela é). Observe que esta versão do KDE não é suportada atualmente pelo Canonical, portanto é melhor usar um ambiente de desenvolvimento em vez de sua máquina principal.

Após o repositório PPA ser incluído, eu apenas instalei kdesdk, g++, cmake e alguns pacotes kde-dev, como a seguir:


Lista 1. Construindo o Ambiente de Desenvolvimento do KDE

sudo apt-get update
sudo apt-get install kdesdk
install cmake
sudo apt-get install g++
sudo apt-get install libphonon-dev libplasma-dev

Ela capturou tudo que eu precisava em minha máquina. Se você estiver utilizando outra distribuição, será necessário determinar como instalar esses pacotes.

KDevelop 4 possui um modelo ideal para a geração automática de um plasmóide básico. Infelizmente, no momento da gravação, o KDevelop 4 ainda está em beta, e não existe nenhum release binário disponível para Intrepid, portanto, para seguir adiante, você precisa construí-lo a partir da origem seguindo essas instruções relativamente simples.

Quando o KDevelop Não É Sua Escolha
Se você não quiser utilizar o KDevelop, recomendo o excelente artigo de base tecnológica do KDE Introdução," que explica seus princípios básicos. Se seguir as etapas, você vai terminar com um projeto bastante semelhante ao que estamos criando com o KDevelop, e você pode pular para a seção "Modificando a Amostra."

Após colocar o KDevelop em execução, conforme mostrado na Figura 1, abra o Projeto e selecione Novo do Modelo. Quando o diálogo aparecer, expanda C++, em seguida, as ramificações do KDE e selecione Modelo de Applet de Plasma. Em seguida, preencha o Nome do Aplicativo (sugiro dwPlasmoid). Em seguida, clique em Avançar e Concluir.


Figura 1. Criação de Projeto
Caixa de diálogo da Criação de Projeto

A caixa de diálogo final pede que você escolha um diretório Prefixo da Instalação (recomendo $HOME/plasmoids) e um tipo de compilação (escolha Release ou Depuração).

Isso deve criar o projeto. Pare um momento para ler os arquivos .cpp e .h bem documentados. Além disso, o artigo de base tecnológica mencionado anteriormente tem explicações adicionais sobre o que o código está fazendo.

Agora que você criou o projeto, você está pronto para compilá-lo. Comece abrindo Projeto e escolhendo build (ou pressionando F8). Na primeira vez, isso chamará configure, e depois disso, ocorrerá a compilação.

Supondo que a compilação tenha sido feita com sucesso, selecione Instalar no menu Projeto. Isso copia os arquivos de instalação no diretório que você escolheu anteriormente. Se essa ação for concluída sem nenhum incidente, você estará pronto para testar.

Antes de poder executar o novo plasmóide, você precisa informar o KDE sobre sua existência. Primeiro é preciso conscientizar o KDE do diretório onde o plasmóide está instalado ($HOME/plasmoids). Comece abrindo um "konsole" para configurar a variável de ambiente KDEDIRS e executando o comando kbuildsyscocoa4. Abra um terminal e digite as linhas na Lista 2:


Lista 2. Conscientizando o KDE do Local do Plasmóide

export KDEDIRS=$KDEDIRS:$HOME/plasmoids
kbuildsyscocoa4

Agora que o KDE sabe do plasmóide, você pode tentar executá-lo. plasmoidviewer é um utilitário conveniente que pode ser utilizado para fins de teste. Obtenha-o digitando plasmoidviewer dwplasmoid. Você deverá ver o plasmóide de amostra exibido em uma janela conforme mostrado na Figura 2:


Figura 2. Seu Plasmóide Básico
Captura de tela do Plasmóide Básico

Como isso é um plasmóide, você também pode integrá-lo ao desktop. Entretanto, se tentar incluir o plasmóide agora (utilizando o item de menu Incluir Widgets no desktop), você verá dwPlasmoid na lista de plasmóides, mas se tentar incluí-lo, ele não funcionará! Embora KDEDIRS tenha sido configurado corretamente quando você executou kbuildsyscocoa4, ele não foi configurado corretamente no ambiente quando o desktop do Plasma foi iniciado, portanto, ele não poderá localizar todos os arquivos necessários.

Você pode corrigir isso encerrando a atual instância do Plasma que está em execução e reiniciando-a a partir da linha de comandos (utilize a mesma de antes para que o KDEDIRS permaneça configurado corretamente; caso contrário, reconfigure-o antes de executar os comandos a seguir). Observe que isso vai encerrar e reiniciar o Plasma graciosamente, portanto, certifique-se de não estar fazendo nada que possa ser interrompido por essa ação (por exemplo, salvar um trabalho não salvo em outros plasmóides). Você encerra a atual instância do Plasma conforme mostrado na Lista 3.


Lista 3. Encerrando a Atual Instância do Plasma

kquitapp plasma && kstart plasma

Agora você deve estar preparado para incluir o plasmóide no desktop, e ele permanecerá lá exibindo seus ícones e suas mensagens simples o dia inteiro. Você pode até incluir três deles e se beneficiar com os recursos de rotação e escalação integrados, conforme mostrado na Figura 3:


Figura 3. Várias Instâncias do Plasmóide Integrado no Desktop
Captura de tela das Várias Instâncias do Plasmóide Integrado no Desktop

Uma alternativa para o que acabei de mostrar é configurar o diretório de instalação para /usr (supondo que ele seja o diretório onde o KDE está instalado no sistema). Isso causará falha da etapa de instalação, a menos que você execute o KDevelop como um superusuário (ou faça a instalação manualmente como superusuário mudando para o diretório de compilação, $HOME/projects/dwPlasmoid/build, e executando sudo make install).

Nota:: Se quiser manter esses plasmóides em seu desktop, e quiser que eles trabalhem após uma reinicialização sem parar e iniciar o Plasma novamente, você vai precisar dizer ao KDE 4 para examinar seu diretório do plasmóide na inicialização. Uma maneira de se fazer isso é incluir uma linha no arquivo kde4rc (/etc/kde4rc), como mostra a Lista 4:


Lista 4. Dizendo ao KDE para Examinar o Diretório do Plasmóide na Inicialização

[Directories]
prefixes=/home/martynh/plasmoids



Voltar para parte superior


Modificando a Amostra

Bem, agora que temos um plasmóide simples, vamos fazer com que ele faça coisas mais interessantes do que apenas exibir textos estáticos. Vamos transformar o plasmóide em um monitor de memória simples.

Primeiro, tente organizar a bagunça na janela removendo o ícone e o plano de fundo. No construtor (dwPlasmoid::dwPlasmoid), você vai comentar a linha do código que define o plano de fundo, conforme mostrado na Lista 5:


Lista 5. Comentando a Linha do Código que Define o Segundo Plano

//    setBackgroundHints(DefaultBackground);
//    m_svg.setImagePath("widgets/background");

Em seguida, no método de interface de coloração (dwPlasmoid::paintInterface), comente a linha da parte que inclui o ícone, como mostra a Lista 6:


Lista 6. Comentando a Linha do Código que Inclui o Ícone

//    p->ldrawPixmap(7, 0, m_icon.pixmap((int)contentsRect.width(),
      (int)contentsRect.width()-14));
//    p->save();

Se reconstruir e reiniciar tudo isso como antes, você verá que agora a janela é apenas uma janela preta com o texto "Hello Plasmoid", conforme mostrado na Figura 4:


Figura 4. Plasmóide com Plano de Fundo e Ícone Removidos
Captura de tela do Plasmóide com Plano de Fundo e Ícone Removidos

Em seguida, você vai substituir o texto por algo um pouco mais útil: algumas informações em tempo real sobre o uso de memória do sistema.

Se estiver familiarizado com Linux®, talvez você saiba que existem inúmeros arquivos especiais sob o diretório /proc que dão informações em tempo real sobre o sistema em execução. O arquivo no qual estamos interessados é o /proc/meminfo. Você pode examinar o conteúdo desse arquivo digitando este comando: cat /proc/meminfo. Esse comando mostra várias informações sobre o estado atual da memória em nosso sistema.

Vamos alterar o programa que construímos para que ele leia periodicamente esse arquivo e exiba as informações dentro do plasmóide. Comece lendo o arquivo e extraindo as informações. Felizmente, o kit de ferramentas Qt torna isso relativamente simples.

Você vai criar um novo método e vai incluir algumas novas variáveis de membro na classe. No arquivo de cabeçalho, você vai incluir o método como um slot, conforme mostrado na Lista 7 (você verá o porque em breve):


Lista 7. Incluindo o Método como um Slot

    public slots:
        void updateMemoryCount();

Em seguida, inclua algumas novas variáveis de membro privadas, conforme mostrado na Lista 8:


Lista 8. Incluindo Novas Variáveis de Membro Privadas

     private:
        Plasma::Svg m_svg;
        KIcon m_icon;
        int m_totalMemory;
        int m_freeMemory;
        int m_swapMemory;
        int m_freeSwapMemory;

Em seguida, coloque a implementação no arquivo cpp, conforme mostrado na Lista 9:


Lista 9. Incluindo a Implementação no Arquivo cpp

#include <QFile>
...
void dwPlasmoid::updateMemoryCount()
{
   // abra o arquivo
   QFile file("/proc/meminfo");
   if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
   {
        exit(-1);
   }

   QTextStream in(&file);
   QString line = in.readAll();

   // remova quaisquer caracteres estranhos
   line = line.simplified();

   // extraia as informações nas quais estamos interessados utilizando uma 
   expressão regular
   QRegExp regex("MemTotal: (\\d+).*MemFree: (\\d+).*SwapTotal: (\\d+)"
    ".*SwapFree: (\\d+)");   regex.indexIn(line);
   m_totalMemory = (regex.cap(1).toInt());
   m_freeMemory = (regex.cap(2).toInt());
   m_swapMemory = (regex.cap(3).toInt());
   m_freeSwapMemory = (regex.cap(4).toInt());

   // force uma nova remoção
   update();
}

Esse método abre o arquivo, lê o conteúdo e extrai os valores nos quais estamos interessados utilizando uma expressão regular.

Em seguida, você precisa alterar o método de coloração (dwPlasmoid::paintInterface) para incluir essas informações, e não a mensagem existente, conforme mostrado na Lista 10:


Lista 10. Alterando o Método de Coloração

   int percentageFreeMem = (m_freeMemory * 100) / m_totalMemory;
   int percentageFreeSwap = (m_freeSwapMemory * 100) / m_swapMemory;

   char message[256];

   sprintf(message,"Total Memory: %d\nFree Memory: %d\nPercent free mem: %d\n"
                   "Total Swap: %d\nFree Swap: %d\nPercent free swap: %d",
                   m_totalMemory, m_freeMemory, percentageFreeMem,
                   m_swapMemory, m_freeSwapMemory, percentageFreeSwap);

    p->setPen(Qt::white);
    p->drawText(contentsRect,
                Qt::AlignTop | Qt::AlignHCenter,
                message);
    p->restore();

Por fim, coloque uma chamada para updateMemoryCount no construtor para ler os valores iniciais para os números da memória: updateMemoryCount();.

Se compilar e executar isso, você verá que será exibido o uso de memória correto de quando o plasmóide for iniciado, como mostra a Figura 5:


Figura 5. Um Monitor de Memória Estática
Captura de tela de Um Monitor de Memória Estática

Isso é um progresso, mas uma exibição estática do uso de memória do sistema não é tão interessante. A parte final do enigma é fazer o plasmóide se atualizar periodicamente para fornecer as leituras atuais durante todo o seu ciclo de vida. Isso é fácil porque você declarou o método de atualização como um slot. Você só precisa incluir o seguinte no método init, como mostra a Lista 11:


Lista 11. Fazendo o Plasmóide se Atualizar Periodicamente

#include <QTimer>
...
  // Inicie um cronômetro de atualização
  QTimer* m_timer = new QTimer(this);
  connect(m_timer, SIGNAL(timeout()), this, SLOT(updateMemoryCount()));
  m_timer->start(1000);

Isso inicia um cronômetro que é disparado a cada segundo e que chama o slot updateMemoryCount.

Se compilá-lo e iniciá-lo, você verá que ele será atualizado automaticamente a cada segundo!


Figura 6. Atualizando Dinamicamente Plasmóides de Memória Integrados no Desktop
Captura de tela Atualizando Dinamicamente Plasmóides de Memória Integrados no Desktop

Observe que esses valores não estão necessariamente sincronizados. Essas instâncias do plasmóide foram incluídas em momentos diferentes, portanto, cada uma iniciou seu cronômetro em um momento diferente.



Voltar para parte superior


Conclusão

Como você pode ver, em um curto período de tempo, você pode gravar um monitor de memória razoavelmente sofisticado integrado em seu desktop.

A tecnologia de plasmóides permite gravar utilitários/monitores poderosos e com várias finalidades. E consideravelmente, os plasmóides são tão simples que você pode gravar utilitários bastante especializados que sejam úteis para você e que se integrem perfeitamente ao seu ambiente de desktop.

Espero que este artigo inspire você a continuar e a criar plasmóides interessantes. Utilize a seção de comentários abaixo para contar para mim e para outros leitores sua experiência e seus resultados.




Voltar para parte superior


Download

DescriçãoNomeTamanhoMétodo de download
Code samples for this articlecode.zip23KBHTTP
Informações sobre métodos de download


Recursos

Aprender

Obter produtos e tecnologias
  • Com o software de teste da IBM, disponível para download diretamente a partir do developerWorks, construa seu próximo projeto de desenvolvimento no Linux.


Discutir
  • Envolva-se na comunidade do My developerWorks; com seu perfil pessoal e sua página inicial customizada, você pode padronizar o developerWorks de acordo com seus interesses e interagir com outros usuários do developerWorks.


Sobre o autor

author photo - martyn honeyford

Martyn Honeyford se formou pela Nottingham University com BSc em ciência de computação em 1996. Ele trabalhou como engenheiro de software em vários estilos desde então. Como sua carreira de snowboarding internacional passou a dar sinais de que não iria decolar, e ele ainda tinha que encontrar uma maneira de pagar as contas jogando vídeo game, seu trabalho hoje é como Desenvolvedor Sênior de Java para uma empresa de comércio derivativo on-line em Londres.




Avalie esta página


Reserve um instante para completar este formulário para nos ajudar a servi-lo melhor.



 


 


Não
são úteis
Extremamente
úteis
 






Voltar para parte superior