kategorie: Lua, MUI
[#1] Lua i MUI
Zaciekawił mnie język Lua. Wygląda na dość łatwy do nauki od podstaw...
Zacząłem od grzebania w kodzie Antiword GUI - skrypt Matthiasa Rustlera dla AROS-a dostępny na Aminecie.
Teraz chciałbym wyświetlić w oknie dłuższy fragment tekstu załadowany z pliku. Jakiego obiektu MUI użyć? (Nie mam żadnej wiedzy nt MUI)
Teraz mam:

mui.Child, mui.StringObject(
mui.MUIA_Frame, mui.MUIV_Frame_String,
mui.MUIA_String_Contents, "",
mui.MUIA_String_MaxLen, 30)


ale chciałbym załadowac dłuższy tekst niż 30 znakiów no i w kilku liniach a najlepiej z możliwością przewijania. Edycja wczytanego tekstu miałaby być niemozliwa. Czyli taki obiekt read only. Jak to powinno wyglądać?



Ostatnia modyfikacja: 31.12.2010 16:00:08
[#2] Re: Lua i MUI

@tomek, post #1

Najlepiej jednak poczytac swietny kurs Krashana na ppa w szkolce. Dopiero zaczac pisac konkretne programy znajac podstawy. Ps. string sie nie nadaje, lepiej text lub gotowa klasa texteditor etc.

[#3] Re: Lua i MUI

@AmiChris, post #2

String w MUI4 to TextInput więc jak najbardziej nadaje się do wielu linii. W mui.hsą wszystkie definicje (MUIA_TextInput_...), dziłają normalnie na obiekcie String.mui.
[#4] Re: Lua i MUI

@Jacek Piszczek, post #3

No ale chyba Panowie nie zauważyliście, że pytanie dotyczy AROS-a. MorphOS-owa Lua jeszcze nie ma dowiązania do MUI, zanim to zrobię muszę dobrze sprawę przemyśleć, bo nie jestem pewien, czy sposób wybrany w AROS-ie jest dobry.

[#5] Re: Lua i MUI

@tomek, post #1

Napisałem (podglądając AntiWordGUI) GUI dla KGB Archiver.
http://archives.aros-exec.org/share/utility/filetool/kgbarchgui.i386.lha
Mam parę pytań. Chciałbym wyłączyć gadżet Output file dla wybranej opcji Decompression, bo składnia nie przewiduje tego pliku i gdy ktoś wpisze tam coś przez pomyłkę to program ponownie kompresuje.
Druga sprawa to taka, że kgb nie kompresuje katalogów a jedynie pliki lub listy plików. Użyłem:

mui.ASLFR_DoMultiSelect, true

ale i tak mogę wskazać tylko jeden plik. Po wpisaniu ręcznym kilku plików program działa ale wolałbym je wskazywać myszą.

I ostatnie. GDy w ścieżce znajdzie się katalog z nazwą zawierającą spację to wyskakuje błąd (np RAM Disk: ) Jak to rozwiązać?

Zaraz biorę się za studiowanie kursu MUI Grzegorza ale może ktoś mi zasugeruje coś wcześniej niż to znajdę?

[#6] Re: Lua i MUI

@G. Kraszewski, post #4

Sugeruję zachowanie kompatybilności z wersją AROS-ową. Gdyby okazało się, że można coś poprawić skontaktuj sie prosze z Matthiasem Rustlerem. Byłoby klęską, gdyby amigowe skrypty nie były przenośne... :(

[#7] Re: Lua i MUI

@tomek, post #6

Sugeruję zachowanie kompatybilności z wersją AROS-ową.

O tym za wcześnie jeszcze mówić. Nie bardzo mi się podoba, że moduł MUI jest podzielony na trzy części i to już wprowadzi niekompatybilność. Druga sprawa to sposób zdefiniowania stałych. Matthias Rustler zaimplementował je jako elementy tablicy "mui", zawierającej również funkcje. Moim zdaniem to złe rozwiązanie, ładujące do tej tablicy setki elementów zupełnie niepotrzebnie. Na dziś uważam, że atrybuty i metody powinny być zrobione na bazie stringa (ze zmienioną metatablicą zapewne). Czyli składnia by wyglądała tak:

DoMethod(object, "MUIA_List_Clear")

object = mui.NewObject("MUIC_Text",
"MUIA_Text_Contents", "cokolwiek",
"MUIA_Frame", "MUIV_Frame_Text")

Konwersja stringów na wartości wysyłane do MUI byłaby zrobiona na hashtable. Dzięki temu stałe MUIC, MUIM i MUIA nie musiałyby być eksportowane do tablicy mui[], co znacznie zmniejszy zajętość pamięci i conieco zwiększy szybkość przeglądania tej tablicy przez interpreter. Hashowanie oczywiście robiłby kod w C, dzięki temu odbywałoby się to bardzo szybko.

Nie bardzo jeszcze też rozumiem dlaczego DoMethod() ma porobione oddzielne wersje dla każdego typu Lua, przecież Lua ma dynamiczne typy...

Jak się za to już konkretnie wezmę, opracuję szczegółowe rozwiązania. Tak czy inaczej - jeżeli będę miał do wyboru techniczną jakość rozwiązania lub kompatybilność z AROS-em, to wybieram jakość rozwiązania.



Ostatnia modyfikacja: 02.01.2011 15:36:19
[#8] Re: Lua i MUI

@tomek, post #5

Chciałbym wyłączyć gadżet Output file dla wybranej opcji Decompression, bo składnia nie przewiduje tego pliku

Trzeba zrobić notyfikację. Nie wiem jakiego typu jest gadżet "Decompression", bo nie widziałem tego GUI. Jeżeli jest to checkmark, albo przycisk dwustanowy, to w C leci to tak:

DoMethod(opcja, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, output, 3, MUIM_Set, MUIA_Disabled, MUIV_TriggerValue);

ale i tak mogę wskazać tylko jeden plik

Może AROS-owe ASL nie obsługuje multiselecta. Albo ten tag nie jest zdefiniowany w Zulu.

[#9] Re: Lua i MUI

@G. Kraszewski, post #7

Tak czy inaczej - jeżeli będę miał do wyboru techniczną jakość rozwiązania lub kompatybilność z AROS-em, to wybieram jakość rozwiązania.

Bardzo słusznie. Byłoby jednak idealnie, gdyby Matthias wprowadził analogiczne rozwiązanie w wersji AROS-owej. Chodzi mi tylko o to, byście byli w kontakcie.

[#10] Re: Lua i MUI

@G. Kraszewski, post #8

Notyfikacja użyta :) Dzięki...
Kto chce zobaczyć to tu jest nowa wersja:
http://archives.aros-exec.org/share/utility/archive/kgbarchgui.i386-aros.lha
Fajna ta Lua. Czekam z niecierpliwością na obsługę MUI w Lua dla Mosa :)

[#11] Re: Lua i MUI

@tomek, post #1

Jaka powinna być prawidłowa kolejność HGroup, VGroup? Czy kolejność jest bez znaczenia?
Tworzę GUI metodą prób i błędów i efekty są mizerne.
Jak dodać do gadżetów button, string i frame szerokość?

[#12] Re: Lua i MUI

@tomek, post #11

Grupy pionowe i poziome można sobie używać w dowolnej kolejności.

Co do "dodawania szerokości" to nie bardzo wiem o co Ci chodzi.

[#13] Re: Lua i MUI

@G. Kraszewski, post #12

Co do "dodawania szerokości" to nie bardzo wiem o co Ci chodzi.


Chciałbym aby pole string miało długość 300 pikseli albo np. 40 znaków
albo żeby przycisk miał długość, czy też szerokość 100 pikseli. Teraz przyciski dostosowują mi się do grupy, a szerokość tej ustalam za pomocą długości gadżetu label - to tak trochę mało profesjonalnie ;)

[#14] Re: Lua i MUI

@tomek, post #13

Podawanie szerokości gadżetów w pikselach - to jest dopiero mało profesjonalne... MUI ma dynamiczny layout i tyle. Przyciski dopasowują się do tekstów jakie mają na sobie (przycisk jest co najmniej tak szeroki jak tekst). Może daj screenshota tego GUI to omówimy.

[#15] Re: Lua i MUI

@G. Kraszewski, post #14

http://picasaweb.google.com/lh/photo/5FyCzq2YRGj61jQMLA0MIw?feat=directlink

a tu fragment kodu

group = mui.VGroup(
          mui.Child, mui.VGroup(            
            mui.Child, mui.HGroup(
            mui.MUIA_Frame, mui.MUIV_Frame_Group,
            mui.MUIA_FrameTitle, "Information",
            mui.Child, info
            ),         
          
            mui.Child, mui.VGroup(
            mui.MUIA_Frame, mui.MUIV_Frame_Group,    
            mui.Child, mui.Label("27lURL"),
            mui.Child, http_str,   
              mui.Child, mui.HGroup(      
                mui.Child, mui.VGroup(
                mui.Child, mui.Label("n27l[-i] --input-file"),
                  mui.Child, mui.ColGroup(2,
                  mui.Child, inp_str,
                  mui.Child, inp_btn
                  )
                ),
              
                mui.Child, mui.VGroup(  
                mui.Child, mui.Label("n27l[-P] Prefix (local download directory)"),
                  mui.Child, mui.ColGroup(2,
                  mui.Child, dir_str,
                  mui.Child, dir_btn        
                  )
                )   
              )
            ),


co byś poprawił i jak?

[#16] Re: Lua i MUI

@tomek, post #15

1. Użyłbym klasy Popasl tam, gdzie wybiera się ścieżki do plików lub katalogów.
2. Ponieważ ścieżki są długie z reguły, dałbym Popasl-e do -i i -P jeden pod drugim na całą szerokość okienka.
3. Etykiety do tychże Popasl-i najlepiej byłoby dać po lewej i je skrócić. Po prostu na przykład "List of files:" i "Destination drawer:". Jak ktoś chce detali, niech sobie poczyta helpa od wgeta. Wyglądałoby to podobnie jak tutaj.
4. Oszczędnie z ramkami. Wiem, że dawanie ramek bawi, ale co najmniej jedna (w grupie wyborem pliku i ścieżki docelowej) jest zbędna.
5. Od informacji o programie powinna być opcja w menu i oddzielne okienko... Zajmują niepotrzebnie miejsce. Zwalcz przemożną chęć reklamy .
6. Nie wiem czemu grupa na dole jest zwężona. Niech gadżet "Additional parameters" będzie od brzegu do brzegu, czasem się tam sporo wpisuje.

[#17] Re: Lua i MUI

@G. Kraszewski, post #16

No tak, te Popasle wyglądają dużo ładniej. Mam nadzieję, że w Zune jet taka klasa. Muszę poczytać, jak się tego używa.
Information nie jest w menu, bo jeszcze nie umiem do tego "cuda" dać menu a i tak programik jest jeszcze b. ubogi w opcje. Dodając kolejne gadżety ucze się MUI. Z pewnością jednak nadmiar ozdobników w jednym programie nie jest potrzebny... Właśnie nie wiem dlaczego dolna ramka tak się zachowuje. Mam nadzieję to za jaki czas odkryć :) Dzięki za pomoc. Robiłem kilka podejść do MUI ale C był dla mnie nie do ogarnięcia ;) Lua rządzi!!

OK

edit:
No niestety, podpatrywanie kodu w C na niewiele mi się zdało. Nie wiem jak użyć klasy Popasl w Lua. Szkoda, że nie ma żadnego skryptu lua używającego tej klasy...



Ostatnia modyfikacja: 06.01.2011 18:23:45
[#18] Re: Lua i MUI

@tomek, post #1

ZuluWget do czasu poznania przeze mnie składni Popasl w Lua (nie ma żadnego przykładu :( ) zakończyło się na wersji 0.3 (AROS-Archives jeśli kogoś interesuje - na razie w Uploads) Udało mi się dodać obsługę kilku języków :)

Teraz chciałbym przećwiczyć działania na tekście. Jakiej klasy musiałbym użyć, żeby móc wczytać tekst do okienka z listwą przewijania?
Jak wygląda składnia przywołania tego obiektu i wypełnienia go treścią. Niestety nie ma też żadnego przykładu w Lua ale może coś z C przez analogię do innych obiektów skumam.
Okienko nie ma służyć do edycji a jedynie do przeglądania. Z góry dziękuję za odpowiedź.

[#19] Re: Lua i MUI

@tomek, post #18

Floattext, o ile jest w Zune.

[#20] Re: Lua i MUI

@G. Kraszewski, post #19

W Classes/Zune widzę floattext.mui :)
Gdzie znajdę opis tej klasy?

[#21] Re: Lua i MUI

@tomek, post #20

W docach do MUI nie ma?

[#22] Re: Lua i MUI

@G. Kraszewski, post #21

Yannick Erb zasugerował mi obiekt list, bo z floattext nie dał sobie rady w Lua.
Patrząc na kod Yannicka w WHDLoad Menu udało mi się wczytać tekst do tego obiektu :)
Co myślisz o takiej zamianie?

[#23] Re: Lua i MUI

@tomek, post #22

list i listview też się nadają

[#24] Re: Lua i MUI

@AmiChris, post #2

Szukałem i jakoś nie udało mi się znaleźć tego tekstu. Możecie podrzucić jakiś link?
[#25] Re: Lua i MUI

@alekc, post #24

http://www.ppa.pl/artykuly/dzial.php?idd=2&id_kategorii=5

[#26] Re: Lua i MUI

@adater, post #25

Dzięki :)
[#27] Re: Lua i MUI

@tomek, post #22

Co myślisz o takiej zamianie?

Jest OK. Jeżeli wczytuje się tekst linia po linii, to klasa List jest wygodniejsza nawet. Zresztą Floattext to nic innego jak podklasa List...

[#28] Re: Lua i MUI

@tomek, post #1

Zastanawiam się jaki błąd popełniam w niszczeniu obiektów.
Chcę po kliknięciu w przycisk zmienić jego zawartość
robię to tak:
if mui.doint(group, mui.MUIM_Group_InitChange) then
             mui.doint(group, mui.OM_REMMEMBER, old_btn)
mui.doint(group, mui.OM_ADDMEMBER, new_btn)
mui.doint(group, mui.MUIM_Group_ExitChange)
             end

W rezultacie przycisk znika i pojawia się nowy z tym, że ten nowy pojawia się na samym dole okienka a chciałbym, żeby wskoczył w miejsce starego.
Jak to zrobić? Usunąć wszystkie gadżety i na nowo je zbudować? Nie ma prostszej opcji?

[#29] Re: Lua i MUI

@tomek, post #28

Sam sobie odpowiem, że nie jest to specjalnym utrudnieniem, jeśli odpowiednio pogrupuje się obiekty :)

[#30] Re: Lua i MUI

@tomek, post #29

Tym razem poszukuję rozwiązania na przełamanie wiersza w teście. Wczytuję tekst, który ma bardzo długie wiersze, nie mieszczące się na ekranie. Chciałbym, żeby wczytywany tekst zawijał wiersze, powiedzmy po 100-ym znaku. Ma ktoś pomysł?

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