From fd81565c5527b99dd212b03c2f329a00e146f03b Mon Sep 17 00:00:00 2001 From: Rory MacQueen Date: Thu, 15 Aug 2013 15:41:36 -0700 Subject: Reorganized import paths Moved all widgets into widgets directory. Changed Endless Wikipedia file to expose wikipedia web view [endlessm/eos-sdk#260] --- wikipedia/widgets/category_layout_manager.js | 65 ++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 wikipedia/widgets/category_layout_manager.js (limited to 'wikipedia/widgets/category_layout_manager.js') diff --git a/wikipedia/widgets/category_layout_manager.js b/wikipedia/widgets/category_layout_manager.js new file mode 100644 index 0000000..a7be3bb --- /dev/null +++ b/wikipedia/widgets/category_layout_manager.js @@ -0,0 +1,65 @@ +const Gtk = imports.gi.Gtk; +const Lang = imports.lang; + +const CategoryLayoutManager = new Lang.Class({ + Name: 'CategoryLayoutManager', + Extends: Gtk.Grid, + + _init: function(props) { + props = props || {}; + props.column_homogeneous = true; + props.row_homogeneous = true; + this.parent(props); + + this._childWidgets = []; + }, + + // Distribute children in two columns, except for the last one if an odd + // number; that should span two columns + _redistributeChildren: function() { + let numChildren = this._childWidgets.length; + let oddNumber = numChildren % 2 == 1; + this._childWidgets.forEach(function(child, index) { + let column = index % 2; + let row = Math.floor(index / 2); + + if(child.get_parent() === this) + Gtk.Container.prototype.remove.call(this, + this._childWidgets[index]); + + if(oddNumber && index == numChildren - 1) + this.attach(child, 0, row, 2, 1); + else + this.attach(child, column, row, 1, 1); + }, this); + }, + + add: function(child) { + this._childWidgets.push(child); + this._redistributeChildren(); + }, + + remove: function(child) { + let index = this._childWidgets.indexOf(child); + if(index == -1) { + printerr('Widget', System.addressOf(child), + 'is not contained in CategoryLayoutManager'); + return; + } + this._childWidgets.splice(index, 1); // remove + this._redistributeChildren(); + } +}); + +// Gtk.init(null); +// let w = new Gtk.Window(); +// let g = new CategoryLayoutManager(); +// let count = 7; +// for(let i = 0; i < count; i++) { +// let widget = new Gtk.Button({label: 'Widget ' + i}); +// g.add(widget); +// } +// w.add(g); +// w.connect('destroy', Gtk.main_quit); +// w.show_all(); +// Gtk.main(); -- cgit v1.2.3