Subversion Repositories pub

Compare Revisions

Ignore whitespace Rev 187 → Rev 188

/relevation/branches/1.1/gui.py
1,6 → 1,43
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
 
"""
Relevation Password Printer
a command line interface to Revelation Password Manager.
 
Simplistic Graphical User Interface.
This GUI is mainly intended to be used in systems where command-lines
are less common, like Widows.
"""
# Relevation Password Printer
#
# Copyright (c) 2011, Toni Corvera
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
 
import sys
import re
import Tkinter
import Tkinter as tk
from Tkinter import Frame, Button, Entry, Listbox, Scrollbar, Label
 
import relevation
12,7 → 49,7
fields = s.split('\n')
name = fields[2]
name = re.sub('^Name: ', '', name)
gui.lst.insert(Tkinter.END, name)
gui.lst.insert(tk.END, name)
gui.items.append(s)
 
def dump_result_override(res, query_desc):
21,17 → 58,17
relevation.dump_result = dump_result_override
 
class ResultDialog:
def __init__(self, parent):
top = self.top = Tkinter.Toplevel(parent)
Label(top, text="Value").pack()
self.e = Entry(top)
self.e.pack(padx=5)
def __init__(self, parent, result):
top = self.top = tk.Toplevel(parent)
 
self.value = Label(top, text=result)
self.value.pack()
b = Button(top, text='OK', command=self.ok)
b.pack(pady=5)
def ok(self):
self.top.destroy()
 
class GUI(Tkinter.Frame):
class GUI(object):
def do_find(self):
global rootw
search = self.search_text.get()
45,48 → 82,62
selected = int(selected[0])
item = self.items[selected]
print item
dlg = ResultDialog(rootw)
dlg = ResultDialog(rootw, item)
rootw.wait_window(dlg.top)
 
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.add_widgets()
self.master = master
frame = Frame(master)
frame.pack()
self.items = []
self.frame = frame
#top = master
top = frame.winfo_toplevel()
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1, pad=5)
frame.rowconfigure(0, weight=1, pad=5)
frame.columnconfigure(0, weight=1)
FILL = tk.N+tk.S+tk.E+tk.W
BTNROW = 2
RESROW = 1
# Populate
self.search_text = Entry(self.frame)
#self.search_text.pack({'expand': 1, 'side': 'top'})
self.search_text.grid(row=0, column=0, columnspan=4, padx=5, sticky=FILL)
self.quit = Button(self.frame, text='Quit', fg='red', command=frame.quit)
#self.quit.pack(side=tk.LEFT)
self.quit.grid(row=BTNROW, column=0, padx=10)
self.search = Button(self.frame, text='Search', command=self.do_find)
#self.search.pack(side=tk.RIGHT)
self.search.grid(row=BTNROW, column=2, padx=5)
self.view = Button(self.frame, text='View', command=self.display)
#self.view.pack(side=tk.RIGHT)
self.view.grid(row=BTNROW, column=1)
 
def add_widgets(self):
self.search_text = Entry(self)
self.search_text.insert(0, 'google.com')
self.search_text.pack({'expand': 1, 'side': 'top'})
## FIXME
scrollbar = Scrollbar(self.frame, orient=tk.VERTICAL)
scrollbar.grid(row=RESROW, column=4, sticky=FILL)
self.lst = Listbox(self.frame)
#self.lst.pack()
self.lst.grid(row=RESROW, column=0, columnspan=3, sticky=FILL)
 
self.QUIT = Button(self)
self.QUIT['text'] = 'QUIT'
self.QUIT['fg'] = 'red'
self.QUIT['command'] = self.quit
self.QUIT.pack({'side': 'left'})
for i in range(100):
self.lst.insert(tk.END, i)
self.lst.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=self.lst.yview)
 
self.search = Button(self)
self.search['text'] = 'Search'
self.search['command'] = self.do_find
self.search.pack({'side': 'right'})
 
self.view = Button(self)
self.view['text'] = 'View'
self.view['command'] = self.display
self.view.pack({'side': 'right'})
 
# FIXME
scrollbar = Scrollbar(self, orient=Tkinter.VERTICAL)
 
self.lst = Listbox(self, yscrollcommand=scrollbar.set)
self.lst.pack()
scrollbar.configure(command=self.lst.yview)
 
if __name__ == '__main__':
rootw = Tkinter.Tk()
rootw = tk.Tk()
rootw.title('Relevation search')
gui = GUI(master=rootw)
gui.mainloop()
rootw.mainloop()
rootw.destroy()
 
# vim:set ts=4 et ai fileencoding=utf-8: #