rendered paste bodyimport gtk;
import gtksourceview;
import mimetypes;
import sys;
class editor :
def __init__ ( self ) :
self.window = gtk.Window ( gtk.WINDOW_TOPLEVEL );
self.window.connect("delete_event", self.delete_window );
self.window.set_title ( 'Simple Editor' );
self.window.resize ( 400, 400 );
self.vbox = gtk.VBox ( False, 1 );
self.vbox.set_border_width ( 0 );
self.window.add ( self.vbox );
self.vbox.show()
ui_string = """
<ui>
<menubar name="MenuBar">
<menu action="File">
<menuitem action="New"/>
<menuitem action="Open"/>
<menuitem action="Save"/>
<menuitem action="Save As"/>
<separator/>
<menuitem action="Close"/>
<menuitem action="Quit"/>
</menu>
<menu action="Edit">
<menuitem action="Undo"/>
<menuitem action="Redo"/>
<separator/>
<menuitem action="Cut"/>
<menuitem action="Copy"/>
<menuitem action="Paste"/>
<menuitem action="Delete"/>
<separator/>
<menuitem action="Select All"/>
</menu>
<menu action="Help">
<menuitem action="About"/>
</menu>
</menubar>
<toolbar name="ToolBar">
<toolitem action="New"/>
<toolitem action="Open"/>
<toolitem action="Save"/>
<toolitem action="Save As"/>
<separator/>
<toolitem action="Save Session"/>
</toolbar>
</ui>
"""
action_group = gtk.ActionGroup ( 'simpleeditor' );
action_group.add_actions ( [
('File', None, '_File'),
('New', gtk.STOCK_NEW, '_New', None, 'Create a new file!',
self.new_file),
('Open', gtk.STOCK_OPEN, '_Open', None, 'Open a file!',
self.open_file),
('Save', gtk.STOCK_SAVE, '_Save', None, 'Save file!',
self.poo),
('Save As', gtk.STOCK_SAVE_AS, 'Save As', None, 'Save file as...',
self.poo),
('Execute', gtk.STOCK_EXECUTE, 'Execute', None, 'Execute',
self.poo),
('Close', gtk.STOCK_CLOSE, '_Close', None, 'Close a tab!',
self.poo),
('Quit', gtk.STOCK_QUIT, '_Quit', None, 'Quit!',
self.poo),
('Save Session', gtk.STOCK_PASTE, 'Save Session', None, 'Save Session!',
self.poo),
('Edit', None, '_Edit'),
('Undo', gtk.STOCK_UNDO, '_Undo', None, 'Undo', None),
('Redo', gtk.STOCK_REDO, '_Redo', None, 'Redo', None),
('Cut', gtk.STOCK_CUT, 'Cu_t', None, 'Cut', self.poo),
('Copy', gtk.STOCK_COPY, '_Copy', None, 'Copy', self.poo),
('Paste', gtk.STOCK_PASTE, '_Paste', None, 'Paste', self.poo),
('Delete', gtk.STOCK_DELETE, '_Delete', None, 'Delete', self.poo),
('Select All', None, 'Select _All', None, 'Select All', None),
('Help', None, '_Help'),
('About', gtk.STOCK_ABOUT, '_About', None, 'About', self.poo)
] );
uimanager = gtk.UIManager ( );
uimanager.insert_action_group ( action_group, 0 );
uimanager.add_ui_from_string ( ui_string );
accel_group = uimanager.get_accel_group ( );
self.window.add_accel_group ( accel_group );
self.menubar = uimanager.get_widget ( '/MenuBar' );
self.toolbar = uimanager.get_widget ( '/ToolBar' );
self.vbox.pack_start ( self.menubar, False );
self.vbox.pack_start ( self.toolbar, False );
self.notebook = gtk.Notebook ( );
self.notebook.set_tab_pos ( gtk.POS_TOP );
self.notebook.show ( );
source_buffer = self.create_buffer ( );
self.view = gtksourceview.SourceView ( source_buffer );
self.view.set_show_line_numbers ( True );
self.view.set_tabs_width ( 8 );
self.view.grab_focus ( );
scrolled_window = gtk.ScrolledWindow ( );
scrolled_window.set_policy ( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC );
scrolled_window.add ( self.view );
scrolled_window.show ( );
self.frame = gtk.Frame ( );
self.frame.set_border_width ( 10 );
self.frame.set_size_request ( 100, 75 );
self.frame.add ( scrolled_window );
self.frame.show ( );
label = gtk.Label( 'Untitled 1' );
tabeventbox = gtk.EventBox ( );
tabeventbox.connect ( 'button-press-event', self.poo );
tabeventbox.set_visible_window ( False );
tabhbox = gtk.HBox ( False, 2 );
tabtooltip = gtk.Tooltips ( );
tabtooltip.set_tip ( tabeventbox, 'Untitled 1' );
tabtooltip.enable ( );
tabbutton = gtk.Button ( );
tabbutton.set_relief ( gtk.RELIEF_NONE );
tabbutton.connect ( 'clicked', self.close_tab );
tabbutton.set_use_underline ( False );
image = gtk.Image ( );
image.set_from_stock ( gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU );
tabbutton.set_image ( image );
tabbutton.set_focus_on_click ( True );
tabhbox.pack_start ( label, False );
tabhbox.pack_end ( tabbutton, False, False );
tabhbox.show_all ( );
tabeventbox.add ( tabhbox );
self.notebook.append_page ( self.frame, tabeventbox );
self.vbox.pack_end ( self.notebook, True, True, 0 );
self.window.show_all ( );
def delete_window ( self, widget, event = None ):
gtk.main_quit ( );
return gtk.False;
def open_file ( self, event = None ) :
dialog = gtk.FileChooserDialog (
"Open File ...",
None,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK)
);
dialog.set_default_response ( gtk.RESPONSE_OK );
dialog.set_select_multiple ( True );
response = dialog.run ( );
if ( response == gtk.RESPONSE_OK ) :
for i in dialog.get_filenames ( ) :
mime = mimetypes.guess_type ( i )[ 0 ];
self.add_tab ( mime, i );
elif ( response == gtk.RESPONSE_CANCEL ) :
dialog.destroy ( );
dialog.destroy ( );
def new_file ( self, name = None, widget = None, event = None ) :
self.add_tab ( 'text/plain', '' );
def poo ( self, name = None, widget = None, event = None ) :
print 1;
def get_currentbuffer ( self ) :
current_buffer = self.notebook.get_nth_page ( self.notebook.get_current_page ( ) ).get_child ( );
return current_buffer.get_child ( );
def create_buffer ( self, language = 'text/x-python' ) :
source_languages_manager = gtksourceview.SourceLanguagesManager ( );
source_buffer = gtksourceview.SourceBuffer ( );
source_buffer.set_language ( source_languages_manager.get_language_from_mime_type ( language ) );
source_buffer.set_highlight ( True );
return source_buffer;
def close_tab ( self, name = None, widget = None, event = None ) :
self.notebook.remove_page ( self.notebook.get_current_page ( ) );
def add_tab ( self, mime, filename ) :
source_buffer = self.create_buffer ( mime );
view = gtksourceview.SourceView ( source_buffer );
view.set_show_line_numbers ( True );
view.set_tabs_width ( 8 );
view.grab_focus ( );
view.show ( );
scrolled_window = gtk.ScrolledWindow ( );
scrolled_window.set_policy ( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC );
scrolled_window.add ( view );
scrolled_window.show ( );
frame = gtk.Frame ( );
frame.set_border_width ( 10 );
frame.set_size_request ( 100, 75 );
frame.add ( scrolled_window );
frame.show ( );
try :
file_name = filename.split ( '/' );
file_name = file_name[ len ( file_name ) - 1 ];
except :
file_name = 'Untitled';
label = gtk.Label( file_name );
tabeventbox = gtk.EventBox ( );
tabeventbox.connect ( 'button-press-event', self.poo );
tabeventbox.set_visible_window ( False );
tabhbox = gtk.HBox ( False, 2 );
tabtooltip = gtk.Tooltips ( );
tabtooltip.set_tip ( tabeventbox, file_name );
tabtooltip.enable ( );
tabbutton = gtk.Button ( );
tabbutton.set_relief ( gtk.RELIEF_NONE );
tabbutton.connect ( 'clicked', self.close_tab );
tabbutton.set_use_underline ( False );
image = gtk.Image ( );
image.set_from_stock ( gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU );
tabbutton.set_image ( image );
tabbutton.set_focus_on_click ( True );
tabhbox.pack_start ( label, False );
tabhbox.pack_end ( tabbutton, False, False );
tabhbox.show_all ( );
tabeventbox.add ( tabhbox );
try :
source_buffer.insert ( source_buffer.get_start_iter(), open ( filename ).read ( ) );
except :
source_buffer.insert ( source_buffer.get_start_iter(), '' );
self.current_page = self.notebook.append_page ( frame, tabeventbox );
self.notebook.set_current_page ( self.current_page );
def main ( ) :
app = editor ( );
gtk.main ( );
if ( __name__ == '__main__' ) :
main ( );
"""
print view.get_buffer ( );
GET TEXT
fd = open(filepath, 'w')
fd.write(self.buffer.get_text(
self.buffer.get_start_iter(),
self.buffer.get_end_iter(), False))
fd.close()
SET MODIFIED
self.buffer.set_modified(False)
FONT
source_view.modify_font(pango.FontDescription('Monospace'))"""