view.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1991,1993 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  * This product includes software developed by the Computer Systems
  16.  * Engineering Group at Lawrence Berkeley Laboratory.
  17.  * 4. Neither the name of the University nor of the Laboratory may be used
  18.  *    to endorse or promote products derived from this software without
  19.  *    specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  * @(#) $Header: /cvsroot/nsnam/nam-1/view.h,v 1.11 2003/10/11 22:56:51 xuanc Exp $ (LBL)
  34.  */
  35. #ifndef nam_view_h
  36. #define nam_view_h
  37. #include <tk.h>
  38. #include "tkcompat.h"
  39. #include "netmodel.h"
  40. #include "transform.h"
  41. #include "bbox.h"
  42. class NetModel;
  43. struct TraceEvent;
  44. class Tcl;
  45. class Paint;
  46. /*defines for whether aspect ratio is to be square or not*/
  47. #define SQUARE 0
  48. #define NONSQUARE 1
  49. // Total number of fonts
  50. #define NFONT 8
  51. // Indexes into fontName and font_ arrays
  52. #define TIMES_8POINT  0
  53. #define TIMES_10POINT 1
  54. #define TIMES_12POINT 2
  55. #define TIMES_14POINT 3
  56. #define TIMES_18POINT 4
  57. #define TIMES_20POINT 5
  58. #define TIMES_24POINT 6
  59. #define TIMES_34POINT 7
  60. // Anchor locations for use in: 
  61. // string(float fx, float fy, float dim, const char* s, 
  62. //        int anchor, const char * color)
  63. #define ANCHOR_CENTER 0
  64. #define ANCHOR_NORTH 1
  65. #define ANCHOR_SOUTH 2
  66. #define ANCHOR_EAST 3
  67. #define ANCHOR_WEST 4
  68. class View {
  69.  public:
  70. View(const char* name, int aspect, int width, int height);
  71. virtual ~View();
  72. virtual void draw();
  73. void redrawModel() { resize(width_, height_); }
  74. /*
  75.  * Graphics interface.
  76.  */
  77. virtual void line(float x0, float y0, float x1, float y1, int color);
  78. virtual void rect(float x0, float y0, float x1, float y1, int color);
  79. virtual void polygon(const float* x, const float* y, int n, int color);
  80. virtual void fill(const float* x, const float* y, int n, int color);
  81. virtual void circle(float x, float y, float r, int color);
  82.   int getStringScreenWidth(const char * text, int screen_height);
  83.   double getStringWidth(const char * text, double height);
  84.   int getStringHeight(char * text);
  85. virtual void string(float fx, float fy, float dim, const char* s, 
  86.                 int anchor, const char* color = NULL);
  87.   int string(const char * text, double world_x, double world_y,
  88.              double size, const char * color = NULL);
  89.   void boxedString(const char * text, double world_x, double world_y,
  90.                    double vertical_size, int paint,
  91.                    const char * color = NULL);
  92. int width() {return width_; }
  93. int height() {return height_; }
  94. Tk_Window tk() {return tk_;}
  95. /*
  96.  * Tcl command hooks.
  97.  */
  98. static int command(ClientData, Tcl_Interp*, int argc, CONST84 char **argv);
  99. static void handle(ClientData, XEvent*);
  100. void destroy() { Tk_DestroyWindow(tk_); }
  101. int getCoord(char *xs, char *ys, float &x, float &y);
  102. // Interface to transform_'s map
  103. void map(float& x, float& y) const { matrix_.map(x, y); }
  104. void imap(float& tx, float& ty) const { matrix_.imap(tx, ty); }
  105. virtual void render() {};
  106. virtual void render(BBox &) {};
  107. virtual void BoundingBox(BBox & destination); // Copy bbox into
  108.                                                       // destination
  109.         virtual void getWorldBox(BBox & world_boundary) = 0;
  110. void setClipRect(BBox &);
  111. void clearClipRect();
  112. void setFunction(int);
  113. View * next_;  // Next view in a list of differnet network views
  114.  protected:
  115. void resize(int width, int height);
  116. /*
  117.  * transformation matrix for this view of the model.
  118.  */
  119. Transform matrix_;
  120. /*information for panning and zooming*/
  121. float magnification_;
  122. float panx_;
  123. float pany_;
  124. int aspect_;
  125. /*scrollbar widgets*/
  126. char *xscroll_;
  127. char *yscroll_;
  128. int width_;
  129. int height_;
  130. Tk_Window tk_;
  131. Drawable offscreen_;
  132. GC background_;
  133. void zoom(float mag);
  134. void pan(float x, float y);
  135. double pixelsPerMM_;
  136. /*
  137.  * Font structures.
  138.  */
  139. void load_fonts();
  140. void free_fonts();
  141. int lookup_font(int d);
  142.         // Look above for index names
  143. Tk_Font fonts_[NFONT];
  144. GC font_gc_[NFONT];
  145. int nfont_;
  146.         int default_font_;
  147.         BBox canvas_clip_;
  148. BBox clip_;
  149. int bClip_;
  150. };
  151. #endif