DivxManager WXPython fileThis file is the main application, use it with a sample database file Size 22.6 kB - File type text/python-sourceFile contents# -*- coding: latin-1 -*-
# GNU GPL
# Program Par Jean-François Roche <jfroche@jfroche.be>
# For more informations do not hesitate to send email.
from wxPython.wx import *
from wxPython.gizmos import *
import time
import sys
import os
import traceback
ID_ABOUT = 7
genre_list = ['Comedie','Drame','Comedie Dramatique','Science Fiction','Action',
'Aventure','Film Policier','Film pour Enfants','Documentaire']
class edit_frame(wxDialog):
ID_LISTBOX = 10006
ID_TEXT = 10007
ID_TEXTCTRL = 19233
ID_BUTTON = 13344
ID_CHOICE = 13333
def __init__(self,parent,right,divx):
wxDialog.__init__(self, parent, 134,'Edition du film ',
wxDefaultPosition,(750,400),style=wxDIALOG_MODAL |
wxDEFAULT_DIALOG_STYLE| wxRESIZE_BORDER )
self.Centre()
self.parent = right
self.divx = divx
self.SetReturnCode(666)
# wxFrame.__init__(self,parent.parent, 134, 'test')
panel = wxPanel(self, -1)
self.divx = divx
self.formular()
self.edited = 0
def formular(self):
item1 = wxStaticText( self, self.ID_TEXT, "Titre:", (10,10), wxDefaultSize, 0 )
item1.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD,true ) )
self.titre = wxTextCtrl( self, self.ID_TEXTCTRL, self.divx.title, (65,11), wxSize(200,-1), 0 )
self.titre.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
self.titre.SetForegroundColour( wxRED )
item3 = wxStaticText( self, self.ID_TEXT, "Realisateur:", (10,40), wxDefaultSize, 0 )
item3.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.realisateur = wxTextCtrl( self, self.ID_TEXTCTRL, self.divx.realisateur, (110,40), wxSize(200,-1), 0 )
self.realisateur.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item5 = wxStaticText( self, self.ID_TEXT, "Date de sortie:", (10,70), wxDefaultSize, 0 )
item5.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.date = wxTextCtrl( self, self.ID_TEXTCTRL, self.divx.date_sortie, (120,71), wxSize(120,-1), 0 )
self.date.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item7 = wxStaticText( self, self.ID_TEXT, "Duree:", (10,100), wxDefaultSize, 0 )
item7.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.minut = wxTextCtrl(self, self.ID_TEXTCTRL, self.divx.mins, (65,100), wxSize(36,-1), 0 )
self.minut.SetMaxLength(3)
self.minut.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item10 = wxStaticText( self, self.ID_TEXT, ":", (95,100), wxDefaultSize, 0 )
item10.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.second = wxTextCtrl( self, self.ID_TEXTCTRL, self.divx.secs, (100,100), wxSize(30,-1), 0 )
self.second.SetMaxLength(2)
self.second.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
# item12 = wxStaticText( self, self.ID_TEXT, "Acteurs:", (10,130), wxDefaultSize, 0 )
# item12.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
#self.acteur = wxTextCtrl( self, self.ID_TEXT,"", (75,130), wxSize(100,-1), 0 )
#self.acteur.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
self.acteur = wxEditableListBox(self, -1, "Liste des acteurs",(10,130), (250, 100))
self.acteur.SetStrings(self.divx.acteur)
item15 = wxStaticText( self, self.ID_TEXT, "Genre:", (10,240), wxDefaultSize, 0 )
item15.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.genre = wxChoice( self, self.ID_CHOICE, (70,240), wxSize(160,-1),genre_list, 0 )
self.genre.SetSelection(int(self.divx.genre))
item14 = wxStaticText( self, self.ID_TEXT, "Qualite:", (10,265), wxDefaultSize, 0 )
item14.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
# self.qualite = wxTextCtrl( self, self.ID_TEXT,"",(75,160), wxSize(100,-1), 0 )
# self.qualite.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
self.qualite = wxChoice( self, self.ID_CHOICE, (75,265), wxSize(120,-1),
['Moins bonne qualite',u'Qualité Moyenne',u'Très Bonne qualite'], 0 )
self.qualite.SetSelection(self.divx.qualite)
item16 = wxStaticText( self, self.ID_TEXT, "Vu par:", (10,292), wxDefaultSize, 0 )
item16.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
# self.vupar = wxTextCtrl( self, self.ID_TEXT, "",(72,190), wxDefaultSize, 0 )
# self.vupar.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
self.vu_par = wxCheckListBox(self, 60, (70, 292), wxSize(70, 70), ['maman','papa','ben','jfr'])
for elem in self.divx.vupar:
if(elem == 'maman'):
self.vu_par.Check(0)
elif(elem == 'papa'):
self.vu_par.Check(1)
elif(elem == 'ben'):
self.vu_par.Check(2)
elif(elem == 'jfr'):
self.vu_par.Check(3)
item18 = wxStaticText( self, self.ID_TEXT, "Description:",(350,50), wxDefaultSize, 0 )
item18.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.description = wxTextCtrl( self, self.ID_TEXT, self.divx.description, (350,80),
wxSize(350,200), wxTE_MULTILINE )
self.button = wxButton(self,self.ID_BUTTON,"Save Changes",(300,320),wxDefaultSize,0)
EVT_BUTTON(self,self.ID_BUTTON, self.save_divx_changes)
# EVT_CLOSE(self,self.quit)
#def quit(self,event):
# self.Close(true)
def save_divx_changes(self,event):
self.divx.title = self.titre.GetValue()
self.divx.realisateur = self.realisateur.GetValue()
self.divx.date_sortie = self.date.GetValue()
self.divx.mins = self.minut.GetValue()
self.divx.secs = self.second.GetValue()
self.divx.acteur = self.acteur.GetStrings()
self.divx.qualite = int(self.qualite.GetSelection())
self.divx.genre = self.genre.GetSelection()
list_vu = []
for item in range(self.vu_par.GetCount()):
if(self.vu_par.IsChecked(item)):
list_vu.append(self.vu_par.GetString(item))
#print self.vu_par.GetString(item)
self.divx.vupar = list_vu
self.divx.description = self.description.GetValue()
self.parent.update_db_edited(self.divx)
def OnCloseWindow(self, event):
self.Destroy()
class divx_item:
id = 0
title = ''
mins = ''
secs = ''
realisateur = ''
date_sortie = ''
genre = 0
acteur = ['']
qualite = 2 # 2 est la meilleur qualité
vupar = []
description = ''
def __init__(self):
acteur = []
vupar = []
def __del__(self):
acteur = []
vupar = []
def give_all(self):
list = []
list.append(self.id)
list.append(self.title)
list.append(self.mins)
list.append(self.secs)
list.append(self.realisateur)
list.append(self.date_sortie)
list.append(self.acteur)
list.append(self.qualite)
list.append(self.vupar)
list.append(self.genre)
list.append(self.description)
return list
def print_all(self):
"print all the data"
print 'Titre: %s' % self.title
print 'Minutes: %s' % self.mins
print 'Secondes: %s' % self.secs
print 'Réalisateur: %s' % self.realisateur
print 'Date de sortie: %s' % self.date_sortie
print 'Acteur: %s' % self.acteur
print 'Qualité: %d' % self.qualite
print 'Vu par: %s' % self.vupar
print 'Description: %s' % self.description
def get_title(self):
return str(self.title)
class divx_db:
def __init__(self,location):
self.list_divx = []
if(location != ''):
self.location = location
db = open(location)
self.db = db.readlines()
self.parser()
def parser(self):
cpt = 0
for line in self.db:
if(line != ''):
cpt = cpt+1
#print cpt
divx = divx_item()
list = line.split('//')
#print list
try:
divx.id = list[0]
divx.title = list[1]
divx.mins = list[2]
divx.secs = list[3]
divx.realisateur = list[4]
divx.date_sortie = list[5]
divx.acteur = []
for elem in list[6].split(','):
divx.acteur.append(elem)
divx.qualite = int(list[7])
divx.vupar = []
for elem in list[8].split(','):
# print elem
divx.vupar.append(elem)
divx.genre = list[9]
divx.description = list[10]
except:
print traceback.print_exc()
print 'Error: Wrong data in line %d !!!' % cpt
continue # on va au debut de la boucle!!
self.list_divx.append(divx)
self.divx_database = self
def save_database(self,path):
db = open(path,'w')
print 'Database size: ' + str(self.get_list_size())
if(self.list_divx != []):
line = ''
for divx in self.list_divx:
if(divx.get_title()!=''):
for elem in divx.give_all():
if(type(elem) == type('')):
line = line + '//' + elem
elif(type(elem) == type(1)):
line = line + '//' + str(elem)
else:
slin = ''
for el in elem:
slin = slin + ',' + el
line = line + '//' + slin[1:]
# line = line[2:]
# print line
line = line[2:]
db.write(str(line)+'\n')
line = ''
db.close()
def add_new(self,divx):
#print 'pouet 123'
self.list_divx.append(divx)
def get_divx_from_title(self,title):
"return divx from the title"
for item in self.list_divx:
if(item.title == title):
return item
def get_list_size(self):
return len(self.list_divx)
def givedb(self):
return self.list_divx
class LeftPart(wxSashLayoutWindow):
ID_WINDOW_TOP = 5101
ID_WINDOW_BOTTOM = 5102
ID_TREECTRL = 10004
ID_LISTBOX = 10006
ID_BUTTON = 10008
ID_TEXT = 10007
db = ''
def __init__(self, parent,ID=-1):
self.parent = parent
self.divxdb = ''
wxSashLayoutWindow.__init__(self,
parent,
ID,
#wxDefaultPosition,
#wxSize(1600, 600),
style=wxNO_BORDER|wxSW_3D
)
self.SetBackgroundColour('white')
self.SetDefaultSize(wxSize(200, 400))
self.SetOrientation(wxLAYOUT_VERTICAL)
self.SetAlignment(wxLAYOUT_LEFT)
item1 = wxStaticText( self, self.ID_TEXT, "Liste des DIVX:", (10,10), wxDefaultSize, 0 )
item1.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD,true ) )
self.liste = wxListBox( self, self.ID_LISTBOX, (10,45), wxSize(175,500),
style=wxLB_SINGLE|wxLB_SORT)
self.liste.SetFont( wxFont( 12, wxROMAN, wxNORMAL, wxNORMAL,false ) )
self.button_add = wxButton(self,self.ID_BUTTON,"Ajouter un nouveau DIVX",(25,570),wxDefaultSize,0)
EVT_LISTBOX(self, self.ID_LISTBOX, self.OnLeftDClick)
EVT_BUTTON(self,self.ID_BUTTON, self.add_adivx)
def newtree(self,database):
self.db = database
self.liste.Clear()
self.list = []
self.list = self.db.givedb()
for divx in self.list:
if(divx.get_title()!=''):
self.liste.Append(divx.get_title())
def add_adivx(self,event):
new_divx = divx_item()
self.divxdb.add_new(new_divx)
self.parent.window_right.divx = new_divx
self.parent.window_right.edit_adivx(new_divx)
#new_divx.print_all()
def OnLeftDClick(self,event):
name = event.GetString()
self.parent.update_right(self.db.get_divx_from_title(name))
class RightPart(wxSashLayoutWindow):
ID_WINDOW_TOP = 5101
ID_WINDOW_BOTTOM = 5102
ID_TEXT = 10000
ID_TEXTCTRL = 10001
ID_CHOICE = 10002
ID_RADIOBOX = 10003
ID_BUTTON = 10111
parent = 0
t1 = NULL
def setdivx(self,divx):
self.divx = divx
self.titre.SetLabel(divx.title)
self.realisateur.SetLabel(divx.realisateur)
self.date.SetLabel(divx.date_sortie)
self.minut.SetLabel(divx.mins)
self.second.SetLabel(divx.secs)
actors = ''
for elem in divx.acteur:
actors = actors + elem + ', '
actors = actors[:-2] # - 1 virgule
self.acteur.SetLabel(actors)
if(divx.qualite == 2):
self.qualite.SetLabel(u'Très bonne')
elif(divx.qualite == 1):
self.qualite.SetLabel('Moyenne')
else:
self.qualite.SetLabel(u'Moins bonne qualité')
self.genre.SetLabel(genre_list[int(divx.genre)])
self.description.Clear()
vu_par = ''
for elem in divx.vupar:
vu_par = vu_par + elem + ', '
vu_par = vu_par[:-2] # - 1 virgule
self.vupar.SetLabel(vu_par)
self.description.WriteText(divx.description)
def update_db_edited(self,divx):
self.setdivx(divx)
self.parent.refresh_left()
def make_formular(self):
"coool"
item1 = wxStaticText( self, self.ID_TEXT, "Titre:", (10,10), wxDefaultSize, 0 )
item1.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD,true ) )
self.titre = wxStaticText( self, self.ID_TEXTCTRL, "", (65,11), wxSize(160,-1), 0 )
self.titre.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
self.titre.SetForegroundColour( wxRED )
item3 = wxStaticText( self, self.ID_TEXT, "Realisateur:", (10,40), wxDefaultSize, 0 )
item3.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.realisateur = wxStaticText( self, self.ID_TEXTCTRL, "", (110,40), wxSize(80,-1), 0 )
self.realisateur.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item5 = wxStaticText( self, self.ID_TEXT, "Date de sortie:", (10,70), wxDefaultSize, 0 )
item5.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.date = wxStaticText( self, self.ID_TEXTCTRL, "", (120,71), wxSize(80,-1), 0 )
self.date.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item7 = wxStaticText( self, self.ID_TEXT, u"Durée:", (10,100), wxDefaultSize, 0 )
item7.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.minut = wxStaticText(self, self.ID_TEXTCTRL, "", (65,100), wxSize(20,-1), 0 )
self.minut.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item10 = wxStaticText( self, self.ID_TEXT, ":", (81,100), wxDefaultSize, 0 )
item10.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.second = wxStaticText( self, self.ID_TEXTCTRL, "", (86,100), wxSize(40,-1), 0 )
self.second.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item12 = wxStaticText( self, self.ID_TEXT, "Acteurs:", (10,130), wxDefaultSize, 0 )
item12.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.acteur = wxStaticText( self, self.ID_CHOICE,"", (75,130), wxSize(100,-1), 0 )
self.acteur.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item15 = wxStaticText(self,self.ID_TEXT, "Genre:", (10,160), wxDefaultSize, 0 )
item15.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.genre = wxStaticText( self, self.ID_CHOICE,"",(65,160), wxSize(100,-1), 0 )
self.genre.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
item14 = wxStaticText( self, self.ID_TEXT, u"Qualité:", (10,190), wxDefaultSize, 0 )
item14.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.qualite = wxStaticText( self, self.ID_CHOICE,"",(75,190), wxSize(100,-1), 0 )
self.qualite.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item16 = wxStaticText( self, self.ID_TEXT, "Vu par:", (10,220), wxDefaultSize, 0 )
item16.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.vupar = wxStaticText( self, self.ID_TEXT, "",(72,220), wxDefaultSize, 0 )
self.vupar.SetFont(wxFont( 12, wxROMAN, wxNORMAL,wxNORMAL))
item18 = wxStaticText( self, self.ID_TEXT, "Description:",(10,250), wxDefaultSize, 0 )
item18.SetFont( wxFont( 13, wxROMAN, wxNORMAL, wxBOLD ) )
self.button = wxButton(self,self.ID_BUTTON,"Editer le DIVX",(120,550),wxDefaultSize,0)
self.description = wxTextCtrl( self, self.ID_TEXT, "", (10,270), wxSize(350,250), wxTE_MULTILINE|wxTE_READONLY )
EVT_BUTTON(self,self.ID_BUTTON, self.edit_adivx)
def edit_adivx(self,event):
win = edit_frame(self.parent,self,self.divx)
win.ShowModal()
def __init__(self, parent,ID=-1):
self.parent = parent
self.divx = ''
self.divx_database = ''
wxSashLayoutWindow.__init__(self,
parent,
ID, #,
#wxDefaultPosition,
#wxSize(1600, 600),
style=wxNO_BORDER|wxSW_3D
)
# self.SetMinimumSizeY(50)
# self.SetMaximumSizeY(510)
size = parent.GetSize()
size[0] = size[0]- 210
self.SetDefaultSize(wxSize(size[0], 400))
self.SetBackgroundColour('white')
self.SetOrientation(wxLAYOUT_VERTICAL)
self.SetAlignment(wxLAYOUT_RIGHT)
self.make_formular()
class mainfraim(wxFrame):
ID_WINDOW_TOP = 5101
ID_WINDOW_BOTTOM = 5102
def __init__(self, parent, ID, title):
self.parent = parent
self.divxdb = divx_db('')
wxFrame.__init__(self, parent, ID, title,wxDefaultPosition)
self.remainingSpace = wxPanel(self, -1, style=wxSUNKEN_BORDER)
EVT_SIZE(self, self.OnSize)
self.window_left = LeftPart(self,self.ID_WINDOW_TOP)
self.window_left.divxdb = self.divxdb
self.window_right = RightPart(self, self.ID_WINDOW_BOTTOM)
test = wxMenu()
test.Append(ID_ABOUT, "&About","Plus d'info sur l'application")
# test.Break()
test2 = wxMenu()
test2.Append(2, "O&uvrir",u"Ouvrir une base de donnée")
test2.Append(3, "S&auver",u"Sauver la base de donnée en cours")
test2.Append(4, "Q&uitter","Quitter l'application")
menubar = wxMenuBar()
menubar.Append(test2,'Fichier')
menubar.Append(test,'Autres')
# print test.GetMenuItemCount()
# print test.GetHelpString(ID_ABOUT)
# menubar.Append(test,'Bidon')
self.SetMenuBar(menubar)
###Statut####
self.CreateStatusBar()
###EVENT####
EVT_MENU(self,ID_ABOUT,self.OnAbout)
EVT_MENU(self,2,self.openDB)
EVT_MENU(self,3,self.save)
EVT_MENU(self,4,self.quit)
EVT_CLOSE(self,self.quit)
self.SetStatusText('cooool')
# def edit_divx(self,divx):
# edit_frame(self.parent,divx)
# pass
def save(self,event):
dir,file=os.path.split(self.path)
#print dir
#print file
dlg = wxFileDialog(self, "Choose a file to save", dir, file, "*.db", wxSAVE)
if dlg.ShowModal() == wxID_OK:
#print 'You selected: %s\n' % dlg.GetPath()
self.divxdb.save_database(dlg.GetPath())
def update_right(self,divx):
self.window_right.setdivx(divx)
def refresh_left(self):
self.window_left.newtree(self.divxdb)
def openDB(self, event):
dlg = wxFileDialog(self, "Choose a file", ".", "", "*.*", wxOPEN)
if dlg.ShowModal() == wxID_OK:
#print 'You selected: %s\n' % dlg.GetPath()
self.data = divx_db(dlg.GetPath())
self.path = dlg.GetPath()
self.divxdb = self.data
#print 'data: !!!!' + str(self.data)
#print 'details: !!!!' + str(self.data.get_list_size())
self.window_left.newtree(self.data)
self.window_right.divx_database = self.data
self.window_left.divxdb = self.divxdb
#del self.data
def OnSize(self, event):
wxLayoutAlgorithm().LayoutWindow(self, self.window_left)
wxLayoutAlgorithm().LayoutWindow(self, self.window_right)
def OnAbout(self,event):
dlg = wxMessageDialog(self,'Blabla bla bla bla \n bla bla...','About',style=wxICON_INFORMATION)
tmp = dlg.ShowModal()
def quit(self,event):
dlg = wxMessageDialog(self,'Do you really want to quit?','Quit?',style=wxYES_NO)
tmp = dlg.ShowModal()
if(tmp == wxID_YES):
# print 'ok quiting'
#print self.database
self.Destroy()
else:
self.SetStatusText(u'Génial!')
class Monappli(wxApp):
def OnInit(self):
fenetre = mainfraim(NULL,0,'DivxManager 0.1')
fenetre.Show(true)
# fenetre2 = wxFrame(fenetre,1,'test 2')
# fenetre2.Show(true)
# self.SetTopWindow(fenetre)
return true
app = Monappli(0)
app.MainLoop()
|
Click here to get the file