DC-SWAT Forum
Нужна помощь в создании мультистраничного приложения. - Версия для печати

+- DC-SWAT Forum (http://www.dc-swat.ru/forum)
+-- Форум: DreamShell (/forum-3.html)
+--- Форум: Programming (/forum-28.html)
+--- Тема: Нужна помощь в создании мультистраничного приложения. (/thread-1633.html)



Нужна помощь в создании мультистраничного приложения. - alex - 21.06.2011 23:04

Собственно вопрос к SWATу, как это осуществить?
Чтото я пытался на основе кода в Region changer сделать но ничего толком не вышло, тупо на другую страницу не переходит.

Будь другом объясни пожалуйста каким образом это делается, а лучше здесь пример кода xml разметки страниц и функции управляющей переходом по страницам в lua скрипте.


RE: Нужна помощь в создании мультистраничного приложения. - SWAT - 22.06.2011 08:45

Да не вопрос Smile
За страницы отвечает элемент cardstack, страницы в нем оформляются как панели первого уровня вложенности.

app.xml:
PHP код:
<?xml version="1.0" encoding="UTF-8"?>
<app name="App Name" version="1.0.0" icon="../../gui/icons/normal/default_app.png">
    <resources>
        <module src="../../modules/lua/luaDS.klf" />
        <font src="../../fonts/arial.ttf" type="ttf" size="18" name="arial" />
        <image src="../../gui/buttons/big_green2/normal.png" name="bNorm" />
        <image src="../../gui/buttons/big_green2/highlight.png" name="bHigh" />
        <image src="../../gui/buttons/big_green2/pressed.png" name="bPress" />
        <script type="text/lua" src="./lua/main.lua" />
    </resources>
    <body x="0" y="0" width="640" height="480" onload="AppName:Initialize()">
        <cardstack x="0" y="0" width="640" height="480" name="pages">
            <panel x="0" y="0" width="640" height="480" name="first-page">
                <label width="640" height="45" x="0" y="0" font="arial" color="#000000" text="Home page" />
                <input type="button" onclick="AppName:ShowPage(1)" normal="bNorm" highlight="bHigh" pressed="bPress" disabled="bNorm" x="233" y="180" width="181" height="40">
                    <label width="181" height="40" x="0" y="0" font="arial" color="#ffffff" text="Last page" />
                </input>
                <!-- Здесь контент первой/главной страницы. -->
            </panel>
            <panel x="0" y="0" width="640" height="480" name="last-page">
                <label width="640" height="45" x="0" y="0" font="arial" color="#000000" text="Last page" />
                <input type="button" onclick="AppName:ShowPage(0)" normal="bNorm" highlight="bHigh" pressed="bPress" disabled="bNorm" x="233" y="180" width="181" height="40">
                    <label width="181" height="40" x="0" y="0" font="arial" color="#ffffff" text="Home page" />
                </input>
                <!-- Здесь контент второй страницы. -->
            </panel>
        </cardstack>
    </body>
</app> 

lua/main.lua:
PHP код:
if not AppName then


    AppName 
= {
        
app nil,
        
pages nil
    
}

    
    function 
AppName:ShowPage(index
        return 
DS.GUI_CardStackShowIndex(self.pagesindex); 
    
end

    
    
function AppName:GetElement(name)
        
local el DS.listGetItemByName(self.app.elementsname);

        if 
el ~= nil then
            
return DS.GUI_AnyToWidget(el.data);
        
end
        
return nil;
    
end
    

    
function AppName:Initialize()

        if 
self.app == nil then
            
            self
.app DS.GetAppById(THIS_APP_ID);
            
            if 
self.app ~= nil then

                self
.pages self:GetElement("pages");
                
                return 
true;
            
end
        end
    end 


    
function AppName:Shutdown()
        
local app DS.GetAppByName("Main");
        
        if 
app ~= nil then
            DS
.OpenApp(app);
        
end
    end

end 

В данном случае ты можешь переключать страницы с помощью функции AppName:ShowPage(), аргумент который она принимает, является индексом страницы (т.е. положение ее в теле XML, по порядку начиная с нуля).