[Gtk-sharp-list] Gnome Druid and DruidPages in CSharp

Arx Cruz arxcruz at gmail.com
Fri Feb 16 09:43:23 EST 2007


I have this code, may help you
The text language is not english.
May wont compile if you dont remove some methods calls

using System;
using System.IO;
using Gtk;
using Gnome;
using Acessa.ServiceFactory;
using Acessa.Entidades;
using Acessa.Core.Util;
using System.Diagnostics;

namespace Acessa.Importacao {
	public class AssistenteImportacao {
	
		private Gnome.Druid druid;
		private DruidPageEdge pageApresentacao;
		private DruidPageEdge pageFinal;
		private DruidPageStandard pageSelCidadao;
		private DruidPageStandard pageSelHome;
		
		private Gtk.Entry usuId;
		
		private Label nomeCidadao;
		private Label loginCidadao;
		
		private TreeUnix listaUsuarios;
		
		private Gnome.App druidApp;
		
		private Gtk.Entry senhaCidadao;
		
		private Gtk.Entry nomePai;
		private Gtk.Entry nomeMae;
		
		public AssistenteImportacao() {
			InitializeComponents();
		}
		
		private void InitializeComponents() {
			druid = new Druid();
			pageApresentacao = new DruidPageEdge(EdgePosition.Start, true,
								   "Assistente de exportação de usuários",
								   "Bem vindo ao Assistente de exportação de usuários\n" +
								   "Aqui você irá exportar todos os dados do cidadão que\n" +
								   "não estão ainda no novo formato estabelecido pelo\n" +
								   "Programa Identidade Digital.\n" +
								   "Lembre-se: esta irá mover todo o diretório home do usuário,\n" +
								   "Criará um novo login no padrão NomeDDMMAAAA e é
Irreversível.", null, null, null);
				
			usuId = new Gtk.Entry();
			usuId.TextInserted += new TextInsertedHandler(OnUsuIdInsertText);
			usuId.Changed += OnUsuIdChanged;
			
			pageSelCidadao = new DruidPageStandard("Selecione o id do cidadão",
null, null);
			pageSelCidadao.AppendItem("_Informe o id do usuário", usuId, "O id
do usuário cadastrado no Acessa");
			pageSelCidadao.Prepared += OnPageSelCidadaoPrepared;
			pageSelCidadao.NextClicked += OnPageSelCidadaoNext;
			
			pageSelHome = new DruidPageStandard("Selecione qual o diretório a
ser exportado", null, null);
			pageSelHome.AppendItem("", CreateHomeSel(), "Lembre-se que esta
operação não tem como desfazer!");
			pageSelHome.Prepared += OnPageSelHomePrepared;
			pageSelHome.NextClicked += OnPageSelHomeNext;
			
			pageFinal = new DruidPageEdge(EdgePosition.Finish, true,
"Obrigado", "O Cidadão foi exportado com sucesso", null, null, null);
			pageFinal.FinishClicked += OnPageFinalClicked;
			
			druid.Cancel += OnDruidCancel;
			
			druid.AppendPage(pageApresentacao);
			druid.AppendPage(pageSelCidadao);
			druid.AppendPage(pageSelHome);
			druid.AppendPage(pageFinal);
			
			druidApp = new Gnome.App("AcessaDesktop", "Assistente de Exportação");
			druidApp.DeleteEvent += OnDruidAppDeleteEvent;
			druidApp.Contents = druid;
			druidApp.ShowAll();
		}
		
		private void OnPageFinalClicked(object o, FinishClickedArgs args) {
			druidApp.Destroy();
		}
		
		private void OnPageSelCidadaoNext(object o, NextClickedArgs args) {
			try {
				GetLogin(Int32.Parse(usuId.Text));
			} catch(FormatException e) {

			}
		}
		
		private void OnDruidAppDeleteEvent(object o, DeleteEventArgs args) {
			druidApp.Destroy();
		}
		
		private void OnDruidCancel(object o, EventArgs args) {
			druidApp.Destroy();
		}
		
		private void OnPageSelHomeNext(object o, NextClickedArgs args) {
			TreeIter iter;
			TreeModel model;
			
			listaUsuarios.Selection.GetSelected(out model, out iter);
			string val = (string) model.GetValue (iter, 1);

            try {	
	       		Acessa.ServiceFactory.CidadaoBO.UpdatePaiMae(Int32.Parse(usuId.Text),
nomePai.Text, nomeMae.Text);
	       		Directory.Move(val, "/home/" + loginCidadao.Text);
	       		LibAcessa.CreateUser(loginCidadao.Text, senhaCidadao.Text,
nomeCidadao.Text, "users", false);
	       		Process p = System.Diagnostics.Process.Start("chown " +
loginCidadao.Text + ".users /home/" + loginCidadao.Text + " -R");
	       		p.WaitForExit();
	       		LibAcessa.DeleteUser((string) model.GetValue(iter, 0));
	       		
            } catch (DllNotFoundException e) {
            	new Acessa.Core.Util.Mensagem("Erro", "LibAcessa", "É
necessário a biblioteca libacessa.so para executar a importação",
Gtk.Stock.DialogError).Run();
            } catch (UnauthorizedAccessException e) {
            	new Acessa.Core.Util.Mensagem("Erro", "LibAcessa", "Você
não tem permissão para mover o diretório",
Gtk.Stock.DialogError).Run();
            } catch (DirectoryNotFoundException e) {
            	new Acessa.Core.Util.Mensagem("Erro", "LibAcessa",
"Diretório home do usuário a ser exportado não existe",
Gtk.Stock.DialogError).Run();
            }
		}
		
		private void OnUsuIdInsertText(object o, TextInsertedArgs args) {
			if(!System.Char.IsDigit((char)args.Text[0])) {			
				usuId.DeleteText(args.Position-1, args.Position);
			}
		}
		
		private void OnUsuIdChanged(object o, EventArgs args) {
			SetButtons();
		}
		
		private void OnPageSelHomePrepared(object o, PreparedArgs args) {
			SetHome();
		}
		
		private void OnPageSelCidadaoPrepared(object o, PreparedArgs args) {
			SetButtons();
		}
		
		private void SetHome() {
			TreeIter iter;
			TreeModel model;
		
			if(loginCidadao.Text.Equals("") ||
			   nomeCidadao.Text.Equals("") ||
			   !listaUsuarios.Selection.GetSelected(out model, out iter) ||
			   senhaCidadao.Text.Length == 0 ||
			   nomePai.Text.Length == 0 ||
			   nomeMae.Text.Length == 0) {
				druid.SetButtonsSensitive(true, false, true, false);
			} else {
				druid.SetButtonsSensitive(true, true, true, false);
			}
		}
		
		private void OnSenhaCidadaoChanged(object o, EventArgs args) {
			SetHome();
		}
		
		private VBox CreateHomeSel() {
			VBox vbox = new  VBox();
			
			nomePai = new Gtk.Entry();
			nomePai.Changed += OnSenhaCidadaoChanged;
			
			nomeMae = new Gtk.Entry();
			nomeMae.Changed += OnSenhaCidadaoChanged;
			
			nomeCidadao = new Label("");
			nomeCidadao.Xalign = 0.0f;
			
			loginCidadao = new Label("");
			loginCidadao.Xalign = 0.0f;
			
			listaUsuarios = new TreeUnix();
			senhaCidadao = new Gtk.Entry();
			senhaCidadao.Visibility = false;
			senhaCidadao.Changed += OnSenhaCidadaoChanged;
			
			Label label;
			
			listaUsuarios.Selection.Changed += OnSelectionChanged;
			
			ScrolledWindow scrolled = new ScrolledWindow();
			
			scrolled.Add(listaUsuarios);
			
			label = new Label("<b>Nome do usuário:</b>");
			label.UseMarkup = true;
			label.Xalign = 0.0f;
			
			vbox.PackStart(label, false, false, 0);
			vbox.PackStart(nomeCidadao, false, false, 0);
			
			label = new Label("<b>Login do usuário:</b>");
			label.UseMarkup = true;
			label.Xalign = 0.0f;
			
			vbox.PackStart(label, false, false, 0);
			vbox.PackStart(loginCidadao, false, false, 0);
			
			label = new Label("<b>Senha do usuário:</b>");
			label.UseMarkup = true;
			label.Xalign = 0.0f;
			
			vbox.PackStart(label, false, false, 0);			
			
			HBox hbox = new HBox();
			hbox.Spacing = 6;
			hbox.PackStart(senhaCidadao, false, false, 0);
			
			vbox.PackStart(hbox, false, false, 0);
			
			label = new Label("<b>Nome do pai:</b>");
			label.UseMarkup = true;
			label.Xalign = 0.0f;
			
			vbox.PackStart(label, false, false, 0);
			
			hbox = new HBox();
			hbox.Spacing = 6;
			hbox.PackStart(nomePai, true, true, 0);
			
			vbox.PackStart(hbox, true, true, 0);
			
			label = new Label("<b>Nome da mãe:</b>");
			label.UseMarkup = true;
			label.Xalign = 0.0f;
			
			vbox.PackStart(label, false, false, 0);
			
			hbox = new HBox();
			hbox.Spacing = 6;
			hbox.PackStart(nomeMae, true, true, 0);
			
			vbox.PackStart(hbox, true, true, 0);
			
			
			label = new Label("<b>Selecione o nome do usuário a ser exportado</b>");
			label.UseMarkup = true;
			label.Xalign = 0.0f;
			vbox.PackStart(label, false, false, 0);
			
			vbox.PackStart(scrolled, true, true, 0);
			
			return vbox;
		}
		
		private void OnSelectionChanged(object o, EventArgs args) {
			TreeIter iter;
			TreeModel model;
			
			if (((TreeSelection)o).GetSelected (out model, out iter)) {
				if(!(loginCidadao.Text.Equals("") || nomeCidadao.Text.Equals("")
|| senhaCidadao.Text.Equals(""))) {
					druid.SetButtonsSensitive(true, true, true, false);
				}
			}
			SetHome();
		}
		
		private void GetLogin(int id) {
			Cidadao cidadao = new Cidadao();
			
			try {
				cidadao = Acessa.ServiceFactory.CidadaoBO.GetCidadaoNomeData(id);	
				cidadao.Id = id;
				
				nomeCidadao.Text = cidadao.Nome;
				nomePai.Text = cidadao.Pai;
				nomeMae.Text = cidadao.Mae;
				
				string login = Acessa.Core.Util.Util.GetLogin(cidadao.Nome.Trim(),
cidadao.DataNascimento.ToUniversalTime());
				loginCidadao.Text = "<span color=\"blue\"><b>" +
Acessa.Core.Util.Util.UserAvailable(login) + "</b></span>";
				loginCidadao.UseMarkup = true;
			} catch (NullReferenceException e) {
				loginCidadao.Text = "";
				nomeCidadao.Text = "Usuário não encontrado";
				druid.SetButtonsSensitive(true, false, true, false);
			} catch (Exception e) {
				loginCidadao.Text = "";
				nomeCidadao.Text = "Usuário não encontrado";
				druid.SetButtonsSensitive(true, false, true, false);
			}
		}
		
		private void SetButtons() {
			if(usuId.Text.Length == 0) {
				druid.SetButtonsSensitive(true, false, true, false);
			} else {
				druid.SetButtonsSensitive(true, true, true, false);
			}
		}
	}
}


On 2/16/07, Stojance Dimitrovski <sdimitrovski at gmail.com> wrote:
> I need a Gnome Druid for my application and I can't find a thing about it.
> The Mono documentation doesn't provide much information and it's quite
> frustrating. Can you help me on how to add a Gnome Druid to my application
> and how to add elements inside the DruidPages?
>
> Thanks!
>
> _______________________________________________
> Gtk-sharp-list maillist  -  Gtk-sharp-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/gtk-sharp-list
>
>


-- 
"A fé remove montanhas, mas eu prefiro a dinamite"


More information about the Gtk-sharp-list mailing list