Subversion Repositories basico

Compare Revisions

Ignore whitespace Rev 376 → Rev 377

/branches/BR-0.4/basico/basico.py
54,9 → 54,9
 
 
def setup_splash(self):
self.splash = Splash(title="Basico\n0.4", font='Roboto Slab 18', font_weight='bold', font_color="#FFFFFF", background_image=FILE['SPLASH'])
# ~ self.splash.start()
self.splash = Splash(title="Basico\n0.4", font='Roboto Slab 24', font_weight='bold', font_color="#FFFFFF", background_image=FILE['SPLASH'], app=self)
 
 
def setup_environment(self):
"""
Setup Basico environment
/branches/BR-0.4/basico/data/icons/basico-check-all.svg
0,0 → 1,54
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1792"
height="1792"
viewBox="0 0 1792 1792"
version="1.1"
id="svg4"
sodipodi:docname="basico-check-all.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1023"
id="namedview6"
showgrid="false"
inkscape:zoom="0.13169643"
inkscape:cx="68.338983"
inkscape:cy="896"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
d="M1472 930v318q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q63 0 117 25 15 7 18 23 3 17-9 29l-49 49q-10 10-23 10-3 0-9-2-23-6-45-6h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-254q0-13 9-22l64-64q10-10 23-10 6 0 12 3 20 8 20 29zm231-489l-814 814q-24 24-57 24t-57-24l-430-430q-24-24-24-57t24-57l110-110q24-24 57-24t57 24l263 263 647-647q24-24 57-24t57 24l110 110q24 24 24 57t-24 57z"
id="path2" />
</svg>
/branches/BR-0.4/basico/data/icons/basico-check-none.svg
0,0 → 1,54
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1792"
height="1792"
viewBox="0 0 1792 1792"
version="1.1"
id="svg4"
sodipodi:docname="basico-check-none.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1023"
id="namedview6"
showgrid="false"
inkscape:zoom="0.13169643"
inkscape:cx="68.338983"
inkscape:cy="896"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
id="path2"
d="M 352,128 C 272.66667,128 204.83333,156.16667 148.5,212.5 92.166667,268.83333 64,336.66667 64,416 v 832 c 0,79.3333 28.166667,147.1667 84.5,203.5 56.33333,56.3333 124.16667,84.5 203.5,84.5 h 832 c 79.3333,0 147.1667,-28.1667 203.5,-84.5 56.3333,-56.3333 84.5,-124.1667 84.5,-203.5 V 930 c 0,-14 -6.6667,-23.66667 -20,-29 -4,-2 -8,-3 -12,-3 -8.6667,0 -16.3333,3.33333 -23,10 l -64,64 c -6,6 -9,13.33333 -9,22 v 254 c 0,44 -15.6667,81.6667 -47,113 -31.3333,31.3333 -69,47 -113,47 H 352 c -44,0 -81.66667,-15.6667 -113,-47 -31.33333,-31.3333 -47,-69 -47,-113 V 416 c 0,-44 15.66667,-81.66667 47,-113 31.33333,-31.33333 69,-47 113,-47 h 832 c 14.6667,0 29.6667,2 45,6 4,1.33333 7,2 9,2 8.6667,0 16.3333,-3.33333 23,-10 l 49,-49 c 8,-8 11,-17.66667 9,-29 -2,-10.66667 -8,-18.33333 -18,-23 -36,-16.66667 -75,-25 -117,-25 z m 120.60742,742.4043 c -0.003,0.003 -0.006,0.005 -0.01,0.008 l 0.0371,0.26758 c 0.005,10e-4 0.0105,0.002 0.0156,0.004 -0.0149,-0.093 -0.028,-0.1863 -0.043,-0.27929 z m 74.63086,127.62304 c -0.10811,0.61919 -0.2246,1.27351 -0.33398,1.90821 1.09442,2.33615 2.3653,5.09565 3.86328,8.42185 -0.0278,-0.1364 -0.0577,-0.2743 -0.0859,-0.4121 -1.20131,-3.535 -2.34603,-6.8283 -3.44336,-9.91796 z" />
</svg>
/branches/BR-0.4/basico/data/res/css/basico.css
1,2 → 1,0
GtkProgressBar { -GtkProgressBar-min-horizontal-bar-height: 20px; }
progress, trough { min-height: 20px; }
/branches/BR-0.4/basico/services/srv_callbacks.py
189,7 → 189,7
dialog.set_default_size(800, 400)
res_bck_file = dialog.run()
self.log.debug("Backup file: %s", dialog.get_filename())
 
if res_bck_file == Gtk.ResponseType.OK:
backup_filename = dialog.get_filename()
if res_bck_annot == Gtk.ResponseType.YES:
202,7 → 202,7
self.log.info(msg)
self.srvuif.statusbar_msg(msg, True)
self.srvuif.copy_text_to_clipboard(bckname)
 
else:
self.srvuif.statusbar_msg("Backup aborted by user", True)
self.log.info("Backup aborted")
359,7 → 359,7
 
def gui_annotation_widget_show(self, widget, sid='0000000000', action='create'):
widget_annotation = self.srvgui.get_widget('widget_annotation')
widget = self.srvgui.get_widget('gtk_label_timestamp_created')
widget = self.srvgui.get_widget('gtk_label_timestamp_created')
vpaned = self.srvgui.get_widget('gtk_vpaned_visor')
vpaned.set_position(0)
if action == 'create':
554,7 → 554,7
elif page == 1:
visor_annotations = self.srvgui.get_widget('visor_annotations')
visor_annotations.populate()
visible_filter = visor.get_visible_filter()
visible_filter = visor_annotations.get_visible_filter()
visible_filter.refilter()
visor_annotations.update_total_annotations_count()
 
614,18 → 614,15
 
def action_annotation_delete(self, *args):
visor_annotations = self.srvgui.get_widget('visor_annotations')
widget_annotation = self.srvgui.get_widget('widget_annotation')
aid = widget_annotation.get_aid_from_widget()
title = self.srvant.get_title(aid)
answer = self.srvuif.warning_message_delete_annotations(None, 'Deleting annotations', 'Are you sure?', [aid])
aids = visor_annotations.rows_toggled()
answer = self.srvuif.warning_message_delete_annotations(None, 'Deleting annotations', 'Are you sure?', aids)
if answer is True:
self.srvant.delete(aid)
self.gui_annotation_widget_clear()
self.srvuif.set_widget_visibility('gtk_vbox_container_annotations', False)
for aid in aids:
self.srvant.delete(aid)
visor_annotations.populate()
self.srvuif.statusbar_msg("Annotation <i>'%s'</i> deleted" % title, True)
self.srvuif.statusbar_msg("Annotations deleted", True)
else:
self.log.info("Annotation %s hasn't been deleted" % title)
self.log.info("Annotations hasn't been deleted")
self.srvuif.statusbar_msg("Action canceled. Nothing deleted.", True)
 
self.srvuif.grab_focus()
638,7 → 635,7
viewmenu = self.srvgui.get_widget('viewmenu')
 
aid = widget_annotation.get_aid_from_widget()
annotation = widget_annotation.get_metadata_from_widget()
annotation = widget_annotation.get_metadata_from_widget()
 
if self.srvant.is_valid(aid):
self.srvant.update(annotation)
815,7 → 812,7
visor_annotations = self.srvgui.get_widget('visor_annotations')
visor_annotations.row_previous()
 
 
def gui_annotation_next_row(self, *args):
visor_annotations = self.srvgui.get_widget('visor_annotations')
visor_annotations.row_next()
859,8 → 856,8
self.srvuif.statusbar_msg(msg)
GObject.signal_handler_unblock(notebook, signal)
paned.set_position(400)
 
 
def gui_link_to_sapnote(self, *args):
pass
 
908,7 → 905,7
visor_attachemnts = self.srvgui.get_widget('visor_attachments')
visor_annotations = self.srvgui.get_widget('visor_annotations')
visor_sapnotes = self.srvgui.get_widget('visor_sapnotes')
 
# Create annotation
aid = self.srvant.gen_aid(sid)
annotation = {}
916,15 → 913,15
annotation["Title"] = "Attachments added for SAP Note %s" % str(int(sid))
annotation["Component"] = "Annotation"
annotation["Type"] = "Note"
annotation["Category"] = "Inbox"
annotation["Category"] = "Inbox"
annotation["Priority"] = "Low"
annotation["Link"] = ""
annotation["Link"] = ""
annotation["LinkType"] = "Website"
annotation["Origin"] = "Service-Attachment"
 
# Get attachments from filechooser dialog
attachments = self.gui_attachment_show_filechooser()
 
# Add them to Basico database
if attachments is not None:
content = '== Attachments\n\n'
949,7 → 946,7
visor_attachemnts = self.srvgui.get_widget('visor_attachments')
visor_annotations = self.srvgui.get_widget('visor_annotations')
aid = widget_annotation.get_aid_from_widget()
 
# Create annotation
sid = self.srvant.get_sid(aid)
new_aid = self.srvant.gen_aid(sid)
958,12 → 955,12
annotation["Title"] = "Attachments added for annotation: %s" % self.srvant.get_title(aid)
annotation["Component"] = "Annotation"
annotation["Type"] = "Note"
annotation["Category"] = "Inbox"
annotation["Category"] = "Inbox"
annotation["Priority"] = "Low"
annotation["Link"] = ""
annotation["Link"] = ""
annotation["LinkType"] = "Website"
annotation["Origin"] = "Service-Attachment"
 
# Get attachments from filechooser dialog
attachments = self.gui_attachment_show_filechooser()
 
984,13 → 981,13
visor_annotations.populate()
else:
self.log.warning("No files selected to attach")
 
 
def gui_attachment_add(self, button):
visor_attachemnts = self.srvgui.get_widget('visor_attachments')
visor_annotations = self.srvgui.get_widget('visor_annotations')
visor_sapnotes = self.srvgui.get_widget('visor_sapnotes')
 
# Create annotation
aid = self.srvant.gen_aid('0000000000')
annotation = {}
998,15 → 995,15
annotation["Title"] = "Attachments added"
annotation["Component"] = "Annotation"
annotation["Type"] = "Note"
annotation["Category"] = "Inbox"
annotation["Category"] = "Inbox"
annotation["Priority"] = "Low"
annotation["Link"] = ""
annotation["Link"] = ""
annotation["LinkType"] = "Website"
annotation["Origin"] = "Service-Attachment"
 
# Get attachments from filechooser dialog
attachments = self.gui_attachment_show_filechooser()
 
# Add them to Basico database
if attachments is not None:
content = '== Attachments\n\n'
1030,7 → 1027,7
dialog = Gtk.FileChooserDialog(title="Open file(s) ...",
parent=parentwin,
action=Gtk.FileChooserAction.OPEN,
buttons=("_Cancel",
buttons=("_Cancel",
Gtk.ResponseType.CANCEL,
"_Open", Gtk.ResponseType.ACCEPT))
dialog.set_select_multiple(True)
1044,6 → 1041,6
i += 1
dialog.destroy()
return filenames
 
def copy_text_to_clipboard(self, widget, text):
self.srvuif.copy_text_to_clipboard(text)
/branches/BR-0.4/basico/services/srv_collections.py
101,7 → 101,7
return (False, msg)
 
name_exists = name in self.get_collections_name()
if name_exists:
if name_exists:
cid = self.get_cid_by_name(name)
msg = "Collection '%s' already exists in the database with cid: %s" % (name, cid)
self.log.info("Collection '%s' already exists in the database with cid: %s" % (name, cid))
113,12 → 113,12
if cid_exists:
self.log.info("Collision? :) Let's try again with another id...")
self.create(name)
self.clts[cid] = name
 
self.clts[cid] = name
msg = "Created collection: '%s' with cid: '%s'" % (name, cid)
self.log.info(msg)
if batch is False:
self.save()
self.save()
return (True, "Created collection: %s" % name)
 
 
128,7 → 128,7
if name == 'Downloaded':
self.log.warning("You can't delete this collection")
return
 
try:
sapnotes = self.srvdtb.get_notes_by_node('collection', cid)
if len(sapnotes) > 0:
148,7 → 148,7
 
 
def get_name_by_cid(self, cid):
try:
try:
return self.clts[cid]
except KeyError:
return None
/branches/BR-0.4/basico/services/srv_database.py
257,7 → 257,6
self.save_notes()
self.log.info("SAP Notes database not found. Created a new database for SAP Notes")
 
 
def get_sapnote_metadata(self, sid):
sid = self.normalize_sid(sid)
 
/branches/BR-0.4/basico/widgets/wdg_splash.py
4,54 → 4,24
# File: setup.py
# Author: Tomás Vírseda
# License: GPL v3
# Description: setup.py tells you that the module/package you are about
# to install has been packaged and distributed with Distutils, which is
# the standard for distributing Python Modules.
# Description: splash screen for Basico
#
# !!!
# Code borrowed from: https://github.com/SolydXK/solydxk-system/blob/origin/master/usr/lib/solydxk/system/splash.py
# Code borrowed and modified from: https://github.com/SolydXK/solydxk-system/blob/origin/master/usr/lib/solydxk/system/splash.py
# !!!
#
"""
 
# ====================================================================
# Class to show a splash screen while application is loading
# ====================================================================
# Initiate the splash screen:
# from splash import Splash
# splash = Splash(title='Splash Screen')
# Other arguments: width, height, font, font_weight, font_color, background_color, background_image.
# width and height are ignored when background_image is used.
# background_color is ignored when background_image is provided.
# font can be the font name with size: font='Roboto Slab 18', or only the size in which it will use the system default font.
# font_weight can be ultralight, light, normal, bold, ultrabold, heavy, or a numeric weight.
#
# Start the splash screen:
# splash.start()
#
# When done:
# splash.destroy()
#
# Note: you can hide and show the splash screen when needed:
# splash.hide()
# splash.show()
# ====================================================================
 
# Make sure the right Gtk version is loaded
import gi
gi.require_version('Gtk', '3.0')
 
# from gi.repository import Gtk, GdkPixbuf, GObject, Pango, Gdk
# ~ import time
from gi.repository import Gtk, Gdk
# ~ from threading import Thread
from os.path import exists
from basico.core.mod_log import get_logger
 
 
class Splash():
def __init__(self, title, width=400, height=250, font=16, font_weight='normal', font_color='000000', background_color='ffffff', background_image=None):
# ~ Thread.__init__(self)
def __init__(self, title, width=400, height=250, font=36, font_weight='normal', font_color='000000', background_color='ffffff', background_image=None, app=None):
self.log = get_logger(__class__.__name__)
self.title = title
self.width = width
60,6 → 30,7
self.font_weight = font_weight
self.font_color = self.prep_hex_color(font_color)
self.background_image = '' if background_image is None else background_image
self.app = app
 
# Window settings
self.window = Gtk.Window(Gtk.WindowType.POPUP)
86,6 → 57,7
box.set_margin_top(self.height / 3)
box.set_margin_left(20)
box.set_margin_right(20)
 
# Add the box to a new overlay in the existing overlay
overlay.add_overlay(box)
lbl_title = Gtk.Label()
97,13 → 69,16
self.font_weight,
self.title))
box.pack_start(lbl_title, False, True, 0)
 
self.run()
 
 
def run(self):
# Show the splash screen
self.window.show_all()
# Without this ugly one-liner, the window won't show
while Gtk.events_pending(): Gtk.main_iteration()
while Gtk.events_pending():
Gtk.main_iteration()
self.log.debug("Show the splash screen")
 
 
116,6 → 91,7
hex_color = hex_color.ljust(8, 'f')
return hex_color
 
 
def hex_to_rgba(self, hex_color, as_gdk_rgba=False):
hex_color = self.prep_hex_color(hex_color)
# Create a list with rgba values from hex_color
129,15 → 105,17
return Gdk.RGBA(rgba[0], rgba[1], rgba[2], rgba[3])
return rgba
 
 
def show(self):
self.window.show()
# ~ self.log.debug("Show the splash screen")
# ~ time.sleep(3)
self.log.debug("Show the splash screen")
 
 
def hide(self):
self.window.hide()
# ~ self.log.debug("Hide the splash screen")
self.log.debug("Hide the splash screen")
 
 
def destroy(self):
while Gtk.events_pending(): Gtk.main_iteration()
self.window.destroy()
/branches/BR-0.4/basico/widgets/wdg_visor_annotations.py
147,7 → 147,7
self.pack_start(scr, True, True, 0)
 
# Setup model
self.model = Gtk.TreeStore(
self.model = Gtk.ListStore(
int, # key
Pixbuf, # Icon
int, # checkbox
203,7 → 203,7
self.renderer_checkbox.connect("toggled", self.toggle_checkbox)
self.column_checkbox = Gtk.TreeViewColumn('', self.renderer_checkbox, active=2)
self.column_checkbox.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
self.column_checkbox.set_visible(False)
self.column_checkbox.set_visible(True)
self.column_checkbox.set_expand(False)
self.column_checkbox.set_clickable(True)
self.column_checkbox.set_sort_indicator(True)
350,7 → 350,7
self.column_timestamp.set_sort_column_id(11)
self.column_timestamp.set_sort_order(Gtk.SortType.ASCENDING)
self.treeview.append_column(self.column_timestamp)
 
# Treeview properties
self.treeview.set_can_focus(False)
self.treeview.set_enable_tree_lines(True)
363,7 → 363,7
self.treeview.connect('button_press_event', self.row_right_click)
 
self.treeview.modify_font(Pango.FontDescription('Monospace 9'))
 
# DOC: In order to have a Gtk.Widged with sorting and filtering
# capabilities, you have to filter the model first, and use this
# new model to create the sorted model. Then, attach the sorted
437,8 → 437,8
selection = self.treeview.get_selection()
model, treeiter = selection.get_selected()
return treeiter
 
 
def row_previous(self, *args):
selection = self.treeview.get_selection()
model, iter_current = selection.get_selected()
447,7 → 447,7
if iter_previous:
selection.select_iter(iter_previous)
 
 
def row_next(self, *args):
selection = self.treeview.get_selection()
model, iter_current = selection.get_selected()
459,8 → 459,20
row = self.srvuif.tree_path_to_row(path)
self.treeview.scroll_to_cell(row, column=None, use_align=False, row_align=0.5, col_align=0)
 
 
def rows_toggled(self):
selected = []
 
def get_selected_sapnotes(model, path, itr):
aid = self.sorted_model.get(itr, 10)[0]
checked = self.sorted_model.get(itr, 2)[0]
if checked:
selected.append(str(aid))
 
self.sorted_model.foreach(get_selected_sapnotes)
return selected
 
 
def row_changed(self, selection):
try:
model, treeiter = selection.get_selected()
475,7 → 487,7
# ~ self.srvclb.action_annotation_edit(aid)
else:
aid = None
self.srvuif.set_widget_visibility('gtk_vbox_container_annotations', False)
self.srvuif.set_widget_visibility('gtk_vbox_container_annotations', False)
except Exception as error:
pass
# ~ head = "Error reading annotation's contents"
490,8 → 502,9
 
 
def toggle_checkbox(self, cell, path):
path = self.sorted_model.convert_path_to_child_path(Gtk.TreePath(path))
self.model[path][2] = not self.model[path][2]
model = self.sorted_model.get_model()
# ~ path = model.convert_path_to_child_path(Gtk.TreePath(path))
model[path][2] = not model[path][2]
 
 
def get_node(self, key, icon, checkbox, sid, title, component, category='', sntype='', priority='', updated='', aid='', ts_updated='', created='', ts_created=''):
534,7 → 547,7
 
def populate(self, annotations=None):
self.column_sid.set_visible(False)
self.column_checkbox.set_visible(False)
self.column_checkbox.set_visible(True)
self.column_category.set_visible(True)
self.column_component.set_visible(False)
completion = self.srvgui.get_widget('gtk_entrycompletion_visor')
620,7 → 633,7
self.log.error(error)
 
for node in nodes:
self.model.append(ppid, node)
self.model.append(node)
 
self.treeview.set_model(self.sorted_model)
self.sort_by_timestamp()
629,7 → 642,7
 
 
def show_widgets(self):
self.srvuif.set_widget_visibility('gtk_label_total_notes', True)
self.srvuif.set_widget_visibility('gtk_label_total_notes', True)
 
 
def row_double_click(self, treeview, row, col):
683,9 → 696,9
vpaned.set_position(1000)
popover.add(box)
self.srvclb.gui_show_popover(None, popover)
 
 
 
def build_popover(self, aid, popover, component):
sid = self.srvant.get_sid(aid)
 
705,12 → 718,23
if component == 'Annotation':
box = Gtk.Box(spacing = 3, orientation="vertical")
 
# Popover button "Delete annotation"
button = get_popover_button("<b>Delete</b> annotation", 'basico-delete')
button = get_popover_button("<b>Select all</b>", 'basico-check-all')
button.show_all()
button.connect('clicked', self.srvclb.action_annotation_delete)
button.connect('clicked', self.select_all, True)
box.pack_start(button, False, False, 0)
 
button = get_popover_button("<b>Select none</b>", 'basico-check-none')
button.show_all()
button.connect('clicked', self.select_all, False)
box.pack_start(button, False, False, 0)
 
# Popover button "Delete annotation"
if len(self.rows_toggled()) > 0:
button = get_popover_button("<b>Delete</b> annotations", 'basico-delete')
button.show_all()
button.connect('clicked', self.srvclb.action_annotation_delete)
box.pack_start(button, False, False, 0)
 
# Popover button "Jump to SAP Note"
if sid != '0000000000':
# Jump to SAP Note
723,6 → 747,16
return box
 
 
def select_all(self, button, checked):
def check_row(model, path, itr):
# ~ model[path][2] = not model[path][2]
model[path][2] = checked
 
model = self.sorted_model.get_model()
model.foreach(check_row)
 
 
 
def connect_menuview_signals(self):
# Categories
button = self.srvgui.get_widget('gtk_togglebutton_categories')
/branches/BR-0.4/setup.py
81,6 → 81,8
'basico/data/icons/basico-browse.svg',
'basico/data/icons/basico-category.svg',
'basico/data/icons/basico-chart.svg',
'basico/data/icons/basico-check-all.svg',
'basico/data/icons/basico-check-none.svg',
'basico/data/icons/basico-check-accept.svg',
'basico/data/icons/basico-check-cancel.svg',
'basico/data/icons/basico-chronologic.svg',