Bladeren bron

Inhibit deletion of metadata or (for now) default document

Billy Barrow 2 jaren geleden
bovenliggende
commit
bc07eb107b
3 gewijzigde bestanden met toevoegingen van 22 en 7 verwijderingen
  1. 16 2
      src/Editor.vala
  2. 4 4
      src/FileChooser.vala
  3. 2 1
      src/FileExplorer.vala

+ 16 - 2
src/Editor.vala

@@ -20,6 +20,7 @@ namespace Publicate {
         private TabBar tab_bar;
 
         private Button save_tab_button;
+        private Button remove_file_button;
 
         private Gee.HashMap<string, Editors.EditorWidget> open_editors = new Gee.HashMap<string, Editors.EditorWidget>();
 
@@ -51,14 +52,16 @@ namespace Publicate {
             
             var new_file_button = new Button.from_icon_name("document-new-symbolic");
             file_buttons.append(new_file_button);
+            new_file_button.sensitive = false; // Not yet implemented...
 
             var add_file_button = new Button.from_icon_name("list-add-symbolic");
             file_buttons.append(add_file_button);
             add_file_button.clicked.connect(import_file);
 
-            var remove_file_button = new Button.from_icon_name("user-trash-symbolic");
+            remove_file_button = new Button.from_icon_name("user-trash-symbolic");
             file_buttons.append(remove_file_button);
             remove_file_button.clicked.connect(delete_file_clicked);
+            remove_file_button.sensitive = false;
             
             leaflet = new Leaflet();
             leaflet.vexpand = true;
@@ -98,7 +101,12 @@ namespace Publicate {
 
         }
 
-        public async void open_asset(Ppub.Asset asset) {
+        public async void open_asset(Ppub.Asset? asset) {
+
+            update_deletable();
+            if(asset == null) {
+                return;
+            }
 
             if(open_editors.has_key(asset.name)) {
                 tab_view.selected_page = open_editors[asset.name].tab_page;
@@ -266,6 +274,12 @@ namespace Publicate {
             window.close();
         }
 
+        private void update_deletable() {
+            // Inhibit deletion of default document or metadata.
+            var asset = file_explorer.selected_asset;
+            remove_file_button.sensitive = (asset != null && asset.name != "metadata" && publication.get_default_asset().name != asset.name);
+        }
+
         private void delete_file_clicked() {
             var asset = file_explorer.selected_asset;
             if(asset == null) {

+ 4 - 4
src/FileChooser.vala

@@ -8,7 +8,7 @@ namespace Publicate {
         private ViewerWindow toplevel;
         private FileExplorer explorer;
 
-        public signal void asset_selected(Ppub.Asset asset);
+        public signal void asset_selected(Ppub.Asset? asset);
 
         public FileChooserPopover(ViewerWindow window) {
 
@@ -30,7 +30,7 @@ namespace Publicate {
             explorer.set_selected_item(name);
         }
 
-        private void selected(Ppub.Asset asset) {
+        private void selected(Ppub.Asset? asset) {
             popdown();
             asset_selected(asset);
         }
@@ -39,7 +39,7 @@ namespace Publicate {
 
     public class FileChooserRow : ActionRow {
 
-        public signal void asset_selected(Ppub.Asset asset);
+        public signal void asset_selected(Ppub.Asset? asset);
 
         private ViewerWindow toplevel;
         private FileChooserPopover popover;
@@ -68,7 +68,7 @@ namespace Publicate {
             popover.set_assets(files);
         }
 
-        private void selected(Ppub.Asset asset) {
+        private void selected(Ppub.Asset? asset) {
             selected_asset = name;
             subtitle = asset.name;
             asset_selected(asset);

+ 2 - 1
src/FileExplorer.vala

@@ -12,7 +12,7 @@ namespace Publicate {
         private Invercargill.Sequence<Ppub.Asset> assets;
         private Invercargill.Sequence<FileItem> file_items;
 
-        public signal void asset_selected(Ppub.Asset asset);
+        public signal void asset_selected(Ppub.Asset? asset);
 
         public Ppub.Asset? selected_asset {get; private set;}
 
@@ -54,6 +54,7 @@ namespace Publicate {
             var item = file_items.where(i => i.asset.name == name).first_or_default();
             file_list.select_row(item);
             selected_asset = item?.asset;
+            asset_selected(item.asset);
         }
 
     }