linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #00336
[Branch ~linuxdcpp-team/linuxdcpp/trunk] Rev 345: Fixed sorting of 'Time Left' column in transfers view
------------------------------------------------------------
revno: 345
committer: Steven Sheehy <steven.sheehy@xxxxxxxxx>
branch nick: trunk
timestamp: Thu 2009-12-31 18:57:24 -0600
message:
Fixed sorting of 'Time Left' column in transfers view
modified:
Changelog.txt
linux/finishedtransfers.cc
linux/hub.cc
linux/publichubs.cc
linux/transfers.cc
linux/treeview.cc
linux/treeview.hh
--
lp:linuxdcpp
https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/trunk
Your team LinuxDC++ Team is subscribed to branch lp:linuxdcpp.
To unsubscribe from this branch go to https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/trunk/+edit-subscription.
=== modified file 'Changelog.txt'
--- Changelog.txt 2009-11-26 03:08:38 +0000
+++ Changelog.txt 2010-01-01 00:57:24 +0000
@@ -39,6 +39,7 @@
[2009-11-02] lp#339700: Fixed a rare crash when switching tabs. (Steven)
[2009-11-02] Bumped minimum scons version to 0.98.1 to resolve multiple building issues. (Steven)
[2009-11-25] Added issue with MacPorts boost lib not being detected on OS X to Readme. (thanks vszakats)
+[2009-12-31] lp#397365: Fixed sorting of "Time Left" column in transfers view. (Steven)
*** 1.0.3 2009-02-01 ***
[2008-08-10] lp#256236: Fixed a crash on startup when using auto-open options.
=== modified file 'linux/finishedtransfers.cc'
--- linux/finishedtransfers.cc 2009-03-12 05:47:55 +0000
+++ linux/finishedtransfers.cc 2010-01-01 00:57:24 +0000
@@ -52,7 +52,7 @@
fileView.insertColumn("Filename", G_TYPE_STRING, TreeView::STRING, 100);
fileView.insertColumn("Path", G_TYPE_STRING, TreeView::STRING, 200);
fileView.insertColumn("Nicks", G_TYPE_STRING, TreeView::STRING, 100);
- fileView.insertColumn("Transferred", G_TYPE_INT64, TreeView::BYTE, 100);
+ fileView.insertColumn("Transferred", G_TYPE_INT64, TreeView::SIZE, 100);
fileView.insertColumn("Speed", G_TYPE_INT64, TreeView::SPEED, 100);
fileView.insertColumn("CRC Checked", G_TYPE_STRING, TreeView::STRING, 100);
fileView.insertHiddenColumn("Target", G_TYPE_STRING);
@@ -73,7 +73,7 @@
userView.insertColumn("Nick", G_TYPE_STRING, TreeView::STRING, 100);
userView.insertColumn("Hub", G_TYPE_STRING, TreeView::STRING, 200);
userView.insertColumn("Files", G_TYPE_STRING, TreeView::STRING, 100);
- userView.insertColumn("Transferred", G_TYPE_INT64, TreeView::BYTE, 100);
+ userView.insertColumn("Transferred", G_TYPE_INT64, TreeView::SIZE, 100);
userView.insertColumn("Speed", G_TYPE_INT64, TreeView::SPEED, 100);
userView.insertHiddenColumn("CID", G_TYPE_STRING);
userView.insertHiddenColumn("Elapsed Time", G_TYPE_INT64);
=== modified file 'linux/hub.cc'
--- linux/hub.cc 2009-09-23 03:33:43 +0000
+++ linux/hub.cc 2010-01-01 00:57:24 +0000
@@ -52,7 +52,7 @@
// Initialize nick treeview
nickView.setView(GTK_TREE_VIEW(getWidget("nickView")), true, "hub");
nickView.insertColumn("Nick", G_TYPE_STRING, TreeView::ICON_STRING, 100, "Icon");
- nickView.insertColumn("Shared", G_TYPE_INT64, TreeView::BYTE, 75);
+ nickView.insertColumn("Shared", G_TYPE_INT64, TreeView::SIZE, 75);
nickView.insertColumn("Description", G_TYPE_STRING, TreeView::STRING, 85);
nickView.insertColumn("Tag", G_TYPE_STRING, TreeView::STRING, 100);
nickView.insertColumn("Connection", G_TYPE_STRING, TreeView::STRING, 85);
=== modified file 'linux/publichubs.cc'
--- linux/publichubs.cc 2009-03-12 05:47:55 +0000
+++ linux/publichubs.cc 2010-01-01 00:57:24 +0000
@@ -40,8 +40,8 @@
hubView.insertColumn("Users", G_TYPE_INT, TreeView::INT, 75);
hubView.insertColumn("Address", G_TYPE_STRING, TreeView::STRING, 110);
hubView.insertColumn("Country", G_TYPE_STRING, TreeView::STRING, 100);
- hubView.insertColumn("Shared", G_TYPE_INT64, TreeView::BYTE, 70);
- hubView.insertColumn("Min Share", G_TYPE_INT64, TreeView::BYTE, 80);
+ hubView.insertColumn("Shared", G_TYPE_INT64, TreeView::SIZE, 70);
+ hubView.insertColumn("Min Share", G_TYPE_INT64, TreeView::SIZE, 80);
hubView.insertColumn("Min Slots", G_TYPE_INT, TreeView::INT, 70);
hubView.insertColumn("Max Hubs", G_TYPE_INT, TreeView::INT, 80);
hubView.insertColumn("Max Users", G_TYPE_INT, TreeView::INT, 80);
=== modified file 'linux/transfers.cc'
--- linux/transfers.cc 2009-08-15 04:40:26 +0000
+++ linux/transfers.cc 2010-01-01 00:57:24 +0000
@@ -52,10 +52,10 @@
transferView.insertColumn("User", G_TYPE_STRING, TreeView::ICON_STRING, 150, "Icon");
transferView.insertColumn("Hub Name", G_TYPE_STRING, TreeView::STRING, 100);
transferView.insertColumn("Status", G_TYPE_STRING, TreeView::PROGRESS, 250, "Progress");
- transferView.insertColumn("Time Left", G_TYPE_STRING, TreeView::STRING, 85);
+ transferView.insertColumn("Time Left", G_TYPE_INT64, TreeView::TIME_LEFT, 85);
transferView.insertColumn("Speed", G_TYPE_INT64, TreeView::SPEED, 125);
transferView.insertColumn("Filename", G_TYPE_STRING, TreeView::STRING, 200);
- transferView.insertColumn("Size", G_TYPE_INT64, TreeView::BYTE, 125);
+ transferView.insertColumn("Size", G_TYPE_INT64, TreeView::SIZE, 125);
transferView.insertColumn("Path", G_TYPE_STRING, TreeView::STRING, 200);
transferView.insertColumn("IP", G_TYPE_STRING, TreeView::STRING, 175);
transferView.insertHiddenColumn("Icon", G_TYPE_STRING);
@@ -572,7 +572,7 @@
transferView.col("User"), users.substr(0, users.length()-2).c_str(),
transferView.col("Hub Name"), tmpHubs.str().substr(0, tmpHubs.str().length()-2).c_str(),
transferView.col("Speed"), speed,
- transferView.col("Time Left"), Util::formatSeconds(timeLeft).c_str(),
+ transferView.col("Time Left"), timeLeft,
transferView.col("Status"), stream.str().c_str(),
transferView.col("Progress"), static_cast<int>(progress),
transferView.col("Sort Order"), active ? (string("d").append(users)).c_str() : (string("w").append(users)).c_str(),
@@ -602,7 +602,7 @@
for (StringMap::const_iterator it = params.begin(); it != params.end(); ++it)
{
- if (it->first == "Size" || it->first == "Speed" || it->first == "Download Position")
+ if (it->first == "Size" || it->first == "Speed" || it->first == "Download Position" || it->first == "Time Left")
gtk_tree_store_set(transferStore, &iter, transferView.col(it->first), Util::toInt64(it->second), -1);
else if (it->first == "Progress" || it->first == "Failed")
gtk_tree_store_set(transferStore, &iter, transferView.col(it->first), Util::toInt(it->second), -1);
@@ -847,7 +847,7 @@
percent = static_cast<double>(tr->getPos() * 100.0)/ tr->getSize();
params["Progress"] = Util::toString(static_cast<int>(percent));
params["IP"] = tr->getUserConnection().getRemoteIp();
- params["Time Left"] = Util::formatSeconds(tr->getSecondsLeft());
+ params["Time Left"] = tr->getSecondsLeft() > 0 ? Util::toString(tr->getSecondsLeft()) : "-1";
params["Target"] = tr->getPath();
params["Hub URL"] = tr->getUserConnection().getHubUrl();
}
@@ -944,7 +944,7 @@
params["Sort Order"] = "w" + params["User"];
params["Failed"] = "1";
params["Speed"] = "-1";
- params["Time Left"] = "";
+ params["Time Left"] = "-1";
int64_t pos = QueueManager::getInstance()->getPos(dl->getPath()) + dl->getPos();
@@ -994,7 +994,7 @@
params["Failed"] = "1";
params["Sort Order"] = "w" + params["User"];
params["Speed"] = "-1";
- params["Time Left"] = "";
+ params["Time Left"] = "-1";
typedef Func2<Transfers, StringMap, bool> F2;
F2* f2 = new F2(this, &Transfers::updateTransfer_gui, params, cqi->getDownload());
@@ -1102,7 +1102,7 @@
params["Sort Order"] = "w" + params["User"];
params["Failed"] = "1";
params["Speed"] = "-1";
- params["Time Left"] = "";
+ params["Time Left"] = "-1";
typedef Func2<Transfers, StringMap, bool> F2;
F2* f2 = new F2(this, &Transfers::updateTransfer_gui, params, FALSE);
=== modified file 'linux/treeview.cc'
--- linux/treeview.cc 2009-09-17 13:33:37 +0000
+++ linux/treeview.cc 2010-01-01 00:57:24 +0000
@@ -185,29 +185,44 @@
void TreeView::speedDataFunc(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer column)
{
+ string speedString;
int64_t speed;
gtk_tree_model_get(model, iter, static_cast<Column*>(column)->pos, &speed, -1);
+
if (speed >= 0)
{
- std::string speed_str = dcpp::Util::formatBytes(speed);
- speed_str.append("/s");
-
- g_object_set(renderer, "text", speed_str.c_str(), NULL);
+ speedString = dcpp::Util::formatBytes(speed) + "/s";
}
- else g_object_set(renderer, "text", "", NULL);
+
+ g_object_set(renderer, "text", speedString.c_str(), NULL);
}
-void TreeView::byteDataFunc(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer column)
+void TreeView::sizeDataFunc(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer column)
{
+ string sizeString;
int64_t size;
gtk_tree_model_get(model, iter, static_cast<Column*>(column)->pos, &size, -1);
+
if (size >= 0)
{
- std::string size_str = dcpp::Util::formatBytes(size);
- g_object_set(renderer, "text", size_str.c_str(), NULL);
- }
- else
- g_object_set(renderer, "text", "", NULL);
+ sizeString = dcpp::Util::formatBytes(size);
+ }
+
+ g_object_set(renderer, "text", sizeString.c_str(), NULL);
+}
+
+void TreeView::timeLeftDataFunc(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer column)
+{
+ string timeLeftString;
+ int64_t seconds;
+ gtk_tree_model_get(model, iter, static_cast<Column*>(column)->pos, &seconds, -1);
+
+ if (seconds >= 0)
+ {
+ timeLeftString = dcpp::Util::formatSeconds(seconds);
+ }
+
+ g_object_set(renderer, "text", timeLeftString.c_str(), NULL);
}
void TreeView::addColumn_gui(Column& column)
@@ -222,11 +237,11 @@
col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
gtk_cell_renderer_text_new(), "text", column.pos, NULL);
break;
- case BYTE:
+ case SIZE:
renderer = gtk_cell_renderer_text_new();
col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
renderer, "text", column.pos, NULL);
- gtk_tree_view_column_set_cell_data_func(col, renderer, TreeView::byteDataFunc, &column, NULL);
+ gtk_tree_view_column_set_cell_data_func(col, renderer, TreeView::sizeDataFunc, &column, NULL);
break;
case SPEED:
renderer = gtk_cell_renderer_text_new();
@@ -234,6 +249,12 @@
renderer, "text", column.pos, NULL);
gtk_tree_view_column_set_cell_data_func(col, renderer, TreeView::speedDataFunc, &column, NULL);
break;
+ case TIME_LEFT:
+ renderer = gtk_cell_renderer_text_new();
+ col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
+ renderer, "text", column.pos, NULL);
+ gtk_tree_view_column_set_cell_data_func(col, renderer, TreeView::timeLeftDataFunc, &column, NULL);
+ break;
case STRINGR:
renderer = gtk_cell_renderer_text_new();
g_object_set(renderer, "xalign", 1.0, NULL);
@@ -284,7 +305,7 @@
gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED);
//make columns sortable
- if (column.type == STRING || column.type == INT || column.type == PROGRESS || column.type == BYTE || column.type == SPEED)
+ if (column.type != BOOL && column.type != PIXBUF && column.type != EDIT_STRING)
{
gtk_tree_view_column_set_sort_column_id(col, column.pos);
gtk_tree_view_column_set_sort_indicator(col, TRUE);
=== modified file 'linux/treeview.hh'
--- linux/treeview.hh 2009-06-16 23:54:40 +0000
+++ linux/treeview.hh 2010-01-01 00:57:24 +0000
@@ -41,7 +41,8 @@
EDIT_STRING,
PROGRESS,
SPEED,
- BYTE
+ SIZE,
+ TIME_LEFT
} columnType;
TreeView();
@@ -59,19 +60,7 @@
int col(const std::string &title);
void saveSettings();
std::string getString(GtkTreeIter *i, const std::string &column, GtkTreeModel *m = NULL);
- static void speedDataFunc(GtkTreeViewColumn*, GtkCellRenderer*, GtkTreeModel*, GtkTreeIter*, gpointer);
- static void byteDataFunc(GtkTreeViewColumn*, GtkCellRenderer*, GtkTreeModel*, GtkTreeIter*, gpointer);
- template<class T, class C>
- C getValue(GtkTreeIter *i, const std::string &column, GtkTreeModel *m = NULL)
- {
- if (m == NULL)
- m = gtk_tree_view_get_model(view);
- T value;
- assert(gtk_tree_model_get_column_type(m, col(column)) != G_TYPE_STRING);
- gtk_tree_model_get(m, i, col(column), &value, -1);
- return C(value);
- }
template<class T>
T getValue(GtkTreeIter *i, const std::string &column, GtkTreeModel *m = NULL)
{
@@ -82,6 +71,11 @@
gtk_tree_model_get(m, i, col(column), &value, -1);
return value;
}
+ template<class T, class C>
+ C getValue(GtkTreeIter *i, const std::string &column, GtkTreeModel *m = NULL)
+ {
+ return static_cast<C>(getValue<T>(i, column, m));
+ }
private:
class Column
@@ -91,7 +85,7 @@
Column(const std::string &title, int id, GType gtype, TreeView::columnType type, int width, const std::string &linkedCol = "") :
title(title), id(id), gtype(gtype), type(type), width(width), pos(id), linkedCol(linkedCol), visible(true) {};
Column(const std::string &title, int id, GType gtype) :
- title(title), id(id), gtype(gtype) {};
+ title(title), id(id), gtype(gtype), pos(id) {};
std::string title;
int id;
GType gtype;
@@ -110,6 +104,9 @@
void restoreSettings();
static gboolean popupMenu_gui(GtkWidget *widget, GdkEventButton *event, gpointer data);
static void toggleColumnVisibility(GtkMenuItem *item, gpointer data);
+ static void speedDataFunc(GtkTreeViewColumn*, GtkCellRenderer*, GtkTreeModel*, GtkTreeIter*, gpointer);
+ static void sizeDataFunc(GtkTreeViewColumn*, GtkCellRenderer*, GtkTreeModel*, GtkTreeIter*, gpointer);
+ static void timeLeftDataFunc(GtkTreeViewColumn*, GtkCellRenderer*, GtkTreeModel*, GtkTreeIter*, gpointer);
GtkTreeView *view;
std::string name; // Used to save settings