home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 November / pcwk_11_98a.iso / Wtestowe / SOFTSRC / vtrial15.exe / DATA.1 / NewLT.frm < prev    next >
Text File  |  1997-03-20  |  18KB  |  645 lines

  1. VERSION 4.00
  2. Begin VB.Form NewLineType 
  3.    Caption         =   "Create a New Linetype"
  4.    ClientHeight    =   4335
  5.    ClientLeft      =   750
  6.    ClientTop       =   4890
  7.    ClientWidth     =   5520
  8.    Height          =   4740
  9.    Left            =   690
  10.    LinkTopic       =   "Form2"
  11.    MaxButton       =   0   'False
  12.    ScaleHeight     =   4335
  13.    ScaleWidth      =   5520
  14.    ShowInTaskbar   =   0   'False
  15.    Top             =   4545
  16.    WhatsThisButton =   -1  'True
  17.    WhatsThisHelp   =   -1  'True
  18.    Width           =   5640
  19.    Begin VB.CommandButton CopyCmd 
  20.       Caption         =   "Copy"
  21.       Height          =   375
  22.       Left            =   240
  23.       TabIndex        =   10
  24.       Top             =   2760
  25.       Width           =   735
  26.    End
  27.    Begin VB.CommandButton DelCmd 
  28.       Caption         =   "Delete"
  29.       Height          =   375
  30.       Left            =   240
  31.       TabIndex        =   9
  32.       Top             =   2280
  33.       Width           =   735
  34.    End
  35.    Begin VB.CommandButton DnCmd 
  36.       Caption         =   "Mv Dn"
  37.       Height          =   375
  38.       Left            =   240
  39.       TabIndex        =   8
  40.       Top             =   1800
  41.       Width           =   735
  42.    End
  43.    Begin VB.CommandButton UpCmd 
  44.       Caption         =   "Mv Up"
  45.       Height          =   375
  46.       Left            =   240
  47.       TabIndex        =   7
  48.       Top             =   1320
  49.       Width           =   735
  50.    End
  51.    Begin VB.TextBox SpaceLength 
  52.       Height          =   375
  53.       Left            =   4440
  54.       TabIndex        =   5
  55.       Text            =   "SpaceLength"
  56.       Top             =   1920
  57.       Width           =   855
  58.    End
  59.    Begin VB.TextBox DashLength 
  60.       Height          =   375
  61.       Left            =   4440
  62.       TabIndex        =   3
  63.       Text            =   "DashLength"
  64.       Top             =   1440
  65.       Width           =   855
  66.    End
  67.    Begin VB.CommandButton DotCmd 
  68.       Caption         =   "Do&t"
  69.       Height          =   375
  70.       Left            =   3360
  71.       TabIndex        =   6
  72.       Top             =   2400
  73.       Width           =   975
  74.    End
  75.    Begin VB.CommandButton SpaceCmd 
  76.       Caption         =   "&Space"
  77.       Height          =   375
  78.       Left            =   3360
  79.       TabIndex        =   4
  80.       Top             =   1920
  81.       Width           =   975
  82.    End
  83.    Begin VB.CommandButton DashCmd 
  84.       Caption         =   "&Dash"
  85.       Height          =   375
  86.       Left            =   3360
  87.       TabIndex        =   2
  88.       Top             =   1440
  89.       Width           =   975
  90.    End
  91.    Begin VB.CommandButton HelpCmd 
  92.       Caption         =   "&Help"
  93.       Height          =   375
  94.       Left            =   3840
  95.       TabIndex        =   15
  96.       Top             =   3840
  97.       Width           =   1455
  98.    End
  99.    Begin VB.CommandButton CancelCmd 
  100.       Caption         =   "Cancel"
  101.       Height          =   375
  102.       Left            =   2040
  103.       TabIndex        =   14
  104.       Top             =   3840
  105.       Width           =   1455
  106.    End
  107.    Begin VB.ListBox NewLinePieces 
  108.       Height          =   1785
  109.       Left            =   1200
  110.       TabIndex        =   11
  111.       Top             =   1320
  112.       Width           =   1815
  113.    End
  114.    Begin VB.TextBox LineTypeDesc 
  115.       Height          =   375
  116.       Left            =   1440
  117.       TabIndex        =   1
  118.       Top             =   720
  119.       Width           =   3975
  120.    End
  121.    Begin VB.TextBox LineTypeName 
  122.       Height          =   375
  123.       Left            =   1440
  124.       TabIndex        =   0
  125.       Top             =   120
  126.       Width           =   3975
  127.    End
  128.    Begin VB.PictureBox NewLineSample 
  129.       BackColor       =   &H00000000&
  130.       Height          =   255
  131.       Left            =   120
  132.       ScaleHeight     =   225
  133.       ScaleWidth      =   5265
  134.       TabIndex        =   12
  135.       Top             =   3360
  136.       Width           =   5295
  137.    End
  138.    Begin VB.CommandButton DoneCmd 
  139.       Caption         =   "OK"
  140.       Default         =   -1  'True
  141.       Height          =   375
  142.       Left            =   240
  143.       TabIndex        =   13
  144.       Top             =   3840
  145.       Width           =   1455
  146.    End
  147.    Begin VB.Label Label2 
  148.       Caption         =   "Description"
  149.       Height          =   255
  150.       Left            =   120
  151.       TabIndex        =   17
  152.       Top             =   840
  153.       Width           =   1215
  154.    End
  155.    Begin VB.Label Label1 
  156.       Caption         =   "Linetype Name"
  157.       Height          =   255
  158.       Left            =   120
  159.       TabIndex        =   16
  160.       Top             =   240
  161.       Width           =   1215
  162.    End
  163. End
  164. Attribute VB_Name = "NewLineType"
  165. Attribute VB_Creatable = False
  166. Attribute VB_Exposed = False
  167. Option Explicit
  168.  
  169. Public ltDirtyFlag%
  170.  
  171. Sub AddPiece(Piece As Single)
  172. '
  173. '   adds a new piece to the pieces list,
  174. '   it takes a value and translates it into an english string
  175. '
  176. '   There's some hokey code here (the Piece * 10000) below.  This is
  177. '   to store a floating point number in a long integer space.  This
  178. '   cuts off any data past four decimals, and looses any data greater
  179. '   than 200,000 (approximately).  Seems a likely risk.
  180. '
  181. '   Proper method would be to use the item data field instead as an
  182. '   index in to an array of doubles.
  183. '
  184.     
  185.     If (Piece = 0) Then
  186.         NewLinePieces.AddItem "Dot"
  187.         NewLinePieces.ItemData(NewLinePieces.NewIndex) = 0
  188.     End If
  189.     If (Piece < 0) Then
  190.         NewLinePieces.AddItem "Space " & Str$(Piece) & " Units"
  191.         NewLinePieces.ItemData(NewLinePieces.NewIndex) = Piece * 10000
  192.     End If
  193.     If (Piece > 0) Then
  194.         NewLinePieces.AddItem "Dash " & Str$(Piece) & " Units"
  195.         NewLinePieces.ItemData(NewLinePieces.NewIndex) = Piece * 10000
  196.     End If
  197. End Sub
  198.  
  199. Sub DoButtons()
  200. '
  201. '   activate or deactive list editing buttons as needed
  202. '
  203.     If (NewLinePieces.ListCount > 0) Then
  204.         UpCmd.Enabled = True
  205.         DnCmd.Enabled = True
  206.         DelCmd.Enabled = True
  207.         If (NewLinePieces.ListIndex <> -1) Then
  208.             CopyCmd.Enabled = True
  209.         Else
  210.             CopyCmd.Enabled = False
  211.         End If
  212.     Else
  213.         UpCmd.Enabled = False
  214.         DnCmd.Enabled = False
  215.         DelCmd.Enabled = False
  216.         CopyCmd.Enabled = False
  217.     End If
  218. End Sub
  219.  
  220. Sub DoSample()
  221. '
  222. '   make the sample line type
  223. '
  224.     Dim MaxX, Y, X1, X2, SF, Cntr As Integer
  225.     Dim ptr%, ptr2%                              ' used in parsing the spec string
  226.     Dim lng#
  227.     Dim LT$
  228.  
  229. '
  230. '   if there's nothing to display, then clear the sample and end
  231.     If (NewLinePieces.ListCount = 0) Then
  232.         NewLineSample.Cls
  233.         GoTo DoSample_Exit
  234.     End If
  235.  
  236.  
  237. '
  238. '   draw a sample of the line
  239.     MaxX = NewLineSample.Width                   ' run the line sample the full width
  240.     Y = (NewLineSample.Height / 2) - 20          ' run the line across the center of the box
  241.     
  242.     X1 = 0
  243.     X2 = 0
  244.     SF = MaxX / 8                                ' sort of a scale factor
  245.     NewLineSample.Cls                            ' clear the sample box
  246.     Cntr = 0                                     ' for determing how often to call DoEvents()
  247.  
  248. '
  249. '   put together the description string
  250.     For ptr% = 0 To NewLinePieces.ListCount - 1
  251.         LT$ = LT$ + Str$(NewLinePieces.ItemData(ptr%) / 10000) & ","
  252.     Next
  253.     If (Right$(LT$, 1) = ",") Then
  254.         LT$ = Left$(LT$, Len(LT$) - 1)
  255.     End If
  256.  
  257.     ptr% = 1
  258.     ptr2% = 1
  259.  
  260.  
  261. '
  262. '   get total length of one iteration of line, so that it may be
  263. '   scaled accordingly for the sample window
  264.     Dim LenIter As Single
  265. Loup:
  266.     ptr2% = InStr(ptr%, LT$, ",")
  267.     If (ptr2% <> 0) Then
  268.         LenIter = LenIter + Abs(Val(Mid$(LT$, ptr%, ptr2%)))
  269.         ptr% = ptr2% + 1
  270.         GoTo Loup
  271.     Else
  272.         LenIter = LenIter + Abs(Val(Mid$(LT$, ptr%)))
  273.     End If
  274.  
  275. '
  276. '   is this right?  What about a line spec that is just DOT ?
  277.     If (LenIter = 0) Then
  278.         NewLineSample.Cls
  279.         GoTo DoSample_Exit
  280.     End If
  281.  
  282.     Debug.Print "Iteration length = " & Str$(LenIter)
  283.     If (MaxX / (LenIter * SF)) < 4 Then
  284.     '
  285.     '   arbitrarily scale it so that we get at least 4 iterations
  286.         SF = SF * (1 / LenIter)
  287.         Debug.Print "Rescaled: SF = " & Str$(SF)
  288.     End If
  289.  
  290.  
  291.     ptr% = 1
  292.     ptr2% = 1
  293.     While X2 < NewLineSample.Width
  294.         Cntr = Cntr + 1                          ' allows other processing to procede while line is being drawn
  295.         If Cntr Mod 10 = 0 Then
  296.             DoEvents
  297.         End If
  298.     
  299.     '
  300.     '   parse the spec string to get the next piece to be drawn
  301.         ptr2% = InStr(ptr%, LT$, ",")
  302.         If (ptr2% <> 0) Then
  303.             lng# = Val(Mid$(LT$, ptr%, ptr2%))
  304.             ptr% = ptr2% + 1
  305.         Else
  306.             lng# = Val(Mid$(LT$, ptr%))
  307.             ptr% = 1
  308.         End If
  309.         
  310.     '
  311.     '   draw the segment
  312.         X1 = X2
  313.         If (lng# < 0) Then                      ' space
  314.             X2 = X1 + Abs((lng# * SF))
  315.         Else
  316.             If (lng# = 0) Then                  ' dot
  317.                 X2 = X1 + 2 * Screen.TwipsPerPixelX ' dot has no intrinsic length of its own
  318.             Else                                ' dash
  319.                 X2 = X1 + (lng# * SF)
  320.             End If
  321.             NewLineSample.Line (X1, Y)-(X2, Y), QBColor(14), BF
  322.         End If
  323.      '  Debug.Print "(X1, Y1)-(X2, Y2) = (" & Str$(X1) & "," & Str$(Y) & ")-(" & Str$(X2) & "," & Str$(Y) & ")"
  324.     Wend
  325.  
  326. DoSample_Exit:
  327. End Sub
  328.  
  329.  
  330. Private Sub CancelCmd_Click()
  331. '
  332. '   quit without saving
  333. '
  334.     Covered = False
  335.     Unload NewLineType
  336. End Sub
  337.  
  338. Private Sub CopyCmd_Click()
  339. '
  340. '   copy currently highlighted item, and
  341. '   insert it in the space following current item
  342. '
  343.     Dim Idx%
  344.     Idx% = NewLinePieces.ListIndex
  345.     
  346.     If (Idx% <> -1) Then
  347.         Dim t$, l&
  348.         t$ = NewLinePieces.List(Idx%)
  349.         l& = NewLinePieces.ItemData(Idx%)
  350.         
  351.         Idx% = Idx% + 1
  352.         
  353.         NewLinePieces.AddItem t$, Idx%
  354.         NewLinePieces.ItemData(Idx%) = l&
  355.         NewLinePieces.ListIndex = Idx%
  356.  
  357.         DoSample
  358.         DoButtons
  359.     End If
  360. End Sub
  361.  
  362. Private Sub DashCmd_Click()
  363. '
  364. '   add a dash of the given length to the pieces
  365. '
  366.     If (Val(DashLength.Text) = 0) Then
  367.         Beep
  368.         MsgBox "Invalid length for Dash"
  369.     Else
  370.         AddPiece Val(DashLength.Text)            ' add the new token to the list
  371.         DoSample                                 ' refresh the line sample
  372.         DoButtons
  373.     End If
  374. End Sub
  375.  
  376. Private Sub DelCmd_Click()
  377. '
  378. '   remove hightlighted item from list
  379. '
  380.     Dim Idx%
  381.     Idx% = NewLinePieces.ListIndex
  382.  
  383.     If (Idx% <> -1) Then
  384.         NewLinePieces.RemoveItem Idx%
  385.         DoSample
  386.         If (Idx% < NewLinePieces.ListCount) Then
  387.             NewLinePieces.ListIndex = Idx%
  388.         End If
  389.         DoButtons
  390.     End If
  391. End Sub
  392.  
  393. Private Sub DnCmd_Click()
  394. '
  395. '   move highlighted item up one in list
  396. '
  397.     Dim i As Integer
  398.     If (NewLinePieces.ListIndex <> -1) Then
  399.         i = NewLinePieces.ListIndex
  400.         If (i < NewLinePieces.ListCount - 1) Then
  401.             Dim t$, l&
  402.             t$ = NewLinePieces.List(i)
  403.             l& = NewLinePieces.ItemData(i)
  404.             NewLinePieces.RemoveItem (i)
  405.             
  406.             NewLinePieces.AddItem t$, i + 1
  407.             NewLinePieces.ItemData(i + 1) = l&
  408.             NewLinePieces.ListIndex = i + 1
  409.             
  410.             DoSample
  411.             DoButtons
  412.         End If
  413.     End If
  414. End Sub
  415.  
  416. Private Sub DoneCmd_Click()
  417. '
  418. '   done with new line type
  419.  
  420. '   if there are no specs entered, then just exit without saving
  421.     If (NewLinePieces.ListCount = 0) Then GoTo DoneCmd_Quit
  422.  
  423. '   there are pieces, be sure there is a name for the line type
  424.     If (LineTypeName.Text = "") Then
  425.         Beep
  426.         LineTypeName.SetFocus
  427.         GoTo DoneCmd_Exit
  428.     End If
  429.  
  430. '
  431. '   put together the specification string
  432.     Dim ptr%, LT$
  433.     For ptr% = 0 To NewLinePieces.ListCount - 1
  434.         LT$ = LT$ + Str$(NewLinePieces.ItemData(ptr%) / 10000) & ","
  435.     Next
  436.     If (Right$(LT$, 1) = ",") Then
  437.         LT$ = Left$(LT$, Len(LT$) - 1)
  438.     End If
  439.  
  440.     Dim D$, aIdx%, sIdx%
  441.     D$ = LineTypeName.Text
  442.     If (gblMode = 0) Then
  443.     '
  444.     '   stuff the information on the main form
  445.         Form1.AcadLineList.AddItem D$
  446.         aIdx% = Form1.AcadLineList.NewIndex
  447.         Form1.AcadLineSpecs.AddItem LT$
  448.         sIdx% = Form1.AcadLineSpecs.NewIndex
  449.         Form1.AcadLineList.ItemData(aIdx%) = sIdx%
  450.         Form1.AcadLineSpecs.ItemData(sIdx%) = aIdx%
  451.     
  452.         Form1.AcadLineList.ListIndex = aIdx%    ' hightlight the new line
  453.     Else
  454.     '
  455.     '   stuff modified information back into the same slot
  456.         Form1.AcadLineList.List(gblLineIdx) = D$
  457.         sIdx% = Form1.AcadLineList.ItemData(gblLineIdx)
  458.         Form1.AcadLineSpecs.List(sIdx%) = LT$
  459.     End If
  460.  
  461. DoneCmd_Quit:
  462.     Covered = False
  463.     Unload NewLineType
  464.     
  465. DoneCmd_Exit:
  466. End Sub
  467.  
  468.  
  469. Private Sub DotCmd_Click()
  470. '
  471. '   add a dot to the pieces
  472. '
  473.     AddPiece 0                              ' add the new token to the list
  474.     DoSample                                ' refresh the line sample
  475.     DoButtons
  476. End Sub
  477.  
  478. Private Sub Form_Load()
  479. '
  480. '   start of NewLineType form
  481. '
  482. '   If gblMode = 0 then this form is to create a new linetype
  483. '   If gblMode = 1 then this form is to edit an existing linetype
  484. '
  485.     WindowOnTop hWnd
  486.     
  487.     Covered = True
  488.     NewLineType.Top = ((Screen.Height - NewLineType.Height) / 2)
  489.     NewLineType.Left = ((Screen.Width - NewLineType.Width) / 2)
  490.     
  491. '
  492. '   default values for edit boxes, etc
  493.     DashLength.Text = "0.25"
  494.     SpaceLength.Text = "0.25"
  495.     NewLinePieces.Clear
  496.     LineTypeName.Text = ""
  497.     LineTypeDesc.Text = ""
  498.     NewLineSample.Cls               ' clear the sample window
  499.     
  500.     If (gblMode = 0) Then
  501.         NewLineType.Caption = "Create a New Linetype"
  502.         UpCmd.Enabled = False
  503.         DnCmd.Enabled = False
  504.         DelCmd.Enabled = False
  505.         CopyCmd.Enabled = False
  506.     End If
  507.  
  508.     If (gblMode = 1) Then
  509.         NewLineType.Caption = "Edit Existing Linetype"
  510.         LineTypeName.Text = gblLTName
  511.         LineTypeDesc.Text = gblLTDesc
  512.  
  513.         Dim ptr1%, ptr2%, p$
  514.         ptr1% = 1
  515.         ptr2% = 1
  516.         Debug.Print "gblLTSpec = " & gblLTSpec
  517. Loupy:
  518.         ptr1% = InStr(ptr2%, gblLTSpec, ",")
  519.         If (ptr1% <> 0) Then
  520.             p$ = Mid$(gblLTSpec, ptr2%, ptr1% - ptr2%)
  521.         Else
  522.             p$ = Mid$(gblLTSpec, ptr2%)
  523.         End If
  524.  
  525.         If Val(p$) = 0 Then
  526.             NewLinePieces.AddItem "Dot"
  527.             NewLinePieces.ItemData(NewLinePieces.NewIndex) = 0
  528.         End If
  529.         If Val(p$) < 0 Then
  530.             NewLinePieces.AddItem "Space " & Abs(Val(p$)) & " Units"
  531.             NewLinePieces.ItemData(NewLinePieces.NewIndex) = Val(p$) * 10000
  532.         End If
  533.         If Val(p$) > 0 Then
  534.             NewLinePieces.AddItem "Dash " & Val(p$) & " Units"
  535.             NewLinePieces.ItemData(NewLinePieces.NewIndex) = Val(p$) * 10000
  536.         End If
  537.         If (ptr1% <> 0) Then
  538.             ptr2% = ptr1% + 1
  539.             GoTo Loupy
  540.         End If
  541.  
  542.  
  543.  
  544.         DoSample
  545.     End If
  546.  
  547.     ltDirtyFlag% = False
  548.  
  549. End Sub
  550.  
  551.  
  552. Private Sub Form_Paint()
  553.     DoSample
  554. End Sub
  555.  
  556.  
  557. Private Sub NewLinePieces_Click()
  558. '
  559. '   user clicked on an item in the list
  560. '
  561.  
  562.  
  563.  
  564. '
  565. '   there will probably be an item hightlighted now.
  566. '   activate or not the copy button accordingly.
  567.     If (NewLinePieces.ListIndex <> -1) Then
  568.         CopyCmd.Enabled = True
  569.     Else
  570.         CopyCmd.Enabled = False
  571.     End If
  572.  
  573. End Sub
  574.  
  575. Private Sub NewLinePieces_DblClick()
  576. '
  577. '   if user double clicks on an item, then allow him to edit it
  578. '
  579.     Dim Idx%
  580.     Idx% = NewLinePieces.ListIndex
  581.     If (Idx% <> -1) Then
  582.         gblEditValue = Val(NewLinePieces.ItemData(NewLinePieces.ListIndex) / 10000)
  583.         EditPiece.Show 1
  584.     
  585.         NewLinePieces.RemoveItem Idx%
  586. '       NewLinePieces.AddItem Str$(gblEditValue), Idx%
  587.  
  588.         If (gblEditValue = 0) Then
  589.             NewLinePieces.AddItem "Dot", Idx%
  590.             NewLinePieces.ItemData(NewLinePieces.NewIndex) = 0
  591.         End If
  592.         If (gblEditValue < 0) Then
  593.             NewLinePieces.AddItem "Space " & Str$(gblEditValue) & " Units", Idx%
  594.             NewLinePieces.ItemData(NewLinePieces.NewIndex) = gblEditValue * 10000
  595.         End If
  596.         If (gblEditValue > 0) Then
  597.             NewLinePieces.AddItem "Dash " & Str$(gblEditValue) & " Units", Idx%
  598.             NewLinePieces.ItemData(NewLinePieces.NewIndex) = gblEditValue * 10000
  599.         End If
  600.  
  601.         DoSample
  602.     End If
  603. End Sub
  604.  
  605.  
  606. Private Sub SpaceCmd_Click()
  607. '
  608. '   add a space of the given length to the pieces
  609. '
  610.     If (Val(SpaceLength.Text) = 0) Then
  611.         Beep
  612.         MsgBox "Invalid length for Space"
  613.     Else
  614.         AddPiece -1 * Abs(Val(SpaceLength.Text))     ' add the new token to the list
  615.         DoSample                                     ' refresh the line sample
  616.         DoButtons
  617.     End If
  618. End Sub
  619.  
  620.  
  621. Private Sub UpCmd_Click()
  622. '
  623. '   move highlighted item up one in list
  624. '
  625.     Dim i As Integer
  626.     If (NewLinePieces.ListIndex <> -1) Then
  627.         i = NewLinePieces.ListIndex
  628.         If (i <> 0) Then
  629.             Dim t$, l&
  630.             t$ = NewLinePieces.List(i)
  631.             l& = NewLinePieces.ItemData(i)
  632.             NewLinePieces.RemoveItem (i)
  633.             
  634.             NewLinePieces.AddItem t$, i - 1
  635.             NewLinePieces.ItemData(i - 1) = l&
  636.             NewLinePieces.ListIndex = i - 1
  637.             
  638.             DoSample
  639.             DoButtons
  640.         End If
  641.     End If
  642. End Sub
  643.  
  644.  
  645.