rbhex-core 1.1.0.alpha3 → 1.1.0.alpha4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +1 -1
- data/examples/atree.rb +1 -1
- data/examples/common/file.rb +2 -2
- data/examples/dbdemo.rb +1 -1
- data/examples/newtabbedwindow.rb +1 -1
- data/examples/newtesttabp.rb +4 -4
- data/examples/testbuttons.rb +3 -3
- data/examples/testcombo.rb +2 -2
- data/examples/testfields.rb +3 -3
- data/examples/testkeypress.rb +4 -4
- data/examples/testlistbox.rb +5 -5
- data/examples/testmessagebox.rb +4 -4
- data/examples/testprogress.rb +1 -1
- data/examples/testree.rb +3 -3
- data/examples/testwsshortcuts.rb +2 -2
- data/examples/testwsshortcuts2.rb +3 -3
- data/lib/rbhex/core/include/action.rb +2 -2
- data/lib/rbhex/core/include/actionmanager.rb +1 -1
- data/lib/rbhex/core/include/appmethods.rb +4 -4
- data/lib/rbhex/core/include/bordertitle.rb +6 -6
- data/lib/rbhex/core/include/chunk.rb +1 -1
- data/lib/rbhex/core/include/io.rb +2 -2
- data/lib/rbhex/core/include/listbindings.rb +2 -2
- data/lib/rbhex/core/include/listcellrenderer.rb +3 -3
- data/lib/rbhex/core/include/listscrollable.rb +1 -1
- data/lib/rbhex/core/include/listselectable.rb +13 -13
- data/lib/rbhex/core/include/multibuffer.rb +5 -5
- data/lib/rbhex/core/include/ractionevent.rb +4 -4
- data/lib/rbhex/core/include/rchangeevent.rb +3 -3
- data/lib/rbhex/core/include/rhistory.rb +1 -1
- data/lib/rbhex/core/include/rinputdataevent.rb +6 -6
- data/lib/rbhex/core/include/vieditable.rb +1 -1
- data/lib/rbhex/core/include/widgetmenu.rb +1 -1
- data/lib/rbhex/core/system/colormap.rb +1 -1
- data/lib/rbhex/core/system/ncurses.rb +1 -1
- data/lib/rbhex/core/system/window.rb +1 -1
- data/lib/rbhex/core/util/ansiparser.rb +1 -1
- data/lib/rbhex/core/util/app.rb +7 -7
- data/lib/rbhex/core/util/basestack.rb +20 -20
- data/lib/rbhex/core/util/bottomline.rb +2 -2
- data/lib/rbhex/core/util/colorparser.rb +1 -1
- data/lib/rbhex/core/util/focusmanager.rb +1 -1
- data/lib/rbhex/core/util/padreader.rb +2 -2
- data/lib/rbhex/core/util/rcommandwindow.rb +2 -2
- data/lib/rbhex/core/util/rdialogs.rb +7 -7
- data/lib/rbhex/core/util/viewer.rb +5 -5
- data/lib/rbhex/core/util/widgetshortcuts.rb +3 -3
- data/lib/rbhex/core/version.rb +1 -1
- data/lib/rbhex/core/widgets/applicationheader.rb +2 -2
- data/lib/rbhex/core/widgets/box.rb +3 -3
- data/lib/rbhex/core/widgets/divider.rb +2 -2
- data/lib/rbhex/core/widgets/keylabelprinter.rb +2 -2
- data/lib/rbhex/core/widgets/rcombo.rb +5 -5
- data/lib/rbhex/core/widgets/rcontainer.rb +2 -2
- data/lib/rbhex/core/widgets/rlink.rb +1 -1
- data/lib/rbhex/core/widgets/rlist.rb +1 -1
- data/lib/rbhex/core/widgets/rmenu.rb +15 -15
- data/lib/rbhex/core/widgets/rmenulink.rb +1 -1
- data/lib/rbhex/core/widgets/rmessagebox.rb +6 -6
- data/lib/rbhex/core/widgets/rprogress.rb +2 -2
- data/lib/rbhex/core/widgets/rtabbedpane.rb +3 -3
- data/lib/rbhex/core/widgets/rtabbedwindow.rb +2 -2
- data/lib/rbhex/core/widgets/rtextarea.rb +2 -2
- data/lib/rbhex/core/widgets/rtextview.rb +3 -3
- data/lib/rbhex/core/widgets/rtree.rb +6 -6
- data/lib/rbhex/core/widgets/rwidget.rb +12 -12
- data/lib/rbhex/core/widgets/scrollbar.rb +2 -2
- data/lib/rbhex/core/widgets/statusline.rb +1 -1
- data/lib/rbhex/core/widgets/tabular.rb +32 -32
- data/lib/rbhex/core/widgets/tabularwidget.rb +3 -3
- data/lib/rbhex/core/widgets/textpad.rb +3 -3
- data/lib/rbhex/core/widgets/tree/treecellrenderer.rb +3 -3
- data/lib/rbhex/core/widgets/tree/treemodel.rb +3 -3
- metadata +11 -11
@@ -21,7 +21,7 @@ require 'pathname'
|
|
21
21
|
1.4.0 or so.
|
22
22
|
|
23
23
|
=end
|
24
|
-
module
|
24
|
+
module Rbhex
|
25
25
|
|
26
26
|
# just so the program does not bomb due to a tiny feature
|
27
27
|
# I do not raise error on nil array, i create a dummy array
|
@@ -1778,7 +1778,7 @@ module RubyCurses
|
|
1778
1778
|
end # module
|
1779
1779
|
end # module
|
1780
1780
|
#require 'rbhex/core/util/bottomline'
|
1781
|
-
$tt ||=
|
1781
|
+
$tt ||= Rbhex::Bottomline.new
|
1782
1782
|
$tt.name = "$tt"
|
1783
1783
|
require 'forwardable'
|
1784
1784
|
module Kernel
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# make_focusable is called, or toggle_focusable. Now user can press TAB and access
|
9
9
|
# these bars. When he is done he can toggle again.
|
10
10
|
# TODO: we might add a Circular class here so user can traverse only these objects
|
11
|
-
module
|
11
|
+
module Rbhex
|
12
12
|
module FocusManager
|
13
13
|
extend self
|
14
14
|
attr_reader :focusables
|
@@ -27,7 +27,7 @@ require 'rbhex/core/widgets/rmessagebox'
|
|
27
27
|
#
|
28
28
|
def alert text, config={}
|
29
29
|
|
30
|
-
if text.is_a?
|
30
|
+
if text.is_a? Rbhex::Variable
|
31
31
|
text = text.get_value
|
32
32
|
end
|
33
33
|
_title = config[:title] || "Alert"
|
@@ -125,7 +125,7 @@ def confirm text, config={}, &block
|
|
125
125
|
title = config['title'] || "Confirm"
|
126
126
|
config[:default_button] ||= 0
|
127
127
|
|
128
|
-
mb =
|
128
|
+
mb = Rbhex::MessageBox.new config do
|
129
129
|
title title
|
130
130
|
message text, &block
|
131
131
|
button_type :yes_no
|
@@ -180,7 +180,7 @@ end
|
|
180
180
|
#private
|
181
181
|
def _print_message type, text, aconfig={}, &block #:nodoc:
|
182
182
|
case text
|
183
|
-
when
|
183
|
+
when Rbhex::Variable # added 2011-09-20 incase variable passed
|
184
184
|
text = text.get_value
|
185
185
|
when Exception
|
186
186
|
text = text.to_s
|
@@ -236,7 +236,7 @@ def rb_confirm text, aconfig={}, &block
|
|
236
236
|
default = aconfig[:default]
|
237
237
|
end
|
238
238
|
case text
|
239
|
-
when
|
239
|
+
when Rbhex::Variable # added 2011-09-20 incase variable passed
|
240
240
|
text = text.get_value
|
241
241
|
when Exception
|
242
242
|
text = text.to_s
|
@@ -398,7 +398,7 @@ def popuplist list, config={}, &block
|
|
398
398
|
#layout(1+height, width+4, row, col)
|
399
399
|
layout = { :height => 0+height, :width => 0+width, :top => row, :left => col }
|
400
400
|
window = VER::Window.new(layout)
|
401
|
-
form =
|
401
|
+
form = Rbhex::Form.new window
|
402
402
|
|
403
403
|
listconfig = config[:listconfig] || {}
|
404
404
|
listconfig[:list] = list
|
@@ -409,7 +409,7 @@ def popuplist list, config={}, &block
|
|
409
409
|
listconfig.delete(:row);
|
410
410
|
listconfig.delete(:col);
|
411
411
|
# trying to pass populists block to listbox
|
412
|
-
lb =
|
412
|
+
lb = Rbhex::List.new form, listconfig, &block
|
413
413
|
#
|
414
414
|
# added next line so caller can configure listbox with
|
415
415
|
# events such as ENTER_ROW, LEAVE_ROW or LIST_SELECTION_EVENT or PRESS
|
@@ -528,7 +528,7 @@ def ORIGdisplay_app_help
|
|
528
528
|
w = FFI::NCurses.COLS - 10
|
529
529
|
|
530
530
|
require 'rbhex/core/util/viewer'
|
531
|
-
|
531
|
+
Rbhex::Viewer.view(arr, :layout => [2, 4, h, w],:close_key => KEY_F10, :title => "[ Help ]", :print_footer => true) do |t|
|
532
532
|
# you may configure textview further here.
|
533
533
|
#t.suppress_borders true
|
534
534
|
#t.color = :black
|
@@ -7,7 +7,7 @@ require 'fileutils'
|
|
7
7
|
# TODO: add vi_keys here
|
8
8
|
# SUGGESTIONS WELCOME.
|
9
9
|
# @since 1.2.0
|
10
|
-
module
|
10
|
+
module Rbhex
|
11
11
|
# a data viewer for viewing some text or filecontents
|
12
12
|
# view filename, :close_key => KEY_ENTER
|
13
13
|
# send data in an array
|
@@ -42,12 +42,12 @@ module RubyCurses
|
|
42
42
|
|
43
43
|
layout = { :height => wh, :width => ww, :top => wt, :left => wl }
|
44
44
|
v_window = VER::Window.new(layout)
|
45
|
-
v_form =
|
45
|
+
v_form = Rbhex::Form.new v_window
|
46
46
|
colors = Ncurses.COLORS
|
47
47
|
back = :blue
|
48
48
|
back = 235 if colors >= 256
|
49
49
|
blue_white = get_color($datacolor, :white, back)
|
50
|
-
#blue_white =
|
50
|
+
#blue_white = Rbhex::Utils.get_color($datacolor, :white, 235)
|
51
51
|
textview = TextView.new v_form do
|
52
52
|
name "Viewer"
|
53
53
|
row 0
|
@@ -62,7 +62,7 @@ module RubyCurses
|
|
62
62
|
border_color blue_white
|
63
63
|
end
|
64
64
|
require 'rbhex/core/include/multibuffer'
|
65
|
-
textview.extend(
|
65
|
+
textview.extend(Rbhex::MultiBuffers)
|
66
66
|
|
67
67
|
t = textview
|
68
68
|
t.bind_key('<', 'move window left'){ f = t.form.window; c = f.left - 1; f.hide; f.mvwin(f.top, c); f.show;
|
@@ -136,7 +136,7 @@ App.new do
|
|
136
136
|
header = app_header "rbhex 1.2.0", :text_center => "Viewer Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
137
137
|
message "Press F1 to exit from here"
|
138
138
|
|
139
|
-
|
139
|
+
Rbhex::Viewer.view(ARGV[0] || $0, :close_key => KEY_ENTER, :title => "Enter to close") do |t|
|
140
140
|
# you may configure textview further here.
|
141
141
|
#t.suppress_borders true
|
142
142
|
#t.color = :black
|
@@ -29,7 +29,7 @@
|
|
29
29
|
# Or is it positioning, such as in a stack. or just a method ?
|
30
30
|
require 'rbhex/core/widgets/rlist'
|
31
31
|
require 'rbhex/core/widgets/rtextview'
|
32
|
-
module
|
32
|
+
module Rbhex
|
33
33
|
module WidgetShortcuts
|
34
34
|
class Ws
|
35
35
|
attr_reader :config
|
@@ -118,7 +118,7 @@ module RubyCurses
|
|
118
118
|
def_widget nil, :ToggleButton, 'toggle'
|
119
119
|
def menubar &block
|
120
120
|
require 'rbhex/core/widgets/rmenu'
|
121
|
-
|
121
|
+
Rbhex::MenuBar.new &block
|
122
122
|
end
|
123
123
|
def app_header title, config={}, &block
|
124
124
|
require 'rbhex/core/widgets/applicationheader'
|
@@ -188,7 +188,7 @@ module RubyCurses
|
|
188
188
|
# prints pine-like key labels
|
189
189
|
def dock labels, config={}, &block
|
190
190
|
require 'rbhex/core/widgets/keylabelprinter'
|
191
|
-
klp =
|
191
|
+
klp = Rbhex::KeyLabelPrinter.new @form, labels, config, &block
|
192
192
|
end
|
193
193
|
|
194
194
|
def link config={}, &block
|
data/lib/rbhex/core/version.rb
CHANGED
@@ -17,8 +17,8 @@
|
|
17
17
|
# ----------------------------------------------------------------------------- #
|
18
18
|
#
|
19
19
|
require 'rbhex/core/widgets/rwidget'
|
20
|
-
include
|
21
|
-
module
|
20
|
+
include Rbhex
|
21
|
+
module Rbhex
|
22
22
|
class ApplicationHeader < Widget
|
23
23
|
dsl_property :text1
|
24
24
|
dsl_property :text2
|
@@ -8,15 +8,15 @@
|
|
8
8
|
#
|
9
9
|
require 'rbhex/core'
|
10
10
|
require 'rbhex/core/include/bordertitle'
|
11
|
-
include
|
12
|
-
#include
|
11
|
+
include Rbhex
|
12
|
+
#include Rbhex::BorderTitle
|
13
13
|
|
14
14
|
# @example
|
15
15
|
#
|
16
16
|
# At a later stage, we will integrate this with lists and tables, so it will happen automatically.
|
17
17
|
#
|
18
18
|
# @since 1.4.1 UNTESTED
|
19
|
-
module
|
19
|
+
module Rbhex
|
20
20
|
class Box < Widget
|
21
21
|
|
22
22
|
include BorderTitle
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rbhex/core/util/app'
|
2
2
|
#include Ncurses # FFI 2011-09-8
|
3
|
-
include
|
3
|
+
include Rbhex
|
4
4
|
|
5
5
|
# TODO : We can consider making it independent of objects, or allow for a margin so it does not write
|
6
6
|
# over the object. Then it will be always visible.
|
@@ -14,7 +14,7 @@ include RubyCurses
|
|
14
14
|
# At a later stage, we will integrate this with lists and tables, so it will happen automatically.
|
15
15
|
#
|
16
16
|
# @since 1.2.0
|
17
|
-
module
|
17
|
+
module Rbhex
|
18
18
|
class DragEvent < Struct.new(:source, :type); end
|
19
19
|
|
20
20
|
# This is a horizontal or vertical bar (like a scrollbar), at present attached to a
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rbhex/core/widgets/rwidget'
|
2
2
|
#include Ncurses # FFI 2011-09-8
|
3
|
-
include
|
4
|
-
module
|
3
|
+
include Rbhex
|
4
|
+
module Rbhex
|
5
5
|
#
|
6
6
|
# This paints labels for various keys at the bottom of the screen, in 2 rows.
|
7
7
|
# This is based on alpines last 2 rows. Modes are supported so that the
|
@@ -13,8 +13,8 @@
|
|
13
13
|
#
|
14
14
|
require 'rbhex/core'
|
15
15
|
|
16
|
-
include
|
17
|
-
module
|
16
|
+
include Rbhex
|
17
|
+
module Rbhex
|
18
18
|
extend self
|
19
19
|
|
20
20
|
# the quick approach would be to use field, and just add a popup.
|
@@ -25,7 +25,7 @@ module RubyCurses
|
|
25
25
|
# based on the label. 2014-03-24 - 16:42
|
26
26
|
|
27
27
|
class ComboBox < Field
|
28
|
-
include
|
28
|
+
include Rbhex::EventHandler
|
29
29
|
dsl_accessor :list_config
|
30
30
|
|
31
31
|
attr_accessor :current_index
|
@@ -75,7 +75,7 @@ module RubyCurses
|
|
75
75
|
# convert given list to datamodel
|
76
76
|
def list alist=nil
|
77
77
|
return @list if alist.nil?
|
78
|
-
#@list =
|
78
|
+
#@list = Rbhex::ListDataModel.new(alist)
|
79
79
|
@list = alist
|
80
80
|
end
|
81
81
|
##
|
@@ -163,7 +163,7 @@ module RubyCurses
|
|
163
163
|
popcol = @col
|
164
164
|
dlength = @display_length
|
165
165
|
f = self
|
166
|
-
@popup =
|
166
|
+
@popup = Rbhex::PopupList.new do
|
167
167
|
row poprow
|
168
168
|
col popcol
|
169
169
|
width dlength
|
@@ -28,8 +28,8 @@ a user friendly string to identifiy the action, as well as a disabled option.
|
|
28
28
|
#require 'logger'
|
29
29
|
require 'rbhex/core'
|
30
30
|
|
31
|
-
include
|
32
|
-
module
|
31
|
+
include Rbhex
|
32
|
+
module Rbhex
|
33
33
|
extend self
|
34
34
|
|
35
35
|
|
@@ -300,7 +300,7 @@ module RubyCurses
|
|
300
300
|
item(:NO_MENUITEMS)
|
301
301
|
end
|
302
302
|
create_window
|
303
|
-
if !@parent.is_a?
|
303
|
+
if !@parent.is_a? Rbhex::MenuBar
|
304
304
|
@parent.current_menu << self
|
305
305
|
@@menus << self # NEW
|
306
306
|
end
|
@@ -321,7 +321,7 @@ module RubyCurses
|
|
321
321
|
#return if @items.nil? or @items.empty? # commented 2011-09-24 NEWMENU
|
322
322
|
#$log.debug "menu repaint: #{text} row #{@row} col #{@col} "
|
323
323
|
@color_pair = get_color($reversecolor, @color, @bgcolor)
|
324
|
-
if !@parent.is_a?
|
324
|
+
if !@parent.is_a? Rbhex::MenuBar
|
325
325
|
@parent.window.printstring( @row, 0, "|%-*s>|" % [@width-1, text], @color_pair)
|
326
326
|
@parent.window.refresh
|
327
327
|
end
|
@@ -417,7 +417,7 @@ module RubyCurses
|
|
417
417
|
def on_enter # menu.on_enter
|
418
418
|
#$log.debug "menu onenter: #{text} #{@row} #{@col} "
|
419
419
|
# call parent method. XXX
|
420
|
-
#if @parent.is_a?
|
420
|
+
#if @parent.is_a? Rbhex::MenuBar
|
421
421
|
#acolor = get_color($datacolor, @bgcolor, @color)
|
422
422
|
#@parent.window.printstring( @row, @col, " %s " % text, acolor)
|
423
423
|
#else
|
@@ -427,7 +427,7 @@ module RubyCurses
|
|
427
427
|
#$log.debug "menu onenter: #{text} calling window,show"
|
428
428
|
@window.show
|
429
429
|
select_item 0
|
430
|
-
elsif @parent.is_a?
|
430
|
+
elsif @parent.is_a? Rbhex::MenuBar and @parent.selected
|
431
431
|
# only on the top level do we open a window if a previous one was opened
|
432
432
|
#$log.debug "menu onenter: #{text} calling repaint CLASS: #{@parent.class}"
|
433
433
|
# repaint
|
@@ -438,7 +438,7 @@ module RubyCurses
|
|
438
438
|
#$log.debug "menu onleave: #{text} #{@row} #{@col} "
|
439
439
|
# call parent method. XXX
|
440
440
|
@color_pair ||= get_color($reversecolor, @color, @bgcolor)
|
441
|
-
if @parent.is_a?
|
441
|
+
if @parent.is_a? Rbhex::MenuBar
|
442
442
|
# @parent.window.printstring( @row, @col, " %s " % text, $reversecolor) # changed 2011 2011-09-24
|
443
443
|
@parent.window.printstring( @row, @col, " %s " % text, @color_pair)
|
444
444
|
@window.hide if !@window.nil?
|
@@ -452,7 +452,7 @@ module RubyCurses
|
|
452
452
|
end
|
453
453
|
end
|
454
454
|
def highlight tf=true # menu
|
455
|
-
if @parent.is_a?
|
455
|
+
if @parent.is_a? Rbhex::MenuBar # top level menu
|
456
456
|
#acolor = get_color($datacolor, @bgcolor, @color)
|
457
457
|
#@parent.window.printstring( @row, @col, " %s " % text, acolor)
|
458
458
|
@color_pair ||= get_color($reversecolor, @color, @bgcolor)
|
@@ -573,7 +573,7 @@ module RubyCurses
|
|
573
573
|
when KEY_DOWN
|
574
574
|
cmenu.select_next_item
|
575
575
|
#return cmenu.fire # XXX 2010-10-16 21:39 trying out
|
576
|
-
if cmenu.is_a?
|
576
|
+
if cmenu.is_a? Rbhex::Menu
|
577
577
|
#alert "is a menu" # this gets triggered even when we are on items
|
578
578
|
end
|
579
579
|
when KEY_UP
|
@@ -581,13 +581,13 @@ module RubyCurses
|
|
581
581
|
when KEY_ENTER, 10, 13, 32 # added 32 2008-11-27 23:50
|
582
582
|
return cmenu.fire
|
583
583
|
when KEY_LEFT
|
584
|
-
if cmenu.parent.is_a?
|
584
|
+
if cmenu.parent.is_a? Rbhex::Menu
|
585
585
|
#$log.debug "LEFT IN MENU : #{cmenu.parent.class} len: #{cmenu.parent.current_menu.length}"
|
586
586
|
#$log.debug "left IN MENU : #{cmenu.parent.class} len: #{cmenu.current_menu.length}"
|
587
587
|
end
|
588
588
|
ret = cmenu.select_left_item # 2011-09-24 V1.3.1 attempt to goto left item if columns
|
589
589
|
if ret == :UNHANDLED
|
590
|
-
if cmenu.parent.is_a?
|
590
|
+
if cmenu.parent.is_a? Rbhex::MenuBar #and !cmenu.parent.current_menu.empty?
|
591
591
|
#$log.debug " ABOU TO DESTROY DUE TO LEFT"
|
592
592
|
cmenu.current_menu.pop
|
593
593
|
@@menus.pop ## NEW
|
@@ -595,7 +595,7 @@ module RubyCurses
|
|
595
595
|
return :UNHANDLED
|
596
596
|
end
|
597
597
|
# LEFT on a menu list allows me to close and return to higher level
|
598
|
-
if cmenu.parent.is_a?
|
598
|
+
if cmenu.parent.is_a? Rbhex::Menu #and !cmenu.parent.current_menu.empty?
|
599
599
|
#$log.debug " ABOU TO DESTROY DUE TO LEFT"
|
600
600
|
cmenu.current_menu.pop
|
601
601
|
@@menus.pop ## NEW
|
@@ -606,7 +606,7 @@ module RubyCurses
|
|
606
606
|
when KEY_RIGHT
|
607
607
|
$log.debug "RIGHTIN MENU : #{text} "
|
608
608
|
if cmenu.active_index
|
609
|
-
if cmenu.items[cmenu.active_index].is_a?
|
609
|
+
if cmenu.items[cmenu.active_index].is_a? Rbhex::Menu
|
610
610
|
#alert "could fire here cmenu: #{cmenu.text}, par: #{cmenu.parent.text} "
|
611
611
|
cmenu.fire
|
612
612
|
return
|
@@ -618,8 +618,8 @@ module RubyCurses
|
|
618
618
|
ret = cmenu.select_right_item # 2011-09-24 V1.3.1 attempt to goto right item if columns
|
619
619
|
#alert "attempting to select right #{ret} "
|
620
620
|
if ret == :UNHANDLED
|
621
|
-
#if cmenu.parent.is_a?
|
622
|
-
if cmenu.parent.is_a?
|
621
|
+
#if cmenu.parent.is_a? Rbhex::Menu and !cmenu.parent.current_menu.empty?
|
622
|
+
if cmenu.parent.is_a? Rbhex::MenuBar #and !cmenu.current_menu.empty?
|
623
623
|
$log.debug " ABOU TO DESTROY DUE TO RIGHT"
|
624
624
|
cmenu.current_menu.pop
|
625
625
|
@@menus.pop
|