linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #06023
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3044: Remember list sorting & splitter positions
------------------------------------------------------------
revno: 3044
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Tue 2012-09-11 00:14:27 +0200
message:
Remember list sorting & splitter positions
modified:
changelog.txt
dcpp/SettingsManager.cpp
dcpp/SettingsManager.h
win32/ADLSearchFrame.cpp
win32/DirectoryListingFrame.cpp
win32/DirectoryListingFrame.h
win32/FinishedFrameBase.h
win32/HubFrame.cpp
win32/PublicHubsFrame.cpp
win32/QueueFrame.cpp
win32/SearchFrame.cpp
win32/TransferView.cpp
win32/UsersFrame.cpp
win32/UsersFrame.h
win32/WinUtil.cpp
win32/WinUtil.h
--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk
Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'changelog.txt'
--- changelog.txt 2012-09-04 17:58:06 +0000
+++ changelog.txt 2012-09-10 22:14:27 +0000
@@ -37,6 +37,7 @@
* Update Boost to version 1.51
* Merge 2 identical active mode settings (poy)
* Fix NAT-PMP renewal (poy)
+* [L#226968] Remember list sorting & splitter positions (poy)
-- 0.799 2012-05-05 --
* Add icons (iceman50)
=== modified file 'dcpp/SettingsManager.cpp'
--- dcpp/SettingsManager.cpp 2012-09-09 14:31:02 +0000
+++ dcpp/SettingsManager.cpp 2012-09-10 22:14:27 +0000
@@ -67,6 +67,10 @@
"AutoDropInterval", "AutoDropElapsed", "AutoDropInactivity", "AutoDropMinSources",
"AutoDropFilesize",
"BalloonMainChat", "BalloonPM", "BalloonPMWindow", "BalloonFinishedDL", "BalloonFinishedFL",
+ "ADLSearchFrameSort", "ConnectionsSort", "DirectoryListingFrameSort", "DownloadsSort",
+ "FinishedDLFilesSort", "FinishedDLUsersSort", "FinishedULFilesSort",
+ "FinishedULUsersSort", "HubFrameSort", "PublicHubsFrameSort", "QueueFrameSort",
+ "SearchFrameSort", "UsersFrameSort",
"AwayIdle", "AutoRefreshTime", "AutoSearchLimit", "BufferSize", "DownloadSlots",
"HubLastLogLines", "MagnetAction", "MaxCommandLength", "MaxCompression", "MaxDownloadSpeed",
"MaxFilelistSize", "MaxHashSpeed", "MaxMessageLines", "MaxPMWindows", "MinMessageLines",
@@ -101,7 +105,8 @@
"TotalUpload", "TotalDownload",
"SENTRY",
// Floats
- "TransfersPanedPos", "QueuePanedPos", "SearchPanedPos",
+ "FileListPanedPos", "HubPanedPos", "QueuePanedPos", "SearchPanedPos",
+ "TransfersPanedPos", "UsersPanedPos",
"SENTRY"
};
@@ -304,9 +309,12 @@
setDefault(TOOLBAR_SIZE, 20);
setDefault(TAB_WIDTH, 150);
setDefault(TAB_STYLE, TAB_STYLE_OD | TAB_STYLE_BROWSER);
- setDefault(TRANSFERS_PANED_POS, .7);
+ setDefault(FILE_LIST_PANED_POS, .3);
+ setDefault(HUB_PANED_POS, .7);
setDefault(QUEUE_PANED_POS, .3);
setDefault(SEARCH_PANED_POS, .2);
+ setDefault(TRANSFERS_PANED_POS, .7);
+ setDefault(USERS_PANED_POS, .7);
setDefault(KEEP_FINISHED_FILES, false);
setDefault(MIN_MESSAGE_LINES, 1);
setDefault(MAX_MESSAGE_LINES, 10);
=== modified file 'dcpp/SettingsManager.h'
--- dcpp/SettingsManager.h 2012-09-03 19:14:25 +0000
+++ dcpp/SettingsManager.h 2012-09-10 22:14:27 +0000
@@ -100,6 +100,11 @@
BALLOON_MAIN_CHAT, BALLOON_PM, BALLOON_PM_WINDOW, BALLOON_FINISHED_DL, BALLOON_FINISHED_FL,
+ ADLSEARCHFRAME_SORT, CONNECTIONS_SORT, DIRECTORYLISTINGFRAME_SORT, DOWNLOADS_SORT,
+ FINISHED_DL_FILES_SORT, FINISHED_DL_USERS_SORT, FINISHED_UL_FILES_SORT,
+ FINISHED_UL_USERS_SORT, HUBFRAME_SORT, PUBLICHUBSFRAME_SORT, QUEUEFRAME_SORT,
+ SEARCHFRAME_SORT, USERSFRAME_SORT,
+
// uncategorized
AWAY_IDLE, AUTO_REFRESH_TIME, AUTO_SEARCH_LIMIT, BUFFER_SIZE, DOWNLOAD_SLOTS,
HUB_LAST_LOG_LINES, MAGNET_ACTION, MAX_COMMAND_LENGTH, MAX_COMPRESSION, MAX_DOWNLOAD_SPEED,
@@ -138,8 +143,9 @@
TOTAL_UPLOAD = INT64_FIRST, TOTAL_DOWNLOAD,
INT64_LAST };
- enum FloatSetting { FLOAT_FIRST = INT64_LAST +1,
- TRANSFERS_PANED_POS = FLOAT_FIRST, QUEUE_PANED_POS, SEARCH_PANED_POS,
+ enum FloatSetting { FLOAT_FIRST = INT64_LAST + 1,
+ FILE_LIST_PANED_POS = FLOAT_FIRST, HUB_PANED_POS, QUEUE_PANED_POS, SEARCH_PANED_POS,
+ TRANSFERS_PANED_POS, USERS_PANED_POS,
FLOAT_LAST, SETTINGS_LAST = FLOAT_LAST };
enum { INCOMING_ACTIVE, INCOMING_ACTIVE_UPNP, INCOMING_PASSIVE };
=== modified file 'win32/ADLSearchFrame.cpp'
--- win32/ADLSearchFrame.cpp 2012-06-21 18:52:47 +0000
+++ win32/ADLSearchFrame.cpp 2012-09-10 22:14:27 +0000
@@ -66,6 +66,7 @@
{
auto cs = WinUtil::Seeds::table;
+ cs.style |= LVS_NOSORTHEADER;
cs.lvStyle |= LVS_EX_CHECKBOXES;
items = grid->addChild(cs);
grid->setWidget(items, 0, 0, 1, 6);
=== modified file 'win32/DirectoryListingFrame.cpp'
--- win32/DirectoryListingFrame.cpp 2012-09-04 19:55:12 +0000
+++ win32/DirectoryListingFrame.cpp 2012-09-10 22:14:27 +0000
@@ -230,6 +230,7 @@
searchGrid(0),
searchBox(0),
filterMethod(0),
+ paned(0),
dirs(0),
files(0),
speed(aSpeed),
@@ -293,7 +294,7 @@
searchGrid->setEnabled(false);
searchGrid->setVisible(false);
- auto paned = grid->addChild(SplitterContainer::Seed(0.3));
+ paned = grid->addChild(SplitterContainer::Seed(SETTING(FILE_LIST_PANED_POS)));
{
dirs = paned->addChild(WidgetDirs::Seed(WinUtil::Seeds::treeView));
@@ -312,8 +313,9 @@
addWidget(files);
files->setSmallImageList(WinUtil::fileImages);
+
WinUtil::makeColumns(files, filesColumns, COLUMN_LAST, SETTING(DIRECTORYLISTINGFRAME_ORDER), SETTING(DIRECTORYLISTINGFRAME_WIDTHS));
- files->setSort(COLUMN_FILENAME);
+ WinUtil::setTableSort(files, COLUMN_LAST, SettingsManager::DIRECTORYLISTINGFRAME_SORT, COLUMN_FILENAME);
files->onDblClicked([this] { handleDoubleClickFiles(); });
files->onKeyDown([this](int c) { return handleKeyDownFiles(c); });
@@ -379,7 +381,7 @@
{
auto showTree = addChild(WinUtil::Seeds::splitCheckBox);
showTree->setChecked(true);
- showTree->onClicked([this, showTree, paned] {
+ showTree->onClicked([this, showTree] {
auto checked = showTree->getChecked();
dirs->setEnabled(checked);
paned->maximize(checked ? nullptr : files);
@@ -606,8 +608,11 @@
}
void DirectoryListingFrame::postClosing() {
+ SettingsManager::getInstance()->set(SettingsManager::FILE_LIST_PANED_POS, paned->getSplitterPos(0));
+
SettingsManager::getInstance()->set(SettingsManager::DIRECTORYLISTINGFRAME_ORDER, WinUtil::toString(files->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::DIRECTORYLISTINGFRAME_WIDTHS, WinUtil::toString(files->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::DIRECTORYLISTINGFRAME_SORT, WinUtil::getTableSort(files));
}
void DirectoryListingFrame::handleSearchSelChanged() {
=== modified file 'win32/DirectoryListingFrame.h'
--- win32/DirectoryListingFrame.h 2012-09-04 19:55:12 +0000
+++ win32/DirectoryListingFrame.h 2012-09-10 22:14:27 +0000
@@ -174,6 +174,8 @@
ComboBoxPtr searchBox;
ComboBoxPtr filterMethod;
+ SplitterContainerPtr paned;
+
typedef TypedTree<ItemInfo, true, dwt::VirtualTree> WidgetDirs;
typedef WidgetDirs* WidgetDirsPtr;
WidgetDirsPtr dirs;
=== modified file 'win32/FinishedFrameBase.h'
--- win32/FinishedFrameBase.h 2012-07-11 17:13:42 +0000
+++ win32/FinishedFrameBase.h 2012-09-10 22:14:27 +0000
@@ -107,9 +107,11 @@
files->setTableStyle(LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT);
this->addWidget(files);
- WinUtil::makeColumns(files, filesColumns, FILES_COLUMN_LAST, SettingsManager::getInstance()->get(in_UL ? SettingsManager::FINISHED_UL_FILES_ORDER : SettingsManager::FINISHED_DL_FILES_ORDER),
+ WinUtil::makeColumns(files, filesColumns, FILES_COLUMN_LAST,
+ SettingsManager::getInstance()->get(in_UL ? SettingsManager::FINISHED_UL_FILES_ORDER : SettingsManager::FINISHED_DL_FILES_ORDER),
SettingsManager::getInstance()->get(in_UL ? SettingsManager::FINISHED_UL_FILES_WIDTHS : SettingsManager::FINISHED_DL_FILES_WIDTHS));
- files->setSort(FILES_COLUMN_TIME);
+ WinUtil::setTableSort(files, FILES_COLUMN_LAST,
+ in_UL ? SettingsManager::FINISHED_UL_FILES_SORT : SettingsManager::FINISHED_DL_FILES_SORT, FILES_COLUMN_TIME);
files->setSmallImageList(WinUtil::fileImages);
@@ -123,9 +125,11 @@
users->setTableStyle(LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT);
this->addWidget(users);
- WinUtil::makeColumns(users, usersColumns, USERS_COLUMN_LAST, SettingsManager::getInstance()->get(in_UL ? SettingsManager::FINISHED_UL_USERS_ORDER : SettingsManager::FINISHED_DL_USERS_ORDER),
+ WinUtil::makeColumns(users, usersColumns, USERS_COLUMN_LAST,
+ SettingsManager::getInstance()->get(in_UL ? SettingsManager::FINISHED_UL_USERS_ORDER : SettingsManager::FINISHED_DL_USERS_ORDER),
SettingsManager::getInstance()->get(in_UL ? SettingsManager::FINISHED_UL_USERS_WIDTHS : SettingsManager::FINISHED_DL_USERS_WIDTHS));
- users->setSort(USERS_COLUMN_TIME);
+ WinUtil::setTableSort(users, USERS_COLUMN_LAST,
+ in_UL ? SettingsManager::FINISHED_UL_USERS_SORT : SettingsManager::FINISHED_DL_USERS_SORT, USERS_COLUMN_TIME);
users->setSmallImageList(WinUtil::userImages);
@@ -187,10 +191,12 @@
void postClosing() {
saveColumns(files,
in_UL ? SettingsManager::FINISHED_UL_FILES_ORDER : SettingsManager::FINISHED_DL_FILES_ORDER,
- in_UL ? SettingsManager::FINISHED_UL_FILES_WIDTHS : SettingsManager::FINISHED_DL_FILES_WIDTHS);
+ in_UL ? SettingsManager::FINISHED_UL_FILES_WIDTHS : SettingsManager::FINISHED_DL_FILES_WIDTHS,
+ in_UL ? SettingsManager::FINISHED_UL_FILES_SORT : SettingsManager::FINISHED_DL_FILES_SORT);
saveColumns(users,
in_UL ? SettingsManager::FINISHED_UL_USERS_ORDER : SettingsManager::FINISHED_DL_USERS_ORDER,
- in_UL ? SettingsManager::FINISHED_UL_USERS_WIDTHS : SettingsManager::FINISHED_DL_USERS_WIDTHS);
+ in_UL ? SettingsManager::FINISHED_UL_USERS_WIDTHS : SettingsManager::FINISHED_DL_USERS_WIDTHS,
+ in_UL ? SettingsManager::FINISHED_UL_USERS_SORT : SettingsManager::FINISHED_DL_USERS_SORT);
if(!in_UL)
SettingsManager::getInstance()->set(SettingsManager::FINISHED_DL_ONLY_FULL, bOnlyFull);
@@ -600,13 +606,15 @@
return 0;
}
- void saveColumns(dwt::TablePtr table, SettingsManager::StrSetting order, SettingsManager::StrSetting widths) {
+ template<typename TableType>
+ void saveColumns(TableType table, SettingsManager::StrSetting order, SettingsManager::StrSetting widths, SettingsManager::IntSetting sort) {
SettingsManager::getInstance()->set(order, WinUtil::toString(table->getColumnOrder()));
SettingsManager::getInstance()->set(widths, WinUtil::toString(table->getColumnWidths()));
+ SettingsManager::getInstance()->set(sort, WinUtil::getTableSort(table));
}
template<typename TableType>
- void clearTable(TableType* table) {
+ void clearTable(TableType table) {
table->clear();
}
inline void clearTables() {
=== modified file 'win32/HubFrame.cpp'
--- win32/HubFrame.cpp 2012-09-09 14:31:02 +0000
+++ win32/HubFrame.cpp 2012-09-10 22:14:27 +0000
@@ -183,7 +183,7 @@
hubMenu(false),
inTabComplete(false)
{
- paned = addChild(SplitterContainer::Seed(0.7));
+ paned = addChild(SplitterContainer::Seed(SETTING(HUB_PANED_POS)));
createChat(paned);
chat->setHelpId(IDH_HUB_CHAT);
@@ -207,8 +207,9 @@
addWidget(users);
users->setSmallImageList(WinUtil::userImages);
+
WinUtil::makeColumns(users, usersColumns, COLUMN_LAST, SETTING(HUBFRAME_ORDER), SETTING(HUBFRAME_WIDTHS));
- users->setSort(COLUMN_NICK);
+ WinUtil::setTableSort(users, COLUMN_LAST, SettingsManager::HUBFRAME_SORT, COLUMN_NICK);
users->onDblClicked([this] { handleDoubleClickUsers(); });
users->onKeyDown([this](int c) { return handleUsersKeyDown(c); });
@@ -306,13 +307,16 @@
}
void HubFrame::postClosing() {
+ clearUserList();
+ clearTaskList();
+
SettingsManager::getInstance()->set(SettingsManager::GET_USER_INFO, showUsers->getChecked());
- clearUserList();
- clearTaskList();
+ SettingsManager::getInstance()->set(SettingsManager::HUB_PANED_POS, paned->getSplitterPos(0));
SettingsManager::getInstance()->set(SettingsManager::HUBFRAME_ORDER, WinUtil::toString(users->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::HUBFRAME_WIDTHS, WinUtil::toString(users->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::HUBFRAME_SORT, WinUtil::getTableSort(users));
}
void HubFrame::layout() {
=== modified file 'win32/PublicHubsFrame.cpp'
--- win32/PublicHubsFrame.cpp 2012-07-11 17:13:42 +0000
+++ win32/PublicHubsFrame.cpp 2012-09-10 22:14:27 +0000
@@ -123,7 +123,7 @@
}
WinUtil::makeColumns(hubs, hubsColumns, COLUMN_LAST, SETTING(PUBLICHUBSFRAME_ORDER), SETTING(PUBLICHUBSFRAME_WIDTHS));
- hubs->setSort(COLUMN_USERS, false);
+ WinUtil::setTableSort(hubs, COLUMN_LAST, SettingsManager::PUBLICHUBSFRAME_SORT, COLUMN_USERS, false);
hubs->onDblClicked([this] { openSelected(); });
hubs->onKeyDown([this](int c) { return handleKeyDown(c); });
@@ -228,6 +228,7 @@
void PublicHubsFrame::postClosing() {
SettingsManager::getInstance()->set(SettingsManager::PUBLICHUBSFRAME_ORDER, WinUtil::toString(hubs->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::PUBLICHUBSFRAME_WIDTHS, WinUtil::toString(hubs->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::PUBLICHUBSFRAME_SORT, WinUtil::getTableSort(hubs));
}
void PublicHubsFrame::layout() {
=== modified file 'win32/QueueFrame.cpp'
--- win32/QueueFrame.cpp 2012-07-11 17:13:42 +0000
+++ win32/QueueFrame.cpp 2012-09-10 22:14:27 +0000
@@ -88,8 +88,9 @@
addWidget(files, ALWAYS_FOCUS);
files->setSmallImageList(WinUtil::fileImages);
+
WinUtil::makeColumns(files, filesColumns, COLUMN_LAST, SETTING(QUEUEFRAME_ORDER), SETTING(QUEUEFRAME_WIDTHS));
- files->setSort(COLUMN_TARGET);
+ WinUtil::setTableSort(files, COLUMN_LAST, SettingsManager::QUEUEFRAME_SORT, COLUMN_TARGET);
files->onKeyDown([this](int c) { return handleKeyDownFiles(c); });
files->onContextMenu([this](const dwt::ScreenCoordinate &sc) { return handleFilesContextMenu(sc); });
@@ -229,8 +230,10 @@
void QueueFrame::postClosing() {
SettingsManager::getInstance()->set(SettingsManager::QUEUE_PANED_POS, paned->getSplitterPos(0));
+
SettingsManager::getInstance()->set(SettingsManager::QUEUEFRAME_ORDER, WinUtil::toString(files->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::QUEUEFRAME_WIDTHS, WinUtil::toString(files->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::QUEUEFRAME_SORT, WinUtil::getTableSort(files));
}
void QueueFrame::addQueueItem(QueueItemPtr&& ii, bool single) {
=== modified file 'win32/SearchFrame.cpp'
--- win32/SearchFrame.cpp 2012-07-12 13:17:54 +0000
+++ win32/SearchFrame.cpp 2012-09-10 22:14:27 +0000
@@ -258,7 +258,9 @@
addWidget(results);
results->setSmallImageList(WinUtil::fileImages);
+
WinUtil::makeColumns(results, resultsColumns, COLUMN_LAST, SETTING(SEARCHFRAME_ORDER), SETTING(SEARCHFRAME_WIDTHS));
+ WinUtil::setTableSort(results, COLUMN_LAST, SettingsManager::SEARCHFRAME_SORT, -1);
results->onDblClicked([this] { handleDownload(); });
results->onKeyDown([this](int c) { return handleKeyDown(c); });
@@ -384,6 +386,7 @@
SettingsManager::getInstance()->set(SettingsManager::SEARCHFRAME_ORDER, WinUtil::toString(results->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::SEARCHFRAME_WIDTHS, WinUtil::toString(results->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::SEARCHFRAME_SORT, WinUtil::getTableSort(results));
}
void SearchFrame::SearchInfo::view() {
=== modified file 'win32/TransferView.cpp'
--- win32/TransferView.cpp 2012-08-08 16:25:39 +0000
+++ win32/TransferView.cpp 2012-09-10 22:14:27 +0000
@@ -119,9 +119,9 @@
connections->setSmallImageList(arrows);
WinUtil::makeColumns(connections, connectionColumns, CONNECTION_COLUMN_LAST, SETTING(CONNECTIONS_ORDER), SETTING(CONNECTIONS_WIDTHS));
+ WinUtil::setTableSort(connections, CONNECTION_COLUMN_LAST, SettingsManager::CONNECTIONS_SORT, CONNECTION_COLUMN_USER);
WinUtil::setColor(connections);
- connections->setSort(CONNECTION_COLUMN_USER);
connections->onContextMenu([this](const dwt::ScreenCoordinate &sc) { return handleConnectionsMenu(sc); });
connections->onKeyDown([this](int c) { return handleKeyDown(c); });
@@ -133,7 +133,8 @@
downloads = downloadsWindow->addChild(WidgetDownloads::Seed(WinUtil::Seeds::table));
WinUtil::makeColumns(downloads, downloadColumns, DOWNLOAD_COLUMN_LAST, SETTING(DOWNLOADS_ORDER), SETTING(DOWNLOADS_WIDTHS));
- downloads->setSort(DOWNLOAD_COLUMN_STATUS);
+ WinUtil::setTableSort(downloads, DOWNLOAD_COLUMN_LAST, SettingsManager::DOWNLOADS_SORT, DOWNLOAD_COLUMN_STATUS);
+
WinUtil::setColor(downloads);
downloads->setSmallImageList(WinUtil::fileImages);
@@ -170,9 +171,11 @@
void TransferView::handleDestroy() {
SettingsManager::getInstance()->set(SettingsManager::CONNECTIONS_ORDER, WinUtil::toString(connections->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::CONNECTIONS_WIDTHS, WinUtil::toString(connections->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::CONNECTIONS_SORT, WinUtil::getTableSort(connections));
SettingsManager::getInstance()->set(SettingsManager::DOWNLOADS_ORDER, WinUtil::toString(downloads->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::DOWNLOADS_WIDTHS, WinUtil::toString(downloads->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::DOWNLOADS_SORT, WinUtil::getTableSort(downloads));
}
bool TransferView::handleConnectionsMenu(dwt::ScreenCoordinate pt) {
=== modified file 'win32/UsersFrame.cpp'
--- win32/UsersFrame.cpp 2012-06-23 12:31:10 +0000
+++ win32/UsersFrame.cpp 2012-09-10 22:14:27 +0000
@@ -107,6 +107,7 @@
UsersFrame::UsersFrame(TabViewPtr parent) :
BaseType(parent, T_("Users"), IDH_USERS, IDI_USERS, false),
grid(0),
+splitter(0),
users(0),
scroll(0),
userInfo(0),
@@ -118,7 +119,7 @@
grid->row(0).align = GridInfo::STRETCH;
{
- auto splitter = grid->addChild(SplitterContainer::Seed(0.7));
+ splitter = grid->addChild(SplitterContainer::Seed(SETTING(USERS_PANED_POS)));
if(!userIcons) {
const dwt::Point size(16, 16);
@@ -135,7 +136,7 @@
addWidget(users);
WinUtil::makeColumns(users, usersColumns, COLUMN_LAST, SETTING(USERSFRAME_ORDER), SETTING(USERSFRAME_WIDTHS));
- users->setSort(COLUMN_NICK);
+ WinUtil::setTableSort(users, COLUMN_LAST, SettingsManager::USERSFRAME_SORT, COLUMN_NICK);
// TODO check default (browse vs get)
users->onDblClicked([this] { handleGetList(); });
@@ -232,8 +233,11 @@
}
void UsersFrame::postClosing() {
+ SettingsManager::getInstance()->set(SettingsManager::USERS_PANED_POS, splitter->getSplitterPos(0));
+
SettingsManager::getInstance()->set(SettingsManager::USERSFRAME_ORDER, WinUtil::toString(users->getColumnOrder()));
SettingsManager::getInstance()->set(SettingsManager::USERSFRAME_WIDTHS, WinUtil::toString(users->getColumnWidths()));
+ SettingsManager::getInstance()->set(SettingsManager::USERSFRAME_SORT, WinUtil::getTableSort(users));
}
UsersFrame::UserInfo::UserInfo(const UserPtr& u, bool visible) :
=== modified file 'win32/UsersFrame.h'
--- win32/UsersFrame.h 2012-07-11 17:13:42 +0000
+++ win32/UsersFrame.h 2012-09-10 22:14:27 +0000
@@ -116,6 +116,8 @@
GridPtr grid;
+ SplitterContainerPtr splitter;
+
typedef TypedTable<UserInfo, false> WidgetUsers;
typedef WidgetUsers* WidgetUsersPtr;
WidgetUsersPtr users;
=== modified file 'win32/WinUtil.cpp'
--- win32/WinUtil.cpp 2012-09-10 18:41:39 +0000
+++ win32/WinUtil.cpp 2012-09-10 22:14:27 +0000
@@ -1553,6 +1553,21 @@
table->setColumnOrder(o);
}
+int WinUtil::tableSortSetting(int column, bool ascending) {
+ return ascending || column == -1 ? column : -column - 2;
+}
+
+pair<int, bool> WinUtil::tableSortSetting(int columnCount, int setting, int defaultCol, bool defaultAscending) {
+ SettingsManager::getInstance()->setDefault(static_cast<SettingsManager::IntSetting>(setting),
+ tableSortSetting(defaultCol, defaultAscending));
+ auto s = SettingsManager::getInstance()->get(static_cast<SettingsManager::IntSetting>(setting));
+ auto ret = s >= -1 ? make_pair(s, true) : make_pair(-s - 2, false);
+ if(ret.first >= columnCount) {
+ return make_pair(defaultCol, defaultAscending);
+ }
+ return ret;
+}
+
dwt::IconPtr WinUtil::createIcon(unsigned id, long size) {
return new dwt::Icon(id, dwt::Point(size, size));
}
=== modified file 'win32/WinUtil.h'
--- win32/WinUtil.h 2012-09-10 18:41:39 +0000
+++ win32/WinUtil.h 2012-09-10 22:14:27 +0000
@@ -211,30 +211,25 @@
static void makeColumns(dwt::TablePtr table, const ColumnInfo* columnInfo, size_t columnCount,
const string& order = Util::emptyString, const string& widths = Util::emptyString);
- template<typename T>
- static std::vector<int> splitTokens(const string& str, const T& defaults) {
- const size_t n = sizeof(defaults) / sizeof(defaults[0]);
- std::vector<int> ret(defaults, defaults + n);
- StringTokenizer<string> tokens(str, ',') ;
- const StringList& l = tokens.getTokens();
- for(size_t i = 0; i < std::min(ret.size(), l.size()); ++i) {
- ret[i] = Util::toInt(l[i]);
- }
- return ret;
- }
+ /* functions to get / set table column sorting. a little trick is used to encode both the
+ column index & the "ascending sort" flag into an int. */
+private:
+ static int tableSortSetting(int column, bool ascending);
+ static pair<int, bool> tableSortSetting(int columnCount, int setting, int defaultCol, bool defaultAscending);
+public:
+ template<typename T>
+ static int getTableSort(T table) {
+ return tableSortSetting(table->getSortColumn(), table->isAscending());
+ }
+ template<typename T>
+ static void setTableSort(T table, int columnCount, int setting, int defaultCol, bool defaultAscending = true) {
+ auto sort = tableSortSetting(columnCount, setting, defaultCol, defaultAscending);
+ table->setSort(sort.first, sort.second);
+ }
+
static std::string toString(const std::vector<int>& tokens);
static void toInts(const string& str, std::vector<int>& tokens);
- template<typename T>
- static TStringList getStrings(const T& t) {
- const size_t n = sizeof(t) / sizeof(t[0]);
- TStringList ret(n);
- for(size_t i = 0; i < n; ++i) {
- ret[i] = T_(t[i]);
- }
- return ret;
- }
-
// GUI related
private:
static pair<ButtonPtr, ButtonPtr> addDlgButtons(GridPtr grid);