← Back to team overview

linuxdcpp-team team mailing list archive

[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