2011-04-15 18 views
7

Estoy usando ExtJS y ejecuto una aplicación de escritorio. Una cosa que me está molestando es cuando se abre una nueva ventana (vinculada dentro de la región central de una ventana gráfica) siempre se abre en la parte superior izquierda de la ventana gráfica.ExtJS abriendo ventanas nuevas como mosaico

Si se abren varias ventanas, los quiero a baldosas, así que apenas no se sientan sábana de unos a otros ...

alguna idea?

(Mi idea inicial fue la de ciclo de throught de las ventanas de la WindowMgr y comprobar si existe actualmente una a 0,0. Si es así, comprobar 100,100 etc hasta que uno es libre.)

Espero que esto tiene sentido!

Respuesta

5

que hacer prácticamente todo lo que ya se describe:

Ext.Window.prototype._autoTile = function() { 
    var x = 10, 
     y = 10; 

    Ext.WindowMgr.each(function(win) { 
     if (win === this) return; 

     var pos = win.getPosition(); 

     if (pos[0] > (x - 15) 
      && pos[0] < (x + 15) 
      && pos[1] > (y - 15) 
      && pos[1] < (y + 15) 
     ) { 
      x += 15; 
      y += 15; 
     } 
    }, this); 

    this.setPagePosition(x, y); 
}; 

Ext.Window.prototype.initComponent = 
    Ext.Window.prototype.initComponent.createSequence(function() { 
     if (this.autoTile) { 
      this.on('show', this._autoTile, this, {single: true}); 
     } 
    }); 

var win = new Ext.Window({ 
    width: 300, 
    height: 300, 
    autoTile: true 
}); 

win.show(); 

Esta aplicación fue adecuado para mis necesidades, pero podía soportar estar hecho más complejo con cosas tales como controles para comprobar la ventana reposicionado es salir de la límite de ventana gráfica

+0

Gracias por la respuesta! Me gusta cómo se agrega como un atributo para el componente, ¡excelente trabajo! – neolaser

+0

Me encanta el enfoque, pero ¿esto está funcionando en ExtJS4? Recibo un error de "createSequence no reconocido". – JayCrossler

+0

Esto fue escrito para ExtJS 3. Uno de los muchos cambios de v4 fue la eliminación de métodos agregados a objetos globales, como el método createSequence agregado a Function. Eso se puede reemplazar llamando a Ext.Function.createSequence, pero no hay garantía de que el resto funcione. – owlness

1

No hay nada incorporado para hacer esto, así que creo que el enfoque que describió anteriormente es bastante razonable. También tenga en cuenta que puede necesitar lidiar con ventanas ocultas/minimizadas/maximizadas dependiendo de lo que permita su aplicación.

1

Como se ha indicado, no hay una funcionalidad incorporada que lo soporte.

Hay un old discussion thread on the ExtJS forums acerca de esto, es para la versión 2.x sin embargo, pero tal vez pueda recoger algunas ideas para su implementación allí.

Cuestiones relacionadas