Add manifest to manifest
[gpytage.git] / rightpanel.py
blob2d506c52904f3a1fa7a9ddc956012688804b343e
1 #!/usr/bin/env python
3 # GPytage rightpanel.py module
5 ############################################################################
6 # Copyright (C) 2008 by Kenneth Prugh #
7 # ken69267@gmail.com #
8 # #
9 # This program is free software; you can redistribute it and#or modify #
10 # it under the terms of the GNU General Public License as published by #
11 # the Free Software Foundation under version 2 of the license. #
12 # #
13 # This program is distributed in the hope that it will be useful, #
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
16 # GNU General Public License for more details. #
17 # #
18 # You should have received a copy of the GNU General Public License #
19 # along with this program; if not, write to the #
20 # Free Software Foundation, Inc., #
21 # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
22 ############################################################################
24 import pygtk; pygtk.require("2.0")
25 import gtk
26 import datastore
27 from window import title
28 from panelfunctions import mselected, fileEdited
30 rightview = gtk.TreeView()
31 rightselection = rightview.get_selection()
33 #set MULTIPLE selection mode
34 rightselection.set_mode(gtk.SELECTION_MULTIPLE)
36 def setListModel(list): #we need to switch the model on click
37 try:
38 rightview.set_model()
39 rightview.set_model(datastore.lists[list]) #example
40 namecol.queue_resize()
41 testcol.queue_resize()
42 filecol.queue_resize()
43 except:
44 print 'RIGHTPANEL: setListModel(); failed'
45 return
47 rightview.set_search_column(0)
48 #columns
49 namecol = gtk.TreeViewColumn('Value')
50 testcol = gtk.TreeViewColumn('Flags')
51 boolcol = gtk.TreeViewColumn() #editable col
52 filecol = gtk.TreeViewColumn()
53 #add to tree
54 rightview.append_column(namecol)
55 rightview.append_column(testcol)
56 rightview.append_column(boolcol)
57 rightview.append_column(filecol)
58 #render cell
59 cell = gtk.CellRendererText()
60 cell1 = gtk.CellRendererText()
62 #add cols to cell
63 namecol.pack_start(cell, True)
64 namecol.set_attributes(cell, text=0)
65 namecol.add_attribute(cell, "editable", 2)#set row editable
66 namecol.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE)
68 testcol.pack_start(cell1, True)
69 testcol.set_attributes(cell1, text=1)
70 testcol.add_attribute(cell1, "editable", 2)#set row editable
71 testcol.set_expand(True)
72 testcol.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE)
74 boolcol.set_visible(False)
75 filecol.set_visible(False)
77 ###########Scroll Window#########################
78 scroll = gtk.ScrolledWindow()
79 scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
80 scroll.add_with_viewport(rightview)
82 ############Drag and Drop####################
83 rightview.set_reorderable(True) # allow inline drag and drop
84 rightview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, [('text/plain', 0, 0)], gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_MOVE)
85 rightview.enable_model_drag_dest([('text/plain', 0, 0)], gtk.gdk.ACTION_DEFAULT)
86 import panelfunctions
87 rightview.connect("drag_begin", panelfunctions.drag_begin_signal)
88 rightview.connect("drag_data_delete", panelfunctions.drag_data_delete_signal)
89 rightview.connect("drag_data_received", panelfunctions.get_dragdestdata)
91 #Callbacks
92 def edited_cb(cell, path, new_text, col):
93 """ Indicate file has been edited """
94 model = rightview.get_model()
95 model[path][col] = new_text
96 #Indicate file status
97 fileEdited() #edit rightpanel to show status
98 title("* GPytage")
99 return
101 def insertrow(arg):
102 """ Insert row below selected row(s) """
103 treeview = rightview
104 model, iterdict = mselected(treeview)
105 for iter,value in iterdict.iteritems(): #Should only have 1 via right click.. funky results with accelerator.
106 if value == True:
107 parent = model.get_value(iter, 3)
108 new = model.insert_after(iter, [None, None, True, parent])
109 path = model.get_path(new)
110 treeview.set_cursor_on_cell(path, namecol, cell, True)
111 title("* GPytage")
113 def deleterow(arg):
114 """ Delete selected row(s) """
115 treeview = rightview
116 model, iterdict = mselected(treeview)
117 for iter,value in iterdict.iteritems():
118 if value == True:
119 model.remove(iter)
120 fileEdited()
121 title("* GPytage")
123 def commentRow(window):
124 """ Comment selected row(s) """
125 treeview = rightview
126 model, iterdict = mselected(treeview)
127 for iter,value in iterdict.iteritems():
128 if value == True:
129 old = model.get_value(iter, 0)
130 if old.startswith("#") is False:
131 model.set_value(iter, 0, "#"+old)
132 fileEdited()
133 title("* GPytage")
135 def uncommentRow(window):
136 """ Uncomment selected row(s) """
137 treeview = rightview
138 model, iterdict = mselected(treeview)
139 for iter,value in iterdict.iteritems():
140 if value == True:
141 old = model.get_value(iter, 0)
142 if old.startswith("#"):
143 model.set_value(iter, 0, old[1:])
144 fileEdited()
145 title("* GPytage")
147 def clicked(view, event):#needs updating from dual panels
148 """ Right click menu for rightview """
149 if event.button == 3:
150 menu = gtk.Menu()
151 irow = gtk.MenuItem("Insert Package")
152 irow.connect("activate", insertrow)
153 drow = gtk.MenuItem("Delete Package")
154 drow.connect("activate", deleterow)
155 menu.append(irow)
156 menu.append(drow)
157 menu.show_all()
158 menu.popup(None, None, None, event.button, event.time)
160 #Signals
161 cell.connect("edited", edited_cb, 0)
162 cell1.connect("edited", edited_cb, 1)
163 rightview.connect("button_press_event", clicked)