[eclipse] view placeholders dynamisch creeeren @ runtime?

Pagina: 1
Acties:

  • Red devil
  • Registratie: December 1999
  • Laatst online: 16:00
Eclipse blijft ons hoofdbrekens geven. Zoals bekend in vorige topics, bouwen we een Eclipse RCP programma. Deze is in staat om meerdere SVG plaatjes te laten zien in verschillende views van hetzelfde type (zelfde primary wiew id).

Het idee erachter is dat gebruikers, vanuit een preview SVG, plaatjes kunnen selecteren die ze willen. Elk geselecteerd plaatje wordt vervolgens in een verschillende view gezet, en alle views zijn initieel van dezelfde grootte.

Vantevoren weet de RCP applicatie niet hoeveel plaatjes er moeten worden geladen en waar deze deze te plaatsen. Om dit probleem van variabele nr of views te overbruggen initialiseer ik zogenaamde placeholders in de perspective. Elke placeholder is gekoppeld met een view. Tijdens runtime worden sommige views zichtbaar gemaakt, en sommige niet.

Het probleem nu is dat de positie (layout) van de placeholders tijdens runtime niet goed kunnen controleren. Er is alleen een createInitialLayout method die te vroeg (tijdens het laden van de applicatie) zijn werk doet.

Hier een stuk van de code voor de perspective waar de plaatjes zichtbaar worden gemaakt.
NB Er is een methode die de nr of views veranderd, deze variabele kan worden veranderd @ runtime maar we hebben nog geen manier gevonden om de layout ook te veranderen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class FivaePerspectiveOutput implements IPerspectiveFactory
{
 public static final String ID_PERSPECTIVE = "app.ApplPerspectiveOutput";

 private static int nrViews = 0;

 private final int TEMPCOLL = 4;
 private final int TEMPROW = 6;

 public static void setNrViews(int nr)
 {
  nrViews = nr;
 }

 public void createInitialLayout(IPageLayout layout)
 {
  String altViewIDRow = IPageLayout.ID_EDITOR_AREA;
  String altViewIDCollumn = IPageLayout.ID_EDITOR_AREA;
  String altViewIDOld;

  layout.setEditorAreaVisible(false);



 for (int i = 0; i < TEMPROW; i++)
 {
  altViewIDOld = altViewIDRow;
  altViewIDRow = HeatMapView.ID_VIEW + ':' + HeatMapView.ID_VIEW + (new 
Integer(i *       TEMPCOLL)).toString();

  layout.addPlaceholder(altViewIDRow,
    IPageLayout.TOP,
    ((float) 1/(TEMPROW - i)), //  * (i + 1),
    IPageLayout.ID_EDITOR_AREA);

  System.out.println("perspR: " + altViewIDRow);

  altViewIDCollumn = altViewIDRow;

  for (int j = 1; j < TEMPCOLL; j++)
  {
   altViewIDOld = altViewIDCollumn;
   altViewIDCollumn = HeatMapView.ID_VIEW + ':' + HeatMapView.ID_VIEW + (new 
Integer(i *       TEMPCOLL + j)).toString();

   layout.addPlaceholder(altViewIDCollumn,
     IPageLayout.RIGHT,
     ((float) 1/(TEMPROW - j - 1)),
     altViewIDOld);

   System.out.println("perspC: " + altViewIDCollumn + " " + (TEMPCOLL - j));
  }
 }


Weet iemand een manier om de layout van de placeholders te controleren, nadat ik de createInitialLayout methode heb aangeroepen?

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Enige wat ik aan het doen ben is vechten met Eclipse, SWT and JFace. Het idee is prachtig, maar alles wat handig is, is internal gedefinieerd en kan ik dus niet gebruiken. En JFace is soms wel erg beperkt. Voor een simpele tabel moet je soms wel 7 interfaces implementeren. En dan is het nog erg lastig.
Ik wilde een dropdown menu in een column in een tabel, dat gaat best makkelijk. Maar om een andere lijst in elke cell te doen is onmogelijk... Waarom nou? Dan maar een dialog die ik dan vers aanmaak, helaas is het erg lastig om het huidige object in de tabel te achterhalen in het dialog... Handig. Ik zal wel iets verkeerd doen, want ik word helemaal kierewiet.

Antwoord op je vraag heb ik niet :(

"Beauty is the ultimate defence against complexity." David Gelernter


  • Red devil
  • Registratie: December 1999
  • Laatst online: 16:00
Eclipse is ontzettend gaaf als het werkt.. maar vaak werkt het niet en dan is het ontzettend frusty :(

  • misfire
  • Registratie: Maart 2001
  • Laatst online: 12-10-2024
De createInitialLayout van een perspective is alleen bedoeld om een standaard verhouding aan te geven tussen de verschillende views en de editorpane van het perspective. De gebruiker moet deze standaard verhouding aan kunnen passen en deze methode is daarom niet geschikt voor dynamische berekeningen of wat je verder allemaal wilt.

Ik weet verder niet wat je nu precies met al die views bedoelt. Een view is een contextgevoelige informatieondersteuning voor je werkproces, dat in de editor moet plaatsvinden. Als je meerdere plaatjes wilt openen, dan is het veel logischer om hiervoor verschillende editors te openen, geen views. Als je verschillende plaatjes tegelijk wilt zien in een automatische lay-out, dan lijkt het me logischer om dit in één view of editor te doen.

Ik vind zelf Eclipse wel een krachtig en logisch opgebouwd platform. Je moet alleen wel goed opletten dat als je gebruik maakt van de metaforen van het platform (zoals Perspectives, Views en Editors) je wel rekening houdt met de ontwerp-principes en het beoogd gebruik van deze onderdelen.

  • Red devil
  • Registratie: December 1999
  • Laatst online: 16:00
misfire schreef op dinsdag 16 augustus 2005 @ 19:32:
De createInitialLayout van een perspective is alleen bedoeld om een standaard verhouding aan te geven tussen de verschillende views en de editorpane van het perspective. De gebruiker moet deze standaard verhouding aan kunnen passen en deze methode is daarom niet geschikt voor dynamische berekeningen of wat je verder allemaal wilt.

Ik weet verder niet wat je nu precies met al die views bedoelt. Een view is een contextgevoelige informatieondersteuning voor je werkproces, dat in de editor moet plaatsvinden. Als je meerdere plaatjes wilt openen, dan is het veel logischer om hiervoor verschillende editors te openen, geen views. Als je verschillende plaatjes tegelijk wilt zien in een automatische lay-out, dan lijkt het me logischer om dit in één view of editor te doen.
Thanks, we gaan de komende tijd even die editors proberen!