summaryrefslogtreecommitdiffstats
path: root/g-ed-it.py
blob: b0943aac3834b41d0d6cd2d5700dd756183ebe9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import gedit

import gtk
import gtk.glade

import gobject

import os
import time

ui_string = """<ui>
  <menubar name="MenuBar">
    <placeholder name="ExtraMenu_1">
      <menu action="GitMenu">
        <menuitem action="Commit"/>
        <menuitem action="Add"/>
      </menu>
    </placeholder>
  </menubar>
</ui>
"""

GLADE_FILE = os.path.join(os.path.dirname(__file__), "commit.glade")

class PluginHelper:
	def __init__(self, plugin, window):
		self.window = window
		self.plugin = plugin
		
		self.ui_id = None

		# Add a "toggle split view" item to the View menu
		self.insert_menu_item(window)
		self.load_dialogs()


		# I hardly even know how this works, but it gets our encoding.
		try: self.encoding = gedit.encoding_get_current()
		except: self.encoding = gedit.gedit_encoding_get_current()
		
	def deactivate(self):        
		self.remove_menu_item()
		
		self.window = None
		self.plugin = None
		
	def update_ui(self):
		return
		    
	def commit_action(self, window):
		self._search_dialog.show()
		pass
		
	 ###
	# Called when the "Close" button is clicked.
	def on_cancel_button_clicked(self, close_button):
		self._search_dialog.hide()
	
	def on_commit_button_clicked(self, close_button):
		pass
		
	###
    # Called when the text to be replaced is changed.
	def on_commit_text_changed(self, commit_text_entry):
		pass
		

	def add_action(self, window):
		pass

	def insert_menu_item(self, window):
		manager = self.window.get_ui_manager()
		
		self.action_group = gtk.ActionGroup("GitPluginActions")
		
		self.git_menu_action_ = gtk.Action(name="GitMenu", label="Git",          tooltip="Manage git", stock_id=None)
		self.commit_action_   = gtk.Action(name="Commit",  label="Commit",       tooltip="Commit current state", stock_id=gtk.STOCK_GO_UP)
		self.add_action_      = gtk.Action(name="Add",     label="Add to index", tooltip="", stock_id=gtk.STOCK_ADD)
		self.commit_action_.connect("activate", self.commit_action)
		self.add_action_.connect("activate", self.add_action)
		
		self.action_group.add_action(self.git_menu_action_)
		self.action_group.add_action(self.commit_action_)
		self.action_group.add_action(self.add_action_)

		# Add the action group.
		manager.insert_action_group(self.action_group, -1)

		self.ui_id = manager.add_ui_from_string(ui_string)
		
	def remove_menu_item(self):
		manager.remove_ui(self.ui_id)
		manager.remove_action_group(self.action_group)
		manager.ensure_update()
		
	###
	# Load commit dialog.
	#   - Load dialog from its Glade file
	#   - Connect widget signals
	#   - Put needed widgets in object variables. 
	def load_dialogs(self):
		self.glade_xml = gtk.glade.XML(GLADE_FILE)
		
		self._search_dialog = self.glade_xml.get_widget("commit_dialog")
		self._search_dialog.hide()
		self._search_dialog.set_transient_for(self.window)
		self._search_dialog.connect("delete_event", self._search_dialog.hide_on_delete)

		self._find_button = self.glade_xml.get_widget("commit_button")
		self._find_button.connect("clicked", self.on_commit_button_clicked)

		close_button = self.glade_xml.get_widget("cancel_button")
		close_button.connect("clicked", self.on_cancel_button_clicked)

		self._search_text_box = self.glade_xml.get_widget("commit_text")
		self._search_text_box.connect("changed", self.on_commit_text_changed)

class G_ed_it(gedit.Plugin):
	def __init__(self):
		gedit.Plugin.__init__(self)
		self.instances = {}
		
	def activate(self, window):
		self.instances[window] = PluginHelper(self, window)
		
	def deactivate(self, window):
		self.instances[window].deactivate()
		
	def update_ui(self, window):
		self.instances[window].update_ui()