Syntax
-
- Interessierter
- Beiträge: 28
- Registriert: Samstag 1. März 2003, 08:08
Syntax
Kann mir vielleicht jemand weiter helfen?
Folgendes Problem:
"path" soll die Summe von char mpoint[1024]; und einem String sein.
mpoint ist "/var/mnt/usb".
eString path;
path=mpoint;
path+="/image";
Wenn ich jetzt "path" kontrolliere mit:
eMessageBox msg(path, "Info", eMessageBox::btOK); msg.show(); msg.exec(); msg.hide();
funktioniert das auch. Die Ausgabe ist "/var/mnt/usb/image".
Will ich aber "path" zum auslesen eines Files einsetzen funktioniert das nicht.
FILE *f=fopen(path.c_str(),"r")
Folgendes Problem:
"path" soll die Summe von char mpoint[1024]; und einem String sein.
mpoint ist "/var/mnt/usb".
eString path;
path=mpoint;
path+="/image";
Wenn ich jetzt "path" kontrolliere mit:
eMessageBox msg(path, "Info", eMessageBox::btOK); msg.show(); msg.exec(); msg.hide();
funktioniert das auch. Die Ausgabe ist "/var/mnt/usb/image".
Will ich aber "path" zum auslesen eines Files einsetzen funktioniert das nicht.
FILE *f=fopen(path.c_str(),"r")
-
- Senior Member
- Beiträge: 1282
- Registriert: Montag 12. November 2001, 00:00
Code: Alles auswählen
if (!f) perror(path.c_str());
-
- Interessierter
- Beiträge: 28
- Registriert: Samstag 1. März 2003, 08:08
-
- Interessierter
- Beiträge: 28
- Registriert: Samstag 1. März 2003, 08:08
Enigma Plugin Schließen
Mit was für einem Befehl kann ich ein laufendes Plugin schließen?
Über einen Button ist es ja kein Problem:
CONNECT(ok->selected, eWidget::reject)
Ruf ich dem Plugin ein weiteres eWindow auf, kann ich das mit close() schließen.
Wenn ich aber close() im eigentlichen Plugin aufrufe, bekomme ich immer die Fehlermeldung:
"attempt to close non-execing widget"
Mit anderen Worten, ich soll das Plugin nicht schließen.
Über einen Button ist es ja kein Problem:
CONNECT(ok->selected, eWidget::reject)
Ruf ich dem Plugin ein weiteres eWindow auf, kann ich das mit close() schließen.
Wenn ich aber close() im eigentlichen Plugin aufrufe, bekomme ich immer die Fehlermeldung:
"attempt to close non-execing widget"
Mit anderen Worten, ich soll das Plugin nicht schließen.
-
- Developer
- Beiträge: 821
- Registriert: Freitag 20. Juli 2001, 00:00
das kommt ein wenig auf deinen plugin code an.
was für ein plugin machst du? eins, was nur bei bedarf geladen wird? (mit cfg datei, eintrag im blauen/plugin menü, ..) oder eins, was die ganze zeit geladen ist (durch /var/tuxbox/config/enigma/plugins)?
In ersterem falle wird das Plugin ja aufgerufen durch einen aufruf der Plugin-main-funktion. Wenn diese Funktion aufgerufen wird, erstellst du ein Window.
in letzterem falle connectest du dich ja irgendwo hin, meist z.b. an einen hook. Wenn der Hook aufgerufen wird, erstellst du ein Window.
Dieses erstellte Window - egal in welchem Fall - show()st du, und dann exec()st du es, und dann hide()st du es wieder.. prinzipiell.
Du kannst nur Fenster schliessen die sich gerade im exec() befinden. "attempt to close non-execing widget" heisst also, dass du close() in einem widget aufrufst, was nie mit ->exec() modal gemacht wurde. Bei so einem Widget macht es natürlich keinen Sinn es zu schliessen. "Schliessen" ist halt das austreten aus der modalen loop (in die man mit exec() gerät). Es hat nichts mit einem eventuellen hide() zu tun.
Hmm wenn noch probleme sind, kannst du mir ja mal auszugsweise deinen source schicken (oder hier posten wenns nicht zu viel ist)... dann guck ich mir das gerne mal an.
was für ein plugin machst du? eins, was nur bei bedarf geladen wird? (mit cfg datei, eintrag im blauen/plugin menü, ..) oder eins, was die ganze zeit geladen ist (durch /var/tuxbox/config/enigma/plugins)?
In ersterem falle wird das Plugin ja aufgerufen durch einen aufruf der Plugin-main-funktion. Wenn diese Funktion aufgerufen wird, erstellst du ein Window.
in letzterem falle connectest du dich ja irgendwo hin, meist z.b. an einen hook. Wenn der Hook aufgerufen wird, erstellst du ein Window.
Dieses erstellte Window - egal in welchem Fall - show()st du, und dann exec()st du es, und dann hide()st du es wieder.. prinzipiell.
Du kannst nur Fenster schliessen die sich gerade im exec() befinden. "attempt to close non-execing widget" heisst also, dass du close() in einem widget aufrufst, was nie mit ->exec() modal gemacht wurde. Bei so einem Widget macht es natürlich keinen Sinn es zu schliessen. "Schliessen" ist halt das austreten aus der modalen loop (in die man mit exec() gerät). Es hat nichts mit einem eventuellen hide() zu tun.
Hmm wenn noch probleme sind, kannst du mir ja mal auszugsweise deinen source schicken (oder hier posten wenns nicht zu viel ist)... dann guck ich mir das gerne mal an.
-
- Interessierter
- Beiträge: 28
- Registriert: Samstag 1. März 2003, 08:08
Mhh…
Dann versteh ich nicht, warum ich kein close() machen kann.
Das Widget "install" wird doch mit show() exec() aufgerufen.
"loaddir" ist dann wieder ein neues eWindow, was ich mit close() schließen kann.
Das Plugin wird übrigens über die blaue Taste gestartet.
Hier mal einen Auszug aus dem Plugin. Denn Rest von dem Plugin will ich mal lieber nicht öffentlich machen, da ich erst vor einer Woche mit Programmieren angefangen habe.
Dann versteh ich nicht, warum ich kein close() machen kann.
Das Widget "install" wird doch mit show() exec() aufgerufen.
"loaddir" ist dann wieder ein neues eWindow, was ich mit close() schließen kann.
Das Plugin wird übrigens über die blaue Taste gestartet.
Hier mal einen Auszug aus dem Plugin. Denn Rest von dem Plugin will ich mal lieber nicht öffentlich machen, da ich erst vor einer Woche mit Programmieren angefangen habe.
extern "C" int plugin_exec( PluginParam *par );
class install: public eWindow
{
eButton *ok_bt;
void loaddir();
char mountpoint[1024];
eString mpoint;
public:
install(): eWindow(0)
{
int fd=eSkin::getActive()->queryValue("fontsize", 20);
cmove(ePoint(160, 100));
cresize(eSize(280, 340));
setText("blabla");
ok_bt=new eButton(this);
ok_bt->move(ePoint(10, 20));
ok_bt->resize(eSize(260, fd+15));
ok_bt->setText("Test");
ok_bt->loadDeco();
CONNECT(ok_bt->selected, install::loaddir);
if (FILE *f=fopen(eString().sprintf("/tmp/datei").c_str(),"r"))
{
fgets(mountpoint, 1024, f);
mpoint=mountpoint;
fclose(f);
}
if(mpoint=="")
{
hide();
eMessageBox msg("Dream-Image must be started!", "Info", eMessageBox::btOK);
msg.show(); msg.exec(); msg.hide();
close();//Hier kommt die Fehlermeldung
}
}
};
int plugin_exec( PluginParam *par )
{
install dlg;
dlg.show();
dlg.exec();
dlg.hide();
return 0;
}
-
- Developer
- Beiträge: 821
- Registriert: Freitag 20. Juli 2001, 00:00
Wenn ich das richtig sehe, machst du das im Konstruktor vom "install", also vom "eWindow". Zu dem Zeitpunkt ist das Fenster noch nicht im "exec"-state, sondern befindet sich ja sogar noch vor dem "show()".
Das ist generell bei C++-Konstruktoren so, dass man da ja blöderweise keine Returnwerte o.ä. festlegen kann.
Dir bleibt also nichts anderes übrig als entweder:
- eine variable "ok" in der klasse einzuführen, die du vor dem "show, exec, hide" abfragst - und wenn sie halt nicht ok ist, machste das garnicht erst.
- die initialisierung (also ab dem fopen) nicht im konstruktor vornehmen, sondern im "beginExec"-event - das wird als erstes beim exec aufgerufen, und dort kannst du dann ein close() machen.
Das ist generell bei C++-Konstruktoren so, dass man da ja blöderweise keine Returnwerte o.ä. festlegen kann.
Dir bleibt also nichts anderes übrig als entweder:
- eine variable "ok" in der klasse einzuführen, die du vor dem "show, exec, hide" abfragst - und wenn sie halt nicht ok ist, machste das garnicht erst.
- die initialisierung (also ab dem fopen) nicht im konstruktor vornehmen, sondern im "beginExec"-event - das wird als erstes beim exec aufgerufen, und dort kannst du dann ein close() machen.
-
- Interessierter
- Beiträge: 28
- Registriert: Samstag 1. März 2003, 08:08
-
- Interessierter
- Beiträge: 28
- Registriert: Samstag 1. März 2003, 08:08
Ich mal wieder.
Gibt es eine Möglichkeit für "eListBoxEntryText" einen Font festzulegen?
Für eLabel oder eButton usw. ist das ja kein Problem (elabel->setFont("blabla")), nur bei "eListBoxEntryText" geht das nicht.
Ich will keinen kompletten Skin laden, sondern nur den Font.
Wer sich das Plugin für die Dream anschaut (auf meiner Homepage /plugins/shell-tool) weiß warum ich das brauche.
Gibt es eine Möglichkeit für "eListBoxEntryText" einen Font festzulegen?
Für eLabel oder eButton usw. ist das ja kein Problem (elabel->setFont("blabla")), nur bei "eListBoxEntryText" geht das nicht.
Ich will keinen kompletten Skin laden, sondern nur den Font.
Wer sich das Plugin für die Dream anschaut (auf meiner Homepage /plugins/shell-tool) weiß warum ich das brauche.
-
- Einsteiger
- Beiträge: 140
- Registriert: Donnerstag 31. Oktober 2002, 17:59
-
- Interessierter
- Beiträge: 28
- Registriert: Samstag 1. März 2003, 08:08