|
@@ -40,6 +40,9 @@ |
40 |
40 |
|
public void injectBetween( U pLowerBound, U pUpperBound ); |
41 |
41 |
|
} |
42 |
42 |
|
|
|
43 |
+ |
private static final int EXPANSION_WIDTH = 90; |
|
44 |
+ |
private static final int DOT_DOT_DOT_WIDTH = 30; |
|
45 |
+ |
|
43 |
46 |
|
private String mVerticalSpacer; |
44 |
47 |
|
private HeightManager mHeightManager; |
45 |
48 |
|
private int mPanelHeight = -1; |
|
@@ -282,9 +285,7 @@ |
282 |
285 |
|
|
283 |
286 |
|
private static class SetCtrl |
284 |
287 |
|
{ |
285 |
|
- |
private int mLeadingEmpties = 0; |
286 |
288 |
|
private List<Widget> mViewEntryPanels = new ArrayList<Widget>(); |
287 |
|
- |
private int mTrailingEmpties = 0; |
288 |
289 |
|
|
289 |
290 |
|
public List<Widget> getViewEntryPanels() |
290 |
291 |
|
{ |
|
@@ -301,6 +302,37 @@ |
301 |
302 |
|
return mViewEntryPanels.size(); |
302 |
303 |
|
} |
303 |
304 |
|
|
|
305 |
+ |
public int getTopOffset() |
|
306 |
+ |
{ |
|
307 |
+ |
return 0; |
|
308 |
+ |
} |
|
309 |
+ |
|
|
310 |
+ |
public int getBottomOffset() |
|
311 |
+ |
{ |
|
312 |
+ |
return size() - 1; |
|
313 |
+ |
} |
|
314 |
+ |
} |
|
315 |
+ |
|
|
316 |
+ |
private static class NavigateSetCtrl extends SetCtrl |
|
317 |
+ |
{ |
|
318 |
+ |
private int mSelectedPanel = -1; |
|
319 |
+ |
|
|
320 |
+ |
public int getSelectedPanel() |
|
321 |
+ |
{ |
|
322 |
+ |
return mSelectedPanel; |
|
323 |
+ |
} |
|
324 |
+ |
|
|
325 |
+ |
public void setSelectedPanel( int pSelectedPanel ) |
|
326 |
+ |
{ |
|
327 |
+ |
mSelectedPanel = pSelectedPanel; |
|
328 |
+ |
} |
|
329 |
+ |
} |
|
330 |
+ |
|
|
331 |
+ |
private static class CurrentSetCtrl extends SetCtrl |
|
332 |
+ |
{ |
|
333 |
+ |
private int mLeadingEmpties = 0; |
|
334 |
+ |
private int mTrailingEmpties = 0; |
|
335 |
+ |
|
304 |
336 |
|
public boolean anyEmpties() |
305 |
337 |
|
{ |
306 |
338 |
|
return (mLeadingEmpties != 0) || (mTrailingEmpties != 0); |
|
@@ -316,24 +348,36 @@ |
316 |
348 |
|
return mTrailingEmpties; |
317 |
349 |
|
} |
318 |
350 |
|
|
319 |
|
- |
public void adjustHeightTo( int pPreviousSetsSelectedPanel, int pNewHeightInPanels ) |
|
351 |
+ |
@Override |
|
352 |
+ |
public int getTopOffset() |
320 |
353 |
|
{ |
321 |
|
- |
// todo... |
|
354 |
+ |
return mLeadingEmpties; |
322 |
355 |
|
} |
323 |
|
- |
} |
324 |
|
- |
|
325 |
|
- |
private static class NavigateSetCtrl extends SetCtrl |
326 |
|
- |
{ |
327 |
|
- |
private int mSelectedPanel = -1; |
328 |
356 |
|
|
329 |
|
- |
public int getSelectedPanel() |
|
357 |
+ |
@Override |
|
358 |
+ |
public int getBottomOffset() |
330 |
359 |
|
{ |
331 |
|
- |
return mSelectedPanel; |
|
360 |
+ |
return mLeadingEmpties + super.getBottomOffset(); |
332 |
361 |
|
} |
333 |
362 |
|
|
334 |
|
- |
public void setSelectedPanel( int pSelectedPanel ) |
|
363 |
+ |
public void adjustHeightTo( int pPreviousSetsSelectedPanel, int pNewHeightInPanels ) |
335 |
364 |
|
{ |
336 |
|
- |
mSelectedPanel = pSelectedPanel; |
|
365 |
+ |
if ( pNewHeightInPanels != size() ) |
|
366 |
+ |
{ |
|
367 |
+ |
for ( int zToAdd = pNewHeightInPanels - size(); zToAdd > 1; zToAdd -= 2 ) |
|
368 |
+ |
{ |
|
369 |
+ |
mLeadingEmpties++; |
|
370 |
+ |
mTrailingEmpties++; |
|
371 |
+ |
} |
|
372 |
+ |
for ( int zSelectedTopOffset = pPreviousSetsSelectedPanel - 1; zSelectedTopOffset < getTopOffset(); mTrailingEmpties++ ) |
|
373 |
+ |
{ |
|
374 |
+ |
mLeadingEmpties--; // Move Up |
|
375 |
+ |
} |
|
376 |
+ |
for ( int zSelectedBottom = pPreviousSetsSelectedPanel + 1; zSelectedBottom > getBottomOffset(); mTrailingEmpties-- ) |
|
377 |
+ |
{ |
|
378 |
+ |
mLeadingEmpties++; // Move Down |
|
379 |
+ |
} |
|
380 |
+ |
} |
337 |
381 |
|
} |
338 |
382 |
|
} |
339 |
383 |
|
|
|
@@ -343,22 +387,12 @@ |
343 |
387 |
|
|
344 |
388 |
|
NavigateSetCtrl zHomeSetCtrl = createNavigateSet( pDrillDownSet.getHomeSet() ); |
345 |
389 |
|
NavigateSetCtrl zBackSetCtrl = createNavigateSet( pDrillDownSet.getPreviousSet() ); |
346 |
|
- |
SetCtrl zCurrentSetCtrl = createCurrentSet( pDrillDownSet.getCurrentSet() ); |
|
390 |
+ |
CurrentSetCtrl zCurrentSetCtrl = createCurrentSet( pDrillDownSet.getCurrentSet() ); |
347 |
391 |
|
|
348 |
392 |
|
zPanel.add( new Spacer( 10 ) ); |
349 |
393 |
|
if ( zHomeSetCtrl != null ) |
350 |
394 |
|
{ |
351 |
395 |
|
int zMaxPanels = Math.max( zCurrentSetCtrl.size(), zHomeSetCtrl.size() ); |
352 |
|
- |
if ( zBackSetCtrl == null ) |
353 |
|
- |
{ |
354 |
|
- |
zHomeSetCtrl.adjustHeightTo( -1, zMaxPanels ); |
355 |
|
- |
} |
356 |
|
- |
else |
357 |
|
- |
{ |
358 |
|
- |
zMaxPanels = Math.max( zMaxPanels, zBackSetCtrl.size() ); |
359 |
|
- |
zHomeSetCtrl.adjustHeightTo( -1, zMaxPanels ); |
360 |
|
- |
zBackSetCtrl.adjustHeightTo( zHomeSetCtrl.getSelectedPanel(), zMaxPanels ); |
361 |
|
- |
} |
362 |
396 |
|
NavigateSetCtrl zLastSetCtrl = zHomeSetCtrl; |
363 |
397 |
|
zPanel.add( createNavigatePanel( zLastSetCtrl, new ClickHandler() |
364 |
398 |
|
{ |
|
@@ -370,7 +404,8 @@ |
370 |
404 |
|
} ) ); |
371 |
405 |
|
if ( zBackSetCtrl != null ) |
372 |
406 |
|
{ |
373 |
|
- |
zPanel.add( addExpansionPanel( zMaxPanels, zLastSetCtrl.getSelectedPanel(), zBackSetCtrl, pDrillDownSet.isSomethingBetweenHomeAndPreviousSets() ) ); |
|
407 |
+ |
zMaxPanels = Math.max( zMaxPanels, zBackSetCtrl.size() ); |
|
408 |
+ |
zPanel.add( createExpansionPanel( zMaxPanels, zLastSetCtrl.getSelectedPanel(), zBackSetCtrl, pDrillDownSet.isSomethingBetweenHomeAndPreviousSets() ) ); |
374 |
409 |
|
zPanel.add( createNavigatePanel( zLastSetCtrl = zBackSetCtrl, new ClickHandler() |
375 |
410 |
|
{ |
376 |
411 |
|
@Override |
|
@@ -381,7 +416,7 @@ |
381 |
416 |
|
} ) ); |
382 |
417 |
|
} |
383 |
418 |
|
zCurrentSetCtrl.adjustHeightTo( zLastSetCtrl.getSelectedPanel(), zMaxPanels ); |
384 |
|
- |
zPanel.add( addExpansionPanel( zMaxPanels, zLastSetCtrl.getSelectedPanel(), zCurrentSetCtrl, false ) ); |
|
419 |
+ |
zPanel.add( createExpansionPanel( zMaxPanels, zLastSetCtrl.getSelectedPanel(), zCurrentSetCtrl, false ) ); |
385 |
420 |
|
} |
386 |
421 |
|
zPanel.add( createCurrentPanel( zCurrentSetCtrl ) ); |
387 |
422 |
|
zPanel.add( new Spacer( 10 ) ); |
|
@@ -408,9 +443,9 @@ |
408 |
443 |
|
return zCtrl; |
409 |
444 |
|
} |
410 |
445 |
|
|
411 |
|
- |
private SetCtrl createCurrentSet( ViewSet pCurrentSet ) |
|
446 |
+ |
private CurrentSetCtrl createCurrentSet( ViewSet pCurrentSet ) |
412 |
447 |
|
{ |
413 |
|
- |
SetCtrl zCtrl = new SetCtrl(); |
|
448 |
+ |
CurrentSetCtrl zCtrl = new CurrentSetCtrl(); |
414 |
449 |
|
ViewEntry[] zEntries = pCurrentSet.getEntries(); |
415 |
450 |
|
for ( ViewEntry zEntry : zEntries ) |
416 |
451 |
|
{ |
|
@@ -481,41 +516,119 @@ |
481 |
516 |
|
|
482 |
517 |
|
private Widget createNavigatePanel( NavigateSetCtrl pSetCtrl, ClickHandler pClickHandler ) |
483 |
518 |
|
{ |
484 |
|
- |
if ( !pSetCtrl.anyEmpties() ) |
|
519 |
+ |
BorderedVerticalPanel zPanel = new BorderedVerticalPanel( mVerticalSpacer, "NavigateSet" ); |
|
520 |
+ |
for ( Widget zWidget : pSetCtrl.getViewEntryPanels() ) |
|
521 |
+ |
{ |
|
522 |
+ |
zPanel.add( zWidget ); |
|
523 |
+ |
} |
|
524 |
+ |
SizeableFocusPanel zFocusPanel = new SizeableFocusPanel( zPanel ); |
|
525 |
+ |
zFocusPanel.addClickHandler( pClickHandler ); |
|
526 |
+ |
return zFocusPanel; |
|
527 |
+ |
} |
|
528 |
+ |
|
|
529 |
+ |
private Widget createExpansionPanel( int pMaxPanels, int pPreviousSelectedPanel, SetCtrl pSetCtrl, boolean pAddDotDotDot ) |
|
530 |
+ |
{ |
|
531 |
+ |
int zFromTopOffset = pPreviousSelectedPanel - 1; |
|
532 |
+ |
int zFromBottomOffset = pPreviousSelectedPanel + 1; |
|
533 |
+ |
int zToTopOffset = pSetCtrl.getTopOffset(); |
|
534 |
+ |
int zToBottomOffset = pSetCtrl.getBottomOffset(); |
|
535 |
+ |
|
|
536 |
+ |
if ( !pAddDotDotDot ) |
485 |
537 |
|
{ |
486 |
|
- |
return createNavigatePanelReal( pSetCtrl, pClickHandler ); |
|
538 |
+ |
return createExpansionPanel( EXPANSION_WIDTH, pMaxPanels, zFromTopOffset, zFromBottomOffset, zToTopOffset, zToBottomOffset ); |
487 |
539 |
|
} |
|
540 |
+ |
int zMidTopOffset = (zFromTopOffset == zToTopOffset) ? zFromTopOffset : (zFromTopOffset + zToTopOffset) / 2; |
|
541 |
+ |
int zMidBottomOffset = (zFromBottomOffset == zToBottomOffset) ? zFromBottomOffset : (zFromBottomOffset + zToBottomOffset + 1) / 2; |
|
542 |
+ |
|
|
543 |
+ |
int z1stExpansionWidth = (EXPANSION_WIDTH - DOT_DOT_DOT_WIDTH) / 2; |
|
544 |
+ |
int z2ndExpansionWidth = EXPANSION_WIDTH - (z1stExpansionWidth + DOT_DOT_DOT_WIDTH); |
|
545 |
+ |
|
|
546 |
+ |
HorizontalPanel zPanel = new HorizontalPanel(); |
|
547 |
+ |
zPanel.add( createExpansionPanel( z1stExpansionWidth, pMaxPanels, zFromTopOffset, zFromBottomOffset, zMidTopOffset, zMidBottomOffset ) ); |
|
548 |
+ |
zPanel.add( createDotDotDotExpansionPanel( DOT_DOT_DOT_WIDTH, pMaxPanels, zMidTopOffset, zMidBottomOffset ) ); |
|
549 |
+ |
zPanel.add( createExpansionPanel( z2ndExpansionWidth, pMaxPanels, zMidTopOffset, zMidBottomOffset, zToTopOffset, zToBottomOffset ) ); |
|
550 |
+ |
|
|
551 |
+ |
return zPanel; |
|
552 |
+ |
} |
|
553 |
+ |
|
|
554 |
+ |
private Widget createDotDotDotExpansionPanel( int pWidth, int pMaxPanels, int pTopOffset, int pBottomOffset ) |
|
555 |
+ |
{ |
488 |
556 |
|
VerticalPanel zPanel = new VerticalPanel(); |
489 |
|
- |
if ( pSetCtrl.getLeadingEmpties() != 0 ) |
|
557 |
+ |
|
|
558 |
+ |
int zTopFiller = 1; |
|
559 |
+ |
if ( pTopOffset != 0 ) |
490 |
560 |
|
{ |
491 |
|
- |
zPanel.add( createHiddenPanels( pSetCtrl.getLeadingEmpties() ) ); |
|
561 |
+ |
zTopFiller += pTopOffset * mPanelHeight; |
|
562 |
+ |
pMaxPanels -= pTopOffset; |
492 |
563 |
|
} |
493 |
|
- |
zPanel.add( createNavigatePanelReal( pSetCtrl, pClickHandler ) ); |
494 |
|
- |
if ( pSetCtrl.getTrailingEmpties() != 0 ) |
|
564 |
+ |
zPanel.add( new Spacer().width( pWidth ).height( zTopFiller ) ); |
|
565 |
+ |
|
|
566 |
+ |
int zUpperPanels = ((pBottomOffset + 1) - pTopOffset) / 2; |
|
567 |
+ |
if ( zUpperPanels != 0 ) |
495 |
568 |
|
{ |
496 |
|
- |
zPanel.add( createHiddenPanels( pSetCtrl.getTrailingEmpties() ) ); |
|
569 |
+ |
zPanel.add( image( "GreenPixel" ).size( pWidth, zUpperPanels * mPanelHeight ) ); |
|
570 |
+ |
pMaxPanels -= zUpperPanels; |
|
571 |
+ |
} |
|
572 |
+ |
|
|
573 |
+ |
// Straight Across - Always 1 Panels! |
|
574 |
+ |
zPanel.add( image( "GreenDotDotDot" ).size( pWidth, mPanelHeight ) ); |
|
575 |
+ |
pMaxPanels -= 1; |
|
576 |
+ |
|
|
577 |
+ |
int zLowerPanels = pBottomOffset - (pTopOffset + zUpperPanels); |
|
578 |
+ |
if ( zLowerPanels != 0 ) |
|
579 |
+ |
{ |
|
580 |
+ |
zPanel.add( image( "GreenPixel" ).size( pWidth, zLowerPanels * mPanelHeight ) ); |
|
581 |
+ |
pMaxPanels -= zLowerPanels; |
|
582 |
+ |
} |
|
583 |
+ |
|
|
584 |
+ |
if ( pMaxPanels != 0 ) // Filler Panels |
|
585 |
+ |
{ |
|
586 |
+ |
zPanel.add( new Spacer().width( pWidth ).height( pMaxPanels * mPanelHeight ) ); |
497 |
587 |
|
} |
498 |
588 |
|
return zPanel; |
499 |
589 |
|
} |
500 |
590 |
|
|
501 |
|
- |
private Widget createNavigatePanelReal( NavigateSetCtrl pSetCtrl, ClickHandler pClickHandler ) |
|
591 |
+ |
/** |
|
592 |
+ |
* Notes: pToTopOffset <= pFromTopOffset && pFromBottomOffset <= pToBottomOffset |
|
593 |
+ |
*/ |
|
594 |
+ |
private Widget createExpansionPanel( int pWidth, int pMaxPanels, int pFromTopOffset, int pFromBottomOffset, int pToTopOffset, int pToBottomOffset ) |
502 |
595 |
|
{ |
503 |
|
- |
BorderedVerticalPanel zPanel = new BorderedVerticalPanel( mVerticalSpacer, "NavigateSet" ); |
504 |
|
- |
for ( Widget zWidget : pSetCtrl.getViewEntryPanels() ) |
|
596 |
+ |
VerticalPanel zPanel = new VerticalPanel(); |
|
597 |
+ |
|
|
598 |
+ |
int zTopFiller = 1; |
|
599 |
+ |
if ( pToTopOffset != 0 ) |
505 |
600 |
|
{ |
506 |
|
- |
zPanel.add( zWidget ); |
|
601 |
+ |
zTopFiller += pToTopOffset * mPanelHeight; |
|
602 |
+ |
pMaxPanels -= pToTopOffset; |
507 |
603 |
|
} |
508 |
|
- |
SizeableFocusPanel zFocusPanel = new SizeableFocusPanel( zPanel ); |
509 |
|
- |
zFocusPanel.addClickHandler( pClickHandler ); |
510 |
|
- |
return zFocusPanel; |
511 |
|
- |
} |
|
604 |
+ |
zPanel.add( new Spacer().width( pWidth ).height( zTopFiller ) ); |
512 |
605 |
|
|
513 |
|
- |
private Widget addExpansionPanel( int pMaxPanels, int pPreviousSelectedPanel, SetCtrl pSetCtrl, boolean pAddDotDotDot ) |
514 |
|
- |
{ |
515 |
|
- |
return new Label( "Green Thing\n" + pMaxPanels + " Tall\nFrom: " + pPreviousSelectedPanel + (pAddDotDotDot ? "\n..." : "") ); // todo |
|
606 |
+ |
int zRisingPanels = pFromTopOffset - pToTopOffset; |
|
607 |
+ |
if ( zRisingPanels != 0 ) |
|
608 |
+ |
{ |
|
609 |
+ |
zPanel.add( image( "RisingGreen" ).size( pWidth, zRisingPanels * mPanelHeight ) ); |
|
610 |
+ |
pMaxPanels -= zRisingPanels; |
|
611 |
+ |
} |
|
612 |
+ |
|
|
613 |
+ |
int zStraightAcrossPanels = Math.min( pFromBottomOffset, pToBottomOffset ) - Math.max( pFromTopOffset, pToTopOffset ) + 1; // Should Always be >= 3 Panels! |
|
614 |
+ |
zPanel.add( image( "GreenPixel" ).size( pWidth, zStraightAcrossPanels * mPanelHeight ) ); |
|
615 |
+ |
pMaxPanels -= zStraightAcrossPanels; |
|
616 |
+ |
|
|
617 |
+ |
int zDecendingPanels = pToBottomOffset - pFromBottomOffset; |
|
618 |
+ |
if ( zDecendingPanels != 0 ) |
|
619 |
+ |
{ |
|
620 |
+ |
zPanel.add( image( "DecendingGreen" ).size( pWidth, zDecendingPanels * mPanelHeight ) ); |
|
621 |
+ |
pMaxPanels -= zDecendingPanels; |
|
622 |
+ |
} |
|
623 |
+ |
|
|
624 |
+ |
if ( pMaxPanels != 0 ) // Bottom Filler |
|
625 |
+ |
{ |
|
626 |
+ |
zPanel.add( new Spacer().width( pWidth ).height( pMaxPanels * mPanelHeight ) ); |
|
627 |
+ |
} |
|
628 |
+ |
return zPanel; |
516 |
629 |
|
} |
517 |
630 |
|
|
518 |
|
- |
private Widget createCurrentPanel( SetCtrl pSetCtrl ) |
|
631 |
+ |
private Widget createCurrentPanel( CurrentSetCtrl pSetCtrl ) |
519 |
632 |
|
{ |
520 |
633 |
|
if ( !pSetCtrl.anyEmpties() ) |
521 |
634 |
|
{ |
|
@@ -609,4 +722,9 @@ |
609 |
722 |
|
relayoutFromHereDown(); |
610 |
723 |
|
} |
611 |
724 |
|
} |
|
725 |
+ |
|
|
726 |
+ |
private OurImage image( String pNamed ) |
|
727 |
+ |
{ |
|
728 |
+ |
return new OurImage( "common/images/misc/" + pNamed + ".cache.png" ); |
|
729 |
+ |
} |
612 |
730 |
|
} |