paged tree interface
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 6 Jul 2005 05:51:29 +0000 (05:51 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 6 Jul 2005 05:51:29 +0000 (05:51 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@1057 dcc99617-32d9-48b4-a31d-7c20da2025e4

Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/main/paged_tree_overlay.xul [new file with mode: 0644]

diff --git a/Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.js b/Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.js
new file mode 100644 (file)
index 0000000..2f45c7b
--- /dev/null
@@ -0,0 +1,176 @@
+sdump('D_TRACE','Loading paged_tree.js\n');
+
+function paged_tree_init(p) {
+       sdump('D_PAGED_TREE',"TESTING: paged_tree.js: " + mw.G['main_test_variable'] + '\n');
+
+       p.w.display_count = 5;
+       p.w.current_idx = 0;
+
+       p.w.results_label = get_widget( p.w.document, p.nav_results );
+       p.w.range_label = get_widget( p.w.document, p.nav_range );
+       p.w.next_button = get_widget( p.w.document, p.nav_next );
+       p.w.prev_button = get_widget( p.w.document, p.nav_prev );
+
+       var cmd_next = get_widget( p.w.document, 'cmd_next' );
+       cmd_next.addEventListener(
+               'command',
+               function (ev) {
+                       return paged_tree_nav_next(p);
+               },
+               false
+       );
+
+       var cmd_prev = get_widget( p.w.document, 'cmd_prev' );
+       cmd_prev.addEventListener(
+               'command',
+               function (ev) {
+                       return paged_tree_nav_prev(p);
+               },
+               false
+       );
+
+       p.w.tree = get_widget(p.w.document,p.paged_tree);
+       p.w.treecols = p.w.tree.firstChild;
+       p.w.tc = p.w.tree.lastChild;
+
+       paged_tree_make_columns( p, p.w.treecols, p.cols )
+
+       p.w.add_rows = function (ids) { return paged_tree_add_rows(p,p.w.tc,ids); }
+
+       p.w.register_flesh_row_function = function (f) { p.w._flesh_row_function = f; }
+
+       p.w.register_select_callback = function (f) { p.w._select_callback = f; }
+
+       p.w.map_cols_to_treeitem = map_array_to_treecells_via_treeitem;
+
+        if (p.onload) {
+                try {
+                        sdump('D_TRACE','trying psuedo-onload...\n');
+                        p.onload(p.w);
+                } catch(E) {
+                        sdump('D_ERROR', js2JSON(E) + '\n' );
+                }
+        }
+}
+
+function paged_tree_make_columns( p, treecols, cols ) {
+       sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
+       var d = p.w.document;
+       // cols[ idx ] = { 'id':???, 'label':???, 'primary':???, 'flex':??? }
+       for (var i = 0; i < cols.length; i++) {
+               var col = cols[i];
+               sdump('D_PAGED_TREE','Col ' + i + ' : ' + js2JSON( col ) + '\n');
+               var treecol = d.createElement( 'treecol' );
+               treecols.appendChild( treecol );
+               for (var j in col) {
+                       treecol.setAttribute( j, col[j] );
+               }
+       }
+       return treecols;
+}
+
+function paged_tree_add_rows( p, tc, ids ) {
+       sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
+       var d = p.w.document;
+       var offset = 0;
+       if (tc.childNodes.length > 0) { offset = tc.lastChild.id; }
+       for (var i = 0; i < ids.length; i++) {
+               var id = ids[i];
+
+               var treeitem = d.createElement( 'treeitem' );
+               treeitem.setAttribute( 'id', i+offset+1 );
+               treeitem.setAttribute( 'record_id', id );
+               treeitem.setAttribute( 'retrieved', 'false' );
+               if ( (i+offset) < (p.w.display_count + p.w.current_idx) ) {
+                       treeitem.setAttribute( 'hidden', 'false' );
+               } else {
+                       treeitem.setAttribute( 'hidden', 'true' );
+               }
+               tc.appendChild( treeitem );
+
+               var treerow = d.createElement( 'treerow' );
+               treeitem.appendChild( treerow );
+
+               for (var j = 0; j < p.w.treecols.length; j++) {
+                       var treecell = d.createElement( 'treecell' );
+                       treecell.setAttribute('label', 'Retrieving...' );
+                       treerow.appendChild( treecell );
+               }
+       }
+       paged_tree_update_visibility( p );
+       paged_tree_update_nav( p );
+       paged_tree_flesh_records( p );
+}
+
+function paged_tree_flesh_record(p,treeitem) {
+       treeitem.setAttribute('retrieved','true');
+       if (p.w._flesh_row_function) {
+               p.w._flesh_row_function( treeitem );
+       }
+}
+
+function paged_tree_flesh_records(p) {
+       for (var i = 0; i < p.w.tc.childNodes.length; i++) {
+               var treeitem = p.w.tc.childNodes[i];
+               if ( (treeitem.hidden == false) && (treeitem.getAttribute('retrieved')=='false') ) {
+                       paged_tree_flesh_record(p,treeitem);
+               }
+       }
+}
+
+function paged_tree_update_nav(p) {
+       if (p.w.results_label)
+               p.w.results_label.setAttribute('value', p.w.tc.childNodes.length );
+
+       var min = p.w.current_idx + 1;
+       var max = p.w.current_idx + p.w.display_count;
+       if (max > p.w.tc.childNodes.length)
+               max = p.w.tc.childNodes.length;
+       if (p.w.range_label)
+               p.w.range_label.setAttribute('value', min + ' - ' + max );
+
+       if (p.w.next_button) {
+               if (max < p.w.tc.childNodes.length)
+                       p.w.next_button.disabled = false;
+               else
+                       p.w.next_button.disabled = true;
+       }
+
+       if (p.w.prev_button) {
+               if (min == 1)
+                       p.w.prev_button.disabled = true;
+               else
+                       p.w.prev_button.disabled = false;
+       }
+}
+
+function paged_tree_update_visibility(p) {
+       for (var i = 0; i < p.w.tc.childNodes.length; i++) {
+               var treeitem = p.w.tc.childNodes[i];
+               if ( (i >= p.w.current_idx) && (i < (p.w.current_idx+p.w.display_count)) )
+                       treeitem.hidden = false;
+               else
+                       treeitem.hidden = true;
+       }
+}
+
+function paged_tree_nav_next(p) {
+       var proposed_idx = p.w.current_idx + p.w.display_count;
+       if (proposed_idx >= p.w.tc.childNodes.length)
+               proposed_idx = p.w.tc.childNodes.length - 1;
+       p.w.current_idx = proposed_idx;
+       paged_tree_update_visibility(p);
+       paged_tree_update_nav(p);
+       paged_tree_flesh_records(p);
+}
+
+function paged_tree_nav_prev(p) {
+       var proposed_idx = p.w.current_idx - p.w.display_count;
+       if (proposed_idx < 0)
+               proposed_idx = 0;
+       p.w.current_idx = proposed_idx;
+       paged_tree_update_visibility(p);
+       paged_tree_update_nav(p);
+       paged_tree_flesh_records(p);
+}
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.xul b/Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.xul
new file mode 100644 (file)
index 0000000..9281229
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!-- Clamlication: Evergreen Staff Client -->
+
+<!-- Localization -->
+<!DOCTYPE page SYSTEM "chrome://evergreen/locale/paged_tree.dtd">
+
+<page id="paged_tree_win"
+       orient="vertical" style="overflow: auto" width="800" height="500"
+       sizemode="maximized" persist="width height" 
+       onload="
+               params.paged_tree = 'PagedTree_tree'; 
+               params.nav_range = 'PagedTree_label_range'; 
+               params.nav_results = 'PagedTree_label_results'; 
+               params.nav_next = 'PagedTree_button_next';
+               params.nav_prev = 'PagedTree_button_prev';
+               params.w = window; 
+               params.app = 'PagedTree'; 
+               mw.OpenILS_init(params);"
+       onunload="mw.OpenILS_exit(params);"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Stylesheets -->
+       <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+       <?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+       <?xml-stylesheet href="chrome://evergreen/skin/paged_tree.css" type="text/css"?>
+       
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/main/paged_tree_overlay.xul"?>
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="PagedTree_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="PagedTree_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <box id="PagedTree_main" />
+
+</page>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/main/paged_tree_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/main/paged_tree_overlay.xul
new file mode 100644 (file)
index 0000000..7f99157
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/paged_tree.dtd">
+<overlay id="paged_tree_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<commandset id="PagedTree_cmds">
+
+       <command id="cmd_prev" />
+
+       <command id="cmd_next" />
+
+       <command id="cmd_broken" oncommand="
+               alert('Not Yet Implemented'); "/>
+
+</commandset>
+
+<!-- main widget for paged_tree -->
+<box id="PagedTree_main" flex="1" orient="vertical">
+       <hbox id="PagedTree_nav">
+               <label value="&displaying.results;"/>
+               <label id="PagedTree_label_range" value="??? - ???" />
+               <label value="&displaying.of;"/>
+               <label id="PagedTree_label_results" value="???"/>
+               <spacer flex="1"/>
+               <button id="PagedTree_button_prev" label="&previous.range;" accesskey="&previous.range.key;" command="cmd_prev" disabled="true"/>
+               <button id="PagedTree_button_next" label="&next.range;" accesskey="&next.range.key;" command="cmd_next" disabled="true"/>
+       </hbox>
+       <tree id="PagedTree_tree" flex="1">
+               <treecols id="PagedTree_columns"/>
+               <treechildren id="PagedTree_children"/>
+       </tree>
+</box>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="PagedTree_keys">
+</keyset>
+
+</overlay>