Category Archives: Consulting

category

Getting itemRenderer position in an Advanced dataGrid

I was working on a project that required me to replicate MS Access type functionality, in Flex. One of those tasks was clicking into a cell in the datasheet view and knowing what column I selected, so that I could change that column’s datatype. I also have to know which cell specifically was clicked so that I can pass that data to the rest of the application.

Easier said than done. That is until Jonathan Branam came to my rescue on twitter.

@jwilker listData implement IDropInListItemRenderer – cast it to AdvancedDataGridListData how much do you need to know?

A little tweaking on my renderer, and what I had been struggling for the better part of a day, was solved, just like that.

My renderer implements IDropInListItemRenderer, and my listData() function translates listData into an adv dataGridListData

public function set listData(value:BaseListData):void
{
_listDataGrid = AdvancedDataGridListData(value);

cellText.text = _listDataGrid.label;

cellText.name = “DataSheet_Grid_Cell_” + _listDataGrid.columnIndex.toString() + “_” + _listDataGrid.rowIndex.toString();
}

Then inside my main component, my clickHandler can get the various values i need to do what I need to do (that sounds funny, I know)

private function handleClick( evt:MouseEvent ):void
{

var tmpColVo:ColumnVO = TableVO(_model.selectedDatabaseVO.selectedObjectVO).acColumns.getItemAt(evt.currentTarget.selectedCells[0].columnIndex) as ColumnVO;
_model.selectedDatabaseVO.dataSheetVO.selectedColumnVO = tmpColVo;
_model.selectedDatabaseVO.dataSheetVO.selectedColumnIndex = evt.currentTarget.selectedCells[0].columnIndex;
_model.selectedDatabaseVO.dataSheetVO.selectedRowIndex = evt.currentTarget.selectedCells[0].rowIndex;
_model.selectedDatabaseVO.dataSheetVO.selectedRowVo = evt.currentTarget.dataProvider.getItemAt(evt.currentTarget.selectedCells[0].rowIndex) as RowVO;

var selectionEvent:DataSheetSelectionEvent = new DataSheetSelectionEvent(true);

Access.instance.dispatchEvent(selectionEvent)

_model.selectedDatabaseVO.dataSheetVO.selectedColumnHeader = TableVO(_model.selectedDatabaseVO.selectedObjectVO).acColumns.getItemAt(evt.currentTarget.selectedCells[0].columnIndex).name;

}

The upside was that I was wrapping up my role in the project and was dreading not being able to walk away with no “I couldn’t finish” type things. Which was nice. My renderer is below. It was just a simple POC approach to help another developer with his task, and serve my immediate need, since I had a dependency on that functionality from the renderer.

Props to Jonathan for a solution under 140 characters that saved my day!

Timetracking challenge, complete!

And the winner is!

Harvest!

What brought Harvest in for the win? Namely the free acct, since I don’t do enough concurrent projects the price for the basic was bit steep at this time. But more than that, the iPhone/iNewton interface was nice, and the invoicing, superb.

Freshbooks invoicing was my biggest sticking point. Getting a PDF to attach was a PITA. I had to email myself the invoice as my client, which then presented a link to a PDF. Why I couldn’t just invoice and safe off as a PDF I dunno, but I couldn’t so that pushed Freshbooks out.

Apple Dashboard widgets are nice, I tried a few that were Freshbooks or Harvest friendly. Hated them all. I don’t hardly ever use my dashboard, so remembering to go in and stop a timer was a PITA.

The one thing I did like about Freshbooks, was a little pop up timer. Harvest has timers, but their in the site. Freshbooks allowed me to pop up a tiny window with the timer in it. that was I have to admit, very very handy.

So Harvest it is. NO regrest at this point, I’m very happy with it, I hope at some point to have enough reson to pay for it, because it is worth paying for if you’re a bigger player than I am, LOL.

Oh and the fact that Danny Wen, has commented here, and emailed me to help me with what I didn’t know about Harvest. That kind of thing goes a long way with me. It’s how I run 360Conferences, so I appreciate that level of dedication to the customer.

Been a little quiet

What with 360|Flex San Jose in under 30 days, planning Ignite Denver getting officially started, working on a really cool project for UM, keeping busy on The Flex Show, oh and trying to have a life, man oh man.

360|Flex: We’re in the home stretch, which means spending money, mainly. Ordering shirts, books, signage, plenty of cool things I’m not telling you about so I don’t spoil the surprise, etc.

It’s about this time we start wrangling the speakers for their presentations, which is a lot like herding cats. Really creative and brainy cats, but still, LOL.

Ignite: I’ve got some assets from O’Reilly (right), they’re working on a cool Rockies specific logo, which I can’t wait to see. I’m sending sponsor invite emails out today and this is the official “call for papers” as well. I’m hoping we can bring together the kick ass thinkers that make Denver/Boulder the ‘Silicon Mountain’ that we are. Whether speaker or sponsor, please email me (ignitedenver@gmail.com) and we can get this thing started!

UM: I’ve been on a pretty cool project with Universal Mind since June sometime, it’s been very fun, I’ve learned a lot and worked with a ton of cool folks. It’s due to run through the week of 360|Flex (How’s that for timing). I’m really hoping to we on more projects with them, I’ve really enjoyed my time these past two months.

Flex Show: Jeff and I have been busy trying to get a bit of an episode buffer built up so that we’re not as rushed with interviews, that’s been going rather well, so I’m pleased with that. We’ve had some incredible interviewees, that frankly blow my mind. It’s a privilege to speak to them, what’s more, most are speakers at 360|Flex, so that kinda doubly rocks. I’m really excite to be a part of the show and can’t wait to help Jeff with our video series (which is in episode 2 now, great work Jeff!)

Life: The ever illusive ‘life’. Between one of our dogs, essentially falling apart before our eyes in the span of 4 weeks, to traveling to Indianapolis scouting locations (mmmm for what I wonder), to being fully engaged in work, it’s been a busy time family-wise. Nicole and I have managed to get in a few hikes, which are always welcome. We went and saw a movie for the first time in a dogs age it seems, we’re getting the house a little more in order, 8 months after moving in, sheesh the stuff piles are never ending. I’ve had the unfortunate luck of having two clients turn dead beat, which blows, so that’s added some truly whack stress, since it’s hits us in the pocket book. But what ya gonna do, other than sic the lawyers on ‘em.

So that’s sort of a catch up on what’s been keeping me from blogging as frequently as I’d like. I’m hoping to really turn up the ignite posts as we get speaker submissions and add sponsors.

Follow up to my Time tracking quest

So I’ve been playing around with a few options and so far it’s narrowed down to two: Harvest, and Freshbooks.

Harvest has a few really good “pros” I like that I don’t have to email the invoice to myself under the clients name in order to get access to it as a PDF. That’s huge. I also like the way the invoice looks.

The major “con”, is that it’s not free. OK OK I know, good things aren’t and you get what you pay for, which in this case seems to be a pretty good time tracking app. The other “con” for me is that I can’t have a timer. Freshbooks, has a nice little pop up that runs a javascript timer, which is pretty handy.

Freshbooks, is great in that it’s free. but it’s a huge PITA to have to put my email in for each client, and “email” them the invoice, just so I can get a PDF of it. In my work with UM, I submit an invoie through their intranet, so emailing an invoice is pointless. That’s a huge drawback.

Both apps seem to have one thing that I’ve either not figured out, or just doesn’t work like I expect. When generating an invoice from time tracked, It desn’t populate a quantity cost. Even though in freshbooks’ case the time I’m logging is against a work type with an hourly rate. WEIRD. If, when I’m in invoice mode I then select a type that has the right billable rate, it clears the description. LAME. so in both apps, i have to paste my rate in for each line item, that’s no fun.

I’m still not sure which service I’ll go with, which sucks, since that means I have to enter my time 2x, ACK, that sucks!!!

I think Harvest would be the clear winner if it wasn’t 30 bones a month.