Esempio n. 1
0
 public TSpaceHint Select(TReflectionWindowStruc RW, double VisibleFactor, float pX, float pY) {
   double RW_SqrScale = Math.pow(RW.Scale(), 2);
   TSpaceHint Item = Items;
   while (Item != null) {
     if (RW.Container_IsNodeVisible(Item.BindingPointX, Item.BindingPointY)) {
       if ((Item.BaseSquare * RW_SqrScale) >= VisibleFactor) {
         TXYCoord P = RW.ConvertToScreen(Item.BindingPointX, Item.BindingPointY);
         if (((RW.Xmn <= P.X) && (P.X <= RW.Xmx)) && ((RW.Ymn <= P.Y) && (P.Y <= RW.Ymx))) {
           float W = 0;
           float H = 0;
           // .
           synchronized (ItemsImageDataFiles) {
             TSpaceHintImageDataFile ImageDataFile =
                 ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID);
             if ((ImageDataFile != null) && (ImageDataFile.Data != null)) {
               RectF ImageRect = ImageDataFile.Data_GetDestinationRect(ItemImageMinSize);
               W = ImageRect.width() + 1.0F;
               H = ImageRect.height();
             }
           }
           // .
           Rect TR = new Rect();
           Item.paint.getTextBounds(Item.InfoString, 0, Item.InfoString.length(), TR);
           W += (TR.right - TR.left);
           if (Item.InfoStringFontSize > H) H = (TR.bottom - TR.top);
           // .
           if ((((P.X - ItemSpacing) <= pX) && (pX <= (P.X + W + ItemSpacing)))
               && ((((P.Y - H - ItemSpacing) <= pY) && (pY <= (P.Y + ItemSpacing))))) {
             Item.flSelected = true;
             return Item.Clone(); // . ->
           }
         }
       }
     }
     Item.flSelected = false;
     // .
     Item = Item.Next;
   }
   return null;
 }
Esempio n. 2
0
 public synchronized void DrawOnCanvas(
     TReflectionWindowStruc RW, double VisibleFactor, Canvas canvas) {
   double RW_SqrScale = Math.pow(RW.Scale(), 2);
   // . calculate max item number depends on image square
   int SquareOrderHintList_Size = 5 * 4;
   // . prepare square ordered item list
   TSpaceHintItem SquareOrderHintList = null;
   TSpaceHint Item = Items;
   while (Item != null) {
     if (RW.Container_IsNodeVisible(Item.BindingPointX, Item.BindingPointY)) {
       if ((Item.BaseSquare * RW_SqrScale) >= VisibleFactor) {
         TXYCoord P = RW.ConvertToScreen(Item.BindingPointX, Item.BindingPointY);
         if (((RW.Xmn <= P.X) && (P.X <= RW.Xmx)) && ((RW.Ymn <= P.Y) && (P.Y <= RW.Ymx))) {
           int Size = SquareOrderHintList_Size;
           TSpaceHintItem LastHintItem = null;
           TSpaceHintItem HintItem = SquareOrderHintList;
           while (HintItem != null) {
             if (HintItem.Item.BaseSquare < Item.BaseSquare) break; // . >
             // .
             Size--;
             if (Size <= 0) break; // . >
             // .
             LastHintItem = HintItem;
             HintItem = HintItem.Next;
           }
           if (Size > 0)
             if (LastHintItem != null)
               LastHintItem.Next = new TSpaceHintItem(Item, LastHintItem.Next);
             else SquareOrderHintList = new TSpaceHintItem(Item, SquareOrderHintList);
         }
       }
     }
     // .
     Item = Item.Next;
   }
   // . re-order item list and prepare a draw list
   TSpaceHint[] DrawItemList = new TSpaceHint[SquareOrderHintList_Size];
   TSpaceHintItem HintItem = SquareOrderHintList;
   for (int I = SquareOrderHintList_Size - 1; I >= 0; I--)
     if (HintItem != null) {
       DrawItemList[I] = HintItem.Item;
       HintItem = HintItem.Next;
     } else break; // . >
   // . draw list
   for (int I = 0; I < DrawItemList.length; I++) {
     Item = DrawItemList[I];
     if (Item != null) {
       TXYCoord P = RW.ConvertToScreen(Item.BindingPointX, Item.BindingPointY);
       // . draw image
       float Left = (float) P.X;
       boolean flImage = false;
       synchronized (ItemsImageDataFiles) {
         TSpaceHintImageDataFile ImageDataFile =
             ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID);
         if ((ImageDataFile != null) && (ImageDataFile.Data != null)) {
           RectF ImageRect = ImageDataFile.Data_GetDestinationRect(ItemImageMinSize);
           ImageRect.offset(Left, (float) (P.Y - ImageRect.height()));
           // .
           canvas.drawBitmap(
               ImageDataFile.Data,
               ImageDataFile.Data_GetOriginalRect(),
               ImageRect,
               DrawPointItemImagePaint);
           // .
           Left += ImageRect.width() + 1.0F;
           flImage = true;
         }
       }
       // . draw selection if it exists
       if (Item.flSelected) {
         Rect TR = new Rect();
         Item.paint.getTextBounds(Item.InfoString, 0, Item.InfoString.length(), TR);
         float X0, Y0, X1, Y1;
         X0 = Left - ItemSpacing;
         Y0 = (float) P.Y - (TR.bottom - TR.top) - ItemSpacing;
         X1 = Left + (TR.right - TR.left) + ItemSpacing;
         Y1 = (float) P.Y + ItemSpacing;
         // .
         SelectedPaint.setColor(Color.argb(127, 255, 0, 0));
         canvas.drawRect(X0, Y0, X1, Y1, SelectedPaint);
         float[] Points = {X0, Y0, X1, Y0, X1, Y0, X1, Y1, X1, Y1, X0, Y1, X0, Y1, X0, Y0};
         SelectedPaint.setColor(Color.argb(255, 255, 0, 0));
         canvas.drawLines(Points, SelectedPaint);
       }
       // . draw image
       if (!flImage) canvas.drawCircle((float) P.X, (float) P.Y, 3.0F, DrawPointPaint);
       // . draw text
       Paint ShadowPaint = new Paint(Item.paint);
       ShadowPaint.setColor(Color.BLACK);
       canvas.drawText(Item.InfoString, Left + 1, (float) P.Y + 1, ShadowPaint);
       canvas.drawText(Item.InfoString, Left, (float) P.Y, Item.paint);
     }
   }
 }
Esempio n. 3
0
 public int SupplyHintsWithImageDataFiles(TCanceller Canceller) throws Exception {
   ArrayList<TSpaceHint> _Hints = new ArrayList<TSpaceHint>();
   synchronized (this) {
     TSpaceHint Item = Items;
     while (Item != null) {
       if ((Item.InfoImageDATAFileID != 0)
           && (ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID) == null)) {
         boolean flDataFileIsFound = false;
         int Sz = _Hints.size();
         for (int I = 0; I < Sz; I++)
           if (_Hints.get(I).InfoImageDATAFileID == Item.InfoImageDATAFileID) {
             flDataFileIsFound = true;
             break; // . >
           }
         if (!flDataFileIsFound) {
           _Hints.add(Item);
           if (_Hints.size() >= SHWIDF_MAX_ITEMS_TO_PROCESS) break; // . >
         }
       }
       // .
       if (Canceller != null) Canceller.Check();
       // .
       Item = Item.Next;
     }
   }
   if (_Hints.size() == 0) return SHWIDF_RESULT_NOITEMTOSUPPLY; // . ->
   int Sz = _Hints.size();
   int[] _HintIDs = new int[Sz];
   for (int I = 0; I < Sz; I++) _HintIDs[I] = _Hints.get(I).ID;
   // .
   byte[] Data = null;
   String url = PrepareHintImagesURL(_HintIDs);
   HttpURLConnection Connection = Reflector.Server.OpenConnection(url);
   try {
     InputStream in = Connection.getInputStream();
     try {
       if (Canceller != null) Canceller.Check();
       // .
       int RetSize = Connection.getContentLength();
       if (RetSize == 0)
         throw new Exception(Reflector.context.getString(R.string.SUnknownServerResponse)); // . =>
       Data = new byte[RetSize];
       int Size;
       int SummarySize = 0;
       int ReadSize;
       while (SummarySize < Data.length) {
         ReadSize = Data.length - SummarySize;
         Size = in.read(Data, SummarySize, ReadSize);
         if (Size <= 0)
           throw new Exception(
               Reflector.context.getString(R.string.SConnectionIsClosedUnexpectedly)); // . =>
         SummarySize += Size;
       }
     } finally {
       in.close();
     }
   } finally {
     Connection.disconnect();
   }
   ItemsImageDataFiles_FromZippedByteArray(Data, Canceller);
   // . final check for supply
   synchronized (this) {
     TSpaceHint Item = Items;
     while (Item != null) {
       if ((Item.InfoImageDATAFileID != 0)
           && (ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID) == null))
         return SHWIDF_RESULT_SUPPLIEDPARTIALLY; // . ->
       // .
       if (Canceller != null) Canceller.Check();
       // .
       Item = Item.Next;
     }
   }
   return SHWIDF_RESULT_SUPPLIED;
 }