Develop and Download Open Source Software

Browse Subversion Repository

Contents of /view.rb

Parent Directory Parent Directory | Revision Log Revision Log


Revision 52 - (show annotations) (download)
Sun Apr 22 19:56:11 2007 UTC (16 years, 11 months ago) by bluedwarf
File size: 5572 byte(s)
New function to save buffer.

1 # view.rb: the module definition of Edmaru::View.
2 #
3 # Copyright (C) 2007 Takashi Nakamoto
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License version 2 as
7 # published by the Free Software Foundation.
8 #
9 # This program is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 # 02110-1301 USA.
18 #
19
20 require "event_manager.rb"
21 require "window.rb"
22
23 module Edmaru
24
25 #Abstract class to implement system specific view.
26 module View
27
28 #Construct a view instance.
29 #
30 #=== Warning
31 #This method *MUST* *NOT* be overrided in derived classes.
32 #
33 #=== Argument
34 #_config_ :: An instance of Edmaru::ConfigurationManager.
35 #_event_manager_ :: An instance of Edmaru::EventManager to handle all events raised from this view.
36 #_buffer_manager_ :: An instance of Edmaru::BufferManager.
37 #
38 #=== Return
39 #An initialized instance of View.
40 def initialize(config, event_manager, buffer_manager)
41 @config = config
42 @event_manager = event_manager
43 @buffer_manager = buffer_manager
44 @kill_ring = ""
45 @alerting = false
46
47 init_ui
48
49 @windows = Array.new
50 @windows.push(Edmaru::SYSTEM_WINDOW.new(self, @config))
51 @focused_window = @windows[0]
52
53 @mini_window = Edmaru::SYSTEM_MINI_WINDOW.new(self, @config)
54
55 init_windows
56 @focused_window.focus_in
57
58 element = ModeLineElement.new("buffer-name", -1, 1, 1, "")
59 @windows[0].modeline.add_element(element)
60 @windows[0].modeline.show_element("buffer-name")
61
62 element = ModeLineElement.new("cursor-position", -1, 1, 1, "(*,*)")
63 @windows[0].modeline.add_element(element)
64 @windows[0].modeline.set_element_text("cursor-position",
65 "(0,0)")
66 @windows[0].modeline.show_element("cursor-position")
67 end
68
69 #The system specific initialization for this view.
70 #
71 #=== Warning
72 #This method *SHOULD* be overrided in derived classes.
73 def init_ui
74 end
75
76 #The system specific initialization for windows that belongs to this view.
77 #
78 #=== Warning
79 #This method *SHOULD* be overrided in derived classes.
80 def init_windows
81 end
82
83 #The event manager linked to this view.
84 #
85 #=== Warning
86 #This method *MUST* *NOT* be overrided in derived classes.
87 def event_manager
88 @event_manager
89 end
90
91 #The mini window displayed in the bottom of the screen.
92 #
93 #=== Warning
94 #This method *MUST* *NOT* be overrided in derived classes.
95 def mini_window
96 @mini_window
97 end
98
99 #The main wnidow
100 #
101 #=== Warning
102 #This method *MUST* *NOT* be overrided in derived classes.
103 def main_window
104 @windows[0]
105 end
106
107 #The focused window.
108 #
109 #=== Warning
110 #This method *MUST* *NOT* be overrided in derived classes.
111 def focused_window
112 @focused_window
113 end
114
115
116 #Cause the specfieid window have focus.
117 #
118 #=== Warning
119 #This method *MUST* *NOT* be overrided in derived classes.
120 def focused_window=(window)
121 prev_focused_window = @focused_window
122 @focused_window = window
123
124 prev_focused_window.focus_out
125 @focused_window.focus_in
126 end
127
128 #Push the specified string to the kill ring.
129 #
130 #ToDo: This implementation is incomplete. Kill ring doesn't store multiple
131 # strings.
132 def push_to_kill_ring(str)
133 @kill_ring = str
134 end
135
136 #Get a string from kill ring.
137 #
138 #ToDo: This implementation is incomplete. Kill ring doesn't store multiple
139 # strings.
140 def yank_from_kill_ring
141 @kill_ring
142 end
143
144 #Main loop to catch all events.
145 #
146 #=== Warning
147 #This method *SHOULD* be overrided in derived classes.
148 def main_loop
149 end
150
151 #Exit the running main loop.
152 #
153 #=== Warning
154 #This method *SHOULD* be overrided in derived classes.
155 #
156 #=== Note
157 #Some UI systems (such as Ncurses) don't exit the main loop as
158 #soon as this method is called.
159 def exit_main_loop
160 end
161
162 #Beep once.
163 #
164 #=== Warning
165 #This method *SHOULD* be overrided in derived classes.
166 def beep
167 false
168 end
169
170 #Terminate this view instance.
171 #
172 #=== Warning
173 #This method *MUST* *NOT* be overrided in derived classes.
174 def terminate
175 @windows.each{ |window|
176 window.terminate
177 }
178 @mini_window.terminate
179
180 terminate_ui
181 end
182
183 #Show alert for this view.
184 #
185 #=== Arguments
186 #_message_ :: Message to be shown.
187 #_beep_flag_ :: Whether it will beep or not.
188 #
189 #=== Warning
190 #This method *MUST* *NOT* be overrided in derived classes.
191 def show_alert(message, beep_flag = true)
192 @alerting = true
193
194 @mini_window.show_alert(message)
195 beep if beep_flag
196 end
197
198 #Hide displayed alert.
199 #
200 #=== Warning
201 #This method *MUST* *NOT* be overrided in derived classes.
202 def hide_alert
203 return if !@alerting
204 @alerting = false
205
206 @mini_window.hide_alert
207 end
208
209 #Free system specifiec resources.
210 #
211 #=== Warning
212 #This method *SHOULD* be overrided in derived classes.
213 def terminate_ui
214 end
215 end
216 end

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26