Menüs aufgeräumt

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Re: Menüs aufgeräumt

Beitrag von Tommy »

Warum blendet man dann nicht grundsätzlich alle ein und läßt die unbenutzten funktionslos? Oder läßt halt Lücken wo der Button wär. Zumindest ist es in E2 so gehandhabt.

Laut Schilderung meines Bekannten sind für einen Farbenblinden die Buttons alle mehr oder weniger grau bzw lassen sich nicht auseinanderhalten.

Alternativ in den Button eine Zahl mit einbringen?!

Hier noch mal Lesestoff zur Sehschwäche (von der meist Männer betroffen sind) :o
http://de.wikipedia.org/wiki/Rot-Gr%C3% ... w%C3%A4che
Rot-Grün-Sehschwäche oder -Blindheit ist immer angeboren und verstärkt oder vermindert sich nicht im Laufe der Zeit. Von ihr sind etwa 9 % aller Männer und etwa 0,8 % der Frauen betroffen, sie ist damit deutlich häufiger als eine Gelb-Blau-Sehschwäche oder die vollständige Farbenblindheit.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Menüs aufgeräumt

Beitrag von dbt »

Rein aus Platzgründen würde ich sagen und vollstopfen ist auch nicht immer so gut, aber im Prinzip hast du recht. Wie wäre ist mit einem Würfelsystem? 1-4, 1 = Rot, 2=...
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Re: Menüs aufgeräumt

Beitrag von Tommy »

wie wär eine Zahlenfolge zur Orientierung in der Ecke? 1011 = 'der 2. fehlt die anderen sind aufgerutscht' oder halt |-||. Mit ein weng Übung sollten die Betroffenen damit klarkommen. Wenn natürlich die Farben komplett verwürfelt sind hilft das nix nur halt bei aufrutschn durch weglassen eines buttons

Cursorsteuerung (links rechts) und eine blaue (blau ist kein problem wie Wiki sagt) 'Aura' um den aktiven Punkt wäre sicher to much
MTM
Foren-Moderator
Beiträge: 944
Registriert: Freitag 21. Januar 2005, 16:18

Re: Menüs aufgeräumt

Beitrag von MTM »

Hallo,
Alternativ in den Button eine Zahl mit einbringen?!
Das wäre doch ein Ansatz, man könnte ja die Button-Bilder entsprechend bearbeiten und dann die vorhandenen damit austauschen. Also in Rot eine 1 reinmalen, in Grün eine 2 usw, das wäre dann doch immer eindeutig, egal wie die Reihenfolge im Menu ist?

MfG,
MTM.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Menüs aufgeräumt

Beitrag von dbt »

Sehe ich das richtig, dass das Problem eigentlich nur Rot und Grün betrifft? Dann könnte man ja einfach auf den Button (zB. Rot) einen weißen Punkt in eine Ecke (links oben) einsetzen, damit man das erkennt. Der Vollständigkeit bei grün oben rechts, blau unten links, bei gelb einen schwarzen unten rechts. Ob das für alle anderen nicht farbenschwachen Nutzer schön ist, sei mal dahingestellt. Alternativ kann man die Buttons auch selbst nacharbeiten und als Alternativbuttons in die Box einspielen. Sollte also eigentlich nicht wirklich ein Problem sein, da selbst mal zu Nadel und Faden zu greifen. :wink:

Edit: Man könnte auch die Ecken brechen. So in der Art wie ich es bei mir gemacht habe. Je nach Position und Form kann man dann unterscheiden.
http://wiki.tuxbox-cvs.sourceforge.net/ ... wcache.jpg
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: Menüs aufgeräumt

Beitrag von GetAway »

Der Menüpunkt Barrierefreiheit fehlt schon lange.
Man könnte damit auch schon größere Schriften vordefinieren.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Menüs aufgeräumt

Beitrag von dbt »

Vlt. sollte man generell davon abkommen, die Buttons nebeneinander zu stellen. Das würde zwar etwas Umschreibaufwand an den Fenstern bedeuten, aber Platzprobleme wären so geringer. Die Buttons_klasse hat ja einen Schalter der dafür sorgt, die Buttons übereinander anzuordnen.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

@Tommy

Ich würde auch vorschlagen, dass du dir die benötigten Icons mit dem Programm "RawIconEditor" selbst baut. Als Vorlage kannst du ja die Icondateinen rot.raw, gruen.raw, gelb.raw und blau.raw aus /share/tuxbox/neutrino/icons/ nehmen und die Buchstaben R, G, Y und B reinfummeln. Am Ende könnte es dann ähnlich der Ziffernbuttons aussehen. Die selbst gebastelten Icons kommen dann ins Verzeichnis /var/share/tuxbox/neutrino/icons/. Vielleichst ist ja auch der Ersteller der neuen Buttons so nett und macht das für dich. Ich glaube, dass das GetAway war.

http://wiki.tuxbox.org/wiki/index.php/N ... gene_Icons
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

dbt hat geschrieben:Unermüdlich :wink: ...Danke! Langsam müsste das geschliffen sein.
Noch nicht ganz. :D

Eine kleine Ergänzung habe ich noch zum Malen des kleinen Marker-Icons. Weist man einem Menüeintrag per setItemButton() ein selected_iconName zu, wird für diesen Menüeintrag auch das kleine Marker-Icon gezeichnet, obwohl es überflüssig ist. Gut zu sehen ist das im Audioauswahl-Dialog. Meiner Meinung nach ist das falsch und folgender kleiner Patch verhindert das.

Link entfernt, da Patch im CVS
Zuletzt geändert von Gaucho316 am Donnerstag 6. Januar 2011, 20:32, insgesamt 1-mal geändert.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Menüs aufgeräumt

Beitrag von dbt »

Danke. Das passt gerade. Ich nehme das auch noch mit auf.
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Re: Menüs aufgeräumt

Beitrag von Tommy »

Gaucho316 hat geschrieben:@Tommy

Ich würde auch vorschlagen, dass du dir die benötigten Icons mit dem Programm "RawIconEditor" selbst baut.
Also mich selbst betrifft es nicht. Ich habe nur noch eine dbox in Betrieb und kann zudem recht gut farbig sehen. Es war nur ein Hilferuf eines Bekannten.

Evtl könnte man Icons machen die wie die Playstation Knöpfe aussehen. :wink:

Andererseits ist es aber auch unverständlich wieso die Buttons 'aufrutschen' der Platz für 4 Buttons ist doch in jedem Fall da. Optisch am einfachsten zu begreifen wäre ein fehlender Button (Lücke)
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Re: Menüs aufgeräumt

Beitrag von Tommy »

...ach ja - die Ja/Nein Messageboxen mit rot/grün Betätigung - Ein Farbenblinder weiß nicht was er da nun drücken soll :wink:
Aber ich glaub das geht auch mit cursor links/rechts irgendwie und dann OK
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

Ich habe mir ja die letzten Tage die Aufnahmeeinstellungen angesehen. Wenn mich nicht alles täuscht, produzieren dieses Menü und auch alle anderen Einstellungsmenüs riesige Speicherlecks. Versucht mir mal zu folgen.

In CRecordSetup::showRecordSetup() wird bspw. ein MenuWidget namens directRecordingSettings mit new erzeugt. Dieser wird als jumpTarget an einen MenuForwarder übergeben.

Code: Alles auswählen

CMenuWidget *directRecordingSettings = new CMenuWidget(...);
CMenuForwarder* mf7 = new CMenuForwarder(..., directRecordingSettings, ...);
Dann wird dieser MenuForwarder in ein anderes MenuWidget namens recordingSettings eingehängt.

Code: Alles auswählen

recordingSettings->addItem(mf7);
Das MenuWidget namens recordingSettings wird dann später beim Schließen des Menüs gelöscht.

Code: Alles auswählen

delete recordingSettings;
Laut menue.cpp wird dabei folgender Code aufgerufen:

Code: Alles auswählen

CMenuWidget::~CMenuWidget()
{
	for(unsigned int count=0;count<items.size();count++)
	{
		CMenuItem * item = items[count];
		if ((item != GenericMenuSeparator) &&
		    (item != GenericMenuSeparatorLine) &&
		    (item != GenericMenuBack)&&
		    (item != GenericMenuCancel))
			delete item;
	}
	items.clear();
	page_start.clear();
}
Meiner Meinung nach löscht das aber nur den MenuForwarder auf directRecordingSettings und nicht das Element selbst. Das bleibt dann im Speicher zurück. Der MenuForwarder selbst löscht nämlich das jumpTarget nicht. Und das darf er ja auch gar nicht, da er nicht wissen kann, ob ich das Element noch brauche.

Ich glaube, eine Lösung des Problems wäre, die Elemente nicht mit new anzulegen sondern so:

Code: Alles auswählen

CMenuWidget directRecordingSettings(...);
CMenuForwarder* mf7 = new CMenuForwarder(..., &directRecordingSettings, ...);
Oder man macht es so wie in CZapitSetup::InitZapitChannelHelper() und legt sich einen Vector toDelete an, der alle zu löschenden Objekte aufnimmt. Diese werden dann am Ende gelöscht.

Code: Alles auswählen

std::vector<CMenuWidget *> toDelete;

...

// delete dynamic created objects
for(unsigned int count=0;count<toDelete.size();count++)
{
	delete toDelete[count];
}
toDelete.clear();
Das alles gilt natürlich nicht nur für die MenuWidgets sondern auch für alle anderen Elemente, die mit new angelegt und dann als jumpTarget an einen MenuForwarder übergeben werden.

Oder habe ich da einen Denkfehler? :gruebel:
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: Menüs aufgeräumt

Beitrag von GetAway »

Wenn du da was gefunden hast, dann schau dir doch mal die Sprachumschaltung an. Da ist auch was faul.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

Was meinst du genau, die Klasse COsdLangSetup? Oder die dort benutzte Klasse CMenuOptionLanguageChooser?
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Menüs aufgeräumt

Beitrag von dbt »

Gaucho316 hat geschrieben:...
Das alles gilt natürlich nicht nur für die MenuWidgets sondern auch für alle anderen Elemente, die mit new angelegt und dann als jumpTarget an einen MenuForwarder übergeben werden.

Oder habe ich da einen Denkfehler? :gruebel:
Die Widgets müssen schon irgendwann wieder zerstört werden, das wird ja eigentlich auch gemacht und:
Oder man macht es so wie in CZapitSetup::InitZapitChannelHelper() und legt sich einen Vector toDelete an
hier wird auch nichts anderes gemacht, aber halt für meherer Widgets am Stück, die im Vector drin sind.
Was die anderen Objekte angeht, also die, die innerhalb der items mit new als Parameter drin stehen, kannst ja mal da ein delete unten dran hängen, dann sollte es knallen. Wäre also nicht so toll. ;-)
Das delete im Widget ruft, wie du ja schon in der Codestelle gezeigt hast, über clear() auch die Zerstörer der Items auf, was die Items als Ganzes abräumt. Dann sollte auch der Inhalt der Parameter weg sein. Das dachte ich zumindest. :gruebel:

@GetAway
Was die Sprachumschaltung angeht, was meinst du genauer?
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Menüs aufgeräumt

Beitrag von seife »

Aber z.B. im neutrino-HD movieplayer dingsbums war definitiv ein leck, weil alle möglichkeiten mit new erzeugt wurden, dann aber nur ein paar mit additem hinzugefügt. Die nicht zugefügten wurden dann auch nicht entsorgt. Solche Stellen gibt es vermutlich noch mehr. Einfach mal valgrind draufjagen :-)
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: Menüs aufgeräumt

Beitrag von GetAway »

dbt hat geschrieben: @GetAway
Was die Sprachumschaltung angeht, was meinst du genauer?
Diesen Bug, vielleicht findet ihn Gaucho316.
http://www.tuxbox.org/forum/viewt ... 23#p377423
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

dbt hat geschrieben:Das delete im Widget ruft, wie du ja schon in der Codestelle gezeigt hast, über clear() auch die Zerstörer der Items auf, was die Items als Ganzes abräumt. Dann sollte auch der Inhalt der Parameter weg sein. Das dachte ich zumindest. :gruebel:
Ich nehme jetzt mal ein anderes Beispiel. Vielleicht wird es dadurch deutlicher. In CAudioSetup::showAudioSetup() wird ein MenuWidget audioSettings angelegt.

Code: Alles auswählen

CMenuWidget* audioSettings = new CMenuWidget(LOCALE_MAINSETTINGS_HEAD, NEUTRINO_ICON_SETTINGS, width);
Später wird dann ein StringInput audio_step angelegt und dieser dann an einen MenuForwarder as übergeben, der dann ins MenuWidget audioSettings gepackt wird.

Code: Alles auswählen

CStringInput * audio_step = new CStringInput(LOCALE_AUDIOMENU_VOLUMEBAR_AUDIOSTEPS,g_settings.audio_step, 2, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789 ", audioSetupNotifier);
CMenuForwarder *as = new CMenuForwarder(LOCALE_AUDIOMENU_VOLUMEBAR_AUDIOSTEPS, true, g_settings.audio_step, audio_step );
audioSettings->addItem(as);
Später wird dann

Code: Alles auswählen

delete audioSettings;
aufgerufen. Dabei wird der MenuForwarder as gelöscht und somit natürlich auch der Zeiger jumpTarget auf den StringInput audio_step. Das Element audio_step selbst bleibt aber im Speicher erhalten und wird nicht gelöscht. So hat man dann ein Speicherleck erzeugt.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Menüs aufgeräumt

Beitrag von dbt »

Ja, Den "step" könnte man auch ohne new machen.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Menüs aufgeräumt

Beitrag von seife »

Gaucho316 hat geschrieben:Später wird dann

Code: Alles auswählen

delete audioSettings;
aufgerufen. Dabei wird der MenuForwarder as gelöscht und somit natürlich auch der Zeiger jumpTarget auf den StringInput audio_step. Das Element audio_step selbst bleibt aber im Speicher erhalten und wird nicht gelöscht. So hat man dann ein Speicherleck erzeugt.
Das ist nicht sicher, das hängt auch vom Destruktor von audioSettings ab. Dummerweise sind die Menüklassen klassischer neutrino-Code und somit praktisch nicht zu durchschauen.

Valgrind hat damals nicht viel gemeckert dabei, allerdings war das auch noch zu Zeiten, als das einmal statisch alloziert wurde und nicht bei jedem Aufruf neu.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

seife hat geschrieben:Das ist nicht sicher, das hängt auch vom Destruktor von audioSettings ab. Dummerweise sind die Menüklassen klassischer neutrino-Code und somit praktisch nicht zu durchschauen.
audioSettings ist ja ein MenuWidget und somit müsste der Code aufgerufen werden, den ich weiter oben schon einmal gepostet hatte. Hier wird der MenuForwarder as gelöscht.

Code: Alles auswählen

CMenuWidget::~CMenuWidget()
{
	for(unsigned int count=0;count<items.size();count++)
	{
		CMenuItem * item = items[count];
		if ((item != GenericMenuSeparator) &&
		    (item != GenericMenuSeparatorLine) &&
		    (item != GenericMenuBack)&&
		    (item != GenericMenuCancel))
			delete item;
	}
	items.clear();
	page_start.clear();
}
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

Ich werde dann wohl mal die Tage anfangen, das in den Menüklassen zu fixen. Ist ja ein ziemliches Stück Arbeit.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: Menüs aufgeräumt

Beitrag von Gaucho316 »

Puh, das war wirklich ein ganz schönes Stück Arbeit, die vielen Speicherlecks in den Menüs zu finden. Aber ich denke, dass ich alle oder zumindest die meisten erwischt habe. Ich hoffe, dass ich damit nichts kaputt gemacht habe. Ich bin zwar testweise durch alle Menüs gebrowst, könnte aber natürlich etwas übersehen haben. Die Klasse CDriveSetup habe ich übrigens ausgelassen, da die mir mal wieder zu unübersichtlich ist. Vielleicht kann sich ja dbt darum kümmern. :wink:

Die Änderungen für die Movieplayer 1 und 2 sind nötig, um den kurzen Aussetzer, der in folgendem Posting erwähnt wird, zu verhindern.
http://forum.tuxbox.org/forum/viewtopic ... 58#p378358
Außerdem waren die aufgerufenen Befehle meiner Meinung nach an dieser Stelle sowieso überflüssig.

Link zum Patch entfernt
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Menüs aufgeräumt

Beitrag von dbt »

Gaucho316 hat geschrieben:... Vielleicht kann sich ja dbt darum kümmern. :wink:...
Da sollte das notwendigste diesbezüglich gemacht sein, obwohl ich da noch ein ToDo drin stehen habe, wo ich das mal generell aufräumen wollte. Das bin ich noch schuldig :wink:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.