Probleme nach der Anpassung neutrino_menu.cpp

flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Probleme nach der Anpassung neutrino_menu.cpp

Beitrag von flasher »

Hallo

Ich habe mir einen Schnellumschalter für den LB / PS Video Modus gebastelt.
Dieser funktionierte auch ohne Probleme.
Nun habe mich mich mal überwunden und das aktuelle CVS gezogen.
Dort musste ich feststellen, dass das Neutrinomenü jetzt einie eigene Datei besitzt.

Nun ja. Ich habe meine kleine Anpassung gemacht und nun funktioniert dieser Umschalter nicht mehr. Bzw. ich bekomme das CDK nicht mehr compiled.

Hier ersteinmal die Anpassungen:
neutrino.cpp

Code: Alles auswählen

// Formatswitch
#define MY_VIDEOFORMAT_OPTION_COUNT 2
const CMenuOptionChooser::keyval MY_VIDEOFORMAT_OPTIONS[MY_VIDEOFORMAT_OPTION_COUNT] =
{
    { 2, LOCALE_MY_VIDEO_LB  },
    { 3, LOCALE_MY_VIDEO_PS  }
};

class MyVideoSettings : public CMenuWidget, CChangeObserver
{

	public:
		MyVideoSettings() : CMenuWidget(LOCALE_MY_VIDEO_LBPS, "video.raw")
		{
			addItem(GenericMenuSeparator);
			CMenuOptionChooser * oj = new CMenuOptionChooser(LOCALE_MY_VIDEO_LBPS, &g_settings.video_Format, MY_VIDEOFORMAT_OPTIONS, MY_VIDEOFORMAT_OPTION_COUNT, true, this, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE);
			addItem(oj);
		};

		virtual bool changeNotify(const neutrino_locale_t OptionName, void *)
		{
			if (ARE_LOCALES_EQUAL(OptionName, LOCALE_MY_VIDEO_LBPS))
			{
				g_Controld->setVideoFormat(g_settings.video_Format);
			}
			return true;
		};

		virtual void paint()
		{
			g_settings.video_Format = g_Controld->getVideoFormat();
			CMenuWidget::paint();
		};
};
// Ende
In der neutrino_menu.cpp habe ich die Funktion : bool CNeutrinoApp::getNVODMenu(CMenuWidget* menu) wie folgt abgeändert.
In der Abfrage if( g_RemoteControl->are_subchannels ) vor dem return true;

Code: Alles auswählen

		if ((g_settings.video_Format == 2 || g_settings.video_Format == 3) && g_Controld->getAspectRatio() != 0)
		{
			menu->addItem(GenericMenuSeparatorLine);
			menu->addItem(new CMenuForwarder(LOCALE_MY_VIDEO_LBPS, true, NULL, new MyVideoSettings() , NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE));
			menu->addItem(GenericMenuSeparator);
		}
Beim Compilen bekomme ich die Fehlermeldung:
error: `MyVideoSettings' has not been declared
Ändere ich new MyVideoSettings auf &myvideoSettings bekomme ich die gleiche Meldung nur mit dem Hinweis das myvideoSettings nicht deklariert ist.

Achso, das Menü habe ich auch entsprechend erweitert:
neutrino_menu.cpp
In CNeutrinoApp::InitMainMenu habe ich CMenuWidget &myvideoSettings, hinzugefügt
neutrino.cpp
MyVideoSettings myideoSettings;
In initMainMenu auch myvideoSettings;
Und in der neutrino.h habe ich die Anpassung auch gemacht.

Wie anfangs schon geschrieben. Vor der Umstellung (neutrino_menu.cpp) funktionierte das auch wunderbar. Nur jetzt bekomme ich halt den Fehler beim compilen und weis echt nicht mehr weiter.

Sicherlich etwas was meine müden Augen übersehen.
Wäre nett wenn das mal eben jemand überfliegen könnte.

Gruß
dwilx

Beitrag von dwilx »

Code: Alles auswählen

error: `MyVideoSettings' has not been declared 

Code: Alles auswählen

class MyVideoSettings
Müsste das nicht in neutrino.h sein? Solange das in neutrino.cpp war ginge das schon, aber ich glaube du musst die Klasse auslagern und die Funktion in der neutrino.cpp alleine lassen. in der neutrino_menu.cpp ist ja nur neutrino.h included und nicht neutrino.cpp :wink: Ich kann das zwar jetzt nicht direkt nachvollziehen, aber auf den ersten Blick sieht das für mich so aus... :gruebel:
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Beitrag von flasher »

Ich hatte mich damals an dem Beispiel der Klasse CVideoSettings gehalten.
Die ist ja auch in neutrino.cpp definiert und wird jetzt in neutrino_menu.cpp per &videoSettings aufgerufen ohne das in der neutrino.h class CVideoSettings; steht.

Genauer gesagt:
In der neutrino_menu.cpp steht:

Code: Alles auswählen

if (g_settings.personalize_video == 1)
		mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_VIDEO, true, NULL, &videoSettings, NULL, CRCInput::convertDigitToKey(shortcut2++)));
	if (g_settings.personalize_video == 2)
		mainSettings.addItem(new CLockedMenuForwarder(LOCALE_MAINSETTINGS_VIDEO, g_settings.personalize_pincode, true, true, NULL, &videoSettings, NULL, CRCInput::convertDigitToKey(shortcut2++)));
Die Klasse CVideoSettings selbst steht aber in neutrino.cpp.

Ich dachte bisher, wenn das mit der Klasse CVideoSettings so geht dann müsste das mit meiner Klasse doch auch funktionieren.

Wenn ich die komplette Klasse nuun in neutrino.h packe, dann compiled es nicht, da z.B. NEUTRINO_ICON_BUTTON_BLUE und der gleichen nicht definiert sind.

Für mich stellt sich dann doch die Frage warum geht das mit der CVideoSettings Klasse aber nicht mit meiner?

Gruß
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Beitrag von flasher »

Ich habe es dann doch hinbekommen.

Das ganze muss aus dem Menü raus. Die Klasse kommt dann in neutrino_menu.cpp.
Im MenuForwarder wird die Klasse dann mit new MyVideoSettings aufgerufen.

Fertig.

Gruß