Kullanıcı arayüzünde şu satırlar boyunca görüntülenen iki veri ağacımız A ve B'yi varsayalım:
Kullanıcı, vurgulanan alt ağaç düğümlerini A'dan B'ye kopyalamak ister. İki ağacın, kimliklerin belirttiği gibi bazı paylaşılan düğümleri vardır.
Bu senaryo için etkileşimi nasıl tasarlarsınız? Olası yaklaşımlardan biri, onay kutularını paylaşılmayan düğümlerin yanına yerleştirmek ve iki ağaç arasına bir "yürüt"/"kopyala" düğmesi koymak olabilir, ancak bu, drag'n'drop'u devre dışı bırakırken en iyi çözüm mü?
Alternatif tasarımlar için herhangi bir fikriniz var mı?
Ağaçların, yeniden düzenleme düğümlerine sürükleyip bırakmanıza izin vermesi doğaldır; ancak, hiyerarşiyi korumak istiyor ve sadece birleştirme sonuçları ...
Bu nedenle, uygulamanın sadece farklılıkları tanımlaması ve daha sonra kullanıcının her değişikliği seçmesine/taahhüt etmesine (ekleme, güncelleme veya silme) izin vermesi yararlı olabilir.
Bazı kısıtlamaları kaçırmazsam, sürükle ve bırak yöntemini kullanırdım.
Önerdiğiniz gibi bir nesne seçimi eylemi sözdizimi, kopyalama dışında komutlara (örneğin, silme, taşıma, özellikler) genişlettiğinizde kullanması iyi olan ortak bir standart GUI yaklaşımıdır. Bu, basit, tutarlı ancak güçlü bir kullanıcı arayüzü sağlar. Bununla birlikte, seçim için onay kutularını önereceğimden emin değilim. Kullanıcıların genellikle bir kerede yalnızca bir üst düzey düğümü kopyaladığını varsayarsak, Windows Gezgini gibi dosya yöneticilerindeki davranışı taklit eder ve varsayılan olarak tek seçilen simgeleri kullanır, ancak metakeyler (Shift ve Ctrl) ile çoklu seçimi destekler ve sürükle seçimi. Bir düğüm seçildiğinde, kullanıcının neyi seçtiğini netleştirmeye yardımcı olması için bu düğüm ve tüm alt düğümleri vurgulanmalıdır. OTOH, kullanıcıların genellikle birden fazla ilişkilendirilmemiş düğümü kopyalaması gerekiyorsa, özellikle standart çoklu seçim yöntemlerini bildiğinden emin değilseniz onay kutuları tercih edilebilir.
Nesne seçimi eylemi sözdiziminin alternatifi, her düğüm için küçük bir Kopyalama denetimi eklediğiniz nesneye özel denetim yaklaşımıdır. Tek bir tıklama ile kopyalanır. Kopyalama, kullanıcının düğümlerle yapabileceği tek şeyse tercih edilebilir. Buna karşılık, her bir düğüm için ayrı Kopyalama, Taşıma, Silme, Özellikler vb. Denetimlere sahip olmak büyük olasılıkla çok karmaşık olacaktır. Nesneye adanmış denetim ile giderseniz, yalnızca A'da B'de paylaşılan düğümleri olan düğümler için bir kopya denetimi sunabilir ve nelerin kopyalanabileceğine dair net bir gösterge sağlayabilirsiniz.
Örneğinizde, Kopyalama özelliğiniz ağaçlar arasında paylaşılan düğümlere kopyalama ile sınırlı görünüyor. Gerçekten izin verilebilecek her şey bu mu? Her zaman birden fazla hedef ağaç yok mu? Öyleyse, tek Kopyala düğmeniz muhtemelen en iyisidir ve sürükle ve bırak işleminden uzak durma hakkınız vardır. Sürükle ve bırak özelliği keşfedilebilirliği zayıftır ve bir Kopyala düğmesine tıklamaktan daha zordur. Sürükle ve bırak da kullanıcıların keyfi kopyalama yapabileceğini düşünmelerini sağlayabilir (örn., Node 4, Ağaç A'da Node 18 Ağaç B'de, hatta taşıyın) etrafında düğümler içinde Ağaç B).
Bununla birlikte, rastgele kopyalamayı desteklemek mümkün ve avantajlıysa, Kopyala ve Yapıştır deyimini kullanmak için iki düğmeye sahip olmayı düşünün (taşımayı desteklemek için üçüncü bir Kesme düğmesi ekleyin). Rasgele kopyalamayı destekliyorsanız, Kopyala ve Yapıştır için uzman bir kısayol olarak sürükle ve bırak yöntemini de kullanmayı düşünebilirsiniz.