diff options
-rw-r--r-- | indra/newview/llaisapi.cpp | 21 | ||||
-rw-r--r-- | indra/newview/llaisapi.h | 1 | ||||
-rw-r--r-- | indra/newview/llinventorygallery.h | 1 | ||||
-rw-r--r-- | indra/newview/llpanelmaininventory.cpp | 47 | ||||
-rw-r--r-- | indra/newview/llpanelmaininventory.h | 3 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_main_inventory.xml | 114 |
6 files changed, 98 insertions, 89 deletions
diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index e16029f063..6d13a06c54 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -924,6 +924,16 @@ void AISUpdate::clearParseResults() mCategoryIds.clear(); } +void AISUpdate::checkTimeout() +{ + if (mTimer.hasExpired()) + { + llcoro::suspend(); + LLCoros::checkStop(); + mTimer.setTimerExpirySec(debugLoggingEnabled("Inventory") ? EXPIRY_SECONDS_DEBUG : EXPIRY_SECONDS_LIVE); + } +} + void AISUpdate::parseUpdate(const LLSD& update) { clearParseResults(); @@ -1281,12 +1291,7 @@ void AISUpdate::parseDescendentCount(const LLUUID& category_id, const LLSD& embe void AISUpdate::parseEmbedded(const LLSD& embedded, S32 depth) { - if (mTimer.hasExpired()) - { - llcoro::suspend(); - LLCoros::checkStop(); - mTimer.setTimerExpirySec(debugLoggingEnabled("Inventory") ? EXPIRY_SECONDS_DEBUG : EXPIRY_SECONDS_LIVE); - } + checkTimeout(); if (embedded.has("links")) // _embedded in a category { @@ -1408,6 +1413,8 @@ void AISUpdate::parseEmbeddedCategories(const LLSD& categories, S32 depth) void AISUpdate::doUpdate() { + checkTimeout(); + // Do version/descendant accounting. for (std::map<LLUUID,S32>::const_iterator catit = mCatDescendentDeltas.begin(); catit != mCatDescendentDeltas.end(); ++catit) @@ -1571,6 +1578,8 @@ void AISUpdate::doUpdate() } } + checkTimeout(); + gInventory.notifyObservers(); } diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 1969448627..6afbbbd16e 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -123,6 +123,7 @@ public: void doUpdate(); private: void clearParseResults(); + void checkTimeout(); // Debug is very log-heavy, give it more time or it will take forever to process // Todo: find a way to make throttle static isntead of per-request diff --git a/indra/newview/llinventorygallery.h b/indra/newview/llinventorygallery.h index 1760535524..2cf038b7d8 100644 --- a/indra/newview/llinventorygallery.h +++ b/indra/newview/llinventorygallery.h @@ -128,6 +128,7 @@ public: bool hasDescendents(const LLUUID& cat_id); bool hasVisibleItems(); void handleModifiedFilter(); + LLScrollContainer* getScrollableContainer() { return mScrollPanel; } protected: diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 98099dd407..7cd6d7cb82 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -266,6 +266,8 @@ BOOL LLPanelMainInventory::postBuild() comb_gallery_filter.markDefault(); mCombinationGalleryPanel->setRootChangedCallback(boost::bind(&LLPanelMainInventory::onCombinationRootChanged, this, true)); + mCombinationScroller = getChild<LLView>("combination_scroller"); + initListCommandsHandlers(); const std::string texture_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost()); @@ -928,6 +930,7 @@ void LLPanelMainInventory::draw() mActivePanel->setSortOrder(order); mResortActivePanel = false; } + LLPanel::draw(); updateItemcountText(); updateCombinationVisibility(); @@ -1503,7 +1506,7 @@ void LLPanelMainInventory::toggleViewMode() getChild<LLPanel>("default_inventory_panel")->setVisible(!mSingleFolderMode); getChild<LLPanel>("single_folder_inventory")->setVisible(mSingleFolderMode && isListViewMode()); getChild<LLPanel>("gallery_view_inventory")->setVisible(mSingleFolderMode && isGalleryViewMode()); - getChild<LLPanel>("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); + getChild<LLUICtrl>("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); getChild<LLLayoutPanel>("nav_buttons")->setVisible(mSingleFolderMode); getChild<LLButton>("view_mode_btn")->setImageOverlay(mSingleFolderMode ? getString("default_mode_btn") : getString("single_folder_mode_btn")); @@ -2214,19 +2217,41 @@ void LLPanelMainInventory::updateCombinationVisibility() { if(mSingleFolderMode && isCombinationViewMode()) { - bool is_gallery_empty = !mCombinationGalleryPanel->hasVisibleItems(); - bool show_inv_pane = mCombinationInventoryPanel->hasVisibleItems() || is_gallery_empty || mForceShowInvLayout; - getChild<LLLayoutPanel>("comb_gallery_layout")->setVisible(!is_gallery_empty); - getChild<LLLayoutPanel>("comb_inventory_layout")->setVisible(show_inv_pane); - mCombinationInventoryPanel->getRootFolder()->setForceArrange(!show_inv_pane); - if(mCombinationInventoryPanel->hasVisibleItems()) + LLRect inner_rect = mCombinationInventoryPanel->getScrollableContainer()->getScrolledViewRect(); + LLRect inv_rect = mCombinationInventoryPanel->getRect(); + inv_rect.mBottom = 0; + inv_rect.mRight = inv_rect.mLeft + inner_rect.getWidth(); + if (!mCombinationGalleryPanel->hasVisibleItems() || mCombinationInventoryPanel->hasVisibleItems()) + { + inv_rect.mTop = inv_rect.mBottom + inner_rect.getHeight(); + } + else { - mForceShowInvLayout = false; + inv_rect.mTop = inv_rect.mBottom; } - if(is_gallery_empty) + + inner_rect = mCombinationGalleryPanel->getScrollableContainer()->getScrolledViewRect(); + LLRect galery_rect = mCombinationGalleryPanel->getRect(); + galery_rect.mBottom = inv_rect.mTop; + if (mCombinationGalleryPanel->hasVisibleItems()) { - mCombinationGalleryPanel->handleModifiedFilter(); + mCombinationGalleryPanel->setVisible(true); + galery_rect.mTop = galery_rect.mBottom + inner_rect.getHeight(); } + else + { + mCombinationGalleryPanel->setVisible(false); + galery_rect.mTop = galery_rect.mBottom; + } + + LLRect scroller_rect = mCombinationScroller->getRect(); + scroller_rect.mBottom = 0; + scroller_rect.mTop = scroller_rect.mBottom + inv_rect.getHeight() + galery_rect.getHeight(); + scroller_rect.mRight = scroller_rect.mLeft + llmax(inv_rect.getWidth(), galery_rect.getWidth()); + + mCombinationScroller->setRect(scroller_rect); + mCombinationGalleryPanel->handleReshape(galery_rect, false); + mCombinationInventoryPanel->handleReshape(inv_rect, false); getActivePanel()->getRootFolder(); } @@ -2293,7 +2318,7 @@ void LLPanelMainInventory::setViewMode(EViewModeType mode) getChild<LLPanel>("single_folder_inventory")->setVisible(mSingleFolderMode && isListViewMode()); getChild<LLPanel>("gallery_view_inventory")->setVisible(mSingleFolderMode && isGalleryViewMode()); - getChild<LLPanel>("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); + getChild<LLUICtrl>("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); if(isListViewMode()) { diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index e5b9ba929d..8e7ad776b0 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -143,8 +143,6 @@ protected: static BOOL filtersVisible(void* user_data); void onClearSearch(); - static void onFoldersByName(void *user_data); - static BOOL checkFoldersByName(void *user_data); static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward); void onFilterSelected(); @@ -196,6 +194,7 @@ private: LLInventorySingleFolderPanel* mCombinationInventoryPanel; LLInventoryGallery* mCombinationGalleryPanel; + LLView* mCombinationScroller; boost::signals2::connection mListViewRootUpdatedConnection; boost::signals2::connection mGalleryRootUpdatedConnection; diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 5bc0113367..f772c1fde2 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -327,7 +327,7 @@ follows="all" layout="topleft" /> </panel> - <panel + <scroll_container follows="all" halign="center" height="372" @@ -337,74 +337,48 @@ top_delta="0" visible="false" width="312"> - <layout_stack - follows="all" - height="372" - width="312" - animate="false" - drag_handle_gap="13" - drag_handle_thickness="6" - drag_handle_first_indent="18" - drag_handle_second_indent="18" - drag_handle_color="AddPaymentPanel" - drag_handle_shift="5" - show_drag_handle="true" - top="0" - left="0" - orientation="vertical"> - <layout_panel - border="false" - bevel_style="in" - user_resize="true" - auto_resize="true" - height="246" - width="312" - min_width="150" - name="comb_gallery_layout"> - <panel - class="inventory_gallery" - filename="panel_inventory_gallery.xml" - left="0" - top_pad="0" - height="246" - width="312" - name="comb_gallery_view_inv" - background_visible="true" - follows="all" - layout="topleft"> + <panel + name="combination_scroller" + follows="all" + layout="topleft" + left="0" + top="0" + height="20" + width="291"> + <panel + class="inventory_gallery" + filename="panel_inventory_gallery.xml" + follows="left|right" + layout="topleft" + left="0" + top="0" + height="10" + width="290" + name="comb_gallery_view_inv" + background_visible="true"> + </panel> + <single_folder_inventory_panel + name="comb_single_folder_inv" + follows="left|right" + layout="topleft" + left="0" + top="200" + height="10" + width="290" + show_item_link_overlays="true" + bg_opaque_color="DkGray2" + bg_alpha_color="DkGray2" + background_visible="true" + border="false" + bevel_style="none" + scroll.reserve_scroll_corner="false"> + <item + single_folder_mode="true" + folder_indentation="-8"/> + <folder + single_folder_mode="true" + folder_indentation="-8"/> + </single_folder_inventory_panel> </panel> - </layout_panel> - <layout_panel - border="false" - bevel_style="in" - user_resize="true" - auto_resize="true" - height="126" - width="312" - name="comb_inventory_layout"> - <single_folder_inventory_panel - name="comb_single_folder_inv" - follows="all" - left="0" - top="1" - height="126" - width="312" - layout="topleft" - show_item_link_overlays="true" - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - border="false" - bevel_style="none" - scroll.reserve_scroll_corner="false"> - <item - single_folder_mode="true" - folder_indentation="-8"/> - <folder - single_folder_mode="true" - folder_indentation="-8"/> - </single_folder_inventory_panel> - </layout_panel> - </layout_stack> - </panel> + </scroll_container> </panel> |