diff --git a/qgrid/grid.py b/qgrid/grid.py index 7e505c30..b815eb1e 100644 --- a/qgrid/grid.py +++ b/qgrid/grid.py @@ -12,7 +12,7 @@ from IPython.html import widgets from IPython.display import display, Javascript try: - from traitlets import Unicode, Instance, Bool, Integer, Dict, List + from traitlets import Unicode, Instance, Bool, Integer, Dict, List, observe except ImportError: from IPython.utils.traitlets import ( Unicode, Instance, Bool, Integer, Dict, List @@ -233,6 +233,7 @@ class QGridWidget(widgets.DOMWidget): _multi_index = Bool(False) _selected_rows = List() + filtered = List(sync=True) df = Instance(pd.DataFrame) precision = Integer(6) grid_options = Dict(sync=True) @@ -271,6 +272,8 @@ def _update_table(self): if not df.index.name: df.index.name = 'Index' + self.filtered = df.index.tolist() + if type(df.index) == pd.core.index.MultiIndex: df.reset_index(inplace=True) self._multi_index = True @@ -385,3 +388,10 @@ def export(self, value=None): display_html(raw_html, raw=True) display_javascript(raw_js, raw=True) + + @observe('filtered') + def filtered_changed(self, change): + self.filtered = [ ] + for index in change['new']: + self.filtered.append(int(index)) + diff --git a/qgrid/qgridjs/qgrid.widget.js b/qgrid/qgridjs/qgrid.widget.js index 5ad64356..09324f4d 100644 --- a/qgrid/qgridjs/qgrid.widget.js +++ b/qgrid/qgridjs/qgrid.widget.js @@ -122,6 +122,18 @@ define([path], function(widget) { grid = new this.dgrid.QGrid(this.tableDiv, df, column_types); grid.initialize_slick_grid(options); + grid.data_view.onRowCountChanged.subscribe(function(e, args) { + var items = grid.data_view.getItems(); + var indexes = [ ]; + for (var i in items) { + if (items[i].include) { + indexes.push(items[i].Index); + } + } + that.model.set('filtered', indexes); + that.model.save_changes(); + }); + // set up editing var sgrid = grid.slick_grid; var columns = sgrid.getColumns(); diff --git a/requirements.txt b/requirements.txt index 1cd2f6aa..53acffb9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ notebook>=4.0.0 pandas>=0.16.2 ipywidgets>=4.0.0 +jupyter-pip>=0.3.0 diff --git a/setup.py b/setup.py index 23b4fbfe..762a1185 100644 --- a/setup.py +++ b/setup.py @@ -18,6 +18,12 @@ join, dirname, abspath ) +#jchuahtacc +try: + from jupyterpip import cmdclass +except: + import pip, importlib + pip.main(['install', 'jupyter-pip']); cmdclass = importlib.import_module('jupyterpip').cmdclass def read_requirements(basename): reqs_file = join(dirname(abspath(__file__)), basename) @@ -50,5 +56,6 @@ def read_requirements(basename): 'Topic :: Scientific/Engineering :: Information Analysis', ], install_requires=reqs, - url="https://github.com/quantopian/qgrid" + url="https://github.com/quantopian/qgrid", + cmdclass=cmdclass('qgrid/qgridjs'), )