diff --git a/res/resources.xml b/res/resources.xml
index e0dcb06..64d125c 100644
--- a/res/resources.xml
+++ b/res/resources.xml
@@ -4,6 +4,7 @@
ui/ensemble_editor.ui
ui/instrument_editor.ui
ui/instrument_selector.ui
+ ui/part_editor.ui
ui/person_editor.ui
ui/person_selector.ui
ui/window.ui
diff --git a/res/ui/part_editor.ui b/res/ui/part_editor.ui
new file mode 100644
index 0000000..3751470
--- /dev/null
+++ b/res/ui/part_editor.ui
@@ -0,0 +1,248 @@
+
+
+
+
+
+
diff --git a/src/dialogs/mod.rs b/src/dialogs/mod.rs
index 66cb45a..d38a64d 100644
--- a/src/dialogs/mod.rs
+++ b/src/dialogs/mod.rs
@@ -7,6 +7,9 @@ pub use instrument_editor::*;
pub mod instrument_selector;
pub use instrument_selector::*;
+pub mod part_editor;
+pub use part_editor::*;
+
pub mod person_editor;
pub use person_editor::*;
diff --git a/src/dialogs/part_editor.rs b/src/dialogs/part_editor.rs
new file mode 100644
index 0000000..a0b0c0a
--- /dev/null
+++ b/src/dialogs/part_editor.rs
@@ -0,0 +1,156 @@
+use super::selector_row::SelectorRow;
+use super::{InstrumentSelector, PersonSelector};
+use crate::database::*;
+use glib::clone;
+use gtk::prelude::*;
+use gtk_macros::get_widget;
+use std::cell::RefCell;
+use std::convert::TryInto;
+use std::rc::Rc;
+
+pub struct PartEditor {
+ db: Rc,
+ window: gtk::Window,
+ title_entry: gtk::Entry,
+ composer: RefCell