kategoria: ANSI C
[#1] Problemy z inicjalizacją GUI
Hej! Jakiś czas temu napisałem TuneFinder https://aminet.net/package/comm/misc/TuneFinder. Ogólnie nic wielkiego – prosty parser API z wyszukiwarką. Interfejs też jest bardzo prosty, używam tylko gadtoolsów. Po testach na kilku moich Amigach wszystko działało bez problemów.
Jednak dostałem kilka zgłoszeń, że GUI nie uruchamia się przy inicjalizacji pierwszego gadgetu. Próbowałem zablokować ekran do momentu wyświetlenia okna, ale to również nie rozwiązało problemu. Myślałem długo nad tym i nadal nie widzę konkretnego problemu. Może ktoś z Was ma jakiś pomysł, jak to rozwiązać? Poniżej zamieszczam link do kodu, który inicjalizuje GUI. https://github.com/sandlbn/TuneFinder/blob/2c5566bd9d645bc287ff6b7401b81806067c2f3d/src/gui/gui.c#L625
Zastanawiałem się też, czy to nie jest problem sprzętowy, bo jedynymi osobami, które zgłaszały problem, są użytkownicy Vampira i emu68. Jednak u mnie na emu68 działa to bez zarzutu. Kolejna myślałem, że może compiler ale nawet po wyrzuceniu optymalizacji te same osoby zgłaszały błąd.
[#2] Re: Problemy z inicjalizacją GUI

@sand, post #1

Może kwestia nie w tym, że emulowany procesor, ale w wielkości ekranu i co za tym idzie wysokości czczionki ekranowej. Testowałem TuneFinder na rzeczywistym 68020, ale z ekranem AGA w trybie Xtreme HighRes Laced (1280 x 1024) i przy czcionce 14 (wcale nie za duża przy takiej rozdzielczości), gadżety string były za niskie. Chociaż program działał, ramki gadżetów były nadpisane tłem tekstu. Widzę w kodzie, że dałeś wysokość na sztywno 15 pikseli. Co będzie gdy czczionka ma np. 16?

W oknie wyświetlającym szczegóły stacji jest podobny błąd - napis z nazwą stacji, przy otwarciu okna uszkadza graficznie prawą ramkę okna.
1
[#3] Re: Problemy z inicjalizacją GUI

@sand, post #1

Po mojemu zle tworzysz te gadzety.
Powinienes kolejny gadzet podpinac pod poprzedni tak aby towrzyla sie lista.
Dodatkowo pierwszy powinin byc wirtualny. Zerknij na moj kod:

link

Ps. cży moglbys zapodawac swoje kody jako czyste ASCII? Github zrobil sie strasznie nie przyjazny.
Przynajmniej dla mnie.
[#4] Re: Problemy z inicjalizacją GUI

@Krashan, post #2

Czyli rozumiem, że zamiast ustawiać odległości i pozycje elementów względem górnej krawędzi ramki na sztywno, powinienem je obliczać w zależności od wielkości czcionki i być może rozdzielczości?

Czy jest możliwe w przypadku gadtoolsow, że jeśli element się nie mieści w oknie, to zwrócony zostanie błąd? Super dzięki za pomoc.
[#5] Re: Problemy z inicjalizacją GUI

@sand, post #1

Twoj problem lezy w wywolaniu
RefreshGList(glist, window, NULL, -1);
Usun je - ono powinno byc wywolywane w sytuacji, gdy gadgety byly dodawane do utworzonego pustego okna przez AddGList. w twoim przypadku tworzysz gadgety podajac ich liste jako parameter przy tworzeniu okna.
przy okazji rzucilem okiem na reszte kodu - ponizej masz pare sugestii:
1. Po co dwa razy inicjujesz menu i dwa razy pod rzad testujesz window not null?
2 w InitLibraries mozesz zastapic kazde zamykanie otwartych bibliotek przy nieudanym otwarciu wywolaniem CleanupLibraries
3. Kod w stylu
if (!gad) {
        DEBUG("Failed to create Tags gadget");
    }
    if (!gad) goto cleanup;

mozez zastapic:
if (!gad) {
        DEBUG("Failed to create Tags gadget");
       goto cleanup;
    }

4. warto robic ReplyMsg przed procesowaniem wiadomosci a nie po. Tj. kopiujesz wiadomosc do tmp (albo tylko pole Class) I od razu wywolujesz ReplyMsg.
Czyli zamiast:
while ((msg = GT_GetIMsg(window->UserPort))) {
switch(msg->Class) {
...
   }
    GT_ReplyIMsg(msg);
}

zrobic:
while ((msg = GT_GetIMsg(window->UserPort))) {
ULONG class = msg->Class; 
GT_ReplyIMsg(msg);
switch(class) {
...
   }
}
5
[#6] Re: Problemy z inicjalizacją GUI

@Phibrizzo, post #3

Po mojemu zle tworzysz te gadzety.
Powinienes kolejny gadzet podpinac pod poprzedni tak aby towrzyla sie lista.

Tak jest poprawnie, jako pierwszy prev gadget wchodzi kontekst z CreateContext, a pozniej prev jest ustawiany jako gadget zwrocony z CreateGadget
[#7] Re: Problemy z inicjalizacją GUI

@sand, post #4

gadtools.library nie zwraca tego rodzaju bledow.
Do projektowania gui mozesz uzyc jakiegos designera i wygenerowac sobie kod obslugujacy skalowalne ui. GadToolsBox 3 obsluguje skalowanie ui w zaleznosci od czcionki systemowej. Jak mi podeslesz screenshot okna to testowo moge ci wygenerowac takie ui najnowszym gtb3 - bede mial okazje do przetestowania i dokonczenia paru nowych opcji, ktore leza i czekaja...
[#8] Re: Problemy z inicjalizacją GUI

@docent, post #6

Super dzięki, zrobiłem jak mówiłeś https://github.com/sandlbn/TuneFinder/blob/38d5d7fc023f6f996430aa636b7d7b3acad17e30/src/gui/gui.c#L627 Zrobie nowy build i wyślę do osoby która miała problem i poprawie jeszcze odległości pomiędzy gadgetami.
[#9] Re: Problemy z inicjalizacją GUI

@Phibrizzo, post #3

Super dzięki, wykorzystałem trochę Twojego sposobu. Dziękuję.
[#10] Re: Problemy z inicjalizacją GUI

@Phibrizzo, post #3

[wyróżniony] [#11] Re: Problemy z inicjalizacją GUI

@sand, post #8

No, zrobiles dokladnie odwrotnie :)
Pisalem, bys tylko usunal RefreshGlist, a ty usunales liste gadgetow z OpenWindow i dodales AddGList.
W sumie tez powinno to dzialac, tylko wg mnie parametr Position jest niepoprawny - w AddGList jest on zadeklarowany jako typu UWORD, u ciebie jest to -1 konwertowany do UWORD czyli 0xffff, a powininen byc np. 0 (generalnie pozycja powinna byc w zakresie rozmiaru listy gadgetow)
W ogole to ci sie uruchamia? Nawet jak ci to dziala, to pewnie sieje po pamieci :)
[#12] Re: Problemy z inicjalizacją GUI

@docent, post #11

Dzieki za hint z Position. Co do RefreshGlist zrobilem to, ale jeszcze nie wrzucilem, dlatego ze zaczalem walczyc z ukladem oknai testuje pare opcji. Jeszcze raz dzieki.
[#13] Re: Problemy z inicjalizacją GUI

@sand, post #12

możesz też wykorzystać wielkośc czcionki do budowania GUI:

UBYTE 	GUI_INTUITION_Create(void)
{
	// get some helpers to create more compact window
	ULONG	font_width = STARTER_pubscreen->RastPort.TxWidth;
	ULONG	font_height = STARTER_pubscreen->RastPort.TxHeight;

	// *****************************************************************
	// GADGETS setup
	// *****************************************************************

		struct Gadget*		g_context = CreateContext(&G_gadgets[GID_GADGETS_LIST]);
	 	struct NewGadget 	ng;

		// For all gadgets.
		ng.ng_TextAttr   = STARTER_pubscreen->Font;
		ng.ng_VisualInfo = STARTER_visual_info;

		// -- LEFT COLUMN --

			// create text
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8;
			ng.ng_Width      = font_width * 17;
			ng.ng_Height     = font_height;
			ng.ng_Flags      = 0;

			g_context = CreateGadget(	TEXT_KIND, g_context, &ng, 
										GTTX_Text, (ULONG)"Display mode:", 
										TAG_END);

			// Create cycle/chooser
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2;
			ng.ng_Width      = font_width * 22;
			ng.ng_Height     = font_height + 10;
			ng.ng_GadgetID   = GID_MODE_CHOOSER;
			ng.ng_Flags      = 0;

			G_gadgets[GID_MODE_CHOOSER] = g_context = CreateGadget(	CYCLE_KIND, g_context, &ng, 
																	GTCY_Labels, (ULONG)G_mode_strings, 
																	GTCY_Active, (ULONG)G_mode_selection,
																	TAG_END);


			// create text
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2 + font_height + 15;
			ng.ng_Width      = font_width * 17;
			ng.ng_Height     = font_height;
			ng.ng_Flags      = 0;

			g_context = CreateGadget(	TEXT_KIND, g_context, &ng, 
										GTTX_Text, (ULONG)"Screen aspect:", 
										TAG_END);

			// Create cycle/chooser
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2;
			ng.ng_Width      = font_width * 22;
			ng.ng_Height     = font_height + 10;
			ng.ng_GadgetID   = GID_ASPECT_CHOOSER;
			ng.ng_Flags      = 0;

			G_gadgets[GID_ASPECT_CHOOSER] = g_context = CreateGadget(	CYCLE_KIND, g_context, &ng, 
																		GTCY_Labels, (ULONG)G_aspect_fullscreen_strings, 
																		GTCY_Active, (ULONG)0,
																		TAG_END);


			// create text
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15;
			ng.ng_Width      = font_width * 17;
			ng.ng_Height     = font_height;
			ng.ng_Flags      = 0;

			g_context = CreateGadget(	TEXT_KIND, g_context, &ng, 
										GTTX_Text, (ULONG)"Pixel format:", 
										TAG_END);

			// Create cycle/chooser
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2;
			ng.ng_Width      = font_width * 22;
			ng.ng_Height     = font_height + 10;
			ng.ng_GadgetText = NULL;
			ng.ng_GadgetID   = GID_PIXEL_CHOOSER;
			ng.ng_Flags      = 0;

			G_gadgets[GID_PIXEL_CHOOSER] = g_context = CreateGadget(	CYCLE_KIND, g_context, &ng, 
																		GTCY_Labels, (ULONG)G_pixel_strings, 
																		GTCY_Active, (ULONG)G_pixel_selection,
																		TAG_END);


			// create text
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15;
			ng.ng_Width      = font_width * 17;
			ng.ng_Height     = font_height;
			ng.ng_GadgetText = NULL;
			ng.ng_Flags      = 0;

			g_context = CreateGadget(	TEXT_KIND, g_context, &ng, 
										GTTX_Text, (ULONG)"Screen buffering:", 
										TAG_END);

			// Create cycle/chooser
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2;
			ng.ng_Width      = font_width * 22;
			ng.ng_Height     = font_height + 10;
			ng.ng_GadgetText = NULL;
			ng.ng_GadgetID   = GID_BUFFER_CHOOSER;
			ng.ng_Flags      = 0;

			G_gadgets[GID_BUFFER_CHOOSER] = g_context = CreateGadget(	CYCLE_KIND, g_context, &ng, 
																		GTCY_Labels, (ULONG)G_buffering_strings_3, 
																		GTCY_Active, (ULONG)2,
																		TAG_END);

		// -- RIGHT COLUMN --

			// create text
			ng.ng_LeftEdge   = 10 + font_width * 22 + 10;
			ng.ng_TopEdge    = font_height + 8;
			ng.ng_Width      = font_width * 17;
			ng.ng_Height     = font_height;
			ng.ng_GadgetText = NULL;
			ng.ng_Flags      = 0;

			g_context = CreateGadget(	TEXT_KIND, g_context, &ng, 
										GTTX_Text, (ULONG)"Screen size:", 
										TAG_END);


			// Create list view for screen modes.
			ng.ng_LeftEdge   = 10 + font_width * 22 + 10;
			ng.ng_TopEdge    = font_height + 8 + font_height + 2;
			ng.ng_Width      = font_width * 24;
			ng.ng_Height     = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + 8;
			ng.ng_GadgetText = NULL;
			ng.ng_GadgetID   = GID_SCREEN_LIST;
			ng.ng_Flags      = 0;

			G_gadgets[GID_SCREEN_LIST] = g_context = CreateGadget (	LISTVIEW_KIND, g_context, &ng, 
														GTLV_ShowSelected, 0,
														GTLV_Selected, 0,
														GTLV_Labels, (ULONG)&G_screen_list,
														TAG_END);

		// -- BOTTOM ROW --
	
			ULONG bottom_row_top_edge = font_height + 8 + font_height + 2 + font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + (font_height / 2);

			// Create help button.
			ng.ng_LeftEdge   = 10;
			ng.ng_TopEdge    = bottom_row_top_edge;
			ng.ng_Width      = font_width * 14;
			ng.ng_Height     = font_height + 12;
			ng.ng_GadgetText = (STRPTR)"HELP";
			ng.ng_GadgetID   = GID_HELP_BUTTON;
			ng.ng_Flags      = 0;

			G_gadgets[GID_HELP_BUTTON] = g_context = CreateGadget(BUTTON_KIND, g_context, &ng, TAG_END);

			// Create start button.
			ng.ng_LeftEdge   = 10 + font_width * 14 + 10;
			ng.ng_TopEdge    = bottom_row_top_edge;
			ng.ng_Width      = font_width * 32;
			ng.ng_Height     = font_height + 12;
			ng.ng_GadgetText = (STRPTR)"START RAYCASTER";
			ng.ng_GadgetID   = GID_START_BUTTON;
			ng.ng_Flags      = 0;

			G_gadgets[GID_START_BUTTON] = g_context = CreateGadget(BUTTON_KIND, g_context, &ng, TAG_END);


	// ***********************************************************************

	ULONG window_width	= 15 + font_width * 22 + font_width * 24 + 15;
	ULONG window_height = bottom_row_top_edge + font_height + 12 + 5;

	ULONG 	window_pos_x = (STARTER_pubscreen->Width / 2) - (window_width / 2);
	ULONG	window_pos_y = (STARTER_pubscreen->Height / 2) - (window_height / 2);

 	// --- Create window ---
    STARTER_window = OpenWindowTags(NULL, 
	 								WA_Left, window_pos_x, 
									WA_Top, window_pos_y, 
									WA_Width, window_width, 
									WA_Height, window_height, 
									WA_Title, (ULONG)STARTER_WINDOW_NAME, 
									WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_ACTIVATE, 
									WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW | BUTTONIDCMP | LISTVIEWIDCMP | IDCMP_GADGETDOWN | IDCMP_GADGETUP,
									WA_Gadgets, (ULONG)G_gadgets[GID_GADGETS_LIST],
									TAG_END);

	// must be refreshed after creation - GT - for gaddets
	GT_RefreshWindow(STARTER_window, NULL);

	if (!STARTER_window) 	return 0;
	else 					return 1;
[#14] Re: Problemy z inicjalizacją GUI

@mateusz_s, post #13

Wydaje mi się że ciąg tych przypisań w kodzie:
ng.ng_TopEdge = font_height + 8;
..
ng.ng_TopEdge = font_height + 8 + font_height + 2;
..
ng.ng_TopEdge = font_height + 8 + font_height + 2 + font_height + 15;
..
ng.ng_TopEdge = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2;
..
ng.ng_TopEdge = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15;
..
ng.ng_TopEdge = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2;
..
ng.ng_TopEdge = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15;
..
ng.ng_TopEdge = font_height + 8 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2 + font_height + 15 + font_height + 2;
...


Można zamienić na krótszy i czytelniejszy kod:
ng.ng_TopEdge = font_height + 8;
..
ng.ng_TopEdge += font_height + 2;
..
ng.ng_TopEdge += font_height + 15;
..
ng.ng_TopEdge += font_height + 2;
..
ng.ng_TopEdge += font_height + 15;
..
ng.ng_TopEdge += font_height + 2;
..
ng.ng_TopEdge += font_height + 15;
..
ng.ng_TopEdge += font_height + 2;
...
[#15] Re: Problemy z inicjalizacją GUI

@mateusz_s, post #13

Hey super dzięki za przykład, zacząłem wcześniej eksperymentować z czcionką (wiedziałem, że nawet po zmianach które dodałem, okno źle skaluje w wyższych rozdzielczościach przy mniejszym foncie) ale nie miałem czasu, żeby na dłużej przysiąść nad tym kodem. Wrócę do tego w weekend, ale to dobry przykład.
[#16] Re: Problemy z inicjalizacją GUI

@Rafael/ARMO, post #14

Jeszcze raz dzięki za porady. Już naprawiłem większość błędów. Z drugiej strony, chyba lepiej byłoby pisać to w MUI, bo gadżet ListView w Intuition jest bardzo prymitywny. Mimo że działa już w miarę dobrze, trudno jest wypozycjonować listę – na każdym ekranie wygląda inaczej. Tak czy inaczej, chyba już zostawię, jak jest.

3
[#17] Re: Problemy z inicjalizacją GUI

@sand, post #16

Chciałem zakładać nowy wątek dotyczący Twojego programu, ale na szczęście znalazłem ten.

Chciałbym zgłosić kilka sugestii.

Czy jestmożliwość dodania w przyszłości filtrowania formatu strumienia, tak jak można zrobić to z krajami w pliku konfiguracji?

Czy będzie możliwość zmiany programu który ma odtwarzać strumień? Teraz na sztywno jest ustawione AmigaAMP ale ten odtwarza tylko MP3. Natomiast taki DAPlayer odtwarza jeszcze strumienie OGG, FLAC i AAC.

Po uruchomieniu programu gadżety cykliczne są puste, to znaczy że filtrowanie nie jest aktywne i wyszukiwane będą wszystkie kraje i formaty?

Dlaczego wyszukiwanie pokazuje zawsze 100 odnalezionych stacji i kończą się zawsze na literę M. Gdzie jest reszta?

Co do MUI o którym wspomniano wcześniej to program na pewno prezentował się by się atrakcyjniej.

Generalnie program jest świetny i mam nadzieję, że będziesz go dalej rozwijał OK

Ostatnia aktualizacja: 10.11.2024 07:46:14 przez Ponki1986
[#18] Re: Problemy z inicjalizacją GUI

@Ponki1986, post #17

Dzięki. Ok, po kolei:

  • Co do formatu strumienia, nie widziałem w API niczego poza OGG, AAC, AAC+ i MP3, więc zrobiłem to na stałe. FLAC jest dostępny, ale znalazłem tylko dwie stacje.
  • W kwestii DAPlayera, pewnie nie będzie z tym problemu. Jedyne co robie to wysyłam komendę OPEN przez AREXX. Ponieważ autorem DAPlayera jest także Thomas, podejrzewam, że obsługuje komendę OPEN z parametrem. Mogę dodać w ustawieniach opcję do przełączania silników. Pisałem to bardziej pod siebie, nie myśląc za bardzo o szerszym gronie użytkowników, ponieważ mam AmiBlaster i używam AmigaAMP z mhi, więc MP3 czy FLAC działają bez problemu w AmigaAMP.
  • Co do pustych gadżetów – gdy lista wskazuje na pusty element, input z danego gadżetu jest ignorowany, więc wyświetla wszystko.
  • O limicie 100. Tak, wiem, zrobiłem to ze względu, ze wyszukiwanie stacji przy 68020 zajmowało trochę czasu, dlatego ustawiłem maksymalnie na 100 wyników. Mogę dodać opcję w ustawieniach, aby to zmienić.
  • Jeśli chodzi o MUI, to może zmienię to za jakiś czas, bo trochę przesadziłem z liczbą okien i innych elementów. Myślę, że idealnym rozwiązaniem byłoby jedno okno, gdzie szczegóły mógłbym wyświetlić na dole strony.
3
[#19] Re: Problemy z inicjalizacją GUI

@sand, post #16

Albo możesz zrobić że jeśli w systemie jest ReAction to zrobisz gui w Reaction, a jak nie to w Intuition jak teraz.
ReAction ma zaawansowane gadżety.

Ostatnia aktualizacja: 11.11.2024 01:15:54 przez mateusz_s
[#20] Re: Problemy z inicjalizacją GUI

@sand, post #18

Tu znajdziesz wersje z możliwością ustawienia limitu wyszukiwania, po prostu ustaw 0 i powinno działać. Ustawienia są w menu -> settings. Nie wrzucam na razie tej wersji do Aminetu, bo ta wersja ma support dla tłumaczeń. I nie jest to do końca przetestowane. TuneFinder
[#21] Re: Problemy z inicjalizacją GUI

@mateusz_s, post #19

Raczej nie, z uwagi, ze nie lubie za bardzo dłubać w okienkach. Ale jeśli chciałbyś tego się podjąć, to jest to mile widziane, projekt jest otwarty. Co do tego jak to by miało działać, raczej prościej skompilować dwie różne wersje z różnymi GUI, niż uzależniać to od wykrytej w systemie biblioteki.
[#22] Re: Problemy z inicjalizacją GUI

@sand, post #18

Mimo wszystko świetny program. Dzięki niemu zaktualizowałem swoją listę stacji. W wolniej chwili sprawdzę jak program działa pod MorphOSem. Natomiast limit stacji obszedłem wpisując część nazwy w polu NAME i gdzie wcześniej nie mogłem znaleźć ZETki, bo lista kończyła się na literę M, to teraz jest ok. Nawet znalazłem moją regionalną stację Vanessa z Raciborza.
1
[#23] Re: Problemy z inicjalizacją GUI

@Ponki1986, post #22

Tak program prezentuje się pod MorphOSem.

1
[#24] Re: Problemy z inicjalizacją GUI

@Ponki1986, post #23

Dzięki za screenshot. Ciekawe górny odstęp wyliczam w stosunku do wielkości fontu. Czy jest to na pewno jedna z ostatnich wersji (1.0?). Szkoda, ze nie mam ze soba maszyny z morphosem to bym zobaczył w czym jest problem. Do tego widzę, ze w morphosie TEXT_KIND nie jest czyszczony i widoczny jest poprzedni komunikat jeśli jest on dłuższy. Wcześniej po prostu przed komunikatem czyściłem pole, ale to objawiało się dziwnym działaniem w OS 3.9. Nic, postaram się to naprawić.
[#25] Re: Problemy z inicjalizacją GUI

@sand, post #24

Szkoda, ze nie mam ze soba maszyny z morphosem to bym zobaczył w czym jest problem.


A może to ci wystarczy do testowania?
https://github.com/Falke3434/QEmu-PPC-GUI

i oczywiście QEMU + dodatki

Ostatnia aktualizacja: 11.11.2024 18:43:55 przez Norbert
1
[#26] Re: Problemy z inicjalizacją GUI

@sand, post #24

Pobrałem wersję z linku Google Driver udostępnionego wyżej. Zauważyłem, że pod MorphOSem program zawiesza się za raz po uruchomieniu, jeżeli zapisane są ustawienia. Pod AmigaOS 3.9 wszystko działa prawidłowo.
[#27] Re: Problemy z inicjalizacją GUI

@Ponki1986, post #26

Hmm, dziwne, nie powinno tak być. Sprawdziłem jeszcze raz, czy za każdym razem czyszczę pamięć, i jedyne, co znalazłem, to fakt, że jeśli pojawi się błąd, nie zamykam pliku. Jednak to nie powinno powodować zawieszenia. Jako, ze już parokrotnie zmieniałem funcie zapisu to ja lekko uprościłem i dodałem lepsza walidacje. Skompilowałem z tą zmianą i wrzuciłem tutaj. Sprawdziłem także ustawienia topMargin i problem pojawia się wtedy, gdy ktoś używa skórek, które sprawiają, że górna ramka jest dużo wyższa od czcionki, przez co program zaczyna rysować także na ramce. Czy jest możliwość sprawdzenia wysokości tej ramki? Podejrzewam, że nie, ale mogę się mylić.
[#28] Re: Problemy z inicjalizacją GUI

@sand, post #27

Sprawdziłem pod MOSem oraz OS3.9 i pojawia się błąd przy próbie zapisu ustawień. Otwarte jest również okno DEBUGowania.







Ostatnia aktualizacja: 12.11.2024 04:58:12 przez Ponki1986
2
[#29] Re: Problemy z inicjalizacją GUI

@Ponki1986, post #28

Dzięki , czyli już się nie wiesza na MOSie przy uruchamianiu? Co do walidacji to zamierzone, w normalnej wersji będzie działało poprawnie. Zresztą jak chcesz wrzucę w to samo miejsce z poprawną walidacją.



Ostatnia aktualizacja: 12.11.2024 05:18:36 przez sand
[#30] Re: Problemy z inicjalizacją GUI

@sand, post #29

Tzn. nie wiem czy na MOSie już jest ok... Musiałbym utworzyć w ENVARC pliki konfiguracji ręcznie, bo aktualnie j/w nie mogłem ich zapisać. Wcześniejsza wersja zawieszała się jeżeli takowe były w ENVARC.

Pytanie z innej beczki. Jaki masz system i jaką łatką zmieniłeś wygląd przycisków i suwaków? VisualPrefs?
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem