Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/develop-activity/sourceview_editor.py
diff options
context:
space:
mode:
Diffstat (limited to 'develop-activity/sourceview_editor.py')
-rw-r--r--develop-activity/sourceview_editor.py118
1 files changed, 76 insertions, 42 deletions
diff --git a/develop-activity/sourceview_editor.py b/develop-activity/sourceview_editor.py
index e29caed..e1278c7 100644
--- a/develop-activity/sourceview_editor.py
+++ b/develop-activity/sourceview_editor.py
@@ -15,40 +15,48 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import logging
-import gtk
-import gobject
-import pango
-import gtksourceview2
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
+from gi.repository import Pango
+from gi.repository import GtkSource
import os.path
import re
import mimetypes
from exceptions import ValueError, TypeError, IOError, OSError
+from sugar3 import profile
+from sugar3.graphics.icon import Icon
+
from widgets import TabLabel
+import logviewer
class S_WHERE:
selection, file, multifile = range(3) # an enum
-class GtkSourceview2Editor(gtk.Notebook):
+class GtkSourceview2Editor(Gtk.Notebook):
__gsignals__ = {
- 'changed': (gobject.SIGNAL_RUN_FIRST, None, [])
+ 'changed': (GObject.SignalFlags.RUN_FIRST, None, []),
+ 'tab-changed': (GObject.SignalFlags.RUN_FIRST, None, [str])
}
- def __init__(self, activity):
- gtk.Notebook.__init__(self)
- self.activity = activity
- self.set_size_request(gtk.gdk.screen_width(), -1)
+ def __init__(self):
+ GObject.GObject.__init__(self)
+ self.set_size_request(Gdk.Screen.width(), -1)
self.connect('page-removed', self._page_removed_cb)
self.connect('switch-page', self._switch_page_cb)
def _page_removed_cb(self, __notebook, page, n):
- page.page.remove()
+ try:
+ page.page.remove()
+ except:
+ pass
+ # the welcome page do not have a page property
def _switch_page_cb(self, __notebook, page_gptr, page_num):
- self.activity.update_sidebar_to_page(self._get_page(page_num))
- self.activity.explore_code(None, switch_page=False)
+ self.emit('tab-changed', self._get_page(page_num).full_path)
def set_to_page_like(self, full_path):
for n in range(self.get_n_pages()):
@@ -61,15 +69,23 @@ class GtkSourceview2Editor(gtk.Notebook):
def load_object(self, full_path, filename):
if self.set_to_page_like(full_path):
return
- scrollwnd = gtk.ScrolledWindow()
- scrollwnd.set_policy(gtk.POLICY_AUTOMATIC,
- gtk.POLICY_AUTOMATIC)
+ scrollwnd = Gtk.ScrolledWindow()
+ scrollwnd.set_policy(Gtk.PolicyType.AUTOMATIC,
+ Gtk.PolicyType.AUTOMATIC)
page = GtkSourceview2Page(full_path)
+
+ vbox = Gtk.VBox()
+ if full_path.endswith('.svg'):
+ icon = Icon(file=full_path, pixel_size=100,
+ xo_color=profile.get_color())
+ vbox.pack_start(icon, False, False, 0)
+
+ vbox.pack_start(scrollwnd, True, True, 0)
scrollwnd.add(page)
- scrollwnd.page = page
+ vbox.page = page
label = filename
- page.text_buffer.connect('changed', self._changed_cb)
+ page.text_buffer.connect('changed', self.__text_changed_cb)
tablabel = TabLabel(scrollwnd, label)
tablabel.connect(
@@ -77,17 +93,30 @@ class GtkSourceview2Editor(gtk.Notebook):
lambda widget, child: self.remove_page(self.page_num(child)))
tablabel.page = page
- self.append_page(scrollwnd, tablabel)
+ self.append_page(vbox, tablabel)
+
+ self.__text_changed_cb(page.text_buffer)
+ self.show_all()
+ self.set_current_page(-1)
- self._changed_cb(page.text_buffer)
+ def load_log_file(self, full_path, log_files_viewer):
+ logview = logviewer.LogView(full_path, log_files_viewer)
+ scrollwnd = Gtk.ScrolledWindow()
+ scrollwnd.set_policy(Gtk.PolicyType.AUTOMATIC,
+ Gtk.PolicyType.AUTOMATIC)
+ scrollwnd.add(logview)
+ scrollwnd.page = logview
+ tablabel = TabLabel(logview, os.path.basename(full_path))
+ tablabel.connect(
+ 'tab-close', lambda widget, child:
+ self.remove_page(self.page_num(child)))
+ self.append_page(scrollwnd, tablabel)
self.show_all()
self.set_current_page(-1)
- def _changed_cb(self, buffer):
+ def __text_changed_cb(self, buffer):
if not buffer.can_undo():
buffer.set_modified(False)
- elif not self.activity.dirty:
- self.activity.set_dirty(True)
self.emit('changed')
def _get_page(self, order=-1):
@@ -96,7 +125,7 @@ class GtkSourceview2Editor(gtk.Notebook):
else:
n = order
if self.get_nth_page(n) is not None:
- return self.get_nth_page(n).get_children()[0]
+ return self.get_nth_page(n).page
else:
return None
@@ -120,13 +149,13 @@ class GtkSourceview2Editor(gtk.Notebook):
def copy(self):
page = self._get_page()
if page:
- clip = gtk.Clipboard()
+ clip = Gtk.Clipboard()
page.get_buffer().copy_clipboard(clip)
def paste(self):
page = self._get_page()
if page:
- clip = gtk.Clipboard()
+ clip = Gtk.Clipboard()
text = clip.wait_for_text()
page.get_buffer().insert_at_cursor(text)
@@ -201,7 +230,8 @@ class GtkSourceview2Editor(gtk.Notebook):
def get_text(self):
buff = self._get_page().text_buffer
- return buff.get_text(buff.get_start_iter(), buff.get_end_iter())
+ return buff.get_text(buff.get_start_iter(), buff.get_end_iter(),
+ False)
def get_file_path(self):
return self._get_page().full_path
@@ -213,16 +243,16 @@ class GtkSourceview2Editor(gtk.Notebook):
page = self._get_page()
_buffer = page.get_buffer()
_iter = _buffer.get_iter_at_line(line - 1)
- page.scroll_to_iter(_iter, 0.0)
+ page.scroll_to_iter(_iter, 0.1, False, 0, 0)
-class GtkSourceview2Page(gtksourceview2.View):
+class GtkSourceview2Page(GtkSource.View):
def __init__(self, full_path):
'''
Do any initialization here.
'''
- gtksourceview2.View.__init__(self)
+ GtkSource.View.__init__(self)
self.full_path = full_path
@@ -232,22 +262,23 @@ class GtkSourceview2Page(gtksourceview2.View):
self.set_show_line_numbers(True)
self.set_insert_spaces_instead_of_tabs(True)
+ self.text_buffer = GtkSource.Buffer()
+
# Tags for search
- tagtable = gtk.TextTagTable()
- hilite_tag = gtk.TextTag('search-hilite')
+ tagtable = self.text_buffer.get_tag_table()
+ hilite_tag = Gtk.TextTag.new('search-hilite')
hilite_tag.props.background = '#FFFFB0'
tagtable.add(hilite_tag)
- select_tag = gtk.TextTag('search-select')
+ select_tag = Gtk.TextTag.new('search-select')
select_tag.props.background = '#B0B0FF'
tagtable.add(select_tag)
- self.text_buffer = gtksourceview2.Buffer(tag_table=tagtable)
self.set_buffer(self.text_buffer)
self.set_tab_width(4)
self.set_auto_indent(True)
- self.modify_font(pango.FontDescription('Monospace 10'))
+ self.modify_font(Pango.FontDescription('Monospace 10'))
self.load_text()
self.show()
@@ -266,7 +297,7 @@ class GtkSourceview2Page(gtksourceview2.View):
self.text_buffer.set_highlight_syntax(False)
mime_type = mimetypes.guess_type(self.full_path)[0]
if mime_type:
- lang_manager = gtksourceview2.language_manager_get_default()
+ lang_manager = GtkSource.LanguageManager.get_default()
lang_ids = lang_manager.get_language_ids()
langs = [lang_manager.get_language(i) for i in lang_ids]
for lang in langs:
@@ -284,7 +315,8 @@ class GtkSourceview2Page(gtksourceview2.View):
def save(self):
if self.text_buffer.can_undo(): # only save if there's something to
buff = self.text_buffer
- text = buff.get_text(buff.get_start_iter(), buff.get_end_iter())
+ text = buff.get_text(buff.get_start_iter(), buff.get_end_iter(),
+ False)
_file = file(self.full_path, 'w')
try:
_file.write(text)
@@ -384,7 +416,8 @@ class GtkSourceview2Page(gtksourceview2.View):
text_iter = _buffer.get_start_iter()
while True:
- next_found = text_iter.forward_search(text, 0)
+ next_found = text_iter.forward_search(
+ text, Gtk.TextSearchFlags.CASE_INSENSITIVE, None)
if next_found is None:
break
start, end = next_found
@@ -408,9 +441,11 @@ class GtkSourceview2Page(gtksourceview2.View):
text_iter = _buffer.get_iter_at_mark(_buffer.get_insert())
if direction == 'backward':
- return text_iter.backward_search(self.search_text, 0)
+ return text_iter.backward_search(
+ self.search_text, Gtk.TextSearchFlags.CASE_INSENSITIVE, None)
else:
- return text_iter.forward_search(self.search_text, 0)
+ return text_iter.forward_search(
+ self.search_text, Gtk.TextSearchFlags.CASE_INSENSITIVE, None)
def search_next(self, direction):
next_found = self.get_next_result(direction)
@@ -423,5 +458,4 @@ class GtkSourceview2Page(gtksourceview2.View):
_buffer.apply_tag_by_name('search-select', start, end)
_buffer.place_cursor(start)
- self.scroll_to_iter(start, 0.1)
- self.scroll_to_iter(end, 0.1)
+ self.scroll_to_iter(start, 0.1, False, 0, 0)