152 lines
5.9 KiB
Python
Executable File
152 lines
5.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# pylint: disable-msg=C0103
|
|
import sys
|
|
import sqlite3
|
|
|
|
try:
|
|
from gi.repository import Gtk as gtk
|
|
except:
|
|
print('GTK not available')
|
|
sys.exit(1)
|
|
|
|
class TarifCig:
|
|
|
|
def on_window1_destroy(self, object, data=None):
|
|
#print("quitter depuis croix")
|
|
gtk.main_quit()
|
|
|
|
def on_gtk_quit_activate(self, menuitem, data=None):
|
|
#print("quitter depuis menu")
|
|
gtk.main_quit()
|
|
|
|
def on_gtk_about_activate(self, menuitem, data=None):
|
|
#print("about selectionne")
|
|
self.response = self.aboutdialog.run()
|
|
self.aboutdialog.hide()
|
|
|
|
def on_gtk_search_activate(self, menuitem, data=None):
|
|
#print("lancement de la recherche")
|
|
self.response = self.dialogSearch.run()
|
|
self.dialogSearch.hide()
|
|
|
|
def on_btcancel_clicked(self, object, data=None):
|
|
print("clic sur annuler")
|
|
|
|
def on_btsearch_clicked(self, object, data=None):
|
|
#print("recherche: " + self.search.get_text())
|
|
self.label1.set_text("Recherche : " + self.search.get_text())
|
|
|
|
# On commence par vider le liststore (2è recherche)
|
|
if len(self.table) != 0:
|
|
self.table.clear()
|
|
|
|
db = sqlite3.connect("tarifs.db")
|
|
cursor = db.cursor()
|
|
cursor.execute('select * from mars2013 where nom like "%{0}%"'.format( self.search.get_text()))
|
|
db.commit()
|
|
rs = cursor.fetchall()
|
|
ct = 0
|
|
for item in rs:
|
|
ct += 1
|
|
iter = self.table.append()
|
|
#self.table.set(iter, 0, item[0], 1, item[1] + " €" if item[1] != '' else '', 2, item[2] + " €" if item[2] != '' else '')
|
|
self.table.set(iter, 0, item[0], 1, item[1], 2, item[2])
|
|
#print( item)
|
|
#self.table.append([item[0], item[1], item[2]])
|
|
cursor.close()
|
|
|
|
# On affiche le nombre de résultats trouvés par la requête
|
|
if ct == 0:
|
|
self.statusbar.push(self.context_id, "Aucun résultat trouvé")
|
|
else:
|
|
self.statusbar.push(self.context_id, str(ct) + " résultats trouvés")
|
|
|
|
|
|
def on_treeview1_row_activated(self, widget, position, column):
|
|
selection = self.tree.get_selection()
|
|
(model, iter) = selection.get_selected()
|
|
self.valeur.clear()
|
|
self.valeur.append(model.get_value(iter, 0))
|
|
self.valeur.append(model.get_value(iter, 1))
|
|
self.valeur.append(model.get_value(iter, 2))
|
|
|
|
def on_treeview1_button_press_event(self, treeview, event):
|
|
x = int(event.x)
|
|
y = int(event.y)
|
|
if event.button == 3: # Clic droit
|
|
pthinfo = self.tree.get_path_at_pos(x, y)
|
|
if pthinfo is not None:
|
|
path, col, cellx, celly = pthinfo
|
|
self.tree.grab_focus()
|
|
self.tree.set_cursor( path, col, 0)
|
|
self.popup.show_all();
|
|
self.popup.popup(None, None, None, None, event.button, event.time)
|
|
|
|
|
|
def on_copier_activate(self, menuitem, data=None):
|
|
|
|
try:
|
|
import pyperclip
|
|
except:
|
|
print('pyperclip not available')
|
|
return False
|
|
selection = self.tree.get_selection()
|
|
(model, iter) = selection.get_selected()
|
|
# On copie dans le presse papier
|
|
pyperclip.copy(model.get_value(iter, 0) + ';' + model.get_value(iter, 1) + ';' + model.get_value(iter, 2))
|
|
|
|
def cell_edited_callback(self, cellule, path, new_text,col, model=None):
|
|
iter = self.table.get_iter(path)
|
|
self.table.set_value(iter, 0, new_text)
|
|
self.update_db(tuple(self.valeur),tuple(self.table[path]))
|
|
|
|
def update_db(self, old_value, new_value):
|
|
db = sqlite3.connect("tarifs.db")
|
|
cursor = db.cursor()
|
|
cursor.execute('update mars2013 set Nom = "{0}", Prix_Unite = "{1}", Prix_Conditionne = "{2}" where Nom = "{3}" and Prix_Unite = "{4}" and Prix_Conditionne = "{5}"'.format(new_value[0],new_value[1],new_value[2],old_value[0],old_value[1],old_value[2]))
|
|
db.commit()
|
|
cursor.close()
|
|
|
|
def __init__(self):
|
|
self.gladefile = "ui.glade"
|
|
self.builder = gtk.Builder()
|
|
self.builder.add_from_file(self.gladefile)
|
|
self.builder.connect_signals(self)
|
|
self.window = self.builder.get_object("window1")
|
|
self.aboutdialog = self.builder.get_object("aboutdialog1")
|
|
self.dialogSearch = self.builder.get_object("dialogSearch")
|
|
self.label1 = self.builder.get_object("label1")
|
|
self.search = self.builder.get_object("entry1")
|
|
self.statusbar = self.builder.get_object("statusbar1")
|
|
self.context_id = self.statusbar.get_context_id("exemple")
|
|
self.actions = self.builder.get_object("actiongroup1")
|
|
self.popup = self.builder.get_object("popup")
|
|
self.table = self.builder.get_object("liststore1")
|
|
self.valeur = []
|
|
# Constuire l'entête du treeview
|
|
self.cell = gtk.CellRendererText()
|
|
self.cell2 = gtk.CellRendererText()
|
|
self.cell3 = gtk.CellRendererText()
|
|
self.cell.connect('edited', self.cell_edited_callback, 1)
|
|
self.cell2.connect('edited', self.cell_edited_callback, 2)
|
|
self.cell3.connect('edited', self.cell_edited_callback, 3)
|
|
self.cell.set_property('editable', True)
|
|
self.cell2.set_property('editable', True)
|
|
self.cell3.set_property('editable', True)
|
|
self.tree = self.builder.get_object("treeview1")
|
|
self.column1 = gtk.TreeViewColumn('Nom', self.cell, text=0)
|
|
self.column1.set_sort_column_id(0)
|
|
self.tree.append_column(self.column1)
|
|
self.column2 = gtk.TreeViewColumn('Prix unitaire', self.cell2, text=1)
|
|
self.column2.set_sort_column_id(1)
|
|
self.tree.append_column(self.column2)
|
|
self.column3 = gtk.TreeViewColumn('Prix conditionné', self.cell3, text=2)
|
|
self.column3.set_sort_column_id(2)
|
|
self.tree.append_column(self.column3)
|
|
self.window.show_all()
|
|
|
|
if __name__ == "__main__":
|
|
main = TarifCig()
|
|
gtk.main()
|