Subversion Repository Public Repository

litesoft

Diff Revisions 275 vs 276 for /trunk/Java/GWT/Client/src/org/litesoft/GWT/client/widgets/InjectionPointSelector.java

Diff revisions: vs.
  @@ -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 }