提交 8a0c89f0 编写于 作者: J Joao Moreno

grid dnd

上级 da511396
...@@ -7,9 +7,10 @@ ...@@ -7,9 +7,10 @@
import 'vs/css!./gridview'; import 'vs/css!./gridview';
import { Orientation } from 'vs/base/browser/ui/sash/sash'; import { Orientation } from 'vs/base/browser/ui/sash/sash';
import { IDisposable } from 'vs/base/common/lifecycle'; import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { tail2 as tail, equals } from 'vs/base/common/arrays'; import { tail2 as tail, equals } from 'vs/base/common/arrays';
import { orthogonal, IView, GridView, GridBranchNode } from './gridview'; import { orthogonal, IView, GridView, GridBranchNode } from './gridview';
import { domEvent } from 'vs/base/browser/event';
export { Orientation } from './gridview'; export { Orientation } from './gridview';
...@@ -72,18 +73,51 @@ function directionOrientation(direction: Direction): Orientation { ...@@ -72,18 +73,51 @@ function directionOrientation(direction: Direction): Orientation {
return direction === Direction.Up || direction === Direction.Down ? Orientation.VERTICAL : Orientation.HORIZONTAL; return direction === Direction.Up || direction === Direction.Down ? Orientation.VERTICAL : Orientation.HORIZONTAL;
} }
export interface IGridDnd {
}
export interface IGridOptions {
dnd?: IGridDnd;
}
class DndController implements IDisposable {
private disposables: IDisposable[] = [];
constructor(container: HTMLElement, gridview: GridView) {
domEvent(container, 'dragover')(this.onDragOver, this, this.disposables);
}
private onDragOver(ev: DragEvent) {
// find target element
console.log('DRAG OVER');
}
dispose(): void {
this.disposables = dispose(this.disposables);
}
}
export class Grid<T extends IView> implements IDisposable { export class Grid<T extends IView> implements IDisposable {
private gridview: GridView; private gridview: GridView;
private views = new Map<T, HTMLElement>(); private views = new Map<T, HTMLElement>();
private disposables: IDisposable[] = [];
get orientation(): Orientation { return this.gridview.orientation; } get orientation(): Orientation { return this.gridview.orientation; }
set orientation(orientation: Orientation) { this.gridview.orientation = orientation; } set orientation(orientation: Orientation) { this.gridview.orientation = orientation; }
constructor(container: HTMLElement, view: T) { constructor(container: HTMLElement, view: T, options: IGridOptions = {}) {
this.gridview = new GridView(container); this.gridview = new GridView(container);
this.disposables.push(this.gridview);
this.views.set(view, view.element); this.views.set(view, view.element);
this.gridview.addView(view, 0, [0]); this.gridview.addView(view, 0, [0]);
if (options.dnd) {
this.disposables.push(new DndController(container, this.gridview));
}
} }
layout(width: number, height: number): void { layout(width: number, height: number): void {
...@@ -180,6 +214,6 @@ export class Grid<T extends IView> implements IDisposable { ...@@ -180,6 +214,6 @@ export class Grid<T extends IView> implements IDisposable {
} }
dispose(): void { dispose(): void {
this.gridview.dispose(); this.disposables = dispose(this.disposables);
} }
} }
...@@ -38,37 +38,37 @@ ...@@ -38,37 +38,37 @@
element.className = 'box'; element.className = 'box';
element.style.backgroundColor = `hsl(${Math.round(Math.random() * 360)}, 72%, 72%)`; element.style.backgroundColor = `hsl(${Math.round(Math.random() * 360)}, 72%, 72%)`;
element.addEventListener('dragover', ev => { // element.addEventListener('dragover', ev => {
ev.preventDefault(); // ev.preventDefault();
if (draggingOver === view) { // if (draggingOver === view) {
return; // return;
} // }
if (draggingOver) { // if (draggingOver) {
draggingOver.element.style.opacity = 1; // draggingOver.element.style.opacity = 1;
} // }
if (dragging !== view) { // if (dragging !== view) {
element.style.opacity = 0.5; // element.style.opacity = 0.5;
} // }
draggingOver = view; // draggingOver = view;
}); // });
element.addEventListener('drop', ev => { // element.addEventListener('drop', ev => {
ev.preventDefault(); // ev.preventDefault();
if (draggingOver) { // if (draggingOver) {
draggingOver.element.style.opacity = 1; // draggingOver.element.style.opacity = 1;
} // }
if (!dragging) { // if (!dragging) {
return; // return;
} // }
grid.swapViews(dragging, view); // grid.swapViews(dragging, view);
}); // });
let label = document.createElement('div'); let label = document.createElement('div');
label.className = 'box-label'; label.className = 'box-label';
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
// document.body.appendChild(box); // document.body.appendChild(box);
const view1 = createView(); const view1 = createView();
const grid = new Grid(document.body, view1); const grid = new Grid(document.body, view1, { dnd: {} });
const layout = () => grid.layout(document.body.clientWidth, document.body.clientHeight); const layout = () => grid.layout(document.body.clientWidth, document.body.clientHeight);
window.onresize = () => { window.onresize = () => {
layout(); layout();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册