From 1c3a498fc25523a8f8d54d321da29e640ea4087d Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 11 Mar 2011 12:10:14 +0000 Subject: [PATCH] 1) Changes to the grouped items tutorial 2) Add a link to the grouped items tutorial in the GUI manual. 3) Change create custom column to accept a leading '#' --- .../gui2/preferences/create_custom_column.py | 2 + src/calibre/manual/gui.rst | 150 +++++++++--------- src/calibre/manual/images/sg_cc.jpg | Bin 20049 -> 27355 bytes src/calibre/manual/sub_groups.rst | 45 +++--- 4 files changed, 98 insertions(+), 99 deletions(-) diff --git a/src/calibre/gui2/preferences/create_custom_column.py b/src/calibre/gui2/preferences/create_custom_column.py index 50d567d239..8909bc7b3d 100644 --- a/src/calibre/gui2/preferences/create_custom_column.py +++ b/src/calibre/gui2/preferences/create_custom_column.py @@ -169,6 +169,8 @@ class CreateCustomColumn(QDialog, Ui_QCreateCustomColumn): col = unicode(self.column_name_box.text()).strip() if not col: return self.simple_error('', _('No lookup name was provided')) + if col.startswith('#'): + col = col[1:] if re.match('^\w*$', col) is None or not col[0].isalpha() or col.lower() != col: return self.simple_error('', _('The lookup name must contain only ' 'lower case letters, digits and underscores, and start with a letter')) diff --git a/src/calibre/manual/gui.rst b/src/calibre/manual/gui.rst index fff18a7333..9286f859f0 100644 --- a/src/calibre/manual/gui.rst +++ b/src/calibre/manual/gui.rst @@ -12,7 +12,7 @@ for using |app| is to first add books to the library from your hard disk. to its internal database. Once they are in the database, you can perform a various :ref:`actions` on them that include conversion from one format to another, transfer to the reading device, viewing on your computer, editing metadata, including covers, etc. -Note that |app| creates copies of the files you add to it, your original files are left untouched. +Note that |app| creates copies of the files you add to it, your original files are left untouched. The interface is divided into various sections: @@ -51,10 +51,10 @@ Add books 3. **Add books directories, including sub-directories (Multiple books per directory, assumes every ebook file is a different book)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively and any ebooks found are added to the library. The algorithm assumes that each directory contains many books. All ebook files with the same name in a directory are assumed to be the same book in different formats. Ebooks with different names are added as different books. This action is the inverse of the :ref:`Save to disk ` action, i.e. you can :guilabel:`Save to disk`, delete the books and re-add them with no lost information (except date). - 4. **Add empty book. (Book Entry with blank formats)**: Allows you to create a blank book record. This can be used to then manually fill out the information about a book that you may not have yet in your collection. - - 5. **Add by ISBN**: Allows you to add one or more books by entering just their ISBN into a list or pasting the list of ISBNs from your clipboard. - + 4. **Add empty book. (Book Entry with blank formats)**: Allows you to create a blank book record. This can be used to then manually fill out the information about a book that you may not have yet in your collection. + + 5. **Add by ISBN**: Allows you to add one or more books by entering just their ISBN into a list or pasting the list of ISBNs from your clipboard. + The :guilabel:`Add books` action can read metadata from a wide variety of e-book formats. In addition it tries to guess metadata from the filename. See the :ref:`config_filename_metadata` section, to learn how to configure this. @@ -77,7 +77,7 @@ Edit metadata 6. **Download only social metadata**: Downloads only social metadata such as tags and reviews (if available), for the books that are selected in the book list. 7. **Merge Book Records**: Gives you the capability of merging the metadata and formats of two or more book records together. You can choose to either delete or keep the records that were not clicked first. - + .. _convert_ebooks: Convert e-books @@ -91,13 +91,13 @@ Note that ebooks you purchase will typically have `Digital Rights Management Behavior. If a book has more than one format, you can view a particular format by clicking the down arrow on the right of the :guilabel:`View` button. - + .. _send_to_device: Send to device @@ -138,7 +138,7 @@ Send to device You can control the file name and folder structure of files sent to the device by setting up a template in :guilabel:`Preferences->Import/Export->Sending books to devices`. Also see :ref:`templatelangcalibre`. - + .. _fetch_news: Fetch news @@ -147,11 +147,11 @@ Fetch news :class: float-right-img |fni| The :guilabel:`Fetch news` action downloads news from various websites and converts it into an ebook that can be read on your ebook reader. Normally, the newly created ebook is added to your ebook library, but if an ebook reader is connected at the time the download finishes, the news is also uploaded to the reader automatically. - + The :guilabel:`Fetch news` action uses simple recipes (10-15 lines of code) for each news site. To learn how to create recipes for your own news sources, see :ref:`news`. The :guilabel:`Fetch news` action has three variations, accessed by clicking the down arrow on the right of the button. - + 1. **Schedule news download**: This action allows you to schedule the download of of your selected news sources from a list of hundreds of available. Scheduling can be set individually for each news source you select and the scheduling is flexible allowing you to select specific days of the week or a frequency of days between downloads. 2. **Add a custom news service**: This action allows you to create a simple recipe for downloading news from a custom news site that you wish to access. Creating the recipe can be as simple as specifying an RSS news feed URL, or you can be more prescriptive by creating python based code for the task, see :ref:`news`. 3. **Download all scheduled news sources**: This action causes |app| to immediately begin to download all news sources that you have previously scheduled. @@ -180,9 +180,9 @@ Device :class: float-right-img |dvi| The :guilabel:`Device` action allows you to view the books in the main memory or storage cards of your device, or to eject the device (detach it from |app|). -This icon shows up automatically on the main |app| toolbar when you connect a supported device. You can click on it to see the books on your device. You can also drag and drop books from your |app| library onto the icon to transfer them to your device. Conversely, you can drag and drop books from your device onto the |app| icon on the toolbar to transfer books from your device to the |app| library. +This icon shows up automatically on the main |app| toolbar when you connect a supported device. You can click on it to see the books on your device. You can also drag and drop books from your |app| library onto the icon to transfer them to your device. Conversely, you can drag and drop books from your device onto the |app| icon on the toolbar to transfer books from your device to the |app| library. + - .. _save_to_disk: Save to disk @@ -199,14 +199,14 @@ Save to disk Author_(sort) Title Book Files - + You can control the file name and folder structure of files saved to disk by setting up a template in :guilabel:`Preferences->Import/Export->Saving books to disk`. Also see :ref:`templatelangcalibre`. - + .. _save_to_disk_single: 2. **Save to disk in a single directory**: The selected books are saved to disk in a single directory. - + For 1. and 2. All available formats as well as metadata is stored to disk for each selected book. Metadata is stored in an OPF file. Saved books can be re-imported to the library without any loss of information by using the :ref:`Add books ` action. @@ -227,14 +227,14 @@ Connect/Share |csi| The :guilabel:`Connect/Share` action allows you to manually connect to a device or folder on your computer, it also allows you to set up you |app| library for access via a web browser, or email. The :guilabel:`Connect/Share` action has four variations, accessed by clicking the down arrow on the right of the button. - + 1. **Connect to folder**: This action allows you to connect to any folder on your computer as though it were a device and use all the facilities |app| has for devices with that folder. Useful if your device cannot be supported by |app| but is available as a USB disk. - - 2. **Connect to iTunes**: Allows you to connect to your iTunes books database as though it were a device. Once the books are sent to iTunes, you can then use iTunes to make them available on your various iDevices. Useful if you would rather not have |app| send books to your iDevice directly. - + + 2. **Connect to iTunes**: Allows you to connect to your iTunes books database as though it were a device. Once the books are sent to iTunes, you can then use iTunes to make them available on your various iDevices. Useful if you would rather not have |app| send books to your iDevice directly. + 3. **Start Content Server**: This action causes |app| to start up its built-in web server. When this is started, your |app| library will be accessible via a web browser from the internet (if you choose). You can configure how the web server is accessed by setting preferences at :guilabel:`Preferences->Sharing->Sharing over the net` - - 4. **Setup email based sharing of books**: This action allows you to setup |app| to share books (and news feeds) by email. After setting up email addresses for this option |app| will send news updates and book updates to the entered email addresses. You can configure how the |app| sends email by setting preferences at :guilabel:`Preferences->Sharing->Sharing books by email`. Once you have setup one or more email addresses, this menu entry get replaced by menu entries to send books to the setup email addresses. + + 4. **Setup email based sharing of books**: This action allows you to setup |app| to share books (and news feeds) by email. After setting up email addresses for this option |app| will send news updates and book updates to the entered email addresses. You can configure how the |app| sends email by setting preferences at :guilabel:`Preferences->Sharing->Sharing books by email`. Once you have setup one or more email addresses, this menu entry get replaced by menu entries to send books to the setup email addresses. .. _remove_books: @@ -245,14 +245,14 @@ Remove books |rbi| The :guilabel:`Remove books` action **deletes books permanently**, so use it with care. It is *context sensitive*, i.e. it depends on which :ref:`catalog ` you have selected. If you have selected the :guilabel:`Library`, books will be removed from the library. If you have selected the ebook reader device, the books will be removed from the device. To remove only a particular format for a given book use the :ref:`edit_meta_information` action. Remove books also has five variations which can be accessed by clicking the down arrow on the right side of the button. - 1. **Remove Selected Books**: Allows you to **permanently** remove all books that are selected in the book list. - + 1. **Remove Selected Books**: Allows you to **permanently** remove all books that are selected in the book list. + 2. **Remove files of a specified format from selected books..**: Allows you to **permanently** remove ebook files of a specified format, from books that are selected in the book list. - + 3. **Remove all files of a specified format, except..**: Allows you to **permanently** remove ebook files of a multiple formats except a given format, from books that are selected in the book list. - + 4. **Remove covers from selected books**: Allows you to **permanently** remove cover images files, from books that are selected in the book list. - + 5. **Remove matching books from device**: Allows you to remove ebook files from a connected device, that match the books that are selected in the book list. .. note:: @@ -265,7 +265,7 @@ Preferences .. |cbi| image:: images/preferences.png The Preferences Action allows you to change the way various aspects of |app| work. To access it, click the |cbi|. - + .. _catalogs: Catalogs @@ -274,9 +274,9 @@ Catalogs :align: center A *catalog* is a collection of books. |app| can manage two types of different catalogs: - + 1. **Library**: This is a collection of books stored in your |app| library on your computer - + 2. **Device**: This is a collection of books stored in the main memory of your ebook reader. It will be available when you connect the reader to your computer. - In addition, you can see the books on the storage card (if any) in your reader device. @@ -292,17 +292,17 @@ Search & Sort The Search & Sort section allows you to perform several powerful actions on your book collections. * You can sort them by title, author, date, rating etc. by clicking on the column titles. You can also sub-sort (i.e. sort on multiple columns). For example, if you click on the title column and then the author column, the book will be sorted by author and then all the entries for the same author will be sorted by title. - + * You can search for a particular book or set of books using the search bar. More on that below. - + * You can quickly and conveniently edit metadata by double-clicking the entry you want changed in the list. - + * You can perform :ref:`actions` on sets to books. To select multiple books you can either: - + - Keep the :kbd:`Ctrl` key pressed and click on the books you want selected. - + - Keep the :kbd:`Shift` key pressed and click on the starting and ending book of arange of books you want selected. - + * You can configure which fields you want displayed by using the :ref:`configuration` dialog. .. _search_interface: @@ -310,10 +310,10 @@ The Search & Sort section allows you to perform several powerful actions on your The Search Interface --------------------- You can search all the metadata by entering search terms in the search bar. Searches are case insensitive. For example:: - + Asimov Foundation format:lrf -This will match all books in your library that have ``Asimov`` and ``Foundation`` in their metadata and +This will match all books in your library that have ``Asimov`` and ``Foundation`` in their metadata and are available in the LRF format. Some more examples:: author:Asimov and not series:Foundation @@ -327,20 +327,18 @@ Equality searches are indicated by prefixing the search string with an equals si ``tag:"=science"`` will match "science", but not "science fiction" or "hard science". Regular expression searches are indicated by prefixing the search string with a tilde (~). Any python-compatible regular expression can be used. Regular expression searches are contains searches unless the expression contains anchors. -Should you need to search for a string with a leading equals or tilde, prefix the string with a backslash. +Should you need to search for a string with a leading equals or tilde, prefix the string with a backslash. Enclose search strings with quotes (") if the string contains parenthesis or spaces. For example, to search for the tag ``Science Fiction``, you would need to search for ``tag:"=science fiction"``. If you search for ``tag:=science fiction``, you will find all books with the tag 'science' and containing the word 'fiction' in any metadata. -You can build advanced search queries easily using the :guilabel:`Advanced Search Dialog`, accessed by +You can build advanced search queries easily using the :guilabel:`Advanced Search Dialog`, accessed by clicking the button |sbi|. Available fields for searching are: ``tag, title, author, publisher, series, series_index, rating, cover, -comments, format, identifiers, date, pubdate, search, size`` and custom columns. If a device is plugged in, the -``ondevice`` field becomes available. To find the search name for a custom column, hover your mouse over the -column header. +comments, format, identifiers, date, pubdate, search, size`` and custom columns. If a device is plugged in, the ``ondevice`` field becomes available. To find the search name (actually called the `lookup name`) for a custom column, hover your mouse over the column header in the library view. The syntax for searching for dates is:: @@ -398,20 +396,20 @@ Identifiers (e.g., isbn, doi, lccn etc) also use an extended syntax. First, note * ``identifiers:=isbn:123`` will find books with a key equal to isbn having a value containing `123`. * ``identifiers:=isbn:=123456789`` will find books with a key equal to isbn having a value equal to `123456789`. * ``identifiers:i:1`` will find books with a key containing an `i` having a value containing a `1`. - + .. |sbi| image:: images/search_button.png :align: middle .. figure:: images/search.png :align: center - + :guilabel:`Advanced Search Dialog` Saving searches ----------------- -|app| has a useful feature, it allows you to save a search you use frequently under a special name and then re-use that search with a single click. To do this, create your search, either by typing it in the search bar, or using the Tag Browser. Then, type the name you would like to give to the search in the Saved Searches box next to the search bar and click the plus icon next to the saved searches box to save the search. +|app| has a useful feature, it allows you to save a search you use frequently under a special name and then re-use that search with a single click. To do this, create your search, either by typing it in the search bar, or using the Tag Browser. Then, type the name you would like to give to the search in the Saved Searches box next to the search bar and click the plus icon next to the saved searches box to save the search. Now, you can access your saved search in the Tag Browser under "Searches". A single click will allow you to re-use any arbitrarily complex search easily, without needing to re-create it. @@ -453,7 +451,7 @@ Tag Browser The Tag Browser allows you to easily browse your collection by Author/Tags/Series/etc. If you click on any item in the Tag Browser, for example the author name Isaac Asimov, then the list of books to the right is restricted to showing books by that author. You can click on category names as well. For example, clicking on "Series" will show you all books in any series. -The first click on an item will restrict the list of books to those that contain/match the item. Continuing the above example, clicking on Isaac Asimov will show books by that author. Clicking again on the item will change what is shown, depending on whether the item has children (see sub-categories and hierarchical items below). Continuing the Isaac Asimov example, clicking again on Isaac Asimov will restrict the list of books to those not by Isaac Asimov. A third click will remove the restriction, showing all books. If you hold down the Ctrl or Shift keys and click on multiple items, then restrictions based on multiple items are created. For example you could hold Ctrl and click on the tags History and Europe for find books on European history. The Tag Browser works by constructing search expressions that are automatically entered into the Search bar. Looking at what the Tag Browser generates is a good way to learn how to construct basic search expressions. +The first click on an item will restrict the list of books to those that contain/match the item. Continuing the above example, clicking on Isaac Asimov will show books by that author. Clicking again on the item will change what is shown, depending on whether the item has children (see sub-categories and hierarchical items below). Continuing the Isaac Asimov example, clicking again on Isaac Asimov will restrict the list of books to those not by Isaac Asimov. A third click will remove the restriction, showing all books. If you hold down the Ctrl or Shift keys and click on multiple items, then restrictions based on multiple items are created. For example you could hold Ctrl and click on the tags History and Europe for find books on European history. The Tag Browser works by constructing search expressions that are automatically entered into the Search bar. Looking at what the Tag Browser generates is a good way to learn how to construct basic search expressions. Items in the Tag browser have their icons partially colored. The amount of color depends on the average rating of the books in that category. So for example if the books by Isaac Asimov have an average of four stars, the icon for Isaac Asimov in the Tag Browser will be 4/5th colored. You can hover your mouse over the icon to see the average rating. @@ -461,13 +459,13 @@ The outer-level items in the tag browser such as Authors and Series are called c You can search user categories in the same way as built-in categories, by clicking on them. There are four different searches cycled through by clicking: "everything matching an item in the category" indicated by a single green plus sign, "everything matching an item in the category or its sub-categories" indicated by two green plus signs, "everything not matching an item in the category" shown by a single red minus sign, and "everything not matching an item in the category or its sub-categories" shown by two red minus signs. -It is also possible to create hierarchies inside some of the text categories such as tags, series, and custom columns. These hierarchies show with the small triangle, permitting the sub-items to be hidden. To use hierarchies of items in a category, you must first go to Preferences / Look & Feel and enter the category name(s) into the "Categories with hierarchical items" box. Once this is done, items in that category that contain periods will be shown using the small triangle. For example, assume you create a custom column called "Genre" and indicate that it contains hierarchical items. Once done, items such as Mystery.Thriller and Mystery.English will display as Mystery with the small triangle next to it. Clicking on the triangle will show Thriller and English as sub-items. +It is also possible to create hierarchies inside some of the text categories such as tags, series, and custom columns. These hierarchies show with the small triangle, permitting the sub-items to be hidden. To use hierarchies of items in a category, you must first go to Preferences / Look & Feel and enter the category name(s) into the "Categories with hierarchical items" box. Once this is done, items in that category that contain periods will be shown using the small triangle. For example, assume you create a custom column called "Genre" and indicate that it contains hierarchical items. Once done, items such as Mystery.Thriller and Mystery.English will display as Mystery with the small triangle next to it. Clicking on the triangle will show Thriller and English as sub-items. See :ref:`Managing subgroups of books, for example "genre" ` for more information. Hierarchical items (items with children) use the same four 'click-on' searches as user categories. Items that do not have children use two of the searches: "everything matching" and "everything not matching". You can drag and drop items in the Tag browser onto user categories to add them to that category. If the source is a user category, holding the shift key while dragging will move the item to the new category. You can also drag and drop books from the book list onto items in the Tag Browser; dropping a book on an item causes that item to be automatically applied to the dropped books. For example, dragging a book onto Isaac Asimov will set the author of that book to Isaac Asimov. Dropping it onto the tag History will add the tag History to the book's tags. -There is a search bar at the top of the Tag Browser that allows you to easily find any item in the Tag Browser. In addition, you can right click on any item and choose one of several operations. Some examples are to hide the it, rename it, or open a "Manage x" dialog that allows you to manage items of that kind. For example, the "Manage Authors" dialog allows you to rename authors and control how their names are sorted. +There is a search bar at the top of the Tag Browser that allows you to easily find any item in the Tag Browser. In addition, you can right click on any item and choose one of several operations. Some examples are to hide the it, rename it, or open a "Manage x" dialog that allows you to manage items of that kind. For example, the "Manage Authors" dialog allows you to rename authors and control how their names are sorted. You can control how items are sorted in the Tag browser via the box at the bottom of the Tag Browser. You can choose to sort by name, average rating or popularity (popularity is the number of books with an item in your library; for example; the popularity of Isaac Asimov is the number of book sin your library by Isaac Asimov). @@ -495,47 +493,47 @@ Calibre has several keyboard shortcuts to save you time and mouse movement. Thes - Action * - :kbd:`F2 (Enter in OS X)` - Edit the metadata of the currently selected field in the book list. - * - :kbd:`A` + * - :kbd:`A` - Add Books - * - :kbd:`Shift+A` + * - :kbd:`Shift+A` - Add Formats to the selected books - * - :kbd:`C` + * - :kbd:`C` - Convert selected Books - * - :kbd:`D` + * - :kbd:`D` - Send to device - * - :kbd:`Del` + * - :kbd:`Del` - Remove selected Books - * - :kbd:`E` + * - :kbd:`E` - Edit metadata of selected books - * - :kbd:`I` + * - :kbd:`I` - Show book details - * - :kbd:`M` + * - :kbd:`M` - Merge selected records - * - :kbd:`Alt+M` + * - :kbd:`Alt+M` - Merge selected records, keeping originals - * - :kbd:`O` + * - :kbd:`O` - Open containing folder - * - :kbd:`S` + * - :kbd:`S` - Save to Disk - * - :kbd:`V` + * - :kbd:`V` - View - * - :kbd:`Alt+V/Cmd+V in OS X` + * - :kbd:`Alt+V/Cmd+V in OS X` - View specific format - * - :kbd:`Alt+Shift+J` + * - :kbd:`Alt+Shift+J` - Toggle jobs list - * - :kbd:`Alt+Shift+B` + * - :kbd:`Alt+Shift+B` - Toggle Cover Browser - * - :kbd:`Alt+Shift+T` + * - :kbd:`Alt+Shift+T` - Toggle Tag Browser - * - :kbd:`Alt+A` + * - :kbd:`Alt+A` - Show books by the Same author as the current book - * - :kbd:`Alt+T` + * - :kbd:`Alt+T` - Show books with the same tags as current book - * - :kbd:`Alt+P` + * - :kbd:`Alt+P` - Show books by the same publisher as current book - * - :kbd:`Alt+Shift+S` + * - :kbd:`Alt+Shift+S` - Show books in the same series as current book - * - :kbd:`/, Ctrl+F` + * - :kbd:`/, Ctrl+F` - Focus the search bar * - :kbd:`Shift+Ctrl+F` - Open the advanced search dialog @@ -545,13 +543,13 @@ Calibre has several keyboard shortcuts to save you time and mouse movement. Thes - Find the next book that matches the current search (only works if the highlight checkbox next to the search bar is checked) * - :kbd:`Shift+N or Shift+F3` - Find the next book that matches the current search (only works if the highlight checkbox next to the search bar is checked) - * - :kbd:`Ctrl+D` + * - :kbd:`Ctrl+D` - Download metadata and shortcuts - * - :kbd:`Ctrl+R` + * - :kbd:`Ctrl+R` - Restart calibre * - :kbd:`Shift+Ctrl+E` - Add empty books to calibre - * - :kbd:`Ctrl+Q` + * - :kbd:`Ctrl+Q` - Quit calibre diff --git a/src/calibre/manual/images/sg_cc.jpg b/src/calibre/manual/images/sg_cc.jpg index 4ea32d8cf6b3da826b3cb22d25233b41938506ed..c6be070ea5292596f94939fe0d66c0ebfb32f3b0 100644 GIT binary patch literal 27355 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 diff --git a/src/calibre/manual/sub_groups.rst b/src/calibre/manual/sub_groups.rst index de28e0a84d..83b8f0cbe9 100644 --- a/src/calibre/manual/sub_groups.rst +++ b/src/calibre/manual/sub_groups.rst @@ -6,27 +6,27 @@ Managing subgroups of books, for example "genre" ================================================== -Some people wish to organize the books in their library into subgroups, similar to subfolders. The most common wish is to create genre hierarchies, but there are many others. One user asked for a way to organize textbooks by subject and course number. Another wanted to keep track of gifts by subject and recipient. I will use the genre example for the rest of this post. +Some people wish to organize the books in their library into subgroups, similar to subfolders. The most commonly provided reason is to create genre hierarchies, but there are many others. One user asked for a way to organize textbooks by subject and course number. Another wanted to keep track of gifts by subject and recipient. This tutorial will use the genre example for the rest of this post. -Before I go on, please note that I am not talking about folders on the hard disk. Subgroups are not file folders. Books will not be copied anywhere. Calibre's library file structure is not affected. Instead, I am talking about a way to display subgroups of books within a calibre library. +Before going on, please note that we are not talking about folders on the hard disk. Subgroups are not file folders. Books will not be copied anywhere. Calibre's library file structure is not affected. Instead, we are presenting a way to organize and display subgroups of books within a |app| library. .. contents:: :depth: 1 :local: .. |sgtree| image:: images/sg_tree.jpg - :class: float-left-img + :class: float-right-img -The commonly expressed requirements for subgroups such as genres are: +The commonly-provided requirements for subgroups such as genres are: - * A subgroup (e.g., a genre) must contain (point to) books, not categories of books. This is what distinguishes subgroups from user categories. + * A subgroup (e.g., a genre) must contain (point to) books, not categories of books. This is what distinguishes subgroups from |app| user categories. * A book can be in multiple subgroups (genres). This distinguishes subgroups from physical file folders. * Subgroups (genres) must form a hierarchy; subgroups can contain subgroups. -|sgtree| Tags give you the first two. If you tag a book with the genre then you can use the tag browser (or search) for find the books with that genre, giving you the first. Many books can have the same tag, giving you the second. The problem is that tags don't satisfy the third requirement. They don't provide a hierarchy. +Tags give you the first two. If you tag a book with the genre then you can use the tag browser (or search) for find the books with that genre, giving you the first. Many books can have the same tag(s), giving you the second. The problem is that tags don't satisfy the third requirement. They don't provide a hierarchy. -Calibre's new hierarchy feature gives you the third, the ability to see the genres in a 'tree' and the ability to easily search for books in genre or sub-genre. For example, assume that your genre structure is similar to the following:: +|sgtree| Calibre's hierarchy feature gives you the third, the ability to see the genres in a 'tree' and the ability to easily search for books in genre or sub-genre. For example, assume that your genre structure is similar to the following:: Genre . History @@ -45,43 +45,42 @@ Calibre's new hierarchy feature gives you the third, the ability to see the genr .. Horror etc. -By using the hierarchy feature, you can see these genres in the tag browser in a tree form. As you can see, in this example the outermost level (Genre) is a custom column. The genres themselves appear under that column. Genres containing sub-genres appear with a small triangle next to them. Clicking on that triangle will open the item and show the sub-genres, as you see with History and Science Fiction. +By using the hierarchy feature, you can see these genres in the tag browser in tree form, as shown in the screen image. In this example the outermost level (Genre) is a custom column that contains the genres. Genres containing sub-genres appear with a small triangle next to them. Clicking on that triangle will open the item and show the sub-genres, as you can see with History and Science Fiction. -Clicking on a genre will search for all books with that genre or children of that genre. For example, clicking on Science Fiction will give all three of the child genres, Alternate History, Military, and Space Opera. Clicking on Alternate History will give books in that genre, ignoring those in Military and Space Opera. Of course, a book can have multiple genres. If a book has both Space Opera and Military genres, then you see that book if you click on either genre. Searching is discussed in more detail below. +Clicking on a genre can search for all books with that genre or children of that genre. For example, clicking on Science Fiction can give all three of the child genres, Alternate History, Military, and Space Opera. Clicking on Alternate History will give books in that genre, ignoring those in Military and Space Opera. Of course, a book can have multiple genres. If a book has both Space Opera and Military genres, then you will see that book if you click on either genre. Searching is discussed in more detail below. -Another thing you can see from the image is that the genre Military appears twice, once under History and once under Science Fiction. Because the genres are in a hierarchy, these are two separate genres. A book can be in one, the other, or (doubtfully in this case) both. For example, Winston Churchill's World War II books could be in "History.Military". David Weber's Honor Harrington books could be in "Science Fiction.Military", and in "Science Fiction.Space Opera" for that matter. +Another thing you can see from the image is that the genre Military appears twice, once under History and once under Science Fiction. Because the genres are in a hierarchy, these are two separate genres. A book can be in one, the other, or (doubtfully in this case) both. For example, the books in Winston Churchill's "The Second World War" could be in "History.Military". David Weber's Honor Harrington books could be in "Science Fiction.Military", and for that matter also in "Science Fiction.Space Opera." -Once a genre exists, that is the genre has been applied to at least one book, you can easily apply it to other books by dragging a book from the library view onto the genre you want the book to have. You can also apply them in the metadata editors. More on this below. +Once a genre exists, that is at least one book has that genre, you can easily apply it to other books by dragging the books from the library view onto the genre you want the books to have. You can also apply genres in the metadata editors; more on this below. Setup ---------------------------------------- +By now, your question might be "How was all of this up?" There are three steps: 1) create the custom column, 2) tell |app| that the new column is to be treated as a hierarchy, and 3) add genres. -Your question by now might be "how did I set all of this up?". There are three steps: 1) create the custom column, 2) tell calibre that the new column is to be treated as a hierarchy, and 3) add genres. - -I created the custom column in the usual way, using Preferences -> Add your own columns. I used "genre" as the lookup name and "Genre" as the column heading. The column type is "Comma-separated text, like tags, shown in the tag browser." +You create the custom column in the usual way, using Preferences -> Add your own columns. This example uses "#genre" as the lookup name and "Genre" as the column heading. The column type is "Comma-separated text, like tags, shown in the tag browser." .. image:: images/sg_cc.jpg :align: center -Then after restarting calibre, I told calibre that the column is to be treated as a hierarchy. I went to Preferences -> Look and Feel and entered the lookup name "#genre" into the "Categories with hierarchical items" box. I pressed Apply and was done with setting up. +Then after restarting |app|, you must tell |app| that the column is to be treated as a hierarchy. Go to Preferences -> Look and Feel and enter the lookup name "#genre" into the "Categories with hierarchical items" box. Press Apply, and you are done with setting up. .. image:: images/sg_pref.jpg :align: center -At the point there are no genres. We are left with the last step: how to apply a genre to a book. A genre does not exist until it appears on at least one book. To apply a genre for the first time, we must go into some detail about what a genre looks like in the metadata for a book. +At the point there are no genres in the column. We are left with the last step: how to apply a genre to a book. A genre does not exist in |app| until it appears on at least one book. To learn how to apply a genre for the first time, we must go into some detail about what a genre looks like in the metadata for a book. -A hierarchy of 'things' is built by creating an item consisting of phrases separated by periods. Continuing the Genre example, these items would "History.Military", "Mysteries.Vampire", "Science Fiction.Space Opera", etc. Thus to create a new genre, you pick a book that should have that genre, edit its metadata, and enter the new genre into the column you created. Continuing my example, if I want to assign a new genre "Comics" with a sub-genre "Superheros" to a book, I would 'edit metadata' for that (comic) book, choose the Custom metadata tab, and then enter "Comics.Superheros" as shown in the following (ignore my other custom columns): +A hierarchy of 'things' is built by creating an item consisting of phrases separated by periods. Continuing the genre example, these items would "History.Military", "Mysteries.Vampire", "Science Fiction.Space Opera", etc. Thus to create a new genre, you pick a book that should have that genre, edit its metadata, and enter the new genre into the column you created. Continuing our example, if you want to assign a new genre "Comics" with a sub-genre "Superheros" to a book, you would 'edit metadata' for that (comic) book, choose the Custom metadata tab, and then enter "Comics.Superheros" as shown in the following (ignore the other custom columns): .. image:: images/sg_genre.jpg :align: center -After I do the above, I see in the tag browser: +After doing the above, you see in the tag browser: .. image:: images/sg_tb.jpg :align: center -From here on, to apply this new genre to a book (a comic book, presumably), I can either drag the book onto the genre, or add it to the book using edit metadata in exactly the same way as I did above. +From here on, to apply this new genre to a book (a comic book, presumably), you can either drag the book onto the genre, or add it to the book using edit metadata in exactly the same way as done above. Searching --------------- @@ -89,19 +88,19 @@ Searching .. image:: images/sg_search.jpg :align: center -The easiest way to search for genres is to use the tag browser, clicking on the genre you want to see. Clicking on a genre with children will show you books with that genre and all child genres. However, this might bring up a question. Just because a genre has children doesn't mean that it isn't a genre in its own right. For example, a book can have the genre "History" but not "History.Military". How do I search for books with only "History"? +The easiest way to search for genres is using the tag browser, clicking on the genre you wish to see. Clicking on a genre with children will show you books with that genre and all child genres. However, this might bring up a question. Just because a genre has children doesn't mean that it isn't a genre in its own right. For example, a book can have the genre "History" but not "History.Military". How do you search for books with only "History"? -The tag browser search mechanism knows if an item has children. If it does, clicking on the item cycles through 5 searches instead of the normal three. The first is the normal green plus, which shows you books with that genre only. The second is new: a doubled plus (shown below), which shows you books with that genre and all sub-genres. The third is the normal red minus, which shows you books without that exact genre. The fourth is new: a doubled minus, which shows you books without that genre or sub-genres. The fifth is back to the beginning, no mark, meaning no search. +The tag browser search mechanism knows if an item has children. If it does, clicking on the item cycles through 5 searches instead of the normal three. The first is the normal green plus, which shows you books with that genre only (e.g., History). The second is a doubled plus (shown above), which shows you books with that genre and all sub-genres (e.g., History and History.Military). The third is the normal red minus, which shows you books without that exact genre. The fourth is a doubled minus, which shows you books without that genre or sub-genres. The fifth is back to the beginning, no mark, meaning no search. Restrictions --------------- -If you search for a genre then create a saved search, you can use the 'restrict to' box to create a virtual library of books with that genre. This is most useful if you want to do other searches within the genre or to manage/update metadata. For this example I created a saved search named 'History.Japanese' by first clicking on the genre Japanese in the tag browser to get a search into the search box, entering History.Japanese into the saved search box, then pushing the "save search" button (the green box with the white plus, on the right-hand side). +If you search for a genre then create a saved search for it, you can use the 'restrict to' box to create a virtual library of books with that genre. This is useful if you want to do other searches within the genre or to manage/update metadata for books in the genre. Continuing our example, you can create a saved search named 'History.Japanese' by first clicking on the genre Japanese in the tag browser to get a search into the search box, entering History.Japanese into the saved search box, then pushing the "save search" button (the green box with the white plus, on the right-hand side). .. image:: images/sg_restrict.jpg :align: center -Once I have done that, then I can use this search as a restriction. +After creating the saved search, you can use it as a restriction. .. image:: images/sg_restrict2.jpg :align: center