You have chosen to sponsor your bid up to a maximum amount of .
I am looking for a WindowsForm control written in C# (with all source code) representing a simple Draw program. The control should be capable of being embedded into a C# application (like a textbox). The deliverable should be an application with some reasonable GUI (buttons, menus, etc) that demonstrates the required functionality of the control, as explained below. An additional, minor, deliverable (which you might want to use in the design of the control itself also) is a C# class implementing an AVLTree datastructure.
I have attached a zipped file containing a fairly specific description of the required functionality. To an extent it is negotiable. For instance, if you do not think you can implement Undo-Redo, that's fine.
Overall, the draw control should provide functionality similar to what Microsoft Word drawing does. No sophisticated shapes, only lines, rectangles, polygons, circles/ellipses. It should be possible to embed text by clicking with a cursor and typing (ie text field is automatically elongated with typing, and second line is added on Enter). Also essential is etch-a-sketch functionality to sketch curves with a mouse. It should be possible to group, ungroup, move around, delete, cut/copy/paste drawn objects. It should be possible to undo-redo all actions to some number of levels (like 10). Saving the document is not necessary.
All of the functionality should be readily accessible programmatically, since I will be using my own GUI for the final product. A lot of it should also be accessible through popup menus by clicking right button of the mouse, as in specs.
Code should be reasonably documented, both the API and the internal workings. Variable names should be meaningful and use numPoints style, not the num_points one. Function names should be capitalized.
The deadline is June 10 but it is negotiable if more time is needed. I have more time than money, so I am ready to work with somebody without stellar experience but with a strong commitment. I hope to be able to arrange for a set of milestones in development with partial payouts for each one.
Before I agree to a bid, please be ready to present at least a high level design document detailing the classes and data structures you are planning to use, so we can discuss it.
Please read the attached zipped text file for specific functionality I expect.
Deliverables: C# source code for an app with an WindowsForms control implementing Draw program according to spec below and GUI necessary to test it. Complete ownership and distribution copyrights to all work purchased. All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
Note: all functionality accessible through GUI should be also accessible programmatically. Complete, readable spec in zipped file. GUI should parallel standard Windows as far as possible.
control is rectangular, resizable
starts with default length of blank space (an app window). Additional stretches of blank space can be inserted at any y coordinate within the scroll. Similarly, can remove stretches of space
can jump to any y coordinate
control scrollable, by pressing buttons Up/Down, PageUp/Down, using scrollbar
repainting of the control is efficient, ie no needless total repaints
primitive objects supported: geometric objects (lines, rectangles, polygons, ellipses), sketches (done by mouse), and text fields. Objects representing each of these should be stored in separate datastructures (one for sketches, one for lines etc).
groups: groups of objects are manipulated together, such as by moving, copying, deleting etc. Group-ungroup should be exactly as in Word.
if you rightclick in working space, a popup menu offers to select “object selection??, “group selection??, sketch, line, rectangle, polygon, circle, ellipse, eraser. Selecting graphical objects sets program’s draw mode, ie after drawing a line, user can draw another one. Mode changed by selecting another or by Escape.
Sketches: if sketch selected, user sketches with mouse, with left mouse button pressed. Entire continuous sketch produced above stored as a single object (a list of points). Data structure used to store these points should allow efficient repainting, eg an AVLTree. If a sketch is selected, it should be possible to change its color through a popup menu. Can merge two sketches (storing points together)
Lines, rectangles, circles, and ellipses drawn as like in Word. Need to draw circles specifically, along with ellipse. Can change color of closed shapes.
Eraser: if eraser is selected, eraser-cursor should be displayed. Erasing done by moving mouse with left button pressed. Eraser only erases sketches, not geometric objects.
Text field: if user doubleclicks on form, a blinking cursor displayed. If user then Escapes or clicks elsewhere on the form, cursor eliminated. While cursor inserted, user can insert text by typing. Similarly, if user presses Ctrl V, it pastes in text. Text field resizes as user types. Textbox is highlighted when mouse hovers over, otherwise has no boundary/fill. If all text deleted, it disappears. Can change size and font of text field.
Selection: selected object drawn with thicker line. 2 modes of selection, “object select?? and “rectangular select??. Rectangular is usual one in Word, where rectangle encloses objects. It is default mode. Object selection allows to select object by touching it with cursor. Rectangular is for group of many small objects, and object select is for a long sketch.
Moving/Dragging Objects: it should be possible to move selected objects (groups of objects) by dragging them with the mouse and by pressing buttons Left, Right, Up, Down.
Cut/Copy/Paste: any object or objects currently selected. Access by both popups and Ctrl X/C/V as in Word.
Can send objects to front/to back.
Undo Redo: support any number of levels of undo-redo for any operation memory-efficiently. What constitutes an atomic operation is negotiable.
Windows XP, C#