Blog (76)
Komentarze (5.3k)
Recenzje (0)

Libgreattao: tworzenie interfejsu

@nintyfanLibgreattao: tworzenie interfejsu13.10.2014 12:33

Do tego zadania będzie potrzebna najnowsza wersja libgreattao i program tao-manager. Proszę załadować stronę: www.slawek.lach.art.pl, by pobrać menadżer plików, a najnowszą wersję libgreattao można ściągnąć z svn-a, z sourceforge.

Nasze okno konfiguracji

Najpierw zajmiemy się oknami konfiguracji. W tym przykładzie omówię już gotową klasę okna konfiguracji dla motywu modern.

Okno to składa się z przycisków po prawej stronie, z tekstów i z pól edycyjnych. W standardowym motywie są karty zamiast przycisków.Tutaj naciśnięcie na przycisk przełącza widok (pojawiają się inne teksty i pola edycyjne).

Oto kod:


<root>
<variable name="displayed_path" action="change" value="" />
<hbox>
<vbox>
<template path="/category/*">
   <variable name="blank_path" action="change" value="" />
   <if type="equal" variable1="blank_path" variable2="displayed_path">
      <variable name="displayed_path" action="change" function="path" />
      <variable name="active" action="change" function="path" />
      <variable name="active_directory" action="change" value="/" />
       <variable name="active" action="append" variable="active_directory" />
   </if>
   <button dir-for="label">
     <handler>
        <hide variable="active"  />
        <variable name="active" action="change" function="path" />
        <variable name="active_directory" action="change" value="/" />
        <variable name="active" action="append" variable="active_directory" />
        <show variable="active" />
     </handler>
   </button>
</template>
</vbox>
<vbox>
<template path="/category/*/*/text">
<variable name="current_path" action="change" function="path" />
<hide />
<if type="is_children" variable1="displayed_path" variable2="current_path">
   <show />
</if>
<hbox>
<label dir-for="label" />
<edit dir-for="event,input,output" />
<label dir-for="description" />
</hbox>
</template>
</vbox>
</hbox>
<hbox>
<button label="Ok" dir-for="label,event" path="/actions/ok" />
<button label="Cancel" dir-for="label,event" path="/actions/cancel" />
<button label="Save" dir-for="label,event" path="/actions/save" />
</hbox>
</root>

Widzimy jeden handler, kilka zmiennych, warunki i elementy show/hide. Elementy show/hide zmieniają widoczność:

1. Elementu, którego są dzieckiem, gdy nie podano atrybutu name lub variable.

2. Elementów o podanej ścieżce, gdy użyto atrybutu variable

3. Elementów o podanej nazwie, gdy użyto atrybutu name

O atrybucie name powiemy sobie później.

Co zrobić, by chować/pokazywać elementy po naciśnięciu przycisku. Przede wszystkim musimy się zdecydować na metodę (ścieżką lub nazwą). Ponieważ przyciski są pod ścieżkami "/category/*", a elementy do sterowania pod "/category/*/*", to decydujemy się na ścieżkę i sterowanie elementami o ścieżkach-dzieciach "/category/*/" . Najpierw chowamy wszystkie elementy dzięki podaniu hide bez atrybutów dla

<template path="/category/*/*/text">

. Dzięki temu wszystkie elementy będą schowane. Następnie trzeba wyświetlić pierwszą utworzoną kategorię. Odpowiada za to ten kod:


<if type="is_children" variable1="displayed_path" variable2="current_path">
   <show />
</if>

Typ warunku "is_children" sprawdza czy ścieżka jest dzieckiem innej ścieżki. Jeżeli chcemy, by dotyczyło to tylko dzieci dopasowanego elementu, to musimy zakończyć wartość slash-em. W tym wypadku sprawdzane jest czy "current_path" jest dzieckiem "displayed_path". "current_path" jest ustawiane wyżej i jest nadawana mu wartość aktualnej ścieżki. Ustawiamy też zmienną "active", która wskazuje na dzieci aktywnego elementu(dlatego dodajemy przez "append" slash na koniec). Trzeba zwrócić jeszcze uwagę, że przed nadaniem ścieżki pierwszej kategorii dla zmiennej "displayed_path", sprawdzamy czy zmienna ta nie jest slashem(ustawiamy slash dla tej zmiennej na początku naszego widoku).

Teraz zajmiemy się ukrywaniem/pokazywaniem elementów po kliknięciu. Odpowiada za to nasz jedyny handler. Najpierw chowamy aktywny element, dzięki zmiennej "active". Trzeba pamiętać, że pierwszy utworzony element jest aktywny. Następnie aktualizujemy zmienną "active", by zawierała ścieżkę akcji z klikniętym przyciskiem, doklejając slash na końcu. Teraz możemy wyświetlić element przyporządkowany klikniętemu przyciskowi. Zmienna "active" będzie zawierała ścieżkę klikniętego elementu, więc po ponownym kliknięciu jakiegoś elementu, nasz element zostanie schowany.

To już koniec omawiania dialogu konfiguracji. Jest tylko jeden problem. Jeżeli aplikacja usunie aktywny element, to nie będzie widocznego elementu. Inaczej jest z kartami - tutaj framework automatycznie powinien zmienić widoczną kartę.

Wygląd naszego okna konfiguracji
Wygląd naszego okna konfiguracji

Własne okno zarządzania plikami dla tao-manager

Wygląd menadżera plików bez lewego panelu
Wygląd menadżera plików bez lewego panelu

Następny przykład będzie polegał na dodaniu panelu informacyjnego dla mojego menadżera plików. Zmienimy widok okna menadżera plików tylko dla tej jednej aplikacji. By to uczynić tworzymy katalog(jeżeli jeszcze nie istnieje) "$HOME/.tao", a w nim "$HOME/.tao/tao-manager", a w nim "$HOME/.tao/tao-manager/mWidgets", a w nim "$HOME/.tao/tao-manager/mWidgets/app". Następnie tworzymy plik z definicjami ścieżek interfejsów użytkownika("$HOME/.tao/app"). W tym pliku definiujemy katalog interfejsu dla naszego menadżera plików:


tao-manger = tao-manger

Teraz trzeba skopiować plik konfiguracyjny dla motywu "mWidgets".


cp /usr/share/tao-design/mWidgets/config ~/.tao/tao-manager/mWidgets

Następnie tworzymy w katalogu "$HOME/.tao/tao-manager/mWidgets/app" plik "file_manager". Powinien on mieć następującą postać:


<root>
<menu>
<template path="/actions/*">
<submenu dir-for="label">
<attr-connect name="label" function="last-dir" />
<template path="*">
<item dir-for="label,event">
<icon dir-for="icon" width="8" height="8" />
<attr-connect name="label" function="last-dir" />
</item>
</template>
</submenu>
</template>
</menu>

<hbox>
<vbox>
<template path="/fileviews/*/list/items/*">
<variable name="name" action="change" function="path" />
<variable name="name" action="append" value="/name" />
<attr-connect name="widget-name" variable="name" />
<template path="data/*">
<hbox>
<label>
   <attr-connect name="label" function="last-dir" />'
</label>
<label dir-for="label" />
</hbox>
</template>
<hide />
</template>
</vbox>
<template path="/fileviews/*">
<vbox>
<template path="path_edit">
<edit dir-for="input,output,event" />
</template>
<list>
<template path="list/columns/*">
<column>
    <attr-connect name="name" function="last-dir" />
    <attr-connect name="label" function="last-dir" />
</column>
</template>
<template path="list/items/*">
<selection>
    <template path="selected">
       <handler>
          <hide name="path" />
          <variable name="path" action="change" function="remove_last_dir" />
          <variable name="path" action="append" value="/name" />
          <variable name="call-path" action="change" function="path" />
          <show name="path" />
          <call var="call-path" />
       </handler>
    </template>
    <template path="data/*">
       <data dir-for="label">
         <attr-connect name="column-name" function="last-dir" />
         <attr-connect name="label" function="last-dir" />
       </data>
    </template>
</selection>
</template>
</list>
</vbox>
</template>
</hbox>
</root>

Panel definiowany jest w templacie o szablonie ścieżki "/fileviews/*/list/items/*". Teraz przejdźmy do nazw. Otóż każdy widżet w danym oknie może mieć wiele nazw. Wiele widżetów w danym oknie może mieć taką samą nazwę. Nazwa służy do sterowania widocznością elementu, a w przyszłości także będzie służyć do robienia innych rzeczy. Nazwę widżetu określa się poprzez element "attr-connect" z atrybutem "name" równym "widget-name". Następnie trzeba przypisać nazwę ze zmiennej. Naszą nazwą będzie ścieżka do akcji z doklejonym na końcu ciągiem znaków "/name". Dlaczego nie korzystamy ze ścieżek do akcji? Otóż tę samą ścieżkę mają elementy w listach, więc użycie ścieżek mogłoby skutkować pokazywaniem./ukrywaniem elementów tych list, gdyby ukrywanie/pokazywanie elementów list było zaimplementowane.

W omawianym szablonie definiujemy szablon z szablonem ścieżki bezwzględnej "data/*". Tam mamy etykietę, której przyporządkujemy tekst o ostatnim katalogu ścieżki do tej akcji. Następnie mamy etykietę, która jest podłączona do wartości atrybutu w naszym menadżerze plików dla danego pliku. Wszystkie atrybuty plików są domyślnie niewidoczne.

Należy też zwrócić uwagę na jedyny handler w tym pliku. Jest on w szablonie ze ścieżką względną "selected". "Selected" jest zdarzeniem wywoływanym, gdy dany plik zostanie zaznaczony. Na aktywny plik wskazuje zmienna "path". Domyślnie ta zmienna jest pusta, więc nic nie zostanie ukryte. Najpierw ukrywa on element(naszego vboksa dla atrybutów danego pliku). Następnie pobiera on ścieżkę bez ostatniego elementu("/selected"), by później dodać do niej wartość "/name",. Tak tworzymy nazwę elementu, który powinien być wyświetlony. Zmienna "call-path" natomiast zawiera ścieżkę do naszej akcji "selected", by później wywołać zdarzenie skojarzone z nią.

Wynik naszych prac
Wynik naszych prac

Jedynym problemem jest to, że nazwy atrybutów plików nie są takie same, jak na liście plików. Korzystamy z nazw wewnętrznych, a mianowicie ostatniego katalogu ścieżki do tego atrybutu dla danego pliku. W przyszłości powinno się to zmienić.

To już wszystko na dzisiaj.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.