diff options
| author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
|---|---|---|
| committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
| commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
| tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/pl/mozilla/tech/xul/kurs_xul/własne_widoki_drzewa | |
| parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
| download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip | |
initial commit
Diffstat (limited to 'files/pl/mozilla/tech/xul/kurs_xul/własne_widoki_drzewa')
| -rw-r--r-- | files/pl/mozilla/tech/xul/kurs_xul/własne_widoki_drzewa/index.html | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/files/pl/mozilla/tech/xul/kurs_xul/własne_widoki_drzewa/index.html b/files/pl/mozilla/tech/xul/kurs_xul/własne_widoki_drzewa/index.html new file mode 100644 index 0000000000..d1ac85888d --- /dev/null +++ b/files/pl/mozilla/tech/xul/kurs_xul/własne_widoki_drzewa/index.html @@ -0,0 +1,149 @@ +--- +title: Własne widoki drzewa +slug: Mozilla/Tech/XUL/Kurs_XUL/Własne_widoki_drzewa +tags: + - Kurs_XUL + - Przewodniki + - XUL +translation_of: Archive/Mozilla/XUL/Tutorial/Custom_Tree_Views +--- +<p></p><div class="prevnext" style="text-align: right;"> + <p><a href="/pl/docs/Kurs_XUL:Zaznaczenie_drzewa" style="float: left;">« Poprzedni</a><a href="/pl/docs/Kurs_XUL:Szczegóły_widoku_drzewa">Następny »</a></p> +</div><p></p> + +<p>Widok drzewa przetrzymuje dane, które mają być wyświetlone w drzewie.</p> + +<h2 id="Tworzenie_w.C5.82asnych_widok.C3.B3w" name="Tworzenie_w.C5.82asnych_widok.C3.B3w">Tworzenie własnych widoków</h2> + +<p>Dotychczas używaliśmy wbudowanych wyglądów drzewa. W tej sekcji przyjrzymy się tworzeniu własnego wyglądu. Jest to konieczne w sytuacji, gdy ilość danych jest bardzo duża, lub są one kompleksowo zaaranżowane. Na przykład, wydajność była by niezbyt duża w sytuacji gdybyśmy mieli użyć treeitems kilka tysięcy razy. Możesz też tworzyć własny widok w sytuacji, gdy chcesz wykonać obliczenia na danych, które maja być wyświetlone. Ponieważ widok może magazynować i odzyskiwać dane w sposób najbardziej odpowiedni dla użytych danych, drzewo może być użyte nawet setki tysięcy razy.</p> + +<div class="note">Uwaga: The tree-related interfaces changed in <a href="/pl/Gecko" title="pl/Gecko">Gecko</a> 1.8. Zobacz <a href="/pl/Tree_Widget_Changes" title="pl/Tree_Widget_Changes">Tree Widget Changes</a>, aby uzyskać więcej informacji.</div> + +<p>Żeby implementować własny wygląd, będziesz musiał stworzyć obiekt wprowadzający interfejs <a class="external" href="http://xulplanet.com/references/xpcomref/ifaces/nsITreeView.html">nsITreeView</a>. Możesz tworzyć te obiekty w <a href="/pl/JavaScript" title="pl/JavaScript">JavaScript</a>, ale będziesz potrzebować oddzielnego obiektu dla każdego drzewa. Naturalnie, ponieważ własny widok będzie używany, wbudowany widok nie będzie już używany, więc <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treeitem" title="treeitem">treeitem</a></code></code>, <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treerow" title="treerow">treerow</a></code></code> i <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treecell" title="treecell">treecell</a></code></code> będą bezużyteczne, ponieważ własny widok będzie otrzymywać dane z innego źródła. Tak więc <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treechildren" title="treechildren">treechildren</a></code></code> może zostać pusty. Przykład:</p> + +<pre><tree id="my-tree" flex="1"> + <treecols> + <treecol id="namecol" label="Name" flex="1"/> + <treecol id="datecol" label="Date" flex="1"/> + </treecols> + <treechildren/> +</tree> +</pre> + +<p>By wyznaczyć dane do pokazania w drzewie, musi być stworzony obiekt widoku, który jest użyty dla każdej komórki, całkowita liczba wierszy plus inne opcjonalne informacje. Drzewo wywoła metody widoku w celu otrzymania informacji potrzebnych do wyświetlenia.</p> + +<p>Generalnie, chociaż widok drzewa ma około trzydziestu funkcji mogących zostać zaimplementowanymi, musimy je uruchomić tylko jednokrotnie, gdy drzewo ją wywołuje.</p> + +<dl> + <dt>rowCount</dt> + <dd>Własność powinna być ustawiona, do ustalenia dla całkowitej liczby wierszy w drzewie.</dd> +</dl> + +<dl> + <dt>getCellText( row , column )</dt> + <dd>Metoda ta, zwraca tekst zawarty w podanej kolumnie i wierszu. Będzie używana do wyświetlania danych dla każdej komórki. Wiersze podaje się numerycznie, zaczynając od 0. Kolumny, to atrybut id przypisany kolumnom. W Mozilla 1.8 i późniejszych, zamiast tego będzie używany obiekt treeColumn.</dd> +</dl> + +<dl> + <dt>setTree( tree )</dt> + <dd>Metoda ta, jest wywoływana jednokrotnie, w celu umieszczenia elementu drzewa w widoku.</dd> +</dl> + +<p>Tutaj jest przykład definicji takiego obiektu, który może być wywołany, kiedy tylko chcesz:</p> + +<pre>//Moz 1.8 +var treeView = { + rowCount : 10000, + getCellText : function(row,column){ + if (column.id == "namecol") return "Wiersz "+row; + else return "18 luty"; + }, + setTree: function(treebox){ this.treebox = treebox; }, + isContainer: function(row){ return false; }, + isSeparator: function(row){ return false; }, + isSorted: function(){ return false; }, + getLevel: function(row){ return 0; }, + getImageSrc: function(row,col){ return null; }, + getRowProperties: function(row,props){}, + getCellProperties: function(row,col,props){}, + getColumnProperties: function(colid,col,props){} +}; +</pre> + +<p>Funkcje nieopisane powyżej nie pełnią żadnego zadania, lecz muszą być użyte, gdy drzewo będzie je wywoływać w celu zebrania dodatkowych informacji.</p> + +<p>Ten przykład może zostać użyty dla drzewa z 10000 wierszy. Zawartość komórek pierwszej kolumny będzie wypełniona tekstem <code>Row X</code>, gdzie X jest numerem wiersza. Zawartość komórek drugiej kolumny będzie ustawiona na ‘18 luty’. Warunek <code>if</code> funkcji <code>getCellText()</code> porównuje kolumnę z tekstem ‘namecol’. Tekst ‘namecol’ odpowiada <code>id</code> pierwszego <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treecol" title="treecol">treecol</a></code></code> w powyższym przykładzie. Przykład jest oczywiście bardzo prosty, w rzeczywistości miał być bardziej skomplikowane dane w każdej komórce.</p> + +<p>Ostatnim krokiem będzie skojarzenie obiektu widoku z drzewem. Drzewo ma własność <code>view</code>, która może być przyporządkowana do obiektu widoku deklarowanego powyżej. Możemy wyznaczyć wartość tej własności, by w dowolnym czasie, ustawić lub zmienić widok.</p> + +<p><span class="comment"><div class="note">Note: The tree-related interfaces changed in <a href="/pl/Gecko">Gecko</a> 1.8. See <a href="/pl/Tree_Widget_Changes">Tree Widget Changes</a> for details.</div> To implement a custom view, you will need to create an object which implements the <a class="external" href="http://xulplanet.com/references/xpcomref/ifaces/nsITreeView.html">nsITreeView</a> interface. You can create these objects in <a href="/pl/JavaScript">'JavaScript</a>, but you will need a separate object for each tree. Naturally, since a custom tree view is being used, the content tree view will not be used, so the <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treeitem" title="treeitem">treeitem</a></code></code>, <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treerow" title="treerow">treerow</a></code></code>, and <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treecell" title="treecell">treecell</a></code></code> elements will have no purpose since the custom view will get its data from elsewhere. Thus, you can just leave the <code><code><a href="/pl/docs/Mozilla/Tech/XUL/treechildren" title="treechildren">treechildren</a></code></code> element empty. The following example shows this:</span></p> + +<pre>function setView() +{ + document.getElementById('my-tree').view = treeView; +} +</pre> + +<p>W celu uproszczenia przykładu, użyto wbudowanego skryptu. Normalnie byłby on umieszczony w zewnętrznym pliku.</p> + +<h3 id="Przyk.C5.82ad_drzewa_u.C5.BCytkownika" name="Przyk.C5.82ad_drzewa_u.C5.BCytkownika">Przykład drzewa użytkownika</h3> + +<p><a href="https://developer.mozilla.org/samples/xultu/examples/ex_treeview_1.xul.txt">Źródła</a></p> + +<div class="float-right"><img alt="grafika:treeview1.png" class="internal" src="/@api/deki/files/2515/=Treeview1.png"></div> + +<pre><?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> + +<window title="Przykład okna" id="tree-window" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="setView();"> + +<script> +//Moz 1.8 +var treeView = { + rowCount : 10000, + getCellText : function(row,column){ + if (column.id == "namecol") return "Row "+row; + else return "February 18"; + }, + setTree: function(treebox){ this.treebox = treebox; }, + isContainer: function(row){ return false; }, + isSeparator: function(row){ return false; }, + isSorted: function(){ return false; }, + getLevel: function(row){ return 0; }, + getImageSrc: function(row,col){ return null; }, + getRowProperties: function(row,props){}, + getCellProperties: function(row,col,props){}, + getColumnProperties: function(colid,col,props){} +}; + +function setView(){ + document.getElementById('my-tree').view = treeView; +} +</script> + +<tree id="my-tree" flex="1"> + <treecols> + <treecol id="namecol" label="Nazwa" flex="1"/> + <treecol id="datecol" label="Data" flex="1"/> + </treecols> + <treechildren/> +</tree> + +</window> +</pre> + +<p>Na obrazku widoczne są 2 kolumny każda z danymi, pobranymi z funkcji <code>getCellText()</code>. Funkcja <code>setView()</code> była wywołana w operatorze okna <code>onload()</code>, jednak mógłbyś ustawić widok jeżeli tak sobie zażyczysz. Widok możesz zmieniać w dowolnym momencie.</p> + +<p>Rzeczą, którą należy zapamiętać to, to że funkcja <code>getCellText()</code> jest wywoływana tylko kiedy jest potrzeba pokazania zawartości. Z pośród 10000 wierszy powyżej, <code>getCellText()</code> jest uruchamiana tylko dla aktualnie widocznych komórek. Na obrazku jest pokazanych tylko 7 wierszy, ostatni tylko częściowo, więc <code>getCellText</code> będzie wywołana tylko 14 razy, po razie dla każdego wiersza i kolumny. Dla innych wierszy jest uruchamiana w momencie przewijania przez użytkownika. Dzięki temu drzewo działa bardziej efektywnie.</p> + +<p>Zauważ to, że obiekt widoku jest dostępny też dla drzew używających wbudowanego wyglądu. Możesz używać tego by zdobyć etykiety i inne informacje nt. komórki.</p> + +<p><a class="external" href="http://www.xulplanet.com/references/xpcomref/ifaces/nsITreeView.html">Interfejs nsITreeView</a> listuje wszystkie metody i własności, które możemy zastosować dla widoku drzewa.</p> + +<p>Następnie, zobaczymy więcej <a href="/pl/Kurs_XUL/Szczegóły_widoku_drzewa" title="pl/Kurs_XUL/Szczegóły_widoku_drzewa">szczegółów widoku drzewa</a>.</p> + +<p></p><div class="prevnext" style="text-align: right;"> + <p><a href="/pl/docs/Kurs_XUL:Zaznaczenie_drzewa" style="float: left;">« Poprzedni</a><a href="/pl/docs/Kurs_XUL:Szczegóły_widoku_drzewa">Następny »</a></p> +</div><p></p> |
