EVTK Work Log ---------------------------------------------------------------------------------------- http://www.microsoft.com/express/windows/ c:\evtk\fastcad\vc9\fastcad\debug\fastcad.exe c:\evtk\collectedthought\vc9\collectedthought\debug\collectedthought.exe fwke.lib;fwkw.lib;fwkc.lib;libpng.lib;libjpeg.lib;libtiff.lib;zlib.lib;freetype.lib;Iphlpapi.lib;Winmm.lib; ---------------------------------------------------------------------------------------- 0.343 7-15-2010: Added MSG_AskSheetsArePages, MSG_SetSheetsArePages (false = order layers) to CFcwHdr.cpp and IDocFile.h. This reports the v7 SW_SheetAH autohide bit. Implemented the sheets are pages/ordered layers function in CFcwHdr::SetCurSheet, which will hide all non-overlay sheets except the current sheet for sheets are pages. Changed layers dialog and property sheet page to display "print" rather than "noprint" status, like sheets. (Actual status is unchanged, on the display of the status). 7-14-2010: Added enumeration support for sheets to CDbEnumObj, and added MSG_GetEntApndList to CFcwFile (sheet-aware append to hEntList) used by CCmd::OnEntTargetHitTest() and CCmdDrag::TryDropEnt. CFcwFile::MakeEntity perfroms similar logic directly. 7-10-2010: Added CFcwSheetsPSPage, and added sheet support to CFcwHdr: MSG_DocGetCurSheet and MSG_DocSetCurSheet. A NULL current sheet indicate that the "common" sheet is the current sheet. Added sheet support to CFcwFile: MSG_DocEnumSheet, MSG_DocAddNewSheet, and MSG_DocAddNewSheet. Added several option flags to CFcwSheet: MSG_AskSheetHidden, MSG_AskSheetLocked, MSG_AskSheetPrint, MSG_AskSheetOverlay, and MSG_AskSheetProtected. Flag set messages are: MSG_SetSheetHidden, MSG_SetSheetLocked, MSG_SetSheetPrint, MSG_SetSheetOverlay, and MSG_SetSheetProtected. 7-9-2010: When autosave triggered during an object edit or drag, the old entity was erased and thus not saved, and the new entity was temporary, and not saved, so in the autosave version, data was lost. A following explicit SAVE after editing would be valid, but exiting without it resulted in lost changes. We now detect this and set a delayed autosave flag, which causes an autosave when the hCmdMgr processes MSG_BaseCmdRestore or MSG_DlgEditEnded, rather than during the edit or drag or object action. On a second sequential autosave, the file.$$$ file was not renamed, as the target file (the document.fcdwg) exists - it worked the first time because MakeBackup() had renamed that file to document.prior.fcdwg). The result was that changes made were not saved in document.fcdwg, but rather were in the document.$$$ file which was not deleted. The document.fcdwg is now deleted before the $$$ to fcdwg rename. If a crash occurs during this process, the $$$ file is valid and can be renamed to recover the file. The likelyhood of a crash between the OS call to delete and the immediately following OS call to rename is very small, but as mentioned is still recoverable. Revised quickstart.fcdwg - removed product and move windows page, replaced fastnote and visual workbook references with CollectedThought. Other minor changes. 7-7-2010: Fixed crash: load and save of XP entities where the XP was not available wrote the entire record as the part of the record that was xp data, causing a crash. Added MSG_EntTypeName and MSG_EntList processing for unavailable xp entities. Added CFcwLStyle1 evaluation code so it draws the v6-compatibility line style. Fixed several bugs in the import of v7 layer table data. Updated all of the fc8dev developer's .pdf documentation, and revised the Getting Started Guide extensively to show the correct use of Visual Studio 2010 rather than 2008. Revised xptest an xpent source code to use GPOINT2D rahter than GPOINT2, etc. for compatibility with v6's v8access work in progress. 7-6-2010: Fixed OSX "punch-thru" bug - caused by call to OnDrawAllFrames() from inside OnRollover timer callback, time triggered by move trackup code. Aparently causing all windows refresh in a timer callback has this bade side-effect on OSX. Commented out for _SYS_MAC only. (Really serves no purpose now, as untitled windows no longer show active status by frame color). 7-2-2010: Investigated why the DebugDLL versions would not run on Win/& naked (only win/7, nothing else installed). Detected during revising fc8dev for vc2010 and while testing Express Edition. Turns out that FWKW.DLL could not load because the VC9 runtime was not installed, and it was used by the freetype library. Rebuilt and tested freetype with vc2010 which cured the problem. Change order of saving prior point in case hSendCtl's window is closed by message processing (CWinMgr::OnMouseEvent). Eliminated crashes. Added hOverDocWin set by MenuBar or CCanvas ctrl proicessing mouse event. Used as the parent of any dialog. *** Needs more thinking - color dlg has no parent, when to clear this in case doc win closes... Added hDoc->Msg(MSG_DocHasChanged); to CDlgEntEdit so changes will autosave on EXIT. Revised code so everything that is not a doc win has a parent window so that can be used for Z-order determinaqtion by OS rather than MSG_AdjustWinZ (preparation - change not yet made). 7-1-2010: Updated source code in plugins\xptest and plugins\xpent for changes: GPOINT3D for GPOINT3, GPOINT2D for GPOINT2, ENTDATA_GPOINT2D for ENTDATA_GPOINT2, ENTDATA_GPOINT3D for ENTDATA_GPOINT3, TMATD for TMAT. These changes were made to allow evtk framework code to be used in FC6 and FC7 XPs. (currently implemented only in FCW6PF). Changed hSvc->SvcObjSetData to hMetadataMgr->MDMObjSetData to bring example code current with changes in organization of the framework. Revised plugin code install to copy xfrdbg.bat and xfrrel.bat files as a convienience. 6-16-2010: Added code to CWinMgr so that setting ttshowms disables tooltips - both the hover timer and the ttip creation. Worked on OSX mouse click "punch thru" and determined that our event handler is never getting the punched event - it is not that we are mishandling it. Added clipformat "PNG" and code to CWinMgrM to get and send PNG format images to/from clipboard so that transfers with Word 2010 now work properly. (Word 2010 did not paste in the image data, only its size, for CF_DIB data, which worked with Word 2007). 6-15-2010: OSX: Menus now echo to standard top menu bar and function, including submenus, and switching menus when different windows come to the front. Only one menulist is created, as needed, per menu type id, and shared among all documents of that type. 6-12-2010: Fix bug in handling space key typed or pasted input - in CCmdMgr::OnCmdKey it fell through to code for VK_PASTE, rather than VK_RETURN as it should have, resulting in a queue overflow hang/crash. Added empty wavy blue icon to setup program for windows. Added setup.icns for icon in OSX setup. 6-11-2010: CDlgFileSys now implements open and save system dialogs for OSX, and the default session setting is to use it. Existing OSX installs need to change the session setting to use it. Removed vc9 projects fro evtk as part of reorganization and cleanup. Added code to CMenuBar constructor to send window MSG_WinUseMenu. to CWindowMac to load a simple test menu. to CWindowMacEvents to handle kEventClassCommand,kEventProcessCommand which does receive OSX menu events. This is step1 of the work to make our menus echo to the OSX top menu bar. 6-10-2010: Implemented Teigha DWG libraries for OSX and Linux (as well as v6 and v7 products). 6-9-2010: Converted dwgdb to use the latest "Teigha" 3.3 ODA libraries for both static and DLL builds. The DLL builds now include the actual libraries in the xp, so the DD_*.dll files are no longer needed and should be removed from all installs. This completes the elimination of code that depends on vc9, so the windows setup programs can remove the vc9 redistributables, and dwg files can be processed with the thumb drive versions of FastCAD v8. Converted OSX and Linux builds to use ODA "Teigha" libs (3.3), and integrated it into the OSX FastCAD v8. Fixed visual glitches with OSX setup - the build scriipt was not erasing the setup.app file (bad path) before copying the new one - and it won't automatically overwrite an app bundle..., so it was using a very old version of setup. 6-8-2010: Changed Mac builds to keep a copy of the MAC program versions in their setup directory, and added that copy to the SVC save list. Modified thumb.bat to copy these to the FCThumb and CTThumb folders. These show as the folder CollectedThought.app and fastcad.app in windows, but as the program icon on the Mac, while the .exe files show as an unknown file icon on the Mac. Added SYSLOGWCHR macro and standard initialization file path debug output. The file #log.ini contains the path and file name for the log file (no ending CR/LF!) If it is not present, then no log output is generated. The standard one uses %Desktop/log.ini. Revised MakeDlgFileNameSys to return a boolean if it succeeds. Revised CDocMgr::OnMakeFileNameDlg to use our file name dialog if the system standard one is not available and the session settings tried to use the standard one. (Bug showed on Mac thumb drive versions, which use the windows session.ini copied by default, which specifies OS standard file name dialog use, which is not yet supported on the Mac. Revised code in CWinMgr for MSG_WMgrWaitCursor to properly save and restore prior cursor. Changed CCmdURLPart and CCmdURLOpen to use MSG_WMgrWaitCursor. Changed CFcwLoad::FcwSave which started a wait cursor, and did not clear it if a read-only doc (ui.fcdwg) aborted autosave and the current work doc did NOT need saving. 0.342 6-7-2010: posted 0.342. 6-6-2010: Complete the conversion from vc9 to vc10 (Visual Studio 2010) and its run-time libraries, which allower a smoother setup process. (Currently dwgdb vc9 is still installed because vc10 versions of the ODA library are not available yet). 6-5-2010: Added FCThumb, FCStart, CTThumb, and CTStart for thumb-drive launchable versions of the products. (FCStart and CTStart copy current product versions in the FCThumb and CTThumb directories, \evtk\thumb.bat creates a test thumb drive with both products installed). 6-3-2010: Added MSG_DocSetReadOnly and MSG_DocAskReadOnly in CFcwFile, and set read-only for ui.dwg in CIniMgr (in 2 places, one for static builds, one for dll builds). 6-1-2010: Disable threading of SAVE process to see if it is causing rare crashes. PurgeEmptySublists now gives an alert and aborts the save safely if it detects a corrupted save image. Added pPriorScan for debug use in tracking down file save corruption. 5-30-2010: Revised CFcwFile::FcwSave, CFcwFile::WriteSubList and added CFcwFile::WriteSubList. Old code to remove empty sublists had a complex failure mode that occured when nested empty sublists occured. (case was calendar day contents moved out, save by exit or autosave , not SAVE/SAVEAS which purged such cases). Added code to CDbObject::OnAskHasContents - now returns false if has content but it is deleted. This also cleans up calendar day data - not saved if it would have no sublist. Reorganized fcdwg/fc7 file backup and save logic. Old logic had file not exist during file image prep - if crash, file "disappeared" (it had been renamed to file.prior.fc7) so that it did not exist on next restart. Now image saves as name.$$$ and is renamed correctly on a successful save. If save error, both old and prior are unchanged, and an alert is displayed. Save Process now runs in a background thread. There is still a wait during building the save image. Revised CFcwToolsPSPage to allow color sample/selector for grid color/mcolor. CFcwGridn::nEntDataChanged detects user change to colors and sets fAutoColor = false to fully support user grid color settings. Fixed crash in above/below commands: CCmdFront::OnCmdEnt was processing on !hEnt rather than hEnt. Tried to place selection above/below NULL. Fix crash: Delete container when a window is open showing the container's contents. Revised CFcwView::OnViewDraw - close canvas's window, CCanvas::OnDraw - exit after MSG_ViewDraw if canvas is deleting itself, and CFcwFile::OnRedrawAll - detect next view before drawing the current one, in case it deletes itself. Revised CCanvas, CFcwFile, CDwgFile, CImgFile, CMandFile, CTextFile: title bar now displays full document path. 5-23-2010: Fixed: REZIZE was ignored - Change in CDbEntity::OnDfltScriptText removed the \n "continue" item from list of commands, causing all further commands in the list to be misdirected. SWITCHDOC command (File menu: Switch Open) did not do autosave. Added MSG_ASaveCB to CDocMgr::OnDoSwitchDoc which processed this command (not CCmdSwitch). ARROW commands now honor other lock. Crosshairs cursors are viable on all GSSHAPE creation command steps. CWinMgr::OnCtlKey changed: now both ESCAPE and RETURN will exit any current ALERT dialog. RETURN did not do this because a script might have a RETURN. TODO: Any code should be changed so that scripts are aborted before calling an alert dialog. CFcwGrid0::OnSnap3 did not check for hCurCmd->Msg(MSG_CmdOrthoOK) - it was always doing ortho lock. if ortho was enabled. The command's ortho enabled status was ignored. CDbEntity::EraseThisEntity now sends hDoc->Msg(MSG_DocHasChanged) so that rb menu erase will mark changed for autosave. (No entity close made, which does this for normal edits). Added to CCmdList: commands DBLIST and ENTLIST which give an abbreviated list of the entire drawing database or just the document entities list for debugging. 5-22-2010: CDwgFile - MSG_GetPopupSubMenuId now returns 201 for the circular menu, not 1 which is the menubar FILE menu. Fix bug in CFcwGrid0::OnSnap3 - bad code to get prior point. OnSnap2 worked. Added Ortho support to CCmdDbLn double line creation. 0.341: 5-21-2010: CPopSelR, CPopupSelR2, CPopupMenuR, CPopupMenuC - Move mouse grab clear from end of close animation before start. Ignore mouse messages after close animation start. This is needed when using the sys standard (modal) dlg triggered by a command from a popup selection notify, before the selector gets the chance to close - the mouse grab interfered with the system standard file dialog. Added crosshairs always cursors to ellipse, box and double line commands. Switched # file references to either %RscPath/ or %Documents/ as user installations cannot write to #. (Many instances in program. Caused LIST and COUNT to be blank on installs, but not for dev test builds. 5-19-2010: Added code to CFcwToolPalette::OnDblClick so that a user-specified action overrides the default action. (SHIFT prevents override). Changed action descriptions "Open Sublist Window and Move to Sublist to the more user-centric Open Container Window and Move to Container. ZOBJA now used in circular menu - the object under the right-click that displayed the circular menu is used if one exists, do avoid an extra object pick which ZOBJ requires. CCmdMgr::EnableKeyIn has been changed so that CollectedThought DOES allow command keyboard input. This has been added back so that users that must program actions can test what script commands they would use. 5-15-2010: CPopupScrnCap: constructor replays prior mouse event as MOUSE_TRACKUP so that the magnifying cursor appears immediately in response to CTRL_SHIFT_C keypress. Added CDlgFileSys as a replacement for CDlgFile2. It uses the standard system file dialog, which is quite nice on Win/7. CDocMgr checks the new session variable fUseSysFileDlgs. If true (WIN32 default), the standard file dialogs are now used. 5-14-2010: Replaced "New" on circular menu with RTPAN command, as it is difficult (impossible with mac's mighty mouse) to do a middle-button pan, and because OPENing a template will create a new drawing. Palette color 31 was changed to 0xffffa9b6, the new standard view background color. Tool palette objects did not resize because they were drawing the handles at 0,0, not at the object origin. (Bug introduced when CFcwUIEnt was eliminated with cards.). 5-13-2010: CPopupScreenCap - it tried to save and restore the current hMouseGrab control, but for most uses, this was pointless and caused a crash - as soon as a mouse move for the screen cap was made, MOUSE_LEAVE was sent to the old control (CPopupMenu, etc.) so it would not exist when we tried to restore the grab state to it at the end of the screen capture. (code in constructor and destructor of CPopupScrnCap). 5-12-2010: Added options to allow printing background fill and the view grid to fcdwg printing. CDlgPrint, CFcwGrid0,1,2,3, CPrintMgrM/Mac/X IPrintMgr, CFcwFile changed. Added messages: MSG_PrPrintBkgnd and MSG_PrPrintGrid which returns the dialog results - are background and grid printing selected. Fixed so initially landscape mode - the printer device default settings are ignored. The value from our dialog is always the one used. CGDraw::OnFillStyle() was using = rather than == for test if hollow fill style. CFcwEntity::OnAskIsFilled() now returns false if hollow fill or transparent fill color, so hollow polys won't cover contained objects. CRASH FIX: Dragging an image from a web browser to a location where the image's tooltiip would go off-screen caused the ttip to close immediately. So it was possible that a mouse move message would be send to a tooltip window, and the start hover timeout would delete the old tooltip, WHICH WAS the hSendCtl, so that processing would crash sending the mouse message to the closed control. Fixed in CWinMgr::OnMouseEvent. Added PASTEOBJ command to the Edit menu. CCmdPasteObj. Images, URLs and Text on the clipboard create an entity in the same manner as if that data had been dropped on the document. The user is prompted for a single location, and an IMAGE, PTEXT, or XLINK entity is created from the clipboard data. 5-11-2010: Changed from #define IDraw IMObject to an actual class definition in IDraw.h, and made the many necessary changes throught the code to accomidate the change. Started to implement the IDraw inline wrapper functions. Did same for IControl and IWindow wrapper classes. 5-7-2010: Added CContainerEx.cpp - partial area container that uses a UIStyle background like a toolbar. This is going to mutate into vertical and horizontal divider controls. 5-1-2010: Fixed Crash when using URLPART from browser - 2nd use. CFcwView::OnDocDrawCsr was not Specifying the current doc, and clearing the current entity, from their last use. In the case of URLPART, these values were no longer valid. They are now reset. 0.340: 4-30-2010: Added MSG_EntHasText to all entities having text, and revised CAtrEvent::DoUpdColors so that text color is a transfered property in the drag and drop color icon. CCmd:RestoreCsr now tests hCmdDoc before trying to redraw the cursor. Caused a crash if a doc was closed while in mid-edit of a text entity. Drang/Drop connector ontyo lead end of capacitor in schematic demo was failing, and moving the connector in the catalog source doc. What happened is that if the drop point picked an entity and that entity could not be a container, the drop failed. Now, in CCmdDrag::TryDropEntExDoc, DROP_FAILED on a picked entity in the target doc, it is treated the same as DROP_KEEP. *** Final 0.340 POSTED. 4-29-2010: Fix explicit links to C: in schematic demo. Change CCmdOpenURL so the cache directory is in %Documents, not #, the install path, as programs do not have write permission to their install path. 4-27-2010: Continued work on sample documents. Added line and fill styles to workbook.fcdwg. Fixed crash when copying an object that has a symbol fill to another document. CFcwFStyle5 was using MSG_GetDoc rather than MSG_EntGetDoc, so the returned source document wass NULL. (MSG_GetDoc isu used by view objects which are not entities). 4-24-2010: Fixed bad bug in CObjCache::CheckSave: when the base pSave pointer was changed by a memory grow operation, the current pScan pointer was reset to the new pSave value, rather than adjusted for the buffer move. This caused the cache to be invalid, bad memory writes to follow, crashes in many cases, and loss of cached images in others. Added code to CObjCache::OnLoadComplete, CObjCache::OnGetNewId, and CObjCache::OnOCSize to eliminate objects from the cache that were unused immediately after load. They are eliminated during the following save. SWITCH prior or RETURN would use hOverGToolBar after a doc was unloaded (inside toolbars are stoired with the document), causing a crash, if the mouse was over the inside toolbar when the SWITCH command was executed. Added hCmdMgr->Msg(MSG_CmdClearAllOver); to NULL all document-related pointers before the switch action. When a saved view was a single-object window, that single-object was not restored to the view on the next load. Changed CFcwView::OnDocSaveViews and CFcwView::OnSetDefView. Cleaned up several sample drawings (bkgnd color and fill style) and re-created UnicodeSamples.fcdwg which was corrupted but usually loaded anyway. 4-20-2010: Revised CFcwPText so entities made from drag and drop initially get black text on white solid fill background, rather than current colors, which might not be appropriate. Droping the on the color sample tool will set them to current. CFcwFStyleTbl::OnIndexFStyle was changed. Some drawings have multiple id 0 and 1 Extra FStyles removed, and test for solid and hollow style are by actual type FS_SOLID and FS_NONE. 4-19-2010: Fixed code to dereference desktop shortcuts in CFcwFile::OnWinDropData - caused direct drop of text to not work. 4-11-2010: Update info.txt and added fcnews.php and ctnews.php pages to the web site, detailing changes in BETA 0.340. Revised CCmdMgr so CTRL-V paste works for command-line input. Revised CCmdBrowser so it uses hWinMgr->WMgrShellOpenDoc if hWebSvc is unavailable. (OSX and Linux currently). 4-10-2010: Windows URL shortcuts are now resolved to the actual URL on drop, and not to the .URL shortcut file, for machine portability and performance reasons. 4-6-2010: Removed "Text Edit" from the object right-button menu for Images and GSLinks. 4-4-2010: MAC: Window creation did ShowWindow, but not WinResize, WinRedraw, or WinUpdate. Now, the MSG_WinShow does these three messages, and creation does MSG_WinShow. So tooltips, stand-alone windows, etc. will show. MAC: edge grow/move icons for untitled windows did not appear because of a bug in CWinMgr::OnSetCursor - if(CSR_OPTIONAL) should be if(n==CSR_OPTIONAL). MAC: for dialogs and other untitled windows, after an edge grow, a title bar move jumped to a 0,0 origin. Fixed by replacing old WinMove() API with SetWinBounds() API and recalculating srect and orgx,orgy values after the move. CWindowMac::OnMove changed. MAC: MouseDownCB and MouseTrackCB event handlers: changed most cases of eventNotHandledErr to noErr, to prevent mouse "punch-through". Added application event handlers for app activate and deactivate and maintain a status variable. On mouse down, the event returns eventNotHandledErr only when the app is deactivated, allwoing the default handler to activate the app. This seems to cure the "punch through" bug. MAC: When a CMenuBar control is created, the menu id is sent to the parent window with MSG_WinUseMenu. CWindowMac hast the start of code to process this for the shared top menu. Code to display it works; it interacts correctly, but so far, code to receive the event does not get executed. 4-2-2010: Changed SYMDEF command so it uses standard dynamic tracking with SHIFT, CTRL, and INS options. Command SYMREFM aka INSSYM specifies name, scale, and bearing from a macro. ROTATE command now clears hilighted old entity from drawing. Fixed bug in CGDraw::OnFPoly2: fills inside symref were incorrect due to errors in calculating the bounding fill rectangle. Fix double line cursor disappears at each point click until mouse moved bug. Also, changed prompt for line width from distance to double line width for clarity. Clarify prompts for RPOLY command, and provide option for specifying either a corner point or a side center point. Fixed a crash in CCmdDrag::OnCmdSelect - when a group detail window was the target of a multiple-entity select, DragStart() never got called. OnCmdSelect now get the current mouse packet and calls DragStart to fix this. CCmdMgr now processes MSG_DlgEditEnded sent at end of DOCPROPS dialog to force the command tooltip to not initially show. (Consistency - it showed if an item had been edited, otherwise not). The property page now has the line labels read-only. Calendar entities now have a flag to indicate if a week starts on Sunday or Monday. New calendar objects take their initial settings from the value in DOCPROPS->Session under the Preferences section: Week_Starts. Added CRefList object and gptr hRefList. This object stores a reference by identifier list, allowing object instances to be referenced by id. The intended use is to handle issues in asynchronous programming where one objects tries to send a message to another object that has been deleted. Example: XLink entities that do not have an image but that have a URL for one request NetSvc to get the image if available. If the user switches documents before the NetSvc request has completed, NetSvc needs to be able to detect and handle this problem gracefully. Fixed bugs in CColorsPSPage.cpp (current properties page of DOCPROPS) that caused several color types to always reset to black. Also revised CFcwHdr to properly support the new TextColor setting value. The PTEXT command now uses this value to determine text color. Also, The PTEXT command defaults to the checkbox off. CGDraw::OnText2 was using LColor instead of TColor to draw text. (Calendars, TxItem, Dims, MText, Text2 use this function). Added GetColor/SetColor overrides so that TextColor value is used for MSG_SetColor and MSG_GetColor for MText2, PText, Text2, CCDim2, CADim2, CLDim2, Book, Page, GShape, Calendar, XLink, and TxItem entities. 3-30-2010: Fixed bugs in mandb.xp - drawing did not perform initial draw due to change in drawing logic, and it crashed if a mandel doc was loaded from docset.ini. 3-29-2010: FC7 drawings did not properly scale pen thickness. pt was stored as a byte representing 0 .. 2.54mm pen thickness. 1 pixel on the screen at 96dpi approx. = 0.26mm, so we need to divide by 26 on load, and multiply by 26 on save, to have approximately the same visual representation as v7. TODO: currently, fcdwg PT value is side pixels: 1,2,3,4 pt = lines that are 3,5,7,9 pixels wide... (so they always center about the true line coordinates). 3-28-2010: Max/Min icons on standard titled window no longer cause window translucency - only grabbing and dragging title bar as intended. Revised CImageM::OnRefresh and CWindowM::OnTranslucent so that alpha windows also show translucent while they are being moved/grown. On opening a file, if it is a template, a rename/saveas dialog appears. This has been moved from MSG_DocLoadComplete processing to CFcwFile::OnOpenDoc after the document views have been added, so that the rename/save dialog will appear on top of the new document window. Added cross-hair cursors to all steps of LINE, MOVE and path/poly create and edit, including splines and arrows. CCmdDynEditPath2, CCmdPath2, CCmdMove, CCmdLine2, CCmdLine3. CDlgDocProps and CPropSheetCtl changed. MSG_PSSetInitPage is sent by CPropSheetCtl to the notify object (CDlgDocProps) so that the dialog can restart on the page last displayed. 3-24-2010: More work on drop shadows - all objects now have smooth shadow gradient. Revised CFcwHdr to process MSG_DocShadowData for shadow specs, with differences for printing. CDocPrintAdjust is now used by CGDraw to scale line weight for printing. All controls now receive MSG_CtlWinClosing when the parent window destructor is called. This sets fWinClosing for control use to avoid crashes due to focus/redraw logic conflicting with win closing logic. CCmdCmd::RunCommand - NEW, OPEN, SAVEAS, and PRINT now close any open command, and do NOT restore the prompt, so that a cmdline prompt will not be reoopened over the dialog created by the command. TODO: find way to do same fix for commands launched by CAtrEvent::RunDropCmd as commands like LINE hit that when a new line to the toolbar click point is added to the database (program architecture issue). Revised CFcwToolPalette so it is not based on CFcwUIObj. Removed all obsolete commands based on CFcwUIObj base entity object (cards, dialog control mockups, old versions of book and page, etc.) and CFcwUIObj. Revised and renamed CCmdUIObj to CCmdToolPalette. 3-20-2010: XLink - fixed code to download favicon.ico, and to only attempt to do so once each time the containing drawing is loaded. Continued work on drop shadows - XLinks and PText also support drop shadows. (Toolbar entities do so, but look incorrect). 3-18-2010: Implemented FRONT, BACK, ABOVE, and BELOW commands in CCmdFront.cpp. Made some minor fixes to drop shadow support. MSG_GPShadowStart now passes a pointer to a GEXT3 structure so shadow can scale when the main object is small in relation to pixel shadow size and offset. Revised code in CGDraw::OnFCir2 to use MSG_FCirAA for filled circles when 2d and solid filled. Revised CDrawI::OnFCirAA, CDrawI::OnDWCir, CDrawI::DWRRect and CDrawI::FRRectAA to scale source alpha values in calculating blend and draw/fill alpha values. Revised CGDraw::OnFRRect to use MSG_FRRectAA for 2d solid filled rounded rectangles. Removed outline from circular popup menu "searchlight" wedge. Added three styles (DIRECT = line, ALIGNED = ortho locked jagged path, and CURVE = spline) and optional arrowheads to GSLINK entities. CFcwSymRef now uses the Tooltip attribute if present, if not, the tooltip is the symbol name. Added tooltips to all toolbar items. Tooltip attributes no longer copy from a factory entity. 3-4-2010: Made "Trebuchet MS" the default integer font, and set default size=18, as it is a bit small. It is a much cleaner font visually than Arial. Fixed a crash in CCmd::OnCmdAbort, when there is no hScan (imgdb) and one command is aborted to start another (PAINT -> SAVE caused a crash). PText, GShape and Calendar entities now have a flag to draw a drop-shadow. The drop shadows default to off for existing entities, and on for new ones. 0.339 3-2-2010: posted 0.339 3-1-2010: Added News and background update to CollectedThought. Added News item to HELP menu. 2-28-2010: Added new code for drawing wide lines and paths that maintain the relative width regardless of bearing angle, and have improved antialiasing. There is still a "ropiness" to shallow anlge line segments that I'd like to fix. New code has rounded ends. Old code has axis-ortho box ends, so sloped lines were trapizoidal. (CPenAA.cpp and CABfr.cpp added for this support). The first pass work on the new switchable user-interface styles is complete (CUIStyleMgr.cpp). Two styles are currently defined and may be selected by the UI Style pspage in the DOCPROPS dialog. This work has consumed most of February to complete. Planned: A wizard to walk people through creating/modifying their own styles, and file persistance so that styles may be shared amoung users. 2-27-2010: moved line weight from line styles to general properties (1st) ps page of DOCPROPS. CCmd::OnAbort now clears hilighting form all entities in hCmdDoc. Fixed several problems with and added default options to CCmdRotate and CCmdScale. 2-26-2010: fcwdb: implemented transform for Cir2 and Arc2 entities, including mirroring, but not yet handling non-uniform transform conversion to ellipse/elliptical arc. Need code to replace one entity in process with another and have it be used for further processing steps. (Function EntTform returns entity object handle, code that needs it updates its object pointer in case it changed). Fixed bug in PATH2 logic - cursor disappeared at each node point click until the mouse moved again. 2-26-2010: Added URLPART command, which inserts a part from a web URL. 2-25-2010: Restructured the color dialog. 2-24-2010: ENTEDIT dialos was displaying text strings in export form (quoted and escaped) Fixed in CDlgEntEdit::OnDlgInit. There were errors in the master spec for .fccat and .fclib files that caused them not to show up in the file open dialog, or to open if selected. 2-22-2010: Added fURLBar flag to WSMakeWebBrowser so that some uses(parts, catalogs from web have no URL bar - links on a page work, but general browsing is not enabled). 2-21-2010: Added magenta grid to ImgDb views when zoomed in to pixel size 16 or more. CDocMgr::OnDoSwitchDoc would crash wne the old doc was an image; ImgDb has no view lists. Old Doc processing skipped for now. (TODO: FIX) 2-13-2010: CNameTree storte in reverse alphabetical order - reversed comparison result tests in CNameTree::SearchTree. 2-12-2010: Added a string list to CTreeCtl and CTreeCtl2 to persist the text used by a combo box item list. (File name enumerations like UI Style Names do not persist). Junk text gets displayed. CControl::OnAttach was modifying child controls directly, and this included sublist end records, which then overwrote past a record's memory block. This erratically caused crashes. This was used by combo boxes and the command receiver, and was likely a source of unrepeatable instability. Added MSG_InvalidateSize to fix this. 2-8-2010 Add MSG_DocLoadViews and MSG_DocSaveViews processing to imgdb so that image windows can save and reopen at the start of the next work session. Started rewrite of imgdb image editor. Need this to do new icons for the user interface rewrite. Improved the edit and pushbutton controls rounded edges. The reason they grew jaggy over time is that the save prior blend background needed to be expanded by one pixel to save & clear the alpha blending data. New MSG_ImgSaveRectEx and MSG_RestoreRectEx functions perform this automatically. Changed CSessionMgr - all invalid lines are ignored - the rest of the session.ini file continues to be processed. Changed UNTITLEDWIN to UNTITLEDDOCWINS so the old setting will be ignored, and all current beta systems will revert once to titled document windows. 2-7-2010 Revised CMetadata, CSessionMgr, CSessionPSPage so selected nesting groups are initially open. CDataGrid2 - up/down arrows as well as shift tab/tab now move the item being edited up/down. Fixed a bad menubar menu data parsing err that stayed hidden, but had real memory and performance costs. It finally crashed in release code only. Learned that: [esi] = pointer in release code. Some variables are stored in registers rather than memory. Disassembly listing shows very wrong code for any line, but a breakpoint in source will stop at the right place. I need to hit the -> icon after switching to a disassembly view to see the right current location - it does not stay in sync. 2-6-2010: Converted CPopupMenuR, CPopSelR and CPopupSelR2 to use the new menu popup visual styles. CPopupSelR2 now has a close icon in its title bar and the selector window can be drug by the title bar. Removed several unnecessary control refresh to screen operations discovered wile documenting window draw/refresh operations for the program logic guide. 2-4-2010: Added code to LoadImgFromMem to fix bad images: some have 0x00dddddd for transparent pixels where d!=0. We use premultiplied alpha so this is incorrect. Added code to FRndFrame to allow the color1 value to be COLOR_TRANSPARENT to draw just the outline of a shape, with color replacement. Added New IDraw MSG_RRectTrim: A prior call to MSG_ImgSave saves the control background image. This function does an alpha "punch out", blending the image rectangle with the saved background. This lets us draw rounded rects filled with gradients or images. Fixed: IDraw::ImgExpand was vertically inverting the source control image. Showed up with half-round rectangle images. Eliminated background draw under icons in IWinMgr::MSG_WinDrawIcons. The new IUIStyle::MSG_UIMenuBarItem will not draw menu items that would underwrite the window icons, by calling IWinMgr::MSG_WinMenuRLimit. This allows much better visuals around the window icons. 2-3-2010: Added support for ENTDATA_GROUPLABEL to CMetadata and revised Session and UIStyle prop sheet pages to logically group metadata values in the edit datagrid control. Added MSG_CtlChanged, CTL_CtlCanDraw, and MSG_CtlAskCanDraw to CControl base class so that the same control can work properly in both normal and ALPHAKB dialog windows, and be written to use UIStyle. simplified MSG_CtlWindow processing. CControl asks parent, windows return this pointer directly. No searching needed. Added CGroupBox control to work with new CDialog2. 2-1-2010: Added changes to metadata, and CUIStylePage and supporting functions to CUIStyleDflt object to load/save and use UIStyle parameters and edit them with a DOCPROPS UIStyle settings page. 1-31-2010: Started a user interface "makeover". Added several new CDrawImgI methods and image functions: Split FRndFrame, ImgExpandRepl and ImgExpand into separate functions, added RoundTrim which uses an alpha image to "punch out" rounded corners in a rectangular image. Created a new CDialog2 which assumes an alphakb window style, and uses the above and several new controls to improve the appearance of the user interface. Added CLabel2, CSlider2, CRadioBtn, CCheckBox, and CPushButton so far. Created a "Dark" default style. 1-30-2010: Revised CWinProcM and CWindowM so that normal framed, titled windows go translucent during move/grow, just as our untitled windows do. Revised CDrawI::SetPixel fReplMode so that alpha values can be specified and properly blended for the content and rounded frame, without pixel edge glitches. (ignored alpha specs ofr repl colors before this). 1-27-2010: Added SvcBinaryMatch() to match binary byte data against binary patterns that may contain * and ? wildcards. Used it in the new example console search.exe program. SysScanDir now only appends a PATHSEP to the path if the specified search path does not already have one (returned file names no longer have a // between the path and the actual file name. 1-25-2010: Added MSG_SvcFileDataType which returns a recommended DATATYPE value based on the file name's .type extension. Revised NetSvc CHHTPSvc to use MSG_SvcFileDataType. Added MSG_SFullFileName to IStr to convert file path name values to full file name paths with % and other special character expansion. Worked on the StorageSvc - added CLocalPlace and shell for CS3Place. Further work on CStorageSvcTest example application. Fixed bug - RETURN key process in CMLEdit.cpp control was inserting two characters (\n NUL) from when we used \r\n for a newline delimiter. This truncated all text after that point in the data string. Added SGetC(ix) and SSaveFile(pFileName) to IStr class. Add IStr* class factory MakeStrFile(WCHAR* pFileName); 1-18-2010: Wrote DigestTest example, and completed implementation of Digest Authentication for CHTTPSvc (HTTP GET) and CHTTPPostUploadSvc (HTTP file form upload support). Fixed a bug in CStr::OnSFmtHex8 (leading 0's were being suppressed). 1-17-2010: CDlgAsk OnBtnChange now ignores button down, and responds to button up. It was sending itself two MSG_ReqDlgEnd, resulting in a race condition that would crash if the button notify process allowed window messages to process (Shell Execute). Added CNetSvcHTTPostUpload service to upload files to as server that has an upload respone page (uploadproc.php used in testing). Added MSG_SReplaceW function to IStr objects. 1-11-2010: Removed conflicts between v8 header names and C headers in v6 so that we can add v6 file support and make v8Access dll for use in v6 and other main programs that are not structured from the ground up for v8 code use. This meant adding "D" to many structures such as GPOINT2 -> GPOINT2D, as Peter changed their names when he converted the MASM headers to C headers years ago. 1-1-2010: Fix bug in CFontMgr2::OnFMMakeFontFace() - if font not found, it now substitutes the default font name. Was returning NULL, causing crash (return assumed always valid). CFTFontFace2, CFont2 - specify font name and sub for font name on substituted fonts for MSG_FontGetName. Added MSG_FMJCodeName to return text label for justification code. Revised GCFont3::OnDraw2 - origin to draw for call to hFont2->FontDrawLText is bottom left of * 1st line of * multiline text. Revised CFont2::OnFontDrawLText to remove leading from multiline interline spacing. CFcwHdr::OnUpdColor - FCW7 palette colors 16,17, and 18 are assigned to the system button face, text, and shadow colors. On import, we map this to the equivalent RGBA color, as FC8 does not use these system-dependent mappings. 12-28-09: Change all 2009 copyrights to 2010. Add BROWSER command CCmdBrowser.cpp and CWebBrowser.cpp in web services. Add InitWebSvc support to FastCAD and CollectedThought main program objects. Fix bug in ~CWindowM: hCurWin not set to NULL if it is window being deleted. Added fix to CWindowMac and CWindowX. Caused crash trying to make tooltip for closed window's close icon. Since tooltips now trigger from a delayed message to the UIQueue, CWinMgr::OnPopupClose now removes the TMTIMER_TOOLTIP so it can't timeout after the browser window closes, causing a crash when it tries to make a tooltip for a closed window. Split MSG_SysInitComplete (once at startup) and MSG_WinInitComplete (once for each window creation). Changed CHHTPSvc receive data buffer from grow by 4K to grow by 8Meg so that large downloads do not destroy the memory pool by fragmentation. At startup, the web file info.txt is read and parsed and if there is a newer version available, it is downloaded automatically in the background. At the next startup, a dialog is presented asking if the user would like to install the update. If YES, the program is shut down and the update installer is run. If there is no update, and there is a newer news html file, it is displayed once. The date of the news file is saved in the session settings so that it will only be displayed once. Revised SysExecCmd to elevate the UAC level automatically when the normal CreateProcess fails with error 740 (Vista and Win/7) So the function will work on downloaded EXEC files used in the auto-update process. 0.338 12-28-09: posted 0.338 CTooltip::OnTimeout now sends MSG_CtlEndTooltip through the UIQueue rather than calling OnEndTooltip directly, so that hDeletedWin won't be cleared in the middle of processing a mouse event, and so that the control window won't close mid-event. This caused "random" crashes. Added MAKE CTRL_WebCtrl support for the web browser embedded control. 27-Dec-09: Added support for tooltips for all controls. Uses MSG_CtlSetTooltip and MSG_CtlTooltip. No tooltip is shown unless tooltip text has been specified by sending the control MSG_CtlSetTooltip with a non-NULL text pointer. Text is copied and source text need not persist. 25-Dec-09: Completed implementation of WebSvc and WebSvcTest example. This embeds an Internet Explorer browser into a control within our window objects. HTML can be displayed from memory text, file text, or a URL. The browser supports navigation button functions: back, forward, home, search, refresh, and stop. Programs that use this control will (currently) be Windows-only. The API presented is generic, and support for other OSes is planned. 24-Dec-09: Completed example program EmbedWinCtrl which shows how to correctly embed any standard windows control (the multi-line EDIT control is used in the example) and communicate with that control. A control wrapper class is written that allows our standard messaging API to communicate with the Windows control. 9-Dec-09: CFcwSymRef::OnDblClick - if the symref has an assigned double-click action the first such action is executed. If not, DClick opens a contents SL win, or if no sl contents, it opens the SYMDEF contents window. CCmdCmd::StartObjRightClick, a right click, in the toolbar and not a canvas, has hCurCanvas = NULL. We now check and set hCurView = NULL rather than trying to use hCurCanvas to get hCurView when there is no current canvas (cures a crash). 24-Nov-09: CCmdDrag, in TryDropEntEx: drag to different document is always a copy, not a move - the original is not erased. This is like Windows drag to different drive, as opposed to different folder. In practice, when copying between drawings, almost never is a move desired, and it is annoying to have to use CTRL-drag to make a copy. 19-Nov-09: Add MSG_DG2TabHz to CDataGrid2 to enable either horizontal or vertical tabbing. 18-Nov-09: ImageIOBmp - added support for 8-bit RLE encoding for .bmp image file import. 0.337 14-Nov-09: posted 0.337. 12-Nov-09: Upgraded DWGDB to use version 3.02 of the ODA libraries for final ACAD 2010 support. 11-Nov-09: Fixed a bug in monochrome .jpg file import, and suppressed warning messages for .jpg monochrome input when a correctable .jpg would otherwise warn and abort loading. 10-25-09: FIXED: CDataGrid2 - scroll bar logic was causing many redraws for each event. FIXED: Close X icon on win crashed DGrid if it had focus. 10-24-09: Added support for IDBRow object functions to IDBConnection in DBase service, and definitions in IDBase.h. CDlgFile2::UpdateFilter crash if no currently selected filter fixed. (Save a mandel drawing). 10-22-09: Rebuild dwgdb using ODA's DWGDirect version 3.01 libraries to add ACAD 10 DWG support. 10-19-09: Added SScanFreeForm flag to IStr*. When set, all scan operations tread CR and LF as whitespace, for parsing XML, etc. where lines themselves have no meaning. Revised CStr::OnSkipWhiteSpace(). Added CStr::OnSScanMatch() which tests for a match of the specified string, after skipping leading whitespace. 10-17-09: Added MSG_DG2SetItemDivider to the datagrid control CDataGrid2. Added new class factory MakeObjArray(UINT nGrowItems,bool fRelObj) which makes an array of IMObject* and can autorelease all members when the array is released. Added direct item get/set for arrays of IMObject* and double values to IArray. 10-16-09: CCmdTextEdit: The initial redraw all to set the cursor restore image to not show the existing text needed to temporarily set hTEDNotify = NULL so the text would not be redrawn. This bug caused text with a transparent background to visually clutter the edit if the text was inside a single-object window, ok in main doc views. CCmdTextEdit is now notified by CFcwView when a single object window is closed. if that object is a parent of the text being edited, closing the sowin ends the edit so that the edit will not continue with the text displayed inappropriately on the main window. 10-12-09: Fixed a bug in CSelSet: when the buffer had to be moved on grow, the pBfr pointer was not updated to reflect the new buffer location. Caused a crash. 9-23-09: Fixed bug in CFcwFStyle6 (DWG hatches) hung on bad hatch definition containing only 0-length segments (From ACAD dwg translated in v7). Moved the specification of szAppDataEx and szDocumentsEx to before any manager is created - SessionMgr was being created and loaded before these were specified in static builds, so the default values were being used. This was caught studying a bug in AutoSave on static lib builds - disabling it did not disable it, but it showed as changed. Explicitly changing it disabled it until the next program load. Moved the clearing of the gsptrs array into winmain.h at the earliest possible point so there is no need to save/restore selected preset values. Cleans up code. Added CCmdFront to implement FRONT, BACK, ABOVE, and BELOW commands to change the Z-order of objects. 0.336 9-21-09: Change CStrFmt so line weight is displayed in integer, not hex. CCanvas::OnMouseEvent now makes a local copy of the mouse packet and passes that on, after setting hCtrl to the canvas control if the hCtrl value is NULL. Something external is changing the source packet while the message is being processed... This caused crashes. The DOCPROPS properties page was not showing/updating the current file style correctly - Code in CColorsPSPage::InitDGrid was referencing the current line style object, so NULLs were returned to queries. Copying a calendar now correctly copies the AutoToday setting. In the entity edit dialog, the numeric justification code is now replaced with an enumberated list specifying the avialable justifications. *** posted 0.336 (bad crash bug fix) 0.335 9-20-09: Added code to CFcwEntity::EnumUseProps so that entity fill is solid in hilight color when the entity is selected. Added Tx+ and Tx- drop target icons to ui.fcdwg side toolbar for both FC and CT. COUNT, COUNTA, and LIST now unhilight the selected entities when done. Revised the CollectedThought program icon. *** Posted 0.335 9-18-09: Replaced from 0228 archive the missing mmsvc.rsc file. Caused audio recorder dialog to crash on open. Added call to MSG_WinValidateLoc in CPopupMenuR, CPopupSelR, and CPopupSelR2 to keep popup menu on-screen. Changed CCmdImage to build a filter list for the file open dialog that only displays valid image types. Fixed bugs in revised rollover window front code (after delay timer). Left click on obj that has an assigned LClick action: Shift = ignore action and drag, Ctrl = drag copy as expected. Neither = assigned action. Right click on obj that has an assigned RClick action: CMenu no longer appears - action now takes precedence. Less confusing, mouse movement in cmenu caused problems. SHIFT RClick brings up r.b. menu even if object has an assigned RClick action, as expected. If an action opens a sublist window, and there is already a sublist window open for that object, the existing window is brought to the front and centered under the mouse rather than opening another sublist window. If a mouse message goes to a CCanvas control with ppkt->hCtrl == NULL, CCanvas sets ppkt->hCtrl = this (the canvas control) to prevent crashes. 9-17-09: CPopupSelR2,CPopupSelR,CPopupMenuR OnAnimateCloseCB disables focus change when the popup closes so that items selected for editing, etc. by the popup action remain in focus. CDataGrid2::SelectItem - removed selected item unchanged optimization - caused crash if add item (layer) twice in row at same spot in table. Restored InitTextDb and textdb module to CollectedThought - used by List, Count, and CountA commands. Still not in file open list. Fixed code in CMenuMgr to ignore comments lines. Added comments to fcw.mnu to label object r.b. menus with what entities use them. Revised SWITCH/RETURN. RETURN past first file in list goes to last file in last (circular list). Nothing removed from list during a session - it just grows. 9-15-09: Added WM_WINDOWPOSCHANGING to CWindowM::OnWinMsg to prevent the window from becomming too smal to use, or so small that the client area size creates a divide by zero crash. 9-14-09: Revised CCmdMSelect to have a class factory StartCmdMSelectX() which reuses the mouse left-down event that started it (change in CCmdCmd::StartDfltLeftClick) so that multi-select initiated from the pick over nothing click does not require an additional mouse down to get started. 0.334 9-13-09: Set the fill style to NULL (Hollow) before drawing grids. They are still a bit weird looking over a gradient background. Its an optical illusion that they appear to change color. TODO: I'm going to have to make assignable grid colors, with one choice being the auto-color scheme currently in use. *** Posted version 0.334. 9-12-09: CWinMgrX - changed OnAdjustWinZ to us CWindowX order as current bottom to top order. Revised CWindowX to append so b2t is maintaintained. Revised SetCurWin so call is direct (no delay timer on Linux). TODO: Linux timers do not appear to be working. Fixed most issues with Linux setup & uninstall. The app directory's executables are not being removed, and the containing folder thus is not removed. I suspect an error in ScanDir for executables. Had issues with this with OSX. 9-11-09: Fixed crash in CPopupSelR2 - OnMouseEvent - added return after first of 2 OnEndPopup() calls - it sometimes fell through and made a 2nd call, causing a crash. Fixed crash in CWinMgrMac::OnShellOpenDoc - needed different CFURL constructor when the text is a file name (space replacement, etc.). Link to "Using FastCAD.pdf" failed due to this. Made "Detail Edit" the top item on all object menus, removed "Quick Menu" as just something extra to explain. 9-07-09: Added new right button menu command "Save to Clipboard" for Images, XLinks, and PText entities. Direct copy without editing or additional selection. 9-06-09: Revised CSystemX/M/Mac - OnScanDir to return a nesting level value that increments for files from a nested directory. (The dir itself is not at the higher nesting level - it belongs to its parent directory). packsu modified to add BUNDLE and SETX commands. "BUNDLE dir" is converted to a [MAKEDIR FILE... CD ../] command sequence. SETX specifies a file to be flagged as executable (as in exe inside OSX .app bundle). This will make setup scripts for OSX .app bundles much easier to write and maintain. Added hSystem->SysSetFileBundle() so that copied bundle directories on OSX can be correctly flagged as such (different from normal directory). 9-05-09: Added new services to support uninstall: SvcCopyFile() and SvcNestedDelDir(). Revised hSystem->SysScanDir so it makes a callback both before (FA_DIR) and after (FA_DIRAFTER) for the directories processed during the scan. Creation needs before, and removal needs after. Added CWinMgrM functions to unregister program, shortcuts, file associations, and the uninstall program. Completed implementation of the basic uninstall program. Tested and working for Windows FastCAD and CollectedThought. Basic uninstall exe (w/o scripts) build on osx and linux. Work on changing setup and uninstall names to match product names. 9-04-09: Removed IUIStyles.h, CUISACAD.cpp and CUISDflt.cpp. Replaced with fUntitledWin session variable - clearer to users what this option does. Wrote Uninstall program, integrating into svn and all projects. Added support functionality into CWinMgrM/X/Mac and CWinMgr. Revised packsu to add full-path RMDIR and RMFILE commands to the uninstall script. Revised \evtk\webfn - FastNote name changed to CollectedThought. Figured out how to include TM ™ Copyright © registered ® in web pages. Downloads are now named CTSetup.exe and CT_OSX_Install.dmg. Cleaned up several page issues esp. on the buyct.html page. Created a Visual Studio project to manage the webfn web site. CollectedThought now only supports the fcwdb file format - no support for text, image, mandel, etc. Less to explain, and text and image editing were not really up to par; mandel unnecessary fluff. Removed obsolete .ini command support from CIniMgr: DFLTSTYLE CFGVAR IFW32 ENDW32 IFNW32 ENDNW32. Renamed fastnote.ini to ct.ini. Revised fastnote setup .bld scripts. CollectedThought now makes file associations in windows - can conflict with FastCAD. *** Beta testers need to manually remove all old fastnote directories and files. after moving any client documents and settings into new CollectedThought directories. 8-29-09: [Linux] Fixed CWinMgrX error in ConfigNotify calculation of window position in root window coordinates bug. This gets the cmenu working again. The discrepancy between Expose calculations and ConfigNotify calculations was due to ConfigNotify event reported origin being the wrapped framewin origin, while we need our window's origin in the rootwin coordinate space. [Linux] CWinMgrX::OnAdjustWinZ now revises the CWindowX order in hCtrlList to maintain bottom to top order as needed by FindWindowAndCorrect (which fixes Linux mouse down tracking always reporting mouse in window of button down event, which prevented dragging from one window to another). 8-28-09: Wrote CCmdConnect in cadcmds xp. The v8 version uses dynamic drag cursor and a dynamic align cursor. The point input order is dragFrom, dragTo, alignFrom, alignTo, the same as in v7. 8-26-09: Added new functions to CLogMgr. Added support for MSG_SysLogWin to all 3 window objects: CWindowM, CWindoiwMac, and CWindowX. Displays log to console on Linux, debugger Console window on Mac, and debugger Output window on Windows. 8-25-09: Fixed bug in point inside poly test CGPick::OnFPoly2 by changing to an open interval alogrithm that eliminates the need for special case tests at the edge segment endpoints. 8-23-09: Enter invalid cmd. Exit alert with ESC. Type valid command. Crash at CDocMsg::OnSetCurDoc. Now, when a canvas closes, if hOverCanvas == closing canvas, hOverCanvas is set to NULL. Fix crash in DYNEDIT of a polygon - needed to set hOnlyDoc at STATE_DynEdit start. 8-22-09: CSystemM::OnGetLocalIPAdr was returning IP address in network, not host byte order. NetSvc takes ipadrs in host byte order. CServices::OnFmtIPAdr (unlike CStr:: OnFmtIPAdr) matched this incorrect assumption, and is used by Setup to display the local ip address. Changed OnGetLocalIPAdr and CServices::OnFmtIPAdr. On Windows/7, user programs may not create shortcuts to "all user's desktop", so the DTSHORTCUT command has been changed to store to the current user's desktop. Revised FastNote/fcdwg.ini to display the interior right (narrower) toolbar when inside toolbars are enabled, as does FastCAD. Added PText items to the narrow toolbar. The colors page on the DOCPROPS dialog has been made the 1st (startup) page, it has been relabeled "properties", and it now displays most standard properties, including current line and fill style, current layer, and the current font. Keeping this dialog open as a tool provides quick access to all current settings. The circular menu has been changed - AddView, Colors, and Move Window commands have been removed, and RETURN, ObjectMenu, and Multi-Select commands have been added. The default right-click operation has been changed. Right-click brings up the circular menu, even if over an object. The object the mouse is over at the right click is saved in hActiveObj. The OBJMENU command will perform a right click on that item (displaying its object-specific drop-down menu unless a right-click action has been assigned). If the is no picked item, OBJMENU prompts the user to pick an object. SHIFT-right-click will skip the circular menu and go directly to the object's right click processing. (The opposite use of SHIFT) This makes getting a circular menu at any time easy and consistent. Changed CCmdCmd::StartObjRightClick. The left-click multiple entity select operation has been changed. When you left click over nothing, (changed in CCmdCmd::StartDfltLeftClick), or start the MSELECT command (usually from the circular menu), multiple entity selection begins. When you right-click, selection ends (the circular menu no longer pop up after a multiselect operation), and a multi-entity drag/drop starts. You can drag over a trash can to erase the selection. OPEN, NEW and SAVEAS commands will now auto-repeat. 0.333 8-21-09: Final 0.333 posted. Fixed send email RCPT TO and From: required duplication errors. Removed extra "Evolution Computing" added to path for email account settings file. Fixed conflict between typedef Boolean signed/unsigned char in ConvertUTF8.h mac needs UCHAR, linux X11/Xintrinsics conflicts, needs CHAR. ConvertUTF8 doesn't really care. Not a concern on Windows. 8-20-09: Changed linux X error handler to use the more informative XmuPrintDefaultError() function. Required adding -lXmu to every makefile. Fixed CWindowX::OnZMove() function so that it correctly changes the Z-order of a window, using XReconfigureXMWindow. XConfigureWindow and XRestackWindows won't work correctly with top-level windows. CWinMgrX::AdjustZOrder is now correctly identifying the top-level windows from the results of XQueryTree on the top-level root window. Fixed a bug in MakeArray(pBfr,nBfr) - count was not correctly set. Added EMAILDOC command CCmdEMail. It sends the current document to a specified email address. Added CDlgAsk, a general ask a question dialog with an edit field and two buttons. Used it in CCmdEMail to ask for the email to address - the floating cmd line is not very visible on dark backgrounds. Added CEMAcctMgr and CENAcctPSPage for editing email settings. They are kept in "%UserAppData/Evolution Computing/". These settings must be valid to send emails. The email page in the DOCPROPS dialog is where they are edited. 8-19-09: Continued work on Linux implementation revisions. Windows titles are now drawn, and screen coordinates are correctly translated. This lets docset.ini save and restore windows to their correct prior position. 8-15-09: Revised CImageX to use an XImage rather than an XPixmap for its shared memory raster, as the latest NVidia dirvers no longer support shared memory XPixmaps. This created a lot of problems with cursors, etc., as the image now requires an explicit transfer to the server, and after drawing a cursor, the cmdline tooltip is moved to a new position, which causes a redraw, clearing out the cursor... 8-10-09: Debugged EMail attachment code using NetSvcTest. Fixed window Z order list generation in CWinMgrMac::OnAdjustWinZ so rollover now works on the mac. CWindowMac2 now forwards MSG_CtlMouseEvent to the command manager if it exists. It will receive these when MOVEOBJWIN grabs the mouse directly to the window object. The fixes CLOSETBAR command, and some issues with MOVEOBJWIN for a popup toolbar. CWindowMac2::OnWinOrg now returns 0 if there is no title bar (popup toolbar) so moving the window does not move it ar offscreen (was returning 32767). 8-Aug-09: Added CEMail support for decoding and returning attachments from received email objects. 6-Aug-09: Fix bug in fetching xlink favicons. Add OPENALL to image and xlink right-button object menus. 5-Aug-09: Fix bug in CPrintMgrM::OnBeginPrint - the dev and hDraw are now returned by MSG_PrStartPage, not MSG_PrStartJob. Changed default LPI to 56 (from 72) for print string function. Added Print menu option to NetSvcTest windows to print current displayed log. EMail sending now supports sending attachments: strings, arrays, and images. 4-Aug-09: Added EMailSvc to send and receive emails. IEMail is the email object, IEMailAcct is the sned/receive account, hNetSvc->NetSvcSendEMail sends an email, adding To, CC, BCC information to the outgoing headers, and hNetSvc->NetSvcRcvEMails receives email objects with a flag to optionally delete them from the email server. 1-Aug-09: CNetSvc::OnHTTPGet no longer requires the call guarantee the persistence of the URL text for the life of the request. It makes a local copy valid until the thread processes the request. CFcwXLink now uses hNetSvc to lookup URL images and favicons. This means the lookup is threaded and does not block waiting on the request. CHTTPSvc - IIS does not return ContentLength: in header - for that case, we now read until 0 bytes read, Unix style EOF. CNetSvcTest now tests URL parsing and Base64 encoding. MSG_NetSvcParseURL returns an IURLObj* for a specified WCHAR* pURL. Moved socketsmgr and SKMSocketsTest and inetsvc and sockets (svc) to obsolete directory Revised linux and mac build scripts to remove these and add NetSvcTest and Chatter example program builds. Revised all DLL-based win32 dlls to generate named .pdb files and copy them into the correct test directory. Added xfr.bat to copy NetSvc.rsc to fastcad and fastnote directories. Revised error message handling in CNetSvc - it was not thread safe (m_error and szErrStg were shared across threads - one thread could get another's error code). CFcwXLink was fetching favicons twice - one on creation, and then in the MSG_DataChanged processing. 31-July-09: SvcFullFileName no longer appends PATHSEP after ~ user dir expansion - it resulted in two PATHSEPs, as normal use is ~/myfile. Fix OSX and Linux CThreadQueue?.cpp - pthread_create does not return a value - now sets hThread to -1 to flag thread is active. CTimeMgr timer timeout for OSX and Linux now send MSG_SysWakeupUI. Added MSG_SvcFmtHex8 which formats a byte into two hex digits with no leading 0x for use in generating MD5 hash codes. Also string version MSG_SFmtHex8. Added MD5 hash generation support to CNetSvc with MSG_NetSvcMD5HashStr, for use in HTTP authentication (not yet implemented). MSG_NetSvcMD5HashStr converts from strings to UTF8 then generates the hash. Also added MSG_NetSvcMD5Hash which generates a hash directly from a sequence of bytes. Further fixes to NetSvc, NetSvcTest and Chatter example programs for networking. 30-July-09: Made and built projects for Linux and OSX NetSvc, NetSvcTest, and Chatter. Updated Linux and OSX dwgdb projects to use latest OpenDesign.com libraries, which made a lot of breaking changes. (Win32 already updated). 20-July-09: Added Chatter example program - a bidirectional chat program. 19-July-09: Started work on new NetSvc threaded network access services Added functionality to IData objects for use with the new threaded NetSvc service so that all web transactions are non-blocking and asynchronus. Added new example program NetSvcTest to demonstrate network programming. 18-July-09: CAboutDlg now responds to MSG_DlgSetTitle and redraws with the new title. Fixed a bug in CStr::OnSFmtIPAdr. Fixed a bug in CStr::OnSScanIPAdr. CThreadQueueM was saving one too few DWORDS of a message (valid flag not counted) 11-July-09: Tested and fixed several problems with the example programs, and the fc8dev SDK. Rebuilt everything. 9-June-09: Revised dwgdb to use the latest 2.7.3 DWGDirect libraries. Added #object-id-number selection to CCmdReqPickSS multiple-entity selection function. Added autolighting to OpenGL 3d views (rendered views). Works better in perspective than in orthagonal views. 0.332 9-June-09: At end of CWinMgr constructor, Msg(MSG_SetCursor,CSR_ARROW); is processed to clean the program launch wait cursor (problem shows in setup.exe). 8-June-09: Completed /evtk/utils/msgtest0 testing, with all platforms able to build and run messaging in both 32 and 64-bit versions...However: OSX requires separate projects for 32 and 64-bit (cant be universal binary) because we have no way to make preprocessor directives different for 32 and 64 bit builds. If we can find a way to reference the architecture build setting in the preprocessor we can fix this. Linux (Fedora 10 and Fedora 10-x64) Each version can only buld the matching version, due to missing libraries in the distro. Worse, Fedora 10 x64 cannot execute a 32-bit app due to missing /lib/ld-linux.so.2 6-June-09: session settings are loaded twice - once when the session manager is created, and when CApplication sends MSG_LoadSessionData. The global pointer pAppDataEx is specified before the 2nd call, but docset.ini was processed before this, so certain session settings (inside toolbars) were not being correctly processed. MSG_LoadSessionData is now sent before ProcessIniFile is called so the named path settings are valid when docset.ini is processed. 5-June-09: invalid command entry on cmdline crashed because call cmd object for repeatable status occured before valid command object check. 3-June-09: Two windows of identical size and location caused CWinMgr::OnAdjustWinZ to hang in an infinite loop fronting each window in turn to prevent one from completely covering the other (two file open dialogs in a row for NEW). Making a 2nd recording with the audio recorder crashed. The hAudioThread handle was not cleared when the thread was destroyed, so the recorder DLL was trying to use a non-existant thread. 27-May-09: The erasing of an entity during in-place text editing caused three problems: 1 - Mouse clicks during editing (position cursor, selecting text...) ended the edit because it was treated as a click outside the entity. Fixed by unerasing during the pick test in CCmdTxEdit::OnCmdMouse (but not on screen) 2 - moving the mouse over another window, such as the toolbar, caused the edited text to disappear until a wheel zoom or keypress . Fixed by by changing rollover detect code in CWinMgr::OnMouseEvent to check hTEDNotify, and if present, to restore the cursor (after MSG_SetCurWin changed the current window, with the corresponding windo redraw) MSG_SetCurWin now returns IM_RTN_TRUE if there was a redraw, and IM_RTN_FALSE if not. 3 - Moving the mouse over another screen control in the same window also caused the text to disappear (icon bar or menu or windo max/close icons). Fixed by adding non-canvas target test for mouse message in CWinMgr::OnMouseEvent - if during in-place text edit, the cursor is redrawn. Fixed bug in in-place text edit: adding text at end, cut or paste, delete or backspace caused the text index to become invalid. Most common effect: at text at end and all arrow keys except left arrow quit working. It did cause other problems, but this is the one that was reported. 26-May-09: CCmdWriteImg was aborting when the default=file name dialog was taken, so the notify object (CCmdWriteImg) no longer existed. Fixed. 25-May-09: Add CLOSETBAR command to CCmdCmd::RunCommand. It only closes the window of the current hOverGDraw if it is a popup toolbar window. Changed the toolbar closing X icons in ui.fcdwg to use CLOSETBAR rather than CLOSEW because when the current drawing contained the toolbar object, clicking the icon would close the document window. Added MSG_CtlRecapture to CCmdScreenCap and CPopupScrnCap so that CTRL-SHIFT-C during a screen capture recaptures the screen, so we can capture images of the screen capture process. When we changed to a registered hot key, the normal direct key intercept function stopped catching this key combination. 0.331 24-May-09: Revised CGTextEdit2 (the in-place CCanvas text editor) so that the entity being edited is erased, the document is redrawn, and all editing is done as a cursor. CCanvas sends MSG_CtlDraw to the global hTEDNotify whenever a canvas is redrawn (as by a zoom) during the editing process. CFcwToolPalette, CFcwXLink, CFcwPage, CFcwGShape, CFcwBook, and CFcwPText no longer force a solid fill during editing for transparent background entities (no longer needed). Added CServices::OnScanTBarLoc to CSvcScan. Revised CGToolbar's creation code, and the format of \evtk\fastcad\rsc\fcdwg.ini and \evtk\fastnote\rsc\fcdwg.ini - the inside toolbar width and height now come from the Toolbar attribute - the defining object no longer needs a tag name = "toolbar" value = "standard". The same Toolbar attribute that define a floating toolbar defines the inside toolbars. Added MSG_FrameSides to CDrawI and MSG_GPDFrameSides to CGDraw. These functions allow the color of each side of a rectangle to be specified. It is used to frame the top title text of a tool palette on three sides only with the tool palette outline color. Cleaned up CCmdXLink and CFcwXLink so the command starts with an open dialog to locate the file, and then dynamically draws with the file icon shown while sizing the xlink. Created an icon bar for FastCAD. FastNote does not use it. Cleaned up many things in the toolbar definitions in ui.fcdwg. SHIFT pressed during program load causes the docset.ini file to be ignored. This can recover from trying to load a corrupted document. CONTROL pressed during program load causes the session.ini file to be ignored, resetting all session settings to the default values. When a file is loaded from the command line (desktop click on file icon to open it) the docset.ini file is now default saved to %UserAppData/docset.ini. This lets a file opend from an icon replace a corrupt auto-open file. 22-May-09: When a popup menu item was selected in CPopupMenuR::OnMouseEvent, hOldESC was changed after the CPopupMenuR instance was destroyed. Moved the ungrab ESCAPE to OnEndPopup to fix this. Added MSG_FSFillRect to fill an integer rectangle to all fill style IBlock handlers. Only these styles can be used for fill style backgrounds. The message always returns IM_RTN_TRUE when the function is available. Passing a NULL RECT* can be used to enquire about function availability. MSG_GPFillRect is now used in CGDraw::GPFillBkgnd and CGDrawOGL::GPFillBkgnd for background filling. This lets backgrounds draw correctly in 3d views. 21-May-09: CObjCache::OnOCFindObj - ignore unnamed items (pItem->hName == NULL). Caused a crash on image drop in beta8.fcdwg. Hot Keys did not work in FastNote because they were tested for after EnableKeyIn(). This is the new code in CCmdMgr::OnCtlKey: if(!EnableKeyIn()) { // hot keys still work even if keyin disabled (FastNote) CheckHotKey(key); return IM_RTN_NOTHING; } 20-May-09: A factory object directly dropped on the trash can caused a crash - it was trying to convert the MERGE layer on an erased object. (CCmdDrag::TryDropEnt). Removed from FastNote menu: 3d view commands, modifiers, make factory object. real-time pan. MTEXT. CXPMgr MSG_XPLoad does a full file name conversion. Use in example program to load openglsvc.xp in DLL versions by loading L"|openglsvc.xp". 17-May-09: Integrated OpenGL support through openglsvc.xp into FastCAD, but excluded it from FastNote. Fixed a bug in CIMageOGLM::OnTransfer (vertical displacement incorrect - OGL image overwrote the top menu. Added support in CGDrawOGL for MSG_GPFillBkgnd. (Enable opengl drawing by checking the rendered view box in the menu's view->zoom 3d view dialog). Added support for wireframe only value in GVIEW to openglsvc. CFcwLDim2 - end data changed - if the font oid is invalid, then fallback font object creation code was added: // 189#01-13-11site GA.FC7 does not find oidFontIB if(!hFont) { oidFontIB = (UINT)hDoc->Msg(MSG_GetCurFontId); hFont = (IGFont*)hDoc->Msg(MSG_IdxMsg,oidFontIB,MSG_FontIBGetGFont); } For the same drawing, an autocad font file present on the system does not return a valid IFont2 object pointer MSG_FMGetFM2FontHdl (Geometry handlers are currently not supporting DWG and old vector fonts). Added code to CGDraw::OnText2 to use the default font in this case. Drawing type 1 (DWG-like numerical spans) line styles are currently not implemented. in the above drawing, such styles large scale caused CGDraw::OnDPath2 lstyle draw code to not close (1e-13 rather than 0), hanging the program. Fixed. 0.330 15-May-09: Removed #REQPT2EX and $REQPT3EX - used normal $REQPT2 and $REQPT3, since the single-valued MSG_CmdDbl defaults to MSG_CmdAbort in CCmd base class. We no longer need to specifically enable this return. Added hCurCmd->Msg(MSG_CmdSetOrthoOK,true); which a command calls after creating $REQPT2 or $REQPT3 to enable ortho-locking for that command. CRcwGrid0 will use if(hDoc->Msg(MSG_IsOrthoOn)) to determine if ortho locking should be performed. Then it uses if(hCurCmd->Msg(MSG_CmdOrthoOK)) to see if ortho-lock is enabled for the current request. This is necessary, as actual ortho-locking is performed by CCanvas mouse-event processing to ensure that visual cursors reflect the current locking state. Ortho lock is currently performed after snapping if both are enabled. The CCmd base class saves and restore the prior point during a nested command. Ortho is currently enabled for non-1st points of LINE2 LINE3, COPY, and PATH2 and PATH3 type commands handled in CCmdPath3 and CCmdDynEditPath2. 0.330 posted. 13-May-09: Fixed bitmap fill style definitions in fills.fcdwg and fills2.fcdwg. They referenced #rsc\ rather than %RscPath\ to access the defining bitmap files. This was changed for OSX and Vista required installation paths compatibility in an earlier version and the files were not upgraded accordingly. Newly-added XLINK images would not be properly cached, so on reload, the image disappeared. Now, in CFcwFile::OnWinDropData, MSG_EntDataChanged is sent after the oid is assigned. Also, logic has been added to MSG_EntDataChanged processing in CFcwXLink to re-fetch and cache missing images. XGDraw never initialized LWeight to 0, so drawings that started with very small text (Alamance14.dwg) would "hang" making impossibly big wide text baselines. CGDraw::OnDArc2 missing else caused arcs to be defined as multipoly edges twice, causing bad multipoly rendering. 1-May-09: An additional event item header line now provides the ability to delete the attribute. The following event type item allows editing the event type. PTEXT data entry now ends on RETURN. SHIFT-RETURN allows for multi-paragraph text entry. (function reversed, as single-paragraph entry is more common). CAtrEvent::DoUpdColors (used by toolbar colors drop cmd icon) now properly gets/sets the fill style, line style, and line weight, as well as the line and fillcolors. 0.329 22-Apr-09: CWinMgrM: FwdDocOpen() was not using a valid app name for ::FindWindow. (It was still using L"fwk2std"). This prevented icon opening of additional documents from being forwarded to the currently running exe which is a requisite for inter-document drag and drop of entities. Apps now specify the name and #define _SPECIFIEDAPPNAME before winmain.h (or the default L"evtkwin" is used") and the specified name is passed to InitWinApp() which calls FwdDocOpen(). Resizing an XLink specified as an image-only when the in memory hImage did not exist (a .gif was specified...) caused a crash. Fixed. Screen capture did not get keystrokes (PgUp/Down, arrows, etc.) when the hot key was triggered and another application was active. Activating our app brought it it to the top, which interfered with screen capture. Added MSG_WinGetsKeystrokes to hWinMgr, which for windows called the API function SetForegroundWindow to fix this problem. GShape entities were always accepting drops. Now, only if open container flagged or if the entity has container actions assigned. (Caused some Quickstart examples to work incorrecgtly). Upgraded CMenu images in quickstart.fcdwg. 20-Apr-09: Add message MSG_MouseEnteringFrame sent to CMenuBar when it has captured the mouse and the mouse has entered the untitled window frame. CMenuBar releases the mouse capture and clears item hilights. This fixes a bug when the mouse entered another window - it was acting as if the from window were in the middle of a resize operation. CWindowM code also changed. Fix bug - drag from one doc to another, source doc now has wrong position copy. In CCmdDrag::TryDropEntExDoc, DROP_KEEP now erases hDropThis, as both the original, and the hDropXfr copies are used instead. CGFont3::Validate was using lspace directly - it is a scale factor for the text height. This caused multiline Text2 entities to be drawn with incorrect interline spacing. Also, code was using the result as a gap size rather than interline spacing (top to top). Fixed bug with GSLinks not being visible - they were dropping on the (container) GSShape. Also, the GSLink command now runs correctly from a floating toolbar (CCmdReqLinkPt allows objects in any drawing to be specified). A check is made that the final endpoint ents have the same document. 14-Apr-09: Adding window flags (WIN32) that put the system menu popup on the taskbar also disabled the normal window edge resize for untitled windows. Added CWindowM::OnFrameResize to perform our own window resize function. Also added MSG_LockFrameResize to CWinMgr to prevent this from interfering with CControl::DoWinDrag and CCmdMoveWin. 0.328 10-Apr-09: Added error testing to CDim commands - an entity must be picked, and it must be a circle. Error message if not. Also added error messages for entity pick failures for ADIMB command. Reversed print all black and print white as black in the print dialog so they would be in the same visual order as FastCAD7. Time format of minutes < 10 now includes the leading zero. Removed old cmdline tooltip when an alert is displayed. Added messages to regester and process system-wide hot keys. Registered CTRL+SHIFT+C for our screen capture. This lets us capture screen areas when FastCAD/FastNote is not the active window. Note that ALT pressed closes any open menus in normal windows programs, so it is seldom used for system-winde hot keys. Menu hotkey definitions now use CTRL+ SHIFT+ ALT+ then Fn or F1n or a single character. The notation ^C is also recognized as CTRL+C where C is any valid single character. 8-Apr-09: MSG_SetFocus, MSG_SetDirect, and MSG_SetMouseGrab now all return the prior setting. Screen capture is no longer a pass through of current content - it displays the image captured at the start of the command. This lets us properly position capture over popups and drop-down menus open at the time of capture. 7-Apr-09: CCmdCmd::RunCommand now clears any popups before running any commands. Rewrote CPopupScrnCap so that it is two clicks, not click and drag, to specify the capture window. The arrow keys can fine tune the position, and RETURN picks the point. Keys 1..9 set the magnification. PageUp and PageDown increment and decrement the magnification. CTRL-SHIFT-F2 recaptures image with the screen capture cursors visible in the captured image. The ESCAPE key aborts the screen capture. CCmdScreenCap is now a nested command, and it may be started by pressing the F2 key, which CWinMgr intercepts early so that menus and dynamic cursors may be captured. 0.327 6-Apr-09: Added quick offscreen exclusion test to CDrawI::OnDAlphaGlyph to speed up drawing text when the vierw is zoomed in. Adding WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX to the window style in CWindowM gives us appropriate taskbar menu and functionality (lclick will toggle minimize/restore) A maximized window can now cover a smaller window, and two maximized windows can be switched by using the taskbar buttons. Note that using the taskbar to bring a smaller window over a maximized one won't keep it there - a mouse move on the maximized window will bring it to the top. Printer status information is now properly updated when a different printer is selected in the print dialog box. Work continues on the CDlgEditPalColor and ui.fcdwg inherited document color palettes. SessionMgr stores prior wxh for screen capture/write image use (they share the same values). 5-Apr-09: Added MSG_DXHCsr to CDrawI for use by the screen capture control. SCREENCAP magnifier not displayed when scale is 1, XH and RBAND cursors displayed during capture. The captured image creates an IMAGE object in the current drawing, specifying origin and right-side (no rotation). Holding down shift during resizing allows repositioning the image origin. up/down keys increase/decrease magnification, and right/left keys grow/shrink the size of the magnifier. Added SCREENCAPWH command which uses a fixed size capture rectangle so that multiple images can be sized identically. The RETURN default repeats the prior size. Fixed colors of resize markers on image commands. Objects dropped from the toolbar were converted immediately from the MERGE layer, resulting in an undesired layer. The conversion is now done in TryDropEnt and TryDropEntEx, resulting in the correct current layer. Direct moves and copies does not change from the merge layer, but dropping the object on a container does. MSG_FactoryCopy was removed from CDbEntity, and is only used with CFcwFactory objects, which require special copy creation processing. Added ENTDATA_FLAGS for bit flags in a UINT. Implemented supporting code in CMetadadta, CDlgEntEdit, CStrFmt, and CStrScan. Use ENTDATA_FLAGS to support a eprops.eflags in CFcwCir2 for a factory flag. Added MSG_SetFactory and MSG_IsFactory in CDbEntity that support this factory flag, and will be used in the default case whenre an entity does not have an explicit boolean data variable. (TODO: switch all old bool vars over to this flag...) In TryDropEntExDoc, DROP_NODRAG repeats the drop on the original entity so that object commands like TXBIGGER, etc. will return a revised entity. (It was revising hDropXfr in the toolbar, and then releasing it...). Added CCmdWriteImg which write an image file (WRIMGFILE) or sends one to the clipboard (WRIMGCLIP) of selected entities on a transparent background. Revised CDrawI::OnDAlphaGlyph so that it uses ABLEND_BLENDED mode (saves and restores current setting) so that text saved with WRIMGxxx commands has proper alpha edges on a transparent background. Where no file name is specified, a CFcwImageObj EXTRACT now uses $screen.png for the default so the dialog will open in the current doc's directory. Added to CImageM/Mac/X MSG_ImgCopyAlpha, which makes a copy of an image object composited onto a specified background color. The spec color alpha sets the copy's alpha channel, but is otherwise unused. This is used to place an image on the WIN32 clipboard, which cannot handle an alpha channel, and requires it be set to 0x00! 4-Apr-09: CFcwGrid0/1/2 - nSnap is forced to 1 if the user sets it to <= 0. Added CPopupScrnCap.cpp screen capture control with magnifier. CCmdScreenCap.cpp to run the SCREENCAP command (F12). Added MSG_CompositeMode to CDrawI. Composite drawing works line this: 1 - draw the normal background or Muse MSG_ClearAlpha 2 - Send message hDraw->Msg(MSG_ImgSave); 3 - draw the image to be trimmed and composited 4 - Send message hDraw->Msg(MSG_CompositeMode,true); true swaps the front and back image buffer and sets composite mode. False clears composite mode. 5 - draw the mask (all pixels drawn will come from the back (save) buffer when in composite mode. Undrawn pixels remain untouched. 6 - Send message hDraw->Msg(MSG_CompositeMode,false); 7 - further drawing on the composited image may be performed and them transfered to the screen. Modified CMenuMgr to pick up F10, F11, and F12. But F10 and F11 are assigned on the mac And the Visual Studio Debugger uses F12 as a BREAK key. Changed SCREENCAP to use F2. 2-Apr-09: Fixed bug in fwkw.rsc (extraneous text line) that caused resource loading to abort - caused a lot of dialogs to crash. SvcTimeToData was incorrectly calculating the month for the first day of the month. hCmdRcvr now may be NULL at times (not just hidden) so every hCmdRcvr-> reference needed if(hCmdRcvr) prefix to prevent crashes. Dropping a container onto its open sublist window no longer crashes - and the drag is aborted. Mandel crashed on open - it was trying to gen a view before the canvas had been sized. Added OPENM command (alternative to SWITCH, specifies file name in script). New windows now sized at 800x500. Changed event attributes so the event type is editable - you can change a left click to a double click, etc. Modified the ui.fcdwg toolbar to use double clkicks for the links at the bottom (if one double clicked, it opened the link, and then the 2nd left click selected the link title for editing. TODO: if there is as left click event, should double-click events be ignored? Fixed the problem with WIN32 mouse grabs: OnMouseGrab was using the hwnd from the Window's image object, not the window itself; and dispatch of a grabbed mouse event goes to a control - a CWindow ignores the message. I was sending an hWindow object in malfunctioning cases. The code now finds the first Canvas control in that case. If there is no canvas, the mouse event goes to the first control in the window's sublist. Added hOverNTBDoc global, which is the last non-toolbar canvas's doc the mouse was over. Set to NULL if the specified doc is closed. This should be used by toolbar commands that need to startup knowing the document to use: LAYERDLG, CLRDLG, FONTPSHEET, DOCPROPS, etc. Since a toolbar item click also sets the current doc, These commands cannot use the current doc. It will be changed when the script command is processed. When the current command's mouse routine sets the current doc, it uses hOverNTBDoc. CDropTargetM will allow a toolbar doc, so that toolbars can be modified. Added to CDocMgr: hDoc = (IMObject*)hDocMgr->Msg(MSG_GetTargetDoc); which will return hOverNTBDoc - if NULL, it returns hCurDoc; Property dialogs should use this message, which will allow us to change the tactics if necessary. Changed for DOCPROPS FONTPSHEET LAYERDLG CCmdDelSym. Added MSG_CmdTxUpdate sent to cur cmd whenever the current cmdline input text is changed (TEXT2 cmd uses this to update its text cursor). 1-Apr-09: Work on edit color palette dialog, added document color palette IBlock. Fixed bugs in CFcwTxItem list and size of storage for alert text. When text has been entered on the command line, a RIGHT-CLICK is now interpreted as a RETURN key press, and the R.B. mernu does not pop-up. The current data being entered is processed. (A commonly-used v7 shortcut). 30-Mar-09: Added cursor clearing logic to CCmd destructor, and to CDocMgr and CFcwFile, so that toolbar cursors clear when the mouse leaves the toolbar, and had CCmd MSG_CmdDocInvalid copy the hOnlyDoc to hCmdDoc, which a lot of old logic used. (hCmdDoc is the hOverDoc at the command object creation). In CSSetEx, changed all RedrawAll to RedrawAllDocs so DYNEDIT would work. The hDoc value at CCsetEx creation is NULL now. Fixed bug in CFcwView::OnDocClearCsr (& for Dwg) if cursor was cleared, but not refreshed, neither the restore nor the transfer occured. Now the image is restored to the non-cursor image. CCmd destructor now does a refresh all at end of nested and normal commands as DRQ cmd ends do not refresh to the screen (to avoid flicker). Added MSG_TMgrAlertClose to tools manager which can close either old dialog alert, or a new ui-template alert window. ESCAPE or RIGHT-CLICK when an alert is open sends this message to the tools manager. Fixed the problem with the cmdline tooltip overlaying an alert: CCmdCmd::OnCmdRestore was restoring the current prompt and the toolbar after the alert was launched. Changed cocde to generate the circular menu: outline the wedge, gen an AA center circle outline, Added MSG_FCirAA. Sean designed a new circular menu background. Used the new MSG_ClearAlpha so that border alpha did not accumulate into a white edge. 29-Mar-09: CFcwTxItem and CText2 now do hit testing on extents, rather than just picking on underline. CFcwMText had pick test code, but MSG_EntPickTest was not being dispatched. Started revision to how commands determine what document to use. Entity creation commands should not determine doc until 1st dig pt. Then they should call Msg_CmdDocInvalid to validate doc for entity type, and specify an error if invalid. They should then use hOnlyDoc to create entities. Explicit calls to clear the cursor should be removed - the base class now clears them before any data return. CCmd saves and restores hOnlyDoc for all commands, and sets it to NULL at the creation of Nested and Normal commands. Cursors will draw in all docs if hOnlyWin = NULL, and only in the specified doc if it is non-NULL. CCmdDrag::TryDropEntExDoc now returns gDropXfr, the new local copy, and not the entity in the source doc, on DROP_KEEP or DROP_COPY. This allows proper post-processing (new from factory, clearing factory flags, etc.) and prevents wrongly changing the entity in the source doc. CGTextEdit2::OnGTextEditKey no longer uses fDataShrunk - it always sends MSG_EntDrawAll - this fixed a cursor position bug after backspace key processing. Added MSG_WMgrWaitCursor processing, and used it to display a wait cursor during files saves. 28-Mar-09: Trying to reach the 4-way cursor to move a window by its frame often was impossible. The problem was that CWinMgr::OnMouseEvent would receive endless MOUSE_LEAVE messages from the frame and keep sending them to the menu bar - essentially a DOS attack! I now clear hPriorMouse one a leave has been sent to stop this. Session data now contains a flag for InsideToolbars - when true, the old autosized (and uneditable) toolbar will be displayed. The tools manager now keeps a list of open tools. If you try to open one that is currently opened, it moves to be under the current mouse position. We were unable to drag objects out of a group because CFcwGroup::OnHitTest was not ignoring the specified hIgnore object. Fixed. Fixed a large number of bugs and issues with XLink image storage in the object cache, including removing corrupted xlinks from a drawing, and saving the cache before other entities so it will be available to their load code. Arrowheads now outline as well as fill, so their proportions should now be correct. Drag between docs is now consistent: a drag cuts obj from source doc, and CTRL-drag copys to the destination doc. UNDO/REDO will redraw all docs. Cursors that draw single-object entities now only draw in that single object view. (Revised CFcwFile::OnDocDrawCsr and CFcwFile::OnEntDraw). CGDraw::OnSetView now makes real sizes exact multiples of integer pixel size to reduce artifacts. Moved AdjustWinZ into the machine-specific CWinMgrM/Mac/X.cpp files, and implemented for WIN32: no docwin completely covers another docwin; all dialogs are above all docwins. rollovers process to these rules. 27-Mar-09: Added resource variables for alert dialog so that it can be done with a ui toolbar to have a ui-specific visual style. (ui_alert is the toolbar, ui_alert_title and ui_alert_text are the tagged text. CWinMgr now matches tags if nothing else does. Fixed bug in CFcwGShape calculating extents - to now detects when drawing a single-obj window and that it is a closed container, so it only checks its sublist in that case. Revised visual styles for start.fcdwg, beta8.fcdwg, UnicodeSamples.fcdwg, and cofes.fcdwg. CDlgFStyleSelect2 now notifies CGThumbnails to stop after a left click - a double click does NOT open an edit dialog for the fill style, when we are already closing the parent dialog. The session manager now saves the current ui doc file name in session.ini. That file is loaded at startup and remains in memory until DocMgr does an exit. It is thus available for OpenToolbar use. Made a nice alert box prototype in ui.fcdwg and integrated it so it is used to display alerts, such as a bad command message. 26-Mar-09: Changed color dialogs to display component values in hex rather than decimal although entry can be in either from. Color values are usually used in hex. Popup menus and selectors now always show the arrow cursor. The setup programs now no longer require a password. (except fc8dev, which still does). Applications specify their name before creating the app object, and the name is used to define the window class. This lets both FastCAD8 and FastNote be open at the same time, but you can no longer drag and drop between them (different exe) TODO: Implement real drag source and win drop of private data. In CGDraw, specifying the hollow fill style sets the fill color to COLOR_TRANSPARENT. Fixed a sometimes hang issue in setup (frame draw before window sized). Added messages so Setup can offset the window frame icons and have them match the title bar background color. Fixed colors in CPopupSelR2. 24-Mar-09: Added CAtrToolbar, which is added to an entity through the Actions submenu. It names the toolbar and describes the maximum size of a toolbar window when it is opened. It is created by an Action menu item NAMETOOLBAR. Added CCmdToolbar in the Tools menu. It asks for the name of a menu, finds that toolbar, and opens it. It is expected that this command will usually be run from a script that provides the toolbar name: OPENTOOLBAR;toolbarname; Modified CFcwGSShape so these objects can be used as an open container - they accept drops, draw their sublist on top of themselves, and return hit test matchess for contained objects. Added MSG_DocMakeToolbar in CFcwFile, used by CCmdToolbar. Added supporting MSG_DocMakeToolbarWin in CDocMgr, and made revisions in CFcwView, CCmd::OnHitTest to support alpha kb toolbar windows that show a single object as a canvas. Changed CCmdCmd::RunCommand CLOSEW to use hOverWin rather than getting the current window from the doc mgr. This lets toolbar icon scripts close the toolbar window. Added MOVEOBJWIN command, which moves the window under the mouse when the command is started. Use in an action script on a toolbar container to allow it to be dragged by clicking where there is no other content. Made a lot of changes to background and toolbar item colors and fill styles. Revised upper-right corner icon drawing, and they now auto-hide rather than partly clip when the window gets narrow. They are the same size as the menu bar so no text peeks through. Added open_container flag to GSShape entities. Default is closed. Added to CCmdMgr the built-in command MAINTOOLBAR which calles CCmdToolbar - OpenToolbar(pName) for the toolbar named L"main", and assigned this command to the circular menu's "cancel" icon. 0.326 23-Mar-09: Added antialiased rounded rectangle so that our buttons look better, with smooth corners. Clearned up a serious performance bug in antialiased circles and arcs. CSelSet will now properly detect picks interior to other objects, such as picking items within an open container. Removed commands from the FastNote menu that are not supported by FastNote. 21-Mar-09: Made several changes to menu organization, including removing "make one copy" since this is now easily achieved by holding down CTRL when dragging. Calendar objects now redraw entire drawing on month/year change if background fill is not opaque. Symbol references can now be containers, and they have a factory flag. If the factory flag is on, dragging them will drag a copy of their container contents. Thus, the symbol definition shows what the tool looks like, and the symref container contents determine what is created. When the factory flag is on, double clicks are ignored. When the factory flag is off, a double click will open a sublist edit window for the container. If there are no contents, an edit window for the symbol definition will open. Changed metadata listing for boolean values to yes/no rather than true/false. CGToolbar now properly displays tooltips. Switch Open and Switch Prior now maintain a 16-deep stack of prior file names used by Switch Back (RETURN), and so it functions much like a browser nav bar. Note that files opened with Open Another do not get added to the return stack. Worked on DropDown menus - they always show an arrow now, and moving left or right outside them does not dismiss them. A nested menu is dismissed by moving more than one item height above or below the submenu. A main drop down only dismisses by moving back over the top menu bar. 0.325 20-Mar-09: 2d arcs in multipolys were defining the boundary twice, which really messed up the edge join logic. Now, only draw messages define outlines, not fill messages. Repaired a buggy "Wider Paragraph Text" CFcwFactory object in ui.fcdwg. 19-Mar-09: Alamance14 displayed errors in path line style drawing. The loop termination code is now in the section that tries to load another segment from the line style evaluator, not at the top of the loop where it prevented multiple segments from being drawn to finish the path with one T segment from the evaluator. FC7 file entities that have line width (which we don't yet process) also had a fill style, so they were filling the entire area of a poly, rather than a wide outline. CFcwEntity::LoadEProps detects non-zero line widths and clears any fill style from the entity for now. 18-Mar-09: Changed CFcwBook so it determines the current page from a sequence number, rather than an object id, which was adding a lot of complexity. Made page drag/copy out of book work well. Added MAKEINDEX book object command. More work on books and pages. Added MAKEINDEX which creates an index page with links to each page in the book. Added MSG_DbMoveToFirst and MSG_DbMoveToLast to CDbObject. This is used to place index pages at the front of a book. It will also be used by FRONT and BACK commands. 17-Mar-09: Added TXTAG command and support in CFcwTxItem. Searches up the parent chain until an entity responds to MSG_EntGetTagValue or has a tag attribute with that name. Used to display page and book titles and page numbers. 16-Mar-09: Modified new workbook template file name default to be $work.fcdwg, so it will be created in the same directory as the current document, by default. Implemented relative (@) tracking support. CGDrawGeo::GPFRect also was always drawing the outline. Now, requires separate call to GPDRect. Fixed several issues with resize handle visibility. CAtrEvent::OnDoAction - for CAtrEvent::OnDoAction: if the attribute owner does not run the object script, it is sent to it's parent, etc. until it is run or the object has no parent (DbMasterList). Revised most entities OnScriptText, as they were not returning the true/false result - was the script executed. This is necessary for object scripts to find the parent that should perform the script. Extensive work on new CFcwBook and CFcwPage objects and the CCmdPage.cpp commands. 14-Mar-09: Added audio Recorder dialog - allows recording and playing .wav files saved to memory. Commands a RECORDSOUND, PLAYSOUND, STOPSOUND. RECORDSOUNT (in the Tools menu) opens the record/play dialog. 13-Mar-09: Changed CDynTrack and CCmdDimL2 to use WMgr rather than Sys for Shift and Ctrl key state (Sys versions are internal communication - Apple only provides this in the window manager, not in a command-line program). Added EPTS, MIDS, %S modifiers to CCmdReqMod. In GetInfoLine2 made these identities: EGET_EPTS = EGET_END, EGET_MIDS = EGET_MID, EGET_TP3S = EGET_TP3, and EGET_PT3S = EGET_PT3 No other segment modifier supported has yet been added. Implemented DIMAB command (angle between two entities) tangents at pick point are used to calc arc center. Nearest EPTS is used to determine leader endpoints. 12-Mar-09: Added CCmdADim2.cpp - DIMAQ command is implemented: center, l0 pt, l1 pt, pt on dimarc. Added MMSvc - multimedia service, to play sounds. Currently implemented for WIN32 only. Both fastcad and fastnote support it. Added CCmdPlaySound to play a .wav file. Separated fastcad (5) and fastnote (2) menus. FastNote now uses fastnote.mnu for its menus, to assist in product differentiation. 0.324: 11-Mar-09: Added ^A and double-click to CEditCtl to select all. Delimiting TAB and RETURN keys now return true - key used. *** Revised so RETURN key sends MSG_ReqDlgEnd. REMOVED. This caused setup to fail, as most people used RETURN rather than TAB to end filed entry. Wrote EnumGeo code for CFcwADim2. Revised CStrFmt::OnFmtDblEx to use f rather than g field type code (use # dec pl, not # significant digits). 10-Mar-09: Extensive work on 3rd party XP developer toolkit and documentation. 8-Mar-09: Undo/Redo now works when Creating text item entities (current date, time, file name). SWLAYER now properly shows the layer name prompt. It always shows Merge, STANDARD, Tools, and the new current layer (switched to) and hides all others. All alert messages send to CCmdMgr now display in a popup alert dialog rather than on the translucent command line, which many things can cause to stop displaying. The alert may be closed by pressing ESC or clicking on its close "x" button. FIXED: The Delete key in the in-place text editor would not delete the last character. 7-Mar-09: Added Folder graphic shape and GSFOLDER command. Added Firefox bookmark folder drag and drop: Drag a folder from the bookmarks list in FireFox, and it creates a folder as a container with the correct title, and it contains an XLink for each item in that bookmark folder. Add OPENALL to GSShape's right-button menu - it will open all document and URL links of entities contained in the entity sublist. This lets a folder be a set of documents or URLs to open as a group. 1-Mar-09: Peter changed CCmdArcB to use metadata and use the INS key to toggle which arc part of the circle is used. Added CFcwADim2. Moved GLDIM2 and GCDIM2 from FwkGeo.h into the entity objects - they are not shared geometry, but private to the specific entity implementation. Draw not yet implemented. Added CFcwSheet.cpp - currently acts much like a group. Needs integration into CDbEnumObj.cpp. Added message MSG_DbAskIsSheet for CDbEnumObj to ask entity. Revised code in OnEntSize in CFcwLDim2 and CFcwCDim2 to correctly handle v7/v8 size differences. Revised linux makefiles to use a shared ../libobjs files so there is only one objects list for each project. Changed: fwkc, fwkw, fwke, fcwdb, dwgdb, cadcmds, fcwcmds. 0.323 27-Feb-09: Peter added CCmdLDim2.cpp to cadcmds with empty stub generated from CMDWIZARD. Peter updated draw logic from ET_LDIM2 Peter added PConv overloaded function to use a GPOINT2* as base point. Finished work integrating the visual bit-edit into CDlgLSEditBitPattern and added byte reversal and gray no-change bit mask ooptions into CCtlEdBits. Set LWeight=0 for in-place edit frames on CFcwGShape and CFcwToolPalette. 2d Arc list incorrectly labeled arc width as ending angle. PTEXT shows a green outline if there is no text, to ensure it's visibility. This color change is now only made if there would not otherwise be a frame drawn (outline is off). Double click on tool palette object in header does in-place edit, but now doulbe click on rest of it opens sublist edit window as is normal for containers. Added CControl::DoWinDrag(MOUSEPKT*) so that it is easy to allow parts of controls to drag their containing window. This is now implemented for dialog title bars. Also implemented for drag by menu bar when over no item. If you move the mouse too quickly out of the window, it looses drag, as Win32 no longer lets mouse grab get messages when outside a window. (Investigate if our windows are considered a "background window" by MSWin). Can go back to title bar and click in it again to resume drag if its lost. Peter added DIML, DIMV, DIMR, and DIMP commands. I added them to the menu. Removed mac's replacement for © (the ? diamond) in the code generation constants in CCmdWizard.cpp - it was causing the files to save as Unicode, which the mac choked on - vs2008 worked with fine. fixed bug in bulge arcs: needed to remove negative arc widths in Calc3PtArc2 because integer AA arc draw can not handle them. Added code to stop arc antialiasing when AA is disabled. ESC key now clears the cmdline answer buffer and CmdRcvr display. 26-Feb-09: Fixed bug in CIRD, CIRR, and ARCR commands. Problem was that CCmdReqDist needed to use $REQPT2EX to return single values. (this is necessary for 3d to force single value return rather than depth mode value...) TODO: I think this is fuzzy thinking - single value should rtn only for state 0 data entry. - State 1 is always depth mode. Fixed bug in space as command delimiter: CCmdCmd::RunCommand now clears the flag, so layers with spaces, etc, will input correctly. Set by hCurCmd == hBaseCmd in CCmdMgr OnCtlKey. Peter added file CCmdCDim2.cpp to cadcmds with the user commands DIMR, DIMD, DIMRI and DIMDI. The xxxI versions are to do internal dimensions with visual feedback. Peter added hTempEnt = NULL after hTempEnt->Release(); in CCmdCalendar, CCmdFileLink, CCmdPText. Peter fixed code generation issues in CMDWIZARD. Peter added set and get for ENTDATA_DSTY in CMetadata.cpp Added cdim commands to menu. Fixed a bug in CWinMgrM, the FwdDocOpen() function had no-longer valid code to parse the command line parameters. This caused a 2nd doc opened from a desktop icon to not use the same copy of FastCAD, but rather one of its own. This prevented entitry drag and drop between such documents. 25-Feb-09: Fixed grid draw: if last entity drawn had a line style, the grid was drawn with that line style. Grid draw now clears the current line style. Entity detail edit opened a selector dialog and saved its handle for close notification - but the MSG_MakeXXXSelectormessage processing was not returning the handle from its internal selector dialog creation, causing the selector to remain open when the detail edit dialog was closed. The selector would then crash when it was eventually closed (trying to notify its non-existant owner). Fixed loss of 4-way cursor at top edge for moving a window. CWinMgr::OnSetCursor had no n== for the if(n == CSR_OPTIONAL) test. Node list entities EPT modifier always picked the t=1 endpoint. It now picks the closest endpoint (t<0.5 or not). Peter added HOME and END keys to DYNEDIT of paths. They will jump to the first or last node and activate insert mode to add more nodes. Peter changed the EGET_P3T method for 2d arcs so it returns both negative and positive values like v7 did. Modified CGDraw::OnImageRotate to handle a CTM that is not an identity. Under rotation, the image would "squish", as the integer conversion of width and height also rotated. Revised CFcwImage draw code so the image would rotate with a CTM rather than "ferris wheeling". // TODO: Needs to handle obj in db after hOverObj that partly covers hOverObj // and which would not pick when the mouse moves over it directly from hOverObj. // Also, hOverObj can sometimes point to a deleted object - how? Need to fix this. // // Added optimization to CCmd::OnEntOpHitTest: first tests prior hOverObj if it // is not NULL. This is much faster than a full database test, and is a likely case. // Result is to greatly reduce attach and modifier tracking flicker. Add EGET_SEGNR to GetInfoNList2/3 to return the edge number (0..nNodes-1) Added split support to CFcwPath2 to support split and break. Arc2 attach cen changed to attach mid as center would never be selected. Cleared fill style when hilighting an entity, in CFcwEntity::EnumUseProps. This fixed a bug where hilighting was lost on zoom during pick if the last entity had as fill style. Added to CTooltip that its destructor sets hDeletedWin, and sets hTTip=NULL and FwkWndProc now ignores messages when hDeletedWin == hMsgWin. CWindowM constructor clears hDeletedWin. This is to try and catch the crash when a tooltip is closed just as it is created, and the MOUSE_TRACKUP event is (wrongly) processed on a closed tooltip window. Restored: SHIFT left click (was CTRL left click) now forces an object drag rather than its assigned action or factory. TODO: If this is done in a toolbar, the toolbar is not redrawn, so it looks like nothing changed, but the object has been moved, and may be non-functional. This works fine in quickstart where the items are in the same main draw list. TODO: how to start multi-select when over a large filled poly, circle, etc? Added CDlgLSEditBitPattern to edit bit pattern line style data. This is functional except it does not yet have the visual bit display/set control used in v7. Peter implemented the rest of the draw logic for CFcwCDim2. TODO: The MSG_FMExBox2 message does not return a perfect bounding box. TODO: Change implementation of MSG_SFmtDblEx to our own version. 24-Feb-09: // undone on 25-feb-09: // SHIFT left click (was CTRL left click) now forces the multi-entity selection // process even if over an object. This is consistent with SHIFT-right click // bringing up the circular menu even if the mouse is over an existing object. CTRL left down starts a drag with automatic copy (similar to MakeOneCopy, not a factory copy). Added commands for text items: current date, time, and file name, with a dynamic cursor that shows the actual text while locating it. The % modifier is now relative to the end of the curve closest to the entity pick point. EGET_P3T and EGET_TP3 always range over the entire entity 0..1 linear with length. EGET_SP3 and EGET_P3S range 0..EGET_TMAX and is not necessaarily linear with length (in paths, it ranges 0..nNodes-1, and is thus non-linear like a NURB - its parameterization space is greater on small segments than on large, but helps with node identification. Added thumbnail display of line styles and their names in the Line Style property sheet page of the DOCPROPS dialog. Clicking on the desired style does make it current (but it does not yet update entities under construction). Also added CDlgLStyleSelect2 which uses visual line style thumbnails for selection in entity detail edit. Added new MSG_GPDrawQText that draws simple text at a location, of a given height, in the currently selected font. Use this in the style label in the line style dialog. Peter added Dist2PtsSq which does not do the square root. Using this speeds code that only needs to pick the closest point among a set of points to a given location. Peter worked on implementing the CFcwCDim2 entity object. (not yet completed). 0.322 23-Feb-09: Add EGET_TP3 to 2d path/poly support in GetInfo.cpp. Peter added EGET_P3T to 2d path/poly support in GetInfo.cpp. This currently uses NPOnL2 as does v7 code. It does have segment bounds limiting. Peter's DYNEDIT for paths/polys: <- and -> move from node to node, left click changes node location. Ins key toggles insert/edit node position. Inside the path, it adds in the direction of the last -> or <- key (and these keys will change the add direction) for easy mid-path insertion of detail. The @ prior point is updated as the edit progresses. DEL will delete the current node. UNDO/REDO ^Z ^Y affect node changes. The path and poly creation commands also use this, so you can do on-the-fly editing while creating these entities. Path/poly create works the same except no <- -> or mode changes, etc. Added EGET_LEN to path2/3 and added LengthPath2 and LengthPath3 functions to MathSubs.cpp. These are needed to support path/poly line style drawing. Implemented line-style draw support for 2d paths and polygons. 2d Circles and Arcs are converted to paths and drawn if they have a line style assigned. Peter added SwapPt2 and SwapPt3 in MathSubs.cpp Added CFcwTxItem.cpp, which supports the v7 current date, time, and file name text items. Peter moved StartCmdPath2 and StartCmdPoly2 from fcwcmds to fwke as they use the dynedit path code. posted 0.322. 22-Feb-09: Peter added file CCmdDynEditLine2.cpp with DYNEDIT for 2d lines. Peter moved logic from Move, Copy and Stretch into CSSetEx. Peter added dynamic cursor to the break command using CSSetEx. Peter fixed typo in IMObject.h (MSGPARMVPTR was misspelled for OS64) Fixed bug in script stack overflow when using stepwise UNDO - the existing script was not removed from the stack when the last character was used, but rather when an attempt was made to read the EOS character. Added MSG_SPeekChr() IStr function to assist in this. Added NPOnL3 to mathsubs and used it and NPOnL2 in 2d and 3d line EGET_ON function. This fixed some bugs in break. Added dotted-line drawing support to IDraw and IGDraw and used it with the SAMEX/Y/Z modifiers to show the actual point's relatiionship to the point that would be returned by the modifier during cursor draw. Changed $REQPICK1 to return MSG_CmdBreak when no entity is selected. Added support for PRL, PRP, BRNG, and ANG modifiers and angular constraint processing. EGET_ON no longer imposes "on the entity" limits, so that it may be used to extend and entity beyond its endpoints, like v6 and v7. Peter added CCmdMirror.cpp with MIRROR and MIRCPY commands. Peter added more logic to CMDWIZARD 21-Feb-09: Added support in CMetadata ENTDATA_UINT, ENT, USHORT, SHORT, CHAR and UCHAR. Revised attach marking so that the ON attach marker shows in blue, and disappears when one of the other attach points would be picked by a click at the current cursor position, making it easy to determine if you will get an EPT, MID, or ON point. Added SPLIT and BREAK commands. (Requires entity MSG_EntSplit support - only 2d lines, circles, and arcs have this currently). Peter removed the files CCmdPSpline.cpp, CCmdPSPoly.cpp, CCmdSpline2.cpp and CCmdSPoly.cpp. The commands are now in CCmdPath2.cpp. All commands in CCmdPath2.cpp support mid command undo/redo and uses metadata. CCmdPath3.cpp was replaced with a converted version of CCmdPath2.cpp. This adds mid command undo and metadata. The files CCmdPoly3.cpp, CCmdSpline3.cpp and CCmdSPoly3.cpp were removed. Peter added new commands PSPLINE3 and PSPOLY3. Changed the smtype member in GSPLINE2 and GSPLINE3 to UINT (was UCHAR) to improve speed. Fixed bug in meta data enumeration for smtype. Peter fixed bug in CFcwSPoly3::OnEnumGeo if the extents were invalid. Peter added files CCmdDynEdit.cpp and CCmdDynEditPath2.cpp 20-Feb-09: Peter changed the CDynTrak it now: - owns the options dialog. The global hDynTrak was removed. - has a dialog with options - support arrow keys (up/down scale by 1.4, left/right rotate by the snap angle - the angle snap is conrtolled by the options in the dialog. - uses pOverPt2NS to calculate the rotation (will work better in 3D) The settings still needs to be saved between sessions. Peter added support for messages MSG_DlgSetTitle, MSG_ReqDlgEnd and MSG_DlgHSetNotify in CDlgFile2 so the PART command can close the file dialog if the command is canceled. PART also uses the Group parts on insertion flag on the DynTrak dialog. Peter changed the array commands to have a non-modal dialog. The dialog can be kept open to change the number of rows/columns at any time during the command. It is also possible to use the prompts instead of the dialog Added CSelSetEx edit command helper object shell (no real implementation yet) and CCmdSplit (partial implementation) and IEntity messages to support these and dynedit operations to avoid extra full rebuilds. 16-Feb-09: The current command line buffer is cleared when any script is queued, so that menu scripts, etc. don't concatenate with typed in input: "Angle: 45UNDO" The script mgr sends MSG_ScriptStart to pCmdMgr. The menu undo/redo commands have had the | removed, so they can be used to specify stepwise undo/redo. Command keyboard/script names now accept space as well as RETURN as a delimiter. Note this does not apply to expressions, so point coordinates, etc. still must use RETURN as a delimiter (this restriction is so we can do expressions and macro variable substitutions). (changed CCmdMgr::OnCtlKey). Peter added CDlgCopyArray.cpp with a dialog to ask for cols/rows and spokes/rings in the array commands. Peter added support for MSG_CmdUndo to go back one state in the array commands. Fix bug in multiple entity select: unselecting (shift pick) a filled entity that has a transparent fill color did not unhilight, as it overwrote the hilighted version of itself with a transparent-filled version, leaving the hilight visible. Unselect now foreces a redraw all operation. Arrow cursors changed to edge grow cursors when the mouse moved outside a window Now, they are set to CSR_OPTIONAL by CCanvas when the mouse moves over a canvas. Individual command cursor processing can override this. Currently, CSR_OPTIONAL always defaults to CSR_ARROW. NESTED commands now save and restore the prior point (REF point used by @, etc.). Added new messages and flags to CDbObject: OFTEMPFLAG for shared use, and OFVISREF flag to indicate an entity is currently being used for a visual refrence (currently causes translucent draw). Peter added IDynTrak.h to fwke\sdk. Redesigned the DynTrak object and its messages. 15-Feb-09: Added MSG_CmdUndo and MSG_CmdRedo so that commands can implement stepwise undo/redo. The base CCmd object aborts all running commands and performs the normal database undo/redo. Fixed a bug in CWindowM's FwkWndProc that vectored wheel and keystroke messages to the last window - when overridden to hOverMouseWin, and hOverMouseWin was a window, such as a tooltip, in the process of closing. The check with hLastDelWin was located incorrectly in the code. Implemented LS_PAT line style drawing for 2d line entities. Revised CFcwLStyle0 & 1, CFcwLStyleTbl, and CGDrawGeo. Supports proper merge of line style IBlocks when a styled line is dragged from another document. Peter added CDynTrak.cpp and CDlgDynTrak.cpp which implements dynamic tracking (rotate and scale on the fly). The SHIFT and SHIFT+CTRL rotates, CTRL will scale and INS will bring up a non-modal dialog. The handle for the dialog is hDynTrakDlg in the global pointers table. The rotate is implemented differently than v7. Scaling is implemented in the same way, but is less sensitive. Peter added DynTrak support to CCmdReqPt2 and CCmdReqPt3. Peter has added dynamic cursor and tracking to the COPY command and changed the PART command to UNDO one entity at a time. Peter has made pPrior (the reference point) in CCmdRcvr initialize to 0,0,0. Peter added the MSG_GetPriorCmd message to the CCmd base class to get the hPriorCmd command. Peter changed CEditCtl::OnEdSetBrng to use SFormat to show angle 0.321 14-Feb-09: Peter added CCmdPart.cpp with a basic implementation of PART. DynTrak still needs to be added. Implemented menu-based hot keys: If the display text for a menu item ends with a TAB, the keys following and before the next comma specify a hot key for that menu item. ^A thru ^Z for control keys, and F1..F9, SF1..SF9, and CSF1..CFS9 are the currently-implemented abreviations. These keys are defined and displayed in the main menu. They do not work for items in an object-specific popup menu, as there is no way to associate the key with a specific object. Note that traditionally in windows, F1 is associated with HELP. This is not required, but is recommended for consistency. Files changed: FCW.MNU, CPopupMenuD, CMenuMgr, CCmdMgr. 13-Feb-09: Added $REQPT2EX and $REQPT3EX which will return single values with MSG_CmdDbl. Added all data receive messages to CCmd as aliases to MSG_CmdAbort if a data type is returned to which the command does not respond. Peter implemented the SFormat logic for angles ('a' and 'b') to display angle in degress with the ° sign. Peter implemented the CARY and CARYM commands. CARYM will always ask all prompts for consistency in a macro. Peter made the nFilter a global static variable. It used to be a local variable in the CCmdImage constructor that would go out of scope. By being static the variable will remember the filter type will be remembered between commands. Added CCmdReqMod.cpp with point modifier support in CCmdReqPt2/3 and dynamic marking of the attach point when moving over entities to pick the entity to which the modifier will be applied. So far, the following modifiers have been coded (although entity object support is very incomplete at this time): EPT MID CEN ORG ON DIST DIST0 DIST1 DEG SAMEX SAMEY SAMEZ. CCmdReq1 revised to use MSG_EntHitHest in CCmd rather than just using CGPick. This allows for a wider veriety of "over" entity selection (filled polys, circles, etc.). Peter added PARY, CPARY and CPARYM commands. 12-Feb-09: Added MSG_SSetNrItems to selection sets, and had REQPICKSS return MSG_CmdBreak if the selection set is empty (MSG_CmdAbort returned if the user aborted the selection explicitly). Added MSG_DbMLRollbackUndo to hDbMasterList for use in command abort processes. It undoes database changes to the last MSG_DbMarkUndo, and purges everything since so that there will not be a null event to be undone - the next UNDO command will undo the operation befor the rolled-back operation, and a REDO would do nothing. Added CCmdStretch quick stretch command that requires just 3 points: two to specify the pick points window, and a 3rd that is the stretch delta from the 2nd window point. Data is stretched dynamically as the mouse is moved. Peter implemented the REPEAT command with dynamic display of all array instances as the spacing delta point is specified. This makes it much easier to determine an appropriate array delta. Peter started work on CDlgCmdWizard which will build a prototype command object's source file, given a table specification of the input pattern. This should speed up implementing command objects. 11-Feb-09: Fixed bug with datagrid scroll positioning when closing an expanded item eliminates the need for a scroll bar - it now properly resets the top to item 0 when eliminating the scroll bar. Added new simplified iteration MSG_SSetEnumObj allowing while loop processing of selection sets. Added new CCmdMetadata.cpp and CDlgMetadata.cpp that will display the metadata definitions for a selected entity as a programmer's tool. It is invoked with the command "METADATA" and is not in the menu. Added cut/copy/paste support to CEditCtl. 8-Feb-09: When a new object is created from a factory by drag/drop, it is initially offset to enhance visibility of the copy. This amount is now the current grid snap delta, so that the resulting copy will be grid aligned if snap is on or if the original object was grid aligned. (change is in CCmdDrag::OnEntDragStart). Setup cadcmds xp module that contains commands that are not in FastNote. Implemented RESNAP command in that module for testing. Added new BOOK and PAGE objects - book essentially duplicate the page object now - it is not really implemented yet. Added CCmdPage.cpp which creates both objects. 7-Feb-09: Moved build date to CXPMgr message, and constant to fwkc.h where it will update more often. Added MSG_FwkCopyright to CXPMgr so that the framework copyright string will be built into all binarys for legal reasons. At the command prompt, CTRL-LeftClick will always start the default left click action, which currently is the Left Button popup menu (erase/drag/drop/continue). even if the mouse is over an entity. This lets multiple selection be initiated when no unoccupied screen space is visible in the window. This starts at CCmdCmd::StartDfltLeftClick. Merged CCmdReqPickM into CmdReqPickSS so there is only one source for pick logic. Revised each and window picks so that items contained within tool palettes can be picked (any ent that returns MSG_AskPickTestSL true, indicating that the entity is an open container). Removed CCmdReqPickM.cpp from the projects. SHIFT-double click on a CFcwFactory entity now opens its sublist for editing. The MakeFactory command no longer asks for a 3rd parameter (position) as factory objects can now easily be moved by SHIFT-dragging them. The prototype entity is now transformed on factory instance creation so that the prototype entity's EGET_ORG point is mapped to the current mouse point that is current when the instance is created. 0.320 6-Feb-09: Fixed the OSX bug with drawing a full drop-down menu before the opening animation, creating a visual "jerk". This was in addition to the bug fixed 4-Feb-09. Refresh2 is locked out from MSG_WinContent until MSG_AnimateStart, and fNeedRedraw is cleared by MSG_WinContent. CFcwCalendar::OnDropRcv now assigns an entity id when creating a day data list. Without it, opening the day's single-object window and trying to edit operated on the calendar rather than the item in the day data list. 4-Feb-09: Added clear to transparent at end of NSG_GetContent processing in CWindowM/Mac/X so that a refresh would not cause the full menu to be drawn before the opening animation. This was caused by the CMenuBar redraw at the end of triggering the dropdown, and the refresh to put the alpha window over that. CMandelFile - hDraw now obtained from hCanvas on view draw, as that now occurs before the resize message arrives... 3-Feb-09: 24-Jan-09 fix to CWinMgr::OnFindADocWindow caused the last created window to become topmost when a left-click closed a popup, rather than the one directly under the popup in the Z-order. This not only brought the wrong window to the top, it could result in loss of an entity under the mouse in the correct document. Now, our doc files are scanned in Z-order, and the topmost of them is restored. TODO: need Z-order scan logic for OSX and Linux. Because Win32-specific code was added in CWinMgr::OnFindADocWindow, this function has been moved to CWinMgrM/X/Mac. Reorganized metadata for CFcwToolPalette to a more logical order, and fixed duplication of text height, and changed to use the text color presented in the metadata (text was being drawn in the line color). hdrheight is a calculated value, so it now has the MDF_ALIAS flag set. Modified CMetaData to add parameter fWantAlias - if false, alias items are not included in metadata. This currently causes ENTDATA_IMAGE data to not be displayed in all UI datagrids, as the data is meaningless to users - it is a programming object only that holds the actual image. It is accessed through MDMObjSetData and MDMObjGetData. CColorsPSPage was releasing the name string for the background fill style, which caused a crash later when it was re-released when the drawing was closed. 0.319 2-Feb-09: Fixed font merge when importing entities that use fonts from an external document: PText, MText, Text2, Calendar, GSShape, XLink, Tool Palette. Fixed an OSX bug when using in-place text editing: mouse clicks and selection did not work. The TXIXLOC structure array in CTxIndex was defined as items of the TXINLOC structure, but specified item alignment to (int). The structure on OSX is 30-bytes, due to WCHAR being a UINT on Linux/OSX, and a USHORT on windows, so a TXINLOC pointer ++ scan did not stay within proper alignment with the index data. Fixed OSX copy/paste bug. The OSX clipboard represents text in the same size as CFStrings - 2 bytes. Code represents string literals L"text" as 4 bytes per character, so we use that on OSX and Linux to support string literals without conversion. We needed to convert character strings for cut/copy/paste to reconcile these differences. (TODO: handle character values > 0xffff extended Unicode page characters to UTF-16 and back to UTF-32 encoding). CFcwFile::OnWinDropData now calls hFileName->SCvtWebToFileName(); to change web encoding to normal text strings before trying to load image files. (space = %20, etc.). Revised to detect URL's that start with "file:" as file references and not web URLs. Data grid controls now automatically resize the last column to fit the control extents unless that would shrink the control to < 60 pixels wide. This lets it adapt to autosizing definitions in a dialog and grow and shrink with window resizing. 1-Feb-09: 0.318: 30-Jan-09: Fixed a bug in BiDi text editing. Text that has CRLF line delimiters don't work with CGTextEdit2.cpp - They are now converted to our standard LF-only line delimiters for editing. On windows only, eol delimiters are converted to CRLF for cut/copy operations. Paste always converts to LF-only delimiters. Implemented first character of command entry hot key translation: ^O open ^S save ^A save as ^P print ^Z undo ^Y redo 29-Jan-09: Fixed duplication of container actions in XLink entity's CVT2IMAGE command. Added SWITCHPRIOR command to file menu - makes it easy to look at the .prior or restore to it in event of a problem. Data grid controls, such as used in entity edit and DOCPROPS dialogs, now honor TAB and SHIFT-TAB to select next and prior items for editing. 28-Jan-09: Fixed: CColorsPSPage crashed on open when its document has no background fill style. Circle fill was using smooth fill when there was a fill style - now it checks and uses normal poly fill if there is an assigned style. Added line weight = 0 specification to all fill and line style thumbnail sample draw functions. Dialogs to select/edit these were hanging. Double-click in DGrid edit or in-place geometry edit is now a select all command (function = KEY_SELALL). 27-Jan-09: The transparent button, and the color palette selector in CDlgColorSelect (used for color changes in CDlgEntEdit) now directly exists the selector, returning the selected color. To modify a palette color, return it, and then re-edit using the sliders or channel value edit controls - since this is much less common, I decided to make the common case easier. Changed CCmdMgr::OnCkNestedCmd ADDVIEW (menu command) to open new view as GDV_2D rather than as a 3d GDV_TOP, so the arc and circle smoothing rasterization works as the default. Also put this change in CFcwFile::OnOpenDoc. 26-Jan-09: Added new code for very good looking (but slower) antialiased circles with or without width to CDrawGeoI::OnDWCir. Added HALFPLANE structure, setup and test functions to assist in wide smooth arc code implementation. Wrote a new wide arc function, derived from the wide circle algorithm and using two half-plane tests to determine if a point is on the arc. Results are smooth. 25-Jan-09: Specified LWeight=0 before drawing grids, so that grids would not use line weight of last drawn entity. Added path close logic to handle polygon outlines in CDrawI::OnDWPath. Added outline draw with antialiasing to OnDWPath so that diagonal wide lines look much better. Added integer rounding to side vector calculation to provide more uniform line widths on skew lines. Added CDrawI::OnDWCir to draw wide circles as a multipoly between two optimized integer-generated circles. Max of 720 lines segments due to 3600-entry integer sin/cos table. Normal multisegment approximation path used for radius > 600 pixels. Added CDrawI::OnDElip to draw ellipses with a best-fit per pixel DDA. Modified CGDraw::OnDElip2() to use this when both radii are < 600 pixels and the ellipse has no inclination. Improves the appearance of ellipses. 0.317: 24-Jan-09: Made several commands nestable: DOCPROPS, ADDVIEW, FONTPSPAGE. Fixed CColorsPSPage so it updates the current command for color changes to support use as a nested command. Multipolies now just draw their content in an open single-object window (dblclick editing contents) rather than the multipoly itself - it helps when editing the multipoly. When a window is closed, another document or dialog window is now automatically activated so that mouse wheel and keystrokes continue to be received and processed without further delay. [how: Added CWinMgr::OnFindADocWindow() and used it when no window was specified in a call to CWinMgr::OnWinActivate().] Quitting the program by closing all windows while running an entity creation command caused a crash when deleting hTempEnt. CCmd::~CCmd now checks if currently shutting down before deleting hTempEnt, as it has already been deleted at that point in time. Revised db version to load/save eprops.lweight value, and added basic drawing support for lines and paths specifying line weight. Revised metadata so it can be edited in entity properties, and added current line weight display and edit to the DOCPROPS line style PSPage. 23-Jan-09: Fixed bugs in Wu Antialiasing code (err term inverted .vs. alpha blending value). Added session data switch for antialiasing so users can turn it on or off. Fully tested and fixed bugs in new OnDArc code. Added cleanup code to CGDraw::OnMPFill - removes duplicate nodes within a single loop, and adds a closing node to each loop if the loop does not close. This fixed several multipoly fill errors. Fixed bug when merging layer, font, LStyle and FStyle iblocks when an entity is dragged to a drawing that does not halready have a matching-named iblock. The correct object id was not always mapped. (old code used pointer to style data, which had different strcuture for different styles). Wrote CDrawI::DWPath to draw a wide path - the basic support for pen thickness drawing. UI not available yet (work in progress). 22-Jan-09: Revised several files to add EPROPS.lstyle line style object id and the infrastructure to support this property. This work does not yet enable line-style drawing, but it does provide all of the support, metadata, listing, and load/save support necessary before implementing line style drawing can begin. Line width (pixels) and thickness (geometric scaling) are now parameters of a line style rather than a property of each entity. This reduces file size and memory usage, and improves draw speed for the majority of entities that are drawn with solid 1px width 0.0 thickness. Right-button entity popup menus now show a check mark by the factory item if the entity is currently a factory object. Added Wu antialiasing for lines and path segments to CDrawI::OnDLineP(), which is used to draw most geometry line segments. In CFcwView, I changed the load and save initial default view from GDV_TOP to GDV_2D so that smooth integer circle functions will be used for circles with a radius of <600 pixels. This is in preparation for adding antialiased integer circles. Reworked CDrawI::OnDCir() for better smoothness and no repeated pixel drawing (which creates artifacts when the circle has a non-solid alpha value). CGDraw now uses CDrawI::OnDCir() to draw circles with radius < 600 for better appearance. Revised OnDArc() to use a DDA algorithm similar to the one used for circles, to provide better visual smoothness. Revised CGDraw to use CDrawI::OnDArc() to draw arcs with radius < 600 for better appearance. 21-Jan-09: CGToolbar was type CTRL_CANVAS, changed to MSG_DbOType:return (void*)((UINT)FWK_CTRLCLASS+CTRL_GTOOLBAR as it was detected as a window's canvas for ZWIN and other zoom commands (hDocMgr->Msg(MSG_CurCanvas) returned the CGToolbar ratherh than the window's canvas, so many commands failed or crashed. 0.316 21-Jan-09: Fixed a bug in Linux version mislocating dropdown and popup windows - dev.org set incorrectly by XGetGeometry in Expose event - ConfigureNotify event sets it correctly. 20-Jan-09: Added MAKECONTAINER event command to CAtrEvent and MakeContainer icon and drop command to ui.fcdwg. Drop an entity on this icon and the entity becomes a container. Added CDbEntity::OnEntAppendSL which copies the sublist of one entity to another with flags for both entities and attribute selection. Added Cvt to Image to the right-button popup menu for XLink entities. This will convert it from an XLink to an Image entity, copying its sublist and attributes, if any. (Images can rotate, and can have no outline, and can be extracted to a file). Fixed crash editing gradient definitions - MSG_Data2Text needed data address, not value, for enumeration data types. Fixed several crash bugs when editing an image file. Added a pixel cursor and DOCPROPS to CImgFile. Added message MSG_DocSpecificCmd so that different types of documents can have their own specific versions of commands with the same name as generally registered commands. Added a LINE draw command for images, as the start of general drawing capabilities for image files, and a single-step UNDO for PAINT operations. Renamed the File menu OPEN command to "Open Another" and SWITCH to "Switch Open" Fixed some bugs in the image overlay command caused by changes in CDrawI/CImage? implementation (image copy/copy at moved from CImage to CDraw). Added "bird.png" as as small alpha-transparency sample file. SymRefs when double-clicked now check if they have a sublist - if so, then double-clicking will open thesublist window, if not, it opens the definition's window. Multipolys cannot be containers because their sublist contains the defining shape entities. WORKAROUND: Make it into a symbol enables its symref to be a container. Fixed a bug in GSLink entities: they did not process Drop Send properly, so they would not erase or change properties by dropping on a toolbar icon. 0.315 18-Jan-09: When a desktop shortcut (WIN32) opens a file in FastCAD, if there is already an instance of fastcad.exe running, the open is forwarded to it using WM_COPYDATA for IPC, and the newly-started instance aborts. This allows efficient drag and drop between such differently-launched drawings. Changed broken link to peabody01.tif in demo.fcdwg Fixed crash when opening a non-existent image file (create new) - change to CImgDb::OnMakeCanvas parameters needed CImgFile::OnDlgEnd() to define hImage and hImgDraw before sending MSG_MakeCanvas to hImgDb. Fixed ui.fcdwg broken link to quickstart - in %Documents not \fastcad8\data 17-Jan-08: Fixed bug in CCmdSwitch - using hCurDoc - now uses hOverDoc, as hCurDoc was not valid when RETURN run from the CGToolbar control button. 16-Jan-08: Fixed a bug in CFcwSymRef::OnEntImportXDoc - the symbol definition lookup was to the new file, not the old. Now it checks for it already being in the new file, and if not, imports from the old file. Modified CPopupMenuD so it closes if the mouse is released above or below the menu. The CGToolbar control is only added to v8 drawing windows, not v7 or .DWG. If a file does not contain an object tagged "toolbar" "standard" then the program tries to load such an object from %Documents/ui.fcdwg. If that is not available, the CGToolbar control disables itself and does not occupy screen space. Added new fwke\source\ToolsMgr.cpp which loads tools .ini files for file types. For fcdwg and all other v8 files, it loads fcdwg.ini. It tries %UserAppData, the %AppData, and lastly %RscPath to find the file. A standard fcdwg.ini is now in the resource path for FastNote and FastCAD. The config file allows both the location of toolbars and the defining object tag to be specified. A drawing may have its local toolbar tagged "toolbar" "none" to avoid having any added toolbars (the quickstart tutorial uses this as it has its own local one in use so it can point to items in the toolbar). Added a shell property sheet page "Window tools" for configuration of window tools. Moved CTStylesPSPage.cpp and CDStylesPSPage.cpp from fwkw to fwke. Removed toolpalette and cleaned up most drawings considering the new ui.fcdwg toolbar. CFcwDayData entity no longer saves if it has no content. Erase content then save to remove marker triangle on next load. (Undo needs to be able to restore). 0.314 15-Jan-09: Fixed off by one day bug in CServices::OnData2Time, which caused CServices::OnTime2Data to have its "today" value one day after the "day" value. This caused a display error in CCalendar objects. Calendar day cells can now be containers - drop objects on the day cell, sand it is displayed with a small triangular mark indicating that day has contents. Double click on that day to open its container window. 0.313 13-Jan-09: Removed MOUSE_LEAVE close from CPopupMenuR - caused sub-menus to close immediately. Also removed from CPopupSelR and CPopupSelR2. Used hNested rather than a local hPUM for a switched (nested) menu so that close logic will work correctly. text.mnu, image.mnu, and mandel.mnu were not built into fastnotersc.h nor were they copied to the install resources for user customization. Installation data pspage now displays the time zone delta in hours. (ie -7 is GMT-7 hours) pspage divider width now saved/restored with session data and persists over multiple uses. Reworked nested popup menu out of bounds and abort logic. 0.312 9-Jan-08: Fixed cursor flicker on dropdown menu cursor movement. Show arrow cursor when mouse over window icons (UR corner untitled windows). Revise tree list controls (psheet selectors and file dlg type) to hilight current and selected item in the same visual style as a popup selector. 8-Jan-09: Fixed mem leak in CFcwXLink copy function. Fixed 3rd parameter not passed in SvcTime2Data definition in IServices.h. Changed CCmdRcvr OnClose to close window with Msg(MSG_WinClose) rather than Release(). Same for CDialog::OnDlgEnd(). 4-Jan-09: Added code to CAniMgr to scale the number of animation steps to the final destination size so that small and large menus appear to animate at approximately the same speed. Fixed CDrawI::OnStretch so that an off-by-1 error does not occur when a specified source rect == the dest rect, compared with specifying pSRect==NULL. This fixed a 1-pixel "slide" and overlap error in animation completion. 0.311 3-Jan-09: Posted 0.311. 2-Jan-09: Restored WM_WINPOSITIONCHANGED processing - it was nec essary to support the MOVEWIN command that lets you drag a window around from any point within it. 31-Dec-08: Added animation transition support in CWindowM.cpp, and revised CPopupSelR to create an alpha window and use an animation transition. Also revised it to use an outer MSG_FRndFrame and also use MSG_FRndFrame for the selected item, creating a nice look. Removed the arrow cursor during CPopupSelR processing. Revised CSessionMgr.cpp to add an item to enable or disable animation transitions. The entity edit control/datagrid now uses MSG_FRndFrame to draw the color sample and right-button edit icons. Also, you can now left-click on these icons to start the extended edit dialog. The word "edit" in the button is a resource icon and can be easily changed. Fixed bug in CMenuMgr::OnMenuLoadText - at the end of the string, code tried to append a CR/LF to guard against missing line ends - but that overwrote the end of the copied string's allocation, and could fail to detect the end of the string resulting in memory corruption (changing following CR and LF bytes to 0's). 29-Dec-08: Changed window redraw and resize logic, adding MSG_WinResize, MSG_WinRedraw, MSG_WinContent, and MSG_WinUpdate to assist in window transition animations. Replaced MSG_WinAlloc and MSG_WinCtrlsAdded with MSG_WinCtrlsChanged. Shrunk the round?w.png files - fireworks had them at 55K, we save them at about 450 bytes. Eliminated WM_WINPOSITIONCHANGED message, which was sent on every mouse move (why???) and a few other unused message processing functions. The new logic reduces the number of bitmap transfers and redraws. Moved the frame drawing from CImageM to MSG_WinUpdate and MSG_WinContent. Added ABLEND_ALPHAONLY to copy just the source alpha channel, and changed ABLEND_REPL sto a Set/Get mode so it can be combined with different alpha blending modes. 27-Dec-08: Created CAniMgr.cpp - animation manager that cleans up the work on atest into prepackaged window animations. Added several more animations including flip2. Modified the WIN32 base timer to use the high-res multimedia timers, as the standard system timer was very inconsistent, and usually took almost 2x the specified time. This may have been some logic error in my code, or windows may be doing some low-priority shuffling of the WM_TIMER message. Fixed bugs in CMandFile.cpp that had been created by the change to AddView logic timing. 26-Dec-08: Work on atest.cpp example - performs alpha window grow and shrink animations. 23-Dec-08: Added WINTYPE_ALPHAKB that is an alpha document window with keyboard input ability (can take focus) and added ABLENDNZ and ABLEND_REPL alpha blending modes to CDrawI to support drawing per-pixel alpha windows with proper alpha-blended content and with corner rounding CDrawI::OnFRndFrame for drawing rounded frame windows with alpha blending the corners interior and exterior. Revised CWindowM::WinAlloc() to send MSG_CtlResize and MSG_CtlDraw if a window has no controls. Moved notifications from OnWinAlloc() into the more general WinAlloc() so they are always sent. This lets UpdaqteLayeredWindows, which don't get WM_PAINT messages, get resize information. 22-Dec-08: Fixed crash in TEXT2 - tried to draw initial text before font was alloc. Added MSG_EntDataChanged to CCmdText2.cpp entity creation code. 17-Dec-08: Added MSG_LoadDataDoc to cDocMgr, CFcwDb, and CFcwFile. This supports load-only files loaded for private use (toolbars, symbol catalogs, etc.) that do not display any normal interactive editing windows. Added new CGToolbar control and set up fcwdb MakeCanvas code to create one on the left for testing. This is similar to a CCanvas, but is not due to some assumptions about a single CCanvas per window... hDocMgr->Msg(MSG_MakeDocWin...) now standardizes the creation of the document window object and hooks it up to the document file object. Reorganized AddView logic, moving most of it to the file factory (cfcwdb, cdwgdb, etc.) and with minimal codce in the document object (cfcwfile, cdwgfile) in prep for adding configurable screen controls. MSG_AddView no longer returns a handle to the view, and no code uses a returned object. Changed back to the smaller, 16-item circular menu, removing the OBJMENU and WINTOOLS commands. 0.310 16-Dec-08: Added CDlgFStyleSelect2, which displays fill style thumbnails and shows their names as tooltips. Click on one to select it. Added CDlgColorSelect, which displays a selector form of the color picker dialog, and returns the selected color when the SELECT button is clicked. The Entity Edit DGrid dialog now displays a color sample for all color values, and a small mouse icon when clicking the right button on an item will bring up a detailed selector dialog. CPopupSelR selectors now display a yellow item arrow showing the current value, where this is meaningful. Also, the mouse over item rectangle hilight is inset 2 to make it easier to determine which item will be selected when there are only two items. 0.309 15-Dec-08: Added CDlgLayerSelect.cpp, referenced from CFcwLayerTbl processing MSG_MakeLayerSelector to support CDlgEntEdit. right click a layer name to bring up the selector. CDlgEntEdit displays and edits names - if invalid name entered, it reverts to the prior value. Also, CDlgFontSelect.cpp and CDlgFStyle.cpp. Added MSG_ReqDlgEnd to CControl - request to end dialo9g that owns the control. Moved CDlgEntEdit.cpp from fwkw to fwke, so it can access fwke headers for layer, fstyle, etc. support. ENTDATA_LAYER, ENTDATA_LSTYLE, ENTDATA_FSTYLE, ENTDATA_MATERIAL changed from USHORT to UINT (they are now entity oids) in CStrScan and CStfFmt data<>Text functions. Added VISTA "Run as Administrator" to web page and setup programs. Checked in Linker release manifest for setup.exe. Shrunk new CMenu from 161x161 to 151x151 - looks better, still holds 18 icons. 0.308: 10-Dec-08: Implemented the RESTORE command in a document neutral manner by doing a switch to either the current doc's .prior file, or the doc's file itself if it has no prior. Multiple open windows will be lost, as they might depend on entities that do not exist in the original file. Fixed bug: AutoSave was purging all undo information whenever it saved, causing undo/redo to stop working much of the time. Fixed bug justifying PTEXT: White space on the right that caused line wrapping was being included in the length of text to be justified, resulting in out of alignment center and right-justified text. Fixed bug in in-place edit Home/End keys finding start and end of last line of text. Fixed bugs in calculating gap size in CGFont3::Validate that caused some text to not be drawn (Camera2.fc7). 9-Dec-08: Fixed several issues with in-place text editing - cursor at end of text stays at end of line. If last chr is LF, cursor is down arrow at start of line, so noting overwrites, or extents autosize, until more text is entered. Fixed initial cursor index so cursor starting from empty properly advances. Adjusted PTEXT visual text position by q1/2 descender to things look better. Made the circular menu searchlight more translucent - looks better. Added two more icons to the circular menu, and grew it from 141x141 pixels to 161x161 pixels. There is now a white ghosting on multiple redraws with the searchlight movement due to alpha accumulation. The two added commands are WINTOOLS, which will allow configuration of screen tools (tool palettes, icon bars, etc.) on a per-document-type basis. Settings will be saved in %AppData or %UserAppData. This is essential for CAD, and will be nice for FsstNote, as we will be moving the standard tool palette into such a control so it won't zoom with the main drawing. Each drawing will still be able to have custom tool palettes, but they will default to using a shared one in an external document that will be easier to maintain and share. (work in progress). The other command is OBJMENU which will bring up the selected object's right-button popup menu. The idea is that the RB object popup will be SHIFT-selectable, and also can be started with this icon, and a general right-click will always start by bringing up the circular menu. (work in progress). Added CAtrTag and the TAG command to all object menus that support Tooltips. A Tag attribute has a tag string and an optional value string. It is intended this will be in support of tag-based searching within documents. 8-Dec-08: Added to beta8.fcdwg tool palette - left click on layers tool does LAYERDLG and left click on the color tool does CLRDLG. This is consistent with the new CurFont tool. Also, all three tools now copy settings from an entity dropped on them with SHIFT pressed. Fixed UPDCOLORS (drop on color tool) so that SHIFT drop captures entity fill data if the entity is fillable. This includes if the filled area is set to transparent. Changed CCmdCmd::StartObjRightClick hSystem->SysIsShift() with hWinMgr->WMgrIsRightClick() since OSX detect keyboard status is nor supported in FWKC, and Carbon Events perform this for the windowing environment in FWKW. 0.307: 7-Dec-08: XLink external doc import OnEntImportXDoc was not calling the CFCWEntity base class MSG_EntImportXDoc, which imports the various symbols and IBlocks that an entity references. This caused a crash when importing XREfs from an external document. Fixed versioning issue with the dwgdb DLLs. importlibs changed from 2.05 to 2.06, but the 2.05 libs were still being distributed instead of the newer 2.06 dlls. Implement MakeDlgDlgPSSelectorPage() implemented in fwkw CDlgPSSelectPage.cpp. This allows a single property sheet page object to be used as a selector by calling it with MSG_DlgGetPSNotify to get the object awaiting selection. If this message returns NULL, the page is part of a standard multi-page property sheet dialog and is not a selector. This will allow the layer page to be used to either select the current layer, or return a selected layer, while still providing all normal add/edit/delete functionality of the full page. This can be used for all named editible selections (layers, line and fill styles, fonts, etc.). Work was started implementing IDbObject and IControl as message wrapper classes. This was to assist work in writing the EvTk Toolkit Screen Controls P{rogramming Guide. 6-Dec-08: Implemented Fonts DOCPROPS property sheet page, listing all current FontIBlocks and allowing specifying one of them as the current font. A Combo box allows adding new Font names (IBlocks) to the list for selection. Added the FONTPSHEET command which opens the DOCPROPS dialog directly to the current font page, and added a CurFont toolPalette icon (in beta8.fcdwg) which changes dropped text to the current font, and when clicked runs the FONTPSHEET command to allow quick selection of a different font as current. Fixed UnicodeSamples.fcdwg to specify unicode.txt as the font so that the East Asian text samples draw correctly. Fixed: PTEXT was not saving and reloading its current font id value. 0306 5-Dec-08: Adjusted in-place text edit selection fill and cursor height and position for better visuals at varying sizes. Fixed OSX 1-pixel bounds error (did not draw bottom or right edge last row/column of pixels. This involved also fixing the caluclation of the Window's IRect, as I inadvertently used a form of calculation that only allowed 2-pixels for the border (off by 1). This was a separate bug that confused efforts to compensate for window sizes not including the last row/column on OSX. Started 306 after repository reorganization. 0.305 3-Dec-08: CCmdCmd - SHIFT right-click now always brings up right-button circular popup menu (skip obj hit test and obj-specific menu). CFontMgr2 earlier change "#rsc" to "%AppData/rsc" also needed change SvcCopyW to SvcFullFileName so named path will be converted. Revised CInstMgr to use FullFileName to get named paths, so pathspes get converted to correct chr for OS. Revised CIntFontMgr to use %AppData/rsc rather than #rsc to load font files from the resource directory. Created 0.305 to isolate SVN repository design changes from prior backup for testing. 0.304 2-Dec-08: ProcOrders needs updating - fixed parameter addition on MakePopupSelR() changed WINTYPE_UNTITLED to WINTYPE_DOCWIN. Need to change code from using ISockets.h to ISocketsMgr.h. CFontMgr2 change "#rsc" to "%AppData/rsc" as installed versions can no longer find unicode.ttf in the resource file. Deleted existing repository which had files that created a lot of conflict when working with two different WIN32 systems - builds on each would conflict. New creation scripts makesvn.bat, trunk.bat, trunk2.bat restore.bat. Started 0.304. 0.303 1-Dec-08: Posted version 0.303 30-Nov-08: Modified SvcFullFileName so that all CVTPATHSEP chrs are converted to PATHSEP characters, even inside prefix strings and named paths. Failing to do this caused custom resources not to load. Added entries on the Installation DOCPROPS property sheet page that displays the full actual paths of all named paths. Fixed a bug where the "what day-in-the-month is today, if any" calculation failed to take into account the difference between GMT and Local Time, resulting in the wrong day being shown as today during certain hours of the day. Fixed a lot of cosmetic issues with Calendar objects, and various bugs in using GPText2 unbounded text drawing, including not setting justification so where text was drawn depended on the last text drawn prior. Fixed background color bug in DIML2 text (CGDrawText2::OnText2 needed to make all colors except text COLOR_TRANSPARENT, as this text drawing function call is never used with in-place text editing, and no bounds rectangle is specified. It was background-filling the last-specified bounds rectangle left and right, at the text's top and bottom bounds, which are used. Also fixes calendar resize bug. Fixed bug in CCmdReqPickSS: if RBtn popup menu used to end selection set selecting, the hOverGDraw was invalid. Now saves last one actually referenced in a mouse event processed by CCmdReqPickSS and use that. If not valid, uses hCurDoc to get desired scan enumerator to build selection set. (This convoluted logic is necessary to detect building a selection set from a single-object sublist window). Fix bug in PTEXT command drawing from bl to top right - floated up off screen. Fixed bug in drawing color of CFcwText2, LDIM2, etc. Now set in GDrawText2.cpp. 29-Nov-08: Remove3d hFont->Release in CFcwText2 and CFcwMText and CFcwLDim2 - the font object now belongs to the font InfoBlock. This caused crashes on some drawings now that we are using the font InfoBlocks. Fixed failure to define hFont for CFcwText2/CFcwLDim2 at load - this was called during initial view extents calc. Load needed to send the entity MSG_EntDAtaChanged. Fixed broken links; renamed data directory to FastCAD8 or FastNote to facilitate mixed development, testing, install similar file structures even though things are scattered around. %Documents now appends the data directory as part of the named path. Changed to start version 0.303 0.302 27-Nov-08: (For FastNote, replace FastCAD8 below with FastNote): WIN32 FastCADSetup now installs the .exe, .dll and .xp files to: \Program Files\Common Files\Evolution Computing\FastCAD8 Shared Information (resources and menu files) are now installed in: \Documents and Settings\All Users\Application Data\Evolution Computing\FastCAD8 Per user (session.ini docset.ini settings values) are stored in: \Documents and Settings\\Application Data\Evolution Computing\FastCAD8 The default documents (drawings) directory is: \Documents and Settings\\My Documents\FastCAD8 The old c:\FastCAD8 directory is no longer used and may be deleted after copying files to the document directory. Similar system-specific changes have been made to the OSX and Linux setups. --------------------------------------------------------------------------------- Added named paths support to SvcFullFileName. A named path starts with % and ends with the following path separator (/ or \). Currently supported named paths are: %Install - Where the actual executable program, dlls and .xp files, and resource files are installed. This is often a read-only directory after application installation. "/Applications" on OSX ~ on Linux "\ProgramFiles" on windows. %Documents - ~ on Linux and OSX, "\Documents and Settings\\My Documents" on windows. %AppData - where cross-user application settings go ~ on Linux (no write permissions for /usr/local) ~ on mac, "\Documents and Settings\All Users\Application Data" on windows. FastCAD appends /Evolution Computing/FastCAD8 to this FastNote appends /Evolution Computing/FastNote to this %UserAppData - where user-specific application settings go ~ on linux (no write permissions for /usr/local) ~ on mac, "\Documents and Settings\\Application Data" on windows. FastCAD appends /Evolution Computing/FastCAD8 to this FastNote appends /Evolution Computing/FastNote to this %Desktop - The path where desktop shortcutas are stored, if supported ~ on Linux and OSX for now "\Documents and Settings\\Desktop" on windows. %User - The user directory ~ on OSX and Linux, "\Documents and Settings\\My Documents" on windows. Note the above paths for Windows are for Win/XP. Different versions of Windows will return their equivalent path names. The fastcad.ini and fastnote.ini file now use LOADDOCSET %UserAppData/docset.ini. The actual file path is saved and used when the doc set data is updated on program exit. %UserAppData/session.ini is used to store the session settings values. Currently, the resource directory is %AppData/rsc and it stores menus, icons, and other shared resources. If the applications .ini file (fastcad.ini or fastnote.ini) starts with the USEDBGPATHS directive, then # (the exe program's path) is returned for %Install, %Documents, %AppData, and %UserAppData, to facilitate sandboxed development and debug files. FastCAD and FastNote setups were revised to install into the appropriate system paths. 26-Nov-08: Modified GSShapes, Calendars, Text2, and LDIM2 entities so they use the non-wrap text drawing using the new font scheme that works with BiDi text. This means that all drawing text now uses the new fast cache font subsystem. Modified MText so it uses PText drawing (I'm going to convert old MTEXT to PTEXT entities, and eliminate the old MTEXT. Regular Text entities support multi-line text without word wrap). Got the new CTxIndex calculating bidirectional mixed text mouse click and up/down key tracking locations working correctly, so editing in PTEXT and the in-place text editor seems to work for BiDi text. 25-Nov-08: Added right-button menu and RTEdit text editing dialog for CFwcText2 entities. Fixed a bug in CWindowM - in ~CWindowM, if the window being deleted == hOverWin, both HOverWin and hOverGDraw are set to NULL. The bug showed up in using the GSShape menu command, which opened a nested window. That window tried to use the prior drop down menu as its parent, crashing the new dropdown's window constructor on an invalid hChildOf parameter. Also added this to ~CWindowMac2 and ~CWindowX. GSShapes now use the new text editing (single-line text only) and can handle R2L text. 24-Nov-08: Implemented the new font system for PTEXT, Tool Palettes, and XLinks - the 3 entities that currently support in-place text editing and use MSG_GPDrawPText2 for text drawing. Text justification specification for PTEXT works, and PTEXT displays properly with mixed L2R and R2L text on FMJ_Auto, and the troublesome IBM sample displays properly when FMJ_Right justification is specified. A new CTxIndex object now provides both mouse and keyboard cursor and selection tracking service for text editors, including CGTextEdit2. 23-Nov-08: Revised the font4 sandbox test to use the integrated ne font manager, and debugged the new CGlyphCache object. Revised the CFont2 object to assist in working with generated text spans to facilitate fast autosizing and in-place editing cursor movement. 22-Nov-08: Moved new integer font manager into the fwkw framework from the separate development sandbox. Work on this has been going on for the last two months. It currently co-exists alongside the old integer font manager during the changeover. The new font manager uses extreme caching of font information and raster information to greatly speed up text display, and fully supports the Unicode Bidirectional Algorithm so that mixed language R2L and L2R text is fully supported. Work will continue to transition to this font manager to provide this support for all text. Added MSG_FontIBGetGFont to CFcwFont IBlock. This returns an IGFont3* to a floating point font (in fwke). CGFont3 has been modified to forward messages used by CGDrawText.cpp for PTEXT size and drawing to the IntFontMgr integer font for processing. This enabled changing CFcwPText's hFont to be obtained from the font infoblock (it's object id is stored in the font geometry, and when initially 0 this is set to the oid for the current font IBlock). The same change was made to CFcwXLink and CFcwToolPalette. (These are the 3 entity types that currently support in-place text editing). 21-Nov-08: Started 0.302 work. 0.301 19-Nov-08: Posted 0.301. Completed work on OSX printing using an OSX sheet for the standard printer dialog and making printing work using the specified parameters. OSX FastCAD now registers itself for .fcdwg, .fctpl, and .fc7 files with the desktop, so clicking on an icon will always open the file in the running application, allowing intra-file object drag and drop to work. OSX FastNote only registers itself for .fcdwg and .fctpl file types. A consequence of this is that you have both apps, or multiple installs of either one, data file opening will always be to the last program version that was executed. 17-Nov-08: Revised code so that MSG_StartPage returns dev and hDraw for printing, and MSG_StartDocument does not. Eliminated MakeGDrawPrint. Revised fcwdb, dwgdb, and textdb print document logic to reflect these changes. This change is needed to support printing on OSX. Changed CPrintMgrM so portrait/landscape and nrCopies are preserved when selecting a different printer. Moved object definitions from headers into CPrintMgrM/Mac/X and commented out the header files. These are singleton objects. Moved MakeDlgPrint into these files, and made the default implementation call MakeDlgPrint2 (the renamed one in CDlgPrint.cpp) so that a different print dialog may be used on different operating systems, with the main dependency controled by CPrintMgrM/Mac/X. Fixed CPrintMgrM so that portrait/landscape and # copies settings are preserved from one print operation to the next. They were resetting each time the print dialog started. CStrFmt::OnFmtIPAdr had the bytes reversed. This was displayed in Setup. The IStr form of SFmtIPAdr() displayed correctly. Started 0.301 work 0.300 16-Nov-08: posted final 0.300 Refactored OSX windowing (CWindowMac, CWindowMacEvents, CWindowMacMouseEvents, CWindowMacAppleEvents, CWindowMacDragDrop, including adding support for full window per-pixel alpha transparency on the desktop - the circular menu popup now does correct alpha and has no visible rectangular background. OSX added support for window maximize to avoid covering toolbar and doc. OSX rewrote untitled window resizing and window drag code to eliminate jerkyness. 14-Nov-08: OSX - Change CImageMac::OnRefresh2 to use a direct access data provider (code) to reverse the Red and Green bytes of pixels, eliminating the need for an additional screen image buffer to hold reversed data, and the memory allocation and release that went with it. Fix bug in filling arrowheads - CFcwGenArrow now saves/restores fill color, and CFcwEntity::EnumUseProps now clears the assigned fill style when setting up to draw an entity that does not have fill data, such as Arrow entities or dimensions. Fix bug introduced in 0.299 in CDocMgr::OnValidWinLoc() - a window that is located on a non-first monitor was not correctly restored on next startup. The pMonitor++ pointer increment had been moved to an incorect location in the code. Calendar entity edit and metadata now includes an "AutoToday" flag - if false, the calendar entity will reload with the month and year displayed when the file was saved. If true, it will automatically switch to display the current date on load. Fixed many minor typo and appearance edits to sample drawings and quickstart. 12-Nov-08 Started 0.300 work. 0.299 11-Nov-08: OSX: Fixed CWinMgrMac::OnGetMonitors to get actual active display monitor extents - it was using constants for small iMac. Fixed OSX CDocMgr::OnValidWinLoc to reserve room for top menu and dock - window will not be positioned under/over either of these. Currently using constants: I can't figure out how to get inDevice GDHandle to use the GetAvailableWindowPositionBounds() function to use actual constants. Fixed OSX late new doc open display (open all2.fc7 from dialog did not show up until next menu or dialog open) The UIQueue was not getting processed. Added explicit calls to hUIQueue->Msg(MSG_QDispatch) to mouse movement, keystroke, and window close event callbacks. Fixed OSX drag window with menu drop-down open bug - mouse over or click in title bar closes any drop-down or popup window. Posted final 0.299 version. 1-Nov-08: Added bidiclass.dat to fwkw resources and access with RscData(RSCDATA_BiDiClass). This is the Unicode BiDi class data used in the Unicode bidirectional algorithm for processing mixed-language text such as Hebrew or Arabic. 0.298 31-Oct-08: Added DTSHORTCUT command to file menu - it makes a desktop shortcut to the current document. fcwdb docs support MSG_DocShortcut which performs this. TODO: implement MSG_DocShortcut in other document types. Revised New doc command to ask current doc for MSG_DocNewName. If this is returned, then the specified file is either opened or creaeted. If this is a template (fcdwg files specify #data/workbook.fctpl) then the template is used for the new drawing. File name dialogs now have an additional hAdvisor parameter - if this is not NULL, it is passed MSG_DocDfltFileType when the resulting file name has no assigned type (the user typed a name and did not specify the file type). CCmdCmd::StartObjAction sets hActiveObj = hOverObj so a following double click will use the valid copy object and not the erased source object from object selection processing. ( A click on an UNDO button GSSHAPE followed by a double click crashed instead of starting the default double-click label edit operation). In CWinMgr::OnWinClosing, we now do not clear hSendCtl to NULL if the window being closed is a tooltip - mouse wheel processing needs hSendCtl from the prior operation, and any mouse event clears any current tooltip, so a wheel move over an object such as an image that has a tooltip would cause only the first wheel message to be processed. Added this work log to the beta test web page. Posted 0.298. 9-Oct-08 thru 31-Oct-08: Rewrote the integer text font handling subsystem to provide caching and fast Unicode BiDirectional text support, as well as supporting simultaneous use of multiple text fonts within a document. This new subsystem is not yet integrated into the main program - it is only functional in the fonts example program at this time for testing. 20-Oct-08: Added PTEXT conversion from old CARD entities when there is body text and no other link is specified. 0.297 7-Oct-08: Created OSX and Linux FastNote setups. OSX Move MouseDownCB activation fix to right after hWindow has been found so there is no partial processing of the event. Changed version to 0.297. CWinMgr rollover timeout process was deleting the time and returning IM_RTN_FALSE causing CTimeMgr to also try to delete it, removing the next timer in line. Now, it has no explicit delete, allowing the normal IM_RTN_FALSE to perform the timer delete. Posted 0.297 6-Oct-08: Revised CSessionMgr.cpp so that invalid lines in session.ini are ignored, rather than stopping the processing of the file. This will enable us to remove obsolete settings without creating problems for earlier versions already in use. Added commented-out code to all popup menu classes to send MSG_WMgrWinCapture on any button up event. Uncomment and set a breakpoint to rename and save #screen.png. Also enabled CCmdTest to save a screen shot when TEST is entered as a command. Linux fixed loss of window frame in CWindowX.cpp. Still has Z-order problems and many other issues, but we have the frame back. Fixed bug in Action type menu: Continue did not abort the command, but rather endlessly cycled between the File and Main menus displayed as a popup. Fix was to change 2nd parm of its menu items from 1 to 0 - no submenus. Linux: fix frame-loss bug. We needed swa.override_redirect = false; for framed windows. OS-X: Fix, in a kludgey way, the window activation on left-button down bug. When another app is active, a left-click in one of our windows would not activate our program. If the left-button down event handler retuns eventNotHandledErr, the default handler correctly activates the program. If the window receiving the button down msgis not active, we return eventNotHandledErr, else we return noErr. The entire down/track/up cycle is gobbled by the default handler. This may still present other bugs (win->win drag?) 0.296 5-Oct-08:??? Converted old CARD entities to either XLINK, IMAGE, SYMREF, or GSSHAPE entity.