wxruby3-shapes 0.9.0.pre.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.yardopts +12 -0
- data/CREDITS.md +18 -0
- data/INSTALL.md +39 -0
- data/LICENSE +21 -0
- data/README.md +118 -0
- data/assets/screenshot.png +0 -0
- data/bin/wx-shapes +9 -0
- data/lib/wx/shapes/arrow_base.rb +86 -0
- data/lib/wx/shapes/arrows/circle_arrow.rb +39 -0
- data/lib/wx/shapes/arrows/diamond_arrow.rb +33 -0
- data/lib/wx/shapes/arrows/open_arrow.rb +56 -0
- data/lib/wx/shapes/arrows/solid_arrow.rb +69 -0
- data/lib/wx/shapes/art/shape_canvas/page.xpm +73 -0
- data/lib/wx/shapes/auto_layout.rb +358 -0
- data/lib/wx/shapes/base.rb +33 -0
- data/lib/wx/shapes/canvas_history.rb +84 -0
- data/lib/wx/shapes/connection_point.rb +238 -0
- data/lib/wx/shapes/core.rb +19 -0
- data/lib/wx/shapes/diagram.rb +659 -0
- data/lib/wx/shapes/events.rb +389 -0
- data/lib/wx/shapes/printout.rb +136 -0
- data/lib/wx/shapes/serializable.rb +440 -0
- data/lib/wx/shapes/serialize/core.rb +40 -0
- data/lib/wx/shapes/serialize/id.rb +82 -0
- data/lib/wx/shapes/serialize/wx.rb +104 -0
- data/lib/wx/shapes/serializer/json.rb +258 -0
- data/lib/wx/shapes/serializer/yaml.rb +125 -0
- data/lib/wx/shapes/shape.rb +2129 -0
- data/lib/wx/shapes/shape_canvas.rb +3285 -0
- data/lib/wx/shapes/shape_data_object.rb +43 -0
- data/lib/wx/shapes/shape_handle.rb +287 -0
- data/lib/wx/shapes/shape_list.rb +161 -0
- data/lib/wx/shapes/shapes/bitmap_shape.rb +257 -0
- data/lib/wx/shapes/shapes/circle_shape.rb +136 -0
- data/lib/wx/shapes/shapes/control_shape.rb +483 -0
- data/lib/wx/shapes/shapes/curve_shape.rb +231 -0
- data/lib/wx/shapes/shapes/diamond_shape.rb +62 -0
- data/lib/wx/shapes/shapes/edit_text_shape.rb +317 -0
- data/lib/wx/shapes/shapes/ellipse_shape.rb +106 -0
- data/lib/wx/shapes/shapes/flex_grid_shape.rb +78 -0
- data/lib/wx/shapes/shapes/grid_shape.rb +404 -0
- data/lib/wx/shapes/shapes/line_shape.rb +907 -0
- data/lib/wx/shapes/shapes/multi_sel_rect.rb +214 -0
- data/lib/wx/shapes/shapes/ortho_shape.rb +357 -0
- data/lib/wx/shapes/shapes/polygon_shape.rb +294 -0
- data/lib/wx/shapes/shapes/rect_shape.rb +378 -0
- data/lib/wx/shapes/shapes/round_ortho_shape.rb +131 -0
- data/lib/wx/shapes/shapes/round_rect_shape.rb +142 -0
- data/lib/wx/shapes/shapes/square_shape.rb +119 -0
- data/lib/wx/shapes/shapes/text_shape.rb +324 -0
- data/lib/wx/shapes/thumbnail.rb +234 -0
- data/lib/wx/shapes/version.rb +12 -0
- data/lib/wx/shapes/wx.rb +29 -0
- data/lib/wx/shapes.rb +18 -0
- data/lib/wx/wx-shapes/base.rb +87 -0
- data/lib/wx/wx-shapes/cmd/sampler.rb +58 -0
- data/lib/wx/wx-shapes/cmd/test.rb +27 -0
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +7 -0
- data/rakelib/yard/templates/default/layout/html/setup.rb +5 -0
- data/rakelib/yard/yard/relative_markdown_links/version.rb +8 -0
- data/rakelib/yard/yard/relative_markdown_links.rb +39 -0
- data/rakelib/yard/yard-custom-templates.rb +2 -0
- data/rakelib/yard/yard-relative_markdown_links.rb +4 -0
- data/samples/demo/art/AlignBottom.xpm +35 -0
- data/samples/demo/art/AlignCenter.xpm +35 -0
- data/samples/demo/art/AlignLeft.xpm +35 -0
- data/samples/demo/art/AlignMiddle.xpm +35 -0
- data/samples/demo/art/AlignRight.xpm +35 -0
- data/samples/demo/art/AlignTop.xpm +35 -0
- data/samples/demo/art/Bitmap.xpm +25 -0
- data/samples/demo/art/Circle.xpm +22 -0
- data/samples/demo/art/Curve.xpm +21 -0
- data/samples/demo/art/Diamond.xpm +22 -0
- data/samples/demo/art/EditText.xpm +21 -0
- data/samples/demo/art/Ellipse.xpm +22 -0
- data/samples/demo/art/FixedRect.xpm +22 -0
- data/samples/demo/art/FlexGrid.xpm +22 -0
- data/samples/demo/art/GC.xpm +23 -0
- data/samples/demo/art/Grid.xpm +22 -0
- data/samples/demo/art/Line.xpm +21 -0
- data/samples/demo/art/NoSource.xpm +69 -0
- data/samples/demo/art/OrthoLine.xpm +21 -0
- data/samples/demo/art/Rect.xpm +22 -0
- data/samples/demo/art/RoundOrthoLine.xpm +21 -0
- data/samples/demo/art/RoundRect.xpm +22 -0
- data/samples/demo/art/Shadow.xpm +23 -0
- data/samples/demo/art/StandAloneLine.xpm +22 -0
- data/samples/demo/art/Text.xpm +21 -0
- data/samples/demo/art/Tool.xpm +23 -0
- data/samples/demo/art/sample.xpm +251 -0
- data/samples/demo/demo.rb +658 -0
- data/samples/demo/frame_canvas.rb +422 -0
- data/samples/demo/images/motyl.bmp +0 -0
- data/samples/demo/images/motyl2.bmp +0 -0
- data/samples/sample1/art/sample.xpm +251 -0
- data/samples/sample1/sample.rb +263 -0
- data/samples/sample2/art/sample.xpm +251 -0
- data/samples/sample2/sample.rb +133 -0
- data/samples/sample2/sample_canvas.rb +35 -0
- data/samples/sample2/sample_shape.rb +108 -0
- data/samples/sample3/art/sample.xpm +251 -0
- data/samples/sample3/sample.rb +281 -0
- data/samples/sample4/art/sample.xpm +251 -0
- data/samples/sample4/sample.rb +180 -0
- data/tests/art/motyl.bmp +0 -0
- data/tests/lib/wxapp_runner.rb +64 -0
- data/tests/serializer_tests.rb +521 -0
- data/tests/test_grid_shapes.rb +42 -0
- data/tests/test_serialize.rb +7 -0
- data/tests/test_serialize_yaml.rb +17 -0
- metadata +242 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e87fc628c22cdd597cdffbcd842d207cee3542b4b18c599abb2240b56a1b623f
|
4
|
+
data.tar.gz: aca8560f77c6f20e25a25a9905ea0e2f84b6b2d4293dd8341f772882acf52880
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 96cedb90feb6f2bf21044f17c45e55be647e34f20f14035742cf8fa0aa6e9671d732dd8d6f7878900a799d696d29aa1975434674468de15f0038a29c3b68c423
|
7
|
+
data.tar.gz: 95c952c4a3c94e492eac23f854b6465dd185c063266b975ec68ec8929877d4de3302bba71dce5b9e06238ded4828cffbdeb74e258ff23f02cd256e20fa3156a2
|
data/.yardopts
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
--load rakelib/yard/yard-relative_markdown_links.rb
|
2
|
+
--load rakelib/yard/yard-custom-templates.rb
|
3
|
+
--charset UTF-8
|
4
|
+
--readme README.md
|
5
|
+
--title "wxruby3/shapes API Documentation"
|
6
|
+
--output-dir rdoc
|
7
|
+
--protected
|
8
|
+
lib/wx/shapes/**/*.rb
|
9
|
+
-
|
10
|
+
CREDITS.md
|
11
|
+
INSTALL.md
|
12
|
+
LICENSE
|
data/CREDITS.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
# Credits
|
3
|
+
|
4
|
+
## wxRuby3/Shapes
|
5
|
+
|
6
|
+
Martin Corino established the wxRuby3/Shapes project in 2023.
|
7
|
+
|
8
|
+
### Lead Maintainer
|
9
|
+
|
10
|
+
Martin Corino: mcorino at m2c-software dot nl
|
11
|
+
|
12
|
+
## wxShapeFramework
|
13
|
+
|
14
|
+
In 2002 Michal Bliznak established the [wxShapeFramework](https://sourceforge.net/projects/wxsf/) project. The last
|
15
|
+
contribution to this project dates back 7 years.
|
16
|
+
|
17
|
+
wxruby3/shapes has been ported from the code base of [this](https://github.com/danselmi/wxShapeFramework) Github fork
|
18
|
+
for which the last contribution dates back 4 years.
|
data/INSTALL.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
<!--
|
2
|
+
# @markup markdown
|
3
|
+
-->
|
4
|
+
|
5
|
+
# Installation of wxRuby3/Shapes
|
6
|
+
|
7
|
+
## Installation of a wxRuby3/Shapes Gem
|
8
|
+
|
9
|
+
The wxRuby3/Shapes project provides gems on [RubyGems](https://rubygems.org) which can be installed with the
|
10
|
+
standard `gem install` command line this:
|
11
|
+
|
12
|
+
```sh
|
13
|
+
gem install wxruby3-shapes
|
14
|
+
```
|
15
|
+
|
16
|
+
This will install the wxruby3-shapes gem on any system supporting Ruby and wxRuby.
|
17
|
+
As wxRuby3/Shapes has a dependency on wxRuby3 the wxRuby3 gem will be attempted to be installed if (the required version is)
|
18
|
+
not yet installed. This will be attempted using a default installation of the wxRuby3 gem. As this is a gem building
|
19
|
+
a native extension (except for Windows where the default install will be a prebuilt binary extension gem) this can take quite a
|
20
|
+
while.
|
21
|
+
|
22
|
+
Due to the dependencies of the wxRuby3 gem itself it might be preferable to install that gem separately beforehand. See the
|
23
|
+
[INSTALL](https://github.com/mcorino/wxRuby3/blob/master/INSTALL.md) document of the wxRuby3 project for more details.
|
24
|
+
|
25
|
+
## Building from source
|
26
|
+
|
27
|
+
When installing from source the following basic requirements apply:
|
28
|
+
|
29
|
+
- Git version control toolkit
|
30
|
+
- Ruby 2.5 or later
|
31
|
+
|
32
|
+
Checkout the wxRuby3/Shapes sources from [GitHub](https://github.com/mcorino/wxRuby3-shapes).
|
33
|
+
|
34
|
+
The wxRuby3/Shapes project provides a Rake based build system. Call `rake help` to get an overview of the available commands.
|
35
|
+
|
36
|
+
Execute the `rake gem` command to build the wxruby-shapes gem. This will create a gem file in the `./pkg` folder.
|
37
|
+
|
38
|
+
Install the created gem by executing the command `gem install pkg/wxruby3-shapes-<version>.gem`. Everything described
|
39
|
+
above for [Installation of a wxRuby3/Shapes Gem](#installation-of-a-wxruby3shapes-gem) applies.
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2023 mcorino
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
[![Linux wxGTK](https://github.com/mcorino/wxRuby3-shapes/actions/workflows/linux.yml/badge.svg)](https://github.com/mcorino/wxRuby3-shapes/actions/workflows/linux.yml)
|
2
|
+
[![Windows wxMSW](https://github.com/mcorino/wxRuby3-shapes/actions/workflows/msw.yml/badge.svg)](https://github.com/mcorino/wxRuby3-shapes/actions/workflows/msw.yml)
|
3
|
+
[![License](https://img.shields.io/badge/license-MIT-yellowgreen.svg)](LICENSE)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/wxruby3-shapes.svg)](https://badge.fury.io/rb/wxruby3-shapes)
|
5
|
+
|
6
|
+
[![Documentation](https://img.shields.io/badge/docs-pages-blue.svg)](https://mcorino.github.io/wxRuby3-shapes)
|
7
|
+
|
8
|
+
# wxRuby3/Shapes - A wxRuby3 2D shapes and diagramming framework
|
9
|
+
|
10
|
+
![wxRuby3/Shapes demo](assets/screenshot.png)
|
11
|
+
|
12
|
+
## Introduction
|
13
|
+
|
14
|
+
**wxRuby3/Shapes** (Wx::SF) is a pure Ruby software library/framework based on wxRuby3 which allows
|
15
|
+
easy development of software applications manipulating graphical objects (shapes) like various CASE
|
16
|
+
tools, technological processes modeling tools, etc. This library is a pure Ruby implementation based
|
17
|
+
on the excellent [wxShapeFramework](https://sourceforge.net/projects/wxsf/) C++ library based on
|
18
|
+
wxWidgets.
|
19
|
+
|
20
|
+
The library consists of several classes encapsulating a so called 'Shape canvas' (visual
|
21
|
+
GUI control used for management of diagrams) providing the following features:
|
22
|
+
|
23
|
+
- Create charts (diagrams) interactively in your wxRuby3 applications
|
24
|
+
- Serialize/deserialize charts to file or any io stream in multiple formats (currently supported formats are JSON and YAML)
|
25
|
+
- Support for Clipboard operations (Cut/Paste) and Drag&Drop of diagram components (shapes)
|
26
|
+
- Support for Undo/Redo operations
|
27
|
+
- Support for alignment of diagram components.
|
28
|
+
- Support for printing of diagrams (including preview)
|
29
|
+
- Support for diagram export to bitmap (any supported type)
|
30
|
+
- Support for Thumbnail view of diagram
|
31
|
+
- A standard collection of diagram components
|
32
|
+
- Shapes: basic rectangular, square, circle, ellipse, rounded rectangle, grid, flexible grid, text, editable text, polygonal, diamond, bitmap
|
33
|
+
- Lines: straight, curved, orthogonal, rounded orthogonal
|
34
|
+
- Line arrows: solid, open, diamond, circle
|
35
|
+
- Highly customizable and extendable
|
36
|
+
|
37
|
+
The shape framework (and shape canvas) allows to define the relationship between various
|
38
|
+
shape types (for example which shape can be a child of another one, which shape types
|
39
|
+
can be connected together by which connection type, how do various connections look
|
40
|
+
like, etc) and provides an extensive set of events for customizing the interactive creation
|
41
|
+
of diagrams.
|
42
|
+
|
43
|
+
More over, the library source code is pure Ruby based on wxRuby3 GUI toolkit, so it will
|
44
|
+
run on any platform that supports Ruby and wxRuby3.
|
45
|
+
|
46
|
+
## wxRuby3/Shapes licence
|
47
|
+
|
48
|
+
wxruby3/shapes is free and open-source. It is distributed under the liberal
|
49
|
+
MIT licence which is compatible with both free and commercial development.
|
50
|
+
See [LICENSE](LICENSE) for more details.
|
51
|
+
|
52
|
+
See the [wxRuby3](https://github.com/mcorino/wxRuby3) project for more information
|
53
|
+
concerning licensing of wxRuby3.
|
54
|
+
|
55
|
+
### Required Credits and Attribution
|
56
|
+
|
57
|
+
Generally, neither wxRuby3 nor wxRuby3/Shapes require attribution, beyond
|
58
|
+
retaining existing copyright notices.
|
59
|
+
See [here](CREDITS.md) for more details and acknowledgements.
|
60
|
+
|
61
|
+
## FAQ
|
62
|
+
|
63
|
+
### What platforms and operating systems are supported in wxRuby3/Shapes?
|
64
|
+
|
65
|
+
All platforms supporting Ruby and wxRuby3. See the [wxRuby3](https://github.com/mcorino/wxRuby3)
|
66
|
+
project for more information
|
67
|
+
|
68
|
+
### Where can I ask a question, or report a bug?
|
69
|
+
|
70
|
+
Use GitHUb Issues.
|
71
|
+
|
72
|
+
When asking a question, if something is not working as you expect,
|
73
|
+
please provide a *minimal*, *runnable* sample of code that demonstrates
|
74
|
+
the problem, and say what you expected to happen, and what actually
|
75
|
+
happened. Please also provide basic details of your platform, Ruby,
|
76
|
+
wxRuby3/Shapes, wxRuby and wxWidgets version, and make a reasonable effort
|
77
|
+
to find answers in the archive and documentation before posting. People are mostly happy
|
78
|
+
to help, but it's too much to expect them to guess what you're trying to
|
79
|
+
do, or try and debug 1,000 lines of your application.
|
80
|
+
Very important also; do not use offensive language and be **polite**.
|
81
|
+
|
82
|
+
### How can I learn to use wxRuby3/Shapes?
|
83
|
+
|
84
|
+
The wxRuby3/Shapes API has a lot of features and takes some time to learn.
|
85
|
+
The wxRuby3/Shapes distribution comes with several samples which illustrate how
|
86
|
+
to use many specific parts of the API. Good one's to start with are the
|
87
|
+
basic samples (samples/sample1|2|3|4) which provide insights in various basic
|
88
|
+
features. The samples also include a fairly advanced and complete diagramming
|
89
|
+
demo application showcasing most of the features of wxRuby3/Shapes.
|
90
|
+
|
91
|
+
Complete (more or less) wxRuby3/Shapes API documentation should be part of any
|
92
|
+
complete wxRuby3/Shapes build. This tends to focus on providing a reference
|
93
|
+
of all available modules, classes ad methods and how to use specific
|
94
|
+
classes and methods, rather than on how to construct an application
|
95
|
+
overall.
|
96
|
+
This documentation (for the latest release) is also available online
|
97
|
+
[here](https://mcorino.github.io/wxRuby3-shapes/index.html).
|
98
|
+
|
99
|
+
### How does wxRuby3/Shapes compare to wxShapeFramework?
|
100
|
+
|
101
|
+
**wxRuby3/Shapes** is not a straight port of wxShapeFramework although much of the structure is maintained
|
102
|
+
with the following major implementation differences:
|
103
|
+
|
104
|
+
- wxRuby3/Shapes implements a totally different serialization scheme in which none of the XML serializer
|
105
|
+
code has been ported. In fact wxRuby3/Shapes does not offer any XML serialization out of the box but instead
|
106
|
+
provides a more adaptable implementation with (for now) two supported output formats; JSON and YAML.
|
107
|
+
- Related to this the internal management of shape references has been changed as well as this was tightly
|
108
|
+
linked to the serialization implementation.
|
109
|
+
- The API has been Ruby-fied with respect to constant names, method names and argument passing and return
|
110
|
+
values.
|
111
|
+
- The ScaledDC class has been integrated with wxRuby3 and is not part of wxRuby3/Shapes.
|
112
|
+
|
113
|
+
In addition many small tweaks, improvements and also bugfixes have been implemented as part of the port.
|
114
|
+
|
115
|
+
### I am getting an error trying to install wxRuby3/Shapes
|
116
|
+
|
117
|
+
Please double-check the [INSTALL](INSTALL.md) documents, and search issue archives. If
|
118
|
+
this doesn't help, please post your question using GitHub Issues.
|
Binary file
|
data/bin/wx-shapes
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# Wx::SF::ArrowBase - arrow base class
|
2
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
3
|
+
|
4
|
+
require 'wx/shapes/serializable'
|
5
|
+
require 'wx/shapes/shape'
|
6
|
+
|
7
|
+
module Wx::SF
|
8
|
+
|
9
|
+
class ArrowBase
|
10
|
+
|
11
|
+
include Wx::SF::Serializable
|
12
|
+
|
13
|
+
module DEFAULT
|
14
|
+
FILL = Wx::Brush.new(Wx::WHITE) if Wx::App.is_main_loop_running
|
15
|
+
Wx.add_delayed_constant(self, :FILL) { Wx::Brush.new(Wx::WHITE) }
|
16
|
+
BORDER = Wx::Pen.new(Wx::BLACK) if Wx::App.is_main_loop_running
|
17
|
+
Wx.add_delayed_constant(self, :BORDER) { Wx::Pen.new(Wx::BLACK) }
|
18
|
+
end
|
19
|
+
|
20
|
+
# Constructor
|
21
|
+
# @param [Wx::SF::Shape] parent parent shape
|
22
|
+
def initialize(parent=nil)
|
23
|
+
@parent_shape = parent
|
24
|
+
end
|
25
|
+
|
26
|
+
# Set a parent of the arrow shape.
|
27
|
+
# @param [Wx::SF::Shape] parent parent shape
|
28
|
+
def set_parent_shape(parent)
|
29
|
+
@parent_shape = parent
|
30
|
+
end
|
31
|
+
alias :parent_shape= :set_parent_shape
|
32
|
+
|
33
|
+
# Get pointer to a parent shape.
|
34
|
+
# @return [Wx::SF::Shape] parent shape if exists, otherwise nil
|
35
|
+
def get_parent_shape
|
36
|
+
@parent_shape
|
37
|
+
end
|
38
|
+
alias :parent_shape :get_parent_shape
|
39
|
+
|
40
|
+
# Draw arrow shape at the end of a virtual line.
|
41
|
+
# @param [Wx::RealPoint] from Start of the virtual line
|
42
|
+
# @param [Wx::RealPoint] to End of the virtual line
|
43
|
+
# @param [Wx::DC] dc Device context for drawing
|
44
|
+
def draw(from, to, dc)
|
45
|
+
# needs to be overridden
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
# Rotate and move arrow's vertices in accordance of virtual line at which end the arrow will be placed.
|
51
|
+
# @param [Array<Wx::RealPoint>] src array of source vertices
|
52
|
+
# @param [Wx::RealPoint] from Start of the virtual line
|
53
|
+
# @param [Wx::RealPoint] to End of the virtual line
|
54
|
+
# @param [Array<Wx::Point>] trg array where translated vertices will be stored
|
55
|
+
# @return [Array<Wx::Point>] array with translated vertices
|
56
|
+
def translate_arrow(src, from, to, trg = [])
|
57
|
+
# calculate distance between line points
|
58
|
+
from = from.to_real_point; to = to.to_real_point
|
59
|
+
dist = from.distance_to(to)
|
60
|
+
|
61
|
+
if dist == 0.0
|
62
|
+
src.each do |pt|
|
63
|
+
trg << Wx::Point.new(((pt.x-pt.y)+to.x).to_i,
|
64
|
+
((pt.x+pt.y)+to.y).to_i)
|
65
|
+
end
|
66
|
+
else
|
67
|
+
# calculate sin and cos of given line segment
|
68
|
+
sina = (from.y - to.y)/dist
|
69
|
+
cosa = (from.x - to.x)/dist
|
70
|
+
|
71
|
+
# rotate arrow
|
72
|
+
src.each do |pt|
|
73
|
+
trg << Wx::Point.new(((pt.x*cosa-pt.y*sina)+to.x).to_i,
|
74
|
+
((pt.x*sina+pt.y*cosa)+to.y).to_i)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
trg
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
Dir[File.join(__dir__, 'arrows', '*.rb')].each do |f|
|
85
|
+
require "wx/shapes/arrows/#{File.basename(f, '.rb')}"
|
86
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Wx::SF::CircleArrow - circle arrow class
|
2
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
3
|
+
|
4
|
+
require 'wx/shapes/arrows/solid_arrow'
|
5
|
+
|
6
|
+
module Wx::SF
|
7
|
+
|
8
|
+
class CircleArrow < SolidArrow
|
9
|
+
|
10
|
+
# Default circle radius.
|
11
|
+
RADIUS = 4
|
12
|
+
|
13
|
+
property :radius
|
14
|
+
|
15
|
+
# Constructor
|
16
|
+
# @param [Wx::SF::Shape] parent parent shape
|
17
|
+
def initialize(parent=nil)
|
18
|
+
super
|
19
|
+
@radius = 4
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get or set the circle radius
|
23
|
+
attr_accessor :radius
|
24
|
+
|
25
|
+
# Draw arrow shape at the end of a virtual line.
|
26
|
+
# @param [Wx::RealPoint] from Start of the virtual line
|
27
|
+
# @param [Wx::RealPoint] to End of the virtual line
|
28
|
+
# @param [Wx::DC] dc Device context for drawing
|
29
|
+
def draw(from, to, dc)
|
30
|
+
dc.with_pen(@pen) do |dc|
|
31
|
+
dc.with_brush(@fill) do |dc|
|
32
|
+
dc.draw_circle(to.to_point, @radius)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Wx::SF::DiamondArrow - diamond arrow class
|
2
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
3
|
+
|
4
|
+
require 'wx/shapes/arrows/solid_arrow'
|
5
|
+
|
6
|
+
module Wx::SF
|
7
|
+
|
8
|
+
class DiamondArrow < SolidArrow
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
def diamond_arrow
|
13
|
+
@diamond_arrow ||= [Wx::RealPoint.new(0,0), Wx::RealPoint.new(10,4), Wx::RealPoint.new(20,0), Wx::RealPoint.new(10,-4)]
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
# Draw arrow shape at the end of a virtual line.
|
19
|
+
# @param [Wx::RealPoint] from Start of the virtual line
|
20
|
+
# @param [Wx::RealPoint] to End of the virtual line
|
21
|
+
# @param [Wx::DC] dc Device context for drawing
|
22
|
+
def draw(from, to, dc)
|
23
|
+
rarrow = translate_arrow(DiamondArrow.diamond_arrow, from, to)
|
24
|
+
dc.with_pen(@pen) do |dc|
|
25
|
+
dc.with_brush(@fill) do |dc|
|
26
|
+
dc.draw_polygon(rarrow)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Wx::SF::OpenArrow - open arrow class
|
2
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
3
|
+
|
4
|
+
require 'wx/shapes/arrow_base'
|
5
|
+
|
6
|
+
module Wx::SF
|
7
|
+
|
8
|
+
# Class extends the wxSFArrowBase class and encapsulates
|
9
|
+
# arrow shape consisting of single two lines leading from the end of the
|
10
|
+
# parent line shape.
|
11
|
+
class OpenArrow < ArrowBase
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def open_arrow
|
15
|
+
@open_arrow ||= [Wx::RealPoint.new(0,0), Wx::RealPoint.new(10,4), Wx::RealPoint.new(10,-4)]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
property :arrow_pen
|
20
|
+
|
21
|
+
# Constructor
|
22
|
+
# @param [Wx::SF::Shape] parent parent shape
|
23
|
+
def initialize(parent=nil)
|
24
|
+
super
|
25
|
+
@pen = DEFAULT::BORDER
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get arrow border pen
|
29
|
+
# @return [Wx::Pen]
|
30
|
+
def get_arrow_pen
|
31
|
+
@pen
|
32
|
+
end
|
33
|
+
alias :arrow_pen :get_arrow_pen
|
34
|
+
|
35
|
+
# Set arrow border pen
|
36
|
+
# @param [Wx::Pen] pen
|
37
|
+
def set_arrow_pen(pen)
|
38
|
+
@pen = pen
|
39
|
+
end
|
40
|
+
alias :arrow_pen= :set_arrow_pen
|
41
|
+
|
42
|
+
# Draw arrow shape at the end of a virtual line.
|
43
|
+
# @param [Wx::RealPoint] from Start of the virtual line
|
44
|
+
# @param [Wx::RealPoint] to End of the virtual line
|
45
|
+
# @param [Wx::DC] dc Device context for drawing
|
46
|
+
def draw(from, to, dc)
|
47
|
+
rarrow = translate_arrow(OpenArrow.open_arrow, from, to)
|
48
|
+
dc.with_pen(@pen) do |dc|
|
49
|
+
dc.draw_line(rarrow[0], rarrow[1])
|
50
|
+
dc.draw_line(rarrow[0], rarrow[2])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Wx::SF::SolidArrow - solid arrow class
|
2
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
3
|
+
|
4
|
+
require 'wx/shapes/arrow_base'
|
5
|
+
|
6
|
+
module Wx::SF
|
7
|
+
|
8
|
+
class SolidArrow < ArrowBase
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def solid_arrow
|
12
|
+
@solid_arrow ||= [Wx::RealPoint.new(0,0), Wx::RealPoint.new(10,4), Wx::RealPoint.new(10,-4)]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
property :arrow_fill, :arrow_pen
|
17
|
+
|
18
|
+
# Constructor
|
19
|
+
# @param [Wx::SF::Shape] parent parent shape
|
20
|
+
def initialize(parent=nil)
|
21
|
+
super
|
22
|
+
@fill = DEFAULT::FILL
|
23
|
+
@pen = DEFAULT::BORDER
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get arrow fill brush
|
27
|
+
# @return [Wx::Brush]
|
28
|
+
def get_arrow_fill
|
29
|
+
@fill
|
30
|
+
end
|
31
|
+
alias :arrow_fill :get_arrow_fill
|
32
|
+
|
33
|
+
# Set arrow fill brush
|
34
|
+
# @param [Wx::Brush] brush
|
35
|
+
def set_arrow_fill(brush)
|
36
|
+
@fill = brush
|
37
|
+
end
|
38
|
+
alias :arrow_fill= :set_arrow_fill
|
39
|
+
|
40
|
+
# Get arrow border pen
|
41
|
+
# @return [Wx::Pen]
|
42
|
+
def get_arrow_pen
|
43
|
+
@pen
|
44
|
+
end
|
45
|
+
alias :arrow_pen :get_arrow_pen
|
46
|
+
|
47
|
+
# Set arrow border pen
|
48
|
+
# @param [Wx::Pen] pen
|
49
|
+
def set_arrow_pen(pen)
|
50
|
+
@pen = pen
|
51
|
+
end
|
52
|
+
alias :arrow_pen= :set_arrow_pen
|
53
|
+
|
54
|
+
# Draw arrow shape at the end of a virtual line.
|
55
|
+
# @param [Wx::RealPoint] from Start of the virtual line
|
56
|
+
# @param [Wx::RealPoint] to End of the virtual line
|
57
|
+
# @param [Wx::DC] dc Device context for drawing
|
58
|
+
def draw(from, to, dc)
|
59
|
+
rarrow = translate_arrow(SolidArrow.solid_arrow, from, to)
|
60
|
+
dc.with_pen(@pen) do |dc|
|
61
|
+
dc.with_brush(@fill) do |dc|
|
62
|
+
dc.draw_polygon(rarrow)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char * page_xpm[] = {
|
3
|
+
"32 32 37 1",
|
4
|
+
"5 c #7198D9",
|
5
|
+
", c #769CDA",
|
6
|
+
"2 c #DCE6F6",
|
7
|
+
"i c #FFFFFF",
|
8
|
+
"e c #779DDB",
|
9
|
+
": c #9AB6E4",
|
10
|
+
"9 c #EAF0FA",
|
11
|
+
"- c #B1C7EB",
|
12
|
+
"$ c #6992D7",
|
13
|
+
"y c #F7F9FD",
|
14
|
+
"= c #BED0EE",
|
15
|
+
"q c #F0F5FC",
|
16
|
+
"; c #A8C0E8",
|
17
|
+
"@ c #366BC2",
|
18
|
+
" c None",
|
19
|
+
"u c #FDFEFF",
|
20
|
+
"8 c #5987D3",
|
21
|
+
"* c #C4D5F0",
|
22
|
+
"7 c #7CA0DC",
|
23
|
+
"O c #487BCE",
|
24
|
+
"< c #6B94D7",
|
25
|
+
"& c #CCDAF2",
|
26
|
+
"> c #89A9DF",
|
27
|
+
"3 c #5584D1",
|
28
|
+
"w c #82A5DE",
|
29
|
+
"1 c #3F74CB",
|
30
|
+
"+ c #3A70CA",
|
31
|
+
". c #3569BF",
|
32
|
+
"% c #D2DFF4",
|
33
|
+
"# c #3366BB",
|
34
|
+
"r c #F5F8FD",
|
35
|
+
"0 c #FAFCFE",
|
36
|
+
"4 c #DFE8F7",
|
37
|
+
"X c #5E8AD4",
|
38
|
+
"o c #5282D0",
|
39
|
+
"t c #B8CCEC",
|
40
|
+
"6 c #E5EDF9",
|
41
|
+
" ",
|
42
|
+
" ",
|
43
|
+
" ",
|
44
|
+
" ",
|
45
|
+
" ",
|
46
|
+
" .XXXooOO++@# ",
|
47
|
+
" $%&*=-;::>,<1 ",
|
48
|
+
" $2%&*=-;::><:3 ",
|
49
|
+
" $42%&*=-;::<&:3 ",
|
50
|
+
" 56477<<<<8<<9&:X ",
|
51
|
+
" 59642%&*=-;<09&:5 ",
|
52
|
+
" 5q9642%&*=-<<<<<# ",
|
53
|
+
" 5qqw777<<<<<88:>+ ",
|
54
|
+
" erqq9642%&*=t;::+ ",
|
55
|
+
" eyrqq9642%&*=t;:O ",
|
56
|
+
" eyywwww777<<<<t;O ",
|
57
|
+
" e0yyrqq9642%&*=to ",
|
58
|
+
" e00yyrqq9642%&*=o ",
|
59
|
+
" eu0wwwwwww777<&*X ",
|
60
|
+
" euu00yyrqq9642%&X ",
|
61
|
+
" eiuu00yyrqq9642%X ",
|
62
|
+
" eiiwwwwwwwwww742$ ",
|
63
|
+
" eiiiuu00yyrqq964$ ",
|
64
|
+
" eiiiiuu00yyrqq96$ ",
|
65
|
+
" eiiiiiuu00yyrqq95 ",
|
66
|
+
" eiiiiiiuu00yyrqq5 ",
|
67
|
+
" eeeeeeeeeeeeee55e ",
|
68
|
+
" ",
|
69
|
+
" ",
|
70
|
+
" ",
|
71
|
+
" ",
|
72
|
+
" "
|
73
|
+
};
|