コード例 #1
0
ファイル: dialog.py プロジェクト: hszer0/Explicator
def show_project_dialog(pid=None):
    projectdialog = gtk.Dialog(title="Project", flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
        buttons=(gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))

    projectdialog.vbox.set_size_request(250, 215)
    label = gtk.Label()
    label.set_alignment(0, 0)
    if pid is None:
        label.set_markup("<big><b>Add Project</b></big>")
    else:
        label.set_markup("<big><b>Edit Project</b></big>")
    projectdialog.vbox.pack_start(label, False)
    label = gtk.Label("Name")
    label.set_alignment(0.0, 0.0)
    projectdialog.vbox.pack_start(label, False)
    projectdialog.ProjectNameEntry = gtk.Entry(max=50)
    projectdialog.ProjectNameEntry.set_activates_default(True)
    projectdialog.vbox.pack_start(projectdialog.ProjectNameEntry, False)
    hbox = gtk.HBox()
    vbox = gtk.VBox()
    label = gtk.Label("Status")
    label.set_alignment(0.0, 0.0)
    vbox.pack_start(label)
    projectdialog.ProjectStatusCombo = gtk.combo_box_new_text()
    for status in statuslist:
        projectdialog.ProjectStatusCombo.append_text(status)
    vbox.pack_start(projectdialog.ProjectStatusCombo)
    projectdialog.ProjectPriorityEntry = gtk.Entry(max=3)
    hbox.pack_start(vbox, False)
    vbox = gtk.VBox()
    label = gtk.Label("Priority")
    label.set_alignment(0.0, 0.0)
    vbox.pack_start(label)
    vbox.pack_start(projectdialog.ProjectPriorityEntry)
    hbox.pack_start(vbox)
    projectdialog.vbox.pack_start(hbox, False, padding=5)
    label = gtk.Label("Categories (comma seperated)")
    label.set_alignment(0.0, 0.0)
    projectdialog.vbox.pack_start(label)
    projectdialog.ProjectTagEntry = gtk.Entry()
    projectdialog.ProjectTagEntry.set_activates_default(True)
    projectdialog.vbox.pack_start(projectdialog.ProjectTagEntry, False)
    projectdialog.set_default_response(gtk.RESPONSE_ACCEPT)

    if pid is not None:
        projectdata = DBConnection.get_data("project", pid)
        projectdialog.ProjectNameEntry.set_text(projectdata[1])
        for index, status in enumerate(statuslist):
            if projectdata[2] == status:
                projectdialog.ProjectStatusCombo.set_active(index)
        projectdialog.ProjectPriorityEntry.set_text(str(projectdata[3]))
        projectdialog.ProjectTagEntry.set_text(",".join(tag[0] for tag in DBConnection.get_tags(pid)))
    else:
        projectdialog.ProjectStatusCombo.set_active(1)
        projectdialog.ProjectPriorityEntry.set_text("100")
    projectdialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
    projectdialog.show_all()
    response = projectdialog.run()

    if response == gtk.RESPONSE_ACCEPT:
        if projectdialog.ProjectPriorityEntry.get_text().isdigit():
            if pid is None:
                pid = DBConnection.add_project(projectdialog.ProjectNameEntry.get_text(),
                    get_active_text(projectdialog.ProjectStatusCombo), projectdialog.ProjectPriorityEntry.get_text())
            else:
                DBConnection.update_table("project",
                    "name = '%(name)s', status = '%(status)s', priority = %(priority)s" % {
                        "name": projectdialog.ProjectNameEntry.get_text().replace("'", "''"),
                        "status": get_active_text(projectdialog.ProjectStatusCombo),
                        "priority": projectdialog.ProjectPriorityEntry.get_text()}, pid)
            DBConnection.set_tags(pid, projectdialog.ProjectTagEntry.get_text().replace(", ", ","))
            projectdialog.destroy()
        return True
    else:
        projectdialog.destroy()
        return False