| 163 | |
| 164 | # This is literally a stripped down version of the market. |
| 165 | class ItemView(d.Display): |
| 166 | DEFAULT_COLS = ["Base Icon", |
| 167 | "Base Name", |
| 168 | "attr:power,,,True", |
| 169 | "attr:cpu,,,True"] |
| 170 | |
| 171 | def __init__(self, parent): |
| 172 | d.Display.__init__(self, parent) |
| 173 | self.activeItems = [] |
| 174 | |
| 175 | self.searchTimer = wx.Timer(self) |
| 176 | self.Bind(wx.EVT_TIMER, self.scheduleSearch, self.searchTimer) |
| 177 | |
| 178 | self.searchBox = parent.Parent.Parent.searchBox |
| 179 | # Bind search actions |
| 180 | self.searchBox.Bind(SBox.EVT_TEXT_ENTER, self.scheduleSearch) |
| 181 | self.searchBox.Bind(SBox.EVT_SEARCH_BTN, self.scheduleSearch) |
| 182 | self.searchBox.Bind(SBox.EVT_CANCEL_BTN, self.clearSearch) |
| 183 | self.searchBox.Bind(SBox.EVT_TEXT, self.delaySearch) |
| 184 | |
| 185 | self.update(Market.getInstance().getItemsWithOverrides()) |
| 186 | |
| 187 | def clearSearch(self, event=None): |
| 188 | if event: |
| 189 | self.searchBox.Clear() |
| 190 | self.update(Market.getInstance().getItemsWithOverrides()) |
| 191 | |
| 192 | def updateItems(self, updateDisplay=False): |
| 193 | if updateDisplay: |
| 194 | self.update(Market.getInstance().getItemsWithOverrides()) |
| 195 | |
| 196 | def delaySearch(self, evt): |
| 197 | sFit = Fit.getInstance() |
| 198 | self.searchTimer.Stop() |
| 199 | self.searchTimer.Start(sFit.serviceFittingOptions["marketSearchDelay"], True) |
| 200 | |
| 201 | def scheduleSearch(self, event=None): |
| 202 | sMkt = Market.getInstance() |
| 203 | |
| 204 | search = self.searchBox.GetLineText(0) |
| 205 | # Make sure we do not count wildcards as search symbol |
| 206 | realsearch = search.replace('*', '').replace('?', '') |
| 207 | # Show nothing if query is too short |
| 208 | if len(realsearch) < 3: |
| 209 | self.clearSearch() |
| 210 | return |
| 211 | |
| 212 | sMkt.searchItems(search, self.populateSearch, 'everything') |
| 213 | |
| 214 | def itemSort(self, item): |
| 215 | sMkt = Market.getInstance() |
| 216 | isFittable = item.group.name in sMkt.FIT_GROUPS or item.category.name in sMkt.FIT_CATEGORIES |
| 217 | return (not isFittable, *sMkt.itemSort(item)) |
| 218 | |
| 219 | def populateSearch(self, itemIDs): |
| 220 | items = Market.getItems(itemIDs) |
| 221 | self.update(items) |
| 222 | |