######################################################################## #### #### Title: line_pattern_editor.magik #### Author: Mark Cederholm #### Last Revised: 09-Feb-2004 checked against 3.3 #### #### Notes: #### #### Displays a menu to define a custom line pattern. #### Used by the line_style_palette_editor. #### ######################################################################## #********************************************************************** # Exemplar for line pattern editor #********************************************************************** remex(:line_pattern_editor) $ _pragma(classify_level=restricted, topic={style_system}) def_slotted_exemplar(:line_pattern_editor, { {:parent, _unset}, {:items, _unset} }, :model) $ #********************************************************************** # Public methods for line pattern editor #********************************************************************** _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_pattern_editor.new(a_line_style_palette_editor) >> _clone.init(a_line_style_palette_editor) _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_pattern_editor.activate_in(f) .items << hash_table.new() _self.title << "Custom Line Pattern" p << panel.new(f) p.start_row() i << .items[:pattern] << text_item.new(p,"Dash Pattern:") i.display_length << 20 p.start_row() button_item.new_safe(p, "Apply", _self, :|apply()|) button_item.new_safe(p, "Quit", _self, :|quit()|) _self.set_item_values() _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_pattern_editor.apply() d << _self.string_to_dashes(.items[:pattern].value) _if d _is _unset _then _self.show_alert("Invalid pattern entry.") _return _endif v << .parent.value col << v.colour w << v.width cap << v.cap_style j << v.join_style v2 << line_style.new(col, w, d, cap, j) .parent.value << v2 _self.set_item_values() _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_pattern_editor.note_change(who, what, _gather more_info) _if who _is .parent _and what _is :status_string _then _self.set_item_values() _endif _endmethod #********************************************************************** # Private methods for line pattern editor #********************************************************************** _pragma(classify_level=restricted, topic={style_system}, usage={external}) _private _method line_pattern_editor.init(a_line_style_palette_editor) .parent << a_line_style_palette_editor >> _super.init() _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _private _method line_pattern_editor.set_item_values() v << .parent.value .items[:pattern].value << _self.dashes_to_string(v.dash_style) # The following is a workaround to prevent a bugfire in # line_style_editor.set_gis_style_fields_for() [3.3] _if .parent.style[:pattern_name] _is _unset _then .parent.style[:pattern_name] << :custom _endif _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _private _method line_pattern_editor.dashes_to_string(a_dash_pattern) v << a_dash_pattern.dashes _if v.size = 0 _then _return "" _endif s << internal_text_output_stream.new() first? << _true _for e _over v.fast_elements() _loop _if first? _then first? << _false _else s.write(" ") _endif s.write(e) _endloop >> s.string _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _private _method line_pattern_editor.string_to_dashes(a_string) _if (s << a_string.trim_spaces()) = "" _then _return dash_pattern.solid _endif r << rope.new() v << s.split_by(character.space) _for e _over v.fast_elements() _loop _if (n << e.as_number()) _is _unset _then _return _unset _endif r.add(n) _endloop >> dash_pattern.new(r) _endmethod #********************************************************************** # Changes to line_style_palette_editor and line_style_palette #********************************************************************** _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_style_palette_editor.activate_in(f) ## Subclassed to create, in menu frame F, the additional ## buttons CUSTOM and RESET for customising the palette's ## line patterns and reseting the palette to its default .palette_canv << style_palette_view.new(.palette,f,.width,.height,_unset,_unset,_self,:|update()|, :help_id, :palette_help) _local p << panel.new(f) p.start_row() button_item.new_safe(p, "Custom...", _self, :|activate_pattern_editor()|) button_item.new_safe(p, "Reset", _self, :|reset()|) button_item.new_safe(p, _self.message(:help), _self, :help|()|, :help_id, _self.menu_help_id) button_item.new_safe(p,_self.message(:quit),_self,:|accept()|, :help_id,:quit_help) _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_style_palette_editor.activate_pattern_editor() ## Callback method for the CUSTOM button _if (i << .edit_items[:line_pattern_editor]) _is _unset _then i << .edit_items[:line_pattern_editor] << line_pattern_editor.new(_self) _endif _self.add_dependent(i, :status_string) i.activate() _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_style_palette_editor.reset() ## Resets the palette to the standard crosshatch patterns ## ## Callback method for the RESET button .palette.reset() .value << .palette.value _if .palette_canv _isnt _unset _then # Update the palette display to show the reset styles .palette_canv.redraw() _endif _self.report_value(:select, .value) _endmethod _pragma(classify_level=restricted, topic={style_system}, usage={external}) _method line_style_palette.reset() # # Reset the styles to the defaults (destroying the old) # _self.set_defaults() _self.current_cell << 1 _endmethod $