Re-arrange buttons to put the most frequently used ones first

This commit is contained in:
Kovid Goyal 2009-03-14 16:39:56 -07:00
parent 792e993222
commit fd3c5bb7f5
3 changed files with 273 additions and 248 deletions

View File

@ -237,6 +237,7 @@ class Main(MainWindow, Ui_MainWindow):
QObject.connect(self.config_button, SIGNAL('clicked(bool)'), self.do_config)
self.connect(self.preferences_action, SIGNAL('triggered(bool)'), self.do_config)
self.connect(self.action_preferences, SIGNAL('triggered(bool)'), self.do_config)
QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), self.do_advanced_search)
####################### Library view ########################
@ -1252,7 +1253,7 @@ class Main(MainWindow, Ui_MainWindow):
############################### Do config ##################################
def do_config(self):
def do_config(self, *args):
if self.job_manager.has_jobs():
d = error_dialog(self, _('Cannot configure'), _('Cannot configure while there are running jobs.'))
d.exec_()

View File

@ -1,149 +1,150 @@
<ui version="4.0" >
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author>Kovid Goyal</author>
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow" >
<property name="geometry" >
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>865</width>
<width>1012</width>
<height>822</height>
</rect>
</property>
<property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy" >
<property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum>
</property>
<property name="windowTitle" >
<property name="windowTitle">
<string>__appname__</string>
</property>
<property name="windowIcon" >
<iconset resource="images.qrc" >
<property name="windowIcon">
<iconset resource="images.qrc">
<normaloff>:/library</normaloff>:/library</iconset>
</property>
<widget class="QWidget" name="centralwidget" >
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<layout class="QHBoxLayout" name="horizontalLayout_3" >
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="LocationView" name="location_view" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<widget class="LocationView" name="location_view">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize" >
<property name="maximumSize">
<size>
<width>16777215</width>
<height>100</height>
</size>
</property>
<property name="verticalScrollBarPolicy" >
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy" >
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="tabKeyNavigation" >
<property name="tabKeyNavigation">
<bool>true</bool>
</property>
<property name="showDropIndicator" stdset="0" >
<property name="showDropIndicator" stdset="0">
<bool>true</bool>
</property>
<property name="iconSize" >
<property name="iconSize">
<size>
<width>40</width>
<height>40</height>
</size>
</property>
<property name="movement" >
<property name="movement">
<enum>QListView::Static</enum>
</property>
<property name="flow" >
<property name="flow">
<enum>QListView::LeftToRight</enum>
</property>
<property name="gridSize" >
<property name="gridSize">
<size>
<width>175</width>
<height>90</height>
</size>
</property>
<property name="viewMode" >
<property name="viewMode">
<enum>QListView::ListMode</enum>
</property>
<property name="wordWrap" >
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="donate_button" >
<property name="cursor" >
<widget class="QToolButton" name="donate_button">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text" >
<property name="text">
<string>...</string>
</property>
<property name="icon" >
<iconset resource="images.qrc" >
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/donate.svg</normaloff>:/images/donate.svg</iconset>
</property>
<property name="iconSize" >
<property name="iconSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="autoRaise" >
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3" >
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="vanity" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
<widget class="QLabel" name="vanity">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize" >
<property name="maximumSize">
<size>
<width>16777215</width>
<height>90</height>
</size>
</property>
<property name="text" >
<property name="text">
<string/>
</property>
<property name="textFormat" >
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="openExternalLinks" >
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2" >
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2" >
<property name="text" >
<widget class="QLabel" name="label_2">
<property name="text">
<string>Output:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="output_format" >
<property name="toolTip" >
<widget class="QComboBox" name="output_format">
<property name="toolTip">
<string>Set the output format that is used when converting ebooks and downloading news</string>
</property>
</widget>
@ -154,99 +155,99 @@
</item>
</layout>
</item>
<item row="1" column="0" >
<layout class="QHBoxLayout" >
<property name="spacing" >
<item row="1" column="0">
<layout class="QHBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="margin" >
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QToolButton" name="advanced_search_button" >
<property name="toolTip" >
<widget class="QToolButton" name="advanced_search_button">
<property name="toolTip">
<string>Advanced search</string>
</property>
<property name="text" >
<property name="text">
<string>...</string>
</property>
<property name="icon" >
<iconset resource="images.qrc" >
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/search.svg</normaloff>:/images/search.svg</iconset>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>Alt+S</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label" >
<property name="text" >
<widget class="QLabel" name="label">
<property name="text">
<string>&amp;Search:</string>
</property>
<property name="buddy" >
<property name="buddy">
<cstring>search</cstring>
</property>
</widget>
</item>
<item>
<widget class="SearchBox" name="search" >
<property name="enabled" >
<widget class="SearchBox" name="search">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="acceptDrops" >
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="toolTip" >
<string>Search the list of books by title or author&lt;br>&lt;br>Words separated by spaces are ANDed</string>
<property name="toolTip">
<string>Search the list of books by title or author&lt;br&gt;&lt;br&gt;Words separated by spaces are ANDed</string>
</property>
<property name="whatsThis" >
<string>Search the list of books by title, author, publisher, tags and comments&lt;br>&lt;br>Words separated by spaces are ANDed</string>
<property name="whatsThis">
<string>Search the list of books by title, author, publisher, tags and comments&lt;br&gt;&lt;br&gt;Words separated by spaces are ANDed</string>
</property>
<property name="autoFillBackground" >
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="text" >
<property name="text">
<string/>
</property>
<property name="frame" >
<property name="frame">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="clear_button" >
<property name="toolTip" >
<widget class="QToolButton" name="clear_button">
<property name="toolTip">
<string>Reset Quick Search</string>
</property>
<property name="text" >
<property name="text">
<string>...</string>
</property>
<property name="icon" >
<iconset resource="images.qrc" >
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/clear_left.svg</normaloff>:/images/clear_left.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line" >
<property name="orientation" >
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
@ -255,77 +256,77 @@
</spacer>
</item>
<item>
<widget class="QToolButton" name="config_button" >
<property name="toolTip" >
<widget class="QToolButton" name="config_button">
<property name="toolTip">
<string>Configuration</string>
</property>
<property name="text" >
<property name="text">
<string>...</string>
</property>
<property name="icon" >
<iconset resource="images.qrc" >
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/config.svg</normaloff>:/images/config.svg</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" >
<widget class="QStackedWidget" name="stack" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<item row="2" column="0">
<widget class="QStackedWidget" name="stack">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>100</horstretch>
<verstretch>100</verstretch>
</sizepolicy>
</property>
<property name="currentIndex" >
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="library" >
<layout class="QVBoxLayout" name="verticalLayout_2" >
<widget class="QWidget" name="library">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout" >
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout" >
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QRadioButton" name="match_any" >
<property name="text" >
<widget class="QRadioButton" name="match_any">
<property name="text">
<string>Match any</string>
</property>
<property name="checked" >
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="match_all" >
<property name="text" >
<widget class="QRadioButton" name="match_all">
<property name="text">
<string>Match all</string>
</property>
<property name="checked" >
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="popularity" >
<property name="text" >
<widget class="QCheckBox" name="popularity">
<property name="text">
<string>Sort by &amp;popularity</string>
</property>
</widget>
</item>
<item>
<widget class="TagsView" name="tags_view" >
<property name="tabKeyNavigation" >
<widget class="TagsView" name="tags_view">
<property name="tabKeyNavigation">
<bool>true</bool>
</property>
<property name="alternatingRowColors" >
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="animated" >
<property name="animated">
<bool>true</bool>
</property>
<property name="headerHidden" >
<property name="headerHidden">
<bool>true</bool>
</property>
</widget>
@ -333,35 +334,35 @@
</layout>
</item>
<item>
<widget class="BooksView" name="library_view" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<widget class="BooksView" name="library_view">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>100</horstretch>
<verstretch>10</verstretch>
</sizepolicy>
</property>
<property name="acceptDrops" >
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="dragEnabled" >
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropOverwriteMode" >
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="dragDropMode" >
<property name="dragDropMode">
<enum>QAbstractItemView::DragDrop</enum>
</property>
<property name="alternatingRowColors" >
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior" >
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="showGrid" >
<property name="showGrid">
<bool>false</bool>
</property>
<property name="wordWrap" >
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
@ -370,76 +371,76 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="main_memory" >
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="DeviceBooksView" name="memory_view" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<widget class="QWidget" name="main_memory">
<layout class="QGridLayout">
<item row="0" column="0">
<widget class="DeviceBooksView" name="memory_view">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>100</horstretch>
<verstretch>10</verstretch>
</sizepolicy>
</property>
<property name="acceptDrops" >
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="dragEnabled" >
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropOverwriteMode" >
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="dragDropMode" >
<property name="dragDropMode">
<enum>QAbstractItemView::DragDrop</enum>
</property>
<property name="alternatingRowColors" >
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior" >
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="showGrid" >
<property name="showGrid">
<bool>false</bool>
</property>
<property name="wordWrap" >
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page" >
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="DeviceBooksView" name="card_view" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Expanding" hsizetype="Preferred" >
<widget class="QWidget" name="page">
<layout class="QGridLayout">
<item row="0" column="0">
<widget class="DeviceBooksView" name="card_view">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>10</horstretch>
<verstretch>10</verstretch>
</sizepolicy>
</property>
<property name="acceptDrops" >
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="dragEnabled" >
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropOverwriteMode" >
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="dragDropMode" >
<property name="dragDropMode">
<enum>QAbstractItemView::DragDrop</enum>
</property>
<property name="alternatingRowColors" >
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior" >
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="showGrid" >
<property name="showGrid">
<bool>false</bool>
</property>
<property name="wordWrap" >
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
@ -450,221 +451,237 @@
</item>
</layout>
</widget>
<widget class="QToolBar" name="tool_bar" >
<property name="minimumSize" >
<widget class="QToolBar" name="tool_bar">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="contextMenuPolicy" >
<property name="contextMenuPolicy">
<enum>Qt::PreventContextMenu</enum>
</property>
<property name="movable" >
<property name="movable">
<bool>false</bool>
</property>
<property name="orientation" >
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="iconSize" >
<property name="iconSize">
<size>
<width>48</width>
<height>48</height>
</size>
</property>
<property name="toolButtonStyle" >
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
<attribute name="toolBarArea" >
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak" >
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="action_add" />
<addaction name="action_del" />
<addaction name="action_edit" />
<addaction name="separator" />
<addaction name="action_sync" />
<addaction name="action_save" />
<addaction name="separator" />
<addaction name="action_news" />
<addaction name="action_convert" />
<addaction name="action_view" />
<addaction name="action_add"/>
<addaction name="action_edit"/>
<addaction name="action_convert"/>
<addaction name="action_view"/>
<addaction name="action_news"/>
<addaction name="separator"/>
<addaction name="action_sync"/>
<addaction name="action_save"/>
<addaction name="action_del"/>
<addaction name="separator"/>
<addaction name="action_preferences"/>
</widget>
<widget class="QStatusBar" name="statusBar" >
<property name="mouseTracking" >
<widget class="QStatusBar" name="statusBar">
<property name="mouseTracking">
<bool>true</bool>
</property>
</widget>
<action name="action_add" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_add">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/add_book.svg</normaloff>:/images/add_book.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Add books</string>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>A</string>
</property>
<property name="autoRepeat" >
<property name="autoRepeat">
<bool>false</bool>
</property>
</action>
<action name="action_del" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_del">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/trash.svg</normaloff>:/images/trash.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Remove books</string>
</property>
<property name="toolTip" >
<property name="toolTip">
<string>Remove books</string>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>Del</string>
</property>
</action>
<action name="action_edit" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_edit">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/edit_input.svg</normaloff>:/images/edit_input.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Edit meta information</string>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>E</string>
</property>
<property name="autoRepeat" >
<property name="autoRepeat">
<bool>false</bool>
</property>
</action>
<action name="action_sync" >
<property name="enabled" >
<action name="action_sync">
<property name="enabled">
<bool>false</bool>
</property>
<property name="icon" >
<iconset resource="images.qrc" >
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/sync.svg</normaloff>:/images/sync.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Send to device</string>
</property>
</action>
<action name="action_save" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_save">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/save.svg</normaloff>:/images/save.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Save to disk</string>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>S</string>
</property>
</action>
<action name="action_news" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_news">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/news.svg</normaloff>:/images/news.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Fetch news</string>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>F</string>
</property>
</action>
<action name="action_convert" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_convert">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/convert.svg</normaloff>:/images/convert.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Convert E-books</string>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>C</string>
</property>
</action>
<action name="action_view" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_view">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/view.svg</normaloff>:/images/view.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>View</string>
</property>
<property name="shortcut" >
<property name="shortcut">
<string>V</string>
</property>
</action>
<action name="action_open_containing_folder" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_open_containing_folder">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/document_open.svg</normaloff>:/images/document_open.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Open containing folder</string>
</property>
</action>
<action name="action_show_book_details" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_show_book_details">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/dialog_information.svg</normaloff>:/images/dialog_information.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Show book details</string>
</property>
</action>
<action name="action_books_by_same_author" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_books_by_same_author">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/user_profile.svg</normaloff>:/images/user_profile.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Books by same author</string>
</property>
</action>
<action name="action_books_in_this_series" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_books_in_this_series">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/books_in_series.svg</normaloff>:/images/books_in_series.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Books in this series</string>
</property>
</action>
<action name="action_books_by_this_publisher" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_books_by_this_publisher">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/publisher.png</normaloff>:/images/publisher.png</iconset>
</property>
<property name="text" >
<property name="text">
<string>Books by this publisher</string>
</property>
</action>
<action name="action_books_with_the_same_tags" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_books_with_the_same_tags">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/tags.svg</normaloff>:/images/tags.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Books with the same tags</string>
</property>
</action>
<action name="action_send_specific_format_to_device" >
<property name="icon" >
<iconset resource="images.qrc" >
<action name="action_send_specific_format_to_device">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/book.svg</normaloff>:/images/book.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Send specific format to device</string>
</property>
</action>
<action name="action_preferences">
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/config.svg</normaloff>:/images/config.svg</iconset>
</property>
<property name="text">
<string>Preferences</string>
</property>
<property name="toolTip">
<string>Configure calibre</string>
</property>
<property name="shortcut">
<string>Ctrl+P</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
@ -694,7 +711,7 @@
</customwidget>
</customwidgets>
<resources>
<include location="images.qrc" />
<include location="images.qrc"/>
</resources>
<connections>
<connection>
@ -703,11 +720,11 @@
<receiver>search</receiver>
<slot>clear()</slot>
<hints>
<hint type="sourcelabel" >
<hint type="sourcelabel">
<x>787</x>
<y>215</y>
</hint>
<hint type="destinationlabel" >
<hint type="destinationlabel">
<x>755</x>
<y>213</y>
</hint>

View File

@ -10,11 +10,17 @@ _server = None
def get_external_ip():
'Get IP address of interface used to connect to the outside world'
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('google.com', 0))
return s.getsockname()[0]
ipaddr = socket.gethostbyname(socket.gethostname())
except:
return '127.0.0.1'
ipaddr = '127.0.0.1'
if ipaddr == '127.0.0.1':
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('google.com', 0))
ipaddr = s.getsockname()[0]
except:
pass
return ipaddr
def start_server():
global _server
@ -33,6 +39,7 @@ def publish(desc, type, port, properties=None, add_hostname=True):
:param properties: An optional dictionary whose keys and values will be put
into the TXT record.
'''
port = int(port)
server = start_server()
hostname = socket.gethostname()
if add_hostname: