
commit 47b6646abaab96e6973d8015fe104ae726dd300e Author: Sebastian Baginski <sebthestampede@gmail.com> Date: Thu Mar 29 15:02:11 2012 +0200 option to customize and store state of layout in Network View tab --- changes/bug2727 | 3 + src/vidalia/network/NetViewer.cpp | 33 ++- src/vidalia/network/NetViewer.h | 2 + src/vidalia/network/NetViewer.ui | 618 ++++++++++++++++++++----------------- 4 files changed, 364 insertions(+), 292 deletions(-) diff --git a/changes/bug2727 b/changes/bug2727 new file mode 100644 index 0000000..1095804 --- /dev/null +++ b/changes/bug2727 @@ -0,0 +1,3 @@ + New Features: + o In Network View, store layout of network map panes. + Fixes ticket 2727. diff --git a/src/vidalia/network/NetViewer.cpp b/src/vidalia/network/NetViewer.cpp index 19871cb..4f7a4b8 100644 --- a/src/vidalia/network/NetViewer.cpp +++ b/src/vidalia/network/NetViewer.cpp @@ -39,11 +39,23 @@ #define MAX_RESOLVE_QUEUE_DELAY (30*1000) #endif +/* Settings key for main layout splitter state */ +#define SETTING_SPLITTER_MAIN "NetViewSplitMain" +/* Key for network map splitter */ +#define SETTING_SPLITTER_MAP "NetViewSplitMap" +/* Key for router description splitter */ +#define SETTING_SPLITTER_ROUT "NetViewSplitRouter" + +/* Default values for splitter states. */ +#define DEFAULT_SPLITTER_MAIN QByteArray() +#define DEFAULT_SPLITTER_MAP QByteArray() +#define DEFAULT_SPLITTER_ROUT QByteArray() + /** Constructor. Loads settings from VidaliaSettings. * \param parent The parent widget of this NetViewer object.\ */ NetViewer::NetViewer(QWidget *parent) - : VidaliaTab(tr("Network Map"), "", parent) + : VidaliaTab(tr("Network Map"), "NetViewer", parent) { /* Invoke Qt Designer generated QObject setup routine */ ui.setupUi(this); @@ -162,6 +174,25 @@ NetViewer::NetViewer(QWidget *parent) tb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); ui.horizontalLayout->addWidget(tb); + + /* Restore the state of each splitter */ + ui.spltMain->restoreState(getSetting(SETTING_SPLITTER_MAIN, + DEFAULT_SPLITTER_MAIN) + .toByteArray()); + ui.spltMap->restoreState(getSetting(SETTING_SPLITTER_MAP, + DEFAULT_SPLITTER_MAP) + .toByteArray()); + ui.spltRouter->restoreState(getSetting(SETTING_SPLITTER_ROUT, + DEFAULT_SPLITTER_ROUT) + .toByteArray()); +} + +/** Destructor. Saves splitter states to store layout. */ +NetViewer::~NetViewer() +{ + saveSetting(SETTING_SPLITTER_MAIN, ui.spltMain->saveState()); + saveSetting(SETTING_SPLITTER_MAP, ui.spltMap->saveState()); + saveSetting(SETTING_SPLITTER_ROUT, ui.spltRouter->saveState()); } /** Called when the user changes the UI translation. */ diff --git a/src/vidalia/network/NetViewer.h b/src/vidalia/network/NetViewer.h index c442a8c..b4f4ec3 100644 --- a/src/vidalia/network/NetViewer.h +++ b/src/vidalia/network/NetViewer.h @@ -45,6 +45,8 @@ class NetViewer : public VidaliaTab public: /** Default constructor */ NetViewer(QWidget* parent = 0); + /** Destructor */ + ~NetViewer(); public slots: /** Displays the network map window. */ diff --git a/src/vidalia/network/NetViewer.ui b/src/vidalia/network/NetViewer.ui index b5477a3..c4db045 100644 --- a/src/vidalia/network/NetViewer.ui +++ b/src/vidalia/network/NetViewer.ui @@ -7,315 +7,351 @@ <x>0</x> <y>0</y> <width>740</width> - <height>628</height> + <height>614</height> </rect> </property> <property name="windowTitle"> <string>Network Map</string> </property> - <layout class="QVBoxLayout" name="verticalLayout_7"> + <layout class="QVBoxLayout" name="verticalLayout_10"> <item> - <layout class="QHBoxLayout" name="horizontalLayout"/> - </item> - <item> - <layout class="QGridLayout" name="notificationLayout"> - <item row="1" column="0"> - <widget class="QLabel" name="lblOffline"> - <property name="text"> - <string><a href="server.offline">Why is my relay offline?</a></string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="lblConsensus"> - <property name="text"> - <string>If your relay isn't listed among the others, it may be because it doesn't have a Running flag yet. <a href="server.consensus">What's this?</a></string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QGridLayout" name="gridLayout_6"> - <item row="0" column="1"> - <widget class="QLineEdit" name="lineRouterSearch"> - <property name="minimumSize"> - <size> - <width>0</width> - <height>30</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>16777215</width> - <height>30</height> - </size> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="RouterListWidget" name="treeRouterList"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>1</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>175</width> - <height>0</height> - </size> - </property> - <property name="contextMenuPolicy"> - <enum>Qt::DefaultContextMenu</enum> - </property> - <property name="statusTip"> - <string/> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::ExtendedSelection</enum> - </property> - <property name="indentation"> + <widget class="QSplitter" name="spltMain"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <widget class="QWidget" name="layoutWidget"> + <layout class="QVBoxLayout" name="verticalLayout_9" stretch="0,1"> + <item> + <layout class="QGridLayout" name="notificationLayout"> + <item row="1" column="0"> + <widget class="QLabel" name="lblOffline"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string><a href="server.offline">Why is my relay offline?</a></string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="lblConsensus"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>If your relay isn't listed among the others, it may be because it doesn't have a Running flag yet. <a href="server.consensus">What's this?</a></string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QSplitter" name="spltMap"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <widget class="QWidget" name="layoutWidget_1"> + <layout class="QVBoxLayout" name="verticalLayout_8"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="topMargin"> + <number>0</number> + </property> + </layout> + </item> + <item> + <widget class="QFrame" name="frmMap"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>400</width> + <height>300</height> + </size> + </property> + <property name="contextMenuPolicy"> + <enum>Qt::NoContextMenu</enum> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QGridLayout" name="gridLayout_5"> + <item row="0" column="0"> + <layout class="QGridLayout" name="gridLayout"/> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="layoutWidget_2"> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <item> + <widget class="QLineEdit" name="lineRouterSearch"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="RouterListWidget" name="treeRouterList"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>175</width> + <height>0</height> + </size> + </property> + <property name="contextMenuPolicy"> + <enum>Qt::DefaultContextMenu</enum> + </property> + <property name="statusTip"> + <string/> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::ExtendedSelection</enum> + </property> + <property name="indentation"> + <number>0</number> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>3</number> + </property> + <column> + <property name="text"> + <string/> + </property> + </column> + <column> + <property name="text"> + <string/> + </property> + </column> + <column> + <property name="text"> + <string>Relay</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QSplitter" name="spltRouter"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> <number>0</number> </property> - <property name="sortingEnabled"> - <bool>true</bool> - </property> - <property name="columnCount"> - <number>3</number> - </property> - <column> - <property name="text"> - <string/> - </property> - </column> - <column> - <property name="text"> - <string/> - </property> - </column> - <column> - <property name="text"> - <string>Relay</string> - </property> - </column> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Exit circuits</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="CircuitListWidget" name="treeCircuitList"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>300</width> + <height>0</height> + </size> + </property> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> + </property> + <property name="statusTip"> + <string/> + </property> + <property name="sortingEnabled"> + <bool>false</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <column> + <property name="text"> + <string>Connection</string> + </property> + </column> + <column> + <property name="text"> + <string>Status</string> + </property> + </column> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>Internal circuits</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="CircuitListWidget" name="treeInternalCircuitList"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>300</width> + <height>0</height> + </size> + </property> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> + </property> + <property name="statusTip"> + <string/> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="sortingEnabled"> + <bool>false</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <column> + <property name="text"> + <string>Connection</string> + </property> + </column> + <column> + <property name="text"> + <string>Status</string> + </property> + </column> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_3"> + <attribute name="title"> + <string>Hidden Service circuits</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_6"> + <item> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <item> + <widget class="CircuitListWidget" name="treeHSCircuitList"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>300</width> + <height>0</height> + </size> + </property> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> + </property> + <property name="statusTip"> + <string/> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="sortingEnabled"> + <bool>false</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <column> + <property name="text"> + <string>Connection</string> + </property> + </column> + <column> + <property name="text"> + <string>Status</string> + </property> + </column> + </widget> + </item> + </layout> + </item> + </layout> + </widget> </widget> - </item> - <item row="0" column="0" rowspan="2"> - <widget class="QFrame" name="frmMap"> + <widget class="RouterDescriptorView" name="textRouterInfo"> <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>100</horstretch> <verstretch>100</verstretch> </sizepolicy> </property> - <property name="minimumSize"> - <size> - <width>400</width> - <height>300</height> - </size> - </property> <property name="contextMenuPolicy"> - <enum>Qt::NoContextMenu</enum> - </property> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> + <enum>Qt::DefaultContextMenu</enum> </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> + <property name="readOnly"> + <bool>true</bool> </property> - <layout class="QGridLayout" name="gridLayout_5"> - <item row="0" column="0"> - <layout class="QGridLayout" name="gridLayout"/> - </item> - </layout> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QSplitter" name="splitter"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <widget class="QTabWidget" name="tabWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tab"> - <attribute name="title"> - <string>Exit circuits</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="CircuitListWidget" name="treeCircuitList"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>300</width> - <height>0</height> - </size> - </property> - <property name="contextMenuPolicy"> - <enum>Qt::CustomContextMenu</enum> - </property> - <property name="statusTip"> - <string/> - </property> - <property name="sortingEnabled"> - <bool>false</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <column> - <property name="text"> - <string>Connection</string> - </property> - </column> - <column> - <property name="text"> - <string>Status</string> - </property> - </column> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab_2"> - <attribute name="title"> - <string>Internal circuits</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <item> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="CircuitListWidget" name="treeInternalCircuitList"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>300</width> - <height>0</height> - </size> - </property> - <property name="contextMenuPolicy"> - <enum>Qt::CustomContextMenu</enum> - </property> - <property name="statusTip"> - <string/> - </property> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Sunken</enum> - </property> - <property name="sortingEnabled"> - <bool>false</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <column> - <property name="text"> - <string>Connection</string> - </property> - </column> - <column> - <property name="text"> - <string>Status</string> - </property> - </column> - </widget> - </item> - </layout> - </item> - </layout> </widget> - <widget class="QWidget" name="tab_3"> - <attribute name="title"> - <string>Hidden Service circuits</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <item> - <layout class="QVBoxLayout" name="verticalLayout_5"> - <item> - <widget class="CircuitListWidget" name="treeHSCircuitList"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>300</width> - <height>0</height> - </size> - </property> - <property name="contextMenuPolicy"> - <enum>Qt::CustomContextMenu</enum> - </property> - <property name="statusTip"> - <string/> - </property> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Sunken</enum> - </property> - <property name="sortingEnabled"> - <bool>false</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <column> - <property name="text"> - <string>Connection</string> - </property> - </column> - <column> - <property name="text"> - <string>Status</string> - </property> - </column> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </widget> - <widget class="RouterDescriptorView" name="textRouterInfo"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="contextMenuPolicy"> - <enum>Qt::DefaultContextMenu</enum> - </property> - <property name="readOnly"> - <bool>true</bool> - </property> </widget> </widget> </item>