ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 16 Mär 2004, 19:37 
Offline
Rubyist
Benutzeravatar

Registriert: 09 Dez 2003, 23:05
Beiträge: 352
Hallo Leute,

ich habe mir gedacht "warum kann man die Layouts von glade nicht aus dem Netz laden sondern nur von einer Datei?".

Als erstes gaebe es zb die Moeglichkeit das mit Ruby ueber eine Temp Datei zu loesen:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33



require 'libglade2'
require 'net/http'
require 'tempfile'

class Test
def initialize(path)
@glade = GladeXML.new(path.to_s) {|handler| method(handler)}
end
def on_end_clicked(widget)
puts "on_end_clicked() is not implemented yet."
end
def add_headline(widget, arg0)
puts "add_headline() is not implemented yet."
end
end

#If you use only Ruby/GTK2 widgets, call Gtk.init here.
#Gtk.init
#If you use Ruby/GNOME2 widgets, call Gnome::Program.new here.
Gnome::Program.new("YOUR_APPLICATION_NAME", "YOUR_APPLICATION_VERSION")

# Set correct path yourself.
h = Net::HTTP.new('www.science.brainzentrum.de',80)
resp, data = h.get('/~oli/test.glade',nil)
temp = Tempfile.new("afile")
temp.puts(data.to_s)
temp.close
Test.new(temp.path)
Gtk.main



Das gefiel mir aber nicht so wirklich dolle.
Da habe ich mir gedacht "Warum nicht ausm Buffer anstatt ueber den Pfad die glade xml daten laden?"
Dazu habe ich die rb_gladexml_initialize funktion in der rbglade.c des
ruby-gnome2 paketes angepasst.
Das Problem ist - ich kanns jetzt erstmal nicht testen da ein paar Paketabhaenigkeiten in meinem System kaputt sind.
Wer will kann es ja mal testen obs geht:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

static VALUE
rb_gladexml_initialize(int argc, VALUE *argv, VALUE self)
{
VALUE fileString, rootString, domainString, handler_proc, from_mem_value;
GladeXML *xml;
char *data;
char *root;
char *domain;
char *from_mem;

rb_scan_args(argc, argv, "13", &fileString, &rootString, &domainString, &han

data = NIL_P(fileString) ? 0 : STR2CSTR(fileString);
root = NIL_P(rootString) ? 0 : STR2CSTR(rootString);
domain = NIL_P(domainString) ? 0 : STR2CSTR(domainString);
from_mem = NIL_P(from_mem_value) ? : NUM2UINT(from_mem_value);

if (NIL_P(handler_proc) && rb_block_given_p())
handler_proc = G_BLOCK_PROC();

glade_init();

if(from_mem)
{
buffersize = RSTRING(data)->len;
xml = glade_xml_new_from_mem(data, buffersize, root,domain);
}
else
{
xml = glade_xml_new(data, root, domain);
}

if(xml)
{
G_INITIALIZE(self, xml);
/* Once constructed, this means a GladeXML object can never be freed. */
rb_ary_push(instances, self);
rb_iv_set(self, "@handler_proc", handler_proc);
glade_xml_signal_autoconnect_full(xml, xml_connect, (gpointer)self);
}
else
{
/* why does that raise not work properly?? */
if(from_mem)
{
rb_raise(rb_eIOError,"could not load glade data");
}
else
{
rb_raise(rb_eIOError, "could not load glade data %s", data);
}
}

return self;
}



danach muesste man dann (wenn ich mir das richtig vorstelle) mit folgendem Ruby Code gehen:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 

require 'libglade2'
require 'net/http'
require 'tempfile'

class Test
def initialize(path)
if path.include?("<!DOCTYPE glade-interface SYSTEM \"http://glade.gnome.org/glade-2.0.dtd\">")
@glade = GladeXML.new(path.to_s,1) {|handler| method(handler)}
else
@glade = GladeXML.new(path) {|handler| method(handler)}
end
end
def on_end_clicked(widget)
puts "on_end_clicked() is not implemented yet."
end
def add_headline(widget, arg0)
puts "add_headline() is not implemented yet."
end
end

#If you use only Ruby/GTK2 widgets, call Gtk.init here.
#Gtk.init
#If you use Ruby/GNOME2 widgets, call Gnome::Program.new here.
Gnome::Program.new("YOUR_APPLICATION_NAME", "YOUR_APPLICATION_VERSION")

# Set correct path yourself.
h = Net::HTTP.new('www.science.brainzentrum.de',80)
resp, data = h.get('/~oli/test.glade',nil)
Test.new(data.to_s)
Gtk.main



bitte nicht hauen - ich kann nur nen bissl ruby und c gebe ich nicht mal vor zu koennen UND es ist von mir nicht getestet wurden.
also bitte verbesserungsvorschlaege hier reinstellen :) und bitte auch erfahrungsberichte obs geht oder nicht.
ich lasse die gladefile unter der adresse stehen wie sie oben im code ist.
dann kann man das besser testen ausserdem habe ich die gladefile als test.txt angehangen weil .glade nicht geht.

olli


Dateianhänge:
Dateikommentar: bitte das teil in test.glade umbenennen da .glade datein bzw .xml datein nicht gehen oder einfach im source umtragen.
test.txt [5.41 KiB]
372-mal heruntergeladen
Nach oben
 Profil  
 
 Betreff des Beitrags: noch ne coole idee
BeitragVerfasst: 16 Mär 2004, 21:00 
Offline
Rubyist
Benutzeravatar

Registriert: 09 Dez 2003, 23:05
Beiträge: 352
ich habe jetzt mal noch http://www.science.brainzentrum.de/~oli/test.rb online gestellt.
wenn man jetzt das script laed fragt mich mein browser was ich damit machen will und ich sage "an ruby bitte uebergeben" ruby ruft das script auf und das die glade datei.
ob das auch unter windows geht?
waere das nicht ein recht netter ersatz fuer java applets?
olli


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: noch ne coole idee
BeitragVerfasst: 16 Mär 2004, 21:45 
Offline
Ex-Admin
Benutzeravatar

Registriert: 12 Mai 2003, 18:49
Beiträge: 890
Wohnort: Kiel
Moin!

Olli hat geschrieben:
waere das nicht ein recht netter ersatz fuer java applets?


In einem eng begrenzten Benutzerkreis geht das bestimmt, aber Java-Applets sind dann doch komfortabler (weil direkt eingebettet) und sicherer. Schliesslich kann das Script alles tun, was der Benutzer auch kann (löschen usw.). :)

iGEL


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Mär 2004, 21:59 
Offline
Rubyist
Benutzeravatar

Registriert: 09 Dez 2003, 23:05
Beiträge: 352
da hast du wohl recht.
aber hat nicht microsoft jetzt irgenwie sowas "neues" mit .net rausgebracht das genau das macht was ich oben beschrieb?
und dieses sandkastenprinzip kann man sicher in ruby einbauen oder?
zumindest find ich die idee nicht schlecht - man koennte zb so eine groupware realisieren.
olli


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: