Complete GUI prototype (non-functional)
This commit is contained in:
parent
85923f2cc2
commit
aa9755b108
4
Makefile
4
Makefile
|
@ -33,13 +33,15 @@ SRCS = \
|
||||||
src/AtomFeed.cpp, \
|
src/AtomFeed.cpp, \
|
||||||
src/Config.cpp, \
|
src/Config.cpp, \
|
||||||
src/Entry.cpp, \
|
src/Entry.cpp, \
|
||||||
|
src/EntriesView.cpp, \
|
||||||
src/Feed.cpp, \
|
src/Feed.cpp, \
|
||||||
src/FeedView.cpp, \
|
src/FeedsView.cpp, \
|
||||||
src/Invocation.cpp \
|
src/Invocation.cpp \
|
||||||
src/MainWindow.cpp, \
|
src/MainWindow.cpp, \
|
||||||
src/Mimetypes.cpp, \
|
src/Mimetypes.cpp, \
|
||||||
src/ProtocolListener.cpp, \
|
src/ProtocolListener.cpp, \
|
||||||
src/RssFeed.cpp, \
|
src/RssFeed.cpp, \
|
||||||
|
src/UpdatesView.cpp, \
|
||||||
src/Util.cpp
|
src/Util.cpp
|
||||||
|
|
||||||
# Specify the resource definition files to use. Full or relative paths can be
|
# Specify the resource definition files to use. Full or relative paths can be
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "EntriesView.h"
|
||||||
|
|
||||||
|
#include <Box.h>
|
||||||
|
#include <Button.h>
|
||||||
|
#include <Message.h>
|
||||||
|
#include <LayoutBuilder.h>
|
||||||
|
#include <PopUpMenu.h>
|
||||||
|
#include <RadioButton.h>
|
||||||
|
#include <StringView.h>
|
||||||
|
#include <TextControl.h>
|
||||||
|
|
||||||
|
|
||||||
|
EntriesView::EntriesView(const char* name)
|
||||||
|
:
|
||||||
|
BGroupView(name, B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
{
|
||||||
|
_InitInterface();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
EntriesView::AttachedToWindow()
|
||||||
|
{
|
||||||
|
fEntryFolderText->SetTarget(this);
|
||||||
|
fEntryFolderBrowseButton->SetTarget(this);
|
||||||
|
fFileExtText->SetTarget(this);
|
||||||
|
|
||||||
|
fOpenAsHtmlRadio->SetTarget(this);
|
||||||
|
fOpenAsUrlRadio->SetTarget(this);
|
||||||
|
fOpenWithSelectButton->SetTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
EntriesView::MessageReceived(BMessage* msg)
|
||||||
|
{
|
||||||
|
switch (msg->what)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// BWindow::MessageReceived(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
EntriesView::_InitInterface()
|
||||||
|
{
|
||||||
|
// Saving
|
||||||
|
fSavingBox = new BBox("saving");
|
||||||
|
fSavingBox->SetLabel("Saving");
|
||||||
|
|
||||||
|
fEntryFolderLabel = new BStringView("entryFolderLabel", "Entry folder:");
|
||||||
|
fEntryFolderText = new BTextControl("entryFolder", "",
|
||||||
|
"/boot/home/feeds/", new BMessage('ssss'));
|
||||||
|
fEntryFolderBrowseButton = new BButton("entryFolderBrowse", "Browse…",
|
||||||
|
new BMessage('mmmm'));
|
||||||
|
|
||||||
|
fFileExtLabel = new BStringView("fileExtLabel", "File extension:");
|
||||||
|
fFileExtText = new BTextControl("fileExt", "", "", new BMessage('ffff'));
|
||||||
|
|
||||||
|
// Opening
|
||||||
|
fOpeningBox = new BBox("opening");
|
||||||
|
fOpeningBox->SetLabel("Opening");
|
||||||
|
|
||||||
|
fOpenAsLabel = new BStringView("openAsLabel", "Open as:");
|
||||||
|
fOpenAsHtmlRadio = new BRadioButton("asHtml", "HTML", new BMessage('ii'));
|
||||||
|
fOpenAsUrlRadio = new BRadioButton("asUrl", "URL", new BMessage('ii'));
|
||||||
|
|
||||||
|
fOpenWithLabel = new BStringView("openWithLabel", "Open with:");
|
||||||
|
fOpenWithMenu = new BPopUpMenu("openWith");
|
||||||
|
fOpenWithMenuField = new BMenuField("openWithMenu", NULL, fOpenWithMenu);
|
||||||
|
fOpenWithMenu->AddItem(new BMenuItem("WebPositive", new BMessage('wwww')));
|
||||||
|
fOpenWithSelectButton = new BButton("openWithSelect", "Select…",
|
||||||
|
new BMessage('mmmm'));
|
||||||
|
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(fSavingBox, B_HORIZONTAL)
|
||||||
|
.SetInsets(B_USE_ITEM_INSETS)
|
||||||
|
.AddGroup(B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.SetInsets(0, 20, B_USE_ITEM_INSETS, 0)
|
||||||
|
.Add(fEntryFolderLabel)
|
||||||
|
.Add(fFileExtLabel)
|
||||||
|
.End()
|
||||||
|
.AddGroup(B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.SetInsets(0, 20, B_USE_ITEM_INSETS, 0)
|
||||||
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fEntryFolderText)
|
||||||
|
.Add(fEntryFolderBrowseButton)
|
||||||
|
.End()
|
||||||
|
.Add(fFileExtText)
|
||||||
|
.End()
|
||||||
|
.End();
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(fOpeningBox, B_HORIZONTAL, B_USE_HALF_ITEM_SPACING)
|
||||||
|
.SetInsets(B_USE_ITEM_INSETS)
|
||||||
|
.AddGroup(B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.SetInsets(0, 20, B_USE_ITEM_INSETS, 0)
|
||||||
|
.Add(fOpenAsLabel)
|
||||||
|
.Add(fOpenWithLabel)
|
||||||
|
.End()
|
||||||
|
.AddGroup(B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.SetInsets(0, 20, B_USE_ITEM_INSETS, 0)
|
||||||
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fOpenAsHtmlRadio)
|
||||||
|
.Add(fOpenAsUrlRadio)
|
||||||
|
.AddGlue()
|
||||||
|
.End()
|
||||||
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fOpenWithMenuField)
|
||||||
|
.Add(fOpenWithSelectButton)
|
||||||
|
.End()
|
||||||
|
.End()
|
||||||
|
.End();
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
|
||||||
|
.SetInsets(B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fSavingBox)
|
||||||
|
.AddGlue()
|
||||||
|
.Add(fOpeningBox)
|
||||||
|
.AddGlue()
|
||||||
|
.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
#ifndef ENTRIESVIEW_H
|
||||||
|
#define ENTRIESVIEW_H
|
||||||
|
|
||||||
|
#include <SupportDefs.h>
|
||||||
|
#include <GroupView.h>
|
||||||
|
|
||||||
|
class BBox;
|
||||||
|
class BButton;
|
||||||
|
class BMenuField;
|
||||||
|
class BMessage;
|
||||||
|
class BPopUpMenu;
|
||||||
|
class BRadioButton;
|
||||||
|
class BStringView;
|
||||||
|
class BTextControl;
|
||||||
|
|
||||||
|
|
||||||
|
class EntriesView : public BGroupView {
|
||||||
|
public:
|
||||||
|
EntriesView(const char* name);
|
||||||
|
|
||||||
|
void MessageReceived(BMessage* msg);
|
||||||
|
void AttachedToWindow();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _InitInterface();
|
||||||
|
|
||||||
|
|
||||||
|
BBox* fSavingBox;
|
||||||
|
BStringView* fEntryFolderLabel;
|
||||||
|
BTextControl* fEntryFolderText;
|
||||||
|
BButton* fEntryFolderBrowseButton;
|
||||||
|
BStringView* fFileExtLabel;
|
||||||
|
BTextControl* fFileExtText;
|
||||||
|
|
||||||
|
BBox* fOpeningBox;
|
||||||
|
BStringView* fOpenAsLabel;
|
||||||
|
BRadioButton* fOpenAsHtmlRadio;
|
||||||
|
BRadioButton* fOpenAsUrlRadio;
|
||||||
|
BStringView* fOpenWithLabel;
|
||||||
|
BPopUpMenu* fOpenWithMenu;
|
||||||
|
BMenuField* fOpenWithMenuField;
|
||||||
|
BButton* fOpenWithSelectButton;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // ENTRIESVIEW_H
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
|
||||||
* All rights reserved. Distributed under the terms of the MIT license.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "FeedView.h"
|
|
||||||
|
|
||||||
#include <Message.h>
|
|
||||||
#include <GroupView.h>
|
|
||||||
#include <LayoutBuilder.h>
|
|
||||||
|
|
||||||
|
|
||||||
FeedView::FeedView(const char* name)
|
|
||||||
:
|
|
||||||
BGroupView(name, B_VERTICAL, B_USE_DEFAULT_SPACING)
|
|
||||||
{
|
|
||||||
_InitInterface();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
FeedView::MessageReceived(BMessage* msg)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
FeedView::_InitInterface()
|
|
||||||
{
|
|
||||||
fTestButton = new BButton("stest", "Do Nothing!",
|
|
||||||
new BMessage('pppq'));
|
|
||||||
fTestButton->SetTarget(this);
|
|
||||||
fTestButton->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE));
|
|
||||||
|
|
||||||
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
|
|
||||||
.SetInsets(0, B_USE_DEFAULT_SPACING, 0, 0)
|
|
||||||
.Add(fTestButton)
|
|
||||||
.SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING,
|
|
||||||
B_USE_DEFAULT_SPACING, B_USE_WINDOW_SPACING);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "FeedsView.h"
|
||||||
|
|
||||||
|
#include <Message.h>
|
||||||
|
#include <GroupView.h>
|
||||||
|
#include <LayoutBuilder.h>
|
||||||
|
#include <ListView.h>
|
||||||
|
#include <ScrollView.h>
|
||||||
|
#include <SeparatorView.h>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
FeedsView::FeedsView(const char* name)
|
||||||
|
:
|
||||||
|
BGroupView(name, B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
{
|
||||||
|
_InitInterface();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
FeedsView::MessageReceived(BMessage* msg)
|
||||||
|
{
|
||||||
|
switch (msg->what)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// BWindow::MessageReceived(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
FeedsView::_InitInterface()
|
||||||
|
{
|
||||||
|
// Feeds list
|
||||||
|
fFeedsListView = new BListView("feedsList");
|
||||||
|
fFeedsScrollView = new BScrollView("feedsScroll", fFeedsListView,
|
||||||
|
B_WILL_DRAW, false, true);
|
||||||
|
|
||||||
|
font_height fontHeight;
|
||||||
|
GetFontHeight(&fontHeight);
|
||||||
|
int16 buttonHeight = int16(fontHeight.ascent + fontHeight.descent + 12);
|
||||||
|
BSize charButtonSize(buttonHeight, buttonHeight);
|
||||||
|
|
||||||
|
// Add, Remove, Edit
|
||||||
|
fAddButton = new BButton("addFeed", "+",
|
||||||
|
new BMessage('fadd'));
|
||||||
|
fRemoveButton = new BButton("removeFeed", "-",
|
||||||
|
new BMessage('frem'));
|
||||||
|
|
||||||
|
fAddButton->SetTarget(this);
|
||||||
|
fAddButton->SetExplicitSize(charButtonSize);
|
||||||
|
fRemoveButton->SetTarget(this);
|
||||||
|
fRemoveButton->SetExplicitSize(charButtonSize);
|
||||||
|
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
|
||||||
|
.SetInsets(B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fFeedsScrollView)
|
||||||
|
|
||||||
|
// Add, Remove, and Edit buttons
|
||||||
|
.AddGroup(B_HORIZONTAL, 0, 0.0)
|
||||||
|
.Add(new BSeparatorView(B_VERTICAL))
|
||||||
|
.AddGroup(B_VERTICAL, 0, 0.0)
|
||||||
|
.AddGroup(B_HORIZONTAL, 1, 0.0)
|
||||||
|
.SetInsets(1)
|
||||||
|
.Add(fAddButton)
|
||||||
|
.Add(fRemoveButton)
|
||||||
|
.End()
|
||||||
|
.Add(new BSeparatorView(B_HORIZONTAL))
|
||||||
|
.End()
|
||||||
|
.Add(new BSeparatorView(B_VERTICAL))
|
||||||
|
.AddGlue()
|
||||||
|
.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,28 +2,32 @@
|
||||||
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
* All rights reserved. Distributed under the terms of the MIT license.
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
*/
|
*/
|
||||||
#ifndef FEEDVIEW_H
|
#ifndef FEEDSVIEW_H
|
||||||
#define FEEDVIEW_H
|
#define FEEDSVIEW_H
|
||||||
|
|
||||||
|
|
||||||
#include <Button.h>
|
#include <Button.h>
|
||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
#include <GroupView.h>
|
#include <GroupView.h>
|
||||||
|
|
||||||
|
|
||||||
class BMessage;
|
class BMessage;
|
||||||
|
class BListView;
|
||||||
|
class BScrollView;
|
||||||
|
|
||||||
|
|
||||||
class FeedView : public BGroupView {
|
class FeedsView : public BGroupView {
|
||||||
public:
|
public:
|
||||||
FeedView(const char* name);
|
FeedsView(const char* name);
|
||||||
|
|
||||||
void MessageReceived(BMessage* msg);
|
void MessageReceived(BMessage* msg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _InitInterface();
|
void _InitInterface();
|
||||||
|
|
||||||
BButton* fTestButton;
|
BButton* fAddButton;
|
||||||
|
BButton* fRemoveButton;
|
||||||
|
BListView* fFeedsListView;
|
||||||
|
BScrollView* fFeedsScrollView;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // FEEDVIEW_H
|
#endif // FEEDDVIEW_H
|
|
@ -12,7 +12,12 @@
|
||||||
#include <SeparatorView.h>
|
#include <SeparatorView.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
#include "App.h"
|
#include "App.h"
|
||||||
|
#include "EntriesView.h"
|
||||||
|
#include "FeedsView.h"
|
||||||
|
#include "UpdatesView.h"
|
||||||
|
|
||||||
|
|
||||||
enum { M_BUTTON_CLICKED = 'btcl' };
|
enum { M_BUTTON_CLICKED = 'btcl' };
|
||||||
|
@ -20,11 +25,10 @@ enum { M_BUTTON_CLICKED = 'btcl' };
|
||||||
|
|
||||||
MainWindow::MainWindow (void)
|
MainWindow::MainWindow (void)
|
||||||
:
|
:
|
||||||
BWindow(BRect(0,0,0,0), "Pogger", B_TITLED_WINDOW, B_NOT_RESIZABLE
|
BWindow(BRect(BPoint(-1000.0, -1000.0), BSize(520, 380)), "Pogger",
|
||||||
| B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS | B_QUIT_ON_WINDOW_CLOSE)
|
B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE)
|
||||||
{
|
{
|
||||||
_InitInterface();
|
_InitInterface();
|
||||||
MoveTo(BPoint(-1000.0,-1000.0));
|
|
||||||
MoveOnScreen();
|
MoveOnScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,13 +38,6 @@ MainWindow::MessageReceived(BMessage *msg)
|
||||||
{
|
{
|
||||||
switch (msg->what)
|
switch (msg->what)
|
||||||
{
|
{
|
||||||
case M_BUTTON_CLICKED:
|
|
||||||
{
|
|
||||||
BString labelString("Clicks: ");
|
|
||||||
labelString << "DAD";
|
|
||||||
SetTitle(labelString.String());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
BWindow::MessageReceived(msg);
|
BWindow::MessageReceived(msg);
|
||||||
|
@ -55,25 +52,32 @@ MainWindow::_InitInterface()
|
||||||
{
|
{
|
||||||
fBaseView = new BGroupView("baseView");
|
fBaseView = new BGroupView("baseView");
|
||||||
fTabView = new BTabView("tabView", B_WIDTH_FROM_WIDEST);
|
fTabView = new BTabView("tabView", B_WIDTH_FROM_WIDEST);
|
||||||
fFeedView = new FeedView("Feeds");
|
fFeedsView = new FeedsView("Feeds");
|
||||||
|
fEntriesView = new EntriesView("Entries");
|
||||||
|
fUpdatesView = new UpdatesView("Updates");
|
||||||
|
|
||||||
fTabView->AddTab(fFeedView);
|
fTabView->AddTab(fFeedsView);
|
||||||
|
fTabView->AddTab(fEntriesView);
|
||||||
|
fTabView->AddTab(fUpdatesView);
|
||||||
fTabView->SetBorder(B_NO_BORDER);
|
fTabView->SetBorder(B_NO_BORDER);
|
||||||
fBaseView->AddChild(fTabView);
|
fBaseView->AddChild(fTabView);
|
||||||
|
|
||||||
fServiceToggleButton = new BButton("stoggle", "Start Service",
|
fUpdateNowButton = new BButton("updateNow", "Update Now",
|
||||||
new BMessage('pppp'));
|
new BMessage('iiii'));
|
||||||
// fRevertButton->SetEnabled(false);
|
fUpdateNowButton->SetTarget(this);
|
||||||
fServiceToggleButton->SetTarget(this);
|
fUpdateNowButton->SetExplicitAlignment(
|
||||||
fServiceToggleButton->SetExplicitAlignment(
|
BAlignment(B_ALIGN_RIGHT, B_ALIGN_MIDDLE));
|
||||||
BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE));
|
|
||||||
|
|
||||||
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
|
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
|
||||||
.SetInsets(0, B_USE_DEFAULT_SPACING, 0, 0)
|
.SetInsets(0, B_USE_DEFAULT_SPACING, 0, 0)
|
||||||
.Add(fBaseView)
|
.Add(fBaseView)
|
||||||
.Add(new BSeparatorView(B_HORIZONTAL))
|
.Add(new BSeparatorView(B_HORIZONTAL))
|
||||||
.AddGroup(B_HORIZONTAL)
|
.AddGroup(B_HORIZONTAL)
|
||||||
.Add(fServiceToggleButton)
|
.Add(fUpdateNowButton)
|
||||||
.SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING,
|
.SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING,
|
||||||
B_USE_DEFAULT_SPACING, B_USE_WINDOW_SPACING);
|
B_USE_DEFAULT_SPACING, B_USE_WINDOW_SPACING)
|
||||||
|
.End()
|
||||||
|
.End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
#ifndef PREFWINDOW_H
|
#ifndef MAINWINDOW_H
|
||||||
#define PREFWINDOW_H
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
|
||||||
#include <Window.h>
|
#include <Window.h>
|
||||||
|
|
||||||
#include "FeedView.h"
|
|
||||||
|
|
||||||
class BButton;
|
class BButton;
|
||||||
class BGroupView;
|
class BGroupView;
|
||||||
class BTabView;
|
class BTabView;
|
||||||
|
class EntriesView;
|
||||||
|
class FeedsView;
|
||||||
|
class UpdatesView;
|
||||||
|
|
||||||
|
|
||||||
class MainWindow : public BWindow {
|
class MainWindow : public BWindow {
|
||||||
public:
|
public:
|
||||||
|
@ -21,10 +23,13 @@ private:
|
||||||
|
|
||||||
BGroupView* fBaseView;
|
BGroupView* fBaseView;
|
||||||
BTabView* fTabView;
|
BTabView* fTabView;
|
||||||
FeedView* fFeedView;
|
EntriesView* fEntriesView;
|
||||||
|
FeedsView* fFeedsView;
|
||||||
|
UpdatesView* fUpdatesView;
|
||||||
|
|
||||||
BButton* fServiceToggleButton;
|
BButton* fUpdateNowButton;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif // MAINWINDOW_H
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "UpdatesView.h"
|
||||||
|
|
||||||
|
#include <Box.h>
|
||||||
|
#include <CheckBox.h>
|
||||||
|
#include <Message.h>
|
||||||
|
#include <LayoutBuilder.h>
|
||||||
|
#include <Slider.h>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
|
||||||
|
UpdatesView::UpdatesView(const char* name)
|
||||||
|
:
|
||||||
|
BGroupView(name, B_VERTICAL, B_USE_DEFAULT_SPACING)
|
||||||
|
{
|
||||||
|
_InitInterface();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
UpdatesView::AttachedToWindow()
|
||||||
|
{
|
||||||
|
fNotifyNewCheck->SetTarget(this);
|
||||||
|
fNotifyErrorCheck->SetTarget(this);
|
||||||
|
fIntervalSlider->SetTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
UpdatesView::MessageReceived(BMessage* msg)
|
||||||
|
{
|
||||||
|
switch (msg->what)
|
||||||
|
{
|
||||||
|
case 'iiii':
|
||||||
|
{
|
||||||
|
_UpdateIntervalLabel();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// BWindow::MessageReceived(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
UpdatesView::_InitInterface()
|
||||||
|
{
|
||||||
|
fNotifyNewCheck = new BCheckBox("newNotify", "Notify about new entries",
|
||||||
|
new BMessage('nnnc'));
|
||||||
|
fNotifyErrorCheck = new BCheckBox("errorNotify",
|
||||||
|
"Notify about update failures", new BMessage('nnnc'));
|
||||||
|
|
||||||
|
fNotificationsBox = new BBox("notifications");
|
||||||
|
fNotificationsBox->SetLabel("Notifications");
|
||||||
|
|
||||||
|
fIntervalSlider =
|
||||||
|
new BSlider("interval", "Never automatically update",
|
||||||
|
new BMessage('iiii'), 0, 25, B_HORIZONTAL);
|
||||||
|
|
||||||
|
fIntervalSlider->SetHashMarkCount(26);
|
||||||
|
fIntervalSlider->SetHashMarks(B_HASH_MARKS_BOTTOM);
|
||||||
|
fIntervalSlider->SetLimitLabels("Never", "24 hours");
|
||||||
|
fIntervalSlider->SetModificationMessage(new BMessage('iiii'));
|
||||||
|
|
||||||
|
fSchedulingBox = new BBox("scheduling");
|
||||||
|
fSchedulingBox->SetLabel("Scheduling");
|
||||||
|
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(fNotificationsBox, B_VERTICAL, B_USE_HALF_ITEM_SPACING)
|
||||||
|
.SetInsets(B_USE_ITEM_INSETS)
|
||||||
|
.AddStrut(B_USE_ITEM_SPACING)
|
||||||
|
.Add(fNotifyNewCheck)
|
||||||
|
.Add(fNotifyErrorCheck)
|
||||||
|
.End();
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(fSchedulingBox, B_VERTICAL, B_USE_HALF_ITEM_SPACING)
|
||||||
|
.SetInsets(B_USE_ITEM_INSETS)
|
||||||
|
.AddStrut(B_USE_ITEM_SPACING)
|
||||||
|
.Add(fIntervalSlider)
|
||||||
|
.End();
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
|
||||||
|
.SetInsets(B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fNotificationsBox)
|
||||||
|
.AddGlue()
|
||||||
|
.Add(fSchedulingBox)
|
||||||
|
.AddGlue()
|
||||||
|
.End();
|
||||||
|
|
||||||
|
_UpdateIntervalLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
UpdatesView::_UpdateIntervalLabel()
|
||||||
|
{
|
||||||
|
int32 limit;
|
||||||
|
fIntervalSlider->GetLimits(NULL, &limit);
|
||||||
|
int index = fIntervalSlider->Position() / (1/(float)limit);
|
||||||
|
int hours = index - 1;
|
||||||
|
|
||||||
|
BString newLabel;
|
||||||
|
BString strHour;
|
||||||
|
strHour << (int)hours;
|
||||||
|
|
||||||
|
if (hours == -1 )
|
||||||
|
newLabel = "Never automatically update";
|
||||||
|
else if (hours == 0)
|
||||||
|
newLabel = "Update every 30 minutes";
|
||||||
|
else
|
||||||
|
newLabel = "Update every %hour% hours";
|
||||||
|
|
||||||
|
newLabel.ReplaceAll("%hour%", strHour);
|
||||||
|
fIntervalSlider->SetLabel(newLabel.String());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
#ifndef UPDATESVIEW_H
|
||||||
|
#define UPDATESVIEW_H
|
||||||
|
|
||||||
|
#include <Button.h>
|
||||||
|
#include <SupportDefs.h>
|
||||||
|
#include <GroupView.h>
|
||||||
|
|
||||||
|
class BBox;
|
||||||
|
class BCheckBox;
|
||||||
|
class BMessage;
|
||||||
|
class BSlider;
|
||||||
|
|
||||||
|
|
||||||
|
class UpdatesView : public BGroupView {
|
||||||
|
public:
|
||||||
|
UpdatesView(const char* name);
|
||||||
|
|
||||||
|
void MessageReceived(BMessage* msg);
|
||||||
|
void AttachedToWindow();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _InitInterface();
|
||||||
|
void _UpdateIntervalLabel();
|
||||||
|
|
||||||
|
BBox* fNotificationsBox;
|
||||||
|
BBox* fSchedulingBox;
|
||||||
|
|
||||||
|
BCheckBox* fNotifyNewCheck;
|
||||||
|
BCheckBox* fNotifyErrorCheck;
|
||||||
|
BSlider* fIntervalSlider;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // UPDATESVIEW_H
|
||||||
|
|
Ŝarĝante…
Reference in New Issue